[
  {
    "path": ".codespellrc",
    "content": "[codespell]\nskip = .git,*.pdf,*.svg,*.tsv,man,formats.jsonl,sample_data,*.cast,golden\n# some ad-hoc or less common word spellings or vars used\n# `F`requency and such\nignore-regex = `[A-Z]`[a-z]+\\b\nignore-words-list = vertexes,wil,ned,parms,datas,sav,inport,miniscule\n"
  },
  {
    "path": ".devcontainer/Dockerfile",
    "content": "FROM python:3\n"
  },
  {
    "path": ".devcontainer/devcontainer.json",
    "content": "{\n    \"name\": \"VisiData\",\n    \"dockerFile\": \"Dockerfile\",\n    \"extensions\": [\n        \"ms-python.python\"\n    ],\n    \"postCreateCommand\": \".devcontainer/post-create.sh\"\n}\n"
  },
  {
    "path": ".devcontainer/launch.json",
    "content": "{\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"name\": \"Python: vd launch\",\n            \"type\": \"python\",\n            \"request\": \"launch\",\n            \"program\": \"${workspaceFolder}/bin/vd\",\n            \"args\": [\n                \"-f\",\n                \"pandas\",\n                \"${workspaceFolder}/sample_data/benchmark.csv\"\n            ],\n            \"console\": \"integratedTerminal\"\n        },\n        {\n            \"name\": \"Python: vd attach\",\n            \"type\": \"python\",\n            \"request\": \"attach\",\n            \"processId\": \"${command:pickProcess}\"\n        }\n    ]\n}\n"
  },
  {
    "path": ".devcontainer/post-create.sh",
    "content": "#!/bin/bash\n\nmake install-dev setup-vscode\n"
  },
  {
    "path": ".devcontainer/settings.json",
    "content": "{\n    \"python.pythonPath\": \"/usr/local/bin/python\",\n    \"python.testing.pytestArgs\": [\n        \"visidata\"\n    ],\n    \"python.testing.unittestEnabled\": false,\n    \"python.testing.nosetestsEnabled\": false,\n    \"python.testing.pytestEnabled\": true\n}\n"
  },
  {
    "path": ".gitattributes",
    "content": "www/asciinema-player.js binary\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "github: saulpw\npatreon: saulpw\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create an issue if anything doesn't appear to be working right.\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n**Small description**\n\n**Data to reproduce**\n\n[Please include a small amount of sample data that demonstrates the issue.]\n\n**Steps to reproduce**\n\n[If the issue takes more than a few commands, please attach a [saved commandlog](http://visidata.org/docs/save-restore/).]\n\n**Expected result**\n\n**Actual result with screenshot**\n\n[If there is an error message, please include the full stack trace shown with `Ctrl+E` or `vd --debug`.]\n\n**Configuration**\n\n- Does this issue reproduce without any plugins or configuration (using the `-N` CLI flag)?\n\n- Does this issue reproduce with either the [latest release](https://www.visidata.org/releases/), or with the [develop branch](https://www.visidata.org/install/#update-visidata-from-an-existing-installation)?\n\n**Additional context**\n\n- What platform and version are you using (Linux, MacOS, Windows)?\n\n- Which version of Python?\n\n- Which terminal are you using (for display and input issues)?\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature-request.md",
    "content": "---\nname: Feature request\nabout: Provide feedback on how you want VisiData to grow in the future.\ntitle: '[] '\nlabels: wishlist\nassignees: ''\n\n---\n\nWe want to hear your ideas about where VisiData can go and anything you think could be made smoother.\nWe consider all ideas that are feasible, but please don't be offended if we close it--we generally limit our open issues to bugs and small concrete feature requests that are part of the planned roadmap.\n\nIf you want to propose a command, please include:\n\n- [] what should the helpstring say\n- [] where should this command go in the menu system\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/loader-request.md",
    "content": "---\nname: Loader request\nabout: Suggest a loader that supports a new data format\ntitle: \"[loader] \"\nlabels: feature request\nassignees: ''\n\n---\n\nWe love to build loaders with people that are familiar with the format and how it is used.  Knowing about quirks and variations and usage-in-the-wild is very hepful.\n\nTo that end, a new loader can be created quite quickly with the following:\n\n1) A small sample representative dataset in that format.\n\n2) A basic Python script which queries and dumps the data (possibly using an external package).\n\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.md",
    "content": "---\nname: Question\nabout: Ask a question you have about VisiData.\ntitle: '[question]'\nlabels: question\nassignees: ''\n\n---\n\nIf you think your question would benefit from input from anyone in the community (e.g. 'How do I X in VisiData') consider [opening a Discussion instead](https://github.com/saulpw/visidata/discussions/new/choose).\n\nIf you think it would benefit from a more synchronised back-and-forth with Saul, consider joining us in libera.chat (#visidata) or [discord](https://bluebird.sh/chat).\n\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "- [ ] If contributing a core loader, [the loader checklist](https://visidata.org/docs/contributing#loader) was referenced.\n- [ ] If registering an external plugin, [the plugin checklist](https://visidata.org/docs/contributing#plugins) was referenced.\n"
  },
  {
    "path": ".github/workflows/main.yml",
    "content": "name: visidata-ci-build\non:\n  pull_request:\n    branches:\n      - stable\n      - develop\n  push:\n    branches:\n    - stable\n    - develop\n\njobs:\n  full-tests:\n\n    strategy:\n      matrix:\n        python-version: [\"3.9\", \"3.14\"]\n\n    runs-on: ubuntu-slim\n    timeout-minutes: 20\n    steps:\n    - uses: actions/checkout@v4\n\n    - name: Set up Python ${{ matrix.python-version }}\n      uses: actions/setup-python@v4\n      with:\n        python-version: ${{ matrix.python-version }}\n        cache: 'pip'\n\n    - name: Install VisiData with test dependencies\n      run: make install-test\n\n    - name: Run tests\n      run: make test\n\n  unit-tests:\n\n    strategy:\n      matrix:\n        python-version: [\"3.10\", \"3.11\", \"3.12\", \"3.13\"]\n\n    runs-on: ubuntu-slim\n    timeout-minutes: 10\n    steps:\n    - uses: actions/checkout@v4\n\n    - name: Set up Python ${{ matrix.python-version }}\n      uses: actions/setup-python@v4\n      with:\n        python-version: ${{ matrix.python-version }}\n        cache: 'pip'\n\n    - name: Install VisiData with test dependencies\n      run: make install-test\n\n    - name: Run unit tests\n      run: make test\n"
  },
  {
    "path": ".github/workflows/vdsql.yml",
    "content": "name: vdsql-testing\non:\n  pull_request:\n    branches:\n      - stable\n      - develop\n  push:\n    branches:\n      - stable\n      - develop\n\njobs:\n  run-tests:\n\n    strategy:\n      matrix:\n        python-version: [\"3.10\", \"3.14\"]\n\n    runs-on: ubuntu-slim\n    steps:\n    - uses: actions/checkout@v2\n\n    - name: Set up Python ${{ matrix.pythonversion }}\n      uses: actions/setup-python@v2\n      with:\n        python-version: ${{ matrix.python-version }}\n\n    - name: Install VisiData\n      run: make install\n\n    - name: Install vdsql\n      run: pip3 install visidata/apps/vdsql/\n\n    - name: Ensure it starts up\n      run: vdsql --version\n\n    - name: Run tests\n      run: make test-vdsql\n"
  },
  {
    "path": ".github/workflows/vgit.yml",
    "content": "name: vgit-testing\non:\n  pull_request:\n    branches:\n      - stable\n      - develop\n  push:\n    branches:\n      - stable\n      - develop\n\njobs:\n  run-tests:\n\n    strategy:\n      matrix:\n        python-version: [\"3.9\", \"3.10\", \"3.11\"]\n\n    runs-on: ubuntu-slim\n    steps:\n    - uses: actions/checkout@v2\n\n    - name: Set up Python ${{ matrix.pythonversion }}\n      uses: actions/setup-python@v2\n      with:\n        python-version: ${{ matrix.python-version }}\n\n    - name: Install VisiData\n      run: make install\n\n    - name: Install vgit\n      run: pip3 install visidata/apps/vgit/\n\n    - name: Ensure it starts up\n      run: vgit --version\n\n    - name: Create visidatarc\n      run: touch ~/.visidatarc\n\n    - name: Import vgit\n      run: echo \"import visidata.apps.vgit\" >> ~/.visidatarc\n\n    - name: Run tests\n      run: make test-vgit\n"
  },
  {
    "path": ".gitignore",
    "content": "__pycache__\n.tox/\n.idea/\n.vscode/\nvisidata.egg-info/\n*.egg-info/\n*v_env*\n*~\n*.swp\n*.swo\n*dist\n*_build\nbuild/\ntags\n/tests/log/\n# Mac files\n.DS_Store\n.direnv\n.envrc\n.meta\n\n# Generated man pages (run `make man` to build)\nvisidata/man/vd.1\nvisidata/man/visidata.1\nvisidata/man/vd.txt\ndocs/man.md\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"deps/pyxlsb\"]\n\tpath = deps/pyxlsb\n\turl = https://github.com/saulpw/pyxlsb.git\n\n[submodule \"deps/requests-cache\"]\n\tpath = deps/requests-cache\n\turl = https://github.com/saulpw/requests-cache.git\n"
  },
  {
    "path": ".gitpod.Dockerfile",
    "content": "FROM python:3\n"
  },
  {
    "path": ".gitpod.yml",
    "content": "image:\n  file: .gitpod.Dockerfile\n\ntasks:\n  - init: pip install -r ./dev/requirements-dev.txt && pip install -e .\n"
  },
  {
    "path": ".mailmap",
    "content": "# .mailmap - Consolidate git author identities\n# See: https://git-scm.com/docs/gitmailmap\n#\n# Format: Canonical Name <canonical@email.com> Old Name <old@email.com>\n# Lines map alternative identities to canonical form for git shortlog, blame, etc.\n\n# AJ Kerrigan\nAJ Kerrigan <kerrigan.aj@gmail.com> <aj@speckledmonkey.com>\nAJ Kerrigan <kerrigan.aj@gmail.com> <akerrigan@mdsol.com>\n\n# Anja Kefala\nAnja Kefala <anja.kefala@gmail.com> anjakefala <anja.kefala@gmail.com>\nAnja Kefala <anja.kefala@gmail.com> anjakefala <anja@voltrondata.com>\nAnja Kefala <anja.kefala@gmail.com> Kefala <anja.kefala@gmail.com>\nAnja Kefala <anja.kefala@gmail.com> <anja@voltrondata.com>\n\n# David Branner (was misconfigured as \"Your Name\")\nDavid Branner <brannerchinese@users.noreply.github.com> Your Name <brannerchinese@users.noreply.github.com>\n\n# geekscrapy (also committed as molley)\ngeekscrapy <github.7rhdeqzfu7@pkt5.com> molley <github.7rhdeqzfu7@pkt5.com>\ngeekscrapy <github.7rhdeqzfu7@pkt5.com> <github.7rhdeqzfu.7@pkt5.com>\n\n# pacien\npacien <pacien.trangirard@pacien.net> <pacien@users.noreply.github.com>\n\n# Saul Pwanson\nSaul Pwanson <code@saul.pw> saulpw <code@saul.pw>\nSaul Pwanson <code@saul.pw> <saulpwanson@gmail.com>\nSaul Pwanson <code@saul.pw> <saul@voltrondata.com>\n"
  },
  {
    "path": ".theia/settings.json",
    "content": "{\n    \"python.testing.pytestArgs\": [\n        \"visidata\"\n    ],\n    \"python.testing.unittestEnabled\": false,\n    \"python.testing.nosetestsEnabled\": false,\n    \"python.testing.pytestEnabled\": true\n}\n"
  },
  {
    "path": "AGENTS.md",
    "content": "# Repository Guidelines\n\n## Start Here (Progressive Disclosure)\n- Read `CLAUDE.md` first for the primary contributor workflow and architecture context.\n- Use focused deep dives only when needed:\n  - `dev/STYLE.md` for coding patterns and API conventions.\n  - `dev/GIT.md` for commit and branch practices.\n  - `dev/DOCS.md` for documentation syntax and style.\n  - `dev/PERFORMANCE.md` for profiling and optimization work.\n- Human gate is required: all AI-assisted code must be reviewed, approved, and tested by a human before merge or PR.\n\n## Project Structure\n- `visidata/`: main package (`features/`, `loaders/`, `apps/`, `themes/`).\n- `tests/`: functional replay tests (`.vd/.vdj/.vdx`) and `tests/golden/` outputs.\n- `visidata/tests/`: Python unit tests.\n- `docs/` and `dev/`: user and developer documentation.\n\n## Build, Test, and Development Commands\n- `python3 -m pip install .`: install local package.\n- `python3 -m pip install \".[test]\"`: install optional test dependencies.\n- `vd --version`: startup sanity check.\n- `pytest -sv visidata/tests/`: run unit tests.\n- `dev/test.sh -j 4`: run functional cmdlog tests and compare `tests/golden/`.\n- `vd . --batch`: quick load smoke test.\n\n## Coding and Command Conventions\n- Follow `dev/STYLE.md` for naming, quoting, decorators, and sheet/column patterns.\n- Use the canonical command pattern shown in `CLAUDE.md`:\n  - `BaseSheet.addCommand('', 'command-name', 'code', 'help text')`\n- For class placement decisions and exceptions, defer to `dev/STYLE.md`.\n\n## Testing Guidelines\n- Update `tests/*.vd*` for workflow-visible behavior changes.\n- Update `visidata/tests/` for isolated Python logic.\n- Before PR: run `pytest -sv visidata/tests/` and `dev/test.sh -j 4`.\n\n## Commit & Pull Request Guidelines\n- Base PRs on `develop` (not `stable`).\n- Follow existing short, imperative subjects; optional scope prefixes like `[test]`, `[docs]`, `[vdsql]`.\n- Keep commits focused and include tests/docs for behavior changes.\n- PRs should include problem, approach, risks, and linked issues; add screenshots/gifs and reproducible `.vd` scripts for UI changes.\n- Follow CAA and copyright assignment requirements in `CONTRIBUTING.md`.\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# VisiData version history\n\n# v3.4 (unreleased)\n\nThanks to @midichef for many bugfixes and improvements.\n\n## New Features\n\n- [commands] add `define-command` and `document` for current row (#655)\n- [repl] add embedded ptipython REPL (#2736)\n- [edit] add `vd.editCellBindings` for user-customizable cell editing keybindings (#2986)\n- [keys] prettykeys overhaul: all bindings now use human-readable key names (#2594)\n- [selection] add `select-to-prev-selected` and `select-to-next-selected` commands\n- [profile] add `--profile` flag for main thread profiling\n- [vimcompat] add vimcompat experiment with go-page-half bindings @daviewales (#2927)\n- [packages] add Python packages sheet\n- [daw] add vdaw: experimental transcript-based audio editor\n- [colors] add conversion functions to/from xterm256\n\n## Improvements\n\n- [column] add `color_readonly` option; better status for non-writable columns (#2936)\n- [column] mark expanded columns and custom columns as writable (#2936)\n- [edit-cell] fail early on readonly column (#2936)\n- [input] add Ctrl+Bksp, Alt+Bksp, Alt+d bindings (#2500)\n- [keys] add Ctrl+Shift+Up/Down and Alt+NumPad prettykeys\n- [cmdlog] expose CommandLogJsonl (#2940)\n- [indexsheet] bind cancel row to zCtrl+C (#2938)\n- [menu] add show-cursor and show-expr (#2848)\n- [dedupe] enable custom sheet name suffixes\n- [incr] use setValuesTyped to allow setting of non-numeric columns\n- [modify] add Progress to setValuesTyped\n- [movement] add go-screen-* commands (#2797)\n- [graph] accept refline input for multiple xcols; better error checking\n- [graph][seaborn] add title and axis labels @meestahp\n- [aggregator] show summary labels in first non-aggregated column if right edge not on screen\n- [types] add numtype, use for avg/median aggregators @pequiste (#2868)\n- [aggregators] copy formatter/displayer col attrs to AggrColumn\n- [aggregators] preserve type returned by mean/avg/median instead of coercing to int @pequiste\n- [icons] show icons with sheets: Dir, FreqTable, Graph\n- [canvas_text] add maxXY from darkdraw, fix g sliders\n- [clipboard api] add get/setClipboardRows and get/setClipboardCols\n- [help] refer to visidata clipboard as \"internal clipboard\" (#2864 #2865)\n- [memory] move open-memos to BaseSheet\n- [mouse api] add vd.enableMouse; ignore if no curses.mousemask (#2913 #2851)\n- [config] respect XDG_CONFIG_HOME and XDG_CACHE_HOME on macOS @maxim-uvarov-ai-assistant\n- [xdg] use user_data_dir for StoredLists like input_history (#2889)\n- [statusbar] make lstatus_max truncation preserve vd markup (#2908)\n- [shell] add options.max_threads for asynccache used by addcol-shell\n- [asynccache/shell] make asynccache/addcol-shell thread-safe and runnable in macros and replay (#2826)\n- [xlsx] add hlink/folHLink to color list (#2948)\n- [syscopy] add cursorFullDisplay for complex objects (#2806)\n\n## Loaders\n\n- [vdsql] add postgres_schema option to show tables from multiple schemas (#2027)\n- [vdsql] show SQL in sidebar (#2200)\n- [vdsql] aliases for .ddb, .sqlite, .db (#2259)\n- [vdsql] bump ibis version (#2410 #2682)\n- [vdsql] fix join compatibility with Ibis >= 9.0 @terencelaurent (#2899)\n- [airtable] update loader to work with latest pyairtable library @mplattner\n- [conll] update loader to work with pyconll v4.0\n- [eml/pcap] enable loaders for mhtml, cap, pcapng, ntar file types\n- [html] for # of header rows, use options.header\n- [mysql] fix connecting with no password @pequiste\n- [http] add default user agent (#2880)\n\n## Bugfixes\n\n- [pandas] fix loader bugs @weichm (#2968)\n- [mainloop] do not exit if rightstatus throws an exception\n- [mainloop] reset numTimeouts when there are unfinishedThreads @iamleot (#2931)\n- [canvas] delete in linear time instead of quadratic\n- [canvas] properly handle labels containing markup\n- [column] fix col width calc for data with markup\n- [column] fix width that formatValue used for list/dict/tuple\n- [loaders] stop truncating markup in fixed-width data\n- [column] stop truncating col names holding markup\n- [input] fix cursor x when editing data with markup\n- [input] fix use of rowidx before it is set\n- [input] fix perf pegging cpu (#2911)\n- [input] allow editing header of readonly column\n- [palette] when no choices match, show warning on Enter\n- [palette] align choices with prompt before Tab is pressed\n- [palette] clarify that TAB precedes ENTER\n- [settings] prevent lockup when keystroke is same as longname\n- [mainloop] for bindkey cmd, show longname in fail msg; catch fail() from execCommand\n- [repeat] use queueCommand instead of replayOne (#2932)\n- [popen] kill leftover processes that have NOT finished\n- [exit] kill subprocesses before os._exit\n- [modify] clear modified status after load to prevent overvigilant quitguard\n- [cmdlog] replay commands on hidden columns (#2849)\n- [cmdlog] make vdj shebang work on macOS @ilyagr (#2870)\n- [status] do not show previous longname after unbound key (#2779)\n- [join] fail on concat of sheets with unequal # of cols\n- [sync] mark finished thread reliably with endTime\n- [freqtbl] disable paste-before and paste-after\n- [path] remove progress in iter (#2323)\n- [path] handle filenames ending in . in Python 3.14 (#2887)\n- [macro] fix vd attempts to use deleted macros @haoyeau (#2893)\n- [clipboard] fix wrong api usage\n- [http] fix default user agent (#2880)\n- [canvas] fix division by zero when col's only value is a large float (#2884)\n- [movement] fix desc of scroll-up/down/left/right amount\n- [fuzzymatch] stringify non-str values\n- [debug] do not avoid cleanup if options.debug\n- [aggr] catch nonexistent aggr in addcol-aggregate\n- [reload] reload_or_replace function should be on BaseSheet\n- [open-row] allow pandas to open row as sheet (#2925)\n- [postgres] unquote url.password in postgres loader @egwynn\n- [theme] remove nonexistent color from light theme\n- [shell] move open-row from incorrect Open toplevel menu\n- [mainloop] fix undo of first user alteration to a replayed cmdlog\n- [curses] fix crash on startup on NetBSD wscons tty consoles @rsmirnov90 (#2851)\n\n## API\n\n- [threads] add asyncsingle_queue decorator\n\n# v3.3 (2025-09-07)\n\n- added options.disp_help_flags; deprecated options.disp_expert\n   - these feature flags are supported: cmdpalette hints nometacols guides inputkeys inputfield all\n   - see helpstr for more details\n   - set option to '' to turn off all help overlays\n\n- fix: include missing files in MANIFEST.in @chenrui333\n\nThanks to @midichef for most of the other bugfixes and improvements.\n\n## Improvements\n\n- [csv] auto-detect CSV format when csv_delimiter is specified @dennisangemi\n- [basesheet-] start new column names fresh for each sheet\n\n- [form-] after confirm, Esc/^C/^Q/q show disconfirm msg\n\n- [cmdpalette-] add instruction to use Esc to cancel\n- [cmdpalette-] keep case of results, allow case-sensitive search\n- [cmdpalette-] scroll choices with PageUp/PageDown\n- [cmdpalette-] hide choices that do not match input\n\n- [save-] suggest 'stdin' as filename base instead of '-'\n- [sheets-] on reload, fetch fresh data for URLs\n- [tar-] add cols for ext and file type desc, use name as keycol\n- performance improvements\n- display improvements\n\n## Bugfixes\n\n- [archive-] fix extracting to a chosen path\n- [archive-] fix error extracting to overwrite existing file\n- [archive-] fix loading zip files from inside archive files\n\n- [cliptext-] fix display of empty markup as several blank lines\n- [cliptext-] restore display translation of unprintable chars\n- [sheets-] remove calcSingleColLayout use of inaccurate visibleRows\n\n- [plugins liveupdate-] fix broken addcol-new\n\n- [curses-] fix crash on startup on NetBSD (and probably other \\*BSD) wscons tty consoles, which do not expose \"mousemask\" in their system curses implementations. @rsmirnov90\n- [input-] fix editText for files on command line with -b -i -p (#2840)\n- [plugin-] fix autoload for Python versions < 3.10\n\n- [macro-] fix corruption when saving macros after deletion #2787\n- [reload-] wait for any previous reload_rows to finish #2808\n- [resize-] fix resize-col-half for new columns with no rows  #2795\n- [sheet-] fix reload on sheets without col layout  #2790\n- [status] fix error when no help_sidebars\n\n## Cosmetic\n\n- [freqtbl-] stop printing status for selection on source sheet\n- [input-] handle screen resize during inputMultiple(), editCell(), input()\n\n# API\n\n- [threads-] add asyncsingle_queue decorator\n\n# v3.2 (2025-06-15)\n\nThanks to @midichef for many bugfixes and improvements.\n\n## Improvements\n\n* [config] XDG for default visidata_dir #2716 (#2755)\n- [dev] add Python 3.13 test coverage\n\n- [windows] install vd.cmd #2619 @ptyork\n* [windows] Enable Windows clipboard in WSL #1920 @daviewales\n- [windows] update windows-curses version to 2.4.1 #2119\n* [windows] fix mouse support #2676  @ptyork\n\n- [sort] allow z[ and z] to reverse col sort dir or ignore col\n- [sort] replay sort-add/-change ordering from cmdlog input arg\n- [sort] add sort order to ColumnsSheet  #2649\n\n* [loaders psv] add simple .psv loader based on Tsv sheet #2727\n* [loaders numpy] support 2d matrices (#2724) @maxfl\n\n### Commands\n\n* [aggr] addcol-aggregate and addcol-rank-sheet\n- [edit] add sysedit-cell command, using external editor\n- [errors] add sysopen-error command to view vd source code in editor\n- [freeze] add setcol-freeze, bind to z' #2260\n- [graph] add zoom-all-y #2751\n- [join] add per-jointype commands #2603\n- [layout] bind g- to hide-uniform-cols #2577 #2735\n- [syscopy] add syscol-colname #2760\n\n### Options\n\n- [draw] add options.color_multiline_bottom #2715\n- [graph] add options.color_graph_refline\n- [disp] Rename options.disp_pixel_random to options.disp_graph_pixel_random @cool-RR\n\n### Tweaks\n\n* [cmdpalette-] fix scoring of space-separated search terms\n* [cmdpalette-] make fuzzy match case-insensitive\n* [docs] Add WindowFunctionGuide and AggregatorSheet guides #2558 @thejud\n* [theme] update light theme #2729\n* [status] remove non-precious sheets from sheetlist #2573\n- [input-] fix word locator for Ctrl+Right motion\n- [input-] allow edit of cell in hidden column  #2749\n- [errors-] make ErrorSheet/ErrorsSheet into singletons\n- [threads-] make threads-all show a singleton sheet\n- [threads-] allow repeated toggling of profiling\n- [IndexSheet] move gC and gI to IndexSheet #2603\n- [main-] enable cell editing for interactive batch mode #2639\n- [loaders hdf5] guess types(hdf5), understand unsigned int type @maxfl\n- [loaders archive,sqlite-] guess sqlite/tar/zip filetypes confidently\n- [loaders vds-] save/restore column-specific properties via getstate/setstate #2699\n\n## Bugfixes\n\n- [aggr-] allow undo for aggregate-col/cols\n- [aggr-] cap runtime when formatting memo status\n- [canvas-] stop infinite refresh for graphs with many points\n- [cmdlog-] save prev replay when starting new replay #2531\n- [deprecated-] show warning when using deprecated commands  #2215\n- [features-] reload_every: wait for reload before looping\n- [features-] sysedit: modify cell only if editor changes value (#2656)\n* [freqtbl-] fix excessive memory usage for undo of selections  #2759\n- [incr-] addcol-incr-step as expected #2769\n- [input-] preserve None cells on external editor quit\n- [join-] fix putValue for merge rows absent in any source sheet\n- [layout-] change resize-cols-max into a toggle  #2782\n- [macro-] only record commands that are replayable\n- [mailcap] install dead battery for mailcap in python 3.13 #2576\n- [main-] prevent hang when vd -p - reads from terminal\n- [npy-] fix bug truncating cols wider than window  #2783\n- [open-] fix open-file for - in cmdlogs #2582\n- [open-] fix opening a dir with an filetype extension\n- [reload-] have reload-modified check for earlier changes  #2551\n- [save-] fix error string\n- [sheets-] record key-col toggle for replay as key-col-on/-off\n- [sort-] fix undo when sheet has a previous ordering\n- [undo-] fix undo editing cells in ValueColumn, ExpandedColumn, ColumnSourceAttr  #2765\n- [vdsql-] ensure each thread in vdsql tracks its single connection\n\n## Cosmetic\n\n- [cliptext-] truncate sheet names handling full-width chars\n- [column-] do not rjustify non-numeric values #2750\n- [csv-] warn when guessed option differs from default #2690\n- [dir-] sort by filename, after sorting by modtime\n- [errors-] fix error-recent always showing \"no error\"\n- [fixed loader] use empty str for null_value in fixed width sheet\n- [form-] fix underlining of substrings by FormCanvas\n- [help- sidebar-] prevent sidebar flicker #2630\n- [help] fix duplicate help descriptions #2762\n- [input-] fix editline() for characters having screen width > 1\n- [input-] speed up pasting long strings into line editor\n- [input-] fix off-by-1 when drawing at right edge of screen\n- [main-] format vd_cli exceptions to be caretless\n- [menu-] remove duplicate Help entry #2714\n- [menu] replace hint with motd\n- [reload-] tolerate stale columns in drawcache during allAggregators #2607 #2763\n- [save-] warn if no save destination given  #2580\n- [status] use sheet.icon on sheetlist #2772\n- [threads-] catch error trying to start a second profiler\n\n# v3.1 (2024-10-14)\n\n- drop support for Python 3.7  #2231\n- [vdsql] bump ibis dep to v8\n- [test] fix minimum pandas version to 1.5.3\n\n## Improvements\n\n- [sidebar] Ctrl+G to cycle sidebar (including off) in both main and input modes #2202\n- [sidebar help] rightmost statusline ({vd.sidebarStatus}) shows number of help sidebars (clickable to toggle sidebar)\n- [sheet tabs] left statusline sheet tabs (clickable to jump to sheet) #2030\n- [aggregators] immediate async summary of column aggregators on bottom rows #2209\n- [graph] reflines at user-defined x or y #2487\n- [guides] add several guides (thanks to @thejud @reagle @ajkerrigan @anjakefala)\n- [expressions] much cleanup\n  - `row[\"colname\"]` to refer to a specific column by name, without needing to be a valid identifier #2539\n  - `_row` is underlying row object\n  - support curcol in g= and select and search expressions #2524\n  - $curcol for addcol-sh\n  - globals include most symbols from math by default; also datetime and date both as the vd.date subclass\n  - [input] memory variables included as autocomplete keys #2509\n\n## Tweaks\n\n- [history] create visidata_dir (default ~/.visidata/) if not exists to enable input history by default #2298\n- [cli] \"-p -\" replays stdin as a .vdj file\n- [guide] allow front matter in guide .md files; \"sheettype\" metadata to associate with a sheet\n- [cmdpalette] do not fuzzymatch keys that start with _\n- [interface] hidden columns minutely visible past right of sheet; `_` to re-expand #2394\n- [interface] record all commands in macro (even replay=False); add status indicator when recording #2435\n- [interface] clickable cell error symbol\n- [interface] default theme color improvements, including a slight bg glow for cursor column\n- [aggregators] add keymin; handle corner cases #2308\n- many small interface improvements: error messages, clarifications, edge cases, guardrails.  (thanks to @midichef for many of these)\n\n## Options\n\n- max_rows to stop loading early #2356\n- [xlsx] add xlsx_color_cells (default: True); set to False to disable xlsx cell colorizers\n- regex_skip is now replayable\n- disp_multiline_focus to only expand cursor row when multiline enabled #2205\n- disp_expert (int); set to 1 to enable advanced interface elements and unhide advanced columns by default; set to 5 (or greater) to disable input palette and help sidebars\n- pass disp_wrap_* to textwrap for multiline display #2506\n- rename note_* to disp_note_* #2381\n- separate color_longname into color_longname_status and color_longname_guide\n\n## Commands\n\n- addcol-histogram to make histogram from any numeric column #2208\n- exec-longname-simple for single-line (non-palette) input\n- go-col-name to go to a column by name\n- [dir] open-row-filetype to open row using the given filetype\n- [graph] plot-source-selected on ColumnsSheet #2424\n- [experimental] sort-selected-asc/desc #2295\n- deprecate view-cell #2381\n- unfurl finishes with column cursor on unfurled column\n\n## API\n\n- [command] addCommand(..., replay=False) to not add to cmdlog\n- [sort] add Sheet.ordering property as list[tuple[Column,bool]] #2295\n- [path] note nonstandard behavior of RepeatFile.read()\n- [input] allow different record kwarg for different fields in inputMultiple\n\n## Loaders\n\n- [msgpack] new loader #2419\n- [grep] new loader for output of grep/ripgrep #2443\n- [csv] display loading/saving progress\n- [csv] handle more dialect parameters from Sniffer\n- [csv tsv] remove default regex_skip of hash lines #2458\n- [eml] save email parts without filenames #2376\n- [fixed] skip separating space in fixed_width loader #2255\n- [json] remove column type inference #2475 #2131\n- [json] warn if some cols/sheets were not saved #2199\n- [markdown] use col_href as link for col\n- [ods] strip empty cells/rows from end #2440\n- [rec] roundtrippable\n- [sas] allow edits to source sheet\n- [save] derived null in text formats should be empty string #2476\n- [save] handle empty delimiter when options.safety_first\n- [text] do not strip lines of whitespace #2328\n- [tsv] allow empty regex_skip\n- [tsv] allow saving with NUL delimiters\n- [tsv] if field or row delimiter is NUL, disable regex skipping\n- [vds] allow sheets with no rows #2342\n- [xml] save XML as utf-8 instead of utf-8-sig #2520\n\n## Bugfixes\n\n- [command] addcol-sh: ensure arguments are properly quoted  #2415\n- [selection] make toggle thread-safe for FreqTableSheet #1671\n- [undo] prevent undo of command that created sheet #2244\n- [undo] cmdlog always use rowidx, not rowkey #2246\n- [cliptext] fix onclick url #2466\n- [mouse] fix mouse-disable  #2379\n- [sort] do not modify Sheet._ordering #2254\n- [bindings] do not re-prettykeys; call prettykeys for all bindkey() too #2247\n- [terminal] add no-op for ANSI focus-in and focus-in #2247\n- [sort] add _ordering to Sheet class instead of __init__ #2190\n- [transpose] allow to set values #2548\n- [sheet] make 20 tabs clickable #2030\n- [macro] do not record macro inner steps #2531\n- [filetype] use correct case for file extension determination #2263\n- [replay] stop stderr batch progress when interactive #2251\n- [replay] wait for replay to start before stderr progress #2251\n- [replay] fix rare duplication of replay cmds #2392\n- and many more\n\n# v3.0.2 (2024-01-15)\n\n### Fixes and minor improvements\n\n- [cli] add `--guides` to open the guide index\n- [cmdpalette] only first 10 suggestions should have shortcut keys  #2242\n- [draw] use default bg on col hdr sep\n- [input] draw help sidebar on top of sheet/updater  #2241\n- [graph] sort by x and y columns when diving (PR by @midichef #2226)\n- [guides] improve formatting of command and options in sidebar + guides\n- [replay] stop stderr batch progress when entering interactive mode  #2251\n- [shell] clean up DirSheet sidebar\n- [sidebar] grab user's keystroke of sidebar-toggle for helpstring  #2250\n- [sort] a better fix for maintaining sort ordering on sheet copies  #2190 #2254\n- [tests] add \"test\" extras for installing PyPI packages needed to run tests\n\n# v3.0.1 (2024-01-07)\n\n### Fixes and minor improvements\n\n- [color] add `color_longname` to use instead of `color_keystrokes`  #2219\n- [columns] add `displayer` attribute to saved column state\n- [cmdpalette] Enter executes first row, if partially typed out  #2219\n- [cmdpalette] add sidebar for longname and aggregator palette  #2219\n- [guide] add `show-command-info` to display command info for a keystroke  #2228\n- [keys] add `*BtnUp` pretty keys for `BUTTON#_RELEASED`  #2219\n- [dup-selected] dup-selected should unselect all rows in copied sheet  #2225\n- [expr] fix KeyError crash with invalid inputs in `expr` for Python 3.12  #2179\n- [help] fix columns sheet sidebar\n- [loaders html] ignore parsing exceptions on invalid urls  #2227\n- [sheets] limit end separators to rightmost visible column of sheet (PR by @midichef #2237)\n- [sidebar] fix fmtstr for case where source is BaseSheet  #2239\n- [sort] maintain ordering on sheet copies  #2190\n- [test] update unit tests to use packaged sample.tsv and benchmark.csv  #2218\n- [threads] do not try to cancel already finished thread #2235\n- [tests] add `assert-expr` and `assert-expr-row` to evaluate Python expressions, and assert result is truthy\n- [tests] parametrize feature tests (PR by @ajkerrigan #2230)\n\n# v3.0 (2023-12-30)\n\n- [reorg] move independent modules into visidata/{features|experimental|themes}\n- [sidebar] add sidebar  #2064\n    - #1733 for full description/discussion\n    - will contain a stack list of status messages\n    - color syntax is [:bold]footext[/]\n        - supports `[:code]`, `[:bold]`, `[:italic]`, `[:underline]`, `[:onclick]` (makes a clickable link), `[heading]`\n        - [:] at terminal clears; [/] at terminal pops\n        - supports basic markdown for colouring\n    - toggle with `sidebar-toggle` (bound to `b`)\n    - make bottom msg entirely clickable\n    - make dedent and header parsing standard\n    - add `options.disp_sidebar`\n    - make sheet name clickable to open **Sheets Stack**\n    - make options clickable\n    - add `open-sidebar` (bound to `gb`) to open sidebar in new sheet\n- display sheet and feature help documentation in sidebar\n    - added bundles of Guide Sheets\n    - open Guide Sheets into a full VisiData sheet with `Enter`\n- added `options.disp_help` (default: 2), an integer and to set novice/expert mode. (#1961)\n    When `disp_help` is:\n    - -1: status messages aren't shown\n    - 0: no help is shown\n    - 1: sidebar sheet help is shown\n    - 2: help is shown for the input widget on the sidebar (this was condensed and moved from the former input help panel)  #2085 #1961\n    - put input help on sidebar; `disp_help` from -1 to 3\n    - mark options to be excluded if `disp_help` greater than `option.max_help`\n    - add contextual help while editing options in **OptionsSheet**\n    - `Ctrl+G` cycles input help sidebar\n- [guide] add GuideIndex toc and open-guide-index\n    - add guides for macros, selection, errors\n- [filetype] add guesser to sniff filetype from data  #130 #1759 #1881 #1880 #1883 #1978\n- add support for Python 3.12  #1934\n- migrate pkg_resources to importlib_resources (PR by @zormit and @anjakefala #1968 #1911)\n- [threads] no new threads while prev cmd still running  #1148\n- [batch] add progress every half second to batch mode  #1182\n- [replay] implemented a single-thread replay mechanism  #1575 #2102\n    - much simpler architecturally, but loses the ability to pause/resume, and show 1/N progress (now just shows number of queued commands remaining).\n        - replay in general should be more stable and possibly faster.\n        - Ctrl+N is now no-op for similar functionality to replay-advance\n            - replay-advance command itself is removed\n        - removed options.replay_movement and its functionality\n        - options.replay_wait (-w on CLI) now works by setting the curses timeout, which will affect the display update frequency for all async commands.  previously was hard-coded.  try -w 0.001 while loading a big file to see a very rapid update.\n- add options.overwrite='n' mode  #1805\n    - replace `options.confirm_overwrite` with `options.overwrite`, which can be\n      'n' (no/never), 'y' (yes/always), 'c' (confirm)\n      - add vd.confirmOverwrite()\n        - inputPath/inputFilename will not suggest the existing value or complete filenames if overwrite not y or c\n        - add --ro/--readonly cli flag (opposite of existing -y)\n        - add [RO] readonly marker on right status after [M] modified\n- add command palette (PR by @moritz #2059 #247)\n    - press Space to exec command by longname and bring up command palette\n    - type to match by longname and/or description\n    - uses fzf's fuzzymatch algo\n    - press Tab/Shift+Tab to cycle through commands  #2154\n        - Enter to execute highlighted command\n        - 0-9 to execute numbered command\n    - `options.disp_cmdpal_max` for number of suggestions\n    - `options.color_cmdpalette` for base color\n    - `chooseAggregators` and `jointype` also use palette  #1027 #2195\n        - chooseAggregators still allows selection of multiple aggregators\n    - `options.color_match` is color for matching chars in palette chooser\n- convert input history to use StoredList  #2142\n    - rename lastInputs.jsonl to input_history.jsonl  #2142\n    - remove `options.input_history`\n       - will automatically record if `options.visidata_dir` exists\n- convert macros to use StoredList  #2142\n    - cannot save macros if `options.visidata_dir` does not exist\n    - rename `options.visidata_dir`/macros.tsv' to `options.visidata_dir`/macros.jsonl'\n    - add vd2to3.vdx script to port from 2.x macros to 3.x macros\n- [aggregators] sum uses start value from type of first value for Python 3.8+  #1996 #1999 #2009\n- [build] add a .desktop for VisiData  #1738\n- [choose] add type for join/aggregators history  #2075\n- [cli] add `-i` to run interactive mode after batch  #1714\n- [clipboard] implement a more universal paste that uses positional columns  #1377\n- [columns] add `setcol-precision-more` and `-less`  #1609 #1650\n    - works on float, floatsi, currency, date columns\n- [commands] allow space-seperated keystrokes  #2067\n- [confirm] make yes/no buttons clickable  #1740 #2075\n- [cosmetic] standardize `__repr__` for sheets and columns (PR by cool-RR #2091 #1757)\n- [describe] default width=10 for describe columns\n- [dir] set name of '.' to current dir name  #1775\n- [dir] set name relative to previously loaded directory  #1775\n- [dir] get default save name from sheet name  #1775\n- [dir] rename `options.dir_recurse:bool` to `options.dir_depth:int`  #1715\n- [display] add `resize-height-input` (`zv`) and `resize-height-max` (`gzv`)  #1307\n- [encoding] use `options.save_encoding` for lsv, geojson, texttable savers\n- [encoding] change default options.encoding to utf-8-sig to detect/remove BOM  #200 #908 #909 #1711\n- [expand] change default depth of expand-col(s)-depth to 0 (PR by @cool-RR #1809)\n- [expand] change sampling warning to aside  #1054 #2066\n- [expand] ignore non-cursor types in mixed-type columns\n- [features] procmgr to view/manage processes, memory/cpu stats\n- [features] ping to traceroute a hostip\n- [features] add `addcol-histogram`  #2052\n    - display a histogram-like column for any column of ints\n- [features] add `contract-cols-depth` etc (bound to `g)`, `z)`, `gz)`  #1695\n- [features] add contract-source-cols bound to )  #1702\n- [features] reload-modified calls `reload_rows`, adding support for tail  #1686\n- [features] add `addcol-audiometadata` from vmutagen plugin\n    - adds metadata column for audio files\n- [features] to **DirSheet** add `sysopen-mailcap`\n    - opens using mailcap entry for current row, guessing mimetype\n- [features] add `addcol-source` to add current column to source sheet  #988\n- [features] incorporate dedupe plugin by @jsvine\n    - `select-duplicate-rows` selects each row in current sheet that is a duplicate of a prior row\n    - `dedupe-rows` pushes a new sheet with only non-duplicate rows of current sheet\n- [features] incorporate normcol (by @jsvine)\n    - `normalize-col-names` normalizes the names of all *non-hidden* columns\n- [features] add server to listen for commands on `options.server_addr` and `options.server_port` (if set)\n- [features] add Sheet.knownCols to preconfigure of columns by name #1488\n    ```\n    Sheet.knownCols.timestamp.type = date\n    DirSheet.knownCols.directory.width = 0\n    ```\n- [freq] add select-first command\n- [freq] base histogram width on column width  #1807\n- [freq] set default disp_histogram to U+25A0 BLACK SQUARE (■)) (PR by @daviewales #1949 #1807)\n    - [themes] ascii8 disp_histogram to *\n- [freq] add `open-preview` for split pane of source rows at cursor  #1086\n- [graph] colorbrewer palette chooser (thanks @er1kb)\n- [graph] add commands to open external graph with matplotlib #1056\n- [help] remove `Enter` binding for **HelpSheet** to `exec-command`\n- [history] remove cmdlog_histfile\n- [input] change `Ctrl+G` to toggle `options.disp_help`\n- [input] add `Ctrl+N` to insert prettykeys of literal keystroke\n- [input] allow percentage of starting value for input into commands\n- [input] `inputMultiple` saves/remembers dict input\n- [input] `Tab`/`Shift+Tab` move left/right in edit-mode like excel  #2169\n- [join] allow selecting of join columns from all columns sheet  #1224\n    - unbind `&` for **ColumnsSheet** `join-cols`\n- [join] join now works with typed values, not display values  #2015\n- [join] improve warning for typing source key columns before joining  #2117\n- [join] clarify ensureLoaded status message  #2137\n- [keys] add shifted function prettykeys (Ctrl+Shift+F1 etc)\n- [layout] stop errors: hide-col on empty sheet, inputMultiple (PR by @midichef #1963)\n- [linux] change default system clipboard cmd to wl-copy if the user is using wayland (PR by @rj1 #1763)\n- [loaders] add `options.regex_skip` for text formats to allow e.g. comment skipping  #1559\n    - Added default values for `regex_skip` to existing source sheets like tsv/csv/lsv/json/jsonla.\n    - Use --regex-skip='' (or otherwise set the option to '') to disable this behavior.\n- [loaders] add mailbox formats mbox/maildir/mmdf/babyl/mh loader (as supported by Python mailbox stdlib)\n- [loaders] .jrnl format (jrnl.sh) loader+saver\n- [loaders] add reddit API loader\n- [loaders] add matrix API loader\n- [loaders] add orgmode loader\n- [loaders] add scraper\n    - table of HTML elements as parsed by `beautifulsoup4`\n- [loaders] add Parquet writer (PR by @mr-majkel #2053 #2044)\n- [loaders] add s3 loader (built by @ajkerrigan)\n    - open Amazon S3 paths and objects\n- [loaders] add support for jsonla (JSONL arrays) format (PR by @daviewales #1730)  #1726\n- [loaders] add zulip API loader\n- [loaders] add airtable API loader\n- [loaders] add .fec loader by @jsvine\n- [loaders] add f5log loader by @bitwisecook\n- [loaders] add a toml loader (PR by @ajkerrigan #1894 #1580 #1587)\n- [loaders] add .conll loader by @polm\n- [loaders html] display title/aria-label/caption/summary (PR by @midichef #2146)\n- [loaders http] replace requests with urllib  #1808 #1704\n- [loaders http] guess filetype based on magic bytes  #1760\n- [loaders jsonl] allow slash comments (PR by @geekscrapy #2025)\n- [loaders jsonl] deduce numeric column as float, not int  #2131 #1698\n- [loaders png] use 2x2 unicode blocks instead of braille\n- [loaders shell] allow deleting of directories unless `options.safety_first=True`  #1965\n- [loaders sqlite] save list/dict as json  #1589\n- [loaders sqlite] add `exec-sql` command to input query  #1719\n- [loaders xlsx] add cell colorizers from source  #1718\n- [loaders xlsx] add `column_letter` to meta columns\n- [loaders xml] ignore comments\n- [macros] allow deleting of macro with commit on **MacrosSheet**  #1569\n- [macros] add longname/keystrokes to **MacrosSheet**  #1569 #1741\n- [macros] add help sidebar to end macro input  #1569 #1741\n- [menu] move Edit>Add-rows to Row>Add\n- [menu] add `go-row-number` to menu  #1766\n- [menu] move commit-sheet under File>Save\n- [menu] add resize-cols-input to Columns -> Resize (PR by @njthomas #1887)\n- [modules] include module name in Option/Command sheets\n- [motd] default motd is \"Support VisiData\" instead of blank\n- [mouse] onclick with url launches $BROWSER with url; add `displayer_url`  #2031\n- [open] try using options.filetype for path  #1710\n    - useful for configuring default filetype when reading from stdin\n- [open] add `reopen-last-closed` which reopens the most recently closed sheet (PR by @cool-RR #1813) #1811\n- [open-syspaste] create new table from system clipboard #1680\n- [open-syspaste] enable filetype selection (PR by @daviewales #1717)\n- [options] add `option.json_ensure_ascii` (default: True) (PR by @joaosousa1 #1776)  #1772\n    - option for non-ASCII characters to be saved to JSON, on False will encode to utf-8\n- [path] change most uses of Path.name to Path.base_stem  #2188\n    - Path.name is the same as .base_stem for now\n- [plugins] remove external Plugins Sheet; only show installed plugins\n- [profile] dump profile to cwd when profiling enabled\n- [forms] provide help text for color, encoding, encoding errors, and regex  #1961\n- [reload] support tail with `reload-modified`  #1686\n- [reload] add `reload-rows` which preserves existing columns + cursor position  #1655 #1683 #1663\n    - [melt] refactor to support `reload-rows`  #2101\n- [regex] use inputMultiple to allow changing regex_flags  #1925\n- [regex] use `inputRegex` (which has regex help) for all regex commands\n- [rename-col] add `options.rename_cascade`  #2088\n    - if True, columns renames are cascaded into expressions\n- [replay] has been refactored to be sync, instead of a separate async process  #1773 #1714\n- [save] add `options.save_encoding (default: 'utf-8') to differentiate from `options.encoding` when saving a file  #1708\n- [save] add saver for STATA files (PR by @raffaem #1563)\n- [save] keep headers in txt as tsv if only one sheet and more than a single column  #2173\n- [save] add status when save finished  #2157\n- [selected] add `onclick` to \"selection status\" to quickly `dup-selected`\n- [sheet] add `select-equal-selected` (unbound) to select rows with values in current column in already selected rows  #1327\n- [sheet] add `clean-names` (unbound) to set options.clean_names on sheet and clean visible column names\n- [sheet] remove left-click for sheets-stack  #2030 #1656\n- [sheet] add `open-source` (bound to backtick) to open source sheet\n- [setcol-fake] add `setcol-fake` (unbound) adds a column of Faker generated 'faketypes'\n- [sparkline] add `addcol-sparkline` (unbound): adds a sparkline of all numeric columns\n- [status] downgrade sheet \"finished loading\" to debug\n- [tests] call all test_func(vd) defined in modules during pytest\n- [tests] run all unit tests in CI\n- [tests] add test for loading a directory  #1798\n- [themes] add options.theme and visidata/themes directory of additional themes (light, ascii8, asciimono)  #1682  #1691\n- [themes] keystrokes/code now with gray bg\n- [types] add `ipaddr` and `ipnet` types`. add `type-ipaddr` and `type-ipnet` commands (unbound) (PR by @ajkerrigan #1946 #1782 #1910)\n    - also add `select-supernets` (unbound) which selects rows where the CIDR block value includes the input address space\n- [types] add `type-url` and `open-url`  #2031\n- [types] add `type-datetime`  #1572 #1380 #397\n- [ui] change menu, status, and other colors to be more visible\n- [ui] add `options.disp_scroll_context` to keep *n* more lines above/below cursor on screen\n- [ui] add version to menu status\n- [undo] options.undo can only be set globally\n- [usd] provide USD(s) function to convert string like '£300' or '205 AUD' to equivalent US$ as float\n- [windows] change default system clipboard command to clip.exe\n- [zip] add `sysopen-row` (`Ctrl+O`) to open file in `$EDITOR`  #1708\n\n## experimental features (must be imported manually)\n\n- [diff] got moved to experimental\n- [inplace] optional replacement commands which update the new Column live as you write the expression\n- [livesearch] add `dup-search` and `dup-search-cols` which search for regex forwards, creating a duplicate sheet with matching rows live\n- [mark] mark rows to more easily move cursor to them\n- [noahs] add basic structure for Noah's Tapestry data game\n- [rownum] addcol-rownum and addcol-delta\n- [slide-cells] shift cells in cursor row to the right\n- add loaders gdrive and gsheets\n\n# deprecated\n\n- [dev] deprecate `col.setValueSafe` and `sheet.checkCursorNoExceptions`\n- [regex] deprecate `addcol-subst` and `setcol-subst`\n    - `addcol-regex-subst` and `setcol-regex-subst` use inputMultiple, instead of more fragile search/replace one-line input\n- [regex] deprecate `split-col` and `capture-col`\n- [keys] change ScrollWheelUp to ScrollUp etc\n- [multiline] rename `visibility-sheet` to `toggle-multiline`\n- [utils] deprecate `onExit` context manager\n\n## bugfixes\n\n- [aggregators] use statistics.median for more correct median  #1914\n- [aggregators] fix cancelling of long-running aggregators  #1036\n- [canvas] fix clicks on labels and unplotted canvs (PR by @midichef #1984)\n- [canvas] put a max limit on y-axis label width (PR by @midichef #2177)\n- [chooser] choose only exactly matching strings (PR by @daviewales #1902)\n- [cli] support `options.encoding_errors` for stdin  #2047\n- [clipboard] warn when pasting before copying (PR by @midichef #1793)\n- [clipboard] improve error when deleting row on empty sheet (PR by @midichef #2006)\n- [clipboard] save to tempfile, do not confirm\n- [clipboard] save as given filetype\n- [cliptext] fix double-width char display  #1918\n- [cliptext] do not crash with x<0  #2138\n- [cliptext] do not crash with miniscule widths  #2138\n- [cmdlog] check for empty cursor column when adding a column (PR by @midichef #1783)\n- [cmdlog] ensure record of global options in all cmdlogs\n- [cmdlog] do not log undos for non-loggable commands  #1827\n- [colorizers] fix custom colorizers showing in sheet context  #1225\n- [columns] speed up getMaxWidth for wide columns (PR by @midichef #1747) #1728\n- [columns] fix allColumnsSheet to ignore non-TableSheet\n- [confirm] remove flicker in alacritty  #2040\n- [confirm] commit on sheet without source should always confirm\n- [currency] fix currency_neg option\n- [curses] ignore early keys pressed before curses is initialised if Esc present  #1993\n- [cursor] cursorColIndex now returns None if empty  #1803\n- [deps] add requests-cache submodule to root visidata  #1748\n- [dir] support '..' and resolve dirname relative to CWD  #1801\n    - if user uses `open-dir-parent` outside of the CWD, switch to absolute paths\n- [display] fix visibility with col.height>1\n- [expr] more informative 'column not modifiable' error message  #1764\n- [extensible] do not copy over existing attribute  #2190\n- [fill] allow filling with values that are logically false (PR by @midichef #1794)\n- [freq] fix names for openRow  #1777\n- [freq] correctly group null/error values for `options.numeric_binning`  #1410\n- [graph] fix graph ranges for xmax, ymax < 1 (PR by @midichef #1752)  #1673 #1697\n- [graph] fix data on edges being drawn offscreen (PR by @midichef #1850)\n- [graph] fix graph legend drawn too early (PR by @midichef #1980)\n- [graph] fixes to various graphing edge cases (PR by @midichef #1896)\n- [graph] fix top margin location and simplify y-coordinate calculation (PR by @midichef #1915)\n- [graph] labels: add tick symbol, int precision, right margin (PR by @midichef #1931)\n- [graph] fix legend display of full-width characters (PR by @midichef #1958)\n- [graph] widen left margin to hold y-axis labels (PR by @midichef #1998)\n- [graph] update fixPoint() to use inverted-y coordinates (PR by @midichef #2139 #2111)\n- [index] add longname for g< and g>  #2011\n- [input] fix Ctrl+T swap on empty string #1684\n- [input] fix Ctrl+V with special keystrokes  #1799\n- [input] erase status bar after prompt #1947\n- [input] fix toggle input help  #1971 #1994\n- [input] include history for unfocused items #1947\n- [inputsingle-] loop until keystroke (do not timeout)\n- [join] fail if differing number of keycols  #1678\n- [join] fix join-merge (PR by @yphillip #1923 #1843)\n- [jsonl] include all columns in first row, even if null\n- [keystrokes] only check duplicate prefixes from allPrefixes  #1829\n- [keys] add `Shift+Tab`\n- [layout] fail if `hide-col` on empty sheet\n- [loaders fixed] use maxWidth for saving if larger than column width  #1849\n- [loaders fixed] don't truncate wide columns with fixed width saver (PR by @daviewales #1890)\n- [loaders http] add `options.http_ssl_verify` to replace `options.http_req_verify`  #1939\n- [loaders http] fix parsing link header (PR by @Midichef #1924 #1898)\n- [loaders html] fix failure from colspan with only td tags (PR by @midichef #2002)\n- [loaders html] prevent error when parsing an empty table (PR by @midichef #2140)\n- [loaders imap] enable imap and fix folder name extraction (PR by @justin2004 #1917)\n- [loaders json] include null columns in first row, in more cases (PR by @midichef #2109)\n- [loaders jsonl] save None as null  #2183\n- [loaders mysql] unquote password before sending to client (PR by @dufferzafar #1933)\n- [loaders pandas] handle read methods that produce a list of dataframes (PR by @ajkerrigan #1990 #1986)\n- [loaders parquet] stringify source to handle both URLs and local paths (PR by @ajkerrigan #1913)\n- [loaders parquet] show string value for Parquet `large_string` (PR by @daviewales #2018 #2003)\n- [loaders parquet] fix parquet reading from zip or s3 (PR by @takacsd #2133)\n- [loaders parquet] handle parquet directories (PR by @mr-majkel #2160  #2159)\n- [loaders pivot] fix missing anytype import\n- [loaders postgres] quote schema and table name (PR by @isosphere #2129)\n- [loaders pyobj] similar sheet names for dive-/open- and pyobj- #1988\n- [loaders pyobj] do not skip properties that raise\n- [loaders png] fix `rgb_to_attr` to return str colornum\n- [loaders rec] support %sort; continue loading on exception  #2022\n- [loaders sav] use fork of `savReaderWriter` for the sake of Python 3.10+ support  #1867\n- [loaders sqlite] prevent creation of ./- file when reading from stdin (PR by @midichef #1945)\n- [loaders sqlite] explicitly fail when file is not on disk\n- [loaders tsv] use options.encoding for reading files\n- [loaders ttf] implement `closePath()` to draw missing lines (PR by @midichef #1979)\n- [loaders vds] save hidden columns also (PR by @pacien #2093 #2089)\n- [loaders vds] fix 'keyerror: exprcolumn' for .vds (PR by @pacien #2036 #2045)\n- [loaders vds] fix .csv to .vds conversion  #2037\n- [loaders xlsx] saver now replaces illegal characters instead of aborting  #1402\n- [loaders xml] silence FutureWarning from lxml (PR by @midichef #2149)\n- [loaders xml] fix file loading (PR by @midichef #2148)\n- [loaders yaml] support tuples in YAML files (PR by @cool-RR #1824)  #1822\n- [loaders zip] fix loading and extracting files locally + remotely  #2127\n- [macos] do not bind empty string to anything\n- [macros] add prompt for cancelling macro  #1810 #1812\n- [macros] specify a clearer message  #1810\n- [macros] append newline to macros.tsv if necessary  #1569\n- [macros] save file as longname/keystroke  #2084\n- [main] print version string once, not twice (PR by @midichef #1837)\n- [main] remove forced unload before interactive mode  #1943\n- [menu] use \"Alt+x\" keybinding instead of \"^[x\"\n- [metasheets] do not use options.encoding for internal sheet saving\n- [misc] remove trailing commas from addCommand (PR by @midichef #1962)\n- [modify] do not call saveSheets on commit\n- [modify] commitMods do not call putValue for changes to added/deleted rows\n    - also fix ItemColumn.putValue and AttrColumn.putValue to call parent\n      Column.putValue before setting the value on the row\n- [modify] confirm() overwrite on root sheet source path\n- [modify] always set col.defer\n- [modify] do not fail on Column.putValue if no setter\n- [mouse] fix mouse-click on bottom pane\n- [open] silence ResourceWarnings for unclosed files (PR by @midichef #2152)\n- [options] disable adding rows (PR by @midichef #1944)\n- [options] fix option editing\n- [options] fix helpstr display when editing\n- [paste] add new rows to sheet if necessary\n- [path] set name to '.' for givenpath of '.'  #1768\n- [path] fix progress bar for compression formats  #1175 #1255\n- [path] fix open() using both binary and text mode (PR by @midichef #1955)\n- [path] binary mode does not take newline argument\n- [pyobj] fix pyobj-cell  #2001\n- [regex] issue warning when no columns to add  #1778\n- [regex] check for regex capture group  #1778\n- [rename-col] skip gratuitous rewrites when undoing (PR by @pacien #2092)\n- [replay] turn off confirm dialogs during replay\n- [replay] clearCaches before moving cursor  #1773\n- [replay] enable confirm in interactive batch mode (PR by @midichef #1751)\n- [replay] do not push sheet if not already pushed  #1681\n- [save] handle saving 0 sheets  #1720\n- [save] fix confirm message on commit #2090\n- [scroll-cells] do not error scrolling offscreen column  #1908\n- [search] handle no rows and invalid regex  (PR by @midichef #2125)\n- [settings] clear cache correctly before set\n- [sheets] fix NameError for mincolidx  #1672\n- [sheets] add confirm for `quit-sheet-free` (PR by @midichef #1755)\n- [sheets] make sure addColumn called on all columns\n    - not just dynamically-created columns\n    - addColumn is needed to set .sheet and .defer, among other things\n- [sheets] fix reload() for tsv sheets with key columns (PR by @midichef #1997)\n- [sheets] fix recursion crash of Python >= 3.8, <3.9.10  (PR by #midichef\n  #1722)  #1696\n- [sheets] pop columns kwarg so raw list not set via final update() in\n  constructor\n- [sheets] fix slowness from adding rows during getMaxWidth (PR by @midichef\n  #1982)\n- [sheets] no longer insert column in draw() in debug mode (PR by @midichef\n  #1995)\n- [sheets] fix errors on sheets with no columns (PR by @midichef #2124)\n- [sheets] fix splitcell to handle attribute/text pairs (PR by @ajkerrigan #2020)\n- [sheets] recreate sort columns for copied sheet (PR by @midichef #2192 #2190)\n- [shell] fix copying of a directory  #1970\n- [status] fix Alt+Shift+Shift+X  #1828\n- [status] update right status before exec  #996\n- [status] add caller/module to statuses, and print on --debug  #2037\n- [status] catch all exceptions during drawing  #2174\n- [sort] show sort arrow for sort columns described by name (PR by @midichef #1876)\n- [syscopy] always copy as utf-8\n- [term] allow non-color term like vt102\n- [threads] allow @AsyncThread funcs to have status kwarg\n- [threads] remove non-sheet threads from unfinishedThreads (do not sync on them)\n- [quit-sheet-free] re-entering a subsheet left using quit-sheet-free should reload the subsheet #1679\n- [ui] integrate scrollfix from @geekscrapy  #1441\n- [undo] ensure undo is sheet-specific for duped/copied sheets  #1780\n- [undo] fix undo for first modification on a sheet-specific HelpSheet  #1820\n- [undo] fix the removal of [M] (modified mark) after undo  #1800\n- [undo] remove last matching cmdlog row, instead of first (PR by @midichef #2010)\n- [unzip-http] fix recursion error when fetching remote zipfile (PR by @midichef #2116 #2110)\n- [vdx] fix save error\n- [windows] add Alt+ keybindings for powershell  #1630\n- [windows] limit windows-curses version to 2.3.0 (PR by @bartbroere #1901 #1841)\n    - asottile noticed this was a regression in the last windows-curses release\n      in this issue: zephyrproject-rtos/windows-curses#41\n- [windows] update windows-curses version to support Python 3.11  #2062\n- [windows] fix syspaste (PR by @midichef #1921 #1920)\n- [windows] fallback to `scr.getch` if no `scr.get_wch` #192\n    - handles `AttributeError: '_curses.curses window' object has no attribute 'get_wch'`\n- [windows] tempfiles must be closed before reopening  #2118\n- [zsh] fix zsh completion (PR by @dbaynard #1960 #1959)\n\n## performance\n\n- [startup] delay import of `urllib.request`, `pkg_resources`, and\n  `dateutil`\n- [startup] remove `unittest.mock`\n- [draw] `drawcache` make_formatter\n- [test] use lambda instead of Mock for addstr\n- [] `Column.formatValue` inline fmtstr\n- [settings] `@lru_cache` sheet obj in `SettingsMgr._mappings`\n- fastpath getitemdeep\n    - fallback to getattrdeep if len(row) < index\n- [sort] move `addProgress` outside of sortkey\n- [parquet] cache large strings and cap at 1MB  #2003 #1068\n- [modify] check col/row before isChanged\n- [status] move getStatusSource into features to improve startup perf\n\n\n## api\n\n- [cli] printout gone; use `builtins.print`\n- [color] use `ColorAttr` throughout  #2061 #2017\n    - separate out fg/bg\n    - allow bg and fg to take precedence independently\n    - fixes issues with forced bg=black on sidebar for warning, and statusbar for working\n- [guides] add API for getting and adding guides\n    - add vd,getGuide and vd.addGuide\n    - add Helpers for formatting commands and options\n- [help] add HelpSheet to globals\n- [hint] add hint mechanism to find best `Sheet.hint_function`\n    - add hints for types\n- [input] add vd.injectInput and vd.getCommandInput\n- [keys] use prettykeys for allPrefixes #1592\n- [menu] vd.addMenuItems with convenient string syntax\n- [modify] Sheet.commitAddRow and Sheet.commitDeleteRow\n- [modules] vd.importModule, vd.importSubmodules, vd.importExternal, vd.setPersistentOptions\n    - add importExternal for most loaders and features  #1739 #1765\n- [path] filesize can taken any Path-like\n- [pivot freq] re-add FreqTableSheet and PivotSheet to globals  #1731\n- [sheet] add vd.addCommand as alias for BaseSheet.addCommand\n- [tests] add vd.resetVisiData\n- [vdx] runvdx() to execute vdx strings\n- rename vd.draw_sheet to vd.drawSheet\n- change order of parameters for vd.subwindow to (x,y,w,h)\n- change order of args to onMouse to x,y\n- add vd.aside for a silent status message\n- add GlobalsSheetsSheet to globals\n- vd.queueCommand can take input,sheet,row,col kwargs  #1681\n- add `@visidata.stored_property` to persist property\n\n\n# v2.11.1 (2023-07-16)\n\n- [tests] fix tests for Python >=3.11\n- [path] update for Python 3.12 API (reported by @QuLogic #1934)\n\n## Improvements and bugfixes\n\n- [chooser] choose only exactly matching strings in chooser (PR by @daviewales #1902)\n- [columns] speed up `getMaxWidth()` for wide columns, and correct some edge cases (PR by @midichef #1747)\n- [freqtbl] Default `disp_histogram` to U+25A0 BLACK SQUARE (■)) (PR by @daviewales #1949)\n- [loaders fixed] do not truncate wide columns with fixed-width saver (PR by @daviewales #1890)\n- add missing import `copy`\n- [graph] fix graph ranges for xmax, ymax < 1 (PR by @midichef #1752)\n- [graph] fix data on edges being drawn offscreen (PR by @midichef #1850)\n- [input] fix `Ctrl+T` swap on empty input (reported by @gfrmin #1684)\n- [inputsingle] loop until keystroke (do not timeout)\n- [fill] allow filling with values that are logically false (PR by @midichef #1794)\n- [macos] do not bind empty string to any keybinding\n- [paste] add new rows to sheet if insufficient rows\n- [path Dirsheet] set name to '.' for givenpath of '.' (reported by @geekscrapy #1768)\n- [path] fix progress for compressed files (reported by @bitwisecook #1255 #1175)\n- [replay] clearCaches before moving cursor (reported by @mokalan #1773)\n- [save] handle saving 0 sheets (reported by @reagle #1266 #1720)\n- [settings] clear cache correctly before set\n- [undo] fix so that undo is Sheet-specific on copied sheets (reported by @geekscrapy #1780)\n- [undo] undoing `zd` now removes `[M]` (modification mark) (reported by @Freed-Wu #1800)\n\n# v2.11 (2023-01-15)\n\n- [ci] drop support for Python 3.6 (related to https://github.com/actions/setup-python/issues/543)\n- [ci] add support for Python 3.11 (#1585)\n\n- [dirsheet] add `open-dir-parent` (bound to backtick)\n- [join] add new \"concat\" jointype to behave similar to \"append\" but keeps first sheet type and columns (requested by @frosencrantz #1598)\n- [zip] add multisave for `.zip` (save each sheet in options.save_filetype format into given .zip file)\n- [sysedit] add `sysedit-selected` (bound to `g Ctrl+O`) (requested by @Delapouite #1596)\n    - edit cells in multiple rows in `$EDITOR`\n    - only handles cell modifications, not added or deleted rows\n\n\n## Improvements\n\n- [aggregators] add 95 and 99 percentile (p95 and p99)\n- [fill-col] speed up `fill-col` for sheets with many empty cells (PR by @midichef #1657)\n- [loaders hdf5] add support for arrays of scalars (requested by @linwaytin #1602)\n- [graph] fail if no numeric xcols are given\n- [open-cell-file] warn when file or url in cell does not exist (requested by @geekscrapy #1540)\n- [sqlite] add passthrough options (reported by @cwarden #1622)\n- [sqlite] add options.sqlite_onconnect to be executed before running any statement (requested by @cwarden #1622)\n- [xml] add passthrough options for xml_parser; default xml_parser_huge_tree=True (PR by @midichef #1668)\n\n## Bugfixes\n\n- [columns] `dup-sheet` now carries over attributes of columns added by `add-column`\n- [columns] **SettableColumn** should not be deferred (reported by @frosencrantz #1568)\n- [customdate] recognise type-customdate as numeric (requested by @tdussa #1613)\n- [describe] fix custom describe aggregators (reported by @edupont #1574)\n- [dirsheet] fix incorrect filename with multiple extensions (reported by @kunliugithub #1571)\n- [display] show `disp_oddspace` for surrogate escapes (reported by @geekscrapy #1544)\n- [graph] fix div-by-zero with only one y-value (reported by @midichef #1673)\n- [install] ensure setuptools files have appropriate permissions (reported by @icp1994 #1591)\n- [install] update data files in setup.py based on PEP 420 (reported by @Oblomov #1675)\n- [keystrokes] add `kDN` and `kUP` to translation table (reported by @djpohly #1336)\n- [loaders html] fix loading of relative links in html table (reported by @frosencrantz #1599)\n- [loaders xlsx] store `None` as empty string in `save_xlsx` (reported and PR by @dbaynard #1626 #1629)\n- [macros] override CLI parsing options for MacrosSheet (reported by @frosencrantz #1607)\n- [macros] query again for keystroke if used by existing macro (#1658)\n- [macros] do not include `nonLogged` commands in macro (reported by @geekscrapy #1569)\n- [macros] add reload for **MacroSheet** (reported by @geekscrapy #1569)\n- [menu] 2x ESC should exit menu\n- [mouse] fix mouse-clicks on statusbar when splitpane is off (reported by @frosencrantz #1625)\n- [numpy] fix loader\n- [open_txt] fix Exception with `open-config` when no `~/.visidatarc` (reported by @gunchev #1611)\n- [pdb] fix entering of pdb breakpoints for Python 3.9+ (reported by @jasonwirth #1317)\n- [sheets] sort all sheets on global **Sheets Sheet** (reported by @franzhuang #1620)\n- [types] format int/vlen as true int (reported by @xlucn #1674)\n- [unzip-http] fix file extraction (`x`) on remote zip file\n- [unzip-http] handle files smaller than 64K (reported by @frosencrantz #1567)\n- [zsh-completion] fixed (reported by @pigmonkey #1583; PR by @Freed-Wu #1646)\n\n## API\n\n- raise Exception from causes in utils.py (PR by @cool-RR #1633)\n- add `HistogramColumn` to allow overrides (requested by @andycraig #1621)\n- easier external numeric types with `@vd.numericType()` decorator (inspired by @s1291 #1394)\n\n- [frequency table] `dive-rows` renamed to `dive-selected`\n\n# v2.10.2 (2022-10-08)\n\n- add .vdx, a simplified new cmdlog format\n- add `-N`/`--nothing` command to disable loading .visidatarc and plugin addons\n- add `addcol-aggr` to add an aggregator column to the **FreqTable** without needing to\n  regenerate it (requested by @geekscrapy #1541)\n\n## Improvements\n\n- [cli] load commandline file arguments from the start (requested by @reagle #1471)\n- [cli] `--config=''` now does not try to load any config\n- [open] rename `zo` `open-cell` command to `open-cell-file`\n- [loaders whl] load python .whl (reported by @frosencrantz #1539)\n\n## Bugfixes\n\n- [cli] fix for empty arg\n- [DirSheet] fix bug where `Enter` no longer opened a file from the **DirSheet** (reported by @frosencrantz #1527)\n- [input paste] fix pasting via a Path via `Ctrl+Y`  into input (reported by @frosencrantz #1546)\n- [menu] allow VisiData to run without menu\n- [mouse] catch any curses.getmouse() errors (reported by @geekscrapy #1553)\n- [performance] allow vd to be truly idle (reported by WizzardUU #1532)\n- [plugins_autoload] catch error for environment having invalid package metadata (reported by @jsdealy #1529)\n- [plugins_autoload] catch exception if plugin fails to load\n- [plugins-autoload] fix check for if plugins_autoload is set in args\n- [plugins-autoload] update for importlib-metadata 5.0 API (reported by @jkerhin #1550)\n- [pyobj] undo rename of `open-row`/`open-cell` (were renamed to `open-X-pyobj`) (revert of eff9833e6A)\n- [sheets] ensure IndexSheets are precious, and that **SheetsSheet** is not (reported by @frosencrantz #1547)\n- [unzip-http] extracting a file now checks for overwrite (reported by @frosencrantz #1452)\n- [windows clipboard] fix piping to clip command through stdin (thanks @daviewales for the fix; reported by @pshangov #1431)\n\n## API\n\n- expose `CommandLogBase` (was `_CommandLog`)\n- [options] allow FooSheet.options instead of .class_options\n- add separate non-async `select_row`, `toggle_row`, and `unselect_row` for selection of single rows\n- the before/after decorators now do not fail if api functions they are decorating do not already exist\n\n# v2.10.1 (2022-09-14)\n\n## Improvements\n\n- [docs] document `-d` option (thanks @abitrolly for PR #1515)\n- [freq] disable histogram if `disp_histlen` or `disp_histogram` set to 0 or empty string\n- [guard] add `guard-sheet-off` which unsets `options.quitguard` on current sheet (thanks @hanfried for PR #1517)\n- [menu] add `BUTTON1_CLICKED` (same as `BUTTON1_PRESSED`)\n- [open] add `zo` to open file or url from path in current cell\n\n## Bugfixes\n\n- fix Guix build problems (reported by @ryanprior #1499)\n- add support for sheet names with multiple `.` (periods) in the name (requested by @geekscrapy #1494)\n- [cmdlog] add more portable shebang in vdj\n- [date] fix custom date greater than or equal to comparison\n- [macros] fix `macro-record` (#1513)\n- [macros] refresh `macro-sheet` upon macro addition\n- [macros] ensure macros are set upon startup\n- [plugins] update usd plugin api (thanks @hanfried for PR #1510)\n- [repeat] fix `repeat-` (#1513)\n- [status] reduce priority of active colouring (reported by @geekscrapy #804)\n\n## API\n\n- add `ExpandedColumn` to globals\n- add `Extensible.before` and `Extensible.after`\n  - `def foo` decorated with `@VisiData.before` will run it before `vd.foo()`\n  - `def foo` decorated with `@VisiData.after` will run it immediately after\n\n\n\n# v2.10 (2022-08-28)\n\n- [plugins] load all entry points in `visidata.plugins` group before config load\n  - add entry_points={'visidata.plugins': 'foo=foo'} to plugin load plugin automatically when launching VisiData\n\n- [deps] require `importlib_metadata` >= 3.6\n  - following https://github.com/pypa/twine/pull/732\n\n## Improvements\n\n- [draw] redraw only every 100 ms if any keys pending (requested by @ansoncg #1459)\n- [IndexSheet] shown name is only final name component\n- [loaders html] add table of all links on page (requested by @dufferzafar #1424)\n- [loaders html] `open-row` on **LinksSheet** to open url (requested by @dufferzafar #1424)\n- [options] add `options.http_req_*` to send headers/etc to requests (requested by @daviewales #1446)\n- [options pyobj] add `options.fmt_expand_dict` and `options.fmt_expand_list` for formatting expanded\n    list and dict column names (requested by @joe-opensrc #1457)\n- [threads-sheet] add `z Ctrl+T` (`threads-sheet`) to open **ThreadsSheet** for current sheet\n- [threads-sheet] add `g Ctrl+C` (`cancel-all`) to **ThreadsSheet**\n- [zsh] add scripts for zsh completion (PR by @Freed-Wu #1455)\n  - tutorial: https://visidata.org/docs/shell/\n\n## Bugfixes\n\n- [addcol-] set cursor at added column for `addcol-new`/`addcol-bulk` (reported by @jsvine #1445)\n- [cmdlog] `Ctrl+S` from a **CommandLog** now defaults to `.vdj` (reported by @jsvine #1443)\n- [display] format entire string for undetermined width (reported by and fixed by @jsvine #1442)\n- [formatter] fix len format strings\n- [LastInputsSheet] catch other exceptions during reload\n- [loader npz] fix .npz loader (reported by @Shahin-rmz #1440)\n- [loader geojson] fix plotting and saving geojson files (fixed by @mwayne #1477)\n- [loader geojson] improve feature property manipulation (fixed by @mwayne #1477)\n- [menu] upon menu item keypress, move to item (reported by @reagle #1470)\n- [menu] fix `ALT+<keystroke>` navigation while within menu (reported by @reagle #1470)\n  - now requires two `ESC` to exit\n- [open] allow binary files from archives (reported by @frosencrantz #1430)\n- [save] do not save unknown filetype as `save_filetype`\n- [save visidatarc] only save rows on **OptionsSheet** to visidatarc\n- [sheets] fix name reconstruction for files with multiple  and no suffixes (#1450)\n- [sheets] do not include empty name parts in sheet name\n- [unzip-http] **FreqTableSheet** `open-row` now loads links (reported by @frosencrantz #1458)\n- [zip] use correct rowdef in extract (reported by @frosencrantz #1430)\n- [zip] do not create directory for extract\n\n## snippets\n\n- add snippets/scrolloff.py which mimics vim's scrollof context lines (requested by @gennaro-tedesco #1441)\n\n## vdplus\n\n- `open-memusage` was moved to vdplus\n\n## API\n\n- add InferColumnsSheet\n  - it infers the columns and their types from the rows it gets which are dicts\n  - used by json, npy loader\n- add vd.printout and vd.printerr for builtins.print to stdout and stderr\n- add `vd.view()`\n- fix Extensible.init() to work with classes with no `__init__`\n- add `Sheet.sidebar` and `Sheet.sidebar_title` properties\n\n## Deprecated\n\n- remove VisiDataSheet\n- remove vdmenu\n\n# v2.9.1 (2022-07-21)\n\n- [unzip-http] move urllib3 to optional dependencies\n\n# 2.9 (2022-07-20)\n\n- [ux] add confirming modal dialog\n    - only \"y\" required to confirm\n- add XDG support (thanks @jck for the PR #1420)\n    - `options.config` default is now `\"$XDG_CONFIG_HOME\"/visidata/config.py` if `$XDG_CONFIG_HOME` is set and `config.py` exists. If not, falls back to the standard `$HOME/.visidatarc`.\n    - vendor [appdirs.py](https://github.com/ActiveState/appdirs/blob/master/appdirs.py)\n- [cmdlog] support variables in .vdj (requested by @jungle-boogie #1364)\n    - in the .vdj, write variables like so: `${variableName}`\n    - then on the CLI: `vd -p foo.vdj variableName=bar`\n- [loaders arrow] new Apache Arrow IPC loader/saver (requested by @d-miketa #1369) (requires `pyarrow`)\n    - add `.arrow` (file) and .arrows (streaming) formats\n    - add more native `parquet` loader via `pyarrow`\n- preliminary \"windowing\" for referencing x rows before and y rows after in an expression (requested by @maxigit #1399, @MMesch #1129, @samuelludwig #1210)\n    - press `w` (longname: `addcol-window`) followed by two numbers: the number of rows to aggregate *before* and *after* the current row.\n    - there will be a new column, `foo_window`, where each row contains a list of aggregated rows. after that, e.g. `=` `sum(foo_window)` to get a running total for each row\n- add `setcol-format-enum` which takes e.g. `A=apple B=banana` and uses that as a mapping when formatting a column.\n- vendor `https://github.com/saulpw/unzip-http`; allows the downloading of individual files from a .zip file over http without downloading the entire archive (requires `urllib3` package)\n- add `save-source` to save a root sheet directly to its source\n- add `setcol-formatter` to specify formatting function used for Column (default: `generic` formats based on type and fmtstr).  Can be `json` or `python` or a custom formatter\n\n\n## Improvements\n\n- [cli] when `-v` or `-h` VisiData now does not read config or do anything else (requested by @geekscrapy #1340)\n- [cmdlog] set `.vdj` to be the default cmdlog format\n- [replay] allow column names to be numbers (reported by @frosencrantz #1309)\n    - if wishing to reference a column index, required to be an int in a .vdj cmdlog\n- [cmdlog] when saving cmdlogs, type column indices as integers, and column names as strings\n    - If replaying, and *col* is an `int`, the CmdLog will index by position.\n    - If *col* is a `str` it will index by column name.\n- [display] preview first n elements of a list/dict cell\n- [regex] add unbound `addcol-<regex>` commands\n- [rtl] improvements to right-to-left text display (requested by @dotancohen #1392)\n- [man] have `vd --help` open the .txt manpage by default (requested by @halloleo #1332)\n- [mouse] invert scroll wheel direction (requested by @marcobra #1351)\n- [performance] improvements to plotting of empty canvas, multiline display, and draw-ing functions\n- [plugins] notify when plugin update available (thanks @geekscrapy for PR #1355)\n\n## Bugfixes\n\n- [aggregators] fail on setting an unknown aggregator in **Columns Sheet** (reported by @geekscrapy #1299)\n- [aggregators] handle `delete-cell` case for aggregators column in **Columns Sheet** (reported by @geekscrapy #1299)\n- [aggregators] fix quartile aggregators (reported by @pnfnp #1312)\n- [aggregators] fix copying of aggregators when duplicating a sheet (reported by @frosencrantz #1373)\n- [canvas] do not use \"other\" label when there are exactly 9 columns being plotted (reported by @tdussa #1198)\n- [cli] fix `+:subsheet:col:row:` when `load_lazy` is False\n- [delete-row] clear deleted rows from `selectedRows` (reported by @geekscrapy #1284)\n- [exec-longname] output warning, if longname does not exist\n- [expr] prefer visible columns over hidden columns (reported by @frosencrantz #1360)\n- [freeze-sheet] carry over column attributes for freeze-sheet (reported by @frosencrantz #1373)\n- [import-python] use command-specific history (reported by @frosencrantz #1243)\n- [IndexSheet] fix renaming of sheet names from an IndexSheet (reported by @aborruso #1339)\n- [input] handle history for non-string input values (reported by @frosencrantz #1371)\n- [loaders pandas] fix (`dup-selected`) `\"`of selected rows for **Pandas Sheet** (reported and fixed by @jasonwrith #1315 #1316)\n- [loaders usv] swap delimiters (reported by @frosencrantz #1383)\n- [loaders usv] save delimiter override options (reported by @frosencrantz #1383)\n- [loaders usv] fix saving header with usv row delimiter (reported by @frosencrantz #1383)\n- [loaders xlsx] fix clipboard on XlsxSheets (reported by @jungle-boogie #1348)\n- [macros] fix macro-record keystroke setting (reported by @fatherofinvention #1280)\n- [mouse] stay disabled after input (reported by @holderbp #1401)\n- [mouse] fix for pypy3 (thanks @LaPingvino for PR\n- [quitguard] refinement of quit-sheet protection (reported by @geekscrapy #1037, #1381)\n- [save-selected] get sheet names for saving from selected rows (reported by @aborruso #1339)\n- [shell] strip trailing whitespace in `z;` output (reported by @justin2004 #1370)\n- [tty] fix bug where piping async output into stdin broke visidata keyboard input (reported by @ovikk13 #1347)\n- [undo] fix issue where undoing a reload blanks the current sheet; do not set undos for reload sheet (#1302)\n- [unset-option] fix issue where Exception is raised on the next undo-able command run after `unset-option` (reported by @ajkerrigan #1267)\n- [windows] require `windows-curses` installation on Windows (thanks @ajkerrigan for PR #1407; reported by @schiltz3 #1268, @aagha #1406)\n\n## API\n\n- add Column.formatter (generic, json, python)\n- add SqliteQuerySheet to globals\n- `vd.loadConfigFile()` no longer needs a filename argument, and will use `options.config` by default (#211)\n- use `newline=\"` for csv.writer (thanks @daviewales for PR #1368)\n- make `ItemColumn` a proper class for inheritance\n- add `openJoin` and `openMelt` to allow overriding by plugin sheetsS\n- addColumn takes `*cols` (reported by @pyglot #1414)\n\n## Deprecated\n\n- deprecate old vdmenu system\n    - remove `Shift+V` command\n\n# 2.8 (2021-12-15)\n\n## Improvements\n\n- [plugins] include pip stderr in warning\n- [plugins] use returncode to determine if pip install failed, before adding to imports (thanks @geekscrapy for PR #1215)\n- [cmdlog] add sheet creation command to cmdlog (requested by @aborruso #1209)\n- [open] strip whitespace from the beginning and end of inputted filenames\n- [options] `options.input_history` and `options.cmdlog_histfile` can now be an absolute paths (requested by @geekscrapy #1200)\n    - relative paths are relative to `options.visidata_dir`\n- [splitwin] automatically switch to pane where sheet is pushed to\n\n## Bugfixes\n\n- [curses] suppress invalid color errors in Python 3.10 (thanks @ajkerrigan for reporting #1227 and for PR #1231)\n    - Adapt to [Python 3.10 curses changes](https://docs.python.org/3/whatsnew/3.10.html#curses) which can raise a `ValueError` on invalid color numbers.\n- [curses cosmetic] simplify error message, if curses fails to initialise\n- [loaders json] skip blank lines in json files, instead of stopping at them (thanks @geekscrapy for PR #1216)\n- [loaders jsonl] fix duplicate columns when loading fixed columns sheets in jsonl format (report by @0ceanlight)\n    - example of formats with fixed columns is darkdraw's `DrawingSheet`\n- [loaders fixed] fix saver (thanks @geekscrapy for PR #1238)\n- [loaders postgres] fix recognition of postgres loader (reported by @ryanmjacobs #1229)\n- [loaders sqlite] fix the loading of sqlite VIEWs for sqlite version 3.36.0+ (reported by @frosencrantz #1222)\n- [help-commands] now lists commands only for the current sheet (reported by @geekscrapy #1217)\n- [textcanvas] ENTER on canvas should push copied source sheet for points within cursor\n- [pivot freq] use `options.histogram_bins` from source sheet\n- [curses cosmetic] fix issue where if a curses initialisation Exception is called, a second Exception follows\n- [quit-sheet-free] fix bug where quit-sheet-free, when multiple sheets opened in CLI, was not working (reported by @geekscrapy #1236)\n- [options] fix instance where local options sheet was called, instead of global options sheet (thanks @geekscrapy for PR #1241)\n\n## API\n\n- add standard Python `breakpoint()` to drop into the pdb debugger\n- export `run()` to global api\n- add CsvSheet, ZipSheet, TarSheet to global api (thanks @geekscrapy for PR #1235)\n\n# 2.7.1 (2021-11-15)\n\n- Bugfix: fix Enter on helpmenu (reported by @geekscrapy #1196)\n\n# 2.7 (2021-11-14)\n\n## Improvements\n\n- [movement] bind Home/End to go-top/go-bottom (thanks @geekscrapy #1161)\n- [api] add vd.urlcache as alias for urlcache global (thanks @geekscrapy for PR #1164)\n- [plugins] do not continue installation if main package fails pip install (thanks @geekscrapy for PR #1194)\n- [plugins] allow for plugin records without SHA256; warn if absent (thanks @geekscrapy for PR #1183)\n- [load_lazy] do not load subsheets, if `sheet.options.load_lazy` is True (thanks @geekscrapy for PR #1193)\n- [save] confirm when `save_foo` function does not exist and saver fallsback to `options.save_filetype` (reported by @geekscrapy #1180)\n- [save] `options.save_filetype` default now 'tsv'\n- several cosmetic improvements\n\n## Loaders\n\n- [lsv] add `lsv` filetype for simple awk-like records (requested by @fourjay #1179)\n- [ods] add `odf` filetype for Open Document Format spreadsheets\n- [xlsx] add extra columns (`cellobject`, `fontcolor`, `fillcolor`) if `options.xlsx_meta_columns` (default False) (thanks @hoclun-rigsep for PR #1098)\n- [sqlite] allow query/insert (no modify/delete yet) for `WITHOUT ROWID` tables (requested by @stephancb #1111)\n\n## Bugfixes\n\n- [savers compression formats] fix corruption when saving to compression formats (#1159)\n- fix \"ModuleNotFoundError: no module named 'plugins'\" error on startup (#1131 #1152)\n- [windows] fix issue with Enter key on Windows (reported by @hossam-houssien #1154)\n- [draw] fix multiline rows by making height fixed for all rows (reported by @geekscrapy #916)\n- [DirSheet] fix bug where fix key column sheets (e.g. DirSheet, SqliteIndexSheet) keycols were not being saved in batchmode (reported by @geekscrapy #1181)\n- [async] make sure all threads started on sheet are cancelable (reported by @geekscrapy #1136)\n- [AttrDict] fix bug with setting value on nested AttrDict\n- [dup-X-deep] fix error with async_deepcopy (thanks @pstuifzand for fix)\n- [join] fix 'inconsistent-keys' issue when joining between XlsxSheet with typed columns and CsvSheet with untyped columns (reported by @davidwales #1124)\n- [sqlite] handle sqlite column names with spaces (thanks @davidskeck for PR #1157)\n- [sqlite] use `options.encoding` and `options.encoding_errors` for decoding of sqlite db text (reported by @WesleyAC #1156)\n- [xlsx] add handling for EmptyCell instances (thanks @hoclun-rigsep for PR #1121)\n- [xlsx] gate sheet name cleaning on `options.clean_names` (reported by @davidwales #1122)\n- [macos] fix bindings for `Option`+key\n- [random-rows] fix import (reported by @geekscrapy #1162)\n- [save-selected] better default save filename (reported by @geekscrapy #1180)\n- [save] fix bug where saving multiple sheets to a single non-embeddable format did not result in fail (reported by @geekscrapy #1180)\n- [slide] fix Shift slide-down and Shift slide-up with arrow keys (reported by @a-y-u-s-h #1137)\n- [replay] fix replay where `join-sheets` operation hangs (reported by @agjohnson #1141)\n- [undo] no more KeyError when Undoing modifications (reported by @geekscrapy #1133)\n- [unfurl-col] fix unfurl-col on cells containing exceptions (reported by @jsvine #1171)\n\n# 2.6.1 (2021-09-28)\n\n## Bugfixes\n\n- [editor] fix sysopen-row (thanks @frosencrantz #1116)\n- [loaders fixed] fix saver (#1123)\n- [loaders shell] fix copy-files\n- [loaders sqlite] fix import error on exception (thanks @jsvine #1125)\n\n# 2.6 (2021-09-19)\n\n## Major feature\n\n- [menu] new hierarchical menu system\n    - `Alt+F`, `Alt+E`, etc to open submenus (`Alt+` underlined capital letter in toplevel menu)\n    - `Ctrl+H` to activate Help menu (manpage now at `gCtrl+H`)\n    - `q` or `Esc` to exit menu\n    - Enter to expand submenu item or execute command\n    - or left mouse click to activate and navigate menu\n    - only show commands available on current sheet\n    - sheet-specific commands highlighted with `options.color_menu_spec`\n    - new options:\n      - `disp_menu`: display menu if inactive (default True).  Can still activate menu with Ctrl+H/Alt+F\n      - `disp_menu_keys`: whether to display shortcuts inline (default True)\n      - `disp_menu_fmt`: upper right display on menu bar (like `disp_status_fmt`/`disp_rstatus_fmt`)\n      - theme colors: `color_menu` `color_menu_active` `color_menu_spec` `color_menu_help`\n      - theme chars: `disp_menu_boxchars` `disp_menu_more` `disp_menu_push` `disp_menu_input` `disp_menu_fmt`\n\n## Interface changes\n\n- [expand-col] only expand to one level\n- [slide] remove slide row/col with mouse\n- [macos] add bindings for Option+key to Alt+key\n- [modified] limit use of sheet protection (thanks @geekscrapy #1037)\n- [python] rebind g^X to new import-python command (what exec-python was mostly used for)\n- [npy] add `npy_allow_pickle` option (default False)\n- [join] rename join-sheets on IndexSheet to join-selected; bind both g& and & to join-selected\n- [loaders pandas] add error message for unpickling non-dataframes\n- [join] fail if no key columns on any sheet (thanks @geekscrapy #1061)\n- [loaders xlsx] enable access to cell metadata (thanks @hoclun-rigsep #1088)\n- many performance, progress bar, and UI responsiveness improvements\n\n## Bugfixes\n\n- [cli] issue warning if +sheet-position not found (thanks @geekscrapy #1046)\n- [clipboard] do not copy newline for syscopy-cell (thanks @geekscrapy #1064)\n- [column] detect existing column by row key instead of column name (thanks @geekscrapy #1058)\n- [color] set `color_current_row` to the same precedence as `color_current_column` (thanks @frosenrantz #1100)\n- [command] do not fail/abort on unknown command\n- [draw] Sort indicator on top of More indicator (thanks @geekscrapy #1071)\n- [join] fix multiple extend (thanks @cwarden)\n- [join] allow extended columns to be modified (thanks @cwarden)\n- [join] fix for rowdefs without bool (like pandas)\n- [loaders dirsheet] continue after exception in copyfile\n- [loaders fixed] fix fixed-format saver\n- [loaders fixed] save uses `global options.encoding` (thanks @geekscrapy #1060)\n- [loaders mysql] do not stop loading on first error (thanks @SuRaMoN #1085)\n- [loaders pandas] fix column rename\n- [loaders sqlite] save based on column names, not position\n- [loaders sqlite] allow changing value of cells that were NULL (thanks @mattenklicker #1052)\n- [loaders sqlite] add message on not currently supporting WITHOUT ROWID (thanks @stephancb #1111)\n- [multisave] fix breaking typo\n- [open_txt] load new blank sheet for 0 byte files (thanks @geekscrapy #1047)\n- [save] do not set a default for `options.save_filetype` (thanks @frosencrantz #1072)\n- [split-pane mouse] activate pane on click (thanks @frosencrantz #954)\n- [unfurl] handle unfurling exceptions (close #1053)\n- [quitguard] confirm quit when set on a specific sheet even if not precious or modified\n- [yaml] Fix yaml loader traces on no attribute `_colnames` (thanks @frosencrantz #1104)\n- [visidatarc] catch all visidatarc exceptions upon load\n\n# v2.5 (2021-07-08)\n\n- [social] #visidata has moved off of freenode to libera.chat\n- [deps] required pandas version for the pandas loader has been bumped to at least 1.0.5\n- [caa] new PR submitters required to sign CAA\n\n## Features\n\n- [cli] when no arguments on commandline, open currentDirSheet (previously vdmenu); -f opens empty sheet of that filetype\n- [clipboard] bind `x` family to `cut-*` (thanks @geekscrapy #895)\n- [date] add specialized comparators for `datetime.date` (thanks @aborruso #975)\n    - visidata.date now compares to datetime.date (previously raised exception)\n        - identical dates compare equal even if intra-day times are different\n        - this does not work for incompletely specified visidata.date; e.g.\n            `visidata.date(2016, 10, 29, 4, 0, 0) != visidata.date(2016, 10, 29)`\n- [DirSheet] add y/gy to copy file(s) to given directory\n- [loaders vds] save non-jsonable cells as string (thanks @pacien #1011)\n- [loaders zstd] support loading zstd-compressed files (thanks @lxcode #971)\n- [movement] bind `Ctrl+Left/Right` to `go-left`/`right-page` (thanks @davidwales #1002)\n- [options] save to foo.visidatarc from OptionsSheet (thanks @njthomas #958)\n- [sqlite] RENAME and DROP tables from SqliteIndexSheet\n- [unfurl] add `options.unfurl_empty` to include row for empty list/dict (thanks @frosencrantz #898)\n- [quitguard] confirm quit/reload only if sheet modified (references #955, #844, #483; thanks @jvns, @frosencrantz)\n\n## Improvements\n\n- [addRow] advance cursor if row inserted before cursor\n- [archive] add .lzma as alias for .xz\n- [clipboard] gzp pastes None if nothing on clipboard\n- [clipboard] make syspaste async\n- [clipboard] bind `zP` to syspaste-cells and gzP to syspaste-cells-selected (thanks @jvns and frosencrantz #983, #990)\n- [cliptext] better support for combining and variant chars (thanks @lxcode #758 #1034)\n- [colors] reduce color swatch size to remove flashing (thanks @frosencrantz #946)\n- [encoding] specify encoding explicitly for all Path.open_text (thanks @pacien #1016)\n- [error] exceptionCaught(status=False) to add to status history, but not post to status (thanks @frosencrantz #982)\n- [freqtbl] copy fmtstr from source col to aggcol (thanks @geekscrapy #1003)\n- [help] ENTER/exec-command to execute command on undersheet (thanks @geekscrapy #1011)\n- [help] add `all_bindings` hidden column (thanks @frosencrantz #896)\n- [inputs] put reused input at end of lastInputs (thanks @geekscrapy #1033)\n- [loaders json] streamify save to .json\n- [loaders npy] add `npy_allow_pickle` option, default False\n- [loaders tsv] increase bufsize to improve loader performance by 10%\n- [path] all Path.open track Progress via read/filesize (thanks @jspatz #987)\n- [path] add Progress for opening compressed files\n- [path] implement line-seek operations (thanks @pacien #1010)\n- [regex expand] deprecate `options.expand_col_scanrows`; standardize on `options.default_sample_size` (thanks @jsvine)\n- [regex] \"match regex\" to \"capture regex\" (thanks @geekscrapy #1032)\n- [shell] `addcol-shell` pass command to $SHELL (thanks @juston2004 #1023)\n- [shortcut] allow shortcut for jump-sheet to be settable\n- [splitwin] push sheet in empty pane iff splitwin\n- [stdin] use cli --encoding option for piped data (thanks @pacien #1018)\n- [undo] remove undo for reload (replaced with quitguard+confirm)\n- [quit] add Shift+Q/quit-sheet-free to quit and free associated memory (thanks @cwarden)\n\n## Display\n- [canvas] add `options.disp_canvas_charset` to change displayed chars (thanks @albert-ying #963)\n- [canvas] use sheet specific options for draw\n- [disp] format list/dict as [n]/{n} only for anytype\n- [save] iterdispvals(format=True) convert None to empty string\n\n## Bugfixes\n\n- [batch] ensure quitguard is off during batch mode\n- [canvas[ fix error on dive into cursor including y-axis\n- [cli] have an actual error if there is a missing argument for final option\n- [cli] do nothing (no error) if no sources given\n- [clipboard] fix zy/gzp regression (thanks @sfranky #961)\n- [clipboard] syscopy-cell do not include column name\n- [cmdlog] fix bug where customising replayable options in Options Sheet led to issues opening metasheets (thanks @jsvine #952)\n- [cmdlog] fix bug where cmdlog records new sheet name, instead of old sheet name for `rename-sheet` (thanks @aborruso #979)\n- [color] track precedence so colorizers apply over `color_current_row`\n- [color] determine color availability with `init_pair`\n- [color] do not break on nonsense color\n- [column] getitemdeep/setitemdeep get/set dotted item key if exists (thanks @frosencrantz #991)\n- [column] fix bug where hard crash occurs when cursor on cell of SheetsSheet is on cursorDisplay (thanks @frosencrantz #1029)\n- [curses] add default `vd.tstp_signal` for non-cli users\n- [execCommand] warn gracefully if bound command longname does not exist\n- [expr] setValuesFromExpr do not stop processing on exception\n- [join] fix when keys have different names (thanks @aborruso #964)\n- [join] fix for rowdefs without bool (like pandas)\n- [join] fix multiple extend (thanks @cwarden for reporting)\n- [loaders fixed] fix editing in final column for fixed-width load (thanks @mwayne #974)\n- [loaders geojson] do not abort plot if rows have errors\n- [loaders html] add columns even if not in first row\n- [loaders pandas] fix column rename\n- [loaders rec json] fix adding new columns for json and rec loaders (thanks @ajkerrigan #959)\n- [loaders postgresql] add postgresql scheme (fixes #966) (thanks @zormit #967)\n- [loaders sqlite] fix saving deleted cells (thanks @mattenklicker #969)\n- [loaders vds] save SettableColumn as Column (thanks @pacien #1012)\n- [loaders zip] fix extract-selected-to\n- [open] fix regression where opening blank sheets of type tsv, csv, txt, etc was not working\n- [plugins] fix stdout/error from plugins installation message (was in bytes, changed to str)\n- [quit] remove sheets from **Sheets Sheet** upon quit\n- [save-col] fix inputPath error (thanks @savulchik #962)\n- [shell] fix `options.dir_hidden`; also apply to dirs when `dir_recurse`\n- [textsheet] fix reload after `^O` sysopen\n\n## vdplus\n\n- moved clickhouse, vsh, vgit, windows to vdplus\n\n\n# v2.4 (2021-04-11)\n\n- [splitwindow] stabilize sheet stack associations\n    - `Shift+Z` pushes 'under sheet' (if any) onto other stack\n    - `Shift+Z` does not swap panes anymore\n    - `g Tab` swaps panes\n    - `options.disp_splitwin_pct` is always not sheet-specific\n\n- [status] show nSelectedRows on rstatus\n\n- [color] remove `options.use_default_colors` (thanks @lxcode #939)\n    - `options.color_default` can now have both fg and bg\n    - other color options which do not specify fg or bg will use the missing component from `color_default`\n    - to use terminal default colors, set `options.color_default=\"\"`\n\n## Bugfixes\n\n- [loaders gzip] fix progress bar when opening gzip (thanks @geekscrapy #925)\n- [loaders http] fix loading files from url without specifying filetype\n- [loaders sqlite] use `TABLE_XINFO` for hidden/virtual columns (thanks @dotcs #945)\n- [loaders sqlite] perf improvement: do not pre-count rows (required full table scan)\n- [loaders vds] save typed values instead of formatted display values (thanks @frosencrantz #885)\n- [loaders xlsx] stringify \"header\" row values for column names (thanks @davidwales #921)\n- [pyobj-show-hidden] grab visibility lvl from sheet specific option (thanks @frosencrantz #947)\n- [splitwin] prevent flickering-on-full-window\n- [splitwin] if top sheet quit, keep bottom sheet in bottom pane\n- [splitwin] full-screen/splitwin close all sheets should be part of the same stack\n\n# v2.3 (2021-04-03)\n\n## Features\n    - [colors] allow background colors (thanks @frosencrantz #435)\n        - use \"*fg* on *bg*\" e.g. \"212 yellow on 14 red\"\n            - \"bg *bg* fg *fg*\" (or reversed)\n            - attributes always apply to foreground regardless of position in colorstr\n            - as before, only the first valid color in a category (fg/bg) is used; subsequent color names (even unknown ones) are ignored\n        - allocate colors on demand, instead of \"all\" 256 colors as fg\n        - **Colors Sheet** now only includes colors actually allocated\n    - [colors] set `use_default_colors` default to `True` (was `False`)\n    - [delete] do not move deleted values to clipboard (thanks @geekscrapy #895)\n        - `delete-*` commands are changed to not alter the clipboard\n        - the previous `delete-*` commands are renamed to `cut-*` (unbound)\n        - this affects: `delete-row`, `delete-selected`, `delete-cell`, `delete-cells`\n    - [jump-first] bound `g^^` to cycle through sheets\n    - [null] `zd` / `gzd` `delete-cells` set to `options.null_value` instead of `None`\n    - [memories] add MemorySheet on `Alt+M`, `Alt+m` adds current cell to sheet  (thanks @UrDub and @geekscrapy #912)\n        - useful for storing values to reference later\n        - both names and values can be edited on MemorySheet\n        - [aggregator] `memo-aggregator`(z+; formerly called `show-aggregate`) adds value to memory sheet\n        - [clipboard] clipboard stored on memory sheet; zy/zp use vd.memory.clipval;\n    - [plugins] allow install from github url to local pip repo\n    - [plugins] add darkdraw to plugins.jsonl\n    - [png] save image as RGBA\n    - [pyobj-expr] `Ctrl+X` within `Ctrl+X` input suspends directly into python REPL\n    - [splitwin] now involves two different sheetstacks that build and quit independently (thanks @lamchau #894)\n        - [splitwin] allows stickier panes for push/quit\n    - [splitwin] splitwin-half (`Z`) swaps panes if already active\n    - [splitwin] only re-split (with `zZ`) if sheets are not already split, otherwise adjust split percent\n    - [save_filetype] if `save_ext` does not exist, or if `options.save_filetype` is different from default, use `options.save_filetype`\n    - [vdplus] auto-import, ignore if not available\n\n## Bugfixes\n    - [aggregator] fix typo in deciles description (thanks @cwarden #922)\n    - [copy] copying BasicRow (new sheets), now does not error (still blank)\n    - [cmdlog] for `open-file` source logging in cmdlog, we want paths to physical files, so if src is a **Sheet** grabs its source\n    - [defer] fix pasting in deferred sheets\n    - [eval] fix **ExprColumns** on empty rows\n    - [help] move signal config earlier in runcycle, to accommodate --help (thanks @frosencrantz #926)\n    - [open] create blank sheet of appropriate type when path does not exist\n    - [pandas] fix conflict between dropped index and existing column (thanks thomanq #937)\n    - [plugins] only check for plugins.jsonl once daily (previously: every start-up)\n    - [pivot] fix `openRow`\n    - [pivot] fix bug with sheet name\n    - [png] fix saving directly from canvas\n    - [sort] fix sorting of visidata.Path objects (thanks @frosencrantz #897)\n    - [splitwin] fix cursor behaviour on both panes when active\n        - cursor movement on inactive panes is blocked\n    - [SuspendCurses] workaround for bug in curses.wrapper (thanks @frosencrantz #899)\n    - [undo] do not set undo for a `commit-sheet`\n\n## Api\n    - [addRows] addRows(rows, index, undo) adds rows at index, sets undo if True\n        - set undo to False, if using addRows within an addUndo function\n    - [deleteBy] add an undo flag to deleteBy\n    - [clipboard] change `cliprows` to be a simple list of rows\n    - new **DrawablePane** super-base class\n    - [json] rowdef now **AttrDict** for massive convenience\n\n# v2.2.1 (2021-02-07)\n\n## Bugfixes\n    - [setcol-fill] use row identity to identify selected rows (thanks @frosencrantz, #884)\n        - for jsonl, empty rows are identical ({}), and if ones is selected, previously it would result in all of them being filled.\n        - also, fill with most recent *non-null* value\n\n## man\n    - add a manpage visidata.1\n    - fix typo\n\n# v2.2 (2021-01-30)\n\n## Options\n\n    - [cli options] now global by default; use `-n` to set option as sheet-specific instead\n        - add `-n`/`--nonglobal` to make subsequent CLI options \"sheet-specific\" (applying only to paths specified directly on the CLI)\n        - keep `-g`/`--global` to make subsequent CLI options \"global\" (applying to all sheets by default unless overridden)\n        - invert the default: now CLI options are global by default (thus `-g` is a no-op unless preceded by `-n` on the CLI)\n        - `-g` no longer acts as a toggle\n\n    - [input] add `options.input_history` (thanks @tsibley and @ajkerrigan #468)\n        - basename of file to store persistent input history (default of `''` means disabled)\n        - caveat: persistent file only read if option given before first input\n\n    - [options.fancy_chooser] now disabled by default--use `Ctrl+X` to open from a choose() prompt\n\n## Types\n\n    - [types] add `floatlocale` type (thanks @Guiriguanche #863)\n        - add commands `type-floatlocale` and `type-floatlocale-selected` (unbound by default)\n        - `floatlocale` parses based on `LC_NUMERIC` envvar (must be set before launching)\n        - parsing is 20x slower than with standard float column\n        - will parse commas as decimals (e.g. '1,1') if LC_NUMERIC is set to a locale like 'en_DK.UTF-8'\n\n## Loaders\n\n    - [loaders geojson] add loading and saving support for geojson files (thanks @draco #876)\n    - [loaders vds] add loader/saver for custom .vds format (VisiData Sheet) to save column properties and data for multiple sheets in one file\n    - [ux] autoload all subsheets by default; set `options.load_lazy` to disable\n        - removes a minor friction with unloaded subsheets\n\n    - [loaders http] add `options.http_max_next` to limit api pagination (default 0 - no pagination) (thanks @aborruso #830)\n\n## Bugfixes and Adjustments\n\n    - [cli] fail properly if path cannot be opened\n    - [defer] only mention number of deleted rows, if some were deleted\n    - [go-pageup go-pagedown] ensure cursor stays in the same relative positions\n    - [loaders mysql] fix mysql loader duplicating tables for each database (thanks @SuRaMoN #868)\n    - [loaders mysql] perform asynchronous data fetch for mysql loader (thanks @SuRaMoN #869)\n    - [loaders pandas] fix empty subsets for dup-selected and frequency table `open-row` (thanks @ajkerrigan #881 #878)\n    - [loaders shp] fix display (thanks @dracos #874)\n    - [loaders shp] fix saving to geojson (thanks @dracos #876)\n    - [replay] fix replaying of .vd with `set-option`\n    - [slide] fix bug when sliding key columns to the left, after sliding them to the right\n    - [types] add command `type-floatsi-selected` on **Columns Sheet**\n\n    - [expand] errors and nulls can now be expanded with `expand-cols` (thanks @geekscrapy #865)\n\n    - [open] openSource now uses **'global'** `options.filetype` instead of sheet-specific as previous\n        - to set the filetype for a file locally, set through cli: `vd -f tsv sample.foo`\n        - to set in the **CommandLog**, use sheet=\"global\" with longname=\"set-option\"\n\n    - [loaders http] raise exception if http status is not 20x (thanks @geekscrapy #848)\n    - [loaders shp] support more Shapefile types (thanks @dracos #875)\n\n## API\n    - add `create` kwarg to `openSource()`, to create the file if it does not exist already\n    - [settings] 'global' is now 'default', and 'override' is 'global'\n        - 'default' is the default setting within VisiData\n        - 'global' is a user override on that default that applies globally\n        - sheet-specific overrides global and default, for the sheet it is specific to\n        - options set through visidatarc and cli are 'global' unless otherwise specified\n    - [save] grab `save_foo` from **SheetType** first\n        - allows overrides of sheet-specific saving\n\n# v2.1.1 (2021-01-03)\n\n    - [macros] allow macro interfaces to be longnames (thanks @frosencrantz #787)\n    - [save] better default save filename for url sheets (thanks @geekscrapy #824)\n\n## Bugfixes\n    - [cmdlog] record column, sheet, and row info for open-cell\n    - [cmdlog] catch case of 'override' sheet for set-option\n    - [expr-col] `curcol` now works for multiple invocations (thanks @geekscrapy #659)\n    - [loaders postgres] account for postgres_schema when rendering Postgres tables (thanks @jdormit for PR #852)\n    - [loaders url] fail unknown URL scheme (thanks @geekscrapy for PR #84)\n    - [pyobj] fix Pyobj Sheets for lists (thanks @brookskindle #843)\n    - [pipe] handle broken pipes gracefully (thanks @robdmc #851)\n    - [scroll] fix issue with jagged scrolling down (thanks @uoee #832)\n    - [sort] fix bug where total progress in sorting is (100 * # of columns to sort) (thanks @cwarden)\n\n## api\n    - format_field formats int(0) and float(0.0) as \"0\" (thanks @geekscrapy for PR #821)\n    - add TypedWrapper.__len__ (thanks @geekscrapy)\n\n# v2.1 (2020-12-06)\n\n    - [add] add bulk rows and cols leave cursor on first added (like add singles)\n    - [add] add colname input to `addcol-new`\n    - [aggregators] add mode and stdev to aggregator options (thanks @jsvine for PR #754)\n    - [api] add options.unset()\n    - [columns] add hidden 'keycol' to **ColumnsSheet**  (thanks @geekscrapy for feature request #768)\n    - [cli] support running as `python -m visidata` (thanks @abitrolly for PR #785)\n    - [cli] add `#!vd -p` as first line of `.vdj` for executable vd script\n    - [cli] allow `=` in `.vd` replay parameters\n    - [clipboard] clipboard commands now require some selected rows #681\n    - [commands] add unset-option command bound to `d` on OptionsSheet #733\n    - [config] `--config=''` now ignores visidatarc (thanks @rswgnu for feature request #777)\n    - [defer] commit changes, even if no deferred changes\n    - [deprecated] add traceback warnings for deprecated calls (thanks @ajkerrigan for PR #724)\n    - [display] add sort indication #582\n    - [display] show ellipsis on left side with non-zero hoffset (thanks @frosencrantz for feature request #751)\n    - [expr] allow column attributes as variables (thanks @frosencrantz for feature request #659)\n    - [freq] change `numeric_binning` back to False by default\n    - [input] Shift+Arrow within `edit-cell` to move cursor and re-enter edit mode\n    - [loaders http] have automatic API pagination (thanks @geekscrapy for feature request #480)\n    - [loaders json] improve loading speedup 50% (thanks @lxcode for investigating and pointing this out #765)\n        - this makes JSON saving non-deterministic in Python 3.6, as the order of fields output is dependent on the order within the dict\n            - (this is the default behaviour for dicts in Python 3.7+)\n    - [loaders json] try loading as jsonl before json (inverted)\n        - jsonl is a streamable format, so this way it doesn't have to wait for the entire contents to be loaded before failing to parse as json and then trying to parse as jsonl\n        - fixes api loading with http so that contents of each response are added as they happen\n        - unfurl toplevel lists\n        - functionally now jsonl and json are identical\n    - [loaders json] try parsing `options.json_indent` as int (thanks @frosencrantz for the bug report #753)\n         this means json output can't be indented with a number. this seems like an uncommon use case\n    - [loaders json] skip lines starting with `#`\n    - [loaders pdf] `options.pdf_tables` to parse tables from pdf with tabular\n    - [loaders sqlite] use rowid to update and delete rows\n        - note that this will not work with WITHOUT ROWID sqlite tables\n    - [loaders xlsx] add active column (thanks @kbd for feature request #726)\n    - [loaders zip] add extract-file, extract-selected, extract-file-to, extract-selected-to commands\n    - [macros] add improved macro system (thanks @bob-u for feature request #755)\n        - `m` (`macro-record`) begins recording macro; `m` prompts for keystroke, and completes recording\n        - macro can then be executed every time provided keystroke is used, will override existing keybinding\n        - `gm` opens an index of all existing macros, can be directly viewed with `Enter` and then modified with `Ctrl+S`\n        - macros will run command on current row, column sheet\n        - remove deprecated `z Ctrl+D` older iteration of macro system\n    - [regex] use capture names for column names, if available, in `capture-col` (thanks @tsibley for PR #808)\n        - allows for pre-determining friendlier column names, saving a renaming step later\n    - [save] `g Ctrl+S` is `save-sheets-selected` on **IndexSheet**\n        - new command allows some or all sheets on an **IndexSheet** to be saved (and not the sheets on the sheet stack)\n    - [saver] add fixed-width saver (uses col.width)\n    - [saver sqlite] ensureLoaded when saving sheets to sqlite db\n    - [search] `search-next` and `searchr-next` are now bound to n and N (was `next-search` and `search-prev`)\n    - [select] differentiate select-equal- and select-exact- (thanks @geekscrapy for feature request #734)\n       - previous select-equal- matched type value\n       - now select-equal- matches display value\n       - add `z,` and `gz,` bindings for select-exact-cell/-row\n    - [sheets] sorting on **SheetsSheet** now does not sort **SheetsSheet** itself. (thanks @klartext and @geekscrapy for bug reports #761 #518)\n    - [status] use `color_working` for progress indicator (thanks @geekscrapy for feature request #804)\n    - [types] add floatsi parser (sponsored feature by @anjakefala #661)\n        - floatsi type now parses SI strings (like 2.3M)\n        - use `z%` to set column type to floatsi\n\n## Bugfixes\n\n    - [api] expose visidata.view (thanks @alekibango for bug report #732)\n    - [color] use `color_column_sep` for sep chars (thanks @geekscrapy for bug report)\n    - [defer] frozen columns should not be deferred (thanks @frosencrantz for bug report #786)\n    - [dir] fix commit-sheet and delete-row on DirSheet\n    - [draw] fix display for off-screen cursor with multiline rows\n    - [expr] remove duplicate tabbing suggestions (thanks @geekscrapy for bug report #747)\n    - [expr] never include computing column (thanks @geekscrapy for bug report #756)\n        - only checks for self-reference; 2+ cycles still raises RecursionException\n        - caches are now for each cell, instead of for each row\n    - [freeze] freeze-sheet with errors should replace with null\n    - [loaders frictionless] assume JSON if no format (thanks scls19fr for bug report #803)\n        - from https://specs.frictionlessdata.io/data-resource/#data-location):\n            - a consumer of resource object MAY assume if no format or mediatype property is provided that the data is JSON and attempt to process it as such.\n\n    - [loaders hdf5] misc bugfixes to hdf5 dataset loading (thanks @amotl for PR #728)\n    - [loaders jsonl] fix copy-rows\n    - [loaders pandas] support loading Python objects directly (thanks @ajkerrigan for PR #816 and scls19fr for bug report #798)\n    - [loaders pandas] ensure all column names are strings (thanks @ajkerrigan for PR #816 and scls19fr for bug report #800)\n    - [loaders pandas] build frequency table using a copy of the source (thanks @ajkerrigan for PR #816 and scls19fr for bug report #802)\n    - [loaders sqlite] fix commit-sheet\n    - [loaders sqlite] fix commit deletes\n    - [loaders xlsx] only reload Workbook sheets to avoid error (thanks @aborruso for bug report #797)\n    - [loaders vdj] fix add-row\n    - [man] fix warnings with manpage (thanks @jsvine for the bug report #718)\n    - [movement] fix scroll-cells (thanks @jsvine for bug report #762)\n    - [numeric binning] perform degenerate binning when number of bins greater than number of values\n        - (instead of when greater than width of bins)\n    -  [numeric binning] if width of bins is 1, fallback to degenerate binning\n    - [numeric binning] degenerate binning should resemble non-numeric binning (thanks @setop for bug report #791)\n    - [options] fix `confirm_overwrite` in batch mode\n        - fix `-y` to set `confirm_overwrite` to False (means, no confirmation necessary for overwrite)\n        - make `confirm()` always fail in batch mode\n        - make `confirm_overwrite` a sheet-specific option\n    - [plugins] only reload **Plugins Sheet** if not already loaded\n    - [replay] move to replay context after getting sheet (thanks @rswgnu for bug report #796)\n    - [replay] do not push replaying .vd on sheet stack (thanks @rswgnu for bug report #795)\n    - [scroll] zj/zk do nothing in single-line mode (thanks @jsvine for suggestion)\n    - [shell] empty stdin to avoid hanging process (thanks @frosencrantz for bug report #752)\n    - [status] handle missing attributes in `disp_rstatus_fmt` (thanks @geekscrapy for bug report #764)\n    - [tabulate] fix savers to save in their own format (thanks @frosencrantz for bug report #723)\n    - [typing] fix indefinite hang for typing (thanks @lxcode for issue #794)\n    - [windows] add Ctrl+M as alias for Ctrl+J #741 (thanks @bob-u for bug report #741)\n    - [windows man] package man/vd.txt as a fallback for when man is not available on os (thanks @bob-u for bug report #745)\n\n## Plugins\n- add conll loader to **PluginsSheet** (thanks @polm)\n- remove livesearch\n- add clickhouse loader\n\n## Commands\n- if `options.some_selected_rows` is True, `setcol-expr`, `setcol-iter`, `setcol-subst`, `setcol-subst`, `setcol-subst-all` will return all rows, if none selected\n\n## API\n- [columns] add Column.visibleWidth\n- [open] additionally search for `open_filetype` within the vd scope\n- [select] rename `someSelectedRows` to `onlySelectedRows`\n- [select] add new `someSelectedRows` and `options.some_selected_rows` (thanks maufdez for feature request #767)\n    - if options is True, and no rows are selected, `someSelectedRows` will return all rows\n- [status] allow non-hashable status msgs by deduping based on stringified contents\n- [isNumeric] isNumeric is part of vdobj\n\n# v2.0.1 (2020-10-13)\n\n## Bugfixes\n    - Fix printing of motd to status\n\n# v2.0 (2020-10-12)\n\n## Additions and Improvements\n    - [aggregators] allow custom aggregators in plugins/visidatarc (thanks @geekscrapy for the feature request #651)\n    - [loaders xlsx] automatically clean sheet name when saving; warn if sheet name changes (thanks @geekscrapy for the request #594)\n    - [columns] unhide height attribute by default (thanks @frosencrantz for feature request #660)\n    - add .vcf (VCard) loader\n    - [sqlite] remove name of db from an **SqliteSheet**'s name, only tablename\n    - [syspaste] make `syspaste-` replayable and undoable (note that `syspaste-` value will be recorded in **CommandLog**)\n    - [savers] many text saver filetypes via tabulate library (thanks @jsvine for original vdtabulate plugin)\n    - [calc] ExprColumn no longer cached by default\n    - [loaders rec] add new .rec file loader and multisheet saver (recutils)\n    - [savers] implemented multisheet saver for both json and jsonl\n    - [loaders eml] add new .eml file loader for email files with attachments\n\n## Options\n    - add `options.incr_base` (thanks @chocolateboy for the suggestion #647)\n    - (former) `options.force_valid_colnames` renamed to `options.clean_names`\n        - applies to **Sheets** and **Columns** now (thanks @geekscrapy for the request #594)\n    - for --X=Y, do not replace - with _ in Y (thanks @forensicdave for bug report #657)\n    - add `options.default_height` for visibility toggle (thanks @frosencrantz for feature request #660)\n    - add support for `--` option-ending option on CLI.\n    - [input] default now `fancy_chooser` = True\n        - when fancy_chooser enabled, aggregators and jointype are chosen with a ChoiceSheet.\n        - `s` to select, `Enter` to choose current row, `g Enter` to choose selected rows, `q` to not choose any\n    - numeric_binning is now True by default (enables numeric binning on **PivotSheet** and **FreqTable** for numeric columns\n\n## Command changes and additions\n        - (former) setcol-range (`gz=`) renamed to `setcol-iter`\n        - (former) `addcol-range-step` (`i`) renamed to `addcol-incr-step`\n        - (former) `setcol-range` (`gi`) renamed to `setcol-incr`\n        - (former) `addcol-range-step` (`zi`) renamed to `addcol-incr-step`\n        - (former) `setcol-range-step` (`gzi`) renamed to `setcol-incr-step`\n        - add `scroll-cells-*` to scroll display of cells while remaining in a Column; bind to [g]z{hjkl}\n        - (former) unbind z{hjkl} from `scroll-col` (thanks @geekscrapy for feature request #662)\n        - add `type-floatsi` bound to `z%` (#661)\n        - `reload-selected` now reloads all **Sheets** if none selected (thanks @geekscrapy for PR #685)\n        - add customdate with fixed fmtstr for parsing (use `z@` and input a fmtstr compatible with strptime (thanks @suntzuisafterU for feature request #677)\n\n## Bugfixes\n    - [DirSheet] use changed ext as filetype when loading files (thanks @frosencrantz for bug report #645)\n    - [slide] several major improvements to column sliding; key column sliding now works (thanks much to @geekscrapy for bug hunting #640)\n    - [open-row] **Sheets Sheet** should be removed from stack upon `open-row` (thanks @cwarden for the bug report)\n    - [cli] re-add --version (thanks @mlawren for bug report #674)\n    - [open-config] fix `gO` (thanks @geekscrapy for bug report #676)\n    - [splitwin] handle swap case for single sheet (thanks @geekscrapy for bug report #679)\n    - [loaders xlsx] handle `None` column names for all **Sequence Sheet** loaders (thanks @jsvine for bug report #680)\n    - [settings] retrieve from cache for top sheet if obj is None (thanks @aborruso for the bug report #675)\n    - [settings] check if option is set on specific sheet before falling back to override\n    - [describe] have **DescribeSheet** use source column's sheet's `options.null_value` to calculate its null column (thanks @aborruso for the bug report #675)\n    - [undo] ensure that undos for complex commands (like `expand-cols`) are set more frequently (thanks @frosencrantz for the bug report #668)\n        - it is still possible to find race conditions if the user presses commands fast enough, however they should happen far less frequently\n    - [vlen] fix numeric binning for `vlen()` (thanks @frosencrantz for bug report #690)\n    - [pivot] fix pivot case where no aggregator is set\n    - [pyobj] fix filtering for **PyobjSheet**\n    - [DirSheet] fix sorting for directory column of **DirSheet** (thanks @frosencrantz for bug report #691)\n    - [json] fix bug saving cells with nested date values (thanks @ajkerrigan for PR #709)\n    - [input] fix Ctrl+W bug when erasing word at beginning of line\n    - [plugins] import `.visidata/plugins` by default\n    - [pandas] use a safer `reset_index()` to avoid losing data when updating a pandas index (thanks @ajkerrigan for PR #710)\n    - [threads] disable `add-row` on **ThreadsSheet** (thanks @geekscrapy for bug report #713)\n\n## deprecated\n    - complete removal of `status` and `statuses` from deprecated (thanks @frosencrantz for bug report #621)\n        - longnames are now `open-status` and `show-status`\n    - remove `cursorColIndex`\n\n## API and Interface\n    - `Sheet(*names, **kwargs)` autojoins list of name parts\n    - `openSource()`, `aggregator()`, and `aggregators` are now part of vdobj\n    - `set_option` is now `setOption`\n    - move `isError` to `Column.isError`\n    - deprecate `load_pyobj`, now **PyobjSheet**\n    - add `.getall('foo_')` which returns all options prefixed with `'foo_'`; deprecated `options('foo_')`\n    - `nSelected` is now `nSelectedRows`\n    - make `Column.width` property, so setting is same as `Column.setWidth`\n    - `evalexpr` is now `evalExpr`\n    - `format` is now `formatValue`\n    - `SettableColumn.cache` is now `._store`\n    - `vdtype()` is now `vd.addType()`\n    - add `addColumnAtCursor` (thanks @geekscrapy for bug report #714)\n\n## Plugins\n    - update sparkline (thanks @layertwo #696)\n    - plugin dependencies now install into `plugins-deps` (former plugin-deps)\n\n## Dev niceties\n    - Fully automate dev setup with Gitpod.io (thanks @ajkerrigan for PR #673)\n\n\n# v2.-4 (2020-07-27)\n\n## Additions and Improvements\n    - [cmdlog] allow sheet-specific set-option for replay\n    - [columns] add default uppercase names for created columns (like VisiCalc)\n        - these names are global; no default name is ever reused\n    - [cosmetic] a column with a width 1 will now display (thanks @frosencrantz for the bug report #512)\n    - [defer] move defermods and vls back into vdcore\n        - configure sqlite and DirSheet to use it\n    - [dir] allow explicit filetype when loading a directory (thanks @geekscrapy for the bug report #546)\n    - [errors] ErrorsSheet on `g Ctrl+E` lists errors, instead of concatenating\n    - [expand-cols] account for all visible rows when expanding a column (thanks @ajkerrigan for PR #497)\n    - [loaders csv] use `options.safe_error` for cell exceptions on save\n    - [loaders http] use file format in path if loader available (thanks @jsvine for PR #576 and bug report #531)\n        - if not, fail back to MIME type (prev behaviour)\n    - [loaders imap] add loader for imap://\n    - [loaders json] handle non-dict rows in json data (thanks @ajkerrigan for PR #541 and @jsvine for bug report #529)\n    - [loaders jsonl] show parse errors in every column\n    - [loaders MySQL] add support for MySQL loader (thanks @p3k for PR #617)\n    - [loaders pandas] upgrade pandas to 1.0.3 (thanks @ajkerrigan for PR #563)\n    - [loaders pandas] add auto-loaders for feather, gbq, orc, parquet, pickle, sas, stata (thanks @khughitt for bug report #460)\n    - [loaders pdf] add simple pdf loader\n    - [loaders postgres] add support for connecting directly to rds (thanks @danielcynerio for PR #536)\n        - the url has the following format: `rds://db_user@hostname:port/region/dbname`\n        - it assumes that the AWS IAM for the user is configured properly\n    - [loaders xls/xlsx] add save_xls and save_xlsx (thanks @geekscrapy for PR #574)\n    - [loaders yaml] allow diving into YAML rows (thanks @ajkerrigan for PR #533)\n    - [loaders yaml] use the default safe YAML loader (thanks @tsibley for the PR #600 )\n        - the full loader is unsafe because serialized files can be constructed which run arbitrary code during their deserialization\n        - the safe loader supports a very large subset of YAML and supports the most common uses of YAML\n    - [loaders yaml] support files containing multiple documents (thanks @tsibley for PR #601)\n    - [options] set visidata_dir and config from `$VD_DIR` and `$VD_CONFIG` (thanks @tsibley for bug report #448)\n    - [type fmtstr] thousands separator (thanks @dimonf for bug report #575)\n        - default for int/float is string.format for roundtripping accurately in data text files like csv\n        - if fmtstr starts with '%', use locale.format_string (with grouping)\n        - otherwise, use python string.format\n        - currency uses locale, and is grouped.\n    - [quitguard] if set on specific sheet, only confirm quit on that sheet (thanks @jsvine for bug report #538)\n    - [undo] add undo for `rename-col-x` family, mouse slide, and `reload-sheet` (thanks @jsvine for feature request #528)\n\n## Command changes\n    - [add-sheet] renamed to open-new; new sheet always has a single column\n    - [config] bind `g Shift+O` back to open-config (#553)\n    - [dive] convert many dive- commands to open- (#557)\n        - add open-row bound to `ENTER` on Sheet itself\n        - add `open-source` unbound on BaseSheet\n        - deprecate `dive-*` longname\n    - [options] options-global now `Shift+O`; options-sheet now `z Shift+O`\n    - [multi-line] have visibility toggle Multi-Line Row on TextSheets (Closes #513)\n        - used to toggle `wrap`\n\n## Command additions\n    - [canvas] add resize-x/y-input commands to set x/y axis dimensions (thanks @pigmonkey for feature request #403)\n    - [errors] add select-error-col and select-error (thanks @pigmonkey for feature request #402)\n    - [input] `Ctrl+Y` paste from cell clipboard\n    - [input] Ctrl+Left/Right move cursor to prev/next word\n    - [iota] add `i` family of commands (iota/increment)\n        - (former) setcol-range (`gz=`) renamed to `setcol-iter`\n        - `addcol-range-step` (`i`): add column with incremental value\n        - `secol-range` (`gi`): set current column for selected rows to incremental values\n        - `addcol-range-step` (`zi`): add column with incremental values times given step\n        - `setcol-range` (`gzi`): set current column for selected rows to incremental values times given step\n    - [mouse] add unbound `mouse-enable` and `mouse-disable` commands\n    - [quitguard add unbound `guard-sheet` command to set quitguard on current sheet (thanks jsvine for feature request #538)\n    - [unfurl-col] add command, bound to `zM`, which does row-wise expansion of iterables in a column (thanks @frosencrantz for feature request and jsvine for initial code sample #623)\n        - thanks @jsvine for name and initial implementation\n\n## Options\n    - [cli] custom cli option parsing (thanks @tsibley for the behaviour request #573)\n        - `--options` apply as sheet-specific option overrides to the sources following them\n        - the last setting for a given option is the cli-given override setting (applies to all cli sources, unless they have the option already set)\n        - this allows both\n            - `vd -f csv foo.txt`\n            - `vd foo.txt -f csv`\n        - `--help` opens the manpage\n        - `-g` prefix sets option globally for all sheets\n    - [cli] add --imports (default \"plugins\") (thanks @tsibley for feature request #448)\n        - space-separated list of modules to import into globals before loading .visidatarc\n        - plugins can be installed by VisiData without modifying .visidatarc\n    - [chooser] experimental `options.fancy_chooser`\n        - when fancy_chooser enabled, aggregators and jointype are chosen with a ChoiceSheet.\n        - press `ENTER` on any row to choose a single option, or select some rows, and press `ENTER` to choose the selectedrows\n        - warning: the mechanism to do this effectively launches another instance of visidata, and so it is possible to get into an embedded state (if you jump around sheets, for example, instead of selecting). 'gq' should still work (thought `CTRL+Q` may need to be pressed several times).\n    - [dir] add `-r` alias for `--dir-recurse`\n    - [join-cols] add `options.value_joiner` to combine cell values for join-col (thanks @aborruso for feature request #550)\n    - [join-cols] add `options.name_joiner` to combine column names for join-col, and sheet names for dive-row (thanks @aborruso for feature request #550)\n        - sheet names for join-sheets are still joined with '+' or '&' for the time being\n    - [loaders html] add `options.html_title` to exclude the sheetname when saving sheet as html table (thanks @geekscrapy for PR #566)\n    - [loaders postgres] add support for custom postgres schema (Thanks @p3k for PR #615)\n        - schema defaults to `public` but can be overridden using the `--postgres-schema` flag:\n        - `vd --postgres-schema=foo postgres://user:pw@localhost/foobar`\n    - [loaders zip] -f filetype now applies to inner files\n    - [mouse] add options.mouse_interval to control the max time between press/release for click (ms)\n        - set to 0 to disable completely\n    - [pyobj] add `options.expand_col_scanrows` to set the number of rows to check when expanding columns (0 = all)\n    - [type fmtstr] add fmtstr options for numerical types\n        - add options.disp_currency_fmt\n        - add options.disp_int_fmt\n        - add options.disp_date_fmt\n\n## Plugins\n    - [dependencies] install plugin dependencies into vd dir (thanks @tsibley for feature request #448)\n    - [diff] diff is now a plugin\n        - `--diff` is not available as a cmdline argument anymore\n    - [vds3] bumped to 0.4 (@ajkerrigan)\n    - [marks] initial release 0.1; marks selected rows with a keystroke; utils for selecting + viewing marked rows (@saulpw)\n    - [genericSQL] initial release (1.0); basic loader for MySQL (Oracle, MySQL) (@aswanson)\n    - [diff] is now a plugin (@saulpw)\n\n## Bugfixes\n    - [cmdlog] fix case where CommandLog `open-` entries would not be replayable\n    - [cmdlog] record keystrokes for command\n    - [cmdlog] global cmdlog behaviour is now consistent with VisiData v1.5.2 cmdlog\n    - [dirsheet] check if directory before grabbing filetype from ext (thanks @frosencrantz for bug report #629)\n        - handles case where `.` in directory name\n    - [helpsheet] do not include deprecated longnames (thanks @frosencrantz for bug report #621)\n    - [input] flush input buffer upon newline in input; prevent pastes with accidental newlines from becoming keystrokes (thanks @geekscrapy for bug report #585)\n    - [loaders csv] PEP 479 fix for csv loader (thanks @ajkerrigan for PR #499)\n        - This avoids the following error when opening CSV files in Python 3.8: `RuntimeError: generator raised StopIteration`, but maintains the behaviour of gracefully handling malformed CSV files.\n        - References:\n            - https://www.python.org/dev/peps/pep-0479/#examples-of-breakage\n            - https://github.com/python/cpython/pull/6381/files\n    - [loaders html] cast to str before writing (thanks @geekscrapy for bug report #501)\n    - [loaders html md] preserve formatting of display values when saving\n    - [loaders html] fix string formatting issue for the html table name when saving (thanks @geekscrapy for PR #566)\n    - [loaders pandas] bugfixes for sort (thanks @ajkerrigan for PR #496)\n    - [loaders pandas] fix row deletion + its undo (thanks @ajkerrigan for PR #496)\n    - [loaders pandas] improve regex select/unselect logic (thanks @ajkerrigan for PR #496)\n    - [loaders pandas] fix row selection/deselection (thanks @ajkerrigan for PR #496)\n    - [loaders postgres] load an estimate of row numbers for improved performance (thanks @danielcynerio for PR #549)\n    - [loaders postgres] fix expand column to work on a json column in postgres (thanks @danielcynerio for PR #552)\n    - [loaders sqlite] save display value if not supported sqlite type (thanks @jtf621 for bug report #570)\n    - [loaders xml] correctly copy columns; fix path (#504)\n    - [numeric-binning] fix numeric-binning bug with currency type column\n    - [dir] fix dup-rows-deep on DirSheet (thanks @geekscrapy for bug report #489)\n    - [rstatus] fix rstatus when repeating a command with no keystrokes (Thanks @ajkerrigan for bug report #577)\n    - [save-sheets] fix saving multi-sheets as individual files to directory\n    - [settings] remove internal option defaults from cmdlog\n    - [sheets_all] make opened .vd/.vdj precious\n    - [transpose] handle case where columns are numeric (thanks @frosencrantz for bug report #631)\n    - [undo] fix undo with duplicate-named sheets (thanks @jsvine for bug report #527)\n    - [utils] Fix namedlist bug with column named after VisiData attrs (particularly 'length') (thanks @tsibley for bug report #543)\n \n\n## Infrastructure / API\n    - [asyncsingle] ensure that unfinished threads decorated with @asyncsingle do not block upon sync()\n        - used so that domotd() and PluginsSheet().reload() do not block replay progression\n    - [open-] switch from vd.filetype to open_ext; deprecate vd.filetype\n    - [warnings] output Python warnings to status\n\n# v2.-3 (2020-03-09)\n\n## Major changes\n    - [cosmetic] change default column separators\n    - [json] make json load/save key order same as column order (ensures round-trip #429)\n    - [commands.tsv] remove commands.tsv; move helpstr into code\n\n## Major features\n    - add Split Window\n        - options.disp_splitwin_pct (default: 0) controls height of second sheet on screen\n    - add .vdj for cmdlog in jsonl format\n    - add plugins/bazaar.jsonl for PluginsSheet in jsonl format\n\n### new commands\n    - `splitwin-half` (`Shift+Z`)    -- split screen, show sheet under top sheet\n    - `splitwin-close` (`g Shift+Z`) -- closes split screen, current sheet full screens\n    - `splitwin-swap` (`TAB`)        -- swap to other pane\n    - `splitwin-input` (`z Shift+Z`) -- queries for height of split window\n    - `repeat-last`  (unbound)       -- run the previous cmd longname with any previous input (thanks #visidata for feature request! #441)\n    - `repeat-input` (unbound)       -- run the last command longname with empty, queried input (thanks #visidata for feature request! #441)\n    - `resize-cols-input` (`gz_`)    -- resize all visible columns to given input width\n        - thanks @sfranky for feature request #414\n    - `save-col-keys` (unbound)      -- save current column and key columns\n        - fixes #415; thanks @sfranky for feature request\n\n### new options\n    - options.disp_float_fmt; default fmtstr to format for float values (default: %0.2f)\n        - thanks khughitt for PR! #410\n\n## Additions and Improvements\n    - add merge jointype (thanks @sfranky for feature request #405)\n        - like \"outer\" join, except combines columns by name and each cell returns the first non-null/non-error value\n        - use color_diff to merge join diffs\n        - on edit, set values on *all* sheets which have the given row\n    - adjust `save-cmdlog` input message for clarity\n    - all sheets have a name (thanks @ajkerrigan for helping iron out the kinks with PR #472)\n    - add args re-parsing to handle plugin options (helps with #443; thanks tkossak for bug report)\n    - vdmenu should only get pushed outside of replay and batch mode\n    - move cursor to row/col of undone command (thanks @jsvine for request)\n    - move urlcache into async reload (affects PluginsSheet and motd)\n    - add 'type' column to `SheetsSheet`\n\n### Command changes\n\n- `HOME`/`END` now bound to `go-leftmost`/`go-rightmost`\n    - thanks [@gerard_sanroma](https://twitter.com/gerard_sanroma/status/1222128370567327746) for request\n- `z Ctrl+HOME`/`z Ctrl+END` now bound to `go-top`/`go-bottom`\n- `Ctrl+N` now bound to `replay-advance`\n\n### longname renamings\n- `search-next` (was `next-search`)\n- `search-prev` (was `prev-search`)\n- `jump-prev` (was `prev-sheet`)\n- `go-prev-value` (was `prev-value`)\n- `go-next-value` (was `next-value`)\n- `go-prev-selected` (was `prev-selected`)\n- `go-next-selected` (was `next-selected`)\n- `go-prev-null` (was `prev-null`)\n- `go-next-null` (was `next-null`)\n- `go-right-page` (was `page-right`)\n- `go-left-page` (was `page-left`)\n\n## Plugins\n    - add usd plugin\n        - provide USD(s) function to convert strings with currencies to equivalent US$ as float\n        - uses data from fixer.io\n    - add vds3 by @ajkerrigan\n        - initial support for browsing S3 paths and read-only access to object\n    - add \"provides\" column for plugins (helps with #449; thanks @tsibley for feature request)\n    - standardize author in bazaar.jsonl\n        - \"Firstname Lastname @githbhandle\"\n\n## Bugfixes\n    - [cmdlog] fix issue with `append_tsv_row`, that occurred with `options.cmdlog_histfile` set\n    - [replay] fix replaying of rowkeys\n    - [replay] fix race condition which required the `--replay-wait` workaround\n    - [plugins] ensure that `options.confirm_overwrite` applies to plugin installation\n    - [slide] fix slide-leftmost\n        - had inconsistent behaviour when a sheet had key columns\n    - [slide] use visibleCol variants, such that slide works as expected with hidden cols\n    - [options min_memory_mb] disable (set to 0) if \"free\" command not available\n    - [core] auto-add raw default column only if options.debug (fixes #424; thanks @frosencrantz for bug report)\n    - [cli] fix --config (thanks @osunderdog for bug report! #427)\n    - [draw] fix status flickering that occurred with certain terminals (thanks @vapniks for bug report #412)\n    - [txt save] save all visibleCols instead of only first one\n    - [json] avoid adding columns twice when loading JSON dicts (thanks @ajkerrigan for bug report (#444) and PR (#447)\n    - [fixed] fixed error that occurs when there are no headerlines (thanks @frosencrantz for bug report #439)\n    - [pcap] update loader with modern api\n    - [csv] catch rows with csv.Errors and yield error msg\n    - [curses] keypad(1) needs to be set on all newwin (fixes #458)\n    - [save-sheets] address two bugs with `g Ctrl+S`\n    - [batch api] override editline() in batch mode (addresses #464; thanks @Geoffrey42 for bug report)\n    - [replay] better handling of failed confirm (addresses #464; thanks @Geoffrey42 for bug report)\n    - [asyncthread] with changed decorators, asyncthread should be the closest decorator to the function\n        - if it is not, the act of decorating becomes spawned off, instead of calls to the function being decorated\n    - [canvas] update Canvas delete- commands with current API (fixes #334)\n\n## Infrastructure / API\n    - rename `Sheet` to `TableSheet`\n        - deprecate `Sheet` but keep it around as a synonym probably forever\n    - use HTTPS protocol for git submodules (thanks @tombh for PR #419)\n        - this allows installation of VisiData in automated environments such as\n        Dockerfiles where the git user is not logged into Github\n    - unit tests have been migrated to pytest\n    - use counter to keep track of frequency of column names\n        - for joins, we want un-ambiguous sheets of origin when more than one sheet has a c.name\n    - all sheets use addColumn api instead of manually appending columns\n    - set terminal height/width via LINES/COLUMNS via curses.use_env (thanks halloleo for feature request #372)\n    - update pip command to pull development branch of vsh (thanks @khughitt for PR #457)\n    - change longnames *-replay to replay-*\n    - rename vd.run() to vd.mainloop()\n    - `vd.save_foo(p, *sheets)` throughout\n    - standardize on vd.exceptionCaught\n    - Sheet.addRows renamed to Sheet.addNewRows\n    - option overrides can be done with SubSheet.options\n    - options set with Sheet.options\n    - extend status() varargs to error/fail/warning\n    - add @BaseSheet.command decorator\n    - rename tidydata.py to melt.py\n    - deprecate globalCommand; use BaseSheet.addCommand\n    - remove vd.addCommand\n    - deprecate theme(); use option() instead\n    - deprecate global bindkey/unbindkey\n    - move commands, bindkeys, `_options` globals to vd object\n    - DisplayWrapper compares with its value\n        - this allows sensible colorizers like `lambda s,c,r,v: v==3`\n    - Sheet.addColorizer now apply to single sheet itself (fixes #433; thanks @frosencrantz for bug report)\n    - add Sheet.removeColorizer (thanks @frosencrantz for feature request #434)\n\n# v2.-2 (2019-12-03)\n\n## Major changes\n    - [cmdlog] every sheet now has its own cmdlog\n        - change `Shift+D` to `cmdlog-sheet`, with commands from source sheets recursively\n        - `gShift+D` now `cmdlog-all`\n        - `zShift+D` `cmdlog-sheet-only`\n    - [dirsheet] VisiData's DirSheet is readonly; move write-mode for DirSheet to `vls` (see plugins)\n    - [options] `options-global` bound to `gO`and `options-sheet` to `O`\n        - `open-config` is now unbound (previously `gO`)\n    - [defermods] has been moved to an opt-in plugin\n    - [vdmenu] launching `vd` without a source file, opens menu of core sheets\n        - press `Enter` to open sheet described in current row\n\n## Major Features\n    - [IndexSheet] index into sub-sheets from command line (thanks @aborruso for suggestion #214)\n        - currently works for html and hdf5 loaders\n        - `+:subsheet:col:row` in cli \n            - `subsheet` the topsheet upon load, with cursor located in cell at `row` and `col`\n        - `+:subsheet::` to ignore row/col\n        - can name toplevel source index if more than one: `+toplevel:subsheet::`\n\n## Additions and improvements\n    - [add-rows] now undo-able\n    - [aggregators] show-aggregate with quantiles (thanks @wesleyac for feature request #395)\n    - [cli] `-P <longname>` on commandline executes command <longname> on startup \n    - [cmdlog] jump commands are not logged\n    - [config] set VisiData height/width via LINES/COLUMNS envvars (thanks @halloleo for suggestion #372)\n    - [csv] add `csv_lineterminator` option (default: '\\r\\n') (thanks @dbandstra for bug report #387)\n        - retain csv writer default DOS line endings\n    - [describe] add `options.describe_aggrs` (thanks @unhammer for suggestion #273)\n        - space-separated list of statistics to calculate for numeric columns\n        - default to existing 'mean stdev'\n        - add this to .visidatarc for e.g. a harmonic mean to be added automatically to the describe sheet:\n            ```\n            from statistics import harmonic_mean\n            options.describe_aggrs += ' harmonic_mean' # note the leading space\n            ```\n    - [describe] add hidden \"type\" col (thanks aborruso for suggestion #356)\n    - [dirsheet] add `open-dir-current` command to open the DirSheet for the current directory\n    - [help] add `help-commands-all` on `gz^H` (thanks @frosencrantz for suggestion #393)\n    - [help] add `help-search` command (thanks @paulklemm for suggestion #247)\n        - opens a commands sheet filtered by the input regex.\n    - [loaders] add --header and --skip universal handling to all sheets that inherit from `SequenceSheet` (currently tsv/csv/fixed/xlsx/xls)\n    - [menu] if no arguments, open VisiData Main Menu instead of DirSheet\n    - [plugins] update PluginsSheet to add sha256 and vdpluginsdeps \n    - [plugins] PluginsSheet now loads plugins in `~/.visidata/plugins/__init__.py` instead of in `~/.visidatarc`\n        - to use this feature, add `from plugins import *` to `~/.visidatarc`\n    - [pyobj] for security reasons, `.py` loader moved out of VisiData core and into snippets\n        - Note that the PyObj loader auto-imports `.py` modules upon loading them\n    - [ttf] use `Enter` to plot instead of `.`\n\n## Plugins\n    - add hello world minimal plugin\n    - update viewtsv example (thanks @suhrig for --skip improvement suggestions #347)\n    - add vmailcap with `^V` to view by mimetype (thanks @cwarden for suggestion)\n    - add basic frictionless loader (thanks @aborruso for suggestion #237)\n        - `-f frictionless` with .json either http[s] or local file\n        - .zip may not work yet\n    - add fdir filetype; opens a DirSheet for a .txt with a list of paths\n    - move trackmod and defermod out of VisiData core and into module defermods.py\n        - defermods defers saving to source until commit-sheet\n            - deleted rows are colored red and visible until commit\n        - trackmods tracks changes in source sheet until save-sheet\n            - deletes are removed upon delete-row(s)\n        - defermods and trackmods are not on by default, `import visidata.defermods` must be added to visidatarc\n        - plugin/loader authors: by default, all sheets that inherit from BaseSheet have .defermods=False and .trackmods set to True when defermods is imported\n    - create package `vsh`; add to it `vls`, `vping`, `vtop`\n        - `vls` contains write-mode for DirSheet\n    - add vmutagen for audio tags on DirSheet\n        - `Alt+m` to add the mutagen columns on the DirSheet\n    - add geocoding using nettoolkit.com API\n        - add `addcol-geocode` command to add lat/long columns from location/address column\n    - new commands in rownum plugin\n        - `addcol-rownum` adds column with original row ordering\n        - `addcol-delta` adds column with delta of current column\n    - vtask is now a discrete plugin\n\n## Bugfixes\n    - [bindkey] move global bindkey after BaseSheet bindkey (thanks @sfranky for bug report #379)\n    - [cmdlog] now will check for `confirm-overwrite`\n    - [dirsheet] commit/restat/filesize interactions (thanks @Mikee-3000 for bug report #340)\n    - [dirsheet] pass filetype to openSource\n        - if filetype is not passed, options.filetype would overload file ext\n    - [expr] catch recursive expression columns (columns that calculate their cells using themselves) (thanks @chocolateboy for bug report #350)\n    - [fixed] various improvements to fixed-width sheet loader (thanks @frosencrantz for thorough bughunting #331)\n    - [http] use options.encoding when no encoding is provided by responses headers (thanks @tsibley for the PR #370)\n    - [join] joining columns in the ColumnSheet resulted in exception (thanks @frosencrantz for bug report #336)\n    - [load] fix replay sync bug (required wait previously)\n        - however, look out for `vd *` with lots of big datasets, they will now all load simultaneously\n    - [longname] fix getCommand() error reporting\n    - [mbtiles] now works again\n    - [metasheets] created VisiDataMetaSheet which sets system TsvSheet options\n        - now changes in tsv options for source files will not affect HelpSheet, CmdLog or PluginsSheet\n        - thanks frosencrantz for bug report #323\n    - [options] no error on unset if option not already set\n    - [path] filesize of url is 0\n    - [path] fix piping bug (vd failed to read stdin) (thanks @ajkerrigan for bug report #354)\n    - [plugins] ensure consistent Python exe for plugin installs (thanks @ajkerrigan for fix)\n    - [plugins] make plugin removal more predictable (thanks @ajkerrigan for fix)\n    - [prev-sheet] would stack trace if more than one sheet loaded and no other sheet visited (thanks @frosencrantz for bug report #342)\n    - [regex] will not silently fail if some example rows are not matches\n    - [save] convert savers to use itervalues\n        - itervalues(format=False) now yields OrderedDict of col -> value\n            - value is typed value if format=False, display string if True\n        - options.safety_first will convert newlines and tabs to options.tsv_safe_newline and options.tsv_safe_tab (thanks @mesibov for bug report #76)\n    - [sheets] colorizer exceptions are now caught\n    - [sheets] keycols now keep order they are keyed\n    - [sysedit] trim all trailing newlines from external edits (thanks @sfranky for bug report #378)\n    - [tsv] column name \"length\" prevented loading (thanks  @suhrig for bug report #344)\n    - [undo] redo with cmd on first row did not move cursor (thanks @Mikee-3000 for bug report #339)\n        - now row/col context are set as strings, even when they are numeric indices\n\n## Infrastructure / API\n    - [add-row] create a default newRow for Sheet (thanks @for-coursera for bug report #363)\n    - [calc] add INPROGRESS sentinel\n        - sentinel that looks like an exception for calcs that have not completed yet\n    - [extensible] add new cached_property, which caches until clear_all_caches, which clears all cached_property\n    - [Fanout] add Fanout\n        - fan out attribute changes to every element in a list; tracks undo for list\n    - [lazy_property] newSheet and cmdlog are now lazy_property\n        - this enables the overwriting and extending of them by plugins\n    - [loaders] add sheet.iterload()\n        - will use sheet.source to populate and then yield each row\n    - [loaders] vd.filetype(ext, ExtSheet) to register a constructor\n    - [loaders] add Sheet.iterrows() to yield row objects \n        - grouping use iterrows() for streaming input\n        - __iter__() yields LazyComputeRows\n            ```\n            for row in vd.openSource('foo.csv'):\n                print(row.date, row.name)\n            ```\n    - [IndexSheet] refactor SheetsSheet parent to IndexSheet\n        - HtmlTablesSheet now inherits from IndexSheet\n        - excel index changed to standard IndexSheet model\n        - VisiDataSheet changed into IndexSheet\n        - move join-sheets to IndexSheet\n    - [options] add unset() to unset options (thanks @khughitt for suggestion #343)\n    - [path] consolidate PathFd, UrlPath, and HttpPath into Path\n    - [SequenceSheet] refactor tsv, csv, xls(x), fixed_width to inherit from SequenceSheet\n    - [sheets] vd.sheetsSheet is sheetstack, vd.allSheetsSheet is sheetpile\n    - [sheets] rename LazyMap to LazyChainMap and LazyMapRow to LazyComputeRow\n    - [shortcut] BaseSheet.shortcut now property\n    - [status] make right status more configurable (thanks @layertwo #375 and khugitt #343 for filing issues)\n        - BaseSheet.progressPct now returns string instead of int\n        - BaseSheet.rightStatus() now returns string only (not color)\n        - by default uses `options.disp_rstatus_fmt`, configured like `disp_status_fmt`\n        - progress indicator (% and gerund) moved out of rightStatus and into drawRightStatus\n    - [undo] use undofuncs to associate command with its undo\n    - [undo/redo] moved to undo.py\n    - [vd] add sheet properties for errors and statuses\n    - [vd] vd.quit() now takes `*sheets`\n    - [vd] rename main() to main_vd()\n\n# v2.-1 (2019-08-18)\n\n## Major changes\n\n    - Minimum Python requirement bumped to 3.6\n    - Several interface changes (see below)\n\n## Major features\n\n    - add Alt/Esc as prefix; Alt+# to go to that sheet\n       - Alt+ layer not otherwise used; bind with `^[x` for Alt+X\n    - undo/redo\n        - [new command] `options.undo` (default: True) to enable infinite linear undo/redo\n        - provisionally bound to `Shift+U` and `Shift+R`\n        - will undo most recent modification on current sheet\n        - `undoEditCells` assumes commands modified only selectedRows\n    - multi-line rows\n        - toggle by pressing `v` on any sheets with truncated values\n    - range binning for numeric columns\n        - `options.numeric_binning` (default: False) is the feature flag\n        - [feature freqtbl] numeric binning for frequency/pivot table\n        - `options.histogram_bins` to set number of bins (0 to choose a reasonable default)\n        - (thanks @paulklemm for the issue #244)\n    - stdout pipe/redirect\n        - `ls|vd|lpr` to interactively select a list of filenames to send to the printer\n        - `q`/`gq` to output nothing\n        - `Ctrl+Q` to output current sheet (like at end of -b)\n        - `vd -o-` to send directly to the terminal (not necessary if already redirected)\n    - plugin framework\n        - plugins are optional Python modules that extend or modify base VisiData's functionality\n        - this release establishes a structure for creating plugins, and provides an interface within VisiData for installing them\n            - `open-plugins` opens the **PluginsSheet**\n            - to download and install a plugin, move the cursor to its row and press `a` (add)\n            - to turn off a plugin, move the cursor to its row and press `d` (delete).\n        - for more information see (https://visidata.org/docs/plugins)\n    - deferred changes\n        - modifications are now highlighted with yellow, until committed to with `^S` (`save-sheet`)\n\n## interface changes\n\n- `setcol-*`, `dive-selected`, `dup-selected-*`, `columns-selected`, `describe-selected` use only selectedRows (do not use all rows if none selected) #265 (thanks @cwarden)\n- `edit-cells` renamed to `setcol-input`\n- `fill-nulls` renamed to `setcol-fill`\n- `paste-cells` renamed to `setcol-clipboard`\n- `dup-cell`/`dup-row` on SheetFreqTable and DescribeSheet renamed to `dive-cell`/`dive-row`\n- `next-page`/`prev-page` renamed to `go-pagedown`/`go-pageup`\n- `save-col` always saves all rows in current column (instead of selectedRows or rows)\n- `copy-*` use only selectedRows, warning if none selected (cmdlog safe)\n- `syscopy-*` use only selectedRows, fail if none selected (not cmdlog safe)\n- all `plot-selected` are now `plot-numerics`; `plot-numerics` uses all rows\n- Shift+S pushes `sheets-stack`; gS pushes `sheets-all`. removed graveyard sheet.\n- `random-rows` is no longer bound to any key by default (was Shift+R).\n- `freq-summary` was `freq-rows`; adds summary for selected rows\n- cmdlog is now based on longname instead of keystrokes\n- cmdlog does not log resize commands\n- exit with error code on error during replay (suggested by @cwarden #240)\n- split `Ctrl+V` (check-version) into `Ctrl+V` (show-version) and `z Ctrl+V` (require-version)\n- `show-expr` now unbound from `z=`\n- add `options.row_delimiter` (default to `\\n`)\n\n\n## plugins\n\n- vfake: anonymizes columns\n- livesearch: filter rows as you search\n- rownum: add column of original row ordering\n- sparkline: add a sparkline column to visualise trends of numeric cells in a row (thanks @layertwo #297)\n\n## Bugfixes\n\n- [addcol-new] addcol-new now works in batch mode (thanks @cwarden for the bug report #251)\n- [canvas] clipstr xname to prevent overlap with 1st element in xaxis\n- [color] column separator color applies to regular rows (thanks @mightymiff for bug report #321)\n- [DirSheet] delete-selected now deletes all of the selected files upon save-sheet (thanks @cwarden for the bug report #261)\n- [display] fix resizing issue with wide chars (thanks @polm for the bug report #279 and for the fix #284 )\n- [freqtbl] unselect-rows now updates source rows (thanks @cwarden for bug report #318)\n- [go-col-regex] nextColRegex sheet is implicit parameter\n- [help] use tab as sep for system sheets (thanks @frosencrantz for bug report #323)\n- [plot] graphing currency values now works\n- [pyobj] SheetDict nested editing (thanks @egwynn for the bug report #245)\n- [txt] TextSheets now save as .txt\n- [yaml] handle sources that do not load as lists (thanks @frosencrantz for bug report #327)\n- [vdtui] make Sheet sortable (related to an issue found by @jsvine #241)\n\n\n## Additions and improvements\n\n- [addcol-new] does not ask for column name\n- [aggr] add `list` aggregator (thanks @chocolateboy #263)\n- [canvas] add legend width to fit max key (thanks @nicwaller for request)\n- [chooseMany] error() on invalid choice #169\n- [command join] add join-sheets-top2 (`&`) / join-sheets-all (`g&`) to Sheet to join top 2/all sheets in sheets-stack\n- [command sort] `sort-*-add` bound to z[] and gz[] to add additional sort columns\n- [command syspaste-cells] add `syspaste-cells` to paste into vd from system clipboard (thanks kovasap for PR #258)\n- [describe] add `sum` (thanks @pigmonkey for suggestion #315)\n- [DirSheet] include folders and hidden files\n- [exec-longname] enable history\n- [freeze-sheet] only freeze visibleCols\n- [html] add links column where hrefs available (suggested by @am-zed #278)\n- [license] remove MIT license from vdtui; all code now licensed under GPL3\n- [loader fixed] provide a way to limit the max number of columns created (thanks @frosencrantz for suggestion #313)\n    - added `options.fixed_maxcols` (default: no limit)\n- [loader fixed] loaders override putValue, not setValue (thanks @aborruso for bug report #298)\n- [loader jira] add support for jira filetype, a markdown derivative compatible with Atlassian JIRA (thanks @layertwo #301)\n- [loader Pyobj] `py` filetype to import and explore a python module: `vd -f py curses`\n- [loader pyxlsb] add .xlsb loader (suggested by @woutervdijke #246)\n- [loader ndjson ldjson] add as aliases for jsonl\n- [loader npy] add .npy loader, including type detection\n- [loader npz] add support for .npz index\n- [loader usv] add .usv loader\n- [macros] is now deprecated\n- [motd] domotd is asyncsingle and thus not sync-able\n- [mouse] bind Ctrl+scrollwheel to scroll-left/right; change to move cursor by `options.scroll_incr` (like scroll-up/down)\n- [mouse] slide columns/rows with left-click and drag\n- [openSource] create new blank sheet if file does not exist\n- [option json] add `options.json_sort_keys` (default True) to sort keys when saving to JSON (thanks @chocolateboy for PR #262)\n- [option regex+] `options.default_sample_size` (default 100) to set number of example rows for regex split/capture (now async).  use None for all rows. (thanks @aborruso #219)\n- [option vd] `--config` option to specify visidatarc file (suggested by @jsvine #236)\n- [option vdtui] remove `curses_timeout` option (fix to 100ms)\n- [pandas] support multi-line column names (suggested by @jtrakk #223)\n- [pandas] implement sort() for pandas DataFrame (suggested by @migueldvb #257)\n- [pandas] use value_counts() for PandasSheetFreqTable (thanks @azjps for PR #267)\n- [pandas] selection support for PandasSheet (thanks @azjps for PR #267)\n- [pandas] reset index (thanks @danlat #277)\n- [pandas] if the df contains an index column, hide it\n- [pcap] adds saver for .pcap to json (thanks @layertwo for PR #272)\n- [perf] expr columns are now set to cache automatically\n- [perf] drawing performance improvements\n- [perf] minor improvements to cliptext\n- [perf] several minor optimisations to color\n- [precious] describe-sheet is now precious; error-sheet and threads-sheet are not\n- [replay] show comments as status (suggested by @cwarden)\n- [save] make all `save_` callers async\n- [sqlite] add save (CREATE/INSERT only; for wholesale saving, not updates)\n- [sqlite] `Ctrl+S` to commit add/edit/deletes\n- [sqlite] add support for .sqlite3 extension\n- [tar] add support for opening tar files (thanks @layertwo #302)\n- [vdmenu] `Shift+V` opens menu of core sheets\n    - press `Enter` to open sheet described in current row\n- [win] several changes made for increased windows-compatibility (thanks @scholer!)\n- [yaml] bump min required version (thanks @frosencrantz for suggestion #326)\n\n\n## API\n- VisiData, BaseSheet, Column inherit from Extensible base class\n  - internal modules and plugins can be self-contained\n  - `@X.property @X.lazy_property`, `X.init()`, `@X.api`\n- remove Sheet.vd; 'vd' attrs now available in execstr\n- remove hooks\n- add @deprecated(ver) decorator; put deprecations in deprecated.py\n- `vd.sync(*threads)` waits on specific threads (returned by calls to `@asyncthread` functions)\n- add Sheet.num for left status prompt\n- pivot and frequency table have been consolidated for numeric binning\n- add Sheet.nFooterRows property\n- Sheet.column() takes colname instead of regex; add Sheet.colsByName cached property\n- use addRow to rows.append in reload()\n- Selection API is overloadable for subclasses of Sheet whose rows don't have a stable id() (like pandas)\n- use locale.format_string and .currency\n    - uses user default locale settings at startup\n    - changes fmtstr back to %fmt (from {:fmt})\n- vdtui broken apart into separate modules: editline, textsheet, cliptext, color, column, sheet\n    - much code reorganization throughout\n- convert all `vd()` to `vd`\n- remove ArrayColumns, NamedArrayColumns\n- urlcache now takes days=n\n- Sheet.rowid\n- add windowWidth and windowHeight\n    - Sheets use their own .scr, in preparation for split-screen\n- add VisiData.finalInit() stage\n    - call vd.finalInit() at end of module imports to initialise VisiData.init() members\n    - so that e.g. cmdlog is not created until all internal sheet-specific options has been set\n- remove replayableOption() (now replay an argument within option())\n- CursesAttr is now ColorAttr; ColorAttr now a named tuple\n    - variables that contain a ColorAttr have been renamed from attr to cattr for readability\n- improvements to scrolling API\n- rename most cases of Sheet*/Column* to *Sheet/*Column\n- use pathlib.Path in visidata.Path\n- remove BaseSheet.loaded; add BaseSheet.rows = UNLOADED\n- vd.push no longer returns sheet\n- add @asyncsingle for asyncthread singleton\n\n## Deps\n- add submodule fork of pyxlsb for VisiData integration\n- add amoffat/sh as submodule for vgit and vsh\n- [postgres] swap for binary version of dep\n\n\n# v1.5.2 (2019-01-12)\n\n## Bugfixes\n- [regex] fix `g*` #239 (thanks to @jsvine for bug hunting)\n- [editline] suspend during editline will resume in editline\n- [editline] `Ctrl+W` on an empty value in editline now works\n\n## Docs\n- [manpage] update the manpage to be more accurate for boolean command line options\n\n# v1.5.1 (2018-12-17)\n\n## Bugfixes\n- [canvas] fix mouse right-click and cursor movement on canvas\n- [idle performance] fix regression\n- [columns] fix editing of \"value\" column on ColumnsSheet\n- [describe] fix colorizer inheritance\n- [csv] always create at least one column\n- [pandas] fix pandas eval (`=`, etc) #208 (thanks to @nickray for suggesting)\n- [pandas] preserve columns types from DataFrame #208 (thanks to @nickray for suggesting)\n- [pandas] remove data autodetect #208 (thanks to @nickray for suggesting)\n\n## Additions and changes\n- [selection] `options.bulk_select_clear` per #229 (thanks to @aborruso for suggesting)\n- [setcol-subst-all] add `gz*` to substitute over all visible cols (thanks to @aborruso for suggesting)\n- [options] Shift+O now global options (was sheet options); `zO` now sheet options; `gO` now opens .visidatarc which can be edited (was global options)\n- [sort] orderBy now asynchronous #207 (thanks to @apnewberry for suggesting)\n- [fill] fill now async; uses previous non-null regardless of selectedness #217 (thanks to @aborruso for suggesting)\n- [pandas] `options.pandas_filetype_*` passed to `pandas.read_<filetype>` (like `csv_*` to Python `csv` module) # 210 (thanks to @pigmonkey for suggesting)\n- [rename-col-selected] `z^` now renames the current column to contents of selected rows (previously `gz^`); `gz^` now renames all visible columns to contents of selected rows #220 (thanks to @aborruso for suggesting)\n- [vdtui null] show null display note in cells which match `options.null_value` (was only for None) # 213 (thanksto @aborruso for suggesting)\n- [vdtui] visidata.loadConfigFile(\"~/.visidatarc\") for use in REPL #211 (thanks to @apnewberry for suggesting)\n- [progress] include thread name on right status during async\n- [progress] add gerund to display (instead of threadname)\n- [http] user specified filetype overrieds mime type\n    - e.g. `vd https://url.com/data -f html`\n- [clipboard] use `options.save_filetype` for default format\n\n\n\n# v1.5 (2018-11-02)\n\n## Bugfixes\n- [clipboard] fix broken `gzY` (syscopy-cells)\n- [cmdlog] always encode .vd files in utf-8, regardless of options.encoding\n- [tsv] major `save_tsv` performance improvement\n- [tsv] make short rows missing entries editable\n- [shp] reset columns on reload\n- [graph] shift rightmost x-axis label to be visible\n- [http] allow CLI urls to have `=` in them\n- [fixed width] truncate cell edits on fixed width sheets\n- [aggregators] ignore unknown aggregators\n- `visidata.view(obj)`: obj no longer required to have a `__name__`\n\n## Additions and changes\n- [save tsv json] errors are saved as `options.safe_error` (default `#ERR`)\n   - if empty, error message is saved instead\n- [plugins] `~/.visidata` added to sys.path on startup\n   - put plugin in `~/.visidata/vdfoo.py`\n   - put `import vdfoo` in `.visidatarc` to activate\n- [aggregators] show-aggregate (`z+`) now aggregates selectedRows\n- [tsv] add unnamed columns if extra cells in rows\n- [diff] now based on display value (more intuitive)\n- [mouse] move to column also\n- [mouse] right-click to rename-col, rename-sheet, or edit-cell\n- [cosmetic] addcol-new (`za`) input new column name on top of new column\n- [cosmetic] include file iteration in progress meter\n- [xls xlsx] use options.header to determine column names\n\n# v1.4 (2018-09-23)\n\n## Bugfixes\n\n- batch mode with no script should use implicit stdin only if no other files given (Closed #182)\n- [pivot] pivot keycolumn copy was yielding strange nulls\n- [join] fix extend join\n- [csv] include first row in file even if `options.header` == 0\n- [sysclip] fix bug where `gzY` did not copy selected rows (Closed #186)\n- [motd] fix bug with disabling `options.motd_url` (Closed #190)\n\n## Additions and changes\n\n- various improvements in performance and in CPU usage (Closed #184, #153)\n- [pyobj] `visidata.view(obj)` and `visidata.view_pandas(df)`\n- [pandas] `-f pandas` loads file with `pandas.read_<ext>`\n- [TextSheet] wrap made consistent with new options\n- [date] date minus date now gives float number of days instead of seconds\n- [pcap] add support for reading pcapng (thanks @layertwo!)\n- [setcol] limit `gz=` range parameters to the number of rows selected to be filled (thanks @ssiegel!)\n- [anytype] format anytype with simple str()\n\n# v1.3.1 (2018-08-19)\n\n- [http] add `tab-seperated-values` to content_filetypes mapping\n- [join] add `extend` join type to use keep all rows and retain **SheetType** from first selected sheet\n- `rename-sheet` renames current sheet to input\n- [json] add options.json_indent for pretty-printing\n- [tsv json txt] add options.save_errors (default True) to include errors when saving\n- remove all options.foo_is_null and fix according to 178-nulls.md\n- add `z^C` and `gz^C` to cancel threads in current/selected row(s)\n- [bugfix] `^R` (reload) on a filtered sheet (`\"`) now reloads only the filtered rows\n- [aggregators] fix summation with exceptions\n- [DirSheet] add `gz^R` (reload-rows) to undo modifications on selected rows\n\n# v1.3 (2018-08-11)\n\n- commands overhaul; see `commands.tsv` (command longnames should now be largely stable)\n- add quantile aggregators (q3/q4/q5/q10)\n- add `z;` to add new column from bash *expr*, with `$`columnNames as variables\n- keyboard layout (thanks to @deinspanjer for the inspiration)\n- `O` launches sheet-specific options (see design/169.md); `gO` launches global OptionsSheet\n- options.wrap now defaults to False\n- options.quitguard enables confirmation before quitting last sheet\n- options.safety_first makes loading/saving more robust, at the cost of performance\n   - currently only removing NULs from csv input\n- dedup, sort, color status messages by \"priority\" (thanks to @jsvine for suggestion)\n- remove menu system\n- can now edit source values from FreqSheet\n\n- Command changes\n    - `^H` is now main command to open the manpage!  `z^H` opens a list of all commands for this sheet.\n    - `R` (`random-sheet`) pushes sheet instead of selecting (reverting to former behavior)\n    - `za` (`addcol-empty`) asks for column name\n    - `zd` (`delete-cell`) moves value to clipboard (\"cut\", like other delete commands)\n    - add `gI` (`describe-all`) like `gC` (`columns-all`)\n    - add `gS` (`sheets-graveyard`)\n    - add `g(`, `z(`, `gz(` variants of `(` 'expand-column'\n    - add `z|` and `z\\` to un/select by python expr (thanks to @jsvine for suggestion)\n    - add `z#` to set type of current column to `len`\n    - add `z;` to get the stdout/stderr from running a cmdline program with $colname args\n    - `Space` is now bound to exec-longname (was `menu`; `^A` was exec-longname previously)\n\n- Loaders:\n    - add pandas adapter\n    - add xml loader\n    - add pcap loader (thanks to @vbrown608 and @TemperedNetworks)\n    - add yaml loader (thanks to @robcarrington, @JKiely, @anjakefala at PyCon Sprints for making this happen)\n    - add jsonl saver\n    - remove `tsv_safe_char` and split into `tsv_safe_newline` and `tsv_safe_tab`\n\n- initial commit of a task warrior app (vtask)\n\n## minor changes\n- more portable system clipboard handling (thanks @chocolateboy for PR)\n- [json] no more incremental display during loading (need better json parser than stdlib)\n- `date` supports adding a number of days (or `6*hours`, `9*months`, etc)\n- hidden columns are darkened on columns sheet\n- exception rollup\n- dev/commands.tsv table of commands\n- motd default url uses https\n- improve ProfileSheet\n- [DirSheet] editable `mode` (set to octal like `0o0644`)\n\n# v1.2.1 (2018-07-05)\n\n- python 3.7\n    - Change `async` decorator to `asyncthread` and rename `async.py` to avoid using Python 3.7 keyword\n\n# v1.2 (2018-04-30)\n\n- macro system\n   - `gD` goes to directory browser of `options.visidata_dir` (default to `~/.visidata/`) which contains saved commandlogs and macros\n   - `z^S` on CommandLog saves selected rows to macro for given keystroke, saving to `.visidata/macro/command-longname.vd`\n   - macro list saved at `.visidata/macros.vd` (keystroke, filename)\n- `options.cmdlog_histfile` for auto-appended (default: empty means disabled)\n- [DirSheet] edits make deferred changes to any field\n   - add `directory` and `filetype` columns\n   - note: only 256 changes maintained per column (same as column cache size)\n   - `^S` saves all deferred changes\n   - `z^S` saves changes for the current file only\n   - `^R` clears all changes (reload)\n   - `z^R` clears changes on the current file only\n   - `d`/`gd` marks the current/selected file for deletion\n   - if `directory` is edited, on `^S` (save) file is moved (if directory not existing, a new directory is created)\n- [New conda package](https://github.com/conda-forge/visidata-feedstock)\n- add .visidatarc [snippets](https://github.com/saulpw/visidata/tree/stable/snippets) with examples of extra functionality\n- add replayable options [#97](https://github.com/saulpw/visidata/issues/97)\n- `g^S` for multisave to single file (`.html`, `.md` and `.txt` are currently supported) or directory\n- `z^S` to save selected rows of current column only (along with key columns)\n- `T` to transpose rows and columns [#129](https://github.com/saulpw/visidata/issues/129)\n- `^A` to specify a command longname to execute\n- `^O`/`g^O` to open current/selected files in external editor\n- `g^R` on SheetsSheet to reload all [selected] sheets\n- `options.error_is_null` to treat errors as nulls when applicable\n- `g,` fixed to compare by visible column values, not by row objects\n- `gv` to unhide all columns\n- `gM` open melted sheet (unpivot) with key columns retained and *regex* capture groups determining how the non-key columns will be reduced to Variable-Value rows\n- `g*` replace selected row cells in current column with regex transform\n- Shift-Up/Down aliases for mac [#135](https://github.com/saulpw/visidata/issues/135)\n- options.wrap now true by default on TextSheet (`v` to toggle)\n- `save_txt` with single column concatenates all values to single file\n- `+` can add multiple aggregators\n- ^X bugfix: use evalexpr over cursorRow\n- `z`/`gz` `s`/`t`/`u` to select to/from cursorRow\n- `z<` and `z>` to move up/down to next null cell\n- `\"` no longer reselects all rows\n- `sheet-set-diff` command to act like `--diff`\n- math functions (like sin/cos) now at toplevel\n- bugfix: freeze\n- all `csv_` options sent to csv.reader/writer\n- `options.tsv_safe_char` to replace \\t and \\n in tsv files; set to empty for speedup during tsv save\n- loaders and savers\n    - support bz2 and xz (LZMA) compression (thanks @jpgrayson)\n    - add loaders for:\n        - sas7bda (SAS; requires `sas7bdat`)\n        - xpt (SAS; requires `xport`)\n        - sav (SPSS; requires `savReaderWriter`)\n        - dta (Stata; requires `pandas`)\n    - .shp can save as .geojson\n    - add htm as alias for html filetype\n    - json bugfix: fix [#133](https://github.com/saulpw/visidata/issues/133) json loader column deduction\n- [experimental] bin/vsh initial commit\n\n# v1.1 (2018-03-05)\n\n- VisiData will be included in the [next debian repository release](https://tracker.debian.org/pkg/visidata)!\n- remove all install dependencies\n  - additional libraries must be installed manually for certain loaders; see requirements.txt\n- experimental hierarchical menu system with SPACE to explore commands\n    - use standard movement keys (`hjkl`/`arrows`) to navigate within a command level\n    - Use `Enter`/`q` to navigate down/up a command tree\n    - abort with `gq` or `^C`\n    - existing chooseOne selections (aggregators/joins) still use simple input() for now\n    - most longnames changed\n        - let me know if anyone is using any longnames at all, and we will stabilize the names\n    - if you do end up playing with it, please let me know what did and didn't work for you\n- randomized message/announcement/tip on startup; disable with `options.motd_url = None`\n   - cache messages in `$HOME/.visidata/`\n\nCommand additions/changes:\n\n- add `za` and `gza` to add 1/N new blanks column\n- add `(` and `)` commands to expand/collapse list/dict columns (e.g. in nested json)\n- add `Backspace` command to drop sheet like `q` and also scrub its history from the cmdlog\n- [canvas] add `d` and `gd` to delete points from source sheet\n- remove `!@#$%-_` special actions on columns sheet\n- alias Shift+Arrows to `HJKL` (may not work in all environments)\n- alias `ENTER` to modify-edit-cell by default\n- add `Y`/`gY`/`zY` to copy row/selected/cell to system clipboard (with options.clipboard_copy_cmd)\n\n- filename `-` works to specify stdin/stdout (`-b -o -` will dump final sheet to stdout)\n- search/select uses most recent when not given any (as in vim/etc)\n- annotate None with disp_note_none ('∅'); previously was not visually distinguishable from empty string\n\n- save to .md org-mode compatible table format\n- load/view/edit/save png, edit pixels in data form\n- load/view ttf/otf font files\n- [canvas] draw quadratic curves with qcurve([(x,y)...])\n- improvements/bugfixes: pivot, describe, melt, sqlite, shp, html\n\n# v1.0 (2018-01-24)\n\n- date.__sub__ returns timedelta object (was int days)\n- pivot table bugfixes\n- many cosmetic fixes\n- disable default profiling for perf improvements\n- remove .visidatarc support in PWD or XDG; only $HOME/.visidatarc supported now\n- website and docs complete overhaul\n- do not execute .py files\n- apt/brew packages submitted\n\n# v0.99 (2017-12-22)\n\n- tab completion for filename and python expr\n- `v` now 'visibility toggle' (moved from `w`)\n- `^W` to erase a word in the line editor\n- `gC`\n- `--version` (thanks to @jsvine)\n- `options.use_default_colors` (thanks to @wavexx)\n- `median` aggregator\n- .html loads tables (requires lxml)\n  - simple http works (requires requests)\n- json save\n- json incremental load\n- [cmdlog] use rowkey if available instead of row number; options.rowkey_prefix\n- [cmdlog] only set row/col when relevant\n- [vdtui] task renamed to thread\n- /howto/dev/loader\n- /design/graphics\n\n# v0.98.1 (2017-12-04)\n\n- [packaging]\n    - make non Python standard library loader dependencies optional\n    - provide method for full installation via `pip3 install \"visidata[full]\"`\n- [visidata.org](http://visidata.org)  change copyright in footer\n- [docs] add csv dialects to manpage (closes issue #88)\n- [bugfix]\n    - fix for `^Z` in builtin line editor\n    - fixed-width loader needs source kwarg\n\n# v0.98 (2017-11-23)\n\n- [visidata.org](http://visidata.org) revamp\n\n- [canvas] graphs and maps!\n    - `.` or `g.` to push a graph or a map from the current sheet (dot=plot)\n    - supports .shp and vector .mbtiles\n    - mouse left-click/drag to set cursor\n    - mouse right-click/drag to scroll canvas\n    - scrollwheel to zoom in/out on a canvas\n    - `s`/`u` to select/unselect rows at canvas cursor\n    - `ENTER` to push source sheet with only rows at canvas cursor\n    - 1-9 to toggle display of 'layers' (colors)\n    - `_` to zoom out to full width\n    - `disp_pixel_random` option chooses pixel attrs at random (weighted), instead of most common\n    - `+`/`-` to zoom in/out via keyboard\n\n- Updates to commands\n    - Remove ` (backtick) command\n    - Remove most zscroll commands (`zs`/`ze`)\n        - `zz` moves cursor to center, uncertain about the future of `zt` due to conflict with `t` for toggle\n    - `ga` adds N new rows\n    - `gz=` sets value for selected/all rows to a Python sequence in this column\n    - `z_` sets column width to given value\n    - `z-` cuts column width in half\n    - `P` is now \"paste before\" (like vim); `R` now pushes a random sample\n    - `^Z` now sends SIGSTOP; `^O` \"opens\" the external $EDITOR (from builtin line editor)\n    - [ColumnsSheet] Added `~!@#$` commands back, to set type of source columns\n    - `w` is becoming a more universal \"visibility toggle\"\n        - [TextSheet] `w` toggles wordwrap\n        - [canvas] `w` toggles display of the labels\n        - [pyobj] `w` toggles hidden properties and methods\n\n- Updates to command line args and options\n    - set initial row/col with `+<row#>:<col#>` (numeric only)\n    - `--delimiter`/`-d ` option (separate from `--csv-delimiter`) sets delimiter for tsv filetype\n    - `--replay-wait`/`-w` renamed from `--delay`/`-d`\n    - `disp_date_fmt` option for date display format string (default is date-only)\n    - `zero_is_null`/`empty_is_null`/`none_is_null`/`false_is_null` set which values are considered null (previously was `aggr_null_filter`)\n    - `--skiplines` option renamed to `--skip`, and `--headerlines` to `--header`\n\n- Design improvements\n    - Add specific rowtype for each sheet (see right status)\n    - dates are a kind of numeric type (useful for graphing as the x-axis)\n    - `use_default_colors` (at behest of @wavexx)\n    - more robust Progress indicator\n    - populate DescribeSheet in async thread\n    - remove default names for unnamed columns\n    - history up/down in edit widget now feels right\n\n- API changes\n    - change main Column API to getter(col, row) and setter(col, row, val)\n    - move Path and subclasses out of vdtui\n    - TextSheet source is any iterable of strings\n    - Sheet.filetype provides default save filename extension\n\n\n## 0.97.1 (2017-10-29)\n- Fix postgres lazy import\n- BugFix: issue #83 - `z?` works on OSX\n- BugFix: <Enter> on SheetsSheets itself now does nothing\n- Move from readthedocs to visidata.org\n\n\n## 0.97 (2017-10-05)\n- Features\n    - [replay]\n        - move vdplay into vd --play\n        - -p --play now replays scripts live\n        - --delay interspaces replay by delay seconds\n        - --batch to replay without interface\n        - --output to save at end of replay\n        - --replay-movement=True has --play move the cursor cell-by-cell\n        - -y --confirm-overwrite=False\n        - replay scripts can be strformatted with field=value\n        - add ^U command to pause/resume playback\n        - add ^K to cancel replay\n        - add Space command to go to next step of replay while paused\n    - [global]\n        - remap toggle to 't' (was Space)\n        - remap ^Y to push sheet of cursorRow\n        - 'A' creates new sheet with N empty columns\n        - remap 'r' to regex search of row key\n        - add zr/zc to go to row/col number\n        - F1/z? now launches man page\n        - gF1/gz? now launches commands sheet\n        - add `f` command to fill empty cells with the content of a non-empty cell up the current column\n        - add Del/gDel to set value(s) to None\n        - remove TAB/Shift-TAB sheet cycling\n        - add z^ command to set current column name to current cell value\n        - add gz^ to set current column name to cell values in selected rows\n        - add 'z=' to show computed expression over current row\n        - z' adds cache to current column (gz' for all columns)\n        - `gh` moves cursor to leftmost column (instead of leftmost non-key column)\n    - [aggregators]\n        - allow multiple aggregators\n        - 'g+ adds an aggregator to selected columns on columns sheets\n        - sets the exact set of aggregators on the column sheet with 'e'/'ge'\n        - 'z+' displays result of aggregation over selected rows for current column on status\n        - rework aggregators so multiple aggregators can be set\n    - [sheets sheet]\n        - '&' on Sheets sheet is now sole join sheet command; jointype is input directly\n        - add sheet concat\n    - [columns sheet]\n        - remap ~!@#$%^ on Columns sheet to behave like they do on other sheets\n        - add g prefix to ~!@#$%^ to operate on all 'selected rows' on Columns sheet (thus modifying column parameters on source sheet)\n    - [textsheet]\n        - add 'w' command on TextSheets to toggle wrap\n    - [cmdlog]\n        - editlog renamed to cmdlog\n        - cmdlog has a new format which minimises recordings of movement commands\n        - '^D' now saves cmdlog sheet\n    - [pivot]\n        - zEnter pushes this cell; Enter pushes whole row\n    - [describe]\n        - add DescribeSheet with 'I' command for viewing descriptive statistics\n        - add zs/zu/zt/zEnter commands to engage with rows on source sheet which are being described in current cell of describe sheet\n    - [frequency]\n        - 'zF' provides summary aggregation\n    - [metasheets]\n        - add hidden source column to metasheets\n        - ^P view status history\n    - [loaders]\n        - add 'postgres' schema for simple loader from postgres:// url\n        - add gEnter for .zip file mass open\n        - add 'fixed' filetype to use fixed column detector\n    - [clipboard]\n        - remove `B` clipboard sheet\n        - rework all d/y/p commands for only one buffer\n        - remove g^Z and gp\n    - [options]\n        - remove -d debug option\n        - add --diff to add colorizer against base sheet\n            - diffs a pair of tsvs cell-by-cell\n        - theme options removed as CLI arguments (still available for .visidatarc or apps)\n        - `'` appends frozen column\n        - rename and reorder options\n- Community\n    - [docs]\n        - replace .rst userguide with VisiData [man page](http://visidata.org/man)\n    - [visidata.org]\n        - update index.html\n        - automate creation of tour pages from tours.vd\n            - tours will be played and recorded using asciinema\n            - then compiled into a .html with mkdemo.py for http://visidata.org/tour\n        - upload html version of manpage\n- Internals\n    - renamed toplevel command() to globalCommand(); removed Sheet.command(); sheet commands now specified in Sheet.commands list of Command() objects at class level\n    - setter API now (sheet,col,row,value)\n    - move `visidata/addons/*.py` into toplevel package\n\n## 0.96 (2017-08-21)\n- data can be piped through stdin\n- remap: `N` is now previous match (instead of `p`)\n- `:` now regex split\n- add `bin/viewtsv` example tsv viewer as an example of a small vdtui application\n- add `options.cmd_after_edit` for automove after edit\n- add clipboard functionality\n    - `y` yanks row at cursor to clipboard; `gy` copies all selected rows\n    - `d` deletes row and move to clipboard; `gd` moves all selected rows\n    - `p` now pastes the row most recently added to the clipboard after current row; `gp` pastes all rows from clipboard after current row\n    - `Shift-B` opens clipboard sheet\n    - `Ctrl+z` now undoes the most recent delete; `gCtrl+z` undoes all deletes\n- Fix cursor row highlighting of identical rows\n\n## v0.95.2\n- move some functionality out of vdtui into separate python files\n- add Ctrl+z command to launch external $EDITOR\n- add ``options.force_valid_names``\n\n## v0.94 (2017-08-02)\n- add options.textwrap for TextSheet\n- add vd.remove(sheet)\n- Sheet.sources now  modifiable\n\n## v0.93 (2017-07-30)\n- fix display/feel bugs in editText\n- remove BACKSPACE for editlog undo\n- fix colorizer API\n- add `ctrl-u` command to toggle profiling of main thread\n- fix `C`olumn statistics (`options.col_stats` still disabled by default)\n\n## v0.92 (2017-07-11)\n- `F`requency sheet groups numeric data into intervals\n   - added `histogram_bins` and `histogram_even_interval` options\n   - added `w` command on the sheet that toggles `histogram_even_interval`\n- change key for 'eval Python expression as new pyobj sheet' from Ctrl+O to Ctrl+X\n\n## v0.91 (2017-06-28)\n- make options automatically typed based on default\n- documentation cleanups\n- remove R command (set filetype on CLI)\n\n## v0.80\n- tour of screenshot.gif\n- regex transform now `*` (';' is still regex split)\n- Make regex search/select to work more like vim\n- Move several non-essential commands out of vd.py\n- change license of vd.py to MIT\n- vdtutor start\n- currency type with `$`; str type moved to `~`; remove type autodetect\n- www/ for landing page\n- move from .md to .rst for documentation\n\n## v0.61 (2017-06-12)\n- colorizers\n- `g[` and `g]` to sort by all key columns\n- `;` and `.` experimental regex commands\n\n## v0.59 (2017-05-31)\n- pivot sheets with `W`\n- undo with `BACKSPACE` and replay with `ga`\n- dev guide and user guide\n- `ge` mass edit\n- freeze with `g'`\n\n## v0.44\n- creating sustainable dev process at RC\n- `z` scrolling prefix\n\n## v0.42\n- async select/unselect\n- aggregator functions on columns\n- .xls\n\n## v0.41 (2017-01-18)\n- asynchronous commands (each in its own thread) with\n   - `^T` sheet of long-running commands\n   - `^C` cancel\n   - `ENTER` to see the final performance profile\n- `P` random population of current sheet\n- headerlines default now 1\n\n## v0.40\n- options settable with command-line arguments (`--encoding=cp437`)\n- input() histories with UP/DOWN (and viewable with `I`)\n- unicode input now works\n- editText clears value on first typing\n- `\"` duplicates sheet with only selected rows; `g\"` duplicates entire sheet verbatim\n\n## v0.38\n- sortable date\n- open_zip comes back\n\n## v0.37\n- `g~` (autodetect all columns)\n- `\"` copies row to immediately following\n- nulls, uniques on columns sheet\n\n## v0.36\n- right column\n- regex subst\n- unreverse [/] sort keys ([ = ascending)\n\n## v0.35 (2016-12-04)\n- reverse [/] sort keys\n- goto `r`ow by number or `c`olumn by name\n\n## v0.33\n- type detection with `~`\n- date type\n- fix outer join\n\n## v0.32\n- expose col.type in column header\n- push value conversion to time of usage/display\n\n## v0.31\n- F1 help sheet\n- ^O directly exposes eval result as sheet\n- custom editText with initial value, ESC that raises VEscape, and readline edit keys\n\n## v0.30 (2016-11-27)\n- make all sheets subclasses of VSheet\n- remove .zip opening and url fetching\n- added options ColumnStats and csv_header\n\n## v0.29\n- pin key columns to left\n- join sheets on exact key match\n- -r/--readonly mode\n\n## v0.28 (2016-11-22)\n- inputs: .csv, .tsv, .json, .hdf5, .xlsx, .zip\n- outputs: .csv, .tsv\n- hjkl cursor movement, t/m/b scroll to position screen cursor\n- skip up/down columns by value\n- row/column reordering and deleting\n- resize column to fix max width of onscreen row\n- filter/search by regex in column\n- sort asc/desc by one column\n- `g`lobal prefix supersizes many commands\n- `e`dit cell contents\n- convert column to int/str/float\n- reload sheet with different format options\n- add new column by Python expression\n- `s`elect/`u`nselect rows, bulk delete with `gd`\n- `F`requency table for current column with histogram\n- `S`heets metasheet to manage/navigate multiple sheets,\n- `C`olumns metasheet\n- `O`ptions sheet to change the style or behavior\n- `E`rror metasheet\n- `g^P` status history sheet\n\n## v0.14 (2016-11-13)\n"
  },
  {
    "path": "CLAUDE.md",
    "content": "# VisiData Development Guide\n\nQuick reference for VisiData development. For detailed coding patterns, conventions, and best practices, see **[dev/STYLE.md](dev/STYLE.md)**.\n\n`CLAUDE.md` and `AGENTS.md` are complementary: use this file for primary contributor workflow and architecture context, and use `AGENTS.md` for concise agent-oriented repository guidance.\n\n## Important Note About AI Usage\n\nVisiData (created in 2016) is 99% written by humans and is NOT a vibe-coded AI project.  This file is meant to allow AI-assisted development of features and bugfixes.  **All code must be reviewed and approved and tested by a human before being merged into the codebase or submitted as a PR.**\n\n## Repository Structure\n\n```\nvisidata/\n├── visidata/              # Main package\n│   ├── *.py              # Core modules (sheet.py, column.py, etc.)\n│   ├── features/         # Auto-loaded feature plugins\n│   ├── loaders/          # File format loaders\n│   ├── apps/             # Standalone applications\n│   └── experimental/     # Experimental features (load/install with 'import visidata.experimental.foo')\n├── tests/                # Test files\n├── docs/                 # Documentation\n└── dev/                  # Development utilities and docs\n```\n\n## Features Directory (`visidata/features/`)\n\n- All `.py` files in this directory are **automatically imported** when VisiData starts\n- Each feature file should be self-contained\n- Features extend VisiData functionality without modifying core files\n\n## Quick Reference\n\n### Core Classes\n- `BaseSheet` - Minimal sheet functionality\n- `Sheet` / `TableSheet` - Sheet with columns and rows (most common)\n- `Column` - Column definition with getter/setter\n\n### Adding Commands\n```python\nBaseSheet.addCommand('', 'command-name', 'code', 'help text')\n```\n\n### Adding to Global Namespace\n```python\nvd.addGlobals(MyClass=MyClass)  # Use keyword args, not dict\n```\n\n### Adding Menu Items\n```python\nvd.addMenuItems('''\n    Menu > Submenu > Item Name > command-name\n''')\n```\n\n### Example Feature Structure\n```python\nfrom visidata import vd, Sheet, Column\n\n# rowdef: description of what a row represents\nclass MySheet(Sheet):\n    rowtype = 'items'\n    columns = [\n        Column('name', getter=lambda c,r: r.attribute),\n    ]\n\n    def reload(self):\n        self.rows = [...]\n\nBaseSheet.addCommand('', 'my-command', 'code', 'help')\nvd.addGlobals(MySheet=MySheet)\n```\n\n## Development Workflow\n\n1. Add `.py` file to `visidata/features/`\n2. Run `vd` and test interactively\n3. Iterate and refine\n4. Document with docstrings and comments\n\n## Make Targets\n\n- `make test` — run all tests\n- `make help` — list all targets\n\n## Documentation\n\nFor comprehensive development documentation, see the `dev/` directory:\n\n### [dev/STYLE.md](dev/STYLE.md) - Coding Style and Patterns\nUse this when writing code, creating features, or defining sheets and columns.\n- Naming conventions (camelCaps, under_score, etc.)\n- Feature file structure and patterns\n- Sheet and Column class patterns\n- Command and menu integration\n- API decorators\n- Best practices and examples\n\n### [dev/GIT.md](dev/GIT.md) - Version Control Practices\nUse this when making commits or preparing pull requests.\n- Commit message format and conventions\n- Issue tracking in code\n- Branch and merge workflow\n- Patch-safe commit marking\n\n### [dev/DOCS.md](dev/DOCS.md) - Documentation Writing\nUse this when writing user-facing documentation, help text, or in-app guides.\n- VisiData's markdown syntax\n- Display attribute syntax (colors, clickable links)\n- Option and command reference format\n- Technical writing guidelines\n\n### [dev/PERFORMANCE.md](dev/PERFORMANCE.md) - Performance Analysis\nUse this when investigating or optimizing performance issues.\n- Finding reproducible performance issues\n- Profiling techniques and tools\n- Analyzing profiling results\n- Optimization workflow\n\n### [dev/OPTIONS.md](dev/OPTIONS.md) - Options System\nUse this when working with options, adding new options, or understanding how configuration resolves.\n- Resolution chain (instance → class → global → default)\n- How sheets and paths participate in options\n- Setting and reading options at different levels\n\n## Updating Documentation\n\nWhen making **user-facing changes** (new commands, changed behavior, new options, new/changed loaders, UI changes), check [docs/README.md](docs/README.md) to identify which documentation files need to be updated.\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "Please don't be a dick ♥\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\n## Spread the Word\n\nThe single best way you can contribute, is to share your enthusiasm about VisiData with other people.\nA vibrant community is essential to its sustainable development.\n\nHowever, direct and forceful promotion is probably not the most effective approach for a tool like VisiData.\nPeople generally need to be exposed several times and from several sources before they will try some terminal utility they've never heard of before.\n\nSome people are interested, but are daunted by the installation process or the interface; you can [help them get it installed](/install), and provide a few pointers to get started.\nDon't make it too complicated or overload them with too many features.\nStick to the basics: arrow keys, quit, help, search, sort, freq table.\n\nWe also need people to mention VisiData in their forums and communities that relate to data and terminal programs.\nDon't spam or do a drive-by promotion; these are largely ineffective and will often be received negatively.\nEndorsements have more weight from people who actively post about other relevant topics; we don't want to become the \"VisiData Brigade\".\n\nFinally, if you are on \"Web 2.social\", you can post a [tweet](https://twitter.com/visidata) or a [tutorial]() or a [demo](https://www.youtube.com/watch?v=N1CBDTgGtOU) or [host a workshop](https://www.meetup.com/pt-BR/Journocoders/events/258035880/), or anything else you think might make people interested in exploring the wonderful world of VisiData.\n\n## Support on Patreon\n\nIf VisiData saves you time on a regular basis, and especially if VisiData makes your paid work easier, please contribute to [my Patreon](https://www.patreon.com/saulpw).\n\n## Start a Project Using VisiData\n\nIf you know Python and want to augment it to suit your own workflow, you can create a loader or a plugin.  In support of this, I have written [a detailed api guide for VisiData](https://www.visidata.org/docs/api/).\n\nHere are some great examples:\n\n  - [jsvine's custom visidata plugins](https://github.com/jsvine/visidata-plugins)\n  - [layertwo's pcap loader](https://github.com/saulpw/visidata/blob/develop/visidata/loaders/pcap.py)\n\nWithout fail, these projects lead to discovering bugs and help flesh out the API, which result in design improvements in VisiData.\nImportantly, each issue found this way comes with real world motivations, so it is easy to explain your reasoning behind proposals and core feature requests.\n\n## Feature Requests\n\nVisiData is designed to be extensible, and most feature requests can be implemented as a one line command, or a tiny snippet of code to include in a `.visidatarc`.\n\nIf this would require changes to the VisiData core, and a reasonable design is approved, then the issue can stay open until the core changes have been made.\nOtherwise, in the spirit of Marie Kondo, the issue will be closed without prejudice.\n\nFeature requests with some amount of working Python code are more likely to get attention.\nDesign proposals with concrete use cases are very welcome.\n\n## Writing a well constructed bug report\n\nIf you encounter any bugs or have any problems, please [create an issue on GitHub](https://github.com/saulpw/visidata/issues).\n\nA great bug report will include:\n\n  - a stacktrace, if there is an unexpected error; the most recent full stack traces can be viewed with `Ctrl+E` (then saved with `Ctrl+S`)\n  - a [.vd](http://visidata.org/docs/save-restore/) and sample dataset that reproduces the issue\n  - a .png/.gif (esp. for user interface changes)\n\nSome examples of great bug reports:\n\n  - [#350 by @chocolateboy](https://github.com/saulpw/visidata/issues/350)\n  - [#340 by @Mikee-3000](https://github.com/saulpw/visidata/issues/340)\n\n\n## Setting Up Git Hooks\n\nVisiData includes git hooks in `dev/hooks/` that run unit tests and cmdlog tests before pushing. To enable them:\n\n```\ngit config core.hooksPath dev/hooks\n```\n\n## Submitting Source Code\n\nCheck out the [Plugin Authors Guide](https://visidata.org/docs/api) for an overview of the API.\nCode in `visidata/features/` or `visidata/loaders/` is generally welcome, as long as it is useful to someone and safe for everyone.\nUpdates or additions to the core code should be proposed via an [Github Issue](https://github.com/saulpw/visidata/issues/new/choose) before submitting a PR.\n\nVisiData has two main branches:\n\n  - [stable](https://github.com/saulpw/visidata/tree/stable) has the last known good version of VisiData (what is in pypi/brew/apt).\n  - [develop](https://github.com/saulpw/visidata/tree/develop) has the most up-to-date version of VisiData (which will eventually be merged to stable).\n\nAll pull requests should be submitted against `develop`. Submitters will need to e-sign a [Copyright Assignment Agreement (CAA)](https://visidata.org/caa) before a pull request will be accepted.\n\n# Open Source License and Copyright\n\nVisiData is an open-source utility that can be installed and used for free (under the terms of the [GPL3](https://www.gnu.org/licenses/gpl-3.0.en.html)).\n\nThe core VisiData utility and rendering library will always be both free and libre.\n\nAs the copyright holder, Saul Pwanson has the authority to negotiate other license terms.\n\n**By submitting changes to this repository, you acknowledge that you assign copyright to the owner of the repository ([Saul Pwanson <vd@saul.pw>](mailto:vd@saul.pw)).**\n"
  },
  {
    "path": "Dockerfile.alpine",
    "content": "FROM python:3.8-alpine\n\nRUN pip install requests python-dateutil wcwidth\n\nRUN mkdir -p /opt/visidata\nWORKDIR /opt/visidata\nCOPY . ./\nRUN sh -c 'yes | pip install -vvv .'\n\nENV TERM=\"xterm-256color\"\nENTRYPOINT bin/vd\n"
  },
  {
    "path": "Dockerfile.darkdraw.alpine",
    "content": "FROM visidata\n\nRUN apk add git\nRUN pip install git+https://github.com/devottys/darkdraw.git@master\nRUN sh -c \"echo >>~/.visidatarc import darkdraw\"\n\nENV TERM=\"xterm-256color\"\nENTRYPOINT [\"/opt/visidata/bin/vd\", \"-f\", \"ddw\"]\n"
  },
  {
    "path": "LICENSE.gpl3",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "MANIFEST.in",
    "content": "include README.md\ninclude LICENSE.gpl3\ninclude CHANGELOG.md\ninclude CONTRIBUTING.md\ninclude CODE_OF_CONDUCT.md\ninclude requirements.txt\ninclude requirements.scm\ninclude visidata/man/vd.1\ninclude visidata/man/vd.txt\ninclude visidata/man/visidata.1\ninclude visidata/ddw/input.ddw\ninclude visidata/ddw/regex.ddw\ninclude visidata/tests/sample.tsv\ninclude visidata/tests/benchmark.csv\ninclude visidata/desktop/visidata.desktop\ninclude visidata/desktop/org.visidata.VisiData.metainfo.xml\ninclude visidata/desktop/icons/48x48/visidata.png\ninclude visidata/desktop/icons/32x32/visidata.png\ninclude visidata/experimental/noahs_tapestry/*.json\ninclude visidata/experimental/noahs_tapestry/*.md\ninclude visidata/experimental/noahs_tapestry/*.ddw\ninclude visidata/experimental/noahs_tapestry/*.sqlite\ninclude visidata/guides/*.md\n"
  },
  {
    "path": "Makefile",
    "content": ".PHONY: help \\\n       install install-dev install-test install-all \\\n       test test-all test-vgit test-vdsql \\\n       build man zsh-completion docker \\\n       setup-hooks setup-vscode lint \\\n       diff-test clean\n\nhelp:\n\t@echo \"Install:\"\n\t@echo \"  make install           pip install visidata\"\n\t@echo \"  make install-dev       editable install with dev deps\"\n\t@echo \"  make install-test      install with test deps\"\n\t@echo \"  make install-all       install with all optional deps\"\n\t@echo \"\"\n\t@echo \"Test:\"\n\t@echo \"  make test              run all tests (same as test-all)\"\n\t@echo \"\"\n\t@echo \"Build:\"\n\t@echo \"  make man               generate man pages (requires soelim, preconv, aha)\"\n\t@echo \"  make zsh-completion    generate zsh completion script\"\n\t@echo \"  make docker            build docker images\"\n\t@echo \"\"\n\t@echo \"Setup:\"\n\t@echo \"  make setup-hooks       configure git to use dev/hooks\"\n\t@echo \"  make setup-vscode      copy devcontainer configs to .vscode/\"\n\t@echo \"\"\n\t@echo \"Utility:\"\n\t@echo \"  make lint              run ruff linter\"\n\t@echo \"  make diff-test         show diffs from last test run\"\n\t@echo \"  make clean             remove generated files\"\n\ninstall:\n\tpip3 install .\n\ninstall-dev:\n\tpip3 install -r dev/requirements-dev.txt\n\tpip3 install -e .\n\ninstall-test:\n\tpip3 install .\n\tpip3 install \".[test]\"\n\ninstall-all:\n\tpip3 install \".[all]\"\n\ntest: test-all\n\ntest-all:\n\tdev/test-all.sh\n\ntest-vgit:\n\tvd -p visidata/apps/vgit/tests/*.vdx --batch\n\ntest-vdsql:\n\tcd visidata/apps/vdsql && ./test.sh\n\nbuild: man zsh-completion\n\nman:\n\tdev/mkman.sh\n\nzsh-completion:\n\tpython3 dev/zsh-completion.py _visidata\n\ndocker:\n\tdev/build-container\n\n# Setup\n\nsetup-hooks:\n\tgit config core.hooksPath dev/hooks\n\nsetup-vscode:\n\tmkdir -p .vscode\n\tcp .devcontainer/launch.json .vscode/launch.json\n\tcp .devcontainer/settings.json .vscode/settings.json\n\n# Utility\n\nlint:\n\truff check .\n\ndiff-test:\n\tdev/diff-test.sh\n\nclean:\n\trm -f visidata/man/vd.1 visidata/man/visidata.1 visidata/man/vd.txt\n\trm -f docs/man.md\n"
  },
  {
    "path": "README.md",
    "content": "# VisiData v3.3\n\n[![Tests](https://github.com/saulpw/visidata/workflows/visidata-ci-build/badge.svg)](https://github.com/saulpw/visidata/actions/workflows/main.yml)\n[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/saulpw/visidata)\n\n[![discord](https://img.shields.io/discord/880915750007750737?label=discord)](https://visidata.org/chat)\n[![Mastodon](https://img.shields.io/mastodon/follow/110136431814047095?domain=https%3A%2F%2Ffosstodon.org)](https://fosstodon.org/@saulpw)\n\nA terminal interface for exploring and arranging tabular data.\n\n![Frequency table](http://visidata.org/videos/freq-move-row.gif)\n\nVisiData supports tsv, csv, sqlite, json, xlsx (Excel), hdf5, and [many other formats](https://visidata.org/formats).\n\n## Platform requirements\n\n- Linux, OS/X, or Windows (with WSL)\n- Python 3.8+\n- additional Python modules are required for certain formats and sources\n\n## Install\n\nTo install the latest release from PyPi:\n\n    pip3 install visidata\n\nTo try VisiData without installing, use [pipx](https://pipx.pypa.io/) or [uv](https://docs.astral.sh/uv/):\n\n    pipx run visidata          # or: uvx visidata\n\nTo install permanently (adds `vd` to your PATH):\n\n    pipx install visidata      # or: uv tool install visidata\n\nAdditional Python packages are needed for some formats:\n\n    pipx install visidata --preinstall openpyxl --preinstall lxml\n    # or: uv tool install visidata --with openpyxl --with lxml\n\nTo add format packages to an existing pipx install:\n\n    pipx inject visidata openpyxl lxml\n\nTo install the cutting edge `develop` branch (no warranty expressed or implied):\n\n    pip3 install git+https://github.com/saulpw/visidata.git@develop\n\nSee [visidata.org/install](https://visidata.org/install) for detailed instructions for all available platforms and package managers.\n\n### Usage\n\n    $ vd <input>\n    $ <command> | vd\n\nPress `Ctrl+Q` to quit at any time.\n\nHundreds of other commands and options are also available; see the documentation.\n\n### Documentation\n\n* [VisiData documentation](https://visidata.org/docs)\n* [Plugin Author's Guide and API Reference](https://visidata.org/docs/api)\n* [Quick reference](https://visidata.org/man) (available within `vd` with `Ctrl+H`), which has a list of commands and options.\n* [Intro to VisiData Tutorial](https://jsvine.github.io/intro-to-visidata/) by [Jeremy Singer-Vine](https://www.jsvine.com/)\n\n### Help and Support\n\nIf you have a question, issue, or suggestion regarding VisiData, please [create an issue on Github](https://github.com/saulpw/visidata/issues) or chat with us at #visidata on [irc.libera.chat](https://libera.chat/).\n\nIf you use VisiData regularly, please [support me on Patreon](https://www.patreon.com/saulpw)!\n\n## License\n\nCode in the `stable` branch of this repository, including the main `vd` application, loaders, and plugins, is available for use and redistribution under GPLv3.\n\n## Credits\n\nVisiData is conceived and developed by Saul Pwanson `<vd@saul.pw>`.\n\nAnja Kefala `<anja.kefala@gmail.com>` maintains the documentation and packages for all platforms.\n\nMany thanks to numerous other [contributors](https://visidata.org/credits/), and to those wonderful users who provide feedback, for helping to make VisiData the awesome tool that it is.\n"
  },
  {
    "path": "bin/filter-doc.py",
    "content": "#!/usr/bin/python3\n\nimport fileinput\nimport inspect\nimport visidata\n\ntmpl='''\n~~~\n    {name}{sign} [ [{sourcepy}:{sourceline}](https://github.com/saulpw/visidata/visidata/blob/develop/visidata/{sourcepy}#{sourceline})]\n~~~\n{doc}\n'''\n\nfor line in fileinput.input():\n    if line.startswith(':#'):\n        objname, funcname = line[2:].strip().split('.')\n        func = getattr(getattr(visidata, objname), funcname)\n        src = visidata.Path(inspect.getsourcefile(func)).parts[-1]\n        print(tmpl.format(\n            name=objname+'.'+func.__name__,\n            doc=inspect.getdoc(func) or 'XXX',\n            sourcepy=src,\n            sourceline=inspect.getsourcelines(func)[1],\n            sign=inspect.signature(func)))\n    else:\n        print(line, end='')\n"
  },
  {
    "path": "bin/vd",
    "content": "#!/usr/bin/env python3\n\nimport visidata.main\n\nif __name__ == '__main__':\n    visidata.main.vd_cli()\n"
  },
  {
    "path": "bin/vd2to3.vdx",
    "content": "#!/usr/bin/env -S vd -p\n# VisiData v3.0dev\nopen-file ~/.visidata/macros.tsv\ncol command\nrename-col binding\ncol filename\nrename-col source\nsave-sheet ~/.visidata/macros.jsonl\nquit-all\n"
  },
  {
    "path": "bin/viewtsv.py",
    "content": "#!/usr/bin/env python3\n\n# as plugin: `from viewtsv import open_tsv` in .visidatarc\n# standalone: `viewtsv.py <tsv-files>'\n\nfrom visidata import VisiData, Sheet, ColumnItem, asyncthread, options\n\n@VisiData.api\ndef open_tsv(vd, p):\n    return MinimalTsvSheet(p.base_stem, source=p)\n\n\nclass MinimalTsvSheet(Sheet):\n    rowtype = 'rows'\n\n    @asyncthread\n    def reload(self):\n        self.rows = []\n\n        delim = options.delimiter\n        header = True\n        with open(self.source, encoding=options.encoding) as fp:\n            for line in fp:\n                line = line[:-1]  # strip trailing newline\n\n                if header:\n                    if delim in line:\n                        header = False\n                        self.columns = []\n                        for i, colname in enumerate(line.split()):\n                            self.addColumn(ColumnItem(colname, i))\n                    continue\n\n                self.addRow(line.split(delim))\n\n\n# a minimal main() for standalone apps\nif __name__ == '__main__':\n    import sys\n    from visidata import run, Path, vd\n    run(*(vd.open_tsv(Path(fn)) for fn in sys.argv[1:]))\n"
  },
  {
    "path": "dev/DOCS.md",
    "content": "# VisiData Documentation Style Guide\n\n`docs/man.md` is generated from the manpage source (`visidata/man/vd.inc`) by `dev/mkman.sh`. Edit `vd.inc`, not `man.md`.\n\nVisiData supports basic markdown like # Headings, **bold**, *italics*, `code snippets`, and _underscore_.\n\nVisiData has its own display attribute syntax. For e.g.:\n\n    [:onclick <url>]<text>[/] formats <text> into a clickable url that will open in $BROWSER.\n\n    [:red on black]<sentence>[/] changes the colour of <sentence> to be red text on black background. Any color option can be used after :, like [:warning], [:error], [:menu].\n\nVisiData replaces `{vd.options.disp_selected_note}` with `+`, the value that `vd.options.disp_selected_note` is set to.\nReference any option value with `{vd.options.optname}`.\nThis is a great way to ensure that the appropriate option is displayed, even if the user changed the option value.\n\n- Use `{help.commands.longname}` to put the properly formatted string (below) into the GuideSheet.\nIt’s much preferred to change the command helpstring itself, in order to make this pattern work, than to write it out manually.\nIt will look like this:\n\n    - `<keystroke>` (`<longname>`) to <command helpstring>.\n\nThe keystroke immediately follows the bullet.  Do not say “Press” or “Use” within VisiData docs and helpstrings.\n\n- List relevant options with the following pattern.\n\n    - [:onclick options-sheet <option name>]`<option name>`[/] to <option helpstring> (default: <option default value>).\n\n    - Similarly, prefer to use {help.options.option-name} to expand into the above, and prefer to modify the helpstring instead of writing it out manually.\n\n - Do not use the second person perspective (“you”, “yours”) outside of tutorials.\n\n - Do not mention \"In VisiData\" - we can assume that the user is in VisiData already.\n - Do not use extraneous filler words.\n - Use simpler words and grammar, using technical language accessible to ESL students.\n    - Use the infinitive form of verbs.  Avoid using future and conditional tense.\n    - Use active voice instead of passive voice.\n - Use established VisiData vocabulary, like \"command\" instead of \"operation\" or \"action\".\n - Use `[:semantic_color]` instead of hard-coded colors when possible.\n - Use `[:keystrokes]` in the guide for keystrokes, longnames, and CLI options--anything the user would actually type.  But not for output (what the user sees).\n - Keystrokes use the actual key combination the user presses: `Shift+F` not `F`, `Shift+W` not `W`.\n - Separate prefix modifiers from the base key with a space: `g Enter`, `z Shift+F`, `gz Enter`.\n - Prefix option names with `options.` in prose (e.g. `options.numeric_binning`). Not needed in option tables where the column header already says \"option\".\n - Describe user-facing behavior, not implementation details. e.g. \"Undoing on the frequency table also undoes on the source sheet\" not \"Both sheets share a single undo point\".\n - Prefer lists to tables when each row works as a self-contained list item (not too many columns).\n"
  },
  {
    "path": "dev/GIT.md",
    "content": "# Git and Version Control Practices\n\nThis document covers VisiData's conventions for Git commits, issue tracking, and version control workflow.\n\n## Commit Message Style\n\nMost existing commits only have a compact one-line summary, and this is fine. Additional information in the body is welcomed, in proportion to the time and complexity of the implementation (and especially for one-line bugfixes that took a deceptive amount of effort).\n\nSubject lines should generally fit under 50 characters but it's not rigidly enforced. It's better to have a clearer message at the cost of a few overflow characters.\n\n### Commit Message Format\n\nMost commit messages should look like:\n\n```\n[graph-] fix graph ranges for xmax, ymax < 1  #1673 #1697\n```\n\n### Components\n\n#### Tag (module name or category)\nThe tag in brackets should be the module name if the commit is focused on a particular module.\n\nSpecial tags for non-functional changes:\n- **`docs`** - Documentation-only commits\n- **`tests`** - Test-only commits (test framework and core tests)\n- **`dev`** - Non-code commits relevant to development: release notes, packaging, git/github configuration, CI, file renames, etc.\n- **`nfc`** - Guaranteed non-functional changes not in the above categories\n\nOther tags:\n- **`api`** - Deliberate, breaking, or sweeping changes to the API\n\n#### Trailing Dash (patch-safe marker)\nThe trailing `-` is for cases when the entire commit is safe and/or desirable to take in a patch release:\n- Tightly constrained changes\n- Code is unilaterally improved afterwards\n\nWhen we put together a patch release, we scan commit messages for this marker to see which ones should be included. Ideally only and all `-` marked commits since the last release would be in a patch release.\n\nDo not assume a commit is patch-safe — always ask before adding the `-` marker.\n\n#### Issue Numbers\nAny issue numbers fixed in a commit should be appended to the git commit summary line, including the leading `#`.\n\nExamples:\n- `#1234` - Single issue\n- `#1673 #1697` - Multiple issues\n\n### Writing Style\n\nFor brevity:\n- Don't use generic verbs like `fix` or `use` (and especially not `utilize`)\n- Don't repeat the module name in the summary\n\n### Examples\n\n```\n[graph-] fix ranges for xmax, ymax < 1  #1673 #1697\n[docs] update installation instructions\n[tests-] add test for empty column handling  #2101\n[daw] better interface for g( and x/y\n[api] change Column.getValue signature\n```\n\n## Issue Tracking in Code\n\nFor bugs that have a Github issue number, include the bug number on the same line as the primary fix, with two spaces before the `#` and no spaces after:\n\n```python\nbreak  #1234\nreturn None  #2567\n```\n\nWe've started doing this for PRs also. It's a bit of clutter but it helps:\n- See at a glance where the battle scars are in the code\n- Avoid regressions if the function ever gets rewritten\n- Track which issues resulted in actual code changes\n\n## GitHub Comments and Replies\n\nCommit before posting GitHub comments/replies. Let Saul push first, then post the comment. Don't post replies to issues before the relevant code is committed and pushed.\n\nAI-generated comments should have the full attribution at the bottom: `[this message written by Claude Opus 4.6 and approved by @saulpw]`.\n\n### Closing Issues for Implemented Features\n\nWhen closing an issue for a feature that's already been implemented, the comment should include:\n- A link to the implementing commit(s)\n- Links to relevant documentation pages\n- A brief example of how to use the feature (matching the original request if possible)\n- Label wishlist issues with `wish granted` when closing\n\n## Branch and Merge Workflow\n\nIn general:\n- Commits should be **rebased** instead of merged, for a more linear and less cluttered commit log\n- Try to **squash features** into a single commit (but don't over-squash either)\n- Keep the commit history clean and meaningful\n- After every rebase, run `git diff <base>...HEAD --stat` to verify only expected files are in the diff before pushing\n\n### Default Branch for Commits\n\nBy default, commit to **develop** unless explicitly working in another branch on a PR. If on a different branch, cherry-pick or switch to develop first.\n\n### Pull Requests\n\n`develop` is the trunk branch. PRs come from side branches, not from develop directly. Create a feature branch off develop for PRs.\n\nRun `dev/test-all.sh` locally before pushing. After creating a PR, check CI status with `gh pr checks` and fix any failures before moving on.\n\n### Documentation\n\nUpdate docs in the same commit as the code change, not as a separate follow-up commit. Check `docs/README.md` for which files to update.\n\n### Bug Fix PRs\n\nAlways add a regression test for bug fix PRs. Generate the golden output with the fix applied, and verify the test fails without the fix and passes with it.\n\n### Wishlist items\n\n- For external wishlist items, implement → PR → tag requester to verify.\n"
  },
  {
    "path": "dev/OPTIONS.md",
    "content": "# VisiData Options System\n\nReference for how options work in VisiData. Use this when working with options on sheets, paths, or globally.\n\n## Overview\n\nVisiData's options system (`visidata/settings.py`) provides hierarchical configuration that resolves through a chain of contexts, from most specific to least specific.\n\n## Core Classes\n\n- **`Option`** — a single option definition: name, value, helpstr, module, replayable flag\n- **`SettingsMgr`** — the global registry (`vd._options`). Stores `{optname: {context_key: Option}}`\n- **`OptionsObject`** — the public interface returned by `obj.options`. Wraps a SettingsMgr with a specific context object\n\n## Declaring Options\n\n```python\nvd.option('name', default_value, 'help text')\nvd.option('name', default_value, 'help text', replay=True)        # recorded in command log\nvd.option('name', default_value, 'help text', sheettype=None)     # global-only, not per-sheet\n```\n\n## Resolution Chain\n\nWhen you access `obj.options.foo`, the system resolves through contexts from highest to lowest precedence:\n\n### For Sheets (`sheet.options.foo`)\n1. **Sheet instance** — set on this specific sheet\n2. **Sheet class hierarchy** — set on the sheet's class or any parent class (via MRO)\n3. **Global** — set via .visidatarc, CLI args, or Options meta-sheet at runtime\n4. **Default** — hardcoded in the `vd.option()` declaration\n\n### For Paths (`path.options.foo`)\n1. **Path instance** — set on this specific path (keyed by full path string)\n2. **Path class** — set on the Path class (or S3Path, etc.)\n3. **Global**\n4. **Default**\n\n## Setting Options\n\n```python\n# On a specific object\nsheet.options.foo = value           # set on this sheet instance\npath.options.foo = value            # set on this path instance\n\n# On a class (affects all instances)\nvd.options.set('foo', value, Sheet) # set on Sheet class\n\n# Globally\nvd.options.foo = value              # set globally (when no sheet context)\nvd.options.set('foo', value, 'global')\n\n# Without cmdlog recording (for derived/internal state)\np.options.set('filetype', filetype, p, cmdlog=False)\n\n# Check if explicitly set on an object (ignoring inheritance)\nvd.options.getonly('foo', obj, default)\n```\n\n## How Objects Participate in Options\n\nAny object can be an options context. The `SettingsMgr.objname()` method converts objects to string keys for storage:\n\n| Object type | Key | Example |\n|---|---|---|\n| `str` | as-is | `'global'`, `'default'` |\n| `None` | `'global'` | |\n| `BaseSheet` instance | `sheet.name` | `'sample'` |\n| `BaseSheet` subclass | `cls.__name__` | `'TableSheet'` |\n| `os.PathLike` instance | `str(path)` | `'/home/user/data.csv'` |\n| `os.PathLike` subclass | `cls.__name__` | `'Path'`, `'S3Path'` |\n\n## Path Options\n\nPaths get options the same way sheets do — via an `options` property that returns an `OptionsObject` bound to the path instance.\n\nSince a sheet's source is typically a Path (`self.source`), the sheet can read path-level options:\n\n```python\n# In a sheet method or afterLoad hook:\npos = self.source.options.initial_pos    # read from the path\nft = self.source.options.filetype        # read filetype from the path\n```\n\nThis is useful when state needs to flow from CLI arg parsing (where the Path exists) to sheet loading (where the sheet exists but wasn't created yet at parse time).\n\n`filetype` is the canonical example: `openPath()` resolves the filetype (from explicit param, path options, or extension) and stores it on the path. Loaders read it via `self.source.options.filetype`.\n\n## Key Files\n\n- `visidata/settings.py` — SettingsMgr, OptionsObject, Option\n- `visidata/basesheet.py:112-118` — sheet.options via _dualproperty\n- `visidata/path.py` — path.options property\n"
  },
  {
    "path": "dev/PERFORMANCE.md",
    "content": "# How to analyze performance issues in VisiData\n\n## 1. Find a reliable repro (usually a large or pathological dataset).\n\nMany perf issues will require a dataset with a large number of rows.\nOther perf issues involve extremes of data besides raw dataset size: 1000s of columns, or very deep nesting, or very long values.\nThe rest involve environmental extremes: a huge terminal window, \n\nWe're generally not interested in optimizing for pathological cases, especially if it makes the program a lot more complicated, or degrades more general functionality.\nVisiData should not crash or become so unresponsive that it needs to be killed, but it's not meant to handle 10+ million rows.  Get a subset of the data first, or use a more specialized tool.  Maybe `vdsql`.\n\nHowever, VisiData should be able to handle 1 million rows (1GB of data) reasonably well.  So find a dataset of that size or smaller which exhibits the performance problem.\n\n## 2. Enable profiling and then run the command.\n\nEnable profiling with `Ctrl+_` and run the command with the performance problem.\nIf it's a small problem (under a few seconds), you may have to run the command\nseveral times in rapid succession.\n\nIf profiling the main interface thread, then launch visidata with `--profile` to enable it from the start.\n\nTo profile startup time, run:\n\n    time python -m cProfile -o startup-vd.pyprof bin/vd -N\n\nand then press `gq` or `Ctrl+Q` as quickly as possible.\n\nNote: you'll have to comment out `curses.flushinp()` in `mainloop.py` to not discard these keystrokes.\nAlso, comment out `os._exit(rc)` in `main.py` so that cProfile can save its profiling data.\n\nThis will profile the time between pressing Enter on the CLI and the first command processed.  The total time is the last number given by `time`, in seconds:\n\n    0.34s user 0.04s system 100% cpu 0.374 total\n\nThe total startup-to-quit time should be under 250ms (and if possible under 100ms).  (Here it is 374ms).\n\n\n## 3. Go to the Threads Sheet and open the profile of the slow thread.\n\nWait until the profiled command has finished running, then press `Ctrl+T` to open the Threads Sheet and find the profiled thread.  Look for a thread with a `profile` entry and high `process_time`.\n\nMost long-running commands should already be spawning a new thread.  If the problem is in the interface thread (evidenced by laggy commands, or \"freezing\" while running a command), then you'll have to launch with `--profile` and look at the MainThread.\n\n## 4. Press `Enter` on that thread to see the captured profile.\n\nThis is structured output like you might see from a standard Python profiling tool.\nIn fact, you can save the profile data to a `.pyprof` file with `z Ctrl+S` and analyze it with other tools.  I often do this (after saving to `foo.pyprof`):\n\n```\n    pyprof2calltree -i foo.pyprof -o foo.kcachegrind\n    kcachegrind foo.kcachegrind\n```\n\nThis requires the [pyprof2calltree](https://github.com/pwaller/pyprof2calltree/) and [kcachegrind](https://kcachegrind.github.io/html/Home.html) tools.  There are many others; choose your favorite.\n\n## 5.  Or you can analyze it from within VisiData.\n\nSort descending by `totaltime_us` first to find the largest toplevel consumers of time.  The first one or few should be obvious (the overall command itself), but after that it should show which parts of the command are taking up most of the time.\n\nThen you can sort descending by `inlinetime_us` to find the largest lowlevel consumers.\n\nPress `Ctrl+O` to open the current function in an editor.\n\nIn general, look for non-trivial functions with a large `callcount` with `inlinetime_us` that accounts for a significant fraction of the total time; these are hotspots that are ripe for optimization.\n\nIf no single call is taking up more than 50% of the command time, optimization is going to be more difficult.  In these cases, focus on eliminating or delaying unnecessary work, or providing feedback about progress.  It's more important for VisiData to be lazy and responsive than to do a huge amount of work as quickly as possible.\n\n## 6. Try out an optimization and remeasure.\n\nIf a small optimization results in a measurable performance improvement, it's a keeper.  Otherwise, ditch it.  Go back to step 2 until performance is adequate.\n"
  },
  {
    "path": "dev/README.md",
    "content": "# dev/\n\nResources for VisiData contributors and maintainers.\n\n## Contributor Guides\n\n| File | Description |\n|------|-------------|\n| `STYLE.md` | Code style guide |\n| `GIT.md` | Git workflow and branching conventions |\n| `DOCS.md` | Documentation standards |\n| `PERFORMANCE.md` | Performance guidelines |\n| `TESTING.md` | Test framework guide (golden tests, pytest, writing new tests) |\n\n## Checklists\n\n| File | Description |\n|------|-------------|\n| `checklists/release.md` | Release process checklist |\n| `checklists/feature.md` | New feature checklist (docs, tests, marketing, sample data) |\n| `checklists/manual-tests.md` | Manual testing checklist (cmdlog, replay, options, split window, etc.) |\n| `checklists/add-command.md` | Adding a new command |\n| `checklists/add-aggregator.md` | Adding a new aggregator |\n\n## Design Docs\n\nSee [design/README.md](design/README.md) for full index.\n\n## Scripts\n\n| File | Description |\n|------|-------------|\n| `test.sh` | Run test suite (batched, fast; `-d` for debug; see `TESTING.md`) |\n| `diff-test.sh` | Diff-based test runner |\n| `run-tests-individually.sh` | Run each test in its own process (isolated, slower; see `TESTING.md`) |\n| `mkman.sh` | Generate manpage |\n| `mkpandas-df.py` | Generate pandas DataFrame test fixtures |\n| `zsh-completion.py` | Generate zsh completions |\n\n## Data Files\n\n| File | Description |\n|------|-------------|\n| `formats.jsonl` | Format metadata (builds visidata.org/formats) |\n| `types.jsonl` | Type system structure |\n\n## Test Fixtures\n\n| File | Description |\n|------|-------------|\n| `stdin.vdj` | Used in CI (`.github/workflows/main.yml`) |\n| `quit.vdx` | Quit test fixture |\n| `formats.vd` | Format test fixture |\n| `vduplot.vdx` | Unicode plot test |\n\n## Packaging\n\n| File | Description |\n|------|-------------|\n| `debian/` | Debian packaging files |\n| `build-container` | Container build script |\n| `visidata-brew.rb` | Homebrew formula (stale — pins v1.2) |\n| `requirements-dev.txt` | Dev dependencies |\n\n## Media\n\n| File | Description |\n|------|-------------|\n| `kb-blank.svg` | Blank keyboard layout template |\n| `kb-layout.svg` | VisiData keyboard layout |\n| `vdlogo.svg` | VisiData logo |\n\n## Other\n\n| File | Description |\n|------|-------------|\n| `zsh-completion.in` | Zsh completion template |\n| `workshop-outline.md` | Workshop outline |\n"
  },
  {
    "path": "dev/STYLE.md",
    "content": "# VisiData Coding Style\n\n## Naming Conventions\n\n- **`camelCaps`** — execstr API: `openRow()`, `cursorRow`, `selectedRows`\n- **`under_score`** — internal public API: `reload_data()`, `process_results()`\n- **`_preunder`** — private API (no guarantee): `_init_columns()`, `_cache_value()`\n- **`single`** — common things for both: `status`, `error`, `fail`, `warning`\n- Leading underscore = private to file; embedded underscore = private to VisiData internals; no underscores (camelCase) = public API\n\n### Keybinding Notation\n- `Z` means Shift+Z. `gZ` means `g` then Shift+Z. Don't confuse `z` (prefix) with `Z` (Shift+Z).\n\n### String Quoting\n- Single quotes for most strings. Double quotes inside execstrs: `'foo(\"inner\")'`\n\n## Code Style\n\n- **Indentation**: 4 spaces, always. Fix any mis-indented code you encounter.\n- **Imports**: `vd` should be the first name in `from visidata import vd, ...`\n- **Options**: Always `vd.options.foo`, never import `options` directly. This includes docstrings/comments that mention options — write `vd.options.foo` not `options.foo`.\n- **Comments**: Always `# space` after the hash. Short explanatory comments go inline after the code: `if x:  # reason` not `# reason` on the line above. Section-header comments that describe a block of code stay on their own line — don't cram them inline onto long lines.\n- **Issue refs**: Number first: `#2416  description`, not `description  #2416`.\n- **Blank lines**: Two blank lines between every top-level def/class. Add blank lines between logical sections within functions.\n- **Unicode escapes**: Uppercase hex: `'\\u25E6'` not `'\\u25e6'`\n- **Command names**: `kebab-case` (`open-python-packages`, `freeze-col`)\n- **`ColumnItem`** is deprecated — use `ItemColumn` in new code.\n- **Redundant imports**: Remove inner-function imports when the module is already imported at the top of the file.\n\n## Structure\n\n### Global Sheets\n```python\n@VisiData.lazy_property\ndef my_global_sheet(vd):\n    return MySheet()\n```\n\n### Feature File Layout\n```python\n\"\"\"Optional module docstring.\"\"\"\n\nfrom visidata import vd, BaseSheet, Sheet, Column\n\n# rowdef: <what a row represents>\nclass MySheet(Sheet):\n    'Brief description'\n    rowtype = 'items'  # plural noun\n    columns = [\n        Column('name', getter=lambda c,r: r.attribute),\n    ]\n\nBaseSheet.addCommand('', 'command-name', 'code', 'help text')\n\nvd.addMenuItems('''\n    Menu > Submenu > Item Name > command-name\n''')\n\nvd.addGlobals(MySheet=MySheet)  # keyword args, not dict\n```\n\n### Caching Per-Row Data\nWhen you need one cached value per row, use a `Column` with `cache=True` (or `cache='async'` for expensive I/O).  Don't build a separate dict — Column's cache is already keyed by `rowid` and integrates with the sheet lifecycle.  Example: `DirSheet` uses a hidden `Column('preview', width=0, cache=True, ...)` to cache preview sheet objects per file.\n\n### Loaders vs Features\n- **Loaders** (`visidata/loaders/`): defines `vd.open_<ext>()`\n- **Features** (`visidata/features/`): everything else\n\n## Commands\n\n```python\nBaseSheet.addCommand('', 'command-name', 'code', 'help text')\nSheet.addCommand('gEnter', 'dive-selected', 'openRows(selectedRows)', 'help')\n```\n\n- Put on `BaseSheet` for all contexts, `TableSheet` for table contexts, specific sheet for that sheet only.\n- Never reference exec locals (like `cursorRow`) inside list comprehension filters in execstrs — breaks on Python < 3.12. Extract to `@Sheet.api` method.\n- When extracting a helper for a command, name it after the command's longname (e.g. `addcol-expr` → `addcol_expr`).\n- A command can only call `input()` once, even with `replay=False`.\n- `replay=False` — not added to cmdlog. `deprecated=True` — hidden from help. `testable=False` — excluded from test sweep.\n\n## API Decorators\n\n```python\n@Sheet.api\ndef my_method(sheet, arg): ...\n\n@VisiData.api\ndef my_vd_method(vd): ...\n```\n\n## Options\n\n- Prefix options with module name/abbreviation when exclusive to that module.\n- File properties (like `filetype`) belong on the path: `self.source.options.filetype`\n- When core code checks an option from a feature file, use `options.get()` with a default.\n\n## Credentials\n- Environment variables only, never options: `os.environ.get('MY_API_KEY') or vd.fail('set $MY_API_KEY')`\n\n## Row Properties\n- `rows`, `selectedRows`, `someSelectedRows` (fails if none), `cursorRow`, `visibleRows`\n\n## Cell Values\n- Display (truncated): `col.getDisplayValue(row)` — for UI display\n- Display (full): `col.getFullDisplayValue(row)` — for data operations (save, search, compare, edit)\n- Raw typed: `col.getTypedValue(row)`\n\n## Error Handling\n- `vd.fail()` — user error. `vd.error()` — internal error. `vd.warning()`, `vd.status()`, `vd.debug()`\n- `vd.exceptionCaught(e)` — log and continue (in loops/async)\n- Use `wrapply(func, args)` instead of try/except when wrapping into `TypedExceptionWrapper`\n- Fail fast when user-configured resources can't load — don't silently fall back.\n\n## Documentation\n- Always add `# rowdef:` comment above sheet classes\n- Docstrings on classes (single-quoted) and methods\n\n## Tests\n- Use `.vdx` cmdlog tests for feature/behavior tests, not pytest. Pytest is only for unit tests of pure utility functions.\n- Prefer `.vdx` over `.vd` for new golden tests.\n- When adding or modifying a format saver, add `\"roundtrip\": \"yes\"|\"inexact\"` to `dev/formats.jsonl` and verify with `tests/test-roundtrip.sh <fmt>`.\n- Include the issue number as a comment on the `def test_` line: `def test_foo(self):  # #2829`\n\n## Reference\n- See `visidata/features/pypkg.py` for a complete example.\n"
  },
  {
    "path": "dev/TESTING.md",
    "content": "# Testing\n\n## Running all tests\n\n`dev/test-all.sh` is the top-level test runner. It discovers and runs all `tests/test-*.sh` scripts, prefixes each script's output with its name, and reports pass/fail.\n\n```bash\ndev/test-all.sh                        # run all test scripts\ndev/test-all.sh tests/test-vdx.sh      # run a specific test script\ndev/test-all.sh tests/test-smoke.sh tests/test-macros.sh  # run several\n```\n\nEach `tests/test-*.sh` script is self-contained and can also be run directly.\n\n### Environment variables\n\nDefined in `tests/testenv.sh`, which all test scripts source. `test-all.sh` re-exports them for child processes.\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `PYTHON` | `python3` | Python interpreter |\n| `VD` | `$PYTHON -m visidata --config tests/.visidatarc --visidata-dir tests/.visidata` | VisiData command with stock test config |\n| `NPROCS` | `$(nproc)` | Parallel test processes |\n| `OUTDIR` | `tests/output` | Directory for test output files |\n\nUse `$VD` in test scripts instead of hardcoding `bin/vd` or `python -m visidata`. Both paths call the same `vd_cli()` entry point; `$PYTHON -m visidata` is preferred because it's explicit about which Python interpreter is used. `$VD` includes `--config` and `--visidata-dir` so tests are isolated from the user's personal config.\n\n### Test scripts\n\n| Script | What it tests |\n|--------|--------------|\n| `test-vdx.sh` | Golden tests: replays all `tests/*.vd*` files via `dev/test.sh` |\n| `test-pytest.sh` | Python unit tests via pytest |\n| `test-smoke.sh` | Basic startup and directory opening |\n| `test-macros.sh` | Macro replay (#1652) |\n| `test-startpos.sh` | CLI `+N`/`+col:row` positioning (#2425) |\n| `test-startup-time.sh` | Startup under 400ms (#2216) |\n| `test-stdin.sh` | Stdin piping (#1978) |\n| `test-stdin-replay.sh` | Replaying with stdin input |\n| `test-zsh-syntax.sh` | Zsh completion generation |\n\n### Writing a new test script\n\n1. Create `tests/test-name.sh` (must match `tests/test-*.sh` glob)\n2. `source tests/testenv.sh` at the top\n3. Use `$VD --batch ...` for VisiData invocations (config flags already included)\n4. Use `$OUTDIR` for output files, `mkdir -p $OUTDIR` if needed\n5. Exit non-zero on failure\n\n---\n\nVisiData has two test systems:\n\n## 1. Golden tests (integration/replay tests)\n\nLocated in `tests/`. These are the primary test suite.\n\n**How it works:** Each test is a command log (`.vd`, `.vdj`, or `.vdx` file) that gets replayed in batch mode. The output is written to `tests/output/` and compared against the expected output in `tests/golden/` using `diff`. If they differ, the test fails. Tests also fail if any command raises an exception during replay.\n\n**Console output:** Only warnings, errors, and diffs are shown. In debug mode (`-d`), the full diff is printed and replay aborts on the first error. Errors include the test name for context.\n\n**Running tests:**\n\nUse `dev/test.sh` directly (not `bash dev/test.sh`) so that permission prompts can be approved in bulk.\n\n```bash\ndev/test.sh              # run all tests (batched, fast)\ndev/test.sh issue655     # run one test\ndev/test.sh foo bar baz  # run multiple tests\ndev/test.sh -d           # debug mode: abort on first error, show diffs\n\ndev/run-tests-individually.sh                # run each test in its own process (slower, isolated)\ndev/run-tests-individually.sh tests/foo.vdx  # run specific tests individually\n```\n\nBy default, `test.sh` splits tests into `nproc` parallel batches for speed (~5s). Use `-j N` to control parallelism. Use `run-tests-individually.sh` to run each test in its own process — slower but provides full isolation, useful for debugging cross-test contamination.\n\nThe replay file is now always loaded as `vdx`, but tests may be in vd, vdj, or vdx format; the `.vdx` loader now interprets all three formats (even commingled).\n\nPrefer vdx format for new tests.\n\n**What the harness checks:**\n1. **Runtime errors** — any exception during replay (tracked via `vd.lastErrors`)\n2. **Missing output** — expected output files that were never created\n3. **Diff failures** — output that doesn't match the golden file\n4. **No golden file** — output files with no corresponding golden file\n\nA test fails if any of these conditions are true for it.\n\n**Test file formats:**\n- `.vd` — TSV command log (columns: sheet, col, row, longname, input, keystrokes, comment)\n- `.vdj` — JSON command log: {sheet, col, row, longname, input, keystrokes, comment}\n- `.vdx` — Simple command format (one command per line: `longname [input]`; sheet/row/col not as context but as separate movement commands)\n\nAll three formats allow `#` line comments.\n\n**Golden files:** `tests/golden/testname.ext` — the expected output (committed, read-only reference). The extension determines the save format (`.tsv`, `.csv`, `.html`, etc.).\n\n**Test output:** `tests/output/testname.ext` — actual output from the latest test run (gitignored, never committed). Compare against golden with `diff tests/golden/name.ext tests/output/name.ext`.\n\n**Conventions:**\n- `-nosave` suffix (e.g., `issue2225-nosave.vdx`) skips golden comparison; runs in a separate batch without `replay_ignore_errors`, so `assert-expr` failures are caught. Use for tests that verify internal state via assertions rather than output comparison. Also required for graph/canvas tests, since the pixel buffer is not populated in batch mode (cursor-based commands are no-ops).\n- `-broken` suffix skips the test entirely\n- `-manual` suffix skips the test entirely (for tests not suitable for automation but worth keeping)\n- `-perf` suffix runs via `test-perf.sh` (separate from `test.sh`); reports wall time per test\n- `-flaky` suffix runs the test but treats failures as non-fatal\n- `-311` suffix runs only on Python 3.11+; `-n311` runs only below 3.11\n- Tests should modify data and provide golden output file, rather than using `assert-expr` commands\n- Set explicit cursor positions (e.g., `row 6`) rather than relying on defaults, for test hygiene\n- Explicit saving is not necessary, as the test harness will save the top sheet to the proper output file\n- Never fetch from the network in tests; use local fixture files instead (flaky connections cause spurious CI failures)\n\n**Creating a new golden test:**\n1. Write a `.vdx` file in `tests/` (simplest format)\n2. Generate the golden output:\n   ```bash\n   source tests/testenv.sh\n   $VD --play tests/mytest.vdx --batch --output tests/golden/mytest.tsv\n   ```\n3. Review the golden output, then run `dev/test.sh mytest` to confirm it passes\n\n**Useful commands for .vdx tests:**\n- `open-file path` — open a data file\n- `row N` / `col NAME` — move cursor\n- `select-rows` — select all rows\n- `define-command longname execstr` — define an ad-hoc command for testing\n- `assert-expr expr` / `assert-expr-row expr` — assert (prefer golden output comparison instead)\n- `assert-cell value` — assert cursor cell display value matches expected string (useful for testing cursor movement like search)\n\n## Batch replay internals\n\nThe test harness (`dev/test.sh`) splits tests into parallel VDX batches (sequential chunks so tests with similar imports share a process), separated by `replay-reset` / `replay-output` / `replay-end` commands (defined in `visidata/features/replay_bulk.py`).\n\n**Batch structure:**\n```\noption global replay_ignore_errors True\nreplay-reset tests/output/foo.tsv      # reset state, set output path\n<contents of tests/foo.vdx>            # test commands\nreplay-output                           # save top sheet, reset\nreplay-reset tests/output/bar.tsv      # next test...\n<contents of tests/bar.vdx>\nreplay-output\nreplay-reset baz-nosave                 # nosave tests use replay-end instead\n<contents of tests/baz-nosave.vdx>\nreplay-end                              # no save\nreplay-exit                             # end of batch\n```\n\n**Key commands:**\n- `replay-reset <path>` — call `resetVisiData()` to get clean state (including resetting options to defaults), set output path\n- `replay-output` — save current sheet to path\n- `replay-end` — no-op (for nosave tests)\n- `replay-exit` — no-op (end of batch)\n\n**Error handling:** `replay_ignore_errors` lets the batch continue past individual command errors. Errors printed via `vd.status()` appear on stderr for diagnostic purposes, but do not affect test pass/fail. Only output correctness (golden file diffs) determines test success.\n\n## 2. Python tests (pytest)\n\nLocated in `visidata/tests/`. Run with `pytest`.\n\n```bash\npytest visidata/tests/                    # run all\npytest visidata/tests/test_commands.py    # test all commands execute without error\npytest visidata/tests/test_features.py    # run test_ functions discovered from visidata modules\n```\n\n**Key files:**\n- `conftest.py` — fixtures: `curses_setup` (mock curses), `mock_screen` (mock screen object)\n- `test_commands.py` — runs every registered command once with sample data\n- `test_features.py` — discovers `test_*` functions from VisiData's imported modules (e.g., `test_slide_keycol_1` in `features/slide.py`)\n- `test_cliptext.py`, `test_date.py`, etc. — unit tests for specific functions\n\n**The `feature.py:def test_feature(vd)` pattern:** Any VisiData module can define `test_*` functions that take `vd` as a parameter. These are auto-discovered and run by pytest. Useful for testing features alongside their implementation (see `features/slide.py` for an example using `vd.runvdx()`).\n\n## Test Style\n\nWhen a test is a series of one-liner asserts (like testing a pure function with many input/output pairs), combine them into a single test function. Add a short comment at the end of each line if the reason isn't obvious from the assertion itself. Don't create separate test functions for each case.\n\n## Bug Fix Testing\n\nAlways write tests FIRST, verify they FAIL on the current code, then fix the code and verify the tests pass. Use the appropriate test type:\n\n- **Unit tests** (pytest) for pure functions like `wraptext()`, `clipstr()`, `iterchunks()` — add to existing test files in `visidata/tests/`\n- **Golden tests** for behavior that requires the full VisiData UI/session — create a `.vdx` test in `tests/`\n\nFor golden tests: create a `.vdx` file, generate golden output, and verify with `dev/test.sh`.\n\n# Sample Data\n\n- `sample_data/benchmark.csv`:  small CSV (51 rows, 7 columns: Date, Customer, SKU, Item, Quantity, Unit, Paid)\n- Various other formats in `sample_data/`\n- Every new loader should provide its test data of `sample_data/benchmark.filetype` in its own format (if applicable), with columns properly typed.\n\n# vdsql Tests\n\nvdsql has its own test suite in `visidata/apps/vdsql/tests/`, run via `visidata/apps/vdsql/test.sh`. These are golden tests using the same pattern (replay `.vdj` files, compare output against `tests/golden/`). CI runs them separately via `.github/workflows/vdsql.yml`.\n\n```bash\ncd visidata/apps/vdsql && bash test.sh           # run all vdsql tests\ncd visidata/apps/vdsql && bash test.sh unselect   # run a single test\n```\n\n# Test Configuration\n\n- `tests/testenv.sh` — common environment variables sourced by all test scripts\n- `tests/.visidatarc` — test-specific options (loaded via `$VD`)\n- `tests/.visidata/` — test-specific visidata directory (loaded via `$VD`)\n"
  },
  {
    "path": "dev/build-container",
    "content": "#!/usr/bin/env sh\n\nset -u\n\ncd \"$(git rev-parse --show-toplevel)\" # begin in project root\ndocker build -f Dockerfile.alpine -t visidata .\ndocker build -f Dockerfile.darkdraw.alpine -t darkdraw .\n"
  },
  {
    "path": "dev/checklists/add-aggregator.md",
    "content": "- API for adding aggregators can be found [here](https://www.visidata.org/docs/api/columns.html#aggregators). A description is necessary.\n- [ ] Review whether new aggregator should be included in **DescribeSheet**. If so, add it to `describe_aggrs`.\n- [ ] Check if aggregator replaces an existing **DescribeSheet** column, remove it from the **DescribeSheet**, if so.\n- [ ] add the aggregator to visidata:docs/group.md\n"
  },
  {
    "path": "dev/checklists/add-command.md",
    "content": "# Command checklist\n\n## Writing the command\n1) choose where the command will go (module? visidatarc?);\n    - most commands should be in thematically-related files\n    - imports, then global/Sheet bindings, then helpers, then Sheets, then Sheet-specific bindings\n2) choose the appropriate scope for the command;\n    - is the command a `globalCommand` (does not require a specific sheet)\n    - is the command a  BaseSheet command (for commands that require a sheet but not a tabular sheet)\n    - is the command a `Sheet` command (for commands that require rows/columns)\n    - or is sheet-specific (only supposed to exist on a particular sheet)\n    - note [the relevant syntax](https://github.com/saulpw/visidata/blob/develop/dev/design/169-settings.md#ii-commandskeybindings)\n3) at minimum, each command requires a [longname]() and [execstr](); if a command modifies and is in base VisiData, it also requires an [undo]() \n4) optional: choose a default keybinding (see the [available keystrokes](https://visidata.org/kblayout)).\n    - [design schema of keystrokes]() (e.g. why we decide to map a command to Ctrl, Shift, g, z, etc)\n\n## Documenting the command (to be done once the command is shippable)\n5) add command to [visidata/commands.tsv](https://raw.githubusercontent.com/saulpw/visidata/develop/visidata/commands.tsv);\n    - `sheet`: the SheetType the command is bound to\n    - `longname`: the [longname]() for the command\n    - if the command is bound to a keystroke\n        - `prefix`: the prefix for the command, if it has one\n        - `key`: the core key that composes the command\n        - `keystrokes`: `prefix` + `key`\n    - `jump`: does the command result in a sheet being pushed to the top of the stack?\n    - `selection`: does the command reference selected rows or affect the selection of a row?\n    - `modifies`: if visidata prompts if a user tries to quit a modified sheet, should this command trigger that prompt?\n    - `logged`: should this command be logged in the cmdlog?\n    - `video`: is this command covered in the [vd case studies]()\n    - `menupath`: the original form of the longnames; when they were used as a pathway through the vd menu\n    - `helpstr` a documentation of what the command does; should mirror what is contained in the manpage\n    - sort by `longname` with `[` and then sort `sheet` with `]`\n6) if the command has been bound to a key, add it to the [man page](https://github.com/saulpw/visidata/blob/develop/visidata/man/vd.inc);\n    - render the manpage to ensure that its beauty is intact\n7) include command longname and keybinding in commit headline.\n    - add to CHANGELOG before release\n8) quality check that there are no errors in commands sheet (z^H)\n\n"
  },
  {
    "path": "dev/checklists/feature.md",
    "content": "\n# Feature Checklist\n\n- [ ] user docs in docs/\n- [ ] API docs in docs/api/\n- [ ] release notes (in changelog until release)\n- [ ] add to labeled screenshot (if feature visible in main UI)\n- [ ] screenshot image and/or animated gif (if feature visible in UI)\n- [ ] passing pytest (all test_ functions in the module/feature)\n\n## Marketing\n\n- [ ] video demo\n- [ ] blog post\n- [ ] mastodon post\n\n# Loader sample data\n\n- [ ] small amount of sample data in `sample_data`, including (when supported by the format/loader):\n  - [ ] compression\n  - [ ] null value  (\"N/A\" or \"\" or None)\n  - [ ] error value (\"#ERR\")\n  - [ ] int type\n  - [ ] float type\n  - [ ] date type\n  - [ ] nested data\n    - [ ] list of homogeneous values\n    - [ ] dict (subrecord)\n  - [ ] multiple sheets\n  - [ ] non-ascii characters\n\n\n- [ ] extra data for special features (e.g. .zip encryption)\n\n# Loader registration\n\n- [ ] add format entry to `dev/formats.jsonl`\n\n"
  },
  {
    "path": "dev/checklists/manual-tests.md",
    "content": "# Functionality to test manual\n1. cmdlog + replay\n    - logging of options\n    - logging of rows and columns\n    - if empty sheet, row or column on cmdlog, executes command on current sheet, row, column\n    - abort\n    - test batch mode\n        - bin/vd -b -p tests/append.vd\n        - bin/vd -p tests/append.vd -b\n2. piping data into visidata\n4. longname-exec\n5. syscopy\n6. plots and image-loaders (like png)\n    - relationship between plots and mice\n8. .visidatarc\n    - numerical, boolean and string option\n    - sheet-specific and global\n    - motd_url\n10. large dataset (311)\n12. Options\n    - local + global options should be set appropriately\n        - bin/vd -f tsv sample_data/sample.tsv -f csv sample_data/benchmark.csv\n        - bin/vd sample_data/y77d-th95.json.gz -f txt\n    - the order in which options should be applied is\n        - native_options -> cli_options for config/visidata_dir/imports -> plugin_imports -> visidatarc -> rest_of_cli\n        - check that cli overwrites visidatarc\n        - check that --config selects which visidatarc to load\n        - check that visidatarc can set plugin options\n    - -w and others should be set \"globally\" (work without -g option)\n    - bin/vd -f xlsx sample_data/sample-sales-reps.xlsx -f json sample_data/y77d-th95.json.gz\n        - the xlsx sheet should have filetype 'xlsx'\n    - bin/vd sample_data/sample-sales-reps.xlsx -n -f xlsx\n        - `o` another file\n        - check that it loads\n        - check that it does not show 'xlsx' on its sheet-specific options\n13. Filetype\n    - visidata should be able to detect filetype from extension\n        - bin/vd sample_data/benchmark.csv\n    - -f should apply to inner file for zipped filetypes\n        - bin/vd -f txt sample_data/y77d-th95.json.gz\n14. Testing the starting position syntax\n    - `bin/vd +:sample-salesv4:2:3 sample_data/sample-sales-reps.xlsx`\n15. Test loading url\n16. Split window\n    - make sure that if you exit split window, all the sheets from both panes can be accessible on the resulting stack\n    - test 1\n        - open 2 files\n        - Z\n        - first window should be active\n        - Tab between\n        - close top one, then redo and test closing bottom one\n    - test 2\n        - open 2 files\n        - Z\n        - open columns sheet in one\n        - Z\n        - inspect sheet stack\n            - columns sheet should remain where it is, and the source sheet below gets moved to the top of the other window\n        - redo with opening the columns sheet on the other\n            - bug\n                - when Shift+Z is done on bottom pane, its second sheet becomes the second sheet of the top stack, instead of the first sheet of the top stack\n        - test 3\n            - Shift+Z with only one file\n            - Shift+Z with two panes, each pane's stack only has one file\n    - gZ\n        - test both panes\n        - move around, should be no flickering\n        - press Z again\n        - test both panes\n    - zZ\n        - should change window size, without changing anything else\n        - test for both panes\n        - test negative and positive\n            - bug?\n                - negative switches the windows they belong to\n    - gTab\n        - should window swap\n        - test both panes\n            - bug?\n                - if the second window is a smaller size, should it orient around the cursor position\n    - using cursor in active pane\n        - test both panes\n17. Anything new in this release (should it have its own automated test?)\n18. `edit-cell` and then `Ctrl+O` to launch editor.\n19. Save to a non-existent format.\n    - Saves to save-filetype by default\n    - If save-filetype is a non-existent format, blocks\n    - test overwrite=y,n,c\n20. Save multiple sheets to a single non-embeddable format\n    - save name makes sense\n    - fails if not offered a directory\n    - succeeds if offered a directory\n21. Test macro-record.\n22. Test `open-row` on an html link: https://hls.gsfc.nasa.gov/data/\n23. That DirSheet requires a commit-sheet before changes on filesystem\n24. Test adding multiple aggregators via palette (+)\n25. time vd -p tests/quit-nosave.vdj  - note down the time. compare to PR #2369\n26. Use the z; command. Then type in a command line like echo \"| Ceci n'est pas une pipe\"\n27. vd -b -i -p tests/fill.vdj sample_data/a.tsv\nCheck that both benchmark and a.tsv are edittable.\n\n## Cursor/Scrolling\n28. scroll all the way down with j\n29. pgdn from 1, stay at top, exactly one page forward\n30. 3xj, pgdn from there, relative cursor position stays\n31. ZZ\n"
  },
  {
    "path": "dev/checklists/release.md",
    "content": "# Release process for the next `stable` version\n\n1. Merge `stable` to `develop` (if necessary)\n\n2. Verify that documentation/docstrings are up-to-date on features and functionality\n\n    a. CHANGELOG;\n\n     git log --pretty=format:\"%s :%ae\" $(git tag | tail -1)..HEAD\n\n    b. manpage;\n\n    c. visidata.org; (formats?)\n        - remember to check the tables with prettier: https://github.com/saulpw/visidata/pull/2056\n\n3. Ensure `develop` automated tests run correctly with dev/test.sh\n\n4. Go through the manual tests checklist\n\n5. Verify that setup.py is up-to-date with requirements.\n\n    a. Review current dependency versions and if a new version of Python has been released.\n\n    b. Update any new plugins or extras in setup.py\n\n5. Set version number to next most reasonable number (v#.#.#)\n\n   a. add to front of CHANGELOG, along with the release date and bullet points of major changes;\n\n   b. update the date in the manpage;\n\n   c. update version number on README\n\n   d. bump version in `__version__` in source code (visidata/main.py, visidata/__init__.py) and setup.py;\n\n6. Run dev/mkman.sh to build the manpage and updated website\n    - Run ./mkmanhtml.sh, and move that to visidata.org:site/docs/man, and to visidata:docs/man.md\n\n7. Merge `develop` to stable\n\n14. motd\n    a. Upload new motd for new version.\n    b. Test that VisiData downloads motd.\n\n\n8. Merge `stable` back into other branches\n\n    a. if the branch works with minimal conflicts, keep the branch\n\n    b. otherwise, clean out the branch\n\n\n9. Push code to stable\n\n10. Push `stable` to pypi\n\n    a. set up a ~/.pypirc\n\n    ```\n    [distutils]\n    index-servers=\n        pypi\n        testpypi\n    [pypi]\n    repository:https://upload.pypi.org/legacy/\n    username:\n    password:\n\n    [testpypi]\n    repository: https://test.pypi.org/legacy\n    username:\n    password:\n    ```\n\n\n  Push to pypi\n    ```\n    rm -rf dist/\n    rm -rf build/\n    python3 setup.py sdist bdist_wheel\n    chmod -R a+rX dist\n    ls dist/\n    twine upload dist/*\n    ```\n\n11. Test install/upgrade from pypi\n\n  a. Build and deploy the website\n\n   b. Ask someone else to test install\n\n12. Create a tag `v#.#.#` for that commit\n\n```\ngit tag v#.#.#\ngit push --tags\n```\n\n13. Write up the release notes and add it to `www/releases.md`. Add it to index.md.\n\n\n15. Update the website by pushing to master. Update with new manpage. Update redirect to point to new manpage.\n    - release notes\n\n16. Comb through issues and close the ones that have been solved, referencing the version number\n\n17. Post github release notes on patreon.\n\n18. Update the other distributions.\n\n# conda\n\nRegistry: https://github.com/conda-forge/visidata-feedstock/\n\n1. Fork https://github.com/conda-forge/visidata-feedstock. Open the recipe/meta.yaml.\n\n2. Update the VisiData version and sha256.\n\n3. Make any necessary removals, additions or modifications to the dependencies -> note that a dependency must be part of conda.\n\n4. Make a PR.\n\n5. Comment `@conda-forge-admin, please rerender` in the PR.\n\n6. Merge the PR, when everything is green.\n\n\n# Homebrew\n\nRegistry: https://github.com/saulpw/homebrew-vd\n\n1. Open the Formula/visidata.rb file. Update the link in url to the new visidata tar.gz file.\n2. Update the sha256 and version in visidata.rb. Update the version in README.md.\n3. For major version ships, check each dependency and see if it has been updated. If so, update the url and sha256 for the newest version.\n4. On a mac, test the formula with `brew install --build-from-source visidata`. Fix as needed.\n5. Audit the formula with `brew audit --new-formula visidata`\n6. Add and commit the formula.\n\n## Debian\n1. Download the visidata tar.gz file from pypi\n2. tar -xzmf visidata.tar.gz\n3. cp visidata.ver.tar.gz visidata_ver.orig.tar.gz\n4. cd visidata-ver/\n5. Place there the contents of the debian directory from git@salsa.debian.org:anjakefala/visidata.git\n6. Update changelog\n```\ndch -v new_version\n```\n\nwhere new_version = \"$version\"-1\n\nEdit as necessary. I usually set stability to unstable, and urgency to low, and add a small changelog.\n7. Run debuild. Fix errors as they come up.\n8. If a package fails to import a module, it must be added to the build dependencies as python3-modules\n9. cd ..\n10. If unsigned by debuild, sign the changes files\n```\ndebsign -k keycode visidata_ver.changes\n```\n\nanjakefala has the key and password.\n11. Upload to debian mentors and contact the mentor, [Martin](https://qa.debian.org/developer.php?email=debacle%40debian.org).\n```\ndput mentors visidata_ver.changes\n```\n\n12. Copy the fresh contents of the debian folder back into visidata/dev/debian and in debian-visidata (https://salsa.debian.org/anjakefala/visidata).\n\n## deb-vd\nPrivate registry: https://github.com/saulpw/deb-vd\n1. Enter saulpw/deb-vd.\n2. Run the command reprepro includedeb sid new-vd.deb\n3. Update the README.md with the new version, commit *all* the changes and push to master.\n"
  },
  {
    "path": "dev/debian/changelog",
    "content": "visidata (2.8-1) unstable; urgency=low\n\n  * Update package to 2.8\n\n -- Anja Boskovic <anja.kefala@gmail.com>  Wed, 15 Dec 2021 23:18:55 -0500\n\nvisidata (2.6.1-1) unstable; urgency=low\n\n  * Update package to 2.6.1\n\n -- Anja Boskovic <anja.kefala@gmail.com>  Tue, 28 Sep 2021 23:20:47 -0700\n\nvisidata (2.4-1) unstable; urgency=low\n\n  * Update package to 2.4\n\n -- Anja Boskovic <anja.kefala@gmail.com>  Mon, 12 Apr 2021 20:49:47 -0700\n\nvisidata (2.3-1) unstable; urgency=low\n\n  * Update package to 2.3\n\n -- Anja Boskovic <anja.kefala@gmail.com>  Sun, 04 Apr 2021 18:08:17 -0700\n\nvisidata (2.2.1-1) unstable; urgency=low\n\n  * Update package to 2.2.1\n\n -- Anja Boskovic <anja.kefala@gmail.com>  Sun, 07 Feb 2021 22:19:38 -0800\n\nvisidata (2.2-1) unstable; urgency=low\n\n  * Update package to 2.2\n\n -- Anja Boskovic <anja.kefala@gmail.com>  Mon, 01 Feb 2021 20:40:12 -0800\n\nvisidata (1.5.2-1) unstable; urgency=low\n\n  * Update package to 1.5.2\n\n -- Anja Boskovic <anja.kefala@gmail.com>  Sun, 13 Jan 2019 17:11:18 -0500\n\nvisidata (1.2.1-1) unstable; urgency=low\n\n  * Update package to 1.2.1-1. Closes: # 904656\n\n -- Anja Boskovic <anja.kefala@gmail.com>  Sun, 05 Aug 2018 13:16:52 -0400\n\nvisidata (1.1-1) unstable; urgency=low\n\n  * Update package to 1.1-0\n\n -- Anja Boskovic <anja.kefala@gmail.com>  Sat, 10 Mar 2018 21:17:06 -0500\n\nvisidata (1.0-1) unstable; urgency=low\n\n  [Anja Boskovic]\n  * Initial release. Closes: #884565\n\n -- Anja Boskovic <anja.kefala@gmail.com>  Sat, 17 Feb 2018 20:11:37 -0500\n"
  },
  {
    "path": "dev/debian/control",
    "content": "Source: visidata\nSection: devel\nPriority: optional\nMaintainer: Anja Boskovic <anja.kefala@gmail.com>\nBuild-Depends: debhelper-compat (=13), dh-python, python3-all, python3-setuptools, python3-xlrd, python3-openpyxl, python3-dateutil, python3-requests, python3-pytest\nStandards-Version: 4.5.1\nVcs-Git: https://salsa.debian.org/anjakefala/visidata.git\nVcs-Browser: https://salsa.debian.org/anjakefala/visidata\nHomepage: https://visidata.org\nRules-Requires-Root: no\n\nPackage: visidata\nArchitecture: all\nMulti-Arch: foreign\nDepends: ${misc:Depends}, ${python3:Depends}\nDescription: rapidly explore columnar data in the terminal\n VisiData is a multipurpose terminal utility for exploring, cleaning,\n restructuring and analysing tabular data. Current supported sources are\n TSV, CSV, fixed-width text, JSON, SQLite, HTTP, HTML, .xls, and .xlsx\n (Microsoft Excel).\n"
  },
  {
    "path": "dev/debian/copyright",
    "content": "Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\nUpstream-Name: VisiData\nUpstream-Contact: Saul Pwanson <saul@visidata.org>\nSource: https://github.com/saulpw/visidata\n\nFiles: *\nCopyright: 2017, Saul Pwanson <saul@visidata.org>\nLicense: GPL-3+\n\nFiles: debian/*\nCopyright: 2018, Saul Pwanson <saul@visidata.org>\n           2018, Anja Boskovic <anja.kefala@gmail.com>\nLicense: GPL-3+\n\nLicense: GPL-3+\n On Debian systems, the full text of the GNU General Public\n License version 3 can be found in the file\n '/usr/share/common-licenses/GPL-3'.\n"
  },
  {
    "path": "dev/debian/manpages",
    "content": "visidata/man/vd.1\n"
  },
  {
    "path": "dev/debian/rules",
    "content": "#!/usr/bin/make -f\n\nexport DH_VERBOSE=1\nexport PYBUILD_NAME=visidata\n\n%:\n\tdh $@ --with python3 --buildsystem=pybuild\n"
  },
  {
    "path": "dev/debian/source/format",
    "content": "3.0 (quilt)\n"
  },
  {
    "path": "dev/debian/source/local-options",
    "content": ""
  },
  {
    "path": "dev/debian/upstream/metadata",
    "content": "---\nBug-Database: https://github.com/saulpw/visidata/issues\nBug-Submit: https://github.com/saulpw/visidata/issues/new\nRepository: https://github.com/saulpw/visidata.git\nRepository-Browse: https://github.com/saulpw/visidata\n"
  },
  {
    "path": "dev/debian/watch",
    "content": "version=3\nopts=uversionmangle=s/(rc|a|b|c)/~$1/ \\\nhttps://pypi.debian.net/visidata/visidata-(.+)\\.(?:zip|tgz|tbz|txz|(?:tar\\.(?:gz|bz2|xz)))\n"
  },
  {
    "path": "dev/design/000-notes.md",
    "content": "# initial design notes [2016-10-24]\n\na. one sheet per screen; no panes\nb. rapidly switch between two sheets out of dozens\nc. easily reorder single rows; easily send a row to top or bottom\nd. heading in a vi direction where applicable (movement)\ne. multi-key/compound commands (zt zz zb)?  not yet\n\nf. sheet selector can combine sheets (mark sheets to consolidate, then Combine)\n     - `Enter` replaces sheet selection sheet with the sheet at the current row\ng. can append rows on all marked sheets to the first marked sheet, by row/column\nh. can append sheets by column, joined on the current primary column sort key on each sheet.  tries by column name if no keys\n         - possibly maintains one extra index per sheet, by the primary sort key.\n         - need to be able to specify inner/outer/cross/diff (intersect, first, union, difference)\ni. progress bar is mandatory.  incremental/asynchronous update would be killer.  [2018: it is]\n\nj. header on top row at all times\nk. global prefix `g`, indicating that the next command should be applied globally\n     - `g/` searches all columns, not just the current\nl. random sample\nm. slice/split\nn. stats page:  Show basic types and statistics of each column (mean, standard deviation, median, range, #empty)\n\n## links\n   - https://cran.r-project.org/web/packages/dplyr/index.html\n   - https://github.com/OpenRefine/OpenRefine/wiki/User-Guide\n   - [BurntSushi/xsv]\n\n# PLAN [2016-10-25]\n\nideally works with stock Python3, but willing to negotiate numpy if used for interop with adapters.\nProbably no other external modules.\n\n1) basic python3 curses display of .csv input \n   a) with cursor movement, search, and pagination\n   b) row/column hiding/reordering\n   c) multiple sheets, sheet list with sheet stats to manage (and join for 1e/f)\n   d) S.columns metasheet, with column stats;\n   e) filter/search by regex in column\n   f) 'g'lobal prefix\n\n   g) row append all marked sheets into first marked sheet by column name\n   h) column append by row key (join: inner/outer/cross/diff)\n   i) mark/hide/delete rows (bulk ops)\n   j) new column from expression with r.other_column\n   k) aggregation (group by current column)\n   l) manually edit cell (log to editlog)\n   m) bulk transform (diffs to editlog)\n\n2) inputs\n   a) 30GB .csv (background build index and cache on fs): foundation for offline data\n   b) bigquery (asynchronous updates): foundation for latency\n   c) json (hashes)\n   d) sqlalchemy\n   e) hdf5\n\n3) transforms\n   a) allow numpy/pandas functions for 1h/1i\n\n4) output (save to file: full, marked/visible, screen)\n   a) .csv\n   b) sql (including sheet queries)\n   c) hdf5\n\n5) other sheets/features\n   a) F builds frequency table for current column (and also F from 1c)\n   b) dir/.zip file list (<enter> loads file)\n\n6) documentation\n   a) howto add new input\n   b) howto add new commands\n\n# README [2016-10-26]\n\nVisiData (vd) is a curses spreadsheet that can be sourced from .csv, sql, json, hdf5 (and others with Python3 adapter).\n\nThese become sheets/tables which can be browsed/joined/filtered/sorted with only a few keystrokes.\nDerived columns can be added, and cells can expand into other sheets.\nThe resulting sheet(s) can be saved to any of the above formats also.\n\nDesigned to be able to process 10GB+ data files efficiently, and eventually sourcing from cloud data.\n\nCustom sheets can be written that:\n   - preprocess the data\n   - colorize rows\n   - add actions (global, column, row with cell as parameter)\n   - add computed columns\n\ne.g. a simple 'stats' derivative sheet that provides median/mean/stddev/etc for each column\n\nThe best of xsv, sc, vim, in a single sub-2000-line Python3 script, and extensible.\n\nGreat for immediate exploration of datasets to find out what is relevant and what isn't.\n"
  },
  {
    "path": "dev/design/160-longnames.md",
    "content": "# Command longname design and checklist\n\n1) two words max if possible, should be short and fit on a keymap (verb - object - input)\n\n2) command classes should be unique in their first 3 chars and ideally mostly in their first 2.\n\n3) command longnames should be intuitively understandable, or at least not jargony\n\n4) longnames should evoke interface, when possible\n\ndefinitions:\n- syscopy: copy to system clipboard\n- sysopen: open with $EDITOR or other external program.  'launch'?\n- cells: this column, selected rows (or all rows if none selected)\n- expr: python expression\n- regex: python regex\n- all: all sheets or all visible columns\n- col: cursorCol (will be marked in sheet)\n- cols: all visible columns\n- subst: regex A/B\n- capture: regex match A(B) yielding capture groups\n- dup: push copy of sheet\n- searchr: search reverse\n- go: move the cursor\n- scroll: change the visible screen area without changing the cursor\n- select: all or selected\n- fill: (from fill null cells)\n- dive: conceptual -> go deeper\n- slide: move row/column\n- show: displays on status\n- cancel-: kill thread/async process\n- setcol: set selected cells in this column\n- addcol: add new column to this sheet\n- search: on default with regex\n- aggregate: set an aggregator\n- delete: cuts and moves to clipboard\n\n## notes \n\n- swap-sheet -> was an alt for ^^ but is not technically accurate if we expand the design to allow `3^^` to push the 3rd sheet to the stack; in order to future-proof sticking with prev-sheet or go-sheet\n- n/N have prev- as a prefix instead of search bc search- takes an input\n\n- syscopy should not be logged.\n- copy needs to be logged, as the copied rows/values can be pasted\n\n## Todo\n\n- commands2md.py catalog of all commands by longname with default keybinding\n  - include helpstr\n- document how to remap a keybinding by longname\n- write tool to test coverage/cohesion of keybindings/longnames/commands.tsv\n- Checklist for new and updated commands\n- publish list of definitions\n- publish keyboard layouts with new longnames (make 3-word longnames fit)\n   - clickable keys to go to specific doc section\n- change options.cmdlog_longname default to True\n- write up our rules and glossary and include them in our www\n\n\n\n"
  },
  {
    "path": "dev/design/169-settings.md",
    "content": "# 169-settings: Commands, Keybindings, and Options\n\n## I. Layers of settings\n\n- a. Settings are named globally uniquely.\n- b. .visidatarc `options.foo = 42` overrides global default\n- c. `.visidatarc` can override options explicitly for any layer by naming the associated 'object'.\n- d. command-line option `--foo 42` overrides .visidatarc global at 'override' layer.\n- e. User input (OptionsSheet) overrides currently at the 'override' layer.\n- f. These layers may apply to any of these settings.  This is the resolution order (the first applicable layer is used):\n\n   0. user sheet-specific override (with `Shift+O` in 1.3)\n   1. current sheet instance\n   2. current sheet type\n   3. current sheet parent types\n   4. in session via meta-sheet (with `g Shift+O`)\n   5. command line (options only, applied on top of the overrides in .visidatarc)\n   6. .visidatarc  (associated object is string 'override')\n   7. global defaults  (associated object is string 'default')\n\n\n## II. Commands/Keybindings\n\n- a. `globalCommand(default_keybinding, longname, execstr)` adds a 'global' command that would be available if there were no sheets at all (Id7)\n- b. `bindkey(keystrokes, longname)` creates global default keybinding (used when nothing else overrides it)\n- c. `<Sheet>.addCommand()` (which has identical interface to a) sets the command on the sheet type (Id5) if <Sheet> is a SheetType, or on the sheet instance (Id4) if <Sheet> is an instance.\n- d. `<Sheet>.bindkey()` does the same as (c) but for keybindings.\n- e. `g Shift+D` to get to macros sheet to edit macro keybindings.\n- f. `g Ctrl+H` can add/edit keybindings for all commands on all sheets (Id1, not impl yet)\n- g. `z Ctrl+H` for list of sheet-specific commands (not global or on Sheet)\n- h. Commands are identified by longname, and have a default keybinding.  Use None for no default.\n- i. Command lists can be gotten by:\n    - `commands`: dict of [Sheet] -> dict of [longname] -> Command for all commands for all sheets\n    - `SheetType.commands` or `vs.commands`: dict of [longname] -> Command for all accessible commands on this sheet\n    - `bindings` or `SheetType.bindings`, similarly\n- j. `commands.show_version` or `commands[`show_version`] returns the Command in resolution order.  `bindings['^V']` returns the bound longname.\n\n## III. Options\n\n- a. `g Shift+O` (options-all) goes to sheet of all options at all layers for all sheet types (Id1)\n- b. `Shift+O` (options-sheet) goes to sheet of all options for the current sheet\n    - set 'value' to have it apply to only the current sheet\n    - set 'default' to have it apply to all sheets of this type\n- c. `z Shift+O` (options-specific) goes to sheet of options that are particular to this sheet (not global or on Sheet)\n- d. `option(optname, default, helpstr)` adds a global option\n- e. Option settings are rejected if they cannot be converted to the type of the default value.  None allows anytype.\n- f. cmdlog sets options with command=`option`, input='value', row='my_option'\n    - as though user had set it in Id1\n    - global option values: sheet=empty\n    - per-sheet-type option values: sheet=sheettype\n    - per-sheet option values: sheet=sheetname\n- g. Options can be set programmatically in .visidatarc or otherwise:\n   - `<Sheet>.options.my_option = \"value\"` (same rules as IIc)\n   - `options.my_option = \"global default\"`\n   - `Canvas.options.my_option = 42`\n- h. Options can be fetched in resolution order via either `options.my_option` or `options['my_option']`.\n- i. Lists of options can be gotten from `Sheet.options.values()` or `options.values()`\n"
  },
  {
    "path": "dev/design/173-benchmark.md",
    "content": "# Benchmark\n\nUsing an interactive tool or the commandline (no scripts):\n\n1. load/parse the dataset\n2. clean various issues with the dataset\n   - remove all X\n   - simple subst of all foo to bar (in this column only--foo is in other columns too)\n3. summarize\n   - group by year (partial date)\n   - sum on float col\n   - sort result numerically\n   - filter out results with count < 3\n4. save as tsv\n   - remove all but the 3 columns wanted\n\nSQL can do most of this if the data is in a database first.\n\n## Use this valid jsonl dataset\n\n- utf8, a mix of 1x, 1.5x, 2x, and ambiguous width characters\n- jsonl\n- some rows missing some fields\n- first row not having all the fields\n- some cells null\n- an overlong cell\n- embedded spaces, newlines, tabs, nulls, other control characters\n"
  },
  {
    "path": "dev/design/174-keycols.md",
    "content": "# Key Columns\n\n- key columns must be visible\n- hiding a key column also makes it a non-key column\n- with \"keycol\" is a property on the column instead of maintained as a list of keyCols on the sheet, then when a sheet is copied, the keys will be automatically keys unless explicitly disabled on each key column.\n- the set of key columns is maintained by the sheet\n- But as a list of Sheet.keyCols, the sub-sheet can .clear() the list.\n- on the ColumnsSheet, key \"rows\" (source columns) should be colored the same as key columns.\n"
  },
  {
    "path": "dev/design/175-design-terms.md",
    "content": "# Types of design statements\n\n1) there are how it already is, which are by design and implemented correctly ('is', 'are')\n2) there are the aspirational bits, which are not quite implemented correctly but if an elegant solution were found to do so it would be almost definitely be included ('would ideally')\n3) there are the future grand visions, which may not be implemented at all but we need to take into consideration when implementing ('someday', 'eventually')\n4) there are the ways that it is, which are accepted for now but are not intentionally by design and may be known as imperfect ('for the time being', 'currently')\n5) there are the 'happy accidents', which are nice pleasantnesses but not foundational, they can be dropped if they conflict with some other stronger principle ('as a bonus')\n"
  },
  {
    "path": "dev/design/176-miscrules.md",
    "content": "# Miscellaneous rules discovered during implementation\n\n- Don't put an @asynccache on calcValue, unless you know the rowdef to be simple.  asynccache will expand the entire row every time it is called, which can be more expensive than the actual calcValue.\n\n"
  },
  {
    "path": "dev/design/181-benchmark-data.md",
    "content": "# Benchmark Dataset\n\n- a coherent, grounded, interesting dataset--probably fictional/manufactured\n   - multi-culti/topical; maybe call it \"benchmark-2018\" and imply future releases\n   - with some insights and/or mystery to be solved\n   - time/effort required to answer some associated questions are the actual benchmark\n\n- 50-100 rows\n- 10-20 columns\n   - column with mixed currency\n   - lat/long floats\n   - nested objects (lists/dicts)\n   - unicode names (including east asian half, full, ambiguous widths)\n   - date\n      - birthdate?\n      - some clearly bogus (future/1970/1969/1900) entries\n      - weekend pattern\n- many types of common errors that can be cleaned\n   - like 100 mini-puzzles in one dataset\n   - can require deduction about data generally (27/5/84 is reasonable as D/M/YY date)\n   - but not anything that requires domain knowledge ()\n   - no implication about the central plot or mystery should be in the mistakes\n      - an easter egg though could be a pattern of typos by the same enterer mentioned by name in the same dataset\n\n- metadata above header row\n\ncolumns that require transformation:\n   - combined columns (name+address)\n   - too-wide (needs to be melted)\n\nwith cells that have errors/issues:\n   - embedded NULs, spaces, tabs, newlines, other control chars, all manner of unicode spaces and ZWJ\n   - float in int column\n   - \"header\" cells with unfilled cells below\n   - categorical typos\n   - null/None\n   - absent value\n   - a much too long cell \n\n- (do not just make up any actual numbers; think about where those numbers come from and derive them from other, more basic numbers, instead)\n"
  },
  {
    "path": "dev/design/232-input.md",
    "content": "# getting input from the user\n\n    VisiData.input(prompt, type='', defaultLast=False, **editargs) -> str:\n      - get a line of input from the user on the status line\n      - history stored and managed by 'type' if given\n      - defaults to last history item if no input and defaultLast is True\n\n\n    VisiData.confirm(prompt, exc=ExpectedException) -> bool or raise:\n      - if input is not 'y', raise esc (or returns False if exc=None)\n      - input not recorded on cmdlog\n\n    VisiData.choose(L:Sequence, n=None) -> element or list:\n      - input choices separated by spaces.  may have a better interface eventually.\n\n    Sheet.editCell(vcolidx, rowidx, **editargs) -> str:\n      - edit a cell value in-place on the screen\n      - return value converted to column type\n\n# editargs\n\n## `completer`\n\nThe `completer` editarg can be a callable `func(value:str, state:int) -> str:` which takes the current value up to the cursor, and a numeric \"state\" which basically indicates the number of times the user has pressed `Tab` from this exact position (possibly negative with Shift-Tab).  It returns the potential completion value for that state.\n\n## `history`\n\ncan be either a list of strings (previous inputs) or a string indicating type\n"
  },
  {
    "path": "dev/design/260-push.md",
    "content": "- first push causes reload (self.rows is initially the UNLOADED sentinel)\n- reload is usually async\n- reload assigns a new object to .rows\n- if you assign .rows after push, the reload thread may come by after and re-set it\n- and maybe other members are reset by reload too\n- so don't assign any members after reload (and thus push)\n- api fix: vd.push no longer returns the sheet\n- if you want it reloaded every push, call .reload() before the push\n\n"
  },
  {
    "path": "dev/design/README.md",
    "content": "# Design Docs\n\nArchitecture and feature design documents for VisiData. See also [175-design-terms.md](175-design-terms.md) for the vocabulary used in these docs.\n\n| File | Topic | Status | Description |\n|------|-------|--------|-------------|\n| `000-notes.md` | Founding vision | Implemented | Original plan (Oct 2016): sheet model, vi navigation, join design, loaders, outputs |\n| `160-longnames.md` | Command naming | Implemented | Naming conventions for command longnames (syscopy, dive, slide, etc.) |\n| `169-settings.md` | Settings architecture | Implemented | 7-layer option resolution order, command/keybinding API, options API |\n| `173-benchmark.md` | Benchmark use cases | Future | 4 benchmark tasks for measuring VisiData performance |\n| `174-keycols.md` | Key column rules | Implemented | 8 rules governing key column behavior |\n| `175-design-terms.md` | Design vocabulary | Reference | Types of design statements: \"is\", \"ideally\", \"someday\", \"currently\", \"bonus\" |\n| `176-miscrules.md` | Implementation gotchas | Reference | Rules about asynccache/calcValue behavior |\n| `181-benchmark-data.md` | Benchmark dataset | Future | Spec for fictional benchmark dataset with unicode, errors, control chars, \"100 mini-puzzles\" |\n| `200-splitpane.md` | Split pane | Implemented (v3) | Design and post-mortem: original use cases vs actual implementation |\n| `232-input.md` | User input API | Implemented | VisiData.input(), confirm(), choose(), editCell(), completer/history |\n| `260-push.md` | Push/reload behavior | Implemented | Gotcha: don't assign members after push (reload may overwrite) |\n| `path.md` | visidata.Path | Implemented | Path wrapper API, comparison with pathlib.Path |\n"
  },
  {
    "path": "dev/design/path.md",
    "content": "# visidata.Path\n\n- contains pathlib.Path as `._path` member\n   -  `__getattr__` forwards to `.path` so interfaces are very similar\n   - therefore .suffix same as pathlib.Path.suffix\n\nAdditions to pathlib.Path:\n\n- .ext: file extension without leading '.' and without compression ext\n- .compression: compression extension\n- .given: the path as given (previously `fqpn` in vd 1.x)\n- .open_text() (default mode = 'rt')\n   - encoding/encoding_errors passed automatically from options\n   - special-case if given file is '-' (stdin/stdout)\n- .open_bytes() (pathlib.Path has read_bytes() but not open_bytes())\n    - adds 'b' to the mode before passing to _open()\n- vd.Path.__iter__()\n    - incorporates Progress() tracking into file reading\n- `.base_stem`: filename *without* any extensions\n\nDifferences from pathlib.Path:\n- visidata.Path.iterdir returns a list and pathlib.Path.iterdir returns a generator\n- `visidata.Path._open()`\n    - handles uncompressing before passing to pathlib.Path.open()\n\nTODO:\n- change DirSheet owner/group to Path.owner()/group()\n- move __iter__ off visidata.Path into global function\n\n---\n\n## Comparison with pathlib.Path (Nov 2019)\n\n### Identical in both pathlib.Path and visidata.Path\n - read_text\n - is_dir\n - parts\n - parent\n - exists\n - with_name\n - joinpath\n\n### Very similar (minor semantic differences)\n - `__lt__`: ours goes based off of the fn alone, theirs uses cparts\n - `name`/`fn`: in vd.Path, fn is the filename while `name` is minus the ext; in pathlib.Path `name` is the filename (incl ext), `stem` is minus the ext\n - `ext`/`compression`/`suffix`: vd.Path has ext (all extensions), compression (just compression ext), suffix (ext - compression); pathlib.Path has suffixes (list of extensions)\n - `suffix`: in pathlib.Path this is the file extension of the final component (.gz, .tsv, etc); in vd.Path we distinguish compression (.gz, etc) from suffix (.html, .tsv, etc)\n - `iterdir`: vd.Path.iterdir returns a list; pathlib.Path.iterdir returns a generator\n - `open()`: switch our internal calls to open() to super().open()\n - `os.path.blah(path.resolve())` in our code can be changed to `os.path.blah(path)` — `os` automatically handles Path-like objects in 3.6+\n - `resolve()`: vd.Path.resolve() resolves from path object to string; the equivalent in pathlib.Path would be str(pathlib.Path()); pathlib.Path.resolve() does something completely different\n - `abspath`: wrapper for os.path.abspath; pathlib.Path has resolve() (different from our resolve())\n - `relpath`: wrapper for os.path.relpath; pathlib.Path has relative_to(), which has different semantics\n - `__str__`: vd.Path does not return the abspath (gives back what it originally got); pathlib.Path returns the abspath\n\n### Similar, but our wrapper adds functionality\n - `stat`: performs os.stat for mtime and filesize; pathlib.Path has Path.stat(), Path.owner() and Path.group() — could swap os.stat for super().stat() but keep our wrapper\n - `_open()`: handles uncompressing before passing to pathlib.Path.open()\n"
  },
  {
    "path": "dev/diff-test.sh",
    "content": "#!/bin/bash\n\nfor fn in `git diff --name-only -- *.tsv` ; do\n    if [ \"${fn%-notest.tsv}-notest\" != \"${fn%.tsv}\" ]\n    then\n        git show HEAD^:$fn | bin/vd --diff $fn\n    fi\ndone\n"
  },
  {
    "path": "dev/formats.jsonl",
    "content": "{\"filetype\": \"csv\", \"filetype_url\": \"#csv\", \"aliases\": \"\", \"requirements\": \"\", \"format\": \"Comma-Separated Values\", \"loader\": \"yes\", \"VisiData saver\": \"displayed text\", \"roundtrip\": \"yes\", \"version_added\": \"0.28\", \"created\": \"1972\", \"creator\": \"\", \"description\": \"not recommended for new data\", \"open format\": \"prehistory\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://en.wikipedia.org/wiki/Comma-separated_values\"}\n{\"filetype\": \"json\", \"filetype_url\": \"#json\", \"aliases\": \"\", \"requirements\": \"\", \"format\": \"Javascript Object Notation (JSON)\", \"loader\": \"yes\", \"VisiData saver\": \"typed\", \"roundtrip\": \"yes\", \"version_added\": \"0.28\", \"created\": \"2001\", \"creator\": \"Douglas Crockford\", \"description\": \"widespread\", \"open format\": \"yes\", \"nestable\": \"nestable\", \"plottable\": \"\", \"format_url\": \"http://json.org/\"}\n{\"filetype\": \"tsv\", \"filetype_url\": \"#tsv\", \"aliases\": \"txt\", \"requirements\": \"\", \"format\": \"Tab-Separated Values\", \"loader\": \"yes\", \"VisiData saver\": \"displayed text\", \"roundtrip\": \"yes\", \"version_added\": \"0.28\", \"created\": \"\", \"creator\": \"\", \"description\": \"\", \"open format\": \"prehistory\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"http://jkorpela.fi/TSV.html\"}\n{\"filetype\": \"xlsx\", \"aliases\": \"\", \"requirements\": \"openpyxl\", \"format\": \"Excel spreadsheets\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"0.28\", \"created\": \"1987\", \"creator\": \"Microsoft\", \"description\": \"\", \"open format\": \"no\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://msdn.microsoft.com/en-us/library/office/cc313154(v=office.12).aspx\"}\n{\"filetype\": \"zip\", \"format\": \"ZIP archive format\", \"loader\": \"yes\", \"VisiData saver\": \" \", \"version_added\": \"0.28\", \"created\": \"1989\", \"creator\": \"PKWARE\", \"open format\": \"yes\", \"format_url\": \"https://support.pkware.com/home/pkzip/developer-tools/appnote\"}\n{\"filetype\": \"hdf5\", \"aliases\": \"h5\", \"requirements\": \"h5py\", \"format\": \"Hierarchical Data Format\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"0.28\", \"created\": \"199x\", \"creator\": \"NCSA\", \"description\": \"\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://support.hdfgroup.org/HDF5/\"}\n{\"filetype\": \"sqlite\", \"filetype_url\": \"#sqlite\", \"aliases\": \"db\", \"requirements\": \"\", \"format\": \"sqlite\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"0.42\", \"created\": \"2000\", \"creator\": \"D. Richard Hipp\", \"description\": \"full SQL relational database; the most used database engine in the world\", \"open format\": \"public domain\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://sqlite.org/\"}\n{\"filetype\": \"xls\", \"aliases\": \"\", \"requirements\": \"xlrd\", \"format\": \"Excel spreadsheets\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"0.42\", \"created\": \"1987\", \"creator\": \"Microsoft\", \"description\": \"\", \"open format\": \"no\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://msdn.microsoft.com/en-us/library/office/cc313154(v=office.12).aspx\"}\n{\"filetype\": \"fixed\", \"filetype_url\": \"#fixed\", \"aliases\": \"\", \"requirements\": \"\", \"format\": \"fixed width text\", \"loader\": \"yes\", \"VisiData saver\": \"displayed text (as of 2.1)\", \"roundtrip\": \"inexact\", \"version_added\": \"0.97\", \"created\": \"\", \"creator\": \"\", \"description\": \"not recommended for new data\", \"open format\": \"prehistory\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://stackoverflow.com/questions/7666780/why-are-fixed-width-file-formats-still-in-use\"}\n{\"filetype\": \"postgres\", \"filetype_url\": \"#postgres\", \"aliases\": \"\", \"requirements\": \"\", \"format\": \"PostgreSQL database\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"0.97\", \"created\": \"1996\", \"creator\": \"\", \"description\": \"\", \"open format\": \"\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"\"}\n{\"filetype\": \"vd\", \"filetype_url\": \"#vd\", \"aliases\": \"vdj\", \"requirements\": \"\", \"format\": \"VisiData command log\", \"loader\": \"yes\", \"VisiData saver\": \"yes\", \"version_added\": \"0.97\", \"created\": \"2017\", \"creator\": \"VisiData\", \"description\": \"replayable\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"http://visidata.org/docs/save-restore/\"}\n{\"filetype\": \"vds\", \"format\": \"VisiData Sheet\", \"loader\": \"yes\", \"VisiData saver\": \"yes\", \"version_added\": \"2.2\", \"created\": \"2021\", \"creator\": \"VisiData\", \"description\": \"save column properties and data for multiple sheets in one file\", \"open format\": \"yes\"}\n{\"filetype\": \"mbtiles\", \"filetype_url\": \"#mbtiles\", \"aliases\": \"\", \"requirements\": \"mapbox-vector-tile\", \"format\": \"MapBox Tileset\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"0.98\", \"created\": \"2011\", \"creator\": \"MapBox\", \"description\": \"based on sqlite\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"plottable\", \"format_url\": \"https://docs.mapbox.com/help/glossary/mbtiles/\"}\n{\"filetype\": \"pbf\", \"aliases\": \"\", \"requirements\": \"\", \"format\": \"Protocolbuffer Binary Format\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"0.98\", \"created\": \"2011\", \"creator\": \"OpenStreetMap\", \"description\": \"OpenStreetMap data file\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://wiki.openstreetmap.org/wiki/PBF_Format\"}\n{\"filetype\": \"shp\", \"filetype_url\": \"#shp\", \"aliases\": \"dbf\", \"requirements\": \"pyshp\", \"format\": \"Shapefile geographic data\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"0.98\", \"created\": \"1993\", \"creator\": \"ESRI\", \"description\": \"open format created by ESRI\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"plottable\", \"format_url\": \"https://en.wikipedia.org/wiki/Shapefile\"}\n{\"filetype\": \"html\", \"filetype_url\": \"#html\", \"aliases\": \"htm\", \"requirements\": \"lxml\", \"format\": \"HTML tables\", \"loader\": \"yes\", \"VisiData saver\": \"displayed text\", \"version_added\": \"0.99\", \"created\": \"1996\", \"creator\": \"Dave Raggett\", \"description\": \"\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://www.w3.org/TR/html401/struct/tables.html\"}\n{\"filetype\": \"md\", \"aliases\": \"\", \"requirements\": \"\", \"format\": \"markdown table\", \"loader\": \" \", \"VisiData saver\": \"displayed text\", \"version_added\": \"1.1\", \"created\": \"2008\", \"creator\": \"\", \"description\": \"used in many minimalist web pages\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://help.github.com/articles/organizing-information-with-tables/\"}\n{\"filetype\": \"png\", \"filetype_url\": \"#png\", \"aliases\": \"\", \"requirements\": \"pypng\", \"format\": \"Portable Network Graphics (PNG) image\", \"loader\": \"yes\", \"VisiData saver\": \"from png\", \"version_added\": \"1.1\", \"created\": \"1996\", \"creator\": \"PNG Development Group\", \"description\": \"lossless bitmap image format\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://www.w3.org/TR/PNG/\"}\n{\"filetype\": \"ttf\", \"filetype_url\": \"#ttf\", \"aliases\": \"otf\", \"requirements\": \"fonttools\", \"format\": \"TrueType Font\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"1.1\", \"created\": \"1991\", \"creator\": \"Apple\", \"description\": \"\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"plottable\", \"format_url\": \"https://en.wikipedia.org/wiki/TrueType\"}\n{\"filetype\": \"dot\", \"filetype_url\": \"#pcap\", \"aliases\": \"\", \"requirements\": \"\", \"format\": \"Graphviz diagram\", \"loader\": \" \", \"VisiData saver\": \"from pcap\", \"version_added\": \"1.2\", \"created\": \"1991\", \"creator\": \"\", \"description\": \"output for pcap only\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://graphviz.gitlab.io/_pages/doc/info/lang.html\"}\n{\"filetype\": \"dta\", \"aliases\": \"\", \"requirements\": \"pandas\", \"format\": \"Stata\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"1.2\", \"created\": \"1985\", \"creator\": \"StataCorp\", \"description\": \"\", \"open format\": \"no\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://www.loc.gov/preservation/digital/formats/fdd/fdd000471.shtml\"}\n{\"filetype\": \"geojson\", \"filetype_url\": \"#shp\", \"aliases\": \"\", \"requirements\": \"\", \"format\": \"Geographic JSON\", \"loader\": \"yes\", \"VisiData saver\": \"yes (from shp and geojson)\", \"roundtrip\": \"inexact\", \"version_added\": \"2.2\", \"created\": \"2008\", \"creator\": \"\", \"description\": \"derivative of JSON\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"plottable\", \"format_url\": \"http://geojson.org/\"}\n{\"filetype\": \"sas7bdat\", \"aliases\": \"\", \"requirements\": \"sas7bdat\", \"format\": \"Statistical Analysis System (SAS)\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"1.2\", \"created\": \"1976\", \"creator\": \"SAS Institute\", \"description\": \"\", \"open format\": \"no\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://stackoverflow.com/questions/26532606/how-to-convert-sas7bdat-file-to-csv\"}\n{\"filetype\": \"sav\", \"aliases\": \"\", \"requirements\": \"\", \"format\": \"SPSS statistics\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"1.2\", \"created\": \"1968\", \"creator\": \"SPSS Inc\", \"description\": \"\", \"open format\": \"IBM\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://www.dummies.com/education/math/statistics/the-spss-file-format/\"}\n{\"filetype\": \"spss\", \"aliases\": \"\", \"requirements\": \"savReaderWriter\", \"format\": \"SPSS statistics\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"1.2\", \"created\": \"1968\", \"creator\": \"SPSS Inc\", \"description\": \"\", \"open format\": \"IBM\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://www.dummies.com/education/math/statistics/the-spss-file-format/\"}\n{\"filetype\": \"xpt\", \"aliases\": \"\", \"requirements\": \"xport\", \"format\": \"Statistical Analysis System (SAS)\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"1.2\", \"created\": \"1976\", \"creator\": \"SAS Institute\", \"description\": \"\", \"open format\": \"no\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://stackoverflow.com/questions/26532606/how-to-convert-sas7bdat-file-to-csv\"}\n{\"filetype\": \"jsonl\", \"filetype_url\": \"#json\", \"aliases\": \"ndjson ldjson\", \"requirements\": \"\", \"format\": \"JSON Lines\", \"loader\": \"yes\", \"VisiData saver\": \"typed\", \"roundtrip\": \"inexact\", \"version_added\": \"1.3\", \"created\": \"2013\", \"creator\": \"Ian Ward\", \"description\": \"JSON derivative; streamable\", \"open format\": \"yes\", \"nestable\": \"nestable\", \"plottable\": \"\", \"format_url\": \"http://jsonlines.org/ http://ndjson.org\"}\n{\"filetype\": \"pandas\", \"filetype_url\": \"#pandas\", \"aliases\": \"\", \"requirements\": \"pandas\", \"format\": \"all formats supported by pandas library\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"1.3\", \"created\": \"2008\", \"creator\": \"Wes McKinney\", \"description\": \"special adapter for the Python pandas library; anything pandas supports for loading\", \"open format\": \"\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"http://pandas-docs.github.io/pandas-docs-travis/user_guide/io.html\"}\n{\"filetype\": \"pcap\", \"filetype_url\": \"#pcap\", \"aliases\": \"cap pcapng ntar\", \"requirements\": \"dpkt dnslib\", \"format\": \"network packet capture\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"1.3\", \"created\": \"1988\", \"creator\": \"LBNL\", \"description\": \"\", \"open format\": \"BSD\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://en.wikipedia.org/wiki/Pcap\"}\n{\"filetype\": \"pyprof\", \"aliases\": \"\", \"requirements\": \"\", \"format\": \"Python Profile data\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"1.3\", \"created\": \"\", \"creator\": \"\", \"description\": \"\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://stackoverflow.com/questions/1896032/using-cprofile-results-with-kcachegrind\"}\n{\"filetype\": \"xml\", \"filetype_url\": \"#xml\", \"aliases\": \"\", \"requirements\": \"lxml\", \"format\": \"eXtensible Markup Language (XML)\", \"loader\": \"yes\", \"VisiData saver\": \"from xml\", \"roundtrip\": \"inexact\", \"version_added\": \"1.3\", \"created\": \"1998\", \"creator\": \"W3C\", \"description\": \"\", \"open format\": \"yes\", \"nestable\": \"nestable\", \"plottable\": \"\", \"format_url\": \"https://www.w3.org/TR/REC-xml/\"}\n{\"filetype\": \"yaml\", \"aliases\": \"yml\", \"requirements\": \"PyYAML\", \"format\": \"YAML Ain't Markup Language (YAML)\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"1.3\", \"created\": \"2001\", \"creator\": \"Clark Evans\", \"description\": \"minimal text syntax\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://yaml.org/\"}\n{\"filetype\": \"frictionless\", \"aliases\": \"\", \"requirements\": \"datapackage\", \"format\": \"Frictionless Data\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"2.0\", \"created\": \"\", \"creator\": \"OpenKnowledge Institute\", \"description\": \"\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://frictionlessdata.io/\"}\n{\"filetype\": \"jira\", \"aliases\": \"\", \"requirements\": \"\", \"format\": \"JIRA/Confluence table markup\", \"loader\": \" \", \"VisiData saver\": \"displayed text\", \"version_added\": \"2.0\", \"created\": \"\", \"creator\": \"Atlassian\", \"description\": \"\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://confluence.atlassian.com/doc/confluence-wiki-markup-251003035.html#ConfluenceWikiMarkup-Tables\"}\n{\"filetype\": \"npy\", \"aliases\": \"npz\", \"requirements\": \"numpy\", \"format\": \"NumPy array format\", \"loader\": \"yes\", \"VisiData saver\": \"typed\", \"roundtrip\": \"inexact\", \"version_added\": \"2.0\", \"created\": \"\", \"creator\": \"\", \"description\": \"\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://numpy.org/doc/stable/reference/generated/numpy.lib.format.html\"}\n{\"filetype\": \"tar\", \"aliases\": \"tbz2 tgz txz\", \"format\": \"Unix Tape Archive\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"2.0\", \"open format\": \"yes\"}\n{\"filetype\": \"usv\", \"aliases\": \"\", \"requirements\": \"\", \"format\": \"Unicode-Separated Value\", \"loader\": \"yes\", \"VisiData saver\": \"displayed text\", \"roundtrip\": \"inexact\", \"version_added\": \"2.0\", \"created\": \"1993\", \"creator\": \"Unicode\", \"description\": \"\", \"open format\": \"yes\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"https://codepoints.net/U+241E\"}\n{\"filetype\": \"xlsb\", \"aliases\": \"\", \"requirements\": \"xlrd\", \"format\": \"Excel binary format\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"2.0\", \"created\": \"\", \"creator\": \"Microsoft\", \"description\": \"\", \"open format\": \"no\", \"nestable\": \"\", \"plottable\": \"\", \"format_url\": \"\"}\n{\"filetype\": \"mysql\", \"requirements\": \"MySQLdb\", \"format\": \"MySQL\", \"loader\": \"yes\", \"version_added\": \"2.0\", \"created\": \"1995\", \"creator\": \"MySQL AB\", \"open format\": \"yes\", \"format_url\": \"https://github.com/mysql/mysql-server\"}\n{\"filetype\": \"pdf\", \"requirements\": \"pdfminer.six\", \"format\": \"Portable Document Format\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"2.0\", \"created\": \"1993\", \"creator\": \"Adobe\", \"description\": \"\", \"open format\": \"yes\", \"format_url\": \"https://en.wikipedia.org/wiki/PDF\"}\n{\"filetype\": \"vcf\", \"format\": \"Virtual Contact File (vCard)\", \"loader\": \"yes\", \"version_added\": \"2.0\", \"created\": \"1995\", \"creator\": \"Versit Consortium\", \"open format\": \"yes\", \"format_url\": \"https://tools.ietf.org/html/rfc6350\"}\n{\"filetype\": \"rec\", \"format\": \"recutils database file\", \"loader\": \"yes\", \"VisiData saver\": \"displayed text\", \"version_added\": \"2.0\", \"created\": \"2010\", \"creator\": \"Jose E. Marchesi\", \"description\": \"human-editable, plain text database\", \"open format\": \"yes\", \"format_url\": \"https://www.gnu.org/software/recutils/\"}\n{\"filetype\": \"eml\", \"format\": \"Multipurpose Internet Mail Extensions (MIME)\", \"loader\": \"yes\", \"version_added\": \"2.0\", \"created\": \"1996\", \"creator\": \"Nathaniel Borenstein and Ned Freed\", \"open format\": \"yes\", \"format_url\": \"https://tools.ietf.org/html/rfc2045\"}\n{\"filetype\": \"arrow\", \"requirements\": \"pyarrow\", \"format\": \"Arrow IPC file format\", \"loader\": \"yes\", \"version_added\": \"2.9\", \"created\": \"2016\", \"creator\": \"Apache Software Foundation\", \"open format\": \"yes\", \"format_url\": \"https://arrow.apache.org/docs/format/Columnar.html\"}\n{\"filetype\": \"arrows\", \"requirements\": \"pyarrow\", \"format\": \"Arrow IPC streaming format\", \"loader\": \"yes\", \"version_added\": \"2.9\", \"created\": \"2016\", \"creator\": \"Apache Software Foundation\", \"open format\": \"yes\", \"format_url\": \"https://arrow.apache.org/docs/format/Columnar.html\"}\n{\"filetype\": \"parquet\", \"requirements\": \"pyarrow or pandas\", \"format\": \"Apache Parquet\", \"loader\": \"yes\", \"version_added\": \"1.3\", \"created\": \"2013\", \"creator\": \"Apache Software Foundation\", \"open format\": \"yes\", \"format_url\": \"https://parquet.apache.org/\"}\n{\"filetype\": \"toml\", \"filetype_url\": \"#toml\", \"aliases\": \"\", \"requirements\": \"\", \"format\": \"Tom's Obvious, Minimal Language (TOML)\", \"loader\": \"yes\", \"VisiData saver\": \"\", \"version_added\": \"2.12\", \"created\": \"2013\", \"creator\": \"Tom Preston-Werner\", \"description\": \"minimal configuration file format that's easy to read\", \"open format\": \"yes\", \"format_url\": \"https://toml.io/en/latest\"}\n{\"filetype\": \"msgpack\", \"aliases\": \"msgpackz\", \"requirements\": \"msgpack\", \"format\": \"MessagePack\", \"loader\": \"yes\", \"version_added\": \"3.1\", \"created\": \"2008\", \"creator\": \"Sadayuki Furuhashi\", \"description\": \"efficient binary serialization format.\", \"open format\": \"yes\", \"nestable\": \"nestable\", \"format_url\": \"https://github.com/msgpack/msgpack/blob/master/spec.md\"}\n{\"filetype\": \"grep\", \"format\": \"grep-printer\", \"loader\": \"yes\", \"version_added\": \"3.1\", \"created\": \"\", \"creator\": \"Andrew Gallant\", \"description\": \"search results from ripgrep in JSONL\", \"open format\": \"yes\", \"format_url\": \"https://docs.rs/grep-printer/latest/grep_printer/struct.JSON.html\"}\n"
  },
  {
    "path": "dev/formats.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\tSqliteSheet\theader\tset-option\t0\t\t\n\t\t\topen-file\tdev/formats.jsonl\to\t\nformats\taliases\t\thide-col\t\t-\thide current column\nformats\trequirements\t\trename-col\tPyPI dependencies\t^\tedit name of current column\nformats\tPyPI dependencies\t\tslide-rightmost\t\tgL\tslide current column all the way to the right of sheet\nformats\tloader\t0\tselect-equal-cell\t\t,\tselect rows matching current cell in current column\nformats\tloader\t\tsetcol-expr\tversion_added\tg=\tset current column for selected rows to result of Python expression\nformats\t\t\tunselect-rows\t\tgu\tunselect all rows\nformats\tversion_added\t\thide-col\t\t-\thide current column\nformats\tdescription\t\thide-col\t\t-\thide current column\nformats\topen format\t\thide-col\t\t-\thide current column\nformats\tnestable\t\thide-col\t\t-\thide current column\nformats\tplottable\t\thide-col\t\t-\thide current column\n"
  },
  {
    "path": "dev/hooks/pre-push",
    "content": "#!/usr/bin/env bash\n\n# Pre-push hook: run all tests before pushing\n\nset -e\nmake test-all\n"
  },
  {
    "path": "dev/mkman.sh",
    "content": "#!/bin/bash\n\n# Usage: $0\n#    builds vd(1) man page in src repo (run via `make man`)\n\n# TODO:\n#   - parse_options should be moved to bin/\n\n# -e - exit on error\n# -u - exit on undefined\n# -o pipefail - exit on error in a pipe\nset -eu -o pipefail\n\nVD=$(dirname $0)/..\nMAN=$VD/visidata/man\nBUILD=/tmp/visidata_manpages\n\necho \"Cleaning up $BUILD\"\nrm -rf \"$BUILD\"\nmkdir \"$BUILD\"\n\nexport PYTHONPATH=$VD:$VD/visidata\nexport PATH=$VD/bin:$PATH\n\ncp $MAN/* $BUILD/\n$MAN/parse_options.py $BUILD/vd-cli.inc $BUILD/vd-opts.inc\n\nsoelim -rt -I $BUILD $BUILD/vd.inc > $BUILD/vd-pre.1\npreconv -r -e utf8 $BUILD/vd-pre.1 > $MAN/vd.1\npreconv -r -e utf8 $BUILD/vd-pre.1 > $MAN/visidata.1\nMANWIDTH=80 man $MAN/vd.1 > $MAN/vd.txt\n\n# build docs/man.md\n\nmanhtml=\"$VD\"/docs/man.md\necho '---' > \"$manhtml\"\necho 'eleventyNavigation:' >> \"$manhtml\"\necho '  key: Quick Reference Guide' >> \"$manhtml\"\necho '  order: 2' >> \"$manhtml\"\necho 'permalink: /man/' >> \"$manhtml\"\necho '---' >> \"$manhtml\"\necho '<section><pre id=\"manpage\" class=\"whitespace-pre-wrap text-xs\">' >> \"$manhtml\"\n\nMAN_KEEP_FORMATTING=1 COLUMNS=1000 man \"$MAN\"/vd.1 | ul | aha --no-header >> \"$manhtml\"\necho '</pre></section>' >> \"$manhtml\"\n\necho \"Files are written to $BUILD\"\n"
  },
  {
    "path": "dev/mkpandas-df.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nAuthor: @azjps\nRun visidata PandasSheet on a dataframe with columns\nof different datatypes and a length controlled by\nthe command-line option --repeat. The default size\nof the loaded dataframe is 1 million rows.\n\"\"\"\n\nimport argparse\n\nimport pandas as pd\nimport numpy as np\n\nimport visidata\n\nvisidata.options.disp_date_fmt = \"%Y%m%d %H:%M:%S.%f\"\n\nif __name__ == \"__main__\":\n    group_count = 10\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\n        \"--repeat\", default=100000, type=int,\n        help=\"Number of times to repeat rows, total # of rows = {} * repeat. \"\n             \"Default=100000 for a million rows total.\"\n             .format(group_count)\n    )\n    args = parser.parse_args()\n\n    repeat_count = args.repeat\n    df = pd.DataFrame({\n        \"date1\": pd.date_range(start=\"2020/01/01\", freq=\"D\", periods=group_count),\n        \"date2\": pd.date_range(start=\"2020/01/01 02:15:30.012345\", freq=\"D\", periods=group_count),\n        \"int1\": np.arange(group_count),\n        \"float1\": np.arange(group_count) + 0.5,\n        \"cat1\": [str(i) for i in np.arange(group_count)],\n        \"repeat1\": np.repeat(1, group_count),\n    })\n    df[\"cat1\"] = df[\"cat1\"].astype(\"category\")\n    df[\"timedelta1\"] = df[\"date1\"].diff()\n    # Repeat so that we are a significant amount of rows\n    big_df = df.iloc[np.repeat(np.arange(0, group_count), repeat_count)]\n    big_df = big_df.copy().reset_index(drop=True)\n    # To make the frequencies a bit more interesting, shift the int2 & date2 columns 20% \"upwards\"\n    big_df[\"int2\"] = big_df[\"int1\"].shift(-repeat_count // 5)\n    big_df[\"date2\"] = big_df[\"date2\"].shift(-repeat_count // 5)\n    big_df[\"int3\"] = big_df[\"int1\"].shift(repeat_count // 5)\n\n    visidata.run(visidata.PandasSheet('pandas', source=big_df))\n"
  },
  {
    "path": "dev/quit.vdx",
    "content": "quit-all\n"
  },
  {
    "path": "dev/requirements-dev.txt",
    "content": "markdown\npytest\npyyaml\ntox\n"
  },
  {
    "path": "dev/run-tests-individually.sh",
    "content": "#!/usr/bin/env bash\n# usage: ./dev/run-tests-individually.sh [<tests/name.vd> […]]\n#\n# Runs each test in its own vd process, for full isolation.\n# Slower than `dev/test.sh` (which batches all tests into one process),\n# but useful for debugging cross-test contamination.\n#\n# The stdout and stderr of each test is saved in tests/log/<name>.log.\n# Test output goes to tests/output/ (gitignored), golden files are not modified.\n#\nset -euo pipefail\nshopt -s nullglob\n\nmain() {\n    local test_file test_name\n    local -a test_files failures\n\n    test_files=(\"$@\")\n    failures=()\n\n    if [[ ${#test_files[@]} -eq 0 ]]; then\n        test_files=(tests/*.vd)\n    fi\n\n    # Clean logs\n    mkdir -p tests/log/\n    rm -f tests/log/*.log\n\n    # Run each test file separately\n    trap 'exit 130' SIGINT\n\n    for test_file in \"${test_files[@]}\"; do\n        test_name=\"$(basename \"$test_file\" .vd)\"\n\n        if ./dev/test.sh \"$test_name\" >tests/log/\"$test_name\".log 2>&1; then\n            pass \"$test_name\"\n        else\n            fail \"$test_name\"\n            failures+=(\"$test_file\")\n        fi\n    done\n\n    if [[ ${#failures[@]} -ne 0 ]]; then\n        printf \"\\n\" >&2\n        printf \"%d failed tests:\\n\" \"${#failures[@]}\" >&2\n        printf \"  %s\\n\" \"${failures[@]}\" >&2\n    fi\n}\n\npass() {\n    echo \"$(colorize \"green bold\" \"    ok\")\" \"$@\"\n}\n\nfail() {\n    echo \"$(colorize \"red   bold\" \"not ok\")\" \"$@\"\n}\n\ncolorize() {\n    git config --get-color \"\" \"$1\"\n    echo -n \"$2\"\n    git config --get-color \"\" reset\n}\n\nmain \"$@\"\n"
  },
  {
    "path": "dev/test-all.sh",
    "content": "#!/usr/bin/env bash\n# Run test scripts with labeled output\n# Usage: test-all.sh [test scripts...]\n\nsource tests/testenv.sh\nexport PYTHON VD NPROCS OUTDIR\n\nFAILED=\"\"\nN=0\n\nif [ $# -eq 0 ]; then\n    set -- tests/test-*.sh\nfi\n\nfor t in \"$@\"; do\n    name=$(basename \"$t\" .sh)\n    N=$((N + 1))\n    \"$t\" 2>&1 | sed -u \"s/^/$name: /\"\n    if [ ${PIPESTATUS[0]} -ne 0 ]; then\n        echo \"FAIL: $name\"\n        FAILED=\"$FAILED $name\"\n    fi\ndone\n\nNF=$(echo $FAILED | wc -w)\nNP=$((N - NF))\nif [ -n \"$FAILED\" ]; then\n    echo \"\"\n    echo \"FAILED:$FAILED\"\n    echo \"FAIL: $NP/$N tests passed\"\n    exit 1\nelse\n    echo \"PASS: $NP/$N tests passed\"\nfi\n"
  },
  {
    "path": "dev/test-stdin-replay.vdx",
    "content": "open-file -\ntranspose\n"
  },
  {
    "path": "dev/test.sh",
    "content": "#!/usr/bin/env bash\n# Wrapper for tests/test-vdx.sh (cmdlog golden tests)\n# Usage: test.sh [-d] [-j N] [testname ...]\nexec tests/test-vdx.sh \"$@\"\n"
  },
  {
    "path": "dev/types.jsonl",
    "content": "{\"type\": \"anytype\", \"description\": \"pass-through\", \"numeric\": \"\", \"command\": \"type-anytype\", \"keystrokes\": \"z~\"}\n{\"type\": \"str\", \"description\": \"string\", \"numeric\": \"\", \"command\": \"type-str\", \"keystrokes\": \"~\"}\n{\"type\": \"date\", \"description\": \"date/time\", \"numeric\": \"Y\", \"command\": \"type-date\", \"keystrokes\": \"@\"}\n{\"type\": \"int\", \"description\": \"integer\", \"numeric\": \"Y\", \"command\": \"type-int\", \"keystrokes\": \"#\"}\n{\"type\": \"float\", \"description\": \"decimal\", \"numeric\": \"Y\", \"command\": \"type-float\", \"keystrokes\": \"%\"}\n{\"type\": \"currency\", \"description\": \"decimal with units\", \"numeric\": \"Y\", \"command\": \"type-currency\", \"keystrokes\": \"$\"}\n{\"type\": \"vlen\", \"description\": \"container size\", \"numeric\": \"Y\", \"command\": \"type-vlen\", \"keystrokes\": \"z#\"}\n"
  },
  {
    "path": "dev/vduplot.vdx",
    "content": "#!/usr/bin/env vd -p\nopen-file http://visidata.org/usage.tsv\ncol daily_users\ntype-int\naggregate-col sum\ncol motd_fetches\ntype-int\naggregate-col sum\ncol date\nfreq-col\nsheet usage_date_freq\ntype-date\naddcol-expr date.isocalendar()[2]\nrename-col dotw\naddcol-expr 'Sat/Sun' if dotw >=6 else 'Mon-Fri'\nkey-col\ncol date\nsort-desc\ncol daily_users_sum\nselect-equal-cell\nplot-column\n"
  },
  {
    "path": "dev/visidata-brew.rb",
    "content": "class Visidata < Formula\n  include Language::Python::Virtualenv\n  desc \"Terminal utility for exploring and arranging tabular data\"\n  homepage \"https://visidata.org/\"\n  url \"https://files.pythonhosted.org/packages/4f/f6/01acfae53ae901756bc7778fc8c6f1ee70d442b5190f8bfe7d54dd35bb19/visidata-1.2.tar.gz\"\n  sha256 \"042efc2c43edaf3c3f8bd1bbf3c5d515663db66c41e81eea5f8b09200c2744e1\"\n\n  depends_on \"python3\"\n\n  resource \"six\" do\n    url \"https://files.pythonhosted.org/packages/16/d8/bc6316cf98419719bd59c91742194c111b6f2e85abac88e496adefaf7afe/six-1.11.0.tar.gz\"\n    sha256 \"70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9\"\n  end\n\n  resource \"python-dateutil\" do\n    url \"https://files.pythonhosted.org/packages/54/bb/f1db86504f7a49e1d9b9301531181b00a1c7325dc85a29160ee3eaa73a54/python-dateutil-2.6.1.tar.gz\"\n    sha256 \"891c38b2a02f5bb1be3e4793866c8df49c7d19baabf9c1bad62547e0b4866aca\"\n  end\n\n  resource \"et-xmlfile\" do\n    url \"https://files.pythonhosted.org/packages/22/28/a99c42aea746e18382ad9fb36f64c1c1f04216f41797f2f0fa567da11388/et_xmlfile-1.0.1.tar.gz\"\n    sha256 \"614d9722d572f6246302c4491846d2c393c199cfa4edc9af593437691683335b\"\n  end\n\n  resource \"jdcal\" do\n    url \"https://files.pythonhosted.org/packages/9b/fa/40beb2aa43a13f740dd5be367a10a03270043787833409c61b79e69f1dfd/jdcal-1.3.tar.gz\"\n    sha256 \"b760160f8dc8cc51d17875c6b663fafe64be699e10ce34b6a95184b5aa0fdc9e\"\n  end\n\n  resource \"openpyxl\" do\n    url \"https://files.pythonhosted.org/packages/8c/75/c4e557207c7ff3d217d002d4fee32b4e5dbfc5498e2a2c9ce6b5424c5e37/openpyxl-2.4.9.tar.gz\"\n    sha256 \"95e007f4d121f4fd73f39a6d74a883c75e9fa9d96de91d43c1641c103c3a9b18\"\n  end\n\n  resource \"xlrd\" do\n    url \"https://files.pythonhosted.org/packages/86/cf/bb010f16cefa8f26ac9329ca033134bcabc7a27f5c3d8de961bacc0f80b3/xlrd-1.1.0.tar.gz\"\n    sha256 \"8a21885513e6d915fe33a8ee5fdfa675433b61405ba13e2a69e62ee36828d7e2\"\n  end\n\n  resource \"idna\" do\n    url \"https://files.pythonhosted.org/packages/f4/bd/0467d62790828c23c47fc1dfa1b1f052b24efdf5290f071c7a91d0d82fd3/idna-2.6.tar.gz\"\n    sha256 \"2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f\"\n  end\n\n  resource \"certifi\" do\n    url \"https://files.pythonhosted.org/packages/23/3f/8be01c50ed24a4bd6b8da799839066ce0288f66f5e11f0367323467f0cbc/certifi-2017.11.5.tar.gz\"\n    sha256 \"5ec74291ca1136b40f0379e1128ff80e866597e4e2c1e755739a913bbc3613c0\"\n  end\n\n  resource \"chardet\" do\n    url \"https://files.pythonhosted.org/packages/fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d/chardet-3.0.4.tar.gz\"\n    sha256 \"84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae\"\n  end\n\n  resource \"urllib3\" do\n    url \"https://files.pythonhosted.org/packages/ee/11/7c59620aceedcc1ef65e156cc5ce5a24ef87be4107c2b74458464e437a5d/urllib3-1.22.tar.gz\"\n    sha256 \"cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f\"\n  end\n\n  resource \"requests\" do\n    url \"https://files.pythonhosted.org/packages/b0/e1/eab4fc3752e3d240468a8c0b284607899d2fbfb236a56b7377a329aa8d09/requests-2.18.4.tar.gz\"\n    sha256 \"9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e\"\n  end\n\n  def install\n    venv = virtualenv_create(libexec, \"python3\")\n    venv.pip_install resources\n    venv.pip_install_and_link buildpath\n    man1.install \"visidata/man/vd.1\"\n  end\n\n  test do\n    (testpath/\"test_visidata.sh\").write <<~EOS\n      #!/usr/bin/env bash\n      curl -O https://raw.githubusercontent.com/saulpw/visidata/stable/tests/exp-digits.vd\n      vd --play exp-digits.vd --batch --output results_test.tsv\n    EOS\n    chmod 0755, testpath/\"test_visidata.sh\"\n    system \"./test_visidata.sh\"\n    assert_predicate testpath/\"results_test.tsv\", :exist?\n  end\nend\n"
  },
  {
    "path": "dev/workshop-outline.md",
    "content": "# Intro\n   - terminal \"spreadsheet\"\n   - python3, \\*no dependencies\n   - visidata 1.0 made during 2017 sabbatical\n   - GPL3 license (please contribute, esp loaders and workflows!)\n   - makes data fun again\n\n# 0. Install\n   - Python3 .dmg (automatically has pip3)\n   - 'pip3 install visidata' or clone from git\n   - use pip3 to install other loader dependencies (e.g. pip3 install openpyxl)\n\n# 1. Basics/Fishing\n   - q to quit\n   - ^C\n\n# 2. Immediately Rewarding\n   - F/Enter\n   - e   ^\n   - -\n   - _\n   - [/]\n   - ^S\n\n# 3. Movement/Search - vimlike\n   - hjkl\n   - / ? n N for search\n   - 'g' prefix with above\n\n   - ^H   manpage (was z?, F1 still works)\n   - z^H  context-sensitive command list\n   - ^E\n\n- [saul] if you learn nothing more than this, you will still have a great tool at your disposal.\n\n# 4. Selection\n   - s/t/u\n   - gs/gt/gu\n   - | \\\n   - \"\n   - ,  scoop\n   - { }\n   - gd\n   - ge\n   - `g*`\n\n- [anja] if you leave right now, you still have a great tool at your disposal.\n\n# 5. Column Basics\n   - !\n   - ~@#$%\n   - note these column commands and ^ are all shift numbers\n   - gF\n   - C\n\n# 6. Aggregators\n   - I\n   - + and subsequent usage\n\n# 7. Columns: Regexes and Derived Columns\n   - :\n   - ;\n   - *\n   - =\n\n# 8. Python\n   - z/ z? z| z\\\n   - .visidatarc\n     - options\n     - functions for =\n     - commands/bindkeys\n\n# 9. Cmdlog\n   - save and replay\n   - macros\n\n# 10. Extras\n   - Y\n   - dot\n   - pipe into\n   - vd --diff\n   - so many things\n\n# Conclusion\n   - \n"
  },
  {
    "path": "dev/zsh-completion.in",
    "content": "#compdef vd visidata\n\n(( $+functions[_vd_files] )) ||\n_vd_files () {\n  case $PREFIX in\n    (*) _files $* ;;\n  esac\n  case $PREFIX in\n    (+) _message -e 'toplevel:subsheet:col:row' ;;\n    (+<1->) _message -e 'toplevel' ;;\n    (+<1->:) _message -e 'subsheet' ;;\n    (+<1->:<1->:) _message -e 'col' ;;\n    (+<1->:<1->:<1->:) _message -e 'row' ;;\n  esac\n}\n\n_arguments -S \\\n    {{flags}} \\\n  '(-p --play -w --replay-wait -b --batch -o --output --replay-movement)*:file:_vd_files'\n"
  },
  {
    "path": "dev/zsh-completion.py",
    "content": "#!/usr/bin/env python\nfrom __future__ import unicode_literals\n\nimport os\nfrom os.path import dirname as dirn\nimport sys\nimport re\n\nsys.path.insert(0, dirn(dirn((os.path.abspath(__file__)))))\nfrom visidata import vd\n\nZSH_COMPLETION_FILE = sys.argv[1] if len(sys.argv) > 1 else \"_visidata\"\nZSH_COMPLETION_TEMPLATE = \"dev/zsh-completion.in\"\npat_class = re.compile(\"'(.*)'\")\npat_select = re.compile(r\"^\\([^)]*\\)\")\n\n\ndef generate_completion(opt):\n    prefix = \"--\" + opt.name\n    shortnames = [\n        key for key, value in vd.option_aliases.items() if value[0] == opt.name\n    ]\n    if len(shortnames):\n        if len(shortnames[0]) == 1:\n            shortname = \"-\" + shortnames[0]\n        else:\n            shortname = \"--\" + shortnames[0]\n        prefix = \"{\" + f\"{shortname},{prefix}\" + \"}\"\n    if isinstance(opt.value, bool):\n        completion = \"\"\n    else:\n        completion = \":\" + pat_class.findall(str(opt.value.__class__))[0]\n    if opt.name in [\"play\", \"output\", \"visidata_dir\", \"config\"]:\n        completion += \":_files\"\n    elif opt.name in [\"plugins_url\", \"motd_url\"]:\n        completion += \":_urls\"\n    helpstr = opt.helpstr\n    selections = pat_select.findall(helpstr)\n    if len(selections):\n        completion += f\":{selections[0].replace('/', ' ')}\"\n    # TODO: use `zstyle ':completion:*' extra-verbose true`\n    # to control the display of default value\n    helpstr = helpstr + f\" (default: {opt.value})\"\n    helpstr = helpstr.replace(\"[\", \"\\\\[\").replace(\"]\", \"\\\\]\")\n    return f\"{prefix}'[{helpstr}]{completion}'\"\n\n\nflags = [generate_completion(vd._options[opt][\"default\"]) for opt in vd._options]\n\nwith open(ZSH_COMPLETION_TEMPLATE) as f:\n    template = f.read()\n\ntemplate = template.replace(\"{{flags}}\", \" \\\\\\n    \".join(flags))\n\nwith open(ZSH_COMPLETION_FILE, \"w\") as f:\n    f.write(template)\n"
  },
  {
    "path": "docs/README.md",
    "content": "# VisiData Documentation Index\n\nGuide to what each file covers, so it's clear which files to update when user-facing behavior changes.\n\n## Common mappings\n\n- New/changed commands or keybindings → man.md, plus the relevant topic file\n- New/changed options → customize.md, man.md\n- New/changed file format support → formats.md\n- New/changed column or row operations → columns.md, rows.md, edit.md\n- New features may need a new doc file (add it to this README.md too)\n\n## User Guides\n\n- index.md: Getting started, links to demos and tutorials\n- loading.md: Specifying source files, piping data in\n- usage.md: Loading files, exiting, specifying file types\n- navigate.md: Movement commands, vim-style keys, scrolling, searching\n- move.md: Moving around and searching (FAQ-style)\n- columns.md: Column manipulation: pin, move, hide/unhide, resize\n- rows.md: Selecting, filtering, and toggling rows\n- edit.md: Cell editing, bulk updates, regex substitution, expressions\n- crud.md: Creating blank sheets, rows, and columns\n- group.md: Grouping data, aggregators, descriptive statistics\n- freq.md: Frequency tables, binning (discrete/numeric), pivot sheets\n- join.md: Combining datasets via the Sheets Sheet\n- graph.md: Drawing graphs, visualizing numeric variables\n- graphics.md: Low-res terminal graphics, braille Unicode, Canvas classes\n- colors.md: Color themes, interface color customization\n- customize.md: .visidatarc, command bindings, Options Sheet, XDG support\n- macros.md: Recording and replaying command sequences\n- menu.md: Toplevel menubar, arrow key/hjkl navigation\n- mouse.md: Mouse interaction options\n- pipes.md: Using VisiData in stdin/stdout pipelines\n- dirsheet.md: Directory Sheet (DirSheet): browsing, editing, previewing files\n- split.md: Split screen, viewing two sheets simultaneously\n- save-restore.md: Saving and replaying sessions\n- plugins.md: Installing plugins (builtin, pip, ~/.visidata/plugins/)\n- shell.md: ZSH completion\n- formats.md: Supported file formats, loaders/savers, dependencies\n- internal_formats.md: .vd, .vdj, .vdx (command logs) and .vds (sheet state) formats\n- gmail.md: Gmail access via OAuth 2.0 setup\n- man.md: Quick reference / man page with full command and option listing\n\n## Developer/Contributor Docs\n\n- viewtsv.md: Annotated minimal 25-line VisiData app example\n- test.md: Functional testing with .vd scripts\n- contributing.md: Checklists for submitting loaders and plugins\n\n## API Reference (api/)\n\nPlugin/extension author documentation (reStructuredText, built with Sphinx).\n\n- api/index.rst: Plugin Authors Guide overview\n- api/sheets.rst: BaseSheet, openPath/openSource\n- api/loaders.rst: Creating new loaders\n- api/commands.rst: Command architecture, adding commands\n- api/columns.rst: Column calculation engine (calcValue, getValue, etc.)\n- api/plugins.rst: Plugin file structure and publishing\n- api/options.rst: Creating configurable options\n- api/async.rst: @asyncthread, threading, responsive UI\n- api/data.rst: Selected rows API\n- api/interface.rst: Drawing functions, window dimensions\n- api/canvas.rst: Canvas graphics primitives\n- api/extensible.rst: Extensible base class, monkey-patching\n\n## Other Assets\n\n- casts/: Asciinema terminal recordings embedded in various docs\n- assets/: Screenshots and images (DirSheet, color options, Gmail OAuth steps, etc.)\n"
  },
  {
    "path": "docs/api/Makefile",
    "content": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line, and also\n# from the environment for the first two.\nSPHINXOPTS    ?=\nSPHINXBUILD   ?= sphinx-build\nSOURCEDIR     = .\nBUILDDIR      = _build\n\n# Put it first so that \"make\" without argument is like \"make help\".\nhelp:\n\t@$(SPHINXBUILD) -M help \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)\n\n.PHONY: help Makefile\n\n# Catch-all target: route all unknown targets to Sphinx using the new\n# \"make mode\" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).\n%: Makefile\n\t@$(SPHINXBUILD) -M $@ \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)\n"
  },
  {
    "path": "docs/api/_static/.gitkeep",
    "content": ""
  },
  {
    "path": "docs/api/_static/css/custom.css",
    "content": "dl.function dt, dl.data dt, dl.class dt, dl.attribute dt {\n    margin-top: 1.5em;\n    margin-bottom: .5em;\n    padding: .25em;\n    background-color: #e0e0e0;\n}\n\nbody .document {\n    width: 1200px;\n}\n\nkbd {\n  border-radius: 3px;\n  padding: 1px 3px 0;\n  border: 1px solid black;\n}\n\nkbd kbd {\n  border: 0px;\n}\n"
  },
  {
    "path": "docs/api/async.rst",
    "content": ".. _threads:\n\n=========================\nThreads\n=========================\n\nVisiData is not necessarily the fastest at processing large amounts of data, but great care has been taken to make sure that it remains *responsive*.\nIt is better to wait 10 seconds with active indication of progress, than 2 seconds with the program frozen and not accepting input (or worse; queueing up commands without ability to cancel).\n\nTo this end, VisiData has a main interface thread for display and input, and creates threads for any task that may be time-consuming.\nIn fact, anything that iterates through all rows (there may be millions) or all columns (there may be thousands), should probably be in its own thread.\n\n``@asyncthread``\n~~~~~~~~~~~~~~~~\n\nUse the ``@asyncthread`` decorator on a function to spawn a new thread for each call to that function.\nThe return value is the spawned thread (which can often be ignored by the caller), and the return value of the original function is effectively lost.\n\nCells which are being computed in a separate thread will have the Thread object as their value until the result is available.\n[This will show the ``options.disp_pending`` cell note and allow the user to interact with the specific thread (via e.g. :kbd:`z Ctrl+Y` or :kbd:`z Ctrl+C`).]\n\nEach thread is added to ``Sheet.currentThreads`` on the current sheet, and to ``vd.threads``.\nNote that a thread spawned by calling a function on a different sheet will add the thread to the currentThreads for the topmost/current sheet instead.\n\n.. autoclass:: visidata.asyncthread\n\n.. data:: visidata.vd.threads\n\nA list of all threads.\n\n.. data:: visidata.BaseSheet.currentThreads\n\nA list of all threads started from commands on this sheet.\n\n.. autofunction:: visidata.vd.execAsync\n.. autofunction:: visidata.vd.sync\n.. autofunction:: visidata.vd.cancelThread\n\n.. note::\n\n    ``vd.cancelThread(*threads)`` sends each thread an ``EscapeException``, which percolates up the stack to be caught by the thread entry point.\n    ``EscapeException`` inherits from Python's ``BaseException`` instead of ``Exception``, so that functions can still have catchall try-blocks with ``except Exception:``, without catching explicit user cancellations.\n\n    An unqualified ``except:`` clause is bad practice (as always).\n    When used in an async function, it will make the thread uncancelable.\n\n.. _progress:\n\nProgress counters\n~~~~~~~~~~~~~~~~~~\n\nTo provide the progress meter in the right status bar, every function that could iterate over a large collection of objects (usually rows or columns) or loop a large number of times, should use an ``Progress`` object somewhere to track its progress.\n\n.. note::\n\n    Many internal functions will contribute their own ``Progress`` counters (including ``visidata.Path.read``), so an async function may not need its own, but it can still be helpful to provide a more precise *gerund* to show to the user.\n\n.. autoclass:: visidata.vd.Progress\n\n.. function:: visidata.vd.Progress.addProgress(n)\n\n    Increase the progress count by *n*.\n\n\nProgress as iterable\n^^^^^^^^^^^^^^^^^^^^^\n\nWhen iterating over a potentially large sequence:\n\n::\n\n    for item in Progress(iterable, gerund='working'):\n\nThis is equivalent to ``for item in iterable``.  The `gerund` specifies the action being performed.\n\n- These ``Progress`` only display if used in another thread, and has no effect otherwise.  So any iteration over rows and columns should have ``Progress``, even if it is not ``@asyncthread``.\n- Use ``Progress`` around the innermost iterations for maximum precision in the progress meter.\n- But this incurs a small amount of overhead, so if a tight loop needs every last optimization, use it with an outer iterator instead.\n- Multiple ``Progress`` objects used in parallel will stack properly.\n- Multiple ``Progress`` objects used serially will make the progress indicator reset (which is better than having no indicator at all).\n\nIf *iterable* does not know its own length, then pass the length or an approximation as the *total* keyword argument:\n\n::\n\n    for item in Progress(iterable, gerund='working', total=approx_size):\n\nEach iteration of the ``Progress`` object contributes 1 towards the total.\nTo contribute a different amount, use ``Progress.addProgress(n)`` (n-1 if being used as an iterable, as 1 will be added automatically).\n\nProgress as context manager\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nTo manage ``Progress`` without wrapping an iterable, use it as a context manager with only a ``total`` keyword argument, and call ``addProgress`` as progress is made:\n\n::\n\n    with Progress(gerund='working', total=amt) as prog:\n        while amt > 0:\n            some_amount = some_work()\n            prog.addProgress(some_amount)\n            amt -= some_amount\n\n- Using ``Progress`` other than as an iterable or a context manager will have no effect.\n\n\n\n\nThreads Sheet\n~~~~~~~~~~~~~~\n\nThe Threads Sheet is useful for analyzing the performance of long-running async commands.\n\nAll threads (active, aborted, and completed) are added to ``vd.threads``, which can be viewed as the ThreadsSheet via :kbd:`Ctrl+T`.\nThreads which take very little time (currently less than 10ms) are removed, to reduce clutter.\n\n- Press :kbd:`Ctrl+_` (*toggle-profile*) to toggle profiling of the main thread.\n- Press :kbd:`Enter` (*open-row*) on a thread to view its performance profile (if ``options.profile`` was set when the thread started).\n\nProfiling\n^^^^^^^^^\n\nThe performance profile sheet in VisiData is the output from ``pstats.Stats.print_stats()``.\n\n- :kbd:`z Ctrl+S` on the performance profile will call ``dump_stats()`` and save the profile data to the given filename, for analysis with e.g. `pyprof2calltree <https://libraries.io/pypi/pyprof2calltree>`__ and `kcachegrind <https://kcachegrind.github.io/html/Home.html>`__.\n"
  },
  {
    "path": "docs/api/canvas.rst",
    "content": "Canvas\n=========\n\n.. autofunction visidata.BoundingBox\n\n.. autofunction visidata.Canvas.point\n.. autofunction visidata.Canvas.line\n.. autofunction visidata.Canvas.polyline\n.. autofunction visidata.Canvas.polygon\n.. autofunction visidata.Canvas.qcurve\n.. autofunction visidata.Canvas.label\n\n.. autofunction visidata.Canvas.plotterCursorBox\n.. autofunction visidata.Canvas.cursorBox\n.. autofunction visidata.Canvas.plotterMouse\n.. autofunction visidata.Canvas.canvasMouse\n.. autofunction visidata.Canvas.zoomTo\n.. autofunction visidata.Canvas.resetBounds\n.. autofunction visidata.Canvas.rowsWithin\n.. autofunction visidata.Canvas.fixPoint\n\n.. autofunction visidata.Canvas.plotpixel\n.. autofunction visidata.Canvas.plotlabel\n\nCanvas\n=========\n.. autofunction visidata.GraphSheet.formatX\n.. autofunction visidata.GraphSheet.formatY\n.. autofunction visidata.GraphSheet.parseX\n.. autofunction visidata.GraphSheet.parseY\n"
  },
  {
    "path": "docs/api/columns.rst",
    "content": ".. _columns:\n\nColumns\n====================================\n\nColumns are the heart of the VisiData computation engine.\n\nEach column can **calculate** a value from a row object; and it might also be able to **put** a different value into the row object (for a later calculate to re-derive).\n\nA Column subclass can override ``calcValue`` and ``putValue`` to define its fundamental interaction with the row object.\nThis is often the only thing a Column subclass has to do.\n\n``calcValue`` and ``putValue`` should generally not be called by application code.\nInstead, apps and plugins should call ``getValue`` and ``setValue``, which provide appropriate layers of caching.\n\n.. autoclass:: visidata.Column\n.. autoattribute:: visidata.Column.name\n.. autoattribute:: visidata.Column.type\n.. autoattribute:: visidata.Column.width\n.. autoattribute:: visidata.Column.visibleWidth\n.. versionadded:: 2.1\n\n.. autoattribute:: visidata.Column.fmtstr\n\n.. autoattribute:: visidata.Column.hidden\n\n.. autofunction:: visidata.Column.calcValue\n.. autofunction:: visidata.Column.putValue\n\n.. autofunction:: visidata.Column.getValue\n.. autofunction:: visidata.Column.getTypedValue\n.. autofunction:: visidata.Column.getDisplayValue\n.. autofunction:: visidata.Column.formatValue\n\n.. autofunction:: visidata.Column.getValueRows\n.. autofunction:: visidata.Column.getValues\n\n\n.. autofunction:: visidata.Column.setValue\n.. autofunction:: visidata.Column.setValues\n.. autofunction:: visidata.Column.setValuesTyped\n.. autofunction:: visidata.Column.setValuesFromExpr\n\n.. autofunction:: visidata.BaseSheet.evalExpr\n.. autofunction:: visidata.Column.recalc\n.. autofunction:: visidata.TableSheet.recalc\n.. autofunction:: visidata.Column.isError\n\n- ``calcValue`` may be arbitrarily expensive or even asynchronous, so once the value is calculated, it is cached until ``Column.recalc()`` is called.\n- ``putValue`` may modify the source data directly (for instance, if the row object represents a row in a database table).  VisiData will *never* modify source data without an explicit ``save`` command.  So applications (and all other code) must call ``setValue`` to change the value of any cell.\n\n- ``delete-cell`` actually just calls setValue with None.\n\nColumns are added to Sheets with :ref:`addColumn <enumerate-columns>`.\n\nExample\n~~~~~~~~~\n\n::\n\n    class SpecialColumn(Column):\n        'Column for special fields on special rows.'\n        def calcValue(self, row):\n            return row.special()[self.expr]\n\n        def putValue(self, row, val):\n            row.special()[self.expr] = val\n\n    c = SpecialColumn('field1', expr='field1_key')\n    sheet.addColumn(c)\n\n\nColumn Subclasses\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. autoclass:: visidata.ItemColumn\n.. autoclass:: visidata.AttrColumn\n.. autoclass:: visidata.ExprColumn\n.. autoclass:: visidata.SettableColumn\n.. autoclass:: visidata.SubColumnFunc\n\nKey Columns\n============\n\n.. autofunction:: visidata.TableSheet.setKeys\n.. autofunction:: visidata.TableSheet.unsetKeys\n.. autofunction:: visidata.TableSheet.rowkey\n.. autofunction:: visidata.TableSheet.keystr\n.. autoattribute:: visidata.TableSheet.keyCols\n.. autoattribute:: visidata.TableSheet.nonKeyVisibleCols\n\nTypes\n======\n\nThe value returned by getValue could be many different things:\n\n   - a string\n   - numerically typed\n   - a list or dict\n   - None\n   - a null value (according to ``options.null_value``)\n   - an Exception (error getting)\n   - a Thread (async pending)\n   - any python object\n\nThis value may need to be parsed and/or converted to a consistent type.\nSo, every column has a ``type`` attribute, which affects how it is parsed, displayed, grouped, sorted, and more.\n\nThe default column type is ``anytype``, which lets the underlying value pass through unaltered.\nThis is the only ``type`` for which ``Column.getTypedValue`` can return arbitrary types.\n\nThe classic VisiData column types are:\n\n============  ==================  =========  =================  ============\ntype          description         numeric    command            keystrokes\n============  ==================  =========  =================  ============\n``anytype``   pass-through                   ``type-anytype``   :kbd:`z~`\n``str``       string                         ``type-str``       :kbd:`~`\n``date``      date/time           Y          ``type-date``      :kbd:`@`\n``int``       integer             Y          ``type-int``       :kbd:`#`\n``float``     decimal             Y          ``type-float``     :kbd:`%`\n``currency``  decimal with units  Y          ``type-currency``  :kbd:`$`\n``vlen``      sequence length     Y          ``type-vlen``      :kbd:`z#`\n============  ==================  =========  =================  ============\n\nThe default keybindings for setting types are all on the shifted top left keys on a US keyboard.\n\nUser-defined Types\n~~~~~~~~~~~~~~~~~~~\n\nFundamentally, a type is a function which takes the underlying value and returns an object of a specific type.\nThis function should accept a string and do a reasonable conversion, like Python ``int`` and ``float`` do.\nAnd like those builtin types, this function should produce a reasonable baseline zero (arithmetic identity) when passed no parameters or None.\n\nComputations should generally call ``getTypedValue``, so that the values being used are consistently typed.\n\nIf the underlying value is None, the result will be a ``TypedWrapper``, which provides the baseline zero value for purposes of comparison, but a stringified version of the underlying value for display.\nFor a ``calcValue`` which raises or returns an Exception, ``getTypedValue`` will return a ``TypedExceptionWrapper`` with similar behavior.\n\n\nIn the following, ``TYPE`` is the type (like ``int``, ``date``, etc), and ``typedval`` is an instance of that type.\n\nA VisiData type function or constructor must have certain properties:\n\n    - ``TYPE()`` must return a reasonable default value for *TYPE*.\n    - ``TYPE(typedval)`` must return an exact copy of *typedval*.\n    - ``TYPE(str)`` must convert from a reasonable string representation into *TYPE*.\n    - ``TYPE.__name__`` must be set to the official name of the type function or constructor.\n\nObjects returned by ``TYPE(...)`` must be:\n\n    - comparable (for sorting)\n    - hashable\n    - formattable\n    - roundable (if numeric, for binning)\n    - idempotent (``TYPE(TYPE(v)) == TYPE(v)``)\n\nTypes API\n~~~~~~~~~~~\n\n.. autoclass:: visidata.vd.addType\n.. autofunction:: visidata.vd.isNumeric\n.. versionadded:: 2.1\n.. autofunction:: visidata.isNumeric\n.. deprecated:: 2.1\n    Use ``vd.isNumeric`` instead.\n\nExamples\n~~~~~~~~~\n\n::\n    # Add an ip_address type.\n    vd.addType(ipaddress.ip_address, icon=':', formatter=lambda fmt,ip: str(ip))\n\n    TableSheet.addCommand(None, 'type-ipaddr', 'cursorCol.type=ipaddress.ip_address', 'set type of current column to IP address'\n\nNulls\n~~~~~~\n\nVisiData has a crude concept of null values.  These interact with:\n   a. aggregators: the denominator counts only non-null values\n   b. the Describe Sheet: only null values count in the nulls column\n   c. the ``fill-nulls`` command\n   d. the ``melt`` command only keeps non-null values\n   e. the ``prev-null`` and ``next-null`` commands (:kbd:`z<` and :kbd:`z>`)\n\n- The null values are Python ``None`` and options.null_value if set.\n\n.. note::\n\n    ``options.null_value`` can be used to specify a null value in addition to Python ``None``.\n    The CLI can only set this option to a string like ``''`` (empty string) or ``'NA'``.\n    The option can be set to a different type in ``.visidatarc`` or other code, though:\n\n    ::\n\n        options.null_value = 0.0\n        options.null_value = date(\"1980-01-01\")\n\n.. autofunction:: visidata.BaseSheet.isNullFunc\n\nThere is no direct isNull function, because the possible null values can change at runtime via the above option, and getting an option value is very expensive to do in a bulk operation.\n\nAggregators\n===========\n\nAggregators allow you to gather the rows within a single column, and interpret them using descriptive statistics.\nVisiData comes pre-loaded with a default set like mean, stdev, and sum.\n\n.. autofunction:: visidata.TableSheet.addAggregators\n\n.. autofunction:: visidata.vd.aggregator\n\nThe `type` parameter is optional. It allows you to define the default type of the aggregated column.\n\nExample\n~~~~~~~\n\nAdd aggregator for `numpy's internal rate of return <https://numpy.org/doc/stable/reference/generated/numpy.irr.html>`__ module:\n\n::\n\n    import numpy as np\n    vd.aggregator('irr', np.irr, type=float)\n"
  },
  {
    "path": "docs/api/commands.rst",
    "content": ".. _commands:\n\nCommands\n--------\n\nVisiData is **command-driven**, which means that it only does something when you tell it to.\nOtherwise, it just sits there, waiting for your next command.\n\nEvery command is a discrete unit of behavior that does a defined task and runs to completion.\nFunctions that could take longer than a couple hundred milliseconds should run in their own thread (see :ref:`Threads <threads>`).\n\nEvery command should be **reproducible**: given the same sheet, cursor position, and :ref:`input <input>` string (if relevant), a command should yield identical output (with a few obvious exceptions, like :kbd:random-rows).\n\nAny command which makes changes to a :ref:`saveable sheet<sheets>` is appended to that sheet's **Command Log**.\nSince all state changes must be initiated by a reproducible command, this command log can be `replayed </docs/save-restore>`__.\n\nAdding new commands is a natural way to extend VisiData's functionality.\n\nCommand Overview\n~~~~~~~~~~~~~~~~\n\nCommands and Keybindings are managed in a similar way to options.\nThe same precedence hierarchy is used, so that commands can be created or overridden for a specific type of sheet, or even a specific sheet itself.\n\nSince all Sheets ultimately inherit from ``BaseSheet``, a command on ``BaseSheet`` is effectively a global command.\n\n.. _command-context:\n\nCommand Context\n^^^^^^^^^^^^^^^\n\nThe *execstr* is a string of Python code passed to ``exec()`` when the command is run.\n\n``exec()`` looks up symbols in this order:\n\n-  the current ``sheet``\n-  the ``vd`` object\n-  the ``visidata`` module (see ``addGlobals()`` and ``getGlobals()`` :ref:`below<other-commands>`)\n\nThe ``vd`` and ``sheet`` symbols are available to specify explicitly.\n\n``currow`` is available on TableSheets; it provides access to column values for the current cursor row by name (e.g. ``currow.Price`` returns the typed value of the ``Price`` column for the cursor row).\n\n.. note::\n\n    Unqualified ``options`` in a command execstr will use the sheet-specific options context for the current sheet.\n\n.. warning::\n\n   In an *execstr*, while you can **get** an attribute on ``vd`` or ``sheet`` without specifying the object, to **set** an attribute does require an explicit object.  e.g. instead of ``cursorRowIndex=2``, it must be ``sheet.cursorRowIndex=2``.\n\nCommands API\n~~~~~~~~~~~~\n\n.. autofunction:: visidata.BaseSheet.addCommand\n\nKeybindings\n~~~~~~~~~~~~\n\n   - Use \"``Ctrl+X``\" for :kbd:`Ctrl+X`.\n   - Primarily, plugin authors and users should use ``0-9``, function keys (``F2``), ``Alt+`` for custom keybindings; these are purposefully left available for user keybindings.\n   - Consider not providing a default at all, for infrequently used commands.\n   - Instead give it an easy and memorable longname, and/or a unique *helpstr* which can be searched for in the **Command Help** (:kbd:`g Ctrl+H`) with :kbd:`g/`.\n   - Many other keycodes can be returned from the curses library as strings.\n   - To discover what to use for some unknown key, press that key in VisiData and use the keystroke shown in the status bar.\n\n.. autoattribute:: visidata.vd.allPrefixes\n\n``vd.allPrefixes`` is a list of *prefixes* (keystrokes that don't trigger the end of a command sequence).\nNew prefixes can be added to this list, and then they can also be used as prefixes in keybindings.\n\n.. note::\n\n    Combinations of prefixes are allowed, but only in the specified order: ``g`` must come before ``z``, which must come before ``Alt+``.\n\n.. _other-commands:\n\nOther helpful functions\n~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. autofunction:: visidata.vd.bindkey\n.. autofunction:: visidata.BaseSheet.bindkey\n.. autofunction:: visidata.BaseSheet.execCommand\n.. autofunction:: visidata.addGlobals\n.. autofunction:: visidata.getGlobals\n\nRules for command longnames\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n1) 3 words max, 2 words if possible.  A longname should be short and fit on a keymap.\n\n2) Command classes should be unique in their first 3 chars and ideally mostly in their first 2.\n\n3) Command longnames should be intuitively understandable, or at least not jargony.\n\n4) Longnames should evoke interface, when possible.\n\n5) Use existing verb-object-input structure if possible:\n\nVerbs:\n\n-  ``open``: push new sheet\n-  ``jump``: push existing sheet\n-  ``dup``: push copy of sheet\n-  ``show``: display on status\n-  ``go``: move the cursor\n-  ``scroll``: change the visible screen area without changing the cursor\n-  ``addcol``: add new column to this sheet\n-  ``setcol``: set selected cells in this column\n-  ``search``: search one or more columns\n-  ``searchr``: search reverse\n-  ``select/unselect/stoggle``: add/remove rows from selected rows\n-  ``syscopy/syspaste``: copy/paste to system clipboard\n-  ``sysopen``: open with $EDITOR or other external program\n\nObjects:\n\n- ``-all``: all sheets or all visible columns\n- ``-col``: cursorCol\n- ``-cols``: all visible columns\n- ``-cells``: this column, selected rows\n- ``-selected``: selected rows\n\nInputs:\n\n- ``-expr``: python expression\n- ``-regex``: python regex\n\nMany others are used, see the full command list for inspiration.\n\nExamples\n~~~~~~~~\n\n::\n\n    @Sheet.api\n    def show_hello(sheet):\n        vd.status(sheet.options.disp_hello)\n\n    # `sheet` members and `vd` members are available in the execstr scope\n    BaseSheet.addCommand(None, 'show-hello', 'show_hello()', 'show a warm greeting')\n\n    # bind Shift+H, Ctrl+H, and Alt+H to this command\n    BaseSheet.bindkey('H', 'show-hello')\n    BaseSheet.bindkey('Ctrl+H', 'show-hello')\n    BaseSheet.bindkey('Alt+h', 'show-hello')\n"
  },
  {
    "path": "docs/api/conf.py",
    "content": "# Configuration file for the Sphinx documentation builder.\n#\n# This file only contains a selection of the most common options. For a full\n# list see the documentation:\n# https://www.sphinx-doc.org/en/master/usage/configuration.html\n\n# -- Path setup --------------------------------------------------------------\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n#\n# import os\n# import sys\n# sys.path.insert(0, os.path.abspath('.'))\n\n\n# -- Project information -----------------------------------------------------\n\nproject = 'VisiData'\ncopyright = '2016-2020, Saul Pwanson'\nauthor = 'Saul Pwanson'\n\n# The full version, including alpha/beta/rc tags\nrelease = 'v2.0'\n\n\n# -- General configuration ---------------------------------------------------\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom\n# ones.\nextensions = ['recommonmark', 'sphinx.ext.autodoc', 'sphinxarg.ext', 'sphinx.ext.napoleon', 'sphinx_markdown_tables', 'sphinx.ext.viewcode']\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['_templates']\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\n# This pattern also affects html_static_path and html_extra_path.\nexclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']\n\n\n# -- Options for HTML output -------------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\n#\nhtml_theme = 'alabaster'\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = ['_static']\n\n# These paths are either relative to html_static_path\n# or fully qualified paths (eg. https://...)\nhtml_css_files = [\n        'css/custom.css',\n        ]\n"
  },
  {
    "path": "docs/api/data.rst",
    "content": "Selected Rows\n-------------\n\nEach TableSheet has a set of *selected rows*, which is a strict subset of the rows on the sheet.\n\n.. autoattribute:: visidata.TableSheet.selectedRows\n.. autoattribute:: visidata.TableSheet.someSelectedRows\n.. versionchanged:: 2.1\n.. autoattribute:: visidata.TableSheet.onlySelectedRows\n.. versionchanged:: 2.1\n.. autoattribute:: visidata.TableSheet.nSelectedRows\n\n.. autofunction:: visidata.TableSheet.selectRow\n.. autofunction:: visidata.TableSheet.unselectRow\n.. autofunction:: visidata.TableSheet.isSelected\n\n.. autofunction:: visidata.TableSheet.clearSelected\n\n.. autofunction:: visidata.TableSheet.selectByIdx\n.. autofunction:: visidata.TableSheet.unselectByIdx\n\n.. autofunction:: visidata.TableSheet.select\n.. autofunction:: visidata.TableSheet.unselect\n.. autofunction:: visidata.TableSheet.deleteSelected\n\n\n.. note::\n\n    To clear the set of selected rows before any bulk selection, set ``options.bulk_select_clear`` to True.\n    The status message will include \"instead\" as a reminder that the option is enabled.\n\n.. warning::\n\n    ``selectedRows`` feels like a list, but it's actually a property that iterates over all rows to generate the selected rows in sheet order.\n    With large datasets, collecting the list of selected rows itself can take a large time, regardless of the number of rows that are actually selected.\n    So instead of using selectedRows in the execstr, call an ``@asyncthread`` ``@TableSheet.api`` function which uses sheet.selectedRows.\n    Use it as a parameter immediately or save it to a local variable on the first usage, to avoid unnecessary work.\n\nSorting\n-------\n\n.. autofunction:: visidata.TableSheet.orderBy\n.. autofunction:: visidata.TableSheet.sort\n"
  },
  {
    "path": "docs/api/extensible.rst",
    "content": "API Extensions\n===============\n\nOne of VisiData's core design goals is **extensibility**.\nMany of its features can exist in isolation, and can be enabled or disabled independently, without affecting other features.\n\nSo, VisiData encourages plugin authors to provide new features in a similarly modular form.\nThese features can be enabled by importing the module, or left disabled by not importing it.\nModules should degrade or fail gracefully if they depend on another module which is not available.\n\nThe ``Extensible`` base class\n-----------------------------\n\nPython classes usually implement all methods and members in the class definition, which exists in a single source file. A modular VisiData feature, by contrast, is self-contained within a separate source file, while providing methods on previously-defined classes.\n\nCore functionality can be changed through 'monkey-patching', which is the ability for modules loaded after startup to add or change methods on existing classes.\n\nTo make this a bit easier, the core classes in VisiData inherit from the ``Extensible`` class, which provides some helper functions and decorators to make monkey-patching easier and more consistent.\nAll of their subclasses are then also naturally Extensible.\n\nExtensible API\n--------------\n\n.. autoclass:: visidata.Extensible\n\n.. autofunction:: visidata.Extensible.api\n\nThis decorator defines a member function on a specific class.\n\nBecause this is a member function, the first parameter is the instance itself.\nIf this function were defined in the class, the first parameter would be named ``self`` by Python convention.\nWhen members are defined in other files, it is better to use a specific local object name instead of ``self``.\nUse ``sheet`` for any Sheet type, ``col`` for any Column type, and ``vd`` for VisiData (which will shadow the global ``vd`` object, but as it is a singleton, they will be identical).\n\n::\n\n        @VisiData.api\n        def vd_func(vd, ...):\n            pass\n\n        @Sheet.api\n        def sheet_func(sheet, ...):\n            pass\n\n        @Column.api\n        def col_func(col, ...):\n            pass\n\n``Extensible.api`` can be used either to add new member functions, or to\noverride existing members. To call the original function, use\n``func.__wrapped__``:\n\n::\n\n        @Sheet.api\n        def addRow(sheet, row):\n            # do something first\n            addRow.__wrapped__(sheet, row)\n\n        ....\n\n        sheet.addRow(row)\n\n.. autofunction:: visidata.Extensible.class_api\n\n.. autofunction:: visidata.Extensible.property\n\nThis acts just like the ``@property`` decorator, if it were defined inline to the class.\n\n.. autofunction:: visidata.Extensible.lazy_property\n\nThis works like ``@property``, except it only computes the value on first access, and then caches it for every subsequent usage.\n\n.. note::\n\n    Because of how Python instantiates classes, extensions monkey-patched into a class are not also added to already-instantiated objects.\n    So global sheets defined by a plugin should be added to the VisiData object as a ``@VisiData.lazy_property``.\n    This way, they are not created until their first use, which allows them to take advantage of Sheet extensions that were loaded after the plugin.\n\n\n.. autofunction:: visidata.Extensible.init\n\nIf a module wants to store some data on an Extensible class, it can add\na member with a call to that class' ``init()``:\n\n::\n\n    TableSheet.init('foo', dict)\n\nThis monkey-patches ``TableSheet.__init__`` to add the instance member\n``foo`` to every TableSheet on construction, and to initialize it with an\nempty dict. To provide an initial non-object value:\n\n::\n\n    TableSheet.init('bar', lambda: 42)\n\n.. note::\n\n    This will not work with the ``vd`` because it is instantiated very early.\n    Instead, assign member variables directly on ``vd`` in the toplevel scope:\n\n    ::\n\n        vd.bar = []\n\n    This member can then be used like any other member of the class.\n\nBy default, when an instance of the class is copied, a member specified with this ``init()`` is reset to a newly constructed value (by calling the constructor again).\nIf *copy* is ``True``, then a copy is made of the member for the new instance.\n\n.. autofunction:: visidata.vd.global_api\n\nAll features (and plugins) should expose functions and classes to plugins in one of these ways:\n\n1. with `@VisiData.api` (or @Sheet.api): for most methods\n\nThese can be used in an execstr as though they were global (attributes on `vd` and `sheet` are both implicitly in scope in an execstr).\n\nOutside of an execstr, use `vd.funcname(...)` (or `sheet.funcname(...)`).\n\nNote that classes can be annotated with `@VisiData.api` also.\n\n2. with `addGlobals({\"funcname\": funcname})`: for classes and methods internal to VisiData\n\nThese can be used via direct import:\n\n`from visidata import SomeInternalClass`\n`from plugins.myplugin import HelperClass`\n\nThis is acceptable for commonly-used classes.\n\nSee :ref:`getGlobals() and addGlobals() <other-commands>`.\n\nWhat to extend: ``Sheet``, ``Column``, ``VisiData``, or globals?\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nLook at what the function uses.\nIf it uses a specific column, use ``@Column.api`` with ``col`` as the first \"self\" argument, and if you need access to the sheet, use ``col.sheet``.\n\nIf the function naturally takes a sheet, use ``@Sheet.api`` with first argument of ``sheet``.\n\nOtherwise, extend the VisiData object if neither Column nor Sheet are relevant.\n``vd`` is always available as a global regardless.\n\nClasses and functions which don't use ``vd`` or ``sheet`` at all are candidates for the list of bare globals in ``__all__``.\n\n\nThe ``vd`` singleton\n-----------------------------\n\nThe VisiData class is a singleton object, containing all of VisiData's global functions and state for the current session.\nThis object should always be available as ``vd``.\n\nCalling conventions\n~~~~~~~~~~~~~~~~~~~\n\nWhen calling functions on ``vd`` or ``sheet`` outside of a Command *execstr*, they should be properly qualified:\n\n::\n\n    @Sheet.api\n    def show_hello(sheet):\n        vd.status(sheet.options.disp_hello)\n\n    BaseSheet.addCommand(None, 'show-hello', 'show_hello()')\n\nThe current **Sheet** and the **VisiData** object are both in scope for :ref:`execstrs <command-context>`, so within an *execstr*, the ``sheet.`` or ``vd.`` may be omitted, as in the hello world example:\n\n::\n\n    BaseSheet.addCommand(None, 'show-hello', 'status(options.disp_hello)')\n"
  },
  {
    "path": "docs/api/guides.rst",
    "content": "Guides\n=======\n\nA Guide is an in-app writeup of a particular feature that gives a basic synopsis of how to use it and explains how it works together with other features.\n\nOpen the Guide Index with ``Space open-guide-index`` within VisiData or ``vd -P open-guide-index`` from the CLI.\n\n\n.. note::\n\n    Guides that have not been written yet are grayed out.\n    We love to get help with documentation, please get in touch if you want to write one or have other suggestions!\n\nHere's an outline for adding a guide, with our writing style preferences:\n\n1. Launch **GuideIndex** and find the ``name`` of the guide.\n2. Create a markdown file ``visidata/guides/{name}.md``.\n3. Write the guide.\n\n\nHello Guide\n------------\n\nThis same general structure and process should work for most guides.\n\nStep 1. Launch **GuideIndex** and find the ``name`` of the guide\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. image:: ../assets/guide.png\n    :width: 1000\n\nWithin VisiData, ``Space open-guide-index`` to see the Table of Contents.\n\n``gv`` to show the **name** column. Choose a guide to work on, and note down its **name**.\nFor example: **MacrosSheet**.\n\n::\n\nStep 2. Create a markdown file ``visidata/guides/{name}.md``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIn this example, we would create a ``visidata/guides/MacrosSheet.md``.\n\nAt the top of the file, optionally place template front matter, using YAML syntax:\n\n::\n\n    ---\n    sheettype: Sheet\n    ---\n\nThis front matter will override the default configuration for guides.\n\nAt the moment, the main configurable option is ``sheettype``. ``sheettype`` is a string for the type of sheet that the guide involves. VisiData uses this to auto-complete command + options patterns (see \"stylings of note\").\n\nIts default value is ``Sheet`` (aka TableSheet), the base class for every table sheet.\n\n.. note::\n\n    The vast majority of guides will not need to set the front matter or change the default sheet type. Only set it if command + option patterns are failing to auto-complete.\n\n    Feel free to ask us if unsure which sheet type to use.\n\n\n\nStep 3. Write the guide\n~~~~~~~~~~~~~~~~~~~~~~~\n\nNext, fill out the text for the guide:\n\n::\n\n    ---\n    sheettype: Sheet\n    ---\n    # Macros\n    Macros allow you to bind a command sequence to a keystroke or longname, to replay when that\n    keystroke is pressed or the command is executed by longname.\n\n    The basic usage is:\n        1. {help.commands.macro-record}\n        2. Execute a series of commands.\n        3. `m` again to complete the recording, and prompt for the keystroke or longname to bind it to.\n\n    # The Macros Sheet\n\n    - {help.commands.macro-sheet}\n\n    - `d` (`delete-row`) to mark macros for deletion.\n    - {help.commands.commit_sheet}\n    - `Enter` (`open-row`) to open the macro in the current row, and view the series of commands composing it.\n    '''\n\nRead the `style guide </docs/api/style>`_ for an overview of the stylings and markup.\n"
  },
  {
    "path": "docs/api/index.rst",
    "content": ".. VisiData documentation master file, created by\n   sphinx-quickstart on Wed Sep 23 19:53:19 2020.\n   You can adapt this file completely to your liking, but it should at least\n   contain the root `toctree` directive.\n\n=====================================\nVisiData Plugin Authors Guide (v2.0)\n=====================================\n\nVisiData is designed to be **extensible**.\nAnything that can be done with Python (which is basically everything) can be exposed in a VisiData interface with a minimal amount of code.\n\nVisiData is also designed to be **modular**.\nMany of its features can exist in isolation, and can be enabled or disabled independently, without affecting other features.\nModules should degrade or fail gracefully if they depend on another module which is not loaded.\n\n.. _hello-world:\n\nHello World\n===========\n\nAs a simple example, this code can be placed in ``~/.visidatarc``:\n\n::\n\n    BaseSheet.addCommand('1', 'hello-world', 'status(\"Hello world!\")')\n\nThis extends VisiData so that when :kbd:`1` is pressed on any sheet, the command called ``hello-world`` with the Python code ``status(\"Hello world!\")`` is executed, and this prints the string \"Hello world!\" on the status bar.\n\n----\n\n.. toctree::\n   :maxdepth: 1\n   :caption: Table of contents\n   :name: mastertoc\n\n   options\n   commands\n   loaders\n   extensible\n   sheets\n   columns\n   data\n   modify\n   interface\n   async\n   guides\n   style\n   plugins\n\n----\n\nToplevel functions\n===================\n\n.. autofunction:: visidata.vd.view\n.. autofunction:: visidata.vd.view_pandas\n.. autofunction:: visidata.vd.run\n"
  },
  {
    "path": "docs/api/interface.rst",
    "content": "Drawing\n========\n\nThese functions should rarely be necessary to use.\n``BaseSheet.draw`` must be overridden on non-tabular sheets.\n\n.. autofunction:: visidata.BaseSheet.refresh\n.. autofunction:: visidata.vd.redraw\n.. autofunction:: visidata.BaseSheet.draw\n\n.. autoclass:: visidata.SuspendCurses\n\nWindow\n========\n\n.. autoattribute:: visidata.BaseSheet.windowWidth\n.. autoattribute:: visidata.BaseSheet.windowHeight\n\n.. data:: visidata.TableSheet.topRowIndex\n\nTop row in the window, as an index into ``TableSheet.rows``.  Settable.\n\n.. data:: visidata.TableSheet.leftVisibleColIndex\n\nLeftmost column in the window (after key columns), as an index into ``TableSheet.visibleCols``.  Settable.\n\nCursor\n======\n\nEvery Sheet has a cursor, which makes it easy to interact individual elements and slices of data.\n\nA ``TableSheet`` has a row cursor and a column cursor, which overlap on a single cell.\n\n.. data:: visidata.TableSheet.cursorVisibleColIndex\n\nColumn cursor, as an index into ``TableSheet.visibleCols``.  Settable.\n\n.. data:: visidata.TableSheet.cursorRowIndex\n\nRow cursor as an index into ``TableSheet.rows``.  Settable.\n\n.. autofunction:: visidata.BaseSheet.checkCursor\n\n.. autoattribute:: visidata.TableSheet.cursorCol\n.. autoattribute:: visidata.TableSheet.cursorValue\n.. autoattribute:: visidata.TableSheet.cursorTypedValue\n.. autoattribute:: visidata.TableSheet.cursorDisplay\n\n.. autofunction:: visidata.TableSheet.cursorDown\n.. autofunction:: visidata.TableSheet.cursorRight\n.. autofunction:: visidata.TableSheet.moveToNextRow\n.. autofunction:: visidata.TableSheet.moveToCol\n.. autofunction:: visidata.TableSheet.moveToRow\n\n.. _input:\n\nInput\n======\n\n.. autofunction:: visidata.vd.input\n.. autofunction:: visidata.vd.choose\n.. autofunction:: visidata.vd.chooseOne\n.. autofunction:: visidata.vd.chooseMany\n.. autofunction:: visidata.vd.confirm\n.. autofunction:: visidata.vd.launchEditor\n\n.. _status:\n\nStatus\n======\n\n.. autofunction:: visidata.vd.status\n.. autofunction:: visidata.vd.warning\n.. autofunction:: visidata.vd.fail\n.. autofunction:: visidata.vd.exceptionCaught\n.. autoclass:: visidata.ExpectedException\n\nExamples\n^^^^^^^^\n\n::\n\n    with SuspendCurses():\n        try:\n            return subprocess.call('less', '/etc/passwd')\n        except Exception as e:\n            vd.exceptionCaught(e)\n\n::\n\n    passwd = vd.input(\"password: \", display=False)\n\n    # initial value is the formatted value under the cursor\n    vd.status(vd.input(\"text to show: \", value=cursorDisplay))\n\n.. _colors:\n\nColors\n======\n\nThe TableSheet allows rows, columns, or individual cells to be colorized according to a Python function.\n\nSee `Color Docs <../colors>`__ for information on how to configure specific colors and attributes.\n\n.. data:: visidata.TableSheet.colorizers\n\nList of Colorizers for this class.  Class member.\n\nDo not manually update this list to add colorizers on a specific sheet.\nInstead use addColorizer and removeColorizer.\n\n.. autofunction:: visidata.TableSheet.addColorizer\n.. autofunction:: visidata.TableSheet.removeColorizer\n\n.. autoclass:: visidata.DisplayWrapper\n\n.. autoclass:: visidata.RowColorizer\n.. autoclass:: visidata.ColumnColorizer\n.. autoclass:: visidata.CellColorizer\n\n- *precedence*: use color from colorizer with the greatest *precedence* value.\n- *coloropt*: name of color option, or ``None``.\n- *func*: ``func(sheet, col, row, value)`` is called for each cell as it is being rendered. Return True when *coloropt* should be applied to the cell.  If *coloropt* is None, ``func(...)`` can return the relevant coloropt (or None) instead.\n\n- Attributes (underline, bold, reverse) combine, regardless of *precedence*.  Only colors will override other.\n\n- The *value* passed to the Colorizer *func* is a ``DisplayWrapper``, which encapsulates the entirety of a displayed cell.  Use ``val.value`` to get the typed value (or None), or ``val.display`` for the displayed string.\n\n.. note::\n\n    Colorizers are called for headers and separators, in addition to cells.\n    For a header, *row* will be None; for a separator, *col* will be None.\n    So a RowColorizer needs to include a check that *row* is valid, a ColumnColorizer needs to check that *col* is valid, and a cell colorizer needs to check both.\n    A simple check for non-False (see Examples) is sufficient.\n\n\n\nExamples\n^^^^^^^^\n\n::\n\n    class DescribeSheet(ColumnsSheet):\n        colorizers = [\n            # colors key 'rows' on the like key columns\n            RowColorizer(7, 'color_key_col', lambda s,c,r,v: r and r in r.sheet.keyCols),\n        ]\n\n    class OptionsSheet(TableSheet):\n        colorizers = [\n            # colors cells\n            CellColorizer(3, None, lambda s,c,r,v: v.value if r and c in s.columns[1:3] and r.name.startswith('color_') else None)\n        ]\n\nMenu System\n===========\n\nFeatures and plugins can add commands to the hierarchical menu system (new in v2.6).\n\n.. autofunction:: visidata.vd.runMenu\n.. autofunction:: visidata.vd.addMenu\n.. autofunction:: visidata.vd.addMenuItem\n\n.. autoclass:: visidata.Menu\n.. data:: visidata.vd.menus\n\n`vd.menus` contains the hierarchical list all Menu() objects, for exploration.\n\nExamples\n^^^^^^^^\n\n::\n\n    # add a single command to an existing menusubmenu with multiple commands\n    vd.addMenuItem('Column', 'Add column', 'enhance', 'enhance-col')\n\n    # add a submenu with multiple commands\n    vd.addMenu(Menu('Data', Menu('Enhance',\n        Menu('this column', 'enhance-col'),\n        Menu('all columns', 'enhance-cols'),\n    )))\n\n    # activate menu and navigate to Data»Enhance\n    vd.runMenu('Data', 'Enhance')\n"
  },
  {
    "path": "docs/api/loaders.rst",
    "content": "Loaders\n=======\n\n.. note::\n\n    You are welcome to submit new loaders to core VisiData, or as plugins. Please, see our `checklists for contribution <https://visidata.org/docs/contributing>`__.\n\nCreating a new loader for a data source is simple and straightforward.\n\n1. ``open_filetype`` boilerplate\n2. ``FooSheet`` subclass with rowtype and rowdef\n3. ``FooSheet`` reload or iterload\n4. ``FooSheet.columns``\n\nHello Loader\n------------\n\nHere's a step-by-line breakdown of a basic loader, which reads in a text file as a series of lines.\nThis same general structure and process should work for all loaders.\n\nStep 1. ``open_<filetype>`` boilerplate\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n    @VisiData.api\n    def open_readme(vd, p):\n        return ReadmeSheet(p.base_stem, source=p)\n\nThis is used for filetype ``readme``, which is used for files with extension ``.readme``, or when specified manually with the ``filetype`` option like ``--filetype=readme`` or ``-f readme`` on the command line.\n\nThe ``open_<filetype>`` function usually looks exactly like this, with only the type of :ref:`Sheet <sheets>` changed.\n\nThe *p* argument is a :ref:`visidata.Path<vd-path>`.\n\nThe actual loading happens in the Sheet.  An existing :ref:`sheet type<sheets>` can be used, or a new sheet type can be created.\n\n::\n\nStep 2. Create a Sheet subclass\n-------------------------------\n\n::\n\n    class ReadmeSheet(TableSheet):\n        rowtype = 'lines'   # rowdef: [str]\n\n-  TableSheet (and its alias ``Sheet``) is the basic tabular sheet of rows\n   and columns. Most loader sheets will inherit from TableSheet, but\n   some might inherit from more specialized sheets if they share\n   functionality, or from ``BaseSheet`` if they are not tabular (like\n   the ``Canvas``).\n\n-  The ``rowtype`` member is only displayed on the :ref:`right-hand\n   status <status>`. It should be **plural**. If not given, it is\n   \"``rows``\". It's helpful to give the user an subconscious check of\n   the kind of sheet being shown.\n\n-  The ``rowdef`` should be given for all loaders, even though it is\n   only a comment. It specifies the expected Pythonic structure of the\n   rows on this sheet. This is important because nearly every other\n   component of the sheet depends on this structure.\n\nStep 3. Load data into rows, and yield them one-by-one\n------------------------------------------------------\n\n``reload()`` is called when the Sheet is first pushed, and thereafter by the user with :kbd:`Ctrl+R`.\nThe default ``TableSheet.reload()`` iterates through the rows returned by ``TableSheet.iterload()``, and takes care of a few common tasks (like running async and resetting the ``rows`` member to a new list).\n\nEach loader for a tabular sheet should overload ``iterload()``, which uses the Sheet ``source`` to populate and then yield each row one-by-one.\n\n::\n\n    class ReadmeSheet(TableSheet):\n        rowtype = 'lines'   # rowdef: [str]\n\n        def iterload(self):\n            for line in self.source:\n                yield [line]\n\n.. warning::\n   ``str`` by itself is not a valid rowdef.\n\n   Each row must have a unique *rowid*, which by default is the Python ``id()`` of the row.\n   Because Python interns common strings, strings with the same value will have the same *id*.\n   This would break a lot of features, like row selection for instance.\n\n   Also, as an immutable type, it would be annoying to not be able to modify it.\n\n   So it needs to be wrapped in a Python ``list``, which is guaranteed to be unique, and also mutable.\n\n\n-  ``sheet.source`` is the :ref:`visidata.Path<vd-path>` given as the *source* kwarg to ``ReadmeSheet()`` in ``open_readme``. \n\n  .. note::\n\n     Any *kwarg* passed to a Sheet constructor will be stored on the sheet in an attribute of the same name.\n\n  .. note::\n\n    `visidata.Path <vd-path>` objects are Path-like but have some additional features, like being iterable (yielding their contents one line at a time).\n\n   While there is a ``visidata.Path.read_text()`` function, do **not** use ``for line in p.read_text().splitlines()`` in a loader, as that will read the entire file before returning the first line.\n   A loader must be able to handle arbitrary amounts of data (including data too large to fit in memory), so this will not work.\n\n   ``Path.__iter__`` is optimized to read the file a small amount at a time, so ``for line in path`` is workable for a textual line-based file format.\n\n- If the loader requires a third-party library, import it inside ``iterload()`` or ``reload()`` (or ``open_<filetype>`` if necessary).\n  Do not import at the toplevel, or ``vd`` will fail to start when the library is not installed.\n    - preferably, import it using ``modname = importExternal(modname, pythonPackageName``. If the user does not have the package installed, it will output instructions to ``pip3 install pythonPackageName``.\n\n.. autofunction:: visidata.vd.importExternal\n\nBy default, a Sheet has one Column which just displays a string representation of the row.\nSo the above example is a good starting point for any loader; just get the rows however they come most easily from the source, and launch ``vd`` with a sample dataset in that format.\nThen use :kbd:`Ctrl+Y` to explore the resulting Python object, to find what attributes to show on the sheet.\n\nreload()\n~~~~~~~~\n\nFor more control over the whole loading process, ``BaseSheet.reload()`` can be overridden instead of ``iterload()``:\n\n::\n\n        @asyncthread\n        def reload(self):\n            self.rows = []\n            for line in self.source:\n                self.addRow([line])\n\n-  ``@asyncthread`` launches the decorated function in its own thread.  See :ref:`Threads<threads>`\n-  ``sheet.rows`` must always be reset to a new list.  **Never** call ``sheet.rows.clear()``.\n-  Always add rows using :ref:`addRow()<sheets>`.\n\nSupporting asynchronous loaders\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nLoading a large dataset in the main thread will cause the interface to freeze.\nHowever, the basic TableSheet ``reload`` and ``iterload`` structure results in an :ref:`asynchronous <threads>` loader by default.\nSince rows are yielded **one at a time**, they become available as they are loaded, and ``reload`` itself is decorated with an ``@asyncthread``, which causes it to be launched in a new thread.\n\n- All row iterators should be wrapped with :ref:`Progress<progress>`.\n  This updates the progress percentage as it passes each element through.\n\n- Do not depend on the order of ``rows`` after they are added; e.g. do not reference ``rows[-1]``.  The order of rows may change during an asynchronous loader.\n\n- Catch any ``Exception`` that might be raised while handling a specific row, and add them as the row instead.  Uncaught exceptions will cause the loader thread to abort.\n\n- Do not use a bare ``except:`` clause or the loader thread will not be cancelable with :kbd:`Ctrl+C`.\n\nProgress and Exception example\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n        class FooSheet(Sheet):\n            ...\n            def iterload(self):\n                for bar in Progress(foolib.iterfoo(self.source.open_text())):\n                    try:\n                        r = foolib.parse(bar)\n                    except Exception as e:\n                        r = e\n                    yield r\n\nTesting for Loader Performance\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nTest the loader with a very large dataset to make sure that:\n\n-  the first rows appear immediately;\n-  the progress percentage is being updated;\n-  the loader can be cancelled (with :kbd:`Ctrl+C`).\n\n.. _enumerate-columns:\n\nStep 4. Enumerate the Columns\n------------------------------\n\nEach sheet has a ``columns`` attribute with a unique list of ``Column`` objects. Each ``Column`` provides a\ndifferent view into the row.\n\n::\n\n        class FooSheet(Sheet):\n            rowtype = 'foobits'  # rowdef: foolib.Bar object\n\n            columns = [\n                ColumnAttr('name'),  # foolib.Bar.name\n                Column('bar', getter=lambda col,row: row.inside[2],\n                              setter=lambda col,row,val: row.set_bar(val)),\n                Column('baz', type=int, getter=lambda col,row: row.inside[1]*100)\n            ]\n\nIn general, set ``columns`` as a class member containing a list of\nstatic columns. If the columns aren't known until data is loaded,\nreload/iterload can add new columns using :ref:`addColumn() <tablesheet>`.\n\nIf the rowdef is a ``list``, and the columns are dynamic, :ref:`SequenceSheet.reload() <other-sheets>` could handle the Column creation.\n\n::\n\n    class FooSheet(SequenceSheet):\n        rowtype = 'foobits'  # rowdef: a list, which is a sequence of values\n\n        def iterload(self):\n            with foolib.iterfoo(self.source.open_text() as f:\n                r = foolib.parse(bar)\n                yield r\n\n\nColumn attributes\n~~~~~~~~~~~~~~~~~\n\nColumns have several attributes; all except *name* are **optional** arguments to the constructor:\n\n-  *name*: should be a valid Python identifier and unique among the column names on the sheet.  (Otherwise the column cannot be used in an expression.)\n-  *type*: can be ``str``, ``int``, ``float``, ``date``, ``currency``, or a custom type.  By default it is ``anytype``, which passes the original value through unmodified.\n-  *width*: the initial width for the column. ``0`` means hidden; ``None`` (default) means calculate on first draw.\n\nColumn getters can be any function, but many loaders are satisfied with a static list of ``ItemColumn`` (for values in dict and list rowdefs) and/or ``AttrColumn`` (for a members or attributes directly on the row object).\nThis is dependent on the loader function; some loaders may prefer to do less parsing to load faster, and then the Columns will need to be correspondingly more complicated.\n\nSee the :ref:`Columns section <columns>` for a complete API.\n\nPassthrough options\n~~~~~~~~~~~~~~~~~~~\n\nLoaders which use a Python library (internal or external) are encouraged to pass its kwargs using ``**options.getall(\"foo_\")`` interface.\nFor modules like ``csv`` which expose them as kwargs to some function or constructor, this is very easy:\n\n::\n\n        rdr = csv.reader(fp, **csvoptions())\n\nFull Example\n~~~~~~~~~~~~\n\nThis is a completely functional loader for the ``sas7bdat`` (SAS dataset file) format, thanks to Jared Hobbs' `sas7bdat package <https://bitbucket.org/jaredhobbs/sas7bdat>`__.\n\n::\n\n    from visidata import Sheet, ItemColumn, Progress\n\n    @VisiData.api\n    def open_sas7bdat(vd, p):\n        return SasSheet(p.base_stem, source=p)\n\n    class SasSheet(Sheet):\n        def iterload(self):\n            import sas7bdat\n            SASTypes = { 'string': str, 'number': float, }\n\n            self.dat = sas7bdat.SAS7BDAT(str(self.source),\n                                         skip_header=True,\n                                         log_level=logging.CRITICAL)\n\n            self.columns = []\n            for col in self.dat.columns:\n                self.addColumn(ItemColumn(col.name.decode('utf-8'),\n                                         col.col_id,\n                                         type=SASTypes.get(col.type, anytype)))\n\n            with self.dat as fp:\n                yield from Progress(fp, total=self.dat.properties.row_count)\n\n\nGuessing Filetypes\n==================\n\nWhen loading a file, VisiData tries to infer its filetype by peeking at the initial lines of the file and guessing from its structure.\n\n``vd.guess_<filetype>(path)`` contains this logic for checking whether a file might be ``<filetype``.\n\nIf those structures are not present, the function should return nothing. If they are, the function should return a dictionary with:\n\n- ``filetype`` being the filetype they detect (corresponding to the ``vd.open_<filetype>``)\n- ``_likelihood`` (optional) being a number from 0-10, 10 being most likely and 0 meaning a last ditch effort if nothing else will take it\n- any other key/values will be set as options on the *Sheet* the ``open_<filetype>`` function returns\n\n`Examples of guess_filetype functions <https://github.com/saulpw/visidata/commit/4743f92bb855cf931d896e65845c549ce6027e2f>`_\n\n\n::\n\n        @VisiData.api\n        def guess_foo(vd, p):\n            import foobar\n            if p.open_text().read(8).startswith(\"#Foo\"):\n                enc = foobar.encoding(p)\n                return dict(filetype='foo', foo_encoding=enc)\n\n\nSavers\n=======\n\nA full-duplex loader requires a **saver**.\nThe saver iterates over all ``rows`` and ``visibleCols``, calling ``getValue``, ``getDisplayValue`` or ``getTypedValue`` as the saving format allows, and saves the results in its format to the given *path*.\nSavers should be decorated with ``@VisiData.api`` in order to make them available through the ``vd`` object's scope.\n\n.. autofunction:: visidata.vd.save_txt\n\n-  *p* is a :ref:`visidata.Path <vd-path>` object referencing the file being written to.\n-  *sheets* is a list of 1 or more sheets to be saved.\n\nThe saver should preserve the column names and translate their types into ``foolib`` semantics, but other attributes on the Columns are generally not saved.\n\nSavers which can handle typed values should use ``Column.getTypedValue``, and displayable savers (like html, markdown, csv) should use ``Column.getDisplayValue`` (which takes into account the column's *fmtstr*).\n\nExample\n^^^^^^^\n\nWith this example, saving as filetype ``table`` will call the `tabulate library <https://github.com/astanin/python-tabulate>`__ to save the data in any number of text formats, specified by the ``tbl_tablefmt`` option.\n(Several built-in savers use ``tabulate`` also, but those savers work a little differently, as each tablefmt is available as a direct save filetype.)\n\n::\n\n    vd.option('tbl_tablefmt', 'simple', 'file format to save with \"table\" filetype')\n\n    def get_rows(sheet, cols):\n        for row in Progress(sheet.rows):\n            yield [ col.getDisplayValue(row) for col in cols ]\n\n    @VisiData.api\n    def save_table(path, *sheets):\n        import tabulate\n\n        with path.open_text(mode='w') as fp:\n            for vs in sheets:\n                fp.write(tabulate.tabulate(\n                    get_rows(vs, vs.visibleCols),\n                    headers=[ col.name for col in vs.visibleCols ],\n                    **options.getall('tbl_')))\n\n.. _vd-path:\n\nvisidata.Path\n=============\n\n``visidata.Path`` is a wrapper around Python's builtin ``pathlib.Path`` that can also handle non-filesystem files (URLs, stdin, files within archives).\n\nThe ``given`` attribute is new to ``visidata.Path``.\nOther functions listed here are wrappers around the equivalent ``pathlib.Path`` functions, with specialized functionality as needed for non-filesystem files.\nAll other accesses are forwarded to the inner ``pathlib.Path`` object, but will probably not work for non-filesystem files.\n\n.. autoattribute:: visidata.Path.given\n\n.. autofunction:: visidata.Path.exists\n.. autofunction:: visidata.Path.open\n.. autofunction:: visidata.Path.open_text\n.. autofunction:: visidata.Path.read_text\n.. autofunction:: visidata.Path.open_bytes\n.. autofunction:: visidata.Path.read_bytes\n.. autofunction:: visidata.Path.stat\n.. autofunction:: visidata.Path.with_name\n\nURL Scheme Loaders\n---------------------------------------\n\nWhen VisiData tries to open a URL with schemetype of ``foo`` (i.e.\nstarting with ``foo://``), it calls ``openurl_foo(urlpath, filetype)``.\n``urlpath`` is a ``UrlPath`` object, with attributes for each of the\nelements of the parsed URL.\n\n``openurl_foo`` should return a Sheet or call ``error()``. If the URL\nindicates a particular type of Sheet (like ``magnet://``), then it\nshould construct that Sheet itself. If the URL is just a means to get to\nanother filetype, then it can call ``openSource`` with a Path-like\nobject that knows how to fetch the URL:\n\n::\n\n        def openurl_foo(p, filetype=None):\n            return openSource(FooPath(p.url), filetype=filetype)\n"
  },
  {
    "path": "docs/api/make.bat",
    "content": "@ECHO OFF\r\n\r\npushd %~dp0\r\n\r\nREM Command file for Sphinx documentation\r\n\r\nif \"%SPHINXBUILD%\" == \"\" (\r\n\tset SPHINXBUILD=sphinx-build\r\n)\r\nset SOURCEDIR=.\r\nset BUILDDIR=_build\r\n\r\nif \"%1\" == \"\" goto help\r\n\r\n%SPHINXBUILD% >NUL 2>NUL\r\nif errorlevel 9009 (\r\n\techo.\r\n\techo.The 'sphinx-build' command was not found. Make sure you have Sphinx\r\n\techo.installed, then set the SPHINXBUILD environment variable to point\r\n\techo.to the full path of the 'sphinx-build' executable. Alternatively you\r\n\techo.may add the Sphinx directory to PATH.\r\n\techo.\r\n\techo.If you don't have Sphinx installed, grab it from\r\n\techo.http://sphinx-doc.org/\r\n\texit /b 1\r\n)\r\n\r\n%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%\r\ngoto end\r\n\r\n:help\r\n%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%\r\n\r\n:end\r\npopd\r\n"
  },
  {
    "path": "docs/api/modify.rst",
    "content": "===============\nModifying Data\n===============\n\n\nWhen adding rows, deleting rows, or modifying cell values, **always use the functions documented in this API**.\nUse ``addRow()`` to add a row, ``deleteBy()`` or ``deleteSelected()`` to delete a row, and the ``setValue()`` family of functions to modify values.\nEven though ``setValue`` will call ``putValue`` and that may be defined by the plugin itself, do not modify rows manually.\nThis also means that rows should not be added or removed from ``sheet.rows`` directly.\n\nAlways use these functions, as they do some important bookkeeping for features like deferred modifications.\n\n.. autofunction:: visidata.TableSheet.newRow\n.. autofunction:: visidata.TableSheet.addNewRows\n.. autofunction:: visidata.TableSheet.editCell\n.. autofunction:: visidata.TableSheet.deleteBy\n\nDeferred Modification\n======================\n\nOn sheets where ``putValue`` changes the source directly, like **SQLite** and **DirSheet**, it would be undesirable for modifications to happen immediately.\nFor these cases, the modifications are cached, shown visually on the sheet in a different color, and deferred until they are committed with an explicit ``commit-sheet`` (bound to :kbd:`z Ctrl+S`).\n\nSheet types can add this deferring behavior by setting their ``defer`` attribute to ``True`` (either on the class type or on the individual sheet instance), but they may have to implement their own ``Sheet.putChanges``.\n\n.. autofunction:: visidata.Column.getSourceValue\n\n.. autofunction:: visidata.TableSheet.commit\n.. autofunction:: visidata.TableSheet.getDeferredChanges\n.. autofunction:: visidata.TableSheet.putChanges\n\nUndo\n-------\n\nWhen a function adds, removes, or modifies data--including metadata--as part of a user action, it needs to ensure that operation is **undoable**.\nFor many operations, this is already handled internally by existing functions.\nFor instance, if the user executes a command which modifies cell values via ``Column.setValues``, the ``undo`` command will undo those modifications automatically.\n\nIf a new operation changes the data or metadata and undo is not already handled by existing functionality, then the new operation needs to call ``addUndo()`` to add an *undo function* to the currently executing command.\n\nFor performance reasons, undo functions should generally be as large as possible.\nFor instance, ``Column.setValues`` adds a single undo function to undo all changes in one go.\nBy contrast, ``Column.setValue`` does not add an undo function at all.\nTherefore, commands should always use ``Column.setValues``, unless for some special reason the modification should not be undoable.\nUndo functions, however, should use ``Column.setValue``, so it doesn't add an undo function for the undo itself.\n(Redo is handled by replaying the previous command, not by undoing the undo).\n\n.. autofunction:: visidata.vd.addUndo\n.. autofunction:: visidata.vd.addUndoSetValues\n\n\nExample\n--------\n\n.. note::\n\n    ``Sheet.editCell`` requires row and column *indexes* for its parameters.\n    For example, ``cursorVisibleColIndex`` and ``cursorRowIndex`` are sheet attributes that can be passed to ``Sheet.editCell``.\n\n::\n\n    Sheet.addCommand('e', 'edit-cell',\n                     'cursorCol.setValues([cursorRow], editCell(cursorVisibleColIndex))',\n                     'edit contents of current cell')\n\n\n::\n\n    # equivalent to Sheet.deleteSelected but slower\n    sheet.deleteBy(sheet.isSelected)\n\n::\n\n    sheet.addRow(row)\n\n"
  },
  {
    "path": "docs/api/modules.rst",
    "content": "\n# Module abilities\n\nInternal modules and external plugins can:\n\n- define new commands\n- add new options\n- set existing options\n- maintain state on vd singleton or sheets or columns\n- add arbitrary Python code before/after most functions\n- replace functions\n- add new sheet types\n- new file formats and urls\n- have lazy dependencies (with vd.importExternal)\n\n# Module imports\n\nBy default, VisiData loads all installed plugins and all of its own internal modules.\nSome modules (esp loaders) may have dependencies in PyPI that aren't installed.\n\nModules must lazily import any external dependencies only when the feature or loader is attempted to be used.  i.e. modules must not import external dependencies at file scope.  For loaders this should happen in reload/iterload() instead of vd.open_foo, if possible.\n\nThe import should be with vd.importExternal so that VisiData can give a command to install the library via pip.\n\nSome modules are not compatible with each other; for instance, the traditional visidata sqlite loader which loads all data into memory, and the vdsql sqlite loader which uses Ibis to compose SQL queries that get executed against the sqlite database itself.\n\nThe last module to be imported will have its functions registered for the filetype or command.  This should work fine for most cases (latter modules are generally more advanced), but to use the former module, this module must not be loaded in the first place.\n\n"
  },
  {
    "path": "docs/api/options.rst",
    "content": "Options\n========\n\nAdding to the :ref:`hello world<hello-world>` example from the intro, the displayed text could be made configurable with an option:\n\n::\n\n    vd.option('disp_hello', 'Hello world!', 'string to display for hello-world command')\n\n    BaseSheet.addCommand('1', 'hello-world', 'status(options.disp_hello)')\n\n\nNow the user can set the option to modify which text is displayed during their session when they press :kbd:`1`.\nFor example, on the command line (note that the underscores can be converted to hyphens):\n\n::\n\n    vd --disp-hello=\"¡Hola mundo!\"\n\nThe user can override it persistently for every session by adding a line to their ``.visidatarc``:\n\n::\n\n    options.disp_hello = 'Bonjour monde!'\n\n\nOptions Context\n~~~~~~~~~~~~~~~\n\nOptions can have different values depending on the context in which they're used.\nFor instance, one TSV sheet might need its ``delimiter`` set to \"``|``\", while another TSV sheet in the same session might need to use the default (\"``\\t``\", or TAB) instead.\n\nOptions can be overridden globally, or for all sheets of a specific type, or only for one specific sheet.\n\nThe options context should be referenced directly when setting:\n\n    - ``sheet.options`` to *set* an option on a specific sheet instance (**sheet override**).\n    - ``<SheetType>.options`` to *set* a option default for a particular type of Sheet (**class override**).\n    - ``vd.options`` (or plain ``options``) to *set* an option globally for all sheets, except for sheets that have a sheet override (**global override**).\n\n.. note::\n\n    Class overrides prior to v2.10\n    ------------------------------\n\n    In VisiData v2.10 and earlier, class overrides had to be specified using ``<SheetType>.class_options``.\n    In subsequent versions, ``.options`` can be used for getting and setting options at all levels.\n\nUse ``sheet.options`` to *get* an option within the context of a specific sheet.\nThis is strongly preferred, so the user can override the option setting on a sheet-specific basis.\nHowever, some options and situations are truly sheet-agnostic, and so ``vd.options`` (or plain ``options``) will *get* an option using the context of the **top sheet**.\n\nWhen getting an option value, VisiData will look for a sheet override first, then class overrides next (from most specific subclass all the way up to BaseSheet), then a global override, before returning the default value from the option definition itself.\n\nIn general, plugins should use ``FooSheet.options`` to override values for the plugin-specific sheet type.\n\n.. note::\n\n    Performance\n    ------------------\n\n    Because it allows so much flexibility, getting option values is a comparatively slow operation.  For tight loops, save the option into a local variable in an outer block.  An option value can only change between commands anyway.\n\nOptions API\n~~~~~~~~~~~~~~~\n\n.. autofunction:: visidata.vd.options.__getattr__\n\n``x = sheet.options.hello_world`` is the preferred style for getting a single option value.\n\n.. autofunction:: visidata.vd.options.__setattr__\n\n``sheet.options.hello_world = \"Привет мир\"`` is the preferred style for setting a single option value.\n\n.. autofunction:: visidata.vd.options.get\n.. autofunction:: visidata.vd.options.set\n.. autofunction:: visidata.vd.options.unset\n.. versionadded:: 2.1\n.. autofunction:: visidata.vd.options.getall\n\nThe dict returned by ``options.getall('foo_')`` is designed to be used as kwargs to other loaders, so that their options can be passed through VisiData transparently.\nFor example, to pass all csv options through to the builtin Python ``csv`` module:\n\n::\n\n    csv.reader(fp, **sheet.options.getall('csv_'))\n\n.. autofunction:: visidata.vd.option\n\n.. note::\n\n    If the option affects loading, transforming, or saving, then set *replay* to True.\n\nRules for naming options\n^^^^^^^^^^^^^^^^^^^^^^^^\n\n- Options defined within a plugin should all start with the same short module abbreviation, like \"``mod_``\".\n- Except for theme option names, which should start with \"``disp_``\" for a displayed string and \"``color_``\" for a color option (see :ref:`Colors<colors>`).\n- Use common abbreviations instead of full words.\n- Use \"``_``\" (underscore) to separate words.\n- Keep the option name length under 20 characters.  Maximum of 3 words (2 separators).\n\n.. note::\n\n    * Consider whether some subset of options can be passed straight through to the underlying Python library via kwargs (maximum power with minimal effort).\n\nOption type\n^^^^^^^^^^^^\n\nWhen setting an option, strings and other types will be coerced to the type of the *default*.  An ``Exception`` is raised if conversion fails.  A *default* of ``None`` allows any type.\n\nExamples\n~~~~~~~~~\n\n::\n\n    vd.option('disp_hello', 'Hello world!', 'string to display for hello-world')\n\n    # option without regard to a current sheet (global override only)\n    vd.options.disp_hello = 'こんにちは世界'\n\n    # show the option value given the context of a specific sheet\n    vd.status(sheet.options.disp_hello)\n\n    # option set on specific sheet only\n    sheet.options.color_current_row = 'bold blue'\n\n    # option set for all DirSheets\n    DirSheet.options.color_current_row = 'reverse green'\n"
  },
  {
    "path": "docs/api/plugins.rst",
    "content": "Plugins\n========\n\n\nPlugin file structure\n----------------------\n\nMost features can be self-contained in their own .py file, so that the feature is enabled or disabled by ``import``-ing that .py file or not.\nA plugin is usually a single .py file, installed on the same computer as visidata.\n`Instructions on how to install a plugin </docs/plugins/>`__\n\nPlugins often start as a small snippet in ``.visidatarc``, and then the code is migrated to a separate file when it gets too large to share with other people via a short code snippet.\nThe actual code in either case should be identical.\n\n.. note::\n\n    To quickly install a personal plugin, place the plugin in the ``$HOME/.visidata/plugins/`` directory, and add an ``import`` statement to ``$HOME/.visidata/plugins/__init__.py``.\n    At startup, VisiData will automatically import this ``plugins`` package and all the included plugins.\n\nTo publish a plugin, create a public repo with a .py file. To package it within VisiData, `open a PR on the VisiData repo <https://github.com/saulpw/visidata/pulls>`_, placing the code in the `the experimental folder <https://github.com/saulpw/visidata/tree/develop/visidata/experimental>`_.\n\n\nComplete \"Hello world\" plugin example\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nhello.py\n^^^^^^^^^^^^^^^^\n\n::\n\n    '''This plugin adds the ``hello-world`` command to all sheets.\n    Press ``0`` to show display options.disp_hello on the status line.'''\n\n    __author__ = 'Jo Baz <jobaz@example.com>'\n\n    vd.option('disp_hello', 'Hello world!', 'string to display for hello-world command')\n\n    BaseSheet.addCommand('0', 'hello-world', 'status(options.disp_hello)')\n\n.. note::\n\nNotes:\n\n- There should be a searchable docstring description of the core features.\n- Optionally include author metadata.\n- Options at the top, commands at the bottom.\n- Avoid toplevel imports of non-stdlib Python extensions.\n"
  },
  {
    "path": "docs/api/requirements.txt",
    "content": "recommonmark\nsphinx\nsphinx-markdown-tables\nsphinx-argparse\ngit+https://github.com/saulpw/visidata.git@develop\n"
  },
  {
    "path": "docs/api/runtime.txt",
    "content": "3.7\n"
  },
  {
    "path": "docs/api/sheets.rst",
    "content": ".. _sheets:\n\nSheets\n====================================\n\nA Sheet is a representation of some source, usually a :ref:`Path <vd-path>`.\nA path can be opened, returning a sheet, and/or a sheet can be saved to path.\n\n.. autofunction:: visidata.vd.openPath\n.. autofunction:: visidata.vd.openSource\n\n.. autofunction:: visidata.vd.saveSheets\n\nSheets API\n-----------\n\n.. autoclass:: visidata.BaseSheet\n\n.. autoattribute:: visidata.BaseSheet.name\n\n.. autofunction:: visidata.BaseSheet.__len__\n.. function:: visidata.BaseSheet.__copy__(self)\n\n    Return shallow copy of sheet.\n\n.. autofunction:: visidata.BaseSheet.reload\n\n.. _tablesheet:\n\nTableSheet\n^^^^^^^^^^^\n\nSheets are generally specialized for their rowtype, and TableSheet, used for sheets with rows and columns, is the most common base class.\n(So common, that it was originally just called ``Sheet``.  For clarity, ``TableSheet`` is preferred, but ``Sheet`` is a valid alias that will never be deprecated.)\n\n.. autoclass:: visidata.TableSheet\n\n.. data:: visidata.TableSheet.rows\n\nList of row objects on this sheet.\n\n.. data:: visidata.TableSheet.columns\n\nList of all Column objects on this sheet (including hidden columns).\n\n\n.. autoattribute:: visidata.TableSheet.nRows\n.. autoattribute:: visidata.TableSheet.nCols\n\n.. autoattribute:: visidata.TableSheet.visibleCols\n.. autoattribute:: visidata.TableSheet.nVisibleCols\n\n.. autofunction:: visidata.TableSheet.addRow\n.. autofunction:: visidata.TableSheet.addColumn\n\n.. autofunction:: visidata.TableSheet.iterload\n\n.. autofunction:: visidata.TableSheet.rowid\n.. autofunction:: visidata.TableSheet.column\n\n.. autofunction:: visidata.TableSheet.openRow\n.. autofunction:: visidata.TableSheet.openCell\n.. autofunction:: visidata.TableSheet.gatherBy\n\n.. _other-sheets:\n\nOther Common Sheet Types\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThese can be used as base classes, or instantiated as they are, or :ref:`used as templates <enumerate-columns>` for rows with similar structure,\n\n.. autoclass:: visidata.IndexSheet\n.. autoclass:: visidata.TextSheet\n.. autoclass:: visidata.SequenceSheet\n.. autoclass:: visidata.PyobjSheet\n\nThe Sheet Stack\n-----------------\n\n.. data:: visidata.vd.sheets\n\nThe \"sheet stack\", a list of active sheets (available as the **Sheets Sheet** via :kbd:`Shift+S`).\nThe top sheet, or the displayed sheet, is the first item in the list (``vd.sheets[0]``).\n\n.. data:: visidata.vd.sheet\n\nThe top sheet on the sheet stack.\n\n.. autofunction:: visidata.vd.push\n.. autofunction:: visidata.vd.replace\n.. autofunction:: visidata.vd.remove\n.. autofunction:: visidata.vd.quit\n\n.. autofunction:: visidata.vd.getSheet\n\n"
  },
  {
    "path": "docs/api/style.rst",
    "content": "Guide Style Guide\n=================\n\nGeneral Notes\n-------------\n\n- Review first sentences `with this in mind <https://jamesg.blog/2023/12/03/first-sentences/>`_.\n- In general, do not use second person (you/your) outside of tutorials.\n\nReferenced from `Simplified Technical English <https://en.wikipedia.org/wiki/Simplified_Technical_English>`_:\n\n- Make instructions as clear and specific as possible.\n- Use the approved forms of the verb:\n    - The infinitive\n    - The imperative\n    - The simple present tense\n    - The simple past tense\n    - The past participle (only as an adjective)\n    - The future tense\n- Do not use helping verbs to make `complex verb structures <https://www.utsa.edu/twc/documents/Complex%20Verb%20Phrases.pdf>`_.\n- Use the \"-ing\" form of a verb only as a technical name or as a modifier in a technical name.\n- Do not use passive voice in procedures.\n- Use the active voice as much as possible in descriptive texts.\n- Prefer short sentences and simpler word choices.\n- Do not omit parts of the sentence (e.g. verb, subject, article) to make your text shorter.\n- Use vertical lists for complex text.\n- Write one instruction per sentence.\n- Write only one topic per paragraph.\n\nColor/Markup Standards\n-----------------------\n\n- VisiData documentation uses `basic markdown <https://www.markdownguide.org/basic-syntax/>`_ like # Headings, \\*\\*bold\\*\\*, \\*italics\\*, \\`code snippets\\`, and \\_underscore\\_.\n\n- Internally, VisiData has its `own display attribute syntax </docs/colors#attrs>`_. Some example usage:\n    - ``[:onclick <url>]<text>[/]`` formats ``<text>`` into a clickable url that will open in ``$BROWSER``.\n    - ``[:red on black]<sentence>[/]`` changes the color of ``<sentence>`` to be red text on black background.\n      Any VisiData color option name can be used after ``:``, like ``[:warning]``, ``[:error]``, ``[:menu]``.\n      Preference is for using ``[:option_name]`` instead of hard-coded colors when possible.\n    - e.g. Use ``[:keys]`` for keystrokes and longnames, and ``[:code]`` for Python and other actual code.\n\n- List relevant commands with the general pattern: ``- [:keys]<keystroke>[/] ([:code]<longname>[/]) to <command helpstring>``.\n    - Use ``{help.commands.<longname>}`` to get the **GuideSheet** to replace it with the properly formatted string above. You can write it out manually if that would result in more detail or clarity, but it's much more preferred to adjust the docstring so that this pattern would work. \n\n- List relevant options with ``[:onclick options-sheet <option name>][:code]option name>[/] to <option helpstring> (default: <option default value>)``.\n  - Similarly, use ``{help.options.<option-name>}`` to expand into the above, and prefer to modify the helpstring instead of writing it out manually.\n"
  },
  {
    "path": "docs/casts/expand-cols.cast",
    "content": "{\"version\": 2, \"width\": 64, \"height\": 11, \"timestamp\": 1593233558, \"env\": {\"SHELL\": \"/Users/akerrigan/.local/homebrew/bin/fish\", \"TERM\": \"xterm-256color\"}}\n[2.053308, \"o\", \"\\r\\n\\u001b[30m\\u001b(B\\u001b\"]\n[2.05357, \"o\", \"[m\"]\n[2.05384, \"o\", \"\\u001b[?2004l\"]\n[2.054559, \"o\", \"\\u001b]0;vd /Users/akerrigan/code/visidata\\u0007\\u001b[30m\\u001b(B\\u001b[m\\r\"]\n[2.418729, \"o\", \"\\u001b[?1049h\\u001b[1;11r\\u001b(B\\u001b[m\\u001b[4l\\u001b[?7h\\u001b[?1h\\u001b=\"]\n[2.418969, \"o\", \"\\u001b[39;49m\\u001b[?1034h\\u001b[?1000h\"]\n[2.420728, \"o\", \"\\u001b[?25l\"]\n[2.420798, \"o\", \"\\u001b[?1h\\u001b=\\u001b[?1h\\u001b=\"]\n[2.422998, \"o\", \"\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[H\\u001b[2J\"]\n[2.423157, \"o\", \"\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[H\\u001b[2J\\u001b[11d\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m1› nested| saul.pw/VisiData v2.-4\\u001b[37m\\u001b[40m \\u001b[39;49m\\u001b[37m\\u001b[40m         0 rows     loading…\\u001b[32m\\u001b[40m \\u001b[11;35H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[2.424647, \"o\", \"\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[H\\u001b[2J\"]\n[2.53084, \"o\", \"\\u001b(B\\u001b[0;1;4;7m\\u001b[39;49m\\u001b[37m\\u001b[40m     \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m nested \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m more \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m║\\r\\n\\u001b(B\\u001b[0;1;7m\\u001b[39;49m\\u001b[37m\\u001b[40m [2] \\u001b(B\\u001b[0;7m\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b[39;49m\\u001b[37m\\u001b[40m|     \\u001b[38;5;226m\\u001b[40m⌀\\u001b[39;49m\\u001b[37m\\u001b[40m║\\r\\n\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m [3] \\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b[14G\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|     \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m║\\r\\n\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m    \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| data   |     \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m║\\r\\n\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m    \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b[14G\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| {1}  ║\\r\\u001b[11d\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m1› nested| saul.pw/VisiData v2.-4dev | opening\\u001b[37m\\u001b[40m \\u001b[39;49m\\u001b[37m\\u001b[40m         4 rows \\u001b[5;23H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[2.531061, \"o\", \"\\u001b[H\"]\n[2.639476, \"o\", \"\\u001b[5;23H\"]\n[2.639565, \"o\", \"\\u001b[H\"]\n[2.745347, \"o\", \"\\u001b[5;23H\"]\n[2.745537, \"o\", \"\\u001b[H\"]\n[2.853922, \"o\", \"\\u001b[5;23H\"]\n[2.854164, \"o\", \"\\u001b[H\"]\n[2.956758, \"o\", \"\\u001b[5;23H\"]\n[2.956827, \"o\", \"\\u001b[H\"]\n[3.059119, \"o\", \"\\u001b[5;23H\"]\n[3.059198, \"o\", \"\\u001b[H\"]\n[3.162485, \"o\", \"\\u001b[5;23H\"]\n[3.162654, \"o\", \"\\u001b[H\"]\n[3.270984, \"o\", \"\\u001b[5;23H\"]\n[3.271176, \"o\", \"\\u001b[H\"]\n[3.373933, \"o\", \"\\u001b[5;23H\"]\n[3.374137, \"o\", \"\\u001b[H\"]\n[3.47637, \"o\", \"\\u001b[5;23H\"]\n[3.476525, \"o\", \"\\u001b[H\"]\n[3.579716, \"o\", \"\\u001b[5;23H\"]\n[3.579787, \"o\", \"\\u001b[H\"]\n[3.681719, \"o\", \"\\u001b[5;23H\"]\n[3.681921, \"o\", \"\\u001b[H\"]\n[3.78846, \"o\", \"\\u001b[5;23H\"]\n[3.788618, \"o\", \"\\u001b[H\"]\n[3.891944, \"o\", \"\\u001b[5;23H\"]\n[3.892024, \"o\", \"\\u001b[H\"]\n[5.386518, \"o\", \"\\u001b[C\\u001b(B\\u001b[0;1;4;7m\\u001b[39;49m\\u001b[37m\\u001b[40m[0]      \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m [1]    \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m [2]   \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m nested \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m more \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m║\\r\\n\\u001b[C\\u001b(B\\u001b[0;1;7m\\u001b[39;49m\\u001b[37m\\u001b[40msmallish \\u001b(B\\u001b[0;7m\\u001b[39;49m\\u001b[37m\\u001b[40m| array  |      \\u001b[38;5;226m\\u001b[40m⌀\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b[39;49m\\u001b[37m\\u001b[40m|     \\u001b[38;5;226m\\u001b[40m⌀\\u001b[39;49m\\u001b[37m\\u001b[40m║\\r\\n\\u001b[C\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40mslightly \\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| longer | array |\\u001b[36G\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|     \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m║\\u001b[4;9H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[1K \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\"]\n[5.38679, \"o\", \"\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|      \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| data   |     \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m║\\u001b[5;9H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[1K \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|      \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b[36G\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| {1}  ║\\u001b[11;12H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[34X\\u001b[11;46H\\u001b[37m\\u001b[40m (\\u001b[5;45H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[H\"]\n[5.490655, \"o\", \"\\u001b[5;45H\"]\n[5.490892, \"o\", \"\\u001b[H\"]\n[5.59614, \"o\", \"\\u001b[5;45H\"]\n[5.596312, \"o\", \"\\u001b[H\"]\n[5.70356, \"o\", \"\\u001b[5;45H\"]\n[5.703712, \"o\", \"\\u001b[H\"]\n[5.807157, \"o\", \"\\u001b[5;45H\"]\n[5.807347, \"o\", \"\\u001b[H\"]\n[5.913711, \"o\", \"\\u001b[5;45H\"]\n[5.91378, \"o\", \"\\u001b[H\"]\n[6.019651, \"o\", \"\\u001b[5;45H\"]\n[6.01988, \"o\", \"\\u001b[H\"]\n[6.123079, \"o\", \"\\u001b[5;45H\"]\n[6.123167, \"o\", \"\\u001b[H\"]\n[6.229355, \"o\", \"\\u001b[5;45H\"]\n[6.229548, \"o\", \"\\u001b[H\"]\n[6.338899, \"o\", \"\\u001b[5;45H\"]\n[6.338966, \"o\", \"\\u001b[H\"]\n[6.445997, \"o\", \"\\u001b[5;45H\"]\n[6.446064, \"o\", \"\\u001b[H\"]\n[8.383867, \"o\", \"\\u001b[C\\u001b(B\\u001b[0;1;4;7m\\u001b[39;49m\\u001b[37m\\u001b[40m    \\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[22P\\n\\b\\b\\b\\b\\u001b(B\\u001b[0;1;7m\\u001b[39;49m\\u001b[37m\\u001b[40m[2] \\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[22P\\n\\b\\b\\b\\b\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m[3] \\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[22P\\n\\b\\u001b(B\\u001b[0;1m\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[22P\\n\\b\\u001b(B\\u001b[0;1m\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[22P\\u001b[11;12H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40mexpand-col undone\\u001b[11;47H\\u001b[37m\\u001b[40mU\\u001b[5;23H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[8.384059, \"o\", \"\\u001b[H\"]\n[8.487903, \"o\", \"\\u001b[5;23H\"]\n[8.487979, \"o\", \"\\u001b[H\"]\n[8.595444, \"o\", \"\\u001b[5;23H\"]\n[8.595512, \"o\", \"\\u001b[H\"]\n[8.697377, \"o\", \"\\u001b[5;23H\"]\n[8.697569, \"o\", \"\\u001b[H\"]\n[8.800213, \"o\", \"\\u001b[5;23H\"]\n[8.800405, \"o\", \"\\u001b[H\"]\n[8.903961, \"o\", \"\\u001b[5;23H\"]\n[8.904129, \"o\", \"\\u001b[H\"]\n[9.009529, \"o\", \"\\u001b[5;23H\"]\n[9.009726, \"o\", \"\\u001b[H\"]\n[9.115224, \"o\", \"\\u001b[5;23H\"]\n[9.11531, \"o\", \"\\u001b[H\"]\n[9.220366, \"o\", \"\\u001b[5;23H\"]\n[9.220582, \"o\", \"\\u001b[H\"]\n[9.329074, \"o\", \"\\u001b[5;23H\"]\n[9.329277, \"o\", \"\\u001b[H\"]\n[9.433755, \"o\", \"\\u001b[5;23H\"]\n[9.433946, \"o\", \"\\u001b[H\"]\n[10.606706, \"o\", \"\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m     \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4;7m\\u001b[39;49m\\u001b[37m\\u001b[40m nested \\r\\n\\u001b(B\\u001b[0;7m\\u001b[39;49m\\u001b[37m\\u001b[40m [2] |\\u001b(B\\u001b[0;1;7m\\u001b[39;49m\\u001b[37m\\u001b[40m       \\u001b[38;5;226m\\u001b[40m⌀\\r\\n\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m [3] |\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m       \\u001b[38;5;226m\\u001b[40m⌀\\r\\n\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m    \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m data   \\r\\n\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m    \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m       \\u001b[38;5;226m\\u001b[40m⌀\\u001b[11;12H\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[17X\\u001b[11;47H\\u001b[37m\\u001b[40ml\\u001b[5;23H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[10.606905, \"o\", \"\\u001b[H\"]\n[10.710035, \"o\", \"\\u001b[5;23H\"]\n[10.710119, \"o\", \"\\u001b[H\"]\n[10.814821, \"o\", \"\\u001b[5;23H\"]\n[10.814999, \"o\", \"\\u001b[H\"]\n[10.827549, \"o\", \"\\u001b[7G\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m nested \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4;7m\\u001b[39;49m\\u001b[37m\\u001b[40m more \\n\\u001b[7G\\u001b(B\\u001b[0;7m\\u001b[39;49m\\u001b[37m\\u001b[40m       \\u001b[38;5;226m\\u001b[40m⌀\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b(B\\u001b[0;1;7m\\u001b[39;49m\\u001b[37m\\u001b[40m     \\u001b[38;5;226m\\u001b[40m⌀\\n\\u001b[7G\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m       \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m     \\u001b[38;5;226m\\u001b[40m⌀\\n\\u001b[7G\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m data   |\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m     \\u001b[38;5;226m\\u001b[40m⌀\\n\\u001b[7G\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m       \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m {1}  \\u001b[C\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[10.827758, \"o\", \"\\u001b[H\"]\n[10.932351, \"o\", \"\\u001b[5;23H\"]\n[10.932418, \"o\", \"\\u001b[H\"]\n[11.039078, \"o\", \"\\u001b[5;23H\"]\n[11.039146, \"o\", \"\\u001b[H\"]\n[11.143068, \"o\", \"\\u001b[5;23H\"]\n[11.143156, \"o\", \"\\u001b[H\"]\n[11.248211, \"o\", \"\\u001b[5;23H\"]\n[11.248296, \"o\", \"\\u001b[H\"]\n[11.352616, \"o\", \"\\u001b[5;23H\"]\n[11.352708, \"o\", \"\\u001b[H\"]\n[11.456198, \"o\", \"\\u001b[5;23H\"]\n[11.456385, \"o\", \"\\u001b[H\"]\n[11.560428, \"o\", \"\\u001b[5;23H\"]\n[11.560633, \"o\", \"\\u001b[H\"]\n[11.665179, \"o\", \"\\u001b[5;23H\"]\n[11.66539, \"o\", \"\\u001b[H\"]\n[11.771428, \"o\", \"\\u001b[5;23H\"]\n[11.771628, \"o\", \"\\u001b[H\"]\n[11.875525, \"o\", \"\\u001b[5;23H\"]\n[11.875701, \"o\", \"\\u001b[H\"]\n[12.220951, \"o\", \"\\u001b[11;47H\\u001b(B\\u001b[0;1m\\u001b[37m\\u001b[40mz\\u001b[5;23H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[12.221119, \"o\", \"\\u001b[H\"]\n[12.323068, \"o\", \"\\u001b[5;23H\"]\n[12.323124, \"o\", \"\\u001b[H\"]\n[12.428197, \"o\", \"\\u001b[5;23H\"]\n[12.428415, \"o\", \"\\u001b[H\"]\n[12.530986, \"o\", \"\\u001b[5;23H\"]\n[12.531156, \"o\", \"\\u001b[H\"]\n[12.63409, \"o\", \"\\u001b[5;23H\"]\n[12.634325, \"o\", \"\\u001b[H\"]\n[12.736796, \"o\", \"\\u001b[5;23H\"]\n[12.736956, \"o\", \"\\u001b[H\"]\n[12.766382, \"o\", \"\\u001b[?1000l\\u001b[?12l\\u001b[?25h\"]\n[12.766733, \"o\", \"\\u001b[11dexpand depth=1\\u001b[30X\\u001b[11;45H\\u001b(B\\u001b[0;1m\\u001b[37m\\u001b[40m z(\\u001b[11;14H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[14.372958, \"o\", \"\\u001b[?25l\\u001b[?1000h\"]\n[14.376247, \"o\", \"\\u001b[1;21H\\u001b(B\\u001b[0;1;4;7m\\u001b[39;49m\\u001b[37m\\u001b[40m.deeply \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m║\\u001b[2;16H\\u001b(B\\u001b[0;1;7m\\u001b[39;49m\\u001b[37m\\u001b[40m            \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[0;7m\\u001b[39;49m\\u001b[37m\\u001b[40m║\\u001b[3;16H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m            \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m║\\u001b[4;16H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m            \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m║\\u001b[5;20H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m         \\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m║\\r\\u001b[11d\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m1› nested| \\\"1\\\"\\u001b[30X\\u001b[5;30H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[14.376403, \"o\", \"\\u001b[H\"]\n[14.482011, \"o\", \"\\u001b[5;30H\"]\n[14.482081, \"o\", \"\\u001b[H\"]\n[14.590555, \"o\", \"\\u001b[5;30H\"]\n[14.590726, \"o\", \"\\u001b[H\"]\n[14.69562, \"o\", \"\\u001b[5;30H\"]\n[14.695709, \"o\", \"\\u001b[H\"]\n[14.799451, \"o\", \"\\u001b[5;30H\"]\n[14.799634, \"o\", \"\\u001b[H\"]\n[14.903894, \"o\", \"\\u001b[5;30H\"]\n[14.904056, \"o\", \"\\u001b[H\"]\n[15.00854, \"o\", \"\\u001b[5;30H\"]\n[15.00875, \"o\", \"\\u001b[H\"]\n[15.113284, \"o\", \"\\u001b[5;30H\"]\n[15.113373, \"o\", \"\\u001b[H\"]\n[15.216489, \"o\", \"\\u001b[5;30H\"]\n[15.216674, \"o\", \"\\u001b[H\"]\n[15.32195, \"o\", \"\\u001b[5;30H\"]\n[15.322035, \"o\", \"\\u001b[H\"]\n[15.427206, \"o\", \"\\u001b[5;30H\"]\n[15.427273, \"o\", \"\\u001b[H\"]\n[16.798297, \"o\", \"\\u001b[1;21H\\u001b(B\\u001b[0;1;4;7m\\u001b[39;49m\\u001b[37m\\u001b[40m \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m║\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[K\\u001b[2;16H\\u001b[7P\\n\\u001b[7P\\n\\u001b[7P\\n\\u001b[22G║\\u001b[K\\u001b[11;12H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40mexpand-col-depth undone\\u001b[11;46H\\u001b[37m\\u001b[40m U\\u001b[5;23H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[16.798545, \"o\", \"\\u001b[H\"]\n[16.905591, \"o\", \"\\u001b[5;23H\"]\n[16.905846, \"o\", \"\\u001b[H\"]\n[17.010625, \"o\", \"\\u001b[5;23H\"]\n[17.010795, \"o\", \"\\u001b[H\"]\n[17.116869, \"o\", \"\\u001b[5;23H\"]\n[17.117033, \"o\", \"\\u001b[H\"]\n[17.220377, \"o\", \"\\u001b[5;23H\"]\n[17.220587, \"o\", \"\\u001b[H\"]\n[17.324772, \"o\", \"\\u001b[5;23H\"]\n[17.325051, \"o\", \"\\u001b[H\"]\n[17.428272, \"o\", \"\\u001b[5;23H\"]\n[17.428366, \"o\", \"\\u001b[H\"]\n[17.537301, \"o\", \"\\u001b[5;23H\"]\n[17.537549, \"o\", \"\\u001b[H\"]\n[17.639953, \"o\", \"\\u001b[5;23H\"]\n[17.640195, \"o\", \"\\u001b[H\"]\n[17.744367, \"o\", \"\\u001b[5;23H\"]\n[17.744538, \"o\", \"\\u001b[H\"]\n[17.847152, \"o\", \"\\u001b[5;23H\"]\n[17.847343, \"o\", \"\\u001b[H\"]\n[19.236938, \"o\", \"\\u001b[7G\\u001b(B\\u001b[0;1;4;7m\\u001b[39;49m\\u001b[37m\\u001b[40m nested \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m more \\n\\u001b[7G\\u001b(B\\u001b[0;1;7m\\u001b[39;49m\\u001b[37m\\u001b[40m       \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[0;7m\\u001b[39;49m\\u001b[37m\\u001b[40m|     \\u001b[38;5;226m\\u001b[40m⌀\\n\\u001b[7G\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m       \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|     \\u001b[38;5;226m\\u001b[40m⌀\\n\\u001b[7G\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m data   \\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|     \\u001b[38;5;226m\\u001b[40m⌀\\n\\u001b[7G\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m       \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| {1}  \\u001b[11;12H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[23X\\u001b[11;47H\\u001b[37m\\u001b[40mh\\u001b[5;23H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[19.237009, \"o\", \"\\u001b[H\"]\n[19.339538, \"o\", \"\\u001b[5;23H\"]\n[19.33971, \"o\", \"\\u001b[H\"]\n[19.445357, \"o\", \"\\u001b[5;23H\"]\n[19.445606, \"o\", \"\\u001b[H\"]\n[19.448659, \"o\", \"\\u001b(B\\u001b[0;1;4;7m\\u001b[39;49m\\u001b[37m\\u001b[40m     \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m nested \\r\\n\\u001b(B\\u001b[0;1;7m\\u001b[39;49m\\u001b[37m\\u001b[40m [2] \\u001b(B\\u001b[0;7m\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\r\\n\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m [3] \\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\r\\n\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m    \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| data   \\r\\n\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m    \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b[5;23H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[19.448801, \"o\", \"\\u001b[H\"]\n[19.556108, \"o\", \"\\u001b[5;23H\"]\n[19.556317, \"o\", \"\\u001b[H\"]\n[19.658193, \"o\", \"\\u001b[5;23H\"]\n[19.658355, \"o\", \"\\u001b[H\"]\n[19.761852, \"o\", \"\\u001b[5;23H\"]\n[19.761921, \"o\", \"\\u001b[H\"]\n[19.865737, \"o\", \"\\u001b[5;23H\"]\n[19.865805, \"o\", \"\\u001b[H\"]\n[19.969094, \"o\", \"\\u001b[5;23H\"]\n[19.969299, \"o\", \"\\u001b[H\"]\n[20.07657, \"o\", \"\\u001b[5;23H\"]\n[20.076641, \"o\", \"\\u001b[H\"]\n[20.179647, \"o\", \"\\u001b[5;23H\"]\n[20.179718, \"o\", \"\\u001b[H\"]\n[20.284113, \"o\", \"\\u001b[5;23H\"]\n[20.284182, \"o\", \"\\u001b[H\"]\n[20.386052, \"o\", \"\\u001b[5;23H\"]\n[20.386306, \"o\", \"\\u001b[H\"]\n[20.48868, \"o\", \"\\u001b[5;23H\"]\n[20.488749, \"o\", \"\\u001b[H\"]\n[20.573893, \"o\", \"\\u001b[11;47H\\u001b(B\\u001b[0;1m\\u001b[37m\\u001b[40mg\\u001b[5;23H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[20.574063, \"o\", \"\\u001b[H\"]\n[20.677336, \"o\", \"\\u001b[5;23H\"]\n[20.677507, \"o\", \"\\u001b[H\"]\n[20.780851, \"o\", \"\\u001b[5;23H\"]\n[20.78092, \"o\", \"\\u001b[H\"]\n[20.883178, \"o\", \"\\u001b[5;23H\"]\n[20.883358, \"o\", \"\\u001b[H\"]\n[20.987228, \"o\", \"\\u001b[5;23H\"]\n[20.987314, \"o\", \"\\u001b[H\"]\n[21.09254, \"o\", \"\\u001b[5;23H\"]\n[21.092711, \"o\", \"\\u001b[H\"]\n[21.19722, \"o\", \"\\u001b[5;23H\"]\n[21.19731, \"o\", \"\\u001b[H\"]\n[21.300867, \"o\", \"\\u001b[5;23H\"]\n[21.301062, \"o\", \"\\u001b[H\"]\n[21.404826, \"o\", \"\\u001b[5;23H\"]\n[21.405012, \"o\", \"\\u001b[H\"]\n[21.507605, \"o\", \"\\u001b[5;23H\"]\n[21.507674, \"o\", \"\\u001b[H\"]\n[21.61175, \"o\", \"\\u001b[5;23H\"]\n[21.611821, \"o\", \"\\u001b[H\"]\n[21.659878, \"o\", \"\\u001b[C\\u001b(B\\u001b[0;1;4;7m\\u001b[39;49m\\u001b[37m\\u001b[40m[0]      \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m [1]    \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m [2]   \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m nested \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m more.deeply.nested \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m║\\r\\n\\u001b[C\\u001b(B\\u001b[0;1;7m\\u001b[39;49m\\u001b[37m\\u001b[40msmallish \\u001b(B\\u001b[0;7m\\u001b[39;49m\\u001b[37m\\u001b[40m| array  |      \\u001b[38;5;226m\\u001b[40m⌀\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b[39;49m\\u001b[37m\\u001b[40m|                   \\u001b[38;5;226m\\u001b[40m⌀\\u001b[39;49m\\u001b[37m\\u001b[40m║\\r\\n\\u001b[C\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40mslightly \\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| longer | array |\\u001b[36G\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b[57G\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m║\\u001b[4;9H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[\"]\n[21.659956, \"o\", \"1K \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|      \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| data   |\\u001b[57G\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m║\\u001b[5;9H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[1K \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|      \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b[36G\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| data\\u001b[58G║\\u001b[11;46H\\u001b(B\\u001b[0;1m\\u001b[37m\\u001b[40mg(\\u001b[5;59H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[21.660146, \"o\", \"\\u001b[H\"]\n[21.767158, \"o\", \"\\u001b[5;59H\"]\n[21.767385, \"o\", \"\\u001b[H\"]\n[21.874497, \"o\", \"\\u001b[5;59H\"]\n[21.874717, \"o\", \"\\u001b[H\"]\n[21.97809, \"o\", \"\\u001b[5;59H\"]\n[21.978254, \"o\", \"\\u001b[H\"]\n[22.082241, \"o\", \"\\u001b[5;59H\"]\n[22.082311, \"o\", \"\\u001b[H\"]\n[22.189157, \"o\", \"\\u001b[5;59H\"]\n[22.189226, \"o\", \"\\u001b[H\"]\n[22.297632, \"o\", \"\\u001b[5;59H\"]\n[22.297701, \"o\", \"\\u001b[H\"]\n[22.403882, \"o\", \"\\u001b[5;59H\"]\n[22.404063, \"o\", \"\\u001b[H\"]\n[22.512428, \"o\", \"\\u001b[5;59H\"]\n[22.512497, \"o\", \"\\u001b[H\"]\n[22.620305, \"o\", \"\\u001b[5;59H\"]\n[22.620487, \"o\", \"\\u001b[H\"]\n[22.72485, \"o\", \"\\u001b[5;59H\"]\n[22.725056, \"o\", \"\\u001b[H\"]\n[24.406285, \"o\", \"\\u001b[C\\u001b(B\\u001b[0;1;4;7m\\u001b[39;49m\\u001b[37m\\u001b[40m    \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m nested \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m more \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m║\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[K\\r\\n\\u001b[C\\u001b(B\\u001b[0;1;7m\\u001b[39;49m\\u001b[37m\\u001b[40m[2] \\u001b(B\\u001b[0;7m\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[36P\\r\\n\\u001b[C\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m[3] \\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b[36P\\n\\u001b[5G\\u001b(B\\u001b[0;1m\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| data   |\\u001b[36P\\n\\u001b[5G\\u001b(B\\u001b[0;1m\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| {1}  ║\\u001b[K\\u001b[11;12H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40mexpand-cols undone\\u001b[11;46H\\u001b[37m\\u001b[40m U\\u001b[5;23H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[24.406382, \"o\", \"\\u001b[H\"]\n[24.514665, \"o\", \"\\u001b[5;23H\"]\n[24.514856, \"o\", \"\\u001b[H\"]\n[24.618592, \"o\", \"\\u001b[5;23H\"]\n[24.618803, \"o\", \"\\u001b[H\"]\n[24.723382, \"o\", \"\\u001b[5;23H\"]\n[24.723549, \"o\", \"\\u001b[H\"]\n[24.828616, \"o\", \"\\u001b[5;23H\"]\n[24.828819, \"o\", \"\\u001b[H\"]\n[24.933981, \"o\", \"\\u001b[5;23H\"]\n[24.934227, \"o\", \"\\u001b[H\"]\n[25.038221, \"o\", \"\\u001b[5;23H\"]\n[25.038292, \"o\", \"\\u001b[H\"]\n[25.14511, \"o\", \"\\u001b[5;23H\"]\n[25.145314, \"o\", \"\\u001b[H\"]\n[25.249704, \"o\", \"\\u001b[5;23H\"]\n[25.249914, \"o\", \"\\u001b[H\"]\n[25.355708, \"o\", \"\\u001b[5;23H\"]\n[25.355909, \"o\", \"\\u001b[H\"]\n[25.461769, \"o\", \"\\u001b[5;23H\"]\n[25.461971, \"o\", \"\\u001b[H\"]\n[25.945223, \"o\", \"\\u001b[11;12H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[18X\\u001b[11;47H\\u001b[37m\\u001b[40mg\\u001b[5;23H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[25.945441, \"o\", \"\\u001b[H\"]\n[26.052213, \"o\", \"\\u001b[5;23H\"]\n[26.0524, \"o\", \"\\u001b[H\"]\n[26.160458, \"o\", \"\\u001b[5;23H\"]\n[26.160655, \"o\", \"\\u001b[H\"]\n[26.263863, \"o\", \"\\u001b[5;23H\"]\n[26.264056, \"o\", \"\\u001b[H\"]\n[26.322753, \"o\", \"\\u001b[11;46H\\u001b(B\\u001b[0;1m\\u001b[37m\\u001b[40mgz\\u001b[5;23H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[26.322945, \"o\", \"\\u001b[H\"]\n[26.428762, \"o\", \"\\u001b[5;23H\"]\n[26.428959, \"o\", \"\\u001b[H\"]\n[26.534051, \"o\", \"\\u001b[5;23H\"]\n[26.534259, \"o\", \"\\u001b[H\"]\n[26.640539, \"o\", \"\\u001b[5;23H\"]\n[26.640743, \"o\", \"\\u001b[H\"]\n[26.746355, \"o\", \"\\u001b[5;23H\"]\n[26.746424, \"o\", \"\\u001b[H\"]\n[26.851255, \"o\", \"\\u001b[5;23H\"]\n[26.851485, \"o\", \"\\u001b[H\"]\n[26.87318, \"o\", \"\\u001b[?1000l\\u001b[?12l\\u001b[?25h\"]\n[26.873667, \"o\", \"\\u001b[11dexpand depth=1\\u001b[29X\\u001b[11;44H\\u001b(B\\u001b[0;1m\\u001b[37m\\u001b[40m gz(\\u001b[11;14H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[28.182375, \"o\", \"\\u001b[?25l\\u001b[?1000h\"]\n[28.18616, \"o\", \"\\u001b[H\\u001b[C\\u001b(B\\u001b[0;1;4;7m\\u001b[39;49m\\u001b[37m\\u001b[40m[0]      \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m [1]    \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m [2]   \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m nested \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m more.deeply \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m║\\r\\n\\u001b[C\\u001b(B\\u001b[0;1;7m\\u001b[39;49m\\u001b[37m\\u001b[40msmallish \\u001b(B\\u001b[0;7m\\u001b[39;49m\\u001b[37m\\u001b[40m| array  |      \\u001b[38;5;226m\\u001b[40m⌀\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b[39;49m\\u001b[37m\\u001b[40m|            \\u001b[38;5;226m\\u001b[40m⌀\\u001b[39;49m\\u001b[37m\\u001b[40m║\\r\\n\\u001b[C\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40mslightly \\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| longer | array |\\u001b[36G\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b[3;50H\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m║\\u001b[4;9H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[1K \\u001b[38;5\"]\n[28.186235, \"o\", \";226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|      \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| data   |\\u001b[4;50H\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m║\\u001b[5;9H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[1K \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|      \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b[36G\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| {1}\\u001b[5;51H║\\r\\u001b[11d\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m1› nested| \\\"1\\\"\\u001b[29X\\u001b[5;52H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[28.186387, \"o\", \"\\u001b[H\"]\n[28.295346, \"o\", \"\\u001b[5;52H\"]\n[28.295416, \"o\", \"\\u001b[H\"]\n[28.398846, \"o\", \"\\u001b[5;52H\"]\n[28.399018, \"o\", \"\\u001b[H\"]\n[28.503029, \"o\", \"\\u001b[5;52H\"]\n[28.503246, \"o\", \"\\u001b[H\"]\n[28.605894, \"o\", \"\\u001b[5;52H\"]\n[28.606134, \"o\", \"\\u001b[H\"]\n[28.709268, \"o\", \"\\u001b[5;52H\"]\n[28.709501, \"o\", \"\\u001b[H\"]\n[28.812048, \"o\", \"\\u001b[5;52H\"]\n[28.812245, \"o\", \"\\u001b[H\"]\n[28.914612, \"o\", \"\\u001b[5;52H\"]\n[28.914829, \"o\", \"\\u001b[H\"]\n[29.017267, \"o\", \"\\u001b[5;52H\"]\n[29.017437, \"o\", \"\\u001b[H\"]\n[29.121714, \"o\", \"\\u001b[5;52H\"]\n[29.12186, \"o\", \"\\u001b[H\"]\n[29.22906, \"o\", \"\\u001b[5;52H\"]\n[29.229144, \"o\", \"\\u001b[H\"]\n[31.180174, \"o\", \"\\u001b[C\\u001b(B\\u001b[0;1;4;7m\\u001b[39;49m\\u001b[37m\\u001b[40m    \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m nested \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m|\\u001b(B\\u001b[0;1;4m\\u001b[39;49m\\u001b[37m\\u001b[40m more \\u001b(B\\u001b[0m\\u001b[38;5;246m\\u001b[40m║\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[K\\r\\n\\u001b[C\\u001b(B\\u001b[0;1;7m\\u001b[39;49m\\u001b[37m\\u001b[40m[2] \\u001b(B\\u001b[0;7m\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[29P\\r\\n\\u001b[C\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m[3] \\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|\\u001b[29P\\n\\u001b[5G\\u001b(B\\u001b[0;1m\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| data   |\\u001b[29P\\n\\u001b[5G\\u001b(B\\u001b[0;1m\\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m|       \\u001b[38;5;226m\\u001b[40m⌀\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m| {1}  ║\\u001b[K\\u001b[11;12H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40mexpand-cols-depth undone\\u001b[11;45H \\u001b[37m\\u001b[40m U\\u001b[5;23H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[31.180389, \"o\", \"\\u001b[H\"]\n[31.286154, \"o\", \"\\u001b[5;23H\"]\n[31.286224, \"o\", \"\\u001b[H\"]\n[31.392447, \"o\", \"\\u001b[5;23H\"]\n[31.392619, \"o\", \"\\u001b[H\"]\n[31.494826, \"o\", \"\\u001b[5;23H\"]\n[31.495018, \"o\", \"\\u001b[H\"]\n[31.601547, \"o\", \"\\u001b[5;23H\"]\n[31.601735, \"o\", \"\\u001b[H\"]\n[31.703721, \"o\", \"\\u001b[5;23H\"]\n[31.703895, \"o\", \"\\u001b[H\"]\n[31.81164, \"o\", \"\\u001b[5;23H\"]\n[31.81184, \"o\", \"\\u001b[H\"]\n[31.920102, \"o\", \"\\u001b[5;23H\"]\n[31.920169, \"o\", \"\\u001b[H\"]\n[32.025535, \"o\", \"\\u001b[5;23H\"]\n[32.025604, \"o\", \"\\u001b[H\"]\n[32.129992, \"o\", \"\\u001b[5;23H\"]\n[32.130186, \"o\", \"\\u001b[H\"]\n[32.236784, \"o\", \"\\u001b[5;23H\"]\n[32.236949, \"o\", \"\\u001b[H\"]\n[32.48294, \"o\", \"\\u001b[11;12H\\u001b(B\\u001b[0;1m\\u001b[39;49m\\u001b[37m\\u001b[40m\\u001b[24X\\u001b[11;47H\\u001b[37m\\u001b[40mg\\u001b[5;23H\\u001b(B\\u001b[m\\u001b[39;49m\\u001b[37m\\u001b[40m\"]\n[32.482999, \"o\", \"\\u001b[H\"]\n[32.588669, \"o\", \"\\u001b[5;23H\"]\n[32.588756, \"o\", \"\\u001b[H\"]\n[32.694732, \"o\", \"\\u001b[5;23H\"]\n[32.694919, \"o\", \"\\u001b[H\"]\n[32.803197, \"o\", \"\\u001b[5;23H\"]\n[32.803265, \"o\", \"\\u001b[H\"]\n[32.876765, \"o\", \"\\u001b[?1l\\u001b>\"]\n[32.876822, \"o\", \"\\u001b[?1000l\\u001b[39;49m\\u001b[11d\\u001b[K\\u001b[11;1H\\u001b[?12l\\u001b[?25h\\u001b[?1049l\\r\\u001b[?1l\\u001b>\"]\n[32.881744, \"o\", \"\\u001b[38;5;237m⏎\\u001b(B\\u001b[m                                                               \\r⏎ \\r\\u001b[K\"]\n[32.881915, \"o\", \"\\u001b[?2004h\"]\n[33.266293, \"o\", \"\\u001b]0;fish /Users/akerrigan/code/visidata\\u0007\\u001b[30m\\u001b(B\\u001b[m\\r\\r\"]\n[33.266487, \"o\", \"> \\u001b[K\"]\n[34.162656, \"o\", \"\\r\\n\\u001b[30m\\u001b(B\\u001b\"]\n[34.162842, \"o\", \"[m\\u001b[30m\\u001b(B\\u001b[m\"]\n[34.162973, \"o\", \"\\u001b[?2004l\"]\n"
  },
  {
    "path": "docs/casts/pivot-graphs.cast",
    "content": "{\"width\":80,\"version\":2,\"height\":25,\"env\":{\"TERM\":\"xterm-256color\",\"SHELL\":\"/usr/bin/zsh\"},\"command\":\"vd -p cmdlog-1.vd -w 1.5 --replay-movement True\"}\n[0.128522,\"o\",\"\\u001B[?1049h\\u001B[1;25r\\u001B(B\\u001B[m\\u001B[4l\\u001B[?7h\\u001B[?1h\\u001B=\"]\n[0.128573,\"o\",\"\\u001B[39;49m\\u001B[?1000h\"]\n[0.129209,\"o\",\"\\u001B[?25l\"]\n[0.133606,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[H\\u001B[2J\"]\n[0.133872,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[H\\u001B[2J\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m sheet              \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m col         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m row                \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m keystrokes   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m input \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m>\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m                    \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|             |                    | o            | sample…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m StatusPR           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Month\\u001B[35G\\u001B[38;5;246m\\u001B[40m|\\u001B[3;56H|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m =\\u001B[3;71H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Month+…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m StatusPR           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Month\\u001B[35G\\u001B[38;5;246m\\u001B[40m|\\u001B[4;56H|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m -\\u001B[4;71H\\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m StatusPR           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Day\\u001B[5;35H\\u001B[38;5;246m\"]\n[0.13389099999999998,\"o\",\"\\u001B[40m|\\u001B[5;56H|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m -\\u001B[5;71H\\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m StatusPR           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Month+Day   \\u001B[38;5;246m\\u001B[40m|\\u001B[6;56H|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m @\\u001B[6;71H\\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m StatusPR           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Month+Day   \\u001B[38;5;246m\\u001B[40m|\\u001B[7;56H|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ^\\u001B[7;71H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Date\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m StatusPR           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Date\\u001B[8;35H\\u001B[38;5;246m\\u001B[40m|\\u001B[8;56H|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m !\\u001B[8;71H\\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m StatusPR           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Resource    \\u001B[38;5;246m\\u001B[40m|\\u001B[9;56H|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m !\\u001B[9;71H\\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m StatusPR           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Location    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m キSep29,Electricity\\u001B[38;5;246m\\u001B[40m|\\u001B(B\"]\n[0.13390499999999997,\"o\",\"\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ,\\u001B[10;71H\\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m StatusPR           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Unit\\u001B[11;35H\\u001B[38;5;246m\\u001B[40m|\\u001B[11;56H|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\\\\\u001B[11;71H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number\\r\\n\\u001B(B\\u001B[\"]\n[0.13397899999999996,\"o\",\"0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m StatusPR           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B[12;35H|\\u001B[12;56H|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\\"\\u001B[12;71H\\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m StatusPR_selectedr…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B[13;35H|\\u001B[13;56H|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m gu\\u001B[13;71H\\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m StatusPR_selectedr…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Value\\u001B[35G\\u001B[38;5;246m\\u001B[40m|\\u001B[14;56H|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m %\\u001B[14;71H\\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m StatusPR_selectedr…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Value\\u001B[35G\\u001B[38;5;246m\\u001B[40m|\\u001B[15;56H|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m .\\u001B[15;71H\\u001B[38;5;246m\\u001B[40m|\\r\\u001B[25d\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mcmdlog-1| \\\"sample_data/StatusPR.csv\\\" | <F1> or z? ope\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m \\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        14   0%\\u001B(B\\u001B[0m\\u001B[32m\\u001B[40m  │ ▶ 0/14\\u001B[25;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[0.24681899999999996,\"o\",\"\\u001B[H\\u001B[C\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40mMonth   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Day   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Resource\\u001B[35G    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Location\\u001B[55G\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Value   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Unit      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B[C\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40mSep     \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| 29    | Electricity        | Puerto Rico   | 5 \\u001B[65G| percent   | \\n\\u001B[3G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mep     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Telecomunications  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 30.5    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\n\\u001B[3G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mep     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B\"]\n[0.24684599999999995,\"o\",\"[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m People in shelters \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 11105   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\n\\u001B[3G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mep     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water \\u001B[5;35H    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Metro\\u001B[5;55H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 48.75   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\n\\u001B[3G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mep     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\u001B[6;39H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Norte\\u001B[6;55H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 25.47   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\n\\u001B[3G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mep     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B\"]\n[0.24686099999999994,\"o\",\"(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\u001B[7;39H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oeste\\u001B[7;55H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29.95   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;\"]\n[0.24696799999999994,\"o\",\"49m\\u001B[37m\\u001B[40m …\\n\\u001B[3G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mep     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water  \\u001B[8;35H    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sur\\u001B[8;55H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 58.5    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\n\\u001B[3G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mep     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\u001B[9;39H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Este\\u001B[9;55H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 38.96   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\n\\u001B[3G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mep     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Hospitals          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 34\\u001B[65G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[0.24697899999999995,\"o\",\" number    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mOct     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5 \\u001B[65G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mOct     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Cell antennas      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 300     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mOct     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Telecomunications  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[4\"]\n[0.24699299999999993,\"o\",\"0m 40      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mOct     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Cell towers        \\u001B[38;5;24\"]\n[0.24714999999999993,\"o\",\"6m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 270     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mOct     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m People in shelters \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8867    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Hospitals\\u001B[16;39H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 51\\u001B[65G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B\"]\n[0.24716199999999994,\"o\",\"[39;49m\\u001B[37m\\u001B[40m Hospitals with ele…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 10\\u001B[65G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[18;39H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 47\\u001B[65G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[19;39H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Metro\\u001B[19;55H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 57.5    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[\"]\n[0.24717399999999995,\"o\",\"40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[20;39H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Norte\\u001B[20;55H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29\\u001B[65G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B(B\\u001B[\"]\n[0.24730099999999994,\"o\",\"0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[21;39H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oeste\\u001B[21;55H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 20.8    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[22;39H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sur\\u001B[22;55H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 67\\u001B[65G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[23;39H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Este\\u001B[23;55H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 50\\u001B[65G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\"]\n[0.24731699999999993,\"o\",\"\\u001B[37m\\u001B[40m …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Cell antennas\\u001B[39G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 312     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mStatusPR\\u001B[25;62H537 rows\\u001B[76G\\u001B(B\\u001B[0m\\u001B[32m\\u001B[40m1\\u001B[25;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[1.962278,\"o\",\"\\u001B[1;12H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40mMonth+Day   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Day   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Resource           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Location      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Value   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m>\\u001B[2;12H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40mSep29       | 29    | Electricity        | Puerto Rico   | 5       |\\u001B[3;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mSep29       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Telecomunications  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 30.5    \\u001B[38;5;246m\\u001B[40m|\\u001B[4;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mSep29       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m People in shelters \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 11105   \\u001B[38;5;246m\\u001B[40m|\\u001B[5;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mSep29 \"]\n[1.962301,\"o\",\"      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water       \\u001B[53G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Metro         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 48.75   \\u001B[38;5;246m\\u001B[40m|\\u001B[6;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mSep29       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water       \\u001B[53G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Norte         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 25.47   \\u001B[38;5;246m\\u001B[40m|\\u001B[7;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mSep29       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water       \\u001B[53G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oeste         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29.95   \\u001B[38;5;246m\\u001B[40m|\\u001B[8;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mSep29       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water     \\u001B[8;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sur           \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\"]\n[1.962318,\"o\",\"\\u001B[40m 58.5    \\u001B[38;5;246m\\u001B[40m|\\u001B[9;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mSep29       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water      \\u001B[9;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Este          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37\"]\n[1.962458,\"o\",\"m\\u001B[40m 38.96   \\u001B[38;5;246m\\u001B[40m|\\u001B[10;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mSep29       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Hospitals          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 34      \\u001B[38;5;246m\\u001B[40m|\\u001B[11;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mOct1        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5       \\u001B[38;5;246m\\u001B[40m|\\u001B[12;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mOct1        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Cell antennas      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 300     \\u001B[38;5;246m\\u001B[40m|\\u001B[13;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mOct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Telecomunications  \\u001B[38;5;246m\"]\n[1.962503,\"o\",\"\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 40      \\u001B[38;5;246m\\u001B[40m|\\u001B[14;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mOct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Cell towers        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 270     \\u001B[38;5;246m\\u001B[40m|\\u001B[15;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mOct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m People in shelters \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8867    \\u001B[38;5;246m\\u001B[40m|\\u001B[16;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mOct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Hospitals          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 51      \\u001B[38;5;246m\\u001B[40m|\\u001B[17;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mOct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40\"]\n[1.96255,\"o\",\"m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Hospitals with ele…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 10      \\u001B[38;5;246m\\u001B[40m|\\u001B[18;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mOct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37\"]\n[1.9626190000000001,\"o\",\"m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\u001B[18;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 47      \\u001B[38;5;246m\\u001B[40m|\\u001B[19;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mOct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water       \\u001B[53G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Metro         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 57.5    \\u001B[38;5;246m\\u001B[40m|\\u001B[20;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mOct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water       \\u001B[53G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Norte         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29      \\u001B[38;5;246m\\u001B[40m|\\u001B[21;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mOct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water       \\u001B[53G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oeste         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 20.8    \\u001B[38;5;246m\\u001B[40m|\\u001B[22;1\"]\n[1.962633,\"o\",\"2H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mOct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water     \\u001B[22;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sur \\u001B[65G    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 67      \\u001B[38;5;246m\\u001B[40m|\\u001B[23;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mOct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water      \\u001B[23;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Este\\u001B[65G    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 50      \\u001B[38;5;246m\\u001B[40m|\\u001B[24;12H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mOct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Cell antennas      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 312     \\u001B[38;5;246m\\u001B[40m|\\u001B[25;12H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mMonth+Day\\\"\\u001B[31X\\u001B[25;53H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m =\\u001B[76G\\u001B[32m\\u001B[40m2\\u001B[25;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[3.468438,\"o\",\"\\u001B[1;7H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m+Day   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Day   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Resource           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Location      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Value   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Unit \\n\\u001B[5G\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m29       \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| 29    | Electricity        | Puerto Rico   | 5       | percent  \\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Telecomunications  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 30.5    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m People in shelters \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto R\"]\n[3.468495,\"o\",\"ico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 11105   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\u001B[5;43H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Metro         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 48.75   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\u001B[6;43H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Norte         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 25.47   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\u001B[7;43H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oeste         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29.95   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49\"]\n[3.468511,\"o\",\"m\\u001B[37m\\u001B[40m percent\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\u001B[8;43H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sur           \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40\"]\n[3.468665,\"o\",\"m 58.5\\u001B[71Gpercent\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\u001B[9;43H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Este          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 38.96   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Hospitals          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 34      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m1        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m1        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[\"]\n[3.468678,\"o\",\"40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Cell antennas      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 300     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Telecomunications  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 40      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Cell towers        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 270     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Peop\"]\n[3.468687,\"o\",\"le in shelters \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8867    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;\"]\n[3.468975,\"o\",\"5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Hospitals          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 51      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Hospitals with ele…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 10      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\u001B[18;43H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 47      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\u001B[19;43H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[\"]\n[3.4689959999999997,\"o\",\"39;49m\\u001B[37m\\u001B[40m Metro         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 57.5\\u001B[71Gpercent\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\u001B[20;43H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Norte         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29\\u001B[20;71Hpercent\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\u001B[21;43H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oeste         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 20.8\\u001B[71Gpercent\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\u001B[22;43H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sur           \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 67\\u001B[22;71Hpercent\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[40\"]\n[3.4690109999999996,\"o\",\"m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\u001B[23;43H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Este          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 50\\u001B[23;71Hpercent\\u001B[K\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[38;5;246m\\u001B[4\"]\n[3.4690299999999996,\"o\",\"0m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Cell antennas      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 312     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number\\u001B[K\\u001B[25;11H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m           \\u001B[25;54H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m-\\u001B[76G\\u001B[32m\\u001B[40m3\\u001B[25;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[4.968208,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Month+Day   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Day   \\r\\n\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 29    \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct1        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 1     \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m O\"]\n[4.968229,\"o\",\"ct1        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 1     \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0\"]\n[4.968246,\"o\",\";1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2     \\u001B[25;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[5.714062,\"o\",\"\\u001B[1;16H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40mResource           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Location      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Value   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Unit      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Sour…\\u001B[2;16H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40mElectricity        \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| Puerto Rico   | 5       | percent   | AEE\\u001B[3;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mTelecomunications  \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 30.5    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m JRTC\\u001B[4;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mPeople in shelters \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 11105   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Vivi…\\u001B[5;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mWater\\u001B[14X\\u001B[5;35H\\u001B(B\\u001B[\"]\n[5.714085,\"o\",\"0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Metro         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 48.75   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[6;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mWater\\u001B[14X\\u001B[6;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Norte         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 25.47   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[7;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mWater\\u001B[14X\\u001B[7;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oeste         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29.95   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[8;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mWater\\u001B[14X\\u001B[8;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sur           \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 58.5    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[9;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mWa\"]\n[5.714097,\"o\",\"ter\\u001B[14X\\u001B[9;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Este          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 38.96   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[10;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mHospitals    \"]\n[5.714188,\"o\",\"      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 34      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ASES\\u001B[11;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mElectricity        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\u001B[12;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mCell antennas      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 300     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m FCC\\u001B[13;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mTelecomunications  \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 40      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m JRTC\\u001B[14;16H\\u001B(B\\u001B[0\"]\n[5.714201,\"o\",\";1m\\u001B[39;49m\\u001B[37m\\u001B[40mCell towers        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 270     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m JRTC\\u001B[15;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mPeople in shelters \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8867    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Vivi…\\u001B[16;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mHospitals          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 51      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Depa…\\u001B[17;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mHospitals with ele…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 10      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B[38;5;246m\\u001B[40m\"]\n[5.7142100000000005,\"o\",\"|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Depa…\\u001B[18;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mWater\\u001B[14X\\u001B[18;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 47      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[\"]\n[5.714313000000001,\"o\",\"m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[19;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mWater\\u001B[14X\\u001B[19;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Metro         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 57.5    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[20;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mWater\\u001B[14X\\u001B[20;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Norte         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[21;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mWater\\u001B[14X\\u001B[21;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oeste         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 20.8    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[22;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mWater\\u001B[14X\\u001B[22;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sur           \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 67      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m perc\"]\n[5.714323,\"o\",\"ent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[23;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mWater\\u001B[14X\\u001B[23;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Este          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 50      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[24;16H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mCell antennas      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 312     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m FCC\\n\\b\\b\\u001B[32m\\u001B[40m4\\u001B[25;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[7.196555,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Month+Day   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Resource           \\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| Electricity        \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Telecomunications  \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m People in shelters \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Sep29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[\"]\n[7.196597,\"o\",\"40m Hospitals          \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct1        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Electricity        \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct1        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Cell antennas      \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Telecomunications  \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Cell towers        \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m People in shelters \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Hospitals          \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Hospitals with ele…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[4\"]\n[7.196609,\"o\",\"0m Oct2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oct2        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Cell antennas      \\u001B[25;55H\"]\n[7.945335999999999,\"o\",\"\\u001B[1;13H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m@\\r\\n\\u001B[C\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m09-\\n\\b\\b\\b\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m09-\\r\\n 09-\\r\\n 09-\\r\\n 09-\\r\\n 09-\\r\\n 09-\\r\\n 09-\\r\\n 09-\\r\\n 10-01\\r\\n 10-01\\r\\n 10-02\\r\\n 10-02\\r\\n 10-02\\r\\n 10-02\\r\\n 10-02\\r\\n 10-02\\r\\n 10-02\\r\\n 10-02\\r\\n 10-02\\r\\n 10-02\\r\\n 10-02\\r\\n 10-02\\u001B[25;54H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m@\\u001B[76G\\u001B[32m\\u001B[40m5\\u001B[25;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[9.473979,\"o\",\"\\u001B[H\\u001B[C\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40mDate     \\u001B[25;11H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m\\\"Date\\\"\\u001B[25;54H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m^\\u001B[76G\\u001B[32m\\u001B[40m6\\u001B[25;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[10.993931,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4;7m\\u001B[38;5;81m\\u001B[40m Date       @\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 10-01       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 10-01       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 10-02      \"]\n[10.99395,\"o\",\" \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\n\\b\\b\\b\\b\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m      \\u001B[25;54H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m!\\u001B[76G\\u001B[32m\\u001B[40m7\\u001B[25;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[12.518304,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4m\\u001B[38;5;81m\\u001B[40m Date       @\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Resource           \\r\\n\\u001B(B\\u001B[0;7m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B[39;49m\\u001B[37m\\u001B[40m‖\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Electricity        \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Telecomunications  \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m People in shelters \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Hospitals          \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;8\"]\n[12.518331,\"o\",\"1m\\u001B[40m 10-01       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Electricity        \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 10-01       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Cell antennas      \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Telecomunications  \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Cell towers        \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m People in shelters \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Hospitals          \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Hospitals with ele…\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 10-02      \"]\n[12.51835,\"o\",\" \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Water\\u001B[14X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Cell antennas      \\u001B[25;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[13.285638,\"o\",\"\\u001B[1;14H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[38;5;81m\\u001B[40m Resource           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[2;14H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|\\u001B(B\\u001B[0;1;7m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m‖\\u001B[3;14H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Telecomunications  \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[4;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m People in shelters \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[5;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[5;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[6;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[6;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[7;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[7;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[8;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[8;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[9;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[9;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[10;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Hospitals          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[11;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[12;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Cell antennas      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[13;14H|\\u001B(B\\u001B[0;1m\\u001B\"]\n[13.285658,\"o\",\"[38;5;81m\\u001B[40m Telecomunications  \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[14;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Cell towers        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[15;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m People in shelters \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[16;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Hospitals          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[17;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Hospitals with ele…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[18;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[18;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[19;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[19;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[20;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[20;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[21;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[21;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[22;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[22;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[23;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[23;35H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[24;14H|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Cell antennas      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\n\\u001B[76G\\u001B[32m\\u001B[40m8\\u001B[25;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[14.719524,\"o\",\"\\u001B[1;15H\\u001B(B\\u001B[0;1;4m\\u001B[38;5;81m\\u001B[40m Resource           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Location      \\u001B[2;15H\\u001B(B\\u001B[0;7m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[39;49m\\u001B[37m\\u001B[40m‖\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[3;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Telecomunications  \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[4;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m People in shelters \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[5;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[5;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Metro         \\u001B[6;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[6;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Norte         \\u001B[7;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[7;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oeste         \\u001B[8;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[8;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Sur           \\u001B[9;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[9;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Este          \\u001B[10;15H\\u001B(B\\u001B[0m\\u001B[38;5;8\"]\n[14.719547,\"o\",\"1m\\u001B[40m Hospitals          \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[11;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[12;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Cell antennas      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[13;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Telecomunications  \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[14;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Cell towers        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[15;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m People in shelters \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[16;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Hospitals          \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[17;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Hospitals with ele…\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[18;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[18;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[19;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[19;3\"]\n[14.719569,\"o\",\"5H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Metro         \\u001B[20;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[20;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Norte         \\u001B[21;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[21;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Oest\"]\n[14.719623,\"o\",\"e         \\u001B[22;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[22;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Sur           \\u001B[23;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[23;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Este          \\u001B[24;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Cell antennas      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\n\\u001B[55G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[15.482986,\"o\",\"\\u001B[H\\n\\u001B(B\\u001B[0;7m\\u001B[38;5;215m\\u001B[40m 09-29       | Electricity        ‖\\u001B(B\\u001B[0;1;7m\\u001B[38;5;215m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0;7m\\u001B[38;5;215m\\u001B[40m| 5       | percent   | AEE  \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m 09-29       | Telecomunications  ‖\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| 30.5    | percent   | JRTC \\r\\n 09-29       | People in shelters ‖\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| 11105   | number    | Vivi…\\r\\u001B[10d 09-29       | Hospitals          ‖\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| 34      | number    | ASES \\r\\n 10-01       | Electricity        ‖\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| 5       | percent   | AEE  \\r\\n 10-01       | Cell antennas      ‖\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| 300     | number    | FCC  \\r\\n 10-02       | Telecomunications  ‖\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| 40      | percent   | JRTC \\r\\n 10-02       | Cell towers        ‖\\u001B(B\\u001B[0;1\"]\n[15.48302,\"o\",\"m\\u001B[38;5;215m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| 270     | number    | JRTC \\r\\n 10-02       | People in shelters ‖\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| 8867    | number    | Vivi…\\r\\n 10-02       | Hospitals          ‖\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| 51      | number    | Depa…\\r\\n 10-02       | Hospitals with ele…‖\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| 10      | number    | Depa…\\r\\n 10-02       | Water\\u001B[14X\\u001B[18;35H‖\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| 47      | percent   | AAA  \\r\\u001B[24d 10-02       | Cell antennas      ‖\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| 312     | number    | FCC  \\u001B[25;11H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mselected 322 rows\\u001B[25;54H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m,\\u001B[76G\\u001B[32m\\u001B[40m9\\u001B[25;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[17.024835,\"o\",\"\\u001B[1;36H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Location      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Value   \\u001B[2;36H\\u001B(B\\u001B[0;7m\\u001B[38;5;215m\\u001B[40m Puerto Rico   |\\u001B(B\\u001B[0;1;7m\\u001B[38;5;215m\\u001B[40m 5       \\u001B[3;36H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m Puerto Rico   |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m 30.5    \\u001B[4;36H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m Puerto Rico   |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m 11105   \\u001B[5;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Metro         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 48.75   \\u001B[6;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Norte         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 25.47   \\u001B[7;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oeste         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 29.95   \\u001B[8;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sur           \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 58.5    \\u001B[9;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Este          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 38.96   \\u001B[10;36H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m Puerto Rico   |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m 34      \\u001B[11;36H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m Puerto Rico   |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m 5       \\u001B[12;36H\"]\n[17.02485,\"o\",\"\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m Puerto Rico   |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m 300     \\u001B[13;36H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m Puerto Rico   |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m 40      \\u001B[14;36H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m Puerto Rico   |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m 270     \\u001B[15;36H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m Puerto Rico   |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m 8867    \\u001B[16;36H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m Puerto Rico   |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m 51      \\u001B[17;36H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m Puerto Rico   |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m 10      \\u001B[18;36H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m Puerto Rico   |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m 47      \\u001B[19;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Metro         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 57.5    \\u001B[20;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Norte         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 29      \\u001B[21;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Oeste         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 20.8    \\u001B[22;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sur           \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 67      \\u001B[23;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Este          \\u001B[38;5;246m\\u001B[40m|\\u001B\"]\n[17.024862000000002,\"o\",\"(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 50      \\u001B[24;36H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m Puerto Rico   |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m 312     \\u001B[25;11H\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[25;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[17.798834000000003,\"o\",\"\\u001B[1;52H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Value   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Unit      \\u001B[2;52H\\u001B(B\\u001B[0;7m\\u001B[38;5;215m\\u001B[40m 5       |\\u001B(B\\u001B[0;1;7m\\u001B[38;5;215m\\u001B[40m percent   \\u001B[3;52H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m 30.5    |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B[4;52H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m 11105   |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m number    \\u001B[5;52H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 48.75   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[6;52H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 25.47   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[7;52H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29.95   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[8;52H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 58.5    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[9;52H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 38.96   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[10;52H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m 34      |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m number    \\u001B[11;52H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m 5       |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B[12;52H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m 300     |\\u001B(B\\u001B[0;1m\\u001B[\"]\n[17.798869000000003,\"o\",\"38;5;215m\\u001B[40m number    \\u001B[13;52H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m 40      |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B[14;52H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m 270     |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m number    \\u001B[15;52H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m 8867    |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m number    \\u001B[16;52H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m 51      |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m number    \\u001B[17;52H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m 10      |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m number    \\u001B[18;52H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m 47      |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B[19;52H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 57.5    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[20;52H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[21;52H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 20.8    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[22;52H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 67      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[23;52H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 50      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[24;52H\\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m 312     |\\u001B(B\\u001B[0;1m\\u001B[38;5;\"]\n[17.798887000000004,\"o\",\"215m\\u001B[40m number    \\u001B[25;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[18.459728000000005,\"o\",\"\\r\\u001B[4d\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m People in shelters \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 11105   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Vivi…\\r\\u001B[10d\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Hospitals          \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 34      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ASES\\u001B[K\\r\\n\\n\\u001B[38;5;81m\\u001B[40m 10-01       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Cell antennas      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 300     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m FCC\\u001B[K\\r\\n\\n\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Cell towers        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;4\"]\n[18.459753000000006,\"o\",\"9m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 270     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m JRTC\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m People in shelters \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8867    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Vivi…\\r\\n\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Hospitals          \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 51      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Depa…\\r\\n\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Hospitals with ele…\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 10      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[4\"]\n[18.459775000000008,\"o\",\"0m number    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Depa…\\r\\u001B[24d\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Cell antennas      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 312     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m number    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m FCC\\u001B[K\\u001B[25;11H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m\\\"number\\\" | 194 matches for /number/ | uns\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m \\\\\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[61G537 rows\\u001B(B\\u001B[0m\\u001B[32m\\u001B[40m  │ ▶ 10\\u001B[25;54H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[19.995089000000007,\"o\",\"\\r\\u001B[4d\\u001B[38;5;215m\\u001B[40m 10-01       | Electricity        ‖ Puerto Rico   | 5       |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| AEE  \\r\\n 10-02       | Telecomunications  ‖ Puerto Rico   | 40      |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| JRTC \\r\\n 10-02       | Water\\u001B[14X\\u001B[6;35H‖ Puerto Rico   | 47      |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| AAA  \\r\\n 10-03       | Electricity        ‖ Puerto Rico   | 6.89    |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| AEE  \\r\\n 10-03       | Telecomunications  ‖ Puerto Rico   | 40      |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| JRTC \\r\\n 10-03       | Water\\u001B[14X\\u001B[9;35H‖ Puerto Rico   | 45      |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| AAA  \\r\\n 10-04       | Electricity        ‖ Puerto Rico   | 8.6     |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| AEE  \\n\\u001B[6G4\\u001B[11;16HTelecomunications\\u001B[11;53H43.32\\u001B[75GJRTC\\r\\n 10-04       | Water\\u001B[14X\\u001B[12;35H‖ \"]\n[19.995115000000006,\"o\",\"Puerto Rico   | 48.2    |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| AAA  \\n\\u001B[6G5\\u001B[13;16HElectricity      \\u001B[13;53H9.2\\u001B[75GAEE \\r\\n 10-05       | Telecomunications  ‖ Puerto Rico   | 45      |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| JRTC \\r\\n 10-05       | Water\\u001B[14X\\u001B[15;35H‖ Puerto Rico   | 54.2    |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| AAA  \\r\\n 10-06       | Electricity        ‖ Puerto Rico   | 10.7    |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| AEE  \\r\\n 10-06       | Telecomunications  ‖ Puerto Rico   | 42      |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| JRTC \\n\\u001B[6G6\\u001B[18;53H55.5\\r\\n 10-07       | Electricity        ‖ Puerto Rico   | 11.7    |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| AEE  \\r\\n 10-07       | Telecomunications  ‖ Puerto Rico   | 44      |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| JRTC \\r\\n 10-07       | Water\\u001B[14X\\u001B[21;35H‖ Puerto Rico   | 56.24   |\\u001B(B\\u001B[0;1m\\u001B[38;5\"]\n[19.995129000000006,\"o\",\";215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| AAA  \\r\\n 10-08       | Electricity        ‖ Puerto Rico   | 11.7    |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| AEE  \\r\\n 10-08       | Telecomunications  ‖ Puerto Rico   | 52      |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| JRTC \\r\\n 10-08       | Water\\u001B[14X\\u001B[24;35H‖ Puerto Rico   | 56.87   |\\u001B(B\\u001B[0;1m\\u001B[38;5;215m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;215m\\u001B[40m| AAA  \\u001B[25;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m_selectedref| selected 128 rows            \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m \\\"\\u001B[61G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m128\\u001B[76G\\u001B(B\\u001B[0m\\u001B[32m\\u001B[40m1\\u001B[25;54H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[21.546338000000006,\"o\",\"\\u001B[H\\n\\u001B(B\\u001B[0;7m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B[39;49m\\u001B[37m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[39;49m\\u001B[37m\\u001B[40m‖ Puerto Rico   | 5       |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| AEE  \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 09-29       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Telecomunications  \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 30.5    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m JRTC\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-01       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Telecomunications  \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 40      \\u001B[38;5;246\"]\n[21.546465000000005,\"o\",\"m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m JRTC\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-02       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[6;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 47      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-03       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 6.89    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-03       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Telecomunications  \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 40      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m JRTC\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-03 \"]\n[21.546494000000006,\"o\",\"      \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[9;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 45      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[\"]\n[21.546602000000007,\"o\",\"K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-04       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.6     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-04       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Telecomunications  \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 43.32   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m JRTC\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-04       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[12;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 48.2    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-05       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[4\"]\n[21.546623000000007,\"o\",\"0m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 9.2     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-05       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Telecomunications  \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 45      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m JRTC\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-05       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[15;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 54.2    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-06       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 10.7    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(\"]\n[21.54664200000001,\"o\",\"B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-06       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Telecomunications  \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 42      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39\"]\n[21.54690900000001,\"o\",\";49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m JRTC\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-06       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[18;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 55.5    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-07       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 11.7    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-07       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Telecomunications  \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 44      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m JRTC\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-07       \\u001B[38;5;246m\\u001B[\"]\n[21.54693200000001,\"o\",\"40m|\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[21;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 56.24   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-08       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 11.7    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-08       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Telecomunications  \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 52      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m JRTC\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m 10-08       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Water\\u001B[14X\\u001B[24;35H\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;\"]\n[21.546958000000007,\"o\",\"49m\\u001B[37m\\u001B[40m 56.87   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AAA\\u001B[K\\u001B[25;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[25;51H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m gu\\u001B[76G\\u001B[32m\\u001B[40m2\\u001B[25;54H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[22.966793000000006,\"o\",\"\\u001B[1;52H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Value   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Unit      \\u001B[2;52H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m 5       \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| percent   \\u001B[3;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 30.5    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[4;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 5       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[5;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 40      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[6;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 47      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[7;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 6.89    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[8;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 40      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[9;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 45      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[10;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.6     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[11;52H\\u001B(B\\u001B\"]\n[22.966817000000006,\"o\",\"[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 43.32   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[12;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 48.2    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[13;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 9.2     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[14;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 45      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[15;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 54.2    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[16;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 10.7    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[17;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 42      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[18;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 55.5    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[19;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 11.7    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[20;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 44      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[21;5\"]\n[22.966834000000006,\"o\",\"2H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 56.24   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[22;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 11.7    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[23;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 52      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[24;52H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 56.87   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[25;54H\"]\n[23.732571000000007,\"o\",\"\\u001B[1;60H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m%\\u001B[2;53H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m   5.00\\u001B[3;53H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  30.50\\u001B[4;53H   5.00\\u001B[5;53H  40.00\\u001B[6;53H  47.00\\u001B[7;53H   6.89\\u001B[8;53H  40.00\\u001B[9;53H  45.00\\u001B[10;53H   8.60\\u001B[11;53H  43.32\\u001B[12;53H  48.20\\u001B[13;53H   9.20\\u001B[14;53H  45.00\\u001B[15;53H  54.20\\u001B[16;53H  10.70\\u001B[17;53H  42.00\\u001B[18;53H  55.50\\u001B[19;53H  11.70\\u001B[20;53H  44.00\\u001B[21;53H  56.24\\u001B[22;53H  11.70\\u001B[23;53H  52.00\\u001B[24;53H  56.87\\u001B[25;51H \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m %\\u001B[76G\\u001B[32m\\u001B[40m3\\u001B[25;54H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[25.301906000000006,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m89.61\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[60X\\u001B[1;66H\\u001B[32m\\u001B[40m1:Electricity\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[2;65H\\u001B[1K \\u001B[31m\\u001B[40m2:Telecomunic…\\u001B[3;59H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[1K \\u001B[33m\\u001B[40m⢀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B[33m\\u001B[40m⡀3:Water\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[4;52H\\u001B[1K \\u001B[33m\\u001B[40m⠄⠠\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[33m\\u001B[40m⠂⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[33m\\u001B[40m⠁\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[33m\\u001B[40m⠄⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[33m\\u001B[40m⢀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[5;48H\\u001B[1K \\u001B[33m\\u001B[40m⡀⠁⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[20X\\u001B[5;72H\\u001B[33m\\u001B[40m⠁\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m68.46\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[29X\\u001B[6;35H\\u001B[33m\\u001B[40m⠠\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B[33m\\u001B[40m⡀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[33m\\u001B[40m⡀⠠\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[33m\\u001B[40m⠂⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[14X\\u001B[6;62H\\u001B[31m\\u001B[40m⡀⢀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[31m\\u001B[40m⡀⢀⠠\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[31m\\u001B[40m⠄⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[31m\\u001B[40m⠄⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[31m\\u001B[40\"]\n[25.301928000000007,\"o\",\"m⠂\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[7;33H\\u001B[1K \\u001B[33m\\u001B[40m⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   \\u001B[33m\\u001B[40m⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[33m\\u001B[40m⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m           \\u001B[31m\\u001B[40m⠂⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[31m\\u001B[40m⠂⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[31m\\u001B[40m⠁⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[8;26H\\u001B[1K \\u001B[33m\\u001B[40m⡀⠠\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[33m\\u001B[40m⡀⢀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[33m\\u001B[40m⡀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   \\u001B[33m\\u001B[40m⠂\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m         \\u001B[31m\\u001B[40m⠠\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[31m\\u001B[40m⠄⠂⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[9;24H\\u001B[1K \\u001B[33m\\u001B[40m⢀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m            \\u001B[31m\\u001B[40m⠠\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[31m\\u001B[40m⠄⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[31m\\u001B[40m⠁⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[31m\\u001B[40m⠁\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[10;20H\\u001B[1K \\u001B[33m\\u001B[40m⡀⢀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[33m\\u001B[40m⠄\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      \\u001B[31m\\u001B[40m⢀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[31m\\u001B[40m⠂⠈⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[31m\\u001B[40m⠁\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[11;18H\\u001B[1K \\u001B[33m\\u001B[40m\"]\n[25.301939000000008,\"o\",\"⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B[31m\\u001B[40m⡀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[31m\\u001B[40m⠄⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[31m\\u001B[40m⠁\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m47.30\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m            \\u001B[33m\\u001B[40m⢀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      \\u001B[31m\\u001B[40m\"]\n[25.302104000000007,\"o\",\"⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[49X\\u001B[75G\\u001B[32m\\u001B[40m⡀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[13;14H\\u001B[1K \\u001B[33m\\u001B[40m⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[33m\\u001B[40m⠄\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[31m\\u001B[40m⠠\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[31m\\u001B[40m⢀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[50X\\u001B[73G\\u001B[32m\\u001B[40m⢀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[14;17H\\u001B[1K \\u001B[31m\\u001B[40m⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[31m\\u001B[40m⠄\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[43X\\u001B[14;65H\\u001B[32m\\u001B[40m⡀⠐⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[32m\\u001B[40m⠂⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[15;14H\\u001B[1K \\u001B[31m\\u001B[40m⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[31m\\u001B[40m⠁\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[41X\\u001B[15;59H\\u001B[32m\\u001B[40m⠄⢀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[32m\\u001B[40m⠄⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[16;56H\\u001B[1K \\u001B[32m\\u001B[40m⠠\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m26.15\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m     \\u001B[31m\\u001B[40m⠂\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[41X\\u001B[17;53H\\u001B[32m\\u001B[40m⠄⠠\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[32m\\u001B[40m⠂\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[17;72H\\u001B[32m\\u001B[40m⠂\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[18;48H\\u001B[1K \\u001B[32m\\u001B[40m⡀⠄⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[1\"]\n[25.302112000000008,\"o\",\"9;39H\\u001B[1K \\u001B[32m\\u001B[40m⡀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m     \\u001B[32m\\u001B[40m⠂⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[20;36H\\u001B[1K \\u001B[32m\\u001B[40m⡀⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m     \\u001B[32m\\u001B[40m⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[21;24H\\u001B[1K \\u001B[32m\\u001B[40m⠠\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[32m\\u001B[40m⠂\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[32m\\u001B[40m⠁\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[32m\\u001B[40m⠄⠠⢀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m       \\u001B[32m\\u001B[40m⠁\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[22;20H\\u001B[1K \\u001B[32m\\u001B[40m⠄⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[32m\\u001B[40m⠂\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   \\u001B[32m\\u001B[40m⠠\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m            \\u001B[32m\\u001B[40m⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m5.00\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m⠀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m     \\u001B[32m\\u001B[40m⠄⠈⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m           \\u001B[32m\\u001B[40m⠈\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    Date»\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m09-29\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m           \\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m10-10\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m           \\u001B(B\\u001B[0;1m\\u001B[39;4\"]\n[25.30212300000001,\"o\",\"9m\\u001B[37m\\u001B[40m10-21\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m           \\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m11-01\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m           \\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m11-12\\u001B[25;21H_graph| loading data points | \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m .\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[60G128 plot\\u001B[76G\\u001B(B\\u001B[0m\\u001B[32m\\u001B[40m4\\u001B[25;53H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[27.08818100000001,\"o\",\"\\b\\b\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mloaded 128 \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m .\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m       128 plots\\u001B[25;64H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[30.06734900000001,\"o\",\"\\u001B[1;66H\\u001B[38;5;238m\\u001B[40m1:Electricity\\u001B[12;75H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\n\\b\\b\\b \\u001B[14;65H\\u001B[K\\n\\u001B[59G\\u001B[K\\r\\n\\u001B[K\\u001B[17;53H\\u001B[K\\r\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\u001B[23;17H\\u001B[K\\u001B[25;29H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[33X\\u001B[25;62H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m 1\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[30.82523500000001,\"o\",\"\\u001B[1;66H\\u001B[32m\\u001B[40m1:Electricity\\u001B[12;75H⡀\\n\\b\\b\\b⢀\\u001B[14;65H⡀⠐⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[32m\\u001B[40m⠂⠈\\u001B[15;59H⠄⢀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[32m\\u001B[40m⠄⠈\\u001B[16;57H⠠\\n\\u001B[53G⠄⠠\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[32m\\u001B[40m⠂\\u001B[17;72H⠂\\u001B[18;49H⡀⠄⠈\\u001B[19;40H⡀\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m     \\u001B[32m\\u001B[40m⠂⠈\\u001B[20;37H⡀⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m     \\u001B[32m\\u001B[40m⠈\\u001B[21;25H⠠\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[32m\\u001B[40m⠂\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[32m\\u001B[40m⠁\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[32m\\u001B[40m⠄⠠⢀\\u001B[43G⠁\\u001B[22;21H⠄⠐\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[32m\\u001B[40m⠂\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   \\u001B[32m\\u001B[40m⠠\\u001B[22;41H⠈\\u001B[23;17H⠄⠈⠈\\u001B[23;31H⠈\\u001B[25;64H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[32.00692400000001,\"o\",\"\\u001B[2;66H\\u001B[38;5;238m\\u001B[40m2:Telecomunic…\\u001B[6;62H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[7;53H\\u001B[K\\n\\u001B[47G\\u001B[K\\u001B[9;38H\\u001B[K\\u001B[10;31H\\u001B[K\\u001B[11;24H\\u001B[K\\n  \\u001B[13;19H    \\u001B[14;64H\\u001B[1K\\n\\u001B[58G\\u001B[1K\\u001B[17;11H \\u001B[25;63H\\u001B[37m\\u001B[40m2\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[32.50283900000001,\"o\",\"\\u001B[3;65H\\u001B[1K \\u001B[38;5;238m\\u001B[40m3:Water\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\n\\u001B[K\\u001B[6;35H\\u001B[K\\r\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\u001B[12;18H \\u001B[13;72H\\u001B[1K\\u001B[25;63H\\u001B[37m\\u001B[40m3\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[34.685995000000005,\"o\",\"\\u001B[23;11H \\u001B[25;48H\\u001B[37m\\u001B[40m BUTTON1_PRESSED\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[35.85616100000001,\"o\",\"\\u001B[13;64H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m⠀⠀⠀⠀⠀⠀⠀⠀⠀\\u001B[32m\\u001B[40m⢀\\u001B[39;49m\\u001B[37m\\u001B[40m⠀⠀⠀⠀\\u001B[14;64H⠀\\u001B[32m\\u001B[40m⡀⠐⠐\\u001B[39;49m\\u001B[37m\\u001B[40m⠀\\u001B[32m\\u001B[40m⠂⠈\\u001B[39;49m\\u001B[37m\\u001B[40m⠀⠀⠀⠀⠀⠀⠀\\u001B[15;64H⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\\u001B[16;64H⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\\u001B[17;64H⠀⠀⠀⠀⠀⠀⠀⠀\\u001B[32m\\u001B[40m⠂\\u001B[39;49m\\u001B[37m\\u001B[40m⠀⠀⠀⠀⠀\\u001B[25;47H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m BUTTON1_RELEASED\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[37.646468000000006,\"o\",\"\\u001B[13;73H\\u001B(B\\u001B[0;1;7m\\u001B[32m\\u001B[40m⢀\\u001B[14;65H⡀⠐⠐\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m⠀\\u001B(B\\u001B[0;1;7m\\u001B[32m\\u001B[40m⠂⠈\\n\\n\\n\\u001B[C⠂\\u001B[25;29H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mselected 7 rows\\u001B[18X\\u001B[25;62H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m s\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[39.98119700000001,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4m\\u001B[38;5;81m\\u001B[40m Date       @\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[38;5;81m\\u001B[40m Resource           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Location      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Value  %\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Unit      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Sour…\\r\\n\\u001B(B\\u001B[0;7m\\u001B[38;5;81m\\u001B[40m 11-05       \\u001B[39;49m\\u001B[37m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[39;49m\\u001B[37m\\u001B[40m‖ Puerto Rico   |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m   41.03 \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| percent   | AEE  \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 11-09       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m   43.20 \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\r\\n\\u001B[38;5;81m\\u001B[40m 11-06       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Ri\"]\n[39.98123700000001,\"o\",\"co   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m   42.20 \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\r\\n\\u001B[38;5;81m\\u001B[40m 11-11       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m   44.50 \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\r\\n\\u001B[38;5;81m\\u001B[40m 11-07       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m   42.40 \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\r\\n\\u001B[38;5;81m\\u001B[40m 11-08       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m   42.40 \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m\"]\n[39.981252000000005,\"o\",\"|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\r\\n\\u001B[38;5;81m\\u001B[40m 11-10       \\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m   31.20 \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\r\\n\\n\\n\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\u001B[25;21H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m|\\u001B[22X\\u001B[25;63H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m^J\\u001B[71G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m   7 row\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[41.809896,\"o\",\"\\u001B[1;36H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Location      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Value  %\\u001B[2;36H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|   41.03 \\u001B[3;36H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   43.20 \\u001B[4;36H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   42.20 \\u001B[5;36H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   44.50 \\u001B[6;36H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   42.40 \\u001B[7;36H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   42.40 \\u001B[8;36H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   31.20 \\u001B[25;56H\\u001B[37m\\u001B[40m KEY_LEFT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[42.100991,\"o\",\"\\u001B[1;15H\\u001B(B\\u001B[0;1;4;7m\\u001B[38;5;81m\\u001B[40m Resource           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Location      \\u001B[2;15H\\u001B(B\\u001B[0;1;7m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m‖ Puerto Rico   \\u001B[3;15H\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[4;15H\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[5;15H\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[6;15H\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[7;15H\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[8;15H\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[25;65H\"]\n[42.547007,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4;7m\\u001B[38;5;81m\\u001B[40m Date       @\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[38;5;81m\\u001B[40m Resource           \\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[38;5;81m\\u001B[40m 11-05       \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 11-09       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 11-06       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 11-11       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 11-07       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 11-08       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 11-10       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[43.470198,\"o\",\"\\u001B[3;6H\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m6\\u001B[3;56H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m2\\n\\u001B[6G\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m7\\u001B[4;58H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m4\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m08\\u001B[5;56H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m2.4\\n\\u001B[6G\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m9\\u001B[6;56H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m3.2\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m10\\u001B[7;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m31.2\\n\\u001B[6G\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m1\\u001B[8;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m44.5\\u001B[25;56H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m       \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m [\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[44.855806,\"o\",\"\\u001B[H\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 11-05       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   41.03 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\u001B[K\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[38;5;81m\\u001B[40m 11-06       \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[39;49m\\u001B[37m\\u001B[40m‖ Puerto Rico   |   42.20 | percent   | AEE  \\u001B[25;56H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_DOWN\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[45.074039,\"o\",\"\\u001B[H\\n\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 11-06       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   42.20 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\u001B[K\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[38;5;81m\\u001B[40m 11-07       \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[39;49m\\u001B[37m\\u001B[40m‖ Puerto Rico   |   42.40 | percent   | AEE  \\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[45.445513999999996,\"o\",\"\\r\\u001B[4d\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 11-07       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   42.40 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\u001B[K\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[38;5;81m\\u001B[40m 11-08       \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[39;49m\\u001B[37m\\u001B[40m‖ Puerto Rico   |   42.40 | percent   | AEE  \\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[45.659803999999994,\"o\",\"\\r\\u001B[5d\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 11-08       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   42.40 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\u001B[K\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[38;5;81m\\u001B[40m 11-09       \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[39;49m\\u001B[37m\\u001B[40m‖ Puerto Rico   |   43.20 | percent   | AEE  \\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[45.857206999999995,\"o\",\"\\r\\u001B[6d\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m 11-09       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   43.20 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m percent   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m AEE\\u001B[K\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[38;5;81m\\u001B[40m 11-10       \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[39;49m\\u001B[37m\\u001B[40m‖ Puerto Rico   |   31.20 | percent   | AEE  \\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[46.387581999999995,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4m\\u001B[38;5;81m\\u001B[40m Date       @\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[38;5;81m\\u001B[40m Resource           \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 11-05       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Electricity        \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 11-06       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Electricity        \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 11-07       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Electricity        \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 11-08       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Electricity        \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 11-09       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Electricity        \\r\\n\\u001B(B\\u001B[0;7m\\u001B[38;5;81m\\u001B[40m 11-10       \\u001B[39;49m\\u001B[37m\\u001B[40m|\\u001B(B\\u001B[0;1;7m\\u001B[38;5;81m\\u001B[40m Electricity        \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m 11-11       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[25;55H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_RIGHT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[46.599692,\"o\",\"\\u001B[1;15H\\u001B(B\\u001B[0;1;4m\\u001B[38;5;81m\\u001B[40m Resource           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Location      \\u001B[2;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[3;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[4;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[5;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[6;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[7;15H\\u001B(B\\u001B[0;7m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[39;49m\\u001B[37m\\u001B[40m‖\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[8;15H\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Electricity        \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[46.798119,\"o\",\"\\u001B[1;36H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Location      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Value  %\\u001B[2;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m   41.03 \\u001B[3;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m   42.20 \\u001B[4;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m   42.40 \\u001B[5;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m   42.40 \\u001B[6;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m   43.20 \\u001B[7;36H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m   31.20 \\u001B[8;36H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Puerto Rico   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m   44.50 \\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[48.815128,\"o\",\"\\u001B[?1l\\u001B>\\u001B[?1000l\"]\n[48.815156,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\r\\u001B[K\\u001B[25;1H\\u001B[?12l\\u001B[?25h\\u001B[?1049l\\r\\u001B[?1l\\u001B>\"]\n"
  },
  {
    "path": "docs/casts/pivot.cast",
    "content": "{\"width\":80,\"version\":2,\"height\":25,\"env\":{\"TERM\":\"xterm-256color\",\"SHELL\":\"/usr/bin/zsh\"},\"command\":\"bin/vd -p tests/pivot.vd -w 1.5 --replay-movement True\"}\n[0.069038,\"o\",\"\\u001B[?1049h\\u001B[1;25r\\u001B(B\\u001B[m\\u001B[4l\\u001B[?7h\\u001B[?1h\\u001B=\"]\n[0.069093,\"o\",\"\\u001B[39;49m\\u001B[?1000h\"]\n[0.069493,\"o\",\"\\u001B[?25l\"]\n[0.071133,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[H\\u001B[2J\"]\n[0.071318,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[H\\u001B[2J\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m OrderDate          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Region             \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Rep                \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Item          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m>\\r\\u001B[25d\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40msample| \\\"sample_data/sample.tsv\\\" | opening sample as t\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m \\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m         0   0%\\u001B(B\\u001B[0m\\u001B[32m\\u001B[40m  │ ▶ 0/5\\u001B[25;56H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[0.20931900000000003,\"o\",\"\\u001B[1;15H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Region    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Rep\\u001B[1;40H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Item      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Units   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Unit_Cost   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m T…\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-06   \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| East      | Jones      | Pencil    | 95      | 1.99        | 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-23   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Kivell     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 50\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 9…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-09   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jardine  \"]\n[0.20936600000000002,\"o\",\"  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 36\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-26   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Gill\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen\\u001B[52G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 27\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-03-15   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sorvino    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 56\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-01   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B\"]\n[0.20939100000000002,\"o\",\"[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 60\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-18   \\u001B\"]\n[0.20969700000000002,\"o\",\"(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Andrews    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 75\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-05   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jardine    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 90\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-22   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Thompson   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 32\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 6…\\r\\n\\u001B(B\\u001B[0;1\"]\n[0.209741,\"o\",\"m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-08   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 60\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-25   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Morgan     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 90\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-12   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Howard     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B\"]\n[0.209771,\"o\",\"[39;49m\\u001B[37m\\u001B[40m 5…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-29   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 81\\u001B\"]\n[0.210128,\"o\",\"[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-08-15   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 35\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-01   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Smith\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Desk\\u001B[52G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 125.00\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-18   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[4\"]\n[0.21016400000000002,\"o\",\"0m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 16\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-05   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Morgan     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 28\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-22   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen\\u001B[52G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 64\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-08   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37\"]\n[0.21019700000000002,\"o\",\"m\\u001B[40m Pen\\u001B[52G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-25   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;24\"]\n[0.21041400000000002,\"o\",\"6m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Kivell     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 96\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-12   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Smith\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 67\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1.29\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-29   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 74\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2017-01-15   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39\"]\n[0.21045000000000003,\"o\",\";49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Gill\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 46\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\u001B[25;64H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m43 rows\\u001B[77G\\u001B(B\\u001B[0m\\u001B[32m\\u001B[40m1\\u001B[25;56H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[1.711487,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m OrderDate    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Region    \\r\\n\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-06   |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-23   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-09   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-26   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-03-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-01   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-18   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-05   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-08   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[\"]\n[1.711592,\"o\",\"39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-25   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-12   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-29   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-08-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-01   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-18   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-05   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-08   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-25   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-12   \\u001B[38;5;\"]\n[1.711655,\"o\",\"246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-29   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2017-01-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[25;9H\\u001B[46X\\u001B[25;56H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[2.462295,\"o\",\"\\u001B[1;16H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Region    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Rep        \\u001B[2;16H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m East      |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[3;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Kivell     \\u001B[4;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jardine    \\u001B[5;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Gill       \\u001B[6;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Sorvino    \\u001B[7;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[8;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Andrews    \\u001B[9;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jardine    \\u001B[10;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Thompson   \\u001B[11;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East \"]\n[2.46237,\"o\",\"     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[12;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Morgan     \\u001B[13;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Howard     \\u001B[14;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[15;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[16;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Smith      \\u001B[17;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[18;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Morgan     \\u001B[19;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[20;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[21;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[3\"]\n[2.462455,\"o\",\"9;49m\\u001B[37m\\u001B[40m Kivell     \\u001B[22;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Smith      \\u001B[23;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[24;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Gill       \\u001B[25;56H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[3.1948689999999997,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4m\\u001B[38;5;81m\\u001B[40m Rep        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m OrderDate    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Region    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Item      \\r\\n\\u001B(B\\u001B[0;7m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[39;49m\\u001B[37m\\u001B[40m‖ 2016-01-06   | East      |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-23   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jardine    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-09   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Gill       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-26   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Sorvino    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\"]\n[3.1949439999999996,\"o\",\"\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-03-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-01   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Andrews    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-18   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jardine    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-05   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Thompson   \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 20\"]\n[3.1950289999999995,\"o\",\"16-06-08   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Morgan     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-25   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246\"]\n[3.1959359999999997,\"o\",\"m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Howard     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-12   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-29   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-08-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Smith      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-01   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Desk      \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-18   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\"]\n[3.1960029999999997,\"o\",\"\\u001B[37m\\u001B[40m Pen Set   \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Morgan     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-05   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-08   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-25   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Smith      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-12   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B\"]\n[3.196048,\"o\",\"(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-29   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Gill       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2017-01-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\n  \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m !\\u001B[77G\\u001B[32m\\u001B[40m2\\u001B[25;56H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[4.696004,\"o\",\"\\u001B[1;41H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Item      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Units   \\u001B[2;41H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m 95      \\u001B[3;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 50      \\u001B[4;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 36      \\u001B[5;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 27      \\u001B[6;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 56      \\u001B[7;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 60      \\u001B[8;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 75      \\u001B[9;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 90      \\u001B[10;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 32      \\u001B[11;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1\"]\n[4.696097,\"o\",\"m\\u001B[39;49m\\u001B[37m\\u001B[40m 60      \\u001B[12;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 90      \\u001B[13;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 29      \\u001B[14;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 81      \\u001B[15;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 35      \\u001B[16;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Desk      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2       \\u001B[17;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 16      \\u001B[18;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 28      \\u001B[19;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 64      \\u001B[20;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 15      \\u001B[21;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 96      \\u001B[22;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen\"]\n[4.696186,\"o\",\"cil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 67      \\u001B[23;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 74      \\u001B[24;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 46      \\n\\u001B[56G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[5.447702,\"o\",\"\\u001B[1;61H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m#\\u001B[2;54H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m     95\\u001B[3;54H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m     50\\u001B[4;54H     36\\u001B[5;54H     27\\u001B[6;54H     56\\u001B[7;54H     60\\u001B[8;54H     75\\u001B[9;54H     90\\u001B[10;54H     32\\u001B[11;54H     60\\u001B[12;54H     90\\u001B[13;54H     29\\u001B[14;54H     81\\u001B[15;54H     35\\u001B[16;54H      2\\u001B[17;54H     16\\u001B[18;54H     28\\u001B[19;54H     64\\u001B[20;54H     15\\u001B[21;54H     96\\u001B[22;54H     67\\u001B[23;54H     74\\u001B[24;54H     46\\n\\u001B[55G\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m#\\u001B[77G\\u001B[32m\\u001B[40m3\\u001B[25;56H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[6.9503509999999995,\"o\",\"\\u001B[25;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m\\\"sum\\\"\\u001B[25;55H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m+\\u001B[77G\\u001B[32m\\u001B[40m4\\u001B[25;56H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[8.441415,\"o\",\"\\u001B[1;41H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Item      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Units  #\\u001B[2;41H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|      95 \\u001B[3;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      50 \\u001B[4;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      36 \\u001B[5;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      27 \\u001B[6;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      56 \\u001B[7;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      60 \\u001B[8;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      75 \\u001B[9;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      90 \\u001B[10;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      32 \\u001B[11;41H\\u001B(B\\u001B\"]\n[8.441505,\"o\",\"[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      60 \\u001B[12;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      90 \\u001B[13;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      29 \\u001B[14;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      81 \\u001B[15;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      35 \\u001B[16;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Desk      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m       2 \\u001B[17;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      16 \\u001B[18;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      28 \\u001B[19;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      64 \\u001B[20;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      15 \\u001B[21;4\"]\n[8.441576999999999,\"o\",\"1H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      96 \\u001B[22;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      67 \\u001B[23;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      74 \\u001B[24;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      46 \\u001B[25;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m     \\u001B[25;56H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[9.187885999999999,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4;7m\\u001B[38;5;81m\\u001B[40m Rep        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Total_Units_sum  #\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil_Units_sum  #\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder_Units_sum  #\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Pe\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m>\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m‖               396 |\\u001B[40G          130 |                124 |  64\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[3;29H193 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[18X\\u001B[3;52H0 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[3;72H50 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Jardine    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[4;29H281 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[16X\\u001B[4;50H126 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[16X\\u001B[4;71H105 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[\"]\n[9.187962999999998,\"o\",\"40m Gill       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[5;29H213 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[5;51H60 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[16X\\u001B[5;71H126 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  27\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Sorvino    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[6;29H142 \\u001B[38;5;246m\\u001B[40m|\\u001B[40G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m           56 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[18X\\u001B[73G7 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  76\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Andrews    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[7;29H183 \\u001B[38;5;246m\\u001B[40m|\\u001B[40G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          155 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[7;72H28 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Thompson   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[16X\\u001B[8;30H89 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[8;51H32 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[8;72H57 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \"]\n[9.188035999999999,\"o\",\" 0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Morgan     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[9;29H173 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[9;51H90 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[9;72H28 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1\"]\n[9.188621999999999,\"o\",\"m\\u001B[38;5;81m\\u001B[40m Howard     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[10;29H125 \\u001B[38;5;246m\\u001B[40m|\\u001B[40G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m            0 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[10;72H29 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  96\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Parent     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[11;29H170 \\u001B[38;5;246m\\u001B[40m|\\u001B[40G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m            0 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[11;72H81 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  15\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Smith      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[12;29H156 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[12;51H67 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[12;72H87 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[7G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m_pivot_Item|\\u001B[25;43H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m W\\u001B[25;53H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m11 aggregated\\u001B[77G\\u001B(B\\u001B[0m\\u001B[32m\\u001B[40m5\\u001B[25;45H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[10.66658,\"o\",\"\\u001B[25;20H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mreplay complete\\u001B[25;43H  \\u001B[52G\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m W\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        11 aggregated rows\\u001B[25;54H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[11.888112,\"o\",\"\\u001B[?1l\\u001B>\\u001B[?1000l\"]\n[11.888226,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\r\\u001B[K\\u001B[25;1H\\u001B[?12l\\u001B[?25h\\u001B[?1049l\\r\\u001B[?1l\\u001B>\"]\n"
  },
  {
    "path": "docs/casts/save-restore.cast",
    "content": "{\"width\":80,\"version\":2,\"height\":25,\"env\":{\"TERM\":\"xterm-256color\",\"SHELL\":\"/usr/bin/zsh\"}}\n[0.124452,\"o\",\"\\u001B[1m\\u001B[7m%\\u001B[27m\\u001B[1m\\u001B[0m                                                                               \\r \\r\"]\n[0.12453399999999999,\"o\",\"\\u001B]2;kefala@221b: ~/git\\u0007\\u001B]1;~/git\\u0007\"]\n[0.124621,\"o\",\"\\r\\u001B[0m\\u001B[27m\\u001B[24m\\u001B[J$ \\u001B[K\\u001B[?1h\\u001B=\"]\n[0.124639,\"o\",\"\\u001B[?2004h\"]\n[0.462165,\"o\",\"#\"]\n[0.701189,\"o\",\"\\b# \"]\n[0.799055,\"o\",\"s\"]\n[0.89483,\"o\",\"a\"]\n[1.074621,\"o\",\"v\"]\n[1.146195,\"o\",\"i\"]\n[1.340875,\"o\",\"n\"]\n[1.416752,\"o\",\"g\"]\n[1.5714190000000001,\"o\",\" \"]\n[1.6516060000000001,\"o\",\"a\"]\n[1.7698900000000002,\"o\",\" \"]\n[1.880122,\"o\",\"v\"]\n[2.008868,\"o\",\"i\"]\n[2.108121,\"o\",\"s\"]\n[2.20362,\"o\",\"i\"]\n[2.278019,\"o\",\"d\"]\n[2.371281,\"o\",\"a\"]\n[2.5144550000000003,\"o\",\"t\"]\n[2.628747,\"o\",\"a\"]\n[2.738,\"o\",\" \"]\n[2.844152,\"o\",\"s\"]\n[3.0154009999999998,\"o\",\"e\"]\n[3.212592,\"o\",\"s\"]\n[3.359356,\"o\",\"s\"]\n[3.443314,\"o\",\"i\"]\n[3.617487,\"o\",\"o\"]\n[3.816211,\"o\",\"n\"]\n[4.097756,\"o\",\"\\u001B[?1l\\u001B>\\u001B[?2004l\"]\n[4.097842,\"o\",\"\\r\\r\\n\"]\n[4.099376,\"o\",\"\\u001B[1m\\u001B[7m%\\u001B[27m\\u001B[1m\\u001B[0m                                                                               \\r \\r\"]\n[4.099952,\"o\",\"\\u001B]2;kefala@221b: ~/git\\u0007\\u001B]1;~/git\\u0007\"]\n[4.10024,\"o\",\"\\r\\u001B[0m\\u001B[27m\\u001B[24m\\u001B[J$ \\u001B[K\"]\n[4.100398,\"o\",\"\\u001B[?1h\\u001B=\"]\n[4.100543,\"o\",\"\\u001B[?2004h\"]\n[4.656793,\"o\",\"v\"]\n[4.839621,\"o\",\"\\bvd\"]\n[4.975404,\"o\",\" \"]\n[5.101146,\"o\",\"s\"]\n[5.149027,\"o\",\"a\"]\n[5.250909,\"o\",\"m\"]\n[5.439823,\"o\",\"ple.tsv\\u001B[1m \\u001B[0m\"]\n[5.749550999999999,\"o\",\"\\b\\u001B[0m \\b\\u001B[?1l\\u001B>\"]\n[5.749641,\"o\",\"\\u001B[?2004l\\r\\r\\n\"]\n[5.7509369999999995,\"o\",\"\\u001B]2;vd sample.tsv\\u0007\\u001B]1;vd\\u0007\"]\n[5.822315,\"o\",\"\\u001B[?1049h\\u001B[1;25r\\u001B(B\\u001B[m\\u001B[4l\\u001B[?7h\\u001B[?1h\\u001B=\\u001B[39;49m\\u001B[?1000h\"]\n[5.823271999999999,\"o\",\"\\u001B[?25l\"]\n[5.829268999999999,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[H\\u001B[2J\"]\n[5.829502999999999,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[H\\u001B[2J\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m OrderDate    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Region    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Rep        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Item      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Units   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Unit_Cost   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m T…\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-06   \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| East      | Jones      | Pencil    | 95      | 1.99        | 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-23   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Kivell     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 50\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 9…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-09   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B\"]\n[5.829521999999999,\"o\",\"[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jardine    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 36\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-26   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Gill\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen\\u001B[52G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 27\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-03-15   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sorvino    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 56\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-01   \\u001B(B\\u001B[0m\\u001B\"]\n[5.829533999999999,\"o\",\"[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 60\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(\"]\n[5.829700999999999,\"o\",\"B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-18   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Andrews    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 75\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-05   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jardine    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 90\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-22   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Thompson   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 32\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\"]\n[5.829711999999999,\"o\",\"\\u001B[40m 1.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 6…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-08   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 60\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-25   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Morgan     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 90\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-12   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Howard     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29\\u001B[62G\\u001B[38\"]\n[5.829734999999999,\"o\",\";5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-29   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[3\"]\n[5.8299379999999985,\"o\",\"9;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 81\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-08-15   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 35\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-01   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Smith\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Desk\\u001B[52G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 125.00\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-18   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones\"]\n[5.829953999999998,\"o\",\"\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 16\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-05   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Morgan     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 28\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-22   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen\\u001B[52G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 64\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-08   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\"]\n[5.829977999999998,\"o\",\"\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen\\u001B[52G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-25\"]\n[5.8300639999999975,\"o\",\"   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Kivell     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 96\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-12   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Smith\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 67\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1.29\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-29   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 74\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B\"]\n[5.830073999999997,\"o\",\"[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2017-01-15   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Gill\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 46\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40msample| saul.pw/VisiData v0.99 | opening sample as tsv | loaded\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m \\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        43 rows\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[6.819822999999997,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m OrderDate    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Region    \\r\\n\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-06   |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-23   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-09   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-26   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-03-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-01   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-18   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-05   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-08   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[\"]\n[6.819907999999997,\"o\",\"39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-25   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-12   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-29   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-08-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-01   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-18   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-05   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-08   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-25   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-12   \\u001B[38;5;\"]\n[6.819963999999997,\"o\",\"246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-29   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2017-01-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[25;9H\\u001B[46X\\u001B[25;55H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_RIGHT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[7.2364409999999975,\"o\",\"\\u001B[1;16H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Region    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Rep        \\u001B[2;16H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m East      |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[3;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Kivell     \\u001B[4;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jardine    \\u001B[5;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Gill       \\u001B[6;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Sorvino    \\u001B[7;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[8;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Andrews    \\u001B[9;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jardine    \\u001B[10;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Thompson   \\u001B[11;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East \"]\n[7.236490999999997,\"o\",\"     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[12;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Morgan     \\u001B[13;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Howard     \\u001B[14;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[15;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[16;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Smith      \\u001B[17;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[18;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Morgan     \\u001B[19;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[20;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[21;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[3\"]\n[7.236547999999997,\"o\",\"9;49m\\u001B[37m\\u001B[40m Kivell     \\u001B[22;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Smith      \\u001B[23;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[24;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Gill       \\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[7.999552999999997,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4m\\u001B[38;5;81m\\u001B[40m Rep        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m OrderDate    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Region    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Item      \\r\\n\\u001B(B\\u001B[0;7m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[39;49m\\u001B[37m\\u001B[40m‖ 2016-01-06   | East      |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-23   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jardine    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-09   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Gill       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-26   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Sorvino    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\"]\n[7.999585999999997,\"o\",\"\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-03-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-01   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Andrews    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-18   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jardine    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-05   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Thompson   \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 20\"]\n[7.999613999999998,\"o\",\"16-06-08   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Morgan     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-25   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246\"]\n[7.999865999999997,\"o\",\"m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Howard     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-12   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-29   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-08-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Smith      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-01   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Desk      \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-18   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\"]\n[7.999883999999997,\"o\",\"\\u001B[37m\\u001B[40m Pen Set   \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Morgan     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-05   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-08   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-25   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Smith      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-12   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B\"]\n[7.999902999999997,\"o\",\"(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-29   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Gill       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2017-01-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\n           \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m !\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[8.817726999999998,\"o\",\"\\u001B[1;41H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Item      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Units   \\u001B[2;41H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m 95      \\u001B[3;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 50      \\u001B[4;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 36      \\u001B[5;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 27      \\u001B[6;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 56      \\u001B[7;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 60      \\u001B[8;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 75      \\u001B[9;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 90      \\u001B[10;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 32      \\u001B[11;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1\"]\n[8.817852999999998,\"o\",\"m\\u001B[39;49m\\u001B[37m\\u001B[40m 60      \\u001B[12;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 90      \\u001B[13;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 29      \\u001B[14;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 81      \\u001B[15;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 35      \\u001B[16;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Desk      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2       \\u001B[17;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 16      \\u001B[18;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 28      \\u001B[19;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 64      \\u001B[20;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 15      \\u001B[21;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 96      \\u001B[22;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen\"]\n[8.817933999999997,\"o\",\"cil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 67      \\u001B[23;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 74      \\u001B[24;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 46      \\u001B[25;55H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_RIGHT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[10.490555999999998,\"o\",\"\\u001B[1;61H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m#\\u001B[2;54H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m     95\\u001B[3;54H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m     50\\u001B[4;54H     36\\u001B[5;54H     27\\u001B[6;54H     56\\u001B[7;54H     60\\u001B[8;54H     75\\u001B[9;54H     90\\u001B[10;54H     32\\u001B[11;54H     60\\u001B[12;54H     90\\u001B[13;54H     29\\u001B[14;54H     81\\u001B[15;54H     35\\u001B[16;54H      2\\u001B[17;54H     16\\u001B[18;54H     28\\u001B[19;54H     64\\u001B[20;54H     15\\u001B[21;54H     96\\u001B[22;54H     67\\u001B[23;54H     74\\u001B[24;54H     46\\n\\u001B[55G        \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m #\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[12.207915999999997,\"o\",\"\\u001B[?12l\\u001B[?25h\"]\n[12.208010999999997,\"o\",\"\\rmin/max/avg/mean/median/sum/distinct/count/keymax:\\u001B[22X \"]\n[13.054279999999997,\"o\",\"s\"]\n[13.491581999999998,\"o\",\"u\"]\n[13.870766999999997,\"o\",\"m\"]\n[14.353713999999997,\"o\",\"\\u001B[?25l\"]\n[14.379365999999996,\"o\",\"\\r\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40msample| \\\"sum\\\"\\u001B[49X\\u001B[25;63H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m +\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[15.541859999999996,\"o\",\"\\u001B[1;41H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Item      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Units  #\\u001B[2;41H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|      95 \\u001B[3;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      50 \\u001B[4;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      36 \\u001B[5;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      27 \\u001B[6;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      56 \\u001B[7;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      60 \\u001B[8;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      75 \\u001B[9;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      90 \\u001B[10;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      32 \\u001B[11;41H\\u001B(B\\u001B\"]\n[15.541876999999996,\"o\",\"[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      60 \\u001B[12;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      90 \\u001B[13;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      29 \\u001B[14;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      81 \\u001B[15;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      35 \\u001B[16;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Desk      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m       2 \\u001B[17;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      16 \\u001B[18;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      28 \\u001B[19;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      64 \\u001B[20;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      15 \\u001B[21;4\"]\n[15.541883999999996,\"o\",\"1H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      96 \\u001B[22;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      67 \\u001B[23;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      74 \\u001B[24;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      46 \\u001B[25;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m     \\u001B[25;56H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_LEFT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[17.039891999999995,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4;7m\\u001B[38;5;81m\\u001B[40m Rep        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Total_Units_sum  #\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil_Units_sum  #\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder_Units_sum  #\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Pe\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m>\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m‖               396 |\\u001B[40G          130 |                124 |  64\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[3;29H193 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[18X\\u001B[3;52H0 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[3;72H50 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Jardine    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[4;29H281 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[16X\\u001B[4;50H126 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[16X\\u001B[4;71H105 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[\"]\n[17.039935999999994,\"o\",\"40m Gill       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[5;29H213 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[5;51H60 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[16X\\u001B[5;71H126 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  27\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Sorvino    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[6;29H142 \\u001B[38;5;246m\\u001B[40m|\\u001B[40G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m           56 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[18X\\u001B[73G7 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  76\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Andrews    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[7;29H183 \\u001B[38;5;246m\\u001B[40m|\\u001B[40G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          155 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[7;72H28 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Thompson   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[16X\\u001B[8;30H89 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[8;51H32 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[8;72H57 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \"]\n[17.039961999999992,\"o\",\" 0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Morgan     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[9;29H173 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[9;51H90 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[9;72H28 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1\"]\n[17.04011599999999,\"o\",\"m\\u001B[38;5;81m\\u001B[40m Howard     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[10;29H125 \\u001B[38;5;246m\\u001B[40m|\\u001B[40G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m            0 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[10;72H29 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  96\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Parent     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[11;29H170 \\u001B[38;5;246m\\u001B[40m|\\u001B[40G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m            0 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[11;72H81 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  15\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Smith      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[12;29H156 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[12;51H67 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[12;72H87 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[7G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m_pivot_Item|\\u001B[25;52H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m W\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        11 aggregated\\u001B[25;54H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[19.44621799999999,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m sheet    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m col     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m row   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m keystrokes   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m input        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m comment            \\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|  \\u001B[21G|\\u001B[29G| o  \\u001B[2;44H| sample.tsv   | open file          \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m sample   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Rep     \\u001B[38;5;246m\\u001B[40m|\\u001B[29G|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m !  \\u001B[3;44H\\u001B[38;5;246m\\u001B[40m|\\u001B[52G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m pin current column…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m sample   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Units   \\u001B[38;5;246m\\u001B[40m|\\u001B[29G|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m #  \\u001B[4;44H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[14X\\u001B[4;59H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m se\"]\n[19.44631399999999,\"o\",\"t type of curren…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m sample   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Units   \\u001B[38;5;246m\\u001B[40m|\\u001B[29G|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m +  \\u001B[5;44H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m sum          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m add aggregator to …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m sample   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Item    \\u001B[38;5;246m\\u001B[40m|\\u001B[29G|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m W  \\u001B[6;44H\\u001B[38;5;246m\\u001B[40m|\\u001B[51G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pivot the current …\\r\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\u001B[25d\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mcmdlog|           \\u001B[25;52H       \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m D\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m         5 command\\u001B[25;61H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[22.06262999999999,\"o\",\"\\u001B[?12l\\u001B[?25h\"]\n[22.06306799999999,\"o\",\"\\rsave to: cmdlog-1.vd\\u001B[52X\\u001B[25;10H\"]\n[23.44613699999999,\"o\",\"p          \\u001B[25;11H\"]\n[23.64767999999999,\"o\",\"i\"]\n[23.74140299999999,\"o\",\"v\"]\n[23.87351199999999,\"o\",\"o\"]\n[24.072528999999992,\"o\",\"t\"]\n[24.220941999999994,\"o\",\".\"]\n[24.378386999999993,\"o\",\"v\"]\n[24.610200999999993,\"o\",\"d\"]\n[25.119928999999992,\"o\",\"\\u001B[?25l\"]\n[25.12721999999999,\"o\",\"\\r\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mcmdlog| \\\"pivot.vd\\\" | saving to pivot.vd | pivot.vd save f\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m ^D\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m         5 c\\u001B[25;61H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[26.741427999999992,\"o\",\"\\u001B[25;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[50X\\u001B[25;59H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m g\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[26.85963599999999,\"o\",\"\\u001B[?1l\\u001B>\\u001B[?1000l\\u001B[39;49m\\u001B[37m\\u001B[40m\\r\\u001B[K\\u001B[25;1H\\u001B[?12l\\u001B[?25h\\u001B[?1049l\\r\\u001B[?1l\\u001B>\"]\n[26.863220999999992,\"o\",\"\\u001B[1m\\u001B[7m%\\u001B[27m\\u001B[1m\\u001B[0m                                                                               \\r \\r\"]\n[26.863541999999992,\"o\",\"\\u001B]2;kefala@221b: ~/git\\u0007\"]\n[26.863783999999992,\"o\",\"\\u001B]1;~/git\\u0007\"]\n[26.86385299999999,\"o\",\"\\r\\u001B[0m\\u001B[27m\\u001B[24m\\u001B[J$ \\u001B[K\"]\n[26.86399699999999,\"o\",\"\\u001B[?1h\\u001B=\"]\n[26.86413099999999,\"o\",\"\\u001B[?2004h\"]\n[27.852115999999988,\"o\",\"#\"]\n[28.219874999999988,\"o\",\"\\b# \"]\n[28.39644399999999,\"o\",\"s\"]\n[28.687480999999988,\"o\",\"\\b \\b\"]\n[28.758364999999987,\"o\",\"r\"]\n[28.84803799999999,\"o\",\"e\"]\n[29.05471599999999,\"o\",\"s\"]\n[29.17106999999999,\"o\",\"t\"]\n[29.29135399999999,\"o\",\"o\"]\n[29.392849999999992,\"o\",\"r\"]\n[29.51560999999999,\"o\",\"i\"]\n[29.70071499999999,\"o\",\"n\"]\n[29.739489999999993,\"o\",\"g\"]\n[29.91713499999999,\"o\",\" \"]\n[30.00667899999999,\"o\",\"a\"]\n[30.13717399999999,\"o\",\" \"]\n[30.27639799999999,\"o\",\"v\"]\n[30.38677899999999,\"o\",\"i\"]\n[30.50003899999999,\"o\",\"s\"]\n[30.57925799999999,\"o\",\"i\"]\n[30.69753599999999,\"o\",\"d\"]\n[30.82109899999999,\"o\",\"a\"]\n[30.95551999999999,\"o\",\"t\"]\n[31.067063999999988,\"o\",\"a\"]\n[31.190580999999987,\"o\",\" \"]\n[31.310097999999986,\"o\",\"s\"]\n[31.508845999999984,\"o\",\"e\"]\n[31.694153999999983,\"o\",\"s\"]\n[31.845658999999984,\"o\",\"s\"]\n[31.950536999999983,\"o\",\"i\"]\n[32.15068299999998,\"o\",\"o\"]\n[32.37171899999998,\"o\",\"n\"]\n[32.65097599999998,\"o\",\"\\u001B[?1l\\u001B>\\u001B[?2004l\\r\\r\\n\"]\n[32.65176699999998,\"o\",\"\\u001B[1m\\u001B[7m%\\u001B[27m\\u001B[1m\\u001B[0m                                                                               \\r \\r\"]\n[32.65203599999998,\"o\",\"\\u001B]2;kefala@221b: ~/git\\u0007\"]\n[32.65210699999998,\"o\",\"\\u001B]1;~/git\\u0007\"]\n[32.65235399999998,\"o\",\"\\r\\u001B[0m\\u001B[27m\\u001B[24m\\u001B[J$ \\u001B[K\"]\n[32.65244899999998,\"o\",\"\\u001B[?1h\\u001B=\"]\n[32.65251499999998,\"o\",\"\\u001B[?2004h\"]\n[33.63198499999998,\"o\",\"v\"]\n[33.86220099999998,\"o\",\"\\bvd\"]\n[34.01457499999998,\"o\",\" \"]\n[34.30559999999998,\"o\",\"-\"]\n[34.58447399999998,\"o\",\"p\"]\n[34.97478899999998,\"o\",\" \"]\n[35.20056399999998,\"o\",\"p\"]\n[35.37866699999998,\"o\",\"i\"]\n[35.49350899999998,\"o\",\"vot.vd\\u001B[1m \\u001B[0m\"]\n[36.134830999999984,\"o\",\"\\b\\u001B[0m \\b\"]\n[36.13491699999999,\"o\",\"\\u001B[?1l\\u001B>\"]\n[36.13515899999999,\"o\",\"\\u001B[?2004l\\r\\r\\n\"]\n[36.137073999999984,\"o\",\"\\u001B]2;vd -p pivot.vd\\u0007\\u001B]1;vd\\u0007\"]\n[36.23513299999998,\"o\",\"\\u001B[?1049h\\u001B[1;25r\\u001B(B\\u001B[m\\u001B[4l\\u001B[?7h\\u001B[?1h\\u001B=\"]\n[36.23515299999998,\"o\",\"\\u001B[39;49m\\u001B[?1000h\"]\n[36.235570999999986,\"o\",\"\\u001B[?25l\"]\n[36.23731199999999,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[H\\u001B[2J\"]\n[36.23745899999999,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[H\\u001B[2J\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m sheet    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m col     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m row   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m keystrokes   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m input        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m comment            \\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|         |       | o            | sample.tsv   | open file          \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m sample   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Rep     \\u001B[38;5;246m\\u001B[40m|\\u001B[29G|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m !\\u001B[3;44H\\u001B[38;5;246m\\u001B[40m|\\u001B[3;59H|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m pin current column…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m sample   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Units   \\u001B[38;5;246m\\u001B[40m|\\u001B[29G|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m #\\u001B[4;44H\\u001B[38;5;246m\\u001B[40m|\\u001B[4;59H|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m set type of curren…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m sample   \\u001B(B\\u001B[0m\"]\n[36.23747499999999,\"o\",\"\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Units   \\u001B[38;5;246m\\u001B[40m|\\u001B[29G|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m +\\u001B[5;44H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m sum\\u001B[5;59H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m add aggregator to …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m sample   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Item    \\u001B[38;5;246m\\u001B[40m|\\u001B[29G|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m W\\u001B[6;44H\\u001B[38;5;246m\\u001B[40m|\\u001B[6;59H|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pivot the current …\\r\\u001B[25d\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mpivot| \\\"sample.tsv\\\" | <F1> or z? opens help           \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m \\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m         5   0%\\u001B(B\\u001B[0m\\u001B[32m\\u001B[40m  │ ▶ 0/5\\u001B[25;56H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[36.36219599999999,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4;7m\\u001B[38;5;81m\\u001B[40m Rep        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Total_Units_sum  #\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil_Units_sum  #\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder_Units_sum  #\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Pe\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m>\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m‖\\u001B[21G \\u001B[29G396 |\\u001B[2;44H      130 |                124 |  64\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B[29G193 \\u001B[38;5;246m\\u001B[40m|\\u001B[3;44H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[52G0 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[3;72H50 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Jardine    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B[29G281 \\u001B[38;5;246m\\u001B[40m|\\u001B[4;44H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      126 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[16X\\u001B[4;71H105 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40\"]\n[36.36229399999999,\"o\",\"m Gill       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B[29G213 \\u001B[38;5;246m\\u001B[40m|\\u001B[5;44H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m       60 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[16X\\u001B[5;71H126 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  27\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Sorvino    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B[29G142 \\u001B[38;5;246m\\u001B[40m|\\u001B[6;44H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[51G56 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[18X\\u001B[73G7 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  76\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Andrews    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[7;29H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m183 \\u001B[38;5;246m\\u001B[40m|\\u001B[7;50H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m155 \\u001B[38;5;246m\\u001B[40m|\\u001B[7;72H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m28 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Thompson   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[8;30H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m89 \\u001B[38;5;246m\\u001B[40m|\\u001B[8;51H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m32 \\u001B[38;5;246m\\u001B[40m|\\u001B[8;72H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m57 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Morga\"]\n[36.36236099999999,\"o\",\"n     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[9;29H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m173 \\u001B[38;5;246m\\u001B[40m|\\u001B[9;51H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m90 \\u001B[38;5;246m\\u001B[40m|\\u001B[9;72H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m28 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Howard     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[4\"]\n[36.362418999999996,\"o\",\"0m‖\\u001B[10;29H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m125 \\u001B[38;5;246m\\u001B[40m|\\u001B[10;52H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m0 \\u001B[38;5;246m\\u001B[40m|\\u001B[10;72H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m29 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  96\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Parent     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[11;29H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m170 \\u001B[38;5;246m\\u001B[40m|\\u001B[11;52H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m0 \\u001B[38;5;246m\\u001B[40m|\\u001B[11;72H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m81 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  15\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Smith      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B[12;29H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m156 \\u001B[38;5;246m\\u001B[40m|\\u001B[12;51H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m67 \\u001B[38;5;246m\\u001B[40m|\\u001B[12;72H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m87 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\u001B[25d\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40msample_pivot_Item| replay complete         \\u001B[25;52H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m W\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[62G11 aggregated rows\\u001B[25;54H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[40.150507,\"o\",\"\\u001B[?1l\\u001B>\\u001B[?1000l\\u001B[39;49m\\u001B[37m\\u001B[40m\\r\\u001B[K\\u001B[25;1H\\u001B[?12l\\u001B[?25h\\u001B[?1049l\\r\\u001B[?1l\\u001B>\"]\n[40.153932,\"o\",\"\\u001B[1m\\u001B[7m%\\u001B[27m\\u001B[1m\\u001B[0m                                                                               \\r \\r\"]\n[40.154399,\"o\",\"\\u001B]2;kefala@221b: ~/git\\u0007\\u001B]1;~/git\\u0007\"]\n[40.154669,\"o\",\"\\r\\u001B[0m\\u001B[27m\\u001B[24m\\u001B[J$ \\u001B[K\"]\n[40.154759999999996,\"o\",\"\\u001B[?1h\\u001B=\"]\n[40.154841999999995,\"o\",\"\\u001B[?2004h\"]\n[41.391563,\"o\",\"\\u001B[?2004l\\r\\r\\n\"]\n"
  },
  {
    "path": "docs/casts/split-regex.cast",
    "content": "{\"width\":80,\"version\":2,\"height\":25,\"env\":{\"TERM\":\"xterm-256color\",\"SHELL\":\"/usr/bin/zsh\"},\"command\":\"vd xd-metadata.zip\"}\n[0.099817,\"o\",\"\\u001B[?1049h\\u001B[1;25r\\u001B(B\\u001B[m\\u001B[4l\\u001B[?7h\\u001B[?1h\\u001B=\"]\n[0.099886,\"o\",\"\\u001B[39;49m\\u001B[?1000h\"]\n[0.105923,\"o\",\"\\u001B[?25l\"]\n[0.10755200000000001,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[H\\u001B[2J\"]\n[0.107687,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[H\\u001B[2J\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m filename         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m file_size  #\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m date_time          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m compress_size  #\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m xd/README        \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|          67 | (2018, 2, 5, 23, 1…|              64 ‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m xd/puzzles.tsv   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m     9184789 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m (2018, 2, 5, 23, 1…\\u001B[38;5;246m\\u001B[40m|\\u001B[3;64H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m1924305 \\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m xd/stats.tsv     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B[26G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m144275 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m (2018, 2, 5, 23, 1…\\u001B[38;5;246m\\u001B[40m|\\u001B[4;66H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m16617 \\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m xd/similar.tsv   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[\"]\n[0.107708,\"o\",\"40m     2959574 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m (2018, 2, 5, 23, 1…\\u001B[38;5;246m\\u001B[40m|\\u001B[5;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m372989 \\u001B[38;5;246m\\u001B[40m‖\\r\\u001B[25d\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mxd-metadata| saul.pw/VisiData v1.0 | opening xd-metadata as zi\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m \\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m         4 files\\u001B[25;64H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[1.02474,\"o\",\"\\u001B[H\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m xd/README        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          67 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m (2018, 2, 5, 23, 1…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[14X\\u001B[2;69H64 \\u001B[38;5;246m\\u001B[40m‖\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m xd/puzzles.tsv   \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|     9184789 | (2018, 2, 5, 23, 1…|         1924305 ‖\\u001B[25;14H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[41X\\u001B[25;55H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_DOWN\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[2.141385,\"o\",\"\\u001B[H\\u001B[C\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40mxdid    \\u001B[1;19H \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Date         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Size    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Title              \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Author     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m>\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-01-11   \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| 2006-01-11   | 15x15   | THE Daily Crosswor…| by Victor F…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-01-24   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-01-24   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor F…\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mtmdcr2006-07-20   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-07-20   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37\"]\n[2.141493,\"o\",\"m\\u001B[40m by Victor F…\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mtmdcr2006-08-24   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-08-24   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor F…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-09-14   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-09-14   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor F…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2005-01-10   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-01-10   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Earl Ree…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2005-11-22   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-11-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38\"]\n[2.141587,\"o\",\";5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor F…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m pzz2009-05-03     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2009-05-03   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15 \"]\n[2.141625,\"o\",\"  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m High-Tech Mergers  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Roy Leban\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-06      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01-06   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SOMETHING'S NOT RI…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-13      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01-13   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m A PARTICULAR PUZZLE\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox a…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-20      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01-20   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ALPHABET SOUP\\u001B[66G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-27      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\"]\n[2.141721,\"o\",\"\\u001B[37m\\u001B[40m 2013-01-27   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ETHNIC JOKES\\u001B[66G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox a…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-02-03      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02-03   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THAT HURTS!\\u001B[14;66H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-02-10      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02-10   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m RYE HUMOR\\u001B[15;66H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox a…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-02-17      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02-17   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m HIDDEN MESSAGE     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\r\\n\\u001B(B\\u001B[0;1m\\u001B[3\"]\n[2.141751,\"o\",\"9;49m\\u001B[37m\\u001B[40m bg2013-02-24      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02-24   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m WHAT IS IT?\\u001B[17;66H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox a…\\r\\n\\u001B(B\\u001B[0;1\"]\n[2.141944,\"o\",\"m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-03      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03-03   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m CENTENNIALS\\u001B[18;66H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-10      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03-10   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ROCK GARDEN\\u001B[19;66H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Emily Co…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-17      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03-17   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m DO IT AGAIN\\u001B[20;66H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-24      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03-24   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ECHO CHAM\"]\n[2.141968,\"o\",\"BER\\u001B[66G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox a…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-31      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03-31   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m MOVING PARTS\\u001B[66G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-04-07      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-04-07   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m NORTHERN NEIGHBOUR \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox a…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-04-14      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-04-14   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STEP LIVELY\\u001B[24;66H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mpuzzles| opening puzzles as tsv\\u001B[25;55H       \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m ^J\\u001B[72G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m111   0%\\u001B[25\"]\n[2.141993,\"o\",\";65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[2.2468939999999997,\"o\",\"\\u001B[70G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m11113  17\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[2.3514549999999996,\"o\",\"\\u001B[70G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m20867  29\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[2.4570079999999996,\"o\",\"\\u001B[70G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m33216  45\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[2.5630709999999994,\"o\",\"\\u001B[70G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m45853  61\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[2.6679709999999996,\"o\",\"\\u001B[70G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m58966  79\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[2.77288,\"o\",\"\\u001B[70G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m67061  91\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[2.877264,\"o\",\"\\u001B[25;33H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m| loaded puzzles\\u001B[25;70H72181 rows\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[3.9201429999999995,\"o\",\"\\u001B[?1000l\\u001B[?12l\\u001B[?25h\\rcolumn name regex:\\u001B[48X \"]\n[4.349711999999999,\"o\",\"A\"]\n[4.563555999999999,\"o\",\"u\"]\n[4.726216999999999,\"o\",\"t\"]\n[4.840983999999999,\"o\",\"h\"]\n[5.056730999999999,\"o\",\"o\"]\n[5.1592459999999996,\"o\",\"r\"]\n[5.361732999999999,\"o\",\"\\u001B[?25l\\u001B[?1000h\"]\n[5.369077999999999,\"o\",\"\\u001B[H\\u001B[38;5;246m\\u001B[40m<\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40mDate         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Size    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Title              \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Author             \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Editor   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-01-11   | 15x15   | THE Daily Crosswor…|\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|          |\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-01-24   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-07-20   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m by Vic\"]\n[5.369107999999999,\"o\",\"tor Fleming,…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-08-24   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-09-14   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-01-10   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m by Earl Reed & Vic…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-11-22   \\u001B[38;5;246m\\u001B\"]\n[5.369127999999999,\"o\",\"[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2009\"]\n[5.369388999999999,\"o\",\"-05-03   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m High-Tech Mergers  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Roy Leban          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\r\\n 2013-01-06   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SOMETHING'S NOT RI…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\r\\n 2013-01-13   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m A PARTICULAR PUZZLE\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01-20   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ALPHABET SOUP      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;\"]\n[5.369414999999999,\"o\",\"1m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\r\\n 2013-01-27   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ETHNIC JOKES       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02-03   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THAT HURTS!        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\r\\n 2013-02-10   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m RYE HUMOR          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 20\"]\n[5.369435999999999,\"o\",\"13-02-17   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m HIDDEN MESSAGE     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;4\"]\n[5.369629,\"o\",\"9m\\u001B[37m\\u001B[40m…\\r\\n 2013-02-24   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m WHAT IS IT?        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03-03   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m CENTENNIALS        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\r\\n 2013-03-10   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ROCK GARDEN        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m by Emily Cox and H…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03-17   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m DO IT AGAIN        \\u001B[38;\"]\n[5.369674,\"o\",\"5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\r\\n 2013-03-24   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ECHO CHAMBER       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03-31   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m MOVING PARTS       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\r\\n 2013-04-07   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m NORTHERN NEIGHBOUR \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\r\\n\\u001B(B\\u001B[m\\u001B[\"]\n[5.3696969999999995,\"o\",\"39;49m\\u001B[37m\\u001B[40m 2013-04-14   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STEP LIVELY        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mpuzzles| \\\"Author\\\"\\u001B[45X\\u001B[25;63H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m c\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\b\\b\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[6.9513679999999995,\"o\",\"\\u001B[H\\u001B[C\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40mAuthor                                              \\u001B[1;67H            \\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming, Little Rock, AR -- edited by Wayne Robert Williams         \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming, Little Rock, AR -- edited by Wayne Robert Williams         \\r\\n by Victor Fleming, Little Rock, AR -- edited by Wayne Robert Williams         \\r\\n by Victor Fleming, Little Rock, AR -- edited by Wayne Robert Williams         \\r\\n by Victor Fleming, Little Rock, AR -- edited by Wayne Robert Williams         \\r\\n by Earl Reed & Victor Fleming, Little Rock, AR -- edited by Wayne Robert Will…\\r\\n by Victor Fleming, Little Rock, AR -- edited by Wayne Robert Williams         \\r\\n Roy Leban\\u001B[46X\\u001B[9;67H             \\r\\n Henry Hook\\u001B[46X\\u001B[10;67H             \\r\\n Emily Cox and Henry Rathvon\\u001B[51X\\r\\n Henry Hook\\u001B[46X\\u001B[12;67H             \\r\\n Emily Cox and Henry Rathvon\\u001B[51X\\r\\n Henry Hook\\u001B[46X\\u001B[14;67H             \\r\\n Emily Cox and Henry Rathvon\\u001B[51X\\r\\n Henry Hook\\u001B[46X\\u001B[16;67H      \"]\n[6.951404999999999,\"o\",\"       \\r\\n Emily Cox and Henry Rathvon\\u001B[51X\\r\\n Henry Hook\\u001B[46X\\u001B[18;67H             \\r\\n by Emily Cox and Henry Rathvon\\u001B[48X\\r\\n Henry Hook\\u001B[46X\\u001B[20;67H             \\r\\n Emily Cox and Henry Rathvon\\u001B[51X\\r\\n Henry Hook\\u001B[46X\\u001B[22;67H             \\r\\n Emily Cox and Henry Rathvon\\u001B[51X\\r\\n Henry Hook\\u001B[46X\\u001B[24;67H             \\u001B[25;10H        \\u001B[25;64H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m_\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[8.588235999999998,\"o\",\"\\u001B[?1000l\\u001B[?12l\\u001B[?25h\"]\n[8.588384999999999,\"o\",\"\\rsplit regex:\\u001B[54X \"]\n[8.855528999999999,\"o\",\"e\"]\n[8.979446,\"o\",\"d\"]\n[9.085787999999999,\"o\",\"i\"]\n[9.229187,\"o\",\"t\"]\n[9.390137,\"o\",\"e\"]\n[9.541692,\"o\",\"d\"]\n[9.617752,\"o\",\"\\u001B[?25l\\u001B[?1000h\"]\n[9.6196,\"o\",\"\\r\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mpuzzles| \\\"edited\\\"\\u001B[45X\\u001B[25;63H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m :\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\b\\b\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[10.335342,\"o\",\"\\u001B[1;21H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Author_re0         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Author_re1         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Editor   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Cop\\u001B[2;20H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| by Victor Fleming,…|  by Wayne Robert W…|          | © 2…\\u001B[3;20H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[4;20H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[5;20H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \"]\n[10.335379000000001,\"o\",\"by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[6;20H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[7;20H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Earl Reed & Vic…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[8;20H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[9;21H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\"]\n[10.335398000000001,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m Roy Leban          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[9;62H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[10;21H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m He\"]\n[10.335679,\"o\",\"nry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[10;62H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[11;20H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[11;62H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[12;21H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[12;62H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[13;20H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[13;62H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37\"]\n[10.335718,\"o\",\"m\\u001B[40m © 2…\\u001B[14;21H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[14;62H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[15;20H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[15;62H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[16;21H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[16;62H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[17;20H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[17;62H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\"]\n[10.335747,\"o\",\"\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[18;21H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[18;62H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40\"]\n[10.335867,\"o\",\"m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[19;20H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Emily Cox and H…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[19;62H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[20;21H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[20;62H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[21;20H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[21;62H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[22;21H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[22;62H\\u001B\"]\n[10.335899,\"o\",\"(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[23;20H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[23;62H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[24;21H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[24;62H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2…\\u001B[25;10H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B[25;64H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m_\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[12.809714,\"o\",\"\\u001B[1;8H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m_re0\\u001B[1;32H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m1\\u001B[1;44HEditor   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Copyright          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m A1_…\\u001B[2;23H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m by Wayne Robert W…|          | © 2006 Tribune Med…| ELE\\u001B[3;23H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ISL\\u001B[4;23H by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STE\\u001B[5;23H by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m BEL\\u001B[6;23H by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37\"]\n[12.809747,\"o\",\"m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m NIP\\u001B[7;23H by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SPU\\u001B[8;23H by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SCA\\u001B[9;23H¿        \\u001B[9;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[9;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2009 by Puzzazz  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m KWA\\u001B[10;23H¿         \\u001B[10;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[10;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2012 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m PUS\\u001B[11;23H¿\\u001B[17X\\u001B[11;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[11;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2012 by \"]\n[12.809769,\"o\",\"Emily Co…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m CAT\\u001B[12;23H¿         \\u001B[12;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[12;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2012 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m FAZ\\u001B[13;\"]\n[12.810212,\"o\",\"23H¿\\u001B[17X\\u001B[13;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[13;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2012 Emily Cox a…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SIT\\u001B[14;23H¿         \\u001B[14;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[14;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m MED\\u001B[15;23H¿\\u001B[17X\\u001B[15;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[15;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Emily Cox a…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STI\\u001B[16;23H¿         \\u001B[16;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[16;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SHA\\u001B[17;23H¿\\u001B[17X\\u001B[17;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[17;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Emily Cox a…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\"]\n[12.810248,\"o\",\"\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SAL\\u001B[18;23H¿         \\u001B[18;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[18;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m BAA\\u001B[19;23H¿\\u001B[17X\\u001B[19;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[19;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 by Emily Co…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m RED\\u001B[20;23H¿         \\u001B[20;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[20;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m REL\\u001B[21;23H¿\\u001B[17X\\u001B[21;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[21;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Emily Cox a…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m BLO\\u001B[22;23H¿         \\u001B[22;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[22;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 \"]\n[12.810298999999999,\"o\",\"Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m CES\\u001B[23;23H¿\\u001B[17X\\u001B[23;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[23;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Emily Cox a…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SAN\\u001B[24;2\"]\n[12.810438999999999,\"o\",\"3H¿         \\u001B[24;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\u001B[24;53H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STO\\u001B[25;64H\\u001B[37m\\u001B[40m-\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[14.415447999999998,\"o\",\"\\u001B[?1000l\\u001B[?12l\\u001B[?25h\"]\n[14.415560999999999,\"o\",\"\\u001B[HAuthor_re0__________\\u001B[25;64H\\u001B[37m\\u001B[40m^\\u001B[H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[14.809798999999998,\"o\",\"a_________\\ra\"]\n[14.889859999999999,\"o\",\"u\"]\n[15.085697999999999,\"o\",\"t\"]\n[15.173528,\"o\",\"h\"]\n[15.389256999999999,\"o\",\"o\"]\n[15.462204999999999,\"o\",\"r\"]\n[15.852433999999999,\"o\",\"\\u001B[?25l\\u001B[?1000h\"]\n[15.860143999999998,\"o\",\"\\r\\u001B[38;5;246m\\u001B[40m<\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40mauthor             \\u001B[25;10H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m\\\"author\\\"\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[16.244287999999997,\"o\",\"\\u001B[H\\u001B[C\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40mauthor             \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Author_re1         \\r\\n\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…|\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Earl Reed & Vic…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Roy Leban          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\r\\n\\u001B(B\\u001B[m\\u001B[\"]\n[16.244311999999997,\"o\",\"39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Emily Cox and H…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook       \"]\n[16.244329999999998,\"o\",\"  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[25;10H        \\u001B[25;55H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_RIGHT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[16.855264,\"o\",\"\\u001B[25;55H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m ~\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[17.566318,\"o\",\"\\u001B[1;22H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Author_re1         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Editor   \\u001B[2;22H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…|\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[3;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[4;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[5;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[6;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[7;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[8;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[9;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[9;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[10;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[1\"]\n[17.566347,\"o\",\"7X\\u001B[10;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[11;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[11;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[12;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[12;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[13;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[13;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[14;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[14;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[15;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[15;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[16;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[16;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[17;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[17;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[18;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[4\"]\n[17.566363,\"o\",\"0m ¿\\u001B[17X\\u001B[18;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[19;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[19;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[20;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[20;\"]\n[17.566415,\"o\",\"41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[21;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[21;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[22;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[22;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[23;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[23;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[24;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[24;41H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\n  \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_RIGHT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[18.102016,\"o\",\"\\u001B[25;55H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m ~\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[19.593069999999997,\"o\",\"\\u001B[?1000l\"]\n[19.593223,\"o\",\"\\u001B[?12l\\u001B[?25h\"]\n[19.593614,\"o\",\"\\rnew column expr=\\u001B[50X\"]\n[20.185883,\"o\",\"A\"]\n[20.411674,\"o\",\"u\"]\n[20.614763,\"o\",\"t\"]\n[20.703575,\"o\",\"h\"]\n[20.936314,\"o\",\"o\"]\n[21.037336,\"o\",\"r\"]\n[21.328509,\"o\",\"_\"]\n[21.584766000000002,\"o\",\"r\"]\n[21.689923,\"o\",\"e\"]\n[22.040664,\"o\",\"1\"]\n[22.809742,\"o\",\" \"]\n[23.143277,\"o\",\"+\"]\n[23.432382,\"o\",\" \"]\n[23.777759,\"o\",\"E\"]\n[24.085091,\"o\",\"d\"]\n[24.162392999999998,\"o\",\"i\"]\n[24.34978,\"o\",\"tor\"]\n[25.057156,\"o\",\"\\u001B[?25l\\u001B[?1000h\"]\n[25.068737,\"o\",\"\\u001B[1;55H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40mAuthor_re1 + Edito…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Cop\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m>\\u001B[2;55H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m by Wayne Robert W…| © 2\\u001B[3;55H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[4;55H by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[5;55H by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[6;55H by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[7;55H by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[8;55H by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[9;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[10;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[11;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[12;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[13;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[14;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\"]\n[25.068759999999997,\"o\",\"\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[15;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[16;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[17;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[18;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[19;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[20;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[21;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[22;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[23;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\u001B[24;55H\\u001B[19X\\u001B[74G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mpuzzles| \\\"Author_re1 + Editor\\\"\\u001B[32X\\u001B[25;63H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m =\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\b\\b\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[27.319360999999997,\"o\",\"\\u001B[1;22H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Author_re1         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Editor   \\u001B[2;22H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|          \\u001B[3;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[4;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[5;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[6;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[7;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[8;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[9;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[9;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[10;\"]\n[27.319402999999998,\"o\",\"22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[10;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[11;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[11;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[12;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[12;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[13;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[13;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[14;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[14;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[15;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[15;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[16;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[16;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[17;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[17;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[18;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[18;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\"]\n[27.319468999999998,\"o\",\"\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[19;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[19;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[20;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[20;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[21;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[21;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[22;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[22;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[23;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[23;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[24;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[24;41H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[25;10H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[21X\\u001B[25;56H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_LEFT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[28.356934,\"o\",\"\\u001B[1;23H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40mEditor   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Author_re1 + Edito…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Copyright          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m A1_…\\u001B[2;24H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|  by Wayne Robert W…| © 2006 Tribune Med…| ELE\\u001B[3;24H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ISL\\u001B[4;24H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STE\\u001B[5;24H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;\"]\n[28.356976,\"o\",\"49m\\u001B[37m\\u001B[40m BEL\\u001B[6;24H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m NIP\\u001B[7;24H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SPU\\u001B[8;24H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Robert W…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SCA\\u001B[9;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[9;32H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[9;55H© 2009 by Puzzazz  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m KWA\\u001B[10;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[10;32H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[10;55H© 2012 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \"]\n[28.357001,\"o\",\"PUS\\u001B[11;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[11;32H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[11;55H© 2012 by Emily Co…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m CAT\\u001B[12;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[12;32H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \"]\n[28.357261,\"o\",\"         \\u001B[12;55H© 2012 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m FAZ\\u001B[13;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[13;32H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[13;55H© 2012 Emily Cox a…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SIT\\u001B[14;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[14;32H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[14;55H© 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m MED\\u001B[15;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[15;32H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[15;55H© 2013 Emily Cox a…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STI\\u001B[16;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[16;32H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[16;55H© 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SHA\\u001B[17;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[17;32H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[17;55H© 2013 Emily Cox a…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SAL\\u001B[18;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[18;32H\\u001B(B\\u001B[0m\\u001B[38;5;246\"]\n[28.357305,\"o\",\"m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[18;55H© 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m BAA\\u001B[19;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[19;32H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[19;55H© 2013 by Emily Co…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m RED\\u001B[20;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[20;32H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[20;55H© 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m REL\\u001B[21;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[21;32H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[21;55H© 2013 Emily Cox a…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m BLO\\u001B[22;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[22;32H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[22;55H© 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m CES\\u001B[23;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[23;32H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[23;55H© 2013 Emily Cox a…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SAN\\u001B[24;23H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37\"]\n[28.357485,\"o\",\"m\\u001B[40m \\u001B[24;32H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[24;55H© 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STO\\u001B[25;56H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m       \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m -\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[28.696246000000002,\"o\",\"\\u001B[1;23H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40mAuthor_re1 + Edito…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Copyright          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m A1_D1          \\u001B[2;24H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40mby Wayne Robert W…\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| © 2006 Tribune Med…| ELECT_EBAN     \\u001B[3;24H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mby Wayne Robert W…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ISLET_INMAN\\u001B[K\\u001B[4;24H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mby Wayne Robert W…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STE_SALAMI\\u001B[K\\u001B[5;24H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mby Wayne Robert W…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m BELL_BAYH\\u001B[K\\u001B[6;24H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mby Wayne Robert W…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[3\"]\n[28.696416000000003,\"o\",\"7m\\u001B[40m NIP_NAVY\\u001B[K\\u001B[7;24H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mby Wayne Robert W…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SPUDS_SIBS\\u001B[K\\u001B[8;24H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mby Wayne Robert W…\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2006 Tribune Med…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SCADS_STACY\\u001B[K\\u001B[9;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2009 by Puzzazz  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m KWAUC_KXPL\\u001B[K\\u001B[10;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2012 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m PUSH_PIT\\u001B[K\\u001B[11;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2012 by Emily Co…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m CATS_CAST\\u001B[K\\u001B[12;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2012 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[\"]\n[28.696433000000003,\"o\",\"39;49m\\u001B[37m\\u001B[40m FAZES_FAUN\\u001B[K\\u001B[13;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2012 Emily Cox a…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SITS_SPAR\\u001B[K\\u001B[14;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m MED_MIMI\\u001B[K\\u001B[15;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Emily Cox a…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STIR_SONS\\u001B[K\\u001B[16;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SHAM_SNAP\\u001B[K\\u001B[17;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Emily Cox a…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SALONS_SATAY\\u001B[K\\u001B[18;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B\"]\n[28.696450000000002,\"o\",\"[37m\\u001B[40m BAA_BOWS\\u001B[K\\u001B[19;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 by Emily Co…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m REDD_RAPT\\u001B[K\\u001B[20;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m REL_RICKMAN\\u001B[K\\u001B[21;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Emily Cox a…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m BLOC_BMOC\\u001B[K\\u001B[22;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m CEST_CHOO\\u001B[K\\u001B[23;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Emily Cox a…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SANG_SOFA\\u001B[K\\u001B[24;32H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m © 2013 Henry Hook  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[28.696483,\"o\",\" STOODPAT_SHATT\\u001B[K\\u001B[25;65H\"]\n[29.810306,\"o\",\"\\u001B[?1000l\\u001B[?12l\\u001B[?25h\"]\n[29.810413,\"o\",\"\\u001B[1;22HAuthor_re1 + Editor_\\u001B[25;64H\\u001B[37m\\u001B[40m^\\u001B[1;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[30.042655,\"o\",\"e__________________\\u001B[1;23H\"]\n[30.176842,\"o\",\"d\"]\n[30.260441,\"o\",\"i\"]\n[30.439736,\"o\",\"t\"]\n[30.546597,\"o\",\"o\"]\n[30.740772,\"o\",\"r\"]\n[31.917802,\"o\",\"\\u001B[?25l\\u001B[?1000h\"]\n[31.925881999999998,\"o\",\"\\u001B[22G\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m editor             \\u001B[25;10H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m\\\"editor\\\"\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[33.710175,\"o\",\"\\u001B[?1000l\"]\n[33.710323,\"o\",\"\\u001B[?12l\\u001B[?25h\"]\n[33.710761000000005,\"o\",\"\\rcolumn name regex:\\u001B[48X \"]\n[34.09646600000001,\"o\",\"D\"]\n[34.29637,\"o\",\"a\"]\n[34.414588,\"o\",\"t\"]\n[34.532415,\"o\",\"e\"]\n[34.745889,\"o\",\"\\u001B[?25l\\u001B[?1000h\"]\n[34.756979,\"o\",\"\\u001B[H\\u001B[C\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40mDate         \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Size    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Title              \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m author\\u001B[1;63H    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m editor    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m>\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-01-11   \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| 15x15   | THE Daily Crosswor…| by Victor Fleming,…|  by Wayne …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-01-24   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-07-20   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49\"]\n[34.75704,\"o\",\"m\\u001B[37m\\u001B[40m  by Wayne …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-08-24   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-09-14   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-01-10   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Earl Reed & Vic…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-11-22   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Cros\"]\n[34.757076000000005,\"o\",\"swor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2009-05-03   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m High-T\"]\n[34.757293000000004,\"o\",\"ech Mergers  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Roy Leban          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01-06   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SOMETHING'S NOT RI…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01-13   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m A PARTICULAR PUZZLE\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01-20   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ALPHABET SOUP      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01-27   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38\"]\n[34.757322,\"o\",\";5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ETHNIC JOKES       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02-03   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THAT HURTS!        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02-10   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m RYE HUMOR          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02-17   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m HIDDEN MESSAGE     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02-24   \\u001B(B\\u001B[0m\\u001B[38;5;246\"]\n[34.757343,\"o\",\"m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m WHAT IS IT?        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03-03   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40\"]\n[34.75758,\"o\",\"m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m CENTENNIALS        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03-10   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ROCK GARDEN        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Emily Cox and H…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03-17   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m DO IT AGAIN        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03-24   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ECHO CHAMBER       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[\"]\n[34.757602,\"o\",\"37m\\u001B[40m 2013-03-31   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m MOVING PARTS       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-04-07   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m NORTHERN NEIGHBOUR \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-04-14   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STEP LIVELY        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mpuzzles| \\\"Date\\\"\\u001B[47X\\u001B[25;63H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m c\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\b\\b\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[37.944097,\"o\",\"\\u001B[?1000l\\u001B[?12l\\u001B[?25h\"]\n[37.944232,\"o\",\"\\rmatch regex:\\u001B[54X \"]\n[38.999627,\"o\",\"(\"]\n[40.344562999999994,\"o\",\"\\\\\"]\n[41.38060599999999,\"o\",\"d\"]\n[42.47739299999999,\"o\",\"+\"]\n[43.30030099999999,\"o\",\"-\"]\n[45.10931499999999,\"o\",\"\\\\\"]\n[45.37139399999999,\"o\",\"d\"]\n[45.966830999999985,\"o\",\"+\"]\n[46.96558599999999,\"o\",\")\"]\n[47.723345999999985,\"o\",\"\\u001B[?25l\"]\n[47.723694999999985,\"o\",\"\\u001B[?1000h\"]\n[47.73315299999999,\"o\",\"\\u001B[1;17H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40mDate_re0   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Size    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Title              \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m author        \\u001B[2;17H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m2006-01    | 15x15   | THE Daily Crosswor…| by Victor Fleming,…‖\\u001B[3;17H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m2006-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m‖\\u001B[4;17H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m2006-07    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m‖\\u001B[5;17H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m2006-08    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[47.73319099999999,\"o\",\" by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m‖\\u001B[6;17H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m2006-09    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m‖\\u001B[7;17H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m2005-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Earl Reed & Vic…\\u001B[38;5;246m\\u001B[40m‖\\u001B[8;17H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m2005-11    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m‖\\u001B[9;17H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m2009-05    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m High-Tech Mergers  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Roy Leban\\u001B[80G\\u001B[38;5;246m\\u001B[40m‖\\u001B[10;18H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m013-01    \\u001B[\"]\n[47.73321199999999,\"o\",\"38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SOMETHING'S NOT RI…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[80G\\u001B[38;5;246m\\u001B[40m‖\\u001B[11;18H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21\"]\n[47.73339199999999,\"o\",\"x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m A PARTICULAR PUZZLE\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m‖\\u001B[12;18H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ALPHABET SOUP      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[80G\\u001B[38;5;246m\\u001B[40m‖\\u001B[13;18H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ETHNIC JOKES       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m‖\\u001B[14;18H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THAT HURTS!        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[80G\\u001B[38;5;246m\\u001B[40m‖\\u001B[15;18H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m RYE HUMOR          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;4\"]\n[47.733412999999985,\"o\",\"9m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m‖\\u001B[16;18H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m HIDDEN MESSAGE     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[80G\\u001B[38;5;246m\\u001B[40m‖\\u001B[17;18H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m WHAT IS IT?        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m‖\\u001B[18;18H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m CENTENNIALS        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[80G\\u001B[38;5;246m\\u001B[40m‖\\u001B[19;18H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ROCK GARDEN        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Emily Cox and H…\\u001B[38;5;246m\\u001B[40m‖\\u001B[20;18H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m013-03    \\u001B\"]\n[47.73344299999999,\"o\",\"[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m DO IT AGAIN        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[80G\\u001B[38;5;246m\\u001B[40m‖\\u001B[21;18H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x\"]\n[47.73361699999999,\"o\",\"21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ECHO CHAMBER       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m‖\\u001B[22;18H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m MOVING PARTS       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[80G\\u001B[38;5;246m\\u001B[40m‖\\u001B[23;18H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m013-04    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m NORTHERN NEIGHBOUR \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m‖\\u001B[24;18H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m013-04    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STEP LIVELY        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[80G\\u001B[38;5;246m\\u001B[40m‖\\u001B[25;1H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mpuzzles| \\\"(\\\\d+-\\\\d+)\\\"\\u001B[42X\\u001B[25;63H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m ;\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\b\\b\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[50.19105599999999,\"o\",\"\\u001B[1;6H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m_re0   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Size    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Title              \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m author\\u001B[59G      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m editor\\u001B[2;9H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| 15x15   | THE Daily Crosswor…| by Victor Fleming,…|  by Wayne Ro\\u001B[C\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[3;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Ro\\u001B[C\\u001B[K\\u001B[4;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wa\"]\n[50.19109799999999,\"o\",\"yne Ro\\u001B[C\\u001B[K\\u001B[5;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Ro\\u001B[C\\u001B[K\\u001B[6;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Ro\\u001B[C\\u001B[K\\u001B[7;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Earl Reed & Vic…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Ro\\u001B[C\\u001B[K\\u001B[8;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40\"]\n[50.19112499999999,\"o\",\"m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  by Wayne Ro\\u001B[C\\u001B[K\\u001B[9;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m High-Tech Mergers  \\u001B[38;5;246\"]\n[50.19137799999999,\"o\",\"m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Roy Leban          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[10;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SOMETHING'S NOT RI…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[11;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m A PARTICULAR PUZZLE\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[12;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ALPHABET SOUP      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[13;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ETHNI\"]\n[50.19141299999999,\"o\",\"C JOKES       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[14;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THAT HURTS!        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[15;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m RYE HUMOR          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[16;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m HIDDEN MESSAGE     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[17;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\"]\n[50.19144699999999,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m WHAT IS IT?        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[18;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[\"]\n[50.19180999999999,\"o\",\"37m\\u001B[40m CENTENNIALS        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[19;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ROCK GARDEN        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Emily Cox and H…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[20;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m DO IT AGAIN        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[21;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ECHO CHAMBER       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[22;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;24\"]\n[50.19184999999999,\"o\",\"6m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m MOVING PARTS       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[23;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m NORTHERN NEIGHBOUR \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[24;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STEP LIVELY        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[25;10H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m           \\u001B[25;64H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m-\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[52.03904999999999,\"o\",\"\\u001B[?1000l\\u001B[?12l\\u001B[?25h\"]\n[52.03920399999999,\"o\",\"\\u001B[HDate_re0____\\u001B[25;64H\\u001B[37m\\u001B[40m^\\u001B[H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[52.44952299999999,\"o\",\"p_______\\rp\"]\n[52.74287199999999,\"o\",\"u\"]\n[52.96174099999999,\"o\",\"b\"]\n[53.19932899999999,\"o\",\"m\"]\n[53.41784899999999,\"o\",\"o\"]\n[53.60493599999999,\"o\",\"n\"]\n[53.742921999999986,\"o\",\"t\"]\n[53.87431199999999,\"o\",\"h\"]\n[54.40064999999999,\"o\",\"\\u001B[?25l\\u001B[?1000h\"]\n[54.405773999999994,\"o\",\"\\r\\u001B[38;5;246m\\u001B[40m<\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40mpubmonth   \\u001B[25;10H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m\\\"pubmonth\\\"\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[56.499019999999994,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m xdid              \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m pubmonth   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Size    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Title  \\u001B[1;64H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m author \\r\\n\\u001B[C\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40mtmdcr2006-01-11   \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| 2006-01    | 15x15   | THE Daily Crosswor…| by Victor Fle\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mtmdcr2006-01-24   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fle\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mtmdcr2006-07-20   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-07    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fle\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;\"]\n[56.499058999999995,\"o\",\"49m\\u001B[37m\\u001B[40mtmdcr2006-08-24   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-08    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fle\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mtmdcr2006-09-14   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-09    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fle\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mtmdcr2005-01-10   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Earl Reed \\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mtmdcr2005-11-22   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-11    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Dai\"]\n[56.499272,\"o\",\"ly Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fle\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mpzz2009-05-03     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2009-05    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Hi\"]\n[56.499516,\"o\",\"gh-Tech Mergers  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Roy Leban\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mbg2013-01-06      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SOMETHING'S NOT RI…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mbg2013-01-13      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m A PARTICULAR PUZZLE\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and…\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mbg2013-01-20      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ALPHABET SOUP\\u001B[64G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mbg2013-01-27      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\"]\n[56.499563,\"o\",\"\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ETHNIC JOKES       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and…\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mbg2013-02-03      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THAT HURTS!\\u001B[14;64H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mbg2013-02-10      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m RYE HUMOR          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and…\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mbg2013-02-17      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m HIDDEN MESSAGE     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mbg2013-02-24      \"]\n[56.499594,\"o\",\"\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m WHAT IS IT?        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and…\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mbg2013-03-03\"]\n[56.499919,\"o\",\"      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m CENTENNIALS\\u001B[18;64H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mbg2013-03-10      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ROCK GARDEN        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Emily Cox …\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mbg2013-03-17      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m DO IT AGAIN\\u001B[20;64H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mbg2013-03-24      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ECHO CHAMBER       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[\"]\n[56.499962,\"o\",\"m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and…\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mbg2013-03-31      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m MOVING PARTS\\u001B[64G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mbg2013-04-07      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-04    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m NORTHERN NEIGHBOUR \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and…\\r\\n\\u001B[C\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mbg2013-04-14      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-04    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STEP LIVELY\\u001B[24;64H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[25;10H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m          \\u001B[25;56H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_LEFT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[59.64745,\"o\",\"\\u001B[?1000l\\u001B[?12l\\u001B[?25h\"]\n[59.647552,\"o\",\"\\rtransform column by regex:\\u001B[40X \"]\n[61.7041,\"o\",\"(\"]\n[64.311165,\"o\",\"[\"]\n[64.828508,\"o\",\"a\"]\n[65.023539,\"o\",\"-\"]\n[65.44871499999999,\"o\",\"z\"]\n[66.436707,\"o\",\"]\"]\n[67.751672,\"o\",\"+\"]\n[68.554829,\"o\",\")\"]\n[71.847684,\"o\",\"/\"]\n[72.859003,\"o\",\"\\\\\"]\n[73.736744,\"o\",\"1\"]\n[75.34246,\"o\",\"\\u001B[?25l\\u001B[?1000h\"]\n[75.351241,\"o\",\"\\u001B[1;22H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40mxdid_re           \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m pubmonth   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Size    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Title  \\u001B[2;22H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40mtmdcr2006-01-11   | 2006-01    | 15x15   | THE Daily Cros\\u001B[3;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mtmdcr2006-01-24   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Cros\\u001B[4;22Htmdcr2006-07-20   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-07    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Cros\\u001B[5;22Htmdcr2006-08-24   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-08    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Cros\\u001B[6;22Htmdcr2006-09-14   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-09    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B\"]\n[75.351333,\"o\",\"[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Cros\\u001B[7;22Htmdcr2005-01-10   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Cros\\u001B[8;22Htmdcr2005-11-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-11    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Cros\\u001B[9;22Hpzz2009-05-03     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2009-05    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m High-Tech Merg…\\u001B[10;22Hbg2013-01-06      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SOMETHING'S NO…\\u001B[11;22Hbg2013-01-13      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m A PARTICULAR P\\u001B[12;22Hbg2013-01-20      \\u001B\"]\n[75.35135799999999,\"o\",\"[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ALPHABET SOUP\\u001B[13;22Hbg2013-01-27      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B\"]\n[75.351446,\"o\",\"[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ETHNIC JOKES\\u001B[K\\u001B[14;22Hbg2013-02-03      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THAT HURTS!\\u001B[15;22Hbg2013-02-10      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m RYE HUMOR\\u001B[K\\u001B[16;22Hbg2013-02-17      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m HIDDEN MESSAGE\\u001B[17;22Hbg2013-02-24      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m WHAT IS IT?\\u001B[K\\u001B[18;22Hbg2013-03-03      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m CENTENNIALS\\u001B[19;22Hbg2013-03-10      \\u001B[38;5;246m\"]\n[75.35146399999999,\"o\",\"\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ROCK GARDEN\\u001B[K\\u001B[20;22Hbg2013-03-17      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m DO IT AGAIN\\u001B[21;22Hbg2013-03-24      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ECHO CHAMBER\\u001B[K\\u001B[22;22Hbg2013-03-31      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m MOVING PARTS\\u001B[23;22Hbg2013-04-07      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-04    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m NORTHERN NEIGH\\u001B[24;22Hbg2013-04-14      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-04    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\"]\n[75.35149,\"o\",\"\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STEP LIVELY\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mpuzzles| \\\"([a-z]+)/\\\\1\\\"\\u001B[40X\\u001B[25;63H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m *\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\b\\b\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[77.146396,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m xdid              \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m xdid_re           \\r\\n\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-01-11   |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-01-11   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-01-24   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-01-24   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-07-20   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-07-20   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-08-24   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-08-24   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-09-14   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-09-14   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2005-01-10   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2005-01-10   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2005-11-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2005-11-22   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m pzz2009-05-03     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m pzz2009-05-03     \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-06      \\u001B\"]\n[77.146422,\"o\",\"[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-06      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-13      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-13      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-20      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-20      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-27      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-27      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-02-03      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-02-03      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-02-10      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-02-10      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-02-17      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-02-17      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-02-24      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-02-24      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-03      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-03      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-10      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-0\"]\n[77.146434,\"o\",\"3-10      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-17      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-17      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-24      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-24      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-31      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-31      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-04-07      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-04-07      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-04-14      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-04-14      \\u001B[25;10H             \\u001B[25;55H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_RIGHT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[77.86894099999999,\"o\",\"\\u001B[1;22H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40mpubmonth   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Size    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Title              \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m author\\u001B[2;22H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m2006-01    \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| 15x15   | THE Daily Crosswor…| by Victor Fle\\u001B[3;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2006-01    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fle\\u001B[4;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2006-07    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fle\\u001B[5;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2006-08    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor F\"]\n[77.868985,\"o\",\"le\\u001B[6;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2006-09    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fle\\u001B[7;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2005-01    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Earl Reed \\u001B[8;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2005-11    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fle\\u001B[9;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2009-05    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m High-Tech Mergers  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Roy Leban\\u001B[K\\u001B[10;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2013-01    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \"]\n[77.869008,\"o\",\"SOMETHING'S NOT RI…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[K\\u001B[11;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2013-01    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m A PARTICULAR PUZZLE\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[\"]\n[77.869164,\"o\",\"37m\\u001B[40m Emily Cox and\\u001B[12;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2013-01    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ALPHABET SOUP      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[K\\u001B[13;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2013-01    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ETHNIC JOKES       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and…\\u001B[14;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2013-02    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THAT HURTS!        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[15;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2013-02    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m RYE HUMOR          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and…\\u001B[16;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2013-02    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\"]\n[77.869193,\"o\",\"\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m HIDDEN MESSAGE     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[K\\u001B[17;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2013-02    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m WHAT IS IT?        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and…\\u001B[18;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2013-03    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m CENTENNIALS        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[19;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2013-03    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ROCK GARDEN        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Emily Cox …\\u001B[20;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2013-03    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m DO IT AGAIN        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[21;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2013-03    \\u001B(B\\u001B[0\"]\n[77.86921099999999,\"o\",\"m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ECHO CHAMBER       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and…\\u001B[22;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2013-03    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \"]\n[77.869232,\"o\",\"\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m MOVING PARTS       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[K\\u001B[23;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2013-04    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m NORTHERN NEIGHBOUR \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and\\u001B[24;22H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m2013-04    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STEP LIVELY        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[25;55H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m -\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[78.455851,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m xdid              \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m pubmonth   \\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-01-11   \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| 2006-01    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-01-24   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-01    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-07-20   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-07    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-08-24   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-08    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2006-09-14   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-09    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2005-01-10   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-01    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m tmdcr2005-11-22   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-11    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m pzz2009-05-03     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2009-05    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-06      \\u001B(B\\u001B[0m\\u001B[38;\"]\n[78.455878,\"o\",\"5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-13      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-20      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-01-27      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-02-03      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-02-10      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-02-17      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-02-24      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-03      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-10      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\r\\n\\u001B(\"]\n[78.455893,\"o\",\"B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-17      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-24      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-03-31      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-04-07      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-04    \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m bg2013-04-14      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-04    \\u001B[25;56H\\u001B[37m\\u001B[40m KEY_LEFT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[79.276188,\"o\",\"\\u001B[?1000l\\u001B[?12l\\u001B[?25h\"]\n[79.276325,\"o\",\"\\rtransform column by regex:\\u001B[40X \"]\n[79.972438,\"o\",\"([a-z]+)/\\\\1\"]\n[80.713882,\"o\",\"\\b\"]\n[80.942009,\"o\",\"\\b\"]\n[83.967952,\"o\",\"\\b\"]\n[85.302463,\"o\",\"\\\\/\\\\1\\b\\b\\b\"]\n[85.81380300000001,\"o\",\"d/\\\\1\\b\\b\\b\"]\n[86.423455,\"o\",\"+/\\\\1\\b\\b\\b\"]\n[87.353493,\"o\",\"-/\\\\1\\b\\b\\b\"]\n[88.3935,\"o\",\"\\\\/\\\\1\\b\\b\\b\"]\n[88.863535,\"o\",\"d/\\\\1\\b\\b\\b\"]\n[90.229209,\"o\",\"+/\\\\1\\b\\b\\b\"]\n[91.52323299999999,\"o\",\"\\u001B[?25l\\u001B[?1000h\"]\n[91.53216199999999,\"o\",\"\\u001B[1;22H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40mxdid_re    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m pubmonth   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Size    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Title              \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B[2;22H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40mtmdcr-11   | 2006-01    | 15x15   | THE Daily Crosswor…| \\u001B[3;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mtmdcr-24   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[4;22Htmdcr-20   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-07    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[5;22Htmdcr-24   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-08    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\"]\n[91.53218999999999,\"o\",\"\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[6;22Htmdcr-14   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-09    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[7;22Htmdcr-10   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B[8;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mtmdcr-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-11    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[9;22Hpzz-03 \\u001B[35G2009-05    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m High-Tech Mergers  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\u001B[10;22Hbg-06  \\u001B[36G013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[4\"]\n[91.53220899999998,\"o\",\"0m SOMETHING'S NOT RI…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\u001B[11;22Hbg-13  \\u001B[36G013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m A PARTICULAR PUZZLE\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[12;22Hbg-20  \\u001B[36G0\"]\n[91.53231499999998,\"o\",\"13-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ALPHABET SOUP      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\u001B[13;22Hbg-27  \\u001B[36G013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ETHNIC JOKES       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[14;22Hbg-03  \\u001B[36G013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THAT HURTS!        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\u001B[15;22Hbg-10  \\u001B[36G013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m RYE HUMOR          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[16;22Hbg-17  \\u001B[36G013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m HIDDEN MESSAGE     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\u001B[17;22Hbg-24  \\u001B[36G013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[91.53233599999999,\"o\",\" WHAT IS IT?        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[18;22Hbg-03  \\u001B[36G013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m CENTENNIALS        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\u001B[19;22Hbg-10  \\u001B[36G013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ROCK GARDEN        \\u001B[38;5;246m\\u001B[40m|\\u001B[20;22H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40mbg-17  \\u001B[36G013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m DO IT AGAIN        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\u001B[21;22Hbg-24  \\u001B[36G013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ECHO CHAMBER       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[22;22Hbg-31  \\u001B[36G013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m MOVING PARTS       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\u001B[23;22Hbg-07  \\u001B[36G013-04    \\u001B[38;5;24\"]\n[91.53235399999998,\"o\",\"6m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m NORTHERN NEIGHBOUR \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B[24;22Hbg-14  \\u001B[36G013-04    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STEP LIVELY        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m …\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40mpuzzles| \\\"([a-z]+)\\\\d+-\\\\d+/\\\\1\\\"\\u001B[33X\\u001B[25;63H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m *\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\b\\b\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[94.29336399999998,\"o\",\"\\u001B[1;6H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m_re    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m pubmonth   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Size    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Title              \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m author\\u001B[77G \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\n\\u001B[7G\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m-11   \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| 2006-01    | 15x15   | THE Daily Crosswor…| by Victor Fleming,…|\\n\\u001B[7G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-24   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\n\\u001B[7G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-20   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-07    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor\"]\n[94.29338999999999,\"o\",\" Fleming,…\\u001B[38;5;246m\\u001B[40m|\\n\\u001B[7G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-24   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-08    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\n\\u001B[7G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-14   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2006-09    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\n\\u001B[7G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-10   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Earl Reed & Vic…\\u001B[38;5;246m\\u001B[40m|\\n\\u001B[7G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-22   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2005-11    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B\"]\n[94.29340599999999,\"o\",\"[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THE Daily Crosswor…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Victor Fleming,…\\u001B[38;5;246m\\u001B[40m|\\n\\u001B[5G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-03     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2009-05    \\u001B[38\"]\n[94.29351199999999,\"o\",\";5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15x15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m High-Tech Mergers  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Roy Leban          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\n\\u001B[4G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-06      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m SOMETHING'S NOT RI…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\n\\u001B[4G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-13      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m A PARTICULAR PUZZLE\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\n\\u001B[4G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-20      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\"]\n[94.29352599999999,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m ALPHABET SOUP      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook  \\u001B[77G \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\n\\u001B[4G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-27      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-01    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ETHNIC JOKES       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\n\\u001B[4G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-03      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m THAT HURTS!        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[77G \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\n\\u001B[4G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-10      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m RYE HUMOR          \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B\"]\n[94.29354299999999,\"o\",\"[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\n\\u001B[4G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-17      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m HIDDEN MES\"]\n[94.29372299999999,\"o\",\"SAGE     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook         \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\n\\u001B[4G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-24      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-02    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m WHAT IS IT?        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\n\\u001B[4G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-03      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m CENTENNIALS        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[77G \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\n\\u001B[4G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-10      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ROCK GARDEN        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m by Emily Cox and H…\\u001B[\"]\n[94.29373499999998,\"o\",\"38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\n\\u001B[4G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-17      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m DO IT AGAIN        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[77G \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\n\\u001B[4G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-24      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ECHO CHAMBER       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\n\\u001B[4G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-31      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-03    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m MOVING PARTS       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook \\u001B[77G \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\n\\u001B[4G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-0\"]\n[94.29374899999998,\"o\",\"7      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-04    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m NORTHERN NEIGHBOUR \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Emily Cox and Henr…\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B\"]\n[94.29378399999997,\"o\",\"[37m\\u001B[40m\\u001B[K\\n\\u001B[4G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m-14      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2013-04    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 21x21   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m STEP LIVELY        \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Henry Hook\\u001B[77G \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[K\\u001B[25;10H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[20X\\u001B[25;64H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m-\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[95.94748899999998,\"o\",\"\\u001B[?1000l\\u001B[?12l\\u001B[?25h\"]\n[95.94760899999997,\"o\",\"\\u001B[Hxdid_re_____\\u001B[25;64H\\u001B[37m\\u001B[40m^\\u001B[H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[96.24850699999998,\"o\",\"p______\\rp\"]\n[96.49823699999997,\"o\",\"u\"]\n[96.70601099999998,\"o\",\"b\"]\n[96.92767999999998,\"o\",\"i\"]\n[97.07463099999998,\"o\",\"d\"]\n[97.80087099999999,\"o\",\"\\u001B[?25l\"]\n[97.80092099999999,\"o\",\"\\u001B[?1000h\"]\n[97.81071999999999,\"o\",\"\\r\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m pubid      \\u001B[25;10H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m\\\"pubid\\\"\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[100.21824,\"o\",\"\\u001B[25;10H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m       \\u001B[25;64H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40mg\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[100.29419,\"o\",\"\\u001B[?1l\\u001B>\\u001B[?1000l\"]\n[100.294224,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\r\\u001B[K\\u001B[25;1H\\u001B[?12l\\u001B[?25h\"]\n[100.294301,\"o\",\"\\u001B[?1049l\\r\\u001B[?1l\\u001B>\"]\n"
  },
  {
    "path": "docs/casts/types.cast",
    "content": "{\"width\":80,\"version\":2,\"height\":25,\"env\":{\"TERM\":\"xterm-256color\",\"SHELL\":\"/usr/bin/zsh\"}}\n[0.156876,\"o\",\"\\u001B[1m\\u001B[7m%\\u001B[27m\\u001B[1m\\u001B[0m                                                                               \\r \\r\"]\n[0.15692899999999999,\"o\",\"\\u001B]2;kefala@221b: ~/git/visidata\\u0007\\u001B]1;~/git/visidata\\u0007\"]\n[0.156966,\"o\",\"\\r\\u001B[0m\\u001B[27m\\u001B[24m\\u001B[J$ \\u001B[K\"]\n[0.157006,\"o\",\"\\u001B[?1h\\u001B=\"]\n[0.15701800000000002,\"o\",\"\\u001B[?2004h\"]\n[0.5159480000000001,\"o\",\"v\"]\n[0.7145950000000001,\"o\",\"\\bvd\"]\n[0.8270750000000001,\"o\",\" \"]\n[0.9344900000000002,\"o\",\"s\"]\n[0.9874710000000002,\"o\",\"a\"]\n[1.0599150000000002,\"o\",\"m\"]\n[1.238077,\"o\",\"ple_data\\u001B[1m/\\u001B[0m\"]\n[1.4835120000000002,\"o\",\"\\b\\u001B[0m/s\"]\n[1.5685430000000002,\"o\",\"a\"]\n[1.8049410000000004,\"o\",\"mple\"]\n[2.1568150000000004,\"o\",\".\"]\n[2.326328,\"o\",\"t\"]\n[2.6245130000000003,\"o\",\"sv\\u001B[1m \\u001B[0m\"]\n[3.0462400000000005,\"o\",\"\\b\\u001B[0m \\b\"]\n[3.0462760000000006,\"o\",\"\\u001B[?1l\\u001B>\"]\n[3.0463290000000005,\"o\",\"\\u001B[?2004l\\r\\r\\n\"]\n[3.0477690000000006,\"o\",\"\\u001B]2;vd sample_data/sample.tsv\\u0007\\u001B]1;vd\\u0007\"]\n[3.145463000000001,\"o\",\"\\u001B[?1049h\\u001B[1;25r\\u001B(B\\u001B[m\\u001B[4l\\u001B[?7h\\u001B[?1h\\u001B=\"]\n[3.1454850000000008,\"o\",\"\\u001B[39;49m\\u001B[?1000h\"]\n[3.146162000000001,\"o\",\"\\u001B[?25l\"]\n[3.1466760000000007,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[H\\u001B[2J\"]\n[3.1467320000000005,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[H\\u001B[2J\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m OrderDate          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Region             \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Rep                \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Item          \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m>\\r\\u001B[25d\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40msample| saul.pw/VisiData v0.99 | opening sample as tsv | <F1> o\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m \\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m         0   0%\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[3.2551940000000004,\"o\",\"\\u001B[1;15H\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Region    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Rep\\u001B[1;40H\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Item      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Units   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Unit_Cost   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m T…\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-06   \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| East      | Jones      | Pencil    | 95      | 1.99        | 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-23   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Kivell     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 50\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 9…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-09   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jardine  \"]\n[3.2552800000000004,\"o\",\"  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 36\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-26   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Gill\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen\\u001B[52G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 27\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-03-15   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Sorvino    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 56\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-01   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B\"]\n[3.2553000000000005,\"o\",\"[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 60\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-18   \\u001B\"]\n[3.2555080000000007,\"o\",\"(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Andrews    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 75\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-05   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jardine    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 90\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-22   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Thompson   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 32\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 6…\\r\\n\\u001B(B\\u001B[0;1\"]\n[3.255525000000001,\"o\",\"m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-08   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 60\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-25   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Morgan     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 90\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-12   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Howard     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B\"]\n[3.255537000000001,\"o\",\"[39;49m\\u001B[37m\\u001B[40m 5…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-29   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 81\\u001B\"]\n[3.255719000000001,\"o\",\"[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-08-15   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 35\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-01   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Smith\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Desk\\u001B[52G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 125.00\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-18   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[4\"]\n[3.255730000000001,\"o\",\"0m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 16\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-05   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Morgan     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 28\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-22   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen\\u001B[52G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 64\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-08   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37\"]\n[3.255740000000001,\"o\",\"m\\u001B[40m Pen\\u001B[52G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-25   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;24\"]\n[3.2558550000000013,\"o\",\"6m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Kivell     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 96\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-12   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Smith\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 67\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1.29\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-29   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[27G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 74\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2017-01-15   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39\"]\n[3.255864000000001,\"o\",\";49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Gill\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 46\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\n\\u001B[73G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m43 rows\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[4.153021000000001,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m OrderDate    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Region    \\r\\n\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-06   |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-23   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-09   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-26   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-03-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-01   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-18   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-05   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-08   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[\"]\n[4.153059000000001,\"o\",\"39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-25   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-12   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-29   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-08-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-01   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-18   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-05   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-08   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-25   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-12   \\u001B[38;5;\"]\n[4.153075,\"o\",\"246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-29   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\r\\n\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2017-01-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[25;9H\\u001B[46X\\u001B[25;55H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_RIGHT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[4.64165,\"o\",\"\\u001B[1;16H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Region    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Rep        \\u001B[2;16H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m East      |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[3;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Kivell     \\u001B[4;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jardine    \\u001B[5;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Gill       \\u001B[6;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Sorvino    \\u001B[7;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[8;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Andrews    \\u001B[9;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jardine    \\u001B[10;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Thompson   \\u001B[11;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East \"]\n[4.641678000000001,\"o\",\"     \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[12;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Morgan     \\u001B[13;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Howard     \\u001B[14;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[15;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[16;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Smith      \\u001B[17;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[18;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Morgan     \\u001B[19;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Jones      \\u001B[20;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[21;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[3\"]\n[4.641710000000001,\"o\",\"9;49m\\u001B[37m\\u001B[40m Kivell     \\u001B[22;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Smith      \\u001B[23;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Parent     \\u001B[24;16H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Gill       \\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[5.527012000000001,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4m\\u001B[38;5;81m\\u001B[40m Rep        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m OrderDate    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Region    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Item      \\r\\n\\u001B(B\\u001B[0;7m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[39;49m\\u001B[37m\\u001B[40m‖ 2016-01-06   | East      |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-23   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jardine    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-09   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Gill       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-02-26   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Sorvino    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\"]\n[5.5270600000000005,\"o\",\"\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-03-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-01   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Andrews    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-18   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jardine    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-05   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Thompson   \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 20\"]\n[5.527089,\"o\",\"16-06-08   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Morgan     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-25   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246\"]\n[5.5272950000000005,\"o\",\"m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Howard     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-12   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-29   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-08-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Smith      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-01   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Desk      \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-18   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\"]\n[5.527311,\"o\",\"\\u001B[37m\\u001B[40m Pen Set   \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Morgan     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-05   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-08   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-25   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Smith      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-12   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\r\\n\\u001B\"]\n[5.5273330000000005,\"o\",\"(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-29   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Gill       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2017-01-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\n           \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m !\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[6.774202000000001,\"o\",\"\\u001B[1;41H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Item      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Units   \\u001B[2;41H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m 95      \\u001B[3;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 50      \\u001B[4;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 36      \\u001B[5;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 27      \\u001B[6;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 56      \\u001B[7;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 60      \\u001B[8;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 75      \\u001B[9;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 90      \\u001B[10;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 32      \\u001B[11;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1\"]\n[6.774231,\"o\",\"m\\u001B[39;49m\\u001B[37m\\u001B[40m 60      \\u001B[12;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 90      \\u001B[13;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 29      \\u001B[14;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 81      \\u001B[15;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 35      \\u001B[16;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Desk      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2       \\u001B[17;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 16      \\u001B[18;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 28      \\u001B[19;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 64      \\u001B[20;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 15      \\u001B[21;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 96      \\u001B[22;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen\"]\n[6.774254,\"o\",\"cil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 67      \\u001B[23;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 74      \\u001B[24;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 46      \\u001B[25;55H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_RIGHT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[7.789861,\"o\",\"\\u001B[?1000l\\u001B[?12l\\u001B[?25h\"]\n[7.789942,\"o\",\"\\rmin/max/avg/mean/median/sum/distinct/count/keymax:\\u001B[16X \"]\n[8.118705,\"o\",\"s\"]\n[8.223871,\"o\",\"u\"]\n[8.489180000000001,\"o\",\"m\"]\n[8.811495,\"o\",\"\\u001B[?25l\\u001B[?1000h\"]\n[8.819955,\"o\",\"\\r\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40msample| \\\"sum\\\"\\u001B[49X\\u001B[25;63H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m +\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  \\b\\b\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[9.888993,\"o\",\"\\u001B[1;41H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Item      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Units   \\u001B[2;41H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| 95      \\u001B[3;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 50      \\u001B[4;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 36      \\u001B[5;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 27      \\u001B[6;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 56      \\u001B[7;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 60      \\u001B[8;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 75      \\u001B[9;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 90      \\u001B[10;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 32      \\u001B[11;41H\\u001B(B\\u001B\"]\n[9.889014999999999,\"o\",\"[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 60      \\u001B[12;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 90      \\u001B[13;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29      \\u001B[14;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 81      \\u001B[15;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 35      \\u001B[16;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Desk      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2       \\u001B[17;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 16      \\u001B[18;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 28      \\u001B[19;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 64      \\u001B[20;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15      \\u001B[21;4\"]\n[9.889029999999998,\"o\",\"1H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 96      \\u001B[22;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 67      \\u001B[23;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 74      \\u001B[24;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 46      \\u001B[25;9H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m     \\u001B[25;56H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_LEFT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[11.155724999999999,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4;7m\\u001B[38;5;81m\\u001B[40m Rep        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Total_Units_sum   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil_Units_sum   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder_Units_sum   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Pe\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m>\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m‖ ¿                \\u001B(B\\u001B[0;1;7m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| ¿                 \\u001B(B\\u001B[0;1;7m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| ¿           \\u001B[74G\\u001B(B\\u001B[0;1;7m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| ¿  \\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[3;32H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 0\\u001B[17X\\u001B[3;53H\\u001B[38;5;226m\\u001B[40m#\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 0\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Jardine    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[\"]\n[11.155763999999998,\"o\",\"m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[4;32H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[4;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿           \\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 0\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Gill       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[5;32H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[5;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Sorvino    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[6;32H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[6;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿           \\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Andrews    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[4\"]\n[11.155791999999998,\"o\",\"0m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[7;32H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[7;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿           \\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B\"]\n[11.156049999999999,\"o\",\"[37m\\u001B[40m 0\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Thompson   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[8;32H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[8;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿           \\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 0\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Morgan     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[9;32H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[9;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿           \\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 0\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Howard     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[10;32H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 0\\u001B[17X\\u001B[10;53H\\u001B[38;5;226m\\u001B[40m#\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿           \\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39\"]\n[11.156062999999998,\"o\",\";49m\\u001B[37m\\u001B[40m ¿\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Parent     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[11;32H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 0\\u001B[17X\\u001B[11;53H\\u001B[38;5;226m\\u001B[40m#\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿           \\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[K\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Smith      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[12;32H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[12;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿           \\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 0\\u001B[K\\r\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[7G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m_pivot_Item|\\u001B[25;52H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m W\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        11 aggregated\\u001B[25;54H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[12.603348999999998,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4m\\u001B[38;5;81m\\u001B[40m Rep        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Total_Units_sum   \\r\\n\\u001B(B\\u001B[0;7m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[39;49m\\u001B[37m\\u001B[40m‖\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿                \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jardine    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Gill       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Sorvino    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Andrews    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Thompson   \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Morgan     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Howard     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[4\"]\n[12.603377999999998,\"o\",\"0m ¿\\u001B[16X\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Smith      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[25;44H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_RIGHT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[13.010277999999998,\"o\",\"\\u001B[H\\n\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[2;32H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[2;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[K\\r\\n\\u001B(B\\u001B[0;7m\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B[39;49m\\u001B[37m\\u001B[40m‖\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿                \\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| 0                 \\u001B[38;5;226m\\u001B[40m#\\u001B[39;49m\\u001B[37m\\u001B[40m| ¿                 \\u001B(B\\u001B[0;1;7m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| 0  \\u001B[25;44H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_DOWN\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[14.242460999999999,\"o\",\"\\u001B[25;45H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m       \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m z\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[14.599555999999998,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m cell_error                                                                    \\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Traceback (most recent call last):                                            \\r\\n\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m   File \\\"/home/kefala/git/visidata/visidata/vdtui.py\\\", line 1730, in getCell   \\n\\u001B[5G\\u001B[1K cellval = self.getValue(row)\\u001B[46X\\r\\n   File \\\"/home/kefala/git/visidata/visidata/vdtui.py\\\", line 1713, in getValue  \\n\\u001B[5G\\u001B[1K return self.calcValue(row)\\u001B[48X\\r\\n   File \\\"/home/kefala/git/visidata/visidata/vdtui.py\\\", line 1699, in calcValue \\n\\u001B[5G\\u001B[1K return (self.getter)(self, row)\\u001B[43X\\r\\n   File \\\"/home/kefala/git/visidata/visidata/pivot.py\\\", line 47, in <lambda>    \\n\\u001B[5G\\u001B[1K getter=lambda col,row,aggcol=aggcol: aggregator(aggcol, sum(row[1].values…\\r\\n   File \\\"/home/kefala/git/visidata/visidata/aggregators.py\\\", line 11, in _func \\n\\u001B[5G\\u001B[1K return func(col.getValues(rows))\\u001B[42X\\r\\n TypeError: unsupported operand type(s) for +: 'int' and 'str'\\u001B[17X\\r\\u001B[25dcell_error|       \\u001B[25;52H  \\u001B[6\"]\n[14.599591999999998,\"o\",\"0G\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m z^E\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        12 line\\u001B[25;64H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[17.914102999999997,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4m\\u001B[38;5;81m\\u001B[40m Rep        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Total_Units_sum   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil_Units_sum   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder_Units_sum   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Pe\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m>\\r\\n\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[2;32H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[2;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[K\\r\\n\\u001B(B\\u001B[0;7m\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B[39;49m\\u001B[37m\\u001B[40m‖\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿                \\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| 0                 \\u001B[38;5;226m\\u001B[40m#\\u001B[39;49m\\u001B[37m\\u001B[40m| ¿                 \\u001B(B\\u001B[0;1;7m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| 0  \\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Jardine    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[\"]\n[17.914149999999996,\"o\",\"16X\\u001B[4;32H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[4;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 0\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m Gill       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[5;32H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[5;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m Sorvino    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[6;32H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[6;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m Andrews    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[7;32H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40\"]\n[17.914172999999995,\"o\",\"m ¿\\u001B[17X\\u001B[7;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 0\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m Thompson   \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[8;32H\\u001B[31m\\u001B[40m!\\u001B(\"]\n[17.914490999999995,\"o\",\"B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[8;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 0\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m Morgan     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[9;32H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[9;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 0\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m Howard     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[10;32H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 0\\u001B[17X\\u001B[10;53H\\u001B[38;5;226m\\u001B[40m#\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[11;32H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 0\\u001B[17X\\u001B[11;53H\\u001B[38;5;226m\\u001B[40m\"]\n[17.914603999999994,\"o\",\"#\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[K\\r\\n\\u001B[38;5;81m\\u001B[40m Smith      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[16X\\u001B[12;32H\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[12;53H\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m ¿\\u001B[17X\\u001B[74G\\u001B(B\\u001B[0;1m\\u001B[31m\\u001B[40m!\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 0\\u001B[K\\r\\n\\u001B[K\\u001B[25d\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40msample_pivot_Item|\\u001B[25;52H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m q\\u001B[60G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m  11 aggregated row\\u001B[25;54H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[18.874411999999992,\"o\",\"\\u001B[1;14H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m OrderDate    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Region    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Item      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Units   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Unit_Cost   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m T…\\r\\n\\u001B(B\\u001B[0;7m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[39;49m\\u001B[37m\\u001B[40m‖ 2016-01-06   | East      |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m| 95      | 1.99        | 1…\\r\\n\\u001B(B\\u001B[0m\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-01-23   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 50      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 9…\\u001B[4;14H 2016-02-09   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m \"]\n[18.874446999999993,\"o\",\"Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 36      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[74G  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\u001B[5;14H 2016-02-26   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 27      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5…\\u001B[6;14H 2016-03-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 56      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2.99\\u001B[74G  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B[C\\u001B[38;5;81m\\u001B[40mJones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-01   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 60      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B\"]\n[18.874466999999992,\"o\",\"[40m 4.99\\u001B[74G  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B[C\\u001B[38;5;81m\\u001B[40mAndrews    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-04-18   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;24\"]\n[18.874698999999993,\"o\",\"6m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 75      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1.99\\u001B[74G  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B[C\\u001B[38;5;81m\\u001B[40mJardine    \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-05   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 90      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[74G  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\r\\n\\u001B[C\\u001B[38;5;81m\\u001B[40mThompson   \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-05-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m West      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 32      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1.99\\u001B[74G  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 6…\\r\\n\\u001B[C\\u001B[38;5;81m\\u001B[40mJones \\u001B[14G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-08   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0\"]\n[18.87473199999999,\"o\",\"m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 60      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[74G  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5…\\r\\n\\u001B[C\\u001B[38;5;81m\\u001B[40mMorgan\\u001B[14G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-06-25   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 90      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[74G  \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\r\\n\\u001B[38;5;81m\\u001B[40m Howard     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-12   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 29\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5…\\r\\n\\u001B[38;5;81m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-07-29   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[\"]\n[18.87475899999999,\"o\",\"0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 81\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-08-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[\"]\n[18.87500499999999,\"o\",\"40m East\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 35\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B[38;5;81m\\u001B[40m Smith      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-01   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Desk      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 125.00\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-09-18   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 16\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B[38;5;81m\\u001B[40m Morgan     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-05   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B\"]\n[18.87503499999999,\"o\",\"[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 28\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B[38;5;81m\\u001B[40m Jones      \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-10-22   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 64\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 5…\\r\\n\\u001B[38;5;81m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-08   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 19.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2…\\r\\n\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-11-25   \\u001B[38;5;246m\"]\n[18.87505399999999,\"o\",\"\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 96\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\r\\n\\u001B[38;5;81m\\u001B[40m Smith \"]\n[18.87518399999999,\"o\",\"     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-12   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 67\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1.29\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8…\\r\\n\\u001B[38;5;81m\\u001B[40m Parent     \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2016-12-29   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m East\\u001B[40G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 74\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 15.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 1…\\r\\n\\u001B[38;5;81m\\u001B[40m Gill       \\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 2017-01-15   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Central   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 46\\u001B[62G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 8.99\\u001B[76G\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m 4…\\n\\u001B[7G\\u001B(B\\u001B[\"]\n[18.87520199999999,\"o\",\"0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m|           \\u001B[25;52H  \\u001B[25;62H \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m q\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        43\\u001B[25;65H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[19.68041999999999,\"o\",\"\\u001B[1;41H\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Item      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Units   \\u001B[2;41H\\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    |\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m 95      \\u001B[3;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 50      \\u001B[4;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 36      \\u001B[5;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 27      \\u001B[6;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 56      \\u001B[7;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 60      \\u001B[8;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 75      \\u001B[9;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 90      \\u001B[10;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 32      \\u001B[11;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1\"]\n[19.680448999999992,\"o\",\"m\\u001B[39;49m\\u001B[37m\\u001B[40m 60      \\u001B[12;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 90      \\u001B[13;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 29      \\u001B[14;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 81      \\u001B[15;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 35      \\u001B[16;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Desk      \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 2       \\u001B[17;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 16      \\u001B[18;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 28      \\u001B[19;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 64      \\u001B[20;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 15      \\u001B[21;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 96      \\u001B[22;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen\"]\n[19.680503999999992,\"o\",\"cil    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 67      \\u001B[23;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 74      \\u001B[24;41H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m 46      \\u001B[25;55H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m KEY_RIGHT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[20.84708599999999,\"o\",\"\\u001B[1;61H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m#\\u001B[2;54H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m     95\\u001B[3;54H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m     50\\u001B[4;54H     36\\u001B[5;54H     27\\u001B[6;54H     56\\u001B[7;54H     60\\u001B[8;54H     75\\u001B[9;54H     90\\u001B[10;54H     32\\u001B[11;54H     60\\u001B[12;54H     90\\u001B[13;54H     29\\u001B[14;54H     81\\u001B[15;54H     35\\u001B[16;54H      2\\u001B[17;54H     16\\u001B[18;54H     28\\u001B[19;54H     64\\u001B[20;54H     15\\u001B[21;54H     96\\u001B[22;54H     67\\u001B[23;54H     74\\u001B[24;54H     46\\n\\u001B[55G        \\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m #\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[22.10899999999999,\"o\",\"\\u001B[1;41H\\u001B(B\\u001B[0;1;4;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Item      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Units  #\\u001B[2;41H\\u001B(B\\u001B[0;1;7m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m|      95 \\u001B[3;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      50 \\u001B[4;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      36 \\u001B[5;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      27 \\u001B[6;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      56 \\u001B[7;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      60 \\u001B[8;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      75 \\u001B[9;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      90 \\u001B[10;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      32 \\u001B[11;41H\\u001B(B\\u001B\"]\n[22.10908899999999,\"o\",\"[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      60 \\u001B[12;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      90 \\u001B[13;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      29 \\u001B[14;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      81 \\u001B[15;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      35 \\u001B[16;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Desk      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m       2 \\u001B[17;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      16 \\u001B[18;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      28 \\u001B[19;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      64 \\u001B[20;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      15 \\u001B[21;4\"]\n[22.10911199999999,\"o\",\"1H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      96 \\u001B[22;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      67 \\u001B[23;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Pen Set   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      74 \\u001B[24;41H\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m      46 \\n\\u001B[56G\\u001B[37m\\u001B[40m KEY_LEFT\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[22.89784399999999,\"o\",\"\\u001B[H\\u001B(B\\u001B[0;1;4;7m\\u001B[38;5;81m\\u001B[40m Rep        \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Total_Units_sum  #\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Pencil_Units_sum  #\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Binder_Units_sum  #\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[0;1;4m\\u001B[39;49m\\u001B[37m\\u001B[40m Pe\\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m>\\r\\n\\u001B(B\\u001B[0;1;7m\\u001B[38;5;81m\\u001B[40m Jones      \\u001B(B\\u001B[0;7m\\u001B[39;49m\\u001B[37m\\u001B[40m‖               396 |\\u001B[40G          130 |                124 |  64\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Kivell     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[3;29H193 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[18X\\u001B[3;52H0 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[3;72H50 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Jardine    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[4;29H281 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[16X\\u001B[4;50H126 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[16X\\u001B[4;71H105 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[\"]\n[22.89787999999999,\"o\",\"40m Gill       \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[5;29H213 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[5;51H60 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[16X\\u001B[5;71H126 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  27\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Sorvino    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[6;29H142 \\u001B[38;5;246m\\u001B[40m|\\u001B[40G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m           56 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[18X\\u001B[73G7 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  76\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Andrews    \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[7;29H183 \\u001B[38;5;246m\\u001B[40m|\\u001B[40G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m          155 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[7;72H28 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Thompson   \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[16X\\u001B[8;30H89 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[8;51H32 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[8;72H57 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  \"]\n[22.89790499999999,\"o\",\" 0\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Morgan     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[9;29H173 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[9;51H90 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[9;72H28 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B(B\\u001B[0;1\"]\n[22.897995999999992,\"o\",\"m\\u001B[38;5;81m\\u001B[40m Howard     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[10;29H125 \\u001B[38;5;246m\\u001B[40m|\\u001B[40G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m            0 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[10;72H29 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  96\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Parent     \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[11;29H170 \\u001B[38;5;246m\\u001B[40m|\\u001B[40G\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m            0 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[11;72H81 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m  15\\r\\n\\u001B(B\\u001B[0;1m\\u001B[38;5;81m\\u001B[40m Smith      \\u001B(B\\u001B[0m\\u001B[38;5;246m\\u001B[40m‖\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[15X\\u001B[12;29H156 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[12;51H67 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\\u001B[17X\\u001B[12;72H87 \\u001B[38;5;246m\\u001B[40m|\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m   0\\r\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[K\\n\\u001B[7G\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m_pivot_Item|\\u001B[25;52H\\u001B(B\\u001B[0m\\u001B[37m\\u001B[40m W\\u001B(B\\u001B[0;1m\\u001B[39;49m\\u001B[37m\\u001B[40m        11 aggregated\\u001B[25;54H\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[25.52835199999999,\"o\",\"\\b\\u001B[37m\\u001B[40mg\\u001B(B\\u001B[m\\u001B[39;49m\\u001B[37m\\u001B[40m\"]\n[25.654887999999993,\"o\",\"\\u001B[?1l\\u001B>\\u001B[?1000l\"]\n[25.654940999999994,\"o\",\"\\u001B[39;49m\\u001B[37m\\u001B[40m\\r\\u001B[K\\u001B[25;1H\\u001B[?12l\\u001B[?25h\\u001B[?1049l\\r\\u001B[?1l\\u001B>\"]\n[25.656422999999993,\"o\",\"\\u001B[1m\\u001B[7m%\\u001B[27m\\u001B[1m\\u001B[0m                                                                               \\r \\r\"]\n[25.656549999999992,\"o\",\"\\u001B]2;kefala@221b: ~/git/visidata\\u0007\"]\n[25.656580999999992,\"o\",\"\\u001B]1;~/git/visidata\\u0007\"]\n[25.656667999999993,\"o\",\"\\r\\u001B[0m\\u001B[27m\\u001B[24m\\u001B[J$ \\u001B[K\"]\n[25.656695999999993,\"o\",\"\\u001B[?1h\\u001B=\"]\n[25.656731999999995,\"o\",\"\\u001B[?2004h\"]\n[26.690047999999994,\"o\",\"\\u001B[?2004l\\r\\r\\n\"]\n"
  },
  {
    "path": "docs/colors.md",
    "content": "---\neleventyNavigation:\n    key: Customizing VisiData - Colors\n    order: 12\nupdate: 2023-10-12\nversion: VisiData v3.0\n---\n\n## Color Options\n\nInterface elements and colors can be set on the command-line before a session, or in .visidatarc to take effect for every session, or within VisiData on the Options Sheet (`Shift+O`).  Color options in particular start with `color_`:\n\n    vd --color-selected-row=\"magenta\"\n\nor in .visidatarc:\n\n    options.color_selected_row = \"magenta\"\n\nOn the Options Sheet, if you edit a color (or any display element), you will see the changes immediately, both in the options value (which is itself colorized) and also in the interface.  `Shift+U` to undo if you don't like it.\n\n![vd color options sheet](/docs/assets/vd-screenshot-options-colors.png)\n\n## Color Specification\n\nColors in the terminal have 3 components: *foreground*, *background*, and *attributes*.\nIn most modern terminals, each of the foreground and background colors can be one of 256 colors in a standard palette.\n\nSeveral attributes are also available: `bold`, `italic`, `reverse`, and `underline`.  (There are other attributes like `dim` and `blink`, but they are not widely supported).\n\nIn VisiData, colors are specified with a simple language:\n\n    <attribute> <fg-color> on <bg-color>\n\nwhere `<attribute>` is a plain text name as above, and each `<color>` is a number from 0-255, or a basic color name from the original 8-color palette: `black red green yellow blue magenta cyan white`.\nMultiple attributes may be specified.\n\nMost terminals support 256 colors, but because some do not, it's possible to specify a *fallback color*, which is a second color that's used in case the first color isn't available.\nFor instance, `215 yellow` means to use the color `215` (kind of orange-brown), but if it's not available, use `yellow` instead.\n\nMultiple colors may be applied to a single interface element with different precedence, for instance with [colorizers](docs/api/interface).\nThe color used will be the highest precedence background and the highest precedence foreground, which may come from separate color strings.  All attributes will be applied regardless of precedence--there is no way to specify a negative attribute or \"no\" attributes.\n\nAny of the color components may be omitted, letting that component be given by a lower-precedence colorizer instead, ultimately falling back to `color_default` (`white on black` in the default theme).\nMany color strings only specify a single attribute.\n\nThe ordering above--attributes first, then foreground, and finally background--is suggested and preferred.\nAttributes may be specified anywhere in the color string; this does not change their effect (e.g. `bold` applies to the font rendered, not to the foreground or background color, even if `bold` text makes the foreground color seem brighter).\nThe `reverse` attribute flips the foreground and background color.  Multiple `reverse` attributes do not undo each other.\n\n## 256 Terminal Colors and the Colors Sheet\n\nTo see all the available colors and what they look like in your specific terminal, run the `open-colors` command.  (This command is not bound to any keystroke, so must be executed by its longname; press `Space`, then type `open-colors`, then press `Enter`.)\n\n![vd open-colors](/docs/assets/vd-screenshot-colors-sheet.png)\n\nThe first several rows on this sheet are the existing color strings that are currently in use.\nAfter these are the numeric colors; note that colors 0-7 correspond to the named colors above, with 0 being black and 7 being standard white.  Colors 8-15 are unnamed brighter versions of these colors: 8 is gray (\"bright black\") and 15 is bright white.\n\nColors 16-231 form a regular color cube with a wide variety of gradations covering the color space.\nColors 232-255 are gradients of white, with 232 being the darkest possible gray (almost indistinguishable from the black of 0 and 16), and 255 being almost the brightest white (though 15 is brighter).\n\n## [Changing Display Attributes within a string](#attrs) {#attrs}\n\nIn many interface elements, it's possible to change the display attributes inline, within a single string.\nFor example, the menu bar has a message displayed in the upper right (which by default shows \"Ctrl+H for help menu\"), and is configurable with `options.disp_menu_fmt`.\nThe base menu color is configurable with `options.color_menu`, which is also applied to this menubar message.\nHowever, this can be changed by specifying a new color within the string itself, using syntax like `[:red]`:\n\n    options.disp_menu_fmt = \"[:red on black]{vd.motd}\"\n\nA color option name can also be used instead of a real color; for example, to use the `color_error` color, use `[:error]`:\n\n    options.disp_menu_fmt = \"[:error]{vd.motd}\"\n\nAttribute changes can happen multiple times in a single string.\nUse `[/]` to clear the last inline color change, and `[:]` to clear all inline attributes:\n\n    options.disp_menu_fmt = \"[:underline]Note:[/] [:error]{vd.motd}\"\n\nWhat follows the `/` is not checked, so these are all valid:\n\n    [:underline]underlined text[/underline]\n    [:underline]also underlined[/]\n    [:underline]underline ends at end of string\n\n### onclick\n\nIn addition to changing the display attributes, an `onclick` attribute can be given with this inline syntax, which specifies either a VisiData command to run, or a url to open (in `$BROWSER`), when the interface element is clicked:\n\n    options.disp_menu_fmt = \"[:onclick https://jsvine.github.io/intro-to-visidata/]Click here to go to the tutorial[/]\"\n\nOr if you want a custom VisiData toolbar some of your favorite actions:\n\n    vd --disp_menu_fmt=\"[:onclick freq-col] freq out [/] | [:onclick quit-sheet] back [/]\"\n\nElements with `onclick` are displayed with `color_clickable`, which is by default `underline`, which is commonly understood as a clickable affordance.\n\n## Setting the Theme\n\nA set of configured display elements and attributes may be packaged into a *theme*, which can be set as an option before VisiData starts (on the CLI or in .visidatarc), and can be changed with the `theme-input` command (in the menu under `View > Set theme`).\n\nBy default VisiData uses a dark-mode color scheme and some suggestive Unicode characters.\nA few non-default themes are also packaged with VisiData:\n\n- [`light`](https://github.com/saulpw/visidata/blob/develop/visidata/themes/light.py): light-mode color scheme\n- [`ascii8`](https://github.com/saulpw/visidata/blob/develop/visidata/themes/ascii8.py): ascii characters and basic 8-colors only\n- [`asciimono`](https://github.com/saulpw/visidata/blob/develop/visidata/themes/asciimono.py): ascii characters and default colors only\n\nTo use VisiData on a classic [DEC VT102](https://terminals-wiki.org/wiki/index.php/DEC_VT102) terminal:\n\n    vd --theme=asciimono\n\n[I would [love to know](https://github.com/saulpw/visidata/discussions/1533) of anyone using VisiData in such a lo-fi situation!]\n\n### Adding a new theme\n\nTo add another theme, add it to the `vd.themes` dictionary in .visidatarc.\nIf more than one person uses it, [submit a PR](https://github.com/saulpw/visidata/pulls) to include it in the [visidata/themes](https://github.com/saulpw/visidata/tree/develop/visidata/themes) directory.\n\n    vd.themes['awesome'] = dict(\n        color_default      = 'black on white',  # the default fg and bg colors\n        color_key_col      = '20 blue',   # color of key columns\n        color_edit_cell    = '234 black',     # cell color to use when editing cell\n        # ... etc\n    )\n\n## Colorizers\n\n`TableSheet` sheets (which is any sheet with a row/column grid, i.e. most sheets) have *colorizers*, functions that can provide display attributes on individual rows, columns, or cells.\n\nSee [docs/api/interface](/docs/api/interface#colors) for how to use colorizers.\n"
  },
  {
    "path": "docs/columns.md",
    "content": "---\neleventyNavigation:\n    key: Columns\n    order: 5\nupdate: 2021-11-01\nversion: VisiData 2.6\n---\n\n## How to manipulate columns\n\nCommands(s)     Operation\n------------    -----------\n`!`             pins the current column on the left as a key column\n `H`  `L`       slides the current column **one position** to the left/right\n`gH` `gL`       slides the current column **all the way** to the left/right of its section\n\n---\n\n## How to hide (remove) and unhide (return) columns\n\n###### How to hide columns\n\n- Press `-` (hyphen) to hide the current column.\n\n**or**\n\n1. Press `Shift+C` on the source sheet to open its **Columns sheet**.\n2. Move the cursor right to the **width** column.\n3. Move the cursor down to the row which represents the column you wish to hide.\n4. Press `e` followed by `0` to set the width for that column to **0**.\n5. Press `q` to return to the source sheet.\n\n###### How to unhide columns\n\n1. Press `gv` to unhide all columns on current sheet.\n\n**or**\n\n1. Press `Shift+C` on the source sheet to open its **Columns sheet**.\n2. Move the cursor right to the **width** column.\n3. Move the cursor down to the row which represents the column you wish to unhide. Currently, that cell should contain the value **0**.\n4. Press `e` followed by a *positive number* to set the width.\n5. Press `q` to return to the source sheet.\n\n---\n\n## How to specify column types\n\nCommand    Type\n--------- --------\n` ~`      string\n` #`      int\n` %`      float\n` $`      currency\n` @`      date\n`z#`      vlen\n`z~`      anytype\n\nColumns usually begin as untyped (`anytype`). Errors when working with numerical or datetime data is often due to values being considered as strings, and the problem is solved by setting the correct type.\n\nThe `float` type uses Python's builtin `float()` constructor to parse the string, and it parses by using the decimal separator.\n\nThe `currency` type is a bit of a misnomer. It filters out any non-numeric characters, and then parses the remainder of the cell value as a float.\nThe reasons to prefer using `float` over `currency`, is performance (it is quite a bit slower than native parsing with `float`), or if any non-float characters should get reported as an error.\n\nThe `date` type parses dates into ISO8601 format. Those columns can then be used in mathematical calculations, and the calculations are interpreted for dates. E.g. 2020-01-01 + 1, is 2020-01-02.\n\nThe `vlen` type formats the cell value to the length of the content. For example, if the cell content is a list of length 3, then when `vlen` typed it will display a value of 3.\n\nThere is also the `floatlocale` type, which uses Python's `locale.atof` to parse the Column values. With `floatlocale`, you can set the `LC_NUMERIC` environment variable appropriately (before launching VisiData), such that `atof()` will parse the number based on your locale setting. There is a `type-floatlocale` command, which is unbound by default, because parsing this way is significantly slower than using the builtin float type.\n\nIf you need locale-specific float parsing regularly, you may want to [rebind](/docs/customize) `%` or `z%` (or maybe some other keystroke) to `type-floatlocale` instead.\n\nThe following example uses the file [sample.tsv](https://raw.githubusercontent.com/saulpw/visidata/stable/sample_data/sample.tsv).\n\n<div class=\"asciicast\">\n    <asciinema-player id=\"player-types\" poster=\"npt:0:20\" rows=27 src=\"../casts/types.cast\"></asciinema-player>\n    <script type=\"text/javascript\" src=\"/asciinema-player.js\"></script>\n</div>\n\n###### How to batch specify column types for more than one column\n\n1. Press `Shift+C` to open the **Columns sheet**.\n2. Press `s` or `t` to select the rows referencing the columns you wish to type.\n3. Type `g` followed by the any of the above typing keystrokes to set the type for all selected columns on the source sheet.\n\n---\n\n## How to format columns\n\n**Note**: Un-typed file formats, like tsvs and csvs, will save as they are displayed.\n\nSome types have an option for their default display formatting.\n\nType      Option            Default\n--------- ----------------  --------\nint       `disp_int_fmt`      `{:.0f}`\nfloat     `disp_float_fmt`    `{:.02f}`\ncurrency  `disp_currency_fmt` `%0.2f`\ndate      `disp_date_fmt`     `%Y-%m-%d`\n\nWays to adjust the display formatting:\n\n* The `fmtstr` column on the **Columns Sheet** allows you to specify the formatting for specific columns within that session, without affecting the default for the others.\n* The `disp_TYPE_fmt` option can be changed on the **Options Sheet** to set the formatting for all columns of type `TYPE` in that session.\n* The `--disp-TYPE-fmt` argument can be passed through the commandline to set the formatting for all columns of type `TYPE` in that session.\n* The `options.disp_TYPE_fmt` can be set in the `~/.visidatarc` to change the default formatting for all columns of type `TYPE` for all sessions.\n\nThere are several formatting styles offered:\n\n* Formatting that starts with `'%'` (e.g. `%0.2f`) will use [locale.format_string()](https://docs.python.org/3.6/library/locale.html#locale.format_string).\n* Otherwise (e.g. `{:.02f}`), formatting will be passed to Python's [string.format()](https://docs.python.org/3/library/string.html#custom-string-formatting).\n* Date fmtstr are passed to [strftime](https://strftime.org/).\n\nThe default for currency uses `locale.format_string()`. The default for int/float/date use `string.format()`.\n\n###### How to format a specific numeric columns to contain a thousands separator within a session?\n\n1. Set a column to a numeric type by pressing `#` (int), `%` (float), or `$` (currency).\n2. Press `Shift+C` to open the **Columns Sheet**.\n3. Move to the row referencing the column whose display you wish to format. Move the cursor to the fmtstr column.\n4. Type `e` followed by `{:,.0f}` for an `int` type and `{:,.02f}` for a floating point type.\n\n###### How to quickly adjust the precision of a float or date?\n\n1. Ensure the column is typed as numeric column: float (`%`), floatsi (`z%`), dirty float (`$`), or date (`@`).\n2. Press `Alt+Plus` or `Alt+Minus` to adjust the precision in the current column.\n3. Or, press `Space` and use the longname `setcol-precision-more` or `setcol-precision-less`.\n\n###### How to automatically set the type of a particular column\n\nWhen loading sheets repeatedly with the same schema, it can be useful to pre-set the column types (and other metadata) in .visidatarc using the `knownCols` attribute on the Sheet class and its subclasses.\n\nFor example, to set the \"timestamp\" column in every sheet to the `date` type:\n\n`Sheet.knownCols.timestamp.type = date`\n\nOr to hide the `nCols` column on the SheetsSheet by default:\n\n`SheetsSheet.knownCols.nCols.width = 0`\n\n###### How to format all date columns as **month/day/year**.\n\nThe above method can be used to explicitly set the default `fmtstr` for specifically-named columns.\nHowever, to use a default fmtstr for all date-typed columns, set the `disp_date_fmt` option.  In .visidatarc:\n\n~~~\noptions.disp_date_fmt = '%m/%d/%Y'\n~~~\n\nor pass as a commandline argument:\n\n~~~\nvd --disp-date-fmt='%m/%d/%Y'\n~~~\n\nor set in the **Options Sheet**.\n\n1. Press `Shift+O` to open the **Options Sheet**.\n2. Move the cursor down to the relevant `disp_date_fmt` option.\n3. Type `e` followed by `%m/%d/%Y`.\n\n---\n\n###### How to specify a comma decimal separator when typing floating point numbers?\n\n1. Before launching VisiData, set the shell environment variable `LC_NUMERIC` to a locale which interprets commas as decimals. Any European locale should do; an example that works is `en_DK.UTF-8`.\n2. Within VisiData, set a column to type `floatlocale` by pressing `Space` followed by `type-floatlocale`.\n\nNote that `type-floatlocale` is significantly slower than `type-float`. However, if you wish to replace the current binding for `type-float` with `type-floatlocale`, add to your `~/.visidatarc`:\n\n~~~\nSheet.unbindkey('%')\nSheet.bindkey('%', 'type-floatlocale')\n~~~\n\nor if you never use `type-floatsi`, you can do\n\n\n~~~\nSheet.unbindkey('z%')\nSheet.bindkey('z%', 'type-floatlocale')\n~~~\n\n## How to split a column\n\nPython regular expressions provide more finetuned column splitting. The following example\nuses the commands for column splitting and transformation with [xd/puzzles.tsv](http://xd.saul.pw/xd-metadata.zip).\n\n<div class=\"asciicast\">\n    <asciinema-player id=\"player-split-regex\" poster=\"npt:0:20\" rows=27 src=\"../casts/split-regex.cast\"></asciinema-player>\n</div>\n\n###\n\n- `:` adds new columns derived from splitting the current column at positions defined by a *regex pattern*. `options.default_sample_size` (default: 100) rows around the cursor will be used to determine the number of columns that will be created.\n- `;` adds new columns derived from pulling the contents of the current column which match the *regex within capture groups*. The new columns are named using the capture group index, or if named capture groups are used, the capture group names. This command uses the `options.default_sample_size` (default:100) rows around the cursor as sample rows.\n- `*` followed by *regex* and then `Tab` followed by the *replacement* replaces the text matching the *regex* with the contents of *replacement*. *replacement* may include backreferences to capture groups in the regex (`\\1` etc).\n\n## How to substitute text in a column\n\nThe `*` command can be used to do content transformations of cells. The `g*` variant transforms in-place, instead of creating a new column.\n\nThe following example uses [benchmarks.csv](https://raw.githubusercontent.com/saulpw/visidata/stable/sample_data/benchmarks.csv).\n\n**Question** Transform the **SKU** values of *food* to *nutri*.\n\n1. Move cursor to **SKU** column.\n2. Press `gs` to select all rows.\n3. Press `g*` to replace text in selected rows in current column.\n4. Type `food` in the search field.\n5. Press `Tab` to go to the replace field, then type `nutri`.\n6. Press `Enter` to replace the text.\n\n- tests/transform-cols.vd\n\n---\n\n## [How to expand columns that contain nested data](#expand) {#expand}\n\nIf a column includes container data such as JSON objects or arrays, the `(` family of commands can expand the child values into top-level columns:\n\nCommand       Operation\n---------     --------\n`  (`         expand _current_ column\n` g(`         expand _all visible_ columns fully\n` z(`         expand _current_ column to a specific depth (prompt for input)\n`gz(`         expand _all visible_ columns to a specific depth (prompt for input)\n`  )`         contract (unexpand) the current column\n` zM`         expand _current_ column row-wise within that column\n\nThe following demo shows `(` commands applied to this data:\n\n~~~\n[\n    [ \"short\", \"array\" ],\n    [ \"slightly\", \"longer\", \"array\" ],\n    { \"nested\": \"data\" },\n    { \"more\": { \"deeply\": { \"nested\": \"data\" } } }\n]\n~~~\n\n<div class=\"asciicast\">\n    <asciinema-player id=\"player-expand-cols\" poster=\"npt:0:20\" rows=13 src=\"../casts/expand-cols.cast\"></asciinema-player>\n</div>\n\nNote that by default the expansion logic will look for nested columns in **up to** `options.default_sample_size` (Default: 100) **rows surrounding the cursor**. This behavior can be controlled by adjusting `default_sample_size` in the **Options Sheet**, or setting `options.default_sample_size` in the `~/.visidatarc` file.\n\n---\n\n## [How to create derivative columns](#derived) {#derived}\n\nThe `=` command takes a Python expression as input and creates a new column, where each cell evaluates the expression in the context of its row.\n\nTo specify the column name, use `name=expr` (e.g. `total = Units * Unit_Cost`).  If no name is given, the expression itself is used as the column name.\n\nThese variables and functions are available in the scope of an expression:\n\n- **Column names** evaluate to the typed value of the cell in the named column for the same row.\n- **`vd`** attributes and methods; use `Ctrl+X vd` to view the vd object, or [see the API]().\n- **`Sheet`** attributes and methods; use `g Ctrl+Y` to view the sheet object (or see the API).\n- **Global** functions and variables (add your own in your .visidatarc).\n- **modules** that have been `import`ed in Python\n  - if you need a module that hasn't already been imported at runtime, use `g Ctrl+X import <modname>`.\n\n- **`sheet`**: the current sheet (a TableSheet object)\n- **`col`**: the current column (as a Column object; use for Column metadata)\n- **`row`**: the current row (a Python object of the internal rowtype)\n- **`curcol`**: evaluate to the typed value of this row in the column that the cursor was on at the time that the expression column was added.\n- **`cursorCol`**: evaluate to the typed value of this row for the column the cursor is on. Changes as the cursor moves for `=`. Uses the column from the time the calculation was made for `g=`, `gz=`, and `z=`.\n- **`currow`**: a convenience object for accessing column values of the current cursor row by name. e.g. `currow.Price` returns the typed value of the `Price` column for the cursor row.\n\nAdditional attributes can be added to sheets and columns.\n\n`col` deliberately returns a Column object, but any other Column object is interpreted as the value within that column for the same row. For example, both `curcol` and `cursorCol` return values, not the object itself.\n\n\nFor example, this customizes addcol-expr to set the `curcol` attribute on the new ExprColumn to a snapshot of the current cursor column (at the time the expression column is added):\n\n```\nSheet.addCommand('=', 'addcol-expr', 'addColumnAtCursor(ExprColumn(inputExpr(\"new column expr=\"), curcol=cursorCol))', 'create\n new column from Python expression, with column names as variables')\n```\n\nThen, an expression can use `curcol` as though it referred to the value in the saved column.\n\n`Tab` autocompletion when inputting an expression will cycle through valid column names only.\n\nThe following examples use the file [sample.tsv](https://raw.githubusercontent.com/saulpw/visidata/stable/sample_data/sample.tsv).\n\n**Question** On which days have we sold more than 10 **Item**s?\n\n1. Scroll to the **Units** column. Set the type of the **Units** column by pressing `#` (int).\n2. Type `=` followed by `Units > 10`. A new column will be created. The cells in this column will contain the value **True** in rows where the number of **Units** are greater than 10 and **False** otherwise.\n3. Move to the new derived column.\n4. Type `|` followed by `True` to select all rows where there were more than 10 **Units** sold.\n5. Press `\"` to open a duplicate sheet with only those selected rows.\n\n**Question** I have a dataset with separate columns for **Year**, **Month** and **Day**. How can I concatenate them into a single date column?\n\n1. Type `=` followed by `Year + '-' + Month + '-' + Day`.\n2. Set the type of the new derived column by pressing `@` (date).\n3. Type `^` followed by `Date` to rename the column to **Date**.\n\n**Question** I have a dataset with **Date** column that is missing a prefix of '2020-'. How do I add it to the **Date** column?\n\nWhen using `=`, and wanting to reference the current column, we recommend using `curcol`. When using `g=`, `gz=`, and `z=`, we recommend cursorCol. `=`, unlike the others, is dynamic and changes with adjustment of underlying values, which means it will change along with the movement of the cursor (tracked by `cursorCol`). `curcol` is a special attribute of a new **ExprColumn**, which remembers the cursorCol at the time of creation.\n\n1. Move the cursor to **Date**.\n2. Type `g=` followed by *f\"2020-{cursorCol}\"*.\n\n**Question** I have a dataset with **file names**. How do I create a new column with the **file names** lower cased?\n\n1. Move the cursor to **file names** column.\n2. Type `=` followed by `curcol.casefold()`.\n3. Move to the newly created column, and rename it with `^`, followed by the desired name.\n\n---\n\n## How to configure multiple columns\n\nProperties of columns on the source sheet can be changed by using [standard editing commands](/man#edit) on its **Columns sheet** (accessed with `Shift+C`). In particular, it facilitates the selection of multiple columns, followed by utilising one of the `g`-prefixed commands to modify all of them.\n\nFor a full list of available commands, see the [man page](/man#columns). Some example workflows follow.\n\nThe following examples use the file [sample.tsv](https://raw.githubusercontent.com/saulpw/visidata/stable/sample_data/sample.tsv).\n\n###### How to set multiple statistical aggregators\n\n**Question** What is the average daily revenue from sales of each **Item**?\n\n1. Set the type of the **Units** column by pressing `#` (int).\n2. Set the type of the **Total** column by pressing `%` (float).\n3. Press `Shift+C` to open the **Columns sheet**.\n4. Press `s` or `t` on the rows referencing the source sheet **Units** column and the **Total** column to select them.\n5. Type `g+` followed by `avg` to add a **avg** statistical aggregator to the selected rows.\n6. Press `q` to exit and return to the source sheet.\n7. Scroll to the **Item** column. Press `Shift+F` to open the **Frequency table**.\n\n**Question** What are the daily average and sum total number of **Units** sold for each **Item**?\n\n1. Press `Shift+C` to open the **Columns sheet**.\n2. Move the cursor to the row referencing the source sheet **Units** column.\n\n    a. Press `s` or `t` to select it.\n    b. Set the type for the source sheet **Units** columns by pressing `g#` (int).\n    c. Move the cursor to the **aggregators** column.\n    d. Type `e` to enter edit mode, followed by *sum avg*.\n\n3. Press `q` to exit and return to the source sheet.\n4. Move the cursor to the **Item** column. Press `Shift+F` to open the **Frequency table**.\n\n---\n"
  },
  {
    "path": "docs/contributing.md",
    "content": "---\neleventyNavigation:\n  key: Checklists for Contributing to VisiData\n  order: 99\n---\n\n## [Submitting a Core Loader](#loader) {#loader}\nA deeper explanation of all of these steps can be found [in the loaders api documentation](https://www.visidata.org/docs/api/loaders.html).\n\n- Create an `open_foo` function that returns the new `FooSheet`.\n- Set an appropriate `rowtype` string.\n- Provide a `# rowdef: ` comment. This describes the structure of a row (e.g. its base class) in a **Sheet**.\n- If the loader's dependencies are not part of Python3 stdlib, note the additional dependencies in the `requirements.txt` (include a comment adjacent to the dep with the name of the loader).\n- Check in a small sample dataset, in that format, to the `sample_data` folder\n- Add a `load-foo.vd` to `tests/`. `load-foo.vd` should simply open the checked-in sample dataset and have a simple interaction if the source includes multiple tables.\n- After replaying `vd load-foo.vd`, save the final sheet as `load-foo.tsv`. Save `load-foo.tsv` in `tests/golden/`.\n- add a section on the loader to the [formats.jsonl](https://github.com/saulpw/visidata/blob/develop/dev/formats.jsonl).\n\n## [Submitting an External Plugin](#plugins) {#plugins}\nA deeper explanation of all of this framework can be found [in the plugins api documentation](https://www.visidata.org/docs/api/plugins.html).\n\n- Host a single Python file containing all of the plugin's code.\n- In the https://github.com/visidata/dlc/blob/stable/plugins.jsonl file in the `visidata:dlc` repo, add a row for each plugin with all of the necessary information.\n"
  },
  {
    "path": "docs/crud.md",
    "content": "---\neleventyNavigation:\n    key: Creating sheets, rows and columns\n    order: 8\nUpdate: 2021-11-18\nVersion: VisiData 2.7.1\n---\n\n\n\n## How to set up a sheet for data collection\n\n1. Type `Shift+A` to open a new blank sheet with one column.\n2. Press\n\n    a. `a` to add one blank row.\n\n    **or**\n\n    b. `ga` followed by a *number* to add that many blank rows.\n\n---\n\n## How to add a new blank column\n\n1. Press\n\n    a. `za` to add one blank column.\n\n    **or**\n\n    b. `gza` followed by a *number* to add that many blank columns.\n\n2. Press `^` to edit the column name.\n\n---\n\n## How to fill a column with a range of numbers\n\n1. Press `gs` to select all rows (or use other commands to select a subset of rows to fill).\n2. Move the cursor to the column to be filled.\n3. Press `gi`.\n\n## How to edit a cell\n\n1. Press `e` to edit an individual cell.\n2. Type in the new value.\n3. Press `Enter` to accept the value.\n\n---\n\n## How to move the cursor to the next cell after a successful edit\n\n1. Press `Shift+Arrow` to accept the current value and move the cursor into edit mode in the next cell.\n\n---\n\n"
  },
  {
    "path": "docs/customize.md",
    "content": "---\neleventyNavigation:\n    key: Customizing VisiData\n    order: 12\nUpdated: 2023-11-18\nVersion: VisiData v3.0\n---\n\nFor a primer on configuring VisiData through setting options, see [jsvine's tutorial](https://jsvine.github.io/intro-to-visidata/advanced/configuring-visidata/).\n\n## How to configure commands {#commands}\n\nThe **.visidatarc** in the user's home directory is plain Python code, and can contain additional commands or key bindings.\n\n(Alternatively, since v2.9, VisiData has [XDG support](https://github.com/saulpw/visidata/pull/1420). If `$XDG_CONFIG_HOME` is set and the file `\"$XDG_CONFIG_HOME\"/visidata/config.py` exists, this will be loaded as the user's default configuration file.)\n\nLongnames are names given to executable commands for ease of keystroke remapping. For example, the longname `select-row` is assigned to commands which select the current row in a sheet. On default, this longname is bound to the keystroke `s`.\n\nFrom within VisiData, type `z Ctrl+H` to open the **Commands Sheet**. This is a reference for all of the commands available on the current sheet. For a deeper exploration of commands, check out [API reference manual](https://www.visidata.org/docs/api/commands.html).\n\n### Setting/changing keybindings for existing commands\n\n1. Learn the longname for a command. Longnames are usually 2-3 words, separated by hyphens. The first word is usually a verb, and the second usually a noun. When a command is executed, its longname appears in the lower right status, next to its keystroke. Alternatively, you can `z Ctrl+H` to open the **Commands Sheet** and discover the longname for the command in question.\n\n![longname](/docs/assets/longname.png)\n\n2. a) To create a global keybinding, add `bindkey(keystroke, longname)` to your **.visidatarc**.\nb) To set the binding for a particular sheet type, add `<Sheet>.bindkey(keystroke, longname)` to your **.visidatarc**, where `<Sheet>` is a **SheetType**.\n\n~~~\nWarning: bindings defined in a .visidatarc will overwrite default ones.\n~~~\n\n#### Example: Bind `i` to edit-cell globally\n\nIn VisiData, pressing `e` enters edit mode for the current cell. Seasoned vim users might prefer to press `i` instead.\n\n1. Open `~/.visidatarc` in an editor.\n2. Add the line `TableSheet.bindkey('i', 'edit-cell')` to globally bind the keystroke `i` to the longname `edit-cell`.\n3. Launch VisiData, and press `i`.\n\n#### Example: Unbind `i` from addcol-incr globally\n\nIf the above instructions are followed, a message will pop up that says \"`i` was already bound to `addcol-incr`.\n\nTo unbind `i` before binding it:\n\n1. Open `~/.visidatarc` in an editor.\n2. Add the line `TableSheet.unbindkey('i')` before any piece of code where it is re-bound.\n3. Launch VisiData.\n\n\n### Customizing cell editing keybindings\n\n`bindkey` changes keybindings in normal (non-editing) mode.  To change keybindings during cell editing, use `vd.editCellBindings` with `acceptThenFunc()`:\n\n~~~\nvd.editCellBindings['Enter'] = acceptThenFunc('go-down', 'edit-cell')\n~~~\n\n`acceptThenFunc()` takes one or more command longnames.  It saves the current edit, then executes each command in sequence.  For example, to make `Enter` save and move down to edit the next cell (spreadsheet-style):\n\n~~~\nvd.editCellBindings['Enter'] = acceptThenFunc('go-down', 'edit-cell')\n~~~\n\nSee [Editing Contents](/docs/edit) for the full list of default cell editing keybindings.\n\n### Creating new commands\n\nAt minimum, `<Sheet>.addCommand` requires a longname and execstr.\n\nFor example, to define a new command:\n\n~~~\nSheet.addCommand('Ctrl+D', 'scroll-halfpage-down', 'cursorDown(nScreenRows//2); sheet.topRowIndex += nScreenRows//2')\n~~~\n\nTo define a command interactively (without editing `.visidatarc`), use the `define-command` command.  The input is `longname execstr` (separated by the first space).  For example: `define-command show-item status(currow.Item)`.\n\nCommands and keybindings are set on a particular Sheet Type in the class hierarchy. Use `BaseSheet` for commands which don't need a sheet at all--these will apply to all sheets.  Commands and bindings on more specific sheets will override more generic ones.  `Sheet` is a generic table, `ColumnsSheet` would be for the columns sheet, `FreqTableSheet` for frequency tables, and so on.\n\n### Adding custom aggregators {#aggregators}\n\nAggregators allow you to gather the rows within a single column, and interpret them using descriptive statistics. VisiData comes pre-loaded with a default set like mean, stdev, and sum.\n\nTo add your own custom aggregator `name`, add the following to your `.visidatarc`.\n\nvd.aggregator('name', func, type=float)\n\nWhere `func` is a function of the form:\n\n```\ndef func(list):\n    return value\n```\n\nThe `type` parameter is optional. It allows you to define the default type of the aggregated column.\n\nHere is an example, that adds an aggregator for [numpy's internal rate of return](https://numpy.org/devdocs/reference/generated/numpy.irr.html) module.\n\n```\nimport numpy as np\nvd.aggregator('irr', np.irr, type=float)\n```\n\n**Bonus: How to choose which aggregators are columns within the DescribeSheet?**\n\nAny numeric aggregator can be added!\n\nSupply a space-separated list of aggregator names to `options.describe_aggrs` in your .visidatarc.\n\n```\noptions.describe_aggrs = 'mean stdev irr'\n```\n\n### Saving options from the Options Sheet {#save-options}\n\nOptions edited on the Options Sheet (`Shift+O`) can be saved to the config file with `z Ctrl+S`.\nOnly options that differ from the default and aren't already in the config file will be appended.\n\n### Turning off motd {#motd}\n\nBy default, the first time each day that VisiData is used, it downloads a single small file of startup messages.\n\nThis network request can be turned off by adding `options.motd_url=''` to your `~/.visidatarc`.\n\nIf you do decide to turn it off, we encourage you to [donate](https://www.patreon.com/saulpw/posts) to [support VisiData](https://github.com/sponsors/saulpw).\n"
  },
  {
    "path": "docs/dirsheet.md",
    "content": "---\neleventyNavigation:\n  key: Directory Sheet\n  order: 99\n---\n\n# Directory Sheet (DirSheet)\n\nOpen any directory in VisiData to get a **DirSheet**: a browsable, editable view of the filesystem.\n\n~~~\nvd .\nvd /path/to/directory\n~~~\n\nWithin VisiData, use `open-dir-current` to open the current working directory.\n\n## Columns\n\nDirSheet shows these columns by default:\n\nColumn      Description\n------      -----------\ndirectory   parent directory path\nfilename    file name (key column)\next         file extension (`/` for directories)\nsize        file size in bytes\nmodtime     last modification time\n\nThese columns are available but hidden by default (unhide with `-`):\n\nColumn      Description\n------      -----------\nabspath     absolute file path\nowner       file owner (Unix)\ngroup       file group (Unix)\nmode        file permissions (octal)\nfiletype    output of `file --brief` (computed async)\n\nFiles are sorted by modification time (newest first) by default.\n\n## Opening files\n\nKeystroke(s)        Command                 Action\n------------        -------                 ------\n`Enter`             `open-row-file`         open file at cursor as a new sheet\n`g Enter`           `open-rows`             open all selected files as new sheets\n`z Enter`           `open-row-filetype`     open file at cursor, prompting for filetype\n`` ` ``             `open-dir-parent`       open parent directory\n\nVisiData detects the filetype from the file extension and opens the appropriate loader (csv, tsv, json, etc.).  Directories open as nested DirSheets.\n\n## File preview\n\nThe `open-preview` command opens the file at the cursor in a split pane.  As you navigate the file list, the preview updates automatically to show the current file.\n\n- Tables (csv, tsv, json, etc.) display as proper table sheets\n- Text files display as TextSheet\n- Directories display as nested DirSheet\n- Preview sheets for visible rows are preloaded in the background\n\n`open-preview` is unbound by default; add a keybinding in `.visidatarc`:\n\n~~~\nDirSheet.addCommand('p', 'open-preview', 'sheet.previewFile(cursorRow)')\n~~~\n\nClose the preview with `g Shift+Z` (close split).\n\n## External editors\n\nKeystroke(s)        Command                 Action\n------------        -------                 ------\n`Ctrl+O`            `sysopen-row`           open file in `$EDITOR`\n`g Ctrl+O`          `sysopen-rows`          open selected files in `$EDITOR`\n\n## Editing the filesystem\n\nDirSheet uses **deferred mode**: edits are staged and applied all at once with `z Ctrl+S`.\n\n### Renaming and moving files\n\nEdit the **filename** column (`e`) to rename a file.  Edit the **directory** column to move it to a different directory (the destination is created if it doesn't exist).\n\n### Deleting files\n\nMark rows for deletion with `d`.  Commit with `z Ctrl+S`.\n\n- By default (`options.safety_first`), directory deletion uses `os.rmdir` (fails if not empty).\n- With `safety_first` disabled, directory deletion uses `shutil.rmtree`.\n\n### Editing metadata\n\nEdit the **size**, **modtime**, **owner**, **group**, or **mode** columns directly.  Changes are applied on commit.\n\n## Copying files\n\nKeystroke(s)        Command                 Action\n------------        -------                 ------\n`y`                 `copy-row`              copy file at cursor to a destination directory\n`gy`                `copy-selected`         copy selected files to a destination directory\n\n## Shell integration\n\nKeystroke(s)        Command                 Action\n------------        -------                 ------\n`z;`                `addcol-shell`          add column from shell command, with `$columnName` variables\n\nShell columns run a command for each row, interpolating `$columnName` references with column values.  Both stdout and stderr are captured as separate columns.\n\n## Options\n\nOption          Default     Description\n------          -------     -----------\n`dir_depth`     `0`         folder recursion depth (0 = only immediate children)\n`dir_hidden`    `False`     whether to show hidden files (dotfiles)\n\nOptions must be set before loading; reload the sheet after changing them.\n\n## FileListSheet\n\nOpening a `.fdir` file creates a **FileListSheet**: a DirSheet populated from a list of file paths (one per line) instead of a directory listing.\n"
  },
  {
    "path": "docs/edit.md",
    "content": "---\neleventyNavigation:\n  key: Editing Contents\n  order: 6\nUpdate: 2018-08-19\nVersion: VisiData 1.3.1\n---\n\n\n\n## How to edit cells\n\nFor a summary of all editing commands, see the [man page](/man#edit).\n\nCommand                    Operation\n--------                   ----------\n `e`                       edit contents of **current cell**\n`ge` *text*                set contents of **current column for selected rows** to *text*\n`g*` *regex*/*subst*       replace matching *regex* in **current column for selected rows** with *subst*\n`g=` *expr*                evaluate Python *expr* over each selected row and set **current column** to the result\n\n## note!\n\nModifications made to rows on derived sheets will be reflected on the source sheets.  This includes the Frequency Table: editing the key column there will change all instances on the source sheet, and if that sheet is derived from another source sheet, it will be reflected there, and so on.\n\nThis does not apply to adding or deleting rows, only changes to existing rows.\n\n## Commands while editing\n\nWhile in editing mode, or anytime VisiData expects input (with e.g. `=`, `;`), typical readline commands become available:\n\nCommand             Operation\n--------            ----------\n`Enter`             accepts input\n`Ctrl+C`/`Esc`      aborts input\n`Ctrl+O`            opens external $EDITOR to edit contents\n`Ctrl+R`            reloads initial value\n`Ctrl+A`/`Ctrl+E`   moves to beginning/end of line\n`Backspace`         deletes previous character\n`Up`/`Down`         sets contents to previous/next in history\n`Tab`/`Shift-Tab`   autocompletes input (when available)\n\n### Cell navigation while editing\n\nWhen editing a cell (with `e`), these additional commands move to an adjacent cell and continue editing:\n\nCommand             Operation\n--------            ----------\n`Shift+Down`/`Shift+Up`       saves and moves to cell below/above\n`Shift+Right`/`Shift+Left`    saves and moves to cell right/left\n`Tab`/`Shift-Tab`             saves and moves to cell right/left\n\n`Tab` wraps to the next row when at the last column; `Shift-Tab` wraps to the previous row when at the first column.\n\nThese bindings can be customized; see [Customize](/docs/customize#customizing-cell-editing-keybindings).\n\n---\n\n## How to rename columns\n\nCommand     Operation\n--------    ----------\n  `^`       edits name of **current** column\n `g^`       sets names of **all unnamed visible** columns to contents of **selected** rows (or **current** row)\n `z^`       sets name of **current** column to contents of **current** cell\n`gz^`       sets name of **current** column to combined contents of **current** column for **selected** rows\n\nIn most cases, `^` is the preferred command. Examples which demo `^` can be seen in [Columns](/docs/columns#derived) and [Group](/docs/group#frequency).\n\n###### How to set the header in an Excel sheet?\n\nFor most filetypes (e.g. csv, tsv, xls(x)) the loaders assume that the dataset's first `options.header` rows contain the column names.\n\nIf the Excel file has multiple sheets with varying number of header rows:\n\n1. Pass `--header=0` while loading the file.\n\n~~~\nvd file.xlsx --header=0\n~~~\n\n2. For each sheet, press `s` or `t` to select the rows which represent the header rows.\n3. Press `g^` to set the names of the headers to the contents of selected rows.\n\n###### How to rename columns using the Columns sheet\n\n1. Press `Shift+C` to open the **Columns sheet**.\n2. Within the **name** column, move the cursor to the row which represents the source sheet.\n3. Type `e` and then input *the new column name*. Press `Enter`.\n4. Press `q` to return to the source sheet and see the renamed column.\n\n---\n"
  },
  {
    "path": "docs/formats.md",
    "content": "---\neleventyNavigation:\n    key: Supported Formats\n    order: 99\n---\n\n| filetype              | format                                         | VisiData_loader | VisiData saver               | version_added | created | creator                                                       | PyPI dependencies    |\n| --------------------- | ---------------------------------------------- | --------------- | ---------------------------- | ------------- | ------- | ------------------------------------------------------------- | -------------------- |\n| [csv](#csv)           | Comma\\-Separated Values                        | 0\\.28           | displayed text               | 0\\.28         | 1972    |                                                               |                      |\n| [json](#json)         | Javascript Object Notation \\(JSON\\)            | 0\\.28           | typed                        | 0\\.28         | 2001    | Douglas Crockford                                             |                      |\n| [tsv](#tsv)           | Tab\\-Separated Values                          | 0\\.28           | displayed text               | 0\\.28         |         |                                                               |                      |\n| xlsx                  | Excel spreadsheets                             | 0\\.28           |                              | 0\\.28         | 1987    | Microsoft                                                     | openpyxl             |\n| zip                   | ZIP archive format                             | 0\\.28           |                              | 0\\.28         | 1989    | PKWARE                                                        |                      |\n| hdf5                  | Hierarchical Data Format                       | 0\\.28           |                              | 0\\.28         | 199x    | NCSA                                                          | h5py                 |\n| [sqlite](#sqlite)     | sqlite                                         | 0\\.42           |                              | 0\\.42         | 2000    | D\\. Richard Hipp                                              |                      |\n| xls                   | Excel spreadsheets                             | 0\\.42           |                              | 0\\.42         | 1987    | Microsoft                                                     | xlrd                 |\n| [fixed](#fixed)       | fixed width text                               | 0\\.97           |                              | 0\\.97         |         |                                                               |                      |\n| [postgres](#postgres) | PostgreSQL database                            | 0\\.97           |                              | 0\\.97         | 1996    |                                                               |                      |\n| [imap](#imap)         | Internet Message Access Protocol               | 2\\.12           |                              | 2\\.12         | 1988    |                                                               |                      |\n| [vd](#vd)             | VisiData command log (TSV)                     | 0\\.97           | yes                          | 0\\.97         | 2017    | VisiData                                                      |                      |\n| [mbtiles](#mbtiles)   | MapBox Tileset                                 | 0\\.98           |                              | 0\\.98         | 2011    | MapBox                                                        | mapbox\\-vector\\-tile |\n| pbf                   | Protocolbuffer Binary Format                   | 0\\.98           |                              | 0\\.98         | 2011    | OpenStreetMap                                                 |                      |\n| [shp](#shp)           | Shapefile geographic data                      | 0\\.98           |                              | 0\\.98         | 1993    | ESRI                                                          | pyshp                |\n| [html](#html)         | HTML tables                                    | 0\\.99           | displayed text               | 0\\.99         | 1996    | Dave Raggett                                                  | lxml                 |\n| md                    | markdown table                                 |                 | displayed text               | 1\\.1          | 2008    |                                                               |                      |\n| [png](#png)           | Portable Network Graphics \\(PNG\\) image        | 1\\.1            | from png                     | 1\\.1          | 1996    | PNG Development Group                                         | pypng                |\n| [ttf](#ttf)           | TrueType Font                                  | 1\\.1            |                              | 1\\.1          | 1991    | Apple                                                         | fonttools            |\n| [dot](#pcap)          | Graphviz diagram                               |                 | from pcap                    | 1\\.2          | 1991    |                                                               |                      |\n| dta                   | Stata                                          | 1\\.2            |                              | 1\\.2          | 1985    | StataCorp                                                     | pandas               |\n| [geojson](#shp)       | Geographic JSON                                | 2\\.2            | yes \\(from shp and geojson\\) |               | 2008    | http://geojson\\.org/                                          |                      |\n| sas7bdat              | Statistical Analysis System \\(SAS\\)            | 1\\.2            |                              | 1\\.2          | 1976    | SAS Institute                                                 | sas7bdat             |\n| sav                   | SPSS statistics                                | 1\\.2            |                              | 1\\.2          | 1968    | SPSS Inc                                                      |                      |\n| spss                  | SPSS statistics                                | 1\\.2            |                              | 1\\.2          | 1968    | SPSS Inc                                                      | savReaderWriter      |\n| xpt                   | Statistical Analysis System \\(SAS\\)            | 1\\.2            |                              | 1\\.2          | 1976    | SAS Institute                                                 | xport                |\n| [jsonl](#json)        | JSON Lines                                     | 1\\.3            | typed                        | 1\\.3          | 2013    | Ian Ward                                                      |                      |\n| [pandas](#pandas)     | all formats supported by pandas library        | 1\\.3            |                              | 1\\.3          | 2008    | Wes McKinney                                                  | pandas               |\n| parquet               | Apache Parquet                                 | 1\\.3            | yes                          | 3\\.0          | 2013    | Apache Software Foundation                                    | pyarrow or pandas    |\n| [pcap](#pcap)         | network packet capture                         | 1\\.3            |                              | 1\\.3          | 1988    | LBNL                                                          | dpkt dnslib          |\n| pyprof                | Python Profile data                            | 1\\.3            |                              | 1\\.3          |         |                                                               |                      |\n| [xml](#xml)           | eXtensible Markup Language \\(XML\\)             | 1\\.3            | from xml                     | 1\\.3          | 1998    | W3C                                                           | lxml                 |\n| yaml                  | YAML Ain't Markup Language \\(YAML\\)            | 1\\.3            |                              | 1\\.3          | 2001    | Clark Evans                                                   | PyYAML               |\n| frictionless          | Frictionless Data                              | 2\\.0            |                              | 2\\.0          |         | OpenKnowledge Institute                                       | datapackage          |\n| jira                  | JIRA/Confluence table markup                   |                 | displayed text               | 2\\.0          |         | Atlassian                                                     |                      |\n| npy                   | NumPy array format                             | 2\\.0            | typed                        | 2\\.0          |         |                                                               | numpy                |\n| tar                   | Unix Tape Archive                              | 2\\.0            |                              | 2\\.0          |         |                                                               |                      |\n| usv                   | Unicode\\-Separated Value                       | 2\\.0            | displayed text               | 2\\.0          | 1993    | Unicode                                                       |                      |\n| xlsb                  | Excel binary format                            | 2\\.0            |                              | 2\\.0          |         | Microsoft                                                     | xlrd                 |\n| [vdj](#vd)            | VisiData command log (JSON)                    | 2\\.0            | yes                          | 2\\.0          | 2020    | VisiData                                                      |                      |\n| [mysql](#mysql)       | MySQL                                          | 2\\.0            |                              |               | 1995    | MySQL AB                                                      | MySQLdb              |\n| pdf                   | Portable Document Format                       | 2\\.0            |                              |               | 1993    | Adobe                                                         | pdfminer\\.six        |\n| vcf                   | Virtual Contact File \\(vCard\\)                 | 2\\.0            |                              |               | 1995    | Versit Consortium                                             |                      |\n| rec                   | recutils database file                         | 2\\.0            | displayed text               |               | 2010    | Jose E\\. Marchesi                                             |                      |\n| eml                   | Multipurpose Internet Mail Extensions \\(MIME\\) | 2\\.0            |                              |               | 1996    | Nathaniel Borenstein and Ned Freed                            |                      |\n| [vds](#vd)            | VisiData Sheet                                 | 2\\.2            | yes                          | 2\\.2          | 2021    | VisiData                                                      |                      |\n| ods                   | OpenDocument Spreadsheet                       | 2\\.7            |                              |               | 2006    | [OASIS](<https://en.wikipedia.org/wiki/OASIS_(organization)>) | odfpy                |\n| lsv                   | awk-like key-value line-separated values       | 2\\.7            |                              | v2\\.7         |         |                                                               |                      |\n| arrow                 | Arrow IPC file format                          | 2\\.9            |                              |               | 2016    | Apache Software Foundation                                    | pyarrow              |\n| arrows                | Arrow IPC streaming format                     | 2\\.9            |                              |               | 2016    | Apache Software Foundation                                    | pyarrow              |\n| [vdx](#vd)            | VisiData command log (text)                    | 2\\.11           | yes                          | 2\\.11         | 2022    | VisiData                                                      |                      |\n| mailbox               | All formats supported by mailbox               | 3\\.0            |                              |               | 1974    |                                                               | mailbox              |\n| jrnl                  | CLI journal                                    | 3\\.0            | yes                          | 3\\.0          | 2012    | Micah Jerome Ellison                                          |                      |\n| [reddit](#api)        | Reddit API                                     | 3\\.0            |                              |               | 2005    |                                                               | praw                 |\n| [matrix](#api)        | Matrix API                                     | 3\\.0            |                              |               | 2014    | The Matrix.org Foundation                                     | matrix\\_client        |\n| [zulip](#api)         | Zulip API                                      | 3\\.0            |                              |               | 2012    | Kandra Labs, Inc                                              | zulip                |\n| [airtable](#api)      | Airtable API                                   | 3\\.0            |                              |               | 2012    |                                                               | pyairtable           |\n| orgmode               | Emacs Orgmode format                           | 3\\.0            | yes                          | 3\\.0          | 2003    | Carsten Dominik                                               |                      |\n| s3                    | Amazon S3 paths and objects                    | 3\\.0            |                              |               | 2006    | Amazon                                                        | s3fs                 |\n| fec                   | Federal Election Commission                    | 3\\.0            |                              |               |         | Federal Election Commission                                   | fecfile              |\n| f5log                 | Parser for f5 logs                             | 3\\.0            |                              |               |         | f5                                                            |                      |\n| toml                  | Tom's Obvious Minimal Language                 | 3\\.0            |                              |               |         | Tom Preston-Werner                                            | tomllib              |\n| conll                 | CoNLL annotation scheme                        | 3\\.0            |                              |               |         | Conference on Natural Language Learning                       | pyconll              |\n| [grep](#grep)         | grep command-line utility                      | 3\\.1            |                              |               | 1973    | AT&T Bell Laboratories                                        |                      |\n\n# Extra notes about formats\n\n## tsv (Tab Separated Values), as simple as it gets\n\n- delimiter: field delimiter to use for tsv/usv filetype (default: .)\n- row_delimiter: row delimiter to use for tsv/usv filetype (default: \\n)\n- tsv_safe_newline: replacement for newline character when saving to tsv (default: )\n- tsv_safe_tab: replacement for tab character when saving to tsv (default: .)\n\nUse `-f usv` for Unicode separators U+241F and U+241E.\nUse `-f tsv` for awk-like records.\nUse `--delimiter=` (an empty string) to make '\\0' the value separator.\nUse `--row-delimiter=` to make '\\0' the row separator.\n\n## csv (Comma Separated Values) for maximum compatibility {#csv}\n\n.csv files are a scourge upon the earth, and still regrettably common.\nAll `csv_*` options are passed unchanged into csv.reader() and csv.writer().\n\n- csv_dialect: dialect passed to csv.reader (default: excel)\n- Accepted dialects are `excel-tab`, `unix`, and `excel`.\n- csv_delimiter: delimiter passed to csv.reader (default: ,)\n- csv_quotechar: quotechar passed to csv.reader (default: \")\n- csv_skipinitialspace: skipinitialspace passed to csv.reader (default: True)\n- csv_escapechar: escapechar passed to csv.reader (default: None)\n- csv_lineterminator: lineterminator passed to csv.writer (default: \\n)\n\n## Saving TSV/CSV files\n\n- save_filetype: specify default file type to save as (default: tsv)\n- safety_first: sanitize input/output to handle edge cases, with a performance cost (default: False)\n\n## Useful options for text formats in general\n\n- regex_skip: regex of lines to skip in text sources (default: )\n- save_encoding: encoding passed to codecs.open when saving a file (default: utf8)\n\n## fixed {#fixed}\n- loader-specific options\n    - `fixed_rows` (default: 1000) number of rows to detect fixed width columns from\n    - `fixed_maxcols` (default: 0) max number of fixed-width columns to create (0 is no max)\n\n## json {#json}\n- loader-specific options\n    - `json_indent` (default: None) indent to use when saving json\n    - `json_sort_keys` (default: False) sort object keys when saving to json\n    - `default_colname` (default: '') column name to use for non-dict rows\n- Cells containing lists (e.g. `[3]`) or dicts (e.g. `{3}`) can be expanded into new columns with `(` and unexpanded with `)`.\n- All expanded subcolumns must be closed (with `)`) to retain the same structure.\n- Support for jsonla was added in 3.0.\n\n## xml {#xml}\n- `v` show only columns in current row attributes\n- `za` add column for xml attributes\n\n## pcap {#pcap}\n- loader-specific options\n    - `pcap_internet` (default: 'n') (y/s/n) if save_dot includes all internet hosts separately (y), combined (s), or does not include the internet (n)\n\n## postgres {#postgres}\n- loader-specific options\n    - `postgres_schema` (default: 'public') the desired schema for the Postgres database\n- `vd postgres://`*username*`:`*password*`@`*hostname*`:`*port*`/`*database* opens a connection to the given postgres database.\n\n## imap {#imap}\n- `vd \"imap://user@domain.com:passwordhere@imap-mailserver.com\"` opens a connection to the IMAP server\n    - e.g.  `vd \"imap://someone@hotmail.com:pass123@imap-mail.outlook.com:993\"`\n    - e.g.  `vd \"imap://someone@gmail.com@imap.gmail.com\"`\n        - note that you don't specify a password for gmail here -- instead, you will be prompted to follow some instructions\n\n### using VisiData as a pager within psql\n\nIn psql:\n\n~~~\n\\pset format csv\n\\pset pager always\n\\setenv PSQL_PAGER 'vd -f csv'\n\\pset pager_min_lines\n~~~\n\n## sqlite {#sqlite}\n- supports saving for CREATE/INSERT (not wholesale updates)\n- `z Ctrl+S` to commit any `add-row`/`edit-cell`/`delete-row`\n\n## mysql {#mysql}\n- loader-specific requirements\n    - working mysql / mariadb installation or at least the `libmysqlclient-dev` package (ubuntu; name might be different on other platforms)\n    - `mysqlclient` python module in path or virtual environment (`pip install mysqlclient`)\n- `vd mysql://`*username*`:`*password*`@`*hostname*`:`*port*`/`*database* opens a connection to the given mysql / mariadb database.\n\n## html {#html}\n- loader-specific options\n    - `html_title` (default: `'<h2>{sheet.name}</h2>'`) table header when saving to html\n- load all `<table>`s in a web page as VisiData sheets.\n\n\n## shp {#shp}\n- Can be edited in raw data form. Images can be plotted with `.` (dot).\n- **.shp** files can be saved as **geoJSON**.\n\n## mbtiles {#mbtiles}\n- Can be edited in raw data form. Images can be plotted with `.` (dot).\n\n## png {#png}\n- Can be edited in raw data form. Images can be plotted with `.` (dot).\n\n## ttf {#ttf}\n- Can be edited in raw data form. Images can be plotted with `.` (dot).\n\n## pandas {#pandas}\n\nVisiData has an adapter for **pandas**. To load a file format which is supported by **pandas**, pass `-f pandas data.foo`. This will call `pandas.read_foo()`.\n\nFor example:\n\n~~~\nvd -f pandas data.parquet\n~~~\n\nloads a parquet file. When using the **pandas** loader, the `.fileformat` file extension is mandatory.\n\nTo load a hierarchy of parquet files located in folder `data/`, run\n\n~~~\nvd -f parquet data/\n~~~\n\nor rename the directory to `data.parquet` and run\n\n~~~\nvd data.parquet -f pandas\n~~~\n\nThis should similarly work for any format that has a `pandas.read_format()` function.\n\n## [VisiData Internal Formats](../internal_formats) (.vd, .vdj, .vdx, .vds) {#vd}\n\n- .vd/vdj/.vdx are command log formats suitable for VisiData scripts and macros\n- .vds is a multisheet save format that includes some sheet and column metadata\n\n## API (reddit, matrix, zulip, airtable) {#api}\n- loader-specific requirements\n    - require setting authentication information in `~/.visidatarc` or on the CLI\n    - launch the loader with `-f loadername` for steps to obtain and configure authentication credentials\n\n## Grep {#grep}\nA .grep file is a JSON lines file. It can be in two formats:\n1) A simple container with three fields:\n    file - a string with the path to the file where the match was found (absolute or relative path)\n    line_no - an integer with the line number in the file where the match was found,\n    text - a string with the text of the line that matched.\n2) ripgrep `grep_printer` format, described here:\nhttps://docs.rs/grep-printer/latest/grep_printer/struct.JSON.html\n"
  },
  {
    "path": "docs/freq.md",
    "content": "---\neleventyNavigation:\n  key: Frequency Table Reference\n  order: 99\n---\n\n# Frequency Table Reference\n\nA frequency table groups source rows by one or more columns and counts the rows in each group.\nA pivot table extends this by breaking each group into sub-groups based on a pivot column.\nFor tutorials and step-by-step workflows, see [Grouping data and descriptive statistics](/docs/group).\n\nEverything below also applies to PivotSheet (`Shift+W`).\n\n## Binning\n\n### Discrete Binning\n\nBy default, each unique formatted value in the grouped column becomes its own bin.\nRows are sorted by count, descending.\n\n### Numeric Binning\n\nSet `options.numeric_binning` to True to bin numeric columns into ranges.\n\n- `options.histogram_bins` controls the number of bins. When set to 0 (default), the bin count is the square root of the row count.\n- Bin ranges display as \"min - max\".\n- If all values are identical, a single bin is created.\n- If there are more bins than distinct values, each value gets its own bin.\n\n### Errors and Nulls\n\nNull and error values get their own bins.\nError bins display as the stringified error value (e.g. `#ERR`).\n\n## Commands\n\n### On source sheet\n\n- `Shift+F` (`freq-col`): open Frequency Table grouped on current column\n- `g Shift+F` (`freq-keys`): open Frequency Table grouped by all key columns\n- `z Shift+F` (`freq-summary`): open one-line summary for all rows and selected rows\n- `Shift+W` (`pivot`): open Pivot Table: group rows by key columns and summarize current column\n\n### On Frequency Table\n\n- `Enter` (`open-row`): open copy of source sheet with rows in the current bin\n- `g Enter` (`dive-selected`): open copy of source sheet with rows from all selected bins\n- `z Enter` (`dive-except`): open copy of source sheet excluding rows in the current bin\n- `gz Enter` (`dive-except-selected`): open copy of source sheet excluding rows in selected bins\n\n## Selection Propagation\n\nSelecting rows on the frequency table also selects the corresponding source rows.\nUnselecting works the same way.\nUndoing selection changes on the frequency table will also undo them on the source sheet.\n\n## Columns\n\n- **Key columns** from the grouped-by columns. Numeric binned columns use RangeColumn.\n- **count**: number of source rows in the bin.\n- **percent**: percentage of total source rows in the bin.\n- **histogram**: visual bar chart (present when `disp_histogram` is set). Hidden automatically when aggregation columns are added.\n- **Aggregation columns**: one column per aggregator set on source columns (via `+`).\n\n## Options\n\n- `options.disp_histogram` (default: `■`): histogram element character\n- `options.histogram_bins` (default: `0`): number of bins for histogram of numeric columns (0 = auto)\n- `options.numeric_binning` (default: `False`): bin numeric columns into ranges\n\n## Tips\n\n- `g '` (`freeze-sheet`) to create a plain data sheet snapshot of the frequency table.\n- Add aggregators on source columns with `+` before opening the frequency table to see summary statistics per bin.\n\n---\n\n# Internals\n\n## Row Type\n\nEach row is a `PivotGroupRow` namedtuple with these components:\n\n0. `discrete_keys`: tuple of formatted values for discrete key columns\n1. `numeric_key`: range tuple `(min, max)` for numeric bins, or `(0, 0)` if not binned\n2. `sourcerows`: list of source rows in this group\n3. `pivotrows`: dict mapping pivot values to lists of source rows\n\n## Architecture\n\n- `FreqTableSheet` inherits from `PivotSheet`.\n- `groupRows()` iterates source rows, assigns each to a bin by its formatted key values, and populates `sourcerows` and `pivotrows`.\n- `addAggregateCols()` creates aggregation columns from any aggregators set on source columns.\n- `nonKeyVisibleCols` determines which columns receive aggregation caching after load.\n\n## Pivot-Specific\n\n- `pivotrows` dict maps pivot values to row lists for each group.\n- `Column.aggvalue` stores which pivot value a column represents.\n\n## Key Source Files\n\n- `visidata/freqtbl.py` — FreqTableSheet, HistogramColumn, commands\n- `visidata/pivot.py` — PivotSheet, PivotGroupRow, RangeColumn, groupRows, addAggregateCols\n- `visidata/aggregators.py` — aggregator definitions\n"
  },
  {
    "path": "docs/gmail.md",
    "content": "# Using Gmail with OAuth 2.0\n\n## Why\n\nAs of May 30 2022, Google [doesn't allow](https://support.google.com/accounts/answer/6010255?hl=en) you to log into your IMAP gmail account using only a username/password combination.\nSo to open your Gmail in Visidata you need to create a Google API App, attach some scopes to it, generate a client ID and secret, then let Visidata use that client ID and secret (in a json file).\n\n## How\n\nFirst, go to the [Google Console](https://console.cloud.google.com/apis/dashboard)\n\n<br/>\n\n![](assets/gmail_oauth/1.png)\n\n<br/>\n\nAnd click `CREATE PROJECT`\n\n---\n\n\n![](assets/gmail_oauth/2.png)\n\nGive the project a name then click `CREATE`\n\n\n---\n\nOpen a new tab and go to the [API Library](https://console.cloud.google.com/apis/library)\n\n<br/>\n\n![](assets/gmail_oauth/enable/1.png)\n\nSearch for `gmail`\n\n---\n\n![](assets/gmail_oauth/enable/2.png)\n\nClick the search result `Gmail API`\n\n---\n\n![](assets/gmail_oauth/enable/3.png)\n\nClick `ENABLE`\n\n---\n\nGo back to your first tab\n\nOn the left, select `OAuth consent screen` \n\n![](assets/gmail_oauth/3.png)\n\nThen select `External` and click `CREATE` to create an App \n\n---\n\n![](assets/gmail_oauth/4.png)\n\nGive the App a name and input your gmail address.\n\n---\n\n![](assets/gmail_oauth/5.png)\n\nClick `ADD OR REMOVE SCOPES`\n\n---\n\n![](assets/gmail_oauth/6.png)\n\nSearch for `gmail`\n\n---\n\n![](assets/gmail_oauth/7.png)\n\nClick the checkbox by the row with the scope value `https://mail.google.com/`\n\nThen scroll to the bottom\n\n---\n\n![](assets/gmail_oauth/8.png)\n\nAnd click `UPDATE`\n\n---\n\n![](assets/gmail_oauth/9.png)\n\nYou should see your selected scopes.\n\nClick `SAVE AND CONTINUE`\n\n---\n\n![](assets/gmail_oauth/10.png)\n\nClick `ADD USERS`\n\n---\n\n![](assets/gmail_oauth/11.png)\n\nType in your gmail email address then click `ADD`\n\n---\n\n![](assets/gmail_oauth/12.png)\n\nOn the left, click `Credentials`\n\n---\n\n![](assets/gmail_oauth/13.png)\n\nNear the top click `CREATE CREDENTIALS`\n\nThen click `OAuth client ID`\n\n---\n\n![](assets/gmail_oauth/14.png)\n\nSelect the application type `Desktop App` and give your OAuth 2.0 client a name then click `CREATE`\n\n---\n\n![](assets/gmail_oauth/15.png)\n\nClick `DOWNLOAD JSON` and move the downloaded file into the visidata project directory at the path `vdplus/api/google/` and call the file `google-creds.json`\n\n---\n\nNow, on the command line run the equivalent for you:\n\n`vd \"imap://me@gmail.com@imap.gmail.com\"`\n\nThen you should get a web browser popup:\n\n![](assets/gmail_oauth/16.png)\n\nSelect the account whose email address you have been using in these instructions.\n\n---\n\n![](assets/gmail_oauth/17.png)\n\nClick `Select all`\n\n---\n\n![](assets/gmail_oauth/18.png)\n\nSee your gmail in Visidata.\n\n<Chef's Kiss>\n\n---\n\n"
  },
  {
    "path": "docs/graph.md",
    "content": "---\neleventyNavigation:\n  key: Drawing graphs\n  order: 10\nUpdate: 2018-03-17\nVersion: VisiData 1.1\n---\n\n\n\nGraphs in VisiData can be used to visualise the relationship between numeric dependent variables vs a numeric independent variable. Optionally, a second independent variable, which is categorical,  adds an additional colored scatter plot for each category.\n\nThis example uses the file [StatusPR.csv](https://raw.githubusercontent.com/saulpw/visidata/stable/sample_data/StatusPR.csv).\n\n<section id=\"hero\">\n    <asciinema-player id=\"player\" poster=\"npt:0:30\" rows=27 src=\"../casts/pivot-graphs.cast\"></asciinema-player>\n    <script type=\"text/javascript\" src=\"/asciinema-player.js\"></script>\n</section>\n\n---\n\n## How to graph a single column\n\n1. Press `!` to set a column as the x-axis. This column must be numeric.\n2. Set that column to a numeric type by pressing `#` (int), `%` (float), `$` (currency), or `@` (date).\n3. Optional: Press `!` on a categorical key column to add it as an additional independent variable.\n4. Set the type of the column you wish to set as the dependent variable with a numeric type.\n5. Press `.` (dot=plot) on that column.\n\n---\n\n## How to graph multiple columns\n\n1. Press `!` to set a column as the x-axis. This column must be numeric.\n2. Set that column to a numeric type.\n3. Optional: Press `!` on a categorical key column to add it as an additional independent variable.\n4. Type all of the columns you wish to set as the dependent variables with a numeric type.\n5. Press `-` (dash) to hide any numeric columns you don't wish graphed.\n6. Press `g.`.\n\n---\n\n##How to interact with graphs\n\n###### With the keyboard\n\nCommand(s)          Operation\n----------          ----------\n`1`-`9`             toggles display of each scatterplot layer\n`h`  `j`  `k`  `l`  moves the cursor\n`H`  `J`  `K`  `L`  expands and shrinks the cursor\n`+`  `-`            increases/decreases the zoomlevel, centered on the cursor\n`zz`                zooms into the cursor\n`_` (underscore)    zooms to fit the full extent\n `s`   `t`   `u`    selects/toggles/unselects rows on the source sheet contained within the cursor\n`gs`  `gt`  `gu`    selects/toggles/unselects rows visible as points on the screen\n` d`                deletes rows on the source sheet contained within the cursor\n`gd`                deletes all rows visible as points on the screen\n `Enter`            opens sheet of source rows contained within the cursor\n`gEnter`            opens sheet of source rows which are visible on screen\n`v`                 toggles the visibility of graph labels\n\n###### With the mouse\n\nCommand                 Operation\n-------                 -----------\nLeft-click and drag     sets the cursor\nRight-click and drag    scrolls\nScroll-wheel            zooms in/out\n\n---\n"
  },
  {
    "path": "docs/graphics.md",
    "content": "---\neleventyNavigation:\n  key: Terminal Graphics in VisiData\n  order: 99\nUpdated: 2017-12-06\nVersion: VisiData 1.0\n---\n\n\n\nVisiData can display low-resolution terminal graphics with a reasonable amount of user interactivity.\n\nThe current implementation uses braille Unicode characters (inspired by [asciimoo/drawille](https://github.com/asciimoo/drawille)).  [Unicode blocks](https://en.wikipedia.org/wiki/Block_Elements) or the [sixel protocol](https://en.wikipedia.org/wiki/Sixel) may be supported in the future.\n\n## Class hierarchy\n\n- `Sheet`: the drawable context base class (part of core vdtui.py)\n- `Plotter`: pixel-addressable display of entire terminal with (x,y) integer pixel coordinates\n- `Canvas`: zoomable/scrollable virtual canvas with (x,y) coordinates in arbitrary units\n- `InvertedCanvas`: a Canvas with inverted y-axis\n- `Graph`: an InvertedCanvas with axis labels, a legend, and gridlines\n\n### Summary\n\n- The async `Graph.reload()` iterates over the given `sourceRows` (from its `source` Sheet) and calls `Canvas.polyline()` to indicate what to render.\n- `Canvas.refresh()` triggers an async `Canvas.render()`, which iterates over the polylines and labels and calls the `Plotter.plot*` methods. \n- The `VisiData.run()` loop calls `Plotter.draw()`, which determines the characters and colors to represent the pixels.\n\n### class `Plotter`\n\nA `Plotter` is a [`Sheet`](/design/sheet) with a pixel-addressable drawing surface that covers the entire terminal (minus the status line).  Pixels and labels are plotted at exact locations in the terminal window, and must be recalculated after any zoomlevel change or terminal resizing.\n\n`Plotter.draw(scr)` is called multiple times per second to update the screen, and chooses a curses attribute for each pixel.\nBy default, the most common attr is chosen for each pixel, but if `options.disp_graph_pixel_random` is set, an attr will be randomly chosen from the naturally weighted set of attrs (this may cause blocks of pixels to flicker between their possible attrs).\nIf an attr is in the `Canvas.hiddenAttrs` set, then it is not considered for display at all (and its rows will be ignored during selection).\n\nAll Plotter coordinates must be integer numbers of pixels.\n[For performance reasons, they are presumed to already be integers, to save unnecessary calls to `round()`.]\nMethods which plot multiple pixels on the canvas should be careful to gauge the display correctly; simply calling `round()` on each calculated float coordinate will work but can cause display artifacts.\n\n#### `Plotter` methods\n\nFor Plotter methods, `x` and `y` must be integers, where `0 <= x < plotwidth`, and `0 <= y < plotheight`.  `(0,0)` is in the upper-left corner of the terminal window.\n\nPixels can be plotted directly onto a Plotter with these methods:\n\n- `Plotter.plotpixel(x, y, attr, row=None)`\n- `Plotter.plotline(x1, y1, x2, y2, attr, row=None)`\n- `Plotter.plotlabel(x, y, text, attr)`\n\n`attr` is a [curses attribute](/design/color), and `row` is the object associated with the pixel.\n\nThe above `plot*` methods append the `row` to `Plotter.pixels[y][x][attr]`.\n\nThese properties and methods are also available:\n\n- `Plotter.plotwidth` is the width of the terminal, in pixels.\n- `Plotter.plotheight` is the height of the terminal, in pixels.\n- `Plotter.rowsWithin(bbox)` generates the rows plotted within the given region.\n- `Plotter.hideAttr(attr, hide=True)` adds attr to `hiddenAttrs` if `hide`, and removes it otherwise.\n- `Plotter.refresh()` is called whenever the screen size changes, and should also be invoked whenever new content is added.\n\n`rowsWithin` takes a `Box` object (described below).  The `Box` class is otherwise unused by the Plotter.\n\n### class `Canvas`\n\nA **`Canvas`** is a `Plotter` with a virtual surface on which lines and labels can be rendered in arbitrary units.\n\nThe onscreen portion (the area within the visible bounds) is scaled and rendered onto the `Plotter`, with the minimum coordinates in the upper-left [same orientation as `Plotter`].\n\nThe [`Canvas` user interface](/docs/graph#commands) supports zoom, scroll, cursor definition, and selection of the underlying rows.  The `source` attribute should be the Sheet which owns the plotted `row` objects.\n\nA call to `Canvas.refresh()` will trigger `Canvas.render()`, which is decorated with `@asyncthread` as it may take a perceptible amount of time for larger datasets.  Any active `render` threads are cancelled first.\n\n#### `Box` and `Point` helper classes\n\nWhile the Plotter API requires literal integer values for `x`/`y` and `width`/`height` parameters, `Canvas` methods generally take float values contained in either `Box` or `Point` classes.\n\n##### `Point`\n\n`Point` is simply a container for an `(x,y)` coordinate (passed to the constructor).  The individual components are stored as `.x` and `.y`, and the computed `.xy` property will return `(x,y)` as a simple tuple.  `Point` can also stringify itself reasonably.\n\n##### `Box`\n\n`Box` is effectively a rectangle stretching over some area of the canvas.  The constructor takes `(x,y,w,h)`, but a `Box` can also be constructed using the `BoundingBox(x1,y1,x2,y2)` helper.  [Note that in the BoundingBox case, the order of the individual points is not guaranteed; the individual coordinates may be swapped for convenience.]\n\n`Box` has these members and properties:\n\n- `xmin` and `ymin`: the minimum coordinates of the area.\n- `xmax` and `ymax`: the maximum coordinates of the area.\n- `xcenter` and `ycenter`: the central coordinates of the area.\n- `w` and `h`: the width and height of the area.\n- `xymin`: returns `Point(xmin,ymin)`.\n- `center`: returns `Point(xcenter,ycenter)`.\n- `contains(x, y)`: returns True if `(x,y)` is inside the bounding box.\n\n#### `Canvas` methods\n\n- `Canvas.polyline(vertices, attr, row=None)` adds a multi-segment line from the list of (x,y) `vertices`.  One vertex draws a point; two vertices draws a single line.  Note that the vertices are *not* Point objects (unlike parameters for other methods).\n- `Canvas.label(xy, text, attr, row=None)` adds `text` at `xy` (Point in canvas units).\n- `Canvas.fixPoint(xyplotter, xycanvas)` sets the position of the `visibleBox` so that `xycanvas` (Point in Canvas units) is plotted at `xyplotter` (Point in Plotter units).\n- `Canvas.zoomTo(bbox)` sets the visible bounds so the given canvas coordinates will fill the entire Plotter area.  `aspectRatio` will still be obeyed.\n- `Canvas.keyattr(key)` returns the `attr` for the given `key`, assigning a new color from `options.plot_colors` if `key` has not been seen before.  These keys are plotted as legends on the upper right corner of the canvas.  The last color is given out for all remaining keys and is labeled \"other\".\n- `Canvas.resetBounds()` needs to be called after some or all points have been rendered, but before anything can be plotted.  It initializes the width and height of the canvas, visible area, and/or cursor.\n- `Canvas.reset()` clears the canvas in preparation for `reload()`.\n\n#### `Canvas` properties\n\n- `Canvas.canvasBox` reflects the bounds of the entire canvas.\n- `Canvas.visibleBox` defines the onscreen canvas area.\n- `Canvas.cursorBox` defines the cursor region in canvas coordinates.\n- `Canvas.zoomlevel` is a settable property, which sets the `visibleBox` size accordingly.  `zoomlevel` of 1.0 makes the entire canvas visible.  Does not change the position of the `visibleBox` (see `Canvas.fixPoint`).\n- `Canvas.aspectRatio`, if set, maintains a proportional width and height of the `visibleBox` (considering also `plotwidth`/`plotheight`).  `aspectRatio` of 1.0 should be square.\n- `Canvas.canvasCharWidth` and `Canvas.canvasCharHeight` is the width and height of one terminal character, in canvas units.\n\nThese properties reserve an area of the Plotter that is outside the visibleBox:\n- `Canvas.leftMarginPixels`\n- `Canvas.rightMarginPixels`\n- `Canvas.topMarginPixels`\n- `Canvas.bottomMarginPixels`\n\nDuring a [mouse event](/design/commands#mouse), these properties indicate the mouse position for the current mouse event:\n\n- `Canvas.canvasMouse`: a Point in canvas coordinates\n- `Plotter.plotterMouse`: a Point in plotter (pixel) coordinates\n- `Sheet.mouseX` and `Sheet.mouseY`: individual values in curses (character) coordinates\n\n### class `InvertedCanvas`\n\nAn `InvertedCanvas` is a `Canvas` with a few internal methods overridden, such that the Y axis is inverted.  For an `InvertedCanvas`, the minimum coordinates are in the lower-left.\n\n`InvertedCanvas` has not much else of interest.  It should be completely interchangeable with `Canvas`.\n\n### class `Graph`\n\nA `Graph` is an `InvertedCanvas` with axis labels and/or gridlines.\n\n- `Graph.__init__(name, sheet, rows, xcols, ycols)` constructor\n    - `sheet` is the `source` Sheet.\n    - `rows` is a list of the rows to iterate over (from the given `source`).\n    - `xcols` is a list of key columns forming the x-axis and color keys.\n    - `ycols` is a list of numeric columns to be plotted on the y-axs.\n\n---\n"
  },
  {
    "path": "docs/group.md",
    "content": "---\neleventyNavigation:\n  key: Grouping data and descriptive statistics\n  order: 7\nUpdate: 2018-08-19\nVersion: VisiData 1.3.1\n---\n\n\n\n## How to set statistical aggregators for a single column\n\nAggregators provide summary statistics for grouped rows.\n\nCommand             Operation\n--------            ----------\n `+` *aggregator*   adds *aggregator* to current column\n`z+` *aggregator*   displays result of *aggregator* over values in selected rows for current column\n\nThe following statistical aggregators are available:\n\nAggregator      Description\n-----------     ------------\n`min`           smallest value in the group\n`max`           largest value in the group\n`avg`/`mean`    average value of the group\n`mode`          most frequently appearing value in group\n`median`        median value in the group\n`q3/q4/q5/q10`  add quantile aggregators to group (e.g. q4 adds p25, p50, p75)\n`sum`           total summation of all numbers in the group\n`distinct`      number of distinct values in the group\n`count`         number of values in the group\n`keymax`        key of the row with the largest value in the group\n`list`          gathers values in column into a list\n`stdev`         standard deviation of values\n\n### Aggregation bar\n\nWhen one or more columns have aggregators, the **aggregation bar** appears at the bottom of the sheet.\nEach aggregator has its own row, showing the aggregator name and the computed value for each column with that aggregator.\nValues are computed over all rows asynchronously.\n\n- {help.options.color_aggregator}\n\nThe follow howtos will have examples of workflows involving grouping of data and statistical aggregation.\n\n---\nThe following examples use the file [sample.tsv](https://raw.githubusercontent.com/saulpw/visidata/stable/sample_data/sample.tsv).\n\n## How to group data (frequency table, pivot table, describe table,)\n\n## How to make a pivot table frequency table, pivot table, describe table,)\n\n<div class=\"asciicast\">\n    <asciinema-player id=\"player\" poster=\"npt:0:10\" rows=27 src=\"../casts/pivot.cast\"></asciinema-player>\n    <script type=\"text/javascript\" src=\"/asciinema-player.js\"></script>\n</div>\n\n1. Move to the column A with the independent variable, and press `!` to mark it as a key column to group by.\n2. Move to a numeric column B, and press `+` to add an *aggregator* to that column, so that the aggregator will be applied to each group of values.\n3. Make sure column B has a numeric type: int (`#`),  float (`%`),  currency (`$`), or date (`@`).\n4. Move to the column C with the dependent categorical variable to be pivoted, and press `Shift+W` (`pivot`)  to pivot on that column.  The pivoted sheet then will have a column for each distinct value in the source column.\n\n---\n\n## [How to create a frequency chart](#frequency) {#frequency}\n\n\n### How to make a histogram\n\n**Question** How many of each **Item** were sold?\n\n1. Move the cursor to the **Item** column.\n2. Press `Shift+F` to open the **Frequency table**.\n\n### How to use the Frequency table to view the results of statistical aggregation\n\n**Question** What was the monthly revenue?\n\n1. On the **OrderDate** column, type `;` followed by `(\\d+-\\d+)` to create a column with only the year and the month using regex capture groups.\n2. Press `-` to hide the **OrderDate** column.\n3. On the **OrderDate_re0** column, type `^` followed by `OrderDate` to rename it.\n4. On the **Total** column, press `$` to set its type to currency.\n5. Type `+` followed by `sum` to add a statistical aggregator to **Total**.\n6. On the **OrderDate** column type `Shift+F` to open the **Frequency table**.\n7. On the **OrderDate** column, press `[` to sort the table in chrononological order.\n8. On the **sum_Total** column, type `^` followed by `Revenue` to rename the column.\n\n---\n\n### How to calculate some descriptive statistics\n\n1. Press `Shift+I` to open the **Describe sheet**.\n\n---\n\n### How to filter for grouped rows\n\n1. Press `Shift+F` to open the **Frequency table**.\n2. Press `s` or `t` on the groups you are interested in to select those entries in the source sheet.\n3. Press `q` or `Ctrl+^` to return to the source sheet.\n4. Press `\"` to open a duplicate sheet with selected rows.\n\n**or**\n\n1. Press `Shift+F` to open the **Frequency table**.\n2. Press `Enter` on the grouping you are interested in to open a sheet of the source rows that are part of that group.\n\n### How to filter for described rows\n\n1. Press `Shift+I` to open the **Describe sheet**.\n2. Use `zs` to select rows on source sheet which are being described in the cells of interest.\n3. Press `q` or `Ctrl+^` to return to the source sheet.\n4. Press `\"` to open a duplicate sheet with selected rows.\n\n**or**\n\n1. Press `Shift+I` to open the **Describe sheet**.\n2. Press `zEnter` open copy of source sheet with rows being described in the current cell of interest.\n\n### How to filter for the rows aggregated in a pivot table\n\n`Enter`/`zEnter` can both be used in the **Pivot table** to open a sheet of the source rows which are aggregated in the current pivot row/cell.\n\n---\n\n### How to combine cells in one for column for matching rows in another\n\nThis tutorial shows you how to go from this dataset:\n\nfield           value\n------          -----\nA               1\nA               2\nB               3\nC               4\nC               5\n\nto\n\nfield           value\n------          -----\nA               1;2\nB               3\nC               4;5\n\nin VisiData.\n\n1. On the **value** column, type `+` followed by `list` to add to it a list aggregator.\n2. Press `Shift+F` on the **field** column to open the **Frequency table**.\n3. Type `=` followed by `';'.join(value_list)` to add an expression column with the joined values.\n"
  },
  {
    "path": "docs/index.md",
    "content": "---\neleventyNavigation:\n    key: Getting Started\n    order: 1\n---\n\n## Getting started\n\n* [VisiData video demo](https://youtu.be/N1CBDTgGtOU)\n* [Installation](/install)\n\n## Tutorials\n\n* Beginner: [An Introduction to VisiData](https://jsvine.github.io/intro-to-visidata/) by [Jeremy Singer-Vine](https://www.jsvine.com/)\n* Beginner: [Guida VisiData](https://ondata.github.io/guidaVisiData/) by [Andrea Borruso](https://twitter.com/@aborruso) ([onData association](https://twitter.com/ondatait))\n* Intermediate/Advanced (English): [VisiData case study videos](https://www.youtube.com/watch?v=yhunJc8Nu4g&list=PLxu7QdBkC7drrAGfYzatPGVHIpv4Et46W&index=4) by creator [Saul Pwanson](http://saul.pw)\n\n## References\n\n* [quick reference guide](/man)\n    * all available commands and options\n    * also available as a manpage via `man vd` and from inside VisiData with `Ctrl+H`\n* [VisiData Cheat Sheet](https://jsvine.github.io/visidata-cheat-sheet/en/)\n\n## 'How to' recipes\n\n* [Loading Data](/docs/loading)\n    * [Specifying a source file](/docs/loading#specifying-a-source-file)\n    * [Loading sources supported by pandas](/docs/loading#loading-sources-supported-by-pandas)\n    * [Opening an R data frame with VisiData](/docs/loading#opening-an-r-data-frame-with-visidata)\n    * [Loading multiple datasets simultaneously](/docs/loading#loading-multiple-datasets-simultaneously)\n    * [Accessing other loaded or derived sheets](/docs/loading#accessing-other-loaded-or-derived-sheets)\n    * [Converting a dataset from one supported filetype into another](/docs/loading#convert)\n* [Navigation](/docs/navigate)\n    * rapidly scroll through a sheet\n    * search within a sheet\n    * move between sheets\n* [Rows](/docs/rows)\n    * perform operations on a subset of rows\n    * filter rows\n    * filter a random subset of rows\n    * select rows where the current column is not null\n    * select rows where the current column is null\n    * move, copy and remove rows\n    * sort rows\n* [Columns](/docs/columns)\n    * manipulate columns\n    * hide (remove) and unhide columns\n    * specify column types\n    * split a column\n    * expand columns that contain nested data\n    * create derivative columns\n    * configure multiple columns\n* [Editing contents](/docs/edit)\n    * edit cells\n    * rename columns\n* [Grouping data and descriptive statistics](/docs/group)\n    * set statistical aggregators\n    * create a pivot table\n    * create a frequency chart\n    * calculate descriptive statistics\n    * filter for grouped or described rows\n* [Creating sheets, rows and columns](/docs/crud)\n    * configure the cursor to move right after a successful edit\n    * set up a sheet for data collection\n    * add a new blank column\n    * fill a column with a range of numbers\n* [Combining datasets](/docs/join)\n    * perform a join\n    * append two datasets\n* [Drawing graphs](/docs/graph)\n    * graph a single column\n    * graph multiple columns\n    * interact with graphs\n* [How to save and replay a VisiData session](/docs/save-restore)\n* [Customizing VisiData](/docs/customize)\n    * configure VisiData (user)\n    * configure VisiData (dev)\n    * have configurations persist\n    * configure commands\n* [Plugins - extending VisiData functionality](/docs/api/plugins)\n* [STDOUT pipe/redirect](/docs/pipes)\n"
  },
  {
    "path": "docs/internal_formats.md",
    "content": "---\neleventyNavigation:\n    key: VisiData Internal Formats\n    order: 99\n---\n\nVisiData created these formats that it uses:\n\n- .vd, .vdj, and .vdx to save a Command Log (for macros and replays);\n- .vds to save/restore the current set of data sheets and columns.\n\nAll internal formats have comments being lines starting with `#`, so they can all be scripts on unix if they are executable and the first line starts with hash-bang (`#!`).\n\n## .vd\n\n.vd is the original replay format: a TSV save of the Command Log (`g Shift+D`).  Deprecated in favor of .vdj.\n\n## .vdj\n\n.vdj is the next generation format, a JSONL of the Command Log.\nThis enables support for multi-input commands (where input is a dictionary) among other things.\n\nMacros are stored in .vdj format (since 3.0).  Macros from previous versions in .vd format are still accepted.\n\n## .vdx\n\n.vdx is an experimental format for the Command Log which does not require a data editor to create.\nSince much of the time the sheet/col/row cursor position columns are blank, only the command longname and input are necessary to execute a command.\nSo the .vdx format is lines of commands with the command longnamefirst, and then a space and input (if used).  Comments start with `#`.\nThe cursor can be moved specifically with the `col` and `row` commands.\n\nThe .vdx loader also handles .vd and .vdj lines, so `--play -` (stdin) always uses the `vdx` filetype, which accepts any of the three command log formats.\n\nThis format is interesting for some use cases but not compelling enough to replace .vdj.\nThere is no current intent to replace the .vdj format with .vdx.\n\n## .vds\n\n.vds is a new, simple, multisheet format based on JSONL that includes some sheet metadata (mostly column definitions).\nIf you care only about the data and columns on the sheets, and not any provenance or exactitude or any of that stuff you get from going directly to the source, then you can save to .vds.\nIt should load generally to an index of the sheets, with each retaining the data and layout it was saved with, but without any history.\n"
  },
  {
    "path": "docs/join.md",
    "content": "---\neleventyNavigation:\n  key: Combining datasets\n  order: 9\nUpdate: 2020-10-27\nVersion: VisiData 2.0.1\n---\n\n\n\n## How to join two datasets\n\n1.  Open the datasets in VisiData.\n\n    a. `vd d1.tsv d2.tsv`\n\n    **or**\n\n    b. Press `o` and enter a filepath for each file.\n2. Press `S` to open up the **Sheets Sheet**. Through here, you can navigate to every sheet by pressing `Enter` on the row it is referenced in.\n3. Navigate to the sheets you want the join, and set their shared columns as key columns with `!`.\n4. Press `S` to return to the **Sheets sheet**. Select the sheets you want to merge with `s`.\n5. Optional: If performing a left outer join, use `Shift+J` or `Shift+K` to reorder the sheets. The first sheet will be the one for whom all rows will be retained.\n6. Type `&` to open the join-chooser, and select your desired jointype with `Enter`.\n\njointype            description\n---------           -------------\n`inner`             keeps only rows which match keys on all sheets\n`outer`             keeps all rows from first selected sheet\n`full`              keeps all rows from all sheets (union)\n`diff`              keeps only rows NOT in all sheets\n`extend`            keeps all rows and retain **SheetType** from first selected sheet\n`merge`             Merges differences from other sheets into first sheet\n`append`            keeps all rows from all sheets; columns from all sheets\n`concat`            keeps all rows from all sheets; columns and type from first sheet\n\n## How to append two datasets\n\n1. Open the datasets with VisiData.\n2. Press `Shift+S` to open the **Sheets sheet**.\n3. Use `s` or `t` to select the sheets to merge.\n4. Type `&` and press `Enter` on `append` to concatenate the selected datasets.\n\n## Identifying source rows\n\nThe `append` and `concat` join types add a hidden `origin_sheet` column that shows which source sheet each row came from. Unhide all hidden columns with `gv`.\n"
  },
  {
    "path": "docs/loading.md",
    "content": "---\neleventyNavigation:\n  key: Loading data\n  order: 2\n  parent: Getting Started\nupdate: 2018-12-18\nversion: VisiData 1.5.1\n---\n\n## Specifying a source file\n\nThe first way to open a dataset in VisiData, specify it directly after invoking `vd`.\n\n~~~\nvd filename.ext\n~~~\n\nAlternatively, you can pipe or redirect data in through stdin.\n\n~~~\nps aux | vd\nvd - < sample.tsv\n~~~\n\nFinally, you can launch the [DirSheet](), navigate to the file you wish to load, and press `Enter`.\n\n~~~\nvd .\n~~~\n\nIn VisiData, a [loader](/docs/api/loaders) is a module which directs how VisiData structures and engages with a particular data source. [These sources](/formats) are currently supported.\n\nOn default, the file extension determines which loader is used. Unknown filetypes are loaded as **Text sheets**. To force a particular loader, pass `-f` with the filetype or format name.\n\n~~~\nvd -f sqlite bar.db\nls -l | vd -f fixed\n~~~\n\n### How CLI options apply to files\n\nBecause `-f`/`--filetype` is a regular option, it applies to all subsequent files on the command line, not just the one immediately following.\n\nYou can reset back to extension-based detection for later files with `-f \"\"`:\n\nSee the [manpage](/man#commandline-options) for more details.\n\n~~~\nvd -f csv data.txt -f \"\" other.jsonl\n~~~\n\nThis loads `data.txt` as csv, and `other.jsonl` using its file extension as usual.\n\n---\n\n## Loading sources supported by pandas\n\nVisiData has an adapter for pandas. To load a file format which is supported by pandas, execute `vd -f pandas data.foo`. This will call `pandas.read_foo()`.\n\nFor example:\n\n~~~\nvd -f pandas data.parquet\n~~~\n\nloads a parquet file. When using the pandas loader, the `.fileformat` file extension is mandatory.\n\nNote that if you are using Python v3.7, then you will need to manually install pandas >=0.23.2 (our requirements.txt file installs v0.19.2 as the last version compatible with 3.4).\n\n---\n\n## Opening an R data frame with VisiData\n\n[@paulklemm](https://github.com/paulklemm) has wonderfully developed a small `R` package which bridges the gap between `R` and VisiData.\n\nTo install `rvisidata` using [devtools](https://cran.r-project.org/web/packages/devtools/index.html) run:\n\n~~~\ndevtools::install_github('paulklemm/rvisidata')\n~~~\n\nfrom within the `R` interpreter.\n\nAny data frame can then be opened by VisiData:\n\n~~~\nvd(iris)\n~~~\n\nPlease note, that this tool opens the data frame in readonly mode. Any changes made will be discarded.\n\nFor more more details, questions, and feedback, check out the [rvisidata repository](https://github.com/paulklemm/rvisidata).\n\n---\n\n## Loading multiple datasets simultaneously\n\nMultiple files can be passed as inputs through the commandline.\n\n~~~\nvd birdsdiet.tsv surveys.csv sunshinelist.html\n~~~\n\nUpon launching, the final dataset to load (in this case, sunshinelist.html) will be displayed on top.\n\nTo load files from within a VisiData session, press `o` and enter a filepath.\n\n---\n\n## Accessing other loaded or derived sheets\n\n1. Press `Shift+S` to open the **Sheets sheet**.\n2. Move the cursor to the row containing the desired sheet.\n3. Press `Enter` to jump to the sheet referenced in that current cursor row.\n\n---\n\n## [How to convert a dataset from one supported filetype into another](#convert) {#convert}\n\n~~~\nvd -b countries.fixed -o countries.tsv\n~~~\n\n**Note**: Not all filetypes which are supported as loaders are also supported as savers. See the [formats page](/formats#output) for the supported output formats.\n\n\n---\n"
  },
  {
    "path": "docs/macros.md",
    "content": "---\neleventyNavigation:\n    key: Macros\n    order: 5\nupdate: 2023-11-18\nversion: VisiData 3.0\n---\n\n# Macros\n\nMacros allow you to bind a series of commands to a key and then replay those commands within a session by using that keystroke.\n\nThe basic usage is:\n1. Press `m` (macro-record) to begin recording the macro.\n2. Go through the commands you wish to record.\n3. Then type `m` again to complete the recording, and prompt for the keystroke or longname to bind it to.\n\nThe macro will then be executed every time the provided keystroke is used. Note: the Alt+keys and the function keys are left unbound; overriding other keys may conflict with existing bindings, now or in the future.\n\nExecuting a macro will the series of commands starting on the current row and column on the current sheet.\n\n# The Macros Sheet\n\nUse `gm` (`open-macros-or-whatever`) to open an index existing macros.\n\nMacros can be marked for deletion (with `d`). Changes can then be committed with `z Ctrl+S`.\n\nThe `helpstr` column can be edited to add a description for each macro. This description will show up in the command palette and the Commands Sheet. Save changes with `z Ctrl+S`.\n\n`Enter` will open the macro in the current row, and you can view the series of commands composing it.\n\n"
  },
  {
    "path": "docs/menu.md",
    "content": "---\neleventyNavigation:\n    key: Command Menus\n    order: 12\nUpdated: 2021-09-02\nVersion: VisiData v2.6\n---\n\nAt the top of the screen, there's a typical application toplevel menubar:\n\n    Sheet  Edit  View  Column  ...\n\nYou can press `Ctrl+H` to activate the Help menu (shown in the upper right).\nThen you can use the arrow keys (or `hjkl` of course) to navigate the various commands and submenus.\n\n`Enter` or `Space` will execute the command or dive into the submenu.\n\n`q` or `Esc` or `Ctrl+Q` will leave the menu without taking an action.\n\n## Other ways of opening the menu\n\n`Alt+S` or `Alt+E` etc will open that specific submenu (see the underlined letter).\nOn Macos, `Option+S` etc should work the same (with the exception of `Option+E`, which needs to be `Option+E+Space`).\n\nYou can also click on the menu with the mouse to open it, as well as clicking on the various menu items to navigate to them.\nClick on the already active menu item will execute the command or navigate into the submenu.\n\nClick off the menu to deactivate it.\n\n## Menu annotations\n\nThe `…` annotation, like in traditional GUI menus, indicates that the command requires further input.\nThe `⎘` annotation on a command is specific to VisiData, and means that the command will push a sheet onto the sheet stack, so your data context will change.  You can always return to the previous sheet with `q` (or if you like taking the long way around, the \"Sheet»Quit»Top sheet\" command in the menu).\n\n## Configuration Options\n\nTo make the top menu line disappear (as it looked pre-2.6)\n\n    options.disp_menu = False\n\nThe menu can still be activated with `Ctrl+H` or the Alt+ keys as above.  The menu system cannot be entirely disabled.\n\n### Theme options\n\nAs with most VisiData display elements, the menu can be altered to taste.  These options are available to change the colors and displayed chars:\n\n- `color_menu`\n- `color_menu_active`\n- `color_menu_spec`\n- `color_menu_help`\n- `disp_menu_boxchars`\n- `disp_menu_more`\n- `disp_menu_input`\n- `disp_menu_push`\n\n## Plugin API for adding new menu items\n\nThe menu can be extended with additional commands.  See the [plugin API](/docs/api/interface).\n"
  },
  {
    "path": "docs/mouse.md",
    "content": "---\neleventyNavigation:\n    key: Mouse\n    order: 15\nUpdate: 2022-06-19\nVersion: VisiData v2.8\n---\n\n## How to disable the mouse in VisiData?\n\nTo disable for all sessions, add to your `~/.visidatarc`:\n\n    options.mouse_interval = 0 # disables the mouse-click\n    options.scroll_incr = 0    # disables the scroll wheel\n\nTo disable in the current session, press `SPACE`, and type the longname *mouse-disable*.\n\n"
  },
  {
    "path": "docs/move.md",
    "content": "---\neleventyNavigation:\n  key: How can I move around and search?\n  order: 99\n---\n\n- basic movement just like vim\n  - 'G' 'gg' '^G' work as in vim, as do some of the 'z' scroll commands\n- 'g' prefix goes all the way\n.  'gh' (or g Left) already goes to the first column, but maybe '0' should also.\n- (call out no number prefix?)\n- '/' and '?' search for regex, 'z/' and 'z?' search by Python expr. 'n' and 'N' continue the last search of either type.  These should work just like in vim but only within a single column.\n  - 'g' searches across all columns\n- 'zr'/'zc' go to a specific row or column by number\n- 'r' and 'c' go by row key or column name\n\ni\n  - 'g' and 'z' are also command prefixes in vd, but in vd they generally means something like 'g'lobal/embi'g'gen and 'z'croll/'z'mallify.  \n"
  },
  {
    "path": "docs/navigate.md",
    "content": "---\neleventyNavigation:\n  key: Navigation\n  order: 3\nupdated: 2020-07-18\nversion: VisiData 2.0\n---\n\n\n## How to rapidly scroll through a sheet\n\nCommand(s)                    Operation\n--------------                ---------------\n` ← ↑ → ↓ PgUp PgDn Home End` move as expected\n` h`  ` j`  ` k`  ` l`        move cursor **one cell** left/down/up/right (like in vim)\n`gh`  `gj`  `gk`  `gl`        move **all the way** to the left/bottom/top/right of sheet\n` <`  ` >`                    move up/down the current column to the next **value which differs from current cell**\n` {`  ` }`                    move up/down the current column to the next **[selected](/docs/rows#subset) row**\n\n---\n\n## How to search within a sheet\n\nCommand(s)              Operation\n--------------          ---------------\n` /`  ` ?` *regex*      search for *regex* matches up/down the **current** column\n`g/`  `g?` *regex*      search for *regex* matches up/down over **all visible** columns\n` n`  `Shift+N`              move to next/previous match from last search\n`z/`  `z?` *expr*       search by Python *expr* up/down (with column names as variables)\n\nBy default, search matches are highlighted in the sheet (like vim's `hlsearch`).\n\nCommand(s)              Operation\n--------------          ---------------\n`highlight-col`         highlight a regex in the current column (without moving)\n`highlight-sheet`       highlight a regex in all columns (without moving)\n`highlight-clear`       clear all highlight patterns\n\nUndo of a search command does not undo the highlighting; use `highlight-clear` to remove all highlights.\n\n**Options**\n\nOption                         Default                 Description\n-----                          -----                   -----\n`highlight_search`             `True`                  whether to highlight search matches\n`color_highlight_search`       `21 blue on 15 white`   color for highlighted search matches\n\nThe following example uses [sample.tsv](https://raw.githubusercontent.com/saulpw/visidata/stable/sample_data/sample.tsv).\n\n**Question** Has there been a day where we sold more than 95 **Item**s?\n\n1. Set the type of the **Units** column to integer by moving to the **Units** column and pressing `#`.\n2. Type `z/` followed by `Units > 95`.\n\n**Question** What is the **longname** for `gk`?\n\n1. Press `z Ctrl+H` to open the **Commands sheet**.\n2. Move to the `keystrokes` column and press `/`, followed by `gk`.\n3. Press `c` followed by `longname` to move the cursor to the **longname** column.\n\n---\n\n## How to move between sheets\n\nThe Sheets Sheet is a list of all sheets that have ever been opened (in order of opening).\n\nThe Sheets Stack (`z Shift+S`is the list of active sheets (most recently used at top).\n\n###### Jumping to sheets\n\n1. Press `Shift+S` to open the **Sheets sheet**.\n2. Move the cursor to the row containing the desired sheet.\n3. Press `Enter` to jump to the sheet referenced in that current cursor row.\n\n###### Jumping away from sheets\n\nCommand(s)              Operation\n--------------          ---------------\n`Ctrl+^`                jump to the previous sheet, without closing the current one\n`q`                     quit the current sheet (closes it)\n\n**Note**: A quit/closed sheet is grayed out on the Sheets Sheet.\nClosed sheets are removed from the active sheets stack, and the next sheet is then shown.  When the active sheets stack is empty, VisiData exits.\n\n---\n"
  },
  {
    "path": "docs/pipes.md",
    "content": "---\neleventyNavigation:\n   key: Pipes\n   order: 14\nUpdate: 2019-09-11\nVersion: VisiData 2.0\n---\n\n\n## stdin/stdout pipe/redirect\n\nVisiData works with other tools in a pipeline. VisiData will read any piped input from stdin as a sheet, and save the\nresults of any remaining sheets to stdout Visdata allows interactive edits in the middle of a pipeline.\n\n   - Use it to manually update (sort, filter, edit) tabular data in a pipeline  `mysql < query.sql | vd | awk 'awkity {awk}'\n   - Use it to interactively pick processes to kill `ps -ef | vd | tail -n +2 | xargs --no-run-if-empty kill`\n\nWhen redirecting VisiData output:\n\n   - `Ctrl+Q` will output current sheet (as it quits with the top sheet still on the stack)\n   - `q` (or `gq`) will output nothing (as it quits by dropping all sheets from the stack)\n\nUse `vd -o-` to send directly to the terminal when not redirecting stdout (it's not necessary if already redirected).\n\nTo output a single column without the column header, make sure only that column is visible and save as .txt.  For example, `vd . --save-filetype txt | lpr`.\n"
  },
  {
    "path": "docs/plugins.md",
    "content": "---\neleventyNavigation:\n  key: Plugins\n  order: 13\nUpdated: 2023-11-22\nVersion: VisiData 3.0\n---\n\nA *plugin* is an optional Python module to modify or extend VisiData functionality. Once installed, all plugins are automatically imported when `vd` is started.\n\n# How to install a plugin\n\nPlugins can be installed in 3 places:\n\n1. They can come packaged with the VisiData install.\n2. They can be installed via pip.\n3. They can be copied into the `.visidata/plugins/` directory.\n\n## builtin plugins\n\nThe VisiData release includes additional functionality that isn't enabled by default, but which can be made available by importing the module.\nFor example, there are some features available in `visidata.experimental`, like `digit_autoedit`, which starts editing the current cell when a numeric digit is pressed (like Excel).\nVisiData intentionally does not work this way, but people who prefer their terminal applications to act more like Excel can add this to their .visidatarc:\n\n    import visidata.experimental.digit_autoedit\n\n## via pip\n\nAny package with a `visidata.plugins` entry point will be loaded automatically by default.\nThese plugins must be managed via pip (to upgrade or remove).\nPlugins can be published to PyPI or downloaded as wheels or installed directly from source.\n\nFor example, `DarkDraw` is a VisiData plugin that allows drawing text-art.\nOnce the Python module is installed, you can use `vd` to open and save a `.ddw` file, which is a text image or animation specified in JSON format.\nIt also adds other commands and options.\n\n## copied manually into local plugins directory\n\nFinally, `.visidatarc` can import any Python code.\nSince any Python modules in the `options.visidata_dir` directory (default `~/.visidata/`) are available for import,\nyou can copy a plugin into a module in that directory and import it that way.\n\nTo install a plugin manually:\n\n1. Make a `plugins` directory: `mkdir -p ~/.visidata/plugins`\n2. Copy the plugin Python file there: `cp myplugin.py ~/.visidata/plugins`\n3. Add a line to your ~/.visidatarc to import the plugin: `import plugins.myplugin`\n4. Install the dependencies for the plugin (if any).\n\n# How to Disable Plugins\n\nThe nuclear option is `--nothing` or `-N` flag, which forces the base configuration, not loading any .visidatarc or plugins.\nThis is especially useful for debugging; when filing an issue, please make sure the bug reproduces with `-N` (if not, it is likely something in your .visidatarc)\n\nTo load `.visidatarc` but not autoload plugins installed with pip, set `options.plugins_autoload` on the command-line:\n\n    `vd --plugins-autoload=False`\n\nPlugins explicitly imported in .visidatarc will still be installed.\n\n# VisiData API reference\n\nFor help making plugins, see the [VisiData API reference](https://visidata.org/docs/api).\n"
  },
  {
    "path": "docs/rows.md",
    "content": "---\neleventyNavigation:\n  key: Rows\n  order: 4\nUpdate: 2023-10-12\nVersion: VisiData 3.0\n---\n\n\n## [How to perform operations on a subset of rows](#subset) {#subset}\n\nMany commands can be finetuned to operate on rows which are 'selected'.\n\n###### How to specify the subset of rows which are selected\n\nCommand(s)         Operation\n-----------------  -------------\n `s`  `t`  `u`     select/toggle/unselect **current** row\n`gs` `gt` `gu`     select/toggle/unselect **all** rows\n `|`  `\\` *regex*  select/unselect rows matching *regex* in **current** column\n`g|` `g\\` *regex*  select/unselect rows matching *regex* in **any visible** column\n`z|` `z\\` *expr*   select/unselect rows matching Python *expr* in **any visible** column\n `,`               select rows matching current cell in **current** column\n`g,`               select rows matching **entire current** row in **all visible** columns\n\nAn example usage follows.\n\n---\n\n## How to filter rows\n\n1. Press `s` or `t` on the rows to be filtered.\n\n2. Press\n\n    a. `gd` to delete the selected rows.\n\n    **or**\n\n    b. `\"` to open a duplicate sheet which has references to the selected rows.  Edits performed within the duplicate sheet will also propagate to the source sheet.\n\n    **or**\n\n    c. `g\"` to open a duplicate sheet which has references to all rows, and keeping the selected rows selected.  The selection can be modified on the parent sheet and the new sheet independently, but any changes will not be reflected on both sheets.\n\n    **or**\n\n    d. `z\"` to open a copy of the sheet which has copies of the selected rows.  Any changes will not affect the source sheet.\n\n    **or**\n\n    d. `gz\"` to open a copy of the sheet which has copies of all rows.  Any changes will be reflected on the source sheet\n\n\nThe following example uses the file [sample.tsv](https://raw.githubusercontent.com/saulpw/visidata/stable/sample_data/sample.tsv).\n\n\n**Question** On which days have we sold less than 10 Binders?\n\n1. Scroll to the `Units` column. Set the type of the `Units` column by pressing `#` (int).\n2. Type `z|` followed by `Item == 'Binder' and Units < 10` to select all of the rows where the `Item` is Binder and the number of `Units` is less than 10.\n3. Press `\"` to open a duplicate sheet with only those selected rows.\n\n---\n\n## How to filter a random subset of rows\n\n1. Type `Space` `random-rows` followed by the *number* of rows you wish included in your random population sample.\n\n---\n\n## How to select rows where the current column is not null or empty?\n\n'Null' cells, by default, are cells which contain `None`. This can be changed with `options.null_value`. Null cells can be set with `zd` (set current cell to `None`) or `gzd` (set selected rows in current column to `None`). Null cells are distinguished with a yellow ∅' symbol on the right hand corner. They are distinct from empty cells (which are `''` in columns of string type.)\n\n1. Type `|` followed by *.* to select all rows without empty or null cells in the current column.\n\n---\n\n## How to select rows where the current column is null?\n\nThere are several different options:\n\n- `z,` matches by **typed value** while `,` matches by **display value**. Move to an empty or `None` cell in the column of interest and press `,` to select all empty and `None` cells in that column. Type `z,` on a `None` cell to select all rows that contain `None` in that column. Type `z.` on an empty cell to select all rows that have an empty cell in that column.\n- Open a **DescribeSheet** for the current sheet with `Shift+I`. Move to the **nulls** column, and then move to the row which references the source column of interest. Type `zs` to select all null rows for that column.\n- `z|` is a command which allows selection by provided Python expression criteria (using column names as variables). For non-numerical columns `z|` followed by **not ColumnName**, will select all empty cells and `None` cells for that column. For numerical columns it will also select cells with `0`.\n- [A typed value of Python None is always a `TypedWrapper`](https://www.visidata.org/docs/api/columns.html#user-defined-types), which allows sorting, etc., on columns with None values. For this reason `z|` *ColumnName is None* will not work, thought `z|` *ColumnName.val is None* will work. This is not a recommended approach, though at the moment, it is available.\n\n---\n\n## How to move, copy and remove rows\n\nCommand(s)         Operation\n-----------------  -------------\n `J`  `K`          move cursor row down/up\n`gJ` `gK`          move cursor row all the way to the bottom/top of sheet\n\n\n###### How to copy and paste a single row\n\n1. Press `y` to copy the row to the clipboard.\n2. Move the cursor to the desired location.\n3. Press `p`/`Shift+P` to paste the row after/before current row.\n\n###### How to copy and paste multiple rows\n\n1. Press `s`/`t` on those rows to select them.\n2. Press `gy` to copy all selected rows to the clipboard.\n3. Move the cursor to the desired location.\n3. Press `p`/`Shift+P` to paste those rows after/before current row.\n\n###### Note\n\n VisiData has a universal paste mechanism: it creates new rows on the target sheet and then fills them with values from the copied rows from the previous sheet.\n\n This value-filling happens positionally, so if columns are missing or in a different order, the values will be in different columns,\n\n---\n\n## How to sort rows\n\nCommand(s)         Operation\n-----------------  -------------\n `[`  `]`          sorts ascending/descending by **current** column; replace any existing sort criteria\n`g[` `g]`          sorts ascending/descending by **all key** columns; replace any existing sort criteria\n`z[` `z]`          sorts ascending/descending by **current** column; add to existing sort criteria\n`gz[` `gz]`        sorts ascending/descending by **all key** column; add to existing sort criteria\n\n###### How to sort a numerical column from highest number to lowest:\n\n1. Set the type of the column being sorted by pressing `#` (int) or `%` (float).\n2. Press `[` to sort the column from highest to lowest.\n\n###### How to sort a date column in chronological order:\n\n1. Set the type of the column being sorted by pressing `@` (date).\n2. Press `]` to sort the column chronologically.\n\n###### How to sort based on multiple columns\n\n1. Press `!` on those columns to designate them as key columns.\n2. Press `g[` or `g]` to sort.\n\n**or**\n\n1. Sort the first column with `[` or `]`.\n2. Sort the next column with `z[` or `z]` to add sorting to the existing criteria.\n\n###### How to increase row height\n\nPress `v` on any **TableSheet** to toggle multi-line rows. This dynamically lengthens rows so that the full content of the column is visible.\n\nMulti-line rows have some limitations; they can't be paged, for instance.  The full contents of a cell can be viewed or edited in an external program like `emacs` or `less`:\n\n* Press `e` on a cell to enter Editing mode. Then scroll left and right to explore its contents.\n* Press `Ctrl+O` while in editing mode, to open the contents of the current cell in an external *$EDITOR*.\n\n**TextSheet-specific options**\n**TextSheet**s are used for loading `.txt` files in VisiData. They are also the default loaders used for un-identified sources. They are notable for having a single column which has the name \"text\".\n\n**TextSheet**s have a bonus option `wrap` which will wrap the text into multiple rows, so that it fits the window width.\n\n* On **TextSheet**, press `Shift+O` to open its **OptionsSheet**. Press `Enter` on the `wrap` option, to set it to *True*. Press `q` to return to your **TextSheet**. Reload it with `Ctrl+R`. Note that **reload** undoes an previous modifications you may have made to the **TextSheet**.\n* On the commandline, the option `--wrap` will set the `wrap` option to *True* for all **TextSheet**s in that session.\n* In your `~.visidatarc`, `options.wrap = True` will set the `wrap` option to *True* for all **TextSheet**s in every session.\n\n---\n"
  },
  {
    "path": "docs/save-restore.md",
    "content": "---\neleventyNavigation:\n    key: Save and Restore\n    order: 11\nUpdated: 2018-01-17\nVersion: VisiData 0.99\n---\n\n\n## How to save and replay a VisiData session\n\nThis example creates and then uses the file [pivot.vdj](https://raw.githubusercontent.com/saulpw/visidata/stable/tests/pivot.vdj).\n\n<section id=\"hero\">\n    <asciinema-player id=\"player\" poster=\"npt:0:41\" rows=27 src=\"../casts/save-restore.cast\"></asciinema-player>\n    <script type=\"text/javascript\" src=\"/asciinema-player.js\"></script>\n</section>\n\nTo save and restore a session in VisiData:\n\n1. Save the cmdlog using *one* of the following options:\n\n    a. Press `Ctrl+D` to save the cmdlog to a `fn.vdj` file.\n\n    *or*\n\n    b. Press `Shift+D` to view the `CommandLog Sheet`, then press `Ctrl+S` and save it with a `.vdj` suffix.\n\n2. Press `gq` to quit VisiData.\n3. Replay the cmdlog, on the commandline: `vd -p fn.vdj`.\n\n---\n\n## How to replay a cmdlog on a different file\n\nCmdlogs record the exact filename and sheet names from the original session.\nTo reuse a cmdlog with a different input file, you need to make the cmdlog filename-independent.\n\n### Method: Edit the `.vd`/`.vdj` to remove hardcoded references\n\n1. Save your cmdlog as usual (`Shift+D` to open the cmdlog, `Ctrl+S` to save).\n2. Edit the `.vdj` file:\n   - **Remove** the `open-file` line (the line with `\"longname\": \"open-file\"`).\n   - **Erase all `\"sheet\"` values** (for instance with `gs gzd`). A blank sheet name means \"use the current sheet\", so commands operate on whatever is on top of the stack.\n3. Replay on a new file:\n\n```\nvd -b -p cmdlog.vdj newfile.csv -o output.tsv\n```\n\nThe new file is passed as a positional argument, and `-p` replays the cmdlog against it. Use `-b` for batch (non-interactive) mode and `-o` to write the result.\n\n**Limitations:** Blank sheet names only work for linear workflows where you never switch between sheets. If your analysis involves joining sheets or switching back to a previous sheet, you'll need to either keep the sheet names, or use stack-relative commands like `jump-prev` (`Ctrl+^`, jump to previous sheet) or `jump-first` (`gCtrl+^`, jump to first sheet) to navigate between sheets without relying on their names.\n\n### Cmdlog formats\n\nVisiData supports several cmdlog formats:\n\n- **`.vd`** (TSV) — original format with tab-separated columns\n- **`.vdj`** (JSONL) — JSON objects, one per line; fields include `sheet`, `col`, `row`, `longname`, `input`, `keystrokes`, `comment`\n- **`.vdx`** (simplified) — human-readable, one command per line; only emits `sheet`/`col`/`row` lines when they change\n\nWhen replaying from stdin (`vd -p -`), VisiData uses the `.vdx` loader, which accepts all three formats.\n\n---\n"
  },
  {
    "path": "docs/shell.md",
    "content": "---\neleventyNavigation:\n    key: Shell\n    order: 10\nupdate: 2022-08-16\nversion: VisiData v2.9\n---\n\n## How to add ZSH Completion\n\n1. Clone the VisiData repo: `git clone https://github.com/saulpw/visidata`\n2. `cd visidata`\n3. Run the script that will create the list of autocompletes for visidata\n\n~~~\ndev/zsh_completion.py\n~~~\n4. `echo $fpath | grep site-functions` to learn where your zsh site-functions folder is located. (Possible locations `/usr/share/zsh/site-functions`, `/usr/local/share/zsh/site-functions`)\n5. Move the visidata compdefs to where zsh can find them: `sudo mv _visidata /path/to/site-functions`\n6. `compinit`\n7. Check that the autocompletes are configured with `grep -n visidata ~/.zcompdump`\n"
  },
  {
    "path": "docs/split.md",
    "content": "---\neleventyNavigation:\n  key: Split view\n  order: 99\n---\n\n# Viewing two sheets simultaneously\n\nVisiData supports the viewing of two sheets simultaneously with a feature called split screen.\n\n## Entering split screen mode\n\nKeystroke(s)        Action\n------------        ------\n`Shift+Z`           split screen in half, placing second sheet on stack visibly in the second pane\n`z Shift+Z` *n*     split screen, setting the height of the second screen to *n*\n\n\nWhen there is a single pane, all currently-open sheets are situated within the same sheets stack. The more recent that sheet was viewed, the higher it is in the [stack](https://jsvine.github.io/intro-to-visidata/basics/understanding-sheets/#how-to-use-the-sheets-sheet).\n\nSplit-pane opens a second window, and creates a second stack for it. This keeps the sheet stably within a specific window.\n\nFor instance, pressing `Shift+C` on the [sample.tsv]() will give us a stack with two columns, the sample **Sheet** and its **Columns Sheet**.\n\n![]\n\nPressing `Shift+Z` will now give us a view of them both, with the sample **Sheet** moved to the second window.\n\n![]\n\n## Split screen mode specific commands\n\nWhile in split screen mode, you can move between windows, adjust the sheets that appear in the current window, and full-screen the current pane.\n\nKeystroke(s)        Action\n------------        ------\n`z Shift+Z` *n*     adjust the height of the second window to *n*\n`g Shift+Z`         full screen the current window\n`Tab`               make the other window the active window\n`Ctrl+^`            swap top two sheets in stack in current window, second sheet in stack is now visible\n`g Ctrl+^`          cycle through sheets in stack in current window\n\nFor instance, we can use `Tab` to make the sample **Sheet** the active window.\n\n![]\n\nMoving around it, we can see the **Columns Sheet** in the top window continuing to be updated.\n\nWe can press `Shift+F` on the **Item** column to view its [Frequency Table]().\n\nNow, the visible sheet of the second window has changed, while the visible sheet on the top window has stayed the same.\n\n![]\n\nWe can use `^^`, so that sample **Sheet** is once again visible, and full-screen it with `g Shift+Z`, effectively leaving split screen mode.\n\n![]\n"
  },
  {
    "path": "docs/test.md",
    "content": "---\neleventyNavigation:\n    key: Contributing Tests\n    order: 99\nUpdate: 2024-01-10\nVersion: VisiData 3.0\n---\n\n\nThe `tests` folder contains functional tests in the form of `.vd` scripts, each of which records a session of VisiData commands.  These ensure that data processing works consistently and reliably.\n\n`dev/test.sh` (run from the git root) will execute all tests.  The final sheet of each test is saved as .tsv and compared to the respective expected output checked into the `tests/golden` directory.\n\nAs of January 2024, to pass all the tests, you will need to install the `test` extras:\n\n```\ngit clone https://github.com/saulpw/visidata.git\ncd visidata\npip3 install \".[test]\"\n```\n\nTo show each step of a test with a delay of 1 second between commands:\n\n    $ bin/vd -p tests/foo.vd -w 1\n\nTo build a `.vd` file:\n\n1. Go through all of the steps of the workflow, ending on the sheet with the final result.\n2. Press `Shift+D` to view the `CommandLog Sheet`.\n3. Edit the commandlog to minimize the number of commands.  Cells may be parameterized like `{foo}`, to be specified on the commandline:\n\n    $ vd cmdlog.vd --foo=value\n\n4. Save the cmdlog:\n\n    Press `Shift+D` to open the `commanDlog Sheet`, and press `Ctrl+S` to save it with a `.vd` suffix.\n\n\nThere are also unit tests in visidata/tests. To run the unit tests:\n\n```\npytest -sv visidata/tests\n```\n\n---\n"
  },
  {
    "path": "docs/usage.md",
    "content": "---\neleventyNavigation:\n        key: Usage\n        order: 99\n---\n\n# How can I load files and exit the program?\n\nIf you use the command line, 'vd' should pretty much work as you expect:\n\n        $ vd foo.csv\n\nYou can pipe in tabular data:\n\n        $ find | vd\n\nIf the file is not plain ASCII .txt or [tsv](/tsv), you will have to specify the filetype with -f and/or other options:\n\n        $ ls -al | vd -f fixed --skip 1 --headers 0\n\nMany [data formats](/formats) are supported, with more being added every day.\n\n# How do I quit?\n\nYou can just bang on 'q' until all the sheets are gone (there are usually only one or two anyway).\n\n   Note: If a prompt or editbox is waiting for input, you may have to press '^C' first.\n\nIt requires a bit more dexterity, but Control-Q (aka '^Q') will abort the program quite rudely.[1]\n\nIf you wish to be a bit gentler, 'gq' will quit all sheets ('global quit').\n\n\n[1] Control-Q is the only builtin command (necessary sometimes during development).  All other [commands can be overridden](/howto/commands).\n"
  },
  {
    "path": "docs/viewtsv.md",
    "content": "---\neleventyNavigation:\n    key: viewtsv Annotated\n    order: 99\nDate: 2017-12-27\nVersion: 1.0\n---\n\n\n# viewtsv\n\n[viewtsv.py](https://github.com/saulpw/visidata/blob/stable/bin/viewtsv.py)\nis a great example of a minimal VisiData application.  This is an extremely functional utility in 25 lines of code, leveraging the essence of the VisiData architecture.  Here it is in its entirety, with line by line annotations:\n\n    #!/usr/bin/env python3\n\nVisiData 2.x requires Python 3.6+.\n\n    import sys\n    from visidata import Sheet, ColumnItem, options, asyncthread, run\n\nImport the relevant components used below.\n\n    class TsvSheet(Sheet):\n        rowtype = 'rows'  # rowdef: tuple of values\n\nAll tabular data sheets inherit from `Sheet`.  The rowtype is displayed on the right status bar.  The `rowdef` comment declares the structure of every row object, and should be present for every Sheet.\n\n        columns = [ColumnItem('tsv', 0)]\n\nAn initial column.  Generally the class-level `columns` is set to the actual columns of the sheet, but in this case, the columns aren't known until the source is loaded.\n(See the `reload()` function below where they are set from the contents of the first row.)  This line is not strictly necessary but makes loading feel a bit more responsive.\n\n\n        @asyncthread\n\n@[asyncthread](/docs/async) marks the function to spawn a new thread whenever it is called.\n\n        def reload(self):\n\nThe [`reload()`](/docs/loaders) function collects data from the source and puts it into `rows`.  It's called once automatically when first pushed, and manually with `^R`.\n\n            self.rows = []\n\n`rows` is a list of Python objects.  The row definition ('rowdef') for the TsvSheet is a tuple of values, with each position corresponding to one column.\n\n            with open(self.source, encoding=options.encoding) as fp:\n\n`source` is the filename, which has been passed to the constructor (see the last line with `run()`).\n\n                for line in fp:\n                    line = line[:-1]\n                    if line:\n                        self.addRow(line.split('\\t'))\n\nFor each line, strip the included newline character, and filter out any blank lines.  Add each split tuple to `rows`.\n\n            for i, colname in enumerate(self.rows[0]):\n                self.addColumn(ColumnItem(colname, i))\n\nThe actual columns are set from the first (header) row.\n`ColumnItem` is a builtin, which creates a column to use getitem/setitem with the given key/index.\n\n            self.rows = self.rows[1:]\n\nThe header row is removed from the list of rows.  (Column names are displayed on the first row anyway).\n\n    run(*(TsvSheet(fn, source=fn) for fn in sys.argv[1:]))\n\n`run(*sheets)` is the toplevel entry point for a VisiData application.\n\n\n\n---\n\n"
  },
  {
    "path": "platform/windows/vdwin-installer.md",
    "content": "# VisiData for Windows installer\n\n- install WinPY: https://winpython.github.io/\n\n- cd WinPY\\python-3.9.4.amd64\n- ./Scripts/pip3.exe install visidata\n   - [dev] https://git-scm.com/download/win\n   - [dev] pip3 install git+https://github.com/saulpw/visidata.git@develop\n- ./Scripts/pip3.exe install windows-curses\n- ./Scripts/pip3.exe install pyinstaller\n\n- git clone https://github.com/saulpw/vdwin.git WinPy/vdwin\n\n- ./Scripts/pyinstaller.exe --onefile/-F --icon/-i ..\\vdwin\\vdicon.ico --name/-n VisiData ..\\vdwin\\visidata.py\n- dist/visidata/visidata.exe\n\n## Compile VisiData-setup.exe\n\n- Inno Setup Compiler (6.1.2)\n- vd.iss\n"
  },
  {
    "path": "platform/windows/vdwin.py",
    "content": "from visidata.main import vd_cli\nfrom visidata import vd\n\nvd_cli()\n"
  },
  {
    "path": "platform/windows/vdwin.spec",
    "content": "# -*- mode: python ; coding: utf-8 -*-\n\n\nblock_cipher = None\n\n\na = Analysis(['..\\\\vdwin\\\\vdwin.py'],\n             pathex=['C:\\\\Users\\\\Saul\\\\Desktop\\\\WPy64-3940\\\\python-3.9.4.amd64'],\n             binaries=[],\n             datas=[],\n             hiddenimports=[],\n             hookspath=[],\n             runtime_hooks=[],\n             excludes=[],\n             win_no_prefer_redirects=False,\n             win_private_assemblies=False,\n             cipher=block_cipher,\n             noarchive=False)\npyz = PYZ(a.pure, a.zipped_data,\n             cipher=block_cipher)\nexe = EXE(pyz,\n          a.scripts,\n          [],\n          exclude_binaries=True,\n          name='VisiData',\n          debug=False,\n          bootloader_ignore_signals=False,\n          strip=True,\n          upx=True,\n          console=True )\ncoll = COLLECT(exe,\n               a.binaries,\n               a.zipfiles,\n               a.datas,\n               strip=False,\n               upx=True,\n               upx_exclude=[],\n               name='VisiData')\n"
  },
  {
    "path": "platform/www/Dockerfile",
    "content": "FROM alpine:3.16\n\nRUN mkdir /app\nWORKDIR /app\n\nRUN mkdir -p /etc/vd \\\n    && apk update \\\n    && apk upgrade \\\n    && apk add --no-cache \\\n        mandoc \\\n        nano \\\n        neovim \\\n        procps \\\n        py3-apache-arrow \\\n        py3-cachetools \\\n        py3-greenlet \\\n        py3-lxml \\\n        py3-lz4 \\\n        py3-numpy \\\n        py3-pandas \\\n        py3-pip \\\n        py3-platformdirs \\\n        py3-protobuf \\\n        py3-psycopg2 \\\n        py3-pydantic \\\n        py3-pymysql \\\n        py3-regex \\\n        py3-requests \\\n        py3-toolz \\\n        py3-wheel \\\n        go \\\n        git \\\n    && git config --global advice.detachedHead false \\\n    && git clone --depth 1 --branch v2.0.0-alpha.3 https://github.com/yudai/gotty /tmp/gotty \\\n    && cd /tmp/gotty \\\n    && go mod init && go get && go mod vendor && go build \\\n    && cp ./gotty /app \\\n    && cd /app \\\n    && rm -r /tmp/gotty /root/go \\\n    && pip install --no-cache-dir -U \\\n    'git+https://github.com/ibis-project/ibis.git@adb620e559dc0892959f58c44923d19461ec2e5b#egg=ibis-framework[clickhouse,duckdb,postgres,mysql,sqlite]' \\\n    'git+https://github.com/cpcloud/ibis-bigquery.git@unconstrain-pyarrow' \\\n    'git+https://github.com/saulpw/visidata.git@3ffb5ea4c002bee1dc57f612209507f5d8a53a87' \\\n    'git+https://github.com/cpcloud/vdsql.git@ea3e789a9a21171decff6c7af9940297899445c1' \\\n    && apk del go git\n\nCOPY ./visidatarc /etc/vd/visidatarc\n\nENV PORT=9500\nENV TERM=xterm-256color\nENV EDITOR=nvim\n\nENTRYPOINT exec /app/gotty -w -p \"$PORT\" vd \"catalog://\" -c /etc/vd/visidatarc\n"
  },
  {
    "path": "platform/www/Makefile",
    "content": ".PHONY: run build push deploy\n\nrun: build\n\tdocker run -e PORT=9500 -p 9500:9500 --rm vdwww:latest\n\nbuild:\n\t# TODO(cpcloud): remove --no-cache if we ever get off of HEAD of the things\n\tdocker build --no-cache --rm . -t vdwww:latest -t gcr.io/psp-sandbox/vdwww\n\npush: build\n\tdocker push gcr.io/psp-sandbox/vdwww\n\ndeploy: push\n\tgcloud run deploy vdemo --image gcr.io/psp-sandbox/vdwww --region us-central1\n"
  },
  {
    "path": "platform/www/visidatarc",
    "content": "def renamerizer(new_name, sheet):\n    sheet.names = (new_name,)\n    return sheet\n\n\nclass DataCatalog(IndexSheet):\n    rowtype = \"data sources\"  # rowdef: IndexSheet\n\n    def iterload(self):\n        yield renamerizer(\n            \"ClickHouse playground\",\n            vd.open_vdsql(Path(\"clickhouse://play@play.clickhouse.com:9440/?secure=1\")),\n        )\n        yield renamerizer(\n            \"BigQuery sandbox\",\n            vd.openurl_bigquery(Path(\"bigquery://psp-sandbox\")),\n        )\n        yield vd.openurl_https(\n            Path(\n                \"https://jsvine.github.io/intro-to-visidata/_downloads/83e70cf67e909f3ac177575439e5f3c5/faa-wildlife-strikes.csv\"\n            )\n        )\n        yield renamerizer(\n            \"Wikipedia Infoboxen\",\n            vd.openurl_https(Path(\"https://data.saul.pw/wp.zip\")),\n        )\n        yield renamerizer(\n            \"Arrow PRs\",\n            vd.openurl_https(Path(\"https://api.github.com/repos/apache/arrow/pulls\"))\n        )\n\n\n@VisiData.api\ndef openurl_catalog(vd, p, filetype=None):\n    return DataCatalog(\"data_catalog\")\n\n\noptions.motd_url = \"https://visidata.org/motd-vdwww\"\noptions.cmdlog_histfile = \"/app/log/visidata_commands.log\"\noptions.http_max_next = 10\noptions.load_lazy = True\n\n# options.quitguard=True\noptions.min_memory_mb = 100\n\nCanvas.bindkey(\"2097152\", \"zoomin-mouse\")\nbindkey(\"2097152\", \"scroll-down\")\n"
  },
  {
    "path": "plugins/geocoding.py",
    "content": "# uses API from nettoolkit.com\n\n'''Set options.ntk_key='<api-key>', then use command \"addcol-geocode\" on a column\nwith placename, to add a \"geocodes\" column with a list of potential geocoded\nplaces, and lat/long columns with the actual coords of the first of those.'''\n\n__author__='Saul Pwanson <vd+geocode@saul.pw>'\n__version__='0.1'\n\nimport urllib.parse\nimport json\n\nfrom visidata import vd, AttrDict, Sheet, Column, ColumnExpr\n\nvd.option('ntk_key', '', 'API Key for nettoolkit.com')\n\n\ndef geocode(addr):\n    'Return list of dict of location information given an address query.'\n    url = 'https://api.nettoolkit.com/v1/geo/geocodes?address='+urllib.parse.quote(addr, safe='')\n    resp = vd.urlcache(url, headers={'X-NTK-KEY': vd.options.ntk_key})\n    return json.loads(resp.read_text())['results']\n\n\n@Sheet.api\ndef geocode_col(sheet, vcolidx):\n    col = sheet.visibleCols[vcolidx]\n\n    for c in [\n        Column('geocodes',\n            origCol=col, # contract-col will replace with origCol\n            cache='async',  # may take an indefinite time, so calc async and cache\n            getter=lambda c,r: geocode(c.origCol.getDisplayValue(r))),\n\n        # async caching above means dependent columns below should not cache (or they will cache in-progress errors)\n        ColumnExpr('lat', origCol=col, cache=False, expr='geocodes[0][\"latitude\"]'),\n        ColumnExpr('long', origCol=col, cache=False, expr='geocodes[0][\"longitude\"]'),\n            ]:\n        sheet.addColumn(c, index=vcolidx+1)\n\n\nSheet.addCommand('', 'addcol-geocode', 'sheet.geocode_col(cursorVisibleColIndex)')\n"
  },
  {
    "path": "plugins/pcap/iana-ports.tsv",
    "content": "transport\tport\tservice\ntcp\t1\ttcpmux\nudp\t1\ttcpmux\ntcp\t2\tcompressnet\nudp\t2\tcompressnet\ntcp\t3\tcompressnet\nudp\t3\tcompressnet\ntcp\t5\trje\nudp\t5\trje\ntcp\t7\techo\nudp\t7\techo\ntcp\t9\tdiscard\nudp\t9\tdiscard\ntcp\t11\tsystat\nudp\t11\tsystat\ntcp\t13\tdaytime\nudp\t13\tdaytime\ntcp\t17\tqotd\nudp\t17\tqotd\ntcp\t18\tmsp\nudp\t18\tmsp\ntcp\t19\tchargen\nudp\t19\tchargen\ntcp\t20\tftp-data\nudp\t20\tftp-data\ntcp\t21\tftp\nudp\t21\tftp\ntcp\t22\tssh\nudp\t22\tssh\ntcp\t23\ttelnet\nudp\t23\ttelnet\ntcp\t25\tsmtp\nudp\t25\tsmtp\ntcp\t27\tnsw-fe\nudp\t27\tnsw-fe\ntcp\t29\tmsg-icp\nudp\t29\tmsg-icp\ntcp\t31\tmsg-auth\nudp\t31\tmsg-auth\ntcp\t33\tdsp\nudp\t33\tdsp\ntcp\t37\ttime\nudp\t37\ttime\ntcp\t38\trap\nudp\t38\trap\ntcp\t39\trlp\nudp\t39\trlp\ntcp\t41\tgraphics\nudp\t41\tgraphics\ntcp\t42\tname\nudp\t42\tname\ntcp\t42\tnameserver\nudp\t42\tnameserver\ntcp\t43\tnicname\nudp\t43\tnicname\ntcp\t44\tmpm-flags\nudp\t44\tmpm-flags\ntcp\t45\tmpm\nudp\t45\tmpm\ntcp\t46\tmpm-snd\nudp\t46\tmpm-snd\ntcp\t48\tauditd\nudp\t48\tauditd\ntcp\t49\ttacacs\nudp\t49\ttacacs\ntcp\t50\tre-mail-ck\nudp\t50\tre-mail-ck\ntcp\t52\txns-time\nudp\t52\txns-time\ntcp\t53\tdomain\nudp\t53\tdomain\ntcp\t54\txns-ch\nudp\t54\txns-ch\ntcp\t55\tisi-gl\nudp\t55\tisi-gl\ntcp\t56\txns-auth\nudp\t56\txns-auth\ntcp\t58\txns-mail\nudp\t58\txns-mail\ntcp\t62\tacas\nudp\t62\tacas\ntcp\t63\twhoispp\ntcp\t63\twhois++\nudp\t63\twhoispp\nudp\t63\twhois++\ntcp\t64\tcovia\nudp\t64\tcovia\ntcp\t65\ttacacs-ds\nudp\t65\ttacacs-ds\ntcp\t66\tsql-net\ntcp\t66\tsql*net\nudp\t66\tsql-net\nudp\t66\tsql*net\ntcp\t67\tbootps\nudp\t67\tbootps\ntcp\t68\tbootpc\nudp\t68\tbootpc\ntcp\t69\ttftp\nudp\t69\ttftp\ntcp\t70\tgopher\nudp\t70\tgopher\ntcp\t71\tnetrjs-1\nudp\t71\tnetrjs-1\ntcp\t72\tnetrjs-2\nudp\t72\tnetrjs-2\ntcp\t73\tnetrjs-3\nudp\t73\tnetrjs-3\ntcp\t74\tnetrjs-4\nudp\t74\tnetrjs-4\ntcp\t76\tdeos\nudp\t76\tdeos\ntcp\t78\tvettcp\nudp\t78\tvettcp\ntcp\t79\tfinger\nudp\t79\tfinger\ntcp\t80\thttp\nudp\t80\thttp\ntcp\t80\twww\nudp\t80\twww\ntcp\t80\twww-http\nudp\t80\twww-http\ntcp\t82\txfer\nudp\t82\txfer\ntcp\t83\tmit-ml-dev\nudp\t83\tmit-ml-dev\ntcp\t84\tctf\nudp\t84\tctf\ntcp\t85\tmit-ml-dev\nudp\t85\tmit-ml-dev\ntcp\t86\tmfcobol\nudp\t86\tmfcobol\ntcp\t88\tkerberos\nudp\t88\tkerberos\ntcp\t89\tsu-mit-tg\nudp\t89\tsu-mit-tg\ntcp\t90\tdnsix\nudp\t90\tdnsix\ntcp\t91\tmit-dov\nudp\t91\tmit-dov\ntcp\t92\tnpp\nudp\t92\tnpp\ntcp\t93\tdcp\nudp\t93\tdcp\ntcp\t94\tobjcall\nudp\t94\tobjcall\ntcp\t95\tsupdup\nudp\t95\tsupdup\ntcp\t96\tdixie\nudp\t96\tdixie\ntcp\t97\tswift-rvf\nudp\t97\tswift-rvf\ntcp\t98\ttacnews\nudp\t98\ttacnews\ntcp\t99\tmetagram\nudp\t99\tmetagram\ntcp\t101\thostname\nudp\t101\thostname\ntcp\t102\tiso-tsap\nudp\t102\tiso-tsap\ntcp\t103\tgppitnp\nudp\t103\tgppitnp\ntcp\t104\tacr-nema\nudp\t104\tacr-nema\ntcp\t105\tcso\nudp\t105\tcso\ntcp\t105\tcsnet-ns\nudp\t105\tcsnet-ns\ntcp\t106\t3com-tsmux\nudp\t106\t3com-tsmux\ntcp\t107\trtelnet\nudp\t107\trtelnet\ntcp\t108\tsnagas\nudp\t108\tsnagas\ntcp\t109\tpop2\nudp\t109\tpop2\ntcp\t110\tpop3\nudp\t110\tpop3\ntcp\t111\tsunrpc\nudp\t111\tsunrpc\ntcp\t112\tmcidas\nudp\t112\tmcidas\ntcp\t113\tident\ntcp\t113\tauth\nudp\t113\tauth\ntcp\t115\tsftp\nudp\t115\tsftp\ntcp\t116\tansanotify\nudp\t116\tansanotify\ntcp\t117\tuucp-path\nudp\t117\tuucp-path\ntcp\t118\tsqlserv\nudp\t118\tsqlserv\ntcp\t119\tnntp\nudp\t119\tnntp\ntcp\t120\tcfdptkt\nudp\t120\tcfdptkt\ntcp\t121\terpc\nudp\t121\terpc\ntcp\t122\tsmakynet\nudp\t122\tsmakynet\ntcp\t123\tntp\nudp\t123\tntp\ntcp\t124\tansatrader\nudp\t124\tansatrader\ntcp\t125\tlocus-map\nudp\t125\tlocus-map\ntcp\t126\tnxedit\nudp\t126\tnxedit\ntcp\t127\tlocus-con\nudp\t127\tlocus-con\ntcp\t128\tgss-xlicen\nudp\t128\tgss-xlicen\ntcp\t129\tpwdgen\nudp\t129\tpwdgen\ntcp\t130\tcisco-fna\nudp\t130\tcisco-fna\ntcp\t131\tcisco-tna\nudp\t131\tcisco-tna\ntcp\t132\tcisco-sys\nudp\t132\tcisco-sys\ntcp\t133\tstatsrv\nudp\t133\tstatsrv\ntcp\t134\tingres-net\nudp\t134\tingres-net\ntcp\t135\tepmap\nudp\t135\tepmap\ntcp\t136\tprofile\nudp\t136\tprofile\ntcp\t137\tnetbios-ns\nudp\t137\tnetbios-ns\ntcp\t138\tnetbios-dgm\nudp\t138\tnetbios-dgm\ntcp\t139\tnetbios-ssn\nudp\t139\tnetbios-ssn\ntcp\t140\temfis-data\nudp\t140\temfis-data\ntcp\t141\temfis-cntl\nudp\t141\temfis-cntl\ntcp\t142\tbl-idm\nudp\t142\tbl-idm\ntcp\t143\timap\nudp\t143\timap\ntcp\t144\tuma\nudp\t144\tuma\ntcp\t145\tuaac\nudp\t145\tuaac\ntcp\t146\tiso-tp0\nudp\t146\tiso-tp0\ntcp\t147\tiso-ip\nudp\t147\tiso-ip\ntcp\t148\tjargon\nudp\t148\tjargon\ntcp\t149\taed-512\nudp\t149\taed-512\ntcp\t150\tsql-net\nudp\t150\tsql-net\ntcp\t151\thems\nudp\t151\thems\ntcp\t152\tbftp\nudp\t152\tbftp\ntcp\t153\tsgmp\nudp\t153\tsgmp\ntcp\t154\tnetsc-prod\nudp\t154\tnetsc-prod\ntcp\t155\tnetsc-dev\nudp\t155\tnetsc-dev\ntcp\t156\tsqlsrv\nudp\t156\tsqlsrv\ntcp\t157\tknet-cmp\nudp\t157\tknet-cmp\ntcp\t158\tpcmail-srv\nudp\t158\tpcmail-srv\ntcp\t159\tnss-routing\nudp\t159\tnss-routing\ntcp\t160\tsgmp-traps\nudp\t160\tsgmp-traps\ntcp\t161\tsnmp\nudp\t161\tsnmp\ntcp\t162\tsnmptrap\nudp\t162\tsnmptrap\ntcp\t163\tcmip-man\nudp\t163\tcmip-man\ntcp\t164\tcmip-agent\nudp\t164\tcmip-agent\ntcp\t165\txns-courier\nudp\t165\txns-courier\ntcp\t166\ts-net\nudp\t166\ts-net\ntcp\t167\tnamp\nudp\t167\tnamp\ntcp\t168\trsvd\nudp\t168\trsvd\ntcp\t169\tsend\nudp\t169\tsend\ntcp\t170\tprint-srv\nudp\t170\tprint-srv\ntcp\t171\tmultiplex\nudp\t171\tmultiplex\ntcp\t172\tcl-1\ntcp\t172\tcl/1\nudp\t172\tcl-1\nudp\t172\tcl/1\ntcp\t173\txyplex-mux\nudp\t173\txyplex-mux\ntcp\t174\tmailq\nudp\t174\tmailq\ntcp\t175\tvmnet\nudp\t175\tvmnet\ntcp\t176\tgenrad-mux\nudp\t176\tgenrad-mux\ntcp\t177\txdmcp\nudp\t177\txdmcp\ntcp\t178\tnextstep\nudp\t178\tnextstep\ntcp\t179\tbgp\nudp\t179\tbgp\ntcp\t180\tris\nudp\t180\tris\ntcp\t181\tunify\nudp\t181\tunify\ntcp\t182\taudit\nudp\t182\taudit\ntcp\t183\tocbinder\nudp\t183\tocbinder\ntcp\t184\tocserver\nudp\t184\tocserver\ntcp\t185\tremote-kis\nudp\t185\tremote-kis\ntcp\t186\tkis\nudp\t186\tkis\ntcp\t187\taci\nudp\t187\taci\ntcp\t188\tmumps\nudp\t188\tmumps\ntcp\t189\tqft\nudp\t189\tqft\ntcp\t190\tgacp\nudp\t190\tgacp\ntcp\t191\tprospero\nudp\t191\tprospero\ntcp\t192\tosu-nms\nudp\t192\tosu-nms\ntcp\t193\tsrmp\nudp\t193\tsrmp\ntcp\t194\tirc\nudp\t194\tirc\ntcp\t195\tdn6-nlm-aud\nudp\t195\tdn6-nlm-aud\ntcp\t196\tdn6-smm-red\nudp\t196\tdn6-smm-red\ntcp\t197\tdls\nudp\t197\tdls\ntcp\t198\tdls-mon\nudp\t198\tdls-mon\ntcp\t199\tsmux\nudp\t199\tsmux\ntcp\t200\tsrc\nudp\t200\tsrc\ntcp\t201\tat-rtmp\nudp\t201\tat-rtmp\ntcp\t202\tat-nbp\nudp\t202\tat-nbp\ntcp\t203\tat-3\nudp\t203\tat-3\ntcp\t204\tat-echo\nudp\t204\tat-echo\ntcp\t205\tat-5\nudp\t205\tat-5\ntcp\t206\tat-zis\nudp\t206\tat-zis\ntcp\t207\tat-7\nudp\t207\tat-7\ntcp\t208\tat-8\nudp\t208\tat-8\ntcp\t209\tqmtp\nudp\t209\tqmtp\ntcp\t210\tz39-50\ntcp\t210\tz39.50\nudp\t210\tz39-50\nudp\t210\tz39.50\ntcp\t211\t914c-g\ntcp\t211\t914c/g\nudp\t211\t914c-g\nudp\t211\t914c/g\ntcp\t212\tanet\nudp\t212\tanet\ntcp\t213\tipx\nudp\t213\tipx\ntcp\t214\tvmpwscs\nudp\t214\tvmpwscs\ntcp\t215\tsoftpc\nudp\t215\tsoftpc\ntcp\t216\tCAIlic\nudp\t216\tCAIlic\ntcp\t217\tdbase\nudp\t217\tdbase\ntcp\t218\tmpp\nudp\t218\tmpp\ntcp\t219\tuarps\nudp\t219\tuarps\ntcp\t220\timap3\nudp\t220\timap3\ntcp\t221\tfln-spx\nudp\t221\tfln-spx\ntcp\t222\trsh-spx\nudp\t222\trsh-spx\ntcp\t223\tcdc\nudp\t223\tcdc\ntcp\t224\tmasqdialer\nudp\t224\tmasqdialer\ntcp\t242\tdirect\nudp\t242\tdirect\ntcp\t243\tsur-meas\nudp\t243\tsur-meas\ntcp\t244\tinbusiness\nudp\t244\tinbusiness\ntcp\t245\tlink\nudp\t245\tlink\ntcp\t246\tdsp3270\nudp\t246\tdsp3270\ntcp\t247\tsubntbcst-tftp\ntcp\t247\tsubntbcst_tftp\nudp\t247\tsubntbcst-tftp\nudp\t247\tsubntbcst_tftp\ntcp\t248\tbhfhs\nudp\t248\tbhfhs\ntcp\t256\trap\nudp\t256\trap\ntcp\t257\tset\nudp\t257\tset\ntcp\t259\tesro-gen\nudp\t259\tesro-gen\ntcp\t260\topenport\nudp\t260\topenport\ntcp\t261\tnsiiops\nudp\t261\tnsiiops\ntcp\t262\tarcisdms\nudp\t262\tarcisdms\ntcp\t263\thdap\nudp\t263\thdap\ntcp\t264\tbgmp\nudp\t264\tbgmp\ntcp\t265\tx-bone-ctl\nudp\t265\tx-bone-ctl\ntcp\t266\tsst\nudp\t266\tsst\ntcp\t267\ttd-service\nudp\t267\ttd-service\ntcp\t268\ttd-replica\nudp\t268\ttd-replica\ntcp\t269\tmanet\nudp\t269\tmanet\nudp\t270\tgist\ntcp\t271\tpt-tls\ntcp\t280\thttp-mgmt\nudp\t280\thttp-mgmt\ntcp\t281\tpersonal-link\nudp\t281\tpersonal-link\ntcp\t282\tcableport-ax\nudp\t282\tcableport-ax\ntcp\t283\trescap\nudp\t283\trescap\ntcp\t284\tcorerjd\nudp\t284\tcorerjd\ntcp\t286\tfxp\nudp\t286\tfxp\ntcp\t287\tk-block\nudp\t287\tk-block\ntcp\t308\tnovastorbakcup\nudp\t308\tnovastorbakcup\ntcp\t309\tentrusttime\nudp\t309\tentrusttime\ntcp\t310\tbhmds\nudp\t310\tbhmds\ntcp\t311\tasip-webadmin\nudp\t311\tasip-webadmin\ntcp\t312\tvslmp\nudp\t312\tvslmp\ntcp\t313\tmagenta-logic\nudp\t313\tmagenta-logic\ntcp\t314\topalis-robot\nudp\t314\topalis-robot\ntcp\t315\tdpsi\nudp\t315\tdpsi\ntcp\t316\tdecauth\nudp\t316\tdecauth\ntcp\t317\tzannet\nudp\t317\tzannet\ntcp\t318\tpkix-timestamp\nudp\t318\tpkix-timestamp\ntcp\t319\tptp-event\nudp\t319\tptp-event\ntcp\t320\tptp-general\nudp\t320\tptp-general\ntcp\t321\tpip\nudp\t321\tpip\ntcp\t322\trtsps\nudp\t322\trtsps\ntcp\t323\trpki-rtr\ntcp\t324\trpki-rtr-tls\ntcp\t333\ttexar\nudp\t333\ttexar\ntcp\t344\tpdap\nudp\t344\tpdap\ntcp\t345\tpawserv\nudp\t345\tpawserv\ntcp\t346\tzserv\nudp\t346\tzserv\ntcp\t347\tfatserv\nudp\t347\tfatserv\ntcp\t348\tcsi-sgwp\nudp\t348\tcsi-sgwp\ntcp\t349\tmftp\nudp\t349\tmftp\ntcp\t350\tmatip-type-a\nudp\t350\tmatip-type-a\ntcp\t351\tmatip-type-b\nudp\t351\tmatip-type-b\ntcp\t351\tbhoetty\nudp\t351\tbhoetty\ntcp\t352\tdtag-ste-sb\nudp\t352\tdtag-ste-sb\ntcp\t352\tbhoedap4\nudp\t352\tbhoedap4\ntcp\t353\tndsauth\nudp\t353\tndsauth\ntcp\t354\tbh611\nudp\t354\tbh611\ntcp\t355\tdatex-asn\nudp\t355\tdatex-asn\ntcp\t356\tcloanto-net-1\nudp\t356\tcloanto-net-1\ntcp\t357\tbhevent\nudp\t357\tbhevent\ntcp\t358\tshrinkwrap\nudp\t358\tshrinkwrap\ntcp\t359\tnsrmp\nudp\t359\tnsrmp\ntcp\t360\tscoi2odialog\nudp\t360\tscoi2odialog\ntcp\t361\tsemantix\nudp\t361\tsemantix\ntcp\t362\tsrssend\nudp\t362\tsrssend\ntcp\t363\trsvp-tunnel\ntcp\t363\trsvp_tunnel\nudp\t363\trsvp-tunnel\nudp\t363\trsvp_tunnel\ntcp\t364\taurora-cmgr\nudp\t364\taurora-cmgr\ntcp\t365\tdtk\nudp\t365\tdtk\ntcp\t366\todmr\nudp\t366\todmr\ntcp\t367\tmortgageware\nudp\t367\tmortgageware\ntcp\t368\tqbikgdp\nudp\t368\tqbikgdp\ntcp\t369\trpc2portmap\nudp\t369\trpc2portmap\ntcp\t370\tcodaauth2\nudp\t370\tcodaauth2\ntcp\t371\tclearcase\nudp\t371\tclearcase\ntcp\t372\tulistproc\nudp\t372\tulistproc\ntcp\t373\tlegent-1\nudp\t373\tlegent-1\ntcp\t374\tlegent-2\nudp\t374\tlegent-2\ntcp\t375\thassle\nudp\t375\thassle\ntcp\t376\tnip\nudp\t376\tnip\ntcp\t377\ttnETOS\nudp\t377\ttnETOS\ntcp\t378\tdsETOS\nudp\t378\tdsETOS\ntcp\t379\tis99c\nudp\t379\tis99c\ntcp\t380\tis99s\nudp\t380\tis99s\ntcp\t381\thp-collector\nudp\t381\thp-collector\ntcp\t382\thp-managed-node\nudp\t382\thp-managed-node\ntcp\t383\thp-alarm-mgr\nudp\t383\thp-alarm-mgr\ntcp\t384\tarns\nudp\t384\tarns\ntcp\t385\tibm-app\nudp\t385\tibm-app\ntcp\t386\tasa\nudp\t386\tasa\ntcp\t387\taurp\nudp\t387\taurp\ntcp\t388\tunidata-ldm\nudp\t388\tunidata-ldm\ntcp\t389\tldap\nudp\t389\tldap\ntcp\t390\tuis\nudp\t390\tuis\ntcp\t391\tsynotics-relay\nudp\t391\tsynotics-relay\ntcp\t392\tsynotics-broker\nudp\t392\tsynotics-broker\ntcp\t393\tmeta5\nudp\t393\tmeta5\ntcp\t394\tembl-ndt\nudp\t394\tembl-ndt\ntcp\t395\tnetcp\nudp\t395\tnetcp\ntcp\t396\tnetware-ip\nudp\t396\tnetware-ip\ntcp\t397\tmptn\nudp\t397\tmptn\ntcp\t398\tkryptolan\nudp\t398\tkryptolan\ntcp\t399\tiso-tsap-c2\nudp\t399\tiso-tsap-c2\ntcp\t400\tosb-sd\nudp\t400\tosb-sd\ntcp\t401\tups\nudp\t401\tups\ntcp\t402\tgenie\nudp\t402\tgenie\ntcp\t403\tdecap\nudp\t403\tdecap\ntcp\t404\tnced\nudp\t404\tnced\ntcp\t405\tncld\nudp\t405\tncld\ntcp\t406\timsp\nudp\t406\timsp\ntcp\t407\ttimbuktu\nudp\t407\ttimbuktu\ntcp\t408\tprm-sm\nudp\t408\tprm-sm\ntcp\t409\tprm-nm\nudp\t409\tprm-nm\ntcp\t410\tdecladebug\nudp\t410\tdecladebug\ntcp\t411\trmt\nudp\t411\trmt\ntcp\t412\tsynoptics-trap\nudp\t412\tsynoptics-trap\ntcp\t413\tsmsp\nudp\t413\tsmsp\ntcp\t414\tinfoseek\nudp\t414\tinfoseek\ntcp\t415\tbnet\nudp\t415\tbnet\ntcp\t416\tsilverplatter\nudp\t416\tsilverplatter\ntcp\t417\tonmux\nudp\t417\tonmux\ntcp\t418\thyper-g\nudp\t418\thyper-g\ntcp\t419\tariel1\nudp\t419\tariel1\ntcp\t420\tsmpte\nudp\t420\tsmpte\ntcp\t421\tariel2\nudp\t421\tariel2\ntcp\t422\tariel3\nudp\t422\tariel3\ntcp\t423\topc-job-start\nudp\t423\topc-job-start\ntcp\t424\topc-job-track\nudp\t424\topc-job-track\ntcp\t425\ticad-el\nudp\t425\ticad-el\ntcp\t426\tsmartsdp\nudp\t426\tsmartsdp\ntcp\t427\tsvrloc\nudp\t427\tsvrloc\ntcp\t428\tocs-cmu\ntcp\t428\tocs_cmu\nudp\t428\tocs-cmu\nudp\t428\tocs_cmu\ntcp\t429\tocs-amu\ntcp\t429\tocs_amu\nudp\t429\tocs-amu\nudp\t429\tocs_amu\ntcp\t430\tutmpsd\nudp\t430\tutmpsd\ntcp\t431\tutmpcd\nudp\t431\tutmpcd\ntcp\t432\tiasd\nudp\t432\tiasd\ntcp\t433\tnnsp\nudp\t433\tnnsp\ntcp\t434\tmobileip-agent\nudp\t434\tmobileip-agent\ntcp\t435\tmobilip-mn\nudp\t435\tmobilip-mn\ntcp\t436\tdna-cml\nudp\t436\tdna-cml\ntcp\t437\tcomscm\nudp\t437\tcomscm\ntcp\t438\tdsfgw\nudp\t438\tdsfgw\ntcp\t439\tdasp\nudp\t439\tdasp\ntcp\t440\tsgcp\nudp\t440\tsgcp\ntcp\t441\tdecvms-sysmgt\nudp\t441\tdecvms-sysmgt\ntcp\t442\tcvc-hostd\ntcp\t442\tcvc_hostd\nudp\t442\tcvc-hostd\nudp\t442\tcvc_hostd\ntcp\t443\thttps\nudp\t443\thttps\ntcp\t444\tsnpp\nudp\t444\tsnpp\ntcp\t445\tmicrosoft-ds\nudp\t445\tmicrosoft-ds\ntcp\t446\tddm-rdb\nudp\t446\tddm-rdb\ntcp\t447\tddm-dfm\nudp\t447\tddm-dfm\ntcp\t448\tddm-ssl\nudp\t448\tddm-ssl\ntcp\t449\tas-servermap\nudp\t449\tas-servermap\ntcp\t450\ttserver\nudp\t450\ttserver\ntcp\t451\tsfs-smp-net\nudp\t451\tsfs-smp-net\ntcp\t452\tsfs-config\nudp\t452\tsfs-config\ntcp\t453\tcreativeserver\nudp\t453\tcreativeserver\ntcp\t454\tcontentserver\nudp\t454\tcontentserver\ntcp\t455\tcreativepartnr\nudp\t455\tcreativepartnr\ntcp\t456\tmacon-tcp\nudp\t456\tmacon-udp\ntcp\t457\tscohelp\nudp\t457\tscohelp\ntcp\t458\tappleqtc\nudp\t458\tappleqtc\ntcp\t459\tampr-rcmd\nudp\t459\tampr-rcmd\ntcp\t460\tskronk\nudp\t460\tskronk\ntcp\t461\tdatasurfsrv\nudp\t461\tdatasurfsrv\ntcp\t462\tdatasurfsrvsec\nudp\t462\tdatasurfsrvsec\ntcp\t463\talpes\nudp\t463\talpes\ntcp\t464\tkpasswd\nudp\t464\tkpasswd\ntcp\t465\turd\ntcp\t465\tsubmissions\nudp\t465\tigmpv3lite\ntcp\t466\tdigital-vrc\nudp\t466\tdigital-vrc\ntcp\t467\tmylex-mapd\nudp\t467\tmylex-mapd\ntcp\t468\tphoturis\nudp\t468\tphoturis\ntcp\t469\trcp\nudp\t469\trcp\ntcp\t470\tscx-proxy\nudp\t470\tscx-proxy\ntcp\t471\tmondex\nudp\t471\tmondex\ntcp\t472\tljk-login\nudp\t472\tljk-login\ntcp\t473\thybrid-pop\nudp\t473\thybrid-pop\ntcp\t474\ttn-tl-w1\nudp\t474\ttn-tl-w2\ntcp\t475\ttcpnethaspsrv\nudp\t475\ttcpnethaspsrv\ntcp\t476\ttn-tl-fd1\nudp\t476\ttn-tl-fd1\ntcp\t477\tss7ns\nudp\t477\tss7ns\ntcp\t478\tspsc\nudp\t478\tspsc\ntcp\t479\tiafserver\nudp\t479\tiafserver\ntcp\t480\tiafdbase\nudp\t480\tiafdbase\ntcp\t481\tph\nudp\t481\tph\ntcp\t482\tbgs-nsi\nudp\t482\tbgs-nsi\ntcp\t483\tulpnet\nudp\t483\tulpnet\ntcp\t484\tintegra-sme\nudp\t484\tintegra-sme\ntcp\t485\tpowerburst\nudp\t485\tpowerburst\ntcp\t486\tavian\nudp\t486\tavian\ntcp\t487\tsaft\nudp\t487\tsaft\ntcp\t488\tgss-http\nudp\t488\tgss-http\ntcp\t489\tnest-protocol\nudp\t489\tnest-protocol\ntcp\t490\tmicom-pfs\nudp\t490\tmicom-pfs\ntcp\t491\tgo-login\nudp\t491\tgo-login\ntcp\t492\tticf-1\nudp\t492\tticf-1\ntcp\t493\tticf-2\nudp\t493\tticf-2\ntcp\t494\tpov-ray\nudp\t494\tpov-ray\ntcp\t495\tintecourier\nudp\t495\tintecourier\ntcp\t496\tpim-rp-disc\nudp\t496\tpim-rp-disc\ntcp\t497\tretrospect\nudp\t497\tretrospect\ntcp\t498\tsiam\nudp\t498\tsiam\ntcp\t499\tiso-ill\nudp\t499\tiso-ill\ntcp\t500\tisakmp\nudp\t500\tisakmp\ntcp\t501\tstmf\nudp\t501\tstmf\ntcp\t502\tmbap\nudp\t502\tmbap\ntcp\t503\tintrinsa\nudp\t503\tintrinsa\ntcp\t504\tcitadel\nudp\t504\tcitadel\ntcp\t505\tmailbox-lm\nudp\t505\tmailbox-lm\ntcp\t506\tohimsrv\nudp\t506\tohimsrv\ntcp\t507\tcrs\nudp\t507\tcrs\ntcp\t508\txvttp\nudp\t508\txvttp\ntcp\t509\tsnare\nudp\t509\tsnare\ntcp\t510\tfcp\nudp\t510\tfcp\ntcp\t511\tpassgo\nudp\t511\tpassgo\ntcp\t512\texec\nudp\t512\tcomsat\nudp\t512\tbiff\ntcp\t513\tlogin\nudp\t513\twho\ntcp\t514\tshell\nudp\t514\tsyslog\ntcp\t515\tprinter\nudp\t515\tprinter\ntcp\t516\tvideotex\nudp\t516\tvideotex\ntcp\t517\ttalk\nudp\t517\ttalk\ntcp\t518\tntalk\nudp\t518\tntalk\ntcp\t519\tutime\nudp\t519\tutime\ntcp\t520\tefs\nudp\t520\trouter\ntcp\t521\tripng\nudp\t521\tripng\ntcp\t522\tulp\nudp\t522\tulp\ntcp\t523\tibm-db2\nudp\t523\tibm-db2\ntcp\t524\tncp\nudp\t524\tncp\ntcp\t525\ttimed\nudp\t525\ttimed\ntcp\t526\ttempo\nudp\t526\ttempo\ntcp\t527\tstx\nudp\t527\tstx\ntcp\t528\tcustix\nudp\t528\tcustix\ntcp\t529\tirc-serv\nudp\t529\tirc-serv\ntcp\t530\tcourier\nudp\t530\tcourier\ntcp\t531\tconference\nudp\t531\tconference\ntcp\t532\tnetnews\nudp\t532\tnetnews\ntcp\t533\tnetwall\nudp\t533\tnetwall\ntcp\t534\twindream\nudp\t534\twindream\ntcp\t535\tiiop\nudp\t535\tiiop\ntcp\t536\topalis-rdv\nudp\t536\topalis-rdv\ntcp\t537\tnmsp\nudp\t537\tnmsp\ntcp\t538\tgdomap\nudp\t538\tgdomap\ntcp\t539\tapertus-ldp\nudp\t539\tapertus-ldp\ntcp\t540\tuucp\nudp\t540\tuucp\ntcp\t541\tuucp-rlogin\nudp\t541\tuucp-rlogin\ntcp\t542\tcommerce\nudp\t542\tcommerce\ntcp\t543\tklogin\nudp\t543\tklogin\ntcp\t544\tkshell\nudp\t544\tkshell\ntcp\t545\tappleqtcsrvr\nudp\t545\tappleqtcsrvr\ntcp\t546\tdhcpv6-client\nudp\t546\tdhcpv6-client\ntcp\t547\tdhcpv6-server\nudp\t547\tdhcpv6-server\ntcp\t548\tafpovertcp\nudp\t548\tafpovertcp\ntcp\t549\tidfp\nudp\t549\tidfp\ntcp\t550\tnew-rwho\nudp\t550\tnew-rwho\ntcp\t551\tcybercash\nudp\t551\tcybercash\ntcp\t552\tdevshr-nts\nudp\t552\tdevshr-nts\ntcp\t553\tpirp\nudp\t553\tpirp\ntcp\t554\trtsp\nudp\t554\trtsp\ntcp\t555\tdsf\nudp\t555\tdsf\ntcp\t556\tremotefs\nudp\t556\tremotefs\ntcp\t557\topenvms-sysipc\nudp\t557\topenvms-sysipc\ntcp\t558\tsdnskmp\nudp\t558\tsdnskmp\ntcp\t559\tteedtap\nudp\t559\tteedtap\ntcp\t560\trmonitor\nudp\t560\trmonitor\ntcp\t561\tmonitor\nudp\t561\tmonitor\ntcp\t562\tchshell\nudp\t562\tchshell\ntcp\t563\tnntps\nudp\t563\tnntps\ntcp\t564\t9pfs\nudp\t564\t9pfs\ntcp\t565\twhoami\nudp\t565\twhoami\ntcp\t566\tstreettalk\nudp\t566\tstreettalk\ntcp\t567\tbanyan-rpc\nudp\t567\tbanyan-rpc\ntcp\t568\tms-shuttle\nudp\t568\tms-shuttle\ntcp\t569\tms-rome\nudp\t569\tms-rome\ntcp\t570\tmeter\nudp\t570\tmeter\ntcp\t571\tmeter\nudp\t571\tmeter\ntcp\t572\tsonar\nudp\t572\tsonar\ntcp\t573\tbanyan-vip\nudp\t573\tbanyan-vip\ntcp\t574\tftp-agent\nudp\t574\tftp-agent\ntcp\t575\tvemmi\nudp\t575\tvemmi\ntcp\t576\tipcd\nudp\t576\tipcd\ntcp\t577\tvnas\nudp\t577\tvnas\ntcp\t578\tipdd\nudp\t578\tipdd\ntcp\t579\tdecbsrv\nudp\t579\tdecbsrv\ntcp\t580\tsntp-heartbeat\nudp\t580\tsntp-heartbeat\ntcp\t581\tbdp\nudp\t581\tbdp\ntcp\t582\tscc-security\nudp\t582\tscc-security\ntcp\t583\tphilips-vc\nudp\t583\tphilips-vc\ntcp\t584\tkeyserver\nudp\t584\tkeyserver\ntcp\t586\tpassword-chg\nudp\t586\tpassword-chg\ntcp\t587\tsubmission\nudp\t587\tsubmission\ntcp\t588\tcal\nudp\t588\tcal\ntcp\t589\teyelink\nudp\t589\teyelink\ntcp\t590\ttns-cml\nudp\t590\ttns-cml\ntcp\t591\thttp-alt\nudp\t591\thttp-alt\ntcp\t592\teudora-set\nudp\t592\teudora-set\ntcp\t593\thttp-rpc-epmap\nudp\t593\thttp-rpc-epmap\ntcp\t594\ttpip\nudp\t594\ttpip\ntcp\t595\tcab-protocol\nudp\t595\tcab-protocol\ntcp\t596\tsmsd\nudp\t596\tsmsd\ntcp\t597\tptcnameservice\nudp\t597\tptcnameservice\ntcp\t598\tsco-websrvrmg3\nudp\t598\tsco-websrvrmg3\ntcp\t599\tacp\nudp\t599\tacp\ntcp\t600\tipcserver\nudp\t600\tipcserver\ntcp\t601\tsyslog-conn\nudp\t601\tsyslog-conn\ntcp\t602\txmlrpc-beep\nudp\t602\txmlrpc-beep\ntcp\t603\tidxp\nudp\t603\tidxp\ntcp\t604\ttunnel\nudp\t604\ttunnel\ntcp\t605\tsoap-beep\nudp\t605\tsoap-beep\ntcp\t606\turm\nudp\t606\turm\ntcp\t607\tnqs\nudp\t607\tnqs\ntcp\t608\tsift-uft\nudp\t608\tsift-uft\ntcp\t609\tnpmp-trap\nudp\t609\tnpmp-trap\ntcp\t610\tnpmp-local\nudp\t610\tnpmp-local\ntcp\t611\tnpmp-gui\nudp\t611\tnpmp-gui\ntcp\t612\thmmp-ind\nudp\t612\thmmp-ind\ntcp\t613\thmmp-op\nudp\t613\thmmp-op\ntcp\t614\tsshell\nudp\t614\tsshell\ntcp\t615\tsco-inetmgr\nudp\t615\tsco-inetmgr\ntcp\t616\tsco-sysmgr\nudp\t616\tsco-sysmgr\ntcp\t617\tsco-dtmgr\nudp\t617\tsco-dtmgr\ntcp\t618\tdei-icda\nudp\t618\tdei-icda\ntcp\t619\tcompaq-evm\nudp\t619\tcompaq-evm\ntcp\t620\tsco-websrvrmgr\nudp\t620\tsco-websrvrmgr\ntcp\t621\tescp-ip\nudp\t621\tescp-ip\ntcp\t622\tcollaborator\nudp\t622\tcollaborator\ntcp\t623\toob-ws-http\nudp\t623\tasf-rmcp\ntcp\t624\tcryptoadmin\nudp\t624\tcryptoadmin\ntcp\t625\tdec-dlm\ntcp\t625\tdec_dlm\nudp\t625\tdec-dlm\nudp\t625\tdec_dlm\ntcp\t626\tasia\nudp\t626\tasia\ntcp\t627\tpassgo-tivoli\nudp\t627\tpassgo-tivoli\ntcp\t628\tqmqp\nudp\t628\tqmqp\ntcp\t629\t3com-amp3\nudp\t629\t3com-amp3\ntcp\t630\trda\nudp\t630\trda\ntcp\t631\tipp\nudp\t631\tipp\ntcp\t631\tipps\ntcp\t632\tbmpp\nudp\t632\tbmpp\ntcp\t633\tservstat\nudp\t633\tservstat\ntcp\t634\tginad\nudp\t634\tginad\ntcp\t635\trlzdbase\nudp\t635\trlzdbase\ntcp\t636\tldaps\nudp\t636\tldaps\ntcp\t637\tlanserver\nudp\t637\tlanserver\ntcp\t638\tmcns-sec\nudp\t638\tmcns-sec\ntcp\t639\tmsdp\nudp\t639\tmsdp\ntcp\t640\tentrust-sps\nudp\t640\tentrust-sps\ntcp\t641\trepcmd\nudp\t641\trepcmd\ntcp\t642\tesro-emsdp\nudp\t642\tesro-emsdp\ntcp\t643\tsanity\nudp\t643\tsanity\ntcp\t644\tdwr\nudp\t644\tdwr\ntcp\t645\tpssc\nudp\t645\tpssc\ntcp\t646\tldp\nudp\t646\tldp\ntcp\t647\tdhcp-failover\nudp\t647\tdhcp-failover\ntcp\t648\trrp\nudp\t648\trrp\ntcp\t649\tcadview-3d\nudp\t649\tcadview-3d\ntcp\t650\tobex\nudp\t650\tobex\ntcp\t651\tieee-mms\nudp\t651\tieee-mms\ntcp\t652\thello-port\nudp\t652\thello-port\ntcp\t653\trepscmd\nudp\t653\trepscmd\ntcp\t654\taodv\nudp\t654\taodv\ntcp\t655\ttinc\nudp\t655\ttinc\ntcp\t656\tspmp\nudp\t656\tspmp\ntcp\t657\trmc\nudp\t657\trmc\ntcp\t658\ttenfold\nudp\t658\ttenfold\ntcp\t660\tmac-srvr-admin\nudp\t660\tmac-srvr-admin\ntcp\t661\thap\nudp\t661\thap\ntcp\t662\tpftp\nudp\t662\tpftp\ntcp\t663\tpurenoise\nudp\t663\tpurenoise\ntcp\t664\toob-ws-https\nudp\t664\tasf-secure-rmcp\ntcp\t665\tsun-dr\nudp\t665\tsun-dr\ntcp\t666\tmdqs\nudp\t666\tmdqs\ntcp\t666\tdoom\nudp\t666\tdoom\ntcp\t667\tdisclose\nudp\t667\tdisclose\ntcp\t668\tmecomm\nudp\t668\tmecomm\ntcp\t669\tmeregister\nudp\t669\tmeregister\ntcp\t670\tvacdsm-sws\nudp\t670\tvacdsm-sws\ntcp\t671\tvacdsm-app\nudp\t671\tvacdsm-app\ntcp\t672\tvpps-qua\nudp\t672\tvpps-qua\ntcp\t673\tcimplex\nudp\t673\tcimplex\ntcp\t674\tacap\nudp\t674\tacap\ntcp\t675\tdctp\nudp\t675\tdctp\ntcp\t676\tvpps-via\nudp\t676\tvpps-via\ntcp\t677\tvpp\nudp\t677\tvpp\ntcp\t678\tggf-ncp\nudp\t678\tggf-ncp\ntcp\t679\tmrm\nudp\t679\tmrm\ntcp\t680\tentrust-aaas\nudp\t680\tentrust-aaas\ntcp\t681\tentrust-aams\nudp\t681\tentrust-aams\ntcp\t682\txfr\nudp\t682\txfr\ntcp\t683\tcorba-iiop\nudp\t683\tcorba-iiop\ntcp\t684\tcorba-iiop-ssl\nudp\t684\tcorba-iiop-ssl\ntcp\t685\tmdc-portmapper\nudp\t685\tmdc-portmapper\ntcp\t686\thcp-wismar\nudp\t686\thcp-wismar\ntcp\t687\tasipregistry\nudp\t687\tasipregistry\ntcp\t688\trealm-rusd\nudp\t688\trealm-rusd\ntcp\t689\tnmap\nudp\t689\tnmap\ntcp\t690\tvatp\nudp\t690\tvatp\ntcp\t691\tmsexch-routing\nudp\t691\tmsexch-routing\ntcp\t692\thyperwave-isp\nudp\t692\thyperwave-isp\ntcp\t693\tconnendp\nudp\t693\tconnendp\ntcp\t694\tha-cluster\nudp\t694\tha-cluster\ntcp\t695\tieee-mms-ssl\nudp\t695\tieee-mms-ssl\ntcp\t696\trushd\nudp\t696\trushd\ntcp\t697\tuuidgen\nudp\t697\tuuidgen\ntcp\t698\tolsr\nudp\t698\tolsr\ntcp\t699\taccessnetwork\nudp\t699\taccessnetwork\ntcp\t700\tepp\nudp\t700\tepp\ntcp\t701\tlmp\nudp\t701\tlmp\ntcp\t702\tiris-beep\nudp\t702\tiris-beep\ntcp\t704\telcsd\nudp\t704\telcsd\ntcp\t705\tagentx\nudp\t705\tagentx\ntcp\t706\tsilc\nudp\t706\tsilc\ntcp\t707\tborland-dsj\nudp\t707\tborland-dsj\ntcp\t709\tentrust-kmsh\nudp\t709\tentrust-kmsh\ntcp\t710\tentrust-ash\nudp\t710\tentrust-ash\ntcp\t711\tcisco-tdp\nudp\t711\tcisco-tdp\ntcp\t712\ttbrpf\nudp\t712\ttbrpf\ntcp\t713\tiris-xpc\nudp\t713\tiris-xpc\ntcp\t714\tiris-xpcs\nudp\t714\tiris-xpcs\ntcp\t715\tiris-lwz\nudp\t715\tiris-lwz\nudp\t716\tpana\ntcp\t729\tnetviewdm1\nudp\t729\tnetviewdm1\ntcp\t730\tnetviewdm2\nudp\t730\tnetviewdm2\ntcp\t731\tnetviewdm3\nudp\t731\tnetviewdm3\ntcp\t741\tnetgw\nudp\t741\tnetgw\ntcp\t742\tnetrcs\nudp\t742\tnetrcs\ntcp\t744\tflexlm\nudp\t744\tflexlm\ntcp\t747\tfujitsu-dev\nudp\t747\tfujitsu-dev\ntcp\t748\tris-cm\nudp\t748\tris-cm\ntcp\t749\tkerberos-adm\nudp\t749\tkerberos-adm\ntcp\t750\trfile\nudp\t750\tloadav\nudp\t750\tkerberos-iv\ntcp\t751\tpump\nudp\t751\tpump\ntcp\t752\tqrh\nudp\t752\tqrh\ntcp\t753\trrh\nudp\t753\trrh\ntcp\t754\ttell\nudp\t754\ttell\ntcp\t758\tnlogin\nudp\t758\tnlogin\ntcp\t759\tcon\nudp\t759\tcon\ntcp\t760\tns\nudp\t760\tns\ntcp\t761\trxe\nudp\t761\trxe\ntcp\t762\tquotad\nudp\t762\tquotad\ntcp\t763\tcycleserv\nudp\t763\tcycleserv\ntcp\t764\tomserv\nudp\t764\tomserv\ntcp\t765\twebster\nudp\t765\twebster\ntcp\t767\tphonebook\nudp\t767\tphonebook\ntcp\t769\tvid\nudp\t769\tvid\ntcp\t770\tcadlock\nudp\t770\tcadlock\ntcp\t771\trtip\nudp\t771\trtip\ntcp\t772\tcycleserv2\nudp\t772\tcycleserv2\ntcp\t773\tsubmit\nudp\t773\tnotify\ntcp\t774\trpasswd\nudp\t774\tacmaint-dbd\nudp\t774\tacmaint_dbd\ntcp\t775\tentomb\nudp\t775\tacmaint-transd\nudp\t775\tacmaint_transd\ntcp\t776\twpages\nudp\t776\twpages\ntcp\t777\tmultiling-http\nudp\t777\tmultiling-http\ntcp\t780\twpgs\nudp\t780\twpgs\ntcp\t800\tmdbs-daemon\ntcp\t800\tmdbs_daemon\nudp\t800\tmdbs-daemon\nudp\t800\tmdbs_daemon\ntcp\t801\tdevice\nudp\t801\tdevice\ntcp\t802\tmbap-s\nudp\t802\tmbap-s\ntcp\t810\tfcp-udp\nudp\t810\tfcp-udp\ntcp\t828\titm-mcell-s\nudp\t828\titm-mcell-s\ntcp\t829\tpkix-3-ca-ra\nudp\t829\tpkix-3-ca-ra\ntcp\t830\tnetconf-ssh\nudp\t830\tnetconf-ssh\ntcp\t831\tnetconf-beep\nudp\t831\tnetconf-beep\ntcp\t832\tnetconfsoaphttp\nudp\t832\tnetconfsoaphttp\ntcp\t833\tnetconfsoapbeep\nudp\t833\tnetconfsoapbeep\ntcp\t847\tdhcp-failover2\nudp\t847\tdhcp-failover2\ntcp\t848\tgdoi\nudp\t848\tgdoi\ntcp\t853\tdomain-s\nudp\t853\tdomain-s\ntcp\t854\tdlep\nudp\t854\tdlep\ntcp\t860\tiscsi\nudp\t860\tiscsi\ntcp\t861\towamp-control\nudp\t861\towamp-control\ntcp\t862\ttwamp-control\nudp\t862\ttwamp-control\ntcp\t873\trsync\nudp\t873\trsync\ntcp\t886\ticlcnet-locate\nudp\t886\ticlcnet-locate\ntcp\t887\ticlcnet-svinfo\ntcp\t887\ticlcnet_svinfo\nudp\t887\ticlcnet-svinfo\nudp\t887\ticlcnet_svinfo\ntcp\t888\taccessbuilder\nudp\t888\taccessbuilder\ntcp\t888\tcddbp\ntcp\t900\tomginitialrefs\nudp\t900\tomginitialrefs\ntcp\t901\tsmpnameres\nudp\t901\tsmpnameres\ntcp\t902\tideafarm-door\nudp\t902\tideafarm-door\ntcp\t903\tideafarm-panic\nudp\t903\tideafarm-panic\ntcp\t910\tkink\nudp\t910\tkink\ntcp\t911\txact-backup\nudp\t911\txact-backup\ntcp\t912\tapex-mesh\nudp\t912\tapex-mesh\ntcp\t913\tapex-edge\nudp\t913\tapex-edge\ntcp\t953\trndc\ntcp\t989\tftps-data\nudp\t989\tftps-data\ntcp\t990\tftps\nudp\t990\tftps\ntcp\t991\tnas\nudp\t991\tnas\ntcp\t992\ttelnets\nudp\t992\ttelnets\ntcp\t993\timaps\nudp\t993\timaps\ntcp\t995\tpop3s\nudp\t995\tpop3s\ntcp\t996\tvsinet\nudp\t996\tvsinet\ntcp\t997\tmaitrd\nudp\t997\tmaitrd\ntcp\t998\tbusboy\nudp\t998\tpuparp\ntcp\t999\tgarcon\nudp\t999\tapplix\ntcp\t999\tpuprouter\nudp\t999\tpuprouter\ntcp\t1000\tcadlock2\nudp\t1000\tcadlock2\ntcp\t1001\twebpush\ntcp\t1010\tsurf\nudp\t1010\tsurf\ntcp\t1021\texp1\nudp\t1021\texp1\ntcp\t1022\texp2\nudp\t1022\texp2\ntcp\t1025\tblackjack\nudp\t1025\tblackjack\ntcp\t1026\tcap\nudp\t1026\tcap\nudp\t1027\t6a44\ntcp\t1029\tsolid-mux\nudp\t1029\tsolid-mux\ntcp\t1033\tnetinfo-local\nudp\t1033\tnetinfo-local\ntcp\t1034\tactivesync\nudp\t1034\tactivesync\ntcp\t1035\tmxxrlogin\nudp\t1035\tmxxrlogin\ntcp\t1036\tnsstp\nudp\t1036\tnsstp\ntcp\t1037\tams\nudp\t1037\tams\ntcp\t1038\tmtqp\nudp\t1038\tmtqp\ntcp\t1039\tsbl\nudp\t1039\tsbl\ntcp\t1040\tnetarx\nudp\t1040\tnetarx\ntcp\t1041\tdanf-ak2\nudp\t1041\tdanf-ak2\ntcp\t1042\tafrog\nudp\t1042\tafrog\ntcp\t1043\tboinc-client\nudp\t1043\tboinc-client\ntcp\t1044\tdcutility\nudp\t1044\tdcutility\ntcp\t1045\tfpitp\nudp\t1045\tfpitp\ntcp\t1046\twfremotertm\nudp\t1046\twfremotertm\ntcp\t1047\tneod1\nudp\t1047\tneod1\ntcp\t1048\tneod2\nudp\t1048\tneod2\ntcp\t1049\ttd-postman\nudp\t1049\ttd-postman\ntcp\t1050\tcma\nudp\t1050\tcma\ntcp\t1051\toptima-vnet\nudp\t1051\toptima-vnet\ntcp\t1052\tddt\nudp\t1052\tddt\ntcp\t1053\tremote-as\nudp\t1053\tremote-as\ntcp\t1054\tbrvread\nudp\t1054\tbrvread\ntcp\t1055\tansyslmd\nudp\t1055\tansyslmd\ntcp\t1056\tvfo\nudp\t1056\tvfo\ntcp\t1057\tstartron\nudp\t1057\tstartron\ntcp\t1058\tnim\nudp\t1058\tnim\ntcp\t1059\tnimreg\nudp\t1059\tnimreg\ntcp\t1060\tpolestar\nudp\t1060\tpolestar\ntcp\t1061\tkiosk\nudp\t1061\tkiosk\ntcp\t1062\tveracity\nudp\t1062\tveracity\ntcp\t1063\tkyoceranetdev\nudp\t1063\tkyoceranetdev\ntcp\t1064\tjstel\nudp\t1064\tjstel\ntcp\t1065\tsyscomlan\nudp\t1065\tsyscomlan\ntcp\t1066\tfpo-fns\nudp\t1066\tfpo-fns\ntcp\t1067\tinstl-boots\ntcp\t1067\tinstl_boots\nudp\t1067\tinstl-boots\nudp\t1067\tinstl_boots\ntcp\t1068\tinstl-bootc\ntcp\t1068\tinstl_bootc\nudp\t1068\tinstl-bootc\nudp\t1068\tinstl_bootc\ntcp\t1069\tcognex-insight\nudp\t1069\tcognex-insight\ntcp\t1070\tgmrupdateserv\nudp\t1070\tgmrupdateserv\ntcp\t1071\tbsquare-voip\nudp\t1071\tbsquare-voip\ntcp\t1072\tcardax\nudp\t1072\tcardax\ntcp\t1073\tbridgecontrol\nudp\t1073\tbridgecontrol\ntcp\t1074\twarmspotMgmt\nudp\t1074\twarmspotMgmt\ntcp\t1075\trdrmshc\nudp\t1075\trdrmshc\ntcp\t1076\tdab-sti-c\nudp\t1076\tdab-sti-c\ntcp\t1077\timgames\nudp\t1077\timgames\ntcp\t1078\tavocent-proxy\nudp\t1078\tavocent-proxy\ntcp\t1079\tasprovatalk\nudp\t1079\tasprovatalk\ntcp\t1080\tsocks\nudp\t1080\tsocks\ntcp\t1081\tpvuniwien\nudp\t1081\tpvuniwien\ntcp\t1082\tamt-esd-prot\nudp\t1082\tamt-esd-prot\ntcp\t1083\tansoft-lm-1\nudp\t1083\tansoft-lm-1\ntcp\t1084\tansoft-lm-2\nudp\t1084\tansoft-lm-2\ntcp\t1085\twebobjects\nudp\t1085\twebobjects\ntcp\t1086\tcplscrambler-lg\nudp\t1086\tcplscrambler-lg\ntcp\t1087\tcplscrambler-in\nudp\t1087\tcplscrambler-in\ntcp\t1088\tcplscrambler-al\nudp\t1088\tcplscrambler-al\ntcp\t1089\tff-annunc\nudp\t1089\tff-annunc\ntcp\t1090\tff-fms\nudp\t1090\tff-fms\ntcp\t1091\tff-sm\nudp\t1091\tff-sm\ntcp\t1092\tobrpd\nudp\t1092\tobrpd\ntcp\t1093\tproofd\nudp\t1093\tproofd\ntcp\t1094\trootd\nudp\t1094\trootd\ntcp\t1095\tnicelink\nudp\t1095\tnicelink\ntcp\t1096\tcnrprotocol\nudp\t1096\tcnrprotocol\ntcp\t1097\tsunclustermgr\nudp\t1097\tsunclustermgr\ntcp\t1098\trmiactivation\nudp\t1098\trmiactivation\ntcp\t1099\trmiregistry\nudp\t1099\trmiregistry\ntcp\t1100\tmctp\nudp\t1100\tmctp\ntcp\t1101\tpt2-discover\nudp\t1101\tpt2-discover\ntcp\t1102\tadobeserver-1\nudp\t1102\tadobeserver-1\ntcp\t1103\tadobeserver-2\nudp\t1103\tadobeserver-2\ntcp\t1104\txrl\nudp\t1104\txrl\ntcp\t1105\tftranhc\nudp\t1105\tftranhc\ntcp\t1106\tisoipsigport-1\nudp\t1106\tisoipsigport-1\ntcp\t1107\tisoipsigport-2\nudp\t1107\tisoipsigport-2\ntcp\t1108\tratio-adp\nudp\t1108\tratio-adp\ntcp\t1110\twebadmstart\nudp\t1110\tnfsd-keepalive\ntcp\t1111\tlmsocialserver\nudp\t1111\tlmsocialserver\ntcp\t1112\ticp\nudp\t1112\ticp\ntcp\t1113\tltp-deepspace\nudp\t1113\tltp-deepspace\ntcp\t1114\tmini-sql\nudp\t1114\tmini-sql\ntcp\t1115\tardus-trns\nudp\t1115\tardus-trns\ntcp\t1116\tardus-cntl\nudp\t1116\tardus-cntl\ntcp\t1117\tardus-mtrns\nudp\t1117\tardus-mtrns\ntcp\t1118\tsacred\nudp\t1118\tsacred\ntcp\t1119\tbnetgame\nudp\t1119\tbnetgame\ntcp\t1120\tbnetfile\nudp\t1120\tbnetfile\ntcp\t1121\trmpp\nudp\t1121\trmpp\ntcp\t1122\tavailant-mgr\nudp\t1122\tavailant-mgr\ntcp\t1123\tmurray\nudp\t1123\tmurray\ntcp\t1124\thpvmmcontrol\nudp\t1124\thpvmmcontrol\ntcp\t1125\thpvmmagent\nudp\t1125\thpvmmagent\ntcp\t1126\thpvmmdata\nudp\t1126\thpvmmdata\ntcp\t1127\tkwdb-commn\nudp\t1127\tkwdb-commn\ntcp\t1128\tsaphostctrl\nudp\t1128\tsaphostctrl\ntcp\t1129\tsaphostctrls\nudp\t1129\tsaphostctrls\ntcp\t1130\tcasp\nudp\t1130\tcasp\ntcp\t1131\tcaspssl\nudp\t1131\tcaspssl\ntcp\t1132\tkvm-via-ip\nudp\t1132\tkvm-via-ip\ntcp\t1133\tdfn\nudp\t1133\tdfn\ntcp\t1134\taplx\nudp\t1134\taplx\ntcp\t1135\tomnivision\nudp\t1135\tomnivision\ntcp\t1136\thhb-gateway\nudp\t1136\thhb-gateway\ntcp\t1137\ttrim\nudp\t1137\ttrim\ntcp\t1138\tencrypted-admin\ntcp\t1138\tencrypted_admin\nudp\t1138\tencrypted-admin\nudp\t1138\tencrypted_admin\ntcp\t1139\tevm\nudp\t1139\tevm\ntcp\t1140\tautonoc\nudp\t1140\tautonoc\ntcp\t1141\tmxomss\nudp\t1141\tmxomss\ntcp\t1142\tedtools\nudp\t1142\tedtools\ntcp\t1143\timyx\nudp\t1143\timyx\ntcp\t1144\tfuscript\nudp\t1144\tfuscript\ntcp\t1145\tx9-icue\nudp\t1145\tx9-icue\ntcp\t1146\taudit-transfer\nudp\t1146\taudit-transfer\ntcp\t1147\tcapioverlan\nudp\t1147\tcapioverlan\ntcp\t1148\telfiq-repl\nudp\t1148\telfiq-repl\ntcp\t1149\tbvtsonar\nudp\t1149\tbvtsonar\ntcp\t1150\tblaze\nudp\t1150\tblaze\ntcp\t1151\tunizensus\nudp\t1151\tunizensus\ntcp\t1152\twinpoplanmess\nudp\t1152\twinpoplanmess\ntcp\t1153\tc1222-acse\nudp\t1153\tc1222-acse\ntcp\t1154\tresacommunity\nudp\t1154\tresacommunity\ntcp\t1155\tnfa\nudp\t1155\tnfa\ntcp\t1156\tiascontrol-oms\nudp\t1156\tiascontrol-oms\ntcp\t1157\tiascontrol\nudp\t1157\tiascontrol\ntcp\t1158\tdbcontrol-oms\nudp\t1158\tdbcontrol-oms\ntcp\t1159\toracle-oms\nudp\t1159\toracle-oms\ntcp\t1160\tolsv\nudp\t1160\tolsv\ntcp\t1161\thealth-polling\nudp\t1161\thealth-polling\ntcp\t1162\thealth-trap\nudp\t1162\thealth-trap\ntcp\t1163\tsddp\nudp\t1163\tsddp\ntcp\t1164\tqsm-proxy\nudp\t1164\tqsm-proxy\ntcp\t1165\tqsm-gui\nudp\t1165\tqsm-gui\ntcp\t1166\tqsm-remote\nudp\t1166\tqsm-remote\ntcp\t1167\tcisco-ipsla\nudp\t1167\tcisco-ipsla\ntcp\t1168\tvchat\nudp\t1168\tvchat\ntcp\t1169\ttripwire\nudp\t1169\ttripwire\ntcp\t1170\tatc-lm\nudp\t1170\tatc-lm\ntcp\t1171\tatc-appserver\nudp\t1171\tatc-appserver\ntcp\t1172\tdnap\nudp\t1172\tdnap\ntcp\t1173\td-cinema-rrp\nudp\t1173\td-cinema-rrp\ntcp\t1174\tfnet-remote-ui\nudp\t1174\tfnet-remote-ui\ntcp\t1175\tdossier\nudp\t1175\tdossier\ntcp\t1176\tindigo-server\nudp\t1176\tindigo-server\ntcp\t1177\tdkmessenger\nudp\t1177\tdkmessenger\ntcp\t1178\tsgi-storman\nudp\t1178\tsgi-storman\ntcp\t1179\tb2n\nudp\t1179\tb2n\ntcp\t1180\tmc-client\nudp\t1180\tmc-client\ntcp\t1181\t3comnetman\nudp\t1181\t3comnetman\ntcp\t1182\taccelenet\nudp\t1182\taccelenet-data\ntcp\t1183\tllsurfup-http\nudp\t1183\tllsurfup-http\ntcp\t1184\tllsurfup-https\nudp\t1184\tllsurfup-https\ntcp\t1185\tcatchpole\nudp\t1185\tcatchpole\ntcp\t1186\tmysql-cluster\nudp\t1186\tmysql-cluster\ntcp\t1187\talias\nudp\t1187\talias\ntcp\t1188\thp-webadmin\nudp\t1188\thp-webadmin\ntcp\t1189\tunet\nudp\t1189\tunet\ntcp\t1190\tcommlinx-avl\nudp\t1190\tcommlinx-avl\ntcp\t1191\tgpfs\nudp\t1191\tgpfs\ntcp\t1192\tcaids-sensor\nudp\t1192\tcaids-sensor\ntcp\t1193\tfiveacross\nudp\t1193\tfiveacross\ntcp\t1194\topenvpn\nudp\t1194\topenvpn\ntcp\t1195\trsf-1\nudp\t1195\trsf-1\ntcp\t1196\tnetmagic\nudp\t1196\tnetmagic\ntcp\t1197\tcarrius-rshell\nudp\t1197\tcarrius-rshell\ntcp\t1198\tcajo-discovery\nudp\t1198\tcajo-discovery\ntcp\t1199\tdmidi\nudp\t1199\tdmidi\ntcp\t1200\tscol\nudp\t1200\tscol\ntcp\t1201\tnucleus-sand\nudp\t1201\tnucleus-sand\ntcp\t1202\tcaiccipc\nudp\t1202\tcaiccipc\ntcp\t1203\tssslic-mgr\nudp\t1203\tssslic-mgr\ntcp\t1204\tssslog-mgr\nudp\t1204\tssslog-mgr\ntcp\t1205\taccord-mgc\nudp\t1205\taccord-mgc\ntcp\t1206\tanthony-data\nudp\t1206\tanthony-data\ntcp\t1207\tmetasage\nudp\t1207\tmetasage\ntcp\t1208\tseagull-ais\nudp\t1208\tseagull-ais\ntcp\t1209\tipcd3\nudp\t1209\tipcd3\ntcp\t1210\teoss\nudp\t1210\teoss\ntcp\t1211\tgroove-dpp\nudp\t1211\tgroove-dpp\ntcp\t1212\tlupa\nudp\t1212\tlupa\ntcp\t1213\tmpc-lifenet\nudp\t1213\tmpc-lifenet\ntcp\t1214\tkazaa\nudp\t1214\tkazaa\ntcp\t1215\tscanstat-1\nudp\t1215\tscanstat-1\ntcp\t1216\tetebac5\nudp\t1216\tetebac5\ntcp\t1217\thpss-ndapi\nudp\t1217\thpss-ndapi\ntcp\t1218\taeroflight-ads\nudp\t1218\taeroflight-ads\ntcp\t1219\taeroflight-ret\nudp\t1219\taeroflight-ret\ntcp\t1220\tqt-serveradmin\nudp\t1220\tqt-serveradmin\ntcp\t1221\tsweetware-apps\nudp\t1221\tsweetware-apps\ntcp\t1222\tnerv\nudp\t1222\tnerv\ntcp\t1223\ttgp\nudp\t1223\ttgp\ntcp\t1224\tvpnz\nudp\t1224\tvpnz\ntcp\t1225\tslinkysearch\nudp\t1225\tslinkysearch\ntcp\t1226\tstgxfws\nudp\t1226\tstgxfws\ntcp\t1227\tdns2go\nudp\t1227\tdns2go\ntcp\t1228\tflorence\nudp\t1228\tflorence\ntcp\t1229\tzented\nudp\t1229\tzented\ntcp\t1230\tperiscope\nudp\t1230\tperiscope\ntcp\t1231\tmenandmice-lpm\nudp\t1231\tmenandmice-lpm\ntcp\t1232\tfirst-defense\nudp\t1232\tfirst-defense\ntcp\t1233\tuniv-appserver\nudp\t1233\tuniv-appserver\ntcp\t1234\tsearch-agent\nudp\t1234\tsearch-agent\ntcp\t1235\tmosaicsyssvc1\nudp\t1235\tmosaicsyssvc1\ntcp\t1236\tbvcontrol\nudp\t1236\tbvcontrol\ntcp\t1237\ttsdos390\nudp\t1237\ttsdos390\ntcp\t1238\thacl-qs\nudp\t1238\thacl-qs\ntcp\t1239\tnmsd\nudp\t1239\tnmsd\ntcp\t1240\tinstantia\nudp\t1240\tinstantia\ntcp\t1241\tnessus\nudp\t1241\tnessus\ntcp\t1242\tnmasoverip\nudp\t1242\tnmasoverip\ntcp\t1243\tserialgateway\nudp\t1243\tserialgateway\ntcp\t1244\tisbconference1\nudp\t1244\tisbconference1\ntcp\t1245\tisbconference2\nudp\t1245\tisbconference2\ntcp\t1246\tpayrouter\nudp\t1246\tpayrouter\ntcp\t1247\tvisionpyramid\nudp\t1247\tvisionpyramid\ntcp\t1248\thermes\nudp\t1248\thermes\ntcp\t1249\tmesavistaco\nudp\t1249\tmesavistaco\ntcp\t1250\tswldy-sias\nudp\t1250\tswldy-sias\ntcp\t1251\tservergraph\nudp\t1251\tservergraph\ntcp\t1252\tbspne-pcc\nudp\t1252\tbspne-pcc\ntcp\t1253\tq55-pcc\nudp\t1253\tq55-pcc\ntcp\t1254\tde-noc\nudp\t1254\tde-noc\ntcp\t1255\tde-cache-query\nudp\t1255\tde-cache-query\ntcp\t1256\tde-server\nudp\t1256\tde-server\ntcp\t1257\tshockwave2\nudp\t1257\tshockwave2\ntcp\t1258\topennl\nudp\t1258\topennl\ntcp\t1259\topennl-voice\nudp\t1259\topennl-voice\ntcp\t1260\tibm-ssd\nudp\t1260\tibm-ssd\ntcp\t1261\tmpshrsv\nudp\t1261\tmpshrsv\ntcp\t1262\tqnts-orb\nudp\t1262\tqnts-orb\ntcp\t1263\tdka\nudp\t1263\tdka\ntcp\t1264\tprat\nudp\t1264\tprat\ntcp\t1265\tdssiapi\nudp\t1265\tdssiapi\ntcp\t1266\tdellpwrappks\nudp\t1266\tdellpwrappks\ntcp\t1267\tepc\nudp\t1267\tepc\ntcp\t1268\tpropel-msgsys\nudp\t1268\tpropel-msgsys\ntcp\t1269\twatilapp\nudp\t1269\twatilapp\ntcp\t1270\topsmgr\nudp\t1270\topsmgr\ntcp\t1271\texcw\nudp\t1271\texcw\ntcp\t1272\tcspmlockmgr\nudp\t1272\tcspmlockmgr\ntcp\t1273\temc-gateway\nudp\t1273\temc-gateway\ntcp\t1274\tt1distproc\nudp\t1274\tt1distproc\ntcp\t1275\tivcollector\nudp\t1275\tivcollector\ntcp\t1277\tmiva-mqs\nudp\t1277\tmiva-mqs\ntcp\t1278\tdellwebadmin-1\nudp\t1278\tdellwebadmin-1\ntcp\t1279\tdellwebadmin-2\nudp\t1279\tdellwebadmin-2\ntcp\t1280\tpictrography\nudp\t1280\tpictrography\ntcp\t1281\thealthd\nudp\t1281\thealthd\ntcp\t1282\temperion\nudp\t1282\temperion\ntcp\t1283\tproductinfo\nudp\t1283\tproductinfo\ntcp\t1284\tiee-qfx\nudp\t1284\tiee-qfx\ntcp\t1285\tneoiface\nudp\t1285\tneoiface\ntcp\t1286\tnetuitive\nudp\t1286\tnetuitive\ntcp\t1287\troutematch\nudp\t1287\troutematch\ntcp\t1288\tnavbuddy\nudp\t1288\tnavbuddy\ntcp\t1289\tjwalkserver\nudp\t1289\tjwalkserver\ntcp\t1290\twinjaserver\nudp\t1290\twinjaserver\ntcp\t1291\tseagulllms\nudp\t1291\tseagulllms\ntcp\t1292\tdsdn\nudp\t1292\tdsdn\ntcp\t1293\tpkt-krb-ipsec\nudp\t1293\tpkt-krb-ipsec\ntcp\t1294\tcmmdriver\nudp\t1294\tcmmdriver\ntcp\t1295\tehtp\nudp\t1295\tehtp\ntcp\t1296\tdproxy\nudp\t1296\tdproxy\ntcp\t1297\tsdproxy\nudp\t1297\tsdproxy\ntcp\t1298\tlpcp\nudp\t1298\tlpcp\ntcp\t1299\thp-sci\nudp\t1299\thp-sci\ntcp\t1300\th323hostcallsc\nudp\t1300\th323hostcallsc\ntcp\t1301\tci3-software-1\nudp\t1301\tci3-software-1\ntcp\t1302\tci3-software-2\nudp\t1302\tci3-software-2\ntcp\t1303\tsftsrv\nudp\t1303\tsftsrv\ntcp\t1304\tboomerang\nudp\t1304\tboomerang\ntcp\t1305\tpe-mike\nudp\t1305\tpe-mike\ntcp\t1306\tre-conn-proto\nudp\t1306\tre-conn-proto\ntcp\t1307\tpacmand\nudp\t1307\tpacmand\ntcp\t1308\todsi\nudp\t1308\todsi\ntcp\t1309\tjtag-server\nudp\t1309\tjtag-server\ntcp\t1310\thusky\nudp\t1310\thusky\ntcp\t1311\trxmon\nudp\t1311\trxmon\ntcp\t1312\tsti-envision\nudp\t1312\tsti-envision\ntcp\t1313\tbmc-patroldb\ntcp\t1313\tbmc_patroldb\nudp\t1313\tbmc-patroldb\nudp\t1313\tbmc_patroldb\ntcp\t1314\tpdps\nudp\t1314\tpdps\ntcp\t1315\tels\nudp\t1315\tels\ntcp\t1316\texbit-escp\nudp\t1316\texbit-escp\ntcp\t1317\tvrts-ipcserver\nudp\t1317\tvrts-ipcserver\ntcp\t1318\tkrb5gatekeeper\nudp\t1318\tkrb5gatekeeper\ntcp\t1319\tamx-icsp\nudp\t1319\tamx-icsp\ntcp\t1320\tamx-axbnet\nudp\t1320\tamx-axbnet\ntcp\t1321\tpip\nudp\t1321\tpip\ntcp\t1322\tnovation\nudp\t1322\tnovation\ntcp\t1323\tbrcd\nudp\t1323\tbrcd\ntcp\t1324\tdelta-mcp\nudp\t1324\tdelta-mcp\ntcp\t1325\tdx-instrument\nudp\t1325\tdx-instrument\ntcp\t1326\twimsic\nudp\t1326\twimsic\ntcp\t1327\tultrex\nudp\t1327\tultrex\ntcp\t1328\tewall\nudp\t1328\tewall\ntcp\t1329\tnetdb-export\nudp\t1329\tnetdb-export\ntcp\t1330\tstreetperfect\nudp\t1330\tstreetperfect\ntcp\t1331\tintersan\nudp\t1331\tintersan\ntcp\t1332\tpcia-rxp-b\nudp\t1332\tpcia-rxp-b\ntcp\t1333\tpasswrd-policy\nudp\t1333\tpasswrd-policy\ntcp\t1334\twritesrv\nudp\t1334\twritesrv\ntcp\t1335\tdigital-notary\nudp\t1335\tdigital-notary\ntcp\t1336\tischat\nudp\t1336\tischat\ntcp\t1337\tmenandmice-dns\nudp\t1337\tmenandmice-dns\ntcp\t1338\twmc-log-svc\nudp\t1338\twmc-log-svc\ntcp\t1339\tkjtsiteserver\nudp\t1339\tkjtsiteserver\ntcp\t1340\tnaap\nudp\t1340\tnaap\ntcp\t1341\tqubes\nudp\t1341\tqubes\ntcp\t1342\tesbroker\nudp\t1342\tesbroker\ntcp\t1343\tre101\nudp\t1343\tre101\ntcp\t1344\ticap\nudp\t1344\ticap\ntcp\t1345\tvpjp\nudp\t1345\tvpjp\ntcp\t1346\talta-ana-lm\nudp\t1346\talta-ana-lm\ntcp\t1347\tbbn-mmc\nudp\t1347\tbbn-mmc\ntcp\t1348\tbbn-mmx\nudp\t1348\tbbn-mmx\ntcp\t1349\tsbook\nudp\t1349\tsbook\ntcp\t1350\teditbench\nudp\t1350\teditbench\ntcp\t1351\tequationbuilder\nudp\t1351\tequationbuilder\ntcp\t1352\tlotusnote\nudp\t1352\tlotusnote\ntcp\t1353\trelief\nudp\t1353\trelief\ntcp\t1354\tXSIP-network\nudp\t1354\tXSIP-network\ntcp\t1355\tintuitive-edge\nudp\t1355\tintuitive-edge\ntcp\t1356\tcuillamartin\nudp\t1356\tcuillamartin\ntcp\t1357\tpegboard\nudp\t1357\tpegboard\ntcp\t1358\tconnlcli\nudp\t1358\tconnlcli\ntcp\t1359\tftsrv\nudp\t1359\tftsrv\ntcp\t1360\tmimer\nudp\t1360\tmimer\ntcp\t1361\tlinx\nudp\t1361\tlinx\ntcp\t1362\ttimeflies\nudp\t1362\ttimeflies\ntcp\t1363\tndm-requester\nudp\t1363\tndm-requester\ntcp\t1364\tndm-server\nudp\t1364\tndm-server\ntcp\t1365\tadapt-sna\nudp\t1365\tadapt-sna\ntcp\t1366\tnetware-csp\nudp\t1366\tnetware-csp\ntcp\t1367\tdcs\nudp\t1367\tdcs\ntcp\t1368\tscreencast\nudp\t1368\tscreencast\ntcp\t1369\tgv-us\nudp\t1369\tgv-us\ntcp\t1370\tus-gv\nudp\t1370\tus-gv\ntcp\t1371\tfc-cli\nudp\t1371\tfc-cli\ntcp\t1372\tfc-ser\nudp\t1372\tfc-ser\ntcp\t1373\tchromagrafx\nudp\t1373\tchromagrafx\ntcp\t1374\tmolly\nudp\t1374\tmolly\ntcp\t1375\tbytex\nudp\t1375\tbytex\ntcp\t1376\tibm-pps\nudp\t1376\tibm-pps\ntcp\t1377\tcichlid\nudp\t1377\tcichlid\ntcp\t1378\telan\nudp\t1378\telan\ntcp\t1379\tdbreporter\nudp\t1379\tdbreporter\ntcp\t1380\ttelesis-licman\nudp\t1380\ttelesis-licman\ntcp\t1381\tapple-licman\nudp\t1381\tapple-licman\ntcp\t1382\tudt-os\ntcp\t1382\tudt_os\nudp\t1382\tudt-os\nudp\t1382\tudt_os\ntcp\t1383\tgwha\nudp\t1383\tgwha\ntcp\t1384\tos-licman\nudp\t1384\tos-licman\ntcp\t1385\tatex-elmd\ntcp\t1385\tatex_elmd\nudp\t1385\tatex-elmd\nudp\t1385\tatex_elmd\ntcp\t1386\tchecksum\nudp\t1386\tchecksum\ntcp\t1387\tcadsi-lm\nudp\t1387\tcadsi-lm\ntcp\t1388\tobjective-dbc\nudp\t1388\tobjective-dbc\ntcp\t1389\ticlpv-dm\nudp\t1389\ticlpv-dm\ntcp\t1390\ticlpv-sc\nudp\t1390\ticlpv-sc\ntcp\t1391\ticlpv-sas\nudp\t1391\ticlpv-sas\ntcp\t1392\ticlpv-pm\nudp\t1392\ticlpv-pm\ntcp\t1393\ticlpv-nls\nudp\t1393\ticlpv-nls\ntcp\t1394\ticlpv-nlc\nudp\t1394\ticlpv-nlc\ntcp\t1395\ticlpv-wsm\nudp\t1395\ticlpv-wsm\ntcp\t1396\tdvl-activemail\nudp\t1396\tdvl-activemail\ntcp\t1397\taudio-activmail\nudp\t1397\taudio-activmail\ntcp\t1398\tvideo-activmail\nudp\t1398\tvideo-activmail\ntcp\t1399\tcadkey-licman\nudp\t1399\tcadkey-licman\ntcp\t1400\tcadkey-tablet\nudp\t1400\tcadkey-tablet\ntcp\t1401\tgoldleaf-licman\nudp\t1401\tgoldleaf-licman\ntcp\t1402\tprm-sm-np\nudp\t1402\tprm-sm-np\ntcp\t1403\tprm-nm-np\nudp\t1403\tprm-nm-np\ntcp\t1404\tigi-lm\nudp\t1404\tigi-lm\ntcp\t1405\tibm-res\nudp\t1405\tibm-res\ntcp\t1406\tnetlabs-lm\nudp\t1406\tnetlabs-lm\ntcp\t1407\ttibet-server\ntcp\t1408\tsophia-lm\nudp\t1408\tsophia-lm\ntcp\t1409\there-lm\nudp\t1409\there-lm\ntcp\t1410\thiq\nudp\t1410\thiq\ntcp\t1411\taf\nudp\t1411\taf\ntcp\t1412\tinnosys\nudp\t1412\tinnosys\ntcp\t1413\tinnosys-acl\nudp\t1413\tinnosys-acl\ntcp\t1414\tibm-mqseries\nudp\t1414\tibm-mqseries\ntcp\t1415\tdbstar\nudp\t1415\tdbstar\ntcp\t1416\tnovell-lu6-2\ntcp\t1416\tnovell-lu6.2\nudp\t1416\tnovell-lu6-2\nudp\t1416\tnovell-lu6.2\ntcp\t1417\ttimbuktu-srv1\nudp\t1417\ttimbuktu-srv1\ntcp\t1418\ttimbuktu-srv2\nudp\t1418\ttimbuktu-srv2\ntcp\t1419\ttimbuktu-srv3\nudp\t1419\ttimbuktu-srv3\ntcp\t1420\ttimbuktu-srv4\nudp\t1420\ttimbuktu-srv4\ntcp\t1421\tgandalf-lm\nudp\t1421\tgandalf-lm\ntcp\t1422\tautodesk-lm\nudp\t1422\tautodesk-lm\ntcp\t1423\tessbase\nudp\t1423\tessbase\ntcp\t1424\thybrid\nudp\t1424\thybrid\ntcp\t1425\tzion-lm\nudp\t1425\tzion-lm\ntcp\t1426\tsais\nudp\t1426\tsais\ntcp\t1427\tmloadd\nudp\t1427\tmloadd\ntcp\t1428\tinformatik-lm\nudp\t1428\tinformatik-lm\ntcp\t1429\tnms\nudp\t1429\tnms\ntcp\t1430\ttpdu\nudp\t1430\ttpdu\ntcp\t1431\trgtp\nudp\t1431\trgtp\ntcp\t1432\tblueberry-lm\nudp\t1432\tblueberry-lm\ntcp\t1433\tms-sql-s\nudp\t1433\tms-sql-s\ntcp\t1434\tms-sql-m\nudp\t1434\tms-sql-m\ntcp\t1435\tibm-cics\nudp\t1435\tibm-cics\ntcp\t1436\tsaism\nudp\t1436\tsaism\ntcp\t1437\ttabula\nudp\t1437\ttabula\ntcp\t1438\teicon-server\nudp\t1438\teicon-server\ntcp\t1439\teicon-x25\nudp\t1439\teicon-x25\ntcp\t1440\teicon-slp\nudp\t1440\teicon-slp\ntcp\t1441\tcadis-1\nudp\t1441\tcadis-1\ntcp\t1442\tcadis-2\nudp\t1442\tcadis-2\ntcp\t1443\ties-lm\nudp\t1443\ties-lm\ntcp\t1444\tmarcam-lm\nudp\t1444\tmarcam-lm\ntcp\t1445\tproxima-lm\nudp\t1445\tproxima-lm\ntcp\t1446\tora-lm\nudp\t1446\tora-lm\ntcp\t1447\tapri-lm\nudp\t1447\tapri-lm\ntcp\t1448\toc-lm\nudp\t1448\toc-lm\ntcp\t1449\tpeport\nudp\t1449\tpeport\ntcp\t1450\tdwf\nudp\t1450\tdwf\ntcp\t1451\tinfoman\nudp\t1451\tinfoman\ntcp\t1452\tgtegsc-lm\nudp\t1452\tgtegsc-lm\ntcp\t1453\tgenie-lm\nudp\t1453\tgenie-lm\ntcp\t1454\tinterhdl-elmd\ntcp\t1454\tinterhdl_elmd\nudp\t1454\tinterhdl-elmd\nudp\t1454\tinterhdl_elmd\ntcp\t1455\tesl-lm\nudp\t1455\tesl-lm\ntcp\t1456\tdca\nudp\t1456\tdca\ntcp\t1457\tvalisys-lm\nudp\t1457\tvalisys-lm\ntcp\t1458\tnrcabq-lm\nudp\t1458\tnrcabq-lm\ntcp\t1459\tproshare1\nudp\t1459\tproshare1\ntcp\t1460\tproshare2\nudp\t1460\tproshare2\ntcp\t1461\tibm-wrless-lan\ntcp\t1461\tibm_wrless_lan\nudp\t1461\tibm-wrless-lan\nudp\t1461\tibm_wrless_lan\ntcp\t1462\tworld-lm\nudp\t1462\tworld-lm\ntcp\t1463\tnucleus\nudp\t1463\tnucleus\ntcp\t1464\tmsl-lmd\ntcp\t1464\tmsl_lmd\nudp\t1464\tmsl-lmd\nudp\t1464\tmsl_lmd\ntcp\t1465\tpipes\nudp\t1465\tpipes\ntcp\t1466\toceansoft-lm\nudp\t1466\toceansoft-lm\ntcp\t1467\tcsdmbase\nudp\t1467\tcsdmbase\ntcp\t1468\tcsdm\nudp\t1468\tcsdm\ntcp\t1469\taal-lm\nudp\t1469\taal-lm\ntcp\t1470\tuaiact\nudp\t1470\tuaiact\ntcp\t1471\tcsdmbase\nudp\t1471\tcsdmbase\ntcp\t1472\tcsdm\nudp\t1472\tcsdm\ntcp\t1473\topenmath\nudp\t1473\topenmath\ntcp\t1474\ttelefinder\nudp\t1474\ttelefinder\ntcp\t1475\ttaligent-lm\nudp\t1475\ttaligent-lm\ntcp\t1476\tclvm-cfg\nudp\t1476\tclvm-cfg\ntcp\t1477\tms-sna-server\nudp\t1477\tms-sna-server\ntcp\t1478\tms-sna-base\nudp\t1478\tms-sna-base\ntcp\t1479\tdberegister\nudp\t1479\tdberegister\ntcp\t1480\tpacerforum\nudp\t1480\tpacerforum\ntcp\t1481\tairs\nudp\t1481\tairs\ntcp\t1482\tmiteksys-lm\nudp\t1482\tmiteksys-lm\ntcp\t1483\tafs\nudp\t1483\tafs\ntcp\t1484\tconfluent\nudp\t1484\tconfluent\ntcp\t1485\tlansource\nudp\t1485\tlansource\ntcp\t1486\tnms-topo-serv\ntcp\t1486\tnms_topo_serv\nudp\t1486\tnms-topo-serv\nudp\t1486\tnms_topo_serv\ntcp\t1487\tlocalinfosrvr\nudp\t1487\tlocalinfosrvr\ntcp\t1488\tdocstor\nudp\t1488\tdocstor\ntcp\t1489\tdmdocbroker\nudp\t1489\tdmdocbroker\ntcp\t1490\tinsitu-conf\nudp\t1490\tinsitu-conf\ntcp\t1492\tstone-design-1\nudp\t1492\tstone-design-1\ntcp\t1493\tnetmap-lm\ntcp\t1493\tnetmap_lm\nudp\t1493\tnetmap-lm\nudp\t1493\tnetmap_lm\ntcp\t1494\tica\nudp\t1494\tica\ntcp\t1495\tcvc\nudp\t1495\tcvc\ntcp\t1496\tliberty-lm\nudp\t1496\tliberty-lm\ntcp\t1497\trfx-lm\nudp\t1497\trfx-lm\ntcp\t1498\tsybase-sqlany\nudp\t1498\tsybase-sqlany\ntcp\t1499\tfhc\nudp\t1499\tfhc\ntcp\t1500\tvlsi-lm\nudp\t1500\tvlsi-lm\ntcp\t1501\tsaiscm\nudp\t1501\tsaiscm\ntcp\t1502\tshivadiscovery\nudp\t1502\tshivadiscovery\ntcp\t1503\timtc-mcs\nudp\t1503\timtc-mcs\ntcp\t1504\tevb-elm\nudp\t1504\tevb-elm\ntcp\t1505\tfunkproxy\nudp\t1505\tfunkproxy\ntcp\t1506\tutcd\nudp\t1506\tutcd\ntcp\t1507\tsymplex\nudp\t1507\tsymplex\ntcp\t1508\tdiagmond\nudp\t1508\tdiagmond\ntcp\t1509\trobcad-lm\nudp\t1509\trobcad-lm\ntcp\t1510\tmvx-lm\nudp\t1510\tmvx-lm\ntcp\t1511\t3l-l1\nudp\t1511\t3l-l1\ntcp\t1512\twins\nudp\t1512\twins\ntcp\t1513\tfujitsu-dtc\nudp\t1513\tfujitsu-dtc\ntcp\t1514\tfujitsu-dtcns\nudp\t1514\tfujitsu-dtcns\ntcp\t1515\tifor-protocol\nudp\t1515\tifor-protocol\ntcp\t1516\tvpad\nudp\t1516\tvpad\ntcp\t1517\tvpac\nudp\t1517\tvpac\ntcp\t1518\tvpvd\nudp\t1518\tvpvd\ntcp\t1519\tvpvc\nudp\t1519\tvpvc\ntcp\t1520\tatm-zip-office\nudp\t1520\tatm-zip-office\ntcp\t1521\tncube-lm\nudp\t1521\tncube-lm\ntcp\t1522\tricardo-lm\nudp\t1522\tricardo-lm\ntcp\t1523\tcichild-lm\nudp\t1523\tcichild-lm\ntcp\t1524\tingreslock\nudp\t1524\tingreslock\ntcp\t1525\torasrv\nudp\t1525\torasrv\ntcp\t1525\tprospero-np\nudp\t1525\tprospero-np\ntcp\t1526\tpdap-np\nudp\t1526\tpdap-np\ntcp\t1527\ttlisrv\nudp\t1527\ttlisrv\nudp\t1528\tngr-t\ntcp\t1529\tcoauthor\nudp\t1529\tcoauthor\ntcp\t1530\trap-service\nudp\t1530\trap-service\ntcp\t1531\trap-listen\nudp\t1531\trap-listen\ntcp\t1532\tmiroconnect\nudp\t1532\tmiroconnect\ntcp\t1533\tvirtual-places\nudp\t1533\tvirtual-places\ntcp\t1534\tmicromuse-lm\nudp\t1534\tmicromuse-lm\ntcp\t1535\tampr-info\nudp\t1535\tampr-info\ntcp\t1536\tampr-inter\nudp\t1536\tampr-inter\ntcp\t1537\tsdsc-lm\nudp\t1537\tsdsc-lm\ntcp\t1538\t3ds-lm\nudp\t1538\t3ds-lm\ntcp\t1539\tintellistor-lm\nudp\t1539\tintellistor-lm\ntcp\t1540\trds\nudp\t1540\trds\ntcp\t1541\trds2\nudp\t1541\trds2\ntcp\t1542\tgridgen-elmd\nudp\t1542\tgridgen-elmd\ntcp\t1543\tsimba-cs\nudp\t1543\tsimba-cs\ntcp\t1544\taspeclmd\nudp\t1544\taspeclmd\ntcp\t1545\tvistium-share\nudp\t1545\tvistium-share\ntcp\t1546\tabbaccuray\nudp\t1546\tabbaccuray\ntcp\t1547\tlaplink\nudp\t1547\tlaplink\ntcp\t1548\taxon-lm\nudp\t1548\taxon-lm\ntcp\t1549\tshivahose\nudp\t1549\tshivasound\ntcp\t1550\t3m-image-lm\nudp\t1550\t3m-image-lm\ntcp\t1551\thecmtl-db\nudp\t1551\thecmtl-db\ntcp\t1552\tpciarray\nudp\t1552\tpciarray\ntcp\t1553\tsna-cs\nudp\t1553\tsna-cs\ntcp\t1554\tcaci-lm\nudp\t1554\tcaci-lm\ntcp\t1555\tlivelan\nudp\t1555\tlivelan\ntcp\t1556\tveritas-pbx\ntcp\t1556\tveritas_pbx\nudp\t1556\tveritas-pbx\nudp\t1556\tveritas_pbx\ntcp\t1557\tarbortext-lm\nudp\t1557\tarbortext-lm\ntcp\t1558\txingmpeg\nudp\t1558\txingmpeg\ntcp\t1559\tweb2host\nudp\t1559\tweb2host\ntcp\t1560\tasci-val\nudp\t1560\tasci-val\ntcp\t1561\tfacilityview\nudp\t1561\tfacilityview\ntcp\t1562\tpconnectmgr\nudp\t1562\tpconnectmgr\ntcp\t1563\tcadabra-lm\nudp\t1563\tcadabra-lm\ntcp\t1564\tpay-per-view\nudp\t1564\tpay-per-view\ntcp\t1565\twinddlb\nudp\t1565\twinddlb\ntcp\t1566\tcorelvideo\nudp\t1566\tcorelvideo\ntcp\t1567\tjlicelmd\nudp\t1567\tjlicelmd\ntcp\t1568\ttsspmap\nudp\t1568\ttsspmap\ntcp\t1569\tets\nudp\t1569\tets\ntcp\t1570\torbixd\nudp\t1570\torbixd\ntcp\t1571\trdb-dbs-disp\nudp\t1571\trdb-dbs-disp\ntcp\t1572\tchip-lm\nudp\t1572\tchip-lm\ntcp\t1573\titscomm-ns\nudp\t1573\titscomm-ns\ntcp\t1574\tmvel-lm\nudp\t1574\tmvel-lm\ntcp\t1575\toraclenames\nudp\t1575\toraclenames\ntcp\t1576\tmoldflow-lm\nudp\t1576\tmoldflow-lm\ntcp\t1577\thypercube-lm\nudp\t1577\thypercube-lm\ntcp\t1578\tjacobus-lm\nudp\t1578\tjacobus-lm\ntcp\t1579\tioc-sea-lm\nudp\t1579\tioc-sea-lm\ntcp\t1580\ttn-tl-r1\nudp\t1580\ttn-tl-r2\ntcp\t1581\tmil-2045-47001\nudp\t1581\tmil-2045-47001\ntcp\t1582\tmsims\nudp\t1582\tmsims\ntcp\t1583\tsimbaexpress\nudp\t1583\tsimbaexpress\ntcp\t1584\ttn-tl-fd2\nudp\t1584\ttn-tl-fd2\ntcp\t1585\tintv\nudp\t1585\tintv\ntcp\t1586\tibm-abtact\nudp\t1586\tibm-abtact\ntcp\t1587\tpra-elmd\ntcp\t1587\tpra_elmd\nudp\t1587\tpra-elmd\nudp\t1587\tpra_elmd\ntcp\t1588\ttriquest-lm\nudp\t1588\ttriquest-lm\ntcp\t1589\tvqp\nudp\t1589\tvqp\ntcp\t1590\tgemini-lm\nudp\t1590\tgemini-lm\ntcp\t1591\tncpm-pm\nudp\t1591\tncpm-pm\ntcp\t1592\tcommonspace\nudp\t1592\tcommonspace\ntcp\t1593\tmainsoft-lm\nudp\t1593\tmainsoft-lm\ntcp\t1594\tsixtrak\nudp\t1594\tsixtrak\ntcp\t1595\tradio\nudp\t1595\tradio\ntcp\t1596\tradio-sm\nudp\t1596\tradio-bc\ntcp\t1597\torbplus-iiop\nudp\t1597\torbplus-iiop\ntcp\t1598\tpicknfs\nudp\t1598\tpicknfs\ntcp\t1599\tsimbaservices\nudp\t1599\tsimbaservices\ntcp\t1600\tissd\nudp\t1600\tissd\ntcp\t1601\taas\nudp\t1601\taas\ntcp\t1602\tinspect\nudp\t1602\tinspect\ntcp\t1603\tpicodbc\nudp\t1603\tpicodbc\ntcp\t1604\ticabrowser\nudp\t1604\ticabrowser\ntcp\t1605\tslp\nudp\t1605\tslp\ntcp\t1606\tslm-api\nudp\t1606\tslm-api\ntcp\t1607\tstt\nudp\t1607\tstt\ntcp\t1608\tsmart-lm\nudp\t1608\tsmart-lm\ntcp\t1609\tisysg-lm\nudp\t1609\tisysg-lm\ntcp\t1610\ttaurus-wh\nudp\t1610\ttaurus-wh\ntcp\t1611\till\nudp\t1611\till\ntcp\t1612\tnetbill-trans\nudp\t1612\tnetbill-trans\ntcp\t1613\tnetbill-keyrep\nudp\t1613\tnetbill-keyrep\ntcp\t1614\tnetbill-cred\nudp\t1614\tnetbill-cred\ntcp\t1615\tnetbill-auth\nudp\t1615\tnetbill-auth\ntcp\t1616\tnetbill-prod\nudp\t1616\tnetbill-prod\ntcp\t1617\tnimrod-agent\nudp\t1617\tnimrod-agent\ntcp\t1618\tskytelnet\nudp\t1618\tskytelnet\ntcp\t1619\txs-openstorage\nudp\t1619\txs-openstorage\ntcp\t1620\tfaxportwinport\nudp\t1620\tfaxportwinport\ntcp\t1621\tsoftdataphone\nudp\t1621\tsoftdataphone\ntcp\t1622\tontime\nudp\t1622\tontime\ntcp\t1623\tjaleosnd\nudp\t1623\tjaleosnd\ntcp\t1624\tudp-sr-port\nudp\t1624\tudp-sr-port\ntcp\t1625\tsvs-omagent\nudp\t1625\tsvs-omagent\ntcp\t1626\tshockwave\nudp\t1626\tshockwave\ntcp\t1627\tt128-gateway\nudp\t1627\tt128-gateway\ntcp\t1628\tlontalk-norm\nudp\t1628\tlontalk-norm\ntcp\t1629\tlontalk-urgnt\nudp\t1629\tlontalk-urgnt\ntcp\t1630\toraclenet8cman\nudp\t1630\toraclenet8cman\ntcp\t1631\tvisitview\nudp\t1631\tvisitview\ntcp\t1632\tpammratc\nudp\t1632\tpammratc\ntcp\t1633\tpammrpc\nudp\t1633\tpammrpc\ntcp\t1634\tloaprobe\nudp\t1634\tloaprobe\ntcp\t1635\tedb-server1\nudp\t1635\tedb-server1\ntcp\t1636\tisdc\nudp\t1636\tisdc\ntcp\t1637\tislc\nudp\t1637\tislc\ntcp\t1638\tismc\nudp\t1638\tismc\ntcp\t1639\tcert-initiator\nudp\t1639\tcert-initiator\ntcp\t1640\tcert-responder\nudp\t1640\tcert-responder\ntcp\t1641\tinvision\nudp\t1641\tinvision\ntcp\t1642\tisis-am\nudp\t1642\tisis-am\ntcp\t1643\tisis-ambc\nudp\t1643\tisis-ambc\ntcp\t1644\tsaiseh\nudp\t1644\tsaiseh\ntcp\t1645\tsightline\nudp\t1645\tsightline\ntcp\t1646\tsa-msg-port\nudp\t1646\tsa-msg-port\ntcp\t1647\trsap\nudp\t1647\trsap\ntcp\t1648\tconcurrent-lm\nudp\t1648\tconcurrent-lm\ntcp\t1649\tkermit\nudp\t1649\tkermit\ntcp\t1650\tnkd\nudp\t1650\tnkd\ntcp\t1651\tshiva-confsrvr\ntcp\t1651\tshiva_confsrvr\nudp\t1651\tshiva-confsrvr\nudp\t1651\tshiva_confsrvr\ntcp\t1652\txnmp\nudp\t1652\txnmp\ntcp\t1653\talphatech-lm\nudp\t1653\talphatech-lm\ntcp\t1654\tstargatealerts\nudp\t1654\tstargatealerts\ntcp\t1655\tdec-mbadmin\nudp\t1655\tdec-mbadmin\ntcp\t1656\tdec-mbadmin-h\nudp\t1656\tdec-mbadmin-h\ntcp\t1657\tfujitsu-mmpdc\nudp\t1657\tfujitsu-mmpdc\ntcp\t1658\tsixnetudr\nudp\t1658\tsixnetudr\ntcp\t1659\tsg-lm\nudp\t1659\tsg-lm\ntcp\t1660\tskip-mc-gikreq\nudp\t1660\tskip-mc-gikreq\ntcp\t1661\tnetview-aix-1\nudp\t1661\tnetview-aix-1\ntcp\t1662\tnetview-aix-2\nudp\t1662\tnetview-aix-2\ntcp\t1663\tnetview-aix-3\nudp\t1663\tnetview-aix-3\ntcp\t1664\tnetview-aix-4\nudp\t1664\tnetview-aix-4\ntcp\t1665\tnetview-aix-5\nudp\t1665\tnetview-aix-5\ntcp\t1666\tnetview-aix-6\nudp\t1666\tnetview-aix-6\ntcp\t1667\tnetview-aix-7\nudp\t1667\tnetview-aix-7\ntcp\t1668\tnetview-aix-8\nudp\t1668\tnetview-aix-8\ntcp\t1669\tnetview-aix-9\nudp\t1669\tnetview-aix-9\ntcp\t1670\tnetview-aix-10\nudp\t1670\tnetview-aix-10\ntcp\t1671\tnetview-aix-11\nudp\t1671\tnetview-aix-11\ntcp\t1672\tnetview-aix-12\nudp\t1672\tnetview-aix-12\ntcp\t1673\tproshare-mc-1\nudp\t1673\tproshare-mc-1\ntcp\t1674\tproshare-mc-2\nudp\t1674\tproshare-mc-2\ntcp\t1675\tpdp\nudp\t1675\tpdp\ntcp\t1676\tnetcomm1\nudp\t1676\tnetcomm2\ntcp\t1677\tgroupwise\nudp\t1677\tgroupwise\ntcp\t1678\tprolink\nudp\t1678\tprolink\ntcp\t1679\tdarcorp-lm\nudp\t1679\tdarcorp-lm\ntcp\t1680\tmicrocom-sbp\nudp\t1680\tmicrocom-sbp\ntcp\t1681\tsd-elmd\nudp\t1681\tsd-elmd\ntcp\t1682\tlanyon-lantern\nudp\t1682\tlanyon-lantern\ntcp\t1683\tncpm-hip\nudp\t1683\tncpm-hip\ntcp\t1684\tsnaresecure\nudp\t1684\tsnaresecure\ntcp\t1685\tn2nremote\nudp\t1685\tn2nremote\ntcp\t1686\tcvmon\nudp\t1686\tcvmon\ntcp\t1687\tnsjtp-ctrl\nudp\t1687\tnsjtp-ctrl\ntcp\t1688\tnsjtp-data\nudp\t1688\tnsjtp-data\ntcp\t1689\tfirefox\nudp\t1689\tfirefox\ntcp\t1690\tng-umds\nudp\t1690\tng-umds\ntcp\t1691\tempire-empuma\nudp\t1691\tempire-empuma\ntcp\t1692\tsstsys-lm\nudp\t1692\tsstsys-lm\ntcp\t1693\trrirtr\nudp\t1693\trrirtr\ntcp\t1694\trrimwm\nudp\t1694\trrimwm\ntcp\t1695\trrilwm\nudp\t1695\trrilwm\ntcp\t1696\trrifmm\nudp\t1696\trrifmm\ntcp\t1697\trrisat\nudp\t1697\trrisat\ntcp\t1698\trsvp-encap-1\nudp\t1698\trsvp-encap-1\ntcp\t1699\trsvp-encap-2\nudp\t1699\trsvp-encap-2\ntcp\t1700\tmps-raft\nudp\t1700\tmps-raft\ntcp\t1701\tl2f\nudp\t1701\tl2f\ntcp\t1701\tl2tp\nudp\t1701\tl2tp\ntcp\t1702\tdeskshare\nudp\t1702\tdeskshare\ntcp\t1703\thb-engine\nudp\t1703\thb-engine\ntcp\t1704\tbcs-broker\nudp\t1704\tbcs-broker\ntcp\t1705\tslingshot\nudp\t1705\tslingshot\ntcp\t1706\tjetform\nudp\t1706\tjetform\ntcp\t1707\tvdmplay\nudp\t1707\tvdmplay\ntcp\t1708\tgat-lmd\nudp\t1708\tgat-lmd\ntcp\t1709\tcentra\nudp\t1709\tcentra\ntcp\t1710\timpera\nudp\t1710\timpera\ntcp\t1711\tpptconference\nudp\t1711\tpptconference\ntcp\t1712\tregistrar\nudp\t1712\tregistrar\ntcp\t1713\tconferencetalk\nudp\t1713\tconferencetalk\ntcp\t1714\tsesi-lm\nudp\t1714\tsesi-lm\ntcp\t1715\thoudini-lm\nudp\t1715\thoudini-lm\ntcp\t1716\txmsg\nudp\t1716\txmsg\ntcp\t1717\tfj-hdnet\nudp\t1717\tfj-hdnet\ntcp\t1718\th323gatedisc\nudp\t1718\th323gatedisc\ntcp\t1719\th323gatestat\nudp\t1719\th323gatestat\ntcp\t1720\th323hostcall\nudp\t1720\th323hostcall\ntcp\t1721\tcaicci\nudp\t1721\tcaicci\ntcp\t1722\thks-lm\nudp\t1722\thks-lm\ntcp\t1723\tpptp\nudp\t1723\tpptp\ntcp\t1724\tcsbphonemaster\nudp\t1724\tcsbphonemaster\ntcp\t1725\tiden-ralp\nudp\t1725\tiden-ralp\ntcp\t1726\tiberiagames\nudp\t1726\tiberiagames\ntcp\t1727\twinddx\nudp\t1727\twinddx\ntcp\t1728\ttelindus\nudp\t1728\ttelindus\ntcp\t1729\tcitynl\nudp\t1729\tcitynl\ntcp\t1730\troketz\nudp\t1730\troketz\ntcp\t1731\tmsiccp\nudp\t1731\tmsiccp\ntcp\t1732\tproxim\nudp\t1732\tproxim\ntcp\t1733\tsiipat\nudp\t1733\tsiipat\ntcp\t1734\tcambertx-lm\nudp\t1734\tcambertx-lm\ntcp\t1735\tprivatechat\nudp\t1735\tprivatechat\ntcp\t1736\tstreet-stream\nudp\t1736\tstreet-stream\ntcp\t1737\tultimad\nudp\t1737\tultimad\ntcp\t1738\tgamegen1\nudp\t1738\tgamegen1\ntcp\t1739\twebaccess\nudp\t1739\twebaccess\ntcp\t1740\tencore\nudp\t1740\tencore\ntcp\t1741\tcisco-net-mgmt\nudp\t1741\tcisco-net-mgmt\ntcp\t1742\t3Com-nsd\nudp\t1742\t3Com-nsd\ntcp\t1743\tcinegrfx-lm\nudp\t1743\tcinegrfx-lm\ntcp\t1744\tncpm-ft\nudp\t1744\tncpm-ft\ntcp\t1745\tremote-winsock\nudp\t1745\tremote-winsock\ntcp\t1746\tftrapid-1\nudp\t1746\tftrapid-1\ntcp\t1747\tftrapid-2\nudp\t1747\tftrapid-2\ntcp\t1748\toracle-em1\nudp\t1748\toracle-em1\ntcp\t1749\taspen-services\nudp\t1749\taspen-services\ntcp\t1750\tsslp\nudp\t1750\tsslp\ntcp\t1751\tswiftnet\nudp\t1751\tswiftnet\ntcp\t1752\tlofr-lm\nudp\t1752\tlofr-lm\ntcp\t1753\tpredatar-comms\ntcp\t1754\toracle-em2\nudp\t1754\toracle-em2\ntcp\t1755\tms-streaming\nudp\t1755\tms-streaming\ntcp\t1756\tcapfast-lmd\nudp\t1756\tcapfast-lmd\ntcp\t1757\tcnhrp\nudp\t1757\tcnhrp\ntcp\t1758\ttftp-mcast\nudp\t1758\ttftp-mcast\ntcp\t1759\tspss-lm\nudp\t1759\tspss-lm\ntcp\t1760\twww-ldap-gw\nudp\t1760\twww-ldap-gw\ntcp\t1761\tcft-0\nudp\t1761\tcft-0\ntcp\t1762\tcft-1\nudp\t1762\tcft-1\ntcp\t1763\tcft-2\nudp\t1763\tcft-2\ntcp\t1764\tcft-3\nudp\t1764\tcft-3\ntcp\t1765\tcft-4\nudp\t1765\tcft-4\ntcp\t1766\tcft-5\nudp\t1766\tcft-5\ntcp\t1767\tcft-6\nudp\t1767\tcft-6\ntcp\t1768\tcft-7\nudp\t1768\tcft-7\ntcp\t1769\tbmc-net-adm\nudp\t1769\tbmc-net-adm\ntcp\t1770\tbmc-net-svc\nudp\t1770\tbmc-net-svc\ntcp\t1771\tvaultbase\nudp\t1771\tvaultbase\ntcp\t1772\tessweb-gw\nudp\t1772\tessweb-gw\ntcp\t1773\tkmscontrol\nudp\t1773\tkmscontrol\ntcp\t1774\tglobal-dtserv\nudp\t1774\tglobal-dtserv\ntcp\t1775\tvdab\ntcp\t1776\tfemis\nudp\t1776\tfemis\ntcp\t1777\tpowerguardian\nudp\t1777\tpowerguardian\ntcp\t1778\tprodigy-intrnet\nudp\t1778\tprodigy-intrnet\ntcp\t1779\tpharmasoft\nudp\t1779\tpharmasoft\ntcp\t1780\tdpkeyserv\nudp\t1780\tdpkeyserv\ntcp\t1781\tanswersoft-lm\nudp\t1781\tanswersoft-lm\ntcp\t1782\thp-hcip\nudp\t1782\thp-hcip\ntcp\t1784\tfinle-lm\nudp\t1784\tfinle-lm\ntcp\t1785\twindlm\nudp\t1785\twindlm\ntcp\t1786\tfunk-logger\nudp\t1786\tfunk-logger\ntcp\t1787\tfunk-license\nudp\t1787\tfunk-license\ntcp\t1788\tpsmond\nudp\t1788\tpsmond\ntcp\t1789\thello\nudp\t1789\thello\ntcp\t1790\tnmsp\nudp\t1790\tnmsp\ntcp\t1791\tea1\nudp\t1791\tea1\ntcp\t1792\tibm-dt-2\nudp\t1792\tibm-dt-2\ntcp\t1793\trsc-robot\nudp\t1793\trsc-robot\ntcp\t1794\tcera-bcm\nudp\t1794\tcera-bcm\ntcp\t1795\tdpi-proxy\nudp\t1795\tdpi-proxy\ntcp\t1796\tvocaltec-admin\nudp\t1796\tvocaltec-admin\ntcp\t1797\tuma\nudp\t1797\tuma\ntcp\t1798\tetp\nudp\t1798\tetp\ntcp\t1799\tnetrisk\nudp\t1799\tnetrisk\ntcp\t1800\tansys-lm\nudp\t1800\tansys-lm\ntcp\t1801\tmsmq\nudp\t1801\tmsmq\ntcp\t1802\tconcomp1\nudp\t1802\tconcomp1\ntcp\t1803\thp-hcip-gwy\nudp\t1803\thp-hcip-gwy\ntcp\t1804\tenl\nudp\t1804\tenl\ntcp\t1805\tenl-name\nudp\t1805\tenl-name\ntcp\t1806\tmusiconline\nudp\t1806\tmusiconline\ntcp\t1807\tfhsp\nudp\t1807\tfhsp\ntcp\t1808\toracle-vp2\nudp\t1808\toracle-vp2\ntcp\t1809\toracle-vp1\nudp\t1809\toracle-vp1\ntcp\t1810\tjerand-lm\nudp\t1810\tjerand-lm\ntcp\t1811\tscientia-sdb\nudp\t1811\tscientia-sdb\ntcp\t1812\tradius\nudp\t1812\tradius\ntcp\t1813\tradius-acct\nudp\t1813\tradius-acct\ntcp\t1814\ttdp-suite\nudp\t1814\ttdp-suite\ntcp\t1815\tmmpft\nudp\t1815\tmmpft\ntcp\t1816\tharp\nudp\t1816\tharp\ntcp\t1817\trkb-oscs\nudp\t1817\trkb-oscs\ntcp\t1818\tetftp\nudp\t1818\tetftp\ntcp\t1819\tplato-lm\nudp\t1819\tplato-lm\ntcp\t1820\tmcagent\nudp\t1820\tmcagent\ntcp\t1821\tdonnyworld\nudp\t1821\tdonnyworld\ntcp\t1822\tes-elmd\nudp\t1822\tes-elmd\ntcp\t1823\tunisys-lm\nudp\t1823\tunisys-lm\ntcp\t1824\tmetrics-pas\nudp\t1824\tmetrics-pas\ntcp\t1825\tdirecpc-video\nudp\t1825\tdirecpc-video\ntcp\t1826\tardt\nudp\t1826\tardt\ntcp\t1827\tasi\nudp\t1827\tasi\ntcp\t1828\titm-mcell-u\nudp\t1828\titm-mcell-u\ntcp\t1829\toptika-emedia\nudp\t1829\toptika-emedia\ntcp\t1830\tnet8-cman\nudp\t1830\tnet8-cman\ntcp\t1831\tmyrtle\nudp\t1831\tmyrtle\ntcp\t1832\ttht-treasure\nudp\t1832\ttht-treasure\ntcp\t1833\tudpradio\nudp\t1833\tudpradio\ntcp\t1834\tardusuni\nudp\t1834\tardusuni\ntcp\t1835\tardusmul\nudp\t1835\tardusmul\ntcp\t1836\tste-smsc\nudp\t1836\tste-smsc\ntcp\t1837\tcsoft1\nudp\t1837\tcsoft1\ntcp\t1838\ttalnet\nudp\t1838\ttalnet\ntcp\t1839\tnetopia-vo1\nudp\t1839\tnetopia-vo1\ntcp\t1840\tnetopia-vo2\nudp\t1840\tnetopia-vo2\ntcp\t1841\tnetopia-vo3\nudp\t1841\tnetopia-vo3\ntcp\t1842\tnetopia-vo4\nudp\t1842\tnetopia-vo4\ntcp\t1843\tnetopia-vo5\nudp\t1843\tnetopia-vo5\ntcp\t1844\tdirecpc-dll\nudp\t1844\tdirecpc-dll\ntcp\t1845\taltalink\nudp\t1845\taltalink\ntcp\t1846\ttunstall-pnc\nudp\t1846\ttunstall-pnc\ntcp\t1847\tslp-notify\nudp\t1847\tslp-notify\ntcp\t1848\tfjdocdist\nudp\t1848\tfjdocdist\ntcp\t1849\talpha-sms\nudp\t1849\talpha-sms\ntcp\t1850\tgsi\nudp\t1850\tgsi\ntcp\t1851\tctcd\nudp\t1851\tctcd\ntcp\t1852\tvirtual-time\nudp\t1852\tvirtual-time\ntcp\t1853\tvids-avtp\nudp\t1853\tvids-avtp\ntcp\t1854\tbuddy-draw\nudp\t1854\tbuddy-draw\ntcp\t1855\tfiorano-rtrsvc\nudp\t1855\tfiorano-rtrsvc\ntcp\t1856\tfiorano-msgsvc\nudp\t1856\tfiorano-msgsvc\ntcp\t1857\tdatacaptor\nudp\t1857\tdatacaptor\ntcp\t1858\tprivateark\nudp\t1858\tprivateark\ntcp\t1859\tgammafetchsvr\nudp\t1859\tgammafetchsvr\ntcp\t1860\tsunscalar-svc\nudp\t1860\tsunscalar-svc\ntcp\t1861\tlecroy-vicp\nudp\t1861\tlecroy-vicp\ntcp\t1862\tmysql-cm-agent\nudp\t1862\tmysql-cm-agent\ntcp\t1863\tmsnp\nudp\t1863\tmsnp\ntcp\t1864\tparadym-31port\nudp\t1864\tparadym-31port\ntcp\t1865\tentp\nudp\t1865\tentp\ntcp\t1866\tswrmi\nudp\t1866\tswrmi\ntcp\t1867\tudrive\nudp\t1867\tudrive\ntcp\t1868\tviziblebrowser\nudp\t1868\tviziblebrowser\ntcp\t1869\ttransact\nudp\t1869\ttransact\ntcp\t1870\tsunscalar-dns\nudp\t1870\tsunscalar-dns\ntcp\t1871\tcanocentral0\nudp\t1871\tcanocentral0\ntcp\t1872\tcanocentral1\nudp\t1872\tcanocentral1\ntcp\t1873\tfjmpjps\nudp\t1873\tfjmpjps\ntcp\t1874\tfjswapsnp\nudp\t1874\tfjswapsnp\ntcp\t1875\twestell-stats\nudp\t1875\twestell-stats\ntcp\t1876\tewcappsrv\nudp\t1876\tewcappsrv\ntcp\t1877\thp-webqosdb\nudp\t1877\thp-webqosdb\ntcp\t1878\tdrmsmc\nudp\t1878\tdrmsmc\ntcp\t1879\tnettgain-nms\nudp\t1879\tnettgain-nms\ntcp\t1880\tvsat-control\nudp\t1880\tvsat-control\ntcp\t1881\tibm-mqseries2\nudp\t1881\tibm-mqseries2\ntcp\t1882\tecsqdmn\nudp\t1882\tecsqdmn\ntcp\t1883\tmqtt\nudp\t1883\tmqtt\ntcp\t1884\tidmaps\nudp\t1884\tidmaps\ntcp\t1885\tvrtstrapserver\nudp\t1885\tvrtstrapserver\ntcp\t1886\tleoip\nudp\t1886\tleoip\ntcp\t1887\tfilex-lport\nudp\t1887\tfilex-lport\ntcp\t1888\tncconfig\nudp\t1888\tncconfig\ntcp\t1889\tunify-adapter\nudp\t1889\tunify-adapter\ntcp\t1890\twilkenlistener\nudp\t1890\twilkenlistener\ntcp\t1891\tchildkey-notif\nudp\t1891\tchildkey-notif\ntcp\t1892\tchildkey-ctrl\nudp\t1892\tchildkey-ctrl\ntcp\t1893\telad\nudp\t1893\telad\ntcp\t1894\to2server-port\nudp\t1894\to2server-port\ntcp\t1896\tb-novative-ls\nudp\t1896\tb-novative-ls\ntcp\t1897\tmetaagent\nudp\t1897\tmetaagent\ntcp\t1898\tcymtec-port\nudp\t1898\tcymtec-port\ntcp\t1899\tmc2studios\nudp\t1899\tmc2studios\ntcp\t1900\tssdp\nudp\t1900\tssdp\ntcp\t1901\tfjicl-tep-a\nudp\t1901\tfjicl-tep-a\ntcp\t1902\tfjicl-tep-b\nudp\t1902\tfjicl-tep-b\ntcp\t1903\tlinkname\nudp\t1903\tlinkname\ntcp\t1904\tfjicl-tep-c\nudp\t1904\tfjicl-tep-c\ntcp\t1905\tsugp\nudp\t1905\tsugp\ntcp\t1906\ttpmd\nudp\t1906\ttpmd\ntcp\t1907\tintrastar\nudp\t1907\tintrastar\ntcp\t1908\tdawn\nudp\t1908\tdawn\ntcp\t1909\tglobal-wlink\nudp\t1909\tglobal-wlink\ntcp\t1910\tultrabac\nudp\t1910\tultrabac\ntcp\t1911\tmtp\nudp\t1911\tmtp\ntcp\t1912\trhp-iibp\nudp\t1912\trhp-iibp\ntcp\t1913\tarmadp\nudp\t1913\tarmadp\ntcp\t1914\telm-momentum\nudp\t1914\telm-momentum\ntcp\t1915\tfacelink\nudp\t1915\tfacelink\ntcp\t1916\tpersona\nudp\t1916\tpersona\ntcp\t1917\tnoagent\nudp\t1917\tnoagent\ntcp\t1918\tcan-nds\nudp\t1918\tcan-nds\ntcp\t1919\tcan-dch\nudp\t1919\tcan-dch\ntcp\t1920\tcan-ferret\nudp\t1920\tcan-ferret\ntcp\t1921\tnoadmin\nudp\t1921\tnoadmin\ntcp\t1922\ttapestry\nudp\t1922\ttapestry\ntcp\t1923\tspice\nudp\t1923\tspice\ntcp\t1924\txiip\nudp\t1924\txiip\ntcp\t1925\tdiscovery-port\nudp\t1925\tdiscovery-port\ntcp\t1926\tegs\nudp\t1926\tegs\ntcp\t1927\tvidete-cipc\nudp\t1927\tvidete-cipc\ntcp\t1928\temsd-port\nudp\t1928\temsd-port\ntcp\t1929\tbandwiz-system\nudp\t1929\tbandwiz-system\ntcp\t1930\tdriveappserver\nudp\t1930\tdriveappserver\ntcp\t1931\tamdsched\nudp\t1931\tamdsched\ntcp\t1932\tctt-broker\nudp\t1932\tctt-broker\ntcp\t1933\txmapi\nudp\t1933\txmapi\ntcp\t1934\txaapi\nudp\t1934\txaapi\ntcp\t1935\tmacromedia-fcs\nudp\t1935\tmacromedia-fcs\ntcp\t1936\tjetcmeserver\nudp\t1936\tjetcmeserver\ntcp\t1937\tjwserver\nudp\t1937\tjwserver\ntcp\t1938\tjwclient\nudp\t1938\tjwclient\ntcp\t1939\tjvserver\nudp\t1939\tjvserver\ntcp\t1940\tjvclient\nudp\t1940\tjvclient\ntcp\t1941\tdic-aida\nudp\t1941\tdic-aida\ntcp\t1942\tres\nudp\t1942\tres\ntcp\t1943\tbeeyond-media\nudp\t1943\tbeeyond-media\ntcp\t1944\tclose-combat\nudp\t1944\tclose-combat\ntcp\t1945\tdialogic-elmd\nudp\t1945\tdialogic-elmd\ntcp\t1946\ttekpls\nudp\t1946\ttekpls\ntcp\t1947\tsentinelsrm\nudp\t1947\tsentinelsrm\ntcp\t1948\teye2eye\nudp\t1948\teye2eye\ntcp\t1949\tismaeasdaqlive\nudp\t1949\tismaeasdaqlive\ntcp\t1950\tismaeasdaqtest\nudp\t1950\tismaeasdaqtest\ntcp\t1951\tbcs-lmserver\nudp\t1951\tbcs-lmserver\ntcp\t1952\tmpnjsc\nudp\t1952\tmpnjsc\ntcp\t1953\trapidbase\nudp\t1953\trapidbase\ntcp\t1954\tabr-api\nudp\t1954\tabr-api\ntcp\t1955\tabr-secure\nudp\t1955\tabr-secure\ntcp\t1956\tvrtl-vmf-ds\nudp\t1956\tvrtl-vmf-ds\ntcp\t1957\tunix-status\nudp\t1957\tunix-status\ntcp\t1958\tdxadmind\nudp\t1958\tdxadmind\ntcp\t1959\tsimp-all\nudp\t1959\tsimp-all\ntcp\t1960\tnasmanager\nudp\t1960\tnasmanager\ntcp\t1961\tbts-appserver\nudp\t1961\tbts-appserver\ntcp\t1962\tbiap-mp\nudp\t1962\tbiap-mp\ntcp\t1963\twebmachine\nudp\t1963\twebmachine\ntcp\t1964\tsolid-e-engine\nudp\t1964\tsolid-e-engine\ntcp\t1965\ttivoli-npm\nudp\t1965\ttivoli-npm\ntcp\t1966\tslush\nudp\t1966\tslush\ntcp\t1967\tsns-quote\nudp\t1967\tsns-quote\ntcp\t1968\tlipsinc\nudp\t1968\tlipsinc\ntcp\t1969\tlipsinc1\nudp\t1969\tlipsinc1\ntcp\t1970\tnetop-rc\nudp\t1970\tnetop-rc\ntcp\t1971\tnetop-school\nudp\t1971\tnetop-school\ntcp\t1972\tintersys-cache\nudp\t1972\tintersys-cache\ntcp\t1973\tdlsrap\nudp\t1973\tdlsrap\ntcp\t1974\tdrp\nudp\t1974\tdrp\ntcp\t1975\ttcoflashagent\nudp\t1975\ttcoflashagent\ntcp\t1976\ttcoregagent\nudp\t1976\ttcoregagent\ntcp\t1977\ttcoaddressbook\nudp\t1977\ttcoaddressbook\ntcp\t1978\tunisql\nudp\t1978\tunisql\ntcp\t1979\tunisql-java\nudp\t1979\tunisql-java\ntcp\t1980\tpearldoc-xact\nudp\t1980\tpearldoc-xact\ntcp\t1981\tp2pq\nudp\t1981\tp2pq\ntcp\t1982\testamp\nudp\t1982\testamp\ntcp\t1983\tlhtp\nudp\t1983\tlhtp\ntcp\t1984\tbb\nudp\t1984\tbb\ntcp\t1985\thsrp\nudp\t1985\thsrp\ntcp\t1986\tlicensedaemon\nudp\t1986\tlicensedaemon\ntcp\t1987\ttr-rsrb-p1\nudp\t1987\ttr-rsrb-p1\ntcp\t1988\ttr-rsrb-p2\nudp\t1988\ttr-rsrb-p2\ntcp\t1989\ttr-rsrb-p3\nudp\t1989\ttr-rsrb-p3\ntcp\t1989\tmshnet\nudp\t1989\tmshnet\ntcp\t1990\tstun-p1\nudp\t1990\tstun-p1\ntcp\t1991\tstun-p2\nudp\t1991\tstun-p2\ntcp\t1992\tstun-p3\nudp\t1992\tstun-p3\ntcp\t1992\tipsendmsg\nudp\t1992\tipsendmsg\ntcp\t1993\tsnmp-tcp-port\nudp\t1993\tsnmp-tcp-port\ntcp\t1994\tstun-port\nudp\t1994\tstun-port\ntcp\t1995\tperf-port\nudp\t1995\tperf-port\ntcp\t1996\ttr-rsrb-port\nudp\t1996\ttr-rsrb-port\ntcp\t1997\tgdp-port\nudp\t1997\tgdp-port\ntcp\t1998\tx25-svc-port\nudp\t1998\tx25-svc-port\ntcp\t1999\ttcp-id-port\nudp\t1999\ttcp-id-port\ntcp\t2000\tcisco-sccp\nudp\t2000\tcisco-sccp\ntcp\t2001\tdc\nudp\t2001\twizard\ntcp\t2002\tglobe\nudp\t2002\tglobe\ntcp\t2003\tbrutus\nudp\t2003\tbrutus\ntcp\t2004\tmailbox\nudp\t2004\temce\ntcp\t2005\tberknet\nudp\t2005\toracle\ntcp\t2006\tinvokator\nudp\t2006\traid-cd\ntcp\t2007\tdectalk\nudp\t2007\traid-am\ntcp\t2008\tconf\nudp\t2008\tterminaldb\ntcp\t2009\tnews\nudp\t2009\twhosockami\ntcp\t2010\tsearch\nudp\t2010\tpipe-server\nudp\t2010\tpipe_server\ntcp\t2011\traid-cc\nudp\t2011\tservserv\ntcp\t2012\tttyinfo\nudp\t2012\traid-ac\ntcp\t2013\traid-am\nudp\t2013\traid-cd\ntcp\t2014\ttroff\nudp\t2014\traid-sf\ntcp\t2015\tcypress\nudp\t2015\traid-cs\ntcp\t2016\tbootserver\nudp\t2016\tbootserver\ntcp\t2017\tcypress-stat\nudp\t2017\tbootclient\ntcp\t2018\tterminaldb\nudp\t2018\trellpack\ntcp\t2019\twhosockami\nudp\t2019\tabout\ntcp\t2020\txinupageserver\nudp\t2020\txinupageserver\ntcp\t2021\tservexec\nudp\t2021\txinuexpansion1\ntcp\t2022\tdown\nudp\t2022\txinuexpansion2\ntcp\t2023\txinuexpansion3\nudp\t2023\txinuexpansion3\ntcp\t2024\txinuexpansion4\nudp\t2024\txinuexpansion4\ntcp\t2025\tellpack\nudp\t2025\txribs\ntcp\t2026\tscrabble\nudp\t2026\tscrabble\ntcp\t2027\tshadowserver\nudp\t2027\tshadowserver\ntcp\t2028\tsubmitserver\nudp\t2028\tsubmitserver\ntcp\t2029\thsrpv6\nudp\t2029\thsrpv6\ntcp\t2030\tdevice2\nudp\t2030\tdevice2\ntcp\t2031\tmobrien-chat\nudp\t2031\tmobrien-chat\ntcp\t2032\tblackboard\nudp\t2032\tblackboard\ntcp\t2033\tglogger\nudp\t2033\tglogger\ntcp\t2034\tscoremgr\nudp\t2034\tscoremgr\ntcp\t2035\timsldoc\nudp\t2035\timsldoc\ntcp\t2036\te-dpnet\nudp\t2036\te-dpnet\ntcp\t2037\tapplus\nudp\t2037\tapplus\ntcp\t2038\tobjectmanager\nudp\t2038\tobjectmanager\ntcp\t2039\tprizma\nudp\t2039\tprizma\ntcp\t2040\tlam\nudp\t2040\tlam\ntcp\t2041\tinterbase\nudp\t2041\tinterbase\ntcp\t2042\tisis\nudp\t2042\tisis\ntcp\t2043\tisis-bcast\nudp\t2043\tisis-bcast\ntcp\t2044\trimsl\nudp\t2044\trimsl\ntcp\t2045\tcdfunc\nudp\t2045\tcdfunc\ntcp\t2046\tsdfunc\nudp\t2046\tsdfunc\ntcp\t2047\tdls\nudp\t2047\tdls\ntcp\t2048\tdls-monitor\nudp\t2048\tdls-monitor\ntcp\t2049\tshilp\nudp\t2049\tshilp\ntcp\t2049\tnfs\nudp\t2049\tnfs\ntcp\t2050\tav-emb-config\nudp\t2050\tav-emb-config\ntcp\t2051\tepnsdp\nudp\t2051\tepnsdp\ntcp\t2052\tclearvisn\nudp\t2052\tclearvisn\ntcp\t2053\tlot105-ds-upd\nudp\t2053\tlot105-ds-upd\ntcp\t2054\tweblogin\nudp\t2054\tweblogin\ntcp\t2055\tiop\nudp\t2055\tiop\ntcp\t2056\tomnisky\nudp\t2056\tomnisky\ntcp\t2057\trich-cp\nudp\t2057\trich-cp\ntcp\t2058\tnewwavesearch\nudp\t2058\tnewwavesearch\ntcp\t2059\tbmc-messaging\nudp\t2059\tbmc-messaging\ntcp\t2060\tteleniumdaemon\nudp\t2060\tteleniumdaemon\ntcp\t2061\tnetmount\nudp\t2061\tnetmount\ntcp\t2062\ticg-swp\nudp\t2062\ticg-swp\ntcp\t2063\ticg-bridge\nudp\t2063\ticg-bridge\ntcp\t2064\ticg-iprelay\nudp\t2064\ticg-iprelay\ntcp\t2065\tdlsrpn\nudp\t2065\tdlsrpn\ntcp\t2066\taura\nudp\t2066\taura\ntcp\t2067\tdlswpn\nudp\t2067\tdlswpn\ntcp\t2068\tavauthsrvprtcl\nudp\t2068\tavauthsrvprtcl\ntcp\t2069\tevent-port\nudp\t2069\tevent-port\ntcp\t2070\tah-esp-encap\nudp\t2070\tah-esp-encap\ntcp\t2071\tacp-port\nudp\t2071\tacp-port\ntcp\t2072\tmsync\nudp\t2072\tmsync\ntcp\t2073\tgxs-data-port\nudp\t2073\tgxs-data-port\ntcp\t2074\tvrtl-vmf-sa\nudp\t2074\tvrtl-vmf-sa\ntcp\t2075\tnewlixengine\nudp\t2075\tnewlixengine\ntcp\t2076\tnewlixconfig\nudp\t2076\tnewlixconfig\ntcp\t2077\ttsrmagt\nudp\t2077\ttsrmagt\ntcp\t2078\ttpcsrvr\nudp\t2078\ttpcsrvr\ntcp\t2079\tidware-router\nudp\t2079\tidware-router\ntcp\t2080\tautodesk-nlm\nudp\t2080\tautodesk-nlm\ntcp\t2081\tkme-trap-port\nudp\t2081\tkme-trap-port\ntcp\t2082\tinfowave\nudp\t2082\tinfowave\ntcp\t2083\tradsec\nudp\t2083\tradsec\ntcp\t2084\tsunclustergeo\nudp\t2084\tsunclustergeo\ntcp\t2085\tada-cip\nudp\t2085\tada-cip\ntcp\t2086\tgnunet\nudp\t2086\tgnunet\ntcp\t2087\teli\nudp\t2087\teli\ntcp\t2088\tip-blf\nudp\t2088\tip-blf\ntcp\t2089\tsep\nudp\t2089\tsep\ntcp\t2090\tlrp\nudp\t2090\tlrp\ntcp\t2091\tprp\nudp\t2091\tprp\ntcp\t2092\tdescent3\nudp\t2092\tdescent3\ntcp\t2093\tnbx-cc\nudp\t2093\tnbx-cc\ntcp\t2094\tnbx-au\nudp\t2094\tnbx-au\ntcp\t2095\tnbx-ser\nudp\t2095\tnbx-ser\ntcp\t2096\tnbx-dir\nudp\t2096\tnbx-dir\ntcp\t2097\tjetformpreview\nudp\t2097\tjetformpreview\ntcp\t2098\tdialog-port\nudp\t2098\tdialog-port\ntcp\t2099\th2250-annex-g\nudp\t2099\th2250-annex-g\ntcp\t2100\tamiganetfs\nudp\t2100\tamiganetfs\ntcp\t2101\trtcm-sc104\nudp\t2101\trtcm-sc104\ntcp\t2102\tzephyr-srv\nudp\t2102\tzephyr-srv\ntcp\t2103\tzephyr-clt\nudp\t2103\tzephyr-clt\ntcp\t2104\tzephyr-hm\nudp\t2104\tzephyr-hm\ntcp\t2105\tminipay\nudp\t2105\tminipay\ntcp\t2106\tmzap\nudp\t2106\tmzap\ntcp\t2107\tbintec-admin\nudp\t2107\tbintec-admin\ntcp\t2108\tcomcam\nudp\t2108\tcomcam\ntcp\t2109\tergolight\nudp\t2109\tergolight\ntcp\t2110\tumsp\nudp\t2110\tumsp\ntcp\t2111\tdsatp\nudp\t2111\tdsatp\ntcp\t2112\tidonix-metanet\nudp\t2112\tidonix-metanet\ntcp\t2113\thsl-storm\nudp\t2113\thsl-storm\ntcp\t2114\tariascribe\nudp\t2114\tariascribe\ntcp\t2115\tkdm\nudp\t2115\tkdm\ntcp\t2116\tccowcmr\nudp\t2116\tccowcmr\ntcp\t2117\tmentaclient\nudp\t2117\tmentaclient\ntcp\t2118\tmentaserver\nudp\t2118\tmentaserver\ntcp\t2119\tgsigatekeeper\nudp\t2119\tgsigatekeeper\ntcp\t2120\tqencp\nudp\t2120\tqencp\ntcp\t2121\tscientia-ssdb\nudp\t2121\tscientia-ssdb\ntcp\t2122\tcaupc-remote\nudp\t2122\tcaupc-remote\ntcp\t2123\tgtp-control\nudp\t2123\tgtp-control\ntcp\t2124\telatelink\nudp\t2124\telatelink\ntcp\t2125\tlockstep\nudp\t2125\tlockstep\ntcp\t2126\tpktcable-cops\nudp\t2126\tpktcable-cops\ntcp\t2127\tindex-pc-wb\nudp\t2127\tindex-pc-wb\ntcp\t2128\tnet-steward\nudp\t2128\tnet-steward\ntcp\t2129\tcs-live\nudp\t2129\tcs-live\ntcp\t2130\txds\nudp\t2130\txds\ntcp\t2131\tavantageb2b\nudp\t2131\tavantageb2b\ntcp\t2132\tsolera-epmap\nudp\t2132\tsolera-epmap\ntcp\t2133\tzymed-zpp\nudp\t2133\tzymed-zpp\ntcp\t2134\tavenue\nudp\t2134\tavenue\ntcp\t2135\tgris\nudp\t2135\tgris\ntcp\t2136\tappworxsrv\nudp\t2136\tappworxsrv\ntcp\t2137\tconnect\nudp\t2137\tconnect\ntcp\t2138\tunbind-cluster\nudp\t2138\tunbind-cluster\ntcp\t2139\tias-auth\nudp\t2139\tias-auth\ntcp\t2140\tias-reg\nudp\t2140\tias-reg\ntcp\t2141\tias-admind\nudp\t2141\tias-admind\ntcp\t2142\ttdmoip\nudp\t2142\ttdmoip\ntcp\t2143\tlv-jc\nudp\t2143\tlv-jc\ntcp\t2144\tlv-ffx\nudp\t2144\tlv-ffx\ntcp\t2145\tlv-pici\nudp\t2145\tlv-pici\ntcp\t2146\tlv-not\nudp\t2146\tlv-not\ntcp\t2147\tlv-auth\nudp\t2147\tlv-auth\ntcp\t2148\tveritas-ucl\nudp\t2148\tveritas-ucl\ntcp\t2149\tacptsys\nudp\t2149\tacptsys\ntcp\t2150\tdynamic3d\nudp\t2150\tdynamic3d\ntcp\t2151\tdocent\nudp\t2151\tdocent\ntcp\t2152\tgtp-user\nudp\t2152\tgtp-user\ntcp\t2153\tctlptc\nudp\t2153\tctlptc\ntcp\t2154\tstdptc\nudp\t2154\tstdptc\ntcp\t2155\tbrdptc\nudp\t2155\tbrdptc\ntcp\t2156\ttrp\nudp\t2156\ttrp\ntcp\t2157\txnds\nudp\t2157\txnds\ntcp\t2158\ttouchnetplus\nudp\t2158\ttouchnetplus\ntcp\t2159\tgdbremote\nudp\t2159\tgdbremote\ntcp\t2160\tapc-2160\nudp\t2160\tapc-2160\ntcp\t2161\tapc-2161\nudp\t2161\tapc-2161\ntcp\t2162\tnavisphere\nudp\t2162\tnavisphere\ntcp\t2163\tnavisphere-sec\nudp\t2163\tnavisphere-sec\ntcp\t2164\tddns-v3\nudp\t2164\tddns-v3\ntcp\t2165\tx-bone-api\nudp\t2165\tx-bone-api\ntcp\t2166\tiwserver\nudp\t2166\tiwserver\ntcp\t2167\traw-serial\nudp\t2167\traw-serial\ntcp\t2168\teasy-soft-mux\nudp\t2168\teasy-soft-mux\ntcp\t2169\tbrain\nudp\t2169\tbrain\ntcp\t2170\teyetv\nudp\t2170\teyetv\ntcp\t2171\tmsfw-storage\nudp\t2171\tmsfw-storage\ntcp\t2172\tmsfw-s-storage\nudp\t2172\tmsfw-s-storage\ntcp\t2173\tmsfw-replica\nudp\t2173\tmsfw-replica\ntcp\t2174\tmsfw-array\nudp\t2174\tmsfw-array\ntcp\t2175\tairsync\nudp\t2175\tairsync\ntcp\t2176\trapi\nudp\t2176\trapi\ntcp\t2177\tqwave\nudp\t2177\tqwave\ntcp\t2178\tbitspeer\nudp\t2178\tbitspeer\ntcp\t2179\tvmrdp\nudp\t2179\tvmrdp\ntcp\t2180\tmc-gt-srv\nudp\t2180\tmc-gt-srv\ntcp\t2181\teforward\nudp\t2181\teforward\ntcp\t2182\tcgn-stat\nudp\t2182\tcgn-stat\ntcp\t2183\tcgn-config\nudp\t2183\tcgn-config\ntcp\t2184\tnvd\nudp\t2184\tnvd\ntcp\t2185\tonbase-dds\nudp\t2185\tonbase-dds\ntcp\t2186\tgtaua\nudp\t2186\tgtaua\ntcp\t2187\tssmc\nudp\t2187\tssmd\ntcp\t2188\tradware-rpm\ntcp\t2189\tradware-rpm-s\ntcp\t2190\ttivoconnect\nudp\t2190\ttivoconnect\ntcp\t2191\ttvbus\nudp\t2191\ttvbus\ntcp\t2192\tasdis\nudp\t2192\tasdis\ntcp\t2193\tdrwcs\nudp\t2193\tdrwcs\ntcp\t2197\tmnp-exchange\nudp\t2197\tmnp-exchange\ntcp\t2198\tonehome-remote\nudp\t2198\tonehome-remote\ntcp\t2199\tonehome-help\nudp\t2199\tonehome-help\ntcp\t2200\tici\nudp\t2200\tici\ntcp\t2201\tats\nudp\t2201\tats\ntcp\t2202\timtc-map\nudp\t2202\timtc-map\ntcp\t2203\tb2-runtime\nudp\t2203\tb2-runtime\ntcp\t2204\tb2-license\nudp\t2204\tb2-license\ntcp\t2205\tjps\nudp\t2205\tjps\ntcp\t2206\thpocbus\nudp\t2206\thpocbus\ntcp\t2207\thpssd\nudp\t2207\thpssd\ntcp\t2208\thpiod\nudp\t2208\thpiod\ntcp\t2209\trimf-ps\nudp\t2209\trimf-ps\ntcp\t2210\tnoaaport\nudp\t2210\tnoaaport\ntcp\t2211\temwin\nudp\t2211\temwin\ntcp\t2212\tleecoposserver\nudp\t2212\tleecoposserver\ntcp\t2213\tkali\nudp\t2213\tkali\ntcp\t2214\trpi\nudp\t2214\trpi\ntcp\t2215\tipcore\nudp\t2215\tipcore\ntcp\t2216\tvtu-comms\nudp\t2216\tvtu-comms\ntcp\t2217\tgotodevice\nudp\t2217\tgotodevice\ntcp\t2218\tbounzza\nudp\t2218\tbounzza\ntcp\t2219\tnetiq-ncap\nudp\t2219\tnetiq-ncap\ntcp\t2220\tnetiq\nudp\t2220\tnetiq\ntcp\t2221\tethernet-ip-s\nudp\t2221\tethernet-ip-s\ntcp\t2222\tEtherNet-IP-1\ntcp\t2222\tEtherNet/IP-1\nudp\t2222\tEtherNet-IP-1\nudp\t2222\tEtherNet/IP-1\ntcp\t2223\trockwell-csp2\nudp\t2223\trockwell-csp2\ntcp\t2224\tefi-mg\nudp\t2224\tefi-mg\ntcp\t2225\trcip-itu\ntcp\t2226\tdi-drm\nudp\t2226\tdi-drm\ntcp\t2227\tdi-msg\nudp\t2227\tdi-msg\ntcp\t2228\tehome-ms\nudp\t2228\tehome-ms\ntcp\t2229\tdatalens\nudp\t2229\tdatalens\ntcp\t2230\tqueueadm\nudp\t2230\tqueueadm\ntcp\t2231\twimaxasncp\nudp\t2231\twimaxasncp\ntcp\t2232\tivs-video\nudp\t2232\tivs-video\ntcp\t2233\tinfocrypt\nudp\t2233\tinfocrypt\ntcp\t2234\tdirectplay\nudp\t2234\tdirectplay\ntcp\t2235\tsercomm-wlink\nudp\t2235\tsercomm-wlink\ntcp\t2236\tnani\nudp\t2236\tnani\ntcp\t2237\toptech-port1-lm\nudp\t2237\toptech-port1-lm\ntcp\t2238\taviva-sna\nudp\t2238\taviva-sna\ntcp\t2239\timagequery\nudp\t2239\timagequery\ntcp\t2240\trecipe\nudp\t2240\trecipe\ntcp\t2241\tivsd\nudp\t2241\tivsd\ntcp\t2242\tfoliocorp\nudp\t2242\tfoliocorp\ntcp\t2243\tmagicom\nudp\t2243\tmagicom\ntcp\t2244\tnmsserver\nudp\t2244\tnmsserver\ntcp\t2245\thao\nudp\t2245\thao\ntcp\t2246\tpc-mta-addrmap\nudp\t2246\tpc-mta-addrmap\ntcp\t2247\tantidotemgrsvr\nudp\t2247\tantidotemgrsvr\ntcp\t2248\tums\nudp\t2248\tums\ntcp\t2249\trfmp\nudp\t2249\trfmp\ntcp\t2250\tremote-collab\nudp\t2250\tremote-collab\ntcp\t2251\tdif-port\nudp\t2251\tdif-port\ntcp\t2252\tnjenet-ssl\nudp\t2252\tnjenet-ssl\ntcp\t2253\tdtv-chan-req\nudp\t2253\tdtv-chan-req\ntcp\t2254\tseispoc\nudp\t2254\tseispoc\ntcp\t2255\tvrtp\nudp\t2255\tvrtp\ntcp\t2256\tpcc-mfp\nudp\t2256\tpcc-mfp\ntcp\t2257\tsimple-tx-rx\nudp\t2257\tsimple-tx-rx\ntcp\t2258\trcts\nudp\t2258\trcts\ntcp\t2260\tapc-2260\nudp\t2260\tapc-2260\ntcp\t2261\tcomotionmaster\nudp\t2261\tcomotionmaster\ntcp\t2262\tcomotionback\nudp\t2262\tcomotionback\ntcp\t2263\tecwcfg\nudp\t2263\tecwcfg\ntcp\t2264\tapx500api-1\nudp\t2264\tapx500api-1\ntcp\t2265\tapx500api-2\nudp\t2265\tapx500api-2\ntcp\t2266\tmfserver\nudp\t2266\tmfserver\ntcp\t2267\tontobroker\nudp\t2267\tontobroker\ntcp\t2268\tamt\nudp\t2268\tamt\ntcp\t2269\tmikey\nudp\t2269\tmikey\ntcp\t2270\tstarschool\nudp\t2270\tstarschool\ntcp\t2271\tmmcals\nudp\t2271\tmmcals\ntcp\t2272\tmmcal\nudp\t2272\tmmcal\ntcp\t2273\tmysql-im\nudp\t2273\tmysql-im\ntcp\t2274\tpcttunnell\nudp\t2274\tpcttunnell\ntcp\t2275\tibridge-data\nudp\t2275\tibridge-data\ntcp\t2276\tibridge-mgmt\nudp\t2276\tibridge-mgmt\ntcp\t2277\tbluectrlproxy\nudp\t2277\tbluectrlproxy\ntcp\t2278\ts3db\nudp\t2278\ts3db\ntcp\t2279\txmquery\nudp\t2279\txmquery\ntcp\t2280\tlnvpoller\nudp\t2280\tlnvpoller\ntcp\t2281\tlnvconsole\nudp\t2281\tlnvconsole\ntcp\t2282\tlnvalarm\nudp\t2282\tlnvalarm\ntcp\t2283\tlnvstatus\nudp\t2283\tlnvstatus\ntcp\t2284\tlnvmaps\nudp\t2284\tlnvmaps\ntcp\t2285\tlnvmailmon\nudp\t2285\tlnvmailmon\ntcp\t2286\tnas-metering\nudp\t2286\tnas-metering\ntcp\t2287\tdna\nudp\t2287\tdna\ntcp\t2288\tnetml\nudp\t2288\tnetml\ntcp\t2289\tdict-lookup\nudp\t2289\tdict-lookup\ntcp\t2290\tsonus-logging\nudp\t2290\tsonus-logging\ntcp\t2291\teapsp\nudp\t2291\teapsp\ntcp\t2292\tmib-streaming\nudp\t2292\tmib-streaming\ntcp\t2293\tnpdbgmngr\nudp\t2293\tnpdbgmngr\ntcp\t2294\tkonshus-lm\nudp\t2294\tkonshus-lm\ntcp\t2295\tadvant-lm\nudp\t2295\tadvant-lm\ntcp\t2296\ttheta-lm\nudp\t2296\ttheta-lm\ntcp\t2297\td2k-datamover1\nudp\t2297\td2k-datamover1\ntcp\t2298\td2k-datamover2\nudp\t2298\td2k-datamover2\ntcp\t2299\tpc-telecommute\nudp\t2299\tpc-telecommute\ntcp\t2300\tcvmmon\nudp\t2300\tcvmmon\ntcp\t2301\tcpq-wbem\nudp\t2301\tcpq-wbem\ntcp\t2302\tbinderysupport\nudp\t2302\tbinderysupport\ntcp\t2303\tproxy-gateway\nudp\t2303\tproxy-gateway\ntcp\t2304\tattachmate-uts\nudp\t2304\tattachmate-uts\ntcp\t2305\tmt-scaleserver\nudp\t2305\tmt-scaleserver\ntcp\t2306\ttappi-boxnet\nudp\t2306\ttappi-boxnet\ntcp\t2307\tpehelp\nudp\t2307\tpehelp\ntcp\t2308\tsdhelp\nudp\t2308\tsdhelp\ntcp\t2309\tsdserver\nudp\t2309\tsdserver\ntcp\t2310\tsdclient\nudp\t2310\tsdclient\ntcp\t2311\tmessageservice\nudp\t2311\tmessageservice\ntcp\t2312\twanscaler\nudp\t2312\twanscaler\ntcp\t2313\tiapp\nudp\t2313\tiapp\ntcp\t2314\tcr-websystems\nudp\t2314\tcr-websystems\ntcp\t2315\tprecise-sft\nudp\t2315\tprecise-sft\ntcp\t2316\tsent-lm\nudp\t2316\tsent-lm\ntcp\t2317\tattachmate-g32\nudp\t2317\tattachmate-g32\ntcp\t2318\tcadencecontrol\nudp\t2318\tcadencecontrol\ntcp\t2319\tinfolibria\nudp\t2319\tinfolibria\ntcp\t2320\tsiebel-ns\nudp\t2320\tsiebel-ns\ntcp\t2321\trdlap\nudp\t2321\trdlap\ntcp\t2322\tofsd\nudp\t2322\tofsd\ntcp\t2323\t3d-nfsd\nudp\t2323\t3d-nfsd\ntcp\t2324\tcosmocall\nudp\t2324\tcosmocall\ntcp\t2325\tansysli\nudp\t2325\tansysli\ntcp\t2326\tidcp\nudp\t2326\tidcp\ntcp\t2327\txingcsm\nudp\t2327\txingcsm\ntcp\t2328\tnetrix-sftm\nudp\t2328\tnetrix-sftm\ntcp\t2329\tnvd\nudp\t2329\tnvd\ntcp\t2330\ttscchat\nudp\t2330\ttscchat\ntcp\t2331\tagentview\nudp\t2331\tagentview\ntcp\t2332\trcc-host\nudp\t2332\trcc-host\ntcp\t2333\tsnapp\nudp\t2333\tsnapp\ntcp\t2334\tace-client\nudp\t2334\tace-client\ntcp\t2335\tace-proxy\nudp\t2335\tace-proxy\ntcp\t2336\tappleugcontrol\nudp\t2336\tappleugcontrol\ntcp\t2337\tideesrv\nudp\t2337\tideesrv\ntcp\t2338\tnorton-lambert\nudp\t2338\tnorton-lambert\ntcp\t2339\t3com-webview\nudp\t2339\t3com-webview\ntcp\t2340\twrs-registry\ntcp\t2340\twrs_registry\nudp\t2340\twrs-registry\nudp\t2340\twrs_registry\ntcp\t2341\txiostatus\nudp\t2341\txiostatus\ntcp\t2342\tmanage-exec\nudp\t2342\tmanage-exec\ntcp\t2343\tnati-logos\nudp\t2343\tnati-logos\ntcp\t2344\tfcmsys\nudp\t2344\tfcmsys\ntcp\t2345\tdbm\nudp\t2345\tdbm\ntcp\t2346\tredstorm-join\ntcp\t2346\tredstorm_join\nudp\t2346\tredstorm-join\nudp\t2346\tredstorm_join\ntcp\t2347\tredstorm-find\ntcp\t2347\tredstorm_find\nudp\t2347\tredstorm-find\nudp\t2347\tredstorm_find\ntcp\t2348\tredstorm-info\ntcp\t2348\tredstorm_info\nudp\t2348\tredstorm-info\nudp\t2348\tredstorm_info\ntcp\t2349\tredstorm-diag\ntcp\t2349\tredstorm_diag\nudp\t2349\tredstorm-diag\nudp\t2349\tredstorm_diag\ntcp\t2350\tpsbserver\nudp\t2350\tpsbserver\ntcp\t2351\tpsrserver\nudp\t2351\tpsrserver\ntcp\t2352\tpslserver\nudp\t2352\tpslserver\ntcp\t2353\tpspserver\nudp\t2353\tpspserver\ntcp\t2354\tpsprserver\nudp\t2354\tpsprserver\ntcp\t2355\tpsdbserver\nudp\t2355\tpsdbserver\ntcp\t2356\tgxtelmd\nudp\t2356\tgxtelmd\ntcp\t2357\tunihub-server\nudp\t2357\tunihub-server\ntcp\t2358\tfutrix\nudp\t2358\tfutrix\ntcp\t2359\tflukeserver\nudp\t2359\tflukeserver\ntcp\t2360\tnexstorindltd\nudp\t2360\tnexstorindltd\ntcp\t2361\ttl1\nudp\t2361\ttl1\ntcp\t2362\tdigiman\nudp\t2362\tdigiman\ntcp\t2363\tmediacntrlnfsd\nudp\t2363\tmediacntrlnfsd\ntcp\t2364\toi-2000\nudp\t2364\toi-2000\ntcp\t2365\tdbref\nudp\t2365\tdbref\ntcp\t2366\tqip-login\nudp\t2366\tqip-login\ntcp\t2367\tservice-ctrl\nudp\t2367\tservice-ctrl\ntcp\t2368\topentable\nudp\t2368\topentable\ntcp\t2370\tl3-hbmon\nudp\t2370\tl3-hbmon\ntcp\t2371\thp-rda\ntcp\t2372\tlanmessenger\nudp\t2372\tlanmessenger\ntcp\t2373\tremographlm\ntcp\t2374\thydra\ntcp\t2375\tdocker\ntcp\t2376\tdocker-s\ntcp\t2377\tswarm\ntcp\t2379\tetcd-client\ntcp\t2380\tetcd-server\ntcp\t2381\tcompaq-https\nudp\t2381\tcompaq-https\ntcp\t2382\tms-olap3\nudp\t2382\tms-olap3\ntcp\t2383\tms-olap4\nudp\t2383\tms-olap4\ntcp\t2384\tsd-request\nudp\t2384\tsd-capacity\ntcp\t2385\tsd-data\nudp\t2385\tsd-data\ntcp\t2386\tvirtualtape\nudp\t2386\tvirtualtape\ntcp\t2387\tvsamredirector\nudp\t2387\tvsamredirector\ntcp\t2388\tmynahautostart\nudp\t2388\tmynahautostart\ntcp\t2389\tovsessionmgr\nudp\t2389\tovsessionmgr\ntcp\t2390\trsmtp\nudp\t2390\trsmtp\ntcp\t2391\t3com-net-mgmt\nudp\t2391\t3com-net-mgmt\ntcp\t2392\ttacticalauth\nudp\t2392\ttacticalauth\ntcp\t2393\tms-olap1\nudp\t2393\tms-olap1\ntcp\t2394\tms-olap2\nudp\t2394\tms-olap2\ntcp\t2395\tlan900-remote\ntcp\t2395\tlan900_remote\nudp\t2395\tlan900-remote\nudp\t2395\tlan900_remote\ntcp\t2396\twusage\nudp\t2396\twusage\ntcp\t2397\tncl\nudp\t2397\tncl\ntcp\t2398\torbiter\nudp\t2398\torbiter\ntcp\t2399\tfmpro-fdal\nudp\t2399\tfmpro-fdal\ntcp\t2400\topequus-server\nudp\t2400\topequus-server\ntcp\t2401\tcvspserver\nudp\t2401\tcvspserver\ntcp\t2402\ttaskmaster2000\nudp\t2402\ttaskmaster2000\ntcp\t2403\ttaskmaster2000\nudp\t2403\ttaskmaster2000\ntcp\t2404\tiec-104\nudp\t2404\tiec-104\ntcp\t2405\ttrc-netpoll\nudp\t2405\ttrc-netpoll\ntcp\t2406\tjediserver\nudp\t2406\tjediserver\ntcp\t2407\torion\nudp\t2407\torion\ntcp\t2408\trailgun-webaccl\ntcp\t2409\tsns-protocol\nudp\t2409\tsns-protocol\ntcp\t2410\tvrts-registry\nudp\t2410\tvrts-registry\ntcp\t2411\tnetwave-ap-mgmt\nudp\t2411\tnetwave-ap-mgmt\ntcp\t2412\tcdn\nudp\t2412\tcdn\ntcp\t2413\torion-rmi-reg\nudp\t2413\torion-rmi-reg\ntcp\t2414\tbeeyond\nudp\t2414\tbeeyond\ntcp\t2415\tcodima-rtp\nudp\t2415\tcodima-rtp\ntcp\t2416\trmtserver\nudp\t2416\trmtserver\ntcp\t2417\tcomposit-server\nudp\t2417\tcomposit-server\ntcp\t2418\tcas\nudp\t2418\tcas\ntcp\t2419\tattachmate-s2s\nudp\t2419\tattachmate-s2s\ntcp\t2420\tdslremote-mgmt\nudp\t2420\tdslremote-mgmt\ntcp\t2421\tg-talk\nudp\t2421\tg-talk\ntcp\t2422\tcrmsbits\nudp\t2422\tcrmsbits\ntcp\t2423\trnrp\nudp\t2423\trnrp\ntcp\t2424\tkofax-svr\nudp\t2424\tkofax-svr\ntcp\t2425\tfjitsuappmgr\nudp\t2425\tfjitsuappmgr\ntcp\t2426\tvcmp\nudp\t2426\tvcmp\ntcp\t2427\tmgcp-gateway\nudp\t2427\tmgcp-gateway\ntcp\t2428\tott\nudp\t2428\tott\ntcp\t2429\tft-role\nudp\t2429\tft-role\ntcp\t2430\tvenus\nudp\t2430\tvenus\ntcp\t2431\tvenus-se\nudp\t2431\tvenus-se\ntcp\t2432\tcodasrv\nudp\t2432\tcodasrv\ntcp\t2433\tcodasrv-se\nudp\t2433\tcodasrv-se\ntcp\t2434\tpxc-epmap\nudp\t2434\tpxc-epmap\ntcp\t2435\toptilogic\nudp\t2435\toptilogic\ntcp\t2436\ttopx\nudp\t2436\ttopx\ntcp\t2437\tunicontrol\nudp\t2437\tunicontrol\ntcp\t2438\tmsp\nudp\t2438\tmsp\ntcp\t2439\tsybasedbsynch\nudp\t2439\tsybasedbsynch\ntcp\t2440\tspearway\nudp\t2440\tspearway\ntcp\t2441\tpvsw-inet\nudp\t2441\tpvsw-inet\ntcp\t2442\tnetangel\nudp\t2442\tnetangel\ntcp\t2443\tpowerclientcsf\nudp\t2443\tpowerclientcsf\ntcp\t2444\tbtpp2sectrans\nudp\t2444\tbtpp2sectrans\ntcp\t2445\tdtn1\nudp\t2445\tdtn1\ntcp\t2446\tbues-service\ntcp\t2446\tbues_service\nudp\t2446\tbues-service\nudp\t2446\tbues_service\ntcp\t2447\tovwdb\nudp\t2447\tovwdb\ntcp\t2448\thpppssvr\nudp\t2448\thpppssvr\ntcp\t2449\tratl\nudp\t2449\tratl\ntcp\t2450\tnetadmin\nudp\t2450\tnetadmin\ntcp\t2451\tnetchat\nudp\t2451\tnetchat\ntcp\t2452\tsnifferclient\nudp\t2452\tsnifferclient\ntcp\t2453\tmadge-ltd\nudp\t2453\tmadge-ltd\ntcp\t2454\tindx-dds\nudp\t2454\tindx-dds\ntcp\t2455\twago-io-system\nudp\t2455\twago-io-system\ntcp\t2456\taltav-remmgt\nudp\t2456\taltav-remmgt\ntcp\t2457\trapido-ip\nudp\t2457\trapido-ip\ntcp\t2458\tgriffin\nudp\t2458\tgriffin\ntcp\t2459\tcommunity\nudp\t2459\tcommunity\ntcp\t2460\tms-theater\nudp\t2460\tms-theater\ntcp\t2461\tqadmifoper\nudp\t2461\tqadmifoper\ntcp\t2462\tqadmifevent\nudp\t2462\tqadmifevent\ntcp\t2463\tlsi-raid-mgmt\nudp\t2463\tlsi-raid-mgmt\ntcp\t2464\tdirecpc-si\nudp\t2464\tdirecpc-si\ntcp\t2465\tlbm\nudp\t2465\tlbm\ntcp\t2466\tlbf\nudp\t2466\tlbf\ntcp\t2467\thigh-criteria\nudp\t2467\thigh-criteria\ntcp\t2468\tqip-msgd\nudp\t2468\tqip-msgd\ntcp\t2469\tmti-tcs-comm\nudp\t2469\tmti-tcs-comm\ntcp\t2470\ttaskman-port\nudp\t2470\ttaskman-port\ntcp\t2471\tseaodbc\nudp\t2471\tseaodbc\ntcp\t2472\tc3\nudp\t2472\tc3\ntcp\t2473\taker-cdp\nudp\t2473\taker-cdp\ntcp\t2474\tvitalanalysis\nudp\t2474\tvitalanalysis\ntcp\t2475\tace-server\nudp\t2475\tace-server\ntcp\t2476\tace-svr-prop\nudp\t2476\tace-svr-prop\ntcp\t2477\tssm-cvs\nudp\t2477\tssm-cvs\ntcp\t2478\tssm-cssps\nudp\t2478\tssm-cssps\ntcp\t2479\tssm-els\nudp\t2479\tssm-els\ntcp\t2480\tpowerexchange\nudp\t2480\tpowerexchange\ntcp\t2481\tgiop\nudp\t2481\tgiop\ntcp\t2482\tgiop-ssl\nudp\t2482\tgiop-ssl\ntcp\t2483\tttc\nudp\t2483\tttc\ntcp\t2484\tttc-ssl\nudp\t2484\tttc-ssl\ntcp\t2485\tnetobjects1\nudp\t2485\tnetobjects1\ntcp\t2486\tnetobjects2\nudp\t2486\tnetobjects2\ntcp\t2487\tpns\nudp\t2487\tpns\ntcp\t2488\tmoy-corp\nudp\t2488\tmoy-corp\ntcp\t2489\ttsilb\nudp\t2489\ttsilb\ntcp\t2490\tqip-qdhcp\nudp\t2490\tqip-qdhcp\ntcp\t2491\tconclave-cpp\nudp\t2491\tconclave-cpp\ntcp\t2492\tgroove\nudp\t2492\tgroove\ntcp\t2493\ttalarian-mqs\nudp\t2493\ttalarian-mqs\ntcp\t2494\tbmc-ar\nudp\t2494\tbmc-ar\ntcp\t2495\tfast-rem-serv\nudp\t2495\tfast-rem-serv\ntcp\t2496\tdirgis\nudp\t2496\tdirgis\ntcp\t2497\tquaddb\nudp\t2497\tquaddb\ntcp\t2498\todn-castraq\nudp\t2498\todn-castraq\ntcp\t2499\tunicontrol\nudp\t2499\tunicontrol\ntcp\t2500\trtsserv\nudp\t2500\trtsserv\ntcp\t2501\trtsclient\nudp\t2501\trtsclient\ntcp\t2502\tkentrox-prot\nudp\t2502\tkentrox-prot\ntcp\t2503\tnms-dpnss\nudp\t2503\tnms-dpnss\ntcp\t2504\twlbs\nudp\t2504\twlbs\ntcp\t2505\tppcontrol\nudp\t2505\tppcontrol\ntcp\t2506\tjbroker\nudp\t2506\tjbroker\ntcp\t2507\tspock\nudp\t2507\tspock\ntcp\t2508\tjdatastore\nudp\t2508\tjdatastore\ntcp\t2509\tfjmpss\nudp\t2509\tfjmpss\ntcp\t2510\tfjappmgrbulk\nudp\t2510\tfjappmgrbulk\ntcp\t2511\tmetastorm\nudp\t2511\tmetastorm\ntcp\t2512\tcitrixima\nudp\t2512\tcitrixima\ntcp\t2513\tcitrixadmin\nudp\t2513\tcitrixadmin\ntcp\t2514\tfacsys-ntp\nudp\t2514\tfacsys-ntp\ntcp\t2515\tfacsys-router\nudp\t2515\tfacsys-router\ntcp\t2516\tmaincontrol\nudp\t2516\tmaincontrol\ntcp\t2517\tcall-sig-trans\nudp\t2517\tcall-sig-trans\ntcp\t2518\twilly\nudp\t2518\twilly\ntcp\t2519\tglobmsgsvc\nudp\t2519\tglobmsgsvc\ntcp\t2520\tpvsw\nudp\t2520\tpvsw\ntcp\t2521\tadaptecmgr\nudp\t2521\tadaptecmgr\ntcp\t2522\twindb\nudp\t2522\twindb\ntcp\t2523\tqke-llc-v3\nudp\t2523\tqke-llc-v3\ntcp\t2524\toptiwave-lm\nudp\t2524\toptiwave-lm\ntcp\t2525\tms-v-worlds\nudp\t2525\tms-v-worlds\ntcp\t2526\tema-sent-lm\nudp\t2526\tema-sent-lm\ntcp\t2527\tiqserver\nudp\t2527\tiqserver\ntcp\t2528\tncr-ccl\ntcp\t2528\tncr_ccl\nudp\t2528\tncr-ccl\nudp\t2528\tncr_ccl\ntcp\t2529\tutsftp\nudp\t2529\tutsftp\ntcp\t2530\tvrcommerce\nudp\t2530\tvrcommerce\ntcp\t2531\tito-e-gui\nudp\t2531\tito-e-gui\ntcp\t2532\tovtopmd\nudp\t2532\tovtopmd\ntcp\t2533\tsnifferserver\nudp\t2533\tsnifferserver\ntcp\t2534\tcombox-web-acc\nudp\t2534\tcombox-web-acc\ntcp\t2535\tmadcap\nudp\t2535\tmadcap\ntcp\t2536\tbtpp2audctr1\nudp\t2536\tbtpp2audctr1\ntcp\t2537\tupgrade\nudp\t2537\tupgrade\ntcp\t2538\tvnwk-prapi\nudp\t2538\tvnwk-prapi\ntcp\t2539\tvsiadmin\nudp\t2539\tvsiadmin\ntcp\t2540\tlonworks\nudp\t2540\tlonworks\ntcp\t2541\tlonworks2\nudp\t2541\tlonworks2\ntcp\t2542\tudrawgraph\nudp\t2542\tudrawgraph\ntcp\t2543\treftek\nudp\t2543\treftek\ntcp\t2544\tnovell-zen\nudp\t2544\tnovell-zen\ntcp\t2545\tsis-emt\nudp\t2545\tsis-emt\ntcp\t2546\tvytalvaultbrtp\nudp\t2546\tvytalvaultbrtp\ntcp\t2547\tvytalvaultvsmp\nudp\t2547\tvytalvaultvsmp\ntcp\t2548\tvytalvaultpipe\nudp\t2548\tvytalvaultpipe\ntcp\t2549\tipass\nudp\t2549\tipass\ntcp\t2550\tads\nudp\t2550\tads\ntcp\t2551\tisg-uda-server\nudp\t2551\tisg-uda-server\ntcp\t2552\tcall-logging\nudp\t2552\tcall-logging\ntcp\t2553\tefidiningport\nudp\t2553\tefidiningport\ntcp\t2554\tvcnet-link-v10\nudp\t2554\tvcnet-link-v10\ntcp\t2555\tcompaq-wcp\nudp\t2555\tcompaq-wcp\ntcp\t2556\tnicetec-nmsvc\nudp\t2556\tnicetec-nmsvc\ntcp\t2557\tnicetec-mgmt\nudp\t2557\tnicetec-mgmt\ntcp\t2558\tpclemultimedia\nudp\t2558\tpclemultimedia\ntcp\t2559\tlstp\nudp\t2559\tlstp\ntcp\t2560\tlabrat\nudp\t2560\tlabrat\ntcp\t2561\tmosaixcc\nudp\t2561\tmosaixcc\ntcp\t2562\tdelibo\nudp\t2562\tdelibo\ntcp\t2563\tcti-redwood\nudp\t2563\tcti-redwood\ntcp\t2564\thp-3000-telnet\nudp\t2564\thp-3000-telnet\ntcp\t2565\tcoord-svr\nudp\t2565\tcoord-svr\ntcp\t2566\tpcs-pcw\nudp\t2566\tpcs-pcw\ntcp\t2567\tclp\nudp\t2567\tclp\ntcp\t2568\tspamtrap\nudp\t2568\tspamtrap\ntcp\t2569\tsonuscallsig\nudp\t2569\tsonuscallsig\ntcp\t2570\ths-port\nudp\t2570\ths-port\ntcp\t2571\tcecsvc\nudp\t2571\tcecsvc\ntcp\t2572\tibp\nudp\t2572\tibp\ntcp\t2573\ttrustestablish\nudp\t2573\ttrustestablish\ntcp\t2574\tblockade-bpsp\nudp\t2574\tblockade-bpsp\ntcp\t2575\thl7\nudp\t2575\thl7\ntcp\t2576\ttclprodebugger\nudp\t2576\ttclprodebugger\ntcp\t2577\tscipticslsrvr\nudp\t2577\tscipticslsrvr\ntcp\t2578\trvs-isdn-dcp\nudp\t2578\trvs-isdn-dcp\ntcp\t2579\tmpfoncl\nudp\t2579\tmpfoncl\ntcp\t2580\ttributary\nudp\t2580\ttributary\ntcp\t2581\targis-te\nudp\t2581\targis-te\ntcp\t2582\targis-ds\nudp\t2582\targis-ds\ntcp\t2583\tmon\nudp\t2583\tmon\ntcp\t2584\tcyaserv\nudp\t2584\tcyaserv\ntcp\t2585\tnetx-server\nudp\t2585\tnetx-server\ntcp\t2586\tnetx-agent\nudp\t2586\tnetx-agent\ntcp\t2587\tmasc\nudp\t2587\tmasc\ntcp\t2588\tprivilege\nudp\t2588\tprivilege\ntcp\t2589\tquartus-tcl\nudp\t2589\tquartus-tcl\ntcp\t2590\tidotdist\nudp\t2590\tidotdist\ntcp\t2591\tmaytagshuffle\nudp\t2591\tmaytagshuffle\ntcp\t2592\tnetrek\nudp\t2592\tnetrek\ntcp\t2593\tmns-mail\nudp\t2593\tmns-mail\ntcp\t2594\tdts\nudp\t2594\tdts\ntcp\t2595\tworldfusion1\nudp\t2595\tworldfusion1\ntcp\t2596\tworldfusion2\nudp\t2596\tworldfusion2\ntcp\t2597\thomesteadglory\nudp\t2597\thomesteadglory\ntcp\t2598\tcitriximaclient\nudp\t2598\tcitriximaclient\ntcp\t2599\tsnapd\nudp\t2599\tsnapd\ntcp\t2600\thpstgmgr\nudp\t2600\thpstgmgr\ntcp\t2601\tdiscp-client\nudp\t2601\tdiscp-client\ntcp\t2602\tdiscp-server\nudp\t2602\tdiscp-server\ntcp\t2603\tservicemeter\nudp\t2603\tservicemeter\ntcp\t2604\tnsc-ccs\nudp\t2604\tnsc-ccs\ntcp\t2605\tnsc-posa\nudp\t2605\tnsc-posa\ntcp\t2606\tnetmon\nudp\t2606\tnetmon\ntcp\t2607\tconnection\nudp\t2607\tconnection\ntcp\t2608\twag-service\nudp\t2608\twag-service\ntcp\t2609\tsystem-monitor\nudp\t2609\tsystem-monitor\ntcp\t2610\tversa-tek\nudp\t2610\tversa-tek\ntcp\t2611\tlionhead\nudp\t2611\tlionhead\ntcp\t2612\tqpasa-agent\nudp\t2612\tqpasa-agent\ntcp\t2613\tsmntubootstrap\nudp\t2613\tsmntubootstrap\ntcp\t2614\tneveroffline\nudp\t2614\tneveroffline\ntcp\t2615\tfirepower\nudp\t2615\tfirepower\ntcp\t2616\tappswitch-emp\nudp\t2616\tappswitch-emp\ntcp\t2617\tcmadmin\nudp\t2617\tcmadmin\ntcp\t2618\tpriority-e-com\nudp\t2618\tpriority-e-com\ntcp\t2619\tbruce\nudp\t2619\tbruce\ntcp\t2620\tlpsrecommender\nudp\t2620\tlpsrecommender\ntcp\t2621\tmiles-apart\nudp\t2621\tmiles-apart\ntcp\t2622\tmetricadbc\nudp\t2622\tmetricadbc\ntcp\t2623\tlmdp\nudp\t2623\tlmdp\ntcp\t2624\taria\nudp\t2624\taria\ntcp\t2625\tblwnkl-port\nudp\t2625\tblwnkl-port\ntcp\t2626\tgbjd816\nudp\t2626\tgbjd816\ntcp\t2627\tmoshebeeri\nudp\t2627\tmoshebeeri\ntcp\t2628\tdict\nudp\t2628\tdict\ntcp\t2629\tsitaraserver\nudp\t2629\tsitaraserver\ntcp\t2630\tsitaramgmt\nudp\t2630\tsitaramgmt\ntcp\t2631\tsitaradir\nudp\t2631\tsitaradir\ntcp\t2632\tirdg-post\nudp\t2632\tirdg-post\ntcp\t2633\tinterintelli\nudp\t2633\tinterintelli\ntcp\t2634\tpk-electronics\nudp\t2634\tpk-electronics\ntcp\t2635\tbackburner\nudp\t2635\tbackburner\ntcp\t2636\tsolve\nudp\t2636\tsolve\ntcp\t2637\timdocsvc\nudp\t2637\timdocsvc\ntcp\t2638\tsybaseanywhere\nudp\t2638\tsybaseanywhere\ntcp\t2639\taminet\nudp\t2639\taminet\ntcp\t2640\tami-control\nudp\t2640\tami-control\ntcp\t2641\thdl-srv\nudp\t2641\thdl-srv\ntcp\t2642\ttragic\nudp\t2642\ttragic\ntcp\t2643\tgte-samp\nudp\t2643\tgte-samp\ntcp\t2644\ttravsoft-ipx-t\nudp\t2644\ttravsoft-ipx-t\ntcp\t2645\tnovell-ipx-cmd\nudp\t2645\tnovell-ipx-cmd\ntcp\t2646\tand-lm\nudp\t2646\tand-lm\ntcp\t2647\tsyncserver\nudp\t2647\tsyncserver\ntcp\t2648\tupsnotifyprot\nudp\t2648\tupsnotifyprot\ntcp\t2649\tvpsipport\nudp\t2649\tvpsipport\ntcp\t2650\teristwoguns\nudp\t2650\teristwoguns\ntcp\t2651\tebinsite\nudp\t2651\tebinsite\ntcp\t2652\tinterpathpanel\nudp\t2652\tinterpathpanel\ntcp\t2653\tsonus\nudp\t2653\tsonus\ntcp\t2654\tcorel-vncadmin\ntcp\t2654\tcorel_vncadmin\nudp\t2654\tcorel-vncadmin\nudp\t2654\tcorel_vncadmin\ntcp\t2655\tunglue\nudp\t2655\tunglue\ntcp\t2656\tkana\nudp\t2656\tkana\ntcp\t2657\tsns-dispatcher\nudp\t2657\tsns-dispatcher\ntcp\t2658\tsns-admin\nudp\t2658\tsns-admin\ntcp\t2659\tsns-query\nudp\t2659\tsns-query\ntcp\t2660\tgcmonitor\nudp\t2660\tgcmonitor\ntcp\t2661\tolhost\nudp\t2661\tolhost\ntcp\t2662\tbintec-capi\nudp\t2662\tbintec-capi\ntcp\t2663\tbintec-tapi\nudp\t2663\tbintec-tapi\ntcp\t2664\tpatrol-mq-gm\nudp\t2664\tpatrol-mq-gm\ntcp\t2665\tpatrol-mq-nm\nudp\t2665\tpatrol-mq-nm\ntcp\t2666\textensis\nudp\t2666\textensis\ntcp\t2667\talarm-clock-s\nudp\t2667\talarm-clock-s\ntcp\t2668\talarm-clock-c\nudp\t2668\talarm-clock-c\ntcp\t2669\ttoad\nudp\t2669\ttoad\ntcp\t2670\ttve-announce\nudp\t2670\ttve-announce\ntcp\t2671\tnewlixreg\nudp\t2671\tnewlixreg\ntcp\t2672\tnhserver\nudp\t2672\tnhserver\ntcp\t2673\tfirstcall42\nudp\t2673\tfirstcall42\ntcp\t2674\tewnn\nudp\t2674\tewnn\ntcp\t2675\tttc-etap\nudp\t2675\tttc-etap\ntcp\t2676\tsimslink\nudp\t2676\tsimslink\ntcp\t2677\tgadgetgate1way\nudp\t2677\tgadgetgate1way\ntcp\t2678\tgadgetgate2way\nudp\t2678\tgadgetgate2way\ntcp\t2679\tsyncserverssl\nudp\t2679\tsyncserverssl\ntcp\t2680\tpxc-sapxom\nudp\t2680\tpxc-sapxom\ntcp\t2681\tmpnjsomb\nudp\t2681\tmpnjsomb\ntcp\t2683\tncdloadbalance\nudp\t2683\tncdloadbalance\ntcp\t2684\tmpnjsosv\nudp\t2684\tmpnjsosv\ntcp\t2685\tmpnjsocl\nudp\t2685\tmpnjsocl\ntcp\t2686\tmpnjsomg\nudp\t2686\tmpnjsomg\ntcp\t2687\tpq-lic-mgmt\nudp\t2687\tpq-lic-mgmt\ntcp\t2688\tmd-cg-http\nudp\t2688\tmd-cg-http\ntcp\t2689\tfastlynx\nudp\t2689\tfastlynx\ntcp\t2690\thp-nnm-data\nudp\t2690\thp-nnm-data\ntcp\t2691\titinternet\nudp\t2691\titinternet\ntcp\t2692\tadmins-lms\nudp\t2692\tadmins-lms\ntcp\t2694\tpwrsevent\nudp\t2694\tpwrsevent\ntcp\t2695\tvspread\nudp\t2695\tvspread\ntcp\t2696\tunifyadmin\nudp\t2696\tunifyadmin\ntcp\t2697\toce-snmp-trap\nudp\t2697\toce-snmp-trap\ntcp\t2698\tmck-ivpip\nudp\t2698\tmck-ivpip\ntcp\t2699\tcsoft-plusclnt\nudp\t2699\tcsoft-plusclnt\ntcp\t2700\ttqdata\nudp\t2700\ttqdata\ntcp\t2701\tsms-rcinfo\nudp\t2701\tsms-rcinfo\ntcp\t2702\tsms-xfer\nudp\t2702\tsms-xfer\ntcp\t2703\tsms-chat\nudp\t2703\tsms-chat\ntcp\t2704\tsms-remctrl\nudp\t2704\tsms-remctrl\ntcp\t2705\tsds-admin\nudp\t2705\tsds-admin\ntcp\t2706\tncdmirroring\nudp\t2706\tncdmirroring\ntcp\t2707\temcsymapiport\nudp\t2707\temcsymapiport\ntcp\t2708\tbanyan-net\nudp\t2708\tbanyan-net\ntcp\t2709\tsupermon\nudp\t2709\tsupermon\ntcp\t2710\tsso-service\nudp\t2710\tsso-service\ntcp\t2711\tsso-control\nudp\t2711\tsso-control\ntcp\t2712\taocp\nudp\t2712\taocp\ntcp\t2713\traventbs\nudp\t2713\traventbs\ntcp\t2714\traventdm\nudp\t2714\traventdm\ntcp\t2715\thpstgmgr2\nudp\t2715\thpstgmgr2\ntcp\t2716\tinova-ip-disco\nudp\t2716\tinova-ip-disco\ntcp\t2717\tpn-requester\nudp\t2717\tpn-requester\ntcp\t2718\tpn-requester2\nudp\t2718\tpn-requester2\ntcp\t2719\tscan-change\nudp\t2719\tscan-change\ntcp\t2720\twkars\nudp\t2720\twkars\ntcp\t2721\tsmart-diagnose\nudp\t2721\tsmart-diagnose\ntcp\t2722\tproactivesrvr\nudp\t2722\tproactivesrvr\ntcp\t2723\twatchdog-nt\nudp\t2723\twatchdog-nt\ntcp\t2724\tqotps\nudp\t2724\tqotps\ntcp\t2725\tmsolap-ptp2\nudp\t2725\tmsolap-ptp2\ntcp\t2726\ttams\nudp\t2726\ttams\ntcp\t2727\tmgcp-callagent\nudp\t2727\tmgcp-callagent\ntcp\t2728\tsqdr\nudp\t2728\tsqdr\ntcp\t2729\ttcim-control\nudp\t2729\ttcim-control\ntcp\t2730\tnec-raidplus\nudp\t2730\tnec-raidplus\ntcp\t2731\tfyre-messanger\nudp\t2731\tfyre-messanger\ntcp\t2732\tg5m\nudp\t2732\tg5m\ntcp\t2733\tsignet-ctf\nudp\t2733\tsignet-ctf\ntcp\t2734\tccs-software\nudp\t2734\tccs-software\ntcp\t2735\tnetiq-mc\nudp\t2735\tnetiq-mc\ntcp\t2736\tradwiz-nms-srv\nudp\t2736\tradwiz-nms-srv\ntcp\t2737\tsrp-feedback\nudp\t2737\tsrp-feedback\ntcp\t2738\tndl-tcp-ois-gw\nudp\t2738\tndl-tcp-ois-gw\ntcp\t2739\ttn-timing\nudp\t2739\ttn-timing\ntcp\t2740\talarm\nudp\t2740\talarm\ntcp\t2741\ttsb\nudp\t2741\ttsb\ntcp\t2742\ttsb2\nudp\t2742\ttsb2\ntcp\t2743\tmurx\nudp\t2743\tmurx\ntcp\t2744\thonyaku\nudp\t2744\thonyaku\ntcp\t2745\turbisnet\nudp\t2745\turbisnet\ntcp\t2746\tcpudpencap\nudp\t2746\tcpudpencap\ntcp\t2747\tfjippol-swrly\nudp\t2747\tfjippol-swrly\ntcp\t2748\tfjippol-polsvr\nudp\t2748\tfjippol-polsvr\ntcp\t2749\tfjippol-cnsl\nudp\t2749\tfjippol-cnsl\ntcp\t2750\tfjippol-port1\nudp\t2750\tfjippol-port1\ntcp\t2751\tfjippol-port2\nudp\t2751\tfjippol-port2\ntcp\t2752\trsisysaccess\nudp\t2752\trsisysaccess\ntcp\t2753\tde-spot\nudp\t2753\tde-spot\ntcp\t2754\tapollo-cc\nudp\t2754\tapollo-cc\ntcp\t2755\texpresspay\nudp\t2755\texpresspay\ntcp\t2756\tsimplement-tie\nudp\t2756\tsimplement-tie\ntcp\t2757\tcnrp\nudp\t2757\tcnrp\ntcp\t2758\tapollo-status\nudp\t2758\tapollo-status\ntcp\t2759\tapollo-gms\nudp\t2759\tapollo-gms\ntcp\t2760\tsabams\nudp\t2760\tsabams\ntcp\t2761\tdicom-iscl\nudp\t2761\tdicom-iscl\ntcp\t2762\tdicom-tls\nudp\t2762\tdicom-tls\ntcp\t2763\tdesktop-dna\nudp\t2763\tdesktop-dna\ntcp\t2764\tdata-insurance\nudp\t2764\tdata-insurance\ntcp\t2765\tqip-audup\nudp\t2765\tqip-audup\ntcp\t2766\tcompaq-scp\nudp\t2766\tcompaq-scp\ntcp\t2767\tuadtc\nudp\t2767\tuadtc\ntcp\t2768\tuacs\nudp\t2768\tuacs\ntcp\t2769\texce\nudp\t2769\texce\ntcp\t2770\tveronica\nudp\t2770\tveronica\ntcp\t2771\tvergencecm\nudp\t2771\tvergencecm\ntcp\t2772\tauris\nudp\t2772\tauris\ntcp\t2773\trbakcup1\nudp\t2773\trbakcup1\ntcp\t2774\trbakcup2\nudp\t2774\trbakcup2\ntcp\t2775\tsmpp\nudp\t2775\tsmpp\ntcp\t2776\tridgeway1\nudp\t2776\tridgeway1\ntcp\t2777\tridgeway2\nudp\t2777\tridgeway2\ntcp\t2778\tgwen-sonya\nudp\t2778\tgwen-sonya\ntcp\t2779\tlbc-sync\nudp\t2779\tlbc-sync\ntcp\t2780\tlbc-control\nudp\t2780\tlbc-control\ntcp\t2781\twhosells\nudp\t2781\twhosells\ntcp\t2782\teverydayrc\nudp\t2782\teverydayrc\ntcp\t2783\taises\nudp\t2783\taises\ntcp\t2784\twww-dev\nudp\t2784\twww-dev\ntcp\t2785\taic-np\nudp\t2785\taic-np\ntcp\t2786\taic-oncrpc\nudp\t2786\taic-oncrpc\ntcp\t2787\tpiccolo\nudp\t2787\tpiccolo\ntcp\t2788\tfryeserv\nudp\t2788\tfryeserv\ntcp\t2789\tmedia-agent\nudp\t2789\tmedia-agent\ntcp\t2790\tplgproxy\nudp\t2790\tplgproxy\ntcp\t2791\tmtport-regist\nudp\t2791\tmtport-regist\ntcp\t2792\tf5-globalsite\nudp\t2792\tf5-globalsite\ntcp\t2793\tinitlsmsad\nudp\t2793\tinitlsmsad\ntcp\t2795\tlivestats\nudp\t2795\tlivestats\ntcp\t2796\tac-tech\nudp\t2796\tac-tech\ntcp\t2797\tesp-encap\nudp\t2797\tesp-encap\ntcp\t2798\ttmesis-upshot\nudp\t2798\ttmesis-upshot\ntcp\t2799\ticon-discover\nudp\t2799\ticon-discover\ntcp\t2800\tacc-raid\nudp\t2800\tacc-raid\ntcp\t2801\tigcp\nudp\t2801\tigcp\ntcp\t2802\tveritas-tcp1\nudp\t2802\tveritas-udp1\ntcp\t2803\tbtprjctrl\nudp\t2803\tbtprjctrl\ntcp\t2804\tdvr-esm\nudp\t2804\tdvr-esm\ntcp\t2805\twta-wsp-s\nudp\t2805\twta-wsp-s\ntcp\t2806\tcspuni\nudp\t2806\tcspuni\ntcp\t2807\tcspmulti\nudp\t2807\tcspmulti\ntcp\t2808\tj-lan-p\nudp\t2808\tj-lan-p\ntcp\t2809\tcorbaloc\nudp\t2809\tcorbaloc\ntcp\t2810\tnetsteward\nudp\t2810\tnetsteward\ntcp\t2811\tgsiftp\nudp\t2811\tgsiftp\ntcp\t2812\tatmtcp\nudp\t2812\tatmtcp\ntcp\t2813\tllm-pass\nudp\t2813\tllm-pass\ntcp\t2814\tllm-csv\nudp\t2814\tllm-csv\ntcp\t2815\tlbc-measure\nudp\t2815\tlbc-measure\ntcp\t2816\tlbc-watchdog\nudp\t2816\tlbc-watchdog\ntcp\t2817\tnmsigport\nudp\t2817\tnmsigport\ntcp\t2818\trmlnk\nudp\t2818\trmlnk\ntcp\t2819\tfc-faultnotify\nudp\t2819\tfc-faultnotify\ntcp\t2820\tunivision\nudp\t2820\tunivision\ntcp\t2821\tvrts-at-port\nudp\t2821\tvrts-at-port\ntcp\t2822\tka0wuc\nudp\t2822\tka0wuc\ntcp\t2823\tcqg-netlan\nudp\t2823\tcqg-netlan\ntcp\t2824\tcqg-netlan-1\nudp\t2824\tcqg-netlan-1\ntcp\t2826\tslc-systemlog\nudp\t2826\tslc-systemlog\ntcp\t2827\tslc-ctrlrloops\nudp\t2827\tslc-ctrlrloops\ntcp\t2828\titm-lm\nudp\t2828\titm-lm\ntcp\t2829\tsilkp1\nudp\t2829\tsilkp1\ntcp\t2830\tsilkp2\nudp\t2830\tsilkp2\ntcp\t2831\tsilkp3\nudp\t2831\tsilkp3\ntcp\t2832\tsilkp4\nudp\t2832\tsilkp4\ntcp\t2833\tglishd\nudp\t2833\tglishd\ntcp\t2834\tevtp\nudp\t2834\tevtp\ntcp\t2835\tevtp-data\nudp\t2835\tevtp-data\ntcp\t2836\tcatalyst\nudp\t2836\tcatalyst\ntcp\t2837\trepliweb\nudp\t2837\trepliweb\ntcp\t2838\tstarbot\nudp\t2838\tstarbot\ntcp\t2839\tnmsigport\nudp\t2839\tnmsigport\ntcp\t2840\tl3-exprt\nudp\t2840\tl3-exprt\ntcp\t2841\tl3-ranger\nudp\t2841\tl3-ranger\ntcp\t2842\tl3-hawk\nudp\t2842\tl3-hawk\ntcp\t2843\tpdnet\nudp\t2843\tpdnet\ntcp\t2844\tbpcp-poll\nudp\t2844\tbpcp-poll\ntcp\t2845\tbpcp-trap\nudp\t2845\tbpcp-trap\ntcp\t2846\taimpp-hello\nudp\t2846\taimpp-hello\ntcp\t2847\taimpp-port-req\nudp\t2847\taimpp-port-req\ntcp\t2848\tamt-blc-port\nudp\t2848\tamt-blc-port\ntcp\t2849\tfxp\nudp\t2849\tfxp\ntcp\t2850\tmetaconsole\nudp\t2850\tmetaconsole\ntcp\t2851\twebemshttp\nudp\t2851\twebemshttp\ntcp\t2852\tbears-01\nudp\t2852\tbears-01\ntcp\t2853\tispipes\nudp\t2853\tispipes\ntcp\t2854\tinfomover\nudp\t2854\tinfomover\ntcp\t2855\tmsrp\ntcp\t2856\tcesdinv\nudp\t2856\tcesdinv\ntcp\t2857\tsimctlp\nudp\t2857\tsimctlp\ntcp\t2858\tecnp\nudp\t2858\tecnp\ntcp\t2859\tactivememory\nudp\t2859\tactivememory\ntcp\t2860\tdialpad-voice1\nudp\t2860\tdialpad-voice1\ntcp\t2861\tdialpad-voice2\nudp\t2861\tdialpad-voice2\ntcp\t2862\tttg-protocol\nudp\t2862\tttg-protocol\ntcp\t2863\tsonardata\nudp\t2863\tsonardata\ntcp\t2864\tastromed-main\nudp\t2864\tastromed-main\ntcp\t2865\tpit-vpn\nudp\t2865\tpit-vpn\ntcp\t2866\tiwlistener\nudp\t2866\tiwlistener\ntcp\t2867\tesps-portal\nudp\t2867\tesps-portal\ntcp\t2868\tnpep-messaging\nudp\t2868\tnpep-messaging\ntcp\t2869\ticslap\nudp\t2869\ticslap\ntcp\t2870\tdaishi\nudp\t2870\tdaishi\ntcp\t2871\tmsi-selectplay\nudp\t2871\tmsi-selectplay\ntcp\t2872\tradix\nudp\t2872\tradix\ntcp\t2874\tdxmessagebase1\nudp\t2874\tdxmessagebase1\ntcp\t2875\tdxmessagebase2\nudp\t2875\tdxmessagebase2\ntcp\t2876\tsps-tunnel\nudp\t2876\tsps-tunnel\ntcp\t2877\tbluelance\nudp\t2877\tbluelance\ntcp\t2878\taap\nudp\t2878\taap\ntcp\t2879\tucentric-ds\nudp\t2879\tucentric-ds\ntcp\t2880\tsynapse\nudp\t2880\tsynapse\ntcp\t2881\tndsp\nudp\t2881\tndsp\ntcp\t2882\tndtp\nudp\t2882\tndtp\ntcp\t2883\tndnp\nudp\t2883\tndnp\ntcp\t2884\tflashmsg\nudp\t2884\tflashmsg\ntcp\t2885\ttopflow\nudp\t2885\ttopflow\ntcp\t2886\tresponselogic\nudp\t2886\tresponselogic\ntcp\t2887\taironetddp\nudp\t2887\taironetddp\ntcp\t2888\tspcsdlobby\nudp\t2888\tspcsdlobby\ntcp\t2889\trsom\nudp\t2889\trsom\ntcp\t2890\tcspclmulti\nudp\t2890\tcspclmulti\ntcp\t2891\tcinegrfx-elmd\nudp\t2891\tcinegrfx-elmd\ntcp\t2892\tsnifferdata\nudp\t2892\tsnifferdata\ntcp\t2893\tvseconnector\nudp\t2893\tvseconnector\ntcp\t2894\tabacus-remote\nudp\t2894\tabacus-remote\ntcp\t2895\tnatuslink\nudp\t2895\tnatuslink\ntcp\t2896\tecovisiong6-1\nudp\t2896\tecovisiong6-1\ntcp\t2897\tcitrix-rtmp\nudp\t2897\tcitrix-rtmp\ntcp\t2898\tappliance-cfg\nudp\t2898\tappliance-cfg\ntcp\t2899\tpowergemplus\nudp\t2899\tpowergemplus\ntcp\t2900\tquicksuite\nudp\t2900\tquicksuite\ntcp\t2901\tallstorcns\nudp\t2901\tallstorcns\ntcp\t2902\tnetaspi\nudp\t2902\tnetaspi\ntcp\t2903\tsuitcase\nudp\t2903\tsuitcase\ntcp\t2904\tm2ua\nudp\t2904\tm2ua\ntcp\t2905\tm3ua\ntcp\t2906\tcaller9\nudp\t2906\tcaller9\ntcp\t2907\twebmethods-b2b\nudp\t2907\twebmethods-b2b\ntcp\t2908\tmao\nudp\t2908\tmao\ntcp\t2909\tfunk-dialout\nudp\t2909\tfunk-dialout\ntcp\t2910\ttdaccess\nudp\t2910\ttdaccess\ntcp\t2911\tblockade\nudp\t2911\tblockade\ntcp\t2912\tepicon\nudp\t2912\tepicon\ntcp\t2913\tboosterware\nudp\t2913\tboosterware\ntcp\t2914\tgamelobby\nudp\t2914\tgamelobby\ntcp\t2915\ttksocket\nudp\t2915\ttksocket\ntcp\t2916\telvin-server\ntcp\t2916\telvin_server\nudp\t2916\telvin-server\nudp\t2916\telvin_server\ntcp\t2917\telvin-client\ntcp\t2917\telvin_client\nudp\t2917\telvin-client\nudp\t2917\telvin_client\ntcp\t2918\tkastenchasepad\nudp\t2918\tkastenchasepad\ntcp\t2919\troboer\nudp\t2919\troboer\ntcp\t2920\troboeda\nudp\t2920\troboeda\ntcp\t2921\tcesdcdman\nudp\t2921\tcesdcdman\ntcp\t2922\tcesdcdtrn\nudp\t2922\tcesdcdtrn\ntcp\t2923\twta-wsp-wtp-s\nudp\t2923\twta-wsp-wtp-s\ntcp\t2924\tprecise-vip\nudp\t2924\tprecise-vip\ntcp\t2926\tmobile-file-dl\nudp\t2926\tmobile-file-dl\ntcp\t2927\tunimobilectrl\nudp\t2927\tunimobilectrl\ntcp\t2928\tredstone-cpss\nudp\t2928\tredstone-cpss\ntcp\t2929\tamx-webadmin\nudp\t2929\tamx-webadmin\ntcp\t2930\tamx-weblinx\nudp\t2930\tamx-weblinx\ntcp\t2931\tcircle-x\nudp\t2931\tcircle-x\ntcp\t2932\tincp\nudp\t2932\tincp\ntcp\t2933\t4-tieropmgw\nudp\t2933\t4-tieropmgw\ntcp\t2934\t4-tieropmcli\nudp\t2934\t4-tieropmcli\ntcp\t2935\tqtp\nudp\t2935\tqtp\ntcp\t2936\totpatch\nudp\t2936\totpatch\ntcp\t2937\tpnaconsult-lm\nudp\t2937\tpnaconsult-lm\ntcp\t2938\tsm-pas-1\nudp\t2938\tsm-pas-1\ntcp\t2939\tsm-pas-2\nudp\t2939\tsm-pas-2\ntcp\t2940\tsm-pas-3\nudp\t2940\tsm-pas-3\ntcp\t2941\tsm-pas-4\nudp\t2941\tsm-pas-4\ntcp\t2942\tsm-pas-5\nudp\t2942\tsm-pas-5\ntcp\t2943\tttnrepository\nudp\t2943\tttnrepository\ntcp\t2944\tmegaco-h248\nudp\t2944\tmegaco-h248\ntcp\t2945\th248-binary\nudp\t2945\th248-binary\ntcp\t2946\tfjsvmpor\nudp\t2946\tfjsvmpor\ntcp\t2947\tgpsd\nudp\t2947\tgpsd\ntcp\t2948\twap-push\nudp\t2948\twap-push\ntcp\t2949\twap-pushsecure\nudp\t2949\twap-pushsecure\ntcp\t2950\tesip\nudp\t2950\tesip\ntcp\t2951\tottp\nudp\t2951\tottp\ntcp\t2952\tmpfwsas\nudp\t2952\tmpfwsas\ntcp\t2953\tovalarmsrv\nudp\t2953\tovalarmsrv\ntcp\t2954\tovalarmsrv-cmd\nudp\t2954\tovalarmsrv-cmd\ntcp\t2955\tcsnotify\nudp\t2955\tcsnotify\ntcp\t2956\tovrimosdbman\nudp\t2956\tovrimosdbman\ntcp\t2957\tjmact5\nudp\t2957\tjmact5\ntcp\t2958\tjmact6\nudp\t2958\tjmact6\ntcp\t2959\trmopagt\nudp\t2959\trmopagt\ntcp\t2960\tdfoxserver\nudp\t2960\tdfoxserver\ntcp\t2961\tboldsoft-lm\nudp\t2961\tboldsoft-lm\ntcp\t2962\tiph-policy-cli\nudp\t2962\tiph-policy-cli\ntcp\t2963\tiph-policy-adm\nudp\t2963\tiph-policy-adm\ntcp\t2964\tbullant-srap\nudp\t2964\tbullant-srap\ntcp\t2965\tbullant-rap\nudp\t2965\tbullant-rap\ntcp\t2966\tidp-infotrieve\nudp\t2966\tidp-infotrieve\ntcp\t2967\tssc-agent\nudp\t2967\tssc-agent\ntcp\t2968\tenpp\nudp\t2968\tenpp\ntcp\t2969\tessp\nudp\t2969\tessp\ntcp\t2970\tindex-net\nudp\t2970\tindex-net\ntcp\t2971\tnetclip\nudp\t2971\tnetclip\ntcp\t2972\tpmsm-webrctl\nudp\t2972\tpmsm-webrctl\ntcp\t2973\tsvnetworks\nudp\t2973\tsvnetworks\ntcp\t2974\tsignal\nudp\t2974\tsignal\ntcp\t2975\tfjmpcm\nudp\t2975\tfjmpcm\ntcp\t2976\tcns-srv-port\nudp\t2976\tcns-srv-port\ntcp\t2977\tttc-etap-ns\nudp\t2977\tttc-etap-ns\ntcp\t2978\tttc-etap-ds\nudp\t2978\tttc-etap-ds\ntcp\t2979\th263-video\nudp\t2979\th263-video\ntcp\t2980\twimd\nudp\t2980\twimd\ntcp\t2981\tmylxamport\nudp\t2981\tmylxamport\ntcp\t2982\tiwb-whiteboard\nudp\t2982\tiwb-whiteboard\ntcp\t2983\tnetplan\nudp\t2983\tnetplan\ntcp\t2984\thpidsadmin\nudp\t2984\thpidsadmin\ntcp\t2985\thpidsagent\nudp\t2985\thpidsagent\ntcp\t2986\tstonefalls\nudp\t2986\tstonefalls\ntcp\t2987\tidentify\nudp\t2987\tidentify\ntcp\t2988\thippad\nudp\t2988\thippad\ntcp\t2989\tzarkov\nudp\t2989\tzarkov\ntcp\t2990\tboscap\nudp\t2990\tboscap\ntcp\t2991\twkstn-mon\nudp\t2991\twkstn-mon\ntcp\t2992\tavenyo\nudp\t2992\tavenyo\ntcp\t2993\tveritas-vis1\nudp\t2993\tveritas-vis1\ntcp\t2994\tveritas-vis2\nudp\t2994\tveritas-vis2\ntcp\t2995\tidrs\nudp\t2995\tidrs\ntcp\t2996\tvsixml\nudp\t2996\tvsixml\ntcp\t2997\trebol\nudp\t2997\trebol\ntcp\t2998\trealsecure\nudp\t2998\trealsecure\ntcp\t2999\tremoteware-un\nudp\t2999\tremoteware-un\ntcp\t3000\thbci\nudp\t3000\thbci\ntcp\t3000\tremoteware-cl\nudp\t3000\tremoteware-cl\ntcp\t3001\torigo-native\ntcp\t3002\texlm-agent\nudp\t3002\texlm-agent\ntcp\t3002\tremoteware-srv\nudp\t3002\tremoteware-srv\ntcp\t3003\tcgms\nudp\t3003\tcgms\ntcp\t3004\tcsoftragent\nudp\t3004\tcsoftragent\ntcp\t3005\tgeniuslm\nudp\t3005\tgeniuslm\ntcp\t3006\tii-admin\nudp\t3006\tii-admin\ntcp\t3007\tlotusmtap\nudp\t3007\tlotusmtap\ntcp\t3008\tmidnight-tech\nudp\t3008\tmidnight-tech\ntcp\t3009\tpxc-ntfy\nudp\t3009\tpxc-ntfy\ntcp\t3010\tgw\nudp\t3010\tping-pong\ntcp\t3011\ttrusted-web\nudp\t3011\ttrusted-web\ntcp\t3012\ttwsdss\nudp\t3012\ttwsdss\ntcp\t3013\tgilatskysurfer\nudp\t3013\tgilatskysurfer\ntcp\t3014\tbroker-service\ntcp\t3014\tbroker_service\nudp\t3014\tbroker-service\nudp\t3014\tbroker_service\ntcp\t3015\tnati-dstp\nudp\t3015\tnati-dstp\ntcp\t3016\tnotify-srvr\ntcp\t3016\tnotify_srvr\nudp\t3016\tnotify-srvr\nudp\t3016\tnotify_srvr\ntcp\t3017\tevent-listener\ntcp\t3017\tevent_listener\nudp\t3017\tevent-listener\nudp\t3017\tevent_listener\ntcp\t3018\tsrvc-registry\ntcp\t3018\tsrvc_registry\nudp\t3018\tsrvc-registry\nudp\t3018\tsrvc_registry\ntcp\t3019\tresource-mgr\ntcp\t3019\tresource_mgr\nudp\t3019\tresource-mgr\nudp\t3019\tresource_mgr\ntcp\t3020\tcifs\nudp\t3020\tcifs\ntcp\t3021\tagriserver\nudp\t3021\tagriserver\ntcp\t3022\tcsregagent\nudp\t3022\tcsregagent\ntcp\t3023\tmagicnotes\nudp\t3023\tmagicnotes\ntcp\t3024\tnds-sso\ntcp\t3024\tnds_sso\nudp\t3024\tnds-sso\nudp\t3024\tnds_sso\ntcp\t3025\tarepa-raft\nudp\t3025\tarepa-raft\ntcp\t3026\tagri-gateway\nudp\t3026\tagri-gateway\ntcp\t3027\tLiebDevMgmt-C\ntcp\t3027\tLiebDevMgmt_C\nudp\t3027\tLiebDevMgmt-C\nudp\t3027\tLiebDevMgmt_C\ntcp\t3028\tLiebDevMgmt-DM\ntcp\t3028\tLiebDevMgmt_DM\nudp\t3028\tLiebDevMgmt-DM\nudp\t3028\tLiebDevMgmt_DM\ntcp\t3029\tLiebDevMgmt-A\ntcp\t3029\tLiebDevMgmt_A\nudp\t3029\tLiebDevMgmt-A\nudp\t3029\tLiebDevMgmt_A\ntcp\t3030\tarepa-cas\nudp\t3030\tarepa-cas\ntcp\t3031\teppc\nudp\t3031\teppc\ntcp\t3032\tredwood-chat\nudp\t3032\tredwood-chat\ntcp\t3033\tpdb\nudp\t3033\tpdb\ntcp\t3034\tosmosis-aeea\nudp\t3034\tosmosis-aeea\ntcp\t3035\tfjsv-gssagt\nudp\t3035\tfjsv-gssagt\ntcp\t3036\thagel-dump\nudp\t3036\thagel-dump\ntcp\t3037\thp-san-mgmt\nudp\t3037\thp-san-mgmt\ntcp\t3038\tsantak-ups\nudp\t3038\tsantak-ups\ntcp\t3039\tcogitate\nudp\t3039\tcogitate\ntcp\t3040\ttomato-springs\nudp\t3040\ttomato-springs\ntcp\t3041\tdi-traceware\nudp\t3041\tdi-traceware\ntcp\t3042\tjournee\nudp\t3042\tjournee\ntcp\t3043\tbrp\nudp\t3043\tbrp\ntcp\t3044\tepp\nudp\t3044\tepp\ntcp\t3045\tresponsenet\nudp\t3045\tresponsenet\ntcp\t3046\tdi-ase\nudp\t3046\tdi-ase\ntcp\t3047\thlserver\nudp\t3047\thlserver\ntcp\t3048\tpctrader\nudp\t3048\tpctrader\ntcp\t3049\tnsws\nudp\t3049\tnsws\ntcp\t3050\tgds-db\ntcp\t3050\tgds_db\nudp\t3050\tgds-db\nudp\t3050\tgds_db\ntcp\t3051\tgalaxy-server\nudp\t3051\tgalaxy-server\ntcp\t3052\tapc-3052\nudp\t3052\tapc-3052\ntcp\t3053\tdsom-server\nudp\t3053\tdsom-server\ntcp\t3054\tamt-cnf-prot\nudp\t3054\tamt-cnf-prot\ntcp\t3055\tpolicyserver\nudp\t3055\tpolicyserver\ntcp\t3056\tcdl-server\nudp\t3056\tcdl-server\ntcp\t3057\tgoahead-fldup\nudp\t3057\tgoahead-fldup\ntcp\t3058\tvideobeans\nudp\t3058\tvideobeans\ntcp\t3059\tqsoft\nudp\t3059\tqsoft\ntcp\t3060\tinterserver\nudp\t3060\tinterserver\ntcp\t3061\tcautcpd\nudp\t3061\tcautcpd\ntcp\t3062\tncacn-ip-tcp\nudp\t3062\tncacn-ip-tcp\ntcp\t3063\tncadg-ip-udp\nudp\t3063\tncadg-ip-udp\ntcp\t3064\trprt\nudp\t3064\trprt\ntcp\t3065\tslinterbase\nudp\t3065\tslinterbase\ntcp\t3066\tnetattachsdmp\nudp\t3066\tnetattachsdmp\ntcp\t3067\tfjhpjp\nudp\t3067\tfjhpjp\ntcp\t3068\tls3bcast\nudp\t3068\tls3bcast\ntcp\t3069\tls3\nudp\t3069\tls3\ntcp\t3070\tmgxswitch\nudp\t3070\tmgxswitch\ntcp\t3071\txplat-replicate\ntcp\t3072\tcsd-monitor\nudp\t3072\tcsd-monitor\ntcp\t3073\tvcrp\nudp\t3073\tvcrp\ntcp\t3074\txbox\nudp\t3074\txbox\ntcp\t3075\torbix-locator\nudp\t3075\torbix-locator\ntcp\t3076\torbix-config\nudp\t3076\torbix-config\ntcp\t3077\torbix-loc-ssl\nudp\t3077\torbix-loc-ssl\ntcp\t3078\torbix-cfg-ssl\nudp\t3078\torbix-cfg-ssl\ntcp\t3079\tlv-frontpanel\nudp\t3079\tlv-frontpanel\ntcp\t3080\tstm-pproc\ntcp\t3080\tstm_pproc\nudp\t3080\tstm-pproc\nudp\t3080\tstm_pproc\ntcp\t3081\ttl1-lv\nudp\t3081\ttl1-lv\ntcp\t3082\ttl1-raw\nudp\t3082\ttl1-raw\ntcp\t3083\ttl1-telnet\nudp\t3083\ttl1-telnet\ntcp\t3084\titm-mccs\nudp\t3084\titm-mccs\ntcp\t3085\tpcihreq\nudp\t3085\tpcihreq\ntcp\t3086\tjdl-dbkitchen\nudp\t3086\tjdl-dbkitchen\ntcp\t3087\tasoki-sma\nudp\t3087\tasoki-sma\ntcp\t3088\txdtp\nudp\t3088\txdtp\ntcp\t3089\tptk-alink\nudp\t3089\tptk-alink\ntcp\t3090\tstss\nudp\t3090\tstss\ntcp\t3091\t1ci-smcs\nudp\t3091\t1ci-smcs\ntcp\t3093\trapidmq-center\nudp\t3093\trapidmq-center\ntcp\t3094\trapidmq-reg\nudp\t3094\trapidmq-reg\ntcp\t3095\tpanasas\nudp\t3095\tpanasas\ntcp\t3096\tndl-aps\nudp\t3096\tndl-aps\ntcp\t3098\tumm-port\nudp\t3098\tumm-port\ntcp\t3099\tchmd\nudp\t3099\tchmd\ntcp\t3100\topcon-xps\nudp\t3100\topcon-xps\ntcp\t3101\thp-pxpib\nudp\t3101\thp-pxpib\ntcp\t3102\tslslavemon\nudp\t3102\tslslavemon\ntcp\t3103\tautocuesmi\nudp\t3103\tautocuesmi\ntcp\t3104\tautocuelog\nudp\t3104\tautocuetime\ntcp\t3105\tcardbox\nudp\t3105\tcardbox\ntcp\t3106\tcardbox-http\nudp\t3106\tcardbox-http\ntcp\t3107\tbusiness\nudp\t3107\tbusiness\ntcp\t3108\tgeolocate\nudp\t3108\tgeolocate\ntcp\t3109\tpersonnel\nudp\t3109\tpersonnel\ntcp\t3110\tsim-control\nudp\t3110\tsim-control\ntcp\t3111\twsynch\nudp\t3111\twsynch\ntcp\t3112\tksysguard\nudp\t3112\tksysguard\ntcp\t3113\tcs-auth-svr\nudp\t3113\tcs-auth-svr\ntcp\t3114\tccmad\nudp\t3114\tccmad\ntcp\t3115\tmctet-master\nudp\t3115\tmctet-master\ntcp\t3116\tmctet-gateway\nudp\t3116\tmctet-gateway\ntcp\t3117\tmctet-jserv\nudp\t3117\tmctet-jserv\ntcp\t3118\tpkagent\nudp\t3118\tpkagent\ntcp\t3119\td2000kernel\nudp\t3119\td2000kernel\ntcp\t3120\td2000webserver\nudp\t3120\td2000webserver\ntcp\t3121\tpcmk-remote\ntcp\t3122\tvtr-emulator\nudp\t3122\tvtr-emulator\ntcp\t3123\tedix\nudp\t3123\tedix\ntcp\t3124\tbeacon-port\nudp\t3124\tbeacon-port\ntcp\t3125\ta13-an\nudp\t3125\ta13-an\ntcp\t3127\tctx-bridge\nudp\t3127\tctx-bridge\ntcp\t3128\tndl-aas\nudp\t3128\tndl-aas\ntcp\t3129\tnetport-id\nudp\t3129\tnetport-id\ntcp\t3130\ticpv2\nudp\t3130\ticpv2\ntcp\t3131\tnetbookmark\nudp\t3131\tnetbookmark\ntcp\t3132\tms-rule-engine\nudp\t3132\tms-rule-engine\ntcp\t3133\tprism-deploy\nudp\t3133\tprism-deploy\ntcp\t3134\tecp\nudp\t3134\tecp\ntcp\t3135\tpeerbook-port\nudp\t3135\tpeerbook-port\ntcp\t3136\tgrubd\nudp\t3136\tgrubd\ntcp\t3137\trtnt-1\nudp\t3137\trtnt-1\ntcp\t3138\trtnt-2\nudp\t3138\trtnt-2\ntcp\t3139\tincognitorv\nudp\t3139\tincognitorv\ntcp\t3140\tariliamulti\nudp\t3140\tariliamulti\ntcp\t3141\tvmodem\nudp\t3141\tvmodem\ntcp\t3142\trdc-wh-eos\nudp\t3142\trdc-wh-eos\ntcp\t3143\tseaview\nudp\t3143\tseaview\ntcp\t3144\ttarantella\nudp\t3144\ttarantella\ntcp\t3145\tcsi-lfap\nudp\t3145\tcsi-lfap\ntcp\t3146\tbears-02\nudp\t3146\tbears-02\ntcp\t3147\trfio\nudp\t3147\trfio\ntcp\t3148\tnm-game-admin\nudp\t3148\tnm-game-admin\ntcp\t3149\tnm-game-server\nudp\t3149\tnm-game-server\ntcp\t3150\tnm-asses-admin\nudp\t3150\tnm-asses-admin\ntcp\t3151\tnm-assessor\nudp\t3151\tnm-assessor\ntcp\t3152\tfeitianrockey\nudp\t3152\tfeitianrockey\ntcp\t3153\ts8-client-port\nudp\t3153\ts8-client-port\ntcp\t3154\tccmrmi\nudp\t3154\tccmrmi\ntcp\t3155\tjpegmpeg\nudp\t3155\tjpegmpeg\ntcp\t3156\tindura\nudp\t3156\tindura\ntcp\t3157\te3consultants\nudp\t3157\te3consultants\ntcp\t3158\tstvp\nudp\t3158\tstvp\ntcp\t3159\tnavegaweb-port\nudp\t3159\tnavegaweb-port\ntcp\t3160\ttip-app-server\nudp\t3160\ttip-app-server\ntcp\t3161\tdoc1lm\nudp\t3161\tdoc1lm\ntcp\t3162\tsflm\nudp\t3162\tsflm\ntcp\t3163\tres-sap\nudp\t3163\tres-sap\ntcp\t3164\timprs\nudp\t3164\timprs\ntcp\t3165\tnewgenpay\nudp\t3165\tnewgenpay\ntcp\t3166\tsossecollector\nudp\t3166\tsossecollector\ntcp\t3167\tnowcontact\nudp\t3167\tnowcontact\ntcp\t3168\tpoweronnud\nudp\t3168\tpoweronnud\ntcp\t3169\tserverview-as\nudp\t3169\tserverview-as\ntcp\t3170\tserverview-asn\nudp\t3170\tserverview-asn\ntcp\t3171\tserverview-gf\nudp\t3171\tserverview-gf\ntcp\t3172\tserverview-rm\nudp\t3172\tserverview-rm\ntcp\t3173\tserverview-icc\nudp\t3173\tserverview-icc\ntcp\t3174\tarmi-server\nudp\t3174\tarmi-server\ntcp\t3175\tt1-e1-over-ip\nudp\t3175\tt1-e1-over-ip\ntcp\t3176\tars-master\nudp\t3176\tars-master\ntcp\t3177\tphonex-port\nudp\t3177\tphonex-port\ntcp\t3178\tradclientport\nudp\t3178\tradclientport\ntcp\t3179\th2gf-w-2m\nudp\t3179\th2gf-w-2m\ntcp\t3180\tmc-brk-srv\nudp\t3180\tmc-brk-srv\ntcp\t3181\tbmcpatrolagent\nudp\t3181\tbmcpatrolagent\ntcp\t3182\tbmcpatrolrnvu\nudp\t3182\tbmcpatrolrnvu\ntcp\t3183\tcops-tls\nudp\t3183\tcops-tls\ntcp\t3184\tapogeex-port\nudp\t3184\tapogeex-port\ntcp\t3185\tsmpppd\nudp\t3185\tsmpppd\ntcp\t3186\tiiw-port\nudp\t3186\tiiw-port\ntcp\t3187\todi-port\nudp\t3187\todi-port\ntcp\t3188\tbrcm-comm-port\nudp\t3188\tbrcm-comm-port\ntcp\t3189\tpcle-infex\nudp\t3189\tpcle-infex\ntcp\t3190\tcsvr-proxy\nudp\t3190\tcsvr-proxy\ntcp\t3191\tcsvr-sslproxy\nudp\t3191\tcsvr-sslproxy\ntcp\t3192\tfiremonrcc\nudp\t3192\tfiremonrcc\ntcp\t3193\tspandataport\nudp\t3193\tspandataport\ntcp\t3194\tmagbind\nudp\t3194\tmagbind\ntcp\t3195\tncu-1\nudp\t3195\tncu-1\ntcp\t3196\tncu-2\nudp\t3196\tncu-2\ntcp\t3197\tembrace-dp-s\nudp\t3197\tembrace-dp-s\ntcp\t3198\tembrace-dp-c\nudp\t3198\tembrace-dp-c\ntcp\t3199\tdmod-workspace\nudp\t3199\tdmod-workspace\ntcp\t3200\ttick-port\nudp\t3200\ttick-port\ntcp\t3201\tcpq-tasksmart\nudp\t3201\tcpq-tasksmart\ntcp\t3202\tintraintra\nudp\t3202\tintraintra\ntcp\t3203\tnetwatcher-mon\nudp\t3203\tnetwatcher-mon\ntcp\t3204\tnetwatcher-db\nudp\t3204\tnetwatcher-db\ntcp\t3205\tisns\nudp\t3205\tisns\ntcp\t3206\tironmail\nudp\t3206\tironmail\ntcp\t3207\tvx-auth-port\nudp\t3207\tvx-auth-port\ntcp\t3208\tpfu-prcallback\nudp\t3208\tpfu-prcallback\ntcp\t3209\tnetwkpathengine\nudp\t3209\tnetwkpathengine\ntcp\t3210\tflamenco-proxy\nudp\t3210\tflamenco-proxy\ntcp\t3211\tavsecuremgmt\nudp\t3211\tavsecuremgmt\ntcp\t3212\tsurveyinst\nudp\t3212\tsurveyinst\ntcp\t3213\tneon24x7\nudp\t3213\tneon24x7\ntcp\t3214\tjmq-daemon-1\nudp\t3214\tjmq-daemon-1\ntcp\t3215\tjmq-daemon-2\nudp\t3215\tjmq-daemon-2\ntcp\t3216\tferrari-foam\nudp\t3216\tferrari-foam\ntcp\t3217\tunite\nudp\t3217\tunite\ntcp\t3218\tsmartpackets\nudp\t3218\tsmartpackets\ntcp\t3219\twms-messenger\nudp\t3219\twms-messenger\ntcp\t3220\txnm-ssl\nudp\t3220\txnm-ssl\ntcp\t3221\txnm-clear-text\nudp\t3221\txnm-clear-text\ntcp\t3222\tglbp\nudp\t3222\tglbp\ntcp\t3223\tdigivote\nudp\t3223\tdigivote\ntcp\t3224\taes-discovery\nudp\t3224\taes-discovery\ntcp\t3225\tfcip-port\nudp\t3225\tfcip-port\ntcp\t3226\tisi-irp\nudp\t3226\tisi-irp\ntcp\t3227\tdwnmshttp\nudp\t3227\tdwnmshttp\ntcp\t3228\tdwmsgserver\nudp\t3228\tdwmsgserver\ntcp\t3229\tglobal-cd-port\nudp\t3229\tglobal-cd-port\ntcp\t3230\tsftdst-port\nudp\t3230\tsftdst-port\ntcp\t3231\tvidigo\nudp\t3231\tvidigo\ntcp\t3232\tmdtp\nudp\t3232\tmdtp\ntcp\t3233\twhisker\nudp\t3233\twhisker\ntcp\t3234\talchemy\nudp\t3234\talchemy\ntcp\t3235\tmdap-port\nudp\t3235\tmdap-port\ntcp\t3236\tapparenet-ts\nudp\t3236\tapparenet-ts\ntcp\t3237\tapparenet-tps\nudp\t3237\tapparenet-tps\ntcp\t3238\tapparenet-as\nudp\t3238\tapparenet-as\ntcp\t3239\tapparenet-ui\nudp\t3239\tapparenet-ui\ntcp\t3240\ttriomotion\nudp\t3240\ttriomotion\ntcp\t3241\tsysorb\nudp\t3241\tsysorb\ntcp\t3242\tsdp-id-port\nudp\t3242\tsdp-id-port\ntcp\t3243\ttimelot\nudp\t3243\ttimelot\ntcp\t3244\tonesaf\nudp\t3244\tonesaf\ntcp\t3245\tvieo-fe\nudp\t3245\tvieo-fe\ntcp\t3246\tdvt-system\nudp\t3246\tdvt-system\ntcp\t3247\tdvt-data\nudp\t3247\tdvt-data\ntcp\t3248\tprocos-lm\nudp\t3248\tprocos-lm\ntcp\t3249\tssp\nudp\t3249\tssp\ntcp\t3250\thicp\nudp\t3250\thicp\ntcp\t3251\tsysscanner\nudp\t3251\tsysscanner\ntcp\t3252\tdhe\nudp\t3252\tdhe\ntcp\t3253\tpda-data\nudp\t3253\tpda-data\ntcp\t3254\tpda-sys\nudp\t3254\tpda-sys\ntcp\t3255\tsemaphore\nudp\t3255\tsemaphore\ntcp\t3256\tcpqrpm-agent\nudp\t3256\tcpqrpm-agent\ntcp\t3257\tcpqrpm-server\nudp\t3257\tcpqrpm-server\ntcp\t3258\tivecon-port\nudp\t3258\tivecon-port\ntcp\t3259\tepncdp2\nudp\t3259\tepncdp2\ntcp\t3260\tiscsi-target\nudp\t3260\tiscsi-target\ntcp\t3261\twinshadow\nudp\t3261\twinshadow\ntcp\t3262\tnecp\nudp\t3262\tnecp\ntcp\t3263\tecolor-imager\nudp\t3263\tecolor-imager\ntcp\t3264\tccmail\nudp\t3264\tccmail\ntcp\t3265\taltav-tunnel\nudp\t3265\taltav-tunnel\ntcp\t3266\tns-cfg-server\nudp\t3266\tns-cfg-server\ntcp\t3267\tibm-dial-out\nudp\t3267\tibm-dial-out\ntcp\t3268\tmsft-gc\nudp\t3268\tmsft-gc\ntcp\t3269\tmsft-gc-ssl\nudp\t3269\tmsft-gc-ssl\ntcp\t3270\tverismart\nudp\t3270\tverismart\ntcp\t3271\tcsoft-prev\nudp\t3271\tcsoft-prev\ntcp\t3272\tuser-manager\nudp\t3272\tuser-manager\ntcp\t3273\tsxmp\nudp\t3273\tsxmp\ntcp\t3274\tordinox-server\nudp\t3274\tordinox-server\ntcp\t3275\tsamd\nudp\t3275\tsamd\ntcp\t3276\tmaxim-asics\nudp\t3276\tmaxim-asics\ntcp\t3277\tawg-proxy\nudp\t3277\tawg-proxy\ntcp\t3278\tlkcmserver\nudp\t3278\tlkcmserver\ntcp\t3279\tadmind\nudp\t3279\tadmind\ntcp\t3280\tvs-server\nudp\t3280\tvs-server\ntcp\t3281\tsysopt\nudp\t3281\tsysopt\ntcp\t3282\tdatusorb\nudp\t3282\tdatusorb\ntcp\t3283\tApple Remote Desktop (Net Assistant)\nudp\t3283\tApple Remote Desktop (Net Assistant)\ntcp\t3284\t4talk\nudp\t3284\t4talk\ntcp\t3285\tplato\nudp\t3285\tplato\ntcp\t3286\te-net\nudp\t3286\te-net\ntcp\t3287\tdirectvdata\nudp\t3287\tdirectvdata\ntcp\t3288\tcops\nudp\t3288\tcops\ntcp\t3289\tenpc\nudp\t3289\tenpc\ntcp\t3290\tcaps-lm\nudp\t3290\tcaps-lm\ntcp\t3291\tsah-lm\nudp\t3291\tsah-lm\ntcp\t3292\tcart-o-rama\nudp\t3292\tcart-o-rama\ntcp\t3293\tfg-fps\nudp\t3293\tfg-fps\ntcp\t3294\tfg-gip\nudp\t3294\tfg-gip\ntcp\t3295\tdyniplookup\nudp\t3295\tdyniplookup\ntcp\t3296\trib-slm\nudp\t3296\trib-slm\ntcp\t3297\tcytel-lm\nudp\t3297\tcytel-lm\ntcp\t3298\tdeskview\nudp\t3298\tdeskview\ntcp\t3299\tpdrncs\nudp\t3299\tpdrncs\ntcp\t3300\tceph\ntcp\t3302\tmcs-fastmail\nudp\t3302\tmcs-fastmail\ntcp\t3303\topsession-clnt\nudp\t3303\topsession-clnt\ntcp\t3304\topsession-srvr\nudp\t3304\topsession-srvr\ntcp\t3305\todette-ftp\nudp\t3305\todette-ftp\ntcp\t3306\tmysql\nudp\t3306\tmysql\ntcp\t3307\topsession-prxy\nudp\t3307\topsession-prxy\ntcp\t3308\ttns-server\nudp\t3308\ttns-server\ntcp\t3309\ttns-adv\nudp\t3309\ttns-adv\ntcp\t3310\tdyna-access\nudp\t3310\tdyna-access\ntcp\t3311\tmcns-tel-ret\nudp\t3311\tmcns-tel-ret\ntcp\t3312\tappman-server\nudp\t3312\tappman-server\ntcp\t3313\tuorb\nudp\t3313\tuorb\ntcp\t3314\tuohost\nudp\t3314\tuohost\ntcp\t3315\tcdid\nudp\t3315\tcdid\ntcp\t3316\taicc-cmi\nudp\t3316\taicc-cmi\ntcp\t3317\tvsaiport\nudp\t3317\tvsaiport\ntcp\t3318\tssrip\nudp\t3318\tssrip\ntcp\t3319\tsdt-lmd\nudp\t3319\tsdt-lmd\ntcp\t3320\tofficelink2000\nudp\t3320\tofficelink2000\ntcp\t3321\tvnsstr\nudp\t3321\tvnsstr\ntcp\t3326\tsftu\nudp\t3326\tsftu\ntcp\t3327\tbbars\nudp\t3327\tbbars\ntcp\t3328\tegptlm\nudp\t3328\tegptlm\ntcp\t3329\thp-device-disc\nudp\t3329\thp-device-disc\ntcp\t3330\tmcs-calypsoicf\nudp\t3330\tmcs-calypsoicf\ntcp\t3331\tmcs-messaging\nudp\t3331\tmcs-messaging\ntcp\t3332\tmcs-mailsvr\nudp\t3332\tmcs-mailsvr\ntcp\t3333\tdec-notes\nudp\t3333\tdec-notes\ntcp\t3334\tdirectv-web\nudp\t3334\tdirectv-web\ntcp\t3335\tdirectv-soft\nudp\t3335\tdirectv-soft\ntcp\t3336\tdirectv-tick\nudp\t3336\tdirectv-tick\ntcp\t3337\tdirectv-catlg\nudp\t3337\tdirectv-catlg\ntcp\t3338\tanet-b\nudp\t3338\tanet-b\ntcp\t3339\tanet-l\nudp\t3339\tanet-l\ntcp\t3340\tanet-m\nudp\t3340\tanet-m\ntcp\t3341\tanet-h\nudp\t3341\tanet-h\ntcp\t3342\twebtie\nudp\t3342\twebtie\ntcp\t3343\tms-cluster-net\nudp\t3343\tms-cluster-net\ntcp\t3344\tbnt-manager\nudp\t3344\tbnt-manager\ntcp\t3345\tinfluence\nudp\t3345\tinfluence\ntcp\t3346\ttrnsprntproxy\nudp\t3346\ttrnsprntproxy\ntcp\t3347\tphoenix-rpc\nudp\t3347\tphoenix-rpc\ntcp\t3348\tpangolin-laser\nudp\t3348\tpangolin-laser\ntcp\t3349\tchevinservices\nudp\t3349\tchevinservices\ntcp\t3350\tfindviatv\nudp\t3350\tfindviatv\ntcp\t3351\tbtrieve\nudp\t3351\tbtrieve\ntcp\t3352\tssql\nudp\t3352\tssql\ntcp\t3353\tfatpipe\nudp\t3353\tfatpipe\ntcp\t3354\tsuitjd\nudp\t3354\tsuitjd\ntcp\t3355\tordinox-dbase\nudp\t3355\tordinox-dbase\ntcp\t3356\tupnotifyps\nudp\t3356\tupnotifyps\ntcp\t3357\tadtech-test\nudp\t3357\tadtech-test\ntcp\t3358\tmpsysrmsvr\nudp\t3358\tmpsysrmsvr\ntcp\t3359\twg-netforce\nudp\t3359\twg-netforce\ntcp\t3360\tkv-server\nudp\t3360\tkv-server\ntcp\t3361\tkv-agent\nudp\t3361\tkv-agent\ntcp\t3362\tdj-ilm\nudp\t3362\tdj-ilm\ntcp\t3363\tnati-vi-server\nudp\t3363\tnati-vi-server\ntcp\t3364\tcreativeserver\nudp\t3364\tcreativeserver\ntcp\t3365\tcontentserver\nudp\t3365\tcontentserver\ntcp\t3366\tcreativepartnr\nudp\t3366\tcreativepartnr\ntcp\t3372\ttip2\nudp\t3372\ttip2\ntcp\t3373\tlavenir-lm\nudp\t3373\tlavenir-lm\ntcp\t3374\tcluster-disc\nudp\t3374\tcluster-disc\ntcp\t3375\tvsnm-agent\nudp\t3375\tvsnm-agent\ntcp\t3376\tcdbroker\nudp\t3376\tcdbroker\ntcp\t3377\tcogsys-lm\nudp\t3377\tcogsys-lm\ntcp\t3378\twsicopy\nudp\t3378\twsicopy\ntcp\t3379\tsocorfs\nudp\t3379\tsocorfs\ntcp\t3380\tsns-channels\nudp\t3380\tsns-channels\ntcp\t3381\tgeneous\nudp\t3381\tgeneous\ntcp\t3382\tfujitsu-neat\nudp\t3382\tfujitsu-neat\ntcp\t3383\tesp-lm\nudp\t3383\tesp-lm\ntcp\t3384\thp-clic\nudp\t3384\thp-clic\ntcp\t3385\tqnxnetman\nudp\t3385\tqnxnetman\ntcp\t3386\tgprs-data\nudp\t3386\tgprs-sig\ntcp\t3387\tbackroomnet\nudp\t3387\tbackroomnet\ntcp\t3388\tcbserver\nudp\t3388\tcbserver\ntcp\t3389\tms-wbt-server\nudp\t3389\tms-wbt-server\ntcp\t3390\tdsc\nudp\t3390\tdsc\ntcp\t3391\tsavant\nudp\t3391\tsavant\ntcp\t3392\tefi-lm\nudp\t3392\tefi-lm\ntcp\t3393\td2k-tapestry1\nudp\t3393\td2k-tapestry1\ntcp\t3394\td2k-tapestry2\nudp\t3394\td2k-tapestry2\ntcp\t3395\tdyna-lm\nudp\t3395\tdyna-lm\ntcp\t3396\tprinter-agent\ntcp\t3396\tprinter_agent\nudp\t3396\tprinter-agent\nudp\t3396\tprinter_agent\ntcp\t3397\tcloanto-lm\nudp\t3397\tcloanto-lm\ntcp\t3398\tmercantile\nudp\t3398\tmercantile\ntcp\t3399\tcsms\nudp\t3399\tcsms\ntcp\t3400\tcsms2\nudp\t3400\tcsms2\ntcp\t3401\tfilecast\nudp\t3401\tfilecast\ntcp\t3402\tfxaengine-net\nudp\t3402\tfxaengine-net\ntcp\t3405\tnokia-ann-ch1\nudp\t3405\tnokia-ann-ch1\ntcp\t3406\tnokia-ann-ch2\nudp\t3406\tnokia-ann-ch2\ntcp\t3407\tldap-admin\nudp\t3407\tldap-admin\ntcp\t3408\tBESApi\nudp\t3408\tBESApi\ntcp\t3409\tnetworklens\nudp\t3409\tnetworklens\ntcp\t3410\tnetworklenss\nudp\t3410\tnetworklenss\ntcp\t3411\tbiolink-auth\nudp\t3411\tbiolink-auth\ntcp\t3412\txmlblaster\nudp\t3412\txmlblaster\ntcp\t3413\tsvnet\nudp\t3413\tsvnet\ntcp\t3414\twip-port\nudp\t3414\twip-port\ntcp\t3415\tbcinameservice\nudp\t3415\tbcinameservice\ntcp\t3416\tcommandport\nudp\t3416\tcommandport\ntcp\t3417\tcsvr\nudp\t3417\tcsvr\ntcp\t3418\trnmap\nudp\t3418\trnmap\ntcp\t3419\tsoftaudit\nudp\t3419\tsoftaudit\ntcp\t3420\tifcp-port\nudp\t3420\tifcp-port\ntcp\t3421\tbmap\nudp\t3421\tbmap\ntcp\t3422\trusb-sys-port\nudp\t3422\trusb-sys-port\ntcp\t3423\txtrm\nudp\t3423\txtrm\ntcp\t3424\txtrms\nudp\t3424\txtrms\ntcp\t3425\tagps-port\nudp\t3425\tagps-port\ntcp\t3426\tarkivio\nudp\t3426\tarkivio\ntcp\t3427\twebsphere-snmp\nudp\t3427\twebsphere-snmp\ntcp\t3428\ttwcss\nudp\t3428\ttwcss\ntcp\t3429\tgcsp\nudp\t3429\tgcsp\ntcp\t3430\tssdispatch\nudp\t3430\tssdispatch\ntcp\t3431\tndl-als\nudp\t3431\tndl-als\ntcp\t3432\tosdcp\nudp\t3432\tosdcp\ntcp\t3433\topnet-smp\nudp\t3433\topnet-smp\ntcp\t3434\topencm\nudp\t3434\topencm\ntcp\t3435\tpacom\nudp\t3435\tpacom\ntcp\t3436\tgc-config\nudp\t3436\tgc-config\ntcp\t3437\tautocueds\nudp\t3437\tautocueds\ntcp\t3438\tspiral-admin\nudp\t3438\tspiral-admin\ntcp\t3439\thri-port\nudp\t3439\thri-port\ntcp\t3440\tans-console\nudp\t3440\tans-console\ntcp\t3441\tconnect-client\nudp\t3441\tconnect-client\ntcp\t3442\tconnect-server\nudp\t3442\tconnect-server\ntcp\t3443\tov-nnm-websrv\nudp\t3443\tov-nnm-websrv\ntcp\t3444\tdenali-server\nudp\t3444\tdenali-server\ntcp\t3445\tmonp\nudp\t3445\tmonp\ntcp\t3446\t3comfaxrpc\nudp\t3446\t3comfaxrpc\ntcp\t3447\tdirectnet\nudp\t3447\tdirectnet\ntcp\t3448\tdnc-port\nudp\t3448\tdnc-port\ntcp\t3449\thotu-chat\nudp\t3449\thotu-chat\ntcp\t3450\tcastorproxy\nudp\t3450\tcastorproxy\ntcp\t3451\tasam\nudp\t3451\tasam\ntcp\t3452\tsabp-signal\nudp\t3452\tsabp-signal\ntcp\t3453\tpscupd\nudp\t3453\tpscupd\ntcp\t3454\tmira\nudp\t3454\tmira\ntcp\t3455\tprsvp\nudp\t3455\tprsvp\ntcp\t3456\tvat\nudp\t3456\tvat\ntcp\t3457\tvat-control\nudp\t3457\tvat-control\ntcp\t3458\td3winosfi\nudp\t3458\td3winosfi\ntcp\t3459\tintegral\nudp\t3459\tintegral\ntcp\t3460\tedm-manager\nudp\t3460\tedm-manager\ntcp\t3461\tedm-stager\nudp\t3461\tedm-stager\ntcp\t3462\tedm-std-notify\nudp\t3462\tedm-std-notify\ntcp\t3463\tedm-adm-notify\nudp\t3463\tedm-adm-notify\ntcp\t3464\tedm-mgr-sync\nudp\t3464\tedm-mgr-sync\ntcp\t3465\tedm-mgr-cntrl\nudp\t3465\tedm-mgr-cntrl\ntcp\t3466\tworkflow\nudp\t3466\tworkflow\ntcp\t3467\trcst\nudp\t3467\trcst\ntcp\t3468\tttcmremotectrl\nudp\t3468\tttcmremotectrl\ntcp\t3469\tpluribus\nudp\t3469\tpluribus\ntcp\t3470\tjt400\nudp\t3470\tjt400\ntcp\t3471\tjt400-ssl\nudp\t3471\tjt400-ssl\ntcp\t3472\tjaugsremotec-1\nudp\t3472\tjaugsremotec-1\ntcp\t3473\tjaugsremotec-2\nudp\t3473\tjaugsremotec-2\ntcp\t3474\tttntspauto\nudp\t3474\tttntspauto\ntcp\t3475\tgenisar-port\nudp\t3475\tgenisar-port\ntcp\t3476\tnppmp\nudp\t3476\tnppmp\ntcp\t3477\tecomm\nudp\t3477\tecomm\ntcp\t3478\tstun\nudp\t3478\tstun\ntcp\t3478\tturn\nudp\t3478\tturn\ntcp\t3478\tstun-behavior\nudp\t3478\tstun-behavior\ntcp\t3479\ttwrpc\nudp\t3479\ttwrpc\ntcp\t3480\tplethora\nudp\t3480\tplethora\ntcp\t3481\tcleanerliverc\nudp\t3481\tcleanerliverc\ntcp\t3482\tvulture\nudp\t3482\tvulture\ntcp\t3483\tslim-devices\nudp\t3483\tslim-devices\ntcp\t3484\tgbs-stp\nudp\t3484\tgbs-stp\ntcp\t3485\tcelatalk\nudp\t3485\tcelatalk\ntcp\t3486\tifsf-hb-port\nudp\t3486\tifsf-hb-port\ntcp\t3487\tltctcp\nudp\t3487\tltcudp\ntcp\t3488\tfs-rh-srv\nudp\t3488\tfs-rh-srv\ntcp\t3489\tdtp-dia\nudp\t3489\tdtp-dia\ntcp\t3490\tcolubris\nudp\t3490\tcolubris\ntcp\t3491\tswr-port\nudp\t3491\tswr-port\ntcp\t3492\ttvdumtray-port\nudp\t3492\ttvdumtray-port\ntcp\t3493\tnut\nudp\t3493\tnut\ntcp\t3494\tibm3494\nudp\t3494\tibm3494\ntcp\t3495\tseclayer-tcp\nudp\t3495\tseclayer-tcp\ntcp\t3496\tseclayer-tls\nudp\t3496\tseclayer-tls\ntcp\t3497\tipether232port\nudp\t3497\tipether232port\ntcp\t3498\tdashpas-port\nudp\t3498\tdashpas-port\ntcp\t3499\tsccip-media\nudp\t3499\tsccip-media\ntcp\t3500\trtmp-port\nudp\t3500\trtmp-port\ntcp\t3501\tisoft-p2p\nudp\t3501\tisoft-p2p\ntcp\t3502\tavinstalldisc\nudp\t3502\tavinstalldisc\ntcp\t3503\tlsp-ping\nudp\t3503\tlsp-ping\ntcp\t3504\tironstorm\nudp\t3504\tironstorm\ntcp\t3505\tccmcomm\nudp\t3505\tccmcomm\ntcp\t3506\tapc-3506\nudp\t3506\tapc-3506\ntcp\t3507\tnesh-broker\nudp\t3507\tnesh-broker\ntcp\t3508\tinteractionweb\nudp\t3508\tinteractionweb\ntcp\t3509\tvt-ssl\nudp\t3509\tvt-ssl\ntcp\t3510\txss-port\nudp\t3510\txss-port\ntcp\t3511\twebmail-2\nudp\t3511\twebmail-2\ntcp\t3512\taztec\nudp\t3512\taztec\ntcp\t3513\tarcpd\nudp\t3513\tarcpd\ntcp\t3514\tmust-p2p\nudp\t3514\tmust-p2p\ntcp\t3515\tmust-backplane\nudp\t3515\tmust-backplane\ntcp\t3516\tsmartcard-port\nudp\t3516\tsmartcard-port\ntcp\t3517\t802-11-iapp\nudp\t3517\t802-11-iapp\ntcp\t3518\tartifact-msg\nudp\t3518\tartifact-msg\ntcp\t3519\tnvmsgd\nudp\t3519\tgalileo\ntcp\t3520\tgalileolog\nudp\t3520\tgalileolog\ntcp\t3521\tmc3ss\nudp\t3521\tmc3ss\ntcp\t3522\tnssocketport\nudp\t3522\tnssocketport\ntcp\t3523\todeumservlink\nudp\t3523\todeumservlink\ntcp\t3524\tecmport\nudp\t3524\tecmport\ntcp\t3525\teisport\nudp\t3525\teisport\ntcp\t3526\tstarquiz-port\nudp\t3526\tstarquiz-port\ntcp\t3527\tbeserver-msg-q\nudp\t3527\tbeserver-msg-q\ntcp\t3528\tjboss-iiop\nudp\t3528\tjboss-iiop\ntcp\t3529\tjboss-iiop-ssl\nudp\t3529\tjboss-iiop-ssl\ntcp\t3530\tgf\nudp\t3530\tgf\ntcp\t3531\tjoltid\nudp\t3531\tjoltid\ntcp\t3532\traven-rmp\nudp\t3532\traven-rmp\ntcp\t3533\traven-rdp\nudp\t3533\traven-rdp\ntcp\t3534\turld-port\nudp\t3534\turld-port\ntcp\t3535\tms-la\nudp\t3535\tms-la\ntcp\t3536\tsnac\nudp\t3536\tsnac\ntcp\t3537\tni-visa-remote\nudp\t3537\tni-visa-remote\ntcp\t3538\tibm-diradm\nudp\t3538\tibm-diradm\ntcp\t3539\tibm-diradm-ssl\nudp\t3539\tibm-diradm-ssl\ntcp\t3540\tpnrp-port\nudp\t3540\tpnrp-port\ntcp\t3541\tvoispeed-port\nudp\t3541\tvoispeed-port\ntcp\t3542\thacl-monitor\nudp\t3542\thacl-monitor\ntcp\t3543\tqftest-lookup\nudp\t3543\tqftest-lookup\ntcp\t3544\tteredo\nudp\t3544\tteredo\ntcp\t3545\tcamac\nudp\t3545\tcamac\ntcp\t3547\tsymantec-sim\nudp\t3547\tsymantec-sim\ntcp\t3548\tinterworld\nudp\t3548\tinterworld\ntcp\t3549\ttellumat-nms\nudp\t3549\ttellumat-nms\ntcp\t3550\tssmpp\nudp\t3550\tssmpp\ntcp\t3551\tapcupsd\nudp\t3551\tapcupsd\ntcp\t3552\ttaserver\nudp\t3552\ttaserver\ntcp\t3553\trbr-discovery\nudp\t3553\trbr-discovery\ntcp\t3554\tquestnotify\nudp\t3554\tquestnotify\ntcp\t3555\trazor\nudp\t3555\trazor\ntcp\t3556\tsky-transport\nudp\t3556\tsky-transport\ntcp\t3557\tpersonalos-001\nudp\t3557\tpersonalos-001\ntcp\t3558\tmcp-port\nudp\t3558\tmcp-port\ntcp\t3559\tcctv-port\nudp\t3559\tcctv-port\ntcp\t3560\tiniserve-port\nudp\t3560\tiniserve-port\ntcp\t3561\tbmc-onekey\nudp\t3561\tbmc-onekey\ntcp\t3562\tsdbproxy\nudp\t3562\tsdbproxy\ntcp\t3563\twatcomdebug\nudp\t3563\twatcomdebug\ntcp\t3564\tesimport\nudp\t3564\tesimport\ntcp\t3565\tm2pa\ntcp\t3566\tquest-data-hub\ntcp\t3567\tdof-eps\nudp\t3567\tdof-eps\ntcp\t3568\tdof-tunnel-sec\nudp\t3568\tdof-tunnel-sec\ntcp\t3569\tmbg-ctrl\nudp\t3569\tmbg-ctrl\ntcp\t3570\tmccwebsvr-port\nudp\t3570\tmccwebsvr-port\ntcp\t3571\tmegardsvr-port\nudp\t3571\tmegardsvr-port\ntcp\t3572\tmegaregsvrport\nudp\t3572\tmegaregsvrport\ntcp\t3573\ttag-ups-1\nudp\t3573\ttag-ups-1\ntcp\t3574\tdmaf-server\nudp\t3574\tdmaf-caster\ntcp\t3575\tccm-port\nudp\t3575\tccm-port\ntcp\t3576\tcmc-port\nudp\t3576\tcmc-port\ntcp\t3577\tconfig-port\nudp\t3577\tconfig-port\ntcp\t3578\tdata-port\nudp\t3578\tdata-port\ntcp\t3579\tttat3lb\nudp\t3579\tttat3lb\ntcp\t3580\tnati-svrloc\nudp\t3580\tnati-svrloc\ntcp\t3581\tkfxaclicensing\nudp\t3581\tkfxaclicensing\ntcp\t3582\tpress\nudp\t3582\tpress\ntcp\t3583\tcanex-watch\nudp\t3583\tcanex-watch\ntcp\t3584\tu-dbap\nudp\t3584\tu-dbap\ntcp\t3585\temprise-lls\nudp\t3585\temprise-lls\ntcp\t3586\temprise-lsc\nudp\t3586\temprise-lsc\ntcp\t3587\tp2pgroup\nudp\t3587\tp2pgroup\ntcp\t3588\tsentinel\nudp\t3588\tsentinel\ntcp\t3589\tisomair\nudp\t3589\tisomair\ntcp\t3590\twv-csp-sms\nudp\t3590\twv-csp-sms\ntcp\t3591\tgtrack-server\nudp\t3591\tgtrack-server\ntcp\t3592\tgtrack-ne\nudp\t3592\tgtrack-ne\ntcp\t3593\tbpmd\nudp\t3593\tbpmd\ntcp\t3594\tmediaspace\nudp\t3594\tmediaspace\ntcp\t3595\tshareapp\nudp\t3595\tshareapp\ntcp\t3596\tiw-mmogame\nudp\t3596\tiw-mmogame\ntcp\t3597\ta14\nudp\t3597\ta14\ntcp\t3598\ta15\nudp\t3598\ta15\ntcp\t3599\tquasar-server\nudp\t3599\tquasar-server\ntcp\t3600\ttrap-daemon\nudp\t3600\ttrap-daemon\ntcp\t3601\tvisinet-gui\nudp\t3601\tvisinet-gui\ntcp\t3602\tinfiniswitchcl\nudp\t3602\tinfiniswitchcl\ntcp\t3603\tint-rcv-cntrl\nudp\t3603\tint-rcv-cntrl\ntcp\t3604\tbmc-jmx-port\nudp\t3604\tbmc-jmx-port\ntcp\t3605\tcomcam-io\nudp\t3605\tcomcam-io\ntcp\t3606\tsplitlock\nudp\t3606\tsplitlock\ntcp\t3607\tprecise-i3\nudp\t3607\tprecise-i3\ntcp\t3608\ttrendchip-dcp\nudp\t3608\ttrendchip-dcp\ntcp\t3609\tcpdi-pidas-cm\nudp\t3609\tcpdi-pidas-cm\ntcp\t3610\techonet\nudp\t3610\techonet\ntcp\t3611\tsix-degrees\nudp\t3611\tsix-degrees\ntcp\t3612\thp-dataprotect\nudp\t3612\thp-dataprotect\ntcp\t3613\talaris-disc\nudp\t3613\talaris-disc\ntcp\t3614\tsigma-port\nudp\t3614\tsigma-port\ntcp\t3615\tstart-network\nudp\t3615\tstart-network\ntcp\t3616\tcd3o-protocol\nudp\t3616\tcd3o-protocol\ntcp\t3617\tsharp-server\nudp\t3617\tsharp-server\ntcp\t3618\taairnet-1\nudp\t3618\taairnet-1\ntcp\t3619\taairnet-2\nudp\t3619\taairnet-2\ntcp\t3620\tep-pcp\nudp\t3620\tep-pcp\ntcp\t3621\tep-nsp\nudp\t3621\tep-nsp\ntcp\t3622\tff-lr-port\nudp\t3622\tff-lr-port\ntcp\t3623\thaipe-discover\nudp\t3623\thaipe-discover\ntcp\t3624\tdist-upgrade\nudp\t3624\tdist-upgrade\ntcp\t3625\tvolley\nudp\t3625\tvolley\ntcp\t3626\tbvcdaemon-port\nudp\t3626\tbvcdaemon-port\ntcp\t3627\tjamserverport\nudp\t3627\tjamserverport\ntcp\t3628\tept-machine\nudp\t3628\tept-machine\ntcp\t3629\tescvpnet\nudp\t3629\tescvpnet\ntcp\t3630\tcs-remote-db\nudp\t3630\tcs-remote-db\ntcp\t3631\tcs-services\nudp\t3631\tcs-services\ntcp\t3632\tdistcc\nudp\t3632\tdistcc\ntcp\t3633\twacp\nudp\t3633\twacp\ntcp\t3634\thlibmgr\nudp\t3634\thlibmgr\ntcp\t3635\tsdo\nudp\t3635\tsdo\ntcp\t3636\tservistaitsm\nudp\t3636\tservistaitsm\ntcp\t3637\tscservp\nudp\t3637\tscservp\ntcp\t3638\tehp-backup\nudp\t3638\tehp-backup\ntcp\t3639\txap-ha\nudp\t3639\txap-ha\ntcp\t3640\tnetplay-port1\nudp\t3640\tnetplay-port1\ntcp\t3641\tnetplay-port2\nudp\t3641\tnetplay-port2\ntcp\t3642\tjuxml-port\nudp\t3642\tjuxml-port\ntcp\t3643\taudiojuggler\nudp\t3643\taudiojuggler\ntcp\t3644\tssowatch\nudp\t3644\tssowatch\ntcp\t3645\tcyc\nudp\t3645\tcyc\ntcp\t3646\txss-srv-port\nudp\t3646\txss-srv-port\ntcp\t3647\tsplitlock-gw\nudp\t3647\tsplitlock-gw\ntcp\t3648\tfjcp\nudp\t3648\tfjcp\ntcp\t3649\tnmmp\nudp\t3649\tnmmp\ntcp\t3650\tprismiq-plugin\nudp\t3650\tprismiq-plugin\ntcp\t3651\txrpc-registry\nudp\t3651\txrpc-registry\ntcp\t3652\tvxcrnbuport\nudp\t3652\tvxcrnbuport\ntcp\t3653\ttsp\nudp\t3653\ttsp\ntcp\t3654\tvaprtm\nudp\t3654\tvaprtm\ntcp\t3655\tabatemgr\nudp\t3655\tabatemgr\ntcp\t3656\tabatjss\nudp\t3656\tabatjss\ntcp\t3657\timmedianet-bcn\nudp\t3657\timmedianet-bcn\ntcp\t3658\tps-ams\nudp\t3658\tps-ams\ntcp\t3659\tapple-sasl\nudp\t3659\tapple-sasl\ntcp\t3660\tcan-nds-ssl\nudp\t3660\tcan-nds-ssl\ntcp\t3661\tcan-ferret-ssl\nudp\t3661\tcan-ferret-ssl\ntcp\t3662\tpserver\nudp\t3662\tpserver\ntcp\t3663\tdtp\nudp\t3663\tdtp\ntcp\t3664\tups-engine\nudp\t3664\tups-engine\ntcp\t3665\tent-engine\nudp\t3665\tent-engine\ntcp\t3666\teserver-pap\nudp\t3666\teserver-pap\ntcp\t3667\tinfoexch\nudp\t3667\tinfoexch\ntcp\t3668\tdell-rm-port\nudp\t3668\tdell-rm-port\ntcp\t3669\tcasanswmgmt\nudp\t3669\tcasanswmgmt\ntcp\t3670\tsmile\nudp\t3670\tsmile\ntcp\t3671\tefcp\nudp\t3671\tefcp\ntcp\t3672\tlispworks-orb\nudp\t3672\tlispworks-orb\ntcp\t3673\tmediavault-gui\nudp\t3673\tmediavault-gui\ntcp\t3674\twininstall-ipc\nudp\t3674\twininstall-ipc\ntcp\t3675\tcalltrax\nudp\t3675\tcalltrax\ntcp\t3676\tva-pacbase\nudp\t3676\tva-pacbase\ntcp\t3677\troverlog\nudp\t3677\troverlog\ntcp\t3678\tipr-dglt\nudp\t3678\tipr-dglt\ntcp\t3679\tEscale (Newton Dock)\nudp\t3679\tEscale (Newton Dock)\ntcp\t3680\tnpds-tracker\nudp\t3680\tnpds-tracker\ntcp\t3681\tbts-x73\nudp\t3681\tbts-x73\ntcp\t3682\tcas-mapi\nudp\t3682\tcas-mapi\ntcp\t3683\tbmc-ea\nudp\t3683\tbmc-ea\ntcp\t3684\tfaxstfx-port\nudp\t3684\tfaxstfx-port\ntcp\t3685\tdsx-agent\nudp\t3685\tdsx-agent\ntcp\t3686\ttnmpv2\nudp\t3686\ttnmpv2\ntcp\t3687\tsimple-push\nudp\t3687\tsimple-push\ntcp\t3688\tsimple-push-s\nudp\t3688\tsimple-push-s\ntcp\t3689\tdaap\nudp\t3689\tdaap\ntcp\t3690\tsvn\nudp\t3690\tsvn\ntcp\t3691\tmagaya-network\nudp\t3691\tmagaya-network\ntcp\t3692\tintelsync\nudp\t3692\tintelsync\ntcp\t3693\teasl\ntcp\t3695\tbmc-data-coll\nudp\t3695\tbmc-data-coll\ntcp\t3696\ttelnetcpcd\nudp\t3696\ttelnetcpcd\ntcp\t3697\tnw-license\nudp\t3697\tnw-license\ntcp\t3698\tsagectlpanel\nudp\t3698\tsagectlpanel\ntcp\t3699\tkpn-icw\nudp\t3699\tkpn-icw\ntcp\t3700\tlrs-paging\nudp\t3700\tlrs-paging\ntcp\t3701\tnetcelera\nudp\t3701\tnetcelera\ntcp\t3702\tws-discovery\nudp\t3702\tws-discovery\ntcp\t3703\tadobeserver-3\nudp\t3703\tadobeserver-3\ntcp\t3704\tadobeserver-4\nudp\t3704\tadobeserver-4\ntcp\t3705\tadobeserver-5\nudp\t3705\tadobeserver-5\ntcp\t3706\trt-event\nudp\t3706\trt-event\ntcp\t3707\trt-event-s\nudp\t3707\trt-event-s\ntcp\t3708\tsun-as-iiops\nudp\t3708\tsun-as-iiops\ntcp\t3709\tca-idms\nudp\t3709\tca-idms\ntcp\t3710\tportgate-auth\nudp\t3710\tportgate-auth\ntcp\t3711\tedb-server2\nudp\t3711\tedb-server2\ntcp\t3712\tsentinel-ent\nudp\t3712\tsentinel-ent\ntcp\t3713\ttftps\nudp\t3713\ttftps\ntcp\t3714\tdelos-dms\nudp\t3714\tdelos-dms\ntcp\t3715\tanoto-rendezv\nudp\t3715\tanoto-rendezv\ntcp\t3716\twv-csp-sms-cir\nudp\t3716\twv-csp-sms-cir\ntcp\t3717\twv-csp-udp-cir\nudp\t3717\twv-csp-udp-cir\ntcp\t3718\topus-services\nudp\t3718\topus-services\ntcp\t3719\titelserverport\nudp\t3719\titelserverport\ntcp\t3720\tufastro-instr\nudp\t3720\tufastro-instr\ntcp\t3721\txsync\nudp\t3721\txsync\ntcp\t3722\txserveraid\nudp\t3722\txserveraid\ntcp\t3723\tsychrond\nudp\t3723\tsychrond\ntcp\t3724\tblizwow\nudp\t3724\tblizwow\ntcp\t3725\tna-er-tip\nudp\t3725\tna-er-tip\ntcp\t3726\tarray-manager\nudp\t3726\tarray-manager\ntcp\t3727\te-mdu\nudp\t3727\te-mdu\ntcp\t3728\te-woa\nudp\t3728\te-woa\ntcp\t3729\tfksp-audit\nudp\t3729\tfksp-audit\ntcp\t3730\tclient-ctrl\nudp\t3730\tclient-ctrl\ntcp\t3731\tsmap\nudp\t3731\tsmap\ntcp\t3732\tm-wnn\nudp\t3732\tm-wnn\ntcp\t3733\tmultip-msg\nudp\t3733\tmultip-msg\ntcp\t3734\tsynel-data\nudp\t3734\tsynel-data\ntcp\t3735\tpwdis\nudp\t3735\tpwdis\ntcp\t3736\trs-rmi\nudp\t3736\trs-rmi\ntcp\t3737\txpanel\ntcp\t3738\tversatalk\nudp\t3738\tversatalk\ntcp\t3739\tlaunchbird-lm\nudp\t3739\tlaunchbird-lm\ntcp\t3740\theartbeat\nudp\t3740\theartbeat\ntcp\t3741\twysdma\nudp\t3741\twysdma\ntcp\t3742\tcst-port\nudp\t3742\tcst-port\ntcp\t3743\tipcs-command\nudp\t3743\tipcs-command\ntcp\t3744\tsasg\nudp\t3744\tsasg\ntcp\t3745\tgw-call-port\nudp\t3745\tgw-call-port\ntcp\t3746\tlinktest\nudp\t3746\tlinktest\ntcp\t3747\tlinktest-s\nudp\t3747\tlinktest-s\ntcp\t3748\twebdata\nudp\t3748\twebdata\ntcp\t3749\tcimtrak\nudp\t3749\tcimtrak\ntcp\t3750\tcbos-ip-port\nudp\t3750\tcbos-ip-port\ntcp\t3751\tgprs-cube\nudp\t3751\tgprs-cube\ntcp\t3752\tvipremoteagent\nudp\t3752\tvipremoteagent\ntcp\t3753\tnattyserver\nudp\t3753\tnattyserver\ntcp\t3754\ttimestenbroker\nudp\t3754\ttimestenbroker\ntcp\t3755\tsas-remote-hlp\nudp\t3755\tsas-remote-hlp\ntcp\t3756\tcanon-capt\nudp\t3756\tcanon-capt\ntcp\t3757\tgrf-port\nudp\t3757\tgrf-port\ntcp\t3758\tapw-registry\nudp\t3758\tapw-registry\ntcp\t3759\texapt-lmgr\nudp\t3759\texapt-lmgr\ntcp\t3760\tadtempusclient\nudp\t3760\tadtempusclient\ntcp\t3761\tgsakmp\nudp\t3761\tgsakmp\ntcp\t3762\tgbs-smp\nudp\t3762\tgbs-smp\ntcp\t3763\txo-wave\nudp\t3763\txo-wave\ntcp\t3764\tmni-prot-rout\nudp\t3764\tmni-prot-rout\ntcp\t3765\trtraceroute\nudp\t3765\trtraceroute\ntcp\t3766\tsitewatch-s\ntcp\t3767\tlistmgr-port\nudp\t3767\tlistmgr-port\ntcp\t3768\trblcheckd\nudp\t3768\trblcheckd\ntcp\t3769\thaipe-otnk\nudp\t3769\thaipe-otnk\ntcp\t3770\tcindycollab\nudp\t3770\tcindycollab\ntcp\t3771\tpaging-port\nudp\t3771\tpaging-port\ntcp\t3772\tctp\nudp\t3772\tctp\ntcp\t3773\tctdhercules\nudp\t3773\tctdhercules\ntcp\t3774\tzicom\nudp\t3774\tzicom\ntcp\t3775\tispmmgr\nudp\t3775\tispmmgr\ntcp\t3776\tdvcprov-port\nudp\t3776\tdvcprov-port\ntcp\t3777\tjibe-eb\nudp\t3777\tjibe-eb\ntcp\t3778\tc-h-it-port\nudp\t3778\tc-h-it-port\ntcp\t3779\tcognima\nudp\t3779\tcognima\ntcp\t3780\tnnp\nudp\t3780\tnnp\ntcp\t3781\tabcvoice-port\nudp\t3781\tabcvoice-port\ntcp\t3782\tiso-tp0s\nudp\t3782\tiso-tp0s\ntcp\t3783\tbim-pem\nudp\t3783\tbim-pem\ntcp\t3784\tbfd-control\nudp\t3784\tbfd-control\ntcp\t3785\tbfd-echo\nudp\t3785\tbfd-echo\ntcp\t3786\tupstriggervsw\nudp\t3786\tupstriggervsw\ntcp\t3787\tfintrx\nudp\t3787\tfintrx\ntcp\t3788\tisrp-port\nudp\t3788\tisrp-port\ntcp\t3789\tremotedeploy\nudp\t3789\tremotedeploy\ntcp\t3790\tquickbooksrds\nudp\t3790\tquickbooksrds\ntcp\t3791\ttvnetworkvideo\nudp\t3791\ttvnetworkvideo\ntcp\t3792\tsitewatch\nudp\t3792\tsitewatch\ntcp\t3793\tdcsoftware\nudp\t3793\tdcsoftware\ntcp\t3794\tjaus\nudp\t3794\tjaus\ntcp\t3795\tmyblast\nudp\t3795\tmyblast\ntcp\t3796\tspw-dialer\nudp\t3796\tspw-dialer\ntcp\t3797\tidps\nudp\t3797\tidps\ntcp\t3798\tminilock\nudp\t3798\tminilock\ntcp\t3799\tradius-dynauth\nudp\t3799\tradius-dynauth\ntcp\t3800\tpwgpsi\nudp\t3800\tpwgpsi\ntcp\t3801\tibm-mgr\nudp\t3801\tibm-mgr\ntcp\t3802\tvhd\nudp\t3802\tvhd\ntcp\t3803\tsoniqsync\nudp\t3803\tsoniqsync\ntcp\t3804\tiqnet-port\nudp\t3804\tiqnet-port\ntcp\t3805\ttcpdataserver\nudp\t3805\ttcpdataserver\ntcp\t3806\twsmlb\nudp\t3806\twsmlb\ntcp\t3807\tspugna\nudp\t3807\tspugna\ntcp\t3808\tsun-as-iiops-ca\nudp\t3808\tsun-as-iiops-ca\ntcp\t3809\tapocd\nudp\t3809\tapocd\ntcp\t3810\twlanauth\nudp\t3810\twlanauth\ntcp\t3811\tamp\nudp\t3811\tamp\ntcp\t3812\tneto-wol-server\nudp\t3812\tneto-wol-server\ntcp\t3813\trap-ip\nudp\t3813\trap-ip\ntcp\t3814\tneto-dcs\nudp\t3814\tneto-dcs\ntcp\t3815\tlansurveyorxml\nudp\t3815\tlansurveyorxml\ntcp\t3816\tsunlps-http\nudp\t3816\tsunlps-http\ntcp\t3817\ttapeware\nudp\t3817\ttapeware\ntcp\t3818\tcrinis-hb\nudp\t3818\tcrinis-hb\ntcp\t3819\tepl-slp\nudp\t3819\tepl-slp\ntcp\t3820\tscp\nudp\t3820\tscp\ntcp\t3821\tpmcp\nudp\t3821\tpmcp\ntcp\t3822\tacp-discovery\nudp\t3822\tacp-discovery\ntcp\t3823\tacp-conduit\nudp\t3823\tacp-conduit\ntcp\t3824\tacp-policy\nudp\t3824\tacp-policy\ntcp\t3825\tffserver\nudp\t3825\tffserver\ntcp\t3826\twarmux\nudp\t3826\twarmux\ntcp\t3827\tnetmpi\nudp\t3827\tnetmpi\ntcp\t3828\tneteh\nudp\t3828\tneteh\ntcp\t3829\tneteh-ext\nudp\t3829\tneteh-ext\ntcp\t3830\tcernsysmgmtagt\nudp\t3830\tcernsysmgmtagt\ntcp\t3831\tdvapps\nudp\t3831\tdvapps\ntcp\t3832\txxnetserver\nudp\t3832\txxnetserver\ntcp\t3833\taipn-auth\nudp\t3833\taipn-auth\ntcp\t3834\tspectardata\nudp\t3834\tspectardata\ntcp\t3835\tspectardb\nudp\t3835\tspectardb\ntcp\t3836\tmarkem-dcp\nudp\t3836\tmarkem-dcp\ntcp\t3837\tmkm-discovery\nudp\t3837\tmkm-discovery\ntcp\t3838\tsos\nudp\t3838\tsos\ntcp\t3839\tamx-rms\nudp\t3839\tamx-rms\ntcp\t3840\tflirtmitmir\nudp\t3840\tflirtmitmir\ntcp\t3841\tshiprush-db-svr\ntcp\t3842\tnhci\nudp\t3842\tnhci\ntcp\t3843\tquest-agent\nudp\t3843\tquest-agent\ntcp\t3844\trnm\nudp\t3844\trnm\ntcp\t3845\tv-one-spp\nudp\t3845\tv-one-spp\ntcp\t3846\tan-pcp\nudp\t3846\tan-pcp\ntcp\t3847\tmsfw-control\nudp\t3847\tmsfw-control\ntcp\t3848\titem\nudp\t3848\titem\ntcp\t3849\tspw-dnspreload\nudp\t3849\tspw-dnspreload\ntcp\t3850\tqtms-bootstrap\nudp\t3850\tqtms-bootstrap\ntcp\t3851\tspectraport\nudp\t3851\tspectraport\ntcp\t3852\tsse-app-config\nudp\t3852\tsse-app-config\ntcp\t3853\tsscan\nudp\t3853\tsscan\ntcp\t3854\tstryker-com\nudp\t3854\tstryker-com\ntcp\t3855\topentrac\nudp\t3855\topentrac\ntcp\t3856\tinformer\nudp\t3856\tinformer\ntcp\t3857\ttrap-port\nudp\t3857\ttrap-port\ntcp\t3858\ttrap-port-mom\nudp\t3858\ttrap-port-mom\ntcp\t3859\tnav-port\nudp\t3859\tnav-port\ntcp\t3860\tsasp\nudp\t3860\tsasp\ntcp\t3861\twinshadow-hd\nudp\t3861\twinshadow-hd\ntcp\t3862\tgiga-pocket\nudp\t3862\tgiga-pocket\ntcp\t3863\tasap-tcp\nudp\t3863\tasap-udp\ntcp\t3864\tasap-tcp-tls\ntcp\t3865\txpl\nudp\t3865\txpl\ntcp\t3866\tdzdaemon\nudp\t3866\tdzdaemon\ntcp\t3867\tdzoglserver\nudp\t3867\tdzoglserver\ntcp\t3868\tdiameter\ntcp\t3869\tovsam-mgmt\nudp\t3869\tovsam-mgmt\ntcp\t3870\tovsam-d-agent\nudp\t3870\tovsam-d-agent\ntcp\t3871\tavocent-adsap\nudp\t3871\tavocent-adsap\ntcp\t3872\toem-agent\nudp\t3872\toem-agent\ntcp\t3873\tfagordnc\nudp\t3873\tfagordnc\ntcp\t3874\tsixxsconfig\nudp\t3874\tsixxsconfig\ntcp\t3875\tpnbscada\nudp\t3875\tpnbscada\ntcp\t3876\tdl-agent\ntcp\t3876\tdl_agent\nudp\t3876\tdl-agent\nudp\t3876\tdl_agent\ntcp\t3877\txmpcr-interface\nudp\t3877\txmpcr-interface\ntcp\t3878\tfotogcad\nudp\t3878\tfotogcad\ntcp\t3879\tappss-lm\nudp\t3879\tappss-lm\ntcp\t3880\tigrs\nudp\t3880\tigrs\ntcp\t3881\tidac\nudp\t3881\tidac\ntcp\t3882\tmsdts1\nudp\t3882\tmsdts1\ntcp\t3883\tvrpn\nudp\t3883\tvrpn\ntcp\t3884\tsoftrack-meter\nudp\t3884\tsoftrack-meter\ntcp\t3885\ttopflow-ssl\nudp\t3885\ttopflow-ssl\ntcp\t3886\tnei-management\nudp\t3886\tnei-management\ntcp\t3887\tciphire-data\nudp\t3887\tciphire-data\ntcp\t3888\tciphire-serv\nudp\t3888\tciphire-serv\ntcp\t3889\tdandv-tester\nudp\t3889\tdandv-tester\ntcp\t3890\tndsconnect\nudp\t3890\tndsconnect\ntcp\t3891\trtc-pm-port\nudp\t3891\trtc-pm-port\ntcp\t3892\tpcc-image-port\nudp\t3892\tpcc-image-port\ntcp\t3893\tcgi-starapi\nudp\t3893\tcgi-starapi\ntcp\t3894\tsyam-agent\nudp\t3894\tsyam-agent\ntcp\t3895\tsyam-smc\nudp\t3895\tsyam-smc\ntcp\t3896\tsdo-tls\nudp\t3896\tsdo-tls\ntcp\t3897\tsdo-ssh\nudp\t3897\tsdo-ssh\ntcp\t3898\tsenip\nudp\t3898\tsenip\ntcp\t3899\titv-control\nudp\t3899\titv-control\ntcp\t3900\tudt-os\ntcp\t3900\tudt_os\nudp\t3900\tudt-os\nudp\t3900\tudt_os\ntcp\t3901\tnimsh\nudp\t3901\tnimsh\ntcp\t3902\tnimaux\nudp\t3902\tnimaux\ntcp\t3903\tcharsetmgr\nudp\t3903\tcharsetmgr\ntcp\t3904\tomnilink-port\nudp\t3904\tomnilink-port\ntcp\t3905\tmupdate\nudp\t3905\tmupdate\ntcp\t3906\ttopovista-data\nudp\t3906\ttopovista-data\ntcp\t3907\timoguia-port\nudp\t3907\timoguia-port\ntcp\t3908\thppronetman\nudp\t3908\thppronetman\ntcp\t3909\tsurfcontrolcpa\nudp\t3909\tsurfcontrolcpa\ntcp\t3910\tprnrequest\nudp\t3910\tprnrequest\ntcp\t3911\tprnstatus\nudp\t3911\tprnstatus\ntcp\t3912\tgbmt-stars\nudp\t3912\tgbmt-stars\ntcp\t3913\tlistcrt-port\nudp\t3913\tlistcrt-port\ntcp\t3914\tlistcrt-port-2\nudp\t3914\tlistcrt-port-2\ntcp\t3915\tagcat\nudp\t3915\tagcat\ntcp\t3916\twysdmc\nudp\t3916\twysdmc\ntcp\t3917\taftmux\nudp\t3917\taftmux\ntcp\t3918\tpktcablemmcops\nudp\t3918\tpktcablemmcops\ntcp\t3919\thyperip\nudp\t3919\thyperip\ntcp\t3920\texasoftport1\nudp\t3920\texasoftport1\ntcp\t3921\therodotus-net\nudp\t3921\therodotus-net\ntcp\t3922\tsor-update\nudp\t3922\tsor-update\ntcp\t3923\tsymb-sb-port\nudp\t3923\tsymb-sb-port\ntcp\t3924\tmpl-gprs-port\nudp\t3924\tmpl-gprs-port\ntcp\t3925\tzmp\nudp\t3925\tzmp\ntcp\t3926\twinport\nudp\t3926\twinport\ntcp\t3927\tnatdataservice\nudp\t3927\tnatdataservice\ntcp\t3928\tnetboot-pxe\nudp\t3928\tnetboot-pxe\ntcp\t3929\tsmauth-port\nudp\t3929\tsmauth-port\ntcp\t3930\tsyam-webserver\nudp\t3930\tsyam-webserver\ntcp\t3931\tmsr-plugin-port\nudp\t3931\tmsr-plugin-port\ntcp\t3932\tdyn-site\nudp\t3932\tdyn-site\ntcp\t3933\tplbserve-port\nudp\t3933\tplbserve-port\ntcp\t3934\tsunfm-port\nudp\t3934\tsunfm-port\ntcp\t3935\tsdp-portmapper\nudp\t3935\tsdp-portmapper\ntcp\t3936\tmailprox\nudp\t3936\tmailprox\ntcp\t3937\tdvbservdsc\nudp\t3937\tdvbservdsc\ntcp\t3938\tdbcontrol-agent\ntcp\t3938\tdbcontrol_agent\nudp\t3938\tdbcontrol-agent\nudp\t3938\tdbcontrol_agent\ntcp\t3939\taamp\nudp\t3939\taamp\ntcp\t3940\txecp-node\nudp\t3940\txecp-node\ntcp\t3941\thomeportal-web\nudp\t3941\thomeportal-web\ntcp\t3942\tsrdp\nudp\t3942\tsrdp\ntcp\t3943\ttig\nudp\t3943\ttig\ntcp\t3944\tsops\nudp\t3944\tsops\ntcp\t3945\temcads\nudp\t3945\temcads\ntcp\t3946\tbackupedge\nudp\t3946\tbackupedge\ntcp\t3947\tccp\nudp\t3947\tccp\ntcp\t3948\tapdap\nudp\t3948\tapdap\ntcp\t3949\tdrip\nudp\t3949\tdrip\ntcp\t3950\tnamemunge\nudp\t3950\tnamemunge\ntcp\t3951\tpwgippfax\nudp\t3951\tpwgippfax\ntcp\t3952\ti3-sessionmgr\nudp\t3952\ti3-sessionmgr\ntcp\t3953\txmlink-connect\nudp\t3953\txmlink-connect\ntcp\t3954\tadrep\nudp\t3954\tadrep\ntcp\t3955\tp2pcommunity\nudp\t3955\tp2pcommunity\ntcp\t3956\tgvcp\nudp\t3956\tgvcp\ntcp\t3957\tmqe-broker\nudp\t3957\tmqe-broker\ntcp\t3958\tmqe-agent\nudp\t3958\tmqe-agent\ntcp\t3959\ttreehopper\nudp\t3959\ttreehopper\ntcp\t3960\tbess\nudp\t3960\tbess\ntcp\t3961\tproaxess\nudp\t3961\tproaxess\ntcp\t3962\tsbi-agent\nudp\t3962\tsbi-agent\ntcp\t3963\tthrp\nudp\t3963\tthrp\ntcp\t3964\tsasggprs\nudp\t3964\tsasggprs\ntcp\t3965\tati-ip-to-ncpe\nudp\t3965\tati-ip-to-ncpe\ntcp\t3966\tbflckmgr\nudp\t3966\tbflckmgr\ntcp\t3967\tppsms\nudp\t3967\tppsms\ntcp\t3968\tianywhere-dbns\nudp\t3968\tianywhere-dbns\ntcp\t3969\tlandmarks\nudp\t3969\tlandmarks\ntcp\t3970\tlanrevagent\nudp\t3970\tlanrevagent\ntcp\t3971\tlanrevserver\nudp\t3971\tlanrevserver\ntcp\t3972\ticonp\nudp\t3972\ticonp\ntcp\t3973\tprogistics\nudp\t3973\tprogistics\ntcp\t3974\tcitysearch\nudp\t3974\tcitysearch\ntcp\t3975\tairshot\nudp\t3975\tairshot\ntcp\t3976\topswagent\nudp\t3976\topswagent\ntcp\t3977\topswmanager\nudp\t3977\topswmanager\ntcp\t3978\tsecure-cfg-svr\nudp\t3978\tsecure-cfg-svr\ntcp\t3979\tsmwan\nudp\t3979\tsmwan\ntcp\t3980\tacms\nudp\t3980\tacms\ntcp\t3981\tstarfish\nudp\t3981\tstarfish\ntcp\t3982\teis\nudp\t3982\teis\ntcp\t3983\teisp\nudp\t3983\teisp\ntcp\t3984\tmapper-nodemgr\nudp\t3984\tmapper-nodemgr\ntcp\t3985\tmapper-mapethd\nudp\t3985\tmapper-mapethd\ntcp\t3986\tmapper-ws-ethd\ntcp\t3986\tmapper-ws_ethd\nudp\t3986\tmapper-ws-ethd\nudp\t3986\tmapper-ws_ethd\ntcp\t3987\tcenterline\nudp\t3987\tcenterline\ntcp\t3988\tdcs-config\nudp\t3988\tdcs-config\ntcp\t3989\tbv-queryengine\nudp\t3989\tbv-queryengine\ntcp\t3990\tbv-is\nudp\t3990\tbv-is\ntcp\t3991\tbv-smcsrv\nudp\t3991\tbv-smcsrv\ntcp\t3992\tbv-ds\nudp\t3992\tbv-ds\ntcp\t3993\tbv-agent\nudp\t3993\tbv-agent\ntcp\t3995\tiss-mgmt-ssl\nudp\t3995\tiss-mgmt-ssl\ntcp\t3996\tabcsoftware\nudp\t3996\tabcsoftware\ntcp\t3997\tagentsease-db\nudp\t3997\tagentsease-db\ntcp\t3998\tdnx\nudp\t3998\tdnx\ntcp\t3999\tnvcnet\nudp\t3999\tnvcnet\ntcp\t4000\tterabase\nudp\t4000\tterabase\ntcp\t4001\tnewoak\nudp\t4001\tnewoak\ntcp\t4002\tpxc-spvr-ft\nudp\t4002\tpxc-spvr-ft\ntcp\t4003\tpxc-splr-ft\nudp\t4003\tpxc-splr-ft\ntcp\t4004\tpxc-roid\nudp\t4004\tpxc-roid\ntcp\t4005\tpxc-pin\nudp\t4005\tpxc-pin\ntcp\t4006\tpxc-spvr\nudp\t4006\tpxc-spvr\ntcp\t4007\tpxc-splr\nudp\t4007\tpxc-splr\ntcp\t4008\tnetcheque\nudp\t4008\tnetcheque\ntcp\t4009\tchimera-hwm\nudp\t4009\tchimera-hwm\ntcp\t4010\tsamsung-unidex\nudp\t4010\tsamsung-unidex\ntcp\t4011\taltserviceboot\nudp\t4011\taltserviceboot\ntcp\t4012\tpda-gate\nudp\t4012\tpda-gate\ntcp\t4013\tacl-manager\nudp\t4013\tacl-manager\ntcp\t4014\ttaiclock\nudp\t4014\ttaiclock\ntcp\t4015\ttalarian-mcast1\nudp\t4015\ttalarian-mcast1\ntcp\t4016\ttalarian-mcast2\nudp\t4016\ttalarian-mcast2\ntcp\t4017\ttalarian-mcast3\nudp\t4017\ttalarian-mcast3\ntcp\t4018\ttalarian-mcast4\nudp\t4018\ttalarian-mcast4\ntcp\t4019\ttalarian-mcast5\nudp\t4019\ttalarian-mcast5\ntcp\t4020\ttrap\nudp\t4020\ttrap\ntcp\t4021\tnexus-portal\nudp\t4021\tnexus-portal\ntcp\t4022\tdnox\nudp\t4022\tdnox\ntcp\t4023\tesnm-zoning\nudp\t4023\tesnm-zoning\ntcp\t4024\ttnp1-port\nudp\t4024\ttnp1-port\ntcp\t4025\tpartimage\nudp\t4025\tpartimage\ntcp\t4026\tas-debug\nudp\t4026\tas-debug\ntcp\t4027\tbxp\nudp\t4027\tbxp\ntcp\t4028\tdtserver-port\nudp\t4028\tdtserver-port\ntcp\t4029\tip-qsig\nudp\t4029\tip-qsig\ntcp\t4030\tjdmn-port\nudp\t4030\tjdmn-port\ntcp\t4031\tsuucp\nudp\t4031\tsuucp\ntcp\t4032\tvrts-auth-port\nudp\t4032\tvrts-auth-port\ntcp\t4033\tsanavigator\nudp\t4033\tsanavigator\ntcp\t4034\tubxd\nudp\t4034\tubxd\ntcp\t4035\twap-push-http\nudp\t4035\twap-push-http\ntcp\t4036\twap-push-https\nudp\t4036\twap-push-https\ntcp\t4037\travehd\nudp\t4037\travehd\ntcp\t4038\tfazzt-ptp\nudp\t4038\tfazzt-ptp\ntcp\t4039\tfazzt-admin\nudp\t4039\tfazzt-admin\ntcp\t4040\tyo-main\nudp\t4040\tyo-main\ntcp\t4041\thouston\nudp\t4041\thouston\ntcp\t4042\tldxp\nudp\t4042\tldxp\ntcp\t4043\tnirp\nudp\t4043\tnirp\ntcp\t4044\tltp\nudp\t4044\tltp\ntcp\t4045\tnpp\nudp\t4045\tnpp\ntcp\t4046\tacp-proto\nudp\t4046\tacp-proto\ntcp\t4047\tctp-state\nudp\t4047\tctp-state\ntcp\t4049\twafs\nudp\t4049\twafs\ntcp\t4050\tcisco-wafs\nudp\t4050\tcisco-wafs\ntcp\t4051\tcppdp\nudp\t4051\tcppdp\ntcp\t4052\tinteract\nudp\t4052\tinteract\ntcp\t4053\tccu-comm-1\nudp\t4053\tccu-comm-1\ntcp\t4054\tccu-comm-2\nudp\t4054\tccu-comm-2\ntcp\t4055\tccu-comm-3\nudp\t4055\tccu-comm-3\ntcp\t4056\tlms\nudp\t4056\tlms\ntcp\t4057\twfm\nudp\t4057\twfm\ntcp\t4058\tkingfisher\nudp\t4058\tkingfisher\ntcp\t4059\tdlms-cosem\nudp\t4059\tdlms-cosem\ntcp\t4060\tdsmeter-iatc\ntcp\t4060\tdsmeter_iatc\nudp\t4060\tdsmeter-iatc\nudp\t4060\tdsmeter_iatc\ntcp\t4061\tice-location\nudp\t4061\tice-location\ntcp\t4062\tice-slocation\nudp\t4062\tice-slocation\ntcp\t4063\tice-router\nudp\t4063\tice-router\ntcp\t4064\tice-srouter\nudp\t4064\tice-srouter\ntcp\t4065\tavanti-cdp\ntcp\t4065\tavanti_cdp\nudp\t4065\tavanti-cdp\nudp\t4065\tavanti_cdp\ntcp\t4066\tpmas\nudp\t4066\tpmas\ntcp\t4067\tidp\nudp\t4067\tidp\ntcp\t4068\tipfltbcst\nudp\t4068\tipfltbcst\ntcp\t4069\tminger\nudp\t4069\tminger\ntcp\t4070\ttripe\nudp\t4070\ttripe\ntcp\t4071\taibkup\nudp\t4071\taibkup\ntcp\t4072\tzieto-sock\nudp\t4072\tzieto-sock\ntcp\t4073\tiRAPP\nudp\t4073\tiRAPP\ntcp\t4074\tcequint-cityid\nudp\t4074\tcequint-cityid\ntcp\t4075\tperimlan\nudp\t4075\tperimlan\ntcp\t4076\tseraph\nudp\t4076\tseraph\nudp\t4077\tascomalarm\ntcp\t4078\tcssp\ntcp\t4079\tsantools\nudp\t4079\tsantools\ntcp\t4080\tlorica-in\nudp\t4080\tlorica-in\ntcp\t4081\tlorica-in-sec\nudp\t4081\tlorica-in-sec\ntcp\t4082\tlorica-out\nudp\t4082\tlorica-out\ntcp\t4083\tlorica-out-sec\nudp\t4083\tlorica-out-sec\nudp\t4084\tfortisphere-vm\ntcp\t4085\tezmessagesrv\nudp\t4086\tftsync\ntcp\t4087\tapplusservice\ntcp\t4088\tnpsp\ntcp\t4089\topencore\nudp\t4089\topencore\ntcp\t4090\tomasgport\nudp\t4090\tomasgport\ntcp\t4091\tewinstaller\nudp\t4091\tewinstaller\ntcp\t4092\tewdgs\nudp\t4092\tewdgs\ntcp\t4093\tpvxpluscs\nudp\t4093\tpvxpluscs\ntcp\t4094\tsysrqd\nudp\t4094\tsysrqd\ntcp\t4095\txtgui\nudp\t4095\txtgui\ntcp\t4096\tbre\nudp\t4096\tbre\ntcp\t4097\tpatrolview\nudp\t4097\tpatrolview\ntcp\t4098\tdrmsfsd\nudp\t4098\tdrmsfsd\ntcp\t4099\tdpcp\nudp\t4099\tdpcp\ntcp\t4100\tigo-incognito\nudp\t4100\tigo-incognito\ntcp\t4101\tbrlp-0\nudp\t4101\tbrlp-0\ntcp\t4102\tbrlp-1\nudp\t4102\tbrlp-1\ntcp\t4103\tbrlp-2\nudp\t4103\tbrlp-2\ntcp\t4104\tbrlp-3\nudp\t4104\tbrlp-3\ntcp\t4105\tshofar\nudp\t4105\tshofar\ntcp\t4106\tsynchronite\nudp\t4106\tsynchronite\ntcp\t4107\tj-ac\nudp\t4107\tj-ac\ntcp\t4108\taccel\nudp\t4108\taccel\ntcp\t4109\tizm\nudp\t4109\tizm\ntcp\t4110\tg2tag\nudp\t4110\tg2tag\ntcp\t4111\txgrid\nudp\t4111\txgrid\ntcp\t4112\tapple-vpns-rp\nudp\t4112\tapple-vpns-rp\ntcp\t4113\taipn-reg\nudp\t4113\taipn-reg\ntcp\t4114\tjomamqmonitor\nudp\t4114\tjomamqmonitor\ntcp\t4115\tcds\nudp\t4115\tcds\ntcp\t4116\tsmartcard-tls\nudp\t4116\tsmartcard-tls\ntcp\t4117\thillrserv\nudp\t4117\thillrserv\ntcp\t4118\tnetscript\nudp\t4118\tnetscript\ntcp\t4119\tassuria-slm\nudp\t4119\tassuria-slm\ntcp\t4120\tminirem\ntcp\t4121\te-builder\nudp\t4121\te-builder\ntcp\t4122\tfprams\nudp\t4122\tfprams\ntcp\t4123\tz-wave\nudp\t4123\tz-wave\ntcp\t4124\ttigv2\nudp\t4124\ttigv2\ntcp\t4125\topsview-envoy\nudp\t4125\topsview-envoy\ntcp\t4126\tddrepl\nudp\t4126\tddrepl\ntcp\t4127\tunikeypro\nudp\t4127\tunikeypro\ntcp\t4128\tnufw\nudp\t4128\tnufw\ntcp\t4129\tnuauth\nudp\t4129\tnuauth\ntcp\t4130\tfronet\nudp\t4130\tfronet\ntcp\t4131\tstars\nudp\t4131\tstars\ntcp\t4132\tnuts-dem\ntcp\t4132\tnuts_dem\nudp\t4132\tnuts-dem\nudp\t4132\tnuts_dem\ntcp\t4133\tnuts-bootp\ntcp\t4133\tnuts_bootp\nudp\t4133\tnuts-bootp\nudp\t4133\tnuts_bootp\ntcp\t4134\tnifty-hmi\nudp\t4134\tnifty-hmi\ntcp\t4135\tcl-db-attach\nudp\t4135\tcl-db-attach\ntcp\t4136\tcl-db-request\nudp\t4136\tcl-db-request\ntcp\t4137\tcl-db-remote\nudp\t4137\tcl-db-remote\ntcp\t4138\tnettest\nudp\t4138\tnettest\ntcp\t4139\tthrtx\nudp\t4139\tthrtx\ntcp\t4140\tcedros-fds\ntcp\t4140\tcedros_fds\nudp\t4140\tcedros-fds\nudp\t4140\tcedros_fds\ntcp\t4141\toirtgsvc\nudp\t4141\toirtgsvc\ntcp\t4142\toidocsvc\nudp\t4142\toidocsvc\ntcp\t4143\toidsr\nudp\t4143\toidsr\ntcp\t4145\tvvr-control\nudp\t4145\tvvr-control\ntcp\t4146\ttgcconnect\nudp\t4146\ttgcconnect\ntcp\t4147\tvrxpservman\nudp\t4147\tvrxpservman\ntcp\t4148\thhb-handheld\nudp\t4148\thhb-handheld\ntcp\t4149\tagslb\nudp\t4149\tagslb\ntcp\t4150\tPowerAlert-nsa\nudp\t4150\tPowerAlert-nsa\ntcp\t4151\tmenandmice-noh\ntcp\t4151\tmenandmice_noh\nudp\t4151\tmenandmice-noh\nudp\t4151\tmenandmice_noh\ntcp\t4152\tidig-mux\ntcp\t4152\tidig_mux\nudp\t4152\tidig-mux\nudp\t4152\tidig_mux\ntcp\t4153\tmbl-battd\nudp\t4153\tmbl-battd\ntcp\t4154\tatlinks\nudp\t4154\tatlinks\ntcp\t4155\tbzr\nudp\t4155\tbzr\ntcp\t4156\tstat-results\nudp\t4156\tstat-results\ntcp\t4157\tstat-scanner\nudp\t4157\tstat-scanner\ntcp\t4158\tstat-cc\nudp\t4158\tstat-cc\ntcp\t4159\tnss\nudp\t4159\tnss\ntcp\t4160\tjini-discovery\nudp\t4160\tjini-discovery\ntcp\t4161\tomscontact\nudp\t4161\tomscontact\ntcp\t4162\tomstopology\nudp\t4162\tomstopology\ntcp\t4163\tsilverpeakpeer\nudp\t4163\tsilverpeakpeer\ntcp\t4164\tsilverpeakcomm\nudp\t4164\tsilverpeakcomm\ntcp\t4165\taltcp\nudp\t4165\taltcp\ntcp\t4166\tjoost\nudp\t4166\tjoost\ntcp\t4167\tddgn\nudp\t4167\tddgn\ntcp\t4168\tpslicser\nudp\t4168\tpslicser\ntcp\t4169\tiadt\nudp\t4169\tiadt-disc\ntcp\t4170\td-cinema-csp\ntcp\t4171\tml-svnet\ntcp\t4172\tpcoip\nudp\t4172\tpcoip\nudp\t4173\tmma-discovery\ntcp\t4174\tsmcluster\nudp\t4174\tsm-disc\ntcp\t4175\tbccp\ntcp\t4176\ttl-ipcproxy\ntcp\t4177\twello\nudp\t4177\twello\ntcp\t4178\tstorman\nudp\t4178\tstorman\ntcp\t4179\tMaxumSP\nudp\t4179\tMaxumSP\ntcp\t4180\thttpx\nudp\t4180\thttpx\ntcp\t4181\tmacbak\nudp\t4181\tmacbak\ntcp\t4182\tpcptcpservice\nudp\t4182\tpcptcpservice\ntcp\t4183\tcyborgnet\nudp\t4183\tcyborgnet\ntcp\t4184\tuniverse-suite\ntcp\t4184\tuniverse_suite\nudp\t4184\tuniverse-suite\nudp\t4184\tuniverse_suite\ntcp\t4185\twcpp\nudp\t4185\twcpp\ntcp\t4186\tboxbackupstore\ntcp\t4187\tcsc-proxy\ntcp\t4187\tcsc_proxy\ntcp\t4188\tvatata\nudp\t4188\tvatata\ntcp\t4189\tpcep\ntcp\t4190\tsieve\nudp\t4191\tdsmipv6\ntcp\t4192\tazeti\nudp\t4192\tazeti-bd\ntcp\t4193\tpvxplusio\ntcp\t4197\thctl\nudp\t4197\thctl\ntcp\t4199\teims-admin\nudp\t4199\teims-admin\ntcp\t4300\tcorelccam\nudp\t4300\tcorelccam\ntcp\t4301\td-data\nudp\t4301\td-data\ntcp\t4302\td-data-control\nudp\t4302\td-data-control\ntcp\t4303\tsrcp\nudp\t4303\tsrcp\ntcp\t4304\towserver\nudp\t4304\towserver\ntcp\t4305\tbatman\nudp\t4305\tbatman\ntcp\t4306\tpinghgl\nudp\t4306\tpinghgl\ntcp\t4307\ttrueconf\nudp\t4307\ttrueconf\ntcp\t4308\tcompx-lockview\nudp\t4308\tcompx-lockview\ntcp\t4309\tdserver\nudp\t4309\tdserver\ntcp\t4310\tmirrtex\nudp\t4310\tmirrtex\ntcp\t4311\tp6ssmc\ntcp\t4312\tpscl-mgt\ntcp\t4313\tperrla\ntcp\t4314\tchoiceview-agt\ntcp\t4316\tchoiceview-clt\ntcp\t4320\tfdt-rcatp\nudp\t4320\tfdt-rcatp\ntcp\t4321\trwhois\nudp\t4321\trwhois\ntcp\t4322\ttrim-event\nudp\t4322\ttrim-event\ntcp\t4323\ttrim-ice\nudp\t4323\ttrim-ice\ntcp\t4325\tgeognosisman\nudp\t4325\tgeognosisman\ntcp\t4326\tgeognosis\nudp\t4326\tgeognosis\ntcp\t4327\tjaxer-web\nudp\t4327\tjaxer-web\ntcp\t4328\tjaxer-manager\nudp\t4328\tjaxer-manager\ntcp\t4329\tpubliqare-sync\ntcp\t4330\tdey-sapi\ntcp\t4331\tktickets-rest\ntcp\t4333\tahsp\nudp\t4333\tahsp\ntcp\t4334\tnetconf-ch-ssh\ntcp\t4335\tnetconf-ch-tls\ntcp\t4336\trestconf-ch-tls\ntcp\t4340\tgaia\nudp\t4340\tgaia\ntcp\t4341\tlisp-data\nudp\t4341\tlisp-data\ntcp\t4342\tlisp-cons\nudp\t4342\tlisp-control\ntcp\t4343\tunicall\nudp\t4343\tunicall\ntcp\t4344\tvinainstall\nudp\t4344\tvinainstall\ntcp\t4345\tm4-network-as\nudp\t4345\tm4-network-as\ntcp\t4346\telanlm\nudp\t4346\telanlm\ntcp\t4347\tlansurveyor\nudp\t4347\tlansurveyor\ntcp\t4348\titose\nudp\t4348\titose\ntcp\t4349\tfsportmap\nudp\t4349\tfsportmap\ntcp\t4350\tnet-device\nudp\t4350\tnet-device\ntcp\t4351\tplcy-net-svcs\nudp\t4351\tplcy-net-svcs\ntcp\t4352\tpjlink\nudp\t4352\tpjlink\ntcp\t4353\tf5-iquery\nudp\t4353\tf5-iquery\ntcp\t4354\tqsnet-trans\nudp\t4354\tqsnet-trans\ntcp\t4355\tqsnet-workst\nudp\t4355\tqsnet-workst\ntcp\t4356\tqsnet-assist\nudp\t4356\tqsnet-assist\ntcp\t4357\tqsnet-cond\nudp\t4357\tqsnet-cond\ntcp\t4358\tqsnet-nucl\nudp\t4358\tqsnet-nucl\ntcp\t4359\tomabcastltkm\nudp\t4359\tomabcastltkm\ntcp\t4360\tmatrix-vnet\ntcp\t4360\tmatrix_vnet\nudp\t4361\tnacnl\nudp\t4362\tafore-vdp-disc\nudp\t4366\tshadowstream\ntcp\t4368\twxbrief\nudp\t4368\twxbrief\ntcp\t4369\tepmd\nudp\t4369\tepmd\ntcp\t4370\telpro-tunnel\ntcp\t4370\telpro_tunnel\nudp\t4370\telpro-tunnel\nudp\t4370\telpro_tunnel\ntcp\t4371\tl2c-control\nudp\t4371\tl2c-disc\ntcp\t4372\tl2c-data\nudp\t4372\tl2c-data\ntcp\t4373\tremctl\nudp\t4373\tremctl\ntcp\t4374\tpsi-ptt\ntcp\t4375\ttolteces\nudp\t4375\ttolteces\ntcp\t4376\tbip\nudp\t4376\tbip\ntcp\t4377\tcp-spxsvr\nudp\t4377\tcp-spxsvr\ntcp\t4378\tcp-spxdpy\nudp\t4378\tcp-spxdpy\ntcp\t4379\tctdb\nudp\t4379\tctdb\ntcp\t4389\txandros-cms\nudp\t4389\txandros-cms\ntcp\t4390\twiegand\nudp\t4390\twiegand\ntcp\t4391\tapwi-imserver\ntcp\t4392\tapwi-rxserver\ntcp\t4393\tapwi-rxspooler\nudp\t4394\tapwi-disc\ntcp\t4395\tomnivisionesx\nudp\t4395\tomnivisionesx\ntcp\t4396\tfly\ntcp\t4400\tds-srv\nudp\t4400\tds-srv\ntcp\t4401\tds-srvr\nudp\t4401\tds-srvr\ntcp\t4402\tds-clnt\nudp\t4402\tds-clnt\ntcp\t4403\tds-user\nudp\t4403\tds-user\ntcp\t4404\tds-admin\nudp\t4404\tds-admin\ntcp\t4405\tds-mail\nudp\t4405\tds-mail\ntcp\t4406\tds-slp\nudp\t4406\tds-slp\ntcp\t4407\tnacagent\ntcp\t4408\tslscc\ntcp\t4409\tnetcabinet-com\ntcp\t4410\titwo-server\ntcp\t4411\tfound\nudp\t4412\tsmallchat\ntcp\t4413\tavi-nms\nudp\t4413\tavi-nms-disc\ntcp\t4414\tupdog\ntcp\t4415\tbrcd-vr-req\ntcp\t4416\tpjj-player\nudp\t4416\tpjj-player-disc\ntcp\t4417\tworkflowdir\nudp\t4418\taxysbridge\ntcp\t4419\tcbp\ntcp\t4420\tnvme\nudp\t4420\tnvme\ntcp\t4421\tscaleft\ntcp\t4422\ttsepisp\ntcp\t4423\tthingkit\ntcp\t4425\tnetrockey6\nudp\t4425\tnetrockey6\ntcp\t4426\tbeacon-port-2\nudp\t4426\tbeacon-port-2\ntcp\t4427\tdrizzle\ntcp\t4428\tomviserver\ntcp\t4429\tomviagent\ntcp\t4430\trsqlserver\nudp\t4430\trsqlserver\ntcp\t4431\twspipe\ntcp\t4432\tl-acoustics\nudp\t4432\tl-acoustics\ntcp\t4433\tvop\nudp\t4441\tnetblox\ntcp\t4442\tsaris\nudp\t4442\tsaris\ntcp\t4443\tpharos\nudp\t4443\tpharos\ntcp\t4444\tkrb524\nudp\t4444\tkrb524\ntcp\t4444\tnv-video\nudp\t4444\tnv-video\ntcp\t4445\tupnotifyp\nudp\t4445\tupnotifyp\ntcp\t4446\tn1-fwp\nudp\t4446\tn1-fwp\ntcp\t4447\tn1-rmgmt\nudp\t4447\tn1-rmgmt\ntcp\t4448\tasc-slmd\nudp\t4448\tasc-slmd\ntcp\t4449\tprivatewire\nudp\t4449\tprivatewire\ntcp\t4450\tcamp\nudp\t4450\tcamp\ntcp\t4451\tctisystemmsg\nudp\t4451\tctisystemmsg\ntcp\t4452\tctiprogramload\nudp\t4452\tctiprogramload\ntcp\t4453\tnssalertmgr\nudp\t4453\tnssalertmgr\ntcp\t4454\tnssagentmgr\nudp\t4454\tnssagentmgr\ntcp\t4455\tprchat-user\nudp\t4455\tprchat-user\ntcp\t4456\tprchat-server\nudp\t4456\tprchat-server\ntcp\t4457\tprRegister\nudp\t4457\tprRegister\ntcp\t4458\tmcp\nudp\t4458\tmcp\ntcp\t4484\thpssmgmt\nudp\t4484\thpssmgmt\ntcp\t4485\tassyst-dr\ntcp\t4486\ticms\nudp\t4486\ticms\ntcp\t4487\tprex-tcp\ntcp\t4488\tawacs-ice\nudp\t4488\tawacs-ice\ntcp\t4500\tipsec-nat-t\nudp\t4500\tipsec-nat-t\nudp\t4534\tarmagetronad\ntcp\t4535\tehs\nudp\t4535\tehs\ntcp\t4536\tehs-ssl\nudp\t4536\tehs-ssl\ntcp\t4537\twssauthsvc\nudp\t4537\twssauthsvc\ntcp\t4538\tswx-gate\nudp\t4538\tswx-gate\ntcp\t4545\tworldscores\nudp\t4545\tworldscores\ntcp\t4546\tsf-lm\nudp\t4546\tsf-lm\ntcp\t4547\tlanner-lm\nudp\t4547\tlanner-lm\ntcp\t4548\tsynchromesh\nudp\t4548\tsynchromesh\ntcp\t4549\taegate\nudp\t4549\taegate\ntcp\t4550\tgds-adppiw-db\nudp\t4550\tgds-adppiw-db\ntcp\t4551\tieee-mih\nudp\t4551\tieee-mih\ntcp\t4552\tmenandmice-mon\nudp\t4552\tmenandmice-mon\ntcp\t4553\ticshostsvc\ntcp\t4554\tmsfrs\nudp\t4554\tmsfrs\ntcp\t4555\trsip\nudp\t4555\trsip\ntcp\t4556\tdtn-bundle\nudp\t4556\tdtn-bundle\nudp\t4557\tmtcevrunqss\nudp\t4558\tmtcevrunqman\ntcp\t4559\thylafax\nudp\t4559\thylafax\ntcp\t4563\tamahi-anywhere\ntcp\t4566\tkwtc\nudp\t4566\tkwtc\ntcp\t4567\ttram\nudp\t4567\ttram\ntcp\t4568\tbmc-reporting\nudp\t4568\tbmc-reporting\ntcp\t4569\tiax\nudp\t4569\tiax\ntcp\t4570\tdeploymentmap\ntcp\t4573\tcardifftec-back\ntcp\t4590\trid\ntcp\t4591\tl3t-at-an\nudp\t4591\tl3t-at-an\nudp\t4592\thrpd-ith-at-an\ntcp\t4593\tipt-anri-anri\nudp\t4593\tipt-anri-anri\ntcp\t4594\tias-session\nudp\t4594\tias-session\ntcp\t4595\tias-paging\nudp\t4595\tias-paging\ntcp\t4596\tias-neighbor\nudp\t4596\tias-neighbor\ntcp\t4597\ta21-an-1xbs\nudp\t4597\ta21-an-1xbs\ntcp\t4598\ta16-an-an\nudp\t4598\ta16-an-an\ntcp\t4599\ta17-an-an\nudp\t4599\ta17-an-an\ntcp\t4600\tpiranha1\nudp\t4600\tpiranha1\ntcp\t4601\tpiranha2\nudp\t4601\tpiranha2\ntcp\t4602\tmtsserver\ntcp\t4603\tmenandmice-upg\ntcp\t4604\tirp\ntcp\t4605\tsixchat\nudp\t4621\tventoso\ntcp\t4658\tplaysta2-app\nudp\t4658\tplaysta2-app\ntcp\t4659\tplaysta2-lob\nudp\t4659\tplaysta2-lob\ntcp\t4660\tsmaclmgr\nudp\t4660\tsmaclmgr\ntcp\t4661\tkar2ouche\nudp\t4661\tkar2ouche\ntcp\t4662\toms\nudp\t4662\toms\ntcp\t4663\tnoteit\nudp\t4663\tnoteit\ntcp\t4664\tems\nudp\t4664\tems\ntcp\t4665\tcontclientms\nudp\t4665\tcontclientms\ntcp\t4666\teportcomm\nudp\t4666\teportcomm\ntcp\t4667\tmmacomm\nudp\t4667\tmmacomm\ntcp\t4668\tmmaeds\nudp\t4668\tmmaeds\ntcp\t4669\teportcommdata\nudp\t4669\teportcommdata\ntcp\t4670\tlight\nudp\t4670\tlight\ntcp\t4671\tacter\nudp\t4671\tacter\ntcp\t4672\trfa\nudp\t4672\trfa\ntcp\t4673\tcxws\nudp\t4673\tcxws\ntcp\t4674\tappiq-mgmt\nudp\t4674\tappiq-mgmt\ntcp\t4675\tdhct-status\nudp\t4675\tdhct-status\ntcp\t4676\tdhct-alerts\nudp\t4676\tdhct-alerts\ntcp\t4677\tbcs\nudp\t4677\tbcs\ntcp\t4678\ttraversal\nudp\t4678\ttraversal\ntcp\t4679\tmgesupervision\nudp\t4679\tmgesupervision\ntcp\t4680\tmgemanagement\nudp\t4680\tmgemanagement\ntcp\t4681\tparliant\nudp\t4681\tparliant\ntcp\t4682\tfinisar\nudp\t4682\tfinisar\ntcp\t4683\tspike\nudp\t4683\tspike\ntcp\t4684\trfid-rp1\nudp\t4684\trfid-rp1\ntcp\t4685\tautopac\nudp\t4685\tautopac\ntcp\t4686\tmsp-os\nudp\t4686\tmsp-os\ntcp\t4687\tnst\nudp\t4687\tnst\ntcp\t4688\tmobile-p2p\nudp\t4688\tmobile-p2p\ntcp\t4689\taltovacentral\nudp\t4689\taltovacentral\ntcp\t4690\tprelude\nudp\t4690\tprelude\ntcp\t4691\tmtn\nudp\t4691\tmtn\ntcp\t4692\tconspiracy\nudp\t4692\tconspiracy\ntcp\t4700\tnetxms-agent\nudp\t4700\tnetxms-agent\ntcp\t4701\tnetxms-mgmt\nudp\t4701\tnetxms-mgmt\ntcp\t4702\tnetxms-sync\nudp\t4702\tnetxms-sync\ntcp\t4703\tnpqes-test\ntcp\t4704\tassuria-ins\ntcp\t4711\ttrinity-dist\nudp\t4711\ttrinity-dist\ntcp\t4725\ttruckstar\nudp\t4725\ttruckstar\nudp\t4726\ta26-fap-fgw\ntcp\t4727\tfcis\nudp\t4727\tfcis-disc\ntcp\t4728\tcapmux\nudp\t4728\tcapmux\nudp\t4729\tgsmtap\ntcp\t4730\tgearman\nudp\t4730\tgearman\ntcp\t4731\tremcap\nudp\t4732\tohmtrigger\ntcp\t4733\tresorcs\ntcp\t4737\tipdr-sp\nudp\t4737\tipdr-sp\ntcp\t4738\tsolera-lpn\nudp\t4738\tsolera-lpn\ntcp\t4739\tipfix\nudp\t4739\tipfix\ntcp\t4740\tipfixs\nudp\t4740\tipfixs\ntcp\t4741\tlumimgrd\nudp\t4741\tlumimgrd\ntcp\t4742\tsicct\nudp\t4742\tsicct-sdp\ntcp\t4743\topenhpid\nudp\t4743\topenhpid\ntcp\t4744\tifsp\nudp\t4744\tifsp\ntcp\t4745\tfmp\nudp\t4745\tfmp\nudp\t4746\tintelliadm-disc\nudp\t4747\tbuschtrommel\ntcp\t4749\tprofilemac\nudp\t4749\tprofilemac\ntcp\t4750\tssad\nudp\t4750\tssad\ntcp\t4751\tspocp\nudp\t4751\tspocp\ntcp\t4752\tsnap\nudp\t4752\tsnap\ntcp\t4753\tsimon\nudp\t4753\tsimon-disc\nudp\t4754\tgre-in-udp\nudp\t4755\tgre-udp-dtls\ntcp\t4756\tRDCenter\ntcp\t4774\tconverge\ntcp\t4784\tbfd-multi-ctl\nudp\t4784\tbfd-multi-ctl\nudp\t4785\tcncp\ntcp\t4786\tsmart-install\ntcp\t4787\tsia-ctrl-plane\ntcp\t4788\txmcp\nudp\t4789\tvxlan\nudp\t4790\tvxlan-gpe\nudp\t4791\troce\ntcp\t4800\tiims\nudp\t4800\tiims\ntcp\t4801\tiwec\nudp\t4801\tiwec\ntcp\t4802\tilss\nudp\t4802\tilss\ntcp\t4803\tnotateit\nudp\t4803\tnotateit-disc\nudp\t4804\taja-ntv4-disc\ntcp\t4827\thtcp\nudp\t4827\thtcp\ntcp\t4837\tvaradero-0\nudp\t4837\tvaradero-0\ntcp\t4838\tvaradero-1\nudp\t4838\tvaradero-1\ntcp\t4839\tvaradero-2\nudp\t4839\tvaradero-2\ntcp\t4840\topcua-tcp\nudp\t4840\topcua-udp\ntcp\t4841\tquosa\nudp\t4841\tquosa\ntcp\t4842\tgw-asv\nudp\t4842\tgw-asv\ntcp\t4843\topcua-tls\nudp\t4843\topcua-tls\ntcp\t4844\tgw-log\nudp\t4844\tgw-log\ntcp\t4845\twcr-remlib\nudp\t4845\twcr-remlib\ntcp\t4846\tcontamac-icm\ntcp\t4846\tcontamac_icm\nudp\t4846\tcontamac-icm\nudp\t4846\tcontamac_icm\ntcp\t4847\twfc\nudp\t4847\twfc\ntcp\t4848\tappserv-http\nudp\t4848\tappserv-http\ntcp\t4849\tappserv-https\nudp\t4849\tappserv-https\ntcp\t4850\tsun-as-nodeagt\nudp\t4850\tsun-as-nodeagt\ntcp\t4851\tderby-repli\nudp\t4851\tderby-repli\ntcp\t4867\tunify-debug\nudp\t4867\tunify-debug\ntcp\t4868\tphrelay\nudp\t4868\tphrelay\ntcp\t4869\tphrelaydbg\nudp\t4869\tphrelaydbg\ntcp\t4870\tcc-tracking\nudp\t4870\tcc-tracking\ntcp\t4871\twired\nudp\t4871\twired\ntcp\t4876\ttritium-can\nudp\t4876\ttritium-can\ntcp\t4877\tlmcs\nudp\t4877\tlmcs\nudp\t4878\tinst-discovery\ntcp\t4879\twsdl-event\ntcp\t4880\thislip\nudp\t4881\tsocp-t\nudp\t4882\tsocp-c\ntcp\t4883\twmlserver\ntcp\t4884\thivestor\nudp\t4884\thivestor\ntcp\t4885\tabbs\nudp\t4885\tabbs\ntcp\t4888\txcap-portal\ntcp\t4889\txcap-control\ntcp\t4894\tlyskom\nudp\t4894\tlyskom\ntcp\t4899\tradmin-port\nudp\t4899\tradmin-port\ntcp\t4900\thfcs\nudp\t4900\thfcs\ntcp\t4901\tflr-agent\ntcp\t4901\tflr_agent\ntcp\t4902\tmagiccontrol\ntcp\t4912\tlutap\ntcp\t4913\tlutcp\ntcp\t4914\tbones\nudp\t4914\tbones\ntcp\t4915\tfrcs\nudp\t4936\tan-signaling\nudp\t4937\tatsc-mh-ssc\ntcp\t4940\teq-office-4940\nudp\t4940\teq-office-4940\ntcp\t4941\teq-office-4941\nudp\t4941\teq-office-4941\ntcp\t4942\teq-office-4942\nudp\t4942\teq-office-4942\ntcp\t4949\tmunin\nudp\t4949\tmunin\ntcp\t4950\tsybasesrvmon\nudp\t4950\tsybasesrvmon\ntcp\t4951\tpwgwims\nudp\t4951\tpwgwims\ntcp\t4952\tsagxtsds\nudp\t4952\tsagxtsds\ntcp\t4953\tdbsyncarbiter\ntcp\t4969\tccss-qmm\nudp\t4969\tccss-qmm\ntcp\t4970\tccss-qsm\nudp\t4970\tccss-qsm\ntcp\t4971\tburp\nudp\t4980\tctxs-vpp\ntcp\t4984\twebyast\ntcp\t4985\tgerhcs\ntcp\t4986\tmrip\nudp\t4986\tmrip\ntcp\t4987\tsmar-se-port1\nudp\t4987\tsmar-se-port1\ntcp\t4988\tsmar-se-port2\nudp\t4988\tsmar-se-port2\ntcp\t4989\tparallel\nudp\t4989\tparallel\ntcp\t4990\tbusycal\nudp\t4990\tbusycal\ntcp\t4991\tvrt\nudp\t4991\tvrt\ntcp\t4999\thfcs-manager\nudp\t4999\thfcs-manager\ntcp\t5000\tcommplex-main\nudp\t5000\tcommplex-main\ntcp\t5001\tcommplex-link\nudp\t5001\tcommplex-link\ntcp\t5002\trfe\nudp\t5002\trfe\ntcp\t5003\tfmpro-internal\nudp\t5003\tfmpro-internal\ntcp\t5004\tavt-profile-1\nudp\t5004\tavt-profile-1\ntcp\t5005\tavt-profile-2\nudp\t5005\tavt-profile-2\ntcp\t5006\twsm-server\nudp\t5006\twsm-server\ntcp\t5007\twsm-server-ssl\nudp\t5007\twsm-server-ssl\ntcp\t5008\tsynapsis-edge\nudp\t5008\tsynapsis-edge\ntcp\t5009\twinfs\nudp\t5009\twinfs\ntcp\t5010\ttelelpathstart\nudp\t5010\ttelelpathstart\ntcp\t5011\ttelelpathattack\nudp\t5011\ttelelpathattack\ntcp\t5012\tnsp\nudp\t5012\tnsp\ntcp\t5013\tfmpro-v6\nudp\t5013\tfmpro-v6\nudp\t5014\tonpsocket\ntcp\t5015\tfmwp\ntcp\t5020\tzenginkyo-1\nudp\t5020\tzenginkyo-1\ntcp\t5021\tzenginkyo-2\nudp\t5021\tzenginkyo-2\ntcp\t5022\tmice\nudp\t5022\tmice\ntcp\t5023\thtuilsrv\nudp\t5023\thtuilsrv\ntcp\t5024\tscpi-telnet\nudp\t5024\tscpi-telnet\ntcp\t5025\tscpi-raw\nudp\t5025\tscpi-raw\ntcp\t5026\tstrexec-d\nudp\t5026\tstrexec-d\ntcp\t5027\tstrexec-s\nudp\t5027\tstrexec-s\ntcp\t5028\tqvr\ntcp\t5029\tinfobright\nudp\t5029\tinfobright\ntcp\t5030\tsurfpass\nudp\t5030\tsurfpass\nudp\t5031\tdmp\ntcp\t5032\tsignacert-agent\ntcp\t5033\tjtnetd-server\ntcp\t5034\tjtnetd-status\ntcp\t5042\tasnaacceler8db\nudp\t5042\tasnaacceler8db\ntcp\t5043\tswxadmin\nudp\t5043\tswxadmin\ntcp\t5044\tlxi-evntsvc\nudp\t5044\tlxi-evntsvc\ntcp\t5045\tosp\nudp\t5046\tvpm-udp\nudp\t5047\tiscape\ntcp\t5048\ttexai\ntcp\t5049\tivocalize\nudp\t5049\tivocalize\ntcp\t5050\tmmcc\nudp\t5050\tmmcc\ntcp\t5051\tita-agent\nudp\t5051\tita-agent\ntcp\t5052\tita-manager\nudp\t5052\tita-manager\ntcp\t5053\trlm\nudp\t5053\trlm-disc\ntcp\t5054\trlm-admin\ntcp\t5055\tunot\nudp\t5055\tunot\ntcp\t5056\tintecom-ps1\nudp\t5056\tintecom-ps1\ntcp\t5057\tintecom-ps2\nudp\t5057\tintecom-ps2\nudp\t5058\tlocus-disc\ntcp\t5059\tsds\nudp\t5059\tsds\ntcp\t5060\tsip\nudp\t5060\tsip\ntcp\t5061\tsips\nudp\t5061\tsips\ntcp\t5062\tna-localise\nudp\t5062\tna-localise\ntcp\t5063\tcsrpc\ntcp\t5064\tca-1\nudp\t5064\tca-1\ntcp\t5065\tca-2\nudp\t5065\tca-2\ntcp\t5066\tstanag-5066\nudp\t5066\tstanag-5066\ntcp\t5067\tauthentx\nudp\t5067\tauthentx\ntcp\t5068\tbitforestsrv\ntcp\t5069\ti-net-2000-npr\nudp\t5069\ti-net-2000-npr\ntcp\t5070\tvtsas\nudp\t5070\tvtsas\ntcp\t5071\tpowerschool\nudp\t5071\tpowerschool\ntcp\t5072\tayiya\nudp\t5072\tayiya\ntcp\t5073\ttag-pm\nudp\t5073\ttag-pm\ntcp\t5074\talesquery\nudp\t5074\talesquery\ntcp\t5075\tpvaccess\nudp\t5078\tpixelpusher\nudp\t5079\tcp-spxrpts\ntcp\t5080\tonscreen\nudp\t5080\tonscreen\ntcp\t5081\tsdl-ets\nudp\t5081\tsdl-ets\ntcp\t5082\tqcp\nudp\t5082\tqcp\ntcp\t5083\tqfp\nudp\t5083\tqfp\ntcp\t5084\tllrp\nudp\t5084\tllrp\ntcp\t5085\tencrypted-llrp\nudp\t5085\tencrypted-llrp\ntcp\t5086\taprigo-cs\ntcp\t5087\tbiotic\nudp\t5092\tmagpie\ntcp\t5093\tsentinel-lm\nudp\t5093\tsentinel-lm\ntcp\t5094\thart-ip\nudp\t5094\thart-ip\ntcp\t5099\tsentlm-srv2srv\nudp\t5099\tsentlm-srv2srv\ntcp\t5100\tsocalia\nudp\t5100\tsocalia\ntcp\t5101\ttalarian-tcp\nudp\t5101\ttalarian-udp\ntcp\t5102\toms-nonsecure\nudp\t5102\toms-nonsecure\ntcp\t5103\tactifio-c2c\nudp\t5104\ttinymessage\nudp\t5105\thughes-ap\ntcp\t5106\tactifioudsagent\ntcp\t5107\tactifioreplic\ntcp\t5111\ttaep-as-svc\nudp\t5111\ttaep-as-svc\ntcp\t5112\tpm-cmdsvr\nudp\t5112\tpm-cmdsvr\ntcp\t5114\tev-services\ntcp\t5115\tautobuild\nudp\t5116\temb-proj-cmd\ntcp\t5117\tgradecam\ntcp\t5120\tbarracuda-bbs\nudp\t5120\tbarracuda-bbs\ntcp\t5133\tnbt-pc\nudp\t5133\tnbt-pc\ntcp\t5134\tppactivation\ntcp\t5135\terp-scale\nudp\t5136\tminotaur-sa\ntcp\t5137\tctsd\nudp\t5137\tctsd\ntcp\t5145\trmonitor-secure\ntcp\t5145\trmonitor_secure\nudp\t5145\trmonitor-secure\nudp\t5145\trmonitor_secure\ntcp\t5146\tsocial-alarm\ntcp\t5150\tatmp\nudp\t5150\tatmp\ntcp\t5151\tesri-sde\ntcp\t5151\tesri_sde\nudp\t5151\tesri-sde\nudp\t5151\tesri_sde\ntcp\t5152\tsde-discovery\nudp\t5152\tsde-discovery\ntcp\t5154\tbzflag\nudp\t5154\tbzflag\ntcp\t5155\tasctrl-agent\nudp\t5155\tasctrl-agent\ntcp\t5156\trugameonline\ntcp\t5157\tmediat\ntcp\t5161\tsnmpssh\ntcp\t5162\tsnmpssh-trap\ntcp\t5163\tsbackup\ntcp\t5164\tvpa\nudp\t5164\tvpa-disc\ntcp\t5165\tife-icorp\ntcp\t5165\tife_icorp\nudp\t5165\tife-icorp\nudp\t5165\tife_icorp\ntcp\t5166\twinpcs\nudp\t5166\twinpcs\ntcp\t5167\tscte104\nudp\t5167\tscte104\ntcp\t5168\tscte30\nudp\t5168\tscte30\ntcp\t5172\tpcoip-mgmt\ntcp\t5190\taol\nudp\t5190\taol\ntcp\t5191\taol-1\nudp\t5191\taol-1\ntcp\t5192\taol-2\nudp\t5192\taol-2\ntcp\t5193\taol-3\nudp\t5193\taol-3\ntcp\t5194\tcpscomm\ntcp\t5195\tampl-lic\ntcp\t5196\tampl-tableproxy\ntcp\t5197\ttunstall-lwp\ntcp\t5200\ttargus-getdata\nudp\t5200\ttargus-getdata\ntcp\t5201\ttargus-getdata1\nudp\t5201\ttargus-getdata1\ntcp\t5202\ttargus-getdata2\nudp\t5202\ttargus-getdata2\ntcp\t5203\ttargus-getdata3\nudp\t5203\ttargus-getdata3\ntcp\t5209\tnomad\ntcp\t5215\tnoteza\ntcp\t5221\t3exmp\ntcp\t5222\txmpp-client\ntcp\t5223\thpvirtgrp\nudp\t5223\thpvirtgrp\ntcp\t5224\thpvirtctrl\nudp\t5224\thpvirtctrl\ntcp\t5225\thp-server\nudp\t5225\thp-server\ntcp\t5226\thp-status\nudp\t5226\thp-status\ntcp\t5227\tperfd\nudp\t5227\tperfd\ntcp\t5228\thpvroom\ntcp\t5229\tjaxflow\ntcp\t5230\tjaxflow-data\ntcp\t5231\tcrusecontrol\ntcp\t5232\tcsedaemon\ntcp\t5233\tenfs\ntcp\t5234\teenet\nudp\t5234\teenet\ntcp\t5235\tgalaxy-network\nudp\t5235\tgalaxy-network\ntcp\t5236\tpadl2sim\nudp\t5236\tpadl2sim\ntcp\t5237\tmnet-discovery\nudp\t5237\tmnet-discovery\ntcp\t5245\tdowntools\nudp\t5245\tdowntools-disc\nudp\t5246\tcapwap-control\nudp\t5247\tcapwap-data\ntcp\t5248\tcaacws\nudp\t5248\tcaacws\ntcp\t5249\tcaaclang2\nudp\t5249\tcaaclang2\ntcp\t5250\tsoagateway\nudp\t5250\tsoagateway\ntcp\t5251\tcaevms\nudp\t5251\tcaevms\ntcp\t5252\tmovaz-ssc\nudp\t5252\tmovaz-ssc\ntcp\t5253\tkpdp\ntcp\t5254\tlogcabin\ntcp\t5264\t3com-njack-1\nudp\t5264\t3com-njack-1\ntcp\t5265\t3com-njack-2\nudp\t5265\t3com-njack-2\ntcp\t5269\txmpp-server\ntcp\t5270\tcartographerxmp\nudp\t5270\tcartographerxmp\ntcp\t5271\tcuelink\nudp\t5271\tcuelink-disc\ntcp\t5272\tpk\nudp\t5272\tpk\ntcp\t5280\txmpp-bosh\ntcp\t5281\tundo-lm\ntcp\t5282\ttransmit-port\nudp\t5282\ttransmit-port\ntcp\t5298\tpresence\nudp\t5298\tpresence\ntcp\t5299\tnlg-data\nudp\t5299\tnlg-data\ntcp\t5300\thacl-hb\nudp\t5300\thacl-hb\ntcp\t5301\thacl-gs\nudp\t5301\thacl-gs\ntcp\t5302\thacl-cfg\nudp\t5302\thacl-cfg\ntcp\t5303\thacl-probe\nudp\t5303\thacl-probe\ntcp\t5304\thacl-local\nudp\t5304\thacl-local\ntcp\t5305\thacl-test\nudp\t5305\thacl-test\ntcp\t5306\tsun-mc-grp\nudp\t5306\tsun-mc-grp\ntcp\t5307\tsco-aip\nudp\t5307\tsco-aip\ntcp\t5308\tcfengine\nudp\t5308\tcfengine\ntcp\t5309\tjprinter\nudp\t5309\tjprinter\ntcp\t5310\toutlaws\nudp\t5310\toutlaws\ntcp\t5312\tpermabit-cs\nudp\t5312\tpermabit-cs\ntcp\t5313\trrdp\nudp\t5313\trrdp\ntcp\t5314\topalis-rbt-ipc\nudp\t5314\topalis-rbt-ipc\ntcp\t5315\thacl-poll\nudp\t5315\thacl-poll\ntcp\t5316\thpbladems\ntcp\t5317\thpdevms\ntcp\t5318\tpkix-cmc\ntcp\t5320\tbsfserver-zn\ntcp\t5321\tbsfsvr-zn-ssl\ntcp\t5343\tkfserver\nudp\t5343\tkfserver\ntcp\t5344\txkotodrcp\nudp\t5344\txkotodrcp\ntcp\t5349\tstuns\nudp\t5349\tstuns\ntcp\t5349\tturns\nudp\t5349\tturns\ntcp\t5349\tstun-behaviors\nudp\t5349\tstun-behaviors\nudp\t5350\tpcp-multicast\nudp\t5351\tpcp\ntcp\t5352\tdns-llq\nudp\t5352\tdns-llq\ntcp\t5353\tmdns\nudp\t5353\tmdns\ntcp\t5354\tmdnsresponder\nudp\t5354\tmdnsresponder\ntcp\t5355\tllmnr\nudp\t5355\tllmnr\ntcp\t5356\tms-smlbiz\nudp\t5356\tms-smlbiz\ntcp\t5357\twsdapi\nudp\t5357\twsdapi\ntcp\t5358\twsdapi-s\nudp\t5358\twsdapi-s\ntcp\t5359\tms-alerter\nudp\t5359\tms-alerter\ntcp\t5360\tms-sideshow\nudp\t5360\tms-sideshow\ntcp\t5361\tms-s-sideshow\nudp\t5361\tms-s-sideshow\ntcp\t5362\tserverwsd2\nudp\t5362\tserverwsd2\ntcp\t5363\tnet-projection\nudp\t5363\tnet-projection\nudp\t5364\tkdnet\ntcp\t5397\tstresstester\nudp\t5397\tstresstester\ntcp\t5398\telektron-admin\nudp\t5398\telektron-admin\ntcp\t5399\tsecuritychase\nudp\t5399\tsecuritychase\ntcp\t5400\texcerpt\nudp\t5400\texcerpt\ntcp\t5401\texcerpts\nudp\t5401\texcerpts\ntcp\t5402\tmftp\nudp\t5402\tmftp\ntcp\t5403\thpoms-ci-lstn\nudp\t5403\thpoms-ci-lstn\ntcp\t5404\thpoms-dps-lstn\nudp\t5404\thpoms-dps-lstn\ntcp\t5405\tnetsupport\nudp\t5405\tnetsupport\ntcp\t5406\tsystemics-sox\nudp\t5406\tsystemics-sox\ntcp\t5407\tforesyte-clear\nudp\t5407\tforesyte-clear\ntcp\t5408\tforesyte-sec\nudp\t5408\tforesyte-sec\ntcp\t5409\tsalient-dtasrv\nudp\t5409\tsalient-dtasrv\ntcp\t5410\tsalient-usrmgr\nudp\t5410\tsalient-usrmgr\ntcp\t5411\tactnet\nudp\t5411\tactnet\ntcp\t5412\tcontinuus\nudp\t5412\tcontinuus\ntcp\t5413\twwiotalk\nudp\t5413\twwiotalk\ntcp\t5414\tstatusd\nudp\t5414\tstatusd\ntcp\t5415\tns-server\nudp\t5415\tns-server\ntcp\t5416\tsns-gateway\nudp\t5416\tsns-gateway\ntcp\t5417\tsns-agent\nudp\t5417\tsns-agent\ntcp\t5418\tmcntp\nudp\t5418\tmcntp\ntcp\t5419\tdj-ice\nudp\t5419\tdj-ice\ntcp\t5420\tcylink-c\nudp\t5420\tcylink-c\ntcp\t5421\tnetsupport2\nudp\t5421\tnetsupport2\ntcp\t5422\tsalient-mux\nudp\t5422\tsalient-mux\ntcp\t5423\tvirtualuser\nudp\t5423\tvirtualuser\ntcp\t5424\tbeyond-remote\nudp\t5424\tbeyond-remote\ntcp\t5425\tbr-channel\nudp\t5425\tbr-channel\ntcp\t5426\tdevbasic\nudp\t5426\tdevbasic\ntcp\t5427\tsco-peer-tta\nudp\t5427\tsco-peer-tta\ntcp\t5428\ttelaconsole\nudp\t5428\ttelaconsole\ntcp\t5429\tbase\nudp\t5429\tbase\ntcp\t5430\tradec-corp\nudp\t5430\tradec-corp\ntcp\t5431\tpark-agent\nudp\t5431\tpark-agent\ntcp\t5432\tpostgresql\nudp\t5432\tpostgresql\ntcp\t5433\tpyrrho\nudp\t5433\tpyrrho\ntcp\t5434\tsgi-arrayd\nudp\t5434\tsgi-arrayd\ntcp\t5435\tsceanics\nudp\t5435\tsceanics\nudp\t5436\tpmip6-cntl\nudp\t5437\tpmip6-data\ntcp\t5443\tspss\nudp\t5443\tspss\ntcp\t5445\tsmbdirect\ntcp\t5450\ttiepie\nudp\t5450\ttiepie-disc\ntcp\t5453\tsurebox\nudp\t5453\tsurebox\ntcp\t5454\tapc-5454\nudp\t5454\tapc-5454\ntcp\t5455\tapc-5455\nudp\t5455\tapc-5455\ntcp\t5456\tapc-5456\nudp\t5456\tapc-5456\ntcp\t5461\tsilkmeter\nudp\t5461\tsilkmeter\ntcp\t5462\tttl-publisher\nudp\t5462\tttl-publisher\ntcp\t5463\tttlpriceproxy\nudp\t5463\tttlpriceproxy\ntcp\t5464\tquailnet\nudp\t5464\tquailnet\ntcp\t5465\tnetops-broker\nudp\t5465\tnetops-broker\ntcp\t5470\tapsolab-col\ntcp\t5471\tapsolab-cols\ntcp\t5472\tapsolab-tag\ntcp\t5473\tapsolab-tags\nudp\t5474\tapsolab-rpc\ntcp\t5475\tapsolab-data\ntcp\t5500\tfcp-addr-srvr1\nudp\t5500\tfcp-addr-srvr1\ntcp\t5501\tfcp-addr-srvr2\nudp\t5501\tfcp-addr-srvr2\ntcp\t5502\tfcp-srvr-inst1\nudp\t5502\tfcp-srvr-inst1\ntcp\t5503\tfcp-srvr-inst2\nudp\t5503\tfcp-srvr-inst2\ntcp\t5504\tfcp-cics-gw1\nudp\t5504\tfcp-cics-gw1\ntcp\t5505\tcheckoutdb\nudp\t5505\tcheckoutdb\ntcp\t5506\tamc\nudp\t5506\tamc\ntcp\t5507\tpsl-management\ntcp\t5550\tcbus\ntcp\t5553\tsgi-eventmond\nudp\t5553\tsgi-eventmond\ntcp\t5554\tsgi-esphttp\nudp\t5554\tsgi-esphttp\ntcp\t5555\tpersonal-agent\nudp\t5555\tpersonal-agent\ntcp\t5556\tfreeciv\nudp\t5556\tfreeciv\ntcp\t5557\tfarenet\ntcp\t5565\thpe-dp-bura\ntcp\t5566\twestec-connect\ntcp\t5567\tdof-dps-mc-sec\nudp\t5567\tdof-dps-mc-sec\ntcp\t5568\tsdt\nudp\t5568\tsdt\ntcp\t5569\trdmnet-ctrl\nudp\t5569\trdmnet-device\ntcp\t5573\tsdmmp\nudp\t5573\tsdmmp\ntcp\t5574\tlsi-bobcat\ntcp\t5575\tora-oap\ntcp\t5579\tfdtracks\ntcp\t5580\ttmosms0\nudp\t5580\ttmosms0\ntcp\t5581\ttmosms1\nudp\t5581\ttmosms1\ntcp\t5582\tfac-restore\nudp\t5582\tfac-restore\ntcp\t5583\ttmo-icon-sync\nudp\t5583\ttmo-icon-sync\ntcp\t5584\tbis-web\nudp\t5584\tbis-web\ntcp\t5585\tbis-sync\nudp\t5585\tbis-sync\ntcp\t5586\tatt-mt-sms\ntcp\t5597\tininmessaging\nudp\t5597\tininmessaging\ntcp\t5598\tmctfeed\nudp\t5598\tmctfeed\ntcp\t5599\tesinstall\nudp\t5599\tesinstall\ntcp\t5600\tesmmanager\nudp\t5600\tesmmanager\ntcp\t5601\tesmagent\nudp\t5601\tesmagent\ntcp\t5602\ta1-msc\nudp\t5602\ta1-msc\ntcp\t5603\ta1-bs\nudp\t5603\ta1-bs\ntcp\t5604\ta3-sdunode\nudp\t5604\ta3-sdunode\ntcp\t5605\ta4-sdunode\nudp\t5605\ta4-sdunode\ntcp\t5618\tefr\ntcp\t5627\tninaf\nudp\t5627\tninaf\ntcp\t5628\thtrust\nudp\t5628\thtrust\ntcp\t5629\tsymantec-sfdb\nudp\t5629\tsymantec-sfdb\ntcp\t5630\tprecise-comm\nudp\t5630\tprecise-comm\ntcp\t5631\tpcanywheredata\nudp\t5631\tpcanywheredata\ntcp\t5632\tpcanywherestat\nudp\t5632\tpcanywherestat\ntcp\t5633\tbeorl\nudp\t5633\tbeorl\ntcp\t5634\txprtld\nudp\t5634\txprtld\ntcp\t5635\tsfmsso\ntcp\t5636\tsfm-db-server\ntcp\t5637\tcssc\ntcp\t5638\tflcrs\ntcp\t5639\tics\ntcp\t5646\tvfmobile\ntcp\t5666\tnrpe\ntcp\t5670\tfilemq\nudp\t5670\tzre-disc\ntcp\t5671\tamqps\nudp\t5671\tamqps\ntcp\t5672\tamqp\nudp\t5672\tamqp\ntcp\t5673\tjms\nudp\t5673\tjms\ntcp\t5674\thyperscsi-port\nudp\t5674\thyperscsi-port\ntcp\t5675\tv5ua\nudp\t5675\tv5ua\ntcp\t5676\traadmin\nudp\t5676\traadmin\ntcp\t5677\tquestdb2-lnchr\nudp\t5677\tquestdb2-lnchr\ntcp\t5678\trrac\nudp\t5678\trrac\ntcp\t5679\tdccm\nudp\t5679\tdccm\ntcp\t5680\tauriga-router\nudp\t5680\tauriga-router\ntcp\t5681\tncxcp\nudp\t5681\tncxcp\nudp\t5682\tbrightcore\ntcp\t5683\tcoap\nudp\t5683\tcoap\ntcp\t5684\tcoaps\nudp\t5684\tcoaps\nudp\t5687\tgog-multiplayer\ntcp\t5688\tggz\nudp\t5688\tggz\ntcp\t5689\tqmvideo\nudp\t5689\tqmvideo\ntcp\t5693\trbsystem\ntcp\t5696\tkmip\ntcp\t5700\tsupportassist\ntcp\t5705\tstorageos\ntcp\t5713\tproshareaudio\nudp\t5713\tproshareaudio\ntcp\t5714\tprosharevideo\nudp\t5714\tprosharevideo\ntcp\t5715\tprosharedata\nudp\t5715\tprosharedata\ntcp\t5716\tprosharerequest\nudp\t5716\tprosharerequest\ntcp\t5717\tprosharenotify\nudp\t5717\tprosharenotify\ntcp\t5718\tdpm\nudp\t5718\tdpm\ntcp\t5719\tdpm-agent\nudp\t5719\tdpm-agent\ntcp\t5720\tms-licensing\nudp\t5720\tms-licensing\ntcp\t5721\tdtpt\nudp\t5721\tdtpt\ntcp\t5722\tmsdfsr\nudp\t5722\tmsdfsr\ntcp\t5723\tomhs\nudp\t5723\tomhs\ntcp\t5724\tomsdk\nudp\t5724\tomsdk\ntcp\t5725\tms-ilm\ntcp\t5726\tms-ilm-sts\ntcp\t5727\tasgenf\ntcp\t5728\tio-dist-data\nudp\t5728\tio-dist-group\ntcp\t5729\topenmail\nudp\t5729\topenmail\ntcp\t5730\tunieng\nudp\t5730\tunieng\ntcp\t5741\tida-discover1\nudp\t5741\tida-discover1\ntcp\t5742\tida-discover2\nudp\t5742\tida-discover2\ntcp\t5743\twatchdoc-pod\nudp\t5743\twatchdoc-pod\ntcp\t5744\twatchdoc\nudp\t5744\twatchdoc\ntcp\t5745\tfcopy-server\nudp\t5745\tfcopy-server\ntcp\t5746\tfcopys-server\nudp\t5746\tfcopys-server\ntcp\t5747\ttunatic\nudp\t5747\ttunatic\ntcp\t5748\ttunalyzer\nudp\t5748\ttunalyzer\ntcp\t5750\trscd\nudp\t5750\trscd\ntcp\t5755\topenmailg\nudp\t5755\topenmailg\ntcp\t5757\tx500ms\nudp\t5757\tx500ms\ntcp\t5766\topenmailns\nudp\t5766\topenmailns\ntcp\t5767\ts-openmail\nudp\t5767\ts-openmail\ntcp\t5768\topenmailpxy\nudp\t5768\topenmailpxy\ntcp\t5769\tspramsca\nudp\t5769\tspramsca\ntcp\t5770\tspramsd\nudp\t5770\tspramsd\ntcp\t5771\tnetagent\nudp\t5771\tnetagent\ntcp\t5777\tdali-port\nudp\t5777\tdali-port\ntcp\t5780\tvts-rpc\ntcp\t5781\t3par-evts\nudp\t5781\t3par-evts\ntcp\t5782\t3par-mgmt\nudp\t5782\t3par-mgmt\ntcp\t5783\t3par-mgmt-ssl\nudp\t5783\t3par-mgmt-ssl\nudp\t5784\tibar\ntcp\t5785\t3par-rcopy\nudp\t5785\t3par-rcopy\nudp\t5786\tcisco-redu\nudp\t5787\twaascluster\ntcp\t5793\txtreamx\nudp\t5793\txtreamx\nudp\t5794\tspdp\ntcp\t5813\ticmpd\nudp\t5813\ticmpd\ntcp\t5814\tspt-automation\nudp\t5814\tspt-automation\ntcp\t5841\tshiprush-d-ch\ntcp\t5842\treversion\ntcp\t5859\twherehoo\nudp\t5859\twherehoo\ntcp\t5863\tppsuitemsg\nudp\t5863\tppsuitemsg\ntcp\t5868\tdiameters\ntcp\t5883\tjute\ntcp\t5900\trfb\nudp\t5900\trfb\ntcp\t5910\tcm\nudp\t5910\tcm\ntcp\t5911\tcpdlc\nudp\t5911\tcpdlc\ntcp\t5912\tfis\nudp\t5912\tfis\ntcp\t5913\tads-c\nudp\t5913\tads-c\ntcp\t5963\tindy\nudp\t5963\tindy\ntcp\t5968\tmppolicy-v5\nudp\t5968\tmppolicy-v5\ntcp\t5969\tmppolicy-mgr\nudp\t5969\tmppolicy-mgr\ntcp\t5984\tcouchdb\nudp\t5984\tcouchdb\ntcp\t5985\twsman\nudp\t5985\twsman\ntcp\t5986\twsmans\nudp\t5986\twsmans\ntcp\t5987\twbem-rmi\nudp\t5987\twbem-rmi\ntcp\t5988\twbem-http\nudp\t5988\twbem-http\ntcp\t5989\twbem-https\nudp\t5989\twbem-https\ntcp\t5990\twbem-exp-https\nudp\t5990\twbem-exp-https\ntcp\t5991\tnuxsl\nudp\t5991\tnuxsl\ntcp\t5992\tconsul-insight\nudp\t5992\tconsul-insight\ntcp\t5993\tcim-rs\ntcp\t5999\tcvsup\nudp\t5999\tcvsup\ntcp\t6064\tndl-ahp-svc\nudp\t6064\tndl-ahp-svc\ntcp\t6065\twinpharaoh\nudp\t6065\twinpharaoh\ntcp\t6066\tewctsp\nudp\t6066\tewctsp\ntcp\t6068\tgsmp-ancp\ntcp\t6069\ttrip\nudp\t6069\ttrip\ntcp\t6070\tmessageasap\nudp\t6070\tmessageasap\ntcp\t6071\tssdtp\nudp\t6071\tssdtp\ntcp\t6072\tdiagnose-proc\nudp\t6072\tdiagnose-proc\ntcp\t6073\tdirectplay8\nudp\t6073\tdirectplay8\ntcp\t6074\tmax\nudp\t6074\tmax\ntcp\t6075\tdpm-acm\ntcp\t6076\tmsft-dpm-cert\ntcp\t6077\ticonstructsrv\nudp\t6080\tgue\nudp\t6081\tgeneve\nudp\t6082\tp25cai\nudp\t6083\tmiami-bcast\ntcp\t6084\treload-config\ntcp\t6085\tkonspire2b\nudp\t6085\tkonspire2b\ntcp\t6086\tpdtp\nudp\t6086\tpdtp\ntcp\t6087\tldss\nudp\t6087\tldss\ntcp\t6088\tdoglms\nudp\t6088\tdoglms-notify\ntcp\t6099\traxa-mgmt\ntcp\t6100\tsynchronet-db\nudp\t6100\tsynchronet-db\ntcp\t6101\tsynchronet-rtc\nudp\t6101\tsynchronet-rtc\ntcp\t6102\tsynchronet-upd\nudp\t6102\tsynchronet-upd\ntcp\t6103\trets\nudp\t6103\trets\ntcp\t6104\tdbdb\nudp\t6104\tdbdb\ntcp\t6105\tprimaserver\nudp\t6105\tprimaserver\ntcp\t6106\tmpsserver\nudp\t6106\tmpsserver\ntcp\t6107\tetc-control\nudp\t6107\tetc-control\ntcp\t6108\tsercomm-scadmin\nudp\t6108\tsercomm-scadmin\ntcp\t6109\tglobecast-id\nudp\t6109\tglobecast-id\ntcp\t6110\tsoftcm\nudp\t6110\tsoftcm\ntcp\t6111\tspc\nudp\t6111\tspc\ntcp\t6112\tdtspcd\nudp\t6112\tdtspcd\ntcp\t6113\tdayliteserver\ntcp\t6114\twrspice\ntcp\t6115\txic\ntcp\t6116\txtlserv\ntcp\t6117\tdaylitetouch\nudp\t6118\ttipc\ntcp\t6121\tspdy\ntcp\t6122\tbex-webadmin\nudp\t6122\tbex-webadmin\ntcp\t6123\tbackup-express\nudp\t6123\tbackup-express\ntcp\t6124\tpnbs\nudp\t6124\tpnbs\ntcp\t6130\tdamewaremobgtwy\ntcp\t6133\tnbt-wol\nudp\t6133\tnbt-wol\ntcp\t6140\tpulsonixnls\nudp\t6140\tpulsonixnls\ntcp\t6141\tmeta-corp\nudp\t6141\tmeta-corp\ntcp\t6142\taspentec-lm\nudp\t6142\taspentec-lm\ntcp\t6143\twatershed-lm\nudp\t6143\twatershed-lm\ntcp\t6144\tstatsci1-lm\nudp\t6144\tstatsci1-lm\ntcp\t6145\tstatsci2-lm\nudp\t6145\tstatsci2-lm\ntcp\t6146\tlonewolf-lm\nudp\t6146\tlonewolf-lm\ntcp\t6147\tmontage-lm\nudp\t6147\tmontage-lm\ntcp\t6148\tricardo-lm\nudp\t6148\tricardo-lm\ntcp\t6149\ttal-pod\nudp\t6149\ttal-pod\ntcp\t6159\tefb-aci\ntcp\t6160\tecmp\nudp\t6160\tecmp-data\ntcp\t6161\tpatrol-ism\nudp\t6161\tpatrol-ism\ntcp\t6162\tpatrol-coll\nudp\t6162\tpatrol-coll\ntcp\t6163\tpscribe\nudp\t6163\tpscribe\ntcp\t6200\tlm-x\nudp\t6200\tlm-x\nudp\t6201\tthermo-calc\ntcp\t6209\tqmtps\nudp\t6209\tqmtps\ntcp\t6222\tradmind\nudp\t6222\tradmind\ntcp\t6241\tjeol-nsdtp-1\nudp\t6241\tjeol-nsddp-1\ntcp\t6242\tjeol-nsdtp-2\nudp\t6242\tjeol-nsddp-2\ntcp\t6243\tjeol-nsdtp-3\nudp\t6243\tjeol-nsddp-3\ntcp\t6244\tjeol-nsdtp-4\nudp\t6244\tjeol-nsddp-4\ntcp\t6251\ttl1-raw-ssl\nudp\t6251\ttl1-raw-ssl\ntcp\t6252\ttl1-ssh\nudp\t6252\ttl1-ssh\ntcp\t6253\tcrip\nudp\t6253\tcrip\ntcp\t6267\tgld\ntcp\t6268\tgrid\nudp\t6268\tgrid\ntcp\t6269\tgrid-alt\nudp\t6269\tgrid-alt\ntcp\t6300\tbmc-grx\nudp\t6300\tbmc-grx\ntcp\t6301\tbmc-ctd-ldap\ntcp\t6301\tbmc_ctd_ldap\nudp\t6301\tbmc-ctd-ldap\nudp\t6301\tbmc_ctd_ldap\ntcp\t6306\tufmp\nudp\t6306\tufmp\ntcp\t6315\tscup\nudp\t6315\tscup-disc\ntcp\t6316\tabb-escp\nudp\t6316\tabb-escp\ntcp\t6317\tnav-data-cmd\nudp\t6317\tnav-data\ntcp\t6320\trepsvc\nudp\t6320\trepsvc\ntcp\t6321\temp-server1\nudp\t6321\temp-server1\ntcp\t6322\temp-server2\nudp\t6322\temp-server2\ntcp\t6324\thrd-ncs\nudp\t6324\thrd-ns-disc\ntcp\t6325\tdt-mgmtsvc\ntcp\t6326\tdt-vra\ntcp\t6343\tsflow\nudp\t6343\tsflow\ntcp\t6344\tstreletz\ntcp\t6346\tgnutella-svc\nudp\t6346\tgnutella-svc\ntcp\t6347\tgnutella-rtr\nudp\t6347\tgnutella-rtr\ntcp\t6350\tadap\nudp\t6350\tadap\ntcp\t6355\tpmcs\nudp\t6355\tpmcs\ntcp\t6360\tmetaedit-mu\nudp\t6360\tmetaedit-mu\nudp\t6363\tndn\ntcp\t6370\tmetaedit-se\nudp\t6370\tmetaedit-se\ntcp\t6379\tredis\ntcp\t6382\tmetatude-mds\nudp\t6382\tmetatude-mds\ntcp\t6389\tclariion-evr01\nudp\t6389\tclariion-evr01\ntcp\t6390\tmetaedit-ws\nudp\t6390\tmetaedit-ws\ntcp\t6417\tfaxcomservice\nudp\t6417\tfaxcomservice\ntcp\t6418\tsyserverremote\ntcp\t6419\tsvdrp\nudp\t6419\tsvdrp-disc\ntcp\t6420\tnim-vdrshell\nudp\t6420\tnim-vdrshell\ntcp\t6421\tnim-wan\nudp\t6421\tnim-wan\ntcp\t6432\tpgbouncer\ntcp\t6442\ttarp\ntcp\t6443\tsun-sr-https\nudp\t6443\tsun-sr-https\ntcp\t6444\tsge-qmaster\ntcp\t6444\tsge_qmaster\nudp\t6444\tsge-qmaster\nudp\t6444\tsge_qmaster\ntcp\t6445\tsge-execd\ntcp\t6445\tsge_execd\nudp\t6445\tsge-execd\nudp\t6445\tsge_execd\ntcp\t6446\tmysql-proxy\nudp\t6446\tmysql-proxy\ntcp\t6455\tskip-cert-recv\nudp\t6455\tskip-cert-recv\ntcp\t6456\tskip-cert-send\nudp\t6456\tskip-cert-send\ntcp\t6464\tieee11073-20701\nudp\t6464\tieee11073-20701\ntcp\t6471\tlvision-lm\nudp\t6471\tlvision-lm\ntcp\t6480\tsun-sr-http\nudp\t6480\tsun-sr-http\ntcp\t6481\tservicetags\nudp\t6481\tservicetags\ntcp\t6482\tldoms-mgmt\nudp\t6482\tldoms-mgmt\ntcp\t6483\tSunVTS-RMI\nudp\t6483\tSunVTS-RMI\ntcp\t6484\tsun-sr-jms\nudp\t6484\tsun-sr-jms\ntcp\t6485\tsun-sr-iiop\nudp\t6485\tsun-sr-iiop\ntcp\t6486\tsun-sr-iiops\nudp\t6486\tsun-sr-iiops\ntcp\t6487\tsun-sr-iiop-aut\nudp\t6487\tsun-sr-iiop-aut\ntcp\t6488\tsun-sr-jmx\nudp\t6488\tsun-sr-jmx\ntcp\t6489\tsun-sr-admin\nudp\t6489\tsun-sr-admin\ntcp\t6500\tboks\nudp\t6500\tboks\ntcp\t6501\tboks-servc\ntcp\t6501\tboks_servc\nudp\t6501\tboks-servc\nudp\t6501\tboks_servc\ntcp\t6502\tboks-servm\ntcp\t6502\tboks_servm\nudp\t6502\tboks-servm\nudp\t6502\tboks_servm\ntcp\t6503\tboks-clntd\ntcp\t6503\tboks_clntd\nudp\t6503\tboks-clntd\nudp\t6503\tboks_clntd\ntcp\t6505\tbadm-priv\ntcp\t6505\tbadm_priv\nudp\t6505\tbadm-priv\nudp\t6505\tbadm_priv\ntcp\t6506\tbadm-pub\ntcp\t6506\tbadm_pub\nudp\t6506\tbadm-pub\nudp\t6506\tbadm_pub\ntcp\t6507\tbdir-priv\ntcp\t6507\tbdir_priv\nudp\t6507\tbdir-priv\nudp\t6507\tbdir_priv\ntcp\t6508\tbdir-pub\ntcp\t6508\tbdir_pub\nudp\t6508\tbdir-pub\nudp\t6508\tbdir_pub\ntcp\t6509\tmgcs-mfp-port\nudp\t6509\tmgcs-mfp-port\ntcp\t6510\tmcer-port\nudp\t6510\tmcer-port\nudp\t6511\tdccp-udp\ntcp\t6513\tnetconf-tls\ntcp\t6514\tsyslog-tls\nudp\t6514\tsyslog-tls\ntcp\t6515\telipse-rec\nudp\t6515\telipse-rec\ntcp\t6543\tlds-distrib\nudp\t6543\tlds-distrib\ntcp\t6544\tlds-dump\nudp\t6544\tlds-dump\ntcp\t6547\tapc-6547\nudp\t6547\tapc-6547\ntcp\t6548\tapc-6548\nudp\t6548\tapc-6548\ntcp\t6549\tapc-6549\nudp\t6549\tapc-6549\ntcp\t6550\tfg-sysupdate\nudp\t6550\tfg-sysupdate\ntcp\t6551\tsum\nudp\t6551\tsum\ntcp\t6558\txdsxdm\nudp\t6558\txdsxdm\ntcp\t6566\tsane-port\nudp\t6566\tsane-port\ntcp\t6568\tcanit-store\ntcp\t6568\tcanit_store\nudp\t6568\trp-reputation\ntcp\t6579\taffiliate\nudp\t6579\taffiliate\ntcp\t6580\tparsec-master\nudp\t6580\tparsec-master\ntcp\t6581\tparsec-peer\nudp\t6581\tparsec-peer\ntcp\t6582\tparsec-game\nudp\t6582\tparsec-game\ntcp\t6583\tjoaJewelSuite\nudp\t6583\tjoaJewelSuite\ntcp\t6600\tmshvlm\ntcp\t6601\tmstmg-sstp\ntcp\t6602\twsscomfrmwk\ntcp\t6619\todette-ftps\nudp\t6619\todette-ftps\ntcp\t6620\tkftp-data\nudp\t6620\tkftp-data\ntcp\t6621\tkftp\nudp\t6621\tkftp\ntcp\t6622\tmcftp\nudp\t6622\tmcftp\ntcp\t6623\tktelnet\nudp\t6623\tktelnet\ntcp\t6624\tdatascaler-db\ntcp\t6625\tdatascaler-ctl\ntcp\t6626\twago-service\nudp\t6626\twago-service\ntcp\t6627\tnexgen\nudp\t6627\tnexgen\ntcp\t6628\tafesc-mc\nudp\t6628\tafesc-mc\ntcp\t6629\tnexgen-aux\nudp\t6629\tnexgen-aux\ntcp\t6632\tmxodbc-connect\nudp\t6633\tcisco-vpath-tun\nudp\t6634\tmpls-pm\nudp\t6635\tmpls-udp\nudp\t6636\tmpls-udp-dtls\ntcp\t6640\tovsdb\ntcp\t6653\topenflow\nudp\t6653\topenflow\ntcp\t6655\tpcs-sf-ui-man\ntcp\t6656\temgmsg\nudp\t6657\tpalcom-disc\ntcp\t6670\tvocaltec-gold\nudp\t6670\tvocaltec-gold\ntcp\t6671\tp4p-portal\nudp\t6671\tp4p-portal\ntcp\t6672\tvision-server\ntcp\t6672\tvision_server\nudp\t6672\tvision-server\nudp\t6672\tvision_server\ntcp\t6673\tvision-elmd\ntcp\t6673\tvision_elmd\nudp\t6673\tvision-elmd\nudp\t6673\tvision_elmd\ntcp\t6678\tvfbp\nudp\t6678\tvfbp-disc\ntcp\t6679\tosaut\nudp\t6679\tosaut\ntcp\t6687\tclever-ctrace\ntcp\t6688\tclever-tcpip\ntcp\t6689\ttsa\nudp\t6689\ttsa\ntcp\t6690\tcleverdetect\nudp\t6696\tbabel\ntcp\t6697\tircs-u\ntcp\t6701\tkti-icad-srvr\nudp\t6701\tkti-icad-srvr\ntcp\t6702\te-design-net\nudp\t6702\te-design-net\ntcp\t6703\te-design-web\nudp\t6703\te-design-web\ntcp\t6714\tibprotocol\nudp\t6714\tibprotocol\ntcp\t6715\tfibotrader-com\nudp\t6715\tfibotrader-com\ntcp\t6716\tprincity-agent\ntcp\t6767\tbmc-perf-agent\nudp\t6767\tbmc-perf-agent\ntcp\t6768\tbmc-perf-mgrd\nudp\t6768\tbmc-perf-mgrd\ntcp\t6769\tadi-gxp-srvprt\nudp\t6769\tadi-gxp-srvprt\ntcp\t6770\tplysrv-http\nudp\t6770\tplysrv-http\ntcp\t6771\tplysrv-https\nudp\t6771\tplysrv-https\ntcp\t6777\tntz-tracker\ntcp\t6778\tntz-p2p-storage\nudp\t6784\tbfd-lag\ntcp\t6785\tdgpf-exchg\nudp\t6785\tdgpf-exchg\ntcp\t6786\tsmc-jmx\nudp\t6786\tsmc-jmx\ntcp\t6787\tsmc-admin\nudp\t6787\tsmc-admin\ntcp\t6788\tsmc-http\nudp\t6788\tsmc-http\ntcp\t6789\tradg\ntcp\t6790\thnmp\nudp\t6790\thnmp\ntcp\t6791\thnm\nudp\t6791\thnm\ntcp\t6801\tacnet\nudp\t6801\tacnet\ntcp\t6817\tpentbox-sim\ntcp\t6831\tambit-lm\nudp\t6831\tambit-lm\ntcp\t6841\tnetmo-default\nudp\t6841\tnetmo-default\ntcp\t6842\tnetmo-http\nudp\t6842\tnetmo-http\ntcp\t6850\ticcrushmore\nudp\t6850\ticcrushmore\ntcp\t6868\tacctopus-cc\nudp\t6868\tacctopus-st\ntcp\t6888\tmuse\nudp\t6888\tmuse\ntcp\t6900\trtimeviewer\ntcp\t6901\tjetstream\ntcp\t6935\tethoscan\nudp\t6935\tethoscan\ntcp\t6936\txsmsvc\nudp\t6936\txsmsvc\ntcp\t6946\tbioserver\nudp\t6946\tbioserver\ntcp\t6951\totlp\nudp\t6951\totlp\ntcp\t6961\tjmact3\nudp\t6961\tjmact3\ntcp\t6962\tjmevt2\nudp\t6962\tjmevt2\ntcp\t6963\tswismgr1\nudp\t6963\tswismgr1\ntcp\t6964\tswismgr2\nudp\t6964\tswismgr2\ntcp\t6965\tswistrap\nudp\t6965\tswistrap\ntcp\t6966\tswispol\nudp\t6966\tswispol\ntcp\t6969\tacmsoda\nudp\t6969\tacmsoda\ntcp\t6970\tconductor\ntcp\t6997\tMobilitySrv\nudp\t6997\tMobilitySrv\ntcp\t6998\tiatp-highpri\nudp\t6998\tiatp-highpri\ntcp\t6999\tiatp-normalpri\nudp\t6999\tiatp-normalpri\ntcp\t7000\tafs3-fileserver\nudp\t7000\tafs3-fileserver\ntcp\t7001\tafs3-callback\nudp\t7001\tafs3-callback\ntcp\t7002\tafs3-prserver\nudp\t7002\tafs3-prserver\ntcp\t7003\tafs3-vlserver\nudp\t7003\tafs3-vlserver\ntcp\t7004\tafs3-kaserver\nudp\t7004\tafs3-kaserver\ntcp\t7005\tafs3-volser\nudp\t7005\tafs3-volser\ntcp\t7006\tafs3-errors\nudp\t7006\tafs3-errors\ntcp\t7007\tafs3-bos\nudp\t7007\tafs3-bos\ntcp\t7008\tafs3-update\nudp\t7008\tafs3-update\ntcp\t7009\tafs3-rmtsys\nudp\t7009\tafs3-rmtsys\ntcp\t7010\tups-onlinet\nudp\t7010\tups-onlinet\ntcp\t7011\ttalon-disc\nudp\t7011\ttalon-disc\ntcp\t7012\ttalon-engine\nudp\t7012\ttalon-engine\ntcp\t7013\tmicrotalon-dis\nudp\t7013\tmicrotalon-dis\ntcp\t7014\tmicrotalon-com\nudp\t7014\tmicrotalon-com\ntcp\t7015\ttalon-webserver\nudp\t7015\ttalon-webserver\ntcp\t7016\tspg\nudp\t7016\tspg\ntcp\t7017\tgrasp\nudp\t7017\tgrasp\ntcp\t7018\tfisa-svc\ntcp\t7019\tdoceri-ctl\nudp\t7019\tdoceri-view\ntcp\t7020\tdpserve\nudp\t7020\tdpserve\ntcp\t7021\tdpserveadmin\nudp\t7021\tdpserveadmin\ntcp\t7022\tctdp\nudp\t7022\tctdp\ntcp\t7023\tct2nmcs\nudp\t7023\tct2nmcs\ntcp\t7024\tvmsvc\nudp\t7024\tvmsvc\ntcp\t7025\tvmsvc-2\nudp\t7025\tvmsvc-2\ntcp\t7026\tloreji-panel\ntcp\t7030\top-probe\nudp\t7030\top-probe\ntcp\t7031\tiposplanet\nudp\t7040\tquest-disc\ntcp\t7070\tarcp\nudp\t7070\tarcp\ntcp\t7071\tiwg1\nudp\t7071\tiwg1\ntcp\t7072\tiba-cfg\nudp\t7072\tiba-cfg-disc\ntcp\t7073\tmartalk\ntcp\t7080\tempowerid\nudp\t7080\tempowerid\nudp\t7088\tzixi-transport\nudp\t7095\tjdp-disc\ntcp\t7099\tlazy-ptop\nudp\t7099\tlazy-ptop\ntcp\t7100\tfont-service\nudp\t7100\tfont-service\ntcp\t7101\telcn\nudp\t7101\telcn\nudp\t7107\taes-x170\ntcp\t7117\trothaga\ntcp\t7121\tvirprot-lm\nudp\t7121\tvirprot-lm\ntcp\t7128\tscenidm\nudp\t7128\tscenidm\ntcp\t7129\tscenccs\nudp\t7129\tscenccs\ntcp\t7161\tcabsm-comm\nudp\t7161\tcabsm-comm\ntcp\t7162\tcaistoragemgr\nudp\t7162\tcaistoragemgr\ntcp\t7163\tcacsambroker\nudp\t7163\tcacsambroker\ntcp\t7164\tfsr\nudp\t7164\tfsr\ntcp\t7165\tdoc-server\nudp\t7165\tdoc-server\ntcp\t7166\taruba-server\nudp\t7166\taruba-server\ntcp\t7167\tcasrmagent\ntcp\t7168\tcnckadserver\ntcp\t7169\tccag-pib\nudp\t7169\tccag-pib\ntcp\t7170\tnsrp\nudp\t7170\tnsrp\ntcp\t7171\tdrm-production\nudp\t7171\tdrm-production\ntcp\t7172\tmetalbend\ntcp\t7173\tzsecure\ntcp\t7174\tclutild\nudp\t7174\tclutild\nudp\t7181\tjanus-disc\ntcp\t7200\tfodms\nudp\t7200\tfodms\ntcp\t7201\tdlip\nudp\t7201\tdlip\ntcp\t7202\tpon-ictp\ntcp\t7215\tPS-Server\ntcp\t7216\tPS-Capture-Pro\ntcp\t7227\tramp\nudp\t7227\tramp\ntcp\t7228\tcitrixupp\ntcp\t7229\tcitrixuppg\nudp\t7235\taspcoordination\ntcp\t7236\tdisplay\ntcp\t7237\tpads\ntcp\t7244\tfrc-hicp\nudp\t7244\tfrc-hicp-disc\ntcp\t7262\tcnap\nudp\t7262\tcnap\ntcp\t7272\twatchme-7272\nudp\t7272\twatchme-7272\ntcp\t7273\toma-rlp\nudp\t7273\toma-rlp\ntcp\t7274\toma-rlp-s\nudp\t7274\toma-rlp-s\ntcp\t7275\toma-ulp\nudp\t7275\toma-ulp\ntcp\t7276\toma-ilp\nudp\t7276\toma-ilp\ntcp\t7277\toma-ilp-s\nudp\t7277\toma-ilp-s\ntcp\t7278\toma-dcdocbs\nudp\t7278\toma-dcdocbs\ntcp\t7279\tctxlic\nudp\t7279\tctxlic\ntcp\t7280\titactionserver1\nudp\t7280\titactionserver1\ntcp\t7281\titactionserver2\nudp\t7281\titactionserver2\ntcp\t7282\tmzca-action\nudp\t7282\tmzca-alert\ntcp\t7283\tgenstat\ntcp\t7365\tlcm-server\nudp\t7365\tlcm-server\ntcp\t7391\tmindfilesys\nudp\t7391\tmindfilesys\ntcp\t7392\tmrssrendezvous\nudp\t7392\tmrssrendezvous\ntcp\t7393\tnfoldman\nudp\t7393\tnfoldman\ntcp\t7394\tfse\nudp\t7394\tfse\ntcp\t7395\twinqedit\nudp\t7395\twinqedit\ntcp\t7397\thexarc\nudp\t7397\thexarc\ntcp\t7400\trtps-discovery\nudp\t7400\trtps-discovery\ntcp\t7401\trtps-dd-ut\nudp\t7401\trtps-dd-ut\ntcp\t7402\trtps-dd-mt\nudp\t7402\trtps-dd-mt\ntcp\t7410\tionixnetmon\nudp\t7410\tionixnetmon\ntcp\t7411\tdaqstream\nudp\t7411\tdaqstream\nudp\t7420\tipluminary\ntcp\t7421\tmtportmon\nudp\t7421\tmtportmon\ntcp\t7426\tpmdmgr\nudp\t7426\tpmdmgr\ntcp\t7427\toveadmgr\nudp\t7427\toveadmgr\ntcp\t7428\tovladmgr\nudp\t7428\tovladmgr\ntcp\t7429\topi-sock\nudp\t7429\topi-sock\ntcp\t7430\txmpv7\nudp\t7430\txmpv7\ntcp\t7431\tpmd\nudp\t7431\tpmd\ntcp\t7437\tfaximum\nudp\t7437\tfaximum\ntcp\t7443\toracleas-https\nudp\t7443\toracleas-https\ntcp\t7471\tsttunnel\ntcp\t7473\trise\nudp\t7473\trise\ntcp\t7474\tneo4j\ntcp\t7478\topenit\ntcp\t7491\ttelops-lmd\nudp\t7491\ttelops-lmd\ntcp\t7500\tsilhouette\nudp\t7500\tsilhouette\ntcp\t7501\tovbus\nudp\t7501\tovbus\ntcp\t7508\tadcp\ntcp\t7509\tacplt\ntcp\t7510\tovhpas\nudp\t7510\tovhpas\ntcp\t7511\tpafec-lm\nudp\t7511\tpafec-lm\ntcp\t7542\tsaratoga\nudp\t7542\tsaratoga\ntcp\t7543\tatul\nudp\t7543\tatul\ntcp\t7544\tnta-ds\nudp\t7544\tnta-ds\ntcp\t7545\tnta-us\nudp\t7545\tnta-us\ntcp\t7546\tcfs\nudp\t7546\tcfs\ntcp\t7547\tcwmp\nudp\t7547\tcwmp\ntcp\t7548\ttidp\nudp\t7548\ttidp\ntcp\t7549\tnls-tl\nudp\t7549\tnls-tl\nudp\t7550\tcloudsignaling\ntcp\t7551\tcontrolone-con\ntcp\t7560\tsncp\nudp\t7560\tsncp\ntcp\t7563\tcfw\ntcp\t7566\tvsi-omega\nudp\t7566\tvsi-omega\ntcp\t7569\tdell-eql-asm\ntcp\t7570\taries-kfinder\nudp\t7570\taries-kfinder\ntcp\t7574\tcoherence\nudp\t7574\tcoherence-disc\ntcp\t7588\tsun-lm\nudp\t7588\tsun-lm\ntcp\t7606\tmipi-debug\nudp\t7606\tmipi-debug\ntcp\t7624\tindi\nudp\t7624\tindi\ntcp\t7626\tsimco\ntcp\t7627\tsoap-http\nudp\t7627\tsoap-http\ntcp\t7628\tzen-pawn\nudp\t7628\tzen-pawn\ntcp\t7629\txdas\nudp\t7629\txdas\ntcp\t7630\thawk\ntcp\t7631\ttesla-sys-msg\ntcp\t7633\tpmdfmgt\nudp\t7633\tpmdfmgt\ntcp\t7648\tcuseeme\nudp\t7648\tcuseeme\ntcp\t7663\trome\nudp\t7663\trome\ntcp\t7672\timqstomp\ntcp\t7673\timqstomps\ntcp\t7674\timqtunnels\nudp\t7674\timqtunnels\ntcp\t7675\timqtunnel\nudp\t7675\timqtunnel\ntcp\t7676\timqbrokerd\nudp\t7676\timqbrokerd\ntcp\t7677\tsun-user-https\nudp\t7677\tsun-user-https\ntcp\t7680\tpando-pub\nudp\t7680\tpando-pub\ntcp\t7683\tdmt\ntcp\t7687\tbolt\ntcp\t7689\tcollaber\nudp\t7689\tcollaber\ntcp\t7697\tklio\nudp\t7697\tklio\ntcp\t7700\tem7-secom\ntcp\t7707\tsync-em7\nudp\t7707\tsync-em7\ntcp\t7708\tscinet\nudp\t7708\tscinet\ntcp\t7720\tmedimageportal\nudp\t7720\tmedimageportal\ntcp\t7724\tnsdeepfreezectl\nudp\t7724\tnsdeepfreezectl\ntcp\t7725\tnitrogen\nudp\t7725\tnitrogen\ntcp\t7726\tfreezexservice\nudp\t7726\tfreezexservice\ntcp\t7727\ttrident-data\nudp\t7727\ttrident-data\ntcp\t7728\tosvr\nudp\t7728\tosvr\ntcp\t7734\tsmip\nudp\t7734\tsmip\ntcp\t7738\taiagent\nudp\t7738\taiagent\ntcp\t7741\tscriptview\nudp\t7741\tscriptview\ntcp\t7742\tmsss\ntcp\t7743\tsstp-1\nudp\t7743\tsstp-1\ntcp\t7744\traqmon-pdu\nudp\t7744\traqmon-pdu\ntcp\t7747\tprgp\nudp\t7747\tprgp\ntcp\t7775\tinetfs\ntcp\t7777\tcbt\nudp\t7777\tcbt\ntcp\t7778\tinterwise\nudp\t7778\tinterwise\ntcp\t7779\tvstat\nudp\t7779\tvstat\ntcp\t7781\taccu-lmgr\nudp\t7781\taccu-lmgr\nudp\t7784\ts-bfd\ntcp\t7786\tminivend\nudp\t7786\tminivend\ntcp\t7787\tpopup-reminders\nudp\t7787\tpopup-reminders\ntcp\t7789\toffice-tools\nudp\t7789\toffice-tools\ntcp\t7794\tq3ade\nudp\t7794\tq3ade\ntcp\t7797\tpnet-conn\nudp\t7797\tpnet-conn\ntcp\t7798\tpnet-enc\nudp\t7798\tpnet-enc\ntcp\t7799\taltbsdp\nudp\t7799\taltbsdp\ntcp\t7800\tasr\nudp\t7800\tasr\ntcp\t7801\tssp-client\nudp\t7801\tssp-client\nudp\t7802\tvns-tp\ntcp\t7810\trbt-wanopt\nudp\t7810\trbt-wanopt\ntcp\t7845\tapc-7845\nudp\t7845\tapc-7845\ntcp\t7846\tapc-7846\nudp\t7846\tapc-7846\ntcp\t7847\tcsoauth\ntcp\t7869\tmobileanalyzer\ntcp\t7870\trbt-smc\ntcp\t7871\tmdm\nudp\t7872\tmipv6tls\ntcp\t7878\towms\ntcp\t7880\tpss\nudp\t7880\tpss\ntcp\t7887\tubroker\nudp\t7887\tubroker\ntcp\t7900\tmevent\nudp\t7900\tmevent\ntcp\t7901\ttnos-sp\nudp\t7901\ttnos-sp\ntcp\t7902\ttnos-dp\nudp\t7902\ttnos-dp\ntcp\t7903\ttnos-dps\nudp\t7903\ttnos-dps\ntcp\t7913\tqo-secure\nudp\t7913\tqo-secure\ntcp\t7932\tt2-drm\nudp\t7932\tt2-drm\ntcp\t7933\tt2-brm\nudp\t7933\tt2-brm\ntcp\t7962\tgeneralsync\nudp\t7962\tgeneralsync\ntcp\t7967\tsupercell\nudp\t7967\tsupercell\ntcp\t7979\tmicromuse-ncps\nudp\t7979\tmicromuse-ncps\ntcp\t7980\tquest-vista\nudp\t7980\tquest-vista\ntcp\t7981\tsossd-collect\ntcp\t7982\tsossd-agent\nudp\t7982\tsossd-disc\ntcp\t7997\tpushns\nudp\t7998\tusicontentpush\ntcp\t7999\tirdmi2\nudp\t7999\tirdmi2\ntcp\t8000\tirdmi\nudp\t8000\tirdmi\ntcp\t8001\tvcom-tunnel\nudp\t8001\tvcom-tunnel\ntcp\t8002\tteradataordbms\nudp\t8002\tteradataordbms\ntcp\t8003\tmcreport\nudp\t8003\tmcreport\ntcp\t8004\tp2pevolvenet\ntcp\t8005\tmxi\nudp\t8005\tmxi\ntcp\t8006\twpl-analytics\nudp\t8006\twpl-disc\ntcp\t8007\twarppipe\nudp\t8007\twarppipe\ntcp\t8008\thttp-alt\nudp\t8008\thttp-alt\ntcp\t8009\tnvme-disc\ntcp\t8019\tqbdb\nudp\t8019\tqbdb\ntcp\t8020\tintu-ec-svcdisc\nudp\t8020\tintu-ec-svcdisc\ntcp\t8021\tintu-ec-client\nudp\t8021\tintu-ec-client\ntcp\t8022\toa-system\nudp\t8022\toa-system\ntcp\t8023\tarca-api\nudp\t8023\tarca-api\ntcp\t8025\tca-audit-da\nudp\t8025\tca-audit-da\ntcp\t8026\tca-audit-ds\nudp\t8026\tca-audit-ds\ntcp\t8032\tpro-ed\nudp\t8032\tpro-ed\ntcp\t8033\tmindprint\nudp\t8033\tmindprint\ntcp\t8034\tvantronix-mgmt\nudp\t8034\tvantronix-mgmt\ntcp\t8040\tampify\nudp\t8040\tampify\ntcp\t8041\tenguity-xccetp\nudp\t8041\tenguity-xccetp\ntcp\t8042\tfs-agent\ntcp\t8043\tfs-server\ntcp\t8044\tfs-mgmt\ntcp\t8051\trocrail\ntcp\t8052\tsenomix01\nudp\t8052\tsenomix01\ntcp\t8053\tsenomix02\nudp\t8053\tsenomix02\ntcp\t8054\tsenomix03\nudp\t8054\tsenomix03\ntcp\t8055\tsenomix04\nudp\t8055\tsenomix04\ntcp\t8056\tsenomix05\nudp\t8056\tsenomix05\ntcp\t8057\tsenomix06\nudp\t8057\tsenomix06\ntcp\t8058\tsenomix07\nudp\t8058\tsenomix07\ntcp\t8059\tsenomix08\nudp\t8059\tsenomix08\nudp\t8060\taero\ntcp\t8066\ttoad-bi-appsrvr\ntcp\t8067\tinfi-async\ntcp\t8070\tucs-isc\ntcp\t8074\tgadugadu\nudp\t8074\tgadugadu\ntcp\t8077\tmles\ntcp\t8080\thttp-alt\nudp\t8080\thttp-alt\ntcp\t8081\tsunproxyadmin\nudp\t8081\tsunproxyadmin\ntcp\t8082\tus-cli\nudp\t8082\tus-cli\ntcp\t8083\tus-srv\nudp\t8083\tus-srv\ntcp\t8086\td-s-n\nudp\t8086\td-s-n\ntcp\t8087\tsimplifymedia\nudp\t8087\tsimplifymedia\ntcp\t8088\tradan-http\nudp\t8088\tradan-http\ntcp\t8090\topsmessaging\ntcp\t8091\tjamlink\ntcp\t8097\tsac\nudp\t8097\tsac\ntcp\t8100\txprint-server\nudp\t8100\txprint-server\ntcp\t8101\tldoms-migr\ntcp\t8102\tkz-migr\ntcp\t8115\tmtl8000-matrix\nudp\t8115\tmtl8000-matrix\ntcp\t8116\tcp-cluster\nudp\t8116\tcp-cluster\ntcp\t8117\tpurityrpc\ntcp\t8118\tprivoxy\nudp\t8118\tprivoxy\ntcp\t8121\tapollo-data\nudp\t8121\tapollo-data\ntcp\t8122\tapollo-admin\nudp\t8122\tapollo-admin\ntcp\t8128\tpaycash-online\nudp\t8128\tpaycash-online\ntcp\t8129\tpaycash-wbp\nudp\t8129\tpaycash-wbp\ntcp\t8130\tindigo-vrmi\nudp\t8130\tindigo-vrmi\ntcp\t8131\tindigo-vbcp\nudp\t8131\tindigo-vbcp\ntcp\t8132\tdbabble\nudp\t8132\tdbabble\ntcp\t8140\tpuppet\ntcp\t8148\tisdd\nudp\t8148\tisdd\nudp\t8149\teor-game\ntcp\t8153\tquantastor\ntcp\t8160\tpatrol\nudp\t8160\tpatrol\ntcp\t8161\tpatrol-snmp\nudp\t8161\tpatrol-snmp\ntcp\t8162\tlpar2rrd\ntcp\t8181\tintermapper\ntcp\t8182\tvmware-fdm\nudp\t8182\tvmware-fdm\ntcp\t8183\tproremote\ntcp\t8184\titach\nudp\t8184\titach\ntcp\t8190\tgcp-rphy\ntcp\t8191\tlimnerpressure\ntcp\t8192\tspytechphone\nudp\t8192\tspytechphone\ntcp\t8194\tblp1\nudp\t8194\tblp1\ntcp\t8195\tblp2\nudp\t8195\tblp2\ntcp\t8199\tvvr-data\nudp\t8199\tvvr-data\ntcp\t8200\ttrivnet1\nudp\t8200\ttrivnet1\ntcp\t8201\ttrivnet2\nudp\t8201\ttrivnet2\nudp\t8202\taesop\ntcp\t8204\tlm-perfworks\nudp\t8204\tlm-perfworks\ntcp\t8205\tlm-instmgr\nudp\t8205\tlm-instmgr\ntcp\t8206\tlm-dta\nudp\t8206\tlm-dta\ntcp\t8207\tlm-sserver\nudp\t8207\tlm-sserver\ntcp\t8208\tlm-webwatcher\nudp\t8208\tlm-webwatcher\ntcp\t8230\trexecj\nudp\t8230\trexecj\nudp\t8231\thncp-udp-port\nudp\t8232\thncp-dtls-port\ntcp\t8243\tsynapse-nhttps\nudp\t8243\tsynapse-nhttps\ntcp\t8270\trobot-remote\ntcp\t8276\tpando-sec\nudp\t8276\tpando-sec\ntcp\t8280\tsynapse-nhttp\nudp\t8280\tsynapse-nhttp\ntcp\t8282\tlibelle\nudp\t8282\tlibelle-disc\ntcp\t8292\tblp3\nudp\t8292\tblp3\ntcp\t8293\thiperscan-id\ntcp\t8294\tblp4\nudp\t8294\tblp4\ntcp\t8300\ttmi\nudp\t8300\ttmi\ntcp\t8301\tamberon\nudp\t8301\tamberon\ntcp\t8313\thub-open-net\ntcp\t8320\ttnp-discover\nudp\t8320\ttnp-discover\ntcp\t8321\ttnp\nudp\t8321\ttnp\ntcp\t8322\tgarmin-marine\nudp\t8322\tgarmin-marine\ntcp\t8351\tserver-find\nudp\t8351\tserver-find\ntcp\t8376\tcruise-enum\nudp\t8376\tcruise-enum\ntcp\t8377\tcruise-swroute\nudp\t8377\tcruise-swroute\ntcp\t8378\tcruise-config\nudp\t8378\tcruise-config\ntcp\t8379\tcruise-diags\nudp\t8379\tcruise-diags\ntcp\t8380\tcruise-update\nudp\t8380\tcruise-update\ntcp\t8383\tm2mservices\nudp\t8383\tm2mservices\nudp\t8384\tmarathontp\ntcp\t8400\tcvd\nudp\t8400\tcvd\ntcp\t8401\tsabarsd\nudp\t8401\tsabarsd\ntcp\t8402\tabarsd\nudp\t8402\tabarsd\ntcp\t8403\tadmind\nudp\t8403\tadmind\ntcp\t8404\tsvcloud\ntcp\t8405\tsvbackup\ntcp\t8415\tdlpx-sp\ntcp\t8416\tespeech\nudp\t8416\tespeech\ntcp\t8417\tespeech-rtp\nudp\t8417\tespeech-rtp\ntcp\t8423\taritts\ntcp\t8442\tcybro-a-bus\nudp\t8442\tcybro-a-bus\ntcp\t8443\tpcsync-https\nudp\t8443\tpcsync-https\ntcp\t8444\tpcsync-http\nudp\t8444\tpcsync-http\ntcp\t8445\tcopy\nudp\t8445\tcopy-disc\ntcp\t8450\tnpmp\nudp\t8450\tnpmp\ntcp\t8457\tnexentamv\ntcp\t8470\tcisco-avp\ntcp\t8471\tpim-port\ntcp\t8472\totv\nudp\t8472\totv\ntcp\t8473\tvp2p\nudp\t8473\tvp2p\ntcp\t8474\tnoteshare\nudp\t8474\tnoteshare\ntcp\t8500\tfmtp\nudp\t8500\tfmtp\ntcp\t8501\tcmtp-mgt\nudp\t8501\tcmtp-av\ntcp\t8502\tftnmtp\nudp\t8503\tlsp-self-ping\ntcp\t8554\trtsp-alt\nudp\t8554\trtsp-alt\ntcp\t8555\td-fence\nudp\t8555\td-fence\ntcp\t8567\tdof-tunnel\nudp\t8567\tdof-tunnel\ntcp\t8600\tasterix\nudp\t8600\tasterix\nudp\t8609\tcanon-cpp-disc\ntcp\t8610\tcanon-mfnp\nudp\t8610\tcanon-mfnp\ntcp\t8611\tcanon-bjnp1\nudp\t8611\tcanon-bjnp1\ntcp\t8612\tcanon-bjnp2\nudp\t8612\tcanon-bjnp2\ntcp\t8613\tcanon-bjnp3\nudp\t8613\tcanon-bjnp3\ntcp\t8614\tcanon-bjnp4\nudp\t8614\tcanon-bjnp4\ntcp\t8615\timink\ntcp\t8665\tmonetra\ntcp\t8666\tmonetra-admin\ntcp\t8675\tmsi-cps-rm\nudp\t8675\tmsi-cps-rm-disc\ntcp\t8686\tsun-as-jmxrmi\nudp\t8686\tsun-as-jmxrmi\ntcp\t8688\topenremote-ctrl\ntcp\t8699\tvnyx\ntcp\t8711\tnvc\nudp\t8732\tdtp-net\ntcp\t8733\tibus\nudp\t8733\tibus\ntcp\t8750\tdey-keyneg\ntcp\t8763\tmc-appserver\nudp\t8763\tmc-appserver\ntcp\t8764\topenqueue\nudp\t8764\topenqueue\ntcp\t8765\tultraseek-http\nudp\t8765\tultraseek-http\ntcp\t8766\tamcs\nudp\t8766\tamcs\ntcp\t8770\tdpap\nudp\t8770\tdpap\ntcp\t8778\tuec\ntcp\t8786\tmsgclnt\nudp\t8786\tmsgclnt\ntcp\t8787\tmsgsrvr\nudp\t8787\tmsgsrvr\ntcp\t8793\tacd-pm\nudp\t8793\tacd-pm\ntcp\t8800\tsunwebadmin\nudp\t8800\tsunwebadmin\ntcp\t8804\ttruecm\nudp\t8804\ttruecm\nudp\t8805\tpfcp\nudp\t8808\tssports-bcast\ntcp\t8873\tdxspider\nudp\t8873\tdxspider\ntcp\t8880\tcddbp-alt\nudp\t8880\tcddbp-alt\ntcp\t8881\tgalaxy4d\ntcp\t8883\tsecure-mqtt\nudp\t8883\tsecure-mqtt\ntcp\t8888\tddi-tcp-1\nudp\t8888\tddi-udp-1\ntcp\t8889\tddi-tcp-2\nudp\t8889\tddi-udp-2\ntcp\t8890\tddi-tcp-3\nudp\t8890\tddi-udp-3\ntcp\t8891\tddi-tcp-4\nudp\t8891\tddi-udp-4\ntcp\t8892\tddi-tcp-5\nudp\t8892\tddi-udp-5\ntcp\t8893\tddi-tcp-6\nudp\t8893\tddi-udp-6\ntcp\t8894\tddi-tcp-7\nudp\t8894\tddi-udp-7\ntcp\t8899\tospf-lite\nudp\t8899\tospf-lite\ntcp\t8900\tjmb-cds1\nudp\t8900\tjmb-cds1\ntcp\t8901\tjmb-cds2\nudp\t8901\tjmb-cds2\ntcp\t8910\tmanyone-http\nudp\t8910\tmanyone-http\ntcp\t8911\tmanyone-xml\nudp\t8911\tmanyone-xml\ntcp\t8912\twcbackup\nudp\t8912\twcbackup\ntcp\t8913\tdragonfly\nudp\t8913\tdragonfly\ntcp\t8937\ttwds\ntcp\t8953\tub-dns-control\ntcp\t8954\tcumulus-admin\nudp\t8954\tcumulus-admin\ntcp\t8980\tnod-provider\nudp\t8980\tnod-provider\nudp\t8981\tnod-client\ntcp\t8989\tsunwebadmins\nudp\t8989\tsunwebadmins\ntcp\t8990\thttp-wmap\nudp\t8990\thttp-wmap\ntcp\t8991\thttps-wmap\nudp\t8991\thttps-wmap\ntcp\t8997\toracle-ms-ens\ntcp\t8998\tcanto-roboflow\ntcp\t8999\tbctp\nudp\t8999\tbctp\ntcp\t9000\tcslistener\nudp\t9000\tcslistener\ntcp\t9001\tetlservicemgr\nudp\t9001\tetlservicemgr\ntcp\t9002\tdynamid\nudp\t9002\tdynamid\ntcp\t9005\tgolem\nudp\t9007\togs-client\ntcp\t9008\togs-server\ntcp\t9009\tpichat\nudp\t9009\tpichat\ntcp\t9010\tsdr\nudp\t9011\td-star\ntcp\t9020\ttambora\nudp\t9020\ttambora\ntcp\t9021\tpanagolin-ident\nudp\t9021\tpanagolin-ident\ntcp\t9022\tparagent\nudp\t9022\tparagent\ntcp\t9023\tswa-1\nudp\t9023\tswa-1\ntcp\t9024\tswa-2\nudp\t9024\tswa-2\ntcp\t9025\tswa-3\nudp\t9025\tswa-3\ntcp\t9026\tswa-4\nudp\t9026\tswa-4\ntcp\t9050\tversiera\ntcp\t9051\tfio-cmgmt\ntcp\t9060\tCardWeb-IO\nudp\t9060\tCardWeb-RT\ntcp\t9080\tglrpc\nudp\t9080\tglrpc\nudp\t9081\tcisco-aqos\ntcp\t9083\temc-pp-mgmtsvc\ntcp\t9084\taurora\nudp\t9084\taurora\ntcp\t9085\tibm-rsyscon\nudp\t9085\tibm-rsyscon\ntcp\t9086\tnet2display\nudp\t9086\tnet2display\ntcp\t9087\tclassic\nudp\t9087\tclassic\ntcp\t9088\tsqlexec\nudp\t9088\tsqlexec\ntcp\t9089\tsqlexec-ssl\nudp\t9089\tsqlexec-ssl\ntcp\t9090\twebsm\nudp\t9090\twebsm\ntcp\t9091\txmltec-xmlmail\nudp\t9091\txmltec-xmlmail\ntcp\t9092\tXmlIpcRegSvc\nudp\t9092\tXmlIpcRegSvc\ntcp\t9093\tcopycat\ntcp\t9100\thp-pdl-datastr\nudp\t9100\thp-pdl-datastr\ntcp\t9100\tpdl-datastream\nudp\t9100\tpdl-datastream\ntcp\t9101\tbacula-dir\nudp\t9101\tbacula-dir\ntcp\t9102\tbacula-fd\nudp\t9102\tbacula-fd\ntcp\t9103\tbacula-sd\nudp\t9103\tbacula-sd\ntcp\t9104\tpeerwire\nudp\t9104\tpeerwire\ntcp\t9105\txadmin\nudp\t9105\txadmin\ntcp\t9106\tastergate\nudp\t9106\tastergate-disc\ntcp\t9107\tastergatefax\ntcp\t9111\thexxorecore\nudp\t9111\thexxorecore\ntcp\t9119\tmxit\nudp\t9119\tmxit\ntcp\t9122\tgrcmp\ntcp\t9123\tgrcp\ntcp\t9131\tdddp\nudp\t9131\tdddp\ntcp\t9160\tapani1\nudp\t9160\tapani1\ntcp\t9161\tapani2\nudp\t9161\tapani2\ntcp\t9162\tapani3\nudp\t9162\tapani3\ntcp\t9163\tapani4\nudp\t9163\tapani4\ntcp\t9164\tapani5\nudp\t9164\tapani5\ntcp\t9191\tsun-as-jpda\nudp\t9191\tsun-as-jpda\ntcp\t9200\twap-wsp\nudp\t9200\twap-wsp\ntcp\t9201\twap-wsp-wtp\nudp\t9201\twap-wsp-wtp\ntcp\t9202\twap-wsp-s\nudp\t9202\twap-wsp-s\ntcp\t9203\twap-wsp-wtp-s\nudp\t9203\twap-wsp-wtp-s\ntcp\t9204\twap-vcard\nudp\t9204\twap-vcard\ntcp\t9205\twap-vcal\nudp\t9205\twap-vcal\ntcp\t9206\twap-vcard-s\nudp\t9206\twap-vcard-s\ntcp\t9207\twap-vcal-s\nudp\t9207\twap-vcal-s\ntcp\t9208\trjcdb-vcards\nudp\t9208\trjcdb-vcards\ntcp\t9209\talmobile-system\nudp\t9209\talmobile-system\ntcp\t9210\toma-mlp\nudp\t9210\toma-mlp\ntcp\t9211\toma-mlp-s\nudp\t9211\toma-mlp-s\ntcp\t9212\tserverviewdbms\nudp\t9212\tserverviewdbms\ntcp\t9213\tserverstart\nudp\t9213\tserverstart\ntcp\t9214\tipdcesgbs\nudp\t9214\tipdcesgbs\ntcp\t9215\tinsis\nudp\t9215\tinsis\ntcp\t9216\tacme\nudp\t9216\tacme\ntcp\t9217\tfsc-port\nudp\t9217\tfsc-port\ntcp\t9222\tteamcoherence\nudp\t9222\tteamcoherence\ntcp\t9255\tmon\nudp\t9255\tmon\nudp\t9277\ttraingpsdata\ntcp\t9278\tpegasus\nudp\t9278\tpegasus\ntcp\t9279\tpegasus-ctl\nudp\t9279\tpegasus-ctl\ntcp\t9280\tpgps\nudp\t9280\tpgps\ntcp\t9281\tswtp-port1\nudp\t9281\tswtp-port1\ntcp\t9282\tswtp-port2\nudp\t9282\tswtp-port2\ntcp\t9283\tcallwaveiam\nudp\t9283\tcallwaveiam\ntcp\t9284\tvisd\nudp\t9284\tvisd\ntcp\t9285\tn2h2server\nudp\t9285\tn2h2server\nudp\t9286\tn2receive\ntcp\t9287\tcumulus\nudp\t9287\tcumulus\ntcp\t9292\tarmtechdaemon\nudp\t9292\tarmtechdaemon\ntcp\t9293\tstorview\nudp\t9293\tstorview\ntcp\t9294\tarmcenterhttp\nudp\t9294\tarmcenterhttp\ntcp\t9295\tarmcenterhttps\nudp\t9295\tarmcenterhttps\ntcp\t9300\tvrace\nudp\t9300\tvrace\ntcp\t9306\tsphinxql\ntcp\t9312\tsphinxapi\ntcp\t9318\tsecure-ts\nudp\t9318\tsecure-ts\ntcp\t9321\tguibase\nudp\t9321\tguibase\ntcp\t9343\tmpidcmgr\nudp\t9343\tmpidcmgr\ntcp\t9344\tmphlpdmc\nudp\t9344\tmphlpdmc\ntcp\t9345\trancher\ntcp\t9346\tctechlicensing\nudp\t9346\tctechlicensing\ntcp\t9374\tfjdmimgr\nudp\t9374\tfjdmimgr\ntcp\t9380\tboxp\nudp\t9380\tboxp\ntcp\t9387\td2dconfig\ntcp\t9388\td2ddatatrans\ntcp\t9389\tadws\ntcp\t9390\totp\ntcp\t9396\tfjinvmgr\nudp\t9396\tfjinvmgr\ntcp\t9397\tmpidcagt\nudp\t9397\tmpidcagt\ntcp\t9400\tsec-t4net-srv\nudp\t9400\tsec-t4net-srv\ntcp\t9401\tsec-t4net-clt\nudp\t9401\tsec-t4net-clt\ntcp\t9402\tsec-pc2fax-srv\nudp\t9402\tsec-pc2fax-srv\ntcp\t9418\tgit\nudp\t9418\tgit\ntcp\t9443\ttungsten-https\nudp\t9443\ttungsten-https\ntcp\t9444\twso2esb-console\nudp\t9444\twso2esb-console\ntcp\t9445\tmindarray-ca\ntcp\t9450\tsntlkeyssrvr\nudp\t9450\tsntlkeyssrvr\ntcp\t9500\tismserver\nudp\t9500\tismserver\nudp\t9522\tsma-spw\ntcp\t9535\tmngsuite\nudp\t9535\tmngsuite\ntcp\t9536\tlaes-bf\nudp\t9536\tlaes-bf\ntcp\t9555\ttrispen-sra\nudp\t9555\ttrispen-sra\ntcp\t9592\tldgateway\nudp\t9592\tldgateway\ntcp\t9593\tcba8\nudp\t9593\tcba8\ntcp\t9594\tmsgsys\nudp\t9594\tmsgsys\ntcp\t9595\tpds\nudp\t9595\tpds\ntcp\t9596\tmercury-disc\nudp\t9596\tmercury-disc\ntcp\t9597\tpd-admin\nudp\t9597\tpd-admin\ntcp\t9598\tvscp\nudp\t9598\tvscp\ntcp\t9599\trobix\nudp\t9599\trobix\ntcp\t9600\tmicromuse-ncpw\nudp\t9600\tmicromuse-ncpw\ntcp\t9612\tstreamcomm-ds\nudp\t9612\tstreamcomm-ds\ntcp\t9614\tiadt-tls\ntcp\t9616\terunbook-agent\ntcp\t9616\terunbook_agent\ntcp\t9617\terunbook-server\ntcp\t9617\terunbook_server\ntcp\t9618\tcondor\nudp\t9618\tcondor\ntcp\t9628\todbcpathway\nudp\t9628\todbcpathway\ntcp\t9629\tuniport\nudp\t9629\tuniport\ntcp\t9630\tpeoctlr\ntcp\t9631\tpeocoll\nudp\t9632\tmc-comm\ntcp\t9640\tpqsflows\ntcp\t9666\tzoomcp\ntcp\t9667\txmms2\nudp\t9667\txmms2\ntcp\t9668\ttec5-sdctp\nudp\t9668\ttec5-sdctp\ntcp\t9694\tclient-wakeup\nudp\t9694\tclient-wakeup\ntcp\t9695\tccnx\nudp\t9695\tccnx\ntcp\t9700\tboard-roar\nudp\t9700\tboard-roar\ntcp\t9747\tl5nas-parchan\nudp\t9747\tl5nas-parchan\ntcp\t9750\tboard-voip\nudp\t9750\tboard-voip\ntcp\t9753\trasadv\nudp\t9753\trasadv\ntcp\t9762\ttungsten-http\nudp\t9762\ttungsten-http\ntcp\t9800\tdavsrc\nudp\t9800\tdavsrc\ntcp\t9801\tsstp-2\nudp\t9801\tsstp-2\ntcp\t9802\tdavsrcs\nudp\t9802\tdavsrcs\ntcp\t9875\tsapv1\nudp\t9875\tsapv1\ntcp\t9876\tsd\nudp\t9878\tkca-service\ntcp\t9888\tcyborg-systems\nudp\t9888\tcyborg-systems\ntcp\t9889\tgt-proxy\nudp\t9889\tgt-proxy\ntcp\t9898\tmonkeycom\nudp\t9898\tmonkeycom\nudp\t9899\tsctp-tunneling\ntcp\t9900\tiua\nudp\t9900\tiua\nudp\t9901\tenrp\nudp\t9903\tmulticast-ping\ntcp\t9909\tdomaintime\nudp\t9909\tdomaintime\ntcp\t9911\tsype-transport\nudp\t9911\tsype-transport\ntcp\t9925\txybrid-cloud\ntcp\t9950\tapc-9950\nudp\t9950\tapc-9950\ntcp\t9951\tapc-9951\nudp\t9951\tapc-9951\ntcp\t9952\tapc-9952\nudp\t9952\tapc-9952\ntcp\t9953\tacis\nudp\t9953\tacis\ntcp\t9954\thinp\ntcp\t9955\talljoyn-stm\nudp\t9955\talljoyn-mcm\nudp\t9956\talljoyn\ntcp\t9966\todnsp\nudp\t9966\todnsp\ntcp\t9978\txybrid-rt\ntcp\t9979\tvisweather\ntcp\t9981\tpumpkindb\ntcp\t9987\tdsm-scm-target\nudp\t9987\tdsm-scm-target\ntcp\t9988\tnsesrvr\ntcp\t9990\tosm-appsrvr\nudp\t9990\tosm-appsrvr\ntcp\t9991\tosm-oev\nudp\t9991\tosm-oev\ntcp\t9992\tpalace-1\nudp\t9992\tpalace-1\ntcp\t9993\tpalace-2\nudp\t9993\tpalace-2\ntcp\t9994\tpalace-3\nudp\t9994\tpalace-3\ntcp\t9995\tpalace-4\nudp\t9995\tpalace-4\ntcp\t9996\tpalace-5\nudp\t9996\tpalace-5\ntcp\t9997\tpalace-6\nudp\t9997\tpalace-6\ntcp\t9998\tdistinct32\nudp\t9998\tdistinct32\ntcp\t9999\tdistinct\nudp\t9999\tdistinct\ntcp\t10000\tndmp\nudp\t10000\tndmp\ntcp\t10001\tscp-config\nudp\t10001\tscp-config\ntcp\t10002\tdocumentum\nudp\t10002\tdocumentum\ntcp\t10003\tdocumentum-s\ntcp\t10003\tdocumentum_s\nudp\t10003\tdocumentum-s\nudp\t10003\tdocumentum_s\ntcp\t10004\temcrmirccd\ntcp\t10005\temcrmird\ntcp\t10006\tnetapp-sync\ntcp\t10007\tmvs-capacity\nudp\t10007\tmvs-capacity\ntcp\t10008\toctopus\nudp\t10008\toctopus\ntcp\t10009\tswdtp-sv\nudp\t10009\tswdtp-sv\ntcp\t10010\trxapi\ntcp\t10020\tabb-hw\ntcp\t10050\tzabbix-agent\nudp\t10050\tzabbix-agent\ntcp\t10051\tzabbix-trapper\nudp\t10051\tzabbix-trapper\ntcp\t10055\tqptlmd\ntcp\t10080\tamanda\nudp\t10080\tamanda\ntcp\t10081\tfamdc\nudp\t10081\tfamdc\ntcp\t10100\titap-ddtp\nudp\t10100\titap-ddtp\ntcp\t10101\tezmeeting-2\nudp\t10101\tezmeeting-2\ntcp\t10102\tezproxy-2\nudp\t10102\tezproxy-2\ntcp\t10103\tezrelay\nudp\t10103\tezrelay\ntcp\t10104\tswdtp\nudp\t10104\tswdtp\ntcp\t10107\tbctp-server\nudp\t10107\tbctp-server\ntcp\t10110\tnmea-0183\nudp\t10110\tnmea-0183\nudp\t10111\tnmea-onenet\ntcp\t10113\tnetiq-endpoint\nudp\t10113\tnetiq-endpoint\ntcp\t10114\tnetiq-qcheck\nudp\t10114\tnetiq-qcheck\ntcp\t10115\tnetiq-endpt\nudp\t10115\tnetiq-endpt\ntcp\t10116\tnetiq-voipa\nudp\t10116\tnetiq-voipa\ntcp\t10117\tiqrm\nudp\t10117\tiqrm\ntcp\t10125\tcimple\ntcp\t10128\tbmc-perf-sd\nudp\t10128\tbmc-perf-sd\ntcp\t10129\tbmc-gms\ntcp\t10160\tqb-db-server\nudp\t10160\tqb-db-server\ntcp\t10161\tsnmptls\nudp\t10161\tsnmpdtls\ntcp\t10162\tsnmptls-trap\nudp\t10162\tsnmpdtls-trap\ntcp\t10200\ttrisoap\nudp\t10200\ttrisoap\ntcp\t10201\trsms\nudp\t10201\trscs\ntcp\t10252\tapollo-relay\nudp\t10252\tapollo-relay\nudp\t10253\teapol-relay\ntcp\t10260\taxis-wimp-port\nudp\t10260\taxis-wimp-port\ntcp\t10261\ttile-ml\ntcp\t10288\tblocks\nudp\t10288\tblocks\ntcp\t10321\tcosir\nudp\t10439\tbngsync\nudp\t10500\thip-nat-t\ntcp\t10540\tMOS-lower\nudp\t10540\tMOS-lower\ntcp\t10541\tMOS-upper\nudp\t10541\tMOS-upper\ntcp\t10542\tMOS-aux\nudp\t10542\tMOS-aux\ntcp\t10543\tMOS-soap\nudp\t10543\tMOS-soap\ntcp\t10544\tMOS-soap-opt\nudp\t10544\tMOS-soap-opt\ntcp\t10548\tserverdocs\ntcp\t10631\tprintopia\ntcp\t10800\tgap\nudp\t10800\tgap\ntcp\t10805\tlpdg\nudp\t10805\tlpdg\ntcp\t10809\tnbd\nudp\t10810\tnmc-disc\ntcp\t10860\thelix\nudp\t10860\thelix\ntcp\t10880\tbveapi\nudp\t10880\tbveapi\ntcp\t10933\toctopustentacle\ntcp\t10990\trmiaux\nudp\t10990\trmiaux\ntcp\t11000\tirisa\nudp\t11000\tirisa\ntcp\t11001\tmetasys\nudp\t11001\tmetasys\nudp\t10023\tcefd-vmp\ntcp\t11095\tweave\nudp\t11095\tweave\ntcp\t11103\torigo-sync\ntcp\t11104\tnetapp-icmgmt\ntcp\t11105\tnetapp-icdata\ntcp\t11106\tsgi-lk\nudp\t11106\tsgi-lk\nudp\t11108\tmyq-termlink\ntcp\t11109\tsgi-dmfmgr\ntcp\t11110\tsgi-soap\ntcp\t11111\tvce\nudp\t11111\tvce\ntcp\t11112\tdicom\nudp\t11112\tdicom\ntcp\t11161\tsuncacao-snmp\nudp\t11161\tsuncacao-snmp\ntcp\t11162\tsuncacao-jmxmp\nudp\t11162\tsuncacao-jmxmp\ntcp\t11163\tsuncacao-rmi\nudp\t11163\tsuncacao-rmi\ntcp\t11164\tsuncacao-csa\nudp\t11164\tsuncacao-csa\ntcp\t11165\tsuncacao-websvc\nudp\t11165\tsuncacao-websvc\nudp\t11171\tsnss\ntcp\t11172\toemcacao-jmxmp\ntcp\t11173\tt5-straton\ntcp\t11174\toemcacao-rmi\ntcp\t11175\toemcacao-websvc\ntcp\t11201\tsmsqp\nudp\t11201\tsmsqp\ntcp\t11202\tdcsl-backup\ntcp\t11208\twifree\nudp\t11208\twifree\ntcp\t11211\tmemcache\nudp\t11211\tmemcache\ntcp\t11319\timip\nudp\t11319\timip\ntcp\t11320\timip-channels\nudp\t11320\timip-channels\ntcp\t11321\tarena-server\nudp\t11321\tarena-server\ntcp\t11367\tatm-uhas\nudp\t11367\tatm-uhas\ntcp\t11371\thkp\nudp\t11371\thkp\nudp\t11430\tlsdp\ntcp\t11489\tasgcypresstcps\ntcp\t11600\ttempest-port\nudp\t11600\ttempest-port\ntcp\t11623\temc-xsw-dconfig\ntcp\t11720\th323callsigalt\nudp\t11720\th323callsigalt\ntcp\t11723\temc-xsw-dcache\nudp\t11723\temc-xsw-dcache\ntcp\t11751\tintrepid-ssl\nudp\t11751\tintrepid-ssl\ntcp\t11796\tlanschool\nudp\t11796\tlanschool-mpt\ntcp\t11876\txoraya\nudp\t11876\txoraya\nudp\t11877\tx2e-disc\ntcp\t11967\tsysinfo-sp\nudp\t11967\tsysinfo-sp\ntcp\t12000\tentextxid\nudp\t12000\tentextxid\ntcp\t12001\tentextnetwk\nudp\t12001\tentextnetwk\ntcp\t12002\tentexthigh\nudp\t12002\tentexthigh\ntcp\t12003\tentextmed\nudp\t12003\tentextmed\ntcp\t12004\tentextlow\nudp\t12004\tentextlow\ntcp\t12005\tdbisamserver1\nudp\t12005\tdbisamserver1\ntcp\t12006\tdbisamserver2\nudp\t12006\tdbisamserver2\ntcp\t12007\taccuracer\nudp\t12007\taccuracer\ntcp\t12008\taccuracer-dbms\nudp\t12008\taccuracer-dbms\nudp\t12009\tghvpn\ntcp\t12010\tedbsrvr\ntcp\t12012\tvipera\nudp\t12012\tvipera\ntcp\t12013\tvipera-ssl\nudp\t12013\tvipera-ssl\ntcp\t12109\trets-ssl\nudp\t12109\trets-ssl\ntcp\t12121\tnupaper-ss\nudp\t12121\tnupaper-ss\ntcp\t12168\tcawas\nudp\t12168\tcawas\ntcp\t12172\thivep\nudp\t12172\thivep\ntcp\t12300\tlinogridengine\nudp\t12300\tlinogridengine\ntcp\t12302\trads\ntcp\t12321\twarehouse-sss\nudp\t12321\twarehouse-sss\ntcp\t12322\twarehouse\nudp\t12322\twarehouse\ntcp\t12345\titalk\nudp\t12345\titalk\ntcp\t12753\ttsaf\nudp\t12753\ttsaf\ntcp\t12865\tnetperf\ntcp\t13160\ti-zipqd\nudp\t13160\ti-zipqd\ntcp\t13216\tbcslogc\nudp\t13216\tbcslogc\ntcp\t13217\trs-pias\nudp\t13217\trs-pias\ntcp\t13218\temc-vcas-tcp\nudp\t13218\temc-vcas-udp\ntcp\t13223\tpowwow-client\nudp\t13223\tpowwow-client\ntcp\t13224\tpowwow-server\nudp\t13224\tpowwow-server\ntcp\t13400\tdoip-data\nudp\t13400\tdoip-disc\ntcp\t13720\tbprd\nudp\t13720\tbprd\ntcp\t13721\tbpdbm\nudp\t13721\tbpdbm\ntcp\t13722\tbpjava-msvc\nudp\t13722\tbpjava-msvc\ntcp\t13724\tvnetd\nudp\t13724\tvnetd\ntcp\t13782\tbpcd\nudp\t13782\tbpcd\ntcp\t13783\tvopied\nudp\t13783\tvopied\ntcp\t13785\tnbdb\nudp\t13785\tnbdb\ntcp\t13786\tnomdb\nudp\t13786\tnomdb\ntcp\t13818\tdsmcc-config\nudp\t13818\tdsmcc-config\ntcp\t13819\tdsmcc-session\nudp\t13819\tdsmcc-session\ntcp\t13820\tdsmcc-passthru\nudp\t13820\tdsmcc-passthru\ntcp\t13821\tdsmcc-download\nudp\t13821\tdsmcc-download\ntcp\t13822\tdsmcc-ccp\nudp\t13822\tdsmcc-ccp\ntcp\t13823\tbmdss\ntcp\t13894\tucontrol\nudp\t13894\tucontrol\ntcp\t13929\tdta-systems\nudp\t13929\tdta-systems\ntcp\t13930\tmedevolve\ntcp\t14000\tscotty-ft\nudp\t14000\tscotty-ft\ntcp\t14001\tsua\nudp\t14001\tsua\nudp\t14002\tscotty-disc\ntcp\t14033\tsage-best-com1\nudp\t14033\tsage-best-com1\ntcp\t14034\tsage-best-com2\nudp\t14034\tsage-best-com2\ntcp\t14141\tvcs-app\nudp\t14141\tvcs-app\ntcp\t14142\ticpp\nudp\t14142\ticpp\ntcp\t14143\ticpps\ntcp\t14145\tgcm-app\nudp\t14145\tgcm-app\ntcp\t14149\tvrts-tdd\nudp\t14149\tvrts-tdd\ntcp\t14150\tvcscmd\ntcp\t14154\tvad\nudp\t14154\tvad\ntcp\t14250\tcps\nudp\t14250\tcps\ntcp\t14414\tca-web-update\nudp\t14414\tca-web-update\ntcp\t14500\txpra\ntcp\t14936\thde-lcesrvr-1\nudp\t14936\thde-lcesrvr-1\ntcp\t14937\thde-lcesrvr-2\nudp\t14937\thde-lcesrvr-2\ntcp\t15000\thydap\nudp\t15000\thydap\ntcp\t15002\tonep-tls\nudp\t15118\tv2g-secc\ntcp\t15345\txpilot\nudp\t15345\txpilot\ntcp\t15363\t3link\nudp\t15363\t3link\ntcp\t15555\tcisco-snat\nudp\t15555\tcisco-snat\ntcp\t15660\tbex-xr\nudp\t15660\tbex-xr\ntcp\t15740\tptp\nudp\t15740\tptp\nudp\t15998\t2ping\ntcp\t15999\tprogrammar\ntcp\t16000\tfmsas\ntcp\t16001\tfmsascon\ntcp\t16002\tgsms\nudp\t16003\talfin\ntcp\t16020\tjwpc\ntcp\t16021\tjwpc-bin\ntcp\t16161\tsun-sea-port\nudp\t16161\tsun-sea-port\ntcp\t16162\tsolaris-audit\ntcp\t16309\tetb4j\nudp\t16309\tetb4j\ntcp\t16310\tpduncs\nudp\t16310\tpduncs\ntcp\t16311\tpdefmns\nudp\t16311\tpdefmns\ntcp\t16360\tnetserialext1\nudp\t16360\tnetserialext1\ntcp\t16361\tnetserialext2\nudp\t16361\tnetserialext2\ntcp\t16367\tnetserialext3\nudp\t16367\tnetserialext3\ntcp\t16368\tnetserialext4\nudp\t16368\tnetserialext4\ntcp\t16384\tconnected\nudp\t16384\tconnected\ntcp\t16385\trdgs\ntcp\t16619\txoms\ntcp\t16665\taxon-tunnel\nudp\t16666\tvtp\ntcp\t16789\tcadsisvr\ntcp\t16900\tnewbay-snc-mc\nudp\t16900\tnewbay-snc-mc\ntcp\t16950\tsgcip\nudp\t16950\tsgcip\ntcp\t16991\tintel-rci-mp\nudp\t16991\tintel-rci-mp\ntcp\t16992\tamt-soap-http\nudp\t16992\tamt-soap-http\ntcp\t16993\tamt-soap-https\nudp\t16993\tamt-soap-https\ntcp\t16994\tamt-redir-tcp\nudp\t16994\tamt-redir-tcp\ntcp\t16995\tamt-redir-tls\nudp\t16995\tamt-redir-tls\ntcp\t17007\tisode-dua\nudp\t17007\tisode-dua\ntcp\t17184\tvestasdlp\ntcp\t17185\tsoundsvirtual\nudp\t17185\tsoundsvirtual\ntcp\t17219\tchipper\nudp\t17219\tchipper\ntcp\t17220\tavtp\nudp\t17220\tavtp\ntcp\t17221\tavdecc\nudp\t17221\tavdecc\nudp\t17222\tcpsp\ntcp\t17223\tisa100-gci\nudp\t17224\ttrdp-pd\ntcp\t17225\ttrdp-md\nudp\t17225\ttrdp-md\ntcp\t17234\tintegrius-stp\nudp\t17234\tintegrius-stp\ntcp\t17235\tssh-mgmt\nudp\t17235\tssh-mgmt\ntcp\t17500\tdb-lsp\nudp\t17500\tdb-lsp-disc\ntcp\t17555\tailith\ntcp\t17729\tea\nudp\t17729\tea\ntcp\t17754\tzep\nudp\t17754\tzep\ntcp\t17755\tzigbee-ip\nudp\t17755\tzigbee-ip\ntcp\t17756\tzigbee-ips\nudp\t17756\tzigbee-ips\ntcp\t17777\tsw-orion\ntcp\t18000\tbiimenu\nudp\t18000\tbiimenu\ntcp\t18104\tradpdf\ntcp\t18136\tracf\ntcp\t18181\topsec-cvp\nudp\t18181\topsec-cvp\ntcp\t18182\topsec-ufp\nudp\t18182\topsec-ufp\ntcp\t18183\topsec-sam\nudp\t18183\topsec-sam\ntcp\t18184\topsec-lea\nudp\t18184\topsec-lea\ntcp\t18185\topsec-omi\nudp\t18185\topsec-omi\ntcp\t18186\tohsc\nudp\t18186\tohsc\ntcp\t18187\topsec-ela\nudp\t18187\topsec-ela\ntcp\t18241\tcheckpoint-rtm\nudp\t18241\tcheckpoint-rtm\ntcp\t18242\ticlid\ntcp\t18243\tclusterxl\ntcp\t18262\tgv-pf\nudp\t18262\tgv-pf\ntcp\t18463\tac-cluster\nudp\t18463\tac-cluster\ntcp\t18634\trds-ib\nudp\t18634\trds-ib\ntcp\t18635\trds-ip\nudp\t18635\trds-ip\ntcp\t18668\tvdmmesh\nudp\t18668\tvdmmesh-disc\ntcp\t18769\tique\nudp\t18769\tique\ntcp\t18881\tinfotos\nudp\t18881\tinfotos\ntcp\t18888\tapc-necmp\nudp\t18888\tapc-necmp\ntcp\t19000\tigrid\nudp\t19000\tigrid\ntcp\t19007\tscintilla\nudp\t19007\tscintilla\ntcp\t19020\tj-link\ntcp\t19191\topsec-uaa\nudp\t19191\topsec-uaa\ntcp\t19194\tua-secureagent\nudp\t19194\tua-secureagent\ntcp\t19220\tcora\nudp\t19220\tcora-disc\ntcp\t19283\tkeysrvr\nudp\t19283\tkeysrvr\ntcp\t19315\tkeyshadow\nudp\t19315\tkeyshadow\ntcp\t19398\tmtrgtrans\nudp\t19398\tmtrgtrans\ntcp\t19410\thp-sco\nudp\t19410\thp-sco\ntcp\t19411\thp-sca\nudp\t19411\thp-sca\ntcp\t19412\thp-sessmon\nudp\t19412\thp-sessmon\ntcp\t19539\tfxuptp\nudp\t19539\tfxuptp\ntcp\t19540\tsxuptp\nudp\t19540\tsxuptp\ntcp\t19541\tjcp\nudp\t19541\tjcp\nudp\t19788\tmle\ntcp\t19998\tiec-104-sec\ntcp\t19999\tdnp-sec\nudp\t19999\tdnp-sec\ntcp\t20000\tdnp\nudp\t20000\tdnp\ntcp\t20001\tmicrosan\nudp\t20001\tmicrosan\ntcp\t20002\tcommtact-http\nudp\t20002\tcommtact-http\ntcp\t20003\tcommtact-https\nudp\t20003\tcommtact-https\ntcp\t20005\topenwebnet\nudp\t20005\topenwebnet\nudp\t20012\tss-idi-disc\ntcp\t20013\tss-idi\ntcp\t20014\topendeploy\nudp\t20014\topendeploy\ntcp\t20034\tnburn-id\ntcp\t20034\tnburn_id\nudp\t20034\tnburn-id\nudp\t20034\tnburn_id\ntcp\t20046\ttmophl7mts\nudp\t20046\ttmophl7mts\ntcp\t20048\tmountd\nudp\t20048\tmountd\ntcp\t20049\tnfsrdma\nudp\t20049\tnfsrdma\ntcp\t20057\tavesterra\ntcp\t20167\ttolfab\nudp\t20167\ttolfab\ntcp\t20202\tipdtp-port\nudp\t20202\tipdtp-port\ntcp\t20222\tipulse-ics\nudp\t20222\tipulse-ics\ntcp\t20480\temwavemsg\nudp\t20480\temwavemsg\ntcp\t20670\ttrack\nudp\t20670\ttrack\ntcp\t20999\tathand-mmp\nudp\t20999\tathand-mmp\ntcp\t21000\tirtrans\nudp\t21000\tirtrans\ntcp\t21010\tnotezilla-lan\ntcp\t21212\ttrinket-agent\ntcp\t21221\taigairserver\ntcp\t21553\trdm-tfs\ntcp\t21554\tdfserver\nudp\t21554\tdfserver\ntcp\t21590\tvofr-gateway\nudp\t21590\tvofr-gateway\ntcp\t21800\ttvpm\nudp\t21800\ttvpm\ntcp\t21845\twebphone\nudp\t21845\twebphone\ntcp\t21846\tnetspeak-is\nudp\t21846\tnetspeak-is\ntcp\t21847\tnetspeak-cs\nudp\t21847\tnetspeak-cs\ntcp\t21848\tnetspeak-acd\nudp\t21848\tnetspeak-acd\ntcp\t21849\tnetspeak-cps\nudp\t21849\tnetspeak-cps\ntcp\t22000\tsnapenetio\nudp\t22000\tsnapenetio\ntcp\t22001\toptocontrol\nudp\t22001\toptocontrol\ntcp\t22002\toptohost002\nudp\t22002\toptohost002\ntcp\t22003\toptohost003\nudp\t22003\toptohost003\ntcp\t22004\toptohost004\nudp\t22004\toptohost004\ntcp\t22005\toptohost004\nudp\t22005\toptohost004\ntcp\t22125\tdcap\ntcp\t22128\tgsidcap\ntcp\t22222\teasyengine\ntcp\t22273\twnn6\nudp\t22273\twnn6\ntcp\t22305\tcis\nudp\t22305\tcis\ntcp\t22335\tshrewd-control\nudp\t22335\tshrewd-stream\ntcp\t22343\tcis-secure\nudp\t22343\tcis-secure\ntcp\t22347\twibukey\nudp\t22347\twibukey\ntcp\t22350\tcodemeter\nudp\t22350\tcodemeter\ntcp\t22351\tcodemeter-cmwan\ntcp\t22537\tcaldsoft-backup\ntcp\t22555\tvocaltec-wconf\nudp\t22555\tvocaltec-phone\ntcp\t22763\ttalikaserver\nudp\t22763\ttalikaserver\ntcp\t22800\taws-brf\nudp\t22800\taws-brf\ntcp\t22951\tbrf-gw\nudp\t22951\tbrf-gw\ntcp\t23000\tinovaport1\nudp\t23000\tinovaport1\ntcp\t23001\tinovaport2\nudp\t23001\tinovaport2\ntcp\t23002\tinovaport3\nudp\t23002\tinovaport3\ntcp\t23003\tinovaport4\nudp\t23003\tinovaport4\ntcp\t23004\tinovaport5\nudp\t23004\tinovaport5\ntcp\t23005\tinovaport6\nudp\t23005\tinovaport6\ntcp\t23053\tgntp\nudp\t23272\ts102\ntcp\t23294\t5afe-dir\nudp\t23294\t5afe-disc\ntcp\t23333\telxmgmt\nudp\t23333\telxmgmt\ntcp\t23400\tnovar-dbase\nudp\t23400\tnovar-dbase\ntcp\t23401\tnovar-alarm\nudp\t23401\tnovar-alarm\ntcp\t23402\tnovar-global\nudp\t23402\tnovar-global\ntcp\t23456\taequus\ntcp\t23457\taequus-alt\ntcp\t23546\tareaguard-neo\ntcp\t24000\tmed-ltp\nudp\t24000\tmed-ltp\ntcp\t24001\tmed-fsp-rx\nudp\t24001\tmed-fsp-rx\ntcp\t24002\tmed-fsp-tx\nudp\t24002\tmed-fsp-tx\ntcp\t24003\tmed-supp\nudp\t24003\tmed-supp\ntcp\t24004\tmed-ovw\nudp\t24004\tmed-ovw\ntcp\t24005\tmed-ci\nudp\t24005\tmed-ci\ntcp\t24006\tmed-net-svc\nudp\t24006\tmed-net-svc\ntcp\t24242\tfilesphere\nudp\t24242\tfilesphere\ntcp\t24249\tvista-4gl\nudp\t24249\tvista-4gl\ntcp\t24321\tild\nudp\t24321\tild\nudp\t24322\thid\ntcp\t24386\tintel-rci\ntcp\t24386\tintel_rci\nudp\t24386\tintel-rci\nudp\t24386\tintel_rci\ntcp\t24465\ttonidods\nudp\t24465\ttonidods\ntcp\t24554\tbinkp\nudp\t24554\tbinkp\ntcp\t24577\tbilobit\nudp\t24577\tbilobit-update\ntcp\t24666\tsdtvwcam\ntcp\t24676\tcanditv\nudp\t24676\tcanditv\ntcp\t24677\tflashfiler\nudp\t24677\tflashfiler\ntcp\t24678\tproactivate\nudp\t24678\tproactivate\ntcp\t24680\ttcc-http\nudp\t24680\ttcc-http\ntcp\t24754\tcslg\nudp\t24850\tassoc-disc\ntcp\t24922\tfind\nudp\t24922\tfind\ntcp\t25000\ticl-twobase1\nudp\t25000\ticl-twobase1\ntcp\t25001\ticl-twobase2\nudp\t25001\ticl-twobase2\ntcp\t25002\ticl-twobase3\nudp\t25002\ticl-twobase3\ntcp\t25003\ticl-twobase4\nudp\t25003\ticl-twobase4\ntcp\t25004\ticl-twobase5\nudp\t25004\ticl-twobase5\ntcp\t25005\ticl-twobase6\nudp\t25005\ticl-twobase6\ntcp\t25006\ticl-twobase7\nudp\t25006\ticl-twobase7\ntcp\t25007\ticl-twobase8\nudp\t25007\ticl-twobase8\ntcp\t25008\ticl-twobase9\nudp\t25008\ticl-twobase9\ntcp\t25009\ticl-twobase10\nudp\t25009\ticl-twobase10\ntcp\t25576\tsauterdongle\ntcp\t25604\tidtp\ntcp\t25793\tvocaltec-hos\nudp\t25793\tvocaltec-hos\ntcp\t25900\ttasp-net\nudp\t25900\ttasp-net\ntcp\t25901\tniobserver\nudp\t25901\tniobserver\ntcp\t25902\tnilinkanalyst\nudp\t25902\tnilinkanalyst\ntcp\t25903\tniprobe\nudp\t25903\tniprobe\nudp\t25954\tbf-game\nudp\t25955\tbf-master\ntcp\t26000\tquake\nudp\t26000\tquake\ntcp\t26133\tscscp\nudp\t26133\tscscp\ntcp\t26208\twnn6-ds\nudp\t26208\twnn6-ds\ntcp\t26257\tcockroach\ntcp\t26260\tezproxy\nudp\t26260\tezproxy\ntcp\t26261\tezmeeting\nudp\t26261\tezmeeting\ntcp\t26262\tk3software-svr\nudp\t26262\tk3software-svr\ntcp\t26263\tk3software-cli\nudp\t26263\tk3software-cli\ntcp\t26486\texoline-tcp\nudp\t26486\texoline-udp\ntcp\t26487\texoconfig\nudp\t26487\texoconfig\ntcp\t26489\texonet\nudp\t26489\texonet\ntcp\t27345\timagepump\nudp\t27345\timagepump\ntcp\t27442\tjesmsjc\nudp\t27442\tjesmsjc\ntcp\t27504\tkopek-httphead\nudp\t27504\tkopek-httphead\ntcp\t27782\tars-vista\nudp\t27782\tars-vista\ntcp\t27876\tastrolink\ntcp\t27999\ttw-auth-key\nudp\t27999\ttw-auth-key\ntcp\t28000\tnxlmd\nudp\t28000\tnxlmd\ntcp\t28001\tpqsp\nudp\t28119\ta27-ran-ran\ntcp\t28200\tvoxelstorm\nudp\t28200\tvoxelstorm\ntcp\t28240\tsiemensgsm\nudp\t28240\tsiemensgsm\ntcp\t28589\tbosswave\ntcp\t29167\totmp\nudp\t29167\totmp\ntcp\t29999\tbingbang\ntcp\t30000\tndmps\ntcp\t30001\tpago-services1\nudp\t30001\tpago-services1\ntcp\t30002\tpago-services2\nudp\t30002\tpago-services2\ntcp\t30003\tamicon-fpsu-ra\nudp\t30003\tamicon-fpsu-ra\nudp\t30004\tamicon-fpsu-s\ntcp\t30100\trwp\ntcp\t30260\tkingdomsonline\nudp\t30260\tkingdomsonline\ntcp\t30400\tgs-realtime\nudp\t30832\tsamsung-disc\ntcp\t30999\tovobs\nudp\t30999\tovobs\ntcp\t31016\tka-sddp\nudp\t31016\tka-kdp\ntcp\t31020\tautotrac-acp\nudp\t31029\tyawn\ntcp\t31400\tpace-licensed\ntcp\t31416\txqosd\nudp\t31416\txqosd\ntcp\t31457\ttetrinet\nudp\t31457\ttetrinet\ntcp\t31620\tlm-mon\nudp\t31620\tlm-mon\ntcp\t31685\tdsx-monitor\ntcp\t31685\tdsx_monitor\ntcp\t31765\tgamesmith-port\nudp\t31765\tgamesmith-port\ntcp\t31948\ticeedcp-tx\ntcp\t31948\ticeedcp_tx\nudp\t31948\ticeedcp-tx\nudp\t31948\ticeedcp_tx\ntcp\t31949\ticeedcp-rx\ntcp\t31949\ticeedcp_rx\nudp\t31949\ticeedcp-rx\nudp\t31949\ticeedcp_rx\ntcp\t32034\tiracinghelper\nudp\t32034\tiracinghelper\ntcp\t32249\tt1distproc60\nudp\t32249\tt1distproc60\ntcp\t32400\tplex\ntcp\t32483\tapm-link\nudp\t32483\tapm-link\ntcp\t32635\tsec-ntb-clnt\nudp\t32635\tsec-ntb-clnt\ntcp\t32636\tDMExpress\nudp\t32636\tDMExpress\ntcp\t32767\tfilenet-powsrm\nudp\t32767\tfilenet-powsrm\ntcp\t32768\tfilenet-tms\nudp\t32768\tfilenet-tms\ntcp\t32769\tfilenet-rpc\nudp\t32769\tfilenet-rpc\ntcp\t32770\tfilenet-nch\nudp\t32770\tfilenet-nch\ntcp\t32771\tfilenet-rmi\nudp\t32771\tfilenet-rmi\ntcp\t32772\tfilenet-pa\nudp\t32772\tfilenet-pa\ntcp\t32773\tfilenet-cm\nudp\t32773\tfilenet-cm\ntcp\t32774\tfilenet-re\nudp\t32774\tfilenet-re\ntcp\t32775\tfilenet-pch\nudp\t32775\tfilenet-pch\ntcp\t32776\tfilenet-peior\nudp\t32776\tfilenet-peior\ntcp\t32777\tfilenet-obrok\nudp\t32777\tfilenet-obrok\ntcp\t32801\tmlsn\nudp\t32801\tmlsn\ntcp\t32811\tretp\ntcp\t32896\tidmgratm\nudp\t32896\tidmgratm\ntcp\t33060\tmysqlx\ntcp\t33123\taurora-balaena\nudp\t33123\taurora-balaena\ntcp\t33331\tdiamondport\nudp\t33331\tdiamondport\ntcp\t33333\tdgi-serv\ntcp\t33334\tspeedtrace\nudp\t33334\tspeedtrace-disc\ntcp\t33434\ttraceroute\nudp\t33434\ttraceroute\nudp\t33435\tmtrace\ntcp\t33656\tsnip-slave\nudp\t33656\tsnip-slave\ntcp\t34249\tturbonote-2\nudp\t34249\tturbonote-2\ntcp\t34378\tp-net-local\nudp\t34378\tp-net-local\ntcp\t34379\tp-net-remote\nudp\t34379\tp-net-remote\ntcp\t34567\tdhanalakshmi\nudp\t34567\tedi_service\ntcp\t34962\tprofinet-rt\nudp\t34962\tprofinet-rt\ntcp\t34963\tprofinet-rtm\nudp\t34963\tprofinet-rtm\ntcp\t34964\tprofinet-cm\nudp\t34964\tprofinet-cm\ntcp\t34980\tethercat\nudp\t34980\tethercat\ntcp\t35000\theathview\ntcp\t35001\trt-viewer\nudp\t35001\trt-viewer\ntcp\t35002\trt-sound\ntcp\t35003\trt-devicemapper\ntcp\t35004\trt-classmanager\nudp\t35004\trt-classmanager\ntcp\t35005\trt-labtracker\ntcp\t35006\trt-helper\ntcp\t35100\taxio-disc\nudp\t35100\taxio-disc\ntcp\t35354\tkitim\ntcp\t35355\taltova-lm\nudp\t35355\taltova-lm-disc\ntcp\t35356\tguttersnex\ntcp\t35357\topenstack-id\ntcp\t36001\tallpeers\nudp\t36001\tallpeers\nudp\t36411\twlcp\ntcp\t36524\tfebooti-aw\ntcp\t36602\tobservium-agent\ntcp\t36700\tmapx\ntcp\t36865\tkastenxpipe\nudp\t36865\tkastenxpipe\ntcp\t37475\tneckar\nudp\t37475\tneckar\ntcp\t37483\tgdrive-sync\ntcp\t37601\teftp\ntcp\t37654\tunisys-eportal\nudp\t37654\tunisys-eportal\ntcp\t38000\tivs-database\ntcp\t38001\tivs-insertion\ntcp\t38002\tcresco-control\nudp\t38002\tcrescoctrl-disc\ntcp\t38201\tgalaxy7-data\nudp\t38201\tgalaxy7-data\ntcp\t38202\tfairview\nudp\t38202\tfairview\ntcp\t38203\tagpolicy\nudp\t38203\tagpolicy\ntcp\t38800\tsruth\ntcp\t38865\tsecrmmsafecopya\ntcp\t39681\tturbonote-1\nudp\t39681\tturbonote-1\ntcp\t40000\tsafetynetp\nudp\t40000\tsafetynetp\nudp\t40023\tk-patentssensor\ntcp\t40404\tsptx\ntcp\t40841\tcscp\nudp\t40841\tcscp\ntcp\t40842\tcsccredir\nudp\t40842\tcsccredir\ntcp\t40843\tcsccfirewall\nudp\t40843\tcsccfirewall\nudp\t40853\tortec-disc\ntcp\t41111\tfs-qos\nudp\t41111\tfs-qos\ntcp\t41121\ttentacle\ntcp\t41230\tz-wave-s\nudp\t41230\tz-wave-s\ntcp\t41794\tcrestron-cip\nudp\t41794\tcrestron-cip\ntcp\t41795\tcrestron-ctp\nudp\t41795\tcrestron-ctp\ntcp\t41796\tcrestron-cips\ntcp\t41797\tcrestron-ctps\ntcp\t42508\tcandp\nudp\t42508\tcandp\ntcp\t42509\tcandrp\nudp\t42509\tcandrp\ntcp\t42510\tcaerpc\nudp\t42510\tcaerpc\ntcp\t43000\trecvr-rc\nudp\t43000\trecvr-rc-disc\ntcp\t43188\treachout\nudp\t43188\treachout\ntcp\t43189\tndm-agent-port\nudp\t43189\tndm-agent-port\ntcp\t43190\tip-provision\nudp\t43190\tip-provision\ntcp\t43191\tnoit-transport\ntcp\t43210\tshaperai\nudp\t43210\tshaperai-disc\nudp\t43438\thmip-routing\ntcp\t43439\teq3-update\nudp\t43439\teq3-config\ntcp\t43440\tew-mgmt\nudp\t43440\tew-disc-cmd\ntcp\t43441\tciscocsdb\nudp\t43441\tciscocsdb\ntcp\t44123\tz-wave-tunnel\ntcp\t44321\tpmcd\nudp\t44321\tpmcd\ntcp\t44322\tpmcdproxy\nudp\t44322\tpmcdproxy\ntcp\t44323\tpmwebapi\ntcp\t44444\tcognex-dataman\nudp\t44544\tdomiq\ntcp\t44553\trbr-debug\nudp\t44553\trbr-debug\nudp\t44600\tasihpi\ntcp\t44818\tEtherNet-IP-2\ntcp\t44818\tEtherNet/IP-2\nudp\t44818\tEtherNet-IP-2\nudp\t44818\tEtherNet/IP-2\ntcp\t44900\tm3da\nudp\t44900\tm3da-disc\ntcp\t45000\tasmp\nudp\t45000\tasmp-mon\ntcp\t45001\tasmps\ntcp\t45002\trs-status\ntcp\t45045\tsynctest\ntcp\t45054\tinvision-ag\nudp\t45054\tinvision-ag\ntcp\t45514\tcloudcheck\nudp\t45514\tcloudcheck-ping\ntcp\t45678\teba\nudp\t45678\teba\ntcp\t45824\tdai-shell\ntcp\t45825\tqdb2service\nudp\t45825\tqdb2service\ntcp\t45966\tssr-servermgr\nudp\t45966\tssr-servermgr\ntcp\t46336\tinedo\ntcp\t46998\tspremotetablet\ntcp\t46999\tmediabox\nudp\t46999\tmediabox\ntcp\t47000\tmbus\nudp\t47000\tmbus\ntcp\t47001\twinrm\nudp\t47100\tjvl-mactalk\ntcp\t47557\tdbbrowse\nudp\t47557\tdbbrowse\ntcp\t47624\tdirectplaysrvr\nudp\t47624\tdirectplaysrvr\ntcp\t47806\tap\nudp\t47806\tap\ntcp\t47808\tbacnet\nudp\t47808\tbacnet\nudp\t47809\tpresonus-ucnet\ntcp\t48000\tnimcontroller\nudp\t48000\tnimcontroller\ntcp\t48001\tnimspooler\nudp\t48001\tnimspooler\ntcp\t48002\tnimhub\nudp\t48002\tnimhub\ntcp\t48003\tnimgtw\nudp\t48003\tnimgtw\ntcp\t48004\tnimbusdb\ntcp\t48005\tnimbusdbctrl\ntcp\t48048\tjuliar\ntcp\t48049\t3gpp-cbsp\ntcp\t48050\tweandsf\ntcp\t48128\tisnetserv\nudp\t48128\tisnetserv\ntcp\t48129\tblp5\nudp\t48129\tblp5\ntcp\t48556\tcom-bardac-dw\nudp\t48556\tcom-bardac-dw\ntcp\t48619\tiqobject\nudp\t48619\tiqobject\ntcp\t48653\trobotraconteur\nudp\t48653\trobotraconteur\ntcp\t49000\tmatahari\ntcp\t49001\tnusrp\nudp\t49001\tnusdp-disc\ntcp\t49150\tinspider"
  },
  {
    "path": "plugins/pcap/wireshark-oui.tsv",
    "content": "prefix\tshortname\towner\n00:00:00\t00:00:00\tOfficially Xerox, but 0:0:0:0:0:0 is more common\n00:00:01\tXerox\tXerox Corporation\n00:00:02\tXerox\tXerox Corporation\n00:00:03\tXerox\tXerox Corporation\n00:00:04\tXerox\tXerox Corporation\n00:00:05\tXerox\tXerox Corporation\n00:00:06\tXerox\tXerox Corporation\n00:00:07\tXerox\tXerox Corporation\n00:00:08\tXerox\tXerox Corporation\n00:00:09\tPowerpip\tpowerpipes?\n00:00:0A\tOmronTat\tOmron Tateisi Electronics Co.\n00:00:0B\tMatrix\tMatrix Corporation\n00:00:0C\tCisco\t\n00:00:0D\tFibronic\tFibronics Ltd.\n00:00:0E\tFujitsu\t\n00:00:0F\tNext\t\n00:00:10\tSytek\tSytek Inc.\n00:00:11\tNormerel\tNormerel Systemes\n00:00:12\tInformat\tInformation Technology Limited\n00:00:13\tCamex\t\n00:00:14\tNetronix\t\n00:00:15\tDatapoin\tDatapoint Corporation\n00:00:16\tDuPontPi\tDu Pont Pixel Systems .\n00:00:17\tOracle\t\n00:00:18\tWebsterC\tWebster Computer Corporation\n00:00:19\tAppliedD\tApplied Dynamics International\n00:00:1A\tAMD\t\n00:00:1B\tNovellNo\tNovell (now Eagle Technology)\n00:00:1C\tBellTech\tBell Technologies\n00:00:1D\tCabletro\tCabletron\n00:00:1E\tTelsistI\tTelsist Industria Electronica\n00:00:1F\tTelco\tTelco Systems, Inc.\n00:00:20\tDIAB\t\n00:00:21\tSC&C\t\n00:00:22\tVisualTe\tVisual Technology\n00:00:23\tAbbAutom\tABB Automation AB, Dept. Q\n00:00:24\tConnectA\tConnect As\n00:00:25\tRamtek\tRamtek Corp.\n00:00:26\tSha-Ken\tSHA-KEN CO., LTD.\n00:00:27\tJapanRad\tJapan Radio Company\n00:00:28\tProdigy\tProdigy Systems Corporation\n00:00:29\tImc\t\n00:00:2A\tTrw\t\n00:00:2B\tCrispAut\tCrisp Automation, Inc\n00:00:2C\tAutotote\tAutotote Limited\n00:00:2D\tChromati\tChromatics Inc\n00:00:2E\tSocieteE\tSociete Evira\n00:00:2F\tTimeplex\tTimeplex Inc.\n00:00:30\tVgLabora\tVg Laboratory Systems Ltd\n00:00:31\tQpsxComm\tQpsx Communications, Ltd.\n00:00:32\tMarconi\tMarconi plc\n00:00:33\tEganMach\tEgan Machinery Company\n00:00:34\tNetworkR\tNetwork Resources Corporation\n00:00:35\tSpectrag\tSpectragraphics Corporation\n00:00:36\tAtari\tAtari Corporation\n00:00:37\tOxfordMe\tOxford Metrics Ltd\n00:00:38\tCssLabs\tCss Labs\n00:00:39\tToshiba\tToshiba Corporation\n00:00:3A\tChyron\tChyron Corporation\n00:00:3B\tIControl\ti Controls, Inc.\n00:00:3C\tAuspex\t\n00:00:3D\tUnisys\t\n00:00:3E\tSimpact\t\n00:00:3F\tSyntrex\t\n00:00:40\tApplicon\tApplicon, Inc.\n00:00:41\tIce\tIce Corporation\n00:00:42\tMetierMa\tMetier Management Systems Ltd.\n00:00:43\tMicroTec\tMicro Technology\n00:00:44\tCastelle\t\n00:00:45\tFordAero\tFORD AEROSPACE & COMM. CORP.\n00:00:46\tOlivetti\tOlivetti North America\n00:00:47\tNicoletI\tNicolet Instruments Corp.\n00:00:48\tSeikoEps\tSeiko Epson Corporation\n00:00:49\tApricot\tApricot Ltd.\n00:00:4A\tAdcCoden\tAdc Codenoll Technology Corp.\n00:00:4B\tIclDataO\tIcl Data Oy\n00:00:4C\tNec\t\n00:00:4D\tDci\tDci Corporation\n00:00:4E\tAmpex\tAmpex Corporation\n00:00:4F\tLogicraf\tLogicraft 386-Ware P.C. Emulator\n00:00:50\tRadisys\tRadisys Corporation\n00:00:51\tHobElect\tHob Electronic Gmbh & Co. KG\n00:00:52\tIntrusio\tIntrusion.com, Inc.\n00:00:53\tCompucor\tCompucorp\n00:00:54\tSchneide\tSchneider Electric\n00:00:55\tAT&T\t\n00:00:56\tDrBStruc\tDr. B. Struck\n00:00:57\tScitex\tScitex Corporation Ltd.\n00:00:58\tRacoreCo\tRacore Computer Products Inc\n00:00:59\tHellige\tHellige GMBH\n00:00:5A\tSkSchnei\tSK\n00:00:5B\tEltec\t\n00:00:5C\tTelemati\tTelematics International Inc.\n00:00:5D\tCsTeleco\tCs Telecom\n00:00:5E\tIcannIan\tICANN, IANA Department\n00:00:5F\tSumitomo\t\n00:00:60\tKontronE\tKontron Elektronik Gmbh\n00:00:61\tGatewayC\tGateway Communications\n00:00:62\tBullHnIn\tBull Hn Information Systems\n00:00:63\tBarcoCon\tBarco Control Rooms Gmbh\n00:00:64\tYokogawa\tYokogawa Digital Computer Corp\n00:00:65\tNetworkG\tNetwork General\n00:00:66\tTalaris\t\n00:00:67\tSoft*Rit\tSOFT * RITE, INC.\n00:00:68\tRosemoun\tRosemount Controls\n00:00:69\tConcordC\tConcord Communications Inc\n00:00:6A\tComputer\tComputer Consoles Inc.\n00:00:6B\tMIPS\t\n00:00:6C\tPrivate\t\n00:00:6D\tCase\t\n00:00:6E\tArtisoft\tArtisoft, Inc.\n00:00:6F\tMadgeNet\tMadge Networks Ltd.\n00:00:70\tHcl\tHcl Limited\n00:00:71\tAdra\tAdra Systems Inc.\n00:00:72\tMiniware\tMiniware Technology\n00:00:73\tSiecor\tSiecor Corporation\n00:00:74\tRicoh\tRicoh Company Ltd.\n00:00:75\tBellNort\tBell Northern Research (BNR)\n00:00:76\tAbekasVi\tAbekas Video System\n00:00:77\tInterpha\tInterphase\n00:00:78\tLabtamAu\tLabtam Australia\n00:00:79\tNetworth\tNetworth Incorporated\n00:00:7A\tDanaComp\tDana Computer Inc.\n00:00:7B\tResearch\tResearch Machines\n00:00:7C\tAmpere\tAmpere Incorporated\n00:00:7D\tOracle\tOracle Corporation\n00:00:7E\tClustrix\tClustrix Corporation\n00:00:7F\tLinotype\tLinotype-Hell AG\n00:00:80\tCrayComm\tCray Communications (formerly Dowty Network Services)\n00:00:81\tBayNetwo\tBay Networks\n00:00:82\tLectraSy\tLectra Systemes Sa\n00:00:83\tTadpoleT\tTadpole Technology  [had Optical Data Systems which is wrong according to both]\n00:00:84\tSupernet\t\n00:00:85\tCanon\tCanon Inc.\n00:00:86\tMegahert\tMegahertz Corporation\n00:00:87\tHitachi\t\n00:00:88\tBrocadeC\tBrocade Communications Systems, Inc.\n00:00:89\tCaymanSy\tCayman Systems\n00:00:8A\tDatahous\tDatahouse Information Systems\n00:00:8B\tInfotron\t\n00:00:8C\tAlloyCom\tAlloy Computer Products (Australia) Pty Ltd\n00:00:8D\tCryptek\tCryptek Inc.\n00:00:8E\tSolbourn\tSolbourne Computer, Inc.\n00:00:8F\tRaytheon\t\n00:00:90\tMicrocom\t\n00:00:91\tAnritsu\tAnritsu Corporation\n00:00:92\tCogentDa\tCogent Data Technologies\n00:00:93\tProteon\t\n00:00:94\tAsanteMa\tAsante\n00:00:95\tSony/Tek\tSony/Tektronix\n00:00:96\tMarconiE\tMarconi Electronics Ltd.\n00:00:97\tDellEmc\tDell EMC\n00:00:98\tCrossCom\tCross Com\n00:00:99\tMemorexT\tMemorex Telex Corporations\n00:00:9A\tRcComput\tRC COMPUTER A/S\n00:00:9B\tInformat\tInformation International, Inc\n00:00:9C\tRolmMil-\tROLM MIL-SPEC COMPUTERS\n00:00:9D\tLocusCom\tLocus Computing Corporation\n00:00:9E\tMarliSA\tMarli S.A.\n00:00:9F\tAmerista\tAmeristar Technology\n00:00:A0\tSanyoEle\tSanyo Electronics\n00:00:A1\tMarquett\tMarquette Electric Co.\n00:00:A2\tBayNetwo\tBay Networks\n00:00:A3\tNAT\t\n00:00:A4\tAcorn\t\n00:00:A5\tTattileS\tTattile SRL\n00:00:A6\tNetworkG\tNetwork General (internal assignment, not for products)\n00:00:A7\tNCD\t\n00:00:A8\tStratusC\tStratus Computer, Inc.\n00:00:A9\tNetSys\t\n00:00:AA\tXeroxXer\tXerox\n00:00:AB\tLogicMod\tLogic Modeling Corporation\n00:00:AC\tConwareN\tConware Netzpartner\n00:00:AD\tBrukerIn\tBruker Instruments Inc.\n00:00:AE\tDassault\tDassault Automatismes et Telecommunications\n00:00:AF\tCanberra\tCanberra Industries, Inc.\n00:00:B0\tRndRadNe\tRND (RAD Network Devices)\n00:00:B1\tAlphaMic\tAlpha Microsystems Inc.\n00:00:B2\tTelevide\tTelevideo Systems, Inc.\n00:00:B3\tCimlinc\t\n00:00:B4\tEdimax\t\n00:00:B5\tDatabili\tDatability\n00:00:B6\tMicro-Ma\tMicro-matic Research\n00:00:B7\tDoveFast\tDove\n00:00:B8\tSeikosha\tSeikosha Co., Ltd.\n00:00:B9\tMcdonnel\tMcdonnell Douglas Computer Sys\n00:00:BA\tSiig\tSiig, Inc.\n00:00:BB\tTri-Data\tTRI-DATA Systems Inc.\n00:00:BC\tRockwell\tRockwell Automation\n00:00:BD\tMitsubis\tMitsubishi Cable Industries, Ltd. / Ryosei Systems\n00:00:BE\tNtiGroup\tThe Nti Group\n00:00:BF\tSymmetri\tSymmetric Computer Systems\n00:00:C0\tWesternD\tWestern Digital now SMC (Std. Microsystems Corp.)\n00:00:C1\tMadge\tMadge Ltd.\n00:00:C2\tInformat\tInformation Presentation Tech.\n00:00:C3\tHarris\tHarris Corporation\n00:00:C4\tWatersDi\tWaters Div. Of Millipore\n00:00:C5\tArrisGro\tARRIS Group, Inc.\n00:00:C6\tHpIntell\tHP Intelligent Networks Operation (formerly Eon Systems)\n00:00:C7\tArix\tArix Corporation\n00:00:C8\tAltos\t\n00:00:C9\tEmulexTe\tEmulex\n00:00:CA\tArrisGro\tARRIS Group, Inc.\n00:00:CB\tCompu-Sh\tCOMPU-SHACK ELECTRONIC GMBH\n00:00:CC\tDensan\t\n00:00:CD\tAlliedTe\tAllied Telesis Labs Ltd\n00:00:CE\tMegadata\tMegadata Corp.\n00:00:CF\tHayesMic\tHayes Microcomputer Products\n00:00:D0\tDevelcon\tDevelcon Electronics, Ltd.\n00:00:D1\tAdaptec\t\n00:00:D2\tSbe\t\n00:00:D3\tWangLabs\tWang Labs\n00:00:D4\tPuredata\t\n00:00:D5\tMicrogno\tMicrognosis International\n00:00:D6\tPunchLin\tPunch Line Holding\n00:00:D7\tDartmout\tDartmouth College (NED Router)\n00:00:D8\tOldNovel\told Novell NE1000's (before about 1987?) (also 3Com)\n00:00:D9\tNipponTe\tNIPPON TELEGRAPH & TELEPHONE\n00:00:DA\tAtex\t\n00:00:DB\tBritishT\tBritish Telecommunications plc\n00:00:DC\tHayesMic\tHayes Microcomputer Products\n00:00:DD\tTcl\tTcl Incorporated\n00:00:DE\tCetia\t\n00:00:DF\tBellHowe\tBELL & HOWELL PUB SYS DIV\n00:00:E0\tQuadram\tQuadram Corp.\n00:00:E1\tGrid\tGrid Systems\n00:00:E2\tAcerCoun\tAcer Counterpoint\n00:00:E3\tIntegrat\tIntegrated Micro Products Ltd\n00:00:E4\tIn2Group\tIN2 GROUPE INTERTECHNIQUE\n00:00:E5\tSigmex\tSigmex Ltd.\n00:00:E6\tAptorPro\tAptor Produits De Comm Indust\n00:00:E7\tStarGate\tStar Gate Technologies\n00:00:E8\tAcctonTe\tAccton Technology Corporation\n00:00:E9\tIsicad\t\n00:00:EA\tUpnod\tUpnod Ab\n00:00:EB\tMatsushi\tMatsushita Comm. Ind. Co. Ltd.\n00:00:EC\tMicropro\tMicroprocess\n00:00:ED\tApril\t\n00:00:EE\tNetworkD\tNetwork Designers Limited [also KNX Ltd, a former division]\n00:00:EF\tKti\t\n00:00:F0\tSamsung\t\n00:00:F1\tMagnaCom\tMagna Computer Corporation\n00:00:F2\tSpiderCo\tSpider Communications\n00:00:F3\tGandalfD\tGandalf Data Ltd. - Canada\n00:00:F4\tAlliedTe\tAllied Telesis, Inc.\n00:00:F5\tDiamondS\tDiamond Sales Limited\n00:00:F6\tAppliedM\tApplied Microsystems Corp.\n00:00:F7\tYouthKee\tYouth Keep Enterprise Co Ltd\n00:00:F8\tDec\t\n00:00:F9\tQuotron\tQuotron Systems Inc.\n00:00:FA\tMicrosag\tMicrosage Computer Systems Inc\n00:00:FB\tRechnerZ\tRechner zur Kommunikation\n00:00:FC\tMeiko\t\n00:00:FD\tHighLeve\tHigh Level Hardware (Orion, UK)\n00:00:FE\tAnnapoli\tAnnapolis Micro Systems, Inc.\n00:00:FF\tCamtecEl\tCamtec Electronics (UK) Ltd.\n00:01:00\tEquipTra\tEQUIP'TRANS\n00:01:01\tPrivate\t\n00:01:02\t3com\t\n00:01:03\t3com\t\n00:01:04\tDvico\tDVICO Co., Ltd.\n00:01:05\tBeckhoff\tBeckhoff Automation GmbH\n00:01:06\tTewsDate\tTews Datentechnik GmbH\n00:01:07\tLeiser\tLeiser GmbH\n00:01:08\tAvlabTec\tAVLAB Technology, Inc.\n00:01:09\tNaganoJa\tNagano Japan Radio Co., Ltd.\n00:01:0A\tCisTechn\tCis Technology Inc.\n00:01:0B\tSpaceCyb\tSpace CyberLink, Inc.\n00:01:0C\tSystemTa\tSystem Talks Inc.\n00:01:0D\tTeledyne\tTeledyne DALSA Inc.\n00:01:0E\tBri-Link\tBri-Link Technologies Co., Ltd\n00:01:0F\tBrocadeC\tBrocade Communications Systems, Inc.\n00:01:10\tGothamNe\tGotham Networks\n00:01:11\tIdigm\tiDigm Inc.\n00:01:12\tSharkMul\tShark Multimedia Inc.\n00:01:13\tOlympus\tOlympus Corporation\n00:01:14\tKandaTsu\tKanda Tsushin Kogyo Co., Ltd.\n00:01:15\tExtratec\tExtratech Corporation\n00:01:16\tNetspect\tNetspect Technologies, Inc.\n00:01:17\tCanal+\tCanal +\n00:01:18\tEzDigita\tEZ Digital Co., Ltd.\n00:01:19\tRtunetAu\tRTUnet (Australia)\n00:01:1A\tHoffmann\tHoffmann und Burmeister GbR\n00:01:1B\tUnizoneT\tUnizone Technologies, Inc.\n00:01:1C\tUniversa\tUniversal Talkware Corporation\n00:01:1D\tCentilli\tCentillium Communications\n00:01:1E\tPrecidia\tPrecidia Technologies, Inc.\n00:01:1F\tRcNetwor\tRC Networks, Inc.\n00:01:20\tOscilloq\tOscilloquartz S.A.\n00:01:21\tWatchgua\tWatchGuard Technologies, Inc.\n00:01:22\tTrendCom\tTrend Communications, Ltd.\n00:01:23\tSchneide\tSchneider Electric Japan Holdings Ltd.\n00:01:24\tAcer\tAcer Incorporated\n00:01:25\tYaesuMus\tYaesu Musen Co., Ltd.\n00:01:26\tPacLabs\tPAC Labs\n00:01:27\tOpenNetw\tOPEN Networks Pty Ltd\n00:01:28\tEnjoyweb\tEnjoyWeb, Inc.\n00:01:29\tDfi\tDFI Inc.\n00:01:2A\tTelemati\tTelematica Sistems Inteligente\n00:01:2B\tTelenet\tTELENET Co., Ltd.\n00:01:2C\tAravoxTe\tAravox Technologies, Inc.\n00:01:2D\tKomodoTe\tKomodo Technology\n00:01:2E\tPcPartne\tPC Partner Ltd.\n00:01:2F\tTwinhead\tTwinhead International Corp\n00:01:30\tExtremeN\tExtreme Networks, Inc.\n00:01:31\tBoschSec\tBosch Security Systems, Inc.\n00:01:32\tDranetz-\tDranetz - BMI\n00:01:33\tKyowaEle\tKYOWA Electronic Instruments C\n00:01:34\tSelectro\tSelectron Systems AG\n00:01:35\tKdc\tKDC Corp.\n00:01:36\tCybertan\tCyberTAN Technology Inc.\n00:01:37\tItFarm\tIT Farm Corporation\n00:01:38\tXaviTech\tXAVi Technologies Corp.\n00:01:39\tPointMul\tPoint Multimedia Systems\n00:01:3A\tShelcadC\tShelcad Communications, Ltd.\n00:01:3B\tBna\tBna Systems\n00:01:3C\tTiw\tTiw Systems\n00:01:3D\tRiscstat\tRiscStation Ltd.\n00:01:3E\tAscomTat\tAscom Tateco AB\n00:01:3F\tNeighbor\tNeighbor World Co., Ltd.\n00:01:40\tSendtek\tSendtek Corporation\n00:01:41\tCablePri\tCable Print\n00:01:42\tCisco\tCisco Systems, Inc\n00:01:43\tIeee802\t\n00:01:44\tDellEmc\tDell EMC\n00:01:45\tWinsyste\tWinsystems, Inc.\n00:01:46\tTescoCon\tTesco Controls, Inc.\n00:01:47\tZhoneTec\tZhone Technologies\n00:01:48\tX-Traweb\tX-traWeb Inc.\n00:01:49\tTdt\tTdt Ag\n00:01:4A\tSony\tSony Corporation\n00:01:4B\tEnnovate\tEnnovate Networks, Inc.\n00:01:4C\tBerkeley\tBerkeley Process Control\n00:01:4D\tShinKinE\tShin Kin Enterprises Co., Ltd\n00:01:4E\tWinEnter\tWIN Enterprises, Inc.\n00:01:4F\tAdtran\tAdtran Inc\n00:01:50\tGilatCom\tGilat Communications, Ltd.\n00:01:51\tEnsemble\tEnsemble Communications\n00:01:52\tChromate\tChromatek Inc.\n00:01:53\tArchtekT\tArchtek Telecom Corporation\n00:01:54\tG3m\tG3M Corporation\n00:01:55\tPromiseT\tPromise Technology, Inc.\n00:01:56\tFirewire\tFirewiredirect.Com, Inc.\n00:01:57\tSyswave\tSyswave Co., Ltd\n00:01:58\tElectroI\tElectro Industries/Gauge Tech\n00:01:59\tS1\tS1 Corporation\n00:01:5A\tDigitalV\tDigital Video Broadcasting\n00:01:5B\tItaltelS\tITALTEL S.p.A/RF-UP-I\n00:01:5C\tCadant\tCadant Inc.\n00:01:5D\tOracle\tOracle Corporation\n00:01:5E\tBestTech\tBest Technology Co., Ltd.\n00:01:5F\tDigitalD\tDIGITAL DESIGN GmbH\n00:01:60\tElmex\tELMEX Co., LTD.\n00:01:61\tMetaMach\tMeta Machine Technology\n00:01:62\tCygnetTe\tCygnet Technologies, Inc.\n00:01:63\tNdcNatio\tNDC (National Datacomm Corporation)\n00:01:64\tCisco\tCisco Systems, Inc\n00:01:65\tAirswitc\tAirSwitch Corporation\n00:01:66\tTcGroup\tTC GROUP A/S\n00:01:67\tHiokiEE\tHioki E.E. Corporation\n00:01:68\tVitana\tVitana Corporation\n00:01:69\tCelestix\tCelestix Networks Pte Ltd.\n00:01:6A\tAlitec\t\n00:01:6B\tLightchi\tLightChip, Inc.\n00:01:6C\tFoxconn\t\n00:01:6D\tCarrierc\tCarrierComm Inc.\n00:01:6E\tConklin\tConklin Corporation\n00:01:6F\tInkel\tInkel Corp.\n00:01:70\tEseEmbed\tESE Embedded System Engineer'g\n00:01:71\tAlliedDa\tAllied Data Technologies\n00:01:72\tTechnola\tTechnoLand Co., LTD.\n00:01:73\tAmcc\t\n00:01:74\tCyberopt\tCyberOptics Corporation\n00:01:75\tRadiantC\tRadiant Communications Corp.\n00:01:76\tOrientSi\tOrient Silver Enterprises\n00:01:77\tEdsl\t\n00:01:78\tMargi\tMARGI Systems, Inc.\n00:01:79\tWireless\tWireless Technology, Inc.\n00:01:7A\tChengduM\tChengdu Maipu Electric Industrial Co., Ltd.\n00:01:7B\tHeidelbe\tHeidelberger Druckmaschinen AG\n00:01:7C\tAg-E\tAG-E GmbH\n00:01:7D\tThermoqu\tThermoQuest\n00:01:7E\tAdtekSys\tADTEK System Science Co., Ltd.\n00:01:7F\tExperien\tExperience Music Project\n00:01:80\tAopen\tAOpen, Inc.\n00:01:81\tNortelNe\tNortel Networks\n00:01:82\tDicaTech\tDica Technologies Ag\n00:01:83\tAniteTel\tAnite Telecoms\n00:01:84\tSiebMeye\tSIEB & MEYER AG\n00:01:85\tHitachiA\tHitachi Aloka Medical, Ltd.\n00:01:86\tUweDisch\tUwe Disch\n00:01:87\tI2se\tI2SE GmbH\n00:01:88\tLxcoTech\tLXCO Technologies ag\n00:01:89\tRefracti\tRefraction Technology, Inc.\n00:01:8A\tRoiCompu\tRoi Computer Ag\n00:01:8B\tNetlinks\tNetLinks Co., Ltd.\n00:01:8C\tMegaVisi\tMega Vision\n00:01:8D\tAudesiTe\tAudeSi Technologies\n00:01:8E\tLogitec\tLogitec Corporation\n00:01:8F\tKenetec\tKenetec, Inc.\n00:01:90\tSmk-M\t\n00:01:91\tSyredDat\tSYRED Data Systems\n00:01:92\tTexasDig\tTexas Digital Systems\n00:01:93\tHanbyulT\tHanbyul Telecom Co., Ltd.\n00:01:94\tCapitalE\tCapital Equipment Corporation\n00:01:95\tSenaTech\tSena Technologies, Inc.\n00:01:96\tCisco\tCisco Systems, Inc\n00:01:97\tCisco\tCisco Systems, Inc\n00:01:98\tDarimVis\tDarim Vision\n00:01:99\tHeiseiEl\tHeiSei Electronics\n00:01:9A\tLeunig\tLEUNIG GmbH\n00:01:9B\tKyotoMic\tKyoto Microcomputer Co., Ltd.\n00:01:9C\tJdsUniph\tJDS Uniphase Inc.\n00:01:9D\tE-Contro\tE-Control Systems, Inc.\n00:01:9E\tEssTechn\tESS Technology, Inc.\n00:01:9F\tReadynet\t\n00:01:A0\tInfinili\tInfinilink Corporation\n00:01:A1\tMag-Tek\tMag-Tek, Inc.\n00:01:A2\tLogical\tLogical Co., Ltd.\n00:01:A3\tGenesysL\tGenesys Logic, Inc.\n00:01:A4\tMicrolin\tMicrolink Corporation\n00:01:A5\tNextcomm\tNextcomm, Inc.\n00:01:A6\tScientif\tScientific-Atlanta Arcodan A/S\n00:01:A7\tUnexTech\tUnex Technology Corporation\n00:01:A8\tWelltech\tWelltech Computer Co., Ltd.\n00:01:A9\tBmw\tBmw Ag\n00:01:AA\tAirspanC\tAirspan Communications, Ltd.\n00:01:AB\tMainStre\tMain Street Networks\n00:01:AC\tSitaraNe\tSitara Networks, Inc.\n00:01:AD\tCoachMas\tCoach Master International  d.b.a. CMI Worldwide, Inc.\n00:01:AE\tTrexEnte\tTrex Enterprises\n00:01:AF\tArtesynE\tArtesyn Embedded Technologies\n00:01:B0\tFulltekT\tFulltek Technology Co., Ltd.\n00:01:B1\tGeneralB\tGeneral Bandwidth\n00:01:B2\tDigitalP\tDigital Processing Systems, Inc.\n00:01:B3\tPrecisio\tPrecision Electronic Manufacturing\n00:01:B4\tWayport\tWayport, Inc.\n00:01:B5\tTurinNet\tTurin Networks, Inc.\n00:01:B6\tSaejinT&\tSAEJIN T&M Co., Ltd.\n00:01:B7\tCentos\tCentos, Inc.\n00:01:B8\tNetsensi\tNetsensity, Inc.\n00:01:B9\tSkfUK\tSKF (U.K.) Limited\n00:01:BA\tIc-Net\tIC-Net, Inc.\n00:01:BB\tFrequent\tFrequentis\n00:01:BC\tBrains\tBrains Corporation\n00:01:BD\tPeterson\tPeterson Electro-Musical Products, Inc.\n00:01:BE\tGigalink\tGigalink Co., Ltd.\n00:01:BF\tTeleforc\tTeleforce Co., Ltd.\n00:01:C0\tCompulab\tCompuLab, Ltd.\n00:01:C1\tVitesseS\tVitesse Semiconductor Corporation\n00:01:C2\tArkResea\tARK Research Corp.\n00:01:C3\tAcromag\tAcromag, Inc.\n00:01:C4\tNeowave\tNeoWave, Inc.\n00:01:C5\tSimplerN\tSimpler Networks\n00:01:C6\tQuarryTe\tQuarry Technologies\n00:01:C7\tCisco\tCisco Systems, Inc\n00:01:C8\tThomasCo\tThomas Conrad Corp.\n00:01:C9\tCisco\tCisco Systems, Inc\n00:01:CA\tGeocastN\tGeocast Network Systems, Inc.\n00:01:CB\tEvr\t\n00:01:CC\tJapanTot\tJapan Total Design Communication Co., Ltd.\n00:01:CD\tArtem\t\n00:01:CE\tCustomMi\tCustom Micro Products, Ltd.\n00:01:CF\tAlphaDat\tAlpha Data Parallel Systems, Ltd.\n00:01:D0\tVitalpoi\tVitalPoint, Inc.\n00:01:D1\tConetCom\tCoNet Communications, Inc.\n00:01:D2\tInxtron\tinXtron, Inc.\n00:01:D3\tPaxcomm\tPAXCOMM, Inc.\n00:01:D4\tLeisureT\tLeisure Time, Inc.\n00:01:D5\tHaedongI\tHAEDONG INFO & COMM CO., LTD\n00:01:D6\tManrolan\tmanroland AG\n00:01:D7\tF5Networ\tF5 Networks, Inc.\n00:01:D8\tTeltroni\tTeltronics, Inc.\n00:01:D9\tSigma\tSigma, Inc.\n00:01:DA\tWincomm\tWINCOMM Corporation\n00:01:DB\tFreecomT\tFreecom Technologies GmbH\n00:01:DC\tActivete\tActivetelco\n00:01:DD\tAvailNet\tAvail Networks\n00:01:DE\tTrango\tTrango Systems, Inc.\n00:01:DF\tIsdnComm\tISDN Communications, Ltd.\n00:01:E0\tFast\tFast Systems, Inc.\n00:01:E1\tKinpoEle\tKinpo Electronics, Inc.\n00:01:E2\tAndoElec\tAndo Electric Corporation\n00:01:E3\tSiemens\tSiemens AG\n00:01:E4\tSitera\tSitera, Inc.\n00:01:E5\tSupernet\tSupernet, Inc.\n00:01:E6\tHewlettP\tHewlett Packard\n00:01:E7\tHewlettP\tHewlett Packard\n00:01:E8\tForce10N\tForce10 Networks, Inc.\n00:01:E9\tLittonMa\tLitton Marine Systems B.V.\n00:01:EA\tCirilium\tCirilium Corp.\n00:01:EB\tC-Com\tC-COM Corporation\n00:01:EC\tEricsson\tEricsson Group\n00:01:ED\tSeta\tSETA Corp.\n00:01:EE\tComtrolE\tComtrol Europe, Ltd.\n00:01:EF\tCamtelTe\tCamtel Technology Corp.\n00:01:F0\tTridium\tTridium, Inc.\n00:01:F1\tInnovati\tInnovative Concepts, Inc.\n00:01:F2\tMarkOfUn\tMark of the Unicorn, Inc.\n00:01:F3\tQps\tQPS, Inc.\n00:01:F4\tEnterasy\tEnterasys\n00:01:F5\tErimSA\tErim S.A.\n00:01:F6\tAssociat\tAssociation of Musical Electronics Industry\n00:01:F7\tImageDis\tImage Display Systems, Inc.\n00:01:F8\tTexioTec\tTexio Technology Corporation\n00:01:F9\tTeraglob\tTeraGlobal Communications Corp.\n00:01:FA\tHoroscas\t\n00:01:FB\tDotopTec\tDoTop Technology, Inc.\n00:01:FC\tKeyence\tKeyence Corporation\n00:01:FD\tDigitalV\tDigital Voice Systems, Inc.\n00:01:FE\tDigitalE\tDigital Equipment Corporation\n00:01:FF\tDataDire\tData Direct Networks, Inc.\n00:02:00\tNetSys\tNet & Sys Co., Ltd.\n00:02:01\tIfmElect\tIFM Electronic gmbh\n00:02:02\tAminoCom\tAmino Communications, Ltd.\n00:02:03\tWoonsang\tWoonsang Telecom, Inc.\n00:02:04\tBodmannI\tBodmann Industries Elektronik GmbH\n00:02:05\tHitachiD\tHitachi Denshi, Ltd.\n00:02:06\tTelitalR\tTelital R&D Denmark A/S\n00:02:07\tVisiongl\tVisionGlobal Network Corp.\n00:02:08\tUnifyNet\tUnify Networks, Inc.\n00:02:09\tShenzhen\tShenzhen SED Information Technology Co., Ltd.\n00:02:0A\tGefran\tGefran Spa\n00:02:0B\tNativeNe\tNative Networks, Inc.\n00:02:0C\tMetro-Op\tMetro-Optix\n00:02:0D\tMicronpc\tMicronpc.com\n00:02:0E\tEciTelec\tECI Telecom Ltd.\n00:02:0F\tAatr\t\n00:02:10\tFenecom\t\n00:02:11\tNatureWo\tNature Worldwide Technology Corp.\n00:02:12\tSierraco\tSierraCom\n00:02:13\tSDEL\tS.D.E.L.\n00:02:14\tDtvro\t\n00:02:15\tCotasCom\tCotas Computer Technology A/B\n00:02:16\tEsiExten\tESI (Extended Systems, Inc)\n00:02:17\tCisco\tCisco Systems, Inc\n00:02:18\tAdvanced\tAdvanced Scientific Corp\n00:02:19\tParalonT\tParalon Technologies\n00:02:1A\tZumaNetw\tZuma Networks\n00:02:1B\tKollmorg\tKollmorgen-Servotronix\n00:02:1C\tNetworkE\tNetwork Elements, Inc.\n00:02:1D\tDataGene\tData General Communication Ltd.\n00:02:1E\tSimtelSR\tSimtel S.R.L.\n00:02:1F\tAculab\tAculab PLC\n00:02:20\tCanonFin\tCanon Finetech Inc.\n00:02:21\tDspAppli\tDSP Application, Ltd.\n00:02:22\tChromisy\tChromisys, Inc.\n00:02:23\tClicktv\t\n00:02:24\tC-Cor\t\n00:02:25\tOneStop\tOne Stop Systems\n00:02:26\tXesystem\tXESystems, Inc.\n00:02:27\tEsdElect\tESD Electronic System Design GmbH\n00:02:28\tNecsom\tNecsom, Ltd.\n00:02:29\tAdtec\tAdtec Corporation\n00:02:2A\tAsoundEl\tAsound Electronic\n00:02:2B\tSaxa\tSAXA, Inc.\n00:02:2C\tAbbBomem\tABB Bomem, Inc.\n00:02:2D\tAgere\tAgere Systems\n00:02:2E\tTeacR&D\tTEAC Corp. R& D\n00:02:2F\tP-Cube\tP-Cube, Ltd.\n00:02:30\tIntersof\tIntersoft Electronics\n00:02:31\tIngersol\tIngersoll-Rand\n00:02:32\tAvision\tAvision, Inc.\n00:02:33\tMantraCo\tMantra Communications, Inc.\n00:02:34\tImperial\tImperial Technology, Inc.\n00:02:35\tParagonN\tParagon Networks International\n00:02:36\tInit\tINIT GmbH\n00:02:37\tCosmoRes\tCosmo Research Corp.\n00:02:38\tSeromeTe\tSerome Technology, Inc.\n00:02:39\tVisicom\t\n00:02:3A\tZskStick\tZSK Stickmaschinen GmbH\n00:02:3B\tEricsson\t\n00:02:3C\tCreative\tCreative Technology, Ltd.\n00:02:3D\tCisco\tCisco Systems, Inc\n00:02:3E\tSeltaTel\tSelta Telematica S.p.a\n00:02:3F\tCompalEl\tCompal Electronics INC.\n00:02:40\tSeedek\tSeedek Co., Ltd.\n00:02:41\tAmerCom\tAmer.com\n00:02:42\tVideofra\tVideoframe Systems\n00:02:43\tRaysis\tRaysis Co., Ltd.\n00:02:44\tSurecomT\tSURECOM Technology Co.\n00:02:45\tLampus\tLampus Co, Ltd.\n00:02:46\tAll-WinT\tAll-Win Tech Co., Ltd.\n00:02:47\tGreatDra\tGreat Dragon Information Technology (Group) Co., Ltd.\n00:02:48\tPilz\tPilz GmbH & Co.\n00:02:49\tAvivInfo\tAviv Infocom Co, Ltd.\n00:02:4A\tCisco\tCisco Systems, Inc\n00:02:4B\tCisco\tCisco Systems, Inc\n00:02:4C\tSibyte\tSiByte, Inc.\n00:02:4D\tMannesma\tMannesman Dematic Colby Pty. Ltd.\n00:02:4E\tDatacard\tDatacard Group\n00:02:4F\tIpmDatac\tIPM Datacom S.R.L.\n00:02:50\tGeyserNe\tGeyser Networks, Inc.\n00:02:51\tSomaNetw\tSoma Networks, Inc.\n00:02:52\tCarrier\tCarrier Corporation\n00:02:53\tTelevide\tTelevideo, Inc.\n00:02:54\tWorldgat\tWorldGate\n00:02:55\tIbm\tIBM Corp\n00:02:56\tAlphaPro\tAlpha Processor, Inc.\n00:02:57\tMicrocom\tMicrocom Corp.\n00:02:58\tFlyingPa\tFlying Packets Communications\n00:02:59\tTsannKue\tTsann Kuen China (Shanghai)Enterprise Co., Ltd. IT Group\n00:02:5A\tCatenaNe\tCatena Networks\n00:02:5B\tCambridg\tCambridge Silicon Radio\n00:02:5C\tSciKunsh\tSCI Systems (Kunshan) Co., Ltd.\n00:02:5D\tCalixNet\tCalix Networks\n00:02:5E\tHighTech\tHigh Technology Ltd\n00:02:5F\tNortelNe\tNortel Networks\n00:02:60\tAccordio\tAccordion Networks, Inc.\n00:02:61\tTilgin\tTilgin AB\n00:02:62\tSoyoGrou\tSoyo Group Soyo Com Tech Co., Ltd\n00:02:63\tUpsManuf\tUPS Manufacturing SRL\n00:02:64\tAudioram\tAudioRamp.com\n00:02:65\tVirditec\tVirditech Co. Ltd.\n00:02:66\tThermalo\tThermalogic Corporation\n00:02:67\tNodeRunn\tNode Runner, Inc.\n00:02:68\tHarrisGo\tHarris Government Communications\n00:02:69\tNadatel\tNadatel Co., Ltd\n00:02:6A\tCocessTe\tCocess Telecom Co., Ltd.\n00:02:6B\tBcmCompu\tBCM Computers Co., Ltd.\n00:02:6C\tPhilipsC\tPhilips CFT\n00:02:6D\tAdeptTel\tAdept Telecom\n00:02:6E\tNegenAcc\tNeGeN Access, Inc.\n00:02:6F\tSenaoInt\tSenao International Co., Ltd.\n00:02:70\tCrewave\tCrewave Co., Ltd.\n00:02:71\tZhoneTec\tZhone Technologies\n00:02:72\tCc&CTech\tCC&C Technologies, Inc.\n00:02:73\tCoriolis\tCoriolis Networks\n00:02:74\tTommyTec\tTommy Technologies Corp.\n00:02:75\tSmartTec\tSMART Technologies, Inc.\n00:02:76\tPrimaxEl\tPrimax Electronics Ltd.\n00:02:77\tCashSyst\tCash Systemes Industrie\n00:02:78\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\n00:02:79\tControlA\tControl Applications, Ltd.\n00:02:7A\tIoiTechn\tIOI Technology Corporation\n00:02:7B\tAmplifyN\tAmplify Net, Inc.\n00:02:7C\tTrilithi\tTrilithic, Inc.\n00:02:7D\tCisco\tCisco Systems, Inc\n00:02:7E\tCisco\tCisco Systems, Inc\n00:02:7F\tAsk-Tech\task-technologies.com\n00:02:80\tMuNet\tMu Net, Inc.\n00:02:81\tMadge\tMadge Ltd.\n00:02:82\tViaclix\tViaClix, Inc.\n00:02:83\tSpectrum\tSpectrum Controls, Inc.\n00:02:84\tUkGridSo\tUK Grid Solutions Limited\n00:02:85\tRiversto\tRiverstone Networks\n00:02:86\tOccamNet\tOccam Networks\n00:02:87\tAdapcom\t\n00:02:88\tGlobalVi\tGlobal Village (PCcard in Mac portable)\n00:02:89\tDneTechn\tDNE Technologies\n00:02:8A\tAmbitMic\tAmbit Microsystems Corporation\n00:02:8B\tVdslOy\tVDSL Systems OY\n00:02:8C\tMicrel-S\tMicrel-Synergy Semiconductor\n00:02:8D\tMovitaTe\tMovita Technologies, Inc.\n00:02:8E\tRapid5Ne\tRapid 5 Networks, Inc.\n00:02:8F\tGlobetek\tGlobetek, Inc.\n00:02:90\tWoorigis\tWoorigisool, Inc.\n00:02:91\tOpenNetw\tOpen Network Co., Ltd.\n00:02:92\tLogicInn\tLogic Innovations, Inc.\n00:02:93\tSolidDat\tSolid Data Systems\n00:02:94\tTokyoSok\tTokyo Sokushin Co., Ltd.\n00:02:95\tIpAccess\tIP.Access Limited\n00:02:96\tLectron\tLectron Co,. Ltd.\n00:02:97\tC-CorNet\tC-COR.net\n00:02:98\tBroadfra\tBroadframe Corporation\n00:02:99\tApex\tApex, Inc.\n00:02:9A\tStorageA\tStorage Apps\n00:02:9B\tKreatelC\tKreatel Communications AB\n00:02:9C\t3com\t\n00:02:9D\tMerix\tMerix Corp.\n00:02:9E\tInformat\tInformation Equipment Co., Ltd.\n00:02:9F\tL-3Commu\tL-3 Communication Aviation Recorders\n00:02:A0\tFlatstac\tFlatstack Ltd.\n00:02:A1\tWorldWid\tWorld Wide Packets\n00:02:A2\tHilscher\tHilscher GmbH\n00:02:A3\tAbbSwitz\tABB Switzerland Ltd, Power Systems\n00:02:A4\tAddpacTe\tAddPac Technology Co., Ltd.\n00:02:A5\tHewlettP\tHewlett Packard\n00:02:A6\tEffinet\tEffinet Systems Co., Ltd.\n00:02:A7\tVivaceNe\tVivace Networks\n00:02:A8\tAirLinkT\tAir Link Technology\n00:02:A9\tRacomSRO\tRACOM, s.r.o.\n00:02:AA\tPlcom\tPLcom Co., Ltd.\n00:02:AB\tCtcUnion\tCTC Union Technologies Co., Ltd.\n00:02:AC\t3parData\t3PAR data\n00:02:AD\tHoya\tHOYA Corporation\n00:02:AE\tScannexE\tScannex Electronics Ltd.\n00:02:AF\tTelecruz\tTeleCruz Technology, Inc.\n00:02:B0\tHokubuCo\tHokubu Communication & Industrial Co., Ltd.\n00:02:B1\tAnritsu\tAnritsu, Ltd.\n00:02:B2\tCablevis\tCablevision\n00:02:B3\tIntel\tIntel Corporation\n00:02:B4\tDaphne\t\n00:02:B5\tAvnet\tAvnet, Inc.\n00:02:B6\tAcrosser\tAcrosser Technology Co., Ltd.\n00:02:B7\tWatanabe\tWatanabe Electric Industry Co., Ltd.\n00:02:B8\tWhiKonsu\tWhi Konsult Ab\n00:02:B9\tCisco\tCisco Systems, Inc\n00:02:BA\tCisco\tCisco Systems, Inc\n00:02:BB\tContinuo\tContinuous Computing Corp\n00:02:BC\tLvl7\tLVL 7 Systems, Inc.\n00:02:BD\tBionet\tBionet Co., Ltd.\n00:02:BE\tTotsuEng\tTotsu Engineering, Inc.\n00:02:BF\tDotrocke\tdotRocket, Inc.\n00:02:C0\tBencentT\tBencent Tzeng Industry Co., Ltd.\n00:02:C1\tInnovati\tInnovative Electronic Designs, Inc.\n00:02:C2\tNetVisio\tNet Vision Telecom\n00:02:C3\tArelnet\tArelnet Ltd.\n00:02:C4\tVectorIn\tVector International BVBA\n00:02:C5\tEvertzMi\tEvertz Microsystems Ltd.\n00:02:C6\tDataTrac\tData Track Technology PLC\n00:02:C7\tAlpsElec\tAlps Electric Co.,Ltd.\n00:02:C8\tTechnoco\tTechnocom Communications Technology (pte) Ltd\n00:02:C9\tMellanox\tMellanox Technologies, Inc.\n00:02:CA\tEndpoint\tEndPoints, Inc.\n00:02:CB\tTristate\tTriState Ltd.\n00:02:CC\tMCCI\tM.C.C.I\n00:02:CD\tTeledrea\tTeleDream, Inc.\n00:02:CE\tFoxjet\tFoxJet, Inc.\n00:02:CF\tZygateCo\tZyGate Communications, Inc.\n00:02:D0\tComdial\tComdial Corporation\n00:02:D1\tVivotek\tVivotek, Inc.\n00:02:D2\tWorkstat\tWorkstation AG\n00:02:D3\tNetbotz\tNetBotz, Inc.\n00:02:D4\tPdaPerip\tPDA Peripherals, Inc.\n00:02:D5\tAcr\t\n00:02:D6\tNice\tNICE Systems\n00:02:D7\tEmpeg\tEMPEG Ltd\n00:02:D8\tBrecisCo\tBRECIS Communications Corporation\n00:02:D9\tReliable\tReliable Controls\n00:02:DA\tExioComm\tExiO Communications, Inc.\n00:02:DB\tNetsec\t\n00:02:DC\tFujitsuG\tFujitsu General Limited\n00:02:DD\tBromaxCo\tBromax Communications, Ltd.\n00:02:DE\tAstrodes\tAstrodesign, Inc.\n00:02:DF\tNetCom\tNet Com Systems, Inc.\n00:02:E0\tEtas\tETAS GmbH\n00:02:E1\tIntegrat\tIntegrated Network Corporation\n00:02:E2\tNdcInfar\tNDC Infared Engineering\n00:02:E3\tLite-OnC\tLITE-ON Communications, Inc.\n00:02:E4\tJcHyun\tJC HYUN Systems, Inc.\n00:02:E5\tTimeware\tTimeware Ltd.\n00:02:E6\tGouldIns\tGould Instrument Systems, Inc.\n00:02:E7\tCab\tCAB GmbH & Co KG\n00:02:E8\tED&A\tE.D.&A.\n00:02:E9\tCsSystem\tCS Systemes De Securite - C3S\n00:02:EA\tFocusEnh\tFocus Enhancements\n00:02:EB\tPicoComm\tPico Communications\n00:02:EC\tMaschoff\tMaschoff Design Engineering\n00:02:ED\tDxoTelec\tDXO Telecom Co., Ltd.\n00:02:EE\tNokiaDan\tNokia Danmark A/S\n00:02:EF\tCccNetwo\tCCC Network Systems Group Ltd.\n00:02:F0\tAmeOptim\tAME Optimedia Technology Co., Ltd.\n00:02:F1\tPinetron\tPinetron Co., Ltd.\n00:02:F2\tEdevice\teDevice, Inc.\n00:02:F3\tMediaSer\tMedia Serve Co., Ltd.\n00:02:F4\tPctel\tPCTEL, Inc.\n00:02:F5\tViveSyne\tVIVE Synergies, Inc.\n00:02:F6\tEquipeCo\tEquipe Communications\n00:02:F7\tArm\t\n00:02:F8\tSeakrEng\tSEAKR Engineering, Inc.\n00:02:F9\tMimosBer\tMIMOS Berhad\n00:02:FA\tDxAntenn\tDX Antenna Co., Ltd.\n00:02:FB\tBaumulle\tBaumuller Aulugen-Systemtechnik GmbH\n00:02:FC\tCisco\tCisco Systems, Inc\n00:02:FD\tCisco\tCisco Systems, Inc\n00:02:FE\tViditec\tViditec, Inc.\n00:02:FF\tHandanBr\tHandan BroadInfoCom\n00:03:00\tBarracud\tBarracuda Networks, Inc.\n00:03:01\tExfo\t\n00:03:02\tCharlesI\tCharles Industries, Ltd.\n00:03:03\tJamaElec\tJAMA Electronics Co., Ltd.\n00:03:04\tPacificB\tPacific Broadband Communications\n00:03:05\tMscVertr\tMSC Vertriebs GmbH\n00:03:06\tFusionIn\tFusion In Tech Co., Ltd.\n00:03:07\tSecureWo\tSecure Works, Inc.\n00:03:08\tAmCommun\tAM Communications, Inc.\n00:03:09\tTexcelTe\tTexcel Technology PLC\n00:03:0A\tArgusTec\tArgus Technologies\n00:03:0B\tHunterTe\tHunter Technology, Inc.\n00:03:0C\tTelesoft\tTelesoft Technologies Ltd.\n00:03:0D\tUniwillC\tUniwill Computer Corp.\n00:03:0E\tCoreComm\tCore Communications Co., Ltd.\n00:03:0F\tDigitalC\tDigital China (Shanghai) Networks Ltd.\n00:03:10\tE-Global\tE-Globaledge Corporation\n00:03:11\tMicroTec\tMicro Technology Co., Ltd.\n00:03:12\tTr-Syste\tTR-Systemtechnik GmbH\n00:03:13\tAccessMe\tAccess Media SPA\n00:03:14\tTeleware\tTeleware Network Systems\n00:03:15\tCidco\tCidco Incorporated\n00:03:16\tNobellCo\tNobell Communications, Inc.\n00:03:17\tMerlin\tMerlin Systems, Inc.\n00:03:18\tCyras\tCyras Systems, Inc.\n00:03:19\tInfineon\tInfineon AG\n00:03:1A\tBeijingB\tBeijing Broad Telecom Ltd., China\n00:03:1B\tCellvisi\tCellvision Systems, Inc.\n00:03:1C\tSvenskaH\tSvenska Hardvarufabriken AB\n00:03:1D\tTaiwanCo\tTaiwan Commate Computer, Inc.\n00:03:1E\tOptranet\tOptranet, Inc.\n00:03:1F\tCondev\tCondev Ltd.\n00:03:20\tXpeed\tXpeed, Inc.\n00:03:21\tRecoRese\tReco Research Co., Ltd.\n00:03:22\tIdis\tIDIS Co., Ltd.\n00:03:23\tCornetTe\tCornet Technology, Inc.\n00:03:24\tSanyoCon\tSANYO Consumer Electronics Co., Ltd.\n00:03:25\tArimaCom\tArima Computer Corp.\n00:03:26\tIwasakiI\tIwasaki Information Systems Co., Ltd.\n00:03:27\tActL\tACT'L\n00:03:28\tMaceGrou\tMace Group, Inc.\n00:03:29\tF3\tF3, Inc.\n00:03:2A\tUnidataC\tUniData Communication Systems, Inc.\n00:03:2B\tGaiDaten\tGAI Datenfunksysteme GmbH\n00:03:2C\tAbbSwitz\tABB Switzerland Ltd\n00:03:2D\tIbaseTec\tIBASE Technology, Inc.\n00:03:2E\tScopeInf\tScope Information Management, Ltd.\n00:03:2F\tGlobalSu\tGlobal Sun Technology, Inc.\n00:03:30\tImagenic\tImagenics, Co., Ltd.\n00:03:31\tCisco\tCisco Systems, Inc\n00:03:32\tCisco\tCisco Systems, Inc\n00:03:33\tDigitel\tDigitel Co., Ltd.\n00:03:34\tNewportE\tNewport Electronics\n00:03:35\tMiraeTec\tMirae Technology\n00:03:36\tZetesTec\tZetes Technologies\n00:03:37\tVaone\tVaone, Inc.\n00:03:38\tOakTechn\tOak Technology\n00:03:39\tEurologi\tEurologic Systems, Ltd.\n00:03:3A\tSiliconW\tSilicon Wave, Inc.\n00:03:3B\tTamiTech\tTAMI Tech Co., Ltd.\n00:03:3C\tDaiden\tDaiden Co., Ltd.\n00:03:3D\tIlshinLa\tILSHin Lab\n00:03:3E\tTateyama\tTateyama System Laboratory Co., Ltd.\n00:03:3F\tBigbandN\tBigBand Networks, Ltd.\n00:03:40\tFlowareW\tFloware Wireless Systems, Ltd.\n00:03:41\tAxonDigi\tAxon Digital Design\n00:03:42\tNortelNe\tNortel Networks\n00:03:43\tMartinPr\tMartin Professional A/S\n00:03:44\tTietech\tTietech.Co., Ltd.\n00:03:45\tRoutrekN\tRoutrek Networks Corporation\n00:03:46\tHitachiK\tHitachi Kokusai Electric, Inc.\n00:03:47\tIntel\tIntel Corporation\n00:03:48\tNorscanI\tNorscan Instruments, Ltd.\n00:03:49\tVidicode\tVidicode Datacommunicatie B.V.\n00:03:4A\tRias\tRIAS Corporation\n00:03:4B\tNortelNe\tNortel Networks\n00:03:4C\tShanghai\tShanghai DigiVision Technology Co., Ltd.\n00:03:4D\tChiaroNe\tChiaro Networks, Ltd.\n00:03:4E\tPosData\tPos Data Company, Ltd.\n00:03:4F\tSur-Gard\tSur-Gard Security\n00:03:50\tBticino\tBticino Spa\n00:03:51\tDiebold\tDiebold, Inc.\n00:03:52\tColubris\tColubris Networks\n00:03:53\tMitac\tMitac, Inc.\n00:03:54\tFiberLog\tFiber Logic Communications\n00:03:55\tTerabeam\tTeraBeam Internet Systems\n00:03:56\tWincorNi\tWincor Nixdorf International GmbH\n00:03:57\tIntervoi\tIntervoice-Brite, Inc.\n00:03:58\tHanyangD\tHanyang Digitech Co.Ltd\n00:03:59\tDigitals\tDigitalSis\n00:03:5A\tPhotron\tPhotron Limited\n00:03:5B\tBridgewa\tBridgeWave Communications\n00:03:5C\tSaintSon\tSaint Song Corp.\n00:03:5D\tBosungHi\tBosung Hi-Net Co., Ltd.\n00:03:5E\tMetropol\tMetropolitan Area Networks, Inc.\n00:03:5F\tPrüftech\tPrüftechnik Condition Monitoring GmbH & Co. KG\n00:03:60\tPacInter\tPAC Interactive Technology, Inc.\n00:03:61\tWidcomm\tWidcomm, Inc.\n00:03:62\tVodtelCo\tVodtel Communications, Inc.\n00:03:63\tMiraesys\tMiraesys Co., Ltd.\n00:03:64\tScenixSe\tScenix Semiconductor, Inc.\n00:03:65\tKiraInfo\tKira Information & Communications, Ltd.\n00:03:66\tAsmPacif\tASM Pacific Technology\n00:03:67\tJasmineN\tJasmine Networks, Inc.\n00:03:68\tEmbedone\tEmbedone Co., Ltd.\n00:03:69\tNipponAn\tNippon Antenna Co., Ltd.\n00:03:6A\tMainnet\tMainnet, Ltd.\n00:03:6B\tCisco\tCisco Systems, Inc\n00:03:6C\tCisco\tCisco Systems, Inc\n00:03:6D\tRuntop\tRuntop, Inc.\n00:03:6E\tNiconPty\tNicon Systems (Pty) Limited\n00:03:6F\tTelsey\tTelsey SPA\n00:03:70\tNxtv\tNXTV, Inc.\n00:03:71\tAcomzNet\tAcomz Networks Corp.\n00:03:72\tUlan\t\n00:03:73\tAselsanA\tAselsan A.S\n00:03:74\tControlM\tControl Microsystems\n00:03:75\tNetmedia\tNetMedia, Inc.\n00:03:76\tGraphtec\tGraphtec Technology, Inc.\n00:03:77\tGigabitW\tGigabit Wireless\n00:03:78\tHumax\tHUMAX Co., Ltd.\n00:03:79\tProscend\tProscend Communications, Inc.\n00:03:7A\tTaiyoYud\tTaiyo Yuden Co., Ltd.\n00:03:7B\tIdecIzum\tIDEC IZUMI Corporation\n00:03:7C\tCoaxMedi\tCoax Media\n00:03:7D\tStellcom\t\n00:03:7E\tPortechC\tPORTech Communications, Inc.\n00:03:7F\tAtherosC\tAtheros Communications, Inc.\n00:03:80\tSshCommu\tSSH Communications Security Corp.\n00:03:81\tIngenico\tIngenico International\n00:03:82\tA-One\tA-One Co., Ltd.\n00:03:83\tMeteraNe\tMetera Networks, Inc.\n00:03:84\tAeta\t\n00:03:85\tActelisN\tActelis Networks, Inc.\n00:03:86\tHoNet\tHo Net, Inc.\n00:03:87\tBlazeNet\tBlaze Network Products\n00:03:88\tFastfame\tFastfame Technology Co., Ltd.\n00:03:89\tPlantron\tPlantronics, Inc.\n00:03:8A\tAmericaO\tAmerica Online, Inc.\n00:03:8B\tPlus-One\tPLUS-ONE I&T, Inc.\n00:03:8C\tTotalImp\tTotal Impact\n00:03:8D\tPcsReven\tPCS Revenue Control Systems, Inc.\n00:03:8E\tAtoga\tAtoga Systems, Inc.\n00:03:8F\tWeinsche\tWeinschel Corporation\n00:03:90\tDigitalV\tDigital Video Communications, Inc.\n00:03:91\tAdvanced\tAdvanced Digital Broadcast, Ltd.\n00:03:92\tHyundaiT\tHyundai Teletek Co., Ltd.\n00:03:93\tApple\tApple, Inc.\n00:03:94\tConnectO\tConnect One\n00:03:95\tCaliforn\tCalifornia Amplifier\n00:03:96\tEzCast\tEZ Cast Co., Ltd.\n00:03:97\tFirebric\tFireBrick Limited\n00:03:98\tWisi\t\n00:03:99\tDongjuIn\tDongju Informations & Communications Co., Ltd.\n00:03:9A\tSiconnec\tSiConnect\n00:03:9B\tNetchipT\tNetChip Technology, Inc.\n00:03:9C\tOptimigh\tOptiMight Communications, Inc.\n00:03:9D\tQisda\tQisda Corporation\n00:03:9E\tTeraSyst\tTera System Co., Ltd.\n00:03:9F\tCisco\tCisco Systems, Inc\n00:03:A0\tCisco\tCisco Systems, Inc\n00:03:A1\tHiperInf\tHIPER Information & Communication, Inc.\n00:03:A2\tCatapult\tCatapult Communications\n00:03:A3\tMavix\tMAVIX, Ltd.\n00:03:A4\tImation\tImation Corp.\n00:03:A5\tMedea\tMedea Corporation\n00:03:A6\tTraxitTe\tTraxit Technology, Inc.\n00:03:A7\tUnixtarT\tUnixtar Technology, Inc.\n00:03:A8\tIdotComp\tIDOT Computers, Inc.\n00:03:A9\tAxcentMe\tAXCENT Media AG\n00:03:AA\tWatlow\t\n00:03:AB\tBridgeIn\tBridge Information Systems\n00:03:AC\tFroniusS\tFronius Schweissmaschinen\n00:03:AD\tEmersonE\tEmerson Energy Systems AB\n00:03:AE\tAlliedAd\tAllied Advanced Manufacturing Pte, Ltd.\n00:03:AF\tParageaC\tParagea Communications\n00:03:B0\tXsenseTe\tXsense Technology Corp.\n00:03:B1\tHospira\tHospira Inc.\n00:03:B2\tRadware\t\n00:03:B3\tIaLink\tIA Link Systems Co., Ltd.\n00:03:B4\tMacrotek\tMacrotek International Corp.\n00:03:B5\tEntraTec\tEntra Technology Co.\n00:03:B6\tQsi\tQSI Corporation\n00:03:B7\tZaccess\tZACCESS Systems\n00:03:B8\tNetkitSo\tNetKit Solutions, LLC\n00:03:B9\tHualongT\tHualong Telecom Co., Ltd.\n00:03:BA\tOracle\tOracle Corporation\n00:03:BB\tSignalCo\tSignal Communications Limited\n00:03:BC\tCot\tCOT GmbH\n00:03:BD\tOmniclus\tOmniCluster Technologies, Inc.\n00:03:BE\tNetility\t\n00:03:BF\tCenterpo\tCenterpoint Broadband Technologies, Inc.\n00:03:C0\tRftnc\tRFTNC Co., Ltd.\n00:03:C1\tPacketDy\tPacket Dynamics Ltd\n00:03:C2\tSolphone\tSolphone K.K.\n00:03:C3\tMicronik\tMicronik Multimedia\n00:03:C4\tTomraAsa\tTomra Systems ASA\n00:03:C5\tMobotix\tMobotix AG\n00:03:C6\tIcue\tICUE Systems, Inc.\n00:03:C7\tHopfElek\thopf Elektronik GmbH\n00:03:C8\tCmlEmerg\tCML Emergency Services\n00:03:C9\tTecom\tTECOM Co., Ltd.\n00:03:CA\tMts\tMTS Systems Corp.\n00:03:CB\tNipponDe\tNippon Systems Development Co., Ltd.\n00:03:CC\tMomentum\tMomentum Computer, Inc.\n00:03:CD\tCloverte\tClovertech, Inc.\n00:03:CE\tEtenTech\tETEN Technologies, Inc.\n00:03:CF\tMuxcom\tMuxcom, Inc.\n00:03:D0\tKoankeis\tKOANKEISO Co., Ltd.\n00:03:D1\tTakaya\tTakaya Corporation\n00:03:D2\tCrossbea\tCrossbeam Systems, Inc.\n00:03:D3\tInternet\tInternet Energy Systems, Inc.\n00:03:D4\tAlloptic\tAlloptic, Inc.\n00:03:D5\tAdvanced\tAdvanced Communications Co., Ltd.\n00:03:D6\tRadvisio\tRADVision, Ltd.\n00:03:D7\tNextnetW\tNextNet Wireless, Inc.\n00:03:D8\tImpathNe\tiMPath Networks, Inc.\n00:03:D9\tSecheron\tSecheron SA\n00:03:DA\tTakamisa\tTakamisawa Cybernetics Co., Ltd.\n00:03:DB\tApogeeEl\tApogee Electronics Corp.\n00:03:DC\tLexarMed\tLexar Media, Inc.\n00:03:DD\tComarkIn\tComark Interactive Solutions\n00:03:DE\tOtcWirel\tOTC Wireless\n00:03:DF\tDesana\tDesana Systems\n00:03:E0\tArrisGro\tARRIS Group, Inc.\n00:03:E1\tWinmateC\tWinmate Communication, Inc.\n00:03:E2\tComspace\tComspace Corporation\n00:03:E3\tCisco\tCisco Systems, Inc\n00:03:E4\tCisco\tCisco Systems, Inc\n00:03:E5\tHermsted\tHermstedt SG\n00:03:E6\tEntone\tEntone, Inc.\n00:03:E7\tLogostek\tLogostek Co. Ltd.\n00:03:E8\tWaveleng\tWavelength Digital Limited\n00:03:E9\tAkaraCan\tAkara Canada, Inc.\n00:03:EA\tMegaSyst\tMega System Technologies, Inc.\n00:03:EB\tAtrica\t\n00:03:EC\tIcgResea\tICG Research, Inc.\n00:03:ED\tShinkawa\tShinkawa Electric Co., Ltd.\n00:03:EE\tMknet\tMKNet Corporation\n00:03:EF\tOneline\tOneline AG\n00:03:F0\tRedfernB\tRedfern Broadband Networks\n00:03:F1\tCicadaSe\tCicada Semiconductor, Inc.\n00:03:F2\tSenecaNe\tSeneca Networks\n00:03:F3\tDazzleMu\tDazzle Multimedia, Inc.\n00:03:F4\tNetburne\tNetBurner\n00:03:F5\tChip2chi\tChip2Chip\n00:03:F6\tAllegroN\tAllegro Networks, Inc.\n00:03:F7\tPlast-Co\tPlast-Control GmbH\n00:03:F8\tSancastl\tSanCastle Technologies, Inc.\n00:03:F9\tPleiades\tPleiades Communications, Inc.\n00:03:FA\tTimetraN\tTiMetra Networks\n00:03:FB\tEnegate\tENEGATE Co.,Ltd.\n00:03:FC\tIntertex\tIntertex Data AB\n00:03:FD\tCisco\tCisco Systems, Inc\n00:03:FE\tCisco\tCisco Systems, Inc\n00:03:FF\tMicrosof\tMicrosoft Corporation\n00:04:00\tLexmarkP\tLexmark (Print Server)\n00:04:01\tOsakiEle\tOsaki Electric Co., Ltd.\n00:04:02\tNexsanTe\tNexsan Technologies, Ltd.\n00:04:03\tNexsi\tNexsi Corporation\n00:04:04\tMakinoMi\tMakino Milling Machine Co., Ltd.\n00:04:05\tAcnTechn\tACN Technologies\n00:04:06\tFaMetabo\tFa. Metabox AG\n00:04:07\tTopconPo\tTopcon Positioning Systems, Inc.\n00:04:08\tSankoEle\tSanko Electronics Co., Ltd.\n00:04:09\tCratosNe\tCratos Networks\n00:04:0A\tSage\tSage Systems\n00:04:0B\t3comEuro\t3COM EUROPE LTD\n00:04:0C\tKannoWor\tKanno Works, Ltd.\n00:04:0D\tAvaya\tAvaya Inc\n00:04:0E\tAvm\tAVM GmbH\n00:04:0F\tAsusNetw\tAsus Network Technologies, Inc.\n00:04:10\tSpinnake\tSpinnaker Networks, Inc.\n00:04:11\tInkraNet\tInkra Networks, Inc.\n00:04:12\tWavesmit\tWaveSmith Networks, Inc.\n00:04:13\tSnomTech\tsnom technology GmbH\n00:04:14\tUmezawaM\tUmezawa Musen Denki Co., Ltd.\n00:04:15\tRasteme\tRasteme Systems Co., Ltd.\n00:04:16\tParksCom\tParks S/A Comunicacoes Digitais\n00:04:17\tElau\tElau Ag\n00:04:18\tTeltroni\tTeltronic S.A.U.\n00:04:19\tFibercyc\tFibercycle Networks, Inc.\n00:04:1A\tInesTest\tInes Test and Measurement GmbH & CoKG\n00:04:1B\tBridgewo\tBridgeworks Ltd.\n00:04:1C\tIpdialog\tipDialog, Inc.\n00:04:1D\tCoregaOf\tCorega of America\n00:04:1E\tShikokuI\tShikoku Instrumentation Co., Ltd.\n00:04:1F\tSonyInte\tSony Interactive Entertainment Inc.\n00:04:20\tSlimDevi\tSlim Devices, Inc.\n00:04:21\tOcularNe\tOcular Networks\n00:04:22\tStudioTe\tStudio Technologies, Inc\n00:04:23\tIntel\tIntel Corporation\n00:04:24\tTmcSRL\tTMC s.r.l.\n00:04:25\tAtmel\tAtmel Corporation\n00:04:26\tAutosys\t\n00:04:27\tCisco\tCisco Systems, Inc\n00:04:28\tCisco\tCisco Systems, Inc\n00:04:29\tPixord\tPixord Corporation\n00:04:2A\tWireless\tWireless Networks, Inc.\n00:04:2B\tItAccess\tIT Access Co., Ltd.\n00:04:2C\tMinet\tMinet, Inc.\n00:04:2D\tSarian\tSarian Systems, Ltd.\n00:04:2E\tNetousTe\tNetous Technologies, Ltd.\n00:04:2F\tInternat\tInternational Communications Products, Inc.\n00:04:30\tNetgem\t\n00:04:31\tGlobalst\tGlobalStreams, Inc.\n00:04:32\tVoyetraT\tVoyetra Turtle Beach, Inc.\n00:04:33\tCyberboa\tCyberboard A/S\n00:04:34\tAccelent\tAccelent Systems, Inc.\n00:04:35\tInfinetL\tInfiNet LLC\n00:04:36\tElansatT\tELANsat Technologies, Inc.\n00:04:37\tPowinInf\tPowin Information Technology, Inc.\n00:04:38\tNortelNe\tNortel Networks\n00:04:39\tRoscoEnt\tRosco Entertainment Technology, Inc.\n00:04:3A\tIntellig\tIntelligent Telecommunications, Inc.\n00:04:3B\tLavaComp\tLava Computer Mfg., Inc.\n00:04:3C\tSonos\tSONOS Co., Ltd.\n00:04:3D\tIndel\tIndel Ag\n00:04:3E\tTelencom\tTelencomm\n00:04:3F\tEsteemWi\tESTeem Wireless Modems, Inc\n00:04:40\tCyberpix\tcyberPIXIE, Inc.\n00:04:41\tHalfDome\tHalf Dome Systems, Inc.\n00:04:42\tNact\t\n00:04:43\tAgilentT\tAgilent Technologies, Inc.\n00:04:44\tWesternM\tWestern Multiplex Corporation\n00:04:45\tLmsSkala\tLMS Skalar Instruments GmbH\n00:04:46\tCyzentec\tCYZENTECH Co., Ltd.\n00:04:47\tAcrowave\tAcrowave Systems Co., Ltd.\n00:04:48\tPolaroid\tPolaroid Corporation\n00:04:49\tMapletre\tMapletree Networks\n00:04:4A\tIpolicyN\tiPolicy Networks, Inc.\n00:04:4B\tNvidia\t\n00:04:4C\tJenoptik\t\n00:04:4D\tCisco\tCisco Systems, Inc\n00:04:4E\tCisco\tCisco Systems, Inc\n00:04:4F\tSchubert\tSchubert System Elektronik Gmbh\n00:04:50\tDmdCompu\tDMD Computers SRL\n00:04:51\tMedrad\tMedrad, Inc.\n00:04:52\tRocketlo\tRocketLogix, Inc.\n00:04:53\tYottayot\tYottaYotta, Inc.\n00:04:54\tQuadriga\tQuadriga UK\n00:04:55\tAntaraNe\tANTARA.net\n00:04:56\tCambiumN\tCambium Networks Limited\n00:04:57\tUniversa\tUniversal Access Technology, Inc.\n00:04:58\tFusionX\tFusion X Co., Ltd.\n00:04:59\tVeristar\tVeristar Corporation\n00:04:5A\tLinksysG\tThe Linksys Group, Inc.\n00:04:5B\tTechsanE\tTechsan Electronics Co., Ltd.\n00:04:5C\tMobiwave\tMobiwave Pte Ltd\n00:04:5D\tBekaElek\tBEKA Elektronik\n00:04:5E\tPolytrax\tPolyTrax Information Technology AG\n00:04:5F\tAvalueTe\tAvalue Technology, Inc.\n00:04:60\tKnilinkT\tKnilink Technology, Inc.\n00:04:61\tEpoxComp\tEPOX Computer Co., Ltd.\n00:04:62\tDakosDat\tDAKOS Data & Communication Co., Ltd.\n00:04:63\tBoschSec\tBosch Security Systems\n00:04:64\tPulse-Li\tPulse-Link Inc\n00:04:65\tISTIsdn-\ti.s.t isdn-support technik GmbH\n00:04:66\tArmitel\tARMITEL Co.\n00:04:67\tWuhanRes\tWuhan Research Institute of MII\n00:04:68\tVivity\tVivity, Inc.\n00:04:69\tInnocom\tInnocom, Inc.\n00:04:6A\tNaviniNe\tNavini Networks\n00:04:6B\tPalmWire\tPalm Wireless, Inc.\n00:04:6C\tCyberTec\tCyber Technology Co., Ltd.\n00:04:6D\tCisco\tCisco Systems, Inc\n00:04:6E\tCisco\tCisco Systems, Inc\n00:04:6F\tDigitelI\tDigitel S/A Industria Eletronica\n00:04:70\tIpunplug\tipUnplugged AB\n00:04:71\tIprad\t\n00:04:72\tTelelynx\tTelelynx, Inc.\n00:04:73\tPhotonex\tPhotonex Corporation\n00:04:74\tLegrand\t\n00:04:75\t3com\t\n00:04:76\t3com\t\n00:04:77\tScalant\tScalant Systems, Inc.\n00:04:78\tGStarTec\tG. Star Technology Corporation\n00:04:79\tRadius\tRadius Co., Ltd.\n00:04:7A\tAxxessit\tAxxessit Asa\n00:04:7B\tSchlumbe\tSchlumberger\n00:04:7C\tSkidata\tSkidata AG\n00:04:7D\tPelco\t\n00:04:7E\tSiquraBV\tSiqura B.V.\n00:04:7F\tChrMayr\tChr. Mayr GmbH & Co. KG\n00:04:80\tBrocadeC\tBrocade Communications Systems, Inc.\n00:04:81\tEconolit\tEconolite Control Products, Inc.\n00:04:82\tMedialog\tMedialogic Corp.\n00:04:83\tDeltronT\tDeltron Technology, Inc.\n00:04:84\tAmann\tAmann GmbH\n00:04:85\tPicoligh\tPicoLight\n00:04:86\tIttcUniv\tITTC, University of Kansas\n00:04:87\tCogencyS\tCogency Semiconductor, Inc.\n00:04:88\tEurother\tEurotherm Controls\n00:04:89\tYafoNetw\tYAFO Networks, Inc.\n00:04:8A\tTemiaVer\tTemia Vertriebs GmbH\n00:04:8B\tPoscon\tPoscon Corporation\n00:04:8C\tNaynaNet\tNayna Networks, Inc.\n00:04:8D\tTeoTechn\tTeo Technologies, Inc\n00:04:8E\tOhmTechL\tOhm Tech Labs, Inc.\n00:04:8F\tTd\tTD Systems Corporation\n00:04:90\tOpticalA\tOptical Access\n00:04:91\tTechnovi\tTechnovision, Inc.\n00:04:92\tHiveInte\tHive Internet, Ltd.\n00:04:93\tTsinghua\tTsinghua Unisplendour Co., Ltd.\n00:04:94\tBreezeco\tBreezecom, Ltd.\n00:04:95\tTejasNet\tTejas Networks India Limited\n00:04:96\tExtremeN\tExtreme Networks, Inc.\n00:04:97\tMacrosys\tMacroSystem Digital Video AG\n00:04:98\tMahiNetw\tMahi Networks\n00:04:99\tChino\tChino Corporation\n00:04:9A\tCisco\tCisco Systems, Inc\n00:04:9B\tCisco\tCisco Systems, Inc\n00:04:9C\tSurgient\tSurgient Networks, Inc.\n00:04:9D\tIpanemaT\tIpanema Technologies\n00:04:9E\tWirelink\tWirelink Co., Ltd.\n00:04:9F\tFreescal\tFreescale Semiconductor\n00:04:A0\tVerityIn\tVerity Instruments, Inc.\n00:04:A1\tPathwayC\tPathway Connectivity\n00:04:A2\tLSIJapan\tL.S.I. Japan Co., Ltd.\n00:04:A3\tMicrochi\tMicrochip Technology Inc.\n00:04:A4\tNetenabl\tNetEnabled, Inc.\n00:04:A5\tBarcoPro\tBarco Projection Systems NV\n00:04:A6\tSafTehni\tSAF Tehnika Ltd.\n00:04:A7\tFabiatec\tFabiaTech Corporation\n00:04:A8\tBroadmax\tBroadmax Technologies, Inc.\n00:04:A9\tSandstre\tSandStream Technologies, Inc.\n00:04:AA\tJetstrea\tJetstream Communications\n00:04:AB\tComverse\tComverse Network Systems, Inc.\n00:04:AC\tIbmPcmci\tIBM\n00:04:AD\tMalibuNe\tMalibu Networks\n00:04:AE\tSullair\tSullair Corporation\n00:04:AF\tDigitalF\tDigital Fountain, Inc.\n00:04:B0\tElesign\tELESIGN Co., Ltd.\n00:04:B1\tSignalTe\tSignal Technology, Inc.\n00:04:B2\tEssegiSr\tEssegi Srl\n00:04:B3\tVideotek\tVideotek, Inc.\n00:04:B4\tCiac\t\n00:04:B5\tEquitrac\tEquitrac Corporation\n00:04:B6\tStratexN\tStratex Networks, Inc.\n00:04:B7\tAmbIT\tAMB i.t. Holding\n00:04:B8\tKumahira\tKumahira Co., Ltd.\n00:04:B9\tSISoubou\tS.I. Soubou, Inc.\n00:04:BA\tKddMedia\tKDD Media Will Corporation\n00:04:BB\tBardac\tBardac Corporation\n00:04:BC\tGiantec\tGiantec, Inc.\n00:04:BD\tArrisGro\tARRIS Group, Inc.\n00:04:BE\tOptxcon\tOptXCon, Inc.\n00:04:BF\tVersalog\tVersaLogic Corp.\n00:04:C0\tCisco\tCisco Systems, Inc\n00:04:C1\tCisco\tCisco Systems, Inc\n00:04:C2\tMagnipix\tMagnipix, Inc.\n00:04:C3\tCastorIn\tCASTOR Informatique\n00:04:C4\tAllenHea\tAllen & Heath Limited\n00:04:C5\tAseTechn\tASE Technologies, USA\n00:04:C6\tYamahaMo\tYamaha Motor Co.,Ltd\n00:04:C7\tNetmount\t\n00:04:C8\tLibaMasc\tLIBA Maschinenfabrik GmbH\n00:04:C9\tMicroEle\tMicro Electron Co., Ltd.\n00:04:CA\tFreems\tFreeMs Corp.\n00:04:CB\tTdsoftCo\tTdsoft Communication, Ltd.\n00:04:CC\tPeekTraf\tPeek Traffic B.V.\n00:04:CD\tExtenway\tExtenway Solutions Inc\n00:04:CE\tPatriaAi\tPatria Ailon\n00:04:CF\tSeagateT\tSeagate Technology\n00:04:D0\tSoftlink\tSoftlink s.r.o.\n00:04:D1\tDrewTech\tDrew Technologies, Inc.\n00:04:D2\tAdconTel\tAdcon Telemetry GmbH\n00:04:D3\tToyokeik\tToyokeiki Co., Ltd.\n00:04:D4\tProviewE\tProview Electronics Co., Ltd.\n00:04:D5\tHitachiI\tHitachi Information & Communication Engineering, Ltd.\n00:04:D6\tTakagiIn\tTakagi Industrial Co., Ltd.\n00:04:D7\tOmitecIn\tOmitec Instrumentation Ltd.\n00:04:D8\tIpwirele\tIPWireless, Inc.\n00:04:D9\tTitanEle\tTitan Electronics, Inc.\n00:04:DA\tRelaxTec\tRelax Technology, Inc.\n00:04:DB\tTellusGr\tTellus Group Corp.\n00:04:DC\tNortelNe\tNortel Networks\n00:04:DD\tCisco\tCisco Systems, Inc\n00:04:DE\tCisco\tCisco Systems, Inc\n00:04:DF\tTeracomT\tTeracom Telematica Ltda.\n00:04:E0\tProcketN\tProcket Networks\n00:04:E1\tInfinior\tInfinior Microsystems\n00:04:E2\tSmcNetwo\tSMC Networks, Inc.\n00:04:E3\tAcctonTe\tAccton Technology Corp\n00:04:E4\tDaeryung\tDaeryung Ind., Inc.\n00:04:E5\tGlonet\tGlonet Systems, Inc.\n00:04:E6\tBanyanNe\tBanyan Network Private Limited\n00:04:E7\tLightpoi\tLightpointe Communications, Inc\n00:04:E8\tIer\tIER, Inc.\n00:04:E9\tInfinisw\tInfiniswitch Corporation\n00:04:EA\tHewlettP\tHewlett Packard\n00:04:EB\tPaxonetC\tPaxonet Communications, Inc.\n00:04:EC\tMemoboxS\tMemobox SA\n00:04:ED\tBillionE\tBillion Electric Co., Ltd.\n00:04:EE\tLincolnE\tLincoln Electric Company\n00:04:EF\tPolestar\tPolestar Corp.\n00:04:F0\tInternat\tInternational Computers, Ltd\n00:04:F1\tWherenet\t\n00:04:F2\tPolycom\t\n00:04:F3\tFsForth-\tFS FORTH-SYSTEME GmbH\n00:04:F4\tInfinite\tInfinite Electronics Inc.\n00:04:F5\tSnowshor\tSnowShore Networks, Inc.\n00:04:F6\tAmphus\t\n00:04:F7\tOmegaBan\tOmega Band, Inc.\n00:04:F8\tQualicab\tQUALICABLE TV Industria E Com., Ltda\n00:04:F9\tXteraCom\tXtera Communications, Inc.\n00:04:FA\tNbsTechn\tNBS Technologies Inc.\n00:04:FB\tCommtech\tCommtech, Inc.\n00:04:FC\tStratusT\tStratus Technologies\n00:04:FD\tJapanCon\tJapan Control Engineering Co., Ltd.\n00:04:FE\tPelagoNe\tPelago Networks\n00:04:FF\tAcronet\tAcronet Co., Ltd.\n00:05:00\tCisco\tCisco Systems, Inc\n00:05:01\tCisco\tCisco Systems, Inc\n00:05:02\tApplePci\tApple (PCI bus Macs)\n00:05:03\tIconag\t\n00:05:04\tNarayInf\tNaray Information & Communication Enterprise\n00:05:05\tIntegrat\tSystems Integration Solutions, Inc.\n00:05:06\tReddoNet\tReddo Networks AB\n00:05:07\tFineAppl\tFine Appliance Corp.\n00:05:08\tInetcam\tInetcam, Inc.\n00:05:09\tAvocNish\tAVOC Nishimura Ltd.\n00:05:0A\tIcs\tICS Spa\n00:05:0B\tSicom\tSICOM Systems, Inc.\n00:05:0C\tNetworkP\tNetwork Photonics, Inc.\n00:05:0D\tMidstrea\tMidstream Technologies, Inc.\n00:05:0E\t3ware\t3ware, Inc.\n00:05:0F\tTanakaS/\tTanaka S/S Ltd.\n00:05:10\tInfinite\tInfinite Shanghai Communication Terminals Ltd.\n00:05:11\tCompleme\tComplementary Technologies Ltd\n00:05:12\tZebraTec\tZebra Technologies Inc\n00:05:13\tVtlinxMu\tVTLinx Multimedia Systems, Inc.\n00:05:14\tKdt\tKDT Systems Co., Ltd.\n00:05:15\tNuark\tNuark Co., Ltd.\n00:05:16\tSmartMod\tSMART Modular Technologies\n00:05:17\tShellcom\tShellcomm, Inc.\n00:05:18\tJupiters\tJupiters Technology\n00:05:19\tSiemensB\tSiemens Building Technologies AG,\n00:05:1A\t3comEuro\t3COM EUROPE LTD\n00:05:1B\tMagicCon\tMagic Control Technology Corporation\n00:05:1C\tXnetTech\tXnet Technology Corp.\n00:05:1D\tAirocon\tAirocon, Inc.\n00:05:1E\tBrocadeC\tBrocade Communications Systems, Inc.\n00:05:1F\tTaijinMe\tTaijin Media Co., Ltd.\n00:05:20\tSmartron\tSmartronix, Inc.\n00:05:21\tControlM\tControl Microsystems\n00:05:22\tLea*D\tLEA*D Corporation, Inc.\n00:05:23\tAvlList\tAVL List GmbH\n00:05:24\tBtlSyste\tBTL System (HK) Limited\n00:05:25\tPuretekI\tPuretek Industrial Co., Ltd.\n00:05:26\tIpas\tIPAS GmbH\n00:05:27\tSjTek\tSJ Tek Co. Ltd\n00:05:28\tNewFocus\tNew Focus, Inc.\n00:05:29\tShanghai\tShanghai Broadan Communication Technology Co., Ltd\n00:05:2A\tIkegamiT\tIkegami Tsushinki Co., Ltd.\n00:05:2B\tHoriba\tHORIBA, Ltd.\n00:05:2C\tSupremeM\tSupreme Magic Corporation\n00:05:2D\tZoltrixI\tZoltrix International Limited\n00:05:2E\tCintaNet\tCinta Networks\n00:05:2F\tLevitonN\tLeviton Network Solutions\n00:05:30\tAndiamo\tAndiamo Systems, Inc.\n00:05:31\tCisco\tCisco Systems, Inc\n00:05:32\tCisco\tCisco Systems, Inc\n00:05:33\tBrocadeC\tBrocade Communications Systems, Inc.\n00:05:34\tNorthsta\tNorthstar Engineering Ltd.\n00:05:35\tChipPc\tChip PC Ltd.\n00:05:36\tDanamCom\tDanam Communications, Inc.\n00:05:37\tNetsTech\tNets Technology Co., Ltd.\n00:05:38\tMerilus\tMerilus, Inc.\n00:05:39\tABrandNe\tA Brand New World in Sweden AB\n00:05:3A\tWillowgl\tWillowglen Services Pte Ltd\n00:05:3B\tHarbourN\tHarbour Networks Ltd., Co. Beijing\n00:05:3C\tXircom\t\n00:05:3D\tAgere\tAgere Systems\n00:05:3E\tKidSyste\tKID Systeme GmbH\n00:05:3F\tVisionte\tVisionTek, Inc.\n00:05:40\tFast\tFAST Corporation\n00:05:41\tAdvanced\tAdvanced Systems Co., Ltd.\n00:05:42\tOtari\tOtari, Inc.\n00:05:43\tIqWirele\tIQ Wireless GmbH\n00:05:44\tValleyTe\tValley Technologies, Inc.\n00:05:45\tInternet\tInternet Photonics\n00:05:46\tKddiNetw\tKDDI Network & Solultions Inc.\n00:05:47\tStarentN\tStarent Networks\n00:05:48\tDisco\tDisco Corporation\n00:05:49\tSaliraOp\tSalira Optical Network Systems\n00:05:4A\tArioData\tArio Data Networks, Inc.\n00:05:4B\tEatonAut\tEaton Automation AG\n00:05:4C\tRfInnova\tRF Innovations Pty Ltd\n00:05:4D\tBransTec\tBrans Technologies, Inc.\n00:05:4E\tPhilips\t\n00:05:4F\tGarminIn\tGarmin International\n00:05:50\tVcommsCo\tVcomms Connect Limited\n00:05:51\tFSElektr\tF & S Elektronik Systeme GmbH\n00:05:52\tXycotecC\tXycotec Computer GmbH\n00:05:53\tDvc\tDVC Company, Inc.\n00:05:54\tRangesta\tRangestar Wireless\n00:05:55\tJapanCas\tJapan Cash Machine Co., Ltd.\n00:05:56\t360\t360 Systems\n00:05:57\tAgileTv\tAgile TV Corporation\n00:05:58\tSynchron\tSynchronous, Inc.\n00:05:59\tIntracom\tIntracom S.A.\n00:05:5A\tPowerDsi\tPower Dsine Ltd.\n00:05:5B\tCharlesI\tCharles Industries, Ltd.\n00:05:5C\tKowa\tKowa Company, Ltd.\n00:05:5D\tD-Link\tD-LINK SYSTEMS, INC.\n00:05:5E\tCisco\tCisco Systems, Inc\n00:05:5F\tCisco\tCisco Systems, Inc\n00:05:60\tLeaderCo\tLeader Comm.Co., Ltd\n00:05:61\tNacImage\tnac Image Technology, Inc.\n00:05:62\tDigitalV\tDigital View Limited\n00:05:63\tJ-Works\tJ-Works, Inc.\n00:05:64\tTsinghua\tTsinghua Bitway Co., Ltd.\n00:05:65\tTailynCo\tTailyn Communication Company Ltd.\n00:05:66\tSecuiCom\tSecui.com Corporation\n00:05:67\tEtymonic\tEtymonic Design, Inc.\n00:05:68\tPiltofis\tPiltofish Networks AB\n00:05:69\tVmware\tVMware, Inc.\n00:05:6A\tHeuftSys\tHeuft Systemtechnik GmbH\n00:05:6B\tCPTechno\tC.P. Technology Co., Ltd.\n00:05:6C\tHungChan\tHung Chang Co., Ltd.\n00:05:6D\tPacific\tPacific Corporation\n00:05:6E\tNational\tNational Enhance Technology, Inc.\n00:05:6F\tInnomedi\tInnomedia Technologies Pvt. Ltd.\n00:05:70\tBaydel\tBaydel Ltd.\n00:05:71\tSeiwaEle\tSeiwa Electronics Co.\n00:05:72\tDeonet\tDeonet Co., Ltd.\n00:05:73\tCisco\tCisco Systems, Inc\n00:05:74\tCisco\tCisco Systems, Inc\n00:05:75\tCds-Elec\tCDS-Electronics BV\n00:05:76\tNsmTechn\tNSM Technology Ltd.\n00:05:77\tSmInform\tSM Information & Communication\n00:05:78\tPrivate\t\n00:05:79\tUniversa\tUniversal Control Solution Corp.\n00:05:7A\tOverture\tOverture Networks\n00:05:7B\tChungNam\tChung Nam Electronic Co., Ltd.\n00:05:7C\tRcoSecur\tRCO Security AB\n00:05:7D\tSunCommu\tSun Communications, Inc.\n00:05:7E\tEckelman\tEckelmann Steuerungstechnik GmbH\n00:05:7F\tAcqisTec\tAcqis Technology\n00:05:80\tFibrolan\tFibroLAN Ltd.\n00:05:81\tSnell\t\n00:05:82\tClearcub\tClearCube Technology\n00:05:83\tImagecom\tImageCom Limited\n00:05:84\tAbsolute\tAbsoluteValue Systems, Inc.\n00:05:85\tJuniperN\tJuniper Networks\n00:05:86\tLucentTe\tLucent Technologies\n00:05:87\tLocus\tLocus, Incorporated\n00:05:88\tSensoria\tSensoria Corp.\n00:05:89\tNational\tNational Datacomputer\n00:05:8A\tNetcom\tNetcom Co., Ltd.\n00:05:8B\tIpmental\tIPmental, Inc.\n00:05:8C\tOpentech\tOpentech Inc.\n00:05:8D\tLynxPhot\tLynx Photonic Networks, Inc.\n00:05:8E\tFlextron\tFlextronics International GmbH & Co. Nfg. KG\n00:05:8F\tClcsoft\tCLCsoft co.\n00:05:90\tSwissvoi\tSwissvoice Ltd.\n00:05:91\tActiveSi\tActive Silicon Ltd\n00:05:92\tPultek\tPultek Corp.\n00:05:93\tGrammarE\tGrammar Engine Inc.\n00:05:94\tHmsIndus\tHMS Industrial Networks\n00:05:95\tAlesis\tAlesis Corporation\n00:05:96\tGenotech\tGenotech Co., Ltd.\n00:05:97\tEagleTra\tEagle Traffic Control Systems\n00:05:98\tCronosSR\tCRONOS S.r.l.\n00:05:99\tDrsTestA\tDRS Test and Energy Management or DRS-TEM\n00:05:9A\tCisco\tCisco Systems, Inc\n00:05:9B\tCisco\tCisco Systems, Inc\n00:05:9C\tKleinkne\tKleinknecht GmbH, Ing. Büro\n00:05:9D\tDanielCo\tDaniel Computing Systems, Inc.\n00:05:9E\tZinwell\tZinwell Corporation\n00:05:9F\tYottaNet\tYotta Networks, Inc.\n00:05:A0\tMobiline\tMOBILINE Kft.\n00:05:A1\tZenocom\t\n00:05:A2\tCeloxNet\tCELOX Networks\n00:05:A3\tQei\tQEI, Inc.\n00:05:A4\tLucidVoi\tLucid Voice Ltd.\n00:05:A5\tKott\t\n00:05:A6\tExtronEl\tExtron Electronics\n00:05:A7\tHyperchi\tHYPERCHIP Inc.\n00:05:A8\tWyleElec\tWyle Electronics\n00:05:A9\tPrinceto\tPrinceton Networks, Inc.\n00:05:AA\tMooreInd\tMoore Industries International Inc.\n00:05:AB\tCyberFon\tCyber Fone, Inc.\n00:05:AC\tNorthern\tNorthern Digital, Inc.\n00:05:AD\tTopspinC\tTopspin Communications, Inc.\n00:05:AE\tMediapor\tMediaport USA\n00:05:AF\tInnoscan\tInnoScan Computing A/S\n00:05:B0\tKoreaCom\tKorea Computer Technology Co., Ltd.\n00:05:B1\tAsbTechn\tASB Technology BV\n00:05:B2\tMedison\tMedison Co., Ltd.\n00:05:B3\tAsahi-En\tAsahi-Engineering Co., Ltd.\n00:05:B4\tAceex\tAceex Corporation\n00:05:B5\tBroadcom\tBroadcom Technologies\n00:05:B6\tInsysMic\tINSYS Microelectronics GmbH\n00:05:B7\tArborTec\tArbor Technology Corp.\n00:05:B8\tElectron\tElectronic Design Associates, Inc.\n00:05:B9\tAirvana\tAirvana, Inc.\n00:05:BA\tAreaNetw\tArea Netwoeks, Inc.\n00:05:BB\tMyspace\tMyspace AB\n00:05:BC\tResource\tResource Data Management Ltd\n00:05:BD\tRoaxBv\tRoax Bv\n00:05:BE\tKongsber\tKongsberg Seatex AS\n00:05:BF\tJustezyT\tJustEzy Technology, Inc.\n00:05:C0\tDigitalN\tDigital Network Alacarte Co., Ltd.\n00:05:C1\tA-KyungM\tA-Kyung Motion, Inc.\n00:05:C2\tSoronti\tSoronti, Inc.\n00:05:C3\tPacificI\tPacific Instruments, Inc.\n00:05:C4\tTelect\tTelect, Inc.\n00:05:C5\tFlagaHf\tFlaga HF\n00:05:C6\tTrizComm\tTriz Communications\n00:05:C7\tI/F-Com\tI/F-COM A/S\n00:05:C8\tVerytech\t\n00:05:C9\tLgInnote\tLG Innotek Co., Ltd.\n00:05:CA\tHitronTe\tHitron Technology, Inc.\n00:05:CB\tRoisTech\tROIS Technologies, Inc.\n00:05:CC\tSumtelCo\tSumtel Communications, Inc.\n00:05:CD\tD&MHoldi\tD&M Holdings Inc.\n00:05:CE\tProlinkM\tProlink Microsystems Corporation\n00:05:CF\tThunderR\tThunder River Technologies, Inc.\n00:05:D0\tSolinet\tSolinet Systems\n00:05:D1\tMetavect\tMetavector Technologies\n00:05:D2\tDapTechn\tDAP Technologies\n00:05:D3\tEproduct\teProduction Solutions, Inc.\n00:05:D4\tFuturesm\tFutureSmart Networks, Inc.\n00:05:D5\tSpeedcom\tSpeedcom Wireless\n00:05:D6\tL-3Linka\tL-3 Linkabit\n00:05:D7\tVistaIma\tVista Imaging, Inc.\n00:05:D8\tArescom\tArescom, Inc.\n00:05:D9\tTechnoVa\tTechno Valley, Inc.\n00:05:DA\tApexAuto\tApex Automationstechnik\n00:05:DB\tPsiNente\tPSI Nentec GmbH\n00:05:DC\tCisco\tCisco Systems, Inc\n00:05:DD\tCisco\tCisco Systems, Inc\n00:05:DE\tGiFoneKo\tGi Fone Korea, Inc.\n00:05:DF\tElectron\tElectronic Innovation, Inc.\n00:05:E0\tEmpirix\tEmpirix Corp.\n00:05:E1\tTrellisP\tTrellis Photonics, Ltd.\n00:05:E2\tCreativN\tCreativ Network Technologies\n00:05:E3\tLightsan\tLightSand Communications, Inc.\n00:05:E4\tRedLionC\tRed Lion Controls Inc.\n00:05:E5\tRenishaw\tRenishaw PLC\n00:05:E6\tEgenera\tEgenera, Inc.\n00:05:E7\tNetrakeA\tNetrake an AudioCodes Company\n00:05:E8\tTurbowav\tTurboWave, Inc.\n00:05:E9\tUnicessN\tUnicess Network, Inc.\n00:05:EA\tRednix\t\n00:05:EB\tBlueRidg\tBlue Ridge Networks, Inc.\n00:05:EC\tMosaic\tMosaic Systems Inc.\n00:05:ED\tTechniku\tTechnikum Joanneum GmbH\n00:05:EE\tVanderbi\tVanderbilt International (SWE) AB\n00:05:EF\tAdoirDig\tADOIR Digital Technology\n00:05:F0\tSatec\t\n00:05:F1\tVrcom\tVrcom, Inc.\n00:05:F2\tPowerR\tPower R, Inc.\n00:05:F3\tWebyn\t\n00:05:F4\tSystemBa\tSystem Base Co., Ltd.\n00:05:F5\tGeospace\tGeospace Technologies\n00:05:F6\tYoungCha\tYoung Chang Co. Ltd.\n00:05:F7\tAnalogDe\tAnalog Devices, Inc.\n00:05:F8\tRealTime\tReal Time Access, Inc.\n00:05:F9\tToa\tTOA Corporation\n00:05:FA\tIpoptica\tIPOptical, Inc.\n00:05:FB\tSharegat\tShareGate, Inc.\n00:05:FC\tSchenckP\tSchenck Pegasus Corp.\n00:05:FD\tPacketli\tPacketLight Networks Ltd.\n00:05:FE\tTraficon\tTraficon N.V.\n00:05:FF\tSnsSolut\tSNS Solutions, Inc.\n00:06:00\tToshibaT\tToshiba Teli Corporation\n00:06:01\tOtanikei\tOtanikeiki Co., Ltd.\n00:06:02\tCirkitec\tCirkitech Electronics Co.\n00:06:03\tBakerHug\tBaker Hughes Inc.\n00:06:04\t@TrackCo\t@Track Communications, Inc.\n00:06:05\tInncomIn\tInncom International, Inc.\n00:06:06\tRapidwan\tRapidWAN, Inc.\n00:06:07\tOmniDire\tOmni Directional Control Technology Inc.\n00:06:08\tAt-SkySa\tAt-Sky SAS\n00:06:09\tCrosspor\tCrossport Systems\n00:06:0A\tBlue2spa\tBlue2space\n00:06:0B\tArtesynE\tArtesyn Embedded Technologies\n00:06:0C\tMelcoInd\tMelco Industries, Inc.\n00:06:0D\tWave7Opt\tWave7 Optics\n00:06:0E\tIgys\tIGYS Systems, Inc.\n00:06:0F\tNaradNet\tNarad Networks Inc\n00:06:10\tAbeonaNe\tAbeona Networks Inc\n00:06:11\tZeusWire\tZeus Wireless, Inc.\n00:06:12\tAccusys\tAccusys, Inc.\n00:06:13\tKawasaki\tKawasaki Microelectronics Incorporated\n00:06:14\tPrismHol\tPrism Holdings\n00:06:15\tKimotoEl\tKimoto Electric Co., Ltd.\n00:06:16\tTelNet\tTel Net Co., Ltd.\n00:06:17\tRedswitc\tRedswitch Inc.\n00:06:18\tDigipowe\tDigiPower Manufacturing Inc.\n00:06:19\tConnecti\tConnection Technology Systems\n00:06:1A\tZetari\tZetari Inc.\n00:06:1B\tNotebook\tNotebook Development Lab.  Lenovo Japan Ltd.\n00:06:1C\tHoshinoM\tHoshino Metal Industries, Ltd.\n00:06:1D\tMipTelec\tMIP Telecom, Inc.\n00:06:1E\tMaxan\tMaxan Systems\n00:06:1F\tVisionCo\tVision Components GmbH\n00:06:20\tSerialSy\tSerial System Ltd.\n00:06:21\tHinox\tHinox, Co., Ltd.\n00:06:22\tChungFuC\tChung Fu Chen Yeh Enterprise Corp.\n00:06:23\tMgeUpsFr\tMGE UPS Systems France\n00:06:24\tGentnerC\tGentner Communications Corp.\n00:06:25\tLinksysG\tThe Linksys Group, Inc.\n00:06:26\tMwe\tMWE GmbH\n00:06:27\tUniwideT\tUniwide Technologies, Inc.\n00:06:28\tCisco\tCisco Systems, Inc\n00:06:29\tIbmRisc6\tIBM RISC6000 system\n00:06:2A\tCisco\tCisco Systems, Inc\n00:06:2B\tIntraser\tIntraserver Technology\n00:06:2C\tBivioNet\tBivio Networks\n00:06:2D\tTouchsta\tTouchStar Technologies, L.L.C.\n00:06:2E\tAristosL\tAristos Logic Corp.\n00:06:2F\tPivotech\tPivotech Systems Inc.\n00:06:30\tAdtranzS\tAdtranz Sweden\n00:06:31\tCalix\tCalix Inc.\n00:06:32\tMescoEng\tMesco Engineering GmbH\n00:06:33\tCrossMat\tCross Match Technologies GmbH\n00:06:34\tGteAirfo\tGTE Airfone Inc.\n00:06:35\tPacketai\tPacketAir Networks, Inc.\n00:06:36\tJedaiBro\tJedai Broadband Networks\n00:06:37\tToptrend\tToptrend-Meta Information (ShenZhen) Inc.\n00:06:38\tSungjinC\tSungjin C&C Co., Ltd.\n00:06:39\tNewtec\t\n00:06:3A\tDuraMicr\tDura Micro, Inc.\n00:06:3B\tArcturus\tArcturus Networks Inc.\n00:06:3C\tIntrinsy\tIntrinsyc Software International Inc.\n00:06:3D\tMicrowav\tMicrowave Data Systems Inc.\n00:06:3E\tOpthos\tOpthos Inc.\n00:06:3F\tEverexCo\tEverex Communications Inc.\n00:06:40\tWhiteRoc\tWhite Rock Networks\n00:06:41\tItcn\t\n00:06:42\tGenetel\tGenetel Systems Inc.\n00:06:43\tSonoComp\tSONO Computer Co., Ltd.\n00:06:44\tNextgenB\tNextGen Business Solutions, Inc\n00:06:45\tMeiseiEl\tMeisei Electric Co. Ltd.\n00:06:46\tShenzhen\tShenZhen XunBao Network Technology Co Ltd\n00:06:47\tEtraliSA\tEtrali S.A.\n00:06:48\tSeedswar\tSeedsware, Inc.\n00:06:49\t3mDeutsc\t3M Deutschland GmbH\n00:06:4A\tHoneywel\tHoneywell Co., Ltd. (KOREA)\n00:06:4B\tAlexon\tAlexon Co., Ltd.\n00:06:4C\tInvictaN\tInvicta Networks, Inc.\n00:06:4D\tSencore\t\n00:06:4E\tBroadNet\tBroad Net Technology Inc.\n00:06:4F\tPro-Nets\tPRO-NETS Technology Corporation\n00:06:50\tTiburonN\tTiburon Networks, Inc.\n00:06:51\tAspenNet\tAspen Networks Inc.\n00:06:52\tCisco\tCisco Systems, Inc\n00:06:53\tCisco\tCisco Systems, Inc\n00:06:54\tWinpresa\tWinpresa Building Automation Technologies GmbH\n00:06:55\tYipee\tYipee, Inc.\n00:06:56\tTactel\tTactel AB\n00:06:57\tMarketCe\tMarket Central, Inc.\n00:06:58\tHelmutFi\tHelmut Fischer GmbH Institut für Elektronik und Messtechnik\n00:06:59\tEalApeld\tEAL (Apeldoorn) B.V.\n00:06:5A\tStrix\tStrix Systems\n00:06:5B\tDell\tDell Inc.\n00:06:5C\tMalachit\tMalachite Technologies, Inc.\n00:06:5D\tHeidelbe\tHeidelberg Web Systems\n00:06:5E\tPhoturis\tPhoturis, Inc.\n00:06:5F\tEciTelec\tECI Telecom Ltd.\n00:06:60\tNadex\tNADEX Co., Ltd.\n00:06:61\tNiaHomeT\tNIA Home Technologies Corp.\n00:06:62\tMbmTechn\tMBM Technology Ltd.\n00:06:63\tHumanTec\tHuman Technology Co., Ltd.\n00:06:64\tFostex\tFostex Corporation\n00:06:65\tSunnyGik\tSunny Giken, Inc.\n00:06:66\tRovingNe\tRoving Networks\n00:06:67\tTrippLit\tTripp Lite\n00:06:68\tViconInd\tVicon Industries Inc.\n00:06:69\tDatasoun\tDatasound Laboratories Ltd\n00:06:6A\tInfinico\tInfiniCon Systems, Inc.\n00:06:6B\tSysmex\tSysmex Corporation\n00:06:6C\tRobinson\tRobinson Corporation\n00:06:6D\tCompupri\tCompuprint S.P.A.\n00:06:6E\tDeltaEle\tDelta Electronics, Inc.\n00:06:6F\tKoreaDat\tKorea Data Systems\n00:06:70\tUpponett\tUpponetti Oy\n00:06:71\tSofting\tSofting AG\n00:06:72\tNetezza\t\n00:06:73\tTkhSecur\tTKH Security Solutions USA\n00:06:74\tSpectrum\tSpectrum Control, Inc.\n00:06:75\tBanderac\tBanderacom, Inc.\n00:06:76\tNovraTec\tNovra Technologies Inc.\n00:06:77\tSick\tSick Ag\n00:06:78\tD&MHoldi\tD&M Holdings Inc.\n00:06:79\tKonami\tKonami Corporation\n00:06:7A\tJmp\tJMP Systems\n00:06:7B\tToplinkC\tToplink C&C Corporation\n00:06:7C\tCisco\t\n00:06:7D\tTakasago\tTakasago Ltd.\n00:06:7E\tWincom\tWinCom Systems, Inc.\n00:06:7F\tDigeo\tDigeo, Inc.\n00:06:80\tCardAcce\tCard Access, Inc.\n00:06:81\tGoepelEl\tGoepel Electronic GmbH\n00:06:82\tConvedia\t\n00:06:83\tBravaraC\tBravara Communications, Inc.\n00:06:84\tBiacore\tBiacore AB\n00:06:85\tNetnearu\tNetNearU Corporation\n00:06:86\tZardcom\tZARDCOM Co., Ltd.\n00:06:87\tOmnitron\tOmnitron Systems Technology, Inc.\n00:06:88\tTelwaysC\tTelways Communication Co., Ltd.\n00:06:89\tYlezTech\tyLez Technologies Pte Ltd\n00:06:8A\tNeuronne\tNeuronNet Co. Ltd. R&D Center\n00:06:8B\tAirrunne\tAirRunner Technologies, Inc.\n00:06:8C\t3com\t\n00:06:8D\tSepaton\tSEPATON, Inc.\n00:06:8E\tHid\tHID Corporation\n00:06:8F\tTelemoni\tTelemonitor, Inc.\n00:06:90\tEuracomC\tEuracom Communication GmbH\n00:06:91\tPtInovac\tPT Inovacao\n00:06:92\tIntruver\tIntruvert Networks, Inc.\n00:06:93\tFlexusCo\tFlexus Computer Technology, Inc.\n00:06:94\tMobillia\tMobillian Corporation\n00:06:95\tEnsureTe\tEnsure Technologies, Inc.\n00:06:96\tAdventNe\tAdvent Networks\n00:06:97\tRDCenter\tR & D Center\n00:06:98\tEgnite\tegnite GmbH\n00:06:99\tVidaDesi\tVida Design Co.\n00:06:9A\tETel\te & Tel\n00:06:9B\tAvtAudio\tAVT Audio Video Technologies GmbH\n00:06:9C\tTransmod\tTransmode Systems AB\n00:06:9D\tPetards\tPetards Ltd\n00:06:9E\tUniqa\tUNIQA, Inc.\n00:06:9F\tKuokoaNe\tKuokoa Networks\n00:06:A0\tMxImagin\tMx Imaging\n00:06:A1\tCelsianT\tCelsian Technologies, Inc.\n00:06:A2\tMicrotun\tMicrotune, Inc.\n00:06:A3\tBitran\tBitran Corporation\n00:06:A4\tInnowell\tINNOWELL Corp.\n00:06:A5\tPinon\tPINON Corp.\n00:06:A6\tArtistic\tArtistic Licence Engineering Ltd\n00:06:A7\tPrimario\tPrimarion\n00:06:A8\tKcTechno\tKC Technology, Inc.\n00:06:A9\tUniversa\tUniversal Instruments Corp.\n00:06:AA\tVtMiltop\tVT Miltope\n00:06:AB\tW-Link\tW-Link Systems, Inc.\n00:06:AC\tIntersof\tIntersoft Co.\n00:06:AD\tKbElectr\tKB Electronics Ltd.\n00:06:AE\tHimachal\tHimachal Futuristic Communications Ltd\n00:06:AF\tXaltedNe\tXalted Networks\n00:06:B0\tComtechE\tComtech EF Data Corp.\n00:06:B1\tSonicwal\tSonicwall\n00:06:B2\tLinxtek\tLinxtek Co.\n00:06:B3\tDiagraph\tDiagraph Corporation\n00:06:B4\tVorneInd\tVorne Industries, Inc.\n00:06:B5\tSourcePh\tSource Photonics, Inc.\n00:06:B6\tNir-OrIs\tNir-Or Israel Ltd.\n00:06:B7\tTelem\tTELEM GmbH\n00:06:B8\tBandspee\tBandspeed Pty Ltd\n00:06:B9\tA5tek\tA5TEK Corp.\n00:06:BA\tWestwave\tWestwave Communications\n00:06:BB\tAtiTechn\tATI Technologies Inc.\n00:06:BC\tMacrolin\tMacrolink, Inc.\n00:06:BD\tBntechno\tBNTECHNOLOGY Co., Ltd.\n00:06:BE\tBaumerOp\tBaumer Optronic GmbH\n00:06:BF\tAccellaT\tAccella Technologies Co., Ltd.\n00:06:C0\tUnitedIn\tUnited Internetworks, Inc.\n00:06:C1\tCisco\t\n00:06:C2\tSmartmat\tSmartmatic Corporation\n00:06:C3\tSchindle\tSchindler Elevator Ltd.\n00:06:C4\tPiolink\tPiolink Inc.\n00:06:C5\tInnoviTe\tINNOVI Technologies Limited\n00:06:C6\tLesswire\tlesswire AG\n00:06:C7\tRfnetTec\tRFNET Technologies Pte Ltd (S)\n00:06:C8\tSumitomo\tSumitomo Metal Micro Devices, Inc.\n00:06:C9\tTechnica\tTechnical Marketing Research, Inc.\n00:06:CA\tAmerican\tAmerican Computer & Digital Components, Inc. (ACDC)\n00:06:CB\tJotronEl\tJotron Electronics A/S\n00:06:CC\tJmiElect\tJMI Electronics Co., Ltd.\n00:06:CD\tLeafImag\tLeaf Imaging Ltd.\n00:06:CE\tDateno\t\n00:06:CF\tThalesAv\tThales Avionics In-Flight Systems, LLC\n00:06:D0\tElgarEle\tElgar Electronics Corp.\n00:06:D1\tTahoeNet\tTahoe Networks, Inc.\n00:06:D2\tTundraSe\tTundra Semiconductor Corp.\n00:06:D3\tAlphaTel\tAlpha Telecom, Inc. U.S.A.\n00:06:D4\tInteract\tInteractive Objects, Inc.\n00:06:D5\tDiamond\tDiamond Systems Corp.\n00:06:D6\tCisco\tCisco Systems, Inc\n00:06:D7\tCisco\tCisco Systems, Inc\n00:06:D8\tMapleOpt\tMaple Optical Systems\n00:06:D9\tIpm-NetS\tIPM-Net S.p.A.\n00:06:DA\tItranCom\tITRAN Communications Ltd.\n00:06:DB\tIchips\tICHIPS Co., Ltd.\n00:06:DC\tSyabasTe\tSyabas Technology (Amquest)\n00:06:DD\tAtTLabor\tAT & T Laboratories - Cambridge Ltd\n00:06:DE\tFlashTec\tFlash Technology\n00:06:DF\tAidonic\tAIDONIC Corporation\n00:06:E0\tMat\tMAT Co., Ltd.\n00:06:E1\tTechnoTr\tTechno Trade s.a\n00:06:E2\tCeemaxTe\tCeemax Technology Co., Ltd.\n00:06:E3\tQuantita\tQuantitative Imaging Corporation\n00:06:E4\tCitelTec\tCitel Technologies Ltd.\n00:06:E5\tFujianNe\tFujian Newland Computer Ltd. Co.\n00:06:E6\tDongyang\tDongYang Telecom Co., Ltd.\n00:06:E7\tBitBlitz\tBit Blitz Communications Inc.\n00:06:E8\tOpticalN\tOptical Network Testing, Inc.\n00:06:E9\tIntime\tIntime Corp.\n00:06:EA\tElzet80M\tELZET80 Mikrocomputer GmbH&Co. KG\n00:06:EB\tGlobalDa\tGlobal Data\n00:06:EC\tHarris\tHarris Corporation\n00:06:ED\tInaraNet\tInara Networks\n00:06:EE\tShenyang\tShenyang Neu-era Information & Technology Stock Co., Ltd\n00:06:EF\tMaxxan\tMaxxan Systems, Inc.\n00:06:F0\tDigeo\tDigeo, Inc.\n00:06:F1\tOptillio\tOptillion\n00:06:F2\tPlatysCo\tPlatys Communications\n00:06:F3\tAcceligh\tAcceLight Networks\n00:06:F4\tPrimeEle\tPrime Electronics & Satellitics Inc.\n00:06:F5\tAlpsElec\tAlps Electric Co.,Ltd.\n00:06:F6\tCisco\tCisco Systems, Inc\n00:06:F7\tAlpsElec\tAlps Electric Co.,Ltd.\n00:06:F8\tBoeing\tThe Boeing Company\n00:06:F9\tMitsuiZo\tMitsui Zosen Systems Research Inc.\n00:06:FA\tIpSquare\tIP SQUARE Co, Ltd.\n00:06:FB\tHitachiP\tHitachi Printing Solutions, Ltd.\n00:06:FC\tFnet\tFnet Co., Ltd.\n00:06:FD\tComjetIn\tComjet Information Systems Corp.\n00:06:FE\tAmbrado\tAmbrado, Inc\n00:06:FF\tSheba\tSheba Systems Co., Ltd.\n00:07:00\tZettamed\tZettamedia Korea\n00:07:01\tCisco\t\n00:07:02\tVarianMe\tVarian Medical Systems\n00:07:03\tCseeTran\tCSEE Transport\n00:07:04\tAlpsElec\tAlps Electric Co.,Ltd.\n00:07:05\tEndressH\tEndress & Hauser GmbH & Co\n00:07:06\tSanritz\tSanritz Corporation\n00:07:07\tInterali\tInteralia Inc.\n00:07:08\tBitrage\tBitrage Inc.\n00:07:09\tWesterst\tWesterstrand Urfabrik AB\n00:07:0A\tUnicomAu\tUnicom Automation Co., Ltd.\n00:07:0B\tNovabase\tNovabase SGPS, SA\n00:07:0C\tSva-Intr\tSVA-Intrusion.com Co. Ltd.\n00:07:0D\tCisco251\tCisco\n00:07:0E\tCisco\tCisco Systems, Inc\n00:07:0F\tFujant\tFujant, Inc.\n00:07:10\tAdax\tAdax, Inc.\n00:07:11\tActerna\t\n00:07:12\tJalInfor\tJAL Information Technology\n00:07:13\tIpOne\tIP One, Inc.\n00:07:14\tBrightco\tBrightcom\n00:07:15\tGeneralR\tGeneral Research of Electronics, Inc.\n00:07:16\tJSMarine\tJ & S Marine Ltd.\n00:07:17\tWielandE\tWieland Electric GmbH\n00:07:18\tIcantek\tiCanTek Co., Ltd.\n00:07:19\tMobiis\tMobiis Co., Ltd.\n00:07:1A\tFinedigi\tFinedigital Inc.\n00:07:1B\tCdviAmer\tCDVI Americas Ltd\n00:07:1C\tAt&T\t\n00:07:1D\tSatelsaS\tSatelsa Sistemas Y Aplicaciones De Telecomunicaciones, S.A.\n00:07:1E\tTri-MEng\tTri-M Engineering / Nupak Dev. Corp.\n00:07:1F\tEuropean\tEuropean Systems Integration\n00:07:20\tTrutzsch\tTrutzschler GmbH & Co. KG\n00:07:21\tFormacEl\tFormac Elektronik GmbH\n00:07:22\tNielsen\tThe Nielsen Company\n00:07:23\tElconSys\tELCON Systemtechnik GmbH\n00:07:24\tTelemax\tTelemax Co., Ltd.\n00:07:25\tBematech\tBematech International Corp.\n00:07:26\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\n00:07:27\tZiHk\tZi Corporation (HK) Ltd.\n00:07:28\tNeoTelec\tNeo Telecom\n00:07:29\tKistlerI\tKistler Instrumente AG\n00:07:2A\tInnovanc\tInnovance Networks\n00:07:2B\tJungMyun\tJung Myung Telecom Co., Ltd.\n00:07:2C\tFabricom\t\n00:07:2D\tCnsystem\tCNSystems\n00:07:2E\tNorthNod\tNorth Node AB\n00:07:2F\tIntransa\tIntransa, Inc.\n00:07:30\tHutchiso\tHutchison OPTEL Telecom Technology Co., Ltd.\n00:07:31\tOphir-Sp\tOphir-Spiricon LLC\n00:07:32\tAaeonTec\tAAEON Technology Inc.\n00:07:33\tDancontr\tDANCONTROL Engineering\n00:07:34\tOnstor\tONStor, Inc.\n00:07:35\tFlarionT\tFlarion Technologies, Inc.\n00:07:36\tDataVide\tData Video Technologies Co., Ltd.\n00:07:37\tSoriya\tSoriya Co. Ltd.\n00:07:38\tYoungTec\tYoung Technology Co., Ltd.\n00:07:39\tScottyGr\tScotty Group Austria Gmbh\n00:07:3A\tInventel\t\n00:07:3B\tTenovis\tTenovis GmbH & Co KG\n00:07:3C\tTelecomD\tTelecom Design\n00:07:3D\tNanjingP\tNanjing Postel Telecommunications Co., Ltd.\n00:07:3E\tChinaGre\tChina Great-Wall Computer Shenzhen Co., Ltd.\n00:07:3F\tWoojyunS\tWoojyun Systec Co., Ltd.\n00:07:40\tBuffalo\tBuffalo.Inc\n00:07:41\tSierraAu\tSierra Automated Systems\n00:07:42\tOrmazaba\tOrmazabal\n00:07:43\tChelsioC\tChelsio Communications\n00:07:44\tUnico\tUnico, Inc.\n00:07:45\tRadlanCo\tRadlan Computer Communications Ltd.\n00:07:46\tTurck\tTURCK, Inc.\n00:07:47\tMecalc\t\n00:07:48\tImagingS\tThe Imaging Source Europe\n00:07:49\tCenix\tCENiX Inc.\n00:07:4A\tCarlVale\tCarl Valentin GmbH\n00:07:4B\tDaihen\tDaihen Corporation\n00:07:4C\tBeicom\tBeicom Inc.\n00:07:4D\tZebraTec\tZebra Technologies Corp.\n00:07:4E\tIpfront\tIPFRONT Inc\n00:07:4F\tCisco\tCisco Systems, Inc\n00:07:50\tCisco\tCisco Systems, Inc\n00:07:51\tM-U-T\tm-u-t AG\n00:07:52\tRhythmWa\tRhythm Watch Co., Ltd.\n00:07:53\tBeijingQ\tBeijing Qxcomm Technology Co., Ltd.\n00:07:54\tXyterraC\tXyterra Computing, Inc.\n00:07:55\tLafon\t\n00:07:56\tJuyoungT\tJuyoung Telecom\n00:07:57\tTopcallI\tTopcall International AG\n00:07:58\tDragonwa\tDragonwave\n00:07:59\tBorisMan\tBoris Manufacturing Corp.\n00:07:5A\tAirProdu\tAir Products and Chemicals, Inc.\n00:07:5B\tGibsonGu\tGibson Guitars\n00:07:5C\tEastmanK\tEastman Kodak Company\n00:07:5D\tCellerit\tCelleritas Inc.\n00:07:5E\tAmetekPo\tAmetek Power Instruments\n00:07:5F\tVcsVideo\tVCS Video Communication Systems AG\n00:07:60\tTomisInf\tTOMIS Information & Telecom Corp.\n00:07:61\t29530\t\n00:07:62\tGroupSen\tGroup Sense Limited\n00:07:63\tSunniwel\tSunniwell Cyber Tech. Co., Ltd.\n00:07:64\tYoungwoo\tYoungWoo Telecom Co. Ltd.\n00:07:65\tJadeQuan\tJade Quantum Technologies, Inc.\n00:07:66\tChouChin\tChou Chin Industrial Co., Ltd.\n00:07:67\tYuxingEl\tYuxing Electronics Company Limited\n00:07:68\tDanfoss\tDanfoss A/S\n00:07:69\tItaliana\tItaliana Macchi SpA\n00:07:6A\tNexteye\tNEXTEYE Co., Ltd.\n00:07:6B\tStralfor\tStralfors AB\n00:07:6C\tDaehanet\tDaehanet, Inc.\n00:07:6D\tFlexligh\tFlexlight Networks\n00:07:6E\tSinetica\tSinetica Corporation Limited\n00:07:6F\tSynoptic\tSynoptics Limited\n00:07:70\tUbiquoss\tUbiquoss Inc\n00:07:71\tEmbedded\tEmbedded System Corporation\n00:07:72\tAlcatel-\tAlcatel-Lucent Shanghai Bell Co., Ltd\n00:07:73\tAscomPow\tAscom Powerline Communications Ltd.\n00:07:74\tGuangzho\tGuangZhou Thinker Technology Co. Ltd.\n00:07:75\tValenceS\tValence Semiconductor, Inc.\n00:07:76\tFederalA\tFederal APD\n00:07:77\tMotah\tMotah Ltd.\n00:07:78\tGerstel\tGERSTEL GmbH & Co. KG\n00:07:79\tSungilTe\tSungil Telecom Co., Ltd.\n00:07:7A\tInfoware\tInfoware System Co., Ltd.\n00:07:7B\tMillimet\tMillimetrix Broadband Networks\n00:07:7C\tWestermo\tWestermo Teleindustri AB\n00:07:7D\tCisco\tCisco Systems, Inc\n00:07:7E\tElrest\tElrest GmbH\n00:07:7F\tJCommuni\tJ Communications Co., Ltd.\n00:07:80\tBluegiga\tBluegiga Technologies OY\n00:07:81\tItron\tItron Inc.\n00:07:82\tOracle\tOracle Corporation\n00:07:83\tSyncomNe\tSynCom Network, Inc.\n00:07:84\tCisco\tCisco Systems, Inc\n00:07:85\tCisco\tCisco Systems, Inc\n00:07:86\tWireless\tWireless Networks Inc.\n00:07:87\tIdeaSyst\tIdea System Co., Ltd.\n00:07:88\tClipcomm\tClipcomm, Inc.\n00:07:89\tDongwon\tDongwon Systems\n00:07:8A\tMentorDa\tMentor Data System Inc.\n00:07:8B\tWegenerC\tWegener Communications, Inc.\n00:07:8C\tElektron\tElektronikspecialisten i Borlange AB\n00:07:8D\tNetengin\tNetEngines Ltd.\n00:07:8E\tGarzFric\tGarz & Friche GmbH\n00:07:8F\tEmkayInn\tEmkay Innovative Products\n00:07:90\tTri-MTec\tTri-M Technologies (s) Limited\n00:07:91\tInternat\tInternational Data Communications, Inc.\n00:07:92\tSütronEl\tSütron Electronic GmbH\n00:07:93\tShinSate\tShin Satellite Public Company Limited\n00:07:94\tSimpleDe\tSimple Devices, Inc.\n00:07:95\tElitegro\tElitegroup Computer Systems Co.,Ltd.\n00:07:96\tLsi\tLSI Systems, Inc.\n00:07:97\tNetpower\tNetpower Co., Ltd.\n00:07:98\tSeleaSrl\tSelea SRL\n00:07:99\tTippingPoint\tTippingPoint Technologies, Inc.\n00:07:9A\tVerint\tVerint Systems Inc\n00:07:9B\tAuroraNe\tAurora Networks\n00:07:9C\tGoldenEl\tGolden Electronics Technology Co., Ltd.\n00:07:9D\tMusashi\tMusashi Co., Ltd.\n00:07:9E\tIlinx\tIlinx Co., Ltd.\n00:07:9F\tActionDi\tAction Digital Inc.\n00:07:A0\tE-Watch\te-Watch Inc.\n00:07:A1\tViasysHe\tVIASYS Healthcare GmbH\n00:07:A2\tOpteon\tOpteon Corporation\n00:07:A3\tOsitisSo\tOsitis Software, Inc.\n00:07:A4\tGnNetcom\tGN Netcom Ltd.\n00:07:A5\tYDK\tY.D.K Co. Ltd.\n00:07:A6\tLevitonM\tLeviton Manufacturing Co., Inc.\n00:07:A7\tA-Z\tA-Z Inc.\n00:07:A8\tHaierGro\tHaier Group Technologies Ltd\n00:07:A9\tNovasoni\tNovasonics\n00:07:AA\tQuantumD\tQuantum Data Inc.\n00:07:AB\tSamsungE\tSamsung Electronics Co.,Ltd\n00:07:AC\tEolring\t\n00:07:AD\tPentacon\tPentacon GmbH Foto-und Feinwerktechnik\n00:07:AE\tBritestr\tBritestream Networks, Inc.\n00:07:AF\tRedLionC\tRed Lion Controls, LP\n00:07:B0\tOfficeDe\tOffice Details, Inc.\n00:07:B1\tEquatorT\tEquator Technologies\n00:07:B2\tTransacc\tTransaccess S.A.\n00:07:B3\tCisco\tCisco Systems, Inc\n00:07:B4\tCisco\tCisco Systems, Inc\n00:07:B5\tAnyOneWi\tAny One Wireless Ltd.\n00:07:B6\tTelecomT\tTelecom Technology Ltd.\n00:07:B7\tSamuraiI\tSamurai Ind. Prods Eletronicos Ltda\n00:07:B8\tCorvalen\tCorvalent Corporation\n00:07:B9\tGinganet\tGinganet Corporation\n00:07:BA\tUtstarco\tUTStarcom Inc\n00:07:BB\tCandera\tCandera Inc.\n00:07:BC\tIdentix\tIdentix Inc.\n00:07:BD\tRadionet\tRadionet Ltd.\n00:07:BE\tDatalogi\tDataLogic SpA\n00:07:BF\tArmillai\tArmillaire Technologies, Inc.\n00:07:C0\tNetzerve\tNetZerver Inc.\n00:07:C1\tOverture\tOverture Networks, Inc.\n00:07:C2\tNetsysTe\tNetsys Telecom\n00:07:C3\tThomson\t\n00:07:C4\tJean\tJEAN Co. Ltd.\n00:07:C5\tGcom\tGcom, Inc.\n00:07:C6\tVdsVossk\tVDS Vosskuhler GmbH\n00:07:C7\tSynectic\tSynectics Systems Limited\n00:07:C8\tBrain21\tBrain21, Inc.\n00:07:C9\tTechnolS\tTechnol Seven Co., Ltd.\n00:07:CA\tCreatixP\tCreatix Polymedia Ges Fur Kommunikaitonssysteme\n00:07:CB\tFreeboxS\tFreebox Sas\n00:07:CC\tKabaBenz\tKaba Benzing GmbH\n00:07:CD\tKumohEle\tKumoh Electronic Co, Ltd\n00:07:CE\tCabletim\tCabletime Limited\n00:07:CF\tAnoto\tAnoto AB\n00:07:D0\tAutomatE\tAutomat Engenharia de Automação Ltda.\n00:07:D1\tSpectrum\tSpectrum Signal Processing Inc.\n00:07:D2\tLogopakS\tLogopak Systeme GmbH & Co. KG\n00:07:D3\tSpgprint\tSPGPrints B.V.\n00:07:D4\tZhejiang\tZhejiang Yutong Network Communication Co Ltd.\n00:07:D5\t3eTechno\t3e Technologies Int;., Inc.\n00:07:D6\tCommil\tCommil Ltd.\n00:07:D7\tCaporisN\tCaporis Networks AG\n00:07:D8\tHitronTe\tHitron Technologies. Inc\n00:07:D9\tSpliceco\tSplicecom\n00:07:DA\tNeuroTel\tNeuro Telecom Co., Ltd.\n00:07:DB\tKiranaNe\tKirana Networks, Inc.\n00:07:DC\tAtek\tAtek Co, Ltd.\n00:07:DD\tCradleTe\tCradle Technologies\n00:07:DE\tEcopilt\teCopilt AB\n00:07:DF\tVbrick\tVbrick Systems Inc.\n00:07:E0\tPalm\tPalm Inc.\n00:07:E1\tWisCommu\tWIS Communications Co. Ltd.\n00:07:E2\tBitworks\tBitworks, Inc.\n00:07:E3\tNavcomTe\tNavcom Technology, Inc.\n00:07:E4\tSoftradi\tSoftRadio Co., Ltd.\n00:07:E5\tCoup\tCoup Corporation\n00:07:E6\tEdgeflow\tedgeflow Canada Inc.\n00:07:E7\tFreewave\tFreeWave Technologies\n00:07:E8\tEdgewave\t\n00:07:E9\tIntel\tIntel Corporation\n00:07:EA\tMassana\tMassana, Inc.\n00:07:EB\tCisco\tCisco Systems, Inc\n00:07:EC\tCisco\tCisco Systems, Inc\n00:07:ED\tAltera\tAltera Corporation\n00:07:EE\tTelcoInf\ttelco Informationssysteme GmbH\n00:07:EF\tLockheed\tLockheed Martin Tactical Systems\n00:07:F0\tLogisync\tLogiSync LLC\n00:07:F1\tTeraburs\tTeraBurst Networks Inc.\n00:07:F2\tIoa\tIOA Corporation\n00:07:F3\tThinkeng\tThinkengine Networks\n00:07:F4\tEletex\tEletex Co., Ltd.\n00:07:F5\tBridgeco\tBridgeco Co AG\n00:07:F6\tQqestSof\tQqest Software Systems\n00:07:F7\tGaltroni\tGaltronics\n00:07:F8\tItdevice\tITDevices, Inc.\n00:07:F9\tSensapho\tSensaphone\n00:07:FA\tItt\tITT Co., Ltd.\n00:07:FB\tGigaStre\tGiga Stream UMTS Technologies GmbH\n00:07:FC\tAdept\tAdept Systems Inc.\n00:07:FD\tLanergy\tLANergy Ltd.\n00:07:FE\tRigaku\tRigaku Corporation\n00:07:FF\tGluonNet\tGluon Networks\n00:08:00\tMultitec\tMultitech Systems, Inc.\n00:08:01\tHighspee\tHighSpeed Surfing Inc.\n00:08:02\tHewlettP\tHewlett Packard\n00:08:03\tCosTron\tCos Tron\n00:08:04\tIca\tICA Inc.\n00:08:05\tTechno-H\tTechno-Holon Corporation\n00:08:06\tRaonet\tRaonet Systems, Inc.\n00:08:07\tAccessDe\tAccess Devices Limited\n00:08:08\tPptVisio\tPPT Vision, Inc.\n00:08:09\tSystemon\tSystemonic AG\n00:08:0A\tEspera-W\tEspera-Werke GmbH\n00:08:0B\tBirkaBpa\tBirka BPA Informationssystem AB\n00:08:0C\tVdaElett\tVDA Elettronica spa\n00:08:0D\tToshiba\t\n00:08:0E\tArrisGro\tARRIS Group, Inc.\n00:08:0F\tProximio\tProximion Fiber Optics AB\n00:08:10\tKeyTechn\tKey Technology, Inc.\n00:08:11\tVoix\tVOIX Corporation\n00:08:12\tGm-2\tGM-2 Corporation\n00:08:13\tDiskbank\tDiskbank, Inc.\n00:08:14\tTilTechn\tTIL Technologies\n00:08:15\tCats\tCATS Co., Ltd.\n00:08:16\tBluelonA\tBluelon ApS\n00:08:17\tEmergeco\tEmergeCore Networks LLC\n00:08:18\tPixelwor\tPixelworks, Inc.\n00:08:19\tBanksys\t\n00:08:1A\tSanradIn\tSanrad Intelligence Storage Communications (2000) Ltd.\n00:08:1B\tWindigo\tWindigo Systems\n00:08:1C\t@PosCom\t@pos.com\n00:08:1D\tIpsil\tIpsil, Incorporated\n00:08:1E\tRepeatit\tRepeatit AB\n00:08:1F\tPouYuenT\tPou Yuen Tech Corp. Ltd.\n00:08:20\tCisco\tCisco Systems, Inc\n00:08:21\tCisco\tCisco Systems, Inc\n00:08:22\tInproCom\tInPro Comm\n00:08:23\tTexa\tTexa Corp.\n00:08:24\tNuanceDo\tNuance Document Imaging\n00:08:25\tAcmePack\tAcme Packet\n00:08:26\tColorado\tColorado Med Tech\n00:08:27\tAdbBroad\tADB Broadband Italia\n00:08:28\tKoeiEngi\tKoei Engineering Ltd.\n00:08:29\tAvalNaga\tAval Nagasaki Corporation\n00:08:2A\tPowerwal\tPowerwallz Network Security\n00:08:2B\tWooksung\tWooksung Electronics, Inc.\n00:08:2C\tHomag\tHomag AG\n00:08:2D\tIndusTeq\tIndus Teqsite Private Limited\n00:08:2E\tMultiton\tMultitone Electronics PLC\n00:08:2F\tCisco\tCisco Systems, Inc\n00:08:30\tCisco\tCisco Systems, Inc\n00:08:31\tCisco\tCisco Systems, Inc\n00:08:32\tCisco\tCisco Systems, Inc\n00:08:4E\tDivergen\tDivergeNet, Inc.\n00:08:4F\tQualstar\tQualstar Corporation\n00:08:50\tArizonaI\tArizona Instrument Corp.\n00:08:51\tCanadian\tCanadian Bank Note Company, Ltd.\n00:08:52\tDavolink\tDavolink Co. Inc.\n00:08:53\tSchleich\tSchleicher GmbH & Co. Relaiswerke KG\n00:08:54\tNetronix\tNetronix, Inc.\n00:08:55\tNasa-God\tNASA-Goddard Space Flight Center\n00:08:56\tGamatron\tGamatronic Electronic Industries Ltd.\n00:08:57\tPolarisN\tPolaris Networks, Inc.\n00:08:58\tNovatech\tNovatechnology Inc.\n00:08:59\tShenzhen\tShenZhen Unitone Electronics Co., Ltd.\n00:08:5A\tIntigate\tIntiGate Inc.\n00:08:5B\tHanbitEl\tHanbit Electronics Co., Ltd.\n00:08:5C\tShanghai\tShanghai Dare Technologies Co. Ltd.\n00:08:5D\tAastra\t\n00:08:5E\tPco\tPco Ag\n00:08:5F\tPicanolN\tPicanol N.V.\n00:08:60\tLodgenet\tLodgeNet Entertainment Corp.\n00:08:61\tSoftener\tSoftEnergy Co., Ltd.\n00:08:62\tNecElumi\tNEC Eluminant Technologies, Inc.\n00:08:63\tEntrisph\tEntrisphere Inc.\n00:08:64\tFasySPA\tFasy S.p.A.\n00:08:65\tJascom\tJascom Co., Ltd\n00:08:66\tDsxAcces\tDSX Access Systems, Inc.\n00:08:67\tUptimeDe\tUptime Devices\n00:08:68\tPuroptix\t\n00:08:69\tCommand-\tCommand-e Technology Co.,Ltd.\n00:08:6A\tSecurito\tSecuriton Gmbh\n00:08:6B\tMipsys\t\n00:08:6C\tPlasmonL\tPlasmon LMS\n00:08:6D\tMissouri\tMissouri FreeNet\n00:08:6E\tHyglo\tHyglo AB\n00:08:6F\tResource\tResources Computer Network Ltd.\n00:08:70\tRasvia\tRasvia Systems, Inc.\n00:08:71\tNorthdat\tNORTHDATA Co., Ltd.\n00:08:72\tSorenson\tSorenson Communications\n00:08:73\tDaptechn\tDapTechnology B.V.\n00:08:74\tDell\tDell Inc.\n00:08:75\tAcorpEle\tAcorp Electronics Corp.\n00:08:76\tSdsystem\t\n00:08:77\tLiebert-\tLiebert-Hiross Spa\n00:08:78\tBenchmar\tBenchmark Storage Innovations\n00:08:79\tCem\tCEM Corporation\n00:08:7A\tWipotec\tWipotec GmbH\n00:08:7B\tRtxTelec\tRTX Telecom A/S\n00:08:7C\tCisco\tCisco Systems, Inc\n00:08:7D\tCisco\tCisco Systems, Inc\n00:08:7E\tBonElect\tBon Electro-Telecom Inc.\n00:08:7F\tSpaunEle\tSPAUN electronic GmbH & Co. KG\n00:08:80\tBroadtel\tBroadTel Canada Communications inc.\n00:08:81\tDigitalH\tDigital Hands Co.,Ltd.\n00:08:82\tSigma\tSigma Corporation\n00:08:83\tHewlettP\tHewlett Packard\n00:08:84\tIndexBra\tIndex Braille AB\n00:08:85\tEmsDrTho\tEMS Dr. Thomas Wünsche\n00:08:86\tHansungT\tHansung Teliann, Inc.\n00:08:87\tMaschine\tMaschinenfabrik Reinhausen GmbH\n00:08:88\tOullimIn\tOULLIM Information Technology Inc,.\n00:08:89\tDishTech\tDish Technologies Corp\n00:08:8A\tMinds@Wo\tMinds@Work\n00:08:8B\tTropicNe\tTropic Networks Inc.\n00:08:8C\tQuantaNe\tQuanta Network Systems Inc.\n00:08:8D\tSigma-Li\tSigma-Links Inc.\n00:08:8E\tNihonCom\tNihon Computer Co., Ltd.\n00:08:8F\tAdvanced\tAdvanced Digital Technology\n00:08:90\tAvilinks\tAvilinks Sa\n00:08:91\tLyan\tLyan Inc.\n00:08:92\tEmSoluti\tEM Solutions\n00:08:93\tLeInform\tLe Information Communication Inc.\n00:08:94\tInnovisi\tInnoVISION Multimedia Ltd.\n00:08:95\tDircTech\tDIRC Technologie GmbH & Co.KG\n00:08:96\tPrintron\tPrintronix, Inc.\n00:08:97\tQuakeTec\tQuake Technologies\n00:08:98\tGigabitO\tGigabit Optics Corporation\n00:08:99\tNetbind\tNetbind, Inc.\n00:08:9A\tAlcatelM\tAlcatel Microelectronics\n00:08:9B\tIcpElect\tICP Electronics Inc.\n00:08:9C\tElecsInd\tElecs Industry Co., Ltd.\n00:08:9D\tUhd-Elek\tUHD-Elektronik\n00:08:9E\tBeijingE\tBeijing Enter-Net co.LTD\n00:08:9F\tEfmNetwo\tEFM Networks\n00:08:A0\tStotzFei\tStotz Feinmesstechnik GmbH\n00:08:A1\tCnetTech\tCNet Technology Inc.\n00:08:A2\tAdiEngin\tADI Engineering, Inc.\n00:08:A3\tCisco\tCisco Systems, Inc\n00:08:A4\tCisco\tCisco Systems, Inc\n00:08:A5\tPeninsul\tPeninsula Systems Inc.\n00:08:A6\tMultiwar\tMultiware & Image Co., Ltd.\n00:08:A7\tIlogic\tiLogic Inc.\n00:08:A8\tSystec\tSystec Co., Ltd.\n00:08:A9\tSangsang\tSangSang Technology, Inc.\n00:08:AA\tKaram\t\n00:08:AB\tEnerlinx\tEnerLinx.com, Inc.\n00:08:AC\tEltromat\tEltromat GmbH\n00:08:AD\tToyo-Lin\tToyo-Linx Co., Ltd.\n00:08:AE\tPacketfr\tPacketFront Network Products AB\n00:08:AF\tNovatec\tNovatec Corporation\n00:08:B0\tBktelCom\tBKtel communications GmbH\n00:08:B1\tProquent\tProQuent Systems\n00:08:B2\tShenzhen\tShenzhen Compass Technology Development Co.,Ltd\n00:08:B3\tFastwel\t\n00:08:B4\tSyspol\t\n00:08:B5\tTaiGuenE\tTai Guen Enterprise Co., Ltd\n00:08:B6\tRoutefre\tRouteFree, Inc.\n00:08:B7\tHit\tHIT Incorporated\n00:08:B8\tEFJohnso\tE.F. Johnson\n00:08:B9\tKaonmedi\tKaonmedia CO., LTD.\n00:08:BA\tErskine\tErskine Systems Ltd\n00:08:BB\tNetexcel\tNetExcell\n00:08:BC\tIlevo\tIlevo AB\n00:08:BD\tTepg-Us\t\n00:08:BE\tXenpakMs\tXENPAK MSA Group\n00:08:BF\tAptusEle\tAptus Elektronik AB\n00:08:C0\tAsa\tAsa Systems\n00:08:C1\tAvistarC\tAvistar Communications Corporation\n00:08:C2\tCisco\tCisco Systems, Inc\n00:08:C3\tContex\tContex A/S\n00:08:C4\tHikari\tHikari Co.,Ltd.\n00:08:C5\tLiontech\tLiontech Co., Ltd.\n00:08:C6\tPhilipsC\tPhilips Consumer Communications\n00:08:C7\tHewlettP\tHewlett Packard\n00:08:C8\tSonetico\tSoneticom, Inc.\n00:08:C9\tTechnisa\tTechniSat Digital GmbH Daun\n00:08:CA\tTwinhanT\tTwinHan Technology Co.,Ltd\n00:08:CB\tZetaBroa\tZeta Broadband Inc.\n00:08:CC\tRemotec\tRemotec, Inc.\n00:08:CD\tWith-Net\tWith-Net Inc\n00:08:CE\tIpmobile\tIPMobileNet Inc.\n00:08:CF\tNipponKo\tNippon Koei Power Systems Co., Ltd.\n00:08:D0\tMusashiE\tMusashi Engineering Co., LTD.\n00:08:D1\tKarel\tKarel Inc.\n00:08:D2\tZoomNetw\tZOOM Networks Inc.\n00:08:D3\tHercules\tHercules Technologies S.A.S.\n00:08:D4\tIneoques\tIneoQuest Technologies, Inc\n00:08:D5\tVanguard\tVanguard Networks Solutions, LLC\n00:08:D6\tHassnet\tHASSNET Inc.\n00:08:D7\tHow\tHow Corporation\n00:08:D8\tDowkeyMi\tDowkey Microwave\n00:08:D9\tMitadens\tMitadenshi Co.,LTD\n00:08:DA\tSofaware\tSofaWare Technologies Ltd.\n00:08:DB\tCorrigen\tCorrigent Systems\n00:08:DC\tWiznet\t\n00:08:DD\tTelenaCo\tTelena Communications, Inc.\n00:08:DE\t3up\t3UP Systems\n00:08:DF\tAlistel\tAlistel Inc.\n00:08:E0\tAtoTechn\tATO Technology Ltd.\n00:08:E1\tBarix\tBarix AG\n00:08:E2\tCisco\tCisco Systems, Inc\n00:08:E3\tCisco\tCisco Systems, Inc\n00:08:E4\tEnvenerg\tEnvenergy Inc\n00:08:E5\tIdk\tIDK Corporation\n00:08:E6\tLittlefe\tLittlefeet\n00:08:E7\tShiContr\tSHI ControlSystems,Ltd.\n00:08:E8\tExcelMas\tExcel Master Ltd.\n00:08:E9\tNextgig\t\n00:08:EA\tMotionCo\tMotion Control Engineering, Inc\n00:08:EB\tRomwin\tROMWin Co.,Ltd.\n00:08:EC\tOpticalZ\tOptical Zonu Corporation\n00:08:ED\tSt&TInst\tST&T Instrument Corp.\n00:08:EE\tLogicPro\tLogic Product Development\n00:08:EF\tDibalSA\tDibal,S.A.\n00:08:F0\tNextGene\tNext Generation Systems, Inc.\n00:08:F1\tVoltaire\t\n00:08:F2\tC&STechn\tC&S Technology\n00:08:F3\tWany\t\n00:08:F4\tBluetake\tBluetake Technology Co., Ltd.\n00:08:F5\tYestechn\tYESTECHNOLOGY Co.,Ltd.\n00:08:F6\tSumitomo\tSumitomo Electric Industries,Ltd\n00:08:F7\tHitachiS\tHitachi Ltd, Semiconductor & Integrated Circuits Gr\n00:08:F8\tUtcCcs\tUtc Ccs\n00:08:F9\tArtesynE\tArtesyn Embedded Technologies\n00:08:FA\tKebAutom\tKEB Automation KG\n00:08:FB\tSonosite\tSonoSite, Inc.\n00:08:FC\tGigaphot\tGigaphoton Inc.\n00:08:FD\tBluekore\tBlueKorea Co., Ltd.\n00:08:FE\tUnikC&C\tUNIK C&C Co.,Ltd.\n00:08:FF\tTrilogyC\tTrilogy Communications Ltd\n00:09:00\tTmt\t\n00:09:01\tShenzhen\tShenzhen Shixuntong Information & Technoligy Co\n00:09:02\tRedlineC\tRedline Communications Inc.\n00:09:03\tPanasas\tPanasas, Inc\n00:09:04\tMondialE\tMONDIAL electronic\n00:09:05\tItecTech\tiTEC Technologies Ltd.\n00:09:06\tEsteemNe\tEsteem Networks\n00:09:07\tChrysali\tChrysalis Development\n00:09:08\tVtechTec\tVTech Technology Corp.\n00:09:09\tTelenorC\tTelenor Connect A/S\n00:09:0A\tSnedfarT\tSnedFar Technology Co., Ltd.\n00:09:0B\tMtlInstr\tMTL  Instruments PLC\n00:09:0C\tMayekawa\tMayekawa Mfg. Co. Ltd.\n00:09:0D\tLeaderEl\tLeader Electronics Corp.\n00:09:0E\tHelixTec\tHelix Technology Inc.\n00:09:0F\tFortinet\tFortinet Inc.\n00:09:10\tSimpleAc\tSimple Access Inc.\n00:09:11\tCisco\tCisco Systems, Inc\n00:09:12\tCisco\tCisco Systems, Inc\n00:09:13\tSystemk\tSystemK Corporation\n00:09:14\tComputro\tComputrols Inc.\n00:09:15\tCas\tCAS Corp.\n00:09:16\tListmanH\tListman Home Technologies, Inc.\n00:09:17\tWemTechn\tWEM Technology Inc\n00:09:18\tSamsungT\tSamsung Techwin Co.,Ltd\n00:09:19\tMdsGatew\tMDS Gateways\n00:09:1A\tMacatOpt\tMacat Optics & Electronics Co., Ltd.\n00:09:1B\tDigitalG\tDigital Generation Inc.\n00:09:1C\tCachevis\tCacheVision, Inc\n00:09:1D\tProteamC\tProteam Computer Corporation\n00:09:1E\tFirstech\tFirstech Technology Corp.\n00:09:1F\tA&D\tA&D Co., Ltd.\n00:09:20\tEpoxComp\tEpoX COMPUTER CO.,LTD.\n00:09:21\tPlanmeca\tPlanmeca Oy\n00:09:22\tTstBiome\tTST Biometrics GmbH\n00:09:23\tHeamanSy\tHeaman System Co., Ltd\n00:09:24\tTelebau\tTelebau GmbH\n00:09:25\tVsnSyste\tVSN Systemen BV\n00:09:26\tYodaComm\tYoda Communications, Inc.\n00:09:27\tToyokeik\tToyokeiki Co.,Ltd.\n00:09:28\tTelecore\t\n00:09:29\tSanyoInd\tSanyo Industries (UK) Limited\n00:09:2A\tMytecs\tMYTECS Co.,Ltd.\n00:09:2B\tIqstorNe\tiQstor Networks, Inc.\n00:09:2C\tHitpoint\tHitpoint Inc.\n00:09:2D\tHtc\tHTC Corporation\n00:09:2E\tB&TechSy\tB&Tech System Inc.\n00:09:2F\tAkomTech\tAkom Technology Corporation\n00:09:30\tAeroconc\tAeroConcierge Inc.\n00:09:31\tFutureIn\tFuture Internet, Inc.\n00:09:32\tOmnilux\t\n00:09:33\tOphit\tOphit Co.Ltd.\n00:09:34\tDream-Mu\tDream-Multimedia-Tv GmbH\n00:09:35\tSandvine\tSandvine Incorporated\n00:09:36\tIpetroni\tIpetronik GmbH & Co. KG\n00:09:37\tInventec\tInventec Appliance Corp\n00:09:38\tAllotCom\tAllot Communications\n00:09:39\tShibasok\tShibaSoku Co.,Ltd.\n00:09:3A\tMolex\t\n00:09:3B\tHyundaiN\tHyundai Networks Inc.\n00:09:3C\tJacquesT\tJacques Technologies P/L\n00:09:3D\tNewisys\tNewisys,Inc.\n00:09:3E\tC&ITechn\tC&I Technologies\n00:09:3F\tDouble-W\tDouble-Win Enterpirse CO., LTD\n00:09:40\tAgfeo\tAGFEO GmbH & Co. KG\n00:09:41\tAlliedTe\tAllied Telesis R&D Center K.K.\n00:09:42\tWireless\tWireless Technologies, Inc\n00:09:43\tCisco\tCisco Systems, Inc\n00:09:44\tCisco\tCisco Systems, Inc\n00:09:45\tPalmmicr\tPalmmicro Communications Inc\n00:09:46\tClusterL\tCluster Labs GmbH\n00:09:47\tAztek\tAztek, Inc.\n00:09:48\tVistaCon\tVista Control Systems, Corp.\n00:09:49\tGlyphTec\tGlyph Technologies Inc.\n00:09:4A\tHomenetC\tHomenet Communications\n00:09:4B\tFillfact\tFillFactory NV\n00:09:4C\tCommunic\tCommunication Weaver Co.,Ltd.\n00:09:4D\tBraintre\tBraintree Communications Pty Ltd\n00:09:4E\tBartechI\tBartech Systems International, Inc\n00:09:4F\tElmegt\telmegt GmbH & Co. KG\n00:09:50\tIndepend\tIndependent Storage Corporation\n00:09:51\tApogeeIm\tApogee Imaging Systems\n00:09:52\tAuerswal\tAuerswald GmbH & Co. KG\n00:09:53\tLinkageS\tLinkage System Integration Co.Ltd.\n00:09:54\tAmitSpol\tAMiT spol. s. r. o.\n00:09:55\tYoungGen\tYoung Generation International Corp.\n00:09:56\tNetworkG\tNetwork Systems Group, Ltd. (NSG)\n00:09:57\tSupercal\tSupercaller, Inc.\n00:09:58\tIntelnet\tIntelnet S.A.\n00:09:59\tSitecsof\tSitecsoft\n00:09:5A\tRacewood\tRacewood Technology\n00:09:5B\tNetgear\t\n00:09:5C\tPhilipsM\tPhilips Medical Systems - Cardiac and Monitoring Systems (CM\n00:09:5D\tDialogue\tDialogue Technology Corp.\n00:09:5E\tMasstech\tMasstech Group Inc.\n00:09:5F\tTelebyte\tTelebyte, Inc.\n00:09:60\tYozan\tYOZAN Inc.\n00:09:61\tSwitchge\tSwitchgear and Instrumentation Ltd\n00:09:62\tSonitorT\tSonitor Technologies AS\n00:09:63\tDominion\tDominion Lasercom Inc.\n00:09:64\tHi-Techn\tHi-Techniques, Inc.\n00:09:65\tHyunjuCo\tHyunJu Computer Co., Ltd.\n00:09:66\tTrimbleE\tTrimble Europe Bv\n00:09:67\tTachyon\tTachyon, Inc\n00:09:68\tTechnove\tTechnoventure, Inc.\n00:09:69\tMeretOpt\tMeret Optical Communications\n00:09:6A\tCloverle\tCloverleaf Communications Inc.\n00:09:6B\tIbm\tIBM Corp\n00:09:6C\tImediaSe\tImedia Semiconductor Corp.\n00:09:6D\tPowernet\tPowernet Technologies Corp.\n00:09:6E\tGiantEle\tGiant Electronics Ltd.\n00:09:6F\tBeijingZ\tBeijing Zhongqing Elegant Tech. Corp.,Limited\n00:09:70\tVibratio\tVibration Research Corporation\n00:09:71\tTimeMana\tTime Management, Inc.\n00:09:72\tSecureba\tSecurebase,Inc\n00:09:73\tLentenTe\tLenten Technology Co., Ltd.\n00:09:74\tInnopiaT\tInnopia Technologies, Inc.\n00:09:75\tFsonaCom\tfSONA Communications Corporation\n00:09:76\tDatasoft\tDatasoft ISDN Systems GmbH\n00:09:77\tBrunnerE\tBrunner Elektronik AG\n00:09:78\tAijiSyst\tAIJI System Co., Ltd.\n00:09:79\tAdvanced\tAdvanced Television Systems Committee, Inc.\n00:09:7A\tLouisDes\tLouis Design Labs.\n00:09:7B\tCisco\tCisco Systems, Inc\n00:09:7C\tCisco\tCisco Systems, Inc\n00:09:7D\tSecwellN\tSecWell Networks Oy\n00:09:7E\tImiTechn\tImi Technology Co., Ltd\n00:09:7F\tVsecure2\tVsecure 2000 LTD.\n00:09:80\tPowerZen\tPower Zenith Inc.\n00:09:81\tNewportN\tNewport Networks\n00:09:82\tLoeweOpt\tLoewe Opta GmbH\n00:09:83\tGlobalto\tGlobalTop Technology, Inc.\n00:09:84\tMycasaNe\tMyCasa Network Inc.\n00:09:85\tAutoTele\tAuto Telecom Company\n00:09:86\tMetalink\tMetalink LTD.\n00:09:87\tNishiNip\tNISHI NIPPON ELECTRIC WIRE & CABLE CO.,LTD.\n00:09:88\tNudianEl\tNudian Electron Co., Ltd.\n00:09:89\tVividlog\tVividLogic Inc.\n00:09:8A\tEquallog\tEqualLogic Inc\n00:09:8B\tEntropic\tEntropic Communications, Inc.\n00:09:8C\tOptionWi\tOption Wireless Sweden\n00:09:8D\tVelocity\tVelocity Semiconductor\n00:09:8E\tIpcas\tipcas GmbH\n00:09:8F\tCetacean\tCetacean Networks\n00:09:90\tAcksysCo\tACKSYS Communications & systems\n00:09:91\tGeFanucA\tGE Fanuc Automation Manufacturing, Inc.\n00:09:92\tInterepo\tInterEpoch Technology,INC.\n00:09:93\tVisteon\tVisteon Corporation\n00:09:94\tCronyxEn\tCronyx Engineering\n00:09:95\tCastleTe\tCastle Technology Ltd\n00:09:96\tRdi\t\n00:09:97\tNortelNe\tNortel Networks\n00:09:98\tCapinfo\tCapinfo Company Limited\n00:09:99\tCpGeorge\tCp Georges Renault\n00:09:9A\tElmo\tElmo Company, Limited\n00:09:9B\tWesternT\tWestern Telematic Inc.\n00:09:9C\tNavalRes\tNaval Research Laboratory\n00:09:9D\tHaliplex\tHaliplex Communications\n00:09:9E\tTestech\tTestech, Inc.\n00:09:9F\tVidex\tVidex Inc.\n00:09:A0\tMicrotec\tMicrotechno Corporation\n00:09:A1\tTelewise\tTelewise Communications, Inc.\n00:09:A2\tInterfac\tInterface Co., Ltd.\n00:09:A3\tLeadflyT\tLeadfly Techologies Corp. Ltd.\n00:09:A4\tHartec\tHARTEC Corporation\n00:09:A5\tHansungE\tHansung Eletronic Industries Development Co., Ltd\n00:09:A6\tIgnisOpt\tIgnis Optics, Inc.\n00:09:A7\tBangOluf\tBang & Olufsen A/S\n00:09:A8\tEastmode\tEastmode Pte Ltd\n00:09:A9\tIkanosCo\tIkanos Communications\n00:09:AA\tDataComm\tData Comm for Business, Inc.\n00:09:AB\tNetcontr\tNetcontrol Oy\n00:09:AC\tLanvoice\t\n00:09:AD\tHyundaiS\tHyundai Syscomm, Inc.\n00:09:AE\tOkanoEle\tOkano Electric Co.,Ltd\n00:09:AF\tE-Generi\te-generis\n00:09:B0\tOnkyo\tOnkyo Corporation\n00:09:B1\tKanemats\tKanematsu Electronics, Ltd.\n00:09:B2\tL&F\tL&F Inc.\n00:09:B3\tMcm\tMCM Systems Ltd\n00:09:B4\tKisanTel\tKisan Telecom Co., Ltd.\n00:09:B5\t3jTech\t3J Tech. Co., Ltd.\n00:09:B6\tCisco\tCisco Systems, Inc\n00:09:B7\tCisco\tCisco Systems, Inc\n00:09:B8\tEntise\tEntise Systems\n00:09:B9\tActionIm\tAction Imaging Solutions\n00:09:BA\tMakuInfo\tMAKU Informationstechik GmbH\n00:09:BB\tMathstar\tMathStar, Inc.\n00:09:BC\tUtility\tUtility, Inc\n00:09:BD\tEpygiTec\tEpygi Technologies, Ltd.\n00:09:BE\tMamiya-O\tMamiya-OP Co.,Ltd.\n00:09:BF\tNintendo\tNintendo Co., Ltd.\n00:09:C0\t6wind\t\n00:09:C1\tProces-D\tPROCES-DATA A/S\n00:09:C2\tOnity\tOnity, Inc.\n00:09:C3\tNetas\t\n00:09:C4\tMedicore\tMedicore Co., Ltd\n00:09:C5\tKingeneT\tKINGENE Technology Corporation\n00:09:C6\tVisionic\tVisionics Corporation\n00:09:C7\tMovistec\t\n00:09:C8\tSinagawa\tSinagawa Tsushin Keisou Service\n00:09:C9\tBluewinc\tBlueWINC Co., Ltd.\n00:09:CA\tImaxnetw\tiMaxNetworks(Shenzhen)Limited.\n00:09:CB\tHbrain\t\n00:09:CC\tMoog\tMoog GmbH\n00:09:CD\tHudsonSo\tHudson Soft Co.,Ltd.\n00:09:CE\tSpacebri\tSpaceBridge Semiconductor Corp.\n00:09:CF\tIad\tiAd GmbH\n00:09:D0\tSolacomT\tSolacom Technologies Inc.\n00:09:D1\tSeranoaN\tSeranoa Networks Inc\n00:09:D2\tMaiLogic\tMai Logic Inc.\n00:09:D3\tWesternD\tWestern DataCom Co., Inc.\n00:09:D4\tTranstec\tTranstech Networks\n00:09:D5\tSignalCo\tSignal Communication, Inc.\n00:09:D6\tKncOne\tKNC One GmbH\n00:09:D7\tDcSecuri\tDC Security Products\n00:09:D8\tFältComm\tFält Communications AB\n00:09:D9\tNeoscale\tNeoscale Systems, Inc\n00:09:DA\tControlM\tControl Module Inc.\n00:09:DB\tEspace\t\n00:09:DC\tGalaxisT\tGalaxis Technology AG\n00:09:DD\tMavinTec\tMavin Technology Inc.\n00:09:DE\tSamjinIn\tSamjin Information & Communications Co., Ltd.\n00:09:DF\tVestelEl\tVestel Elektronik San ve Tic. A.Ş.\n00:09:E0\tXemicsSA\tXemics S.A.\n00:09:E1\tGemtekTe\tGemtek Technology Co., Ltd.\n00:09:E2\tSinbonEl\tSinbon Electronics Co., Ltd.\n00:09:E3\tAngelIgl\tAngel Iglesias S.A.\n00:09:E4\tKTechInf\tK Tech Infosystem Inc.\n00:09:E5\tHottinge\tHottinger Baldwin Messtechnik GmbH\n00:09:E6\tCyberSwi\tCyber Switching Inc.\n00:09:E7\tAdcTecho\tADC Techonology\n00:09:E8\tCisco\tCisco Systems, Inc\n00:09:E9\tCisco\tCisco Systems, Inc\n00:09:EA\tYem\tYEM Inc.\n00:09:EB\tHumandat\tHuMANDATA LTD.\n00:09:EC\tDaktroni\tDaktronics, Inc.\n00:09:ED\tCipherop\tCipherOptics\n00:09:EE\tMeikyoEl\tMeikyo Electric Co.,Ltd\n00:09:EF\tVoceraCo\tVocera Communications\n00:09:F0\tShimizuT\tShimizu Technology Inc.\n00:09:F1\tYamakiEl\tYamaki Electric Corporation\n00:09:F2\tCohuElec\tCohu, Inc., Electronics Division\n00:09:F3\tWellComm\tWELL Communication Corp.\n00:09:F4\tAlconLab\tAlcon Laboratories, Inc.\n00:09:F5\tEmersonN\tEmerson Network Power Co.,Ltd\n00:09:F6\tShenzhen\tShenzhen Eastern Digital Tech Ltd.\n00:09:F7\tSedADivi\tSED, a division of Calian\n00:09:F8\tUnimoTec\tUnimo Technology Co., Ltd.\n00:09:F9\tArtJapan\tArt Japan Co., Ltd.\n00:09:FB\tPhilipsP\tPhilips Patient Monitoring\n00:09:FC\tIpflex\tIPFLEX Inc.\n00:09:FD\tUbinetic\tUbinetics Limited\n00:09:FE\tDaisyTec\tDaisy Technologies, Inc.\n00:09:FF\tXNet2000\tX.net 2000 GmbH\n00:0A:00\tMediatek\tMediatek Corp.\n00:0A:01\tSohoware\tSOHOware, Inc.\n00:0A:02\tAnnso\tAnnso Co., Ltd.\n00:0A:03\tEndesaSe\tEndesa Servicios, S.L.\n00:0A:04\t3com\t3Com Ltd\n00:0A:05\tWidax\tWidax Corp.\n00:0A:06\tTeledexL\tTeledex LLC\n00:0A:07\tWebwayon\tWebWayOne Ltd\n00:0A:08\tAlpineEl\tAlpine Electronics, Inc.\n00:0A:09\tTaracomI\tTaraCom Integrated Products, Inc.\n00:0A:0A\tSunix\tSUNIX Co., Ltd.\n00:0A:0B\tSealevel\tSealevel Systems, Inc.\n00:0A:0C\tScientif\tScientific Research Corporation\n00:0A:0D\tFciDeuts\tFCI Deutschland GmbH\n00:0A:0E\tInvivoRe\tInvivo Research Inc.\n00:0A:0F\tIlryungT\tIlryung Telesys, Inc\n00:0A:10\tFastMedi\tFAST media integrations AG\n00:0A:11\tExpetTec\tExPet Technologies, Inc\n00:0A:12\tAzylexTe\tAzylex Technology, Inc\n00:0A:13\tHoneywel\tHoneywell Video Systems\n00:0A:14\tTecoAS\tTECO a.s.\n00:0A:15\tSiliconD\tSilicon Data, Inc\n00:0A:16\tLassenRe\tLassen Research\n00:0A:17\tNestarCo\tNestar Communications, Inc\n00:0A:18\tVichel\tVichel Inc.\n00:0A:19\tValerePo\tValere Power, Inc.\n00:0A:1A\tImerge\tImerge Ltd\n00:0A:1B\tStreamLa\tStream Labs\n00:0A:1C\tBridgeIn\tBridge Information Co., Ltd.\n00:0A:1D\tOpticalC\tOptical Communications Products Inc.\n00:0A:1E\tRed-MPro\tRed-M Products Limited\n00:0A:1F\tArtWareT\tART WARE Telecommunication Co., Ltd.\n00:0A:20\tSvaNetwo\tSVA Networks, Inc.\n00:0A:21\tIntegraT\tIntegra Telecom Co. Ltd\n00:0A:22\tAmperion\tAmperion Inc\n00:0A:23\tParamaNe\tParama Networks Inc\n00:0A:24\tOctaveCo\tOctave Communications\n00:0A:25\tCeragonN\tCeragon Networks\n00:0A:26\tCeiaSPA\tCEIA S.p.A.\n00:0A:27\tApple\tApple, Inc.\n00:0A:28\tMotorola\t\n00:0A:29\tPanDacom\tPan Dacom Networking AG\n00:0A:2A\tQsi\tQSI Systems Inc.\n00:0A:2B\tEtherstu\tEtherstuff\n00:0A:2C\tActiveTc\tActive Tchnology Corporation\n00:0A:2D\tCabotCom\tCabot Communications Limited\n00:0A:2E\tMapleNet\tMaple Networks Co., Ltd\n00:0A:2F\tArtnix\tArtnix Inc.\n00:0A:30\tVisteon\tVisteon Corporation\n00:0A:31\tHcvConsu\tHCV Consulting\n00:0A:32\tXsido\tXsido Corporation\n00:0A:33\tEmulex\tEmulex Corporation\n00:0A:34\tIdentica\tIdenticard Systems Incorporated\n00:0A:35\tXilinx\t\n00:0A:36\tSynelecT\tSynelec Telecom Multimedia\n00:0A:37\tProceraN\tProcera Networks, Inc.\n00:0A:38\tApaniNet\tApani Networks\n00:0A:39\tLopaInfo\tLoPA Information Technology\n00:0A:3A\tJ-ThreeI\tJ-THREE INTERNATIONAL Holding Co., Ltd.\n00:0A:3B\tGctSemic\tGCT Semiconductor, Inc\n00:0A:3C\tEnerpoin\tEnerpoint Ltd.\n00:0A:3D\tEloSiste\tElo Sistemas Eletronicos S.A.\n00:0A:3E\tEadsTele\tEADS Telecom\n00:0A:3F\tDataEast\tData East Corporation\n00:0A:40\tCrownAud\tCrown Audio -- Harmanm International\n00:0A:41\tCisco\tCisco Systems, Inc\n00:0A:42\tCisco\tCisco Systems, Inc\n00:0A:43\tChunghwa\tChunghwa Telecom Co., Ltd.\n00:0A:44\tAveryDen\tAvery Dennison Deutschland GmbH\n00:0A:45\tAudio-Te\tAudio-Technica Corp.\n00:0A:46\tAroWeldi\tAro Welding Technologies Sas\n00:0A:47\tAlliedVi\tAllied Vision Technologies\n00:0A:48\tAlbatron\tAlbatron Technology\n00:0A:49\tF5Networ\tF5 Networks, Inc.\n00:0A:4A\tTarga\tTarga Systems Ltd.\n00:0A:4B\tDatapowe\tDataPower Technology, Inc.\n00:0A:4C\tMolecula\tMolecular Devices Corporation\n00:0A:4D\tNoritz\tNoritz Corporation\n00:0A:4E\tUnitekEl\tUNITEK Electronics INC.\n00:0A:4F\tBrainBox\tBrain Boxes Limited\n00:0A:50\tRemotek\tRemotek Corporation\n00:0A:51\tGyrosign\tGyroSignal Technology Co., Ltd.\n00:0A:52\tAsiarf\tAsiaRF Ltd.\n00:0A:53\tIntronic\tIntronics, Incorporated\n00:0A:54\tLagunaHi\tLaguna Hills, Inc.\n00:0A:55\tMarkem\tMARKEM Corporation\n00:0A:56\tHitachiM\tHITACHI Maxell Ltd.\n00:0A:57\tHewlettP\tHewlett Packard\n00:0A:58\tFreyerSi\tFreyer & Siegel Elektronik GmbH & Co. KG\n00:0A:59\tHwServer\tHW server\n00:0A:5A\tGreennet\tGreenNET Technologies Co.,Ltd.\n00:0A:5B\tPower-On\tPower-One as\n00:0A:5C\tCarelSPA\tCarel s.p.a.\n00:0A:5D\tFingerte\tFingerTec Worldwide Sdn Bhd\n00:0A:5E\t3com\t\n00:0A:5F\tAlmedio\talmedio inc.\n00:0A:60\tAutostar\tAutostar Technology Pte Ltd\n00:0A:61\tCellinx\tCellinx Systems Inc.\n00:0A:62\tCrinisNe\tCrinis Networks, Inc.\n00:0A:63\tDhd\tDHD GmbH\n00:0A:64\tEracomTe\tEracom Technologies\n00:0A:65\tGentechm\tGentechMedia.co.,ltd.\n00:0A:66\tMitsubis\tMITSUBISHI ELECTRIC SYSTEM & SERVICE CO.,LTD.\n00:0A:67\tOngcorp\t\n00:0A:68\tSolarfla\tSolarflare Communications Inc\n00:0A:69\tSunnyBel\tSUNNY bell Technology Co., Ltd.\n00:0A:6A\tSvmMicro\tSVM Microwaves s.r.o.\n00:0A:6B\tTadiranT\tTadiran Telecom Business Systems LTD\n00:0A:6C\tWalchem\tWalchem Corporation\n00:0A:6D\tEksElekt\tEKS Elektronikservice GmbH\n00:0A:6E\tHarmonic\tHarmonic, Inc\n00:0A:6F\tZyflexTe\tZyFLEX Technologies Inc\n00:0A:70\tMplsForu\tMPLS Forum\n00:0A:71\tAvrioTec\tAvrio Technologies, Inc\n00:0A:72\tStec\tStec, Inc.\n00:0A:73\tScientif\tScientific Atlanta\n00:0A:74\tManticom\tManticom Networks Inc.\n00:0A:75\tCaterpil\tCaterpillar, Inc\n00:0A:76\tBeidaJad\tBeida Jade Bird Huaguang Technology Co.,Ltd\n00:0A:77\tBluewire\tBluewire Technologies LLC\n00:0A:78\tOlitec\t\n00:0A:79\tCoregaKK\tcorega K.K\n00:0A:7A\tKyoritsu\tKyoritsu Electric Co., Ltd.\n00:0A:7B\tCorneliu\tCornelius Consult\n00:0A:7C\tTecton\tTecton Ltd\n00:0A:7D\tValo\tValo, Inc.\n00:0A:7E\tAdvantag\tThe Advantage Group\n00:0A:7F\tTeradonI\tTeradon Industries, Inc\n00:0A:80\tTelkonet\tTelkonet Inc.\n00:0A:81\tTeimaAud\tTEIMA Audiotex S.L.\n00:0A:82\tTatsutaS\tTatsuta System Electronics Co.,Ltd.\n00:0A:83\tSaltoSL\tSalto Systems S.L.\n00:0A:84\tRainsunE\tRainsun Enterprise Co., Ltd.\n00:0A:85\tPlatC2\tPLAT'C2,Inc\n00:0A:86\tLenze\t\n00:0A:87\tIntegrat\tIntegrated Micromachines Inc.\n00:0A:88\tIncypher\tInCypher S.A.\n00:0A:89\tCreval\tCreval Systems, Inc.\n00:0A:8A\tCisco\tCisco Systems, Inc\n00:0A:8B\tCisco\tCisco Systems, Inc\n00:0A:8C\tGuardwar\tGuardware Systems Ltd.\n00:0A:8D\tEurother\tEurotherm Limited\n00:0A:8E\tInvacom\tInvacom Ltd\n00:0A:8F\tAskaInte\tAska International Inc.\n00:0A:90\tBaysideI\tBayside Interactive, Inc.\n00:0A:91\tHemocue\tHemoCue AB\n00:0A:92\tPresonus\tPresonus Corporation\n00:0A:93\tW2Networ\tW2 Networks, Inc.\n00:0A:94\tShanghai\tShangHai cellink CO., LTD\n00:0A:95\tApple\tApple, Inc.\n00:0A:96\tMewtelTe\tMewtel Technology Inc.\n00:0A:97\tSonicblu\tSONICblue, Inc.\n00:0A:98\tM+FGwinn\tM+F Gwinner GmbH & Co\n00:0A:99\tCalampWi\tCalamp Wireless Networks Inc\n00:0A:9A\tAiptekIn\tAiptek International Inc\n00:0A:9B\tTbGroup\tTB Group Inc\n00:0A:9C\tServerTe\tServer Technology, Inc.\n00:0A:9D\tKingYoun\tKing Young Technology Co. Ltd.\n00:0A:9E\tBroadweb\tBroadWeb Corportation\n00:0A:9F\tPannaway\tPannaway Technologies, Inc.\n00:0A:A0\tCedarPoi\tCedar Point Communications\n00:0A:A1\tVVS\tV V S Limited\n00:0A:A2\tSystek\tSystek Inc.\n00:0A:A3\tShimafuj\tShimafuji Electric Co.,Ltd.\n00:0A:A4\tShanghai\tShanghai Surveillance Technology Co,Ltd\n00:0A:A5\tMaxlinkI\tMaxlink Industries Limited\n00:0A:A6\tHochiki\tHochiki Corporation\n00:0A:A7\tFeiElect\tFEI Electron Optics\n00:0A:A8\tEpipePty\tePipe Pty. Ltd.\n00:0A:A9\tBrooksAu\tBrooks Automation GmbH\n00:0A:AA\tAltigenC\tAltiGen Communications Inc.\n00:0A:AB\tToyotaTe\tToyota Technical Development Corporation\n00:0A:AC\tTerratec\tTerraTec Electronic GmbH\n00:0A:AD\tStargame\tStargames Corporation\n00:0A:AE\tRosemoun\tRosemount Process Analytical\n00:0A:AF\tPipal\tPipal Systems\n00:0A:B0\tLoytecEl\tLOYTEC electronics GmbH\n00:0A:B1\tGenetec\tGENETEC Corporation\n00:0A:B2\tFresnelW\tFresnel Wireless Systems\n00:0A:B3\tFaGira\tFa. GIRA\n00:0A:B4\tEticTele\tETIC Telecommunications\n00:0A:B5\tDigitalE\tDigital Electronic Network\n00:0A:B6\tCompunet\tCompunetix, Inc\n00:0A:B7\tCisco\tCisco Systems, Inc\n00:0A:B8\tCisco\tCisco Systems, Inc\n00:0A:B9\tAsteraTe\tAstera Technologies Corp.\n00:0A:BA\tArconTec\tArcon Technology Limited\n00:0A:BB\tTaiwanSe\tTaiwan Secom Co,. Ltd\n00:0A:BC\tSeabridg\tSeabridge Ltd.\n00:0A:BD\tRupprech\tRupprecht & Patashnick Co.\n00:0A:BE\tOpnetTec\tOPNET Technologies CO., LTD.\n00:0A:BF\tHirotaSs\tHirota Ss\n00:0A:C0\tFuyohVid\tFuyoh Video Industry CO., LTD.\n00:0A:C1\tFuturete\tFuturetel\n00:0A:C2\tWuhanFib\tWuhan FiberHome Digital Technology Co.,Ltd.\n00:0A:C3\tEmTechni\teM Technics Co., Ltd.\n00:0A:C4\tDaewooTe\tDaewoo Teletech Co., Ltd\n00:0A:C5\tColorKin\tColor Kinetics\n00:0A:C6\tOverture\tOverture Networks.\n00:0A:C7\tUnicatio\tUnication Group\n00:0A:C8\tZpsysPla\tZPSYS CO.,LTD. (Planning&Management)\n00:0A:C9\tZambeel\tZambeel Inc\n00:0A:CA\tYokoyama\tYOKOYAMA SHOKAI CO.,Ltd.\n00:0A:CB\tXpakMsaG\tXPAK MSA Group\n00:0A:CC\tWinnowNe\tWinnow Networks, Inc.\n00:0A:CD\tSunrichT\tSunrich Technology Limited\n00:0A:CE\tRadiante\tRadiantech, Inc.\n00:0A:CF\tProvideo\tPROVIDEO Multimedia Co. Ltd.\n00:0A:D0\tNiigataD\tNiigata Develoment Center,  F.I.T. Co., Ltd.\n00:0A:D1\tMws\t\n00:0A:D2\tJepico\tJEPICO Corporation\n00:0A:D3\tInitech\tINITECH Co., Ltd\n00:0A:D4\tCorebell\tCoreBell Systems Inc.\n00:0A:D5\tBrainchi\tBrainchild Electronic Co., Ltd.\n00:0A:D6\tBeamreac\tBeamReach Networks\n00:0A:D7\tOriginEl\tOrigin ELECTRIC CO.,LTD.\n00:0A:D8\tIpcservT\tIPCserv Technology Corp.\n00:0A:D9\tSonyMobi\tSony Mobile Communications Inc\n00:0A:DA\tVindicat\tVindicator Technologies\n00:0A:DB\tTrillian\tTrilliant\n00:0A:DC\tRuggedco\tRuggedCom Inc.\n00:0A:DD\tAllworx\tAllworx Corp.\n00:0A:DE\tHappyCom\tHappy Communication Co., Ltd.\n00:0A:DF\tGennum\tGennum Corporation\n00:0A:E0\tFujitsuS\tFujitsu Softek\n00:0A:E1\tEgTechno\tEG Technology\n00:0A:E2\tBinatone\tBinatone Electronics International, Ltd\n00:0A:E3\tYangMeiT\tYang Mei Technology Co., Ltd\n00:0A:E4\tWistron\tWistron Corporation\n00:0A:E5\tScottcar\tScottCare Corporation\n00:0A:E6\tElitegro\tElitegroup Computer Systems Co.,Ltd.\n00:0A:E7\tEliopSA\tEliop S.A.\n00:0A:E8\tCathayRo\tCathay Roxus Information Technology Co. LTD\n00:0A:E9\tAirvastT\tAirVast Technology Inc.\n00:0A:EA\tAdamElek\tADAM ELEKTRONIK LTD. ŞTI\n00:0A:EB\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n00:0A:EC\tKoatsuGa\tKoatsu Gas Kogyo Co., Ltd.\n00:0A:ED\tHartingE\tHARTING Electronics GmbH\n00:0A:EE\tGcdHard-\tGCD Hard- & Software GmbH\n00:0A:EF\tOtrumAsa\tOtrum Asa\n00:0A:F0\tShin-OhE\tSHIN-OH ELECTRONICS CO., LTD. R&D\n00:0A:F1\tClarityD\tClarity Design, Inc.\n00:0A:F2\tNeoaxiom\tNeoAxiom Corp.\n00:0A:F3\tCisco\tCisco Systems, Inc\n00:0A:F4\tCisco\tCisco Systems, Inc\n00:0A:F5\tAirgoNet\tAirgo Networks, Inc.\n00:0A:F6\tEmersonC\tEmerson Climate Technologies Retail Solutions, Inc.\n00:0A:F7\tBroadcom\t\n00:0A:F8\tAmerican\tAmerican Telecare Inc.\n00:0A:F9\tHiconnec\tHiConnect, Inc.\n00:0A:FA\tTraverse\tTraverse Technologies Australia\n00:0A:FB\tAmbri\tAmbri Limited\n00:0A:FC\tCoreTecC\tCore Tec Communications, LLC\n00:0A:FD\tKentecEl\tKentec Electronics\n00:0A:FE\tNovapal\tNovaPal Ltd\n00:0A:FF\tKilchher\tKilchherr Elektronik AG\n00:0B:00\tFujianSt\tFujian Start Computer Equipment Co.,Ltd\n00:0B:01\tDaiichiE\tDaiichi Electronics Co., Ltd.\n00:0B:02\tDallmeie\tDallmeier electronic\n00:0B:03\tTaekwang\tTaekwang Industrial Co., Ltd\n00:0B:04\tVolktek\tVolktek Corporation\n00:0B:05\tPacificB\tPacific Broadband Networks\n00:0B:06\tArrisGro\tARRIS Group, Inc.\n00:0B:07\tVoxpathN\tVoxpath Networks\n00:0B:08\tPillarDa\tPillar Data Systems\n00:0B:09\tIfoundry\tIfoundry Systems Singapore\n00:0B:0A\tDbmOptic\tdBm Optics\n00:0B:0B\tCorrent\tCorrent Corporation\n00:0B:0C\tAgile\tAgile Systems Inc.\n00:0B:0D\tAir2u\tAir2U, Inc.\n00:0B:0E\tTrapezeN\tTrapeze Networks\n00:0B:0F\tBoschRex\tBosch Rexroth\n00:0B:10\t11waveTe\t11wave Technonlogy Co.,Ltd\n00:0B:11\tHimejiAb\tHimeji Abc Trading Co.,Ltd.\n00:0B:12\tNuriTele\tNURI Telecom Co., Ltd.\n00:0B:13\tZetron\tZetron Inc\n00:0B:14\tViewsoni\tViewSonic Corporation\n00:0B:15\tPlatypus\tPlatypus Technology\n00:0B:16\tCommunic\tCommunication Machinery Corporation\n00:0B:17\tMksInstr\tMKS Instruments\n00:0B:18\tPrivate\t\n00:0B:19\tVernierN\tVernier Networks, Inc.\n00:0B:1A\tIndustri\tIndustrial Defender, Inc.\n00:0B:1B\tSystroni\tSystronix, Inc.\n00:0B:1C\tSibcoBv\tSIBCO bv\n00:0B:1D\tLayerzer\tLayerZero Power Systems, Inc.\n00:0B:1E\tKappaOpt\tKAPPA opto-electronics GmbH\n00:0B:1F\tIConComp\tI CON Computer Co.\n00:0B:20\tHirata\tHirata corporation\n00:0B:21\tG-StarCo\tG-Star Communications Inc.\n00:0B:22\tEnvironm\tEnvironmental Systems and Services\n00:0B:23\tSiemensH\tSiemens Home & Office Comm. Devices\n00:0B:24\tAirlogic\t\n00:0B:25\tAeluros\t\n00:0B:26\tWetek\tWetek Corporation\n00:0B:27\tScion\tScion Corporation\n00:0B:28\tQuatech\tQuatech Inc.\n00:0B:29\tLsLgIndu\tLS(LG) Industrial Systems co.,Ltd\n00:0B:2A\tHowtel\tHOWTEL Co., Ltd.\n00:0B:2B\tHostnet\tHostnet Corporation\n00:0B:2C\tEikiIndu\tEiki Industrial Co. Ltd.\n00:0B:2D\tDanfoss\tDanfoss Inc.\n00:0B:2E\tCal-Comp\tCal-Comp Electronics & Communications Company Ltd.\n00:0B:2F\tBplan\tbplan GmbH\n00:0B:30\tBeijingG\tBeijing Gongye Science & Technology Co.,Ltd\n00:0B:31\tYantaiZh\tYantai ZhiYang Scientific and technology industry CO., LTD\n00:0B:32\tVormetri\tVormetric, Inc.\n00:0B:33\tVivatoTe\tVivato Technologies\n00:0B:34\tShanghai\tShangHai Broadband Technologies CO.LTD\n00:0B:35\tQuadBitS\tQuad Bit System co., Ltd.\n00:0B:36\tProducti\tProductivity Systems, Inc.\n00:0B:37\tManufact\tManufacture Des Montres Rolex Sa\n00:0B:38\tKnürr\tKnürr GmbH\n00:0B:39\tKeisokuG\tKeisoku Giken Co.,Ltd.\n00:0B:3A\tQustream\tQuStream Corporation\n00:0B:3B\tDevolo\tdevolo AG\n00:0B:3C\tCygnalIn\tCygnal Integrated Products, Inc.\n00:0B:3D\tContalOk\tCONTAL OK Ltd.\n00:0B:3E\tBittware\tBittWare, Inc\n00:0B:3F\tAntholog\tAnthology Solutions Inc.\n00:0B:40\tOclaro\t\n00:0B:41\tIngBüroD\tIng. Büro Dr. Beutlhauser\n00:0B:42\tCommax\tcommax Co., Ltd.\n00:0B:43\tMicrosca\tMicroscan Systems, Inc.\n00:0B:44\tConcordI\tConcord IDea Corp.\n00:0B:45\tCisco\tCisco Systems, Inc\n00:0B:46\tCisco\tCisco Systems, Inc\n00:0B:47\tAdvanced\tAdvanced Energy\n00:0B:48\tSofrel\t\n00:0B:49\tRf-LinkS\tRF-Link System Inc.\n00:0B:4A\tVisimetr\tVisimetrics (UK) Ltd\n00:0B:4B\tVisiowav\tVisiowave Sa\n00:0B:4C\tClarionM\tClarion (M) Sdn Bhd\n00:0B:4D\tEmuzed\t\n00:0B:4E\tVertexrs\tVertexRSI, General Dynamics SatCOM Technologies, Inc.\n00:0B:4F\tVerifone\t\n00:0B:50\tOxygnet\t\n00:0B:51\tMicetekI\tMicetek International Inc.\n00:0B:52\tJoymaxEl\tJoymax Electronics Co. Ltd.\n00:0B:53\tInitium\tINITIUM Co., Ltd.\n00:0B:54\tBitmicro\tBiTMICRO Networks, Inc.\n00:0B:55\tAdinstru\tADInstruments\n00:0B:56\tCybernet\tCybernetics\n00:0B:57\tSiliconL\tSilicon Laboratories\n00:0B:58\tAstronau\tAstronautics C.A  LTD\n00:0B:59\tScriptpr\tScriptPro, LLC\n00:0B:5A\tHyperedg\tHyperEdge\n00:0B:5B\tRinconRe\tRincon Research Corporation\n00:0B:5C\tNewtech\tNewtech Co.,Ltd\n00:0B:5D\tFujitsu\tFujitsu Limited\n00:0B:5E\tAudioEng\tAudio Engineering Society Inc.\n00:0B:5F\tCisco\tCisco Systems, Inc\n00:0B:60\tCisco\tCisco Systems, Inc\n00:0B:61\tFriedric\tFriedrich Lütze GmbH & Co. KG\n00:0B:62\tIb-Mohne\tib-mohnen KG\n00:0B:63\tKaleides\tKaleidescape\n00:0B:64\tKiebackP\tKieback & Peter GmbH & Co KG\n00:0B:65\tSyACSrl\tSy.A.C. srl\n00:0B:66\tTeralink\tTeralink Communications\n00:0B:67\tTopviewT\tTopview Technology Corporation\n00:0B:68\tAddvalue\tAddvalue Communications Pte Ltd\n00:0B:69\tFrankeFi\tFranke Finland Oy\n00:0B:6A\tAsiarock\tAsiarock Technology Limited\n00:0B:6B\tWistronN\tWistron Neweb Corporation\n00:0B:6C\tSychip\tSychip Inc.\n00:0B:6D\tSolectro\tSolectron Japan Nakaniida\n00:0B:6E\tNeffInst\tNeff Instrument Corp.\n00:0B:6F\tMediaStr\tMedia Streaming Networks Inc\n00:0B:70\tLoadTech\tLoad Technology, Inc.\n00:0B:71\tLitchfie\tLitchfield Communications Inc.\n00:0B:72\tLawo\tLawo AG\n00:0B:73\tKodeosCo\tKodeos Communications\n00:0B:74\tKingwave\tKingwave Technology Co., Ltd.\n00:0B:75\tIosoft\tIosoft Ltd.\n00:0B:76\tEt&TTech\tET&T Technology Co. Ltd.\n00:0B:77\tCogent\tCogent Systems, Inc.\n00:0B:78\tTaifatec\tTaifatech Inc.\n00:0B:79\tX-Com\tX-COM, Inc.\n00:0B:7A\tL-3Linka\tL-3 Linkabit\n00:0B:7B\tTest-Um\tTest-Um Inc.\n00:0B:7C\tTelexCom\tTelex Communications\n00:0B:7D\tSolomonE\tSolomon Extreme International Ltd.\n00:0B:7E\tSaginomi\tSAGINOMIYA Seisakusho Inc.\n00:0B:7F\tAlignEng\tAlign Engineering LLC\n00:0B:80\tLyciumNe\tLycium Networks\n00:0B:81\tKaparel\tKaparel Corporation\n00:0B:82\tGrandstr\tGrandstream Networks, Inc.\n00:0B:83\tDatawatt\tDatawatt B.V.\n00:0B:84\tBodet\t\n00:0B:85\tCisco\tCisco Systems, Inc\n00:0B:86\tArubaNet\tAruba Networks\n00:0B:87\tAmerican\tAmerican Reliance Inc.\n00:0B:88\tVidisco\tVidisco ltd.\n00:0B:89\tTopGloba\tTop Global Technology, Ltd.\n00:0B:8A\tMiteq\tMITEQ Inc.\n00:0B:8B\tKerajetS\tKerajet, S.A.\n00:0B:8C\tFlextron\tFlextronics\n00:0B:8D\tAvvioNet\tAvvio Networks\n00:0B:8E\tAscent\tAscent Corporation\n00:0B:8F\tAkitaEle\tAkita Electronics Systems Co.,Ltd.\n00:0B:90\tAdvaOpti\tADVA Optical Networking Ltd.\n00:0B:91\tAglaiaGe\tAglaia Gesellschaft für Bildverarbeitung und Kommunikation mbH\n00:0B:92\tAscomDan\tAscom Danmark A/S\n00:0B:93\tRitterEl\tRitter Elektronik\n00:0B:94\tDigitalM\tDigital Monitoring Products, Inc.\n00:0B:95\tEbetGami\teBet Gaming Systems Pty Ltd\n00:0B:96\tInnotrac\tInnotrac Diagnostics Oy\n00:0B:97\tMatsushi\tMatsushita Electric Industrial Co.,Ltd.\n00:0B:98\tNicetech\tNiceTechVision\n00:0B:99\tSensable\tSensAble Technologies, Inc.\n00:0B:9A\tShanghai\tShanghai Ulink Telecom Equipment Co. Ltd.\n00:0B:9B\tSiriusSy\tSirius System Co, Ltd.\n00:0B:9C\tTribeamT\tTriBeam Technologies, Inc.\n00:0B:9D\tTwinmosT\tTwinMOS Technologies Inc.\n00:0B:9E\tYasingTe\tYasing Technology Corp.\n00:0B:9F\tNeueElsa\tNeue ELSA GmbH\n00:0B:A0\tT&LInfor\tT&L Information Inc.\n00:0B:A1\tFujikura\tFujikura Solutions Ltd.\n00:0B:A2\tSumitomo\tSumitomo Electric Industries,Ltd\n00:0B:A3\tSiemens\tSiemens AG\n00:0B:A4\tShironSa\tShiron Satellite Communications Ltd. (1996)\n00:0B:A5\tQuasarCi\tQuasar Cipta Mandiri, PT\n00:0B:A6\tMiyakawa\tMiyakawa Electric Works Ltd.\n00:0B:A7\tMarantiN\tMaranti Networks\n00:0B:A8\tHanbackE\tHanback Electronics Co., Ltd.\n00:0B:A9\tCloudshi\tCloudShield Technologies, Inc.\n00:0B:AA\tAiphone\tAiphone co.,Ltd\n00:0B:AB\tAdvantec\tAdvantech Technology (CHINA) Co., Ltd.\n00:0B:AC\t3com\t3Com Ltd\n00:0B:AD\tPc-Pos\tPC-PoS Inc.\n00:0B:AE\tVitalsSy\tVitals System Inc.\n00:0B:AF\tWoojuCom\tWOOJU COMMUNICATIONS Co,.Ltd\n00:0B:B0\tSysnetTe\tSysnet Telematica srl\n00:0B:B1\tSuperSta\tSuper Star Technology Co., Ltd.\n00:0B:B2\tSmallbig\tSmallbig Technology\n00:0B:B3\tRitTechn\tRiT technologies Ltd.\n00:0B:B4\tRdcSemic\tRDC Semiconductor Inc.,\n00:0B:B5\tNstorTec\tnStor Technologies, Inc.\n00:0B:B6\tMetallig\tMetalligence Technology Corp.\n00:0B:B7\tMicro\tMicro Systems Co.,Ltd.\n00:0B:B8\tKihokuEl\tKihoku Electronic Co.\n00:0B:B9\tImsys\tImsys AB\n00:0B:BA\tHarmonic\tHarmonic, Inc\n00:0B:BB\tEtin\tEtin Systems Co., Ltd\n00:0B:BC\tEnGarde\tEn Garde Systems, Inc.\n00:0B:BD\tConnexio\tConnexionz Limited\n00:0B:BE\tCisco\tCisco Systems, Inc\n00:0B:BF\tCisco\tCisco Systems, Inc\n00:0B:C0\tChinaIwn\tChina IWNComm Co., Ltd.\n00:0B:C1\tBayMicro\tBay Microsystems, Inc.\n00:0B:C2\tCorinexC\tCorinex Communication Corp.\n00:0B:C3\tMultiple\tMultiplex, Inc.\n00:0B:C4\tBiotroni\tBIOTRONIK GmbH & Co\n00:0B:C5\tSmcNetwo\tSMC Networks, Inc.\n00:0B:C6\tIsac\tISAC, Inc.\n00:0B:C7\tIcetSPA\tICET S.p.A.\n00:0B:C8\tAirflowN\tAirFlow Networks\n00:0B:C9\tElectrol\tElectroline Equipment\n00:0B:CA\tDatavanT\tDatavan Tc\n00:0B:CB\tFagorAut\tFagor Automation , S. Coop\n00:0B:CC\tJusanSA\tJusan, S.A.\n00:0B:CD\tHewlettP\tHewlett Packard\n00:0B:CE\tFree2mov\tFree2move AB\n00:0B:CF\tAgfaNdt\tAgfa Ndt Inc.\n00:0B:D0\tXimetaTe\tXiMeta Technology Americas Inc.\n00:0B:D1\tAeronix\tAeronix, Inc.\n00:0B:D2\tRemoproT\tRemopro Technology Inc.\n00:0B:D3\tCd3o\t\n00:0B:D4\tBeijingW\tBeijing Wise Technology & Science Development Co.Ltd\n00:0B:D5\tNvergenc\tNvergence, Inc.\n00:0B:D6\tPaxtonAc\tPaxton Access Ltd\n00:0B:D7\tDormaTim\tDORMA Time + Access GmbH\n00:0B:D8\tIndustri\tIndustrial Scientific Corp.\n00:0B:D9\tGeneralH\tGeneral Hydrogen\n00:0B:DA\tEyecross\tEyeCross Co.,Inc.\n00:0B:DB\tDell\tDell Inc.\n00:0B:DC\tAkcp\t\n00:0B:DD\tTohokuRi\tTOHOKU RICOH Co., LTD.\n00:0B:DE\tTeldix\tTELDIX GmbH\n00:0B:DF\tShenzhen\tShenzhen RouterD Networks Limited\n00:0B:E0\tSerconet\tSercoNet Ltd.\n00:0B:E1\tNokiaNet\tNokia NET Product Operations\n00:0B:E2\tLumenera\tLumenera Corporation\n00:0B:E3\tKeyStrea\tKey Stream Co., Ltd.\n00:0B:E4\tHosiden\tHosiden Corporation\n00:0B:E5\tHimsInte\tHIMS International Corporation\n00:0B:E6\tDatelEle\tDatel Electronics\n00:0B:E7\tComfluxT\tComflux Technology Inc.\n00:0B:E8\tAoip\t\n00:0B:E9\tActel\tActel Corporation\n00:0B:EA\tZultysTe\tZultys Technologies\n00:0B:EB\tSystegra\tSystegra AG\n00:0B:EC\tNipponEl\tNippon Electric Instrument, Inc.\n00:0B:ED\tElm\tELM Inc.\n00:0B:EE\tJet\tinc.jet, Incorporated\n00:0B:EF\tCode\tCode Corporation\n00:0B:F0\tMotexPro\tMoTEX Products Co., Ltd.\n00:0B:F1\tLapLaser\tLAP Laser Applikations\n00:0B:F2\tChih-Kan\tChih-Kan Technology Co., Ltd.\n00:0B:F3\tBae\tBae Systems\n00:0B:F4\tPrivate\t\n00:0B:F5\tShanghai\tShanghai Sibo Telecom Technology Co.,Ltd\n00:0B:F6\tNitgen\tNitgen Co., Ltd\n00:0B:F7\tNidek\tNidek Co.,Ltd\n00:0B:F8\tInfinera\t\n00:0B:F9\tGemstone\tGemstone Communications, Inc.\n00:0B:FA\tExemysSr\tExemys Srl\n00:0B:FB\tD-NetInt\tD-NET International Corporation\n00:0B:FC\tCisco\tCisco Systems, Inc\n00:0B:FD\tCisco\tCisco Systems, Inc\n00:0B:FE\tCastelBr\tCASTEL Broadband Limited\n00:0B:FF\tBerkeley\tBerkeley Camera Engineering\n00:0C:00\tBebIndus\tBEB Industrie-Elektronik AG\n00:0C:01\tAbatron\tAbatron AG\n00:0C:02\tAbbOy\tABB Oy\n00:0C:03\tHdmiLice\tHDMI Licensing, LLC\n00:0C:04\tTecnova\t\n00:0C:05\tRpaReser\tRPA Reserch Co., Ltd.\n00:0C:06\tNixvuePt\tNixvue Systems  Pte Ltd\n00:0C:07\tIftest\tIftest AG\n00:0C:08\tHumexTec\tHUMEX Technologies Corp.\n00:0C:09\tHitachiI\tHitachi IE Systems Co., Ltd\n00:0C:0A\tGuangdon\tGuangdong Province Electronic Technology Research Institute\n00:0C:0B\tBroadbus\tBroadbus Technologies\n00:0C:0C\tApproTec\tAppro Technology Inc.\n00:0C:0D\tCommunic\tCommunications & Power Industries / Satcom Division\n00:0C:0E\tXtremesp\tXtremeSpectrum, Inc.\n00:0C:0F\tTechno-O\tTechno-One Co., Ltd\n00:0C:10\tPni\tPNI Corporation\n00:0C:11\tNipponDe\tNippon Dempa Co.,Ltd.\n00:0C:12\tMicro-Op\tMicro-Optronic-Messtechnik GmbH\n00:0C:13\tMediaq\t\n00:0C:14\tDiagnost\tDiagnostic Instruments, Inc.\n00:0C:15\tCyberpow\tCyberPower Systems, Inc.\n00:0C:16\tConcorde\tConcorde Microsystems Inc.\n00:0C:17\tAjaVideo\tAJA Video Systems Inc\n00:0C:18\tZenisuKe\tZenisu Keisoku Inc.\n00:0C:19\tTelioCom\tTelio Communications GmbH\n00:0C:1A\tQuestTec\tQuest Technical Solutions Inc.\n00:0C:1B\tOracom\tORACOM Co, Ltd.\n00:0C:1C\tMicroweb\tMicroWeb Co., Ltd.\n00:0C:1D\tMettlerF\tMettler & Fuchs AG\n00:0C:1E\tGlobalCa\tGlobal Cache\n00:0C:1F\tGlimmerg\tGlimmerglass Networks\n00:0C:20\tFiWin\tFi WIn, Inc.\n00:0C:21\tFacultyO\tFaculty of Science and Technology, Keio University\n00:0C:22\tDoubleDE\tDouble D Electronics Ltd\n00:0C:23\tBeijingL\tBeijing Lanchuan Tech. Co., Ltd.\n00:0C:24\tAnator\t\n00:0C:25\tAlliedTe\tAllied Telesis Labs, Inc.\n00:0C:26\tWeintekL\tWeintek Labs. Inc.\n00:0C:27\tSammy\tSammy Corporation\n00:0C:28\tRifatron\t\n00:0C:29\tVmware\tVMware, Inc.\n00:0C:2A\tOcttelCo\tOCTTEL Communication Co., Ltd.\n00:0C:2B\tEliasTec\tELIAS Technology, Inc.\n00:0C:2C\tEnwiser\tEnwiser Inc.\n00:0C:2D\tFullwave\tFullWave Technology Co., Ltd.\n00:0C:2E\tOpenetIn\tOpenet information technology(shenzhen) Co., Ltd.\n00:0C:2F\tSeorimte\tSeorimTechnology Co.,Ltd.\n00:0C:30\tCisco\tCisco Systems, Inc\n00:0C:31\tCisco\tCisco Systems, Inc\n00:0C:32\tAvionicD\tAvionic Design Development GmbH\n00:0C:33\tCompucas\tCompucase Enterprise Co. Ltd.\n00:0C:34\tVixen\tVixen Co., Ltd.\n00:0C:35\tKavoDent\tKaVo Dental GmbH & Co. KG\n00:0C:36\tSharpTak\tSharp Takaya Electronics Industry Co.,Ltd.\n00:0C:37\tGeomatio\tGeomation, Inc.\n00:0C:38\tTelcobri\tTelcoBridges Inc.\n00:0C:39\tSentinel\tSentinel Wireless Inc.\n00:0C:3A\tOxance\t\n00:0C:3B\tOrionEle\tOrion Electric Co., Ltd.\n00:0C:3C\tMediacho\tMediaChorus, Inc.\n00:0C:3D\tGlsystec\tGlsystech Co., Ltd.\n00:0C:3E\tCrestAud\tCrest Audio\n00:0C:3F\tCogentDe\tCogent Defence & Security Networks,\n00:0C:40\tAltechCo\tAltech Controls\n00:0C:41\tCisco-Li\tCisco-Linksys, LLC\n00:0C:42\tRouterbo\tRouterboard.com\n00:0C:43\tRalinkTe\tRalink Technology, Corp.\n00:0C:44\tAutomate\tAutomated Interfaces, Inc.\n00:0C:45\tAnimatio\tAnimation Technologies Inc.\n00:0C:46\tAlliedTe\tAllied Telesyn Inc.\n00:0C:47\tSkTelete\tSK Teletech(R&D Planning Team)\n00:0C:48\tQostek\tQoStek Corporation\n00:0C:49\tDangaard\tDangaard Telecom Denmark A/S\n00:0C:4A\tCygnusMi\tCygnus Microsystems (P) Limited\n00:0C:4B\tCheopsEl\tCheops Elektronik\n00:0C:4C\tArcorAg&\tArcor AG&Co.\n00:0C:4D\tCurtiss-\tCurtiss-Wright Controls Avionics & Electronics\n00:0C:4E\tWinbestT\tWinbest Technology CO,LT\n00:0C:4F\tUdtechJa\tUDTech Japan Corporation\n00:0C:50\tSeagateT\tSeagate Technology\n00:0C:51\tScientif\tScientific Technologies Inc.\n00:0C:52\tRoll\tRoll Systems Inc.\n00:0C:53\tPrivate\t\n00:0C:54\tPedestal\tPedestal Networks, Inc\n00:0C:55\tMicrolin\tMicrolink Communications Inc.\n00:0C:56\tMegatelC\tMegatel Computer (1986) Corp.\n00:0C:57\tMackieEn\tMACKIE Engineering Services Belgium BVBA\n00:0C:58\tM&S\tM&S Systems\n00:0C:59\tIndymeEl\tIndyme Electronics, Inc.\n00:0C:5A\tIbsmmEmb\tIBSmm Embedded Electronics Consulting\n00:0C:5B\tHanwangT\tHanwang Technology Co.,Ltd\n00:0C:5C\tGtnBV\tGTN Systems B.V.\n00:0C:5D\tChicTech\tCHIC TECHNOLOGY (CHINA) CORP.\n00:0C:5E\tCalypsoM\tCalypso Medical\n00:0C:5F\tAvtec\tAvtec, Inc.\n00:0C:60\tAcm\tACM Systems\n00:0C:61\tAcTechDb\tAC Tech corporation DBA Advanced Digital\n00:0C:62\tAbbCewe-\tABB AB, Cewe-Control\n00:0C:63\tZenithEl\tZenith Electronics Corporation\n00:0C:64\tX2MsaGro\tX2 MSA Group\n00:0C:65\tSuninTel\tSunin Telecom\n00:0C:66\tProntoNe\tPronto Networks Inc\n00:0C:67\tOyoElect\tOyo Electric Co.,Ltd\n00:0C:68\tSigmatel\tSigmaTel, Inc.\n00:0C:69\tNational\tNational Radio Astronomy Observatory\n00:0C:6A\tMbari\t\n00:0C:6B\tKurzIndu\tKurz Industrie-Elektronik GmbH\n00:0C:6C\tElgatoLl\tElgato Systems LLC\n00:0C:6D\tEdwards\tEdwards Ltd.\n00:0C:6E\tAsustekC\tASUSTek COMPUTER INC.\n00:0C:6F\tAmtekSys\tAmtek system co.,LTD.\n00:0C:70\tAcc\tACC GmbH\n00:0C:71\tWybron\tWybron, Inc\n00:0C:72\tTempearl\tTempearl Industrial Co., Ltd.\n00:0C:73\tTelsonEl\tTelson Electronics Co., Ltd\n00:0C:74\tRivertec\tRivertec Corporation\n00:0C:75\tOriental\tOriental integrated electronics. LTD\n00:0C:76\tMicro-St\tMICRO-STAR INTERNATIONAL CO., LTD.\n00:0C:77\tLifeRaci\tLife Racing Ltd\n00:0C:78\tIn-TechE\tIn-Tech Electronics Limited\n00:0C:79\tExtelCom\tExtel Communications P/L\n00:0C:7A\tDatarius\tDaTARIUS Technologies GmbH\n00:0C:7B\tAlphaPro\tALPHA PROJECT Co.,Ltd.\n00:0C:7C\tInternet\tInternet Information Image Inc.\n00:0C:7D\tTeikokuE\tTeikoku Electric Mfg. Co., Ltd\n00:0C:7E\tTellium\tTellium Incorporated\n00:0C:7F\tSynertro\tsynertronixx GmbH\n00:0C:80\tOpelcomm\tOpelcomm Inc.\n00:0C:81\tSchneide\tSchneider Electric (Australia)\n00:0C:82\tNetworkT\tNetwork Technologies Inc\n00:0C:83\tLogicalS\tLogical Solutions\n00:0C:84\tEazix\tEazix, Inc.\n00:0C:85\tCisco\tCisco Systems, Inc\n00:0C:86\tCisco\tCisco Systems, Inc\n00:0C:87\tAmd\t\n00:0C:88\tApacheMi\tApache Micro Peripherals, Inc.\n00:0C:89\tAcElectr\tAC Electric Vehicles, Ltd.\n00:0C:8A\tBose\tBose Corporation\n00:0C:8B\tConnectT\tConnect Tech Inc\n00:0C:8C\tKodicom\tKodicom Co.,Ltd.\n00:0C:8D\tMatrixVi\tMATRIX VISION GmbH\n00:0C:8E\tMentorEn\tMentor Engineering Inc\n00:0C:8F\tNergalSR\tNergal s.r.l.\n00:0C:90\tOctasic\tOctasic Inc.\n00:0C:91\tRiverhea\tRiverhead Networks Inc.\n00:0C:92\tWolfvisi\tWolfVision Gmbh\n00:0C:93\tXeline\tXeline Co., Ltd.\n00:0C:94\tUnitedEl\tUnited Electronic Industries, Inc. (EUI)\n00:0C:95\tPrimenet\t\n00:0C:96\tOqo\tOQO, Inc.\n00:0C:97\tNvAdbTtv\tNV ADB TTV Technologies SA\n00:0C:98\tLetekCom\tLETEK Communications Inc.\n00:0C:99\tHitelLin\tHITEL LINK Co.,Ltd\n00:0C:9A\tHitechEl\tHitech Electronics Corp.\n00:0C:9B\tEeSoluti\tEE Solutions, Inc\n00:0C:9C\tChonghoI\tChongho information & communications\n00:0C:9D\tUbeeairw\tUbeeAirWalk, Inc.\n00:0C:9E\tMemoryli\tMemoryLink Corp.\n00:0C:9F\tNke\tNKE Corporation\n00:0C:A0\tStorcase\tStorCase Technology, Inc.\n00:0C:A1\tSigmacom\tSIGMACOM Co., LTD.\n00:0C:A2\tHarmonic\tHarmonic Video Network\n00:0C:A3\tRanchoTe\tRancho Technology, Inc.\n00:0C:A4\tPromptte\tPrompttec Product Management GmbH\n00:0C:A5\tNamanNz\tNaman NZ LTd\n00:0C:A6\tMintera\tMintera Corporation\n00:0C:A7\tMetroSuz\tMetro (Suzhou) Technologies Co., Ltd.\n00:0C:A8\tGarudaNe\tGaruda Networks Corporation\n00:0C:A9\tEbtron\tEbtron Inc.\n00:0C:AA\tCubicTra\tCubic Transportation Systems Inc\n00:0C:AB\tCommendI\tCommend International GmbH\n00:0C:AC\tCitizenW\tCitizen Watch Co., Ltd.\n00:0C:AD\tBtuInter\tBTU International\n00:0C:AE\tAilocomO\tAilocom Oy\n00:0C:AF\tTriTerm\tTri Term Co.,Ltd.\n00:0C:B0\tStarSemi\tStar Semiconductor Corporation\n00:0C:B1\tSallandE\tSalland Engineering (Europe) BV\n00:0C:B2\tUnion\tUNION co., ltd.\n00:0C:B3\tRound\tROUND Co.,Ltd.\n00:0C:B4\tAutocell\tAutoCell Laboratories, Inc.\n00:0C:B5\tPremierT\tPremier Technolgies, Inc\n00:0C:B6\tNanjingS\tNANJING SEU MOBILE & INTERNET TECHNOLOGY CO.,LTD\n00:0C:B7\tNanjingH\tNanjing Huazhuo Electronics Co., Ltd.\n00:0C:B8\tMedion\tMedion Ag\n00:0C:B9\tLea\t\n00:0C:BA\tJamex\tJamex, Inc.\n00:0C:BB\tIskraeme\tIskraemeco\n00:0C:BC\tIscutum\t\n00:0C:BD\tInterfac\tInterface Masters, Inc\n00:0C:BE\tInnomina\tInnominate Security Technologies AG\n00:0C:BF\tHolySton\tHoly Stone Ent. Co., Ltd.\n00:0C:C0\tGeneraOy\tGenera Oy\n00:0C:C1\tEaton\tEaton Corporation\n00:0C:C2\tControln\tControlNet (India) Private Limited\n00:0C:C3\tBewan\tBeWAN systems\n00:0C:C4\tTiptel\tTiptel AG\n00:0C:C5\tNextlink\tNextlink Co., Ltd.\n00:0C:C6\tKa-RoEle\tKa-Ro electronics GmbH\n00:0C:C7\tIntellig\tIntelligent Computer Solutions Inc.\n00:0C:C8\tXytronix\tXytronix Research & Design, Inc.\n00:0C:C9\tIlwooDat\tILWOO DATA & TECHNOLOGY CO.,LTD\n00:0C:CA\tHgstAWes\tHGST a Western Digital Company\n00:0C:CB\tDesignCo\tDesign Combus Ltd\n00:0C:CC\tAeroscou\tAeroscout Ltd.\n00:0C:CD\tIec-Tc57\tIEC - TC57\n00:0C:CE\tCisco\tCisco Systems, Inc\n00:0C:CF\tCisco\tCisco Systems, Inc\n00:0C:D0\tSymetrix\t\n00:0C:D1\tSfomTech\tSFOM Technology Corp.\n00:0C:D2\tSchaffne\tSchaffner EMV AG\n00:0C:D3\tPrettlEl\tPrettl Elektronik Radeberg GmbH\n00:0C:D4\tPositron\tPositron Public Safety Systems inc.\n00:0C:D5\tPassave\tPassave Inc.\n00:0C:D6\tPartnerT\tPartner Tech\n00:0C:D7\tNallatec\tNallatech Ltd\n00:0C:D8\tMKJuchhe\tM. K. Juchheim GmbH & Co\n00:0C:D9\tItcare\tItcare Co., Ltd\n00:0C:DA\tFreehand\tFreeHand Systems, Inc.\n00:0C:DB\tBrocadeC\tBrocade Communications Systems, Inc.\n00:0C:DC\tBecsTech\tBECS Technology, Inc\n00:0C:DD\tAosTechn\tAOS technologies AG\n00:0C:DE\tAbbStotz\tABB STOTZ-KONTAKT GmbH\n00:0C:DF\tPulnixAm\tPULNiX America, Inc\n00:0C:E0\tTrekDiag\tTrek Diagnostics Inc.\n00:0C:E1\tOpenGrou\tThe Open Group\n00:0C:E2\tRolls-Ro\tRolls-Royce\n00:0C:E3\tOptionIn\tOption International N.V.\n00:0C:E4\tNeurocom\tNeuroCom International, Inc.\n00:0C:E5\tArrisGro\tARRIS Group, Inc.\n00:0C:E6\tMeruNetw\tMeru Networks Inc\n00:0C:E7\tMediatek\tMediaTek Inc.\n00:0C:E8\tGuangzho\tGuangZhou AnJuBao Co., Ltd\n00:0C:E9\tBloomber\tBloomberg L.P.\n00:0C:EA\tAphonaKo\taphona Kommunikationssysteme\n00:0C:EB\tCnmpNetw\tCNMP Networks, Inc.\n00:0C:EC\tSpectrac\tSpectracom Corp.\n00:0C:ED\tRealDigi\tReal Digital Media\n00:0C:EE\tJp-Embed\tjp-embedded\n00:0C:EF\tOpenNetw\tOpen Networks Engineering Ltd\n00:0C:F0\tMN\tM & N GmbH\n00:0C:F1\tIntel\tIntel Corporation\n00:0C:F2\tGamesaEó\tGAMESA Eólica\n00:0C:F3\tCallImag\tCall Image Sa\n00:0C:F4\tAkatsuki\tAkatsuki Electric Mfg.Co.,Ltd.\n00:0C:F5\tInfoexpr\tInfoExpress\n00:0C:F6\tSitecomE\tSitecom Europe BV\n00:0C:F7\tNortelNe\tNortel Networks\n00:0C:F8\tNortelNe\tNortel Networks\n00:0C:F9\tXylemWat\tXylem Water Solutions\n00:0C:FA\tDigital\tDigital Systems Corp\n00:0C:FB\tKoreaNet\tKorea Network Systems\n00:0C:FC\tS2ioTech\tS2io Technologies Corp\n00:0C:FD\tHyundaiI\tHyundai ImageQuest Co.,Ltd.\n00:0C:FE\tGrandEle\tGrand Electronic Co., Ltd\n00:0C:FF\tMro-Tek\tMRO-TEK LIMITED\n00:0D:00\tSeawayNe\tSeaway Networks Inc.\n00:0D:01\tP&EMicro\tP&E Microcomputer Systems, Inc.\n00:0D:02\tNecPlatf\tNEC Platforms, Ltd.\n00:0D:03\tMatrics\tMatrics, Inc.\n00:0D:04\tFoxboroE\tFoxboro Eckardt Development GmbH\n00:0D:05\tCybernet\tcybernet manufacturing inc.\n00:0D:06\tCompulog\tCompulogic Limited\n00:0D:07\tCalrecAu\tCalrec Audio Ltd\n00:0D:08\tAbovecab\tAboveCable, Inc.\n00:0D:09\tYuehuaZh\tYuehua(Zhuhai) Electronic CO. LTD\n00:0D:0A\tProjecti\tProjectiondesign as\n00:0D:0B\tBuffalo\tBuffalo.Inc\n00:0D:0C\tMdiSecur\tMDI Security Systems\n00:0D:0D\tItsuppor\tITSupported, LLC\n00:0D:0E\tInqnet\tInqnet Systems, Inc.\n00:0D:0F\tFinlux\tFinlux Ltd\n00:0D:10\tEmbedtro\tEmbedtronics Oy\n00:0D:11\tDentsply\tDENTSPLY - Gendex\n00:0D:12\tAxell\tAXELL Corporation\n00:0D:13\tWilhelmR\tWilhelm Rutenbeck GmbH&Co.KG\n00:0D:14\tVtechInn\tVtech Innovation LP dba Advanced American Telephones\n00:0D:15\tVoipacSR\tVoipac s.r.o.\n00:0D:16\tUhsPty\tUHS Systems Pty Ltd\n00:0D:17\tTurboNet\tTurbo Networks Co.Ltd\n00:0D:18\tMega-Tre\tMega-Trend Electronics CO., LTD.\n00:0D:19\tRobeShow\tROBE Show lighting\n00:0D:1A\tMustekSy\tMustek System Inc.\n00:0D:1B\tKyotoEle\tKyoto Electronics Manufacturing Co., Ltd.\n00:0D:1C\tAmesysDe\tAmesys Defense\n00:0D:1D\tHigh-Tek\tHIGH-TEK HARNESS ENT. CO., LTD.\n00:0D:1E\tControlT\tControl Techniques\n00:0D:1F\tAvDigita\tAV Digital\n00:0D:20\tAsahikas\tAsahikasei Technosystem Co.,Ltd.\n00:0D:21\tWiscore\tWISCORE Inc.\n00:0D:22\tUnitroni\tUnitronics LTD\n00:0D:23\tSmartSol\tSmart Solution, Inc\n00:0D:24\tSentecE&\tSENTEC E&E CO., LTD.\n00:0D:25\tSanden\tSanden Corporation\n00:0D:26\tPrimagra\tPrimagraphics Limited\n00:0D:27\tMicrople\tMICROPLEX Printware AG\n00:0D:28\tCisco\tCisco Systems, Inc\n00:0D:29\tCisco\tCisco Systems, Inc\n00:0D:2A\tScanmati\tScanmatic AS\n00:0D:2B\tRacalIns\tRacal Instruments\n00:0D:2C\tNet2edge\tNet2Edge Limited\n00:0D:2D\tNctDeuts\tNCT Deutschland GmbH\n00:0D:2E\tMatsushi\tMatsushita Avionics Systems Corporation\n00:0D:2F\tAinCommT\tAIN Comm.Tech.Co., LTD\n00:0D:30\tIcefyreS\tIceFyre Semiconductor\n00:0D:31\tCompelle\tCompellent Technologies, Inc.\n00:0D:32\tDispense\tDispenseSource, Inc.\n00:0D:33\tPrediwav\tPrediwave Corp.\n00:0D:34\tShellInt\tShell International Exploration and Production, Inc.\n00:0D:35\tPacInter\tPAC International Ltd\n00:0D:36\tWuHanRou\tWu Han Routon Electronic Co., Ltd\n00:0D:37\tWiplug\t\n00:0D:38\tNissin\tNissin Inc.\n00:0D:39\tNetworkE\tNetwork Electronics\n00:0D:3A\tMicrosof\tMicrosoft Corp.\n00:0D:3B\tMicroele\tMicroelectronics Technology Inc.\n00:0D:3C\tITechDyn\ti.Tech Dynamic Ltd\n00:0D:3D\tHammerhe\tHammerhead Systems, Inc.\n00:0D:3E\tApluxCom\tAPLUX Communications Ltd.\n00:0D:3F\tVtiInstr\tVTI Instruments Corporation\n00:0D:40\tVerintLo\tVerint Loronix Video Solutions\n00:0D:41\tSiemensI\tSiemens AG ICM MP UC RD IT KLF1\n00:0D:42\tNewbestD\tNewbest Development Limited\n00:0D:43\tDrsTacti\tDRS Tactical Systems Inc.\n00:0D:44\tAudioBu-\tAudio BU - Logitech\n00:0D:45\tTottoriS\tTottori SANYO Electric Co., Ltd.\n00:0D:46\tParkerSs\tParker SSD Drives\n00:0D:47\tCollex\t\n00:0D:48\tAewinTec\tAEWIN Technologies Co., Ltd.\n00:0D:49\tTritonOf\tTriton Systems of Delaware, Inc.\n00:0D:4A\tSteagEta\tSteag ETA-Optik\n00:0D:4B\tRoku\tRoku, Inc.\n00:0D:4C\tOutlineE\tOutline Electronics Ltd.\n00:0D:4D\tNinelane\tNinelanes\n00:0D:4E\tNdr\tNDR Co.,LTD.\n00:0D:4F\tKenwood\tKenwood Corporation\n00:0D:50\tGalazarN\tGalazar Networks\n00:0D:51\tDivr\tDIVR Systems, Inc.\n00:0D:52\tComartSy\tComart system\n00:0D:53\tBeijing5\tBeijing 5w Communication Corp.\n00:0D:54\t3com\t3Com Ltd\n00:0D:55\tSanycomT\tSANYCOM Technology Co.,Ltd\n00:0D:56\tDell\tDell Inc.\n00:0D:57\tFujitsuI\tFujitsu I-Network Systems Limited.\n00:0D:58\tPrivate\t\n00:0D:59\tAmity\tAmity Systems, Inc.\n00:0D:5A\tTiesse\tTiesse SpA\n00:0D:5B\tSmartEmp\tSmart Empire Investments Limited\n00:0D:5C\tRobertBo\tRobert Bosch GmbH, VT-ATMO\n00:0D:5D\tRaritanC\tRaritan Computer, Inc\n00:0D:5E\tNecPerso\tNEC Personal Products\n00:0D:5F\tMinds\tMinds Inc\n00:0D:60\tIbm\tIBM Corp\n00:0D:61\tGiga-Byt\tGiga-Byte Technology Co., Ltd.\n00:0D:62\tFunkwerk\tFunkwerk Dabendorf GmbH\n00:0D:63\tDentInst\tDENT Instruments, Inc.\n00:0D:64\tComagHan\tCOMAG Handels AG\n00:0D:65\tCisco\tCisco Systems, Inc\n00:0D:66\tCisco\tCisco Systems, Inc\n00:0D:67\tEricsson\t\n00:0D:68\tVinci\tVinci Systems, Inc.\n00:0D:69\tTmt&D\tTMT&D Corporation\n00:0D:6A\tRedwoodT\tRedwood Technologies LTD\n00:0D:6B\tMita-Tek\tMita-Teknik A/S\n00:0D:6C\tM-Audio\t\n00:0D:6D\tK-TechDe\tK-Tech Devices Corp.\n00:0D:6E\tK-Patent\tK-Patents Oy\n00:0D:6F\tEmber\tEmber Corporation\n00:0D:70\tDatamax\tDatamax Corporation\n00:0D:71\tBoca\tboca systems\n00:0D:72\t2wire\t2Wire Inc\n00:0D:73\tTechnica\tTechnical Support, Inc.\n00:0D:74\tSandNetw\tSand Network Systems, Inc.\n00:0D:75\tKobianPt\tKobian Pte Ltd - Taiwan Branch\n00:0D:76\tHokutoDe\tHokuto Denshi Co,. Ltd.\n00:0D:77\tFalconst\tFalconStor Software\n00:0D:78\tEngineer\tEngineering & Security\n00:0D:79\tDynamicS\tDynamic Solutions Co,.Ltd.\n00:0D:7A\tDigattoA\tDiGATTO Asia Pacific Pte Ltd\n00:0D:7B\tConsensy\tConsensys Computers Inc.\n00:0D:7C\tCodian\tCodian Ltd\n00:0D:7D\tAfco\tAfco Systems\n00:0D:7E\tAxiowave\tAxiowave Networks, Inc.\n00:0D:7F\tMidasCom\tMIDAS  COMMUNICATION TECHNOLOGIES PTE LTD ( Foreign Branch)\n00:0D:80\tOnlineDe\tOnline Development Inc\n00:0D:81\tPepperl+\tPepperl+Fuchs GmbH\n00:0D:82\tPhsnetSr\tPhsnet Srls\n00:0D:83\tSanmina-\tSanmina-SCI Hungary  Ltd.\n00:0D:84\tMakus\tMakus Inc.\n00:0D:85\tTapwave\tTapwave, Inc.\n00:0D:86\tHuber+Su\tHuber + Suhner AG\n00:0D:87\tElitegro\tElitegroup Computer Systems Co.,Ltd.\n00:0D:88\tD-Link\tD-Link Corporation\n00:0D:89\tBilsTech\tBils Technology Inc\n00:0D:8A\tWinnersE\tWinners Electronics Co., Ltd.\n00:0D:8B\tT&D\tT&D Corporation\n00:0D:8C\tShanghai\tShanghai Wedone Digital Ltd. CO.\n00:0D:8D\tProsoftT\tProsoft Technology, Inc\n00:0D:8E\tKodenEle\tKoden Electronics Co., Ltd.\n00:0D:8F\tKingTsus\tKing Tsushin Kogyo Co., LTD.\n00:0D:90\tFactumEl\tFactum Electronics AB\n00:0D:91\tEclipseH\tEclipse (HQ Espana) S.L.\n00:0D:92\tArimaCom\tARIMA Communications Corp.\n00:0D:93\tApple\tApple, Inc.\n00:0D:94\tAfarComm\tAFAR Communications,Inc\n00:0D:95\tOpti-Cel\tOpti-cell, Inc.\n00:0D:96\tVteraTec\tVtera Technology Inc.\n00:0D:97\tAbb/Trop\tABB Inc./Tropos\n00:0D:98\tSWACSchm\tS.W.A.C. Schmitt-Walter Automation Consult GmbH\n00:0D:99\tOrbitalS\tOrbital Sciences Corp.; Launch Systems Group\n00:0D:9A\tInfotec\tInfotec Ltd\n00:0D:9B\tHeraeusE\tHeraeus Electro-Nite International N.V.\n00:0D:9C\tElan\tElan GmbH & Co KG\n00:0D:9D\tHewlettP\tHewlett Packard\n00:0D:9E\tTokudenO\tTOKUDEN OHIZUMI SEISAKUSYO Co.,Ltd.\n00:0D:9F\tRfMicroD\tRF Micro Devices\n00:0D:A0\tNedapNV\tNedap N.V.\n00:0D:A1\tMiraeIts\tMIRAE ITS Co.,LTD.\n00:0D:A2\tInfrantT\tInfrant Technologies, Inc.\n00:0D:A3\tEmerging\tEmerging Technologies Limited\n00:0D:A4\tDoschAma\tDOSCH & AMAND SYSTEMS AG\n00:0D:A5\tFabric7\tFabric7 Systems, Inc\n00:0D:A6\tUniversa\tUniversal Switching Corporation\n00:0D:A7\tPrivate\t\n00:0D:A8\tTeletron\tTeletronics Technology Corporation\n00:0D:A9\tTEAMSL\tT.E.A.M. S.L.\n00:0D:AA\tSATehnol\tS.A.Tehnology co.,Ltd.\n00:0D:AB\tParkerHa\tParker Hannifin GmbH Electromechanical Division Europe\n00:0D:AC\tJapanCbm\tJapan CBM Corporation\n00:0D:AD\tDataprob\tDataprobe, Inc.\n00:0D:AE\tSamsungH\tSamsung Heavy Industries Co., Ltd.\n00:0D:AF\tPlexusUk\tPlexus Corp (UK) Ltd\n00:0D:B0\tOlym-Tec\tOlym-tech Co.,Ltd.\n00:0D:B1\tJapanNet\tJapan Network Service Co., Ltd.\n00:0D:B2\tAmmasso\tAmmasso, Inc.\n00:0D:B3\tSdoCommu\tSDO Communication Corperation\n00:0D:B4\tNetasq\t\n00:0D:B5\tGlobalsa\tGlobalsat Technology Corporation\n00:0D:B6\tBroadcom\t\n00:0D:B7\tSankoEle\tSanko Electric Co,.Ltd\n00:0D:B8\tSchiller\tSchiller Ag\n00:0D:B9\tPcEngine\tPC Engines GmbH\n00:0D:BA\tOcéDocum\tOcé Document Technologies GmbH\n00:0D:BB\tNipponDe\tNippon Dentsu Co.,Ltd.\n00:0D:BC\tCisco\tCisco Systems, Inc\n00:0D:BD\tCisco\tCisco Systems, Inc\n00:0D:BE\tBelFuseE\tBel Fuse Europe Ltd.,UK\n00:0D:BF\tTektoneS\tTekTone Sound & Signal Mfg., Inc.\n00:0D:C0\tSpagatAs\tSpagat AS\n00:0D:C1\tSafeweb\tSafeWeb Inc\n00:0D:C2\tPrivate\t\n00:0D:C3\tFirstCom\tFirst Communication, Inc.\n00:0D:C4\tEmcore\tEmcore Corporation\n00:0D:C5\tEchostar\tEchoStar Global B.V.\n00:0D:C6\tDigirose\tDigiRose Technology Co., Ltd.\n00:0D:C7\tCosmicEn\tCosmic Engineering Inc.\n00:0D:C8\tAirmagne\tAirMagnet, Inc\n00:0D:C9\tThalesEl\tTHALES Elektronik Systeme GmbH\n00:0D:CA\tTaitElec\tTait Electronics\n00:0D:CB\tPetcomko\tPetcomkorea Co., Ltd.\n00:0D:CC\tNeosmart\tNEOSMART Corp.\n00:0D:CD\tGroupeTx\tGroupe Txcom\n00:0D:CE\tDynavacT\tDynavac Technology Pte Ltd\n00:0D:CF\tCidra\tCidra Corp.\n00:0D:D0\tTetratec\tTetraTec Instruments GmbH\n00:0D:D1\tStryker\tStryker Corporation\n00:0D:D2\tSimradOp\tSimrad Optronics ASA\n00:0D:D3\tSamwooTe\tSAMWOO Telecommunication Co.,Ltd.\n00:0D:D4\tSymantec\tSymantec Corporation\n00:0D:D5\tORiteTec\tO'RITE TECHNOLOGY CO.,LTD\n00:0D:D6\tIti\tIti Ltd\n00:0D:D7\tBright\t\n00:0D:D8\tBbn\t\n00:0D:D9\tAntonPaa\tAnton Paar GmbH\n00:0D:DA\tAlliedTe\tAllied Telesis K.K.\n00:0D:DB\tAirwaveT\tAirwave Technologies Inc.\n00:0D:DC\tVac\t\n00:0D:DD\tProfiloT\tProfilo Telra Elektronik Sanayi ve Ticaret. A.Ş\n00:0D:DE\tJoyteck\tJoyteck Co., Ltd.\n00:0D:DF\tJapanIma\tJapan Image & Network Inc.\n00:0D:E0\tIcpdas\tICPDAS Co.,LTD\n00:0D:E1\tControlP\tControl Products, Inc.\n00:0D:E2\tCmzSiste\tCMZ Sistemi Elettronici\n00:0D:E3\tAtSweden\tAT Sweden AB\n00:0D:E4\tDiginics\tDIGINICS, Inc.\n00:0D:E5\tSamsungT\tSamsung Thales\n00:0D:E6\tYoungboE\tYoungbo Engineering Co.,Ltd\n00:0D:E7\tSnap-OnO\tSnap-on OEM Group\n00:0D:E8\tNasacoEl\tNasaco Electronics Pte. Ltd\n00:0D:E9\tNapatech\tNapatech Aps\n00:0D:EA\tKingtelT\tKingtel Telecommunication Corp.\n00:0D:EB\tCompxs\tCompXs Limited\n00:0D:EC\tCisco\tCisco Systems, Inc\n00:0D:ED\tCisco\tCisco Systems, Inc\n00:0D:EE\tAndrewRf\tAndrew RF Power Amplifier Group\n00:0D:EF\tSocCoopB\tSoc. Coop. Bilanciai\n00:0D:F0\tQcomTech\tQcom Technology Inc.\n00:0D:F1\tIonix\tIonix Inc.\n00:0D:F2\tPrivate\t\n00:0D:F3\tAsmaxSol\tAsmax Solutions\n00:0D:F4\tWatertek\tWatertek Co.\n00:0D:F5\tTeletron\tTeletronics International Inc.\n00:0D:F6\tTechnolo\tTechnology Thesaurus Corp.\n00:0D:F7\tSpaceDyn\tSpace Dynamics Lab\n00:0D:F8\tOrgaKart\tORGA Kartensysteme GmbH\n00:0D:F9\tNds\tNDS Limited\n00:0D:FA\tMicroCon\tMicro Control Systems Ltd.\n00:0D:FB\tKomax\tKomax AG\n00:0D:FC\tItfor\tITFOR Inc.\n00:0D:FD\tHugesHi-\tHuges Hi-Tech Inc.,\n00:0D:FE\tHauppaug\tHauppauge Computer Works, Inc.\n00:0D:FF\tChenming\tChenming Mold Industry Corp.\n00:0E:00\tAtrie\t\n00:0E:01\tAsipTech\tASIP Technologies Inc.\n00:0E:02\tAdvantec\tAdvantech AMT Inc.\n00:0E:03\tEmulex\tEmulex Corporation\n00:0E:04\tCma/Micr\tCMA/Microdialysis AB\n00:0E:05\tWireless\tWireless Matrix Corp.\n00:0E:06\tTeamSimo\tTeam Simoco Ltd\n00:0E:07\tSonyMobi\tSony Mobile Communications Inc\n00:0E:08\tCisco-Li\tCisco-Linksys, LLC\n00:0E:09\tShenzhen\tShenzhen Coship Software Co.,LTD.\n00:0E:0A\tSakumaDe\tSakuma Design Office\n00:0E:0B\tNetacTec\tNetac Technology Co., Ltd.\n00:0E:0C\tIntel\tIntel Corporation\n00:0E:0D\tHeschSch\tHesch Schröder GmbH\n00:0E:0E\tEsaElett\tESA elettronica S.P.A.\n00:0E:0F\tErmme\t\n00:0E:10\tC-Guys\tC-guys, Inc.\n00:0E:11\tBdtBüroU\tBDT Büro und Datentechnik GmbH & Co.KG\n00:0E:12\tAdaptive\tAdaptive Micro Systems Inc.\n00:0E:13\tAccu-Sor\tAccu-Sort Systems inc.\n00:0E:14\tVisionar\tVisionary Solutions, Inc.\n00:0E:15\tTadlys\tTadlys LTD\n00:0E:16\tSouthwin\tSouthWing S.L.\n00:0E:17\tPrivate\t\n00:0E:18\tMyaTechn\tMyA Technology\n00:0E:19\tLogicacm\tLogicaCMG Pty Ltd\n00:0E:1A\tJpsCommu\tJPS Communications\n00:0E:1B\tIav\tIAV GmbH\n00:0E:1C\tHach\tHach Company\n00:0E:1D\tArionTec\tARION Technology Inc.\n00:0E:1E\tQlogic\tQLogic Corporation\n00:0E:1F\tTclNetwo\tTCL Networks Equipment Co., Ltd.\n00:0E:20\tAccessAm\tACCESS Systems Americas, Inc.\n00:0E:21\tMtuFried\tMTU Friedrichshafen GmbH\n00:0E:22\tPrivate\t\n00:0E:23\tIncipien\tIncipient, Inc.\n00:0E:24\tHuwellTe\tHuwell Technology Inc.\n00:0E:25\tHannaeTe\tHannae Technology Co., Ltd\n00:0E:26\tGincomTe\tGincom Technology Corp.\n00:0E:27\tCrereNet\tCrere Networks, Inc.\n00:0E:28\tDynamicR\tDynamic Ratings P/L\n00:0E:29\tShesterC\tShester Communications Inc\n00:0E:2A\tPrivate\t\n00:0E:2B\tSafariTe\tSafari Technologies\n00:0E:2C\tNetcodec\tNetcodec co.\n00:0E:2D\tHyundaiD\tHyundai Digital Technology Co.,Ltd.\n00:0E:2E\tEdimaxTe\tEdimax Technology Co. Ltd.\n00:0E:2F\tRocheDia\tRoche Diagnostics GmbH\n00:0E:30\tAerasNet\tAERAS Networks, Inc.\n00:0E:31\tOlympusS\tOlympus Soft Imaging Solutions GmbH\n00:0E:32\tKontronM\tKontron Medical\n00:0E:33\tShukoEle\tShuko Electronics Co.,Ltd\n00:0E:34\tNexgenCi\tNexGen City, LP\n00:0E:35\tIntel\tIntel Corporation\n00:0E:36\tHeinesys\tHEINESYS, Inc.\n00:0E:37\tHarmsWen\tHarms & Wende GmbH & Co.KG\n00:0E:38\tCisco\tCisco Systems, Inc\n00:0E:39\tCisco\tCisco Systems, Inc\n00:0E:3A\tCirrusLo\tCirrus Logic\n00:0E:3B\tHawkingT\tHawking Technologies, Inc.\n00:0E:3C\tTransact\tTransact Technologies Inc\n00:0E:3D\tTelevicN\tTelevic N.V.\n00:0E:3E\tSunOptro\tSun Optronics Inc\n00:0E:3F\tSoronti\tSoronti, Inc.\n00:0E:40\tNortelNe\tNortel Networks\n00:0E:41\tNihonMec\tNihon Mechatronics Co.,Ltd.\n00:0E:42\tMoticInc\tMotic Incoporation Ltd.\n00:0E:43\tG-TekEle\tG-Tek Electronics Sdn. Bhd.\n00:0E:44\tDigital5\tDigital 5, Inc.\n00:0E:45\tBeijingN\tBeijing Newtry Electronic Technology Ltd\n00:0E:46\tNiigataS\tNiigata Seimitsu Co.,Ltd.\n00:0E:47\tNciSyste\tNCI System Co.,Ltd.\n00:0E:48\tLipmanTr\tLipman TransAction Solutions\n00:0E:49\tForswayS\tForsway Scandinavia AB\n00:0E:4A\tChangchu\tChangchun Huayu WEBPAD Co.,LTD\n00:0E:4B\tAtriumCA\tatrium c and i\n00:0E:4C\tBermai\tBermai Inc.\n00:0E:4D\tNumesa\tNumesa Inc.\n00:0E:4E\tWaveplus\tWaveplus Technology Co., Ltd.\n00:0E:4F\tTrajet\tTrajet GmbH\n00:0E:50\tThomsonT\tThomson Telecom Belgium\n00:0E:51\tTecnaEle\ttecna elettronica srl\n00:0E:52\tOptium\tOptium Corporation\n00:0E:53\tAvTech\tAv Tech Corporation\n00:0E:54\tAlphacel\tAlphaCell Wireless Ltd.\n00:0E:55\tAuvitran\t\n00:0E:56\t4g\t4G Systems GmbH & Co. KG\n00:0E:57\tIworldNe\tIworld Networking, Inc.\n00:0E:58\tSonos\tSonos, Inc.\n00:0E:59\tSagemcom\tSagemcom Broadband SAS\n00:0E:5A\tTelefiel\tTELEFIELD inc.\n00:0E:5B\tParkervi\tParkerVision - Direct2Data\n00:0E:5C\tArrisGro\tARRIS Group, Inc.\n00:0E:5D\tTriplePl\tTriple Play Technologies A/S\n00:0E:5E\tRaisecom\tRaisecom Technology\n00:0E:5F\tActiv-Ne\tactiv-net GmbH & Co. KG\n00:0E:60\t360sunDi\t360SUN Digital Broadband Corporation\n00:0E:61\tMicrotro\tMicrotrol Limited\n00:0E:62\tNortelNe\tNortel Networks\n00:0E:63\tLemkeDia\tLemke Diagnostics GmbH\n00:0E:64\tElphel\tElphel, Inc\n00:0E:65\tTranscor\tTransCore\n00:0E:66\tHitachiI\tHitachi Industry & Control Solutions, Ltd.\n00:0E:67\tEltisMic\tEltis Microelectronics Ltd.\n00:0E:68\tE-TopNet\tE-TOP Network Technology Inc.\n00:0E:69\tChinaEle\tChina Electric Power Research Institute\n00:0E:6A\t3com\t3Com Ltd\n00:0E:6B\tJanitzaE\tJanitza electronics GmbH\n00:0E:6C\tDeviceDr\tDevice Drivers Limited\n00:0E:6D\tMurataMa\tMurata Manufacturing Co., Ltd.\n00:0E:6E\tMatSAMir\tMAT S.A. (Mircrelec Advanced Technology)\n00:0E:6F\tIrisBerh\tIRIS Corporation Berhad\n00:0E:70\tIn2Netwo\tin2 Networks\n00:0E:71\tGemstarT\tGemstar Technology Development Ltd.\n00:0E:72\tCtsElect\tCTS electronics\n00:0E:73\tTpack\tTpack A/S\n00:0E:74\tSolarTel\tSolar Telecom. Tech\n00:0E:75\tNewYorkA\tNew York Air Brake Corp.\n00:0E:76\tGemsocIn\tGemsoc Innovision Inc.\n00:0E:77\tDecru\tDecru, Inc.\n00:0E:78\tAmtelco\t\n00:0E:79\tAmpleCom\tAmple Communications Inc.\n00:0E:7A\tGemwonCo\tGemWon Communications Co., Ltd.\n00:0E:7B\tToshiba\t\n00:0E:7C\tTelevesS\tTeleves S.A.\n00:0E:7D\tElectron\tElectronics Line 3000 Ltd.\n00:0E:7E\tIonsignO\tionSign Oy\n00:0E:7F\tHewlettP\tHewlett Packard\n00:0E:80\tThomsonT\tThomson Technology Inc\n00:0E:81\tDevicesc\tDevicescape Software, Inc.\n00:0E:82\tCommtech\tCommtech Wireless\n00:0E:83\tCisco\tCisco Systems, Inc\n00:0E:84\tCisco\tCisco Systems, Inc\n00:0E:85\tCatalyst\tCatalyst Enterprises, Inc.\n00:0E:86\tAlcatelN\tAlcatel North America\n00:0E:87\tAdpGause\tadp Gauselmann GmbH\n00:0E:88\tVideotro\tVideotron Corp.\n00:0E:89\tClematic\t\n00:0E:8A\tAvaraTec\tAvara Technologies Pty. Ltd.\n00:0E:8B\tAstarteT\tAstarte Technology Co, Ltd.\n00:0E:8C\tSiemensA\tSiemens AG A&D ET\n00:0E:8D\tInProgre\tSystems in Progress Holding GmbH\n00:0E:8E\tSparklan\tSparkLAN Communications, Inc.\n00:0E:8F\tSercomm\tSercomm Corporation.\n00:0E:90\tPonico\tPonico Corp.\n00:0E:91\tNavicoAu\tNavico Auckland Ltd\n00:0E:92\tOpenTele\tOpen Telecom\n00:0E:93\tMilénio3\tMilénio 3 Sistemas Electrónicos, Lda.\n00:0E:94\tMaasInte\tMaas International BV\n00:0E:95\tFujiyaDe\tFujiya Denki Seisakusho Co.,Ltd.\n00:0E:96\tCubicDef\tCubic Defense Applications, Inc.\n00:0E:97\tUltracke\tUltracker Technology CO., Inc\n00:0E:98\tHmeClear\tHME Clear-Com LTD.\n00:0E:99\tSpectrum\tSpectrum Digital, Inc\n00:0E:9A\tBoeTechn\tBoe Technology Group Co.,Ltd\n00:0E:9B\tAmbitMic\tAmbit Microsystems Corporation\n00:0E:9C\tBenchmar\tBenchmark Electronics\n00:0E:9D\tTiscaliU\tTiscali UK Ltd\n00:0E:9E\tTopfield\tTopfield Co., Ltd\n00:0E:9F\tTemicSds\tTEMIC SDS GmbH\n00:0E:A0\tNetklass\tNetKlass Technology Inc.\n00:0E:A1\tFormosaT\tFormosa Teletek Corporation\n00:0E:A2\tMcafee\tMcAfee, Inc\n00:0E:A3\tCncr-ItH\tCNCR-IT CO.,LTD,HangZhou P.R.CHINA\n00:0E:A4\tCertance\tCertance Inc.\n00:0E:A5\tBlip\tBLIP Systems\n00:0E:A6\tAsustekC\tASUSTek COMPUTER INC.\n00:0E:A7\tEndaceTe\tEndace Technology\n00:0E:A8\tUnitedTe\tUnited Technologists Europe Limited\n00:0E:A9\tShanghai\tShanghai Xun Shi Communications Equipment Ltd. Co.\n00:0E:AA\tScalent\tScalent Systems, Inc.\n00:0E:AB\tCray\tCray Inc\n00:0E:AC\tMintronE\tMintron Enterprise Co., Ltd.\n00:0E:AD\tMetanoia\tMetanoia Technologies, Inc.\n00:0E:AE\tGawellTe\tGawell Technologies Corp.\n00:0E:AF\tCastel\t\n00:0E:B0\tSolution\tSolutions Radio BV\n00:0E:B1\tNewcotec\tNewcotech,Ltd\n00:0E:B2\tMicro-Re\tMicro-Research Finland Oy\n00:0E:B3\tHewlettP\tHewlett Packard\n00:0E:B4\tGuangzho\tGuangzhou Gaoke Communications Technology Co.Ltd.\n00:0E:B5\tEcastleE\tEcastle Electronics Co., Ltd.\n00:0E:B6\tRiverbed\tRiverbed Technology, Inc.\n00:0E:B7\tKnovativ\tKnovative, Inc.\n00:0E:B8\tIiga\tIiga co.,Ltd\n00:0E:B9\tHashimot\tHASHIMOTO Electronics Industry Co.,Ltd.\n00:0E:BA\tHanmiSem\tHanmi Semiconductor Co., Ltd.\n00:0E:BB\tEverbeeN\tEverbee Networks\n00:0E:BC\tParagonF\tParagon Fidelity GmbH\n00:0E:BD\tBurdickA\tBurdick, a Quinton Compny\n00:0E:BE\tB&BElect\tB&B Electronics Manufacturing Co.\n00:0E:BF\tRemsdaq\tRemsdaq Limited\n00:0E:C0\tNortelNe\tNortel Networks\n00:0E:C1\tMynahTec\tMYNAH Technologies\n00:0E:C2\tLowrance\tLowrance Electronics, Inc.\n00:0E:C3\tLogicCon\tLogic Controls, Inc.\n00:0E:C4\tIskraTra\tIskra Transmission d.d.\n00:0E:C5\tDigitalM\tDigital Multitools Inc\n00:0E:C6\tAsixElec\tAsix Electronics Corp.\n00:0E:C7\tMotorola\tMotorola Korea\n00:0E:C8\tZoran\tZoran Corporation\n00:0E:C9\tYokoTech\tYOKO Technology Corp.\n00:0E:CA\tWtss\tWTSS Inc\n00:0E:CB\tVinesysT\tVineSys Technology\n00:0E:CC\tTableauL\tTableau, LLC\n00:0E:CD\tSkov\tSKOV A/S\n00:0E:CE\tSITTISPA\tS.I.T.T.I. S.p.A.\n00:0E:CF\tProfibus\tPROFIBUS Nutzerorganisation e.V.\n00:0E:D0\tPrivaris\tPrivaris, Inc.\n00:0E:D1\tOsakaMic\tOsaka Micro Computer.\n00:0E:D2\tFiltroni\tFiltronic plc\n00:0E:D3\tEpicente\tEpicenter, Inc.\n00:0E:D4\tCresittI\tCresitt Industrie\n00:0E:D5\tCopan\tCOPAN Systems Inc.\n00:0E:D6\tCisco\tCisco Systems, Inc\n00:0E:D7\tCisco\tCisco Systems, Inc\n00:0E:D8\tPositron\tPositron Access Solutions Corp\n00:0E:D9\tAksys\tAksys, Ltd.\n00:0E:DA\tC-TechUn\tC-TECH UNITED CORP.\n00:0E:DB\tXincom\tXiNCOM Corp.\n00:0E:DC\tTellion\tTellion INC.\n00:0E:DD\tShure\tShure Incorporated\n00:0E:DE\tRemec\tREMEC, Inc.\n00:0E:DF\tPlxTechn\tPLX Technology\n00:0E:E0\tMcharge\t\n00:0E:E1\tExtremes\tExtremeSpeed Inc.\n00:0E:E2\tCustomEn\tCustom Engineering\n00:0E:E3\tChiyuTec\tChiyu Technology Co.,Ltd\n00:0E:E4\tBoeTechn\tBoe Technology Group Co.,Ltd\n00:0E:E5\tBitwalle\tbitWallet, Inc.\n00:0E:E6\tAdimos\tAdimos Systems LTD\n00:0E:E7\tAacElect\tAac Electronics Corp.\n00:0E:E8\tZioncomE\tZioncom Electronics (Shenzhen) Ltd.\n00:0E:E9\tWaytechD\tWayTech Development, Inc.\n00:0E:EA\tShadongL\tShadong Luneng Jicheng Electronics,Co.,Ltd\n00:0E:EB\tSandmart\tSandmartin(zhong shan)Electronics Co.,Ltd\n00:0E:EC\tOrban\t\n00:0E:ED\tNokiaDan\tNokia Danmark A/S\n00:0E:EE\tMucoIndu\tMuco Industrie BV\n00:0E:EF\tPrivate\t\n00:0E:F0\tFesto\tFesto AG & Co. KG\n00:0E:F1\tEzquest\tEzquest Inc.\n00:0E:F2\tInfinico\tInfinico Corporation\n00:0E:F3\tSmarthom\tSmarthome\n00:0E:F4\tKasdaNet\tKasda Networks Inc\n00:0E:F5\tIpacTech\tiPAC Technology Co., Ltd.\n00:0E:F6\tE-TenInf\tE-TEN Information Systems Co., Ltd.\n00:0E:F7\tVulcanPo\tVulcan Portals Inc\n00:0E:F8\tSbcAsi\tSbc Asi\n00:0E:F9\tReaElekt\tREA Elektronik GmbH\n00:0E:FA\tOptowayT\tOptoway Technology Incorporation\n00:0E:FB\tMaceyEnt\tMacey Enterprises\n00:0E:FC\tJtagTech\tJTAG Technologies B.V.\n00:0E:FD\tFujinon\tFujinon Corporation\n00:0E:FE\tEndrunTe\tEndRun Technologies LLC\n00:0E:FF\tMegasolu\tMegasolution,Inc.\n00:0F:00\tLegra\tLegra Systems, Inc.\n00:0F:01\tDigitalk\tDigitalks Inc\n00:0F:02\tDigicube\tDigicube Technology Co., Ltd\n00:0F:03\tCom&C\tCOM&C CO., LTD\n00:0F:04\tCim-Usa\tcim-usa inc\n00:0F:05\t3bSystem\t3B SYSTEM INC.\n00:0F:06\tNortelNe\tNortel Networks\n00:0F:07\tMangrove\tMangrove Systems, Inc.\n00:0F:08\tIndagonO\tIndagon Oy\n00:0F:09\tPrivate\t\n00:0F:0A\tClearEdg\tClear Edge Networks\n00:0F:0B\tKentimaT\tKentima Technologies AB\n00:0F:0C\tSynchron\tSynchronic Engineering\n00:0F:0D\tHuntElec\tHunt Electronic Co., Ltd.\n00:0F:0E\tWavespli\tWaveSplitter Technologies, Inc.\n00:0F:0F\tRealIdTe\tReal ID Technology Co., Ltd.\n00:0F:10\tRdm\tRDM Corporation\n00:0F:11\tProdrive\tProdrive B.V.\n00:0F:12\tPanasoni\tPanasonic Europe Ltd.\n00:0F:13\tNisca\tNisca corporation\n00:0F:14\tMindray\tMindray Co., Ltd.\n00:0F:15\tIcotera\tIcotera A/S\n00:0F:16\tJayHowTe\tJay How Technology Co.,\n00:0F:17\tInstaEle\tInsta Elektro GmbH\n00:0F:18\tIndustri\tIndustrial Control Systems\n00:0F:19\tBostonSc\tBoston Scientific\n00:0F:1A\tGamingSu\tGaming Support B.V.\n00:0F:1B\tEgo\tEgo Systems Inc.\n00:0F:1C\tDigitall\tDigitAll World Co., Ltd\n00:0F:1D\tCosmoTec\tCosmo Techs Co., Ltd.\n00:0F:1E\tChengduK\tChengdu KT Electric Co.of High & New Technology\n00:0F:1F\tDell\tDell Inc.\n00:0F:20\tHewlettP\tHewlett Packard\n00:0F:21\tScientif\tScientific Atlanta, Inc\n00:0F:22\tHelius\tHelius, Inc.\n00:0F:23\tCisco\tCisco Systems, Inc\n00:0F:24\tCisco\tCisco Systems, Inc\n00:0F:25\tAimvalle\tAimValley B.V.\n00:0F:26\tWorldacc\tWorldAccxx  LLC\n00:0F:27\tTealElec\tTEAL Electronics, Inc.\n00:0F:28\tItronix\tItronix Corporation\n00:0F:29\tAugmenti\tAugmentix Corporation\n00:0F:2A\tCablewar\tCableware Electronics\n00:0F:2B\tGreenbel\tGreenbell Systems\n00:0F:2C\tUplogix\tUplogix, Inc.\n00:0F:2D\tChung-Hs\tCHUNG-HSIN ELECTRIC & MACHINERY MFG.CORP.\n00:0F:2E\tMegapowe\tMegapower International Corp.\n00:0F:2F\tW-LinxTe\tW-LINX TECHNOLOGY CO., LTD.\n00:0F:30\tRazaMicr\tRaza Microelectronics Inc\n00:0F:31\tAlliedVi\tAllied Vision Technologies Canada Inc\n00:0F:32\tLootomTe\tLootom Telcovideo Network Wuxi Co Ltd\n00:0F:33\tDuali\tDUALi Inc.\n00:0F:34\tCisco\tCisco Systems, Inc\n00:0F:35\tCisco\tCisco Systems, Inc\n00:0F:36\tAccurate\tAccurate Techhnologies, Inc.\n00:0F:37\tXambala\tXambala Incorporated\n00:0F:38\tNetstar\t\n00:0F:39\tIrisSens\tIris Sensors\n00:0F:3A\tHisharp\t\n00:0F:3B\tFujiSyst\tFuji System Machines Co., Ltd.\n00:0F:3C\tEndeleo\tEndeleo Limited\n00:0F:3D\tD-Link\tD-Link Corporation\n00:0F:3E\tCardione\tCardioNet, Inc\n00:0F:3F\tBigBearN\tBig Bear Networks\n00:0F:40\tOpticalI\tOptical Internetworking Forum\n00:0F:41\tZipher\tZipher Ltd\n00:0F:42\tXalyo\tXalyo Systems\n00:0F:43\tWasabi\tWasabi Systems Inc.\n00:0F:44\tTivella\tTivella Inc.\n00:0F:45\tStretch\tStretch, Inc.\n00:0F:46\tSinar\tSinar Ag\n00:0F:47\tRobox\tRobox Spa\n00:0F:48\tPolypix\tPolypix Inc.\n00:0F:49\tNorthove\tNorthover Solutions Limited\n00:0F:4A\tKyushu-K\tKyushu-kyohan co.,ltd\n00:0F:4B\tOracle\tOracle Corporation\n00:0F:4C\tElextech\tElextech INC\n00:0F:4D\tTalkswit\tTalkSwitch\n00:0F:4E\tCellink\t\n00:0F:4F\tPcsSyste\tPCS Systemtechnik GmbH\n00:0F:50\tStreamsc\tStreamScale Limited\n00:0F:51\tAzul\tAzul Systems, Inc.\n00:0F:52\tYorkRefr\tYORK Refrigeration, Marine & Controls\n00:0F:53\tSolarfla\tSolarflare Communications Inc\n00:0F:54\tEntrelog\tEntrelogic Corporation\n00:0F:55\tDatawire\tDatawire Communication Networks Inc.\n00:0F:56\tContinuu\tContinuum Photonics Inc\n00:0F:57\tCablelog\tCABLELOGIC Co., Ltd.\n00:0F:58\tAdderTec\tAdder Technology Limited\n00:0F:59\tPhonak\tPhonak AG\n00:0F:5A\tPeribitN\tPeribit Networks\n00:0F:5B\tDeltaInf\tDelta Information Systems, Inc.\n00:0F:5C\tDayOneDi\tDay One Digital Media Limited\n00:0F:5D\tGenexisB\tGenexis BV\n00:0F:5E\tVeo\t\n00:0F:5F\tNicetyTe\tNicety Technologies Inc. (NTS)\n00:0F:60\tLifetron\tLifetron Co.,Ltd\n00:0F:61\tHewlettP\tHewlett Packard\n00:0F:62\tAlcatelB\tAlcatel Bell Space N.V.\n00:0F:63\tObzervTe\tObzerv Technologies\n00:0F:64\tD&RElect\tD&R Electronica Weesp BV\n00:0F:65\tIcube\ticube Corp.\n00:0F:66\tCisco-Li\tCisco-Linksys, LLC\n00:0F:67\tWestInst\tWest Instruments\n00:0F:68\tVavicNet\tVavic Network Technology, Inc.\n00:0F:69\tSewEurod\tSEW Eurodrive GmbH & Co. KG\n00:0F:6A\tNortelNe\tNortel Networks\n00:0F:6B\tGateware\tGateWare Communications GmbH\n00:0F:6C\tAddi-Dat\tADDI-DATA GmbH\n00:0F:6D\tMidasEng\tMidas Engineering\n00:0F:6E\tBbox\t\n00:0F:6F\tFtaCommu\tFTA Communication Technologies\n00:0F:70\tWintecIn\tWintec Industries, inc.\n00:0F:71\tSanmeiEl\tSanmei Electronics Co.,Ltd\n00:0F:72\tSandburs\tSandburst\n00:0F:73\tRsAutoma\tRS Automation Co., Ltd\n00:0F:74\tQamcomTe\tQamcom Technology AB\n00:0F:75\tFirstSil\tFirst Silicon Solutions\n00:0F:76\tDigitalK\tDigital Keystone, Inc.\n00:0F:77\tDentum\tDentum Co.,Ltd\n00:0F:78\tDatacap\tDatacap Systems Inc\n00:0F:79\tBluetoot\tBluetooth Interest Group Inc.\n00:0F:7A\tBeijingN\tBeiJing NuQX Technology CO.,LTD\n00:0F:7B\tArceSist\tArce Sistemas, S.A.\n00:0F:7C\tActi\tACTi Corporation\n00:0F:7D\tXirrus\t\n00:0F:7E\tAblerexE\tAblerex Electronics Co., LTD\n00:0F:7F\tUbstorag\tUBSTORAGE Co.,Ltd.\n00:0F:80\tTrinityS\tTrinity Security Systems,Inc.\n00:0F:81\tPalPacif\tPAL Pacific Inc.\n00:0F:82\tMortaraI\tMortara Instrument, Inc.\n00:0F:83\tBrainium\tBrainium Technologies Inc.\n00:0F:84\tAstuteNe\tAstute Networks, Inc.\n00:0F:85\tAddo-Jap\tADDO-Japan Corporation\n00:0F:86\tBlackber\tBlackBerry RTS\n00:0F:87\tMaxcessI\tMaxcess International\n00:0F:88\tAmetek\tAMETEK, Inc.\n00:0F:89\tWinnerte\tWinnertec System Co., Ltd.\n00:0F:8A\tWideview\t\n00:0F:8B\tOrionMul\tOrion MultiSystems Inc\n00:0F:8C\tGigawave\tGigawavetech Pte Ltd\n00:0F:8D\tFastTv-S\tFAST TV-Server AG\n00:0F:8E\tDongyang\tDongyang Telecom Co.,Ltd.\n00:0F:8F\tCisco\tCisco Systems, Inc\n00:0F:90\tCisco\tCisco Systems, Inc\n00:0F:91\tAerotele\tAerotelecom Co.,Ltd.\n00:0F:92\tMicrohar\tMicrohard Systems Inc.\n00:0F:93\tLandis+G\tLandis+Gyr Ltd.\n00:0F:94\tGenexisB\tGenexis BV\n00:0F:95\tElecomLa\tELECOM Co.,LTD Laneed Division\n00:0F:96\tTelco\tTelco Systems, Inc.\n00:0F:97\tAvanex\tAvanex Corporation\n00:0F:98\tAvamax\tAvamax Co. Ltd.\n00:0F:99\tApacOpto\tAPAC opto Electronics Inc.\n00:0F:9A\tSynchron\tSynchrony, Inc.\n00:0F:9B\tRossVide\tRoss Video Limited\n00:0F:9C\tPanduit\tPanduit Corp\n00:0F:9D\tDisplayl\tDisplayLink (UK) Ltd\n00:0F:9E\tMurrelek\tMurrelektronik GmbH\n00:0F:9F\tArrisGro\tARRIS Group, Inc.\n00:0F:A0\tCanonKor\tCanon Korea Business Solutions Inc.\n00:0F:A1\tGigabit\tGigabit Systems Inc.\n00:0F:A2\t2xwirele\t2xWireless\n00:0F:A3\tAlphaNet\tAlpha Networks Inc.\n00:0F:A4\tSprecher\tSprecher Automation GmbH\n00:0F:A5\tBwaTechn\tBWA Technology GmbH\n00:0F:A6\tS2Securi\tS2 Security Corporation\n00:0F:A7\tRaptorNe\tRaptor Networks Technology\n00:0F:A8\tPhotomet\tPhotometrics, Inc.\n00:0F:A9\tPcFabrik\tPC Fabrik\n00:0F:AA\tNexusTec\tNexus Technologies\n00:0F:AB\tKyushuEl\tKyushu Electronics Systems Inc.\n00:0F:AC\tIeee8021\tIEEE 802.11\n00:0F:AD\tFmnCommu\tFMN communications GmbH\n00:0F:AE\tE2oCommu\tE2O Communications\n00:0F:AF\tDialog\tDialog Inc.\n00:0F:B0\tCompalEl\tCompal Electronics INC.\n00:0F:B1\tCognio\tCognio Inc.\n00:0F:B2\tBroadban\tBroadband Pacenet (India) Pvt. Ltd.\n00:0F:B3\tActionte\tActiontec Electronics, Inc\n00:0F:B4\tTimespac\tTimespace Technology\n00:0F:B5\tNetgear\t\n00:0F:B6\tEuroplex\tEuroplex Technologies\n00:0F:B7\tCavium\t\n00:0F:B8\tCallurl\tCallURL Inc.\n00:0F:B9\tAdaptive\tAdaptive Instruments\n00:0F:BA\tTevebox\tTevebox AB\n00:0F:BB\tNokiaSie\tNokia Siemens Networks GmbH & Co. KG.\n00:0F:BC\tOnkeyTec\tOnkey Technologies, Inc.\n00:0F:BD\tMrvCommu\tMRV Communications (Networks) LTD\n00:0F:BE\tE-W/You\te-w/you Inc.\n00:0F:BF\tDgtSpZOO\tDGT Sp. z o.o.\n00:0F:C0\tDelcomp\t\n00:0F:C1\tWave\tWAVE Corporation\n00:0F:C2\tUniwell\tUniwell Corporation\n00:0F:C3\tPalmpalm\tPalmPalm Technology, Inc.\n00:0F:C4\tNst\tNST co.,LTD.\n00:0F:C5\tKeymed\tKeyMed Ltd\n00:0F:C6\tEurocomI\tEurocom Industries A/S\n00:0F:C7\tDionicaR\tDionica R&D Ltd.\n00:0F:C8\tChantryN\tChantry Networks\n00:0F:C9\tAllnet\tAllnet GmbH\n00:0F:CA\tA-JinTec\tA-JIN TECHLINE CO, LTD\n00:0F:CB\t3com\t3Com Ltd\n00:0F:CC\tArrisGro\tARRIS Group, Inc.\n00:0F:CD\tNortelNe\tNortel Networks\n00:0F:CE\tKikusuiE\tKikusui Electronics Corp.\n00:0F:CF\tDatawind\tDataWind Research\n00:0F:D0\tAstri\t\n00:0F:D1\tAppliedW\tApplied Wireless Identifications Group, Inc.\n00:0F:D2\tEwaTechn\tEWA Technologies, Inc.\n00:0F:D3\tDigium\t\n00:0F:D4\tSoundcra\tSoundcraft\n00:0F:D5\tSchwecha\tSchwechat - RISE\n00:0F:D6\tSarotech\tSarotech Co., Ltd\n00:0F:D7\tHarmanMu\tHarman Music Group\n00:0F:D8\tForce\tForce, Inc.\n00:0F:D9\tFlexdslT\tFlexDSL Telecommunications AG\n00:0F:DA\tYazaki\tYazaki Corporation\n00:0F:DB\tWestellT\tWestell Technologies Inc.\n00:0F:DC\tUedaJapa\tUeda Japan  Radio Co., Ltd.\n00:0F:DD\tSordin\tSordin Ab\n00:0F:DE\tSonyMobi\tSony Mobile Communications Inc\n00:0F:DF\tSolomonT\tSOLOMON Technology Corp.\n00:0F:E0\tNcomputi\tNComputing Co.,Ltd.\n00:0F:E1\tIdDigita\tId Digital Corporation\n00:0F:E2\tHangzhou\tHangzhou H3C Technologies Co., Limited\n00:0F:E3\tDammCell\tDamm Cellular Systems A/S\n00:0F:E4\tPantech\tPantech Co.,Ltd\n00:0F:E5\tMercuryS\tMercury Security Corporation\n00:0F:E6\tMbtech\tMBTech Systems, Inc.\n00:0F:E7\tLutronEl\tLutron Electronics Co., Inc.\n00:0F:E8\tLobos\tLobos, Inc.\n00:0F:E9\tGwTechno\tGw Technologies Co.,Ltd.\n00:0F:EA\tGiga-Byt\tGiga-Byte Technology Co.,LTD.\n00:0F:EB\tCylonCon\tCylon Controls\n00:0F:EC\tArkus\tARKUS Inc.\n00:0F:ED\tAnamElec\tAnam Electronics Co., Ltd\n00:0F:EE\tXtec\tXTec, Incorporated\n00:0F:EF\tThalesE-\tThales e-Transactions GmbH\n00:0F:F0\tSunray\tSunray Co. Ltd.\n00:0F:F1\tNex-GPte\tnex-G Systems Pte.Ltd\n00:0F:F2\tLoudTech\tLoud Technologies Inc.\n00:0F:F3\tJungMyou\tJung Myoung Communications&Technology\n00:0F:F4\tGunterma\tGuntermann & Drunck GmbH\n00:0F:F5\tGn&S\tGN&S company\n00:0F:F6\tDarfonLi\tDarfon Lighting Corp\n00:0F:F7\tCisco\tCisco Systems, Inc\n00:0F:F8\tCisco\tCisco Systems, Inc\n00:0F:F9\tValcrete\tValcretec, Inc.\n00:0F:FA\tOptinel\tOptinel Systems, Inc.\n00:0F:FB\tNipponDe\tNippon Denso Industry Co., Ltd.\n00:0F:FC\tMeritLi-\tMerit Li-Lin Ent.\n00:0F:FD\tGlorytek\tGlorytek Network Inc.\n00:0F:FE\tG-ProCom\tG-PRO COMPUTER\n00:0F:FF\tControl4\t\n00:10:00\tCableLabs\t\n00:10:01\tCitel\t\n00:10:02\tActia\t\n00:10:03\tImatron\tImatron, Inc.\n00:10:04\tBrantley\tThe Brantley Coile Company,Inc\n00:10:05\tUecComme\tUec Commercial\n00:10:06\tThalesCo\tThales Contact Solutions Ltd.\n00:10:07\tCiscoSys\tCisco Systems\n00:10:08\tVienna\tVienna Systems Corporation\n00:10:09\tHoranet\t\n00:10:0A\tWilliams\tWilliams Communications Group\n00:10:0B\tCisco\t\n00:10:0C\tIto\tIto Co., Ltd.\n00:10:0D\tCiscoSys\tCisco Systems\n00:10:0E\tMicroLin\tMicro Linear Coporation\n00:10:0F\tIndustri\tIndustrial Cpu Systems\n00:10:10\tInitio\tInitio Corporation\n00:10:11\tCiscoSys\tCisco Systems\n00:10:12\tProcesso\tPROCESSOR SYSTEMS (I) PVT LTD\n00:10:13\tKontronA\tKontron America, Inc.\n00:10:14\tCisco\tCisco Systems, Inc\n00:10:15\tOomon\tOOmon Inc.\n00:10:16\tTSqware\tT.Sqware\n00:10:17\tBoschAcc\tBosch Access Systems GmbH\n00:10:18\tBroadcom\t\n00:10:19\tSironaDe\tSIRONA DENTAL SYSTEMS GmbH & Co. KG\n00:10:1A\tPicturet\tPictureTel Corp.\n00:10:1B\tCornetTe\tCornet Technology, Inc.\n00:10:1C\tOhmTechn\tOhm Technologies Intl, Llc\n00:10:1D\tWinbondE\tWinbond Electronics Corp.\n00:10:1E\tMatsushi\tMatsushita Electronic Instruments Corp.\n00:10:1F\tCiscoSys\tCisco Systems\n00:10:20\tHandHeld\tHand Held Products Inc\n00:10:21\tEncantoN\tEncanto Networks, Inc.\n00:10:22\tSatcomMe\tSatCom Media Corporation\n00:10:23\tNetworkE\tNetwork Equipment Technologies\n00:10:24\tNagoyaEl\tNagoya Electric Works Co., Ltd\n00:10:25\tGrayhill\tGrayhill, Inc\n00:10:26\tAccelera\tAccelerated Networks, Inc.\n00:10:27\tL-3Commu\tL-3 COMMUNICATIONS EAST\n00:10:28\tComputer\tComputer Technica, Inc.\n00:10:29\tCiscoSys\tCisco Systems\n00:10:2A\tZfMicros\tZf Microsystems, Inc.\n00:10:2B\tUmaxData\tUmax Data Systems, Inc.\n00:10:2C\tLasatNet\tLasat Networks A/S\n00:10:2D\tHitachiS\tHitachi Software Engineering\n00:10:2E\tNetworkT\tNETWORK SYSTEMS & TECHNOLOGIES PVT. LTD.\n00:10:2F\tCiscoSys\tCisco Systems\n00:10:30\tEion\tEION Inc.\n00:10:31\tObjectiv\tObjective Communications, Inc.\n00:10:32\tAltaTech\tAlta Technology\n00:10:33\tAccessla\tAccesslan Communications, Inc.\n00:10:34\tGnpCompu\tGNP Computers\n00:10:35\tElitegro\tElitegroup Computer Systems Co.,Ltd.\n00:10:36\tInter-Te\tINTER-TEL INTEGRATED SYSTEMS\n00:10:37\tCyqVeTec\tCYQ've Technology Co., Ltd.\n00:10:38\tMicroRes\tMicro Research Institute, Inc.\n00:10:39\tVectron\tVectron Systems AG\n00:10:3A\tDiamondN\tDiamond Network Tech\n00:10:3B\tHippiNet\tHippi Networking Forum\n00:10:3C\tIcEnsemb\tIc Ensemble, Inc.\n00:10:3D\tPhasecom\tPhasecom, Ltd.\n00:10:3E\tNetschoo\tNetschools Corporation\n00:10:3F\tTollgrad\tTollgrade Communications, Inc.\n00:10:40\tIntermec\tIntermec Corporation\n00:10:41\tBristolB\tBristol Babcock, Inc.\n00:10:42\tAlacrite\tAlacritech, Inc.\n00:10:43\tA2\tA2 CORPORATION\n00:10:44\tInnolabs\tInnoLabs Corporation\n00:10:45\tNortelNe\tNortel Networks\n00:10:46\tAlcornMc\tAlcorn Mcbride Inc.\n00:10:47\tEchoElet\tEcho Eletric Co. Ltd.\n00:10:48\tHtrcAuto\tHtrc Automation, Inc.\n00:10:49\tShoretel\tShoreTel, Inc\n00:10:4A\tParvus\tThe Parvus Corporation\n00:10:4B\t3com3c90\t3Com\n00:10:4C\tTeledyne\tTeledyne LeCroy, Inc\n00:10:4D\tSurtecIn\tSurtec Industries, Inc.\n00:10:4E\tCeologic\t\n00:10:4F\tOracle\tOracle Corporation\n00:10:50\tRion\tRion Co., Ltd.\n00:10:51\tCmicro\tCmicro Corporation\n00:10:52\tMettler-\tMETTLER-TOLEDO (ALBSTADT) GMBH\n00:10:53\tComputer\tComputer Technology Corp.\n00:10:54\tCisco\tCisco Systems, Inc\n00:10:55\tFujitsuM\tFujitsu Microelectronics, Inc.\n00:10:56\tSodick\tSodick Co., Ltd.\n00:10:57\tRebelCom\tRebel.com, Inc.\n00:10:58\tArrowpoi\tArrowPoint Communications\n00:10:59\tDiabloRe\tDiablo Research Co. Llc\n00:10:5A\t3comFast\t3Com\n00:10:5B\tNetInsig\tNet Insight Ab\n00:10:5C\tQuantumD\tQUANTUM DESIGNS (H.K.) LTD.\n00:10:5D\tDraegerM\tDraeger Medical\n00:10:5E\tSpirentS\tSpirent plc, Service Assurance Broadband\n00:10:5F\tZodiacDa\tZodiac Data Systems\n00:10:60\tBillingt\tBillington\n00:10:61\tHostlink\tHostlink Corp.\n00:10:62\tNxServer\tNx Server, Ilnc.\n00:10:63\tStarguid\tStarguide Digital Networks\n00:10:64\tDnpgLlc\tDnpg, Llc\n00:10:65\tRadyne\tRadyne Corporation\n00:10:66\tAdvanced\tAdvanced Control Systems, Inc.\n00:10:67\tEricsson\t\n00:10:68\tComosTel\tComos Telecom\n00:10:69\tHeliossC\tHelioss Communications, Inc.\n00:10:6A\tDigitalM\tDigital Microwave Corporation\n00:10:6B\tSonusNet\tSonus Networks, Inc.\n00:10:6C\tEdnt\tEDNT GmbH\n00:10:6D\tAxxceler\tAxxcelera Broadband Wireless\n00:10:6E\tTadiranC\tTadiran Com. Ltd.\n00:10:6F\tTrentonT\tTrenton Technology Inc.\n00:10:70\tCaradonT\tCaradon Trend Ltd.\n00:10:71\tAdvanet\tAdvanet Inc.\n00:10:72\tGvnTechn\tGvn Technologies, Inc.\n00:10:73\tTechnobo\tTechnobox, Inc.\n00:10:74\tAtenInte\tAten International Co., Ltd.\n00:10:75\tSegateTe\tSegate Technology LLC\n00:10:76\tEurem\tEUREM GmbH\n00:10:77\tSafDrive\tSaf Drive Systems, Ltd.\n00:10:78\tNueraCom\tNuera Communications, Inc.\n00:10:79\tCisco550\tCisco\n00:10:7A\tAmbicomW\tAmbicom (was Tandy?)\n00:10:7B\tCisco\t\n00:10:7C\tP-Com\tP-COM, INC.\n00:10:7D\tAuroraCo\tAurora Communications, Ltd.\n00:10:7E\tBachmann\tBACHMANN ELECTRONIC GmbH\n00:10:7F\tCrestron\tCrestron Electronics, Inc.\n00:10:80\tMetawave\tMetawave Communications\n00:10:81\tDps\tDps, Inc.\n00:10:82\tJnaTelec\tJna Telecommunications Limited\n00:10:83\tHp-UxE90\tHP-UX E 9000/889\n00:10:84\tK-BotCom\tK-BOT COMMUNICATIONS\n00:10:85\tPolarisC\tPolaris Communications, Inc.\n00:10:86\tAttoTech\tATTO Technology, Inc.\n00:10:87\tXstreami\tXstreamis Plc\n00:10:88\tAmerican\tAmerican Networks Inc.\n00:10:89\tWebsonic\t\n00:10:8A\tTeralogi\tTeraLogic, Inc.\n00:10:8B\tLaserani\tLaseranimation Sollinger Gmbh\n00:10:8C\tFujitsuS\tFujitsu Services Ltd\n00:10:8D\tJohnsonC\tJohnson Controls, Inc.\n00:10:8E\tHughSymo\tHUGH SYMONS CONCEPT Technologies Ltd.\n00:10:8F\tRaptor\tRaptor Systems\n00:10:90\tCimetric\tCimetrics, Inc.\n00:10:91\tNoWiresN\tNo Wires Needed Bv\n00:10:92\tNetcore\tNetcore Inc.\n00:10:93\tCmsCompu\tCms Computers, Ltd.\n00:10:94\tPerforma\tPerformance Analysis Broadband, Spirent plc\n00:10:95\tThomson\tThomson Inc.\n00:10:96\tTracewel\tTracewell Systems, Inc.\n00:10:97\tWinnetMe\tWinNet Metropolitan Communications Systems, Inc.\n00:10:98\tStarnetT\tStarnet Technologies, Inc.\n00:10:99\tInnomedi\tInnoMedia, Inc.\n00:10:9A\tNetline\t\n00:10:9B\tEmulex\tEmulex Corporation\n00:10:9C\tM-System\tM-SYSTEM CO., LTD.\n00:10:9D\tClarinet\tClarinet Systems, Inc.\n00:10:9E\tAware\tAware, Inc.\n00:10:9F\tPavo\tPavo, Inc.\n00:10:A0\tInnovexT\tInnovex Technologies, Inc.\n00:10:A1\tKendinSe\tKendin Semiconductor, Inc.\n00:10:A2\tTns\t\n00:10:A3\tOmnitron\tOmnitronix, Inc.\n00:10:A4\tXircomRe\tXircom\n00:10:A5\tOxfordIn\tOxford Instruments\n00:10:A6\tCisco\t\n00:10:A7\tUnexTech\tUnex Technology Corporation\n00:10:A8\tReliance\tReliance Computer Corp.\n00:10:A9\tAdhocTec\tAdhoc Technologies\n00:10:AA\tMedia4\tMEDIA4, INC.\n00:10:AB\tKoitoEle\tKoito Electric Industries, Ltd.\n00:10:AC\tImciTech\tImci Technologies\n00:10:AD\tSoftroni\tSoftronics Usb, Inc.\n00:10:AE\tShinkoEl\tShinko Electric Industries Co.\n00:10:AF\tTac\tTac Systems, Inc.\n00:10:B0\tMeridian\tMeridian Technology Corp.\n00:10:B1\tFor-A\tFOR-A CO., LTD.\n00:10:B2\tCoactive\tCoactive Aesthetics\n00:10:B3\tNokiaMul\tNokia Multimedia Terminals\n00:10:B4\tAtmosphe\tAtmosphere Networks\n00:10:B5\tAcctonTe\tAccton Technology Corp\n00:10:B6\tEntrataC\tEntrata Communications Corp.\n00:10:B7\tCoyoteTe\tCoyote Technologies, Llc\n00:10:B8\tIshigaki\tIshigaki Computer System Co.\n00:10:B9\tMaxtor\tMaxtor Corp.\n00:10:BA\tMartinho\tMARTINHO-DAVIS SYSTEMS, INC.\n00:10:BB\tDataInfo\tDATA & INFORMATION TECHNOLOGY\n00:10:BC\tAastraTe\tAastra Telecom\n00:10:BD\tTelecomm\tTHE TELECOMMUNICATION TECHNOLOGY COMMITTEE (TTC)\n00:10:BE\tMarchNet\tMarch Networks Corporation\n00:10:BF\tInterair\tInterAir Wireless\n00:10:C0\tArma\tARMA, Inc.\n00:10:C1\tOiElectr\tOi Electric Co.,Ltd\n00:10:C2\tWillnet\tWillnet, Inc.\n00:10:C3\tCsi-Cont\tCSI-CONTROL SYSTEMS\n00:10:C4\tMediaGlo\tMedia Global Links Co., Ltd.\n00:10:C5\tProtocol\tProtocol Technologies, Inc.\n00:10:C6\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\n00:10:C7\tDataTran\tData Transmission Network\n00:10:C8\tCommunic\tCommunications Electronics Security Group\n00:10:C9\tMitsubis\tMitsubishi Electronics Logistic Support Co.\n00:10:CA\tTelco\tTelco Systems, Inc.\n00:10:CB\tFacitKK\tFacit K.K.\n00:10:CC\tClpCompu\tCLP COMPUTER LOGISTIK PLANUNG GmbH\n00:10:CD\tInterfac\tInterface Concept\n00:10:CE\tVolamp\tVolamp, Ltd.\n00:10:CF\tFiberlan\tFiberlane Communications\n00:10:D0\tWitcom\tWitcom, Ltd.\n00:10:D1\tTopLayer\tTop Layer Networks, Inc.\n00:10:D2\tNittoTsu\tNitto Tsushinki Co., Ltd\n00:10:D3\tGripsEle\tGrips Electronic Gmbh\n00:10:D4\tStorageC\tStorage Computer Corporation\n00:10:D5\tImasdeCa\tImasde Canarias, S.A.\n00:10:D6\tExelis\t\n00:10:D7\tArgosyEn\tArgosy\n00:10:D8\tCalista\t\n00:10:D9\tIbmJapan\tIBM JAPAN, FUJISAWA MT+D\n00:10:DA\tKollmorg\tKollmorgen Corp\n00:10:DB\tJuniperN\tJuniper Networks\n00:10:DC\tMicro-St\tMICRO-STAR INTERNATIONAL CO., LTD.\n00:10:DD\tEnableSe\tEnable Semiconductor, Inc.\n00:10:DE\tInternat\tInternational Datacasting Corporation\n00:10:DF\tRiseComp\tRise Computer Inc.\n00:10:E0\tOracle\tOracle Corporation\n00:10:E1\tSITech\tS.I. Tech, Inc.\n00:10:E2\tArraycom\tArrayComm, Inc.\n00:10:E3\tHewlettP\tHewlett Packard\n00:10:E4\tNsi\tNsi Corporation\n00:10:E5\tSolectro\tSolectron Texas\n00:10:E6\tAppliedI\tApplied Intelligent Systems, Inc.\n00:10:E7\tBreezeco\tBreezecom, Ltd.\n00:10:E8\tTelocity\tTelocity, Incorporated\n00:10:E9\tRaidtec\tRaidtec Ltd.\n00:10:EA\tAdeptTec\tAdept Technology\n00:10:EB\tSelsius\tSelsius Systems, Inc.\n00:10:EC\tRpcgLlc\tRpcg, Llc\n00:10:ED\tSundance\tSundance Technology, Inc.\n00:10:EE\tCtiProdu\tCti Products, Inc.\n00:10:EF\tDbtel\tDbtel Incorporated\n00:10:F0\tRittal-W\tRITTAL-WERK RUDOLF LOH GmbH & Co.\n00:10:F1\tI-O\tI-O CORPORATION\n00:10:F2\tAntec\t\n00:10:F3\tNexcomIn\tNexcom International Co., Ltd.\n00:10:F4\tVertical\tVertical Communications\n00:10:F5\tAmherst\tAmherst Systems, Inc.\n00:10:F6\tCisco\t\n00:10:F7\tIriichiT\tIRIICHI TECHNOLOGIES Inc.\n00:10:F8\tTexioTec\tTexio Technology Corporation\n00:10:F9\tUnique\tUnique Systems, Inc.\n00:10:FA\tApple\tApple, Inc.\n00:10:FB\tZidaTech\tZida Technologies Limited\n00:10:FC\tBroadban\tBroadband Networks, Inc.\n00:10:FD\tCocom\tCOCOM A/S\n00:10:FE\tDigitalE\tDigital Equipment Corporation\n00:10:FF\tCisco\tCisco Systems, Inc\n00:11:00\tSchneide\tSchneider Electric\n00:11:01\tCetTechn\tCET Technologies Pte Ltd\n00:11:02\tAuroraMu\tAurora Multimedia Corp.\n00:11:03\tKawamura\tkawamura electric inc.\n00:11:04\tTelexy\t\n00:11:05\tSunplusT\tSunplus Technology Co., Ltd.\n00:11:06\tSiemensN\tSiemens NV (Belgium)\n00:11:07\tRgbNetwo\tRGB Networks Inc.\n00:11:08\tOrbitalD\tOrbital Data Corporation\n00:11:09\tMicro-St\tMicro-Star International\n00:11:0A\tHewlettP\tHewlett Packard\n00:11:0B\tFranklin\tFranklin Technology Systems\n00:11:0C\tAtmarkTe\tAtmark Techno, Inc.\n00:11:0D\tSanblaze\tSANBlaze Technology, Inc.\n00:11:0E\tTsurusak\tTsurusaki Sealand Transportation Co. Ltd.\n00:11:0F\tNetplat\tnetplat,Inc.\n00:11:10\tMaxannaT\tMaxanna Technology Co., Ltd.\n00:11:11\tIntel\tIntel Corporation\n00:11:12\tHoneywel\tHoneywell CMSS\n00:11:13\tFraunhof\tFraunhofer FOKUS\n00:11:14\tEverfocu\tEverFocus Electronics Corp.\n00:11:15\tEpinTech\tEPIN Technologies, Inc.\n00:11:16\tCoteauVe\tCoteau Vert Co., Ltd.\n00:11:17\tCesnet\t\n00:11:18\tBlxIcDes\tBLX IC Design Corp., Ltd.\n00:11:19\tSolteras\tSolteras, Inc.\n00:11:1A\tArrisGro\tARRIS Group, Inc.\n00:11:1B\tTargaDiv\tTarga Systems Div L-3 Communications\n00:11:1C\tPleoraTe\tPleora Technologies Inc.\n00:11:1D\tHectrix\tHectrix Limited\n00:11:1E\tEthernet\tETHERNET Powerlink Standarization Group (EPSG)\n00:11:1F\tDoremiLa\tDoremi Labs, Inc.\n00:11:20\tCisco\tCisco Systems, Inc\n00:11:21\tCisco\tCisco Systems, Inc\n00:11:22\tCimsys\tCIMSYS Inc\n00:11:23\tAppointe\tAppointech, Inc.\n00:11:24\tApple\tApple, Inc.\n00:11:25\tIbm\tIBM Corp\n00:11:26\tVenstar\tVenstar Inc.\n00:11:27\tTasi\tTASI, Inc\n00:11:28\tStreamit\t\n00:11:29\tParadise\tParadise Datacom Ltd.\n00:11:2A\tNikoNv\tNiko NV\n00:11:2B\tNetmodul\tNetModule AG\n00:11:2C\tIzt\tIZT GmbH\n00:11:2D\tIpulse\tiPulse Systems\n00:11:2E\tCeicom\t\n00:11:2F\tAsustekC\tASUSTek COMPUTER INC.\n00:11:30\tAlliedTe\tAllied Telesis (Hong Kong) Ltd.\n00:11:31\tUnatech\tUnatech. Co.,Ltd\n00:11:32\tSynology\tSynology Incorporated\n00:11:33\tSiemensA\tSiemens AG Austria\n00:11:34\tMediacel\tMediaCell, Inc.\n00:11:35\tGrandeye\tGrandeye Ltd\n00:11:36\tGoodrich\tGoodrich Sensor Systems\n00:11:37\tAichiEle\tAichi Electric Co., Ltd.\n00:11:38\tTaishin\tTaishin Co., Ltd.\n00:11:39\tStoeberA\tSTOEBER ANTRIEBSTECHNIK GmbH + Co. KG.\n00:11:3A\tShinbora\tShinboram\n00:11:3B\tMicronet\tMicronet Communications Inc.\n00:11:3C\tMicronas\tMicronas GmbH\n00:11:3D\tKnSoltec\tKn Soltec Co.,Ltd.\n00:11:3E\tJl\tJL Corporation\n00:11:3F\tAlcatelD\tAlcatel DI\n00:11:40\tNanometr\tNanometrics Inc.\n00:11:41\tGoodman\tGoodMan Corporation\n00:11:42\tE-Smartc\te-SMARTCOM  INC.\n00:11:43\tDell\tDell Inc.\n00:11:44\tAssuranc\tAssurance Technology Corp\n00:11:45\tValuepoi\tValuePoint Networks\n00:11:46\tTelecard\tTelecard-Pribor Ltd\n00:11:47\tSecom-In\tSecom-Industry co.LTD.\n00:11:48\tProlonCo\tProlon Control Systems\n00:11:49\tProliphi\tProliphix Inc.\n00:11:4A\tKayabaIn\tKAYABA INDUSTRY Co,.Ltd.\n00:11:4B\tFrancoty\tFrancotyp-Postalia GmbH\n00:11:4C\tCaffeina\tcaffeina applied research ltd.\n00:11:4D\tAtsumiEl\tAtsumi Electric Co.,LTD.\n00:11:4E\t690885On\t690885 Ontario Inc.\n00:11:4F\tUsDigita\tUS Digital Television, Inc\n00:11:50\tBelkin\tBelkin Corporation\n00:11:51\tMykotron\tMykotronx\n00:11:52\tEidsvoll\tEidsvoll Electronics AS\n00:11:53\tTridentT\tTrident Tek, Inc.\n00:11:54\tWebproTe\tWebpro Technologies Inc.\n00:11:55\tSevis\tSevis Systems\n00:11:56\tPharosNz\tPharos Systems NZ\n00:11:57\tOkiElect\tOki Electric Industry Co., Ltd.\n00:11:58\tNortelNe\tNortel Networks\n00:11:59\tMatisseN\tMatisse Networks Inc\n00:11:5A\tIvoclarV\tIvoclar Vivadent AG\n00:11:5B\tElitegro\tElitegroup Computer Systems Co.,Ltd.\n00:11:5C\tCisco\tCisco Systems, Inc\n00:11:5D\tCisco\tCisco Systems, Inc\n00:11:5E\tProminen\tProMinent Dosiertechnik GmbH\n00:11:5F\tItxSecur\tITX Security Co., Ltd.\n00:11:60\tArtdio\tARTDIO Company Co., LTD\n00:11:61\tNetstrea\tNetStreams, LLC\n00:11:62\tStarMicr\tStar Micronics Co.,Ltd.\n00:11:63\tSystemDe\tSystem Spa Dept. Electronics\n00:11:64\tAcardTec\tACARD Technology Corp.\n00:11:65\tZnyxNetw\tZNYX Networks, Inc.\n00:11:66\tTaelimEl\tTaelim Electronics Co., Ltd.\n00:11:67\tIntegrat\tIntegrated System Solution Corp.\n00:11:68\tHomelogi\tHomeLogic LLC\n00:11:69\tEmsSatco\tEMS Satcom\n00:11:6A\tDomo\tDomo Ltd\n00:11:6B\tDigitalD\tDigital Data Communications Asia Co.,Ltd\n00:11:6C\tNanwangM\tNanwang Multimedia Inc.,Ltd\n00:11:6D\tAmerican\tAmerican Time and Signal\n00:11:6E\tPeplinkI\tPeplink International Ltd.\n00:11:6F\tNetforyo\tNetforyou Co., LTD.\n00:11:70\tGscSrl\tGsc Srl\n00:11:71\tDexterCo\tDEXTER Communications, Inc.\n00:11:72\tCotron\tCotron Corporation\n00:11:73\tSmartSto\tSMART Storage Systems\n00:11:74\tMojoNetw\tMojo Networks, Inc.\n00:11:75\tIntel\tIntel Corporation\n00:11:76\tIntellam\tIntellambda Systems, Inc.\n00:11:77\tCoaxialN\tCoaxial Networks, Inc.\n00:11:78\tChironTe\tChiron Technology Ltd\n00:11:79\tSingular\tSingular Technology Co. Ltd.\n00:11:7A\tSingimIn\tSingim International Corp.\n00:11:7B\tBüchiLab\tBüchi  Labortechnik AG\n00:11:7C\tE-ZyNet\te-zy.net\n00:11:7D\tZmdAmeri\tZMD America, Inc.\n00:11:7E\tMidmark\tMidmark Corp\n00:11:7F\tNeotuneI\tNeotune Information Technology Corporation,.LTD\n00:11:80\tArrisGro\tARRIS Group, Inc.\n00:11:81\tInterene\tInterEnergy Co.Ltd,\n00:11:82\tImiNorgr\tIMI Norgren Ltd\n00:11:83\tDatalogi\tDatalogic ADC, Inc.\n00:11:84\tHumoLabo\tHumo Laboratory,Ltd.\n00:11:85\tHewlettP\tHewlett Packard\n00:11:86\tPrime\tPrime Systems, Inc.\n00:11:87\tCategory\tCategory Solutions, Inc\n00:11:88\tEnterasy\tEnterasys\n00:11:89\tAerotech\tAerotech Inc\n00:11:8A\tViewtran\tViewtran Technology Limited\n00:11:8B\tAlcatel-\tAlcatel-Lucent Enterprise\n00:11:8C\tMissouri\tMissouri Department of Transportation\n00:11:8D\tHanchang\tHanchang System Corp.\n00:11:8E\tHalytech\tHalytech Mace\n00:11:8F\tEutechIn\tEutech Instruments Pte. Ltd.\n00:11:90\tDigitalD\tDigital Design Corporation\n00:11:91\tCts-Clim\tCTS-Clima Temperatur Systeme GmbH\n00:11:92\tCisco\tCisco Systems, Inc\n00:11:93\tCisco\tCisco Systems, Inc\n00:11:94\tChiMeiCo\tChi Mei Communication Systems, Inc.\n00:11:95\tD-Link\tD-Link Corporation\n00:11:96\tActualit\tActuality Systems, Inc.\n00:11:97\tMonitori\tMonitoring Technologies Limited\n00:11:98\tPrismMed\tPrism Media Products Limited\n00:11:99\t2wcom\t2wcom Systems GmbH\n00:11:9A\tAlkeriaS\tAlkeria srl\n00:11:9B\tTelesyne\tTelesynergy Research Inc.\n00:11:9C\tEp&TEner\tEP&T Energy\n00:11:9D\tDiginfoT\tDiginfo Technology Corporation\n00:11:9E\tSolectro\tSolectron Brazil\n00:11:9F\tNokiaDan\tNokia Danmark A/S\n00:11:A0\tVtechEng\tVtech Engineering Canada Ltd\n00:11:A1\tVisionNe\tVision Netware Co.,Ltd\n00:11:A2\tManufact\tManufacturing Technology Inc\n00:11:A3\tLanready\tLanReady Technologies Inc.\n00:11:A4\tJstreamT\tJStream Technologies Inc.\n00:11:A5\tFortunaE\tFortuna Electronic Corp.\n00:11:A6\tSypixxNe\tSypixx Networks\n00:11:A7\tInfilcoD\tInfilco Degremont Inc.\n00:11:A8\tQuestTec\tQuest Technologies\n00:11:A9\tMoimston\tMOIMSTONE Co., LTD\n00:11:AA\tUniclass\tUniclass Technology, Co., LTD\n00:11:AB\tTrustabl\tTrustable Technology Co.,Ltd.\n00:11:AC\tSimtecEl\tSimtec Electronics\n00:11:AD\tShanghai\tShanghai Ruijie Technology\n00:11:AE\tArrisGro\tARRIS Group, Inc.\n00:11:AF\tMedialin\tMedialink-i,Inc\n00:11:B0\tFortelin\tFortelink Inc.\n00:11:B1\tBlueexpe\tBlueExpert Technology Corp.\n00:11:B2\t2001Tech\t2001 Technology Inc.\n00:11:B3\tYoshimiy\tYoshimiya Co.,Ltd.\n00:11:B4\tWestermo\tWestermo Teleindustri AB\n00:11:B5\tShenzhen\tShenzhen Powercom Co.,Ltd\n00:11:B6\tOpenInte\tOpen Systems International\n00:11:B7\tOctalixB\tOctalix B.V.\n00:11:B8\tLiebherr\tLiebherr - Elektronik GmbH\n00:11:B9\tInnerRan\tInner Range Pty. Ltd.\n00:11:BA\tElexolPt\tElexol Pty Ltd\n00:11:BB\tCisco\tCisco Systems, Inc\n00:11:BC\tCisco\tCisco Systems, Inc\n00:11:BD\tBombardi\tBombardier Transportation\n00:11:BE\tAgpTelec\tAGP Telecom Co. Ltd\n00:11:BF\tAesysSPA\tAESYS S.p.A.\n00:11:C0\tAdayTech\tAday Technology Inc\n00:11:C1\t4pMobile\t4P MOBILE DATA PROCESSING\n00:11:C2\tUnitedFi\tUnited Fiber Optic Communication\n00:11:C3\tTranscei\tTransceiving System Technology Corporation\n00:11:C4\tTerminal\tTerminales de Telecomunicacion Terrestre, S.L.\n00:11:C5\tTenTechn\tTEN Technology\n00:11:C6\tSeagateT\tSeagate Technology\n00:11:C7\tRaymarin\tRaymarine UK Ltd\n00:11:C8\tPowercom\tPowercom Co., Ltd.\n00:11:C9\tMtt\tMTT Corporation\n00:11:CA\tLongRang\tLong Range Systems, Inc.\n00:11:CB\tJacobson\tJacobsons AB\n00:11:CC\tGuangzho\tGuangzhou Jinpeng Group Co.,Ltd.\n00:11:CD\tAxsunTec\tAxsun Technologies\n00:11:CE\tUbisense\tUbisense Limited\n00:11:CF\tThraneTh\tThrane & Thrane A/S\n00:11:D0\tTandberg\tTandberg Data ASA\n00:11:D1\tSoftImag\tSoft Imaging System GmbH\n00:11:D2\tPercepti\tPerception Digital Ltd\n00:11:D3\tNextgent\tNextGenTel Holding ASA\n00:11:D4\tNetenric\tNetEnrich, Inc\n00:11:D5\tHangzhou\tHangzhou Sunyard System Engineering Co.,Ltd.\n00:11:D6\tHandera\tHandEra, Inc.\n00:11:D7\tEwerks\teWerks Inc\n00:11:D8\tAsustekC\tASUSTek COMPUTER INC.\n00:11:D9\tTivo\t\n00:11:DA\tVivaasTe\tVivaas Technology Inc.\n00:11:DB\tLand-Cel\tLand-Cellular Corporation\n00:11:DC\tGlunzJen\tGlunz & Jensen\n00:11:DD\tFromusTe\tFROMUS TEC. Co., Ltd.\n00:11:DE\tEurilogi\tEurilogic\n00:11:DF\tCurrentE\tCurrent Energy\n00:11:E0\tU-MediaC\tU-MEDIA Communications, Inc.\n00:11:E1\tArcelikA\tArcelik A.S\n00:11:E2\tHuaJungC\tHua Jung Components Co., Ltd.\n00:11:E3\tThomson\tThomson, Inc.\n00:11:E4\tDanelecE\tDanelec Electronics A/S\n00:11:E5\tKcodes\tKCodes Corporation\n00:11:E6\tScientif\tScientific Atlanta\n00:11:E7\tWorldsat\tWORLDSAT - Texas de France\n00:11:E8\tTixiCom\tTixi.Com\n00:11:E9\tStarnex\tStarnex Co., Ltd.\n00:11:EA\tIwics\tIWICS Inc.\n00:11:EB\tInnovati\tInnovative Integration\n00:11:EC\tAvix\tAvix Inc.\n00:11:ED\t802Globa\t802 Global\n00:11:EE\tEstari\tEstari, Inc.\n00:11:EF\tConitecD\tConitec Datensysteme GmbH\n00:11:F0\tWideful\tWideful Limited\n00:11:F1\tQinetiq\tQinetiQ Ltd\n00:11:F2\tInstitut\tInstitute of Network Technologies\n00:11:F3\tNeomedia\tNeoMedia Europe AG\n00:11:F4\tWoori-Ne\twoori-net\n00:11:F5\tAskeyCom\tAskey Computer Corp\n00:11:F6\tAsiaPaci\tAsia Pacific Microsystems , Inc.\n00:11:F7\tShenzhen\tShenzhen Forward Industry Co., Ltd\n00:11:F8\tAiraya\tAIRAYA Corp\n00:11:F9\tNortelNe\tNortel Networks\n00:11:FA\tRane\tRane Corporation\n00:11:FB\tHeidelbe\tHeidelberg Engineering GmbH\n00:11:FC\tHartingE\tHARTING Electronics GmbH\n00:11:FD\tKorg\tKorg Inc.\n00:11:FE\tKeiyoSys\tKeiyo System Research, Inc.\n00:11:FF\tDigitroT\tDigitro Tecnologia Ltda\n00:12:00\tCisco\tCisco Systems, Inc\n00:12:01\tCisco\tCisco Systems, Inc\n00:12:02\tDecraneA\tDecrane Aerospace - Audio International Inc.\n00:12:03\tActivnet\tActivNetworks\n00:12:04\tU10Netwo\tu10 Networks, Inc.\n00:12:05\tTerrasat\tTerrasat Communications, Inc.\n00:12:06\tIquestNz\tiQuest (NZ) Ltd\n00:12:07\tHeadStro\tHead Strong International Limited\n00:12:08\tGantnerI\tGantner Instruments GmbH\n00:12:09\tFastrax\tFastrax Ltd\n00:12:0A\tEmersonC\tEmerson Climate Technologies GmbH\n00:12:0B\tChinasys\tChinasys Technologies Limited\n00:12:0C\tCe-Infos\tCE-Infosys Pte Ltd\n00:12:0D\tAdvanced\tAdvanced Telecommunication Technologies, Inc.\n00:12:0E\tAbocom\t\n00:12:0F\tIeee8023\tIEEE 802.3\n00:12:10\tWideray\tWideRay Corp\n00:12:11\tProtechn\tProtechna Herbst GmbH & Co. KG\n00:12:12\tPlus\tPLUS  Corporation\n00:12:13\tMetrohm\tMetrohm AG\n00:12:14\tKoenigBa\tKoenig & Bauer AG\n00:12:15\tIstorNet\tiStor Networks, Inc.\n00:12:16\tIcpInter\tICP Internet Communication Payment AG\n00:12:17\tCisco-Li\tCisco-Linksys, LLC\n00:12:18\tAruze\tARUZE Corporation\n00:12:19\tGeneralD\tGeneral Datacomm LLC\n00:12:1A\tTechnoSo\tTechno Soft Systemnics Inc.\n00:12:1B\tSoundDev\tSound Devices, LLC\n00:12:1C\tParrotSa\tParrot Sa\n00:12:1D\tNetfabri\tNetfabric Corporation\n00:12:1E\tJuniperN\tJuniper Networks\n00:12:1F\tHardingI\tHarding Instruments\n00:12:20\tCadco\tCadco Systems\n00:12:21\tBBraunMe\tB.Braun Melsungen AG\n00:12:22\tSkardinU\tSkardin (UK) Ltd\n00:12:23\tPixim\t\n00:12:24\tNexql\tNexQL Corporation\n00:12:25\tArrisGro\tARRIS Group, Inc.\n00:12:26\tJapanDir\tJapan Direx Corporation\n00:12:27\tFranklin\tFranklin Electric Co., Inc.\n00:12:28\tData\tData Ltd.\n00:12:29\tBroadeas\tBroadEasy Technologies Co.,Ltd\n00:12:2A\tVtechTel\tVTech Telecommunications Ltd.\n00:12:2B\tVirbiage\tVirbiage Pty Ltd\n00:12:2C\tSoenenCo\tSoenen Controls N.V.\n00:12:2D\tSinett\tSiNett Corporation\n00:12:2E\tSignalTe\tSignal Technology - AISD\n00:12:2F\tSaneiEle\tSanei Electric Inc.\n00:12:30\tPicasoIn\tPicaso Infocommunication CO., LTD.\n00:12:31\tMotionCo\tMotion Control Systems, Inc.\n00:12:32\tLewizCom\tLeWiz Communications Inc.\n00:12:33\tJrcTokki\tJRC TOKKI Co.,Ltd.\n00:12:34\tCamilleB\tCamille Bauer\n00:12:35\tAndrew\tAndrew Corporation\n00:12:36\tConsentr\tConSentry Networks\n00:12:37\tTexasIns\tTexas Instruments\n00:12:38\tSetaboxT\tSetaBox Technology Co., Ltd.\n00:12:39\tSNet\tS Net Systems Inc.\n00:12:3A\tPosystec\tPosystech Inc., Co.\n00:12:3B\tKeroAps\tKeRo Systems ApS\n00:12:3C\tSecondRu\tSecond Rule LLC\n00:12:3D\tGes\tGES Co, Ltd\n00:12:3E\tEruneTec\tERUNE technology Co., Ltd.\n00:12:3F\tDell\tDell Inc.\n00:12:40\tAmoiElec\tAmoi Electronics Co.,Ltd\n00:12:41\tA2iMarke\ta2i marketing center\n00:12:42\tMillenni\tMillennial Net\n00:12:43\tCisco\tCisco Systems, Inc\n00:12:44\tCisco\tCisco Systems, Inc\n00:12:45\tZellwege\tZellweger Analytics, Inc.\n00:12:46\tTOMTechn\tT.O.M Technology Inc..\n00:12:47\tSamsungE\tSamsung Electronics Co.,Ltd\n00:12:48\tDellEmc\tDell EMC\n00:12:49\tDeltaEle\tDelta Elettronica S.p.A.\n00:12:4A\tDedicate\tDedicated Devices, Inc.\n00:12:4B\tTexasIns\tTexas Instruments\n00:12:4C\tBbwm\tBBWM Corporation\n00:12:4D\tInduconB\tInducon BV\n00:12:4E\tXacAutom\tXac Automation Corp.\n00:12:4F\tNvent\t\n00:12:50\tTokyoAir\tTokyo Aircaft Instrument Co., Ltd.\n00:12:51\tSilink\t\n00:12:52\tCitronix\tCitronix, LLC\n00:12:53\tAudiodev\tAudioDev AB\n00:12:54\tSpectraT\tSpectra Technologies Holdings Company Ltd\n00:12:55\tNeteffec\tNetEffect Incorporated\n00:12:56\tLgInform\tLG INFORMATION & COMM.\n00:12:57\tLeapcomm\tLeapComm Communication Technologies Inc.\n00:12:58\tActivisP\tActivis Polska\n00:12:59\tThermoEl\tThermo Electron Karlsruhe\n00:12:5A\tMicrosof\tMicrosoft Corporation\n00:12:5B\tKaimeiEl\tKaimei Electroni\n00:12:5C\tGreenHil\tGreen Hills Software, Inc.\n00:12:5D\tCybernet\tCyberNet Inc.\n00:12:5E\tCaen\t\n00:12:5F\tAwind\tAWIND Inc.\n00:12:60\tStantonM\tStanton Magnetics,inc.\n00:12:61\tAdaptix\tAdaptix, Inc\n00:12:62\tNokiaDan\tNokia Danmark A/S\n00:12:63\tDataVoic\tData Voice Technologies GmbH\n00:12:64\tDaumElec\tdaum electronic gmbh\n00:12:65\tEnerdyne\tEnerdyne Technologies, Inc.\n00:12:66\tSwisscom\tSwisscom Hospitality Services SA\n00:12:67\tPanasoni\tPanasonic Corporation\n00:12:68\tIpsDOO\tIPS d.o.o.\n00:12:69\tValueEle\tValue Electronics\n00:12:6A\tOptoelec\tOPTOELECTRONICS Co., Ltd.\n00:12:6B\tAscalade\tAscalade Communications Limited\n00:12:6C\tVisonicT\tVisonic Technologies 1993 Ltd.\n00:12:6D\tUniversi\tUniversity of California, Berkeley\n00:12:6E\tSeidelEl\tSeidel Elektronik GmbH Nfg.KG\n00:12:6F\tRaysonTe\tRayson Technology Co., Ltd.\n00:12:70\tNgesDenr\tNGES Denro Systems\n00:12:71\tMeasurem\tMeasurement Computing Corp\n00:12:72\tReduxCom\tRedux Communications Ltd.\n00:12:73\tStoke\tStoke Inc\n00:12:74\tNitLab\tNIT lab\n00:12:75\tSentilla\tSentilla Corporation\n00:12:76\tCgPowerI\tCG Power Systems Ireland Limited\n00:12:77\tKorenixT\tKorenix Technologies Co., Ltd.\n00:12:78\tInternat\tInternational Bar Code\n00:12:79\tHewlettP\tHewlett Packard\n00:12:7A\tSanyuInd\tSanyu Industry Co.,Ltd.\n00:12:7B\tViaNetwo\tVIA Networking Technologies, Inc.\n00:12:7C\tSwegon\tSwegon Ab\n00:12:7D\tMobilear\tMobileAria\n00:12:7E\tDigitalL\tDigital Lifestyles Group, Inc.\n00:12:7F\tCisco\tCisco Systems, Inc\n00:12:80\tCisco\tCisco Systems, Inc\n00:12:81\tMarchNet\tMarch Networks S.p.A.\n00:12:82\tQovia\t\n00:12:83\tNortelNe\tNortel Networks\n00:12:84\tLab33Srl\tLab33 Srl\n00:12:85\tGizmondo\tGizmondo Europe Ltd\n00:12:86\tEndevco\tEndevco Corp\n00:12:87\tDigitalE\tDigital Everywhere Unterhaltungselektronik GmbH\n00:12:88\t2wire\t2Wire Inc\n00:12:89\tAdvanceS\tAdvance Sterilization Products\n00:12:8A\tArrisGro\tARRIS Group, Inc.\n00:12:8B\tSensoryN\tSensory Networks Inc\n00:12:8C\tWoodward\tWoodward Governor\n00:12:8D\tStbDaten\tSTB Datenservice GmbH\n00:12:8E\tQ-FreeAs\tQ-Free ASA\n00:12:8F\tMontilio\t\n00:12:90\tKyowaEle\tKYOWA Electric & Machinery Corp.\n00:12:91\tKwsCompu\tKWS Computersysteme GmbH\n00:12:92\tGriffinT\tGriffin Technology\n00:12:93\tGeEnergy\tGE Energy\n00:12:94\tSumitomo\tSumitomo Electric Device Innovations, Inc\n00:12:95\tAiware\tAiware Inc.\n00:12:96\tAddlogix\t\n00:12:97\tO2micro\tO2Micro, Inc.\n00:12:98\tMicoElec\tMICO ELECTRIC(SHENZHEN) LIMITED\n00:12:99\tKtechTel\tKtech Telecommunications Inc\n00:12:9A\tIrtElect\tIRT Electronics Pty Ltd\n00:12:9B\tE2sElect\tE2S Electronic Engineering Solutions, S.L.\n00:12:9C\tYulinet\t\n00:12:9D\tFirstInt\tFirst International Computer do Brasil\n00:12:9E\tSurfComm\tSurf Communications Inc.\n00:12:9F\tRae\tRAE Systems\n00:12:A0\tNeomerid\tNeoMeridian Sdn Bhd\n00:12:A1\tBluepack\tBluePacket Communications Co., Ltd.\n00:12:A2\tVita\t\n00:12:A3\tTrustInt\tTrust International B.V.\n00:12:A4\tThingmag\tThingMagic, LLC\n00:12:A5\tDolphinI\tDolphin Interconnect Solutions AS\n00:12:A6\tDolbyAus\tDolby Australia\n00:12:A7\tIsrTechn\tISR TECHNOLOGIES Inc\n00:12:A8\tIntec\tintec GmbH\n00:12:A9\t3com\t3Com Ltd\n00:12:AA\tIee\tIEE, Inc.\n00:12:AB\tWilife\tWiLife, Inc.\n00:12:AC\tOntimete\tOntimetek Inc.\n00:12:AD\tIds\tIDS GmbH\n00:12:AE\tHlsHard-\tHLS HARD-LINE Solutions Inc.\n00:12:AF\tElproTec\tELPRO Technologies\n00:12:B0\tEforeOyj\tEfore Oyj   (Plc)\n00:12:B1\tDaiNippo\tDai Nippon Printing Co., Ltd\n00:12:B2\tAvolites\tAvolites Ltd.\n00:12:B3\tAdvanceW\tAdvance Wireless Technology Corp.\n00:12:B4\tWorkMicr\tWork Microwave GmbH\n00:12:B5\tVialta\tVialta, Inc.\n00:12:B6\tSantaBar\tSanta Barbara Infrared, Inc.\n00:12:B7\tPtwFreib\tPTW Freiburg\n00:12:B8\tG2Micros\tG2 Microsystems\n00:12:B9\tFusionDi\tFusion Digital Technology\n00:12:BA\tFsi\tFSI Systems, Inc.\n00:12:BB\tTelecomm\tTelecommunications Industry Association TR-41 Committee\n00:12:BC\tEcholabL\tEcholab LLC\n00:12:BD\tAvantecM\tAvantec Manufacturing Limited\n00:12:BE\tAstek\tAstek Corporation\n00:12:BF\tArcadyan\tArcadyan Technology Corporation\n00:12:C0\tHotlava\tHotLava Systems, Inc.\n00:12:C1\tCheckPoi\tCheck Point Software Technologies\n00:12:C2\tApexElec\tApex Electronics Factory\n00:12:C3\tWitSA\tWit S.A.\n00:12:C4\tViseon\tViseon, Inc.\n00:12:C5\tV-ShowTe\tV-Show  Technology (China) Co.,Ltd\n00:12:C6\tTgcAmeri\tTGC America, Inc\n00:12:C7\tSecurayT\tSECURAY Technologies Ltd.Co.\n00:12:C8\tPerfectT\tPerfect tech\n00:12:C9\tArrisGro\tARRIS Group, Inc.\n00:12:CA\tMechatro\tMechatronic Brick Aps\n00:12:CB\tCss\tCSS Inc.\n00:12:CC\tBitatek\tBitatek CO., LTD\n00:12:CD\tAsem\tASEM SpA\n00:12:CE\tAdvanced\tAdvanced Cybernetics Group\n00:12:CF\tAcctonTe\tAccton Technology Corp\n00:12:D0\tGossen-M\tGossen-Metrawatt-GmbH\n00:12:D1\tTexasIns\tTexas Instruments\n00:12:D2\tTexasIns\tTexas Instruments\n00:12:D3\tZetta\tZetta Systems, Inc.\n00:12:D4\tPrinceto\tPrinceton Technology, Ltd\n00:12:D5\tMotionRe\tMotion Reality Inc.\n00:12:D6\tJiangsuY\tJiangsu Yitong High-Tech Co.,Ltd\n00:12:D7\tInventoN\tInvento Networks, Inc.\n00:12:D8\tInternat\tInternational Games System Co., Ltd.\n00:12:D9\tCisco\tCisco Systems, Inc\n00:12:DA\tCisco\tCisco Systems, Inc\n00:12:DB\tZiehlInd\tZIEHL industrie-elektronik GmbH + Co KG\n00:12:DC\tSuncorpI\tSunCorp Industrial Limited\n00:12:DD\tShengquI\tShengqu Information Technology (Shanghai) Co., Ltd.\n00:12:DE\tRadioCom\tRadio Components Sweden AB\n00:12:DF\tNovomati\tNovomatic AG\n00:12:E0\tCodan\tCodan Limited\n00:12:E1\tAlliantN\tAlliant Networks, Inc\n00:12:E2\tAlaxalaN\tALAXALA Networks Corporation\n00:12:E3\tAgat-Rt\tAgat-RT, Ltd.\n00:12:E4\tZiehlInd\tZIEHL industrie-electronik GmbH + Co KG\n00:12:E5\tTimeAmer\tTime America, Inc.\n00:12:E6\tSpectecC\tSpectec Computer Co., Ltd.\n00:12:E7\tProjecte\tProjectek Networking Electronics Corp.\n00:12:E8\tFraunhof\tFraunhofer IMS\n00:12:E9\tAbbey\tAbbey Systems Ltd\n00:12:EA\tTrane\t\n00:12:EB\tPdhSolut\tPDH Solutions, LLC\n00:12:EC\tMovacolo\tMovacolor b.v.\n00:12:ED\tAvgAdvan\tAVG Advanced Technologies\n00:12:EE\tSonyMobi\tSony Mobile Communications Inc\n00:12:EF\tOneacces\tOneAccess SA\n00:12:F0\tIntelCor\tIntel Corporate\n00:12:F1\tIfotec\t\n00:12:F2\tBrocadeC\tBrocade Communications Systems, Inc.\n00:12:F3\tConnectb\tconnectBlue AB\n00:12:F4\tBelcoInt\tBelco International Co.,Ltd.\n00:12:F5\tImardaNe\tImarda New Zealand Limited\n00:12:F6\tMdk\tMdk Co.,Ltd.\n00:12:F7\tXiamenXi\tXiamen Xinglian Electronics Co., Ltd.\n00:12:F8\tWniResou\tWNI Resources, LLC\n00:12:F9\tUryuSeis\tUryu Seisaku, Ltd.\n00:12:FA\tThx\tThx Ltd\n00:12:FB\tSamsungE\tSamsung Electronics Co.,Ltd\n00:12:FC\tPlanetSy\tPLANET System Co.,LTD\n00:12:FD\tOptimusI\tOptimus Ic S.A.\n00:12:FE\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\n00:12:FF\tLelyIndu\tLely Industries N.V.\n00:13:00\tIt-Facto\tIT-FACTORY, INC.\n00:13:01\tIrongate\tIronGate S.L.\n00:13:02\tIntelCor\tIntel Corporate\n00:13:03\tGateconn\tGateConnect\n00:13:04\tFlaircom\tFlaircomm Technologies Co. LTD\n00:13:05\tEpicom\tEpicom, Inc.\n00:13:06\tAlwaysOn\tAlways On Wireless\n00:13:07\tParavirt\tParavirtual Corporation\n00:13:08\tNuveraFu\tNuvera Fuel Cells\n00:13:09\tOceanBro\tOcean Broadband Networks\n00:13:0A\tNortelNe\tNortel Networks\n00:13:0B\tMextalBV\tMextal B.V.\n00:13:0C\tHfSystem\tHF System Corporation\n00:13:0D\tGalileoA\tGalileo Avionica\n00:13:0E\tFocusrit\tFocusrite Audio Engineering Limited\n00:13:0F\tEgemenBi\tEGEMEN Bilgisayar Muh San ve Tic LTD STI\n00:13:10\tCisco-Li\tCisco-Linksys, LLC\n00:13:11\tArrisGro\tARRIS Group, Inc.\n00:13:12\tAmediaNe\tAmedia Networks Inc.\n00:13:13\tGuangzho\tGuangZhou Post & Telecom Equipment ltd\n00:13:14\tAsiamajo\tAsiamajor Inc.\n00:13:15\tSonyInte\tSony Interactive Entertainment Inc.\n00:13:16\tL-S-BBro\tL-S-B Broadcast Technologies GmbH\n00:13:17\tGnNetcom\tGN Netcom A/S\n00:13:18\tDgstatio\tDGSTATION Co., Ltd.\n00:13:19\tCisco\tCisco Systems, Inc\n00:13:1A\tCisco\tCisco Systems, Inc\n00:13:1B\tBecellIn\tBeCell Innovations Corp.\n00:13:1C\tLitetouc\tLiteTouch, Inc.\n00:13:1D\tScanvaeg\tScanvaegt International A/S\n00:13:1E\tPeikerAc\tPeiker acustic GmbH & Co. KG\n00:13:1F\tNxtphase\tNxtPhase T&D, Corp.\n00:13:20\tIntelCor\tIntel Corporate\n00:13:21\tHewlettP\tHewlett Packard\n00:13:22\tDaqElect\tDAQ Electronics, Inc.\n00:13:23\tCap\tCap Co., Ltd.\n00:13:24\tSchneide\tSchneider Electric Ultra Terminal\n00:13:25\tCortina\tCortina Systems Inc\n00:13:26\tEcm\tECM Systems Ltd\n00:13:27\tDataAcqu\tData Acquisitions limited\n00:13:28\tWestechK\tWestech Korea Inc.,\n00:13:29\tVsst\tVSST Co., LTD\n00:13:2A\tSitronic\tSitronics Telecom Solutions\n00:13:2B\tPhoenixD\tPhoenix Digital\n00:13:2C\tMazBrand\tMAZ Brandenburg GmbH\n00:13:2D\tIwiseCom\tiWise Communications\n00:13:2E\tItianCop\tITian Coporation\n00:13:2F\tInteract\tInteractek\n00:13:30\tEuroProt\tEuro Protection Surveillance\n00:13:31\tCellpoin\tCellPoint Connect\n00:13:32\tBeijingT\tBeijing Topsec Network Security Technology Co., Ltd.\n00:13:33\tBaudtec\tBaudTec Corporation\n00:13:34\tArkados\tArkados, Inc.\n00:13:35\tVsIndust\tVS Industry Berhad\n00:13:36\tTianjin7\tTianjin 712 Communication Broadcasting co., ltd.\n00:13:37\tOrientPo\tOrient Power Home Network Ltd.\n00:13:38\tFreseniu\tFRESENIUS-VIAL\n00:13:39\tCcvDeuts\tCCV Deutschland GmbH\n00:13:3A\tVadatech\tVadaTech Inc.\n00:13:3B\tSpeedDra\tSpeed Dragon Multimedia Limited\n00:13:3C\tQuintron\tQuintron Systems Inc.\n00:13:3D\tMicroMem\tMicro Memory Curtiss Wright Co\n00:13:3E\tMetaswit\tMetaSwitch\n00:13:3F\tEppendor\tEppendorf Instrumente GmbH\n00:13:40\tAdElSRL\tAD.EL s.r.l.\n00:13:41\tShandong\tShandong New Beiyang Information Technology Co.,Ltd\n00:13:42\tVisionRe\tVision Research, Inc.\n00:13:43\tMatsushi\tMatsushita Electronic Components (Europe) GmbH\n00:13:44\tFargoEle\tFargo Electronics Inc.\n00:13:45\tEaton\tEaton Corporation\n00:13:46\tD-Link\tD-Link Corporation\n00:13:47\tRedLionC\tRed Lion Controls, LP\n00:13:48\tArtilaEl\tArtila Electronics Co., Ltd.\n00:13:49\tZyxelCom\tZyxel Communications Corporation\n00:13:4A\tEngim\tEngim, Inc.\n00:13:4B\tTogolden\tToGoldenNet Technology Inc.\n00:13:4C\tYdtTechn\tYDT Technology International\n00:13:4D\tIneproBv\tInepro BV\n00:13:4E\tValox\tValox Systems, Inc.\n00:13:4F\tRapidusW\tRapidus Wireless Networks Inc.\n00:13:50\tSilverSp\tSilver Spring Networks, Inc\n00:13:51\tNilesAud\tNiles Audio Corporation\n00:13:52\tNaztec\tNaztec, Inc.\n00:13:53\tHydacFil\tHYDAC Filtertechnik GMBH\n00:13:54\tZcomaxTe\tZcomax Technologies, Inc.\n00:13:55\tTomenCyb\tTOMEN Cyber-business Solutions, Inc.\n00:13:56\tFlirRadi\tFLIR Radiation Inc\n00:13:57\tSoyalTec\tSoyal Technology Co., Ltd.\n00:13:58\tRealm\tRealm Systems, Inc.\n00:13:59\tProtelev\tProTelevision Technologies A/S\n00:13:5A\tProjectT\tProject T&E Limited\n00:13:5B\tPanellin\tPanelLink Cinema, LLC\n00:13:5C\tOnsite\tOnSite Systems, Inc.\n00:13:5D\tNttpcCom\tNTTPC Communications, Inc.\n00:13:5E\tEab/Rwi/\tEAB/RWI/K\n00:13:5F\tCisco\tCisco Systems, Inc\n00:13:60\tCisco\tCisco Systems, Inc\n00:13:61\tBiospace\tBiospace Co., Ltd.\n00:13:62\tShinheun\tShinHeung Precision Co., Ltd.\n00:13:63\tVerascap\tVerascape, Inc.\n00:13:64\tParadigm\tParadigm Technology Inc..\n00:13:65\tNortelNe\tNortel Networks\n00:13:66\tNeturity\tNeturity Technologies Inc.\n00:13:67\tNarayon\tNarayon. Co., Ltd.\n00:13:68\tSaabDanm\tSaab Danmark A/S\n00:13:69\tHondaEle\tHonda Electron Co., LED.\n00:13:6A\tHachLang\tHach Lange Sarl\n00:13:6B\tE-Tec\t\n00:13:6C\tTomtom\t\n00:13:6D\tTentacul\tTentaculus AB\n00:13:6E\tTechmetr\tTechmetro Corp.\n00:13:6F\tPacketmo\tPacketMotion, Inc.\n00:13:70\tNokiaDan\tNokia Danmark A/S\n00:13:71\tArrisGro\tARRIS Group, Inc.\n00:13:72\tDell\tDell Inc.\n00:13:73\tBlwaveEl\tBLwave Electronics Co., Ltd\n00:13:74\tAtherosC\tAtheros Communications, Inc.\n00:13:75\tAmerican\tAmerican Security Products Co.\n00:13:76\tTaborEle\tTabor Electronics Ltd.\n00:13:77\tSamsungE\tSamsung Electronics Co.,Ltd\n00:13:78\tQsanTech\tQsan Technology, Inc.\n00:13:79\tPonderIn\tPonder Information Industries Ltd.\n00:13:7A\tNetvoxTe\tNetvox Technology Co., Ltd.\n00:13:7B\tMovon\tMovon Corporation\n00:13:7C\tKaicom\tKaicom co., Ltd.\n00:13:7D\tDynalab\tDynalab, Inc.\n00:13:7E\tCoredgeN\tCorEdge Networks, Inc.\n00:13:7F\tCisco\tCisco Systems, Inc\n00:13:80\tCisco\tCisco Systems, Inc\n00:13:81\tChips\tCHIPS & Systems, Inc.\n00:13:82\tCetaceaN\tCetacea Networks Corporation\n00:13:83\tApplicat\tApplication Technologies and Engineering Research Laboratory\n00:13:84\tAdvanced\tAdvanced Motion Controls\n00:13:85\tAdd-OnTe\tAdd-On Technology Co., LTD.\n00:13:86\tAbbInc/T\tABB Inc/Totalflow\n00:13:87\t27mTechn\t27M Technologies AB\n00:13:88\tWimediaA\tWiMedia Alliance\n00:13:89\tRedesDeT\tRedes de Telefonía Móvil S.A.\n00:13:8A\tQingdaoG\tQingdao GoerTek Technology Co., Ltd.\n00:13:8B\tPhantomT\tPhantom Technologies LLC\n00:13:8C\tKumyoung\tKumyoung.Co.Ltd\n00:13:8D\tKinghold\t\n00:13:8E\tFoabElek\tFOAB Elektronik AB\n00:13:8F\tAsiarock\tAsiarock Technology Limited\n00:13:90\tTermtekC\tTermtek Computer Co., Ltd\n00:13:91\tOuen\tOuen Co.,Ltd.\n00:13:92\tRuckusWi\tRuckus Wireless\n00:13:93\tPanta\tPanta Systems, Inc.\n00:13:94\tInfohand\tInfohand Co.,Ltd\n00:13:95\tCongatec\tcongatec AG\n00:13:96\tAcbelPol\tAcbel Polytech Inc.\n00:13:97\tOracle\tOracle Corporation\n00:13:98\tTraffics\tTrafficSim Co.,Ltd\n00:13:99\tStac\tSTAC Corporation.\n00:13:9A\tK-Ubique\tK-ubique ID Corp.\n00:13:9B\tIoimage\tioIMAGE Ltd.\n00:13:9C\tExaveraT\tExavera Technologies, Inc.\n00:13:9D\tMaxlinea\tMaxLinear Hispania S.L.U.\n00:13:9E\tCiaraTec\tCiara Technologies Inc.\n00:13:9F\tElectron\tElectronics Design Services, Co., Ltd.\n00:13:A0\tAlgosyst\tALGOSYSTEM Co., Ltd.\n00:13:A1\tCrowElec\tCrow Electronic Engeneering\n00:13:A2\tMaxstrea\tMaxStream, Inc\n00:13:A3\tSiemensH\tSiemens Home & Office Comm. Devices\n00:13:A4\tKeyeyeCo\tKeyEye Communications\n00:13:A5\tGeneralS\tGeneral Solutions, LTD.\n00:13:A6\tExtricom\tExtricom Ltd\n00:13:A7\tBattelle\tBattelle Memorial Institute\n00:13:A8\tTanisysT\tTanisys Technology\n00:13:A9\tSony\tSony Corporation\n00:13:AA\tAlsTec\tALS  & TEC Ltd.\n00:13:AB\tTelemoti\tTelemotive AG\n00:13:AC\tSunmyung\tSunmyung Electronics Co., LTD\n00:13:AD\tSendo\tSendo Ltd\n00:13:AE\tRadiance\tRadiance Technologies, Inc.\n00:13:AF\tNumaTech\tNUMA Technology,Inc.\n00:13:B0\tJablotro\tJablotron\n00:13:B1\tIntellig\tIntelligent Control Systems (Asia) Pte Ltd\n00:13:B2\tCarallon\tCarallon Limited\n00:13:B3\tEcomComm\tEcom Communications Technology Co., Ltd.\n00:13:B4\tAppearTv\tAppear TV\n00:13:B5\tWavesat\t\n00:13:B6\tSlingMed\tSling Media, Inc.\n00:13:B7\tScantech\tScantech ID\n00:13:B8\tRycoElec\tRyCo Electronic Systems Limited\n00:13:B9\tBm\tBm Spa\n00:13:BA\tReadylin\tReadyLinks Inc\n00:13:BB\tSmartvue\tSmartvue Corporation\n00:13:BC\tArtimi\tArtimi Ltd\n00:13:BD\tHymatomS\tHymatom Sa\n00:13:BE\tVirtualC\tVirtual Conexions\n00:13:BF\tMediaSys\tMedia System Planning Corp.\n00:13:C0\tTrixTecn\tTrix Tecnologia Ltda.\n00:13:C1\tAsokaUsa\tAsoka USA Corporation\n00:13:C2\tWacom\tWACOM Co.,Ltd\n00:13:C3\tCisco\tCisco Systems, Inc\n00:13:C4\tCisco\tCisco Systems, Inc\n00:13:C5\tLightron\tLIGHTRON FIBER-OPTIC DEVICES INC.\n00:13:C6\tOpengear\tOpenGear, Inc\n00:13:C7\tIonos\tIONOS Co.,Ltd.\n00:13:C8\tAdbBroad\tADB Broadband Italia\n00:13:C9\tBeyondAc\tBeyond Achieve Enterprises Ltd.\n00:13:CA\tPicoDigi\tPico Digital\n00:13:CB\tZenitelN\tZenitel Norway AS\n00:13:CC\tTallMapl\tTall Maple Systems\n00:13:CD\tMti\tMTI co. LTD\n00:13:CE\tIntelCor\tIntel Corporate\n00:13:CF\t4accessC\t4Access Communications\n00:13:D0\tT+Medica\tt+ Medical Ltd\n00:13:D1\tKirkTele\tKIRK telecom A/S\n00:13:D2\tPageIber\tPage Iberica, S.A.\n00:13:D3\tMicro-St\tMICRO-STAR INTERNATIONAL CO., LTD.\n00:13:D4\tAsustekC\tASUSTek COMPUTER INC.\n00:13:D5\tRuggedco\tRuggedCom\n00:13:D6\tTiiNetwo\tTii Network Technologies, Inc.\n00:13:D7\tSpidcomT\tSPIDCOM Technologies SA\n00:13:D8\tPrinceto\tPrinceton Instruments\n00:13:D9\tMatrixPr\tMatrix Product Development, Inc.\n00:13:DA\tDiskware\tDiskware Co., Ltd\n00:13:DB\tShoeiEle\tSHOEI Electric Co.,Ltd\n00:13:DC\tIbtek\tIbtek Inc.\n00:13:DD\tAbbottDi\tAbbott Diagnostics\n00:13:DE\tAdapt4Ll\tAdapt4, LLC\n00:13:DF\tRyvor\tRyvor Corp.\n00:13:E0\tMurataMa\tMurata Manufacturing Co., Ltd.\n00:13:E1\tIprobe\tIprobe AB\n00:13:E2\tGeovisio\tGeoVision Inc.\n00:13:E3\tCoviTech\tCoVi Technologies, Inc.\n00:13:E4\tYangjae\tYangjae Systems Corp.\n00:13:E5\tTenosys\tTenosys, Inc.\n00:13:E6\tTechnolu\tTechnolution\n00:13:E7\tHalcro\t\n00:13:E8\tIntelCor\tIntel Corporate\n00:13:E9\tVeriwave\tVeriWave, Inc.\n00:13:EA\tKamstrup\tKamstrup A/S\n00:13:EB\tSysmaste\tSysmaster Corporation\n00:13:EC\tNetsnapp\tNetsnapper Technologies SARL\n00:13:ED\tPsia\t\n00:13:EE\tJbxDesig\tJBX Designs Inc.\n00:13:EF\tKingjonD\tKingjon Digital Technology Co.,Ltd\n00:13:F0\tWavefron\tWavefront Semiconductor\n00:13:F1\tAmodTech\tAMOD Technology Co., Ltd.\n00:13:F2\tKlas\tKlas Ltd\n00:13:F3\tGiga-Byt\tGiga-byte Communications Inc.\n00:13:F4\tPsitekPt\tPsitek (Pty) Ltd\n00:13:F5\tAkimbi\tAkimbi Systems\n00:13:F6\tCintech\t\n00:13:F7\tSmcNetwo\tSMC Networks, Inc.\n00:13:F8\tDexSecur\tDex Security Solutions\n00:13:F9\tCavera\tCavera Systems\n00:13:FA\tLifesize\tLifeSize Communications, Inc\n00:13:FB\tRkcInstr\tRkc Instrument Inc.\n00:13:FC\tSicortex\tSiCortex, Inc\n00:13:FD\tNokiaDan\tNokia Danmark A/S\n00:13:FE\tGrandtec\tGrandtec Electronic Corp.\n00:13:FF\tDage-Mti\tDage-MTI of MC, Inc.\n00:14:00\tMinervaK\tMinerva Korea Co., Ltd\n00:14:01\tRivertre\tRivertree Networks Corp.\n00:14:02\tKk-Elect\tkk-electronic a/s\n00:14:03\tRenasisL\tRenasis, LLC\n00:14:04\tArrisGro\tARRIS Group, Inc.\n00:14:05\tOpenib\tOpenIB, Inc.\n00:14:06\tGoNetwor\tGo Networks\n00:14:07\tSperianP\tSperian Protection Instrumentation\n00:14:08\tEka\tEka Systems Inc.\n00:14:09\tMagnetiM\tMAGNETI MARELLI   S.E. S.p.A.\n00:14:0A\tWepio\tWEPIO Co., Ltd.\n00:14:0B\tFirstInt\tFirst International Computer, Inc.\n00:14:0C\tGkbCctv\tGkb Cctv Co., Ltd.\n00:14:0D\tNortelNe\tNortel Networks\n00:14:0E\tNortelNe\tNortel Networks\n00:14:0F\tFederalS\tFederal State Unitary Enterprise Leningrad R&D Institute of\n00:14:10\tSuzhouKe\tSuzhou Keda Technology CO.,Ltd\n00:14:11\tDeutschm\tDeutschmann Automation GmbH & Co. KG\n00:14:12\tS-TecEle\tS-TEC electronics AG\n00:14:13\tTrebingH\tTrebing & Himstedt Prozeßautomation GmbH & Co. KG\n00:14:14\tJumpnode\tJumpnode Systems LLC.\n00:14:15\tIntecAut\tIntec Automation inc.\n00:14:16\tScoscheI\tScosche Industries, Inc.\n00:14:17\tRseInfor\tRSE Informations Technologie GmbH\n00:14:18\tC4line\t\n00:14:19\tSidsa\t\n00:14:1A\tDeicy\tDeicy Corporation\n00:14:1B\tCisco\tCisco Systems, Inc\n00:14:1C\tCisco\tCisco Systems, Inc\n00:14:1D\tLti-Moti\tLTI-Motion GmbH\n00:14:1E\tPASemi\tP.A. Semi, Inc.\n00:14:1F\tSunkwang\tSunKwang Electronics Co., Ltd\n00:14:20\tG-LinksN\tG-Links networking company\n00:14:21\tTotalWir\tTotal Wireless Technologies Pte. Ltd.\n00:14:22\tDell\tDell Inc.\n00:14:23\tJ-SNeuro\tJ-S Co. NEUROCOM\n00:14:24\tMerryEle\tMerry Electrics CO., LTD.\n00:14:25\tGalactic\tGalactic Computing Corp.\n00:14:26\tNlTechno\tNL Technology\n00:14:27\tJazzmuta\tJazzMutant\n00:14:28\tVocollec\tVocollect Inc\n00:14:29\tVCenterT\tV Center Technologies Co., Ltd.\n00:14:2A\tElitegro\tElitegroup Computer Systems Co.,Ltd.\n00:14:2B\tEdataCom\tEdata Communication Inc.\n00:14:2C\tKonceptI\tKoncept International, Inc.\n00:14:2D\tToradex\tToradex AG\n00:14:2E\t77Elektr\t77 Elektronika Kft.\n00:14:2F\tSavvius\t\n00:14:30\tVipower\tViPowER, Inc\n00:14:31\tPdlElect\tPDL Electronics Ltd\n00:14:32\tTarallax\tTarallax Wireless, Inc.\n00:14:33\tEmpowerT\tEmpower Technologies(Canada) Inc.\n00:14:34\tKeri\tKeri Systems, Inc\n00:14:35\tCitycom\tCityCom Corp.\n00:14:36\tQwertyEl\tQwerty Elektronik AB\n00:14:37\tGstelete\tGSTeletech Co.,Ltd.\n00:14:38\tHewlettP\tHewlett Packard Enterprise\n00:14:39\tBlonderT\tBlonder Tongue Laboratories, Inc\n00:14:3A\tRaytalkI\tRaytalk International Srl\n00:14:3B\tSensovat\tSensovation AG\n00:14:3C\tRheinmet\tRheinmetall Canada Inc.\n00:14:3D\tAevoe\tAevoe Inc.\n00:14:3E\tAirlinkC\tAirLink Communications, Inc.\n00:14:3F\tHotwayTe\tHotway Technology Corporation\n00:14:40\tAtomic\tATOMIC Corporation\n00:14:41\tInnovati\tInnovation Sound Technology Co., LTD.\n00:14:42\tAtto\tAtto Corporation\n00:14:43\tConsultr\tConsultronics Europe Ltd\n00:14:44\tGrundfos\tGrundfos Holding\n00:14:45\tTelefon-\tTelefon-Gradnja d.o.o.\n00:14:46\tSupervis\tSuperVision Solutions LLC\n00:14:47\tBoaz\tBOAZ Inc.\n00:14:48\tInventec\tInventec Multimedia & Telecom Corporation\n00:14:49\tSichuanC\tSichuan Changhong Electric Ltd.\n00:14:4A\tTaiwanTh\tTaiwan Thick-Film Ind. Corp.\n00:14:4B\tHifn\tHifn, Inc.\n00:14:4C\tGeneralM\tGeneral Meters Corp.\n00:14:4D\tIntellig\tIntelligent Systems\n00:14:4E\tSrisa\t\n00:14:4F\tOracle\tOracle Corporation\n00:14:50\tHeim\tHeim Systems GmbH\n00:14:51\tApple\tApple, Inc.\n00:14:52\tCalculex\tCalculex,Inc.\n00:14:53\tAdvantec\tAdvantech Technologies Co.,Ltd\n00:14:54\tSymwave\t\n00:14:55\tCoderEle\tCoder Electronics Corporation\n00:14:56\tEdgeProd\tEdge Products\n00:14:57\tT-VipsAs\tT-VIPS AS\n00:14:58\tHsAutoma\tHS Automatic ApS\n00:14:59\tMoram\tMoram Co., Ltd.\n00:14:5A\tNeratecS\tNeratec Solutions AG\n00:14:5B\tSeekerne\tSeekerNet Inc.\n00:14:5C\tIntronic\tIntronics B.V.\n00:14:5D\tWjCommun\tWJ Communications, Inc.\n00:14:5E\tIbm\tIBM Corp\n00:14:5F\tAditec\tAditec Co. Ltd\n00:14:60\tKyoceraW\tKyocera Wireless Corp.\n00:14:61\tCorona\tCorona Corporation\n00:14:62\tDigiwell\tDigiwell Technology, inc\n00:14:63\tIdcsNV\tIdcs N.V.\n00:14:64\tCryptoso\tCryptosoft\n00:14:65\tNovoNord\tNovo Nordisk A/S\n00:14:66\tKleinhen\tKleinhenz Elektronik GmbH\n00:14:67\tArrowspa\tArrowSpan Inc.\n00:14:68\tCelplanI\tCelPlan International, Inc.\n00:14:69\tCisco\tCisco Systems, Inc\n00:14:6A\tCisco\tCisco Systems, Inc\n00:14:6B\tAnagran\tAnagran, Inc.\n00:14:6C\tNetgear\t\n00:14:6D\tRfTechno\tRF Technologies\n00:14:6E\tHStoll\tH. Stoll GmbH & Co. KG\n00:14:6F\tKohler\tKohler Co\n00:14:70\tProkomSo\tProkom Software SA\n00:14:71\tEasternA\tEastern Asia Technology Limited\n00:14:72\tChinaBro\tChina Broadband Wireless IP Standard group(ChinaBWIPS)\n00:14:73\tBookham\tBookham Inc\n00:14:74\tK40Elect\tK40 Electronics\n00:14:75\tWilineNe\tWiline Networks, Inc.\n00:14:76\tMulticom\tMultiCom Industries Limited\n00:14:77\tTrillian\tTrilliant\n00:14:78\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n00:14:79\tNecMagnu\tNEC Magnus Communications,Ltd.\n00:14:7A\tEubus\tEubus GmbH\n00:14:7B\tIteris\tIteris, Inc.\n00:14:7C\t3com\t3Com Ltd\n00:14:7D\tAeonDigi\tAeon Digital International\n00:14:7E\tInnerwir\tInnerWireless\n00:14:7F\tThomsonT\tThomson Telecom Belgium\n00:14:80\tHitachi-\tHitachi-LG Data Storage Korea, Inc\n00:14:81\tMultilin\tMultilink Inc\n00:14:82\tAuroraNe\tAurora Networks\n00:14:83\tExs\teXS Inc.\n00:14:84\tCermateT\tCermate Technologies Inc.\n00:14:85\tGiga-Byt\tGiga-Byte\n00:14:86\tEchoDigi\tEcho Digital Audio Corporation\n00:14:87\tAmerican\tAmerican Technology Integrators\n00:14:88\tAkorri\t\n00:14:89\tB1540210\tB15402100 - JANDEI, S.L.\n00:14:8A\tElinEbgT\tElin Ebg Traction Gmbh\n00:14:8B\tGloboEle\tGlobo Electronic GmbH & Co. KG\n00:14:8C\tGeneralD\tGeneral Dynamics Mission Systems\n00:14:8D\tCubicDef\tCubic Defense Simulation Systems\n00:14:8E\tTelePowe\tTele Power Inc.\n00:14:8F\tProtroni\tProtronic (Far East) Ltd.\n00:14:90\tAsp\tASP Corporation\n00:14:91\tDanielsE\tDaniels Electronics Ltd. dbo Codan Rado Communications\n00:14:92\tLiteonMo\tLiteon, Mobile Media Solution SBU\n00:14:93\tSystimax\tSystimax Solutions\n00:14:94\tEsu\tEsu Ag\n00:14:95\t2wire\t2Wire Inc\n00:14:96\tPhonic\tPhonic Corp.\n00:14:97\tZhiyuanE\tZHIYUAN Eletronics co.,ltd.\n00:14:98\tVikingDe\tViking Design Technology\n00:14:99\tHelicomm\tHelicomm Inc\n00:14:9A\tArrisGro\tARRIS Group, Inc.\n00:14:9B\tNokotaCo\tNokota Communications, LLC\n00:14:9C\tHf\tHF Company\n00:14:9D\tSoundId\tSound ID Inc.\n00:14:9E\tUbone\tUbONE Co., Ltd\n00:14:9F\tSystemAn\tSystem and Chips, Inc.\n00:14:A0\tAccsense\tAccsense, Inc.\n00:14:A1\tSynchron\tSynchronous Communication Corp\n00:14:A2\tCoreMicr\tCore Micro Systems Inc.\n00:14:A3\tVitelecB\tVitelec BV\n00:14:A4\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:14:A5\tGemtekTe\tGemtek Technology Co., Ltd.\n00:14:A6\tTeraneti\tTeranetics, Inc.\n00:14:A7\tNokiaDan\tNokia Danmark A/S\n00:14:A8\tCisco\tCisco Systems, Inc\n00:14:A9\tCisco\tCisco Systems, Inc\n00:14:AA\tAshlyAud\tAshly Audio, Inc.\n00:14:AB\tSenhaiEl\tSenhai Electronic Technology Co., Ltd.\n00:14:AC\tBountifu\tBountiful WiFi\n00:14:AD\tGassnerW\tGassner Wiege- und Meßtechnik GmbH\n00:14:AE\tWizlogic\tWizlogics Co., Ltd.\n00:14:AF\tDatasymP\tDatasym POS Inc.\n00:14:B0\tNaeilCom\tNaeil Community\n00:14:B1\tAxellWir\tAxell Wireless Limited\n00:14:B2\tMcubelog\tmCubelogics Corporation\n00:14:B3\tCorestar\tCoreStar International Corp\n00:14:B4\tGeneralD\tGeneral Dynamics United Kingdom Ltd\n00:14:B5\tPhysiome\tPhysiometrix,Inc\n00:14:B6\tEnswerTe\tEnswer Technology Inc.\n00:14:B7\tArInfote\tAR Infotek Inc.\n00:14:B8\tHill-Rom\t\n00:14:B9\tMstarSem\tMstar Semiconductor\n00:14:BA\tCarversS\tCarvers SA de CV\n00:14:BB\tOpenInte\tOpen Interface North America\n00:14:BC\tSynectic\tSynectic Telecom Exports Pvt. Ltd.\n00:14:BD\tIncnetwo\tincNETWORKS, Inc\n00:14:BE\tWinkComm\tWink communication technology CO.LTD\n00:14:BF\tCisco-Li\tCisco-Linksys, LLC\n00:14:C0\tSymstrea\tSymstream Technology Group Ltd\n00:14:C1\tUSRoboti\tU.S. Robotics Corporation\n00:14:C2\tHewlettP\tHewlett Packard\n00:14:C3\tSeagateT\tSeagate Technology\n00:14:C4\tVitelcom\tVitelcom Mobile Technology\n00:14:C5\tAliveTec\tAlive Technologies Pty Ltd\n00:14:C6\tQuixant\tQuixant Ltd\n00:14:C7\tNortelNe\tNortel Networks\n00:14:C8\tContempo\tContemporary Research Corp\n00:14:C9\tBrocadeC\tBrocade Communications Systems, Inc.\n00:14:CA\tKeyRadio\tKey Radio Systems Limited\n00:14:CB\tLifesync\tLifeSync Corporation\n00:14:CC\tZetec\tZetec, Inc.\n00:14:CD\tDigitalz\tDigitalZone Co., Ltd.\n00:14:CE\tNf\tNf Corporation\n00:14:CF\tInvisioC\tINVISIO Communications\n00:14:D0\tBti\tBTI Systems Inc.\n00:14:D1\tTrendnet\tTRENDnet, Inc.\n00:14:D2\tKyudenTe\tKyuden Technosystems Corporation\n00:14:D3\tSepsa\t\n00:14:D4\tKTechnol\tK Technology Corporation\n00:14:D5\tDatangTe\tDatang Telecom Technology CO. , LCD,Optical Communication Br\n00:14:D6\tJeongmin\tJeongmin Electronics Co.,Ltd.\n00:14:D7\tDatastor\tDatastore Technology Corp\n00:14:D8\tBio-Logi\tbio-logic SA\n00:14:D9\tIpFabric\tIP Fabrics, Inc.\n00:14:DA\tHuntleig\tHuntleigh Healthcare\n00:14:DB\tElmaTren\tElma Trenew Electronic GmbH\n00:14:DC\tCommunic\tCommunication System Design & Manufacturing (CSDM)\n00:14:DD\tCovergen\tCovergence Inc.\n00:14:DE\tSageInst\tSage Instruments Inc.\n00:14:DF\tHi-PTech\tHI-P Tech Corporation\n00:14:E0\tLetS\tLET'S Corporation\n00:14:E1\tDataDisp\tData Display AG\n00:14:E2\tDatacom\tdatacom systems inc.\n00:14:E3\tMm-Lab\tmm-lab GmbH\n00:14:E4\tInfinias\tinfinias, LLC\n00:14:E5\tAlticast\t\n00:14:E6\tAimInfra\tAIM Infrarotmodule GmbH\n00:14:E7\tStolinx\tStolinx,. Inc\n00:14:E8\tArrisGro\tARRIS Group, Inc.\n00:14:E9\tNortechI\tNortech International\n00:14:EA\tSDigmSaf\tS Digm Inc. (Safe Paradigm Inc.)\n00:14:EB\tAwarepoi\tAwarePoint Corporation\n00:14:EC\tAcroTele\tAcro Telecom\n00:14:ED\tAirak\tAirak, Inc.\n00:14:EE\tWesternD\tWestern Digital Technologies, Inc.\n00:14:EF\tTzeroTec\tTZero Technologies, Inc.\n00:14:F0\tBusiness\tBusiness Security OL AB\n00:14:F1\tCisco\tCisco Systems, Inc\n00:14:F2\tCisco\tCisco Systems, Inc\n00:14:F3\tVixs\tViXS Systems Inc\n00:14:F4\tDektecDi\tDekTec Digital Video B.V.\n00:14:F5\tOsiSecur\tOSI Security Devices\n00:14:F6\tJuniperN\tJuniper Networks\n00:14:F7\tCrevis\tCREVIS Co., LTD\n00:14:F8\tScientif\tScientific Atlanta\n00:14:F9\tVantageC\tVantage Controls\n00:14:FA\tAsgaSA\tAsGa S.A.\n00:14:FB\tTechnica\tTechnical Solutions Inc.\n00:14:FC\tExtandon\tExtandon, Inc.\n00:14:FD\tThecusTe\tThecus Technology Corp.\n00:14:FE\tArtechEl\tArtech Electronics\n00:14:FF\tPreciseA\tPrecise Automation, Inc.\n00:15:00\tIntelCor\tIntel Corporate\n00:15:01\tLexbox\t\n00:15:02\tBetaTech\tBETA tech\n00:15:03\tProficom\tPROFIcomms s.r.o.\n00:15:04\tGamePlus\tGame Plus Co., Ltd.\n00:15:05\tActionte\tActiontec Electronics, Inc\n00:15:06\tNeoPhoto\tNeo Photonics\n00:15:07\tRenaissa\tRenaissance Learning Inc\n00:15:08\tGlobalTa\tGlobal Target Enterprise Inc\n00:15:09\tPlusTech\tPlus Technology Co., Ltd\n00:15:0A\tSonoa\tSonoa Systems, Inc\n00:15:0B\tSageInfo\tSage Infotech Ltd.\n00:15:0C\tAvm\tAVM GmbH\n00:15:0D\tHoanaMed\tHoana Medical, Inc.\n00:15:0E\tOpenbrai\tOpenbrain Technologies Co., Ltd.\n00:15:0F\tMingjong\t\n00:15:10\tTechsphe\tTechsphere Co., Ltd\n00:15:11\tDataCent\tData Center Systems\n00:15:12\tZurichUn\tZurich University of Applied Sciences\n00:15:13\tEfsSas\tEFS sas\n00:15:14\tHuZhouNa\tHu Zhou NAVA Networks&Electronics Ltd.\n00:15:15\tLeipold+\tLeipold+Co.GmbH\n00:15:16\tUriel\tUriel Systems Inc.\n00:15:17\tIntelCor\tIntel Corporate\n00:15:18\tShenzhen\tShenzhen 10MOONS Technology Development CO.,Ltd\n00:15:19\tStoreage\tStoreAge Networking Technologies\n00:15:1A\tHunterEn\tHunter Engineering Company\n00:15:1B\tIsilon\tIsilon Systems Inc.\n00:15:1C\tLeneco\t\n00:15:1D\tM2i\tM2I CORPORATION\n00:15:1E\tEthernet\tETHERNET Powerlink Standarization Group (EPSG)\n00:15:1F\tMultivis\tMultivision Intelligent Surveillance (Hong Kong) Ltd\n00:15:20\tRadiocra\tRadiocrafts AS\n00:15:21\tHoroquar\tHoroquartz\n00:15:22\tDeaSecur\tDea Security\n00:15:23\tMeteorCo\tMeteor Communications Corporation\n00:15:24\tNumatics\tNumatics, Inc.\n00:15:25\tChamberl\tChamberlain Access Solutions\n00:15:26\tRemoteTe\tRemote Technologies Inc\n00:15:27\tBalboaIn\tBalboa Instruments\n00:15:28\tBeaconMe\tBeacon Medical Products LLC d.b.a. BeaconMedaes\n00:15:29\tN3\tN3 Corporation\n00:15:2A\tNokia\tNokia Corporation\n00:15:2B\tCisco\tCisco Systems, Inc\n00:15:2C\tCisco\tCisco Systems, Inc\n00:15:2D\tTenxNetw\tTenX Networks, LLC\n00:15:2E\tPacketho\tPacketHop, Inc.\n00:15:2F\tArrisGro\tARRIS Group, Inc.\n00:15:30\tDellEmc\tDell EMC\n00:15:31\tKocom\t\n00:15:32\tConsumer\tConsumer Technologies Group, LLC\n00:15:33\tNadam\tNadam.Co.,Ltd\n00:15:34\tABeltrón\tA Beltrónica-Companhia de Comunicações, Lda\n00:15:35\tOte\tOTE Spa\n00:15:36\tPowertec\tPowertech co.,Ltd\n00:15:37\tVentusNe\tVentus Networks\n00:15:38\tRfid\tRFID, Inc.\n00:15:39\tTechnodr\tTechnodrive srl\n00:15:3A\tShenzhen\tShenzhen Syscan Technology Co.,Ltd.\n00:15:3B\tEmhMeter\tEMH metering GmbH & Co. KG\n00:15:3C\tKprotech\tKprotech Co., Ltd.\n00:15:3D\tElimProd\tElim Product Co.\n00:15:3E\tQ-MaticS\tQ-Matic Sweden AB\n00:15:3F\tAlcatelA\tAlcatel Alenia Space Italia\n00:15:40\tNortelNe\tNortel Networks\n00:15:41\tStratali\tStrataLight Communications, Inc.\n00:15:42\tMicrohar\tMicrohard S.R.L.\n00:15:43\tAberdeen\tAberdeen Test Center\n00:15:44\tComSAT\tcoM.s.a.t. AG\n00:15:45\tSeecode\tSEECODE Co., Ltd.\n00:15:46\tItgWorld\tITG Worldwide Sdn Bhd\n00:15:47\tAizenSol\tAiZen Solutions Inc.\n00:15:48\tCubeTech\tCube Technologies\n00:15:49\tDixtalBi\tDixtal Biomedica Ind. Com. Ltda\n00:15:4A\tWanshihE\tWanshih Electronic Co., Ltd\n00:15:4B\tWondePro\tWonde Proud Technology Co., Ltd\n00:15:4C\tSaunders\tSaunders Electronics\n00:15:4D\tNetronom\tNetronome Systems, Inc.\n00:15:4E\tIec\t\n00:15:4F\tOneRfTec\tone RF Technology\n00:15:50\tNitsTech\tNits Technology Inc\n00:15:51\tRadiopul\tRadioPulse Inc.\n00:15:52\tWi-Gear\tWi-Gear Inc.\n00:15:53\tCytyc\tCytyc Corporation\n00:15:54\tAtalumWi\tAtalum Wireless S.A.\n00:15:55\tDfm\tDFM GmbH\n00:15:56\tSagemcom\tSagemcom Broadband SAS\n00:15:57\tOlivetti\t\n00:15:58\tFoxconn\t\n00:15:59\tSecurapl\tSecuraplane Technologies, Inc.\n00:15:5A\tDainippo\tDainippon Pharmaceutical Co., Ltd.\n00:15:5B\tSampo\tSampo Corporation\n00:15:5C\tDresserW\tDresser Wayne\n00:15:5D\tMicrosof\tMicrosoft Corporation\n00:15:5E\tMorganSt\tMorgan Stanley\n00:15:5F\tGreenpea\tGreenPeak Technologies\n00:15:60\tHewlettP\tHewlett Packard\n00:15:61\tJjplus\tJJPlus Corporation\n00:15:62\tCisco\tCisco Systems, Inc\n00:15:63\tCisco\tCisco Systems, Inc\n00:15:64\tBehringe\tBEHRINGER Spezielle Studiotechnik GmbH\n00:15:65\tXiamenYe\tXiamen Yealink Network Technology Co.,Ltd\n00:15:66\tA-FirstT\tA-First Technology Co., Ltd.\n00:15:67\tRadwin\tRADWIN Inc.\n00:15:68\tDilithiu\tDilithium Networks\n00:15:69\tPecoIi\tPECO II, Inc.\n00:15:6A\tDg2lTech\tDG2L Technologies Pvt. Ltd.\n00:15:6B\tPerfisan\tPerfisans Networks Corp.\n00:15:6C\tSaneSyst\tSane System Co., Ltd\n00:15:6D\tUbiquiti\tUbiquiti Networks Inc.\n00:15:6E\tAWCommun\tA. W. Communication Systems Ltd\n00:15:6F\tXiranetC\tXiranet Communications GmbH\n00:15:70\tZebraTec\tZebra Technologies Inc\n00:15:71\tNolan\tNolan Systems\n00:15:72\tRed-Lemo\tRed-Lemon\n00:15:73\tNewsoftT\tNewSoft  Technology Corporation\n00:15:74\tHorizonS\tHorizon Semiconductors Ltd.\n00:15:75\tNevisNet\tNevis Networks Inc.\n00:15:76\tLabitec-\tLABiTec - Labor Biomedical Technologies GmbH\n00:15:77\tAlliedTe\tAllied Telesis, Inc.\n00:15:78\tAudio/Vi\tAudio / Video Innovations\n00:15:79\tLunatone\tLunatone Industrielle Elektronik GmbH\n00:15:7A\tTelefinS\tTelefin S.p.A.\n00:15:7B\tLeuzeEle\tLeuze electronic GmbH + Co. KG\n00:15:7C\tDaveNetw\tDave Networks, Inc.\n00:15:7D\tPosdata\t\n00:15:7E\tWeidmüll\tWeidmüller Interface GmbH & Co. KG\n00:15:7F\tChuangIn\tChuanG International Holding CO.,LTD.\n00:15:80\tU-Way\tU-WAY CORPORATION\n00:15:81\tMakus\tMAKUS Inc.\n00:15:82\tPulseEig\tPulse Eight Limited\n00:15:83\tIvt\tIVT corporation\n00:15:84\tSchenckP\tSchenck Process GmbH\n00:15:85\tAonvisio\tAonvision Technolopy Corp.\n00:15:86\tXiamenOv\tXiamen Overseas Chinese Electronic Co., Ltd.\n00:15:87\tTakenaka\tTakenaka Seisakusho Co.,Ltd\n00:15:88\tSalutica\tSalutica Allied Solutions Sdn Bhd\n00:15:89\tD-MaxTec\tD-MAX Technology Co.,Ltd\n00:15:8A\tSurecomT\tSURECOM Technology Corp.\n00:15:8B\tParkAir\tPark Air Systems Ltd\n00:15:8C\tLiabAps\tLiab ApS\n00:15:8D\tJennic\tJennic Ltd\n00:15:8E\tPlustek\tPlustek.INC\n00:15:8F\tNttAdvan\tNTT Advanced Technology Corporation\n00:15:90\tHectroni\tHectronic GmbH\n00:15:91\tRlw\tRLW Inc.\n00:15:92\tFacomUkM\tFacom UK Ltd (Melksham)\n00:15:93\tU4eaTech\tU4EA Technologies Inc.\n00:15:94\tBixolon\tBixolon Co.,Ltd\n00:15:95\tQuesterT\tQuester Tangent Corporation\n00:15:96\tArrisGro\tARRIS Group, Inc.\n00:15:97\tAetaAudi\tAeta Audio Systems\n00:15:98\tKolektor\tKolektor group\n00:15:99\tSamsungE\tSamsung Electronics Co.,Ltd\n00:15:9A\tArrisGro\tARRIS Group, Inc.\n00:15:9B\tNortelNe\tNortel Networks\n00:15:9C\tB-KyungS\tB-KYUNG SYSTEM Co.,Ltd.\n00:15:9D\tTrippLit\tTripp Lite\n00:15:9E\tMadCatzI\tMad Catz Interactive Inc\n00:15:9F\tTerascal\tTerascala, Inc.\n00:15:A0\tNokiaDan\tNokia Danmark A/S\n00:15:A1\tEca-Sint\tECA-SINTERS\n00:15:A2\tArrisGro\tARRIS Group, Inc.\n00:15:A3\tArrisGro\tARRIS Group, Inc.\n00:15:A4\tArrisGro\tARRIS Group, Inc.\n00:15:A5\tDci\tDCI Co., Ltd.\n00:15:A6\tDigitalE\tDigital Electronics Products Ltd.\n00:15:A7\tRobatech\tRobatech AG\n00:15:A8\tArrisGro\tARRIS Group, Inc.\n00:15:A9\tKwangWoo\tKWANG WOO I&C CO.,LTD\n00:15:AA\tRextechn\tRextechnik International Co.,\n00:15:AB\tProSound\tPro Co Sound Inc\n00:15:AC\tCapelon\tCapelon AB\n00:15:AD\tAccedian\tAccedian Networks\n00:15:AE\tKyungIl\tkyung il\n00:15:AF\tAzurewav\tAzureWave Technology Inc.\n00:15:B0\tAutotele\tAutotelenet Co.,Ltd\n00:15:B1\tAmbient\tAmbient Corporation\n00:15:B2\tAdvanced\tAdvanced Industrial Computer, Inc.\n00:15:B3\tCaretech\tCaretech AB\n00:15:B4\tPolymapW\tPolymap  Wireless LLC\n00:15:B5\tCiNetwor\tCI Network Corp.\n00:15:B6\tShinmayw\tShinMaywa Industries, Ltd.\n00:15:B7\tToshiba\t\n00:15:B8\tTahoe\t\n00:15:B9\tSamsungE\tSamsung Electronics Co.,Ltd\n00:15:BA\tIba\tiba AG\n00:15:BB\tSmaSolar\tSMA Solar Technology AG\n00:15:BC\tDevelco\t\n00:15:BD\tGroup4Te\tGroup 4 Technology Ltd\n00:15:BE\tIqua\tIqua Ltd.\n00:15:BF\tTechnico\ttechnicob\n00:15:C0\tDigitalT\tDigital Telemedia Co.,Ltd.\n00:15:C1\tSonyInte\tSony Interactive Entertainment Inc.\n00:15:C2\t3mGerman\t3M Germany\n00:15:C3\tRufTelem\tRuf Telematik AG\n00:15:C4\tFlovel\tFlovel Co., Ltd.\n00:15:C5\tDell\tDell Inc.\n00:15:C6\tCisco\tCisco Systems, Inc\n00:15:C7\tCisco\tCisco Systems, Inc\n00:15:C8\tFlexipan\tFlexiPanel Ltd\n00:15:C9\tGumstix\tGumstix, Inc\n00:15:CA\tTerareco\tTeraRecon, Inc.\n00:15:CB\tSurfComm\tSurf Communication Solutions Ltd.\n00:15:CC\tUquest\tUquest, Ltd.\n00:15:CD\tExartech\tExartech International Corp.\n00:15:CE\tArrisGro\tARRIS Group, Inc.\n00:15:CF\tArrisGro\tARRIS Group, Inc.\n00:15:D0\tArrisGro\tARRIS Group, Inc.\n00:15:D1\tArrisGro\tARRIS Group, Inc.\n00:15:D2\tXantech\tXantech Corporation\n00:15:D3\tPantech&\tPantech&Curitel Communications, Inc.\n00:15:D4\tEmitor\tEmitor AB\n00:15:D5\tNicevt\t\n00:15:D6\tOslinkSp\tOSLiNK Sp. z o.o.\n00:15:D7\tReti\tReti Corporation\n00:15:D8\tInterlin\tInterlink Electronics\n00:15:D9\tPkcElect\tPKC Electronics Oy\n00:15:DA\tIritelAD\tIritel A.D.\n00:15:DB\tCanesta\tCanesta Inc.\n00:15:DC\tKt&C\tKT&C Co., Ltd.\n00:15:DD\tIpContro\tIP Control Systems Ltd.\n00:15:DE\tNokiaDan\tNokia Danmark A/S\n00:15:DF\tClivetSP\tClivet S.p.A.\n00:15:E0\tEricsson\t\n00:15:E1\tPicochip\tPicochip Ltd\n00:15:E2\tDrIngHer\tDr.Ing. Herbert Knauer GmbH\n00:15:E3\tDreamTec\tDream Technologies Corporation\n00:15:E4\tZimmerEl\tZimmer Elektromedizin\n00:15:E5\tCheertek\tCheertek Inc.\n00:15:E6\tMobileTe\tMOBILE TECHNIKA Inc.\n00:15:E7\tQuantecT\tQuantec Tontechnik\n00:15:E8\tNortelNe\tNortel Networks\n00:15:E9\tD-Link\tD-Link Corporation\n00:15:EA\tTellumat\tTellumat (Pty) Ltd\n00:15:EB\tZte\tzte corporation\n00:15:EC\tBocaDevi\tBoca Devices LLC\n00:15:ED\tFulcrumM\tFulcrum Microsystems, Inc.\n00:15:EE\tOmnexCon\tOmnex Control Systems\n00:15:EF\tNecTokin\tNEC TOKIN Corporation\n00:15:F0\tEgoBv\tEgo Bv\n00:15:F1\tKylinkCo\tKYLINK Communications Corp.\n00:15:F2\tAsustekC\tASUSTek COMPUTER INC.\n00:15:F3\tPeltor\tPeltor Ab\n00:15:F4\tEventide\t\n00:15:F5\tSustaina\tSustainable Energy Systems\n00:15:F6\tScienceA\tScience And Engineering Services, Inc.\n00:15:F7\tWintecro\tWintecronics Ltd.\n00:15:F8\tKingtron\tKingtronics Industrial Co. Ltd.\n00:15:F9\tCisco\tCisco Systems, Inc\n00:15:FA\tCisco\tCisco Systems, Inc\n00:15:FB\tSetexSch\tsetex schermuly textile computer gmbh\n00:15:FC\tLittelfu\tLittelfuse Startco\n00:15:FD\tComplete\tComplete Media Systems\n00:15:FE\tSchillin\tSchilling Robotics Llc\n00:15:FF\tNovatelW\tNovatel Wireless Solutions, Inc.\n00:16:00\tCellebri\tCelleBrite Mobile Synchronization\n00:16:01\tBuffalo\tBuffalo.Inc\n00:16:02\tCeyonTec\tCeyon Technology Co.,Ltd.\n00:16:03\tCoolksky\tCOOLKSKY Co., LTD\n00:16:04\tSigpro\t\n00:16:05\tYorkvill\tYorkville Sound Inc.\n00:16:06\tIdealInd\tIdeal Industries\n00:16:07\tCurvesIn\tCurves International Inc.\n00:16:08\tSequansC\tSequans Communications\n00:16:09\tUnitechE\tUnitech electronics co., ltd.\n00:16:0A\tSweexEur\tSWEEX Europe BV\n00:16:0B\tTvworksL\tTVWorks LLC\n00:16:0C\tLplDevel\tLpl Development S.A. De C.V\n00:16:0D\tBeHere\tBe Here Corporation\n00:16:0E\tOpticaTe\tOptica Technologies Inc.\n00:16:0F\tBadgerMe\tBadger Meter Inc\n00:16:10\tCarinaTe\tCarina Technology\n00:16:11\tAlteconS\tAltecon Srl\n00:16:12\tOtsukaEl\tOtsuka Electronics Co., Ltd.\n00:16:13\tLibrestr\tLibreStream Technologies Inc.\n00:16:14\tPicoseco\tPicosecond Pulse Labs\n00:16:15\tNittan\tNittan Company, Limited\n00:16:16\tBrowanCo\tBrowan Communication Inc.\n00:16:17\tMsi\t\n00:16:18\tHivion\tHIVION Co., Ltd.\n00:16:19\tLancelan\tLancelan Technologies S.L.\n00:16:1A\tDametric\tDametric AB\n00:16:1B\tMicronet\tMicronet Corporation\n00:16:1C\tE:Cue\t\n00:16:1D\tInnovati\tInnovative Wireless Technologies, Inc.\n00:16:1E\tWoojinne\tWoojinnet\n00:16:1F\tSunwavet\tSUNWAVETEC Co., Ltd.\n00:16:20\tSonyMobi\tSony Mobile Communications Inc\n00:16:21\tColorado\tColorado Vnet\n00:16:22\tBbh\tBbh Systems Gmbh\n00:16:23\tInterval\tInterval Media\n00:16:24\tTeneros\tTeneros, Inc.\n00:16:25\tImpinj\tImpinj, Inc.\n00:16:26\tArrisGro\tARRIS Group, Inc.\n00:16:27\tEmbedded\tembedded-logic DESIGN AND MORE GmbH\n00:16:28\tMagicard\tMagicard Ltd\n00:16:29\tNivus\tNivus GmbH\n00:16:2A\tAntikCom\tAntik computers & communications s.r.o.\n00:16:2B\tTogamiEl\tTogami Electric Mfg.co.,Ltd.\n00:16:2C\tXanboo\t\n00:16:2D\tStnet\tSTNet Co., Ltd.\n00:16:2E\tSpaceShu\tSpace Shuttle Hi-Tech Co., Ltd.\n00:16:2F\tGeutebrü\tGeutebrück GmbH\n00:16:30\tVativTec\tVativ Technologies\n00:16:31\tXteam\t\n00:16:32\tSamsungE\tSamsung Electronics Co.,Ltd\n00:16:33\tOxfordDi\tOxford Diagnostics Ltd.\n00:16:34\tMathtech\tMathtech, Inc.\n00:16:35\tHewlettP\tHewlett Packard\n00:16:36\tQuantaCo\tQuanta Computer Inc.\n00:16:37\tCitel\tCITEL SpA\n00:16:38\tTecom\tTECOM Co., Ltd.\n00:16:39\tUbiquam\tUbiquam Co., Ltd.\n00:16:3A\tYvesTech\tYves Technology Co., Ltd.\n00:16:3B\tVertexrs\tVertexRSI/General Dynamics\n00:16:3C\tReboxBV\tRebox B.V.\n00:16:3D\tTsinghua\tTsinghua Tongfang Legend Silicon Tech. Co., Ltd.\n00:16:3E\tXensourc\tXensource, Inc.\n00:16:3F\tCrete\tCReTE SYSTEMS Inc.\n00:16:40\tAsmobile\tAsmobile Communication Inc.\n00:16:41\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\n00:16:42\tPangolin\t\n00:16:43\tSunhillo\tSunhillo Corporation\n00:16:44\tLite-OnT\tLITE-ON Technology Corp.\n00:16:45\tPowerDis\tPower Distribution, Inc.\n00:16:46\tCisco\tCisco Systems, Inc\n00:16:47\tCisco\tCisco Systems, Inc\n00:16:48\tSsd\tSSD Company Limited\n00:16:49\tSetone\tSetOne GmbH\n00:16:4A\tVibratio\tVibration Technology Limited\n00:16:4B\tQuorionD\tQuorion Data Systems GmbH\n00:16:4C\tPlanetIn\tPLANET INT Co., Ltd\n00:16:4D\tAlcatel-\tAlcatel-Lucent IPD\n00:16:4E\tNokiaDan\tNokia Danmark A/S\n00:16:4F\tWorldEth\tWorld Ethnic Broadcastin Inc.\n00:16:50\tKratosEp\tKratos EPD\n00:16:51\tExeo\tExeo Systems\n00:16:52\tHoatechT\tHoatech Technologies, Inc.\n00:16:53\tLegoSyst\tLEGO System A/S IE Electronics Division\n00:16:54\tFlex-PIn\tFlex-P Industries Sdn. Bhd.\n00:16:55\tFuhoTech\tFUHO TECHNOLOGY Co., LTD\n00:16:56\tNintendo\tNintendo Co., Ltd.\n00:16:57\tAegate\tAegate Ltd\n00:16:58\tFusionte\tFusiontech Technologies Inc.\n00:16:59\tZMPRadwa\tZ.M.P. Radwag\n00:16:5A\tHarmanSp\tHarman Specialty Group\n00:16:5B\tGripAudi\tGrip Audio\n00:16:5C\tTrackflo\tTrackflow Ltd.\n00:16:5D\tAirdefen\tAirDefense, Inc.\n00:16:5E\tPrecisio\tPrecision I/O\n00:16:5F\tFairmoun\tFairmount Automation\n00:16:60\tNortelNe\tNortel Networks\n00:16:61\tNovatium\tNovatium Solutions (P) Ltd\n00:16:62\tLiyuhTec\tLiyuh Technology Ltd.\n00:16:63\tKbtMobil\tKBT Mobile\n00:16:64\tProd-El\tProd-El SpA\n00:16:65\tCellonFr\tCellon France\n00:16:66\tQuantier\tQuantier Communication Inc.\n00:16:67\tA-TecSub\tA-TEC Subsystem INC.\n00:16:68\tEishinEl\tEishin Electronics\n00:16:69\tMrvCommu\tMRV Communication (Networks) LTD\n00:16:6A\tTps\t\n00:16:6B\tSamsungE\tSamsung Electronics Co.,Ltd\n00:16:6C\tSamsungE\tSamsung Electronics Co.,Ltd\n00:16:6D\tYulongCo\tYulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd\n00:16:6E\tArbitron\tArbitron Inc.\n00:16:6F\tIntelCor\tIntel Corporate\n00:16:70\tSknet\tSKNET Corporation\n00:16:71\tSymphoxI\tSymphox Information Co.\n00:16:72\tZenwayEn\tZenway enterprise ltd\n00:16:73\tBury\tBury GmbH & Co. KG\n00:16:74\tEurocbPh\tEuroCB (Phils.), Inc.\n00:16:75\tArrisGro\tARRIS Group, Inc.\n00:16:76\tIntelCor\tIntel Corporate\n00:16:77\tBihl+Wie\tBihl + Wiedemann GmbH\n00:16:78\tShenzhen\tShenzhen Baoan Gaoke Electronics Co., Ltd\n00:16:79\tEonCommu\teOn Communications\n00:16:7A\tSkyworth\tSkyworth Overseas Development Ltd.\n00:16:7B\tHaver&Bo\tHaver&Boecker\n00:16:7C\tIrexTech\tiRex Technologies BV\n00:16:7D\tSky-Line\tSky-Line Information Co., Ltd.\n00:16:7E\tDiboss\tDiboss.Co.,Ltd\n00:16:7F\tBluebird\tBluebird Soft Inc.\n00:16:80\tBallyGam\tBally Gaming + Systems\n00:16:81\tVectorIn\tVector Informatik GmbH\n00:16:82\tProDex\tPro Dex, Inc\n00:16:83\tWebioInt\tWEBIO International Co.,.Ltd.\n00:16:84\tDonjin\tDonjin Co.,Ltd.\n00:16:85\tElisaOyj\tElisa Oyj\n00:16:86\tKarlStor\tKarl Storz Imaging\n00:16:87\tChubbCsc\tChubb CSC-Vendor AP\n00:16:88\tServeren\tServerEngines LLC\n00:16:89\tPilkorEl\tPilkor Electronics Co., Ltd\n00:16:8A\tId-Confi\tid-Confirm Inc\n00:16:8B\tParalan\tParalan Corporation\n00:16:8C\tDslPartn\tDSL Partner AS\n00:16:8D\tKorwin\tKORWIN CO., Ltd.\n00:16:8E\tVimicro\tVimicro corporation\n00:16:8F\tGnNetcom\tGN Netcom A/S\n00:16:90\tJ-TekInc\tJ-TEK INCORPORATION\n00:16:91\tMoser-Ba\tMoser-Baer AG\n00:16:92\tScientif\tScientific-Atlanta, Inc.\n00:16:93\tPowerlin\tPowerLink Technology Inc.\n00:16:94\tSennheis\tSennheiser Communications A/S\n00:16:95\tAvcTechn\tAVC Technology (International) Limited\n00:16:96\tQdiTechn\tQDI Technology (H.K.) Limited\n00:16:97\tNec\tNEC Corporation\n00:16:98\tT&AMobil\tT&A Mobile Phones\n00:16:99\tTonicDvb\tTonic DVB Marketing Ltd\n00:16:9A\tQuadrics\tQuadrics Ltd\n00:16:9B\tAlstomTr\tAlstom Transport\n00:16:9C\tCisco\tCisco Systems, Inc\n00:16:9D\tCisco\tCisco Systems, Inc\n00:16:9E\tTvOne\tTV One Ltd\n00:16:9F\tVimtronE\tVimtron Electronics Co., Ltd.\n00:16:A0\tAuto-Mas\tAuto-Maskin\n00:16:A1\t3leafNet\t3Leaf Networks\n00:16:A2\tCentrali\tCentraLite Systems, Inc.\n00:16:A3\tIngeteam\tIngeteam Transmission&Distribution, S.A.\n00:16:A4\tEzurio\tEzurio Ltd\n00:16:A5\tTandberg\tTandberg Storage ASA\n00:16:A6\tDovadoFz\tDovado FZ-LLC\n00:16:A7\tAwetaG&P\tAWETA G&P\n00:16:A8\tCwt\tCwt Co., Ltd.\n00:16:A9\t2ei\t\n00:16:AA\tKeiCommu\tKei Communication Technology Inc.\n00:16:AB\tDansenso\tDansensor A/S\n00:16:AC\tTohoTech\tToho Technology Corp.\n00:16:AD\tBt-Links\tBT-Links Company Limited\n00:16:AE\tInventel\t\n00:16:AF\tShenzhen\tShenzhen Union Networks Equipment Co.,Ltd.\n00:16:B0\tVk\tVK Corporation\n00:16:B1\tKbs\t\n00:16:B2\tDrivecam\tDriveCam Inc\n00:16:B3\tPhotonic\tPhotonicbridges (China) Co., Ltd.\n00:16:B4\tPrivate\t\n00:16:B5\tArrisGro\tARRIS Group, Inc.\n00:16:B6\tCisco-Li\tCisco-Linksys, LLC\n00:16:B7\tSeoulCom\tSeoul Commtech\n00:16:B8\tSonyMobi\tSony Mobile Communications Inc\n00:16:B9\tProcurve\tProCurve Networking by HP\n00:16:BA\tWeathern\tWeathernews Inc.\n00:16:BB\tLaw-Chai\tLaw-Chain Computer Technology Co Ltd\n00:16:BC\tNokiaDan\tNokia Danmark A/S\n00:16:BD\tAtiIndus\tATI Industrial Automation\n00:16:BE\tInfranet\tINFRANET, Inc.\n00:16:BF\tPalodexG\tPaloDEx Group Oy\n00:16:C0\tSemtech\tSemtech Corporation\n00:16:C1\tEleksen\tEleksen Ltd\n00:16:C2\tAvtec\tAvtec Systems Inc\n00:16:C3\tBa\tBA Systems Inc\n00:16:C4\tSirfTech\tSiRF Technology, Inc.\n00:16:C5\tShenzhen\tShenzhen Xing Feng Industry Co.,Ltd\n00:16:C6\tNorthAtl\tNorth Atlantic Industries\n00:16:C7\tCisco\tCisco Systems, Inc\n00:16:C8\tCisco\tCisco Systems, Inc\n00:16:C9\tNatSeatt\tNAT Seattle, Inc.\n00:16:CA\tNortelNe\tNortel Networks\n00:16:CB\tApple\tApple, Inc.\n00:16:CC\tXcuteMob\tXcute Mobile Corp.\n00:16:CD\tHijiHigh\tHIJI HIGH-TECH CO., LTD.\n00:16:CE\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:16:CF\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:16:D0\tAtechEle\tATech elektronika d.o.o.\n00:16:D1\tZatAS\tZAT a.s.\n00:16:D2\tCaspian\t\n00:16:D3\tWistron\tWistron Corporation\n00:16:D4\tCompalCo\tCompal Communications, Inc.\n00:16:D5\tSynccom\tSynccom Co., Ltd\n00:16:D6\tTdaTechP\tTDA Tech Pty Ltd\n00:16:D7\tSunways\tSunways AG\n00:16:D8\tSenea\tSenea AB\n00:16:D9\tNingboBi\tNingbo Bird Co.,Ltd.\n00:16:DA\tFutronic\tFutronic Technology Co. Ltd.\n00:16:DB\tSamsungE\tSamsung Electronics Co.,Ltd\n00:16:DC\tArchos\t\n00:16:DD\tGigabeam\tGigabeam Corporation\n00:16:DE\tFast\tFAST Inc\n00:16:DF\tLundinov\tLundinova AB\n00:16:E0\t3com\t3Com Ltd\n00:16:E1\tSilicons\tSiliconStor, Inc.\n00:16:E2\tAmerican\tAmerican Fibertek, Inc.\n00:16:E3\tAskeyCom\tAskey Computer Corp\n00:16:E4\tVanguard\tVanguard Security Engineering Corp.\n00:16:E5\tFordleyD\tFordley Development Limited\n00:16:E6\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\n00:16:E7\tDynamixP\tDynamix Promotions Limited\n00:16:E8\tSigmaDes\tSigma Designs, Inc.\n00:16:E9\tTibaMedi\tTiba Medical Inc\n00:16:EA\tIntelCor\tIntel Corporate\n00:16:EB\tIntelCor\tIntel Corporate\n00:16:EC\tElitegro\tElitegroup Computer Systems Co.,Ltd.\n00:16:ED\tUtility\tUtility, Inc\n00:16:EE\tRoyaldig\tRoyaldigital Inc.\n00:16:EF\tKokoFitn\tKoko Fitness, Inc.\n00:16:F0\tDell\t\n00:16:F1\tOmnisens\tOmniSense, LLC\n00:16:F2\tDmobileS\tDmobile System Co., Ltd.\n00:16:F3\tCastInfo\tCAST Information Co., Ltd\n00:16:F4\tEidicom\tEidicom Co., Ltd.\n00:16:F5\tDalianGo\tDalian Golden Hualu Digital Technology Co.,Ltd\n00:16:F6\tVideoPro\tVideo Products Group\n00:16:F7\tL-3Commu\tL-3 Communications, Aviation Recorders\n00:16:F8\tAviqtech\tAviqtech Technology Co., Ltd.\n00:16:F9\tCetrtaPo\tCETRTA POT, d.o.o., Kranj\n00:16:FA\tEciTelec\tECI Telecom Ltd.\n00:16:FB\tShenzhen\tShenzhen Mtc Co Ltd\n00:16:FC\tTohken\tTohken Co.,Ltd.\n00:16:FD\tJatyElec\tJaty Electronics\n00:16:FE\tAlpsElec\tAlps Electric Co.,Ltd.\n00:16:FF\tWaminOpt\tWamin Optocomm Mfg Corp\n00:17:00\tArrisGro\tARRIS Group, Inc.\n00:17:01\tKde\tKDE, Inc.\n00:17:02\tOsungMid\tOsung Midicom Co., Ltd\n00:17:03\tMosdanIn\tMOSDAN Internation Co.,Ltd\n00:17:04\tShincoEl\tShinco Electronics Group Co.,Ltd\n00:17:05\tMethodeE\tMethode Electronics\n00:17:06\tTechfait\tTechfaithwireless Communication Technology Limited.\n00:17:07\tIngrid\tInGrid, Inc\n00:17:08\tHewlettP\tHewlett Packard\n00:17:09\tExaltCom\tExalt Communications\n00:17:0A\tInewDigi\tInew Digital Company\n00:17:0B\tContela\tContela, Inc.\n00:17:0C\tTwigCom\tTwig Com Ltd.\n00:17:0D\tDustNetw\tDust Networks Inc.\n00:17:0E\tCisco\tCisco Systems, Inc\n00:17:0F\tCisco\tCisco Systems, Inc\n00:17:10\tCasa\tCasa Systems Inc.\n00:17:11\tGeHealth\tGE Healthcare Bio-Sciences AB\n00:17:12\tIscoInte\tISCO International\n00:17:13\tTigerNet\tTiger NetCom\n00:17:14\tBrContro\tBR Controls Nederland bv\n00:17:15\tQstik\t\n00:17:16\tQnoTechn\tQno Technology Inc.\n00:17:17\tLeicaGeo\tLeica Geosystems AG\n00:17:18\tVanscoEl\tVansco Electronics Oy\n00:17:19\tAudiocod\tAudiocodes USA, Inc\n00:17:1A\tWinegard\tWinegard Company\n00:17:1B\tInnovati\tInnovation Lab Corp.\n00:17:1C\tNtMicros\tNT MicroSystems, Inc.\n00:17:1D\tDigit\t\n00:17:1E\tTheoBenn\tTheo Benning GmbH & Co. KG\n00:17:1F\tImv\tIMV Corporation\n00:17:20\tImageSen\tImage Sensing Systems, Inc.\n00:17:21\tFitreSPA\tFITRE S.p.A.\n00:17:22\tHanazede\tHanazeder Electronic GmbH\n00:17:23\tSummitDa\tSummit Data Communications\n00:17:24\tStuderPr\tStuder Professional Audio GmbH\n00:17:25\tLiquidCo\tLiquid Computing\n00:17:26\tM2cElect\tm2c Electronic Technology Ltd.\n00:17:27\tThermoRa\tThermo Ramsey Italia s.r.l.\n00:17:28\tSelexCom\tSelex Communications\n00:17:29\tUbicod\tUbicod Co.LTD\n00:17:2A\tProwareT\tProware Technology Corp.(By Unifosa)\n00:17:2B\tGlobalTe\tGlobal Technologies Inc.\n00:17:2C\tTaejinIn\tTaejin Infotech\n00:17:2D\tAxcenPho\tAxcen Photonics Corporation\n00:17:2E\tFxc\tFXC Inc.\n00:17:2F\tNeulion\tNeuLion Incorporated\n00:17:30\tAutomati\tAutomation Electronics\n00:17:31\tAsustekC\tASUSTek COMPUTER INC.\n00:17:32\tScience-\tScience-Technical Center RISSA\n00:17:33\tSfr\t\n00:17:34\tAdcTelec\tADC Telecommunications\n00:17:35\tIntelWir\tIntel Wireless Network Group\n00:17:36\tIitron\tiiTron Inc.\n00:17:37\tIndustri\tIndustrie Dial Face S.p.A.\n00:17:38\tInternat\tInternational Business Machines\n00:17:39\tBrightHe\tBright Headphone Electronics Company\n00:17:3A\tCloudast\tCloudastructure Inc\n00:17:3B\tCisco\tCisco Systems, Inc\n00:17:3C\tExtremeE\tExtreme Engineering Solutions\n00:17:3D\tNeology\t\n00:17:3E\tLeucotro\tLeucotronEquipamentos Ltda.\n00:17:3F\tBelkinIn\tBelkin International Inc.\n00:17:40\tBluberiG\tBluberi Gaming Technologies Inc\n00:17:41\tDefidev\t\n00:17:42\tFujitsu\tFujitsu Limited\n00:17:43\tDeckSrl\tDeck Srl\n00:17:44\tAraneo\tAraneo Ltd.\n00:17:45\tInnotz\tINNOTZ CO., Ltd\n00:17:46\tFreedom9\tFreedom9 Inc.\n00:17:47\tTrimble\t\n00:17:48\tNeokoros\tNeokoros Brasil Ltda\n00:17:49\tHyundaeY\tHYUNDAE YONG-O-SA CO.,LTD\n00:17:4A\tSocomec\t\n00:17:4B\tNokiaDan\tNokia Danmark A/S\n00:17:4C\tMillipor\tMillipore\n00:17:4D\tDynamicN\tDynamic Network Factory, Inc.\n00:17:4E\tParama-T\tParama-tech Co.,Ltd.\n00:17:4F\tIcatch\tiCatch Inc.\n00:17:50\tGsiGroup\tGSI Group, MicroE Systems\n00:17:51\tOnline\tOnline Corporation\n00:17:52\tDags\tDAGS, Inc\n00:17:53\tNforeTec\tnFore Technology Inc.\n00:17:54\tArkinoHi\tArkino HiTOP Corporation Limited\n00:17:55\tGeSecuri\tGE Security\n00:17:56\tVinciLab\tVinci Labs Oy\n00:17:57\tRixTechn\tRix Technology Limited\n00:17:58\tThruvisi\tThruVision Ltd\n00:17:59\tCisco\tCisco Systems, Inc\n00:17:5A\tCisco\tCisco Systems, Inc\n00:17:5B\tAcsSolut\tACS Solutions Switzerland Ltd.\n00:17:5C\tSharp\tSharp Corporation\n00:17:5D\tDongseoS\tDongseo system.\n00:17:5E\tZed-3\t\n00:17:5F\tXenolink\tXENOLINK Communications Co., Ltd.\n00:17:60\tNaitoDen\tNaito Densei Machida MFG.CO.,LTD\n00:17:61\tPrivate\t\n00:17:62\tSolarTec\tSolar Technology, Inc.\n00:17:63\tEssentia\tEssentia S.p.A.\n00:17:64\tAtmedia\tATMedia GmbH\n00:17:65\tNortelNe\tNortel Networks\n00:17:66\tAccenseT\tAccense Technology, Inc.\n00:17:67\tEarforce\tEarforce AS\n00:17:68\tZinwave\tZinwave Ltd\n00:17:69\tCymphoni\tCymphonix Corp\n00:17:6A\tAvagoTec\tAvago Technologies\n00:17:6B\tKiyon\tKiyon, Inc.\n00:17:6C\tPivot3\tPivot3, Inc.\n00:17:6D\tCore\tCore Corporation\n00:17:6E\tDucatiSi\tDucati Sistemi\n00:17:6F\tPaxCompu\tPAX Computer Technology(Shenzhen) Ltd.\n00:17:70\tArtiIndu\tArti Industrial Electronics Ltd.\n00:17:71\tApdCommu\tAPD Communications Ltd\n00:17:72\tAstroStr\tASTRO Strobel Kommunikationssysteme GmbH\n00:17:73\tLaketune\tLaketune Technologies Co. Ltd\n00:17:74\tElesta\tElesta GmbH\n00:17:75\tTteGerma\tTTE Germany GmbH\n00:17:76\tMesoScal\tMeso Scale Diagnostics, LLC\n00:17:77\tObsidian\tObsidian Research Corporation\n00:17:78\tCentralM\tCentral Music Co.\n00:17:79\tQuicktel\t\n00:17:7A\tAssaAblo\tAssa Abloy Ab\n00:17:7B\tAzaleaNe\tAzalea Networks inc\n00:17:7C\tSmartlin\tSmartlink Network Systems Limited\n00:17:7D\tIdtTechn\tIDT Technology Limited\n00:17:7E\tMeshcomT\tMeshcom Technologies Inc.\n00:17:7F\tWorldsma\tWorldsmart Retech\n00:17:80\tAppliedB\tApplied Biosystems B.V.\n00:17:81\tGreyston\tGreystone Data System, Inc.\n00:17:82\tLobenn\tLoBenn Inc.\n00:17:83\tTexasIns\tTexas Instruments\n00:17:84\tArrisGro\tARRIS Group, Inc.\n00:17:85\tSparrEle\tSparr Electronics Ltd\n00:17:86\tWisembed\t\n00:17:87\tBrotherB\tBrother, Brother & Sons ApS\n00:17:88\tPhilipsL\tPhilips Lighting BV\n00:17:89\tZenitron\tZenitron Corporation\n00:17:8A\tDartsTec\tDarts Technologies Corp.\n00:17:8B\tTeledyne\tTeledyne Technologies Incorporated\n00:17:8C\tIndepend\tIndependent Witness, Inc\n00:17:8D\tCheckpoi\tCheckpoint Systems, Inc.\n00:17:8E\tGunneboC\tGunnebo Cash Automation AB\n00:17:8F\tNingboYi\tNingbo Yidong Electronic Co.,Ltd.\n00:17:90\tHyundaiD\tHYUNDAI DIGITECH Co, Ltd.\n00:17:91\tLintech\tLinTech GmbH\n00:17:92\tFalcomWi\tFalcom Wireless Comunications Gmbh\n00:17:93\tTigi\tTigi Corporation\n00:17:94\tCisco\tCisco Systems, Inc\n00:17:95\tCisco\tCisco Systems, Inc\n00:17:96\tRittmeye\tRittmeyer AG\n00:17:97\tTelsyEle\tTelsy Elettronica S.p.A.\n00:17:98\tAzonicTe\tAzonic Technology Co., LTD\n00:17:99\tSmartire\tSmarTire Systems Inc.\n00:17:9A\tD-Link\tD-Link Corporation\n00:17:9B\tChantSin\tChant Sincere Co.,Ltd\n00:17:9C\tDepragSc\tDEPRAG SCHULZ GMBH u. CO.\n00:17:9D\tKelman\tKelman Limited\n00:17:9E\tSirit\tSirit Inc\n00:17:9F\tApricorn\t\n00:17:A0\tRobotech\tRoboTech srl\n00:17:A1\t3soft\t3soft inc.\n00:17:A2\tCamrivox\tCamrivox Ltd.\n00:17:A3\tMixSRL\tMIX s.r.l.\n00:17:A4\tHewlettP\tHewlett Packard\n00:17:A5\tRalinkTe\tRalink Technology Corp\n00:17:A6\tYosinEle\tYosin Electronics Co., Ltd.\n00:17:A7\tMobileCo\tMobile Computing Promotion Consortium\n00:17:A8\tEdm\tEDM Corporation\n00:17:A9\tSentivis\tSentivision\n00:17:AA\tElab-Exp\telab-experience inc.\n00:17:AB\tNintendo\tNintendo Co., Ltd.\n00:17:AC\tONeilPro\tO'Neil Product Development Inc.\n00:17:AD\tAcenet\tAceNet Corporation\n00:17:AE\tGai-Tron\tGAI-Tronics\n00:17:AF\tEnermet\t\n00:17:B0\tNokiaDan\tNokia Danmark A/S\n00:17:B1\tAcistMed\tACIST Medical Systems, Inc.\n00:17:B2\tSkTelesy\tSK Telesys\n00:17:B3\tAftekInf\tAftek Infosys Limited\n00:17:B4\tRemoteSe\tRemote Security Systems, LLC\n00:17:B5\tPeerless\tPeerless Systems Corporation\n00:17:B6\tAquantia\tAquantia Corporation\n00:17:B7\tTonzeTec\tTonze Technology Co.\n00:17:B8\tNovatron\tNovatron Co., Ltd.\n00:17:B9\tGambroLu\tGambro Lundia AB\n00:17:BA\tSedo\tSedo Co., Ltd.\n00:17:BB\tSyrinxIn\tSyrinx Industrial Electronics\n00:17:BC\tTouchtun\tTouchtunes Music Corporation\n00:17:BD\tTibetsys\tTibetsystem\n00:17:BE\tTratecTe\tTratec Telecom B.V.\n00:17:BF\tCoherent\tCoherent Research Limited\n00:17:C0\tPuretech\tPureTech Systems, Inc.\n00:17:C1\tCmPrecis\tCM Precision Technology LTD.\n00:17:C2\tAdbBroad\tADB Broadband Italia\n00:17:C3\tKtfTechn\tKTF Technologies Inc.\n00:17:C4\tQuantaMi\tQuanta Microsystems, INC.\n00:17:C5\tSonicwal\tSonicWALL\n00:17:C6\tCrossMat\tCross Match Technologies Inc\n00:17:C7\tMaraCons\tMARA Systems Consulting AB\n00:17:C8\tKyoceraD\tKYOCERA Display Corporation\n00:17:C9\tSamsungE\tSamsung Electronics Co.,Ltd\n00:17:CA\tQisda\tQisda Corporation\n00:17:CB\tJuniperN\tJuniper Networks\n00:17:CC\tAlcatel-\tAlcatel-Lucent\n00:17:CD\tCecWirel\tCEC Wireless R&D Ltd.\n00:17:CE\tScreenSe\tScreen Service Spa\n00:17:CF\tImca-Gmb\tiMCA-GmbH\n00:17:D0\tOpticomC\tOpticom Communications, LLC\n00:17:D1\tNortelNe\tNortel Networks\n00:17:D2\tThinlinx\tThinlinx Pty Ltd\n00:17:D3\tEtymotic\tEtymotic Research, Inc.\n00:17:D4\tMonsoonM\tMonsoon Multimedia, Inc\n00:17:D5\tSamsungE\tSamsung Electronics Co.,Ltd\n00:17:D6\tBluechip\tBluechips Microhouse Co.,Ltd.\n00:17:D7\tIonGeoph\tION Geophysical Corporation Inc.\n00:17:D8\tMagnumSe\tMagnum Semiconductor, Inc.\n00:17:D9\tAai\tAAI Corporation\n00:17:DA\tSpansLog\tSpans Logic\n00:17:DB\tCankoTec\tCanko Technologies Inc.\n00:17:DC\tDaemyung\tDAEMYUNG ZERO1\n00:17:DD\tClipsalA\tClipsal Australia\n00:17:DE\tAdvantag\tAdvantage Six Ltd\n00:17:DF\tCisco\tCisco Systems, Inc\n00:17:E0\tCisco\tCisco Systems, Inc\n00:17:E1\tDacosTec\tDACOS Technologies Co., Ltd.\n00:17:E2\tArrisGro\tARRIS Group, Inc.\n00:17:E3\tTexasIns\tTexas Instruments\n00:17:E4\tTexasIns\tTexas Instruments\n00:17:E5\tTexasIns\tTexas Instruments\n00:17:E6\tTexasIns\tTexas Instruments\n00:17:E7\tTexasIns\tTexas Instruments\n00:17:E8\tTexasIns\tTexas Instruments\n00:17:E9\tTexasIns\tTexas Instruments\n00:17:EA\tTexasIns\tTexas Instruments\n00:17:EB\tTexasIns\tTexas Instruments\n00:17:EC\tTexasIns\tTexas Instruments\n00:17:ED\tWoojooit\tWooJooIT Ltd.\n00:17:EE\tArrisGro\tARRIS Group, Inc.\n00:17:EF\tIbm\tIBM Corp\n00:17:F0\tSzcomBro\tSZCOM Broadband Network Technology Co.,Ltd\n00:17:F1\tRenuElec\tRenu Electronics Pvt Ltd\n00:17:F2\tApple\tApple, Inc.\n00:17:F3\tHarris\tHarris Corporation\n00:17:F4\tZeronAll\tZeron Alliance\n00:17:F5\tLigNeopt\tLig Neoptek\n00:17:F6\tPyramidM\tPyramid Meriden Inc.\n00:17:F7\tCemSolut\tCEM Solutions Pvt Ltd\n00:17:F8\tMotechIn\tMotech Industries Inc.\n00:17:F9\tForcomSp\tForcom Sp. z o.o.\n00:17:FA\tMicrosof\tMicrosoft Corporation\n00:17:FB\tFa\t\n00:17:FC\tSuprema\tSuprema Inc.\n00:17:FD\tAmuletHo\tAmulet Hotkey\n00:17:FE\tTalosSys\tTalos System Inc.\n00:17:FF\tPlayline\tPLAYLINE Co.,Ltd.\n00:18:00\tUnigrand\tUnigrand Ltd\n00:18:01\tActionte\tActiontec Electronics, Inc\n00:18:02\tAlphaNet\tAlpha Networks Inc.\n00:18:03\tArcsoftS\tArcSoft Shanghai Co. LTD\n00:18:04\tE-TekDig\tE-TEK DIGITAL TECHNOLOGY LIMITED\n00:18:05\tBeijingI\tBeijing InHand Networking Technology Co.,Ltd.\n00:18:06\tHokkeiIn\tHokkei Industries Co., Ltd.\n00:18:07\tFanstel\tFanstel Corp.\n00:18:08\tSightlog\tSightLogix, Inc.\n00:18:09\tCresyn\t\n00:18:0A\tCiscoMer\tCisco Meraki\n00:18:0B\tBrillian\tBrilliant Telecommunications\n00:18:0C\tOptelian\tOptelian Access Networks\n00:18:0D\tTerabyte\tTerabytes Server Storage Tech Corp\n00:18:0E\tAvega\tAvega Systems\n00:18:0F\tNokiaDan\tNokia Danmark A/S\n00:18:10\tIptradeS\tIPTrade S.A.\n00:18:11\tNeurosTe\tNeuros Technology International, LLC.\n00:18:12\tBeijingX\tBeijing Xinwei Telecom Technology Co., Ltd.\n00:18:13\tSonyMobi\tSony Mobile Communications Inc\n00:18:14\tMitutoyo\tMitutoyo Corporation\n00:18:15\tGzTechno\tGZ Technologies, Inc.\n00:18:16\tUbixon\tUbixon Co., Ltd.\n00:18:17\tDEShawRe\tD. E. Shaw Research, LLC\n00:18:18\tCisco\tCisco Systems, Inc\n00:18:19\tCisco\tCisco Systems, Inc\n00:18:1A\tAvermedi\tAVerMedia Information Inc.\n00:18:1B\tTaijinMe\tTaiJin Metal Co., Ltd.\n00:18:1C\tExterity\tExterity Limited\n00:18:1D\tAsiaElec\tAsia Electronics Co.,Ltd\n00:18:1E\tGdxTechn\tGDX Technologies Ltd.\n00:18:1F\tPalmmicr\tPalmmicro Communications\n00:18:20\tW5networ\tw5networks\n00:18:21\tSindoric\tSindoricoh\n00:18:22\tCecTelec\tCec Telecom Co.,Ltd.\n00:18:23\tDeltaEle\tDelta Electronics, Inc.\n00:18:24\tKimaldiE\tKimaldi Electronics, S.L.\n00:18:25\tPrivate\t\n00:18:26\tCaleAcce\tCale Access AB\n00:18:27\tNecUnifi\tNec Unified Solutions Nederland B.V.\n00:18:28\tE2vTechn\te2v technologies (UK) ltd.\n00:18:29\tGatsomet\tGatsometer\n00:18:2A\tTaiwanVi\tTaiwan Video & Monitor\n00:18:2B\tSoftier\t\n00:18:2C\tAscendNe\tAscend Networks, Inc.\n00:18:2D\tArtecDes\tArtec Design\n00:18:2E\tXstreamh\tXStreamHD\n00:18:2F\tTexasIns\tTexas Instruments\n00:18:30\tTexasIns\tTexas Instruments\n00:18:31\tTexasIns\tTexas Instruments\n00:18:32\tTexasIns\tTexas Instruments\n00:18:33\tTexasIns\tTexas Instruments\n00:18:34\tTexasIns\tTexas Instruments\n00:18:35\tThoratec\tThoratec / ITC\n00:18:36\tReliance\tReliance Electric Limited\n00:18:37\tUniversa\tUniversal ABIT Co., Ltd.\n00:18:38\tPanacces\tPanAccess Communications,Inc.\n00:18:39\tCisco-Li\tCisco-Linksys, LLC\n00:18:3A\tWestellT\tWestell Technologies Inc.\n00:18:3B\tCenits\tCENITS Co., Ltd.\n00:18:3C\tEncoreSo\tEncore Software Limited\n00:18:3D\tVertexLi\tVertex Link Corporation\n00:18:3E\tDigilent\tDigilent, Inc\n00:18:3F\t2wire\t2Wire Inc\n00:18:40\t3Phoenix\t3 Phoenix, Inc.\n00:18:41\tHighTech\tHigh Tech Computer Corp\n00:18:42\tNokiaDan\tNokia Danmark A/S\n00:18:43\tDawevisi\tDawevision Ltd\n00:18:44\tHeadsUpT\tHeads Up Technologies, Inc.\n00:18:45\tPulsar-T\tPulsar-Telecom LLC.\n00:18:46\tCryptoSA\tCrypto S.A.\n00:18:47\tAcenetTe\tAceNet Technology Inc.\n00:18:48\tVecimaNe\tVecima Networks Inc.\n00:18:49\tNventSch\tnVent, Schroff GmbH\n00:18:4A\tCatcher\tCatcher, Inc.\n00:18:4B\tLasVegas\tLas Vegas Gaming, Inc.\n00:18:4C\tBogenCom\tBogen Communications\n00:18:4D\tNetgear\t\n00:18:4E\tLianheTe\tLianhe Technologies, Inc.\n00:18:4F\t8WaysTec\t8 Ways Technology Corp.\n00:18:50\tSecfoneK\tSecfone Kft\n00:18:51\tSwsoft\t\n00:18:52\tStorlink\tStorLink Semiconductors, Inc.\n00:18:53\tAteraNet\tAtera Networks LTD.\n00:18:54\tArgard\tArgard Co., Ltd\n00:18:55\tAeromari\tAeromaritime Systembau GmbH\n00:18:56\tEyefi\tEyeFi, Inc\n00:18:57\tUnilever\tUnilever R&D\n00:18:58\tTagmaste\tTagMaster AB\n00:18:59\tStrawber\tStrawberry Linux Co.,Ltd.\n00:18:5A\tUcontrol\tuControl, Inc.\n00:18:5B\tNetworkC\tNetwork Chemistry, Inc\n00:18:5C\tEdslabTe\tEDSLAB Technologies\n00:18:5D\tTaiguenT\tTAIGUEN TECHNOLOGY (SHEN-ZHEN) CO., LTD.\n00:18:5E\tNexterm\tNexterm Inc.\n00:18:5F\tTac\tTAC Inc.\n00:18:60\tSimTechn\tSIM Technology Group Shanghai Simcom Ltd.,\n00:18:61\tOoma\tOoma, Inc.\n00:18:62\tSeagateT\tSeagate Technology\n00:18:63\tVeritech\tVeritech Electronics Limited\n00:18:64\tEaton\tEaton Corporation\n00:18:65\tSiemensH\tSiemens Healthcare Diagnostics Manufacturing Ltd\n00:18:66\tLeutronV\tLeutron Vision\n00:18:67\tDatalogi\tDatalogic ADC\n00:18:68\tCiscoSpv\tCisco SPVTG\n00:18:69\tKingjim\t\n00:18:6A\tGlobalLi\tGlobal Link Digital Technology Co,.LTD\n00:18:6B\tSambuCom\tSambu Communics CO., LTD.\n00:18:6C\tNeonode\tNeonode AB\n00:18:6D\tZhenjian\tZhenjiang Sapphire Electronic Industry CO.\n00:18:6E\t3com\t3Com Ltd\n00:18:6F\tSethaInd\tSetha Industria Eletronica LTDA\n00:18:70\tE28Shang\tE28 Shanghai Limited\n00:18:71\tHewlettP\tHewlett Packard\n00:18:72\tExpertis\tExpertise Engineering\n00:18:73\tCisco\tCisco Systems, Inc\n00:18:74\tCisco\tCisco Systems, Inc\n00:18:75\tAnaciseT\tAnaCise Testnology Pte Ltd\n00:18:76\tWowwee\tWowWee Ltd.\n00:18:77\tAmplex\tAmplex A/S\n00:18:78\tMackware\tMackware GmbH\n00:18:79\tDsys\t\n00:18:7A\tWiremold\t\n00:18:7B\t4nsys\t4NSYS Co. Ltd.\n00:18:7C\tIntercro\tIntercross, Llc\n00:18:7D\tArmorlin\tArmorlink Co .Ltd\n00:18:7E\tRgbSpect\tRGB Spectrum\n00:18:7F\tZodianet\t\n00:18:80\tMaximInt\tMaxim Integrated Products\n00:18:81\tBuyangEl\tBuyang Electronics Industrial Co., Ltd\n00:18:82\tHuaweiTe\tHuawei Technologies Co.,Ltd\n00:18:83\tFormosa2\tFORMOSA21 INC.\n00:18:84\tFonTechn\tFon Technology S.L.\n00:18:85\tAvigilon\tAvigilon Corporation\n00:18:86\tEl-Tech\tEL-TECH, INC.\n00:18:87\tMetasyst\tMetasystem SpA\n00:18:88\tGotiveAS\tGOTIVE a.s.\n00:18:89\tWinnetSo\tWinNet Solutions Limited\n00:18:8A\tInfinova\tInfinova LLC\n00:18:8B\tDell\tDell Inc.\n00:18:8C\tMobileAc\tMobile Action Technology Inc.\n00:18:8D\tNokiaDan\tNokia Danmark A/S\n00:18:8E\tEkahau\tEkahau, Inc.\n00:18:8F\tMontgome\tMontgomery Technology, Inc.\n00:18:90\tRadiocom\tRadioCOM, s.r.o.\n00:18:91\tZhongsha\tZhongshan General K-mate Electronics Co., Ltd\n00:18:92\tAds-Tec\tads-tec GmbH\n00:18:93\tShenzhen\tShenzhen Photon Broadband Technology Co.,Ltd\n00:18:94\tNpcore\tNPCore, Inc.\n00:18:95\tHansunTe\tHansun Technologies Inc.\n00:18:96\tGreatWel\tGreat Well Electronic LTD\n00:18:97\tJess-Lin\tJESS-LINK PRODUCTS Co., LTD\n00:18:98\tKingstat\tKingstate Electronics Corporation\n00:18:99\tShenzhen\tShenZhen jieshun Science&Technology Industry CO,LTD.\n00:18:9A\tHanaMicr\tHANA Micron Inc.\n00:18:9B\tThomson\tThomson Inc.\n00:18:9C\tWeldex\tWeldex Corporation\n00:18:9D\tNavcast\tNavcast Inc.\n00:18:9E\tOmnikey\tOMNIKEY GmbH.\n00:18:9F\tLenntek\tLenntek Corporation\n00:18:A0\tCiermaAs\tCierma Ascenseurs\n00:18:A1\tTiqitCom\tTiqit Computers, Inc.\n00:18:A2\tXipTechn\tXIP Technology AB\n00:18:A3\tZippyTec\tZippy Technology Corp.\n00:18:A4\tArrisGro\tARRIS Group, Inc.\n00:18:A5\tAdigitTe\tADigit Technologies Corp.\n00:18:A6\tPersiste\tPersistent Systems, LLC\n00:18:A7\tYoggieSe\tYoggie Security Systems LTD.\n00:18:A8\tAnnealTe\tAnNeal Technology Inc.\n00:18:A9\tEthernet\tEthernet Direct Corporation\n00:18:AA\tProtecFi\tProtec Fire Detection plc\n00:18:AB\tBeijingL\tBeijing Lhwt Microelectronics Inc.\n00:18:AC\tShanghai\tShanghai Jiao Da HISYS Technology Co. Ltd.\n00:18:AD\tNidecSan\tNidec Sankyo Corporation\n00:18:AE\tTvt\tTvt Co.,Ltd\n00:18:AF\tSamsungE\tSamsung Electronics Co.,Ltd\n00:18:B0\tNortelNe\tNortel Networks\n00:18:B1\tIbm\tIBM Corp\n00:18:B2\tAdeunisR\tAdeunis Rf\n00:18:B3\tTecWizho\tTEC WizHome Co., Ltd.\n00:18:B4\tDawonMed\tDawon Media Inc.\n00:18:B5\tMagnaCar\tMagna Carta\n00:18:B6\tS3c\tS3C, Inc.\n00:18:B7\tD3LedLlc\tD3 LED, LLC\n00:18:B8\tNewVoice\tNew Voice International AG\n00:18:B9\tCisco\tCisco Systems, Inc\n00:18:BA\tCisco\tCisco Systems, Inc\n00:18:BB\tEliwellC\tEliwell Controls srl\n00:18:BC\tZaoNvpBo\tZAO NVP Bolid\n00:18:BD\tShenzhen\tShenzhen Dvbworld Technology Co., Ltd.\n00:18:BE\tAnsa\tANSA Corporation\n00:18:BF\tEssenceT\tEssence Technology Solution, Inc.\n00:18:C0\tArrisGro\tARRIS Group, Inc.\n00:18:C1\tAlmitecI\tAlmitec Informática e Comércio\n00:18:C2\tFiretide\tFiretide, Inc\n00:18:C3\tCs\tCS Corporation\n00:18:C4\tRabaTech\tRaba Technologies LLC\n00:18:C5\tNokiaDan\tNokia Danmark A/S\n00:18:C6\tOpwFuelM\tOPW Fuel Management Systems\n00:18:C7\tRealTime\tReal Time Automation\n00:18:C8\tIsonas\tISONAS Inc.\n00:18:C9\tEopsTech\tEOps Technology Limited\n00:18:CA\tViprinet\tViprinet GmbH\n00:18:CB\tTecobest\tTecobest Technology Limited\n00:18:CC\tAxiohmSa\tAxiohm Sas\n00:18:CD\tEraeElec\tErae Electronics Industry Co., Ltd\n00:18:CE\tDreamtec\tDreamtech Co., Ltd\n00:18:CF\tBaldorEl\tBaldor Electric Company\n00:18:D0\tAtroadAT\tAtRoad,  A Trimble Company\n00:18:D1\tSiemensH\tSiemens Home & Office Comm. Devices\n00:18:D2\tHigh-Gai\tHigh-Gain Antennas LLC\n00:18:D3\tTeamcast\t\n00:18:D4\tUnifiedD\tUnified Display Interface SIG\n00:18:D5\tReigncom\t\n00:18:D6\tSwirlnet\tSwirlnet A/S\n00:18:D7\tJavadGns\tJAVAD GNSS, Inc.\n00:18:D8\tArchMete\tARCH METER Corporation\n00:18:D9\tSantosha\tSantosha Internatonal, Inc\n00:18:DA\tWürthEle\tWürth Elektronik eiSos GmbH & Co. KG\n00:18:DB\tEplTechn\tEPL Technology Ltd\n00:18:DC\tProstar\tProstar Co., Ltd.\n00:18:DD\tSilicond\tSilicondust Engineering Ltd\n00:18:DE\tIntelCor\tIntel Corporate\n00:18:DF\tMorey\tThe Morey Corporation\n00:18:E0\tAnaveo\t\n00:18:E1\tVerkerkS\tVerkerk Service Systemen\n00:18:E2\tTopdataS\tTopdata Sistemas de Automacao Ltda\n00:18:E3\tVisualga\tVisualgate Systems, Inc.\n00:18:E4\tYiguang\t\n00:18:E5\tAdhoco\tAdhoco AG\n00:18:E6\tComputer\tComputer Hardware Design SIA\n00:18:E7\tCameoCom\tCameo Communications, INC.\n00:18:E8\tHacetron\tHacetron Corporation\n00:18:E9\tNumata\tNumata Corporation\n00:18:EA\tAlltec\tAlltec GmbH\n00:18:EB\tBlueZenE\tBlue Zen Enterprises Private Limited\n00:18:EC\tWeldingT\tWelding Technology Corporation\n00:18:ED\tAccutech\tAccutech Ultrasystems Co., Ltd.\n00:18:EE\tVideolog\tVideology Imaging Solutions, Inc.\n00:18:EF\tEscapeCo\tEscape Communications, Inc.\n00:18:F0\tJoytoto\tJOYTOTO Co., Ltd.\n00:18:F1\tChunichi\tChunichi Denshi Co.,LTD.\n00:18:F2\tBeijingT\tBeijing Tianyu Communication Equipment Co., Ltd\n00:18:F3\tAsustekC\tASUSTek COMPUTER INC.\n00:18:F4\tEoTechni\tEO TECHNICS Co., Ltd.\n00:18:F5\tShenzhen\tShenzhen Streaming Video Technology Company Limited\n00:18:F6\tThomsonT\tThomson Telecom Belgium\n00:18:F7\tKameleon\tKameleon Technologies\n00:18:F8\tCisco-Li\tCisco-Linksys, LLC\n00:18:F9\tVvond\tVVOND, Inc.\n00:18:FA\tYushinPr\tYushin Precision Equipment Co.,Ltd.\n00:18:FB\tComproTe\tCompro Technology\n00:18:FC\tAltecEle\tAltec Electronic AG\n00:18:FD\tOptimalT\tOptimal Technologies International Inc.\n00:18:FE\tHewlettP\tHewlett Packard\n00:18:FF\tPowerqua\tPowerQuattro Co.\n00:19:00\tIntelliv\tIntelliverese - DBA Voicecom\n00:19:01\tF1media\t\n00:19:02\tCambridg\tCambridge Consultants Ltd\n00:19:03\tBigfootN\tBigfoot Networks Inc\n00:19:04\tWbElectr\tWB Electronics Sp. z o.o.\n00:19:05\tSchrackS\tSCHRACK Seconet AG\n00:19:06\tCisco\tCisco Systems, Inc\n00:19:07\tCisco\tCisco Systems, Inc\n00:19:08\tDuaxes\tDuaxes Corporation\n00:19:09\tDevi-Dan\tDEVI - Danfoss A/S\n00:19:0A\tHasware\tHasware Inc.\n00:19:0B\tSouthern\tSouthern Vision Systems, Inc.\n00:19:0C\tEncoreEl\tEncore Electronics, Inc.\n00:19:0D\tIeee1394\tIEEE 1394c\n00:19:0E\tAtechTec\tAtech Technology Co., Ltd.\n00:19:0F\tAdvansus\tAdvansus Corp.\n00:19:10\tKnickEle\tKnick Elektronische Messgeraete GmbH & Co. KG\n00:19:11\tJustInMo\tJust In Mobile Information Technologies (Shanghai) Co., Ltd.\n00:19:12\tWelcat\tWelcat Inc\n00:19:13\tChuang-Y\tChuang-Yi Network Equipment Co.Ltd.\n00:19:14\tWinix\tWinix Co., Ltd\n00:19:15\tTecom\tTECOM Co., Ltd.\n00:19:16\tPaytec\tPayTec AG\n00:19:17\tPosiflex\tPosiflex Inc.\n00:19:18\tInteract\tInteractive Wear AG\n00:19:19\tAstel\tASTEL Inc.\n00:19:1A\tIrlink\t\n00:19:1B\tSputnikE\tSputnik Engineering AG\n00:19:1C\tSensicas\tSensicast Systems\n00:19:1D\tNintendo\tNintendo Co., Ltd.\n00:19:1E\tBeyondwi\tBeyondwiz Co., Ltd.\n00:19:1F\tMicrolin\tMicrolink communications Inc.\n00:19:20\tKumeElec\tKUME electric Co.,Ltd.\n00:19:21\tElitegro\tElitegroup Computer Systems Co.,Ltd.\n00:19:22\tCmComand\tCM Comandos Lineares\n00:19:23\tPhonexKo\tPhonex Korea Co., LTD.\n00:19:24\tLbnlEngi\tLBNL  Engineering\n00:19:25\tIntelici\tIntelicis Corporation\n00:19:26\tBitsgen\tBitsGen Co., Ltd.\n00:19:27\tImcosys\tImCoSys Ltd\n00:19:28\tSiemensT\tSiemens AG, Transportation Systems\n00:19:29\t2m2bMont\t2M2B Montadora de Maquinas Bahia Brasil LTDA\n00:19:2A\tAntiopeA\tAntiope Associates\n00:19:2B\tAclaraRf\tAclara RF Systems Inc.\n00:19:2C\tArrisGro\tARRIS Group, Inc.\n00:19:2D\tNokia\tNokia Corporation\n00:19:2E\tSpectral\tSpectral Instruments, Inc.\n00:19:2F\tCisco\tCisco Systems, Inc\n00:19:30\tCisco\tCisco Systems, Inc\n00:19:31\tBalluff\tBalluff GmbH\n00:19:32\tGudeAnal\tGude Analog- und Digialsysteme GmbH\n00:19:33\tStrix\tStrix Systems, Inc.\n00:19:34\tTrendonT\tTrendon Touch Technology Corp.\n00:19:35\tDuerrDen\tDuerr Dental Ag\n00:19:36\tSterlite\tSterlite Optical Technologies Limited\n00:19:37\tCommerce\tCommerceGuard AB\n00:19:38\tUmbCommu\tUMB Communications Co., Ltd.\n00:19:39\tGigamips\t\n00:19:3A\tOesoluti\tOesolutions\n00:19:3B\tWiliboxD\tWilibox Deliberant Group LLC\n00:19:3C\tHighpoin\tHighPoint Technologies Incorporated\n00:19:3D\tGmcGuard\tGMC Guardian Mobility Corp.\n00:19:3E\tAdbBroad\tADB Broadband Italia\n00:19:3F\tRdiTechn\tRDI technology(Shenzhen) Co.,LTD\n00:19:40\tRackable\tRackable Systems\n00:19:41\tPitneyBo\tPitney Bowes, Inc\n00:19:42\tOnSoftwa\tOn Software International Limited\n00:19:43\tBelden\t\n00:19:44\tFossilPa\tFossil Partners, L.P.\n00:19:45\tRfConcep\tRF COncepts, LLC\n00:19:46\tCianetIn\tCianet Industria e Comercio S/A\n00:19:47\tCiscoSpv\tCisco SPVTG\n00:19:48\tAirespid\tAireSpider Networks\n00:19:49\tTentelCo\tTentel Comtech Co., Ltd.\n00:19:4A\tTesto\tTesto Ag\n00:19:4B\tSagemcom\tSagemcom Broadband SAS\n00:19:4C\tFujianSt\tFujian Stelcom information & Technology CO.,Ltd\n00:19:4D\tAvagoTec\tAvago Technologies Sdn Bhd\n00:19:4E\tUltraEle\tUltra Electronics - TCS (Tactical Communication Systems)\n00:19:4F\tNokiaDan\tNokia Danmark A/S\n00:19:50\tHarmanMu\tHarman Multimedia\n00:19:51\tNetconsS\tNETCONS, s.r.o.\n00:19:52\tAcogito\tACOGITO Co., Ltd\n00:19:53\tChainlea\tChainleader Communications Corp.\n00:19:54\tLeaf\tLeaf Corporation.\n00:19:55\tCisco\tCisco Systems, Inc\n00:19:56\tCisco\tCisco Systems, Inc\n00:19:57\tSaafnetC\tSaafnet Canada Inc.\n00:19:58\tBluetoot\tBluetooth SIG, Inc.\n00:19:59\tStaccato\tStaccato Communications Inc.\n00:19:5A\tJenaerAn\tJenaer Antriebstechnik GmbH\n00:19:5B\tD-Link\tD-Link Corporation\n00:19:5C\tInnotech\tInnotech Corporation\n00:19:5D\tShenzhen\tShenZhen XinHuaTong Opto Electronics Co.,Ltd\n00:19:5E\tArrisGro\tARRIS Group, Inc.\n00:19:5F\tValemoun\tValemount Networks Corporation\n00:19:60\tDocomo\tDoCoMo Systems, Inc.\n00:19:61\tBlaupunk\tBlaupunkt  Embedded Systems GmbH\n00:19:62\tCommerci\tCommerciant, LP\n00:19:63\tSonyMobi\tSony Mobile Communications Inc\n00:19:64\tDoorking\tDoorking Inc.\n00:19:65\tYuhuaTel\tYuHua TelTech (ShangHai) Co., Ltd.\n00:19:66\tAsiarock\tAsiarock Technology Limited\n00:19:67\tTeldatSp\tTELDAT Sp.J.\n00:19:68\tDigitalV\tDigital Video Networks(Shanghai) CO. LTD.\n00:19:69\tNortelNe\tNortel Networks\n00:19:6A\tMikrom\tMikroM GmbH\n00:19:6B\tDanpex\tDanpex Corporation\n00:19:6C\tEtrovisi\tEtrovision Technology\n00:19:6D\tRaybitKo\tRaybit Systems Korea, Inc\n00:19:6E\tMetacomP\tMetacom (Pty) Ltd.\n00:19:6F\tSensopar\tSensoPart GmbH\n00:19:70\tZ-Com\tZ-Com, Inc.\n00:19:71\tGuangzho\tGuangzhou Unicomp Technology Co.,Ltd\n00:19:72\tPlexusXi\tPlexus (Xiamen) Co.,ltd.\n00:19:73\tZeugma\tZeugma Systems\n00:19:74\t16063\t\n00:19:75\tBeijingH\tBeijing Huisen networks technology Inc\n00:19:76\tXipherTe\tXipher Technologies, LLC\n00:19:77\tAerohive\tAerohive Networks Inc.\n00:19:78\tDatum\tDatum Systems, Inc.\n00:19:79\tNokiaDan\tNokia Danmark A/S\n00:19:7A\tMazet\tMAZeT GmbH\n00:19:7B\tPicotest\tPicotest Corp.\n00:19:7C\tRiedelCo\tRiedel Communications GmbH\n00:19:7D\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:19:7E\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:19:7F\tPlantron\tPlantronics, Inc.\n00:19:80\tGridpoin\tGridpoint Systems\n00:19:81\tVivox\tVivox Inc\n00:19:82\tSmardtv\t\n00:19:83\tCctR&D\tCCT R&D Limited\n00:19:84\tEstic\tESTIC Corporation\n00:19:85\tItWatchd\tIT Watchdogs, Inc\n00:19:86\tChengHon\tCheng Hongjian\n00:19:87\tPanasoni\tPanasonic Mobile Communications Co.,Ltd.\n00:19:88\tWi2wi\tWi2Wi, Inc\n00:19:89\tSonitrol\tSonitrol Corporation\n00:19:8A\tNorthrop\tNorthrop Grumman Systems Corp.\n00:19:8B\tNoveraOp\tNovera Optics Korea, Inc.\n00:19:8C\tIxsea\t\n00:19:8D\tOceanOpt\tOcean Optics, Inc.\n00:19:8E\tOticon\tOticon A/S\n00:19:8F\tAlcatelB\tAlcatel Bell N.V.\n00:19:90\tElmData\tELM DATA Co., Ltd.\n00:19:91\tAvinfo\t\n00:19:92\tAdtran\tAdtran Inc\n00:19:93\tChangshu\tChangshu Switchgear MFG. Co.,Ltd. (Former Changshu Switchgea\n00:19:94\tJorjinTe\tJorjin Technologies Inc.\n00:19:95\tJurongHi\tJurong Hi-Tech (Suzhou)Co.ltd\n00:19:96\tTurboche\tTurboChef Technologies Inc.\n00:19:97\tSoftDevi\tSoft Device Sdn Bhd\n00:19:98\tSato\tSato Corporation\n00:19:99\tFujitsuT\tFujitsu Technology Solutions GmbH\n00:19:9A\tEdo-Evi\t\n00:19:9B\tDiversif\tDiversified Technical Systems, Inc.\n00:19:9C\tCtring\t\n00:19:9D\tVizio\tVizio, Inc\n00:19:9E\tNifty\t\n00:19:9F\tDkt\tDKT A/S\n00:19:A0\tNihonDat\tNihon Data Systens, Inc.\n00:19:A1\tLgInform\tLG INFORMATION & COMM.\n00:19:A2\tOrdynTec\tOrdyn Technologies\n00:19:A3\tAsteelEl\tasteel electronique atlantique\n00:19:A4\tAustarTe\tAustar Technology (hang zhou) Co.,Ltd\n00:19:A5\tRadarfin\tRadarFind Corporation\n00:19:A6\tArrisGro\tARRIS Group, Inc.\n00:19:A7\tItu-T\t\n00:19:A8\tWiquestC\tWiQuest Communications\n00:19:A9\tCisco\tCisco Systems, Inc\n00:19:AA\tCisco\tCisco Systems, Inc\n00:19:AB\tRaycom\tRaycom CO ., LTD\n00:19:AC\tGsp\tGSP SYSTEMS Inc.\n00:19:AD\tBobstSa\tBobst Sa\n00:19:AE\tHoplingT\tHopling Technologies b.v.\n00:19:AF\tRigolTec\tRigol Technologies, Inc.\n00:19:B0\tHanyangS\tHanYang System\n00:19:B1\tArrow7\tArrow7 Corporation\n00:19:B2\tXynetsof\tXYnetsoft Co.,Ltd\n00:19:B3\tStanford\tStanford Research Systems\n00:19:B4\tIntellio\tIntellio Ltd\n00:19:B5\tFamarFue\tFamar Fueguina S.A.\n00:19:B6\tEuroEmme\tEuro Emme s.r.l.\n00:19:B7\tNokiaDan\tNokia Danmark A/S\n00:19:B8\tBoundary\tBoundary Devices\n00:19:B9\tDell\tDell Inc.\n00:19:BA\tParadoxS\tParadox Security Systems Ltd\n00:19:BB\tHewlettP\tHewlett Packard\n00:19:BC\tElectroC\tElectro Chance Srl\n00:19:BD\tNewMedia\tNew Media Life\n00:19:BE\tAltaiTec\tAltai Technologies Limited\n00:19:BF\tCitiwayT\tCitiway technology Co.,ltd\n00:19:C0\tArrisGro\tARRIS Group, Inc.\n00:19:C1\tAlpsElec\tAlps Electric Co.,Ltd.\n00:19:C2\tEquustek\tEquustek Solutions, Inc.\n00:19:C3\tQualitro\tQualitrol\n00:19:C4\tInfocryp\tInfocrypt Inc.\n00:19:C5\tSonyInte\tSony Interactive Entertainment Inc.\n00:19:C6\tZte\tzte corporation\n00:19:C7\tCambridg\tCambridge Industries(Group) Co.,Ltd.\n00:19:C8\tAnydata\tAnyDATA Corporation\n00:19:C9\tS&CElect\tS&C ELECTRIC COMPANY\n00:19:CA\tBroadata\tBroadata Communications, Inc\n00:19:CB\tZyxelCom\tZyxel Communications Corporation\n00:19:CC\tRcgHk\tRCG (HK) Ltd\n00:19:CD\tChengduE\tChengdu ethercom information technology Ltd.\n00:19:CE\tProgress\tProgressive Gaming International\n00:19:CF\tSalicruS\tSalicru, S.A.\n00:19:D0\tCathexis\t\n00:19:D1\tIntelCor\tIntel Corporate\n00:19:D2\tIntelCor\tIntel Corporate\n00:19:D3\tTrakMicr\tTRAK Microwave\n00:19:D4\tIcxTechn\tICX Technologies\n00:19:D5\tIpInnova\tIP Innovations, Inc.\n00:19:D6\tLsCableA\tLS Cable and System Ltd.\n00:19:D7\tFortunet\tFortunetek Co., Ltd\n00:19:D8\tMaxfor\t\n00:19:D9\tZeutsche\tZeutschel GmbH\n00:19:DA\tWelltran\tWelltrans O&E Technology Co. , Ltd.\n00:19:DB\tMicro-St\tMICRO-STAR INTERNATIONAL CO., LTD.\n00:19:DC\tEnensysT\tENENSYS Technologies\n00:19:DD\tFei-Zyfe\tFEI-Zyfer, Inc.\n00:19:DE\tMobitek\t\n00:19:DF\tThomson\tThomson Inc.\n00:19:E0\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n00:19:E1\tNortelNe\tNortel Networks\n00:19:E2\tJuniperN\tJuniper Networks\n00:19:E3\tApple\tApple, Inc.\n00:19:E4\t2wire\t2Wire Inc\n00:19:E5\tLynxStud\tLynx Studio Technology, Inc.\n00:19:E6\tToyoMedi\tToyo Medic Co.,Ltd.\n00:19:E7\tCisco\tCisco Systems, Inc\n00:19:E8\tCisco\tCisco Systems, Inc\n00:19:E9\tS-Inform\tS-Information Technolgy, Co., Ltd.\n00:19:EA\tTeramage\tTeraMage Technologies Co., Ltd.\n00:19:EB\tPyronix\tPyronix Ltd\n00:19:EC\tSagamore\tSagamore Systems, Inc.\n00:19:ED\tAxesstel\tAxesstel Inc.\n00:19:EE\tCarloGav\tCARLO GAVAZZI CONTROLS SPA-Controls Division\n00:19:EF\tShenzhen\tShenzhen Linnking Electronics Co.,Ltd\n00:19:F0\tUnionman\tUnionman Technology Co.,Ltd\n00:19:F1\tStarComm\tStar Communication Network Technology Co.,Ltd\n00:19:F2\tTeradyne\tTeradyne K.K.\n00:19:F3\tCetis\tCetis, Inc\n00:19:F4\tConverge\tConvergens Oy Ltd\n00:19:F5\tImaginat\tImagination Technologies Ltd\n00:19:F6\tAcconetP\tAcconet (PTE) Ltd\n00:19:F7\tOnsetCom\tOnset Computer Corporation\n00:19:F8\tEmbedded\tEmbedded Systems Design, Inc.\n00:19:F9\tTdk-Lamb\tTDK-Lambda\n00:19:FA\tCableVis\tCable Vision Electronics CO., LTD.\n00:19:FB\tBskyb\tBSkyB Ltd\n00:19:FC\tPtUfoaks\tPT. Ufoakses Sukses Luarbiasa\n00:19:FD\tNintendo\tNintendo Co., Ltd.\n00:19:FE\tShenzhen\tShenzhen Seecomm Technology Co.,Ltd.\n00:19:FF\tFinnzyme\tFinnzymes\n00:1A:00\tMatrix\tMatrix Inc.\n00:1A:01\tSmithsMe\tSmiths Medical\n00:1A:02\tSecureCa\tSecure Care Products, Inc\n00:1A:03\tAngelEle\tAngel Electronics Co., Ltd.\n00:1A:04\tInterayS\tInteray Solutions BV\n00:1A:05\tOptibase\tOptibase Ltd\n00:1A:06\tOpvista\tOpVista, Inc.\n00:1A:07\tArecontV\tArecont Vision\n00:1A:08\tSimoco\tSimoco Ltd.\n00:1A:09\tWayfarer\tWayfarer Transit Systems Ltd\n00:1A:0A\tAdaptive\tAdaptive Micro-Ware Inc.\n00:1A:0B\tBonaTech\tBona Technology Inc.\n00:1A:0C\tSwe-Dish\tSwe-Dish Satellite Systems AB\n00:1A:0D\tHandheld\tHandHeld entertainment, Inc.\n00:1A:0E\tChengUei\tCheng Uei Precision Industry Co.,Ltd\n00:1A:0F\tSistemas\tSistemas Avanzados de Control, S.A.\n00:1A:10\tLucentTr\tLucent Trans Electronics Co.,Ltd\n00:1A:11\tGoogle\tGoogle, Inc.\n00:1A:12\tEssilor\t\n00:1A:13\tWanlidaG\tWanlida Group Co., LTD\n00:1A:14\tXinHuaCo\tXin Hua Control Engineering Co.,Ltd.\n00:1A:15\tGemaltoE\tgemalto e-Payment\n00:1A:16\tNokiaDan\tNokia Danmark A/S\n00:1A:17\tTeakTech\tTeak Technologies, Inc.\n00:1A:18\tAdvanced\tAdvanced Simulation Technology inc.\n00:1A:19\tComputer\tComputer Engineering Limited\n00:1A:1A\tGentexCo\tGentex Corporation/Electro-Acoustic Products\n00:1A:1B\tArrisGro\tARRIS Group, Inc.\n00:1A:1C\tGt&TEngi\tGT&T Engineering Pte Ltd\n00:1A:1D\tPchomeOn\tPChome Online Inc.\n00:1A:1E\tArubaNet\tAruba Networks\n00:1A:1F\tCoastalE\tCoastal Environmental Systems\n00:1A:20\tCmotech\tCMOTECH Co. Ltd.\n00:1A:21\tBrookhui\tBrookhuis Applied Technologies BV\n00:1A:22\tEq-3Entw\teQ-3 Entwicklung GmbH\n00:1A:23\tIceQube\tIce Qube, Inc\n00:1A:24\tGalaxyTe\tGalaxy Telecom Technologies Ltd\n00:1A:25\tDeltaDor\tDelta Dore\n00:1A:26\tDeltanod\tDeltanode Solutions AB\n00:1A:27\tUbistar\t\n00:1A:28\tAswtTaiw\tASWT Co., LTD. Taiwan Branch H.K.\n00:1A:29\tJohnsonO\tJohnson Outdoors Marine Electronics d/b/a Minnkota\n00:1A:2A\tArcadyan\tArcadyan Technology Corporation\n00:1A:2B\tAyecomTe\tAyecom Technology Co., Ltd.\n00:1A:2C\tSatec\tSATEC Co.,LTD\n00:1A:2D\tNavvoGro\tThe Navvo Group\n00:1A:2E\tZiovaCop\tZiova Coporation\n00:1A:2F\tCisco\tCisco Systems, Inc\n00:1A:30\tCisco\tCisco Systems, Inc\n00:1A:31\tScanCoin\tScan Coin Ab\n00:1A:32\tActivaMu\tActiva Multimedia\n00:1A:33\tAsiCommu\tASI Communications, Inc.\n00:1A:34\tKonkaGro\tKonka Group Co., Ltd.\n00:1A:35\tBartec\tBARTEC GmbH\n00:1A:36\tAipermon\tAipermon GmbH & Co. KG\n00:1A:37\tLear\tLear Corporation\n00:1A:38\tSanmina-\tSanmina-SCI\n00:1A:39\tMertenGm\tMerten GmbH&CoKG\n00:1A:3A\tDongahel\tDongahelecomm\n00:1A:3B\tDoahElec\tDoah Elecom Inc.\n00:1A:3C\tTechnowa\tTechnowave Ltd.\n00:1A:3D\tAjinVisi\tAjin Vision Co.,Ltd\n00:1A:3E\tFasterTe\tFaster Technology LLC\n00:1A:3F\tIntelbra\tintelbras\n00:1A:40\tA-FourTe\tA-FOUR TECH CO., LTD.\n00:1A:41\tInocova\tINOCOVA Co.,Ltd\n00:1A:42\tTechcity\tTechcity Technology co., Ltd.\n00:1A:43\tLogicalL\tLogical Link Communications\n00:1A:44\tJwtradin\tJWTrading Co., Ltd\n00:1A:45\tGnNetcom\tGN Netcom A/S\n00:1A:46\tDigitalM\tDigital Multimedia Technology Co., Ltd\n00:1A:47\tAgami\tAgami Systems, Inc.\n00:1A:48\tTakacom\tTakacom Corporation\n00:1A:49\tMicroVis\tMicro Vision Co.,LTD\n00:1A:4A\tQumranet\tQumranet Inc.\n00:1A:4B\tHewlettP\tHewlett Packard\n00:1A:4C\tCrossbow\tCrossbow Technology, Inc\n00:1A:4D\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\n00:1A:4E\tNti/Linm\tNTI AG / LinMot\n00:1A:4F\tAvm\tAVM GmbH\n00:1A:50\tPheenetT\tPheeNet Technology Corp.\n00:1A:51\tAlfredMa\tAlfred Mann Foundation\n00:1A:52\tMeshlinx\tMeshlinx Wireless Inc.\n00:1A:53\tZylaya\t\n00:1A:54\tHipShing\tHip Shing Electronics Ltd.\n00:1A:55\tAca-Digi\tACA-Digital Corporation\n00:1A:56\tViewtel\tViewTel Co,. Ltd.\n00:1A:57\tMatrixDe\tMatrix Design Group, LLC\n00:1A:58\tCcvDeuts\tCCV Deutschland GmbH - Celectronic eHealth Div.\n00:1A:59\tIrcona\t\n00:1A:5A\tKoreaEle\tKorea Electric Power Data Network  (KDN) Co., Ltd\n00:1A:5B\tNetcareS\tNetCare Service Co., Ltd.\n00:1A:5C\tEuchnerG\tEuchner GmbH+Co. KG\n00:1A:5D\tMobinnov\tMobinnova Corp.\n00:1A:5E\tThincomT\tThincom Technology Co.,Ltd\n00:1A:5F\tKitworks\tKitWorks.fi Ltd.\n00:1A:60\tWaveElec\tWave Electronics Co.,Ltd.\n00:1A:61\tPacstar\tPacStar Corp.\n00:1A:62\tDataRobo\tData Robotics, Incorporated\n00:1A:63\tElsterSo\tElster Solutions, LLC,\n00:1A:64\tIbm\tIBM Corp\n00:1A:65\tSeluxit\t\n00:1A:66\tArrisGro\tARRIS Group, Inc.\n00:1A:67\tInfinite\tInfinite QL Sdn Bhd\n00:1A:68\tWeltecEn\tWeltec Enterprise Co., Ltd.\n00:1A:69\tWuhanYan\tWuhan Yangtze Optical Technology CO.,Ltd.\n00:1A:6A\tTranzas\tTranzas, Inc.\n00:1A:6B\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\n00:1A:6C\tCisco\tCisco Systems, Inc\n00:1A:6D\tCisco\tCisco Systems, Inc\n00:1A:6E\tImproTec\tImpro Technologies\n00:1A:6F\tMiTelSRL\tMI.TEL s.r.l.\n00:1A:70\tCisco-Li\tCisco-Linksys, LLC\n00:1A:71\tDiostech\tDiostech Co., Ltd.\n00:1A:72\tMosartSe\tMosart Semiconductor Corp.\n00:1A:73\tGemtekTe\tGemtek Technology Co., Ltd.\n00:1A:74\tProcareI\tProcare International Co\n00:1A:75\tSonyMobi\tSony Mobile Communications Inc\n00:1A:76\tSdtInfor\tSDT information Technology Co.,LTD.\n00:1A:77\tArrisGro\tARRIS Group, Inc.\n00:1A:78\tUbtos\t\n00:1A:79\tTelecomu\tTelecomunication Technologies Ltd.\n00:1A:7A\tLismoreI\tLismore Instruments Limited\n00:1A:7B\tTeleco\tTeleco, Inc.\n00:1A:7C\tHirschma\tHirschmann Multimedia B.V.\n00:1A:7D\tCyber-Bl\tcyber-blue(HK)Ltd\n00:1A:7E\tLnSritha\tLN Srithai Comm Ltd.\n00:1A:7F\tGciScien\tGCI Science & Technology Co.,LTD\n00:1A:80\tSony\tSony Corporation\n00:1A:81\tZelax\t\n00:1A:82\tProbaBui\tPROBA Building Automation Co.,LTD\n00:1A:83\tPegasusT\tPegasus Technologies Inc.\n00:1A:84\tVOneMult\tV One Multimedia Pte Ltd\n00:1A:85\tNvMichel\tNV Michel Van de Wiele\n00:1A:86\tAdvanced\tAdvancedIO Systems Inc\n00:1A:87\tCanholdI\tCanhold International Limited\n00:1A:88\tVenergy\tVenergy,Co,Ltd\n00:1A:89\tNokiaDan\tNokia Danmark A/S\n00:1A:8A\tSamsungE\tSamsung Electronics Co.,Ltd\n00:1A:8B\tChunilEl\tChunil Electric Ind., Co.\n00:1A:8C\tSophos\tSophos Ltd\n00:1A:8D\tAvecsBer\tAVECS Bergen GmbH\n00:1A:8E\t3wayNetw\t3Way Networks Ltd\n00:1A:8F\tNortelNe\tNortel Networks\n00:1A:90\tTrópicoS\tTrópico Sistemas e Telecomunicações da Amazônia LTDA.\n00:1A:91\tFusiondy\tFusionDynamic Ltd.\n00:1A:92\tAsustekC\tASUSTek COMPUTER INC.\n00:1A:93\tErcoLeuc\tERCO Leuchten GmbH\n00:1A:94\tVotronic\tVotronic GmbH\n00:1A:95\tHisenseM\tHisense Mobile Communications Technoligy Co.,Ltd.\n00:1A:96\tEclerSA\tEcler S.A.\n00:1A:97\tFitivisi\tfitivision technology Inc.\n00:1A:98\tAsotelCo\tAsotel Communication Limited Taiwan Branch\n00:1A:99\tSmartyHz\tSmarty (HZ) Information Electronics Co., Ltd\n00:1A:9A\tSkyworth\tSkyworth Digital Technology(Shenzhen) Co.,Ltd\n00:1A:9B\tAdecPart\tADEC & Parter AG\n00:1A:9C\tRighthan\tRightHand Technologies, Inc.\n00:1A:9D\tSkipperW\tSkipper Wireless, Inc.\n00:1A:9E\tIconDigi\tICON Digital International Limited\n00:1A:9F\tA-Link\tA-Link Ltd\n00:1A:A0\tDell\tDell Inc.\n00:1A:A1\tCisco\tCisco Systems, Inc\n00:1A:A2\tCisco\tCisco Systems, Inc\n00:1A:A3\tDelorme\t\n00:1A:A4\tFutureUn\tFuture University-Hakodate\n00:1A:A5\tBrnPhoen\tBRN Phoenix\n00:1A:A6\tTelefunk\tTelefunken Radio Communication Systems GmbH &CO.KG\n00:1A:A7\tTorianWi\tTorian Wireless\n00:1A:A8\tMamiyaDi\tMamiya Digital Imaging Co., Ltd.\n00:1A:A9\tFujianSt\tFUJIAN STAR-NET COMMUNICATION CO.,LTD\n00:1A:AA\tAnalogic\tAnalogic Corp.\n00:1A:AB\tEwingsSR\teWings s.r.l.\n00:1A:AC\tCorelatu\tCorelatus AB\n00:1A:AD\tArrisGro\tARRIS Group, Inc.\n00:1A:AE\tSavantLl\tSavant Systems LLC\n00:1A:AF\tBlusensT\tBlusens Technology\n00:1A:B0\tSignalNe\tSignal Networks Pvt. Ltd.,\n00:1A:B1\tAsiaPaci\tAsia Pacific Satellite Industries Co., Ltd.\n00:1A:B2\tCyberSol\tCyber Solutions Inc.\n00:1A:B3\tVisionit\tVisionite Inc.\n00:1A:B4\tFfei\tFFEI Ltd.\n00:1A:B5\tHomeNetw\tHome Network System\n00:1A:B6\tTexasIns\tTexas Instruments\n00:1A:B7\tEthosNet\tEthos Networks LTD.\n00:1A:B8\tAnseri\tAnseri Corporation\n00:1A:B9\tPmc\t\n00:1A:BA\tCatonOve\tCaton Overseas Limited\n00:1A:BB\tFontalTe\tFontal Technology Incorporation\n00:1A:BC\tU4eaTech\tU4EA Technologies Ltd\n00:1A:BD\tImpatica\tImpatica Inc.\n00:1A:BE\tComputer\tCOMPUTER HI-TECH INC.\n00:1A:BF\tTrumpfLa\tTRUMPF Laser Marking Systems AG\n00:1A:C0\tJoybienT\tJoybien Technologies Co., Ltd.\n00:1A:C1\t3com\t3Com Ltd\n00:1A:C2\tYec\tYEC Co.,Ltd.\n00:1A:C3\tScientif\tScientific-Atlanta, Inc\n00:1A:C4\t2wire\t2Wire Inc\n00:1A:C5\tKeysight\tKeysight Technologies, Inc.\n00:1A:C6\tMicroCon\tMicro Control Designs\n00:1A:C7\tUnipoint\t\n00:1A:C8\tIslInstr\tISL (Instrumentation Scientifique de Laboratoire)\n00:1A:C9\tSuzuken\tSuzuken Co.,Ltd\n00:1A:CA\tTilera\tTilera Corporation\n00:1A:CB\tAutocomP\tAutocom Products Ltd\n00:1A:CC\tCelestia\tCelestial Semiconductor, Ltd\n00:1A:CD\tTidelEng\tTidel Engineering LP\n00:1A:CE\tYupiteru\tYupiteru Corporation\n00:1A:CF\tCTElettr\tC.T. Elettronica\n00:1A:D0\tAlbisTec\tAlbis Technologies AG\n00:1A:D1\tFargo\tFargo Co., Ltd.\n00:1A:D2\tEletroni\tEletronica Nitron Ltda\n00:1A:D3\tVamp\tVamp Ltd.\n00:1A:D4\tIpoxTech\tiPOX Technology Co., Ltd.\n00:1A:D5\tKmcChain\tKmc Chain Industrial Co., Ltd.\n00:1A:D6\tJiagnsuA\tJiagnsu Aetna Electric Co.,Ltd\n00:1A:D7\tChristie\tChristie Digital Systems, Inc.\n00:1A:D8\tAlsterae\tAlsterAero GmbH\n00:1A:D9\tInternat\tInternational Broadband Electric Communications, Inc.\n00:1A:DA\tBiz-2-Me\tBiz-2-Me Inc.\n00:1A:DB\tArrisGro\tARRIS Group, Inc.\n00:1A:DC\tNokiaDan\tNokia Danmark A/S\n00:1A:DD\tPepwave\tPePWave Ltd\n00:1A:DE\tArrisGro\tARRIS Group, Inc.\n00:1A:DF\tInteract\tInteractivetv Pty Limited\n00:1A:E0\tMytholog\tMythology Tech Express Inc.\n00:1A:E1\tEdgeAcce\tEdge Access Inc\n00:1A:E2\tCisco\tCisco Systems, Inc\n00:1A:E3\tCisco\tCisco Systems, Inc\n00:1A:E4\tMedicisT\tMedicis Technologies Corporation\n00:1A:E5\tMvoxTech\tMvox Technologies Inc.\n00:1A:E6\tAtlantaA\tAtlanta Advanced Communications Holdings Limited\n00:1A:E7\tAztekNet\tAztek Networks, Inc.\n00:1A:E8\tUnifySof\tUnify Software and Solutions GmbH & Co. KG\n00:1A:E9\tNintendo\tNintendo Co., Ltd.\n00:1A:EA\tRadioTer\tRadio Terminal Systems Pty Ltd\n00:1A:EB\tAlliedTe\tAllied Telesis R&D Center K.K.\n00:1A:EC\tKeumbeeE\tKeumbee Electronics Co.,Ltd.\n00:1A:ED\tIncotec\tINCOTEC GmbH\n00:1A:EE\tShenztec\tShenztech Ltd\n00:1A:EF\tLoopcomm\tLoopcomm Technology, Inc.\n00:1A:F0\tAlcatel-\tAlcatel-Lucent IPD\n00:1A:F1\tEmbedded\tEmbedded Artists AB\n00:1A:F2\tDynavisi\tDynavisions Schweiz AG\n00:1A:F3\tSamyoung\tSamyoung Electronics\n00:1A:F4\tHandream\tHandreamnet\n00:1A:F5\tPentaone\tPentaone. Co., Ltd.\n00:1A:F6\tWoven\tWoven Systems, Inc.\n00:1A:F7\tDatascha\tdataschalt e+a GmbH\n00:1A:F8\tCopleyCo\tCopley Controls Corporation\n00:1A:F9\tAeroviro\tAeroVIronment (AV Inc)\n00:1A:FA\tWelchAll\tWelch Allyn, Inc.\n00:1A:FB\tJoby\tJoby Inc.\n00:1A:FC\tModuslin\tModusLink Corporation\n00:1A:FD\tEvolis\t\n00:1A:FE\tSofacrea\tSofacreal\n00:1A:FF\tWizyoung\tWizyoung Tech.\n00:1B:00\tNeopostT\tNeopost Technologies\n00:1B:01\tAppliedR\tApplied Radio Technologies\n00:1B:02\tEd\tED Co.Ltd\n00:1B:03\tActionTe\tAction Technology (SZ) Co., Ltd\n00:1B:04\tAffinity\tAffinity International S.p.a\n00:1B:05\tYmc\tYmc Ag\n00:1B:06\tAteliers\tAteliers R. LAUMONIER\n00:1B:07\tMendocin\tMendocino Software\n00:1B:08\tDanfossD\tDanfoss Drives A/S\n00:1B:09\tMatrixTe\tMatrix Telecom Pvt. Ltd.\n00:1B:0A\tIntellig\tIntelligent Distributed Controls Ltd\n00:1B:0B\tPhidgets\tPhidgets Inc.\n00:1B:0C\tCisco\tCisco Systems, Inc\n00:1B:0D\tCisco\tCisco Systems, Inc\n00:1B:0E\tInotecOr\tInoTec GmbH Organisationssysteme\n00:1B:0F\tPetratec\t\n00:1B:10\tShenzhen\tShenZhen Kang Hui Technology Co.,ltd\n00:1B:11\tD-Link\tD-Link Corporation\n00:1B:12\tApprion\t\n00:1B:13\tIcronTec\tIcron Technologies Corporation\n00:1B:14\tCarexLig\tCarex Lighting Equipment Factory\n00:1B:15\tVoxtel\tVoxtel, Inc.\n00:1B:16\tCeltro\tCeltro Ltd.\n00:1B:17\tPaloAlto\tPalo Alto Networks\n00:1B:18\tTsukenEl\tTsuken Electric Ind. Co.,Ltd\n00:1B:19\tIeeeI&MS\tIEEE I&M Society TC9\n00:1B:1A\tE-TreesJ\te-trees Japan, Inc.\n00:1B:1B\tSiemens\tSiemens AG,\n00:1B:1C\tCoherent\t\n00:1B:1D\tPhoenixI\tPhoenix International Co., Ltd\n00:1B:1E\tHartComm\tHART Communication Foundation\n00:1B:1F\tDelta-Da\tDELTA - Danish Electronics, Light & Acoustics\n00:1B:20\tTpineTec\tTPine Technology\n00:1B:21\tIntelCor\tIntel Corporate\n00:1B:22\tPalitMic\tPalit Microsystems ( H.K.) Ltd.\n00:1B:23\tSimpleco\tSimpleComTools\n00:1B:24\tQuantaCo\tQuanta Computer Inc.\n00:1B:25\tNortelNe\tNortel Networks\n00:1B:26\tRon-Tele\tRON-Telecom ZAO\n00:1B:27\tMerlinCs\tMerlin CSI\n00:1B:28\tPolygonJ\tPolygon, Jsc\n00:1B:29\tAvantis\tAvantis.Co.,Ltd\n00:1B:2A\tCisco\tCisco Systems, Inc\n00:1B:2B\tCisco\tCisco Systems, Inc\n00:1B:2C\tAtronEle\tATRON electronic GmbH\n00:1B:2D\tMed-Eng\tMed-Eng Systems Inc.\n00:1B:2E\tSinkyoEl\tSinkyo Electron Inc\n00:1B:2F\tNetgear\t\n00:1B:30\tSolitech\tSolitech Inc.\n00:1B:31\tNeuralIm\tNeural Image. Co. Ltd.\n00:1B:32\tQlogic\tQLogic Corporation\n00:1B:33\tNokiaDan\tNokia Danmark A/S\n00:1B:34\tFocusSys\tFocus System Inc.\n00:1B:35\tChongqin\tChongQing JINOU Science & Technology Development CO.,Ltd\n00:1B:36\tTsubataE\tTsubata Engineering Co.,Ltd. (Head Office)\n00:1B:37\tComputec\tComputec Oy\n00:1B:38\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\n00:1B:39\tProxicas\tProxicast\n00:1B:3A\tSims\tSIMS Corp.\n00:1B:3B\tYi-Qing\tYi-Qing CO., LTD\n00:1B:3C\tSoftware\tSoftware Technologies Group,Inc.\n00:1B:3D\tEurotel\tEuroTel Spa\n00:1B:3E\tCurtis\tCurtis, Inc.\n00:1B:3F\tProcurve\tProCurve Networking by HP\n00:1B:40\tNetworkA\tNetwork Automation mxc AB\n00:1B:41\tGeneralI\tGeneral Infinity Co.,Ltd.\n00:1B:42\tWiseBlue\tWise & Blue\n00:1B:43\tBeijingD\tBeijing DG Telecommunications equipment Co.,Ltd\n00:1B:44\tSandisk\tSanDisk Corporation\n00:1B:45\tAbbAsDiv\tABB AS, Division Automation Products\n00:1B:46\tBlueoneT\tBlueone Technology Co.,Ltd\n00:1B:47\tFutarque\tFutarque A/S\n00:1B:48\tShenzhen\tShenzhen Lantech Electronics Co., Ltd.\n00:1B:49\tRobertsR\tRoberts Radio limited\n00:1B:4A\tW&WCommu\tW&W Communications, Inc.\n00:1B:4B\tSanion\tSANION Co., Ltd.\n00:1B:4C\tSigntech\t\n00:1B:4D\tArecaTec\tAreca Technology Corporation\n00:1B:4E\tNavmanNe\tNavman New Zealand\n00:1B:4F\tAvaya\tAvaya Inc\n00:1B:50\tNizhnyNo\tNizhny Novgorod Factory named after M.Frunze, FSUE (NZiF)\n00:1B:51\tVectorTe\tVector Technology Corp.\n00:1B:52\tArrisGro\tARRIS Group, Inc.\n00:1B:53\tCisco\tCisco Systems, Inc\n00:1B:54\tCisco\tCisco Systems, Inc\n00:1B:55\tHurcoAut\tHurco Automation Ltd.\n00:1B:56\tTehutiNe\tTehuti Networks Ltd.\n00:1B:57\tSemindia\tSemindia Systems Private Limited\n00:1B:58\tAceCadEn\tACE CAD Enterprise Co., Ltd.\n00:1B:59\tSonyMobi\tSony Mobile Communications Inc\n00:1B:5A\tApolloIm\tApollo Imaging Technologies, Inc.\n00:1B:5B\t2wire\t2Wire Inc\n00:1B:5C\tAzuretec\tAzuretec Co., Ltd.\n00:1B:5D\tVololink\tVololink Pty Ltd\n00:1B:5E\tBpl\tBPL Limited\n00:1B:5F\tAlienTec\tAlien Technology\n00:1B:60\tNavigon\tNavigon Ag\n00:1B:61\tDigitalA\tDigital Acoustics, LLC\n00:1B:62\tJhtOptoe\tJHT Optoelectronics Co.,Ltd.\n00:1B:63\tApple\tApple, Inc.\n00:1B:64\tIsaaclan\tIsaacLandKorea Co., Ltd,\n00:1B:65\tChinaGri\tChina Gridcom Co., Ltd\n00:1B:66\tSennheis\tSennheiser electronic GmbH & Co. KG\n00:1B:67\tCisco\tCisco Systems Inc\n00:1B:68\tModnnet\tModnnet Co., Ltd\n00:1B:69\tEqualine\tEqualine Corporation\n00:1B:6A\tPowerwav\tPowerwave Technologies Sweden AB\n00:1B:6B\tSwyxSolu\tSwyx Solutions AG\n00:1B:6C\tLookxDig\tLookX Digital Media BV\n00:1B:6D\tMidtroni\tMidtronics, Inc.\n00:1B:6E\tKeysight\tKeysight Technologies, Inc.\n00:1B:6F\tTeletrak\tTeletrak Ltd\n00:1B:70\tIriUbite\tIRI Ubiteq, INC.\n00:1B:71\tTelular\tTelular Corp.\n00:1B:72\tSicepSPA\tSicep s.p.a.\n00:1B:73\tDtlBroad\tDTL Broadcast Ltd\n00:1B:74\tMiralink\tMiraLink Corporation\n00:1B:75\tHypermed\tHypermedia Systems\n00:1B:76\tRipcode\tRipcode, Inc.\n00:1B:77\tIntelCor\tIntel Corporate\n00:1B:78\tHewlettP\tHewlett Packard\n00:1B:79\tFaiveley\tFaiveley Transport\n00:1B:7A\tNintendo\tNintendo Co., Ltd.\n00:1B:7B\tTintomet\tThe Tintometer Ltd\n00:1B:7C\tARCambri\tA & R Cambridge\n00:1B:7D\tCxrAnder\tCXR Anderson Jacobson\n00:1B:7E\tBeckmann\tBeckmann GmbH\n00:1B:7F\tTmnTechn\tTMN Technologies Telecomunicacoes Ltda\n00:1B:80\tLord\tLORD Corporation\n00:1B:81\tDataqIns\tDATAQ Instruments, Inc.\n00:1B:82\tTaiwanSe\tTaiwan Semiconductor Co., Ltd.\n00:1B:83\tFinsoft\tFinsoft Ltd\n00:1B:84\tScanEngi\tScan Engineering Telecom\n00:1B:85\tManDiese\tMAN Diesel SE\n00:1B:86\tBoschAcc\tBosch Access Systems GmbH\n00:1B:87\tDeepsoun\tDeepsound Tech. Co., Ltd\n00:1B:88\tDivinetA\tDivinet Access Technologies Ltd\n00:1B:89\tEmzaVisu\tEMZA Visual Sense Ltd.\n00:1B:8A\t2mElectr\t2M Electronic A/S\n00:1B:8B\tNecPlatf\tNEC Platforms, Ltd.\n00:1B:8C\tJmicronT\tJMicron Technology Corp.\n00:1B:8D\tElectron\tElectronic Computer Systems, Inc.\n00:1B:8E\tHuluSwed\tHulu Sweden AB\n00:1B:8F\tCisco\tCisco Systems, Inc\n00:1B:90\tCisco\tCisco Systems, Inc\n00:1B:91\tEfkon\tEfkon Ag\n00:1B:92\tL-Acoust\tl-acoustics\n00:1B:93\tJcDecaux\tJC Decaux SA DNT\n00:1B:94\tTEMASPA\tT.E.M.A. S.p.A.\n00:1B:95\tVideoSrl\tVideo Systems Srl\n00:1B:96\tGeneralS\tGeneral Sensing\n00:1B:97\tViolinTe\tViolin Technologies\n00:1B:98\tSamsungE\tSamsung Electronics Co.,Ltd\n00:1B:99\tKsSystem\tKS System GmbH\n00:1B:9A\tApolloFi\tApollo Fire Detectors Ltd\n00:1B:9B\tHose-Mcc\tHose-McCann Communications\n00:1B:9C\tSatelSpZ\tSATEL sp. z o.o.\n00:1B:9D\tNovusSec\tNovus Security Sp. z o.o.\n00:1B:9E\tAskeyCom\tAskey Computer Corp\n00:1B:9F\tCalyptec\tCalyptech Pty Ltd\n00:1B:A0\tAwox\t\n00:1B:A1\tÅmic\tÅmic AB\n00:1B:A2\tIdsImagi\tIDS Imaging Development Systems GmbH\n00:1B:A3\tFlexitGr\tFlexit Group GmbH\n00:1B:A4\tSAEAfiki\tS.A.E Afikim\n00:1B:A5\tMyungmin\tMyungMin Systems, Inc.\n00:1B:A6\tIntotech\tintotech inc.\n00:1B:A7\tLoricaSo\tLorica Solutions\n00:1B:A8\tUbi&Mobi\tUBI&MOBI,.Inc\n00:1B:A9\tBrotherI\tBrother industries, LTD.\n00:1B:AA\tXenicsNv\tXenICs nv\n00:1B:AB\tTelchemy\tTelchemy, Incorporated\n00:1B:AC\tCurtissW\tCurtiss Wright Controls Embedded Computing\n00:1B:AD\tIcontrol\tiControl Incorporated\n00:1B:AE\tMicroCon\tMicro Control Systems, Inc\n00:1B:AF\tNokiaDan\tNokia Danmark A/S\n00:1B:B0\tBharatEl\tBharat Electronics\n00:1B:B1\tWistronN\tWistron Neweb Corporation\n00:1B:B2\tIntellec\tIntellect International NV\n00:1B:B3\tCondalo\tCondalo GmbH\n00:1B:B4\tAirvod\tAirvod Limited\n00:1B:B5\tCherry\tCherry GmbH\n00:1B:B6\tBirdElec\tBird Electronic Corp.\n00:1B:B7\tAltaHeig\tAlta Heights Technology Corp.\n00:1B:B8\tBluewayE\tBLUEWAY ELECTRONIC CO;LTD\n00:1B:B9\tElitegro\tElitegroup Computer Systems Co.,Ltd.\n00:1B:BA\tNortelNe\tNortel Networks\n00:1B:BB\tRftech\tRFTech Co.,Ltd\n00:1B:BC\tSilverPe\tSilver Peak Systems, Inc.\n00:1B:BD\tFmcKongs\tFMC Kongsberg Subsea AS\n00:1B:BE\tIcopDigi\tICOP Digital\n00:1B:BF\tSagemcom\tSagemcom Broadband SAS\n00:1B:C0\tJuniperN\tJuniper Networks\n00:1B:C1\tHoluxTec\tHOLUX Technology, Inc.\n00:1B:C2\tIntegrat\tIntegrated Control Technology Limitied\n00:1B:C3\tMobisolu\tMobisolution Co.,Ltd\n00:1B:C4\tUltratec\tUltratec, Inc.\n00:1B:C5\tIeeeRegi\tIEEE Registration Authority\n00:1B:C5:00:00:00/36\tConvergi\tConverging Systems Inc.\n00:1B:C5:00:10:00/36\tOpenrbCo\tOpenRB.com, Direct SIA\n00:1B:C5:00:20:00/36\tGoramo-J\tGORAMO - Janusz Gorecki\n00:1B:C5:00:30:00/36\tMicrosig\tMicroSigns Technologies Inc\n00:1B:C5:00:40:00/36\tIntellvi\tIntellvisions Software Ltd\n00:1B:C5:00:50:00/36\tPrivate\t\n00:1B:C5:00:60:00/36\tTriax-Hi\tTRIAX-HIRSCHMANN Multi-Media GmbH\n00:1B:C5:00:70:00/36\tEnergyAw\tEnergy Aware Technology\n00:1B:C5:00:80:00/36\tDalajEle\tDalaj Electro-Telecom\n00:1B:C5:00:90:00/36\tSolomonS\tSolomon Systech Pte Ltd\n00:1B:C5:00:A0:00/36\tMercuryH\tMercury HMI Ltd\n00:1B:C5:00:B0:00/36\tPrivate\t\n00:1B:C5:00:C0:00/36\tQuantumT\tQuantum Technology Sciences, Inc.\n00:1B:C5:00:D0:00/36\tAdvanced\tAdvanced Scientific Concepts, Inc.\n00:1B:C5:00:E0:00/36\tVigorEle\tVigor Electric Corp\n00:1B:C5:00:F0:00/36\tSimavita\tSimavita Pty Ltd\n00:1B:C5:01:00:00/36\tSoftelSa\tSoftel SA de CV\n00:1B:C5:01:10:00/36\tOooNppMe\tOOO NPP Mera\n00:1B:C5:01:20:00/36\tTokyoCos\tTokyo Cosmos Electric, Inc.\n00:1B:C5:01:30:00/36\tZamirRec\tZamir Recognition Systems Ltd.\n00:1B:C5:01:40:00/36\tPrivate\t\n00:1B:C5:01:50:00/36\tPrivate\t\n00:1B:C5:01:60:00/36\tEnergote\tEnergotechnica OOO NPP Ltd\n00:1B:C5:01:70:00/36\tCpacketN\tcPacket Networks\n00:1B:C5:01:90:00/36\tDunlopCo\tDunlop Systems & Components\n00:1B:C5:01:A0:00/36\tAbaElect\tAba Electronics Technology Co.,Ltd\n00:1B:C5:01:B0:00/36\tCommonwe\tCommonwealth Scientific and Industrial  Research Organisation\n00:1B:C5:01:C0:00/36\tCoolit\tCoolit Systems, Inc.\n00:1B:C5:01:D0:00/36\tRose+Her\tRose + Herleth GbR\n00:1B:C5:01:E0:00/36\tPrivate\t\n00:1B:C5:01:F0:00/36\tSaturnSo\tSaturn Solutions Ltd\n00:1B:C5:02:00:00/36\tMomentum\tMomentum Data Systems\n00:1B:C5:02:10:00/36\tOpenpeak\tOpenpeak, Inc\n00:1B:C5:02:20:00/36\tCjscStcS\tCjsc Stc Simos\n00:1B:C5:02:30:00/36\tMagoDiDe\tMAGO di Della Mora Walter\n00:1B:C5:02:40:00/36\tAnnecyEl\tAnnecy Electronique Sas\n00:1B:C5:02:50:00/36\tAndersen\tandersen lighting GmbH\n00:1B:C5:02:60:00/36\tDimepSis\tDIMEP Sistemas\n00:1B:C5:02:70:00/36\tCameaSpo\tCAMEA, spol. s r.o.\n00:1B:C5:02:80:00/36\tStechwin\tStechwin.Co.Ltd.\n00:1B:C5:02:90:00/36\t2FranceM\t2 FRANCE MARINE\n00:1B:C5:02:A0:00/36\tAnalytic\tAnalytical Instrument Systems, Inc.\n00:1B:C5:02:B0:00/36\tSaturnSo\tSaturn South Pty Ltd\n00:1B:C5:02:C0:00/36\tCareEver\tCare Everywhere LLC\n00:1B:C5:02:D0:00/36\tDdtronik\tDDTRONIK Dariusz Dowgiert\n00:1B:C5:02:E0:00/36\tBettiniS\tBettini Srl\n00:1B:C5:02:F0:00/36\tFibrain\tFibrain Co. Ltd.\n00:1B:C5:03:00:00/36\tOctogate\tOctoGate it Security Systems GmbH\n00:1B:C5:03:10:00/36\tAdixein\tAdixein Limited\n00:1B:C5:03:20:00/36\tOsborneC\tOsborne Coinage Co\n00:1B:C5:03:30:00/36\tJeSuunni\tJE Suunnittelu Oy\n00:1B:C5:03:40:00/36\tIntercel\tInterCEL Pty Ltd\n00:1B:C5:03:50:00/36\tRtls\tRTLS Ltd.\n00:1B:C5:03:60:00/36\tLomarSrl\tLomar Srl\n00:1B:C5:03:70:00/36\tItwReyfl\tITW Reyflex North America\n00:1B:C5:03:80:00/36\tSeedInte\tSEED International Ltd.\n00:1B:C5:03:90:00/36\tEuresysS\tEuresys S.A.\n00:1B:C5:03:A0:00/36\tMindmade\tMindMade Sp. z o.o.\n00:1B:C5:03:B0:00/36\tPromixis\tPromixis, LLC\n00:1B:C5:03:C0:00/36\tXiphos\tXiphos Systems Corp.\n00:1B:C5:03:D0:00/36\tRioxo\trioxo GmbH\n00:1B:C5:03:E0:00/36\tDaylight\tDaylight  Solutions, Inc\n00:1B:C5:03:F0:00/36\tEltrade\tELTRADE Ltd\n00:1B:C5:04:00:00/36\tOooActid\tOOO Actidata\n00:1B:C5:04:10:00/36\tDesignaE\tDesignA Electronics Limited\n00:1B:C5:04:20:00/36\tChamsys\tChamSys Ltd\n00:1B:C5:04:30:00/36\tCoincide\tCoincident, Inc.\n00:1B:C5:04:40:00/36\tZao&Quot\tZAO &quot;RADIUS Avtomatika&quot;\n00:1B:C5:04:50:00/36\tMarvelDi\tMarvel Digital International Limited\n00:1B:C5:04:60:00/36\tGéant\t\n00:1B:C5:04:70:00/36\tPtAmanin\tPT. Amanindo Nusapadu\n00:1B:C5:04:80:00/36\tXpossibl\tXPossible Technologies Pte Ltd\n00:1B:C5:04:90:00/36\tEurocont\tEUROCONTROL S.p.A.\n00:1B:C5:04:A0:00/36\tCertisTe\tCertis Technology International Pte Ltd\n00:1B:C5:04:B0:00/36\tSiliconC\tSilicon Controls\n00:1B:C5:04:C0:00/36\tRhinoCon\tRhino Controls Ltd.\n00:1B:C5:04:D0:00/36\tEirakuEl\teiraku electric corp.\n00:1B:C5:04:E0:00/36\tMitsubis\tMitsubishi Electric India PVT. LTD\n00:1B:C5:04:F0:00/36\tOrbital\tOrbital Systems, Ltd.\n00:1B:C5:05:00:00/36\tTeliswit\tTeliSwitch Solutions\n00:1B:C5:05:10:00/36\tQqNaviga\tQQ Navigation AB\n00:1B:C5:05:20:00/36\tEngineer\tEngineering Center ENERGOSERVICE\n00:1B:C5:05:30:00/36\tMetrycom\tMetrycom Communications Ltd\n00:1B:C5:05:40:00/36\tPrivate\t\n00:1B:C5:05:50:00/36\tLumiplan\tLumiplan Transport\n00:1B:C5:05:60:00/36\tThinkomS\tThinKom Solutions, Inc\n00:1B:C5:05:70:00/36\tEreeElec\tEREE Electronique\n00:1B:C5:05:80:00/36\tOptimeas\toptiMEAS GmbH\n00:1B:C5:05:90:00/36\tInpixal\t\n00:1B:C5:05:A0:00/36\tPostecDa\tPostec Data Systems\n00:1B:C5:05:B0:00/36\tKonzeptp\tkonzeptpark GmbH\n00:1B:C5:05:C0:00/36\tSuretrak\tSuretrak Global Pty Ltd\n00:1B:C5:05:D0:00/36\tJscPromi\tJSC Prominform\n00:1B:C5:05:E0:00/36\tEcomed-C\tEcomed-Complex\n00:1B:C5:05:F0:00/36\tKlingent\tKlingenthaler Musikelektronik GmbH\n00:1B:C5:06:00:00/36\tEnstech\t\n00:1B:C5:06:10:00/36\tScientif\tScientific-Technical Center Epsilon Limited company\n00:1B:C5:06:20:00/36\tSulaonOy\tSulaon Oy\n00:1B:C5:06:30:00/36\tCheck-It\tCheck-It Solutions Inc\n00:1B:C5:06:40:00/36\tEnkoraOy\tEnkora Oy Ltd\n00:1B:C5:06:50:00/36\tPlairMed\tPlair Media Inc.\n00:1B:C5:06:60:00/36\tManufact\tManufacturas y transformados AB\n00:1B:C5:06:70:00/36\tEmbitSrl\tEmbit srl\n00:1B:C5:06:80:00/36\tHcsKablo\tHCS KABLOLAMA SISTEMLERI SAN. ve TIC.A.S.\n00:1B:C5:06:90:00/36\tDatasatD\tDatasat Digital Entertainment\n00:1B:C5:06:A0:00/36\tIst\tIST GmbH\n00:1B:C5:06:B0:00/36\tVerified\tVerified Energy, LLC.\n00:1B:C5:06:C0:00/36\tLuxconSy\tLuxcon System Limited\n00:1B:C5:06:D0:00/36\tTesElect\tTES Electronic Solutions (I) Pvt. Ltd.\n00:1B:C5:06:E0:00/36\tTwoDimen\tTwo Dimensional Instruments, LLC\n00:1B:C5:06:F0:00/36\tLlcEmzio\tLLC Emzior\n00:1B:C5:07:00:00/36\tSiemensI\tSiemens Industries, Inc, Retail & Commercial Systems\n00:1B:C5:07:10:00/36\tCenterFo\tCenter for E-Commerce Infrastructure Development, The University of Hong Kong\n00:1B:C5:07:20:00/36\tOhioSemi\tOhio Semitronics, Inc.\n00:1B:C5:07:30:00/36\tTado\ttado GmbH\n00:1B:C5:07:40:00/36\tDynasthe\tDynasthetics\n00:1B:C5:07:50:00/36\tKitron\tKitron GmbH\n00:1B:C5:07:60:00/36\tPlairMed\tPLAiR Media, Inc\n00:1B:C5:07:70:00/36\tMomentum\tMomentum Data Systems\n00:1B:C5:07:80:00/36\tDonbassS\tDonbass Soft Ltd and Co.KG\n00:1B:C5:07:90:00/36\tHpiHighP\tHPI High Pressure Instrumentation GmbH\n00:1B:C5:07:A0:00/36\tServicio\tServicios Electronicos Industriales Berbel s.l.\n00:1B:C5:07:B0:00/36\tQcoreMed\tQCORE Medical\n00:1B:C5:07:C0:00/36\tHead\t\n00:1B:C5:07:D0:00/36\tGreatcom\tGreatcom AG\n00:1B:C5:07:E0:00/36\tBioMolec\tBio Molecular System Pty Ltd\n00:1B:C5:07:F0:00/36\tHitechla\tHitechlab Inc\n00:1B:C5:08:00:00/36\tLumino\tLUMINO GmbH\n00:1B:C5:08:10:00/36\tWonatech\tWonATech Co., Ltd.\n00:1B:C5:08:20:00/36\tTgsGeoph\tTGS Geophysical Company (UK) Limited\n00:1B:C5:08:30:00/36\tDiwel\t\n00:1B:C5:08:40:00/36\tAppliedI\tApplied Innovations Research LLC\n00:1B:C5:08:50:00/36\tOberonMi\tOberon microsystems, Inc.\n00:1B:C5:08:60:00/36\tCastGrou\tCAST Group of Companies Inc.\n00:1B:C5:08:70:00/36\tOnnetTec\tOnnet Technologies and Innovations LLC\n00:1B:C5:08:80:00/36\tUabKitro\tUAB Kitron\n00:1B:C5:08:90:00/36\tSignatur\tSignature Control Systems, Inc.\n00:1B:C5:08:A0:00/36\tTopicon\t\n00:1B:C5:08:B0:00/36\tNistica\t\n00:1B:C5:08:C0:00/36\tTriax\tTriax A/S\n00:1B:C5:08:D0:00/36\tEurekSrl\tEurek Srl\n00:1B:C5:08:E0:00/36\tTrendpoi\tTrendPoint Systems\n00:1B:C5:08:F0:00/36\tUnilever\tUnilever R&amp;D\n00:1B:C5:09:00:00/36\tSevenSol\tSeven Solutions S.L\n00:1B:C5:09:10:00/36\t3greenAp\t3green ApS\n00:1B:C5:09:20:00/36\tArnouseD\tArnouse Digital Devices, Corp.\n00:1B:C5:09:30:00/36\tAmbientD\tAmbient Devices, Inc.\n00:1B:C5:09:40:00/36\tReelyact\treelyActive\n00:1B:C5:09:50:00/36\tPrevacSp\tPREVAC sp. z o.o.\n00:1B:C5:09:60:00/36\tSanstrea\tSanstreak Corp.\n00:1B:C5:09:70:00/36\tPlexstar\tPlexstar Inc.\n00:1B:C5:09:80:00/36\tCubic\tCubic Systems, Inc.\n00:1B:C5:09:90:00/36\tUabKitro\tUAB Kitron\n00:1B:C5:09:A0:00/36\tShenzhen\tShenzhen Guang Lian Zhi Tong Limited\n00:1B:C5:09:B0:00/36\tYik\tYIK Corporation\n00:1B:C5:09:C0:00/36\tSICESSrl\tS.I.C.E.S. srl\n00:1B:C5:09:D0:00/36\tNavitar\tNavitar Inc\n00:1B:C5:09:E0:00/36\tK+KMesst\tK+K Messtechnik GmbH\n00:1B:C5:09:F0:00/36\tEnteSpZO\tENTE Sp. z o.o.\n00:1B:C5:0A:00:00/36\tHomersof\tHomerSoft sp. z o.o.\n00:1B:C5:0A:10:00/36\tHangzhou\tHangzhou Zhiping Technology Co., Ltd.\n00:1B:C5:0A:20:00/36\tHettichB\tHettich Benelux\n00:1B:C5:0A:30:00/36\tPANetwor\tP A Network Laboratory Co.,Ltd\n00:1B:C5:0A:40:00/36\tRadmorSA\tRadmor S.A.\n00:1B:C5:0A:50:00/36\tTeslaCon\tTesla Controls\n00:1B:C5:0A:60:00/36\tBalterSe\tBalter Security GmbH\n00:1B:C5:0A:70:00/36\tLGLElect\tL.G.L. Electronics S.p.a.\n00:1B:C5:0A:80:00/36\tLinkPrec\tLink Precision\n00:1B:C5:0A:90:00/36\tElektrom\tElektrometal SA\n00:1B:C5:0A:A0:00/36\tSenceive\tSenceive Ltd\n00:1B:C5:0A:B0:00/36\tPrivate\t\n00:1B:C5:0A:C0:00/36\tAvnuAlli\tAVnu Alliance\n00:1B:C5:0A:D0:00/36\tTierraJa\tTierra Japan Co.,Ltd\n00:1B:C5:0A:E0:00/36\tTechlanR\tTechlan Reti s.r.l.\n00:1B:C5:0A:F0:00/36\tEnerwise\tEnerwise Solutions Ltd.\n00:1B:C5:0B:00:00/36\tJ-DCom\tJ-D.COM\n00:1B:C5:0B:10:00/36\tRoslenEc\tRoslen Eco-Networking Products\n00:1B:C5:0B:20:00/36\tSkodaEle\tSKODA ELECTRIC a.s.\n00:1B:C5:0B:30:00/36\tFsmSolut\tFSM Solutions Limited\n00:1B:C5:0B:40:00/36\tCobanSrl\tCoban Srl\n00:1B:C5:0B:50:00/36\tExibea\tExibea AB\n00:1B:C5:0B:60:00/36\tVeilux\tVeilux inc.\n00:1B:C5:0B:70:00/36\tAutelisL\tAutelis, LLC\n00:1B:C5:0B:80:00/36\tPrivate\t\n00:1B:C5:0B:90:00/36\tDenkiKog\tDenki Kogyo Company, Limited\n00:1B:C5:0B:A0:00/36\tNtMicros\tNt Microsystems\n00:1B:C5:0B:B0:00/36\tTriax\tTriax A/S\n00:1B:C5:0B:C0:00/36\tKuwatec\tkuwatec, Inc.\n00:1B:C5:0B:D0:00/36\tBridgeDi\tBridge Diagnostics, Inc.\n00:1B:C5:0B:E0:00/36\tYespayIn\tYESpay International Ltd\n00:1B:C5:0B:F0:00/36\tTnCore\tTN Core Co.,Ltd.\n00:1B:C5:0C:00:00/36\tDigitalL\tDigital Loggers, Inc.\n00:1B:C5:0C:10:00/36\tEreeElec\tEREE Electronique\n00:1B:C5:0C:20:00/36\tTechsolu\tTechSolutions A/S\n00:1B:C5:0C:30:00/36\tInomatic\tinomatic GmbH\n00:1B:C5:0C:40:00/36\tEldes\t\n00:1B:C5:0C:50:00/36\tGillInst\tGill Instruments Ltd\n00:1B:C5:0C:60:00/36\tConnode\t\n00:1B:C5:0C:70:00/36\tWizzilab\tWizzilab Sas\n00:1B:C5:0C:80:00/36\tDialine\t\n00:1B:C5:0C:90:00/36\tUabKitro\tUAB Kitron\n00:1B:C6\tStratoRe\tStrato Rechenzentrum AG\n00:1B:C7\tStarvedi\tStarVedia Technology Inc.\n00:1B:C8\tMiura\tMiura Co.,Ltd\n00:1B:C9\tFsnDispl\tFsn Display Inc\n00:1B:CA\tBeijingR\tBeijing Run Technology LTD. Company\n00:1B:CB\tPempekPt\tPempek Systems Pty Ltd\n00:1B:CC\tKingtekC\tKingtek Cctv Alliance Co., Ltd.\n00:1B:CD\tDaviscom\tDAVISCOMMS (S) PTE LTD\n00:1B:CE\tMeasurem\tMeasurement Devices Ltd\n00:1B:CF\tDataupia\tDataupia Corporation\n00:1B:D0\tIdentecS\tIdentec Solutions\n00:1B:D1\tSogestma\tSogestmatic\n00:1B:D2\tUltra-XA\tULTRA-X ASIA PACIFIC Inc.\n00:1B:D3\tPanasoni\tPanasonic Corporation AVC Networks Company\n00:1B:D4\tCisco\tCisco Systems, Inc\n00:1B:D5\tCisco\tCisco Systems, Inc\n00:1B:D6\tKelvinHu\tKelvin Hughes Ltd\n00:1B:D7\tCiscoSpv\tCisco SPVTG\n00:1B:D8\tFlir\tFLIR Systems Inc\n00:1B:D9\tEdgewate\tEdgewater Wireless Systems Inc\n00:1B:DA\tUtstarco\tUTStarcom Inc\n00:1B:DB\tValeoVec\tValeo VECS\n00:1B:DC\tVencer\tVencer Co., Ltd.\n00:1B:DD\tArrisGro\tARRIS Group, Inc.\n00:1B:DE\tRenkus-H\tRenkus-Heinz, Inc.\n00:1B:DF\tIskraSis\tIskra Sistemi d.d.\n00:1B:E0\tTelenotE\tTELENOT ELECTRONIC GmbH\n00:1B:E1\tVialogy\t\n00:1B:E2\tAhnlab\tAhnLab,Inc.\n00:1B:E3\tHealthHe\tHealth Hero Network, Inc.\n00:1B:E4\tTownetSr\tTownet Srl\n00:1B:E5\t802autom\t802automation Limited\n00:1B:E6\tVr\tVr Ag\n00:1B:E7\tPostekEl\tPostek Electronics Co., Ltd.\n00:1B:E8\tUltratro\tUltratronik GmbH\n00:1B:E9\tBroadcom\t\n00:1B:EA\tNintendo\tNintendo Co., Ltd.\n00:1B:EB\tDmpElect\tDMP Electronics INC.\n00:1B:EC\tNetioTec\tNetio Technologies Co., Ltd\n00:1B:ED\tBrocadeC\tBrocade Communications Systems, Inc.\n00:1B:EE\tNokiaDan\tNokia Danmark A/S\n00:1B:EF\tBlossoms\tBlossoms Digital Technology Co.,Ltd.\n00:1B:F0\tValuePla\tValue Platforms Limited\n00:1B:F1\tNanjingS\tNanjing SilverNet Software Co., Ltd.\n00:1B:F2\tKworldCo\tKworld Computer Co., Ltd\n00:1B:F3\tTransrad\tTRANSRADIO SenderSysteme Berlin AG\n00:1B:F4\tKenwinIn\tKENWIN INDUSTRIAL(HK) LTD.\n00:1B:F5\tTellinkS\tTellink Sistemas de Telecomunicación S.L.\n00:1B:F6\tConwiseT\tCONWISE Technology Corporation Ltd.\n00:1B:F7\tLundIpPr\tLund IP Products AB\n00:1B:F8\tDigitrax\tDigitrax Inc.\n00:1B:F9\tIntellit\tIntellitect Water Ltd\n00:1B:FA\tGINMbh\tG.i.N. mbH\n00:1B:FB\tAlpsElec\tAlps Electric Co.,Ltd.\n00:1B:FC\tAsustekC\tASUSTek COMPUTER INC.\n00:1B:FD\tDignsys\tDignsys Inc.\n00:1B:FE\tZavio\tZavio Inc.\n00:1B:FF\tMillenni\tMillennia Media inc.\n00:1C:00\tEntryPoi\tEntry Point, LLC\n00:1C:01\tAbbOyDri\tABB Oy Drives\n00:1C:02\tPanoLogi\tPano Logic\n00:1C:03\tBettyTvT\tBetty TV Technology AG\n00:1C:04\tAirgain\tAirgain, Inc.\n00:1C:05\tNoninMed\tNonin Medical Inc.\n00:1C:06\tSiemensN\tSiemens Numerical Control Ltd., Nanjing\n00:1C:07\tCwlinux\tCwlinux Limited\n00:1C:08\tEcho360\tEcho360, Inc.\n00:1C:09\tSaeElect\tSAE Electronic Co.,Ltd.\n00:1C:0A\tShenzhen\tShenzhen AEE Technology Co.,Ltd.\n00:1C:0B\tSmartant\tSmartAnt Telecom\n00:1C:0C\tTanita\tTANITA Corporation\n00:1C:0D\tG-Techno\tG-Technology, Inc.\n00:1C:0E\tCisco\tCisco Systems, Inc\n00:1C:0F\tCisco\tCisco Systems, Inc\n00:1C:10\tCisco-Li\tCisco-Linksys, LLC\n00:1C:11\tArrisGro\tARRIS Group, Inc.\n00:1C:12\tArrisGro\tARRIS Group, Inc.\n00:1C:13\tOptsysTe\tOptsys Technology Co., Ltd.\n00:1C:14\tVmware\tVMware, Inc.\n00:1C:15\tIphotoni\tiPhotonix LLC\n00:1C:16\tThyssenk\tThyssenKrupp Elevator\n00:1C:17\tNortelNe\tNortel Networks\n00:1C:18\tSicertSR\tSicert S.r.L.\n00:1C:19\tSecunetS\tsecunet Security Networks AG\n00:1C:1A\tThomasIn\tThomas Instrumentation, Inc\n00:1C:1B\tHypersto\tHyperstone GmbH\n00:1C:1C\tCenterCo\tCenter Communication Systems GmbH\n00:1C:1D\tChenzhou\tChenzhou Gospell Digital Technology Co.,Ltd\n00:1C:1E\tEmtrion\temtrion GmbH\n00:1C:1F\tQuestRet\tQuest Retail Technology Pty Ltd\n00:1C:20\tClbBenel\tCLB Benelux\n00:1C:21\tNucsafe\tNucsafe Inc.\n00:1C:22\tAerisEle\tAeris Elettronica s.r.l.\n00:1C:23\tDell\tDell Inc.\n00:1C:24\tFormosaW\tFormosa Wireless Systems Corp.\n00:1C:25\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:1C:26\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:1C:27\tSunellEl\tSunell Electronics Co.\n00:1C:28\tSphairon\tSphairon Technologies GmbH\n00:1C:29\tCoreDigi\tCore Digital Electronics Co., Ltd\n00:1C:2A\tEnvisaco\tEnvisacor Technologies Inc.\n00:1C:2B\tAlertmeC\tAlertme.com Limited\n00:1C:2C\tSynapse\t\n00:1C:2D\tFlexradi\tFlexRadio Systems\n00:1C:2E\tHpnSuppl\tHPN Supply Chain\n00:1C:2F\tPfister\tPfister GmbH\n00:1C:30\tModeLigh\tMode Lighting (UK ) Ltd.\n00:1C:31\tMobileXp\tMobile XP Technology Co., LTD\n00:1C:32\tTelian\tTelian Corporation\n00:1C:33\tSutron\t\n00:1C:34\tHueyChia\tHuey Chiao International Co., Ltd.\n00:1C:35\tNokiaDan\tNokia Danmark A/S\n00:1C:36\tInewitNv\tiNEWiT NV\n00:1C:37\tCallpod\tCallpod, Inc.\n00:1C:38\tBio-RadL\tBio-Rad Laboratories, Inc.\n00:1C:39\tSNetsyst\tS Netsystems Inc.\n00:1C:3A\tElementL\tElement Labs, Inc.\n00:1C:3B\tAmroadTe\tAmRoad Technology Inc.\n00:1C:3C\tSeonDesi\tSeon Design Inc.\n00:1C:3D\tWavestor\tWaveStorm\n00:1C:3E\tEckey\tECKey Corporation\n00:1C:3F\tInternat\tInternational Police Technologies, Inc.\n00:1C:40\tVdg-Secu\tVDG-Security bv\n00:1C:41\tScemtecT\tscemtec Transponder Technology GmbH\n00:1C:42\tParallel\tParallels, Inc.\n00:1C:43\tSamsungE\tSamsung Electronics Co.,Ltd\n00:1C:44\tBoschSec\tBosch Security Systems BV\n00:1C:45\tChenbroM\tChenbro Micom Co., Ltd.\n00:1C:46\tQtum\t\n00:1C:47\tHangzhou\tHangzhou Hollysys Automation Co., Ltd\n00:1C:48\tWidefi\tWiDeFi, Inc.\n00:1C:49\tZoltanTe\tZoltan Technology Inc.\n00:1C:4A\tAvm\tAVM GmbH\n00:1C:4B\tGener8\tGener8, Inc.\n00:1C:4C\tPetrotes\tPetrotest Instruments\n00:1C:4D\tAplixIpH\tAplix IP Holdings Corporation\n00:1C:4E\tTasaInte\tTASA International Limited\n00:1C:4F\tMacab\tMacab Ab\n00:1C:50\tTclTechn\tTCL Technoly Electronics (Huizhou) Co., Ltd.\n00:1C:51\tCelenoCo\tCeleno Communications\n00:1C:52\tVisionee\tVisionee Srl\n00:1C:53\tSynergyL\tSynergy Lighting Controls\n00:1C:54\tHillston\tHillstone Networks Inc\n00:1C:55\tShenzhen\tShenzhen Kaifa Technology Co.\n00:1C:56\tPado\tPado Systems, Inc.\n00:1C:57\tCisco\tCisco Systems, Inc\n00:1C:58\tCisco\tCisco Systems, Inc\n00:1C:59\tDevonIt\tDevon It\n00:1C:5A\tAdvanced\tAdvanced Relay Corporation\n00:1C:5B\tChubbEle\tChubb Electronic Security Systems Ltd\n00:1C:5C\tIntegrat\tIntegrated Medical Systems, Inc.\n00:1C:5D\tLeicaMic\tLeica Microsystems\n00:1C:5E\tAstonFra\tASTON France\n00:1C:5F\tWinlandE\tWinland Electronics, Inc.\n00:1C:60\tCspFront\tCSP Frontier Technologies,Inc.\n00:1C:61\tGalaxyMi\tGalaxy  Microsystems LImited\n00:1C:62\tLgElectr\tLG Electronics (Mobile Communications)\n00:1C:63\tTruen\t\n00:1C:64\tLandis+G\tLandis+Gyr\n00:1C:65\tJoescan\tJoeScan, Inc.\n00:1C:66\tUcamp\tUcamp Co.,Ltd\n00:1C:67\tPumpkinN\tPumpkin Networks, Inc.\n00:1C:68\tAnhuiSun\tAnhui Sun Create Electronics Co., Ltd\n00:1C:69\tPacketVi\tPacket Vision Ltd\n00:1C:6A\tWeissEng\tWeiss Engineering Ltd.\n00:1C:6B\tCovax\tCOVAX  Co. Ltd\n00:1C:6C\t30805\t\n00:1C:6D\tKyohrits\tKyohritsu Electronic Industry Co., Ltd.\n00:1C:6E\tNewburyN\tNewbury Networks, Inc.\n00:1C:6F\tEmfit\tEmfit Ltd\n00:1C:70\tNovacomm\tNovacomm Ltda\n00:1C:71\tEmergent\tEmergent Electronics\n00:1C:72\tMayerCie\tMayer & Cie GmbH & Co KG\n00:1C:73\tAristaNe\tArista Networks\n00:1C:74\tSyswanTe\tSyswan Technologies Inc.\n00:1C:75\tSegnet\tSegnet Ltd.\n00:1C:76\tWandswor\tThe Wandsworth Group Ltd\n00:1C:77\tProdys\t\n00:1C:78\tWyplaySa\tWyplay Sas\n00:1C:79\tCohesive\tCohesive Financial Technologies LLC\n00:1C:7A\tPerfecto\tPerfectone Netware Company Ltd\n00:1C:7B\tCastlene\tCastlenet Technology Inc.\n00:1C:7C\tPerq\tPerq Systems Corporation\n00:1C:7D\tExcelpoi\tExcelpoint Manufacturing Pte Ltd\n00:1C:7E\tToshiba\t\n00:1C:7F\tCheckPoi\tCheck Point Software Technologies\n00:1C:80\tNewBusin\tNew Business Division/Rhea-Information CO., LTD.\n00:1C:81\tNextgenV\tNextGen Venturi LTD\n00:1C:82\tGenewTec\tGenew Technologies\n00:1C:83\tNewLevel\tNew Level Telecom Co., Ltd.\n00:1C:84\tStlSolut\tSTL Solution Co.,Ltd.\n00:1C:85\tEunicorn\t\n00:1C:86\tCranite\tCranite Systems, Inc.\n00:1C:87\tUriver\tUriver Inc.\n00:1C:88\tTransyst\tTransystem Inc.\n00:1C:89\tForceCom\tForce Communications, Inc.\n00:1C:8A\tCirrasca\tCirrascale Corporation\n00:1C:8B\tMjInnova\tMJ Innovations Ltd.\n00:1C:8C\tDialTech\tDial Technology Ltd.\n00:1C:8D\tMesaImag\tMesa Imaging\n00:1C:8E\tAlcatel-\tAlcatel-Lucent IPD\n00:1C:8F\tAdvanced\tAdvanced Electronic Design, Inc.\n00:1C:90\tEmpacket\tEmpacket Corporation\n00:1C:91\tGefen\tGefen Inc.\n00:1C:92\tTervela\t\n00:1C:93\tExadigm\tExaDigm Inc\n00:1C:94\tLi-CorBi\tLI-COR Biosciences\n00:1C:95\tOpticomm\tOpticomm Corporation\n00:1C:96\tLinkwise\tLinkwise Technology Pte Ltd\n00:1C:97\tEnzytekT\tEnzytek Technology Inc.,\n00:1C:98\tLuckyTec\tLUCKY TECHNOLOGY (HK) COMPANY LIMITED\n00:1C:99\tShunraSo\tShunra Software Ltd.\n00:1C:9A\tNokiaDan\tNokia Danmark A/S\n00:1C:9B\tFeigElec\tFEIG ELECTRONIC GmbH\n00:1C:9C\tNortelNe\tNortel Networks\n00:1C:9D\tLiecthi\tLiecthi AG\n00:1C:9E\tDualtech\tDualtech IT AB\n00:1C:9F\tRazorstr\tRazorstream, LLC\n00:1C:A0\tProducti\tProduction Resource Group, LLC\n00:1C:A1\tAkamaiTe\tAkamai Technologies, Inc.\n00:1C:A2\tAdbBroad\tADB Broadband Italia\n00:1C:A3\tTerra\t\n00:1C:A4\tSonyMobi\tSony Mobile Communications Inc\n00:1C:A5\tZygo\tZygo Corporation\n00:1C:A6\tWin4net\t\n00:1C:A7\tInternat\tInternational Quartz Limited\n00:1C:A8\tAirtiesW\tAirTies Wireless Networks\n00:1C:A9\tAudiomat\tAudiomatica Srl\n00:1C:AA\tBellonPt\tBellon Pty Ltd\n00:1C:AB\tMeyerSou\tMeyer Sound Laboratories, Inc.\n00:1C:AC\tQniqTech\tQniq Technology Corp.\n00:1C:AD\tWuhanTel\tWuhan Telecommunication Devices Co.,Ltd\n00:1C:AE\tWichorus\tWiChorus, Inc.\n00:1C:AF\tPlatoNet\tPlato Networks Inc.\n00:1C:B0\tCisco\tCisco Systems, Inc\n00:1C:B1\tCisco\tCisco Systems, Inc\n00:1C:B2\tBpt\tBpt Spa\n00:1C:B3\tApple\tApple, Inc.\n00:1C:B4\tIridiumS\tIridium Satellite LLC\n00:1C:B5\tNeihuaNe\tNeihua Network Technology Co.,LTD.(NHN)\n00:1C:B6\tDuzonCnt\tDuzon CNT Co., Ltd.\n00:1C:B7\tUscDigia\tUSC DigiArk Corporation\n00:1C:B8\tCbc\tCBC Co., Ltd\n00:1C:B9\tKwangSun\tKwang Sung Electronics Co., Ltd.\n00:1C:BA\tVerscien\tVerScient, Inc.\n00:1C:BB\tMusician\tMusicianLink\n00:1C:BC\tCastgrab\tCastGrabber, LLC\n00:1C:BD\tEzzeMobi\tEzze Mobile Tech., Inc.\n00:1C:BE\tNintendo\tNintendo Co., Ltd.\n00:1C:BF\tIntelCor\tIntel Corporate\n00:1C:C0\tIntelCor\tIntel Corporate\n00:1C:C1\tArrisGro\tARRIS Group, Inc.\n00:1C:C2\tPartIiRe\tPart II Research, Inc.\n00:1C:C3\tArrisGro\tARRIS Group, Inc.\n00:1C:C4\tHewlettP\tHewlett Packard\n00:1C:C5\t3com\t3Com Ltd\n00:1C:C6\tProstor\tProStor Systems\n00:1C:C7\tRembrand\tRembrandt Technologies, LLC d/b/a REMSTREAM\n00:1C:C8\tIndustro\tINDUSTRONIC Industrie-Electronic GmbH & Co. KG\n00:1C:C9\tKaiseEle\tKaise Electronic Technology Co., Ltd.\n00:1C:CA\tShanghai\tShanghai Gaozhi Science & Technology Development Co.\n00:1C:CB\tForthPub\tForth Corporation Public Company Limited\n00:1C:CC\tBlackber\tBlackBerry RTS\n00:1C:CD\tAlektron\tAlektrona Corporation\n00:1C:CE\tByTechde\tBy Techdesign\n00:1C:CF\tLimetek\t\n00:1C:D0\tCircleon\tCircleone Co.,Ltd.\n00:1C:D1\tWavesAud\tWaves Audio LTD\n00:1C:D2\tKingCham\tKing Champion (Hong Kong) Limited\n00:1C:D3\tZpEngine\tZP Engineering SEL\n00:1C:D4\tNokiaDan\tNokia Danmark A/S\n00:1C:D5\tZeevee\tZeeVee, Inc.\n00:1C:D6\tNokiaDan\tNokia Danmark A/S\n00:1C:D7\tHarman/B\tHarman/Becker Automotive Systems GmbH\n00:1C:D8\tBlueantW\tBlueAnt Wireless\n00:1C:D9\tGlobalto\tGlobalTop Technology Inc.\n00:1C:DA\tExeginTe\tExegin Technologies Limited\n00:1C:DB\tCarpoint\tCarpoint Co.,Ltd\n00:1C:DC\tCustomCo\tCustom Computer Services, Inc.\n00:1C:DD\tCowbellE\tCowbell Engineering Co., Ltd.\n00:1C:DE\tInteract\tInteractive Multimedia eXchange Inc.\n00:1C:DF\tBelkinIn\tBelkin International Inc.\n00:1C:E0\tDasanTps\tDasan Tps\n00:1C:E1\tIndraSis\tIndra Sistemas, S.A.\n00:1C:E2\tAtteroTe\tAttero Tech, LLC.\n00:1C:E3\tOptimedi\tOptimedical Systems\n00:1C:E4\tElesyJsc\tEleSy JSC\n00:1C:E5\tMbsElect\tMBS Electronic Systems GmbH\n00:1C:E6\tInnes\t\n00:1C:E7\tRoconRes\tRocon PLC Research Centre\n00:1C:E8\tCummins\tCummins Inc\n00:1C:E9\tGalaxyTe\tGalaxy Technology Limited\n00:1C:EA\tScientif\tScientific-Atlanta, Inc\n00:1C:EB\tNortelNe\tNortel Networks\n00:1C:EC\tMobileso\tMobilesoft (Aust.) Pty Ltd\n00:1C:ED\tEnvironn\tEnvironnement Sa\n00:1C:EE\tSharp\tSHARP Corporation\n00:1C:EF\tPrimaxEl\tPrimax Electronics Ltd.\n00:1C:F0\tD-Link\tD-Link Corporation\n00:1C:F1\tSupoxTec\tSUPoX Technology Co. , LTD.\n00:1C:F2\tTenlonTe\tTenlon Technology Co.,Ltd.\n00:1C:F3\tEvsBroad\tEvs Broadcast Equipment\n00:1C:F4\tMediaTec\tMedia Technology Systems Inc\n00:1C:F5\tWiseblue\tWiseblue Technology Limited\n00:1C:F6\tCisco\tCisco Systems, Inc\n00:1C:F7\tAudiosci\tAudioScience\n00:1C:F8\tParadeTe\tParade Technologies, Ltd.\n00:1C:F9\tCisco\tCisco Systems, Inc\n00:1C:FA\tAlarmCom\tAlarm.com\n00:1C:FB\tArrisGro\tARRIS Group, Inc.\n00:1C:FC\tSumitomo\tSumitomo Electric Industries,Ltd\n00:1C:FD\tUniversa\tUniversal Electronics, Inc.\n00:1C:FE\tQuartics\tQuartics Inc\n00:1C:FF\tNaperaNe\tNapera Networks Inc\n00:1D:00\tBrivoLlc\tBrivo Systems, LLC\n00:1D:01\tNeptuneD\tNeptune Digital\n00:1D:02\tCybertec\tCybertech Telecom Development\n00:1D:03\tDesignSo\tDesign Solutions Inc.\n00:1D:04\tZipitWir\tZipit Wireless, Inc.\n00:1D:05\tEaton\tEaton Corporation\n00:1D:06\tHmElectr\tHM Electronics, Inc.\n00:1D:07\tShenzhen\tShenzhen Sang Fei Consumer Communications Co.,Ltd\n00:1D:08\tJiangsuY\tJiangsu Yinhe  Electronics Co.,Ltd.\n00:1D:09\tDell\tDell Inc.\n00:1D:0A\tDavisIns\tDavis Instruments, Inc.\n00:1D:0B\tPowerSta\tPower Standards Lab\n00:1D:0C\tMobileco\tMobileCompia\n00:1D:0D\tSonyInte\tSony Interactive Entertainment Inc.\n00:1D:0E\tAgaphaTe\tAgapha Technology co., Ltd.\n00:1D:0F\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n00:1D:10\tLighthau\tLightHaus Logic, Inc.\n00:1D:11\tAnalogue\tAnalogue & Micro Ltd\n00:1D:12\tRohm\tRohm Co., Ltd.\n00:1D:13\tNextgtv\t\n00:1D:14\tSperadto\tSperadtone Information Technology Limited\n00:1D:15\tShenzhen\tShenzhen Dolphin Electronic Co., Ltd\n00:1D:16\tSfr\t\n00:1D:17\tDigitalS\tDigital Sky Corporation\n00:1D:18\tPowerInn\tPower Innovation GmbH\n00:1D:19\tArcadyan\tArcadyan Technology Corporation\n00:1D:1A\tOvislink\tOvisLink S.A.\n00:1D:1B\tSangeanE\tSangean Electronics Inc.\n00:1D:1C\tGennetSA\tGennet s.a.\n00:1D:1D\tInter-M\tInter-M Corporation\n00:1D:1E\tKyushuTe\tKyushu Ten Co.,Ltd\n00:1D:1F\tSiauliuT\tSiauliu Tauro Televizoriai, JSC\n00:1D:20\tComtrend\tComtrend Corporation\n00:1D:21\tAlcadSl\tAlcad SL\n00:1D:22\tFossAnal\tFoss Analytical A/S\n00:1D:23\tSensus\t\n00:1D:24\tAclaraPo\tAclara Power-Line Systems Inc.\n00:1D:25\tSamsungE\tSamsung Electronics Co.,Ltd\n00:1D:26\tRockridg\tRockridgesound Technology Co.\n00:1D:27\tNac-Inte\tNAC-INTERCOM\n00:1D:28\tSonyMobi\tSony Mobile Communications Inc\n00:1D:29\tDoro\tDoro AB\n00:1D:2A\tShenzhen\tSHENZHEN BUL-TECH CO.,LTD.\n00:1D:2B\tWuhanPon\tWuhan Pont Technology CO. , LTD\n00:1D:2C\tWavetren\tWavetrend Technologies (Pty) Limited\n00:1D:2D\tPylone\tPylone, Inc.\n00:1D:2E\tRuckusWi\tRuckus Wireless\n00:1D:2F\tQuantumv\tQuantumVision Corporation\n00:1D:30\tYxWirele\tYX Wireless S.A.\n00:1D:31\tHighproI\tHIGHPRO INTERNATIONAL R&D CO,.LTD.\n00:1D:32\tLongkayC\tLongkay Communication & Technology (Shanghai) Co. Ltd\n00:1D:33\tMaverick\tMaverick Systems Inc.\n00:1D:34\tSyrisTec\tSYRIS Technology Corp\n00:1D:35\tViconics\tViconics Electronics Inc.\n00:1D:36\tElectron\tElectronics Corporation Of India Limited\n00:1D:37\tThales-P\tThales-Panda Transportation System\n00:1D:38\tSeagateT\tSeagate Technology\n00:1D:39\tMoohadig\tMoohadigital Co., Ltd\n00:1D:3A\tMhAcoust\tmh acoustics LLC\n00:1D:3B\tNokiaDan\tNokia Danmark A/S\n00:1D:3C\tMuscle\tMuscle Corporation\n00:1D:3D\tAvidyne\tAvidyne Corporation\n00:1D:3E\tSakaTech\tSaka Techno Science Co.,Ltd\n00:1D:3F\tMitronPt\tMitron Pty Ltd\n00:1D:40\tIntel–Ge\tIntel – GE Care Innovations LLC\n00:1D:41\tHardyIns\tHardy Instruments\n00:1D:42\tNortelNe\tNortel Networks\n00:1D:43\tShenzhen\tShenzhen G-link Digital Technology Co., Ltd.\n00:1D:44\tKrohne\t\n00:1D:45\tCisco\tCisco Systems, Inc\n00:1D:46\tCisco\tCisco Systems, Inc\n00:1D:47\tCovote\tCovote GmbH & Co KG\n00:1D:48\tSensor-T\tSensor-Technik Wiedemann GmbH\n00:1D:49\tInnovati\tInnovation Wireless Inc.\n00:1D:4A\tCarestre\tCarestream Health, Inc.\n00:1D:4B\tGridConn\tGrid Connect Inc.\n00:1D:4C\tAlcatel-\tAlcatel-Lucent\n00:1D:4D\tAdaptive\tAdaptive Recognition Hungary, Inc\n00:1D:4E\tTcmMobil\tTCM Mobile LLC\n00:1D:4F\tApple\tApple, Inc.\n00:1D:50\tSpinetix\tSpinetix Sa\n00:1D:51\tBabcockW\tBabcock & Wilcox Power Generation Group, Inc\n00:1D:52\tDefzoneB\tDefzone B.V.\n00:1D:53\tS&OElect\tS&O Electronics (Malaysia) Sdn. Bhd.\n00:1D:54\tSunnicTe\tSunnic Technology & Merchandise INC.\n00:1D:55\tZantaz\tZANTAZ, Inc\n00:1D:56\tKramerEl\tKramer Electronics Ltd.\n00:1D:57\tCaetecMe\tCAETEC Messtechnik\n00:1D:58\tCq\tCQ Inc\n00:1D:59\tMitraEne\tMitra Energy & Infrastructure\n00:1D:5A\t2wire\t2Wire Inc\n00:1D:5B\tTecvanIn\tTecvan Informática Ltda\n00:1D:5C\tTomCommu\tTom Communication Industrial Co.,Ltd.\n00:1D:5D\tControlD\tControl Dynamics Pty. Ltd.\n00:1D:5E\tComingMe\tComing Media Corp.\n00:1D:5F\tOverspee\tOverSpeed SARL\n00:1D:60\tAsustekC\tASUSTek COMPUTER INC.\n00:1D:61\tBij\tBIJ Corporation\n00:1D:62\tInphaseT\tInPhase Technologies\n00:1D:63\tMieleCie\tMiele & Cie. KG\n00:1D:64\tAdamComm\tAdam Communications Systems Int Ltd\n00:1D:65\tMicrowav\tMicrowave Radio Communications\n00:1D:66\tHyundaiT\tHyundai Telecom\n00:1D:67\tAmec\t\n00:1D:68\tThomsonT\tThomson Telecom Belgium\n00:1D:69\tKnorr-Br\tKnorr-Bremse IT-Services GmbH\n00:1D:6A\tAlphaNet\tAlpha Networks Inc.\n00:1D:6B\tArrisGro\tARRIS Group, Inc.\n00:1D:6C\tClariphy\tClariPhy Communications, Inc.\n00:1D:6D\tConfidan\tConfidant International LLC\n00:1D:6E\tNokiaDan\tNokia Danmark A/S\n00:1D:6F\tChainzon\tChainzone Technology Co., Ltd\n00:1D:70\tCisco\tCisco Systems, Inc\n00:1D:71\tCisco\tCisco Systems, Inc\n00:1D:72\tWistron\tWistron Corporation\n00:1D:73\tBuffalo\tBuffalo.Inc\n00:1D:74\tTianjinC\tTianjin China-Silicon Microelectronics Co., Ltd.\n00:1D:75\tRadiosca\tRadioscape PLC\n00:1D:76\tEyeheigh\tEyeheight Ltd.\n00:1D:77\tNsgate\t\n00:1D:78\tInvengoI\tInvengo Information Technology Co.,Ltd\n00:1D:79\tSignamax\tSignamax Llc\n00:1D:7A\tWideband\tWideband Semiconductor, Inc.\n00:1D:7B\tIceEnerg\tIce Energy, Inc.\n00:1D:7C\tAbeElett\tABE Elettronica S.p.A.\n00:1D:7D\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\n00:1D:7E\tCisco-Li\tCisco-Linksys, LLC\n00:1D:7F\tTekronIn\tTekron International Ltd\n00:1D:80\tBeijingH\tBeijing Huahuan Eletronics Co.,Ltd\n00:1D:81\tGuangzho\tGuangzhou Gateway Electronics Co., Ltd\n00:1D:82\tGnNetcom\tGN Netcom A/S\n00:1D:83\tEmitech\tEmitech Corporation\n00:1D:84\tGateway\tGateway, Inc.\n00:1D:85\tCallDire\tCall Direct Cellular Solutions\n00:1D:86\tShinwaIn\tShinwa Industries(China) Ltd.\n00:1D:87\tVigtechL\tVigTech Labs Sdn Bhd\n00:1D:88\tClearwir\tClearwire\n00:1D:89\tVaultsto\tVaultStor Corporation\n00:1D:8A\tTechtrex\tTechTrex Inc\n00:1D:8B\tAdbBroad\tADB Broadband Italia\n00:1D:8C\tLaCrosse\tLa Crosse Technology LTD\n00:1D:8D\tRaytek\tRaytek GmbH\n00:1D:8E\tAlereon\tAlereon, Inc.\n00:1D:8F\tPurewave\tPureWave Networks\n00:1D:90\tEmcoFlow\tEMCO Flow Systems\n00:1D:91\tDigitize\tDigitize, Inc\n00:1D:92\tMicro-St\tMICRO-STAR INT'L CO.,LTD.\n00:1D:93\tModacom\t\n00:1D:94\tClimaxTe\tClimax Technology Co., Ltd\n00:1D:95\tFlash\tFlash, Inc.\n00:1D:96\tWatchgua\tWatchGuard Video\n00:1D:97\tAlertusT\tAlertus Technologies LLC\n00:1D:98\tNokiaDan\tNokia Danmark A/S\n00:1D:99\tCyanOpti\tCyan Optic, Inc.\n00:1D:9A\tGodexInt\tGodex International Co., Ltd\n00:1D:9B\tHokuyoAu\tHokuyo Automatic Co., Ltd.\n00:1D:9C\tRockwell\tRockwell Automation\n00:1D:9D\tArtjoyIn\tArtjoy International Limited\n00:1D:9E\tAxionTec\tAxion Technologies\n00:1D:9F\tMattRPTr\tMATT   R.P.Traczynscy Sp.J.\n00:1D:A0\tHengYuEl\tHeng Yu Electronic Manufacturing Company Limited\n00:1D:A1\tCisco\tCisco Systems, Inc\n00:1D:A2\tCisco\tCisco Systems, Inc\n00:1D:A3\tSabioso\t\n00:1D:A4\tHangzhou\tHangzhou System Technology CO., LTD\n00:1D:A5\tWbElectr\tWB Electronics\n00:1D:A6\tMediaNum\tMedia Numerics Limited\n00:1D:A7\tSeamless\tSeamless Internet\n00:1D:A8\tTakahata\tTakahata Electronics Co.,Ltd\n00:1D:A9\tCastlesT\tCastles Technology, Co., LTD\n00:1D:AA\tDraytek\tDrayTek Corp.\n00:1D:AB\tSwissqua\tSwissQual License AG\n00:1D:AC\tGigamonL\tGigamon Systems LLC\n00:1D:AD\tSinotech\tSinotech Engineering Consultants, Inc.  Geotechnical Enginee\n00:1D:AE\tChangTse\tChang Tseng Technology Co., Ltd\n00:1D:AF\tNortelNe\tNortel Networks\n00:1D:B0\tFujianHe\tFuJian HengTong Information Technology Co.,Ltd\n00:1D:B1\tCrescend\tCrescendo Networks\n00:1D:B2\tHokkaido\tHokkaido Electric Engineering Co.,Ltd.\n00:1D:B3\tHpnSuppl\tHPN Supply Chain\n00:1D:B4\tKumhoEng\tKumho Eng Co.,Ltd\n00:1D:B5\tJuniperN\tJuniper Networks\n00:1D:B6\tBestcomm\tBestComm Networks, Inc.\n00:1D:B7\tTendrilN\tTendril Networks, Inc.\n00:1D:B8\tIntoto\tIntoto Inc.\n00:1D:B9\tWellspri\tWellspring Wireless\n00:1D:BA\tSony\tSony Corporation\n00:1D:BB\tDynamicS\tDynamic System Electronics Corp.\n00:1D:BC\tNintendo\tNintendo Co., Ltd.\n00:1D:BD\tVersamed\tVersamed Inc.\n00:1D:BE\tArrisGro\tARRIS Group, Inc.\n00:1D:BF\tRadiient\tRadiient Technologies, Inc.\n00:1D:C0\tEnphaseE\tEnphase Energy\n00:1D:C1\tAudinate\tAudinate Pty L\n00:1D:C2\tXortecOy\tXortec Oy\n00:1D:C3\tRikorTv\tRIKOR TV, Ltd\n00:1D:C4\tAioi\tAIOI Systems Co., Ltd.\n00:1D:C5\tBeijingJ\tBeijing Jiaxun Feihong Electricial Co., Ltd.\n00:1D:C6\tSnr\tSNR Inc.\n00:1D:C7\tL-3Commu\tL-3 Communications Geneva Aerospace\n00:1D:C8\tNavionic\tNavionics Research Inc., dba SCADAmetrics\n00:1D:C9\tGainspan\tGainSpan Corp.\n00:1D:CA\tPavElect\tPAV Electronics Limited\n00:1D:CB\tExénsDev\tExéns Development Oy\n00:1D:CC\tAyonCybe\tAyon Cyber Security, Inc\n00:1D:CD\tArrisGro\tARRIS Group, Inc.\n00:1D:CE\tArrisGro\tARRIS Group, Inc.\n00:1D:CF\tArrisGro\tARRIS Group, Inc.\n00:1D:D0\tArrisGro\tARRIS Group, Inc.\n00:1D:D1\tArrisGro\tARRIS Group, Inc.\n00:1D:D2\tArrisGro\tARRIS Group, Inc.\n00:1D:D3\tArrisGro\tARRIS Group, Inc.\n00:1D:D4\tArrisGro\tARRIS Group, Inc.\n00:1D:D5\tArrisGro\tARRIS Group, Inc.\n00:1D:D6\tArrisGro\tARRIS Group, Inc.\n00:1D:D7\tAlgolith\t\n00:1D:D8\tMicrosof\tMicrosoft Corporation\n00:1D:D9\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:1D:DA\tMikroele\tMikroelektronika spol. s r. o.\n00:1D:DB\tC-Bel\tC-BEL Corporation\n00:1D:DC\tHangzhou\tHangZhou DeChangLong Tech&Info Co.,Ltd\n00:1D:DD\tDatHK\tDat H.K. Limited\n00:1D:DE\tZhejiang\tZhejiang Broadcast&Television Technology Co.,Ltd.\n00:1D:DF\tSunitecE\tSunitec Enterprise Co., Ltd.\n00:1D:E0\tIntelCor\tIntel Corporate\n00:1D:E1\tIntelCor\tIntel Corporate\n00:1D:E2\tRadionor\tRadionor Communications\n00:1D:E3\tIntuicom\t\n00:1D:E4\tVisionee\tVisioneered Image Systems\n00:1D:E5\tCisco\tCisco Systems, Inc\n00:1D:E6\tCisco\tCisco Systems, Inc\n00:1D:E7\tMarineSo\tMarine Sonic Technology, Ltd.\n00:1D:E8\tNikkoDen\tNikko Denki Tsushin Corporation(NDTC)\n00:1D:E9\tNokiaDan\tNokia Danmark A/S\n00:1D:EA\tCommtest\tCommtest Instruments Ltd\n00:1D:EB\tDinecInt\tDINEC International\n00:1D:EC\tMarusys\t\n00:1D:ED\tGridNet\tGrid Net, Inc.\n00:1D:EE\tNextvisi\tNEXTVISION SISTEMAS DIGITAIS DE TELEVISÃO LTDA.\n00:1D:EF\tTrimm\tTrimm, Inc.\n00:1D:F0\tVidient\tVidient Systems, Inc.\n00:1D:F1\tIntego\tIntego Systems, Inc.\n00:1D:F2\tNetflix\tNetflix, Inc.\n00:1D:F3\tSbsScien\tSBS Science & Technology Co., Ltd\n00:1D:F4\tMagellan\tMagellan Technology Pty Limited\n00:1D:F5\tSunshine\tSunshine Co,LTD\n00:1D:F6\tSamsungE\tSamsung Electronics Co.,Ltd\n00:1D:F7\tRStahlSc\tR. STAHL Schaltgeräte GmbH\n00:1D:F8\tWebproVi\tWebpro Vision Technology Corporation\n00:1D:F9\tCybiotro\tCybiotronics (Far East) Limited\n00:1D:FA\tFujianLa\tFujian LANDI Commercial Equipment Co.,Ltd\n00:1D:FB\tNetcleus\tNETCLEUS Systems Corporation\n00:1D:FC\tKsic\t\n00:1D:FD\tNokiaDan\tNokia Danmark A/S\n00:1D:FE\tPalm\tPalm, Inc\n00:1D:FF\tNetworkC\tNetwork Critical Solutions Ltd\n00:1E:00\tShantouI\tShantou Institute of Ultrasonic Instruments\n00:1E:01\tRenesasT\tRenesas Technology Sales Co., Ltd.\n00:1E:02\tSougouKe\tSougou Keikaku Kougyou Co.,Ltd.\n00:1E:03\tLicomm\tLiComm Co., Ltd.\n00:1E:04\tHansonRe\tHanson Research Corporation\n00:1E:05\tXseedTec\tXseed Technologies & Computing\n00:1E:06\tWibrain\t\n00:1E:07\tWinyTech\tWiny Technology Co., Ltd.\n00:1E:08\tCentecNe\tCentec Networks Inc\n00:1E:09\tZefatek\tZEFATEK Co.,LTD\n00:1E:0A\tSybaTech\tSyba Tech Limited\n00:1E:0B\tHewlettP\tHewlett Packard\n00:1E:0C\tSherwood\tSherwood Information Partners, Inc.\n00:1E:0D\tMicran\tMicran Ltd.\n00:1E:0E\tMaxiView\tMaxi View Holdings Limited\n00:1E:0F\tBriotInt\tBriot International\n00:1E:10\tHuaweiTe\tHuawei Technologies Co.,Ltd\n00:1E:11\tEleluxIn\tElelux International Ltd\n00:1E:12\tEcolab\t\n00:1E:13\tCisco\tCisco Systems, Inc\n00:1E:14\tCisco\tCisco Systems, Inc\n00:1E:15\tBeechHil\tBeech Hill Electronics\n00:1E:16\tKeytroni\tKeytronix\n00:1E:17\tStnBv\tStn Bv\n00:1E:18\tRadioAct\tRadio Activity srl\n00:1E:19\tGtri\t\n00:1E:1A\tBestSour\tBest Source Taiwan Inc.\n00:1E:1B\tDigitalS\tDigital Stream Technology, Inc.\n00:1E:1C\tSwsAustr\tSWS Australia Pty Limited\n00:1E:1D\tEastCoas\tEast Coast Datacom, Inc.\n00:1E:1E\tHoneywel\tHoneywell Life Safety\n00:1E:1F\tNortelNe\tNortel Networks\n00:1E:20\tIntertai\tIntertain Inc.\n00:1E:21\tQisda\tQisda Corporation\n00:1E:22\tArvooIma\tARVOO Imaging Products BV\n00:1E:23\tElectron\tElectronic Educational Devices, Inc\n00:1E:24\tZhejiang\tZhejiang Bell Technology Co.,ltd\n00:1E:25\tIntekDig\tIntek Digital\n00:1E:26\tDigifrie\tDigifriends Co. Ltd\n00:1E:27\tSbnTech\tSBN TECH Co.,Ltd.\n00:1E:28\tLumexis\tLumexis Corporation\n00:1E:29\tHyperthe\tHypertherm Inc\n00:1E:2A\tNetgear\t\n00:1E:2B\tRadioDes\tRadio Systems Design, Inc.\n00:1E:2C\tCyverse\tCyVerse Corporation\n00:1E:2D\tStim\t\n00:1E:2E\tSirtiSPA\tSIRTI S.p.A.\n00:1E:2F\tDimotoPt\tDiMoto Pty Ltd\n00:1E:30\tShireen\tShireen Inc\n00:1E:31\tInfomark\tInfomark Co.,Ltd.\n00:1E:32\tZensys\t\n00:1E:33\tInventec\tInventec Corporation\n00:1E:34\tCryptome\tCryptoMetrics\n00:1E:35\tNintendo\tNintendo Co., Ltd.\n00:1E:36\tIpte\t\n00:1E:37\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\n00:1E:38\tBluecard\tBluecard Software Technology Co., Ltd.\n00:1E:39\tComsysCo\tComsys Communication Ltd.\n00:1E:3A\tNokiaDan\tNokia Danmark A/S\n00:1E:3B\tNokiaDan\tNokia Danmark A/S\n00:1E:3C\tLyngboxM\tLyngbox Media AB\n00:1E:3D\tAlpsElec\tAlps Electric Co.,Ltd.\n00:1E:3E\tKmw\tKMW Inc.\n00:1E:3F\tTrellisw\tTrellisWare Technologies, Inc.\n00:1E:40\tShanghai\tShanghai DareGlobal Technologies Co.,Ltd\n00:1E:41\tMicrowav\tMicrowave Communication & Component, Inc.\n00:1E:42\tTeltonik\tTeltonika\n00:1E:43\tAisinAw\tAisin Aw Co.,Ltd.\n00:1E:44\tSantec\t\n00:1E:45\tSonyMobi\tSony Mobile Communications Inc\n00:1E:46\tArrisGro\tARRIS Group, Inc.\n00:1E:47\tPtHariff\tPT. Hariff Daya Tunggal Engineering\n00:1E:48\tWi-Links\t\n00:1E:49\tCisco\tCisco Systems, Inc\n00:1E:4A\tCisco\tCisco Systems, Inc\n00:1E:4B\tCityThea\tCity Theatrical\n00:1E:4C\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:1E:4D\tWelkinSc\tWelkin Sciences, LLC\n00:1E:4E\tDakoEdv-\tDAKO EDV-Ingenieur- und Systemhaus GmbH\n00:1E:4F\tDell\tDell Inc.\n00:1E:50\tBattisto\tBattistoni Research\n00:1E:51\tConverte\tConverter Industry Srl\n00:1E:52\tApple\tApple, Inc.\n00:1E:53\tFurtherT\tFurther Tech Co., LTD\n00:1E:54\tToyoElec\tTOYO ELECTRIC Corporation\n00:1E:55\tCowon\tCOWON SYSTEMS,Inc.\n00:1E:56\tBallyWul\tBally Wulff Entertainment GmbH\n00:1E:57\tAlcomaSp\tALCOMA, spol. s r.o.\n00:1E:58\tD-Link\tD-Link Corporation\n00:1E:59\tSiliconT\tSilicon Turnkey Express, LLC\n00:1E:5A\tArrisGro\tARRIS Group, Inc.\n00:1E:5B\tUnitron\tUnitron Company, Inc.\n00:1E:5C\tRbGenera\tRB GeneralEkonomik\n00:1E:5D\tHolosysD\tHolosys d.o.o.\n00:1E:5E\tComputim\tCOmputime Ltd.\n00:1E:5F\tKwikbyte\tKwikByte, LLC\n00:1E:60\tDigitalL\tDigital Lighting Systems, Inc\n00:1E:61\tItec\tITEC GmbH\n00:1E:62\tSiemon\t\n00:1E:63\tVibro-Me\tVibro-Meter SA\n00:1E:64\tIntelCor\tIntel Corporate\n00:1E:65\tIntelCor\tIntel Corporate\n00:1E:66\tResolEle\tRESOL Elektronische Regelungen GmbH\n00:1E:67\tIntelCor\tIntel Corporate\n00:1E:68\tQuantaCo\tQuanta Computer Inc.\n00:1E:69\tThomson\tThomson Inc.\n00:1E:6A\tBeijingB\tBeijing Bluexon Technology Co.,Ltd\n00:1E:6B\tCiscoSpv\tCisco SPVTG\n00:1E:6C\tOpaque\tOpaque Systems\n00:1E:6D\tItR&DCen\tIT R&D Center\n00:1E:6E\tShenzhen\tShenzhen First Mile Communications Ltd\n00:1E:6F\tMagna-Po\tMagna-Power Electronics, Inc.\n00:1E:70\tCobhamDe\tCobham Defence Communications Ltd\n00:1E:71\tMircomGr\tMIrcom Group of Companies\n00:1E:72\tPcs\t\n00:1E:73\tZte\tzte corporation\n00:1E:74\tSagemcom\tSagemcom Broadband SAS\n00:1E:75\tLgElectr\tLG Electronics (Mobile Communications)\n00:1E:76\tThermoFi\tThermo Fisher Scientific\n00:1E:77\tAir2app\t\n00:1E:78\tOwitekTe\tOwitek Technology Ltd.,\n00:1E:79\tCisco\tCisco Systems, Inc\n00:1E:7A\tCisco\tCisco Systems, Inc\n00:1E:7B\tRISRL\tR.I.CO. S.r.l.\n00:1E:7C\tTaiwick\tTaiwick Limited\n00:1E:7D\tSamsungE\tSamsung Electronics Co.,Ltd\n00:1E:7E\tNortelNe\tNortel Networks\n00:1E:7F\tCbmOfAme\tCBM of America\n00:1E:80\tIcotera\tIcotera A/S\n00:1E:81\tCnbTechn\tCNB Technology Inc.\n00:1E:82\tSandisk\tSanDisk Corporation\n00:1E:83\tLan/ManS\tLAN/MAN Standards Association (LMSC)\n00:1E:84\tPikaTech\tPika Technologies Inc.\n00:1E:85\tLagotek\tLagotek Corporation\n00:1E:86\tMel\tMEL Co.,Ltd.\n00:1E:87\tRealease\tRealease Limited\n00:1E:88\tAndorSys\tAndor System Support Co., Ltd.\n00:1E:89\tCrfs\tCRFS Limited\n00:1E:8A\tEcopy\teCopy, Inc\n00:1E:8B\tInfraAcc\tInfra Access Korea Co., Ltd.\n00:1E:8C\tAsustekC\tASUSTek COMPUTER INC.\n00:1E:8D\tArrisGro\tARRIS Group, Inc.\n00:1E:8E\tHunkeler\tHunkeler AG\n00:1E:8F\tCanon\tCanon Inc.\n00:1E:90\tElitegro\tElitegroup Computer Systems Co.,Ltd.\n00:1E:91\tKiminEle\tKIMIN Electronic Co., Ltd.\n00:1E:92\tJeulinSA\tJeulin S.A.\n00:1E:93\tCiritech\tCiriTech Systems Inc\n00:1E:94\tSupercom\tSupercom Technology Corporation\n00:1E:95\tSigmalin\tSigmalink\n00:1E:96\tSepura\tSepura Plc\n00:1E:97\tMediumLi\tMedium Link System Technology CO., LTD,\n00:1E:98\tGreenlin\tGreenLine Communications\n00:1E:99\tVantanol\tVantanol Industrial Corporation\n00:1E:9A\tHamilton\tHAMILTON Bonaduz AG\n00:1E:9B\tSan-Eish\tSan-Eisha, Ltd.\n00:1E:9C\tFidustro\tFidustron INC\n00:1E:9D\tRecallTe\tRecall Technologies, Inc.\n00:1E:9E\tDdmHopt+\tddm hopt + schuler Gmbh + Co. KG\n00:1E:9F\tVisionee\tVisioneering Systems, Inc.\n00:1E:A0\tXln-T\t\n00:1E:A1\tBrunata\tBrunata a/s\n00:1E:A2\tSymx\tSymx Systems, Inc.\n00:1E:A3\tNokiaDan\tNokia Danmark A/S\n00:1E:A4\tNokiaDan\tNokia Danmark A/S\n00:1E:A5\tRobotous\tROBOTOUS, Inc.\n00:1E:A6\tBestItWo\tBest IT World (India) Pvt. Ltd.\n00:1E:A7\tActionte\tActiontec Electronics, Inc\n00:1E:A8\tDatangMo\tDatang Mobile Communications Equipment CO.,LTD\n00:1E:A9\tNintendo\tNintendo Co., Ltd.\n00:1E:AA\tE-SenzaT\tE-Senza Technologies GmbH\n00:1E:AB\tTelewell\tTeleWell Oy\n00:1E:AC\tArmadeus\tArmadeus Systems\n00:1E:AD\tWingtech\tWingtech Group Limited\n00:1E:AE\tContinen\tContinental Automotive Systems Inc.\n00:1E:AF\tOphirOpt\tOphir Optronics Ltd\n00:1E:B0\tImesdEle\tImesD Electronica S.L.\n00:1E:B1\tCryptsof\tCryptsoft Pty Ltd\n00:1E:B2\tLgInnote\tLG innotek\n00:1E:B3\tPrimexWi\tPrimex Wireless\n00:1E:B4\tUnifatTe\tUnifat Technology Ltd.\n00:1E:B5\tEverSpar\tEver Sparkle Technologies Ltd\n00:1E:B6\tTagHeuer\tTAG Heuer SA\n00:1E:B7\tTbtech\tTBTech, Co., Ltd.\n00:1E:B8\tFortis\tFortis, Inc.\n00:1E:B9\tSingFaiT\tSing Fai Technology Limited\n00:1E:BA\tHighDens\tHigh Density Devices AS\n00:1E:BB\tBlueligh\tBluelight Technology Inc.\n00:1E:BC\tWintechA\tWintech Automation Co.,Ltd.\n00:1E:BD\tCisco\tCisco Systems, Inc\n00:1E:BE\tCisco\tCisco Systems, Inc\n00:1E:BF\tHaasAuto\tHaas Automation Inc.\n00:1E:C0\tMicrochi\tMicrochip Technology Inc.\n00:1E:C1\t3comEuro\t3COM EUROPE LTD\n00:1E:C2\tApple\tApple, Inc.\n00:1E:C3\tKozio\tKozio, Inc.\n00:1E:C4\tCelio\tCelio Corp\n00:1E:C5\tMiddleAt\tMiddle Atlantic Products Inc\n00:1E:C6\tObviusHo\tObvius Holdings LLC\n00:1E:C7\t2wire\t2Wire Inc\n00:1E:C8\tRapidMob\tRapid Mobile (Pty) Ltd\n00:1E:C9\tDell\tDell Inc.\n00:1E:CA\tNortelNe\tNortel Networks\n00:1E:CB\tRpcEnerg\tRPC Energoautomatika Ltd\n00:1E:CC\tCdvi\t\n00:1E:CD\tKylandTe\tKYLAND Technology Co. LTD\n00:1E:CE\tBisaTech\tBISA Technologies (Hong Kong) Limited\n00:1E:CF\tPhilipsE\tPhilips Electronics Uk Ltd\n00:1E:D0\tIngespac\tIngespace\n00:1E:D1\tKeyproce\tKeyprocessor B.V.\n00:1E:D2\tRayShine\tRay Shine Video Technology Inc\n00:1E:D3\tDotTechn\tDot Technology Int'l Co., Ltd.\n00:1E:D4\tDobleEng\tDoble Engineering\n00:1E:D5\tTekon-Au\tTekon-Automatics\n00:1E:D6\tAlentecO\tAlentec & Orion AB\n00:1E:D7\tH-Stream\tH-Stream Wireless, Inc.\n00:1E:D8\tDigitalU\tDigital United Inc.\n00:1E:D9\tMitsubis\tMitsubishi Precision Co.,LTd.\n00:1E:DA\tWesemann\tWesemann Elektrotechniek B.V.\n00:1E:DB\tGikenTra\tGiken Trastem Co., Ltd.\n00:1E:DC\tSonyMobi\tSony Mobile Communications Inc\n00:1E:DD\tWaskoSA\tWasko S.A.\n00:1E:DE\tByd\tByd Company Limited\n00:1E:DF\tMasterIn\tMaster Industrialization Center Kista\n00:1E:E0\tUrmetDom\tUrmet Domus SpA\n00:1E:E1\tSamsungE\tSamsung Electronics Co.,Ltd\n00:1E:E2\tSamsungE\tSamsung Electronics Co.,Ltd\n00:1E:E3\tT&WElect\tT&W Electronics (ShenZhen) Co.,Ltd\n00:1E:E4\tAcsSolut\tACS Solutions France\n00:1E:E5\tCisco-Li\tCisco-Linksys, LLC\n00:1E:E6\tShenzhen\tShenzhen Advanced Video Info-Tech Co., Ltd.\n00:1E:E7\tEpic\tEpic Systems Inc\n00:1E:E8\tMytek\t\n00:1E:E9\tStonerid\tStoneridge Electronics AB\n00:1E:EA\tSensorSw\tSensor Switch, Inc.\n00:1E:EB\tTalk-A-P\tTalk-A-Phone Co.\n00:1E:EC\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\n00:1E:ED\tAdventiq\tAdventiq Ltd.\n00:1E:EE\tEtl\tETL Systems Ltd\n00:1E:EF\tCantroni\tCantronic International Limited\n00:1E:F0\tGigafinN\tGigafin Networks\n00:1E:F1\tServimat\t\n00:1E:F2\tMicroMot\tMicro Motion Inc\n00:1E:F3\tFrom2\t\n00:1E:F4\tL-3Commu\tL-3 Communications Display Systems\n00:1E:F5\tHitekAut\tHitek Automated Inc.\n00:1E:F6\tCisco\tCisco Systems, Inc\n00:1E:F7\tCisco\tCisco Systems, Inc\n00:1E:F8\tEmfinity\tEmfinity Inc.\n00:1E:F9\tPascomKo\tPascom Kommunikations systeme GmbH.\n00:1E:FA\tProtei\tPROTEI Ltd.\n00:1E:FB\tTrioMoti\tTrio Motion Technology Ltd\n00:1E:FC\tJscMassa\tJSC MASSA-K\n00:1E:FD\tMicrobit\tMicrobit 2.0 AB\n00:1E:FE\tLevelSRO\tLEVEL s.r.o.\n00:1E:FF\tMueller-\tMueller-Elektronik GmbH & Co. KG\n00:1F:00\tNokiaDan\tNokia Danmark A/S\n00:1F:01\tNokiaDan\tNokia Danmark A/S\n00:1F:02\tPixelmet\tPixelmetrix Corporation Pte Ltd\n00:1F:03\tNum\tNum Ag\n00:1F:04\tGranch\tGranch Ltd.\n00:1F:05\tItasTech\tiTAS Technology Corp.\n00:1F:06\tIntegrat\tIntegrated Dispatch Solutions\n00:1F:07\tAzteqMob\tAZTEQ Mobile\n00:1F:08\tRisco\tRisco Ltd\n00:1F:09\tJastec\t\n00:1F:0A\tNortelNe\tNortel Networks\n00:1F:0B\tFederalS\tFederal State Unitary Enterprise Industrial UnionElectropribor\n00:1F:0C\tIntellig\tIntelligent Digital Services GmbH\n00:1F:0D\tL3Commun\tL3 Communications - Telemetry West\n00:1F:0E\tJapanKya\tJapan Kyastem Co., Ltd\n00:1F:0F\tSelectEn\tSelect Engineered Systems\n00:1F:10\tToledoDo\tToledo Do Brasil Industria De Balancas Ltda\n00:1F:11\tOpenmoko\tOpenmoko, Inc.\n00:1F:12\tJuniperN\tJuniper Networks\n00:1F:13\tSAS\tS.& A.S. Ltd.\n00:1F:14\tNexg\t\n00:1F:15\tBioscryp\tBioscrypt Inc\n00:1F:16\tWistron\tWistron Corporation\n00:1F:17\tIdx\tIDX Company, Ltd.\n00:1F:18\tHakusanM\tHakusan.Mfg.Co,.Ltd\n00:1F:19\tBen-RiEl\tBEN-RI ELECTRONICA S.A.\n00:1F:1A\tProminve\tProminvest\n00:1F:1B\tRoyaltek\tRoyalTek Company Ltd.\n00:1F:1C\tKobishiE\tKOBISHI ELECTRIC Co.,Ltd.\n00:1F:1D\tAtlasMat\tAtlas Material Testing Technology LLC\n00:1F:1E\tAstecTec\tAstec Technology Co., Ltd\n00:1F:1F\tEdimaxTe\tEdimax Technology Co. Ltd.\n00:1F:20\tLogitech\tLogitech Europe SA\n00:1F:21\tInnerMon\tInner Mongolia Yin An Science & Technology Development Co.,L\n00:1F:22\tSourcePh\tSource Photonics, Inc.\n00:1F:23\tInteraco\tInteracoustics\n00:1F:24\tDigitvie\tDigitview Technology Co., Ltd.\n00:1F:25\tMbs\tMBS GmbH\n00:1F:26\tCisco\tCisco Systems, Inc\n00:1F:27\tCisco\tCisco Systems, Inc\n00:1F:28\tHpnSuppl\tHPN Supply Chain\n00:1F:29\tHewlettP\tHewlett Packard\n00:1F:2A\tAccm\t\n00:1F:2B\tOrangeLo\tOrange Logic\n00:1F:2C\tStarbrid\tStarbridge Networks\n00:1F:2D\tElectro-\tElectro-Optical Imaging, Inc.\n00:1F:2E\tTriangle\tTriangle Research Int'l Pte Ltd\n00:1F:2F\tBerker\tBerker GmbH & Co. KG\n00:1F:30\tTravelpi\tTravelping\n00:1F:31\tRadiocom\tRadiocomp\n00:1F:32\tNintendo\tNintendo Co., Ltd.\n00:1F:33\tNetgear\t\n00:1F:34\tLungHwaE\tLung Hwa Electronics Co., Ltd.\n00:1F:35\tAir802Ll\tAIR802 LLC\n00:1F:36\tBellwinI\tBellwin Information Co. Ltd.,\n00:1F:37\tGenesisI\tGenesis I&C\n00:1F:38\tPositron\t\n00:1F:39\tConstruc\tConstrucciones y Auxiliar de Ferrocarriles, S.A.\n00:1F:3A\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:1F:3B\tIntelCor\tIntel Corporate\n00:1F:3C\tIntelCor\tIntel Corporate\n00:1F:3D\tQbit\tQbit GmbH\n00:1F:3E\tRp-Techn\tRP-Technik e.K.\n00:1F:3F\tAvm\tAVM GmbH\n00:1F:40\tSpeakerc\tSpeakercraft Inc.\n00:1F:41\tRuckusWi\tRuckus Wireless\n00:1F:42\tEthersta\tEtherstack plc\n00:1F:43\tEntesEle\tEntes Elektronik\n00:1F:44\tGeTransp\tGE Transportation Systems\n00:1F:45\tEnterasy\tEnterasys\n00:1F:46\tNortelNe\tNortel Networks\n00:1F:47\tMcsLogic\tMCS Logic Inc.\n00:1F:48\tMojix\tMojix Inc.\n00:1F:49\tManhatta\tManhattan TV Ltd\n00:1F:4A\tAlbentia\tAlbentia Systems S.A.\n00:1F:4B\tLineageP\tLineage Power\n00:1F:4C\tRosemanE\tRoseman Engineering Ltd\n00:1F:4D\tSegnetic\tSegnetics LLC\n00:1F:4E\tConmedLi\tConMed Linvatec\n00:1F:4F\tThinkwar\tThinkware Co. Ltd.\n00:1F:50\tSwissdis\tSwissdis AG\n00:1F:51\tHdCommun\tHD Communications Corp\n00:1F:52\tUvtUnter\tUVT Unternehmensberatung fur Verkehr und Technik GmbH\n00:1F:53\tGemacGes\tGEMAC Gesellschaft für Mikroelektronikanwendung Chemnitz mbH\n00:1F:54\tLorexTec\tLorex Technology Inc.\n00:1F:55\tHoneywel\tHoneywell Security (China) Co., Ltd.\n00:1F:56\tDigitalF\tDigital Forecast\n00:1F:57\tPhonikIn\tPhonik Innovation Co.,LTD\n00:1F:58\tEmhEnerg\tEMH Energiemesstechnik GmbH\n00:1F:59\tKronback\tKronback Tracers\n00:1F:5A\tBeckwith\tBeckwith Electric Co.\n00:1F:5B\tApple\tApple, Inc.\n00:1F:5C\tNokiaDan\tNokia Danmark A/S\n00:1F:5D\tNokiaDan\tNokia Danmark A/S\n00:1F:5E\tDynaTech\tDyna Technology Co.,Ltd.\n00:1F:5F\tBlatand\tBlatand GmbH\n00:1F:60\tCompass\tCompass Systems Corp.\n00:1F:61\tTalentCo\tTalent Communication Networks Inc.\n00:1F:62\tJscStils\tJSC Stilsoft\n00:1F:63\tJscGoodw\tJSC Goodwin-Europa\n00:1F:64\tBeijingA\tBeijing Autelan Technology Inc.\n00:1F:65\tKoreaEle\tKorea Electric Terminal Co., Ltd.\n00:1F:66\tPlanarLl\tPlanar Llc\n00:1F:67\tHitachi\tHitachi,Ltd.\n00:1F:68\tMartinss\tMartinsson Elektronik AB\n00:1F:69\tPingoodT\tPingood Technology Co., Ltd.\n00:1F:6A\tPacketfl\tPacketFlux Technologies, Inc.\n00:1F:6B\tLgElectr\tLG Electronics (Mobile Communications)\n00:1F:6C\tCisco\tCisco Systems, Inc\n00:1F:6D\tCisco\tCisco Systems, Inc\n00:1F:6E\tVtechEng\tVtech Engineering Corporation\n00:1F:6F\tFujianSu\tFujian Sunnada Communication Co.,Ltd.\n00:1F:70\tBotikTec\tBotik Technologies LTD\n00:1F:71\tXgTechno\txG Technology, Inc.\n00:1F:72\tQingdaoH\tQingDao Hiphone Technology Co,.Ltd\n00:1F:73\tTeraview\tTeraview Technology Co., Ltd.\n00:1F:74\tEigenDev\tEigen Development\n00:1F:75\tGibahnMe\tGiBahn Media\n00:1F:76\tAirlogic\tAirLogic Systems Inc.\n00:1F:77\tHeolDesi\tHeol Design\n00:1F:78\tBlueFoxP\tBlue Fox Porini Textile\n00:1F:79\tLodamEle\tLodam Electronics A/S\n00:1F:7A\tWiwide\tWiWide Inc.\n00:1F:7B\tTechnexi\tTechNexion Ltd.\n00:1F:7C\tWitelcom\tWitelcom AS\n00:1F:7D\tEmbedded\tEmbedded Wireless GmbH\n00:1F:7E\tArrisGro\tARRIS Group, Inc.\n00:1F:7F\tPhabrix\tPhabrix Limited\n00:1F:80\tLucasBv\tLucas Holding bv\n00:1F:81\tAccelSem\tAccel Semiconductor Corp\n00:1F:82\tCal-Comp\tCal-Comp Electronics & Communications Company Ltd.\n00:1F:83\tTeleplan\tTeleplan Technology Services Sdn Bhd\n00:1F:84\tGigleSem\tGigle Semiconductor\n00:1F:85\tAprivaIs\tApriva ISS, LLC\n00:1F:86\tDigecor\t\n00:1F:87\tSkydigit\tSkydigital Inc.\n00:1F:88\tFmsForce\tFMS Force Measuring Systems AG\n00:1F:89\tSignalio\tSignalion GmbH\n00:1F:8A\tEllionDi\tEllion Digital Inc.\n00:1F:8B\tCacheIq\tCache IQ\n00:1F:8C\tCcs\tCCS Inc.\n00:1F:8D\tIngenieu\tIngenieurbuero Stark GmbH und Ko. KG\n00:1F:8E\tMetrisUs\tMetris USA Inc.\n00:1F:8F\tShanghai\tShanghai Bellmann Digital Source Co.,Ltd.\n00:1F:90\tActionte\tActiontec Electronics, Inc\n00:1F:91\tDbsLodgi\tDBS Lodging Technologies, LLC\n00:1F:92\tAvigilon\tAvigilon Corporation\n00:1F:93\tXiotech\tXiotech Corporation\n00:1F:94\tLascarEl\tLascar Electronics Ltd\n00:1F:95\tSagemcom\tSagemcom Broadband SAS\n00:1F:96\tAprotech\tAprotech Co.Ltd\n00:1F:97\tBertanaS\tBERTANA srl\n00:1F:98\tDaiichi-\tDAIICHI-DENTSU LTD.\n00:1F:99\tSeronics\tSERONICS co.ltd\n00:1F:9A\tNortelNe\tNortel Networks\n00:1F:9B\tPosbro\t\n00:1F:9C\tLedco\t\n00:1F:9D\tCisco\tCisco Systems, Inc\n00:1F:9E\tCisco\tCisco Systems, Inc\n00:1F:9F\tThomsonT\tThomson Telecom Belgium\n00:1F:A0\tA10Netwo\tA10 Networks\n00:1F:A1\tGtran\tGtran Inc\n00:1F:A2\tDatronWo\tDatron World Communications, Inc.\n00:1F:A3\tT&WElect\tT&W Electronics(Shenzhen)Co.,Ltd.\n00:1F:A4\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\n00:1F:A5\tBlue-Whi\tBlue-White Industries\n00:1F:A6\tStiloSrl\tStilo srl\n00:1F:A7\tSonyInte\tSony Interactive Entertainment Inc.\n00:1F:A8\tSmartEne\tSmart Energy Instruments Inc.\n00:1F:A9\tAtlantaD\tAtlanta DTH, Inc.\n00:1F:AA\tTaseon\tTaseon, Inc.\n00:1F:AB\tISHighTe\tI.S High Tech.Inc\n00:1F:AC\tGoodmill\tGoodmill Systems Ltd\n00:1F:AD\tBrownInn\tBrown Innovations, Inc\n00:1F:AE\tBlickSou\tBlick South Africa (Pty) Ltd\n00:1F:AF\tNextio\tNextIO, Inc.\n00:1F:B0\tTimeips\tTimeIPS, Inc.\n00:1F:B1\tCybertec\tCybertech Inc.\n00:1F:B2\tSontheim\tSontheim Industrie Elektronik GmbH\n00:1F:B3\t2wire\t2Wire Inc\n00:1F:B4\tSmartsha\tSmartShare Systems\n00:1F:B5\tI/OInter\tI/O Interconnect Inc.\n00:1F:B6\tChiLinTe\tChi Lin Technology Co., Ltd.\n00:1F:B7\tWimateTe\tWiMate Technologies Corp.\n00:1F:B8\tUniversa\tUniversal Remote Control, Inc.\n00:1F:B9\tPaltroni\tPaltronics\n00:1F:BA\tBoyoungT\tBoyoung Tech\n00:1F:BB\tXenatech\tXenatech Co.,LTD\n00:1F:BC\tEvga\tEVGA Corporation\n00:1F:BD\tKyoceraW\tKyocera Wireless Corp.\n00:1F:BE\tShenzhen\tShenzhen Mopnet Industrial Co.,Ltd\n00:1F:BF\tFulhuaMi\tFulhua Microelectronics Corp. Taiwan Branch\n00:1F:C0\tControlE\tControl Express Finland Oy\n00:1F:C1\tHanlongT\tHanlong Technology Co.,LTD\n00:1F:C2\tJowTongT\tJow Tong Technology Co Ltd\n00:1F:C3\tSmartsyn\tSmartSynch, Inc\n00:1F:C4\tArrisGro\tARRIS Group, Inc.\n00:1F:C5\tNintendo\tNintendo Co., Ltd.\n00:1F:C6\tAsustekC\tASUSTek COMPUTER INC.\n00:1F:C7\tCasioHit\tCasio Hitachi Mobile Communications Co., Ltd.\n00:1F:C8\tUp-Today\tUp-Today Industrial Co., Ltd.\n00:1F:C9\tCisco\tCisco Systems, Inc\n00:1F:CA\tCisco\tCisco Systems, Inc\n00:1F:CB\tNiwSolut\tNIW Solutions\n00:1F:CC\tSamsungE\tSamsung Electronics Co.,Ltd\n00:1F:CD\tSamsungE\tSamsung Electronics Co.,Ltd\n00:1F:CE\tQtechLlc\tQtech Llc\n00:1F:CF\tMsiTechn\tMSI Technology GmbH\n00:1F:D0\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\n00:1F:D1\tOptex\tOptex Co.,Ltd.\n00:1F:D2\tCommtech\tCommtech Technology Macao Commercial Offshore Ltd.\n00:1F:D3\tRivaNetw\tRIVA Networks Inc.\n00:1F:D4\t4ipnet\t4IPNET, INC.\n00:1F:D5\tMicroris\tMICRORISC s.r.o.\n00:1F:D6\tShenzhen\tShenzhen Allywll\n00:1F:D7\tTeleradS\tTelerad Sa\n00:1F:D8\tA-TrustC\tA-TRUST COMPUTER CORPORATION\n00:1F:D9\tRsdCommu\tRSD Communications Ltd\n00:1F:DA\tNortelNe\tNortel Networks\n00:1F:DB\tNetworkS\tNetwork Supply Corp.,\n00:1F:DC\tMobileSa\tMobile Safe Track Ltd\n00:1F:DD\tGdiLlc\tGdi Llc\n00:1F:DE\tNokiaDan\tNokia Danmark A/S\n00:1F:DF\tNokiaDan\tNokia Danmark A/S\n00:1F:E0\tEdgevelo\tEdgeVelocity Corp\n00:1F:E1\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:1F:E2\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:1F:E3\tLgElectr\tLG Electronics (Mobile Communications)\n00:1F:E4\tSonyMobi\tSony Mobile Communications Inc\n00:1F:E5\tIn-Circu\tIn-Circuit GmbH\n00:1F:E6\tAlphion\tAlphion Corporation\n00:1F:E7\tSimet\t\n00:1F:E8\tKurusuga\tKURUSUGAWA Electronics Industry Inc,.\n00:1F:E9\tPrintrex\tPrintrex, Inc.\n00:1F:EA\tAppliedM\tApplied Media Technologies Corporation\n00:1F:EB\tTrioData\tTrio Datacom Pty Ltd\n00:1F:EC\tSynapseÉ\tSynapse Électronique\n00:1F:ED\tTecan\tTecan Systems Inc.\n00:1F:EE\tUbisysTe\tubisys technologies GmbH\n00:1F:EF\tShinseiI\tShinsei Industries Co.,Ltd\n00:1F:F0\tAudioPar\tAudio Partnership\n00:1F:F1\tParadoxH\tParadox Hellas S.A.\n00:1F:F2\tViaTechn\tVIA Technologies, Inc.\n00:1F:F3\tApple\tApple, Inc.\n00:1F:F4\tPowerMon\tPower Monitors, Inc.\n00:1F:F5\tKongsber\tKongsberg Defence & Aerospace\n00:1F:F6\tPsAudioI\tPS Audio International\n00:1F:F7\tNakajima\tNakajima All Precision Co., Ltd.\n00:1F:F8\tSiemensS\tSiemens AG, Sector Industry, Drive Technologies, Motion Control Systems\n00:1F:F9\tAdvanced\tAdvanced Knowledge Associates\n00:1F:FA\tCoretree\tCoretree, Co, Ltd\n00:1F:FB\tGreenPac\tGreen Packet Bhd\n00:1F:FC\tRiccius+\tRiccius+Sohn GmbH\n00:1F:FD\tIndigoMo\tIndigo Mobile Technologies Corp.\n00:1F:FE\tHpnSuppl\tHPN Supply Chain\n00:1F:FF\tRespiron\tRespironics, Inc.\n00:20:00\tLexmarkP\tLexmark (Print Server)\n00:20:01\tDspSolut\tDsp Solutions, Inc.\n00:20:02\tSeritech\tSeritech Enterprise Co., Ltd.\n00:20:03\tPixelPow\tPixel Power Ltd.\n00:20:04\tYamatake\tYAMATAKE-HONEYWELL CO., LTD.\n00:20:05\tSimplete\tsimpletech\n00:20:06\tGarrettC\tGarrett Communications, Inc.\n00:20:07\tSfa\tSfa, Inc.\n00:20:08\tCableCom\tCable & Computer Technology\n00:20:09\tPackardB\tPackard Bell Elec., Inc.\n00:20:0A\tSource-C\tSOURCE-COMM CORP.\n00:20:0B\tOctagon\tOctagon Systems Corp.\n00:20:0C\tAdastra\t\n00:20:0D\tCarlZeis\tCarl Zeiss\n00:20:0E\tNsslglob\tNSSLGlobal Technologies AS\n00:20:0F\tEbrains\tEBRAINS Inc\n00:20:10\tJeolSyst\tJeol System Technology Co. Ltd\n00:20:11\tCanopus\t\n00:20:12\tCamtroni\tCamtronics Medical Systems\n00:20:13\tDiversif\tDiversified Technology, Inc.\n00:20:14\tGlobalVi\tGlobal View Co., Ltd.\n00:20:15\tActisCom\tActis Computer Sa\n00:20:16\tShowaEle\tSHOWA ELECTRIC WIRE & CABLE CO\n00:20:17\tOrbotech\t\n00:20:18\tCisTechn\tCis Technology Inc.\n00:20:19\tOhler\tOhler Gmbh\n00:20:1A\tMrvCommu\tMRV Communications, Inc.\n00:20:1B\tNorthern\tNORTHERN TELECOM/NETWORK\n00:20:1C\tExcel\tExcel, Inc.\n00:20:1D\tKatanaPr\tKatana Products\n00:20:1E\tNetquest\tNetquest Corporation\n00:20:1F\tBestPowe\tBest Power Technology, Inc.\n00:20:20\tMegatron\tMegatron Computer Industries Pty, Ltd.\n00:20:21\tAlgorith\tAlgorithms Software Pvt. Ltd.\n00:20:22\tNmsCommu\tNMS Communications\n00:20:23\tTCTechno\tT.C. Technologies Pty. Ltd\n00:20:24\tPacificC\tPacific Communication Sciences\n00:20:25\tControlT\tControl Technology Inc (Industrial Controls and Network Interfaces)\n00:20:26\tAmkly\tAmkly Systems, Inc.\n00:20:27\tMingFort\tMing Fortune Industry Co., Ltd\n00:20:28\tWestEgg\tWest Egg Systems, Inc.\n00:20:29\tTeleproc\tTeleProcessing CSU/DSU (now owned by ADC/Kentrox)\n00:20:2A\tNVDzine\tN.V. Dzine\n00:20:2B\tAtmlAdva\tATML (Advanced Telecommunications Modules, Ltd.)\n00:20:2C\tWelltron\tWelltronix Co., Ltd.\n00:20:2D\tTaiyo\tTaiyo Corporation\n00:20:2E\tDaystarD\tDaystar Digital\n00:20:2F\tZetaComm\tZeta Communications, Ltd.\n00:20:30\tAnalogDi\tANALOG & DIGITAL SYSTEMS\n00:20:31\tTattileS\tTattile SRL\n00:20:32\tAlcatelT\tAlcatel Taisel\n00:20:33\tSynapseT\tSynapse Technologies, Inc.\n00:20:34\tRotecInd\tRotec Industrieautomation Gmbh\n00:20:35\tIbmInter\tIBM (International Business Machines)\n00:20:36\tBmcSoftw\tBMC Software\n00:20:37\tSeagateT\tSeagate Technology\n00:20:38\tVmeMicro\tVme Microsystems International Corporation\n00:20:39\tScinets\t\n00:20:3A\tDigitalB\tDIGITAL BI0METRICS INC.\n00:20:3B\tWisdm\tWisdm Ltd.\n00:20:3C\tEurotime\tEurotime Ab\n00:20:3D\tHoneywel\tHoneywell Environmental & Combustion Controls\n00:20:3E\tLogicanT\tLogiCan Technologies, Inc.\n00:20:3F\tJuki\tJuki Corporation\n00:20:40\tArrisGro\tARRIS Group, Inc.\n00:20:41\tDataNet\tData Net\n00:20:42\tDatametr\tDatametrics Corp\n00:20:43\tNeuron\tNeuron Company Limited\n00:20:44\tGenitech\tGenitech Pty Ltd\n00:20:45\tIonNetwo\tION Networks, Inc.\n00:20:46\tCiprico\tCiprico, Inc.\n00:20:47\tSteinbre\tSteinbrecher Corp.\n00:20:48\tFore\t\n00:20:49\tComtron\tComtron, Inc.\n00:20:4A\tPronet\tPronet Gmbh\n00:20:4B\tAutocomp\tAutocomputer Co Ltd\n00:20:4C\tMitronCo\tMitron Computer Pte Ltd\n00:20:4D\tInovis\tInovis Gmbh\n00:20:4E\tNetworkS\tNetwork Security Systems, Inc.\n00:20:4F\tDeutsche\tDeutsche Aerospace Ag\n00:20:50\tKoreaCom\tKorea Computer Inc.\n00:20:51\tVerilink\tVerilink Corporation\n00:20:52\tRagula\tRagula Systems\n00:20:53\tHuntsvil\tHuntsville Microsystems, Inc.\n00:20:54\tSycamore\tSycamore Networks\n00:20:55\tAltech\tAltech Co., Ltd.\n00:20:56\tNeoprodu\tNeoproducts\n00:20:57\tTitzeDat\tTITZE DATENTECHNIK GmbH\n00:20:58\tAlliedSi\tAllied Signal Inc.\n00:20:59\tMiroComp\tMiro Computer Products Ag\n00:20:5A\tComputer\tComputer Identics\n00:20:5B\tKentroxL\tKentrox, LLC\n00:20:5C\tInternet\tInterNet Systems of Florida, Inc.\n00:20:5D\tNanomati\tNanomatic Oy\n00:20:5E\tCastleRo\tCastle Rock, Inc.\n00:20:5F\tGammadat\tGammadata Computer Gmbh\n00:20:60\tAlcatelI\tALCATEL ITALIA S.p.A.\n00:20:61\tDynatech\tDynatech Communications Inc\n00:20:62\tScorpion\tScorpion Logic, Ltd.\n00:20:63\tWiproInf\tWipro Infotech Ltd\n00:20:64\tProtecMi\tProtec Microsystems, Inc.\n00:20:65\tSupernet\tSupernet Networking Inc.\n00:20:66\tGeneralM\tGeneral Magic Inc\n00:20:67\tNodeRunn\tNode Runner Inc\n00:20:68\tIsdyne\t\n00:20:69\tIsdn\tIsdn Systems Corporation\n00:20:6A\tOsakaCom\tOsaka Computer Corp.\n00:20:6B\tKonicaMi\tKonica Minolta Holdings, Inc.\n00:20:6C\tEvergree\tEvergreen Technology Corp.\n00:20:6D\tDataRace\tData Race, Inc.\n00:20:6E\tXact\tXact, Inc.\n00:20:6F\tFlowpoin\tFlowpoint Corporation\n00:20:70\tHynet\tHynet, Ltd.\n00:20:71\tIbr\tIbr Gmbh\n00:20:72\tWorklink\tWorklink Innovations\n00:20:73\tFusion\tFusion Systems Corporation\n00:20:74\tSungwoon\tSungwoon Systems\n00:20:75\tMotorola\tMotorola Communication Israel\n00:20:76\tReudo\tReudo Corporation\n00:20:77\tKardios\tKardios Systems Corp.\n00:20:78\tRuntop\t\n00:20:79\tMikron\tMikron Gmbh\n00:20:7A\tWiseComm\tWiSE Communications, Inc.\n00:20:7B\tIntel\tIntel Corporation\n00:20:7C\tAutec\tAutec Gmbh\n00:20:7D\tAdvanced\tAdvanced Computer Applications\n00:20:7E\tFinecom\tFinecom Co., Ltd.\n00:20:7F\tKyoeiSan\tKyoei Sangyo Co., Ltd.\n00:20:80\tSynergyU\tSYNERGY (UK) LTD.\n00:20:81\tTitanEle\tTitan Electronics\n00:20:82\tOneac\tOneac Corporation\n00:20:83\tPrestico\tPresticom Incorporated\n00:20:84\tOcePrint\tOce Printing Systems, Gmbh\n00:20:85\tEaton\tEaton Corporation\n00:20:86\tMicrotec\tMicrotech Electronics Limited\n00:20:87\tMemotec\tMemotec, Inc.\n00:20:88\tGlobalVi\tGlobal Village Communication\n00:20:89\tT3plusNe\tT3PLUS NETWORKING, INC.\n00:20:8A\tSonixCom\tSonix Communications Ltd\n00:20:8B\tLapisTec\tLapis Technologies, Inc.\n00:20:8C\tGalaxyNe\tGalaxy Networks Inc\n00:20:8D\tCmdTechn\tCmd Technology\n00:20:8E\tChevinSo\tChevin Software Eng. Ltd.\n00:20:8F\tEciTelec\tECI Telecom Ltd.\n00:20:90\tAdvanced\tAdvanced Compression Technology, Inc.\n00:20:91\tJ125Nati\tJ125, NATIONAL SECURITY AGENCY\n00:20:92\tChessEng\tChess Engineering B.V.\n00:20:93\tLandings\tLandings Technology Corp.\n00:20:94\tCubix\t\n00:20:95\tRivaElec\tRiva Electronics\n00:20:96\tInvensys\t\n00:20:97\tAppliedS\tApplied Signal Technology\n00:20:98\tHectroni\tHectronic Ab\n00:20:99\tBonElect\tBon Electric Co., Ltd.\n00:20:9A\t3do\tTHE 3DO COMPANY\n00:20:9B\tErsatEle\tErsat Electronic Gmbh\n00:20:9C\tPrimaryA\tPrimary Access Corp.\n00:20:9D\tLippertA\tLippert Automationstechnik\n00:20:9E\tBrownSOp\tBROWN'S OPERATING SYSTEM SERVICES, LTD.\n00:20:9F\tMercuryC\tMercury Computer Systems, Inc.\n00:20:A0\tOaLabora\tOa Laboratory Co., Ltd.\n00:20:A1\tDovatron\t\n00:20:A2\tGalcomNe\tGalcom Networking Ltd.\n00:20:A3\tHarmonic\tHarmonic, Inc\n00:20:A4\tMultipoi\tMultipoint Networks\n00:20:A5\tApiEngin\tApi Engineering\n00:20:A6\tProxim\t\n00:20:A7\tPairgain\tPairgain Technologies, Inc.\n00:20:A8\tSastTech\tSast Technology Corp.\n00:20:A9\tWhiteHor\tWhite Horse Industrial\n00:20:AA\tEricsson\tEricsson Television Limited\n00:20:AB\tMicroInd\tMicro Industries Corp.\n00:20:AC\tInterfle\tInterflex Datensysteme Gmbh\n00:20:AD\tLinq\tLinq Systems\n00:20:AE\tOrnetDat\tOrnet Data Communication Tech.\n00:20:AF\t3com\t\n00:20:B0\tGatewayD\tGateway Devices, Inc.\n00:20:B1\tComtechR\tComtech Research Inc.\n00:20:B2\tGkdGesel\tGKD Gesellschaft Fur Kommunikation Und Datentechnik\n00:20:B3\tTattileS\tTattile SRL\n00:20:B4\tTermaEle\tTerma Elektronik As\n00:20:B5\tYaskawaE\tYaskawa Electric Corporation\n00:20:B6\tAgileNet\tAgile Networks Inc\n00:20:B7\tNamaquaC\tNamaqua Computerware\n00:20:B8\tPrimeOpt\tPrime Option, Inc.\n00:20:B9\tMetricom\tMetricom, Inc.\n00:20:BA\tCenterFo\tCenter For High Performance\n00:20:BB\tZax\tZax Corporation\n00:20:BC\tLongReac\tLong Reach Networks Pty Ltd\n00:20:BD\tNiobrara\tNIOBRARA R & D CORPORATION\n00:20:BE\tLanAcces\tLan Access Corp.\n00:20:BF\tAehrTest\tAehr Test Systems\n00:20:C0\tPulseEle\tPulse Electronics, Inc.\n00:20:C1\tSaxa\tSAXA, Inc.\n00:20:C2\tTexasMem\tTexas Memory Systems, Inc.\n00:20:C3\tCounterS\tCounter Solutions Ltd.\n00:20:C4\tInet\tInet,Inc.\n00:20:C5\tEagleNe2\tEagle NE2000\n00:20:C6\tNectec\t\n00:20:C7\tAkaiProf\tAKAI Professional M.I. Corp.\n00:20:C8\tLarscom\tLarscom Incorporated\n00:20:C9\tVictronB\tVictron Bv\n00:20:CA\tDigitalO\tDigital Ocean\n00:20:CB\tPretecEl\tPretec Electronics Corp.\n00:20:CC\tDigitalS\tDigital Services, Ltd.\n00:20:CD\tHybridNe\tHybrid Networks, Inc.\n00:20:CE\tLogicalD\tLogical Design Group, Inc.\n00:20:CF\tTestMeas\tTEST & MEASUREMENT SYSTEMS INC\n00:20:D0\tVersalyn\tVersalynx Corp.\n00:20:D1\tMicrocom\tMICROCOMPUTER SYSTEMS (M) SDN.\n00:20:D2\tRadDataC\tRAD Data Communications Ltd\n00:20:D3\tOstOuetS\tOST (Ouet Standard Telematique)\n00:20:D4\tCabletro\tCabletron Systems, Inc.\n00:20:D5\tVipa\tVipa Gmbh\n00:20:D6\tBreezeco\tBreezecom, Ltd.\n00:20:D7\tJapanMin\tJAPAN MINICOMPUTER SYSTEMS CO., Ltd.\n00:20:D8\tNortelNe\tNortel Networks\n00:20:D9\tPanasoni\tPANASONIC TECHNOLOGIES, INC./MIECO-US\n00:20:DA\tAlcatel-\tAlcatel-Lucent Enterprise\n00:20:DB\tXnetTech\tXnet Technology, Inc.\n00:20:DC\tDensitro\tDensitron Taiwan Ltd\n00:20:DD\tCybertec\tCybertec Pty Ltd\n00:20:DE\tJapanDig\tJAPAN DIGITAL LABORAT'Y CO.LTD\n00:20:DF\tKyosanEl\tKyosan Electric Mfg. Co., Ltd.\n00:20:E0\tActionte\tActiontec Electronics, Inc\n00:20:E1\tAlamarEl\tAlamar Electronics\n00:20:E2\tInformat\tInformation Resource Engineering\n00:20:E3\tMcdKenco\tMcd Kencom Corporation\n00:20:E4\tHsingTec\tHsing Tech Enterprise Co., Ltd\n00:20:E5\tApexData\tApex Data\n00:20:E6\tLidkopin\tLidkoping Machine Tools Ab\n00:20:E7\tB&WNucle\tB&W NUCLEAR SERVICE COMPANY\n00:20:E8\tDatatrek\tDatatrek Corporation\n00:20:E9\tDantel\t\n00:20:EA\tEfficien\tEfficient Networks, Inc.\n00:20:EB\tCincinna\tCincinnati Microwave, Inc.\n00:20:EC\tTechware\tTechware Systems Corp.\n00:20:ED\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO., LTD.\n00:20:EE\tGtech\t\n00:20:EF\tUsc\tUsc Corporation\n00:20:F0\tUniversa\tUniversal Microelectronics Co.\n00:20:F1\tAltosInd\tAltos India Limited\n00:20:F2\tOracle\tOracle Corporation\n00:20:F3\tRaynet\tRaynet Corporation\n00:20:F4\tSpectrix\tSpectrix Corporation\n00:20:F5\tPandatel\tPandatel Ag\n00:20:F6\tNetTekKa\tNet Tek & Karlnet Inc\n00:20:F7\tCyberdat\tCyberdata Corporation\n00:20:F8\tCarreraC\tCarrera Computers Inc\n00:20:F9\tParalink\tParalink Networks, Inc.\n00:20:FA\tGde\tGde Systems, Inc.\n00:20:FB\tOctelCom\tOctel Communications Corp.\n00:20:FC\tMatrox\t\n00:20:FD\tItvTechn\tItv Technologies, Inc.\n00:20:FE\tTopware/\tTOPWARE INC. / GRAND COMPUTER\n00:20:FF\tSymmetri\tSymmetrical Technologies\n00:21:00\tGemtekTe\tGemtek Technology Co., Ltd.\n00:21:01\tAplicaci\tAplicaciones Electronicas Quasar (AEQ)\n00:21:02\tUpdatelo\tUpdateLogic Inc.\n00:21:03\tGhiElect\tGHI Electronics, LLC\n00:21:04\tGigasetC\tGigaset Communications GmbH\n00:21:05\tAlcatel-\tAlcatel-Lucent IPD\n00:21:06\tRimTesti\tRIM Testing Services\n00:21:07\tSeowonin\tSeowonintech Co Ltd.\n00:21:08\tNokiaDan\tNokia Danmark A/S\n00:21:09\tNokiaDan\tNokia Danmark A/S\n00:21:0A\tByd:Sign\tbyd:sign Corporation\n00:21:0B\tGeminiTr\tGemini Traze Rfid Pvt. Ltd.\n00:21:0C\tCymtec\tCymtec Systems, Inc.\n00:21:0D\tSamsinIn\tSamsin Innotec\n00:21:0E\tOrpakLTD\tOrpak Systems L.T.D.\n00:21:0F\tCernium\tCernium Corp\n00:21:10\tClearbox\tClearbox Systems\n00:21:11\tUniphone\tUniphone Inc.\n00:21:12\tWiscomSy\tWiscom System Co.,Ltd\n00:21:13\tPadtec\tPadtec S/A\n00:21:14\tHylabTec\tHylab Technology Inc.\n00:21:15\tPhyweSys\tPHYWE Systeme GmbH & Co. KG\n00:21:16\tTranscon\tTranscon Electronic Systems, spol. s r. o.\n00:21:17\tTellord\t\n00:21:18\tAthenaTe\tAthena Tech, Inc.\n00:21:19\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\n00:21:1A\tLintech\tLInTech Corporation\n00:21:1B\tCisco\tCisco Systems, Inc\n00:21:1C\tCisco\tCisco Systems, Inc\n00:21:1D\tDataline\tDataline AB\n00:21:1E\tArrisGro\tARRIS Group, Inc.\n00:21:1F\tShinsung\tShinsung Deltatech Co.,Ltd.\n00:21:20\tSequelTe\tSequel Technologies\n00:21:21\tVrmagic\tVRmagic GmbH\n00:21:22\tChip-Pro\tChip-pro Ltd.\n00:21:23\tAerosatA\tAerosat Avionics\n00:21:24\tOptos\tOptos Plc\n00:21:25\tKukJeTon\tKUK JE TONG SHIN Co.,LTD\n00:21:26\tShenzhen\tShenzhen Torch Equipment Co., Ltd.\n00:21:27\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n00:21:28\tOracle\tOracle Corporation\n00:21:29\tCisco-Li\tCisco-Linksys, LLC\n00:21:2A\tAudiovox\tAudiovox Corporation\n00:21:2B\tMsaAuer\tMSA Auer\n00:21:2C\tSemindia\tSemIndia System Private Limited\n00:21:2D\tScimolex\tScimolex Corporation\n00:21:2E\tDresden-\tdresden-elektronik\n00:21:2F\tPhoebeMi\tPhoebe Micro Inc.\n00:21:30\tKeicoHig\tKeico Hightech Inc.\n00:21:31\tBlynke\tBlynke Inc.\n00:21:32\tMastercl\tMasterclock, Inc.\n00:21:33\tBuilding\tBuilding B, Inc\n00:21:34\tBrandywi\tBrandywine Communications\n00:21:35\tAlcatel-\tALCATEL-LUCENT\n00:21:36\tArrisGro\tARRIS Group, Inc.\n00:21:37\tBayContr\tBay Controls, LLC\n00:21:38\tCepheid\t\n00:21:39\tEscherlo\tEscherlogic Inc.\n00:21:3A\tWinchest\tWinchester Systems Inc.\n00:21:3B\tBerkshir\tBerkshire Products, Inc\n00:21:3C\tAliphcom\t\n00:21:3D\tCermetek\tCermetek Microelectronics, Inc.\n00:21:3E\tTomtom\t\n00:21:3F\tA-TeamTe\tA-Team Technology Ltd.\n00:21:40\tEnTechno\tEN Technologies Inc.\n00:21:41\tRadlive\t\n00:21:42\tAdvanced\tAdvanced Control Systems doo\n00:21:43\tArrisGro\tARRIS Group, Inc.\n00:21:44\tSsTeleco\tSS Telecoms\n00:21:45\tSemptian\tSemptian Technologies Ltd.\n00:21:46\tSanmina-\tSanmina-SCI\n00:21:47\tNintendo\tNintendo Co., Ltd.\n00:21:48\tKacoSola\tKaco Solar Korea\n00:21:49\tChinaDah\tChina Daheng Group ,Inc.\n00:21:4A\tPixelVel\tPixel Velocity, Inc\n00:21:4B\tShenzhen\tShenzhen HAMP Science & Technology Co.,Ltd\n00:21:4C\tSamsungE\tSamsung Electronics Co.,Ltd\n00:21:4D\tGuangzho\tGuangzhou Skytone Transmission Technology Com. Ltd.\n00:21:4E\tGsYuasaP\tGS Yuasa Power Supply Ltd.\n00:21:4F\tAlpsElec\tAlps Electric Co.,Ltd.\n00:21:50\tEyeviewE\tEyeview Electronics\n00:21:51\tMillinet\tMillinet Co., Ltd.\n00:21:52\tGeneralS\tGeneral Satellite Research & Development Limited\n00:21:53\tSeamicro\tSeaMicro Inc.\n00:21:54\tD-TacqSo\tD-TACQ Solutions Ltd\n00:21:55\tCisco\tCisco Systems, Inc\n00:21:56\tCisco\tCisco Systems, Inc\n00:21:57\tNational\tNational Datacast, Inc.\n00:21:58\tStyleFly\tStyle Flying Technology Co.\n00:21:59\tJuniperN\tJuniper Networks\n00:21:5A\tHewlettP\tHewlett Packard\n00:21:5B\tSenseany\tSenseAnywhere\n00:21:5C\tIntelCor\tIntel Corporate\n00:21:5D\tIntelCor\tIntel Corporate\n00:21:5E\tIbm\tIBM Corp\n00:21:5F\tIhse\tIHSE GmbH\n00:21:60\tHideaSol\tHidea Solutions Co. Ltd.\n00:21:61\tYournet\tYournet Inc.\n00:21:62\tNortelNe\tNortel Networks\n00:21:63\tAskeyCom\tAskey Computer Corp\n00:21:64\tSpecialD\tSpecial Design Bureau for Seismic Instrumentation\n00:21:65\tPresstek\tPresstek Inc.\n00:21:66\tNovatel\tNovAtel Inc.\n00:21:67\tHwaJinT&\tHWA JIN T&I Corp.\n00:21:68\tIveiaLlc\tiVeia, LLC\n00:21:69\tPrologix\tPrologix, LLC.\n00:21:6A\tIntelCor\tIntel Corporate\n00:21:6B\tIntelCor\tIntel Corporate\n00:21:6C\tOdva\t\n00:21:6D\tSoltech\tSoltech Co., Ltd.\n00:21:6E\tFunction\tFunction ATI (Huizhou) Telecommunications Co., Ltd.\n00:21:6F\tSymcom\tSymCom, Inc.\n00:21:70\tDell\tDell Inc.\n00:21:71\tWesungTn\tWesung TNC Co., Ltd.\n00:21:72\tSeoultek\tSeoultek Valley\n00:21:73\tIonTorre\tIon Torrent Systems, Inc.\n00:21:74\tAvalanWi\tAvaLAN Wireless\n00:21:75\tPacificS\tPacific Satellite International Ltd.\n00:21:76\tYmaxTele\tYMax Telecom Ltd.\n00:21:77\tWLGoreAs\tW. L. Gore & Associates\n00:21:78\tMatusche\tMatuschek Messtechnik GmbH\n00:21:79\tIogear\tIOGEAR, Inc.\n00:21:7A\tSejinEle\tSejin Electron, Inc.\n00:21:7B\tBastec\tBastec AB\n00:21:7C\t2wire\t2Wire Inc\n00:21:7D\tPyxisSRL\tPyxis S.R.L.\n00:21:7E\tTelitCom\tTelit Communication s.p.a\n00:21:7F\tIntracoT\tIntraco Technology Pte Ltd\n00:21:80\tArrisGro\tARRIS Group, Inc.\n00:21:81\tSi2Micro\tSi2 Microsystems Limited\n00:21:82\tSandlink\tSandLinks Systems, Ltd.\n00:21:83\tAndritzH\tANDRITZ HYDRO GmbH\n00:21:84\tPowersof\tPowersoft Srl\n00:21:85\tMicro-St\tMICRO-STAR INT'L CO.,LTD.\n00:21:86\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\n00:21:87\tImacs\tImacs GmbH\n00:21:88\tEmc\tEMC Corporation\n00:21:89\tApptech\tAppTech, Inc.\n00:21:8A\tElectron\tElectronic Design and Manufacturing Company\n00:21:8B\tWesconTe\tWescon Technology, Inc.\n00:21:8C\tTopcontr\tTopControl GMBH\n00:21:8D\tApRouter\tAP Router Ind. Eletronica LTDA\n00:21:8E\tMekics\tMekics Co., Ltd.\n00:21:8F\tAvantgar\tAvantgarde Acoustic Lautsprechersysteme GmbH\n00:21:90\tGoliathS\tGoliath Solutions\n00:21:91\tD-Link\tD-Link Corporation\n00:21:92\tBaodingG\tBaoding Galaxy Electronic Technology  Co.,Ltd\n00:21:93\tVideofon\tVideofon MV\n00:21:94\tPingComm\tPing Communication\n00:21:95\tGwdMedia\tGWD Media Limited\n00:21:96\tTelseySP\tTelsey  S.p.A.\n00:21:97\tElitegro\tElitegroup Computer Systems Co.,Ltd.\n00:21:98\tThaiRadi\tThai Radio Co, LTD\n00:21:99\tVacon\tVacon Plc\n00:21:9A\tCambridg\tCambridge Visual Networks Ltd\n00:21:9B\tDell\tDell Inc.\n00:21:9C\tHoneywld\tHoneywld Technology Corp.\n00:21:9D\tAdesysBv\tAdesys BV\n00:21:9E\tSonyMobi\tSony Mobile Communications Inc\n00:21:9F\tSatelOy\tSatel Oy\n00:21:A0\tCisco\tCisco Systems, Inc\n00:21:A1\tCisco\tCisco Systems, Inc\n00:21:A2\tEke-Elec\tEKE-Electronics Ltd.\n00:21:A3\tMicromin\tMicromint\n00:21:A4\tDbiiNetw\tDbii Networks\n00:21:A5\tErlphase\tERLPhase Power Technologies Ltd.\n00:21:A6\tVideotec\tVideotec Spa\n00:21:A7\tHantleSy\tHantle System Co., Ltd.\n00:21:A8\tTelephon\tTelephonics Corporation\n00:21:A9\tMobilink\tMobilink Telecom Co.,Ltd\n00:21:AA\tNokiaDan\tNokia Danmark A/S\n00:21:AB\tNokiaDan\tNokia Danmark A/S\n00:21:AC\tInfrared\tInfrared Integrated Systems Ltd\n00:21:AD\tNordicId\tNordic ID Oy\n00:21:AE\tAlcatel-\tALCATEL-LUCENT FRANCE - WTD\n00:21:AF\tRadioFre\tRadio Frequency Systems\n00:21:B0\tTycoTele\tTyco Telecommunications\n00:21:B1\tDigitalS\tDigital Solutions Ltd\n00:21:B2\tFiberbla\tFiberblaze A/S\n00:21:B3\tRossCont\tRoss Controls\n00:21:B4\tAproMedi\tApro Media Co., Ltd\n00:21:B5\tGalvanic\tGalvanic Ltd\n00:21:B6\tTriactaP\tTriacta Power Technologies Inc.\n00:21:B7\tLexmarkI\tLexmark International Inc.\n00:21:B8\tInphi\tInphi Corporation\n00:21:B9\tUniversa\tUniversal Devices Inc.\n00:21:BA\tTexasIns\tTexas Instruments\n00:21:BB\tRikenKei\tRiken Keiki Co., Ltd.\n00:21:BC\tZalaComp\tZala Computer\n00:21:BD\tNintendo\tNintendo Co., Ltd.\n00:21:BE\tCiscoSpv\tCisco SPVTG\n00:21:BF\tHitachiH\tHitachi High-Tech Control Systems Corporation\n00:21:C0\tMobileAp\tMobile Appliance, Inc.\n00:21:C1\tAbbOy/Me\tABB Oy / Medium Voltage Products\n00:21:C2\tGlCommun\tGL Communications Inc\n00:21:C3\tCornellC\tCORNELL Communications, Inc.\n00:21:C4\tConsiliu\tConsilium AB\n00:21:C5\t3dsp\t3DSP Corp\n00:21:C6\tCsjGloba\tCSJ Global, Inc.\n00:21:C7\tRussound\t\n00:21:C8\tLohuisNe\tLOHUIS Networks\n00:21:C9\tWavecomA\tWavecom Asia Pacific Limited\n00:21:CA\tArtSyste\tART System Co., Ltd.\n00:21:CB\tSmsTecno\tSms Tecnologia Eletronica Ltda\n00:21:CC\tFlextron\tFlextronics International\n00:21:CD\tLivetv\t\n00:21:CE\tNtc-Metr\tNTC-Metrotek\n00:21:CF\tCryptoGr\tThe Crypto Group\n00:21:D0\tGlobalDi\tGlobal Display Solutions Spa\n00:21:D1\tSamsungE\tSamsung Electronics Co.,Ltd\n00:21:D2\tSamsungE\tSamsung Electronics Co.,Ltd\n00:21:D3\tBocomSec\tBOCOM SECURITY(ASIA PACIFIC) LIMITED\n00:21:D4\tVollmerW\tVollmer Werke GmbH\n00:21:D5\tX2e\tX2E GmbH\n00:21:D6\tLxiConso\tLXI Consortium\n00:21:D7\tCisco\tCisco Systems, Inc\n00:21:D8\tCisco\tCisco Systems, Inc\n00:21:D9\tSekonic\tSekonic Corporation\n00:21:DA\tAutomati\tAutomation Products Group Inc.\n00:21:DB\tSantachi\tSantachi Video Technology (Shenzhen) Co., Ltd.\n00:21:DC\tTecnoala\tTECNOALARM S.r.l.\n00:21:DD\tNorthsta\tNorthstar Systems Corp\n00:21:DE\tFireproW\tFirepro Wireless\n00:21:DF\tMartinCh\tMartin Christ GmbH\n00:21:E0\tCommagil\tCommAgility Ltd\n00:21:E1\tNortelNe\tNortel Networks\n00:21:E2\tVisagoCo\tvisago Systems & Controls GmbH & Co. KG\n00:21:E3\tSerialte\tSerialTek LLC\n00:21:E4\tI-Win\t\n00:21:E5\tDisplayS\tDisplay Solution AG\n00:21:E6\tStarligh\tStarlight Video Limited\n00:21:E7\tInformat\tInformatics Services Corporation\n00:21:E8\tMurataMa\tMurata Manufacturing Co., Ltd.\n00:21:E9\tApple\tApple, Inc.\n00:21:EA\tBystroni\tBystronic Laser AG\n00:21:EB\tEspLlc\tEsp Systems, Llc\n00:21:EC\tSolutron\tSolutronic GmbH\n00:21:ED\tTelegesi\tTelegesis\n00:21:EE\tFullSpec\tFull Spectrum Inc.\n00:21:EF\tKapsys\t\n00:21:F0\tEw3Techn\tEW3 Technologies LLC\n00:21:F1\tTutusDat\tTutus Data AB\n00:21:F2\tEasy3cal\tEASY3CALL Technology Limited\n00:21:F3\tSi14\tSi14 SpA\n00:21:F4\tInrange\tINRange Systems, Inc\n00:21:F5\tWesternE\tWestern Engravers Supply, Inc.\n00:21:F6\tOracle\tOracle Corporation\n00:21:F7\tHpnSuppl\tHPN Supply Chain\n00:21:F8\tEnseo\tEnseo, Inc.\n00:21:F9\tWirecomT\tWIRECOM Technologies\n00:21:FA\tA4spTech\tA4SP Technologies Ltd.\n00:21:FB\tLgElectr\tLG Electronics (Mobile Communications)\n00:21:FC\tNokiaDan\tNokia Danmark A/S\n00:21:FD\tLacroixT\tLacroix Traffic S.A.U\n00:21:FE\tNokiaDan\tNokia Danmark A/S\n00:21:FF\tCyfrowyP\tCyfrowy Polsat SA\n00:22:00\tIbm\tIBM Corp\n00:22:01\tAksysNet\tAksys Networks Inc\n00:22:02\tExcitoEl\tExcito Elektronik i Skåne AB\n00:22:03\tGlensoun\tGlensound Electronics Ltd\n00:22:04\tKoratek\t\n00:22:05\tWelinkSo\tWeLink Solutions, Inc.\n00:22:06\tCyberdyn\tCyberdyne Inc.\n00:22:07\tIntenoBr\tInteno Broadband Technology AB\n00:22:08\tCerticom\tCerticom Corp\n00:22:09\tOmronHea\tOmron Healthcare Co., Ltd\n00:22:0A\tOnlive\tOnLive, Inc\n00:22:0B\tNational\tNational Source Coding Center\n00:22:0C\tCisco\tCisco Systems, Inc\n00:22:0D\tCisco\tCisco Systems, Inc\n00:22:0E\tIndigoSe\tIndigo Security Co., Ltd.\n00:22:0F\tMocaMult\tMoCA (Multimedia over Coax Alliance)\n00:22:10\tArrisGro\tARRIS Group, Inc.\n00:22:11\tRohati\tRohati Systems\n00:22:12\tCaiNetwo\tCAI Networks, Inc.\n00:22:13\tPci\tPci Corporation\n00:22:14\tRinnaiKo\tRinnai Korea\n00:22:15\tAsustekC\tASUSTek COMPUTER INC.\n00:22:16\tShibaura\tShibaura Vending Machine Corporation\n00:22:17\tNeatElec\tNeat Electronics\n00:22:18\tAkamaiTe\tAkamai Technologies Inc\n00:22:19\tDell\tDell Inc.\n00:22:1A\tAudioPre\tAudio Precision\n00:22:1B\tMorega\tMorega Systems\n00:22:1C\tPrivate\t\n00:22:1D\tFreegene\tFreegene Technology LTD\n00:22:1E\tMediaDev\tMedia Devices Co., Ltd.\n00:22:1F\tEsangTec\teSang Technologies Co., Ltd.\n00:22:20\tMitacTec\tMitac Technology Corp\n00:22:21\tItohDenk\tItoh Denki Co,Ltd.\n00:22:22\tSchaffne\tSchaffner Deutschland GmbH\n00:22:23\tTimekeep\tTimeKeeping Systems, Inc.\n00:22:24\tGoodWill\tGood Will Instrument Co., Ltd.\n00:22:25\tThalesAv\tThales Avionics Ltd\n00:22:26\tAvaak\tAvaak, Inc.\n00:22:27\tUv-Elect\tuv-electronic GmbH\n00:22:28\tBreezeIn\tBreeze Innovations Ltd.\n00:22:29\tCompumed\tCompumedics Ltd\n00:22:2A\tSoundear\tSoundEar A/S\n00:22:2B\tNucomm\tNucomm, Inc.\n00:22:2C\tCeton\tCeton Corp\n00:22:2D\tSmcNetwo\tSMC Networks Inc.\n00:22:2E\tMaintech\tmaintech GmbH\n00:22:2F\tOpenGrid\tOpen Grid Computing, Inc.\n00:22:30\tFuturelo\tFutureLogic Inc.\n00:22:31\tSmt&C\tSMT&C Co., Ltd.\n00:22:32\tDesignDe\tDesign Design Technology Ltd\n00:22:33\tAdbBroad\tADB Broadband Italia\n00:22:34\tCorventi\tCorventis Inc.\n00:22:35\tStrukton\tStrukton Systems bv\n00:22:36\tVectorSp\tVector Sp. Z O.O.\n00:22:37\tShinhint\tShinhint Group\n00:22:38\tLogiplus\t\n00:22:39\tIndianaL\tIndiana Life Sciences Incorporated\n00:22:3A\tCiscoSpv\tCisco SPVTG\n00:22:3B\tCommunic\tCommunication Networks, LLC\n00:22:3C\tRatioEnt\tRATIO Entwicklungen GmbH\n00:22:3D\tJumpgenL\tJumpGen Systems, LLC\n00:22:3E\tIrtrans\tIRTrans GmbH\n00:22:3F\tNetgear\t\n00:22:40\tUniversa\tUniversal Telecom S/A\n00:22:41\tApple\tApple, Inc.\n00:22:42\tAlacron\tAlacron Inc.\n00:22:43\tAzurewav\tAzureWave Technology Inc.\n00:22:44\tChengduL\tChengdu Linkon Communications Device Co., Ltd\n00:22:45\tLeineLin\tLeine & Linde AB\n00:22:46\tEvocInte\tEvoc Intelligent Technology Co.,Ltd.\n00:22:47\tDacEngin\tDac Engineering Co., Ltd.\n00:22:48\tMicrosof\tMicrosoft Corporation\n00:22:49\tHomeMult\tHome Multienergy Sl\n00:22:4A\tRaylase\tRaylase Ag\n00:22:4B\tAirtechT\tAirtech Technologies, Inc.\n00:22:4C\tNintendo\tNintendo Co., Ltd.\n00:22:4D\tMitacInt\tMitac International Corp.\n00:22:4E\tSeenergy\tSEEnergy Corp.\n00:22:4F\tByzoroNe\tByzoro Networks Ltd.\n00:22:50\tPointSix\tPoint Six Wireless, LLC\n00:22:51\tLumasens\tLumasense Technologies\n00:22:52\tZollLife\tZOLL Lifecor Corporation\n00:22:53\tEntorian\tEntorian Technologies\n00:22:54\tBigelowA\tBigelow Aerospace\n00:22:55\tCisco\tCisco Systems, Inc\n00:22:56\tCisco\tCisco Systems, Inc\n00:22:57\t3comEuro\t3COM EUROPE LTD\n00:22:58\tTaiyoYud\tTaiyo Yuden Co., Ltd.\n00:22:59\tGuangzho\tGuangzhou New Postcom Equipment Co.,Ltd.\n00:22:5A\tGardeSec\tGarde Security AB\n00:22:5B\tTeradici\tTeradici Corporation\n00:22:5C\tMultimed\tMultimedia & Communication Technology\n00:22:5D\tDigicabl\tDigicable Network India Pvt. Ltd.\n00:22:5E\tUwinTech\tUwin Technologies Co.,LTD\n00:22:5F\tLiteonTe\tLiteon Technology Corporation\n00:22:60\tAfreey\tAFREEY Inc.\n00:22:61\tFrontier\tFrontier Silicon Ltd\n00:22:62\tBepMarin\tBEP Marine\n00:22:63\tKoosTech\tKoos Technical Services, Inc.\n00:22:64\tHewlettP\tHewlett Packard\n00:22:65\tNokiaDan\tNokia Danmark A/S\n00:22:66\tNokiaDan\tNokia Danmark A/S\n00:22:67\tNortelNe\tNortel Networks\n00:22:68\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:22:69\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:22:6A\tHoneywel\tHoneywell\n00:22:6B\tCisco-Li\tCisco-Linksys, LLC\n00:22:6C\tLinkspri\tLinkSprite Technologies, Inc.\n00:22:6D\tShenzhen\tShenzhen GIEC Electronics Co., Ltd.\n00:22:6E\tGowellEl\tGowell Electronic Limited\n00:22:6F\t3onedata\t3onedata Technology Co. Ltd.\n00:22:70\tAbkNorth\tABK North America, LLC\n00:22:71\tJägerCom\tJäger Computergesteuerte Meßtechnik GmbH.\n00:22:72\tAmerican\tAmerican Micro-Fuel Device Corp.\n00:22:73\tTechway\t\n00:22:74\tFamilyph\tFamilyPhone AB\n00:22:75\tBelkinIn\tBelkin International Inc.\n00:22:76\tTripleEy\tTriple EYE B.V.\n00:22:77\tNecAustr\tNEC Australia Pty Ltd\n00:22:78\tShenzhen\tShenzhen  Tongfang Multimedia  Technology Co.,Ltd.\n00:22:79\tNipponCo\tNippon Conlux Co., Ltd.\n00:22:7A\tTelecomD\tTelecom Design\n00:22:7B\tApogeeLa\tApogee Labs, Inc.\n00:22:7C\tWooriSmt\tWoori SMT Co.,ltd\n00:22:7D\tYeData\tYe Data Inc.\n00:22:7E\tChengdu3\tChengdu 30Kaitian Communication Industry Co.Ltd\n00:22:7F\tRuckusWi\tRuckus Wireless\n00:22:80\tA2bElect\tA2B Electronics AB\n00:22:81\tDaintree\tDaintree Networks Pty\n00:22:82\t8086Cons\t8086 Consultancy\n00:22:83\tJuniperN\tJuniper Networks\n00:22:84\tDesayA&V\tDESAY A&V SCIENCE AND TECHNOLOGY CO.,LTD\n00:22:85\tNomusCom\tNomus Comm Systems\n00:22:86\tAstron\t\n00:22:87\tTitanWir\tTitan Wireless LLC\n00:22:88\tSagrad\tSagrad, Inc.\n00:22:89\tOptosecu\tOptosecurity Inc.\n00:22:8A\tTeratron\tTeratronik elektronische systeme gmbh\n00:22:8B\tKensingt\tKensington Computer Products Group\n00:22:8C\tPhotonEu\tPhoton Europe GmbH\n00:22:8D\tGbsLabor\tGBS Laboratories LLC\n00:22:8E\tTv-Numer\tTV-NUMERIC\n00:22:8F\tCnrs\t\n00:22:90\tCisco\tCisco Systems, Inc\n00:22:91\tCisco\tCisco Systems, Inc\n00:22:92\tCinetal\t\n00:22:93\tZte\tzte corporation\n00:22:94\tKyocera\tKyocera Corporation\n00:22:95\tSgmTechn\tSGM Technology for lighting spa\n00:22:96\tLinowave\tLinoWave Corporation\n00:22:97\tXmosSemi\tXMOS Semiconductor\n00:22:98\tSonyMobi\tSony Mobile Communications Inc\n00:22:99\tSeamicro\tSeaMicro Inc.\n00:22:9A\tLastar\tLastar, Inc.\n00:22:9B\tAverlogi\tAverLogic Technologies, Inc.\n00:22:9C\tVerismoN\tVerismo Networks Inc\n00:22:9D\tPyung-Hw\tPYUNG-HWA IND.CO.,LTD\n00:22:9E\tSocialAi\tSocial Aid Research Co., Ltd.\n00:22:9F\tSensysTr\tSensys Traffic AB\n00:22:A0\tDelphi\tDelphi Corporation\n00:22:A1\tHuaweiSy\tHuawei Symantec Technologies Co.,Ltd.\n00:22:A2\tXtramusT\tXtramus Technologies\n00:22:A3\tCaliforn\tCalifornia Eastern Laboratories\n00:22:A4\t2wire\t2Wire Inc\n00:22:A5\tTexasIns\tTexas Instruments\n00:22:A6\tSonyComp\tSony Computer Entertainment America\n00:22:A7\tTycoElec\tTyco Electronics AMP GmbH\n00:22:A8\tOumanOy\tOuman Oy\n00:22:A9\tLgElectr\tLG Electronics (Mobile Communications)\n00:22:AA\tNintendo\tNintendo Co., Ltd.\n00:22:AB\tShenzhen\tShenzhen Turbosight Technology Ltd\n00:22:AC\tHangzhou\tHangzhou Siyuan Tech. Co., Ltd\n00:22:AD\tTelesisT\tTelesis Technologies, Inc.\n00:22:AE\tMattel\tMattel Inc.\n00:22:AF\tSafetyVi\tSafety Vision\n00:22:B0\tD-Link\tD-Link Corporation\n00:22:B1\tElbit\tElbit Systems Ltd.\n00:22:B2\t4rfCommu\t4RF Communications Ltd\n00:22:B3\tSeiSPA\tSei S.p.A.\n00:22:B4\tArrisGro\tARRIS Group, Inc.\n00:22:B5\tNovita\t\n00:22:B6\tSuperflo\tSuperflow Technologies Group\n00:22:B7\tGssGrund\tGSS Grundig SAT-Systems GmbH\n00:22:B8\tNorcott\t\n00:22:B9\tAnalogix\tAnalogix Seminconductor, Inc\n00:22:BA\tHuthElek\tHUTH Elektronik Systeme GmbH\n00:22:BB\tBeyerdyn\tbeyerdynamic GmbH & Co. KG\n00:22:BC\tJdsuFran\tJDSU France SAS\n00:22:BD\tCisco\tCisco Systems, Inc\n00:22:BE\tCisco\tCisco Systems, Inc\n00:22:BF\tSieampGr\tSieAmp Group of Companies\n00:22:C0\tShenzhen\tShenzhen Forcelink Electronic Co, Ltd\n00:22:C1\tActiveSt\tActive Storage Inc.\n00:22:C2\tProviewE\tProview Eletrônica do Brasil LTDA\n00:22:C3\tZeeportT\tZeeport Technology Inc.\n00:22:C4\tEpro\tepro GmbH\n00:22:C5\tInforson\tINFORSON Co,Ltd.\n00:22:C6\tSutus\tSutus Inc\n00:22:C7\tSeggerMi\tSEGGER Microcontroller GmbH & Co. KG\n00:22:C8\tAppliedI\tApplied Instruments B.V.\n00:22:C9\tLenordBa\tLenord, Bauer & Co GmbH\n00:22:CA\tAnvizBio\tAnviz Biometric Tech. Co., Ltd.\n00:22:CB\tIonodes\tIONODES Inc.\n00:22:CC\tScilog\tSciLog, Inc.\n00:22:CD\tAredTech\tAred Technology Co., Ltd.\n00:22:CE\tCiscoSpv\tCisco SPVTG\n00:22:CF\tPlanexCo\tPlanex Communications Inc.\n00:22:D0\tPolarEle\tPolar Electro Oy\n00:22:D1\tAlbrecht\tAlbrecht Jung GmbH & Co. KG\n00:22:D2\tAllEarth\tAll Earth Comércio de Eletrônicos LTDA.\n00:22:D3\tHub-Tech\t\n00:22:D4\tComworth\tComWorth Co., Ltd.\n00:22:D5\tEatonEle\tEaton Corp. Electrical Group Data Center Solutions - Pulizzi\n00:22:D6\tCypak\tCypak AB\n00:22:D7\tNintendo\tNintendo Co., Ltd.\n00:22:D8\tShenzhen\tShenzhen GST Security and Safety Technology Limited\n00:22:D9\tFortexIn\tFortex Industrial Ltd.\n00:22:DA\tAnatekLl\tAnatek, Llc\n00:22:DB\tTranslog\tTranslogic Corporation\n00:22:DC\tVigilHea\tVigil Health Solutions Inc.\n00:22:DD\tProtecta\tProtecta Electronics Ltd\n00:22:DE\tOppoDigi\tOPPO Digital, Inc.\n00:22:DF\tTamuzMon\tTAMUZ Monitors\n00:22:E0\tAtlantic\tAtlantic Software Technologies S.r.L.\n00:22:E1\tZortLabs\tZORT Labs, LLC.\n00:22:E2\tWabtecTr\tWABTEC Transit Division\n00:22:E3\tAmerigon\t\n00:22:E4\tApassTec\tApass Technology Co., Ltd.\n00:22:E5\tFisher-R\tFisher-Rosemount Systems Inc.\n00:22:E6\tIntellig\tIntelligent Data\n00:22:E7\tWpsParki\tWPS Parking Systems\n00:22:E8\tApplitio\tApplition Co., Ltd.\n00:22:E9\tProvisio\tProVision Communications\n00:22:EA\tRustelco\tRustelcom Inc.\n00:22:EB\tDataResp\tData Respons A/S\n00:22:EC\tIdealbtT\tIdealbt Technology Corporation\n00:22:ED\tTsiPower\tTSI Power Corporation\n00:22:EE\tAlgoComm\tAlgo Communication Products Ltd\n00:22:EF\tIwdlTech\tiWDL Technologies\n00:22:F0\t3GreensA\t3 Greens Aviation Limited\n00:22:F1\tPrivate\t\n00:22:F2\tSunpower\tSunPower Corp\n00:22:F3\tSharp\tSHARP Corporation\n00:22:F4\tAmpakTec\tAMPAK Technology, Inc.\n00:22:F5\tAdvanced\tAdvanced Realtime Tracking GmbH\n00:22:F6\tSyracuse\tSyracuse Research Corporation\n00:22:F7\tConceptr\tConceptronic\n00:22:F8\tPimaElec\tPIMA Electronic Systems Ltd.\n00:22:F9\tPollinEl\tPollin Electronic GmbH\n00:22:FA\tIntelCor\tIntel Corporate\n00:22:FB\tIntelCor\tIntel Corporate\n00:22:FC\tNokiaDan\tNokia Danmark A/S\n00:22:FD\tNokiaDan\tNokia Danmark A/S\n00:22:FE\tAdvanced\tAdvanced Illumination\n00:22:FF\tNivisLlc\tNivis Llc\n00:23:00\tCayeeCom\tCayee Computer Ltd.\n00:23:01\tWitronTe\tWitron Technology Limited\n00:23:02\tCobaltDi\tCobalt Digital, Inc.\n00:23:03\tLite-OnI\tLITE-ON IT Corporation\n00:23:04\tCisco\tCisco Systems, Inc\n00:23:05\tCisco\tCisco Systems, Inc\n00:23:06\tAlpsElec\tAlps Electric Co.,Ltd.\n00:23:07\tFutureIn\tFuture Innovation Tech Co.,Ltd\n00:23:08\tArcadyan\tArcadyan Technology Corporation\n00:23:09\tJanamTec\tJanam Technologies LLC\n00:23:0A\tArburg\tARBURG GmbH & Co KG\n00:23:0B\tArrisGro\tARRIS Group, Inc.\n00:23:0C\tCloverEl\tClover Electronics Co.,Ltd.\n00:23:0D\tNortelNe\tNortel Networks\n00:23:0E\tGorba\tGorba AG\n00:23:0F\tHirschEl\tHirsch Electronics Corporation\n00:23:10\tLncTechn\tLNC Technology Co., Ltd.\n00:23:11\tGloscom\tGloscom Co., Ltd.\n00:23:12\tApple\tApple, Inc.\n00:23:13\tQoolTech\tQool Technologies Ltd.\n00:23:14\tIntelCor\tIntel Corporate\n00:23:15\tIntelCor\tIntel Corporate\n00:23:16\tKisanEle\tKisan Electronics Co\n00:23:17\tLasercra\tLasercraft Inc\n00:23:18\tToshiba\t\n00:23:19\tSieloxLl\tSielox LLC\n00:23:1A\tItf\tITF Co., Ltd.\n00:23:1B\tDanaherM\tDanaher Motion - Kollmorgen\n00:23:1C\tFourier\tFourier Systems Ltd.\n00:23:1D\tDeltacom\tDeltacom Electronics Ltd\n00:23:1E\tCezzerMu\tCezzer Multimedia Technologies\n00:23:1F\tGuangdaE\tGuangda Electronic & Telecommunication Technology Development Co., Ltd.\n00:23:20\tNiciraNe\tNicira Networks\n00:23:21\tAvitechI\tAvitech International Corp\n00:23:22\tKissTekn\tKISS Teknical Solutions, Inc.\n00:23:23\tZylinAs\tZylin AS\n00:23:24\tG-ProCom\tG-PRO COMPUTER\n00:23:25\tIolan\tIOLAN Holding\n00:23:26\tFujitsu\tFujitsu Limited\n00:23:27\tShouyoEl\tShouyo Electronics CO., LTD\n00:23:28\tAlconTel\tAlcon Telecommunications Co., Ltd.\n00:23:29\tDdrdrive\tDDRdrive LLC\n00:23:2A\tEonasIt-\teonas IT-Beratung und -Entwicklung GmbH\n00:23:2B\tIrd\tIRD A/S\n00:23:2C\tSenticar\tSenticare\n00:23:2D\tSandforc\tSandForce\n00:23:2E\tKedahEle\tKedah Electronics Engineering, LLC\n00:23:2F\tAdvanced\tAdvanced Card Systems Ltd.\n00:23:30\tDizipia\tDizipia, Inc.\n00:23:31\tNintendo\tNintendo Co., Ltd.\n00:23:32\tApple\tApple, Inc.\n00:23:33\tCisco\tCisco Systems, Inc\n00:23:34\tCisco\tCisco Systems, Inc\n00:23:35\tLinkflex\tLinkflex Co.,Ltd\n00:23:36\tMetelSRO\tMETEL s.r.o.\n00:23:37\tGlobalSt\tGlobal Star Solutions ULC\n00:23:38\tOj-Elect\tOJ-Electronics A/S\n00:23:39\tSamsungE\tSamsung Electronics Co.,Ltd\n00:23:3A\tSamsungE\tSamsung Electronics Co.,Ltd\n00:23:3B\tC-Matic\tC-Matic Systems Ltd\n00:23:3C\tAlflex\t\n00:23:3D\tLairdTec\tLaird Technologies\n00:23:3E\tAlcatel-\tAlcatel-Lucent IPD\n00:23:3F\tPurechoi\tPurechoice Inc\n00:23:40\tMixtelem\tMiXTelematics\n00:23:41\tVanderbi\tVanderbilt International (SWE) AB\n00:23:42\tCoffeeEq\tCoffee Equipment Company\n00:23:43\tTem\tTem Ag\n00:23:44\tObjectiv\tObjective Interface Systems, Inc.\n00:23:45\tSonyMobi\tSony Mobile Communications Inc\n00:23:46\tVestac\t\n00:23:47\tProcurve\tProCurve Networking by HP\n00:23:48\tSagemcom\tSagemcom Broadband SAS\n00:23:49\tHelmholt\tHelmholtz Centre Berlin for Material and Energy\n00:23:4A\tPrivate\t\n00:23:4B\tInyuanTe\tInyuan Technology Inc.\n00:23:4C\tKtc\tKtc Ab\n00:23:4D\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:23:4E\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:23:4F\tLuminous\tLuminous Power Technologies Pvt. Ltd.\n00:23:50\tLyntec\t\n00:23:51\t2wire\t2Wire Inc\n00:23:52\tDatasens\tDATASENSOR S.p.A.\n00:23:53\tFETElett\tF E T Elettronica snc\n00:23:54\tAsustekC\tASUSTek COMPUTER INC.\n00:23:55\tKincoAut\tKinco Automation(Shanghai) Ltd.\n00:23:56\tPacketFo\tPacket Forensics LLC\n00:23:57\tPitronot\tPitronot Technologies and Engineering P.T.E. Ltd.\n00:23:58\tSystelSa\tSystel Sa\n00:23:59\tBenchmar\tBenchmark Electronics ( Thailand ) Public Company Limited\n00:23:5A\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\n00:23:5B\tGulfstre\tGulfstream\n00:23:5C\tAprius\tAprius, Inc.\n00:23:5D\tCisco\tCisco Systems, Inc\n00:23:5E\tCisco\tCisco Systems, Inc\n00:23:5F\tSiliconM\tSilicon Micro Sensors GmbH\n00:23:60\tLookitTe\tLookit Technology Co., Ltd\n00:23:61\tUnigen\tUnigen Corporation\n00:23:62\tGoldline\tGoldline Controls\n00:23:63\tZhuhaiRa\tZhuhai Raysharp Technology Co.,Ltd\n00:23:64\tPowerIns\tPower Instruments Pte Ltd\n00:23:65\tInstaEle\tInsta Elektro GmbH\n00:23:66\tBeijingS\tBeijing Siasun Electronic System Co.,Ltd.\n00:23:67\tUnicontr\tUniControls a.s.\n00:23:68\tZebraTec\tZebra Technologies Inc\n00:23:69\tCisco-Li\tCisco-Linksys, LLC\n00:23:6A\tSmartrg\tSmartRG Inc\n00:23:6B\tXembedde\tXembedded, Inc.\n00:23:6C\tApple\tApple, Inc.\n00:23:6D\tResmed\tResMed Ltd\n00:23:6E\tBurster\tBurster GmbH & Co KG\n00:23:6F\tDaqSyste\tDAQ System\n00:23:70\tSnell\t\n00:23:71\tSoamSyst\tSOAM Systel\n00:23:72\tMoreStar\tMore Star Industrial Group Limited\n00:23:73\tGridiron\tGridIron Systems, Inc.\n00:23:74\tArrisGro\tARRIS Group, Inc.\n00:23:75\tArrisGro\tARRIS Group, Inc.\n00:23:76\tHtc\tHTC Corporation\n00:23:77\tIsotekEl\tIsotek Electronics Ltd\n00:23:78\tGnNetcom\tGN Netcom A/S\n00:23:79\tUnionBus\tUnion Business Machines Co. Ltd.\n00:23:7A\tRim\t\n00:23:7B\tWhdiLlc\tWhdi Llc\n00:23:7C\tNeotion\t\n00:23:7D\tHewlettP\tHewlett Packard\n00:23:7E\tElster\tElster Gmbh\n00:23:7F\tPlantron\tPlantronics, Inc.\n00:23:80\tNanoteq\t\n00:23:81\tLengdaTe\tLengda Technology(Xiamen) Co.,Ltd.\n00:23:82\tLihRongE\tLih Rong electronic Enterprise Co., Ltd.\n00:23:83\tInmage\tInMage Systems Inc\n00:23:84\tGghEngin\tGGH Engineering s.r.l.\n00:23:85\tAntipode\t\n00:23:86\tTourAnde\tTour & Andersson AB\n00:23:87\tThinkflo\tThinkFlood, Inc.\n00:23:88\tVTTelema\tV.T. Telematica S.p.a.\n00:23:89\tHangzhou\tHangzhou H3C Technologies Co., Limited\n00:23:8A\tCiena\tCiena Corporation\n00:23:8B\tQuantaCo\tQuanta Computer Inc.\n00:23:8C\tPrivate\t\n00:23:8D\tTechnoDe\tTechno Design Co., Ltd.\n00:23:8E\tAdbBroad\tADB Broadband Italia\n00:23:8F\tNidecCop\tNidec Copal Corporation\n00:23:90\tAlgolwar\tAlgolware Corporation\n00:23:91\tMaxian\t\n00:23:92\tProteusI\tProteus Industries Inc.\n00:23:93\tAjinexte\tAjinextek\n00:23:94\tSamjeon\t\n00:23:95\tArrisGro\tARRIS Group, Inc.\n00:23:96\tAndesTec\tAndes Technology Corporation\n00:23:97\tWestellT\tWestell Technologies Inc.\n00:23:98\tVutlanSr\tVutlan sro\n00:23:99\tSamsungE\tSamsung Electronics Co.,Ltd\n00:23:9A\tEasydata\tEasyData Hardware GmbH\n00:23:9B\tElsterSo\tElster Solutions, LLC\n00:23:9C\tJuniperN\tJuniper Networks\n00:23:9D\tMapowerE\tMapower Electronics Co., Ltd\n00:23:9E\tJiangsuL\tJiangsu Lemote Technology Corporation Limited\n00:23:9F\tInstitut\tInstitut für Prüftechnik\n00:23:A0\tHanaCns\tHana CNS Co., LTD.\n00:23:A1\tTrendEle\tTrend Electronics Ltd\n00:23:A2\tArrisGro\tARRIS Group, Inc.\n00:23:A3\tArrisGro\tARRIS Group, Inc.\n00:23:A4\tNewConce\tNew Concepts Development Corp.\n00:23:A5\tSagetvLl\tSageTV, LLC\n00:23:A6\tE-Mon\t\n00:23:A7\tRedpineS\tRedpine Signals, Inc.\n00:23:A8\tMarshall\tMarshall Electronics\n00:23:A9\tBeijingD\tBeijing Detianquan Electromechanical Equipment Co., Ltd\n00:23:AA\tHfr\tHFR, Inc.\n00:23:AB\tCisco\tCisco Systems, Inc\n00:23:AC\tCisco\tCisco Systems, Inc\n00:23:AD\tXmark\tXmark Corporation\n00:23:AE\tDell\tDell Inc.\n00:23:AF\tArrisGro\tARRIS Group, Inc.\n00:23:B0\tComxionT\tCOMXION Technology Inc.\n00:23:B1\tLongchee\tLongcheer Technology (Singapore) Pte Ltd\n00:23:B2\tIntellig\tIntelligent Mechatronic Systems Inc\n00:23:B3\tLyyn\tLyyn AB\n00:23:B4\tNokiaDan\tNokia Danmark A/S\n00:23:B5\tOrtana\tOrtana Ltd\n00:23:B6\tSecurite\tSECURITE COMMUNICATIONS / HONEYWELL\n00:23:B7\tQ-Light\tQ-Light Co., Ltd.\n00:23:B8\tSichuanJ\tSichuan Jiuzhou Electronic Technology Co.,Ltd\n00:23:B9\tAirbusDe\tAirbus Defence and Space Deutschland GmbH\n00:23:BA\tChroma\t\n00:23:BB\tSchmittI\tSchmitt Industries\n00:23:BC\tEq-Sys\tEQ-SYS GmbH\n00:23:BD\tDigitalA\tDigital Ally, Inc.\n00:23:BE\tCiscoSpv\tCisco SPVTG\n00:23:BF\tMainpine\tMainpine, Inc.\n00:23:C0\tBroadway\tBroadway Networks\n00:23:C1\tSecurita\tSecuritas Direct AB\n00:23:C2\tSamsungE\tSAMSUNG Electronics. Co. LTD\n00:23:C3\tLogmein\tLogMeIn, Inc.\n00:23:C4\tLuxLumen\tLux Lumen\n00:23:C5\tRadiatio\tRadiation Safety and Control Services Inc\n00:23:C6\tSmc\tSMC Corporation\n00:23:C7\tAvsystem\t\n00:23:C8\tTeam-R\t\n00:23:C9\tSichuanT\tSichuan Tianyi Information Science & Technology Stock CO.,LTD\n00:23:CA\tBehindSe\tBehind The Set, LLC\n00:23:CB\tShenzhen\tShenzhen Full-join Technology Co.,Ltd\n00:23:CC\tNintendo\tNintendo Co., Ltd.\n00:23:CD\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n00:23:CE\tKitaDens\tKita Denshi Corporation\n00:23:CF\tCummins-\tCUMMINS-ALLISON CORP.\n00:23:D0\tUnilocUs\tUniloc USA Inc.\n00:23:D1\tTrg\t\n00:23:D2\tInhandEl\tInhand Electronics, Inc.\n00:23:D3\tAirlinkW\tAirLink WiFi Networking Corp.\n00:23:D4\tTexasIns\tTexas Instruments\n00:23:D5\tWaremaEl\tWAREMA electronic GmbH\n00:23:D6\tSamsungE\tSamsung Electronics Co.,Ltd\n00:23:D7\tSamsungE\tSamsung Electronics Co.,Ltd\n00:23:D8\tBall-ItO\tBall-It Oy\n00:23:D9\tBannerEn\tBanner Engineering\n00:23:DA\tIndustri\tIndustrial Computer Source (Deutschland)GmbH\n00:23:DB\tSaxnet\tsaxnet gmbh\n00:23:DC\tBenein\tBenein, Inc\n00:23:DD\tElginSA\tElgin S.A.\n00:23:DE\tAnsync\tAnsync Inc.\n00:23:DF\tApple\tApple, Inc.\n00:23:E0\tInoThera\tINO Therapeutics LLC\n00:23:E1\tCavenaIm\tCavena Image Products AB\n00:23:E2\tSeaSigna\tSEA Signalisation\n00:23:E3\tMicrotro\tMicrotronic AG\n00:23:E4\tIpnect\tIPnect co. ltd.\n00:23:E5\tIpaxiomN\tIPaXiom Networks\n00:23:E6\tPirkus\tPirkus, Inc.\n00:23:E7\tHinke\tHinke A/S\n00:23:E8\tDemco\tDemco Corp.\n00:23:E9\tF5Networ\tF5 Networks, Inc.\n00:23:EA\tCisco\tCisco Systems, Inc\n00:23:EB\tCisco\tCisco Systems, Inc\n00:23:EC\tAlgorith\tAlgorithmix GmbH\n00:23:ED\tArrisGro\tARRIS Group, Inc.\n00:23:EE\tArrisGro\tARRIS Group, Inc.\n00:23:EF\tZuendSys\tZuend Systemtechnik AG\n00:23:F0\tShanghai\tShanghai Jinghan Weighing Apparatus Co. Ltd.\n00:23:F1\tSonyMobi\tSony Mobile Communications Inc\n00:23:F2\tTvlogic\t\n00:23:F3\tGlocom\tGlocom, Inc.\n00:23:F4\tMasterna\tMasternaut\n00:23:F5\tWiloSe\tWilo Se\n00:23:F6\tSoftwell\tSoftwell Technology Co., Ltd.\n00:23:F7\tPrivate\t\n00:23:F8\tZyxelCom\tZyxel Communications Corporation\n00:23:F9\tDouble-T\tDouble-Take Software, INC.\n00:23:FA\tRgNets\tRG Nets, Inc.\n00:23:FB\tIpDatate\tIP Datatel, LLC.\n00:23:FC\tUltraSte\tUltra Stereo Labs, Inc\n00:23:FD\tAftAtlas\tAFT Atlas Fahrzeugtechnik GmbH\n00:23:FE\tBiodevic\tBiodevices, SA\n00:23:FF\tBeijingH\tBeijing HTTC Technology Ltd.\n00:24:00\tNortelNe\tNortel Networks\n00:24:01\tD-Link\tD-Link Corporation\n00:24:02\tOp-Tecti\tOp-Tection GmbH\n00:24:03\tNokiaDan\tNokia Danmark A/S\n00:24:04\tNokiaDan\tNokia Danmark A/S\n00:24:05\tDilogNor\tDilog Nordic AB\n00:24:06\tPointmob\tPointmobile\n00:24:07\tTelemSas\tTelem Sas\n00:24:08\tPacificB\tPacific Biosciences\n00:24:09\tToro\tThe Toro Company\n00:24:0A\tUsBevera\tUS Beverage Net\n00:24:0B\tVirtualC\tVirtual Computer Inc.\n00:24:0C\tDelec\tDELEC GmbH\n00:24:0D\tOnepathN\tOnePath Networks LTD.\n00:24:0E\tInventec\tInventec Besta Co., Ltd.\n00:24:0F\tIshiiToo\tIshii Tool & Engineering Corporation\n00:24:10\tNueteqTe\tNUETEQ Technology,Inc.\n00:24:11\tPharmasm\tPharmaSmart LLC\n00:24:12\tBenignTe\tBenign Technologies Co, Ltd.\n00:24:13\tCisco\tCisco Systems, Inc\n00:24:14\tCisco\tCisco Systems, Inc\n00:24:15\tMagnetic\tMagnetic Autocontrol GmbH\n00:24:16\tAnyUse\tAny Use\n00:24:17\tThomsonT\tThomson Telecom Belgium\n00:24:18\tNextwave\tNextwave Semiconductor\n00:24:19\tPrivate\t\n00:24:1A\tRedBeetl\tRed Beetle Inc.\n00:24:1B\tIwowComm\tiWOW Communications Pte Ltd\n00:24:1C\tFugangEl\tFuGang Electronic (DG) Co.,Ltd\n00:24:1D\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\n00:24:1E\tNintendo\tNintendo Co., Ltd.\n00:24:1F\tDct-Delt\tDCT-Delta GmbH\n00:24:20\tNetup\tNetUP Inc.\n00:24:21\tMicro-St\tMICRO-STAR INT'L CO., LTD.\n00:24:22\tKnappLog\tKnapp Logistik Automation GmbH\n00:24:23\tAzurewav\tAzureWave Technologies (Shanghai) Inc.\n00:24:24\tAceAxis\tAce Axis Limited\n00:24:25\tShenzhen\tShenzhenshi chuangzhicheng Technology Co.,Ltd\n00:24:26\tNohmiBos\tNohmi Bosai Ltd.\n00:24:27\tSsiCompu\tSsi Computer Corp\n00:24:28\tEnergyic\tEnergyICT\n00:24:29\tMkMaster\tMk Master Inc.\n00:24:2A\tHittiteM\tHittite Microwave Corporation\n00:24:2B\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:24:2C\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:24:2E\tDatastri\tDatastrip Inc.\n00:24:2F\tMicron\t\n00:24:30\tRubyTech\tRuby Tech Corp.\n00:24:31\tUni-V\tUni-v co.,ltd\n00:24:32\tNeostarT\tNeostar Technology Co.,LTD\n00:24:33\tAlpsElec\tAlps Electric Co.,Ltd.\n00:24:34\tLectroso\tLectrosonics, Inc.\n00:24:35\tWide\tWide Corporation\n00:24:36\tApple\tApple, Inc.\n00:24:37\tMotorola\tMotorola - BSG\n00:24:38\tBrocadeC\tBrocade Communications Systems, Inc.\n00:24:39\tDigitalB\tDigital Barriers Advanced Technologies\n00:24:3A\tLudlElec\tLudl Electronic Products\n00:24:3B\tCssiSPte\tCSSI (S) Pte Ltd\n00:24:3C\tSAAA\tS.A.A.A.\n00:24:3D\tEmersonA\tEmerson Appliance Motors and Controls\n00:24:3F\tStorwize\tStorwize, Inc.\n00:24:40\tHaloMoni\tHalo Monitoring, Inc.\n00:24:41\tWanzlMet\tWanzl Metallwarenfabrik GmbH\n00:24:42\tAxona\tAxona Limited\n00:24:43\tNortelNe\tNortel Networks\n00:24:44\tNintendo\tNintendo Co., Ltd.\n00:24:45\tAdtran\tAdtran Inc\n00:24:46\tMmbResea\tMMB Research Inc.\n00:24:47\tKaztek\tKaztek Systems\n00:24:48\tSpidercl\tSpiderCloud Wireless, Inc\n00:24:49\tShenZhen\tShen Zhen Lite Star Electronics Technology Co., Ltd\n00:24:4A\tVoyantIn\tVoyant International\n00:24:4B\tPerceptr\tPerceptron Inc\n00:24:4C\tSolartro\tSolartron Metrology Ltd\n00:24:4D\tHokkaido\tHokkaido Electronics Corporation\n00:24:4E\tRadchips\tRadChips, Inc.\n00:24:4F\tAsantron\tAsantron Technologies Ltd.\n00:24:50\tCisco\tCisco Systems, Inc\n00:24:51\tCisco\tCisco Systems, Inc\n00:24:52\tSiliconS\tSilicon Software GmbH\n00:24:53\tInitraDO\tInitra d.o.o.\n00:24:54\tSamsungE\tSamsung Electronics Co.,Ltd\n00:24:55\tMulogicB\tMuLogic BV\n00:24:56\t2wire\t2Wire Inc\n00:24:58\tPaBastio\tPA Bastion CC\n00:24:59\tAbbAutom\tABB Automation products GmbH\n00:24:5A\tNanjingP\tNanjing Panda Electronics Company Limited\n00:24:5B\tRaidonTe\tRaidon Technology, Inc.\n00:24:5C\tDesign-C\tDesign-Com Technologies Pty. Ltd.\n00:24:5D\tTerbergB\tTerberg besturingstechniek B.V.\n00:24:5E\tHivision\tHivision Co.,ltd\n00:24:5F\tVineTele\tVine Telecom CO.,Ltd.\n00:24:60\tGiavalSc\tGiaval Science Development Co. Ltd.\n00:24:61\tShinWang\tShin Wang Tech.\n00:24:62\tRayzone\tRayzone Corporation\n00:24:63\tPhybridg\tPhybridge Inc\n00:24:64\tBridgeTe\tBridge Technologies Co AS\n00:24:65\tElentec\t\n00:24:66\tUnitronN\tUnitron nv\n00:24:67\tAocInter\tAOC International (Europe) GmbH\n00:24:68\tSumavisi\tSumavision Technologies Co.,Ltd\n00:24:69\tSmartDoo\tSmart Doorphones\n00:24:6A\tSolidYea\tSolid Year Co., Ltd.\n00:24:6B\tCovia\tCovia, Inc.\n00:24:6C\tArubaNet\tAruba Networks\n00:24:6D\tWeinzier\tWeinzierl Engineering GmbH\n00:24:6E\tPhihongU\tPhihong USA Corp.\n00:24:6F\tOndaComm\tOnda Communication spa\n00:24:70\tAurotech\tAUROTECH ultrasound AS.\n00:24:71\tFusionMu\tFusion MultiSystems dba Fusion-io\n00:24:72\tRedriven\tReDriven Power Inc.\n00:24:73\t3comEuro\t3COM EUROPE LTD\n00:24:74\tAutronic\tAutronica Fire And Securirty\n00:24:75\tCompassS\tCompass System(Embedded Dept.)\n00:24:76\tTapTv\tTAP.tv\n00:24:77\tTibboTec\tTibbo Technology\n00:24:78\tMagTechE\tMag Tech Electronics Co Limited\n00:24:79\tOptecDis\tOptec Displays, Inc.\n00:24:7A\tFuYiChen\tFU YI CHENG Technology Co., Ltd.\n00:24:7B\tActionte\tActiontec Electronics, Inc\n00:24:7C\tNokiaDan\tNokia Danmark A/S\n00:24:7D\tNokiaDan\tNokia Danmark A/S\n00:24:7E\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\n00:24:7F\tNortelNe\tNortel Networks\n00:24:80\tMeteocon\tMeteocontrol GmbH\n00:24:81\tHewlettP\tHewlett Packard\n00:24:82\tRuckusWi\tRuckus Wireless\n00:24:83\tLgElectr\tLG Electronics (Mobile Communications)\n00:24:84\tBangAndO\tBang and Olufsen Medicom a/s\n00:24:85\tContextr\tConteXtream Ltd\n00:24:86\tDesignar\tDesignArt Networks\n00:24:87\tBlackboa\tBlackboard Inc.\n00:24:88\tCentreFo\tCentre For Development Of Telematics\n00:24:89\tVodafone\tVodafone Omnitel N.V.\n00:24:8A\tKagaElec\tKaga Electronics Co., Ltd.\n00:24:8B\tHybus\tHybus Co., Ltd.\n00:24:8C\tAsustekC\tASUSTek COMPUTER INC.\n00:24:8D\tSonyInte\tSony Interactive Entertainment Inc.\n00:24:8E\tInfoware\tInfoware ZRt.\n00:24:8F\tDo-Monix\t\n00:24:90\tSamsungE\tSamsung Electronics Co.,Ltd\n00:24:91\tSamsungE\tSamsung Electronics Co.,Ltd\n00:24:92\tMotorola\tMotorola, Broadband Solutions Group\n00:24:93\tArrisGro\tARRIS Group, Inc.\n00:24:94\tShenzhen\tShenzhen Baoxin Tech CO., Ltd.\n00:24:95\tArrisGro\tARRIS Group, Inc.\n00:24:96\tGinzinge\tGinzinger electronic systems\n00:24:97\tCisco\tCisco Systems, Inc\n00:24:98\tCisco\tCisco Systems, Inc\n00:24:99\tAquilaTe\tAquila Technologies\n00:24:9A\tBeijingZ\tBeijing Zhongchuang Telecommunication Test Co., Ltd.\n00:24:9B\tActionSt\tAction Star Enterprise Co., Ltd.\n00:24:9C\tBimengCo\tBimeng Comunication System Co. Ltd\n00:24:9D\tNesTechn\tNES Technology Inc.\n00:24:9E\tAdc-Elek\tADC-Elektronik GmbH\n00:24:9F\tRimTesti\tRIM Testing Services\n00:24:A0\tArrisGro\tARRIS Group, Inc.\n00:24:A1\tArrisGro\tARRIS Group, Inc.\n00:24:A2\tHongKong\tHong Kong Middleware Technology Limited\n00:24:A3\tSonimTec\tSonim Technologies Inc\n00:24:A4\tSikluCom\tSiklu Communication\n00:24:A5\tBuffalo\tBuffalo.Inc\n00:24:A6\tTelestar\tTELESTAR DIGITAL GmbH\n00:24:A7\tAdvanced\tAdvanced Video Communications Inc.\n00:24:A8\tProcurve\tProCurve Networking by HP\n00:24:A9\tLeaderTe\tAg Leader Technology\n00:24:AA\tDycorTec\tDycor Technologies Ltd.\n00:24:AB\tA7Engine\tA7 Engineering, Inc.\n00:24:AC\tHangzhou\tHangzhou DPtech Technologies Co., Ltd.\n00:24:AD\tAdolfThi\tAdolf Thies Gmbh & Co. KG\n00:24:AE\tIdemia\t\n00:24:AF\tDishTech\tDish Technologies Corp\n00:24:B0\tEsab\tEsab Ab\n00:24:B1\tCoulombT\tCoulomb Technologies\n00:24:B2\tNetgear\t\n00:24:B3\tGraf-Syt\tGraf-Syteco GmbH & Co. KG\n00:24:B4\tEscatron\tESCATRONIC GmbH\n00:24:B5\tNortelNe\tNortel Networks\n00:24:B6\tSeagateT\tSeagate Technology\n00:24:B7\tGridpoin\tGridPoint, Inc.\n00:24:B8\tFreeAlli\tfree alliance sdn bhd\n00:24:B9\tWuhanHig\tWuhan Higheasy Electronic Technology Development Co.Ltd\n00:24:BA\tTexasIns\tTexas Instruments\n00:24:BB\tCentral\tCENTRAL Corporation\n00:24:BC\tHurob\tHuRob Co.,Ltd\n00:24:BD\tHainzlIn\tHainzl Industriesysteme GmbH\n00:24:BE\tSony\tSony Corporation\n00:24:BF\tCiat\t\n00:24:C0\tNtiComod\tNti Comodo Inc\n00:24:C1\tArrisGro\tARRIS Group, Inc.\n00:24:C2\tAsumo\tAsumo Co.,Ltd.\n00:24:C3\tCisco\tCisco Systems, Inc\n00:24:C4\tCisco\tCisco Systems, Inc\n00:24:C5\tMeridian\tMeridian Audio Limited\n00:24:C6\tHagerEle\tHager Electro SAS\n00:24:C7\tMobilarm\tMobilarm Ltd\n00:24:C8\tBroadban\tBroadband Solutions Group\n00:24:C9\tBroadban\tBroadband Solutions Group\n00:24:CA\tTobiiTec\tTobii Technology AB\n00:24:CB\tAutonetM\tAutonet Mobile\n00:24:CC\tFascinat\tFascinations Toys and Gifts, Inc.\n00:24:CD\tWillowGa\tWillow Garage, Inc.\n00:24:CE\tExeltech\tExeltech Inc\n00:24:CF\tInscapeD\tInscape Data Corporation\n00:24:D0\tShenzhen\tShenzhen SOGOOD Industry CO.,LTD.\n00:24:D1\tThomson\tThomson Inc.\n00:24:D2\tAskeyCom\tAskey Computer Corp\n00:24:D3\tQualica\tQUALICA Inc.\n00:24:D4\tFreeboxS\tFreebox Sas\n00:24:D5\tWinwardI\tWinward Industrial Limited\n00:24:D6\tIntelCor\tIntel Corporate\n00:24:D7\tIntelCor\tIntel Corporate\n00:24:D8\tIlsungPr\tIlSung Precision\n00:24:D9\tBicom\tBICOM, Inc.\n00:24:DA\tInnovar\tInnovar Systems Limited\n00:24:DB\tAlcoholM\tAlcohol Monitoring Systems\n00:24:DC\tJuniperN\tJuniper Networks\n00:24:DD\tCentrak\tCentrak, Inc.\n00:24:DE\tGlobalTe\tGLOBAL Technology Inc.\n00:24:DF\tDigitalb\tDigitalbox Europe GmbH\n00:24:E0\tDsTechLl\tDS Tech, LLC\n00:24:E1\tConveyCo\tConvey Computer Corp.\n00:24:E2\tHasegawa\tHasegawa Electric Co.,Ltd.\n00:24:E3\tCaoGroup\tCAO Group\n00:24:E4\tWithings\t\n00:24:E5\tSeerTech\tSeer Technology, Inc\n00:24:E6\tInMotion\tIn Motion Technology Inc.\n00:24:E7\tPlasterN\tPlaster Networks\n00:24:E8\tDell\tDell Inc.\n00:24:E9\tSamsungE\tSamsung Electronics Co.,Ltd\n00:24:EA\tIris-Gmb\tiris-GmbH infrared & intelligent sensors\n00:24:EB\tClearpat\tClearPath Networks, Inc.\n00:24:EC\tUnitedIn\tUnited Information Technology Co.,Ltd.\n00:24:ED\tYtElec\tYT Elec. Co,.Ltd.\n00:24:EE\tWynmax\tWynmax Inc.\n00:24:EF\tSonyMobi\tSony Mobile Communications Inc\n00:24:F0\tSeanodes\t\n00:24:F1\tShenzhen\tShenzhen Fanhai Sanjiang Electronics Co., Ltd.\n00:24:F2\tUniphone\tUniphone Telecommunication Co., Ltd.\n00:24:F3\tNintendo\tNintendo Co., Ltd.\n00:24:F4\tKaminari\tKaminario, Ltd.\n00:24:F5\tNdsSurgi\tNDS Surgical Imaging\n00:24:F6\tMiyoshiE\tMiyoshi Electronics Corporation\n00:24:F7\tCisco\tCisco Systems, Inc\n00:24:F8\tTechnica\tTechnical Solutions Company Ltd.\n00:24:F9\tCisco\tCisco Systems, Inc\n00:24:FA\tHilgerUK\tHilger u. Kern GMBH\n00:24:FB\tPrivate\t\n00:24:FC\tQuopin\tQuoPin Co., Ltd.\n00:24:FD\tAccedian\tAccedian Networks Inc\n00:24:FE\tAvm\tAVM GmbH\n00:24:FF\tQlogic\tQLogic Corporation\n00:25:00\tApple\tApple, Inc.\n00:25:01\tJscSuper\tJSC Supertel\n00:25:02\tNaturalp\tNaturalPoint\n00:25:03\tIbm\tIBM Corp\n00:25:04\tValiantC\tValiant Communications Limited\n00:25:05\tEksEngel\teks Engel GmbH & Co. KG\n00:25:06\tAIAntita\tA.I. Antitaccheggio Italia Srl\n00:25:07\tAstak\tASTAK Inc.\n00:25:08\tMaquetCa\tMaquet Cardiopulmonary AG\n00:25:09\tSharetro\tSHARETRONIC Group LTD\n00:25:0A\tSecurity\tSecurity Expert Co. Ltd\n00:25:0B\tCentrofa\tCentrofactor Inc\n00:25:0C\tSenet\tSenet Inc\n00:25:0D\tGztTelko\tGZT Telkom-Telmor sp. z o.o.\n00:25:0E\tGtGerman\tgt german telematics gmbh\n00:25:0F\tOn-RampW\tOn-Ramp Wireless, Inc.\n00:25:10\tPico-Tes\tPico-Tesla Magnetic Therapies\n00:25:11\tElitegro\tElitegroup Computer Systems Co.,Ltd.\n00:25:12\tZte\tzte corporation\n00:25:13\tCxpDigit\tCxp Digital Bv\n00:25:14\tPcWorthI\tPC Worth Int'l Co., Ltd.\n00:25:15\tSfr\t\n00:25:16\tIntegrat\tIntegrated Design Tools, Inc.\n00:25:17\tVenntisL\tVenntis, LLC\n00:25:18\tPowerPlu\tPower PLUS Communications AG\n00:25:19\tViaas\tViaas Inc\n00:25:1A\tPsiberDa\tPsiber Data Systems Inc.\n00:25:1B\tPhilipsC\tPhilips CareServant\n00:25:1C\tEdt\t\n00:25:1D\tDsaEncor\tDSA Encore, LLC\n00:25:1E\tRotelTec\tRotel Technologies\n00:25:1F\tZynusVis\tZynus Vision Inc.\n00:25:20\tSmaRailw\tSMA Railway Technology GmbH\n00:25:21\tLogitekE\tLogitek Electronic Systems, Inc.\n00:25:22\tAsrockIn\tASRock Incorporation\n00:25:23\tOcp\tOCP Inc.\n00:25:24\tLightcom\tLightcomm Technology Co., Ltd\n00:25:25\tCteraNet\tCTERA Networks Ltd.\n00:25:26\tGenuineT\tGenuine Technologies Co., Ltd.\n00:25:27\tBitrode\tBitrode Corp.\n00:25:28\tDaidoSig\tDaido Signal Co., Ltd.\n00:25:29\tComelitG\tComelit Group S.P.A\n00:25:2A\tChengduG\tChengdu GeeYa Technology Co.,LTD\n00:25:2B\tStirling\tStirling Energy Systems\n00:25:2C\tEntourag\tEntourage Systems, Inc.\n00:25:2D\tKiryungE\tKiryung Electronics\n00:25:2E\tCiscoSpv\tCisco SPVTG\n00:25:2F\tEnergy\tEnergy, Inc.\n00:25:30\tAetas\tAetas Systems Inc.\n00:25:31\tCloudEng\tCloud Engines, Inc.\n00:25:32\tDigitalR\tDigital Recorders\n00:25:33\tWittenst\tWittenstein Ag\n00:25:35\tMinimax\tMinimax GmbH & Co KG\n00:25:36\tOkiElect\tOki Electric Industry Co., Ltd.\n00:25:37\tRuncomTe\tRuncom Technologies Ltd.\n00:25:38\tSamsungE\tSamsung Electronics Co., Ltd., Memory Division\n00:25:39\tIfta\tIfTA GmbH\n00:25:3A\tCeva\tCEVA, Ltd.\n00:25:3B\tDinDietm\tdin Dietmar Nocker Facilitymanagement GmbH\n00:25:3C\t2wire\t2Wire Inc\n00:25:3D\tDrsConso\tDRS Consolidated Controls\n00:25:3E\tSensusMe\tSensus Metering Systems\n00:25:40\tQuasarTe\tQuasar Technologies, Inc.\n00:25:41\tMaquetCr\tMaquet Critical Care AB\n00:25:42\tPittasof\tPittasoft\n00:25:43\tMoneytec\tMoneytech\n00:25:44\tLojack\tLoJack Corporation\n00:25:45\tCisco\tCisco Systems, Inc\n00:25:46\tCisco\tCisco Systems, Inc\n00:25:47\tNokiaDan\tNokia Danmark A/S\n00:25:48\tNokiaDan\tNokia Danmark A/S\n00:25:49\tJeorichT\tJeorich Tech. Co.,Ltd.\n00:25:4A\tRingcube\tRingCube Technologies, Inc.\n00:25:4B\tApple\tApple, Inc.\n00:25:4C\tVideonCe\tVideon Central, Inc.\n00:25:4D\tSingapor\tSingapore Technologies Electronics Limited\n00:25:4E\tVertexWi\tVertex Wireless Co., Ltd.\n00:25:4F\tElettrol\tELETTROLAB Srl\n00:25:50\tRiverbed\tRiverbed Technology, Inc.\n00:25:51\tSe-Elekt\tSE-Elektronic GmbH\n00:25:52\tVxi\tVXi Corporation\n00:25:53\tAdbBroad\tADB Broadband Italia\n00:25:54\tPixel8Ne\tPixel8 Networks\n00:25:55\tVisonicT\tVisonic Technologies 1993 Ltd.\n00:25:56\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:25:57\tBlackber\tBlackBerry RTS\n00:25:58\tMpedia\t\n00:25:59\tSyphanTe\tSyphan Technologies Ltd\n00:25:5A\tTantalus\tTantalus Systems Corp.\n00:25:5B\tCoachcom\tCoachComm, LLC\n00:25:5C\tNec\tNEC Corporation\n00:25:5D\tMornings\tMorningstar Corporation\n00:25:5E\tShanghai\tShanghai Dare Technologies Co.,Ltd.\n00:25:5F\tSentec\tSenTec AG\n00:25:60\tIbridgeN\tIbridge Networks & Communications Ltd.\n00:25:61\tProcurve\tProCurve Networking by HP\n00:25:62\tInterbro\tinterbro Co. Ltd.\n00:25:63\tLuxtera\tLuxtera Inc\n00:25:64\tDell\tDell Inc.\n00:25:65\tVizimax\tVizimax Inc.\n00:25:66\tSamsungE\tSamsung Electronics Co.,Ltd\n00:25:67\tSamsungE\tSamsung Electronics Co.,Ltd\n00:25:68\tHuaweiTe\tHuawei Technologies Co.,Ltd\n00:25:69\tSagemcom\tSagemcom Broadband SAS\n00:25:6A\tInit-Ins\tinIT - Institut Industrial IT\n00:25:6B\tAtenixEE\tATENIX E.E. s.r.l.\n00:25:6C\tAzimutPr\tAzimut Production Association JSC\n00:25:6D\tBroadban\tBroadband Forum\n00:25:6E\tVanBreda\tVan Breda B.V.\n00:25:6F\tDantherm\tDantherm Power\n00:25:70\tEasternC\tEastern Communications Company Limited\n00:25:71\tZhejiang\tZhejiang Tianle Digital Electric Co.,Ltd\n00:25:72\tNemo-QIn\tNemo-Q International AB\n00:25:73\tStElectr\tST Electronics (Info-Security) Pte Ltd\n00:25:74\tKunimiMe\tKUNIMI MEDIA DEVICE Co., Ltd.\n00:25:75\tFiberple\tFiberPlex Technologies, LLC\n00:25:76\tNeliTech\tNeli Technologies\n00:25:77\tD-BoxTec\tD-BOX Technologies\n00:25:78\tJscConce\tJSC Concern Sozvezdie\n00:25:79\tJFLabs\tJ & F Labs\n00:25:7A\tCamcoPro\tCAMCO Produktions- und Vertriebs-GmbH für  Beschallungs- und Beleuchtungsanlagen\n00:25:7B\tStjElect\tStj Electronics Pvt Ltd\n00:25:7C\tHuachent\tHuachentel Technology Development Co., Ltd\n00:25:7D\tPointred\tPointRed Telecom Private Ltd.\n00:25:7E\tNewPosTe\tNEW POS Technology Limited\n00:25:7F\tCalltech\tCallTechSolution Co.,Ltd\n00:25:80\tEquipson\tEquipson S.A.\n00:25:81\tX-StarNe\tx-star networks Inc.\n00:25:82\tMaksatTe\tMaksat Technologies (P) Ltd\n00:25:83\tCisco\tCisco Systems, Inc\n00:25:84\tCisco\tCisco Systems, Inc\n00:25:85\tKokuyoS&\tKOKUYO S&T Co., Ltd.\n00:25:86\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n00:25:87\tVitality\tVitality, Inc.\n00:25:88\tGenieInd\tGenie Industries, Inc.\n00:25:89\tHillsInd\tHills Industries Limited\n00:25:8A\tPole/Zer\tPole/Zero Corporation\n00:25:8B\tMellanox\tMellanox Technologies, Inc.\n00:25:8C\tEsusElek\tEsus Elektronik San. Ve Dis. Tic. Ltd. Sti.\n00:25:8D\tHaier\t\n00:25:8E\tWeatherC\tThe Weather Channel\n00:25:8F\tTridentM\tTrident Microsystems, Inc.\n00:25:90\tSuperMic\tSuper Micro Computer, Inc.\n00:25:91\tNextek\tNEXTEK, Inc.\n00:25:92\tGuangzho\tGuangzhou Shirui Electronic Co., Ltd\n00:25:93\tDatnetIn\tDatNet Informatikai Kft.\n00:25:94\tEurodesi\tEurodesign BG LTD\n00:25:95\tNorthwes\tNorthwest Signal Supply, Inc\n00:25:96\tGigavisi\tGIGAVISION srl\n00:25:97\tKalkiCom\tKalki Communication Technologies\n00:25:98\tZhongSha\tZhong Shan City Litai Electronic Industrial Co. Ltd\n00:25:99\tHedonEDB\tHedon e.d. B.V.\n00:25:9A\tCestroni\tCEStronics GmbH\n00:25:9B\tBeijingP\tBeijing PKUNITY Microsystems Technology Co., Ltd\n00:25:9C\tCisco-Li\tCisco-Linksys, LLC\n00:25:9D\tPrivate\t\n00:25:9E\tHuaweiTe\tHuawei Technologies Co.,Ltd\n00:25:9F\tTechnodi\tTechnoDigital Technologies GmbH\n00:25:A0\tNintendo\tNintendo Co., Ltd.\n00:25:A1\tEnalasys\t\n00:25:A2\tAltaDefi\tAlta Definicion LINCEO S.L.\n00:25:A3\tTrimaxWi\tTrimax Wireless, Inc.\n00:25:A4\tEurodesi\tEuroDesign embedded technologies GmbH\n00:25:A5\tWalnutMe\tWalnut Media Network\n00:25:A6\tCentralN\tCentral Network Solution Co., Ltd.\n00:25:A7\tComverge\tComverge, Inc.\n00:25:A8\tKontronB\tKontron (BeiJing) Technology Co.,Ltd\n00:25:A9\tShanghai\tShanghai Embedway Information Technologies Co.,Ltd\n00:25:AA\tBeijingS\tBeijing Soul Technology Co.,Ltd.\n00:25:AB\tAioLcdPc\tAIO LCD PC BU / TPV\n00:25:AC\tI-Tech\tI-Tech corporation\n00:25:AD\tManufact\tManufacturing Resources International\n00:25:AE\tMicrosof\tMicrosoft Corporation\n00:25:AF\tComfileT\tCOMFILE Technology\n00:25:B0\tSchmartz\tSchmartz Inc\n00:25:B1\tMaya-Cre\tMaya-Creation Corporation\n00:25:B2\tMbdaDeut\tMBDA Deutschland GmbH\n00:25:B3\tHewlettP\tHewlett Packard\n00:25:B4\tCisco\tCisco Systems, Inc\n00:25:B5\tCisco\tCisco Systems, Inc\n00:25:B6\tTelecomF\tTelecom FM\n00:25:B7\tCostarEl\tCostar  electronics, inc.,\n00:25:B8\tAgileCom\tAgile Communications, Inc.\n00:25:B9\tCypressS\tCypress Solutions Inc\n00:25:BA\tAlcatel-\tAlcatel-Lucent IPD\n00:25:BB\tInnerint\tINNERINT Co., Ltd.\n00:25:BC\tApple\tApple, Inc.\n00:25:BD\tItaldata\tItaldata Ingegneria dell'Idea S.p.A.\n00:25:BE\tTektrap\tTektrap Systems Inc.\n00:25:BF\tWireless\tWireless Cables Inc.\n00:25:C0\tZilliont\tZillionTV Corporation\n00:25:C1\tNawooKor\tNawoo Korea Corp.\n00:25:C2\tRingbell\tRingBell Co.,Ltd.\n00:25:C3\t21168\t\n00:25:C4\tRuckusWi\tRuckus Wireless\n00:25:C5\tStarLink\tStar Link Communication Pvt. Ltd.\n00:25:C6\tKasercor\tkasercorp, ltd\n00:25:C7\tAltek\taltek Corporation\n00:25:C8\tS-Access\tS-Access GmbH\n00:25:C9\tShenzhen\tShenzhen Huapu Digital Co., Ltd\n00:25:CA\tLsResear\tLS Research, LLC\n00:25:CB\tReinerSc\tReiner SCT\n00:25:CC\tMobileCo\tMobile Communications Korea Incorporated\n00:25:CD\tSkylaneO\tSkylane Optics\n00:25:CE\tInnerspa\tInnerSpace\n00:25:CF\tNokiaDan\tNokia Danmark A/S\n00:25:D0\tNokiaDan\tNokia Danmark A/S\n00:25:D1\tEasternA\tEastern Asia Technology Limited\n00:25:D2\tInpegvis\tInpegVision Co., Ltd\n00:25:D3\tAzurewav\tAzureWave Technology Inc.\n00:25:D4\tGeneralD\tGeneral Dynamics Mission Systems\n00:25:D5\tRobonica\tRobonica (Pty) Ltd\n00:25:D6\tKroger\tThe Kroger Co.\n00:25:D7\tCedo\t\n00:25:D8\tKoreaMai\tKorea Maintenance\n00:25:D9\tDatafab\tDataFab Systems Inc.\n00:25:DA\tSecuraKe\tSecura Key\n00:25:DB\tAtiElect\tATI Electronics(Shenzhen) Co., LTD\n00:25:DC\tSumitomo\tSumitomo Electric Industries,Ltd\n00:25:DD\tSunnytek\tSunnytek Information Co., Ltd.\n00:25:DE\tProbits\tProbits Co., LTD.\n00:25:DF\tPrivate\t\n00:25:E0\tCeedtecS\tCeedTec Sdn Bhd\n00:25:E1\tShanghai\tSHANGHAI SEEYOO ELECTRONIC & TECHNOLOGY CO., LTD\n00:25:E2\tEverspri\tEverspring Industry Co., Ltd.\n00:25:E3\tHanshini\tHanshinit Inc.\n00:25:E4\tOmni-Wif\tOMNI-WiFi, LLC\n00:25:E5\tLgElectr\tLG Electronics (Mobile Communications)\n00:25:E6\tBelgianM\tBelgian Monitoring Systems bvba\n00:25:E7\tSonyMobi\tSony Mobile Communications Inc\n00:25:E8\tIdahoTec\tIdaho Technology\n00:25:E9\tI-MateDe\ti-mate Development, Inc.\n00:25:EA\tIphionBv\tIphion BV\n00:25:EB\tReutechR\tReutech Radar Systems (PTY) Ltd\n00:25:EC\tHumanwar\tHumanware\n00:25:ED\tNuvoTech\tNuVo Technologies LLC\n00:25:EE\tAvtex\tAvtex Ltd\n00:25:EF\tI-Tec\tI-TEC Co., Ltd.\n00:25:F0\tSugaElec\tSuga Electronics Limited\n00:25:F1\tArrisGro\tARRIS Group, Inc.\n00:25:F2\tArrisGro\tARRIS Group, Inc.\n00:25:F3\tNordwest\tNordwestdeutsche Zählerrevision\n00:25:F4\tKocoConn\tKoCo Connector AG\n00:25:F5\tDvsKorea\tDVS Korea, Co., Ltd\n00:25:F6\tNettalkC\tnetTALK.com, Inc.\n00:25:F7\tAnsaldoS\tAnsaldo STS USA\n00:25:F9\tGmkElect\tGMK electronic design GmbH\n00:25:FA\tJ&MAnaly\tJ&M Analytik AG\n00:25:FB\tTunstall\tTunstall Healthcare A/S\n00:25:FC\tEndaEndu\tEnda Endustriyel Elektronik Ltd. Sti.\n00:25:FD\tObrCentr\tOBR Centrum Techniki Morskiej S.A.\n00:25:FE\tPilotEle\tPilot Electronics Corporation\n00:25:FF\tCrenovaM\tCreNova Multimedia Co., Ltd\n00:26:00\tTeacAust\tTEAC Australia Pty Ltd.\n00:26:01\tCutera\tCutera Inc\n00:26:02\tSmartTem\tSMART Temps LLC\n00:26:03\tShenzhen\tShenzhen Wistar Technology Co., Ltd\n00:26:04\tAudioPro\tAudio Processing Technology Ltd\n00:26:05\tCc\tCC Systems AB\n00:26:06\tRaumfeld\tRAUMFELD GmbH\n00:26:07\tEnabling\tEnabling Technology Pty Ltd\n00:26:08\tApple\tApple, Inc.\n00:26:09\tPhyllis\tPhyllis Co., Ltd.\n00:26:0A\tCisco\tCisco Systems, Inc\n00:26:0B\tCisco\tCisco Systems, Inc\n00:26:0C\tDataram\t\n00:26:0D\tMercury\tMercury Systems, Inc.\n00:26:0E\tAblazeLl\tAblaze Systems, LLC\n00:26:0F\tLinnProd\tLinn Products Ltd\n00:26:10\tApacewav\tApacewave Technologies\n00:26:11\tLicera\tLicera AB\n00:26:12\tSpaceExp\tSpace Exploration Technologies\n00:26:13\tEngelAxi\tEngel Axil S.L.\n00:26:14\tKtnf\t\n00:26:15\tTeracom\tTeracom Limited\n00:26:16\tRosemoun\tRosemount Inc.\n00:26:17\tOemWorld\tOEM Worldwide\n00:26:18\tAsustekC\tASUSTek COMPUTER INC.\n00:26:19\tFrc\t\n00:26:1A\tFemtocom\tFemtocomm System Technology Corp.\n00:26:1B\tLaurelBa\tLaurel Bank Machines Co., Ltd.\n00:26:1C\tNeovia\tNeovia Inc.\n00:26:1D\tCopSecur\tCop Security System Corp.\n00:26:1E\tQingbang\tQINGBANG ELEC(SZ) CO., LTD\n00:26:1F\tSaeMagne\tSAE Magnetics (H.K.) Ltd.\n00:26:20\tIsgus\tISGUS GmbH\n00:26:21\tIntelicl\tInteliCloud Technology Inc.\n00:26:22\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\n00:26:23\tJrdCommu\tJRD Communication Inc\n00:26:24\tThomson\tThomson Inc.\n00:26:25\tMediaspu\tMediaSputnik\n00:26:26\tGeophysi\tGeophysical Survey Systems, Inc.\n00:26:27\tTruesell\t\n00:26:28\tCompanyt\tcompanytec automação e controle ltda.\n00:26:29\tJuphoonS\tJuphoon System Software Inc.\n00:26:2A\tProxense\tProxense, LLC\n00:26:2B\tWongsEle\tWongs Electronics Co. Ltd.\n00:26:2C\tIktAdvan\tIKT Advanced Technologies s.r.o.\n00:26:2D\tWistron\tWistron Corporation\n00:26:2E\tChengduJ\tChengdu Jiuzhou Electronic Technology Inc\n00:26:2F\tHamamats\tHamamatsu Toa Electronics\n00:26:30\tAcorelSA\tAcorel S.A.S\n00:26:31\tCommtact\tCommtact Ltd\n00:26:32\tInstrume\tInstrumentation Technologies d.d.\n00:26:33\tMir-Medi\tMIR - Medical International Research\n00:26:34\tInfineta\tInfineta Systems, Inc\n00:26:35\tBluetech\tBluetechnix GmbH\n00:26:36\tArrisGro\tARRIS Group, Inc.\n00:26:37\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\n00:26:38\tXiaMenJo\tXia Men Joyatech Co., Ltd.\n00:26:39\tTMElectr\tT.M. Electronics, Inc.\n00:26:3A\tDigitec\tDigitec Systems\n00:26:3B\tOnbnetec\tOnbnetech\n00:26:3C\tBachmann\tBachmann Technology GmbH & Co. KG\n00:26:3D\tMia\tMIA Corporation\n00:26:3E\tTrapezeN\tTrapeze Networks\n00:26:3F\tLiosTech\tLIOS Technology GmbH\n00:26:40\tBaustemB\tBaustem Broadband Technologies, Ltd.\n00:26:41\tArrisGro\tARRIS Group, Inc.\n00:26:42\tArrisGro\tARRIS Group, Inc.\n00:26:43\tAlpsElec\tAlps Electric Co.,Ltd.\n00:26:44\tThomsonT\tThomson Telecom Belgium\n00:26:45\tCircontr\tCircontrol S.A.\n00:26:46\tShenyang\tShenyang Tongfang Multimedia Technology Company Limited\n00:26:47\tWfeTechn\tWfe Technology Corp.\n00:26:48\tEmitech\tEmitech Corp.\n00:26:4A\tApple\tApple, Inc.\n00:26:4C\tShanghai\tShanghai DigiVision Technology Co., Ltd.\n00:26:4D\tArcadyan\tArcadyan Technology Corporation\n00:26:4E\tRailRoad\tRail & Road Protec GmbH\n00:26:4F\tKrüger&G\tKrüger &Gothe GmbH\n00:26:50\t2wire\t2Wire Inc\n00:26:51\tCisco\tCisco Systems, Inc\n00:26:52\tCisco\tCisco Systems, Inc\n00:26:53\tDayseque\tDaySequerra Corporation\n00:26:54\t3com\t\n00:26:55\tHewlettP\tHewlett Packard\n00:26:56\tSansonic\tSansonic Electronics USA\n00:26:57\tOooNppEk\tOoo Npp Ekra\n00:26:58\tT-Platfo\tT-Platforms (Cyprus) Limited\n00:26:59\tNintendo\tNintendo Co., Ltd.\n00:26:5A\tD-Link\tD-Link Corporation\n00:26:5B\tHitronTe\tHitron Technologies. Inc\n00:26:5C\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:26:5D\tSamsungE\tSamsung Electronics Co.,Ltd\n00:26:5E\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:26:5F\tSamsungE\tSamsung Electronics Co.,Ltd\n00:26:60\tLogiways\t\n00:26:61\tIrumtek\tIrumtek Co., Ltd.\n00:26:62\tActionte\tActiontec Electronics, Inc\n00:26:63\tShenzhen\tShenzhen Huitaiwei Tech. Ltd, co.\n00:26:64\tCoreSyst\tCore System Japan\n00:26:65\tProtecte\tProtectedLogic Corporation\n00:26:66\tEfmNetwo\tEFM Networks\n00:26:67\tCarecom\tCarecom Co.,Ltd.\n00:26:68\tNokiaDan\tNokia Danmark A/S\n00:26:69\tNokiaDan\tNokia Danmark A/S\n00:26:6A\tEssensiu\tEssensium Nv\n00:26:6B\tShineUni\tShine Union Enterprise Limited\n00:26:6C\tInventec\tInventec Corporation\n00:26:6D\tMobileac\tMobileAccess Networks\n00:26:6E\tNissho-D\tNissho-denki Co.,LTD.\n00:26:6F\tCoordiwi\tCoordiwise Technology Corp.\n00:26:70\tCinchCon\tCinch Connectors\n00:26:71\tAutovisi\tAUTOVISION Co., Ltd\n00:26:72\tAampOfAm\tAAMP of America\n00:26:73\tRicoh\tRicoh Company,Ltd.\n00:26:74\tElectron\tElectronic Solutions, Inc.\n00:26:75\tAztechEl\tAztech Electronics Pte Ltd\n00:26:76\tCommidtA\tCOMMidt AS\n00:26:77\tDeif\tDEIF A/S\n00:26:78\tLogicIns\tLogic Instrument SA\n00:26:79\tEuphonic\tEuphonic Technologies, Inc.\n00:26:7A\tWuhanHon\twuhan hongxin telecommunication technologies co.,ltd\n00:26:7B\tGsiHelmh\tGSI Helmholtzzentrum für Schwerionenforschung GmbH\n00:26:7C\tMetz-Wer\tMetz-Werke GmbH & Co KG\n00:26:7D\tA-MaxTec\tA-Max Technology Macao Commercial Offshore Company Limited\n00:26:7E\tParrotSa\tParrot Sa\n00:26:7F\tZenterio\tZenterio AB\n00:26:80\tSil3Pty\tSIL3 Pty.Ltd\n00:26:81\tInterspi\tInterspiro AB\n00:26:82\tGemtekTe\tGemtek Technology Co., Ltd.\n00:26:83\tAjohoEnt\tAjoho Enterprise Co., Ltd.\n00:26:84\tKisanSys\tKisan System\n00:26:85\tDigitalI\tDigital Innovation\n00:26:86\tQuantenn\tQuantenna Communcations, Inc.\n00:26:87\tCoregaKK\tcorega K.K\n00:26:88\tJuniperN\tJuniper Networks\n00:26:89\tGeneralD\tGeneral Dynamics Robotic Systems\n00:26:8A\tTerrierS\tTerrier SC Ltd\n00:26:8B\tGuangzho\tGuangzhou Escene Computer Technology Limited\n00:26:8C\tStarleaf\tStarLeaf Ltd.\n00:26:8D\tCelltelS\tCellTel S.p.A.\n00:26:8E\tAltaSolu\tAlta Solutions, Inc.\n00:26:8F\tMta\tMTA SpA\n00:26:90\tIDoIt\tI Do It\n00:26:91\tSagemcom\tSagemcom Broadband SAS\n00:26:92\tMitsubis\tMitsubishi Electric Corporation\n00:26:93\tQvidiumT\tQVidium Technologies, Inc.\n00:26:94\tSenscien\tSenscient Ltd\n00:26:95\tZtGroupI\tZT Group Int'l Inc\n00:26:96\tNoolix\tNOOLIX Co., Ltd\n00:26:97\tAlphaTec\tAlpha  Technologies Inc.\n00:26:98\tCisco\tCisco Systems, Inc\n00:26:99\tCisco\tCisco Systems, Inc\n00:26:9A\tCarinaSy\tCarina System Co., Ltd.\n00:26:9B\tSokrat\tSOKRAT Ltd.\n00:26:9C\tItusJapa\tItus Japan Co. Ltd\n00:26:9D\tM2mnet\tM2Mnet Co., Ltd.\n00:26:9E\tQuantaCo\tQuanta Computer Inc.\n00:26:9F\tPrivate\t\n00:26:A0\tMoblic\t\n00:26:A1\tMegger\t\n00:26:A2\tInstrume\tInstrumentation Technology Systems\n00:26:A3\tFqIngeni\tFQ Ingenieria Electronica S.A.\n00:26:A4\tNovusPro\tNovus Produtos Eletronicos Ltda\n00:26:A5\tMicrorob\tMicrorobot.Co.,Ltd\n00:26:A6\tTrixell\t\n00:26:A7\tConnectS\tConnect Srl\n00:26:A8\tDaehapHy\tDAEHAP HYPER-TECH\n00:26:A9\tStrongTe\tStrong Technologies Pty Ltd\n00:26:AA\tKenmecMe\tKenmec Mechanical Engineering Co., Ltd.\n00:26:AB\tSeikoEps\tSeiko Epson Corporation\n00:26:AC\tShanghai\tShanghai LUSTER Teraband photonic Co., Ltd.\n00:26:AD\tArada\tArada Systems, Inc.\n00:26:AE\tWireless\tWireless Measurement Ltd\n00:26:AF\tDuelco\tDuelco A/S\n00:26:B0\tApple\tApple, Inc.\n00:26:B1\tNavisAut\tNavis Auto Motive Systems, Inc.\n00:26:B2\tSetrix\tSetrix GmbH\n00:26:B3\tThalesCo\tThales Communications Inc\n00:26:B4\tFordMoto\tFord Motor Company\n00:26:B5\tIcommTel\tICOMM Tele Ltd\n00:26:B6\tAskeyCom\tAskey Computer Corp\n00:26:B7\tKingston\tKingston Technology Company, Inc.\n00:26:B8\tActionte\tActiontec Electronics, Inc\n00:26:B9\tDell\tDell Inc.\n00:26:BA\tArrisGro\tARRIS Group, Inc.\n00:26:BB\tApple\tApple, Inc.\n00:26:BC\tGeneralJ\tGeneral Jack Technology Ltd.\n00:26:BD\tJtecCard\tJTEC Card &amp; Communication Co., Ltd\n00:26:BE\tSchoonde\tSchoonderbeek Elektronica Systemen B.V.\n00:26:BF\tShenzhen\tShenZhen Temobi Science&Tech Development Co.,Ltd\n00:26:C0\tEnergyhu\tEnergyHub\n00:26:C1\tArtray\tArtray Co., Ltd.\n00:26:C2\tScdi\tSCDI Co. LTD\n00:26:C3\tInsighte\tInsightek Corp.\n00:26:C4\tCadmosMi\tCadmos microsystems S.r.l.\n00:26:C5\tGuangdon\tGuangdong Gosun Telecommunications Co.,Ltd\n00:26:C6\tIntelCor\tIntel Corporate\n00:26:C7\tIntelCor\tIntel Corporate\n00:26:C8\tSystemSe\tSystem Sensor\n00:26:C9\tProventi\tProventix Systems, Inc.\n00:26:CA\tCisco\tCisco Systems, Inc\n00:26:CB\tCisco\tCisco Systems, Inc\n00:26:CC\tNokiaDan\tNokia Danmark A/S\n00:26:CD\tPurpleco\tPurpleComm, Inc.\n00:26:CE\tKozumiUs\tKozumi USA Corp.\n00:26:CF\tDekaR&D\tDEKA R&D\n00:26:D0\tSemihalf\t\n00:26:D1\tSSquared\tS Squared Innovations Inc.\n00:26:D2\tPcube\tPcube Systems, Inc.\n00:26:D3\tZenoInfo\tZeno Information System\n00:26:D4\tIrca\tIRCA SpA\n00:26:D5\tOrySoluc\tOry Solucoes em Comercio de Informatica Ltda.\n00:26:D6\tNingboAn\tNingbo Andy Optoelectronic Co., Ltd.\n00:26:D7\tKmElecto\tKM Electornic Technology Co., Ltd.\n00:26:D8\tMagicPoi\tMagic Point Inc.\n00:26:D9\tArrisGro\tARRIS Group, Inc.\n00:26:DA\tUniversa\tUniversal Media Corporation /Slovakia/ s.r.o.\n00:26:DB\tIonicsEm\tIonics EMS Inc.\n00:26:DC\tOpticalD\tOptical Systems Design\n00:26:DD\tFivalSci\tFival Science & Technology Co.,Ltd.\n00:26:DE\tFdiMatel\tFdi Matelec\n00:26:DF\tTaidocTe\tTaiDoc Technology Corp.\n00:26:E0\tAsiteq\t\n00:26:E1\tStanford\tStanford University, OpenFlow Group\n00:26:E2\tLgElectr\tLG Electronics (Mobile Communications)\n00:26:E3\tDti\t\n00:26:E4\tCanal+\tCanal +\n00:26:E5\tAegPower\tAEG Power Solutions\n00:26:E6\tVisionhi\tVisionhitech Co., Ltd.\n00:26:E7\tShanghai\tShanghai ONLAN Communication Tech. Co., Ltd.\n00:26:E8\tMurataMa\tMurata Manufacturing Co., Ltd.\n00:26:E9\tSp\tSP Corp\n00:26:EA\tCheerchi\tCheerchip Electronic Technology (ShangHai) Co., Ltd.\n00:26:EB\tAdvanced\tAdvanced Spectrum Technology Co., Ltd.\n00:26:EC\tLegrandH\tLegrand Home Systems, Inc\n00:26:ED\tZte\tzte corporation\n00:26:EE\tTkm\tTKM GmbH\n00:26:EF\tTechnolo\tTechnology Advancement Group, Inc.\n00:26:F0\tCtrixsIn\tcTrixs International GmbH.\n00:26:F1\tProcurve\tProCurve Networking by HP\n00:26:F2\tNetgear\t\n00:26:F3\tSmcNetwo\tSMC Networks\n00:26:F4\tNesslab\t\n00:26:F5\tXrplus\tXRPLUS Inc.\n00:26:F6\tMilitary\tMilitary Communication Institute\n00:26:F7\tNivettiP\tNivetti Systems Pvt. Ltd.\n00:26:F8\tGoldenHi\tGolden Highway Industry Development Co., Ltd.\n00:26:F9\tSEMSrl\tS.E.M. srl\n00:26:FA\tBandrich\tBandRich Inc.\n00:26:FB\tAirdioWi\tAirDio Wireless, Inc.\n00:26:FC\tAcsipTec\tAcSiP Technology Corp.\n00:26:FD\tInteract\tInteractive Intelligence\n00:26:FE\tMkdTechn\tMKD Technology Inc.\n00:26:FF\tBlackber\tBlackBerry RTS\n00:27:00\tShenzhen\tShenzhen Siglent Technology Co., Ltd.\n00:27:01\tIncostar\tINCOstartec GmbH\n00:27:02\tSolaredg\tSolarEdge Technologies\n00:27:03\tTestechE\tTestech Electronics Pte Ltd\n00:27:04\tAccelera\tAccelerated Concepts, Inc\n00:27:05\tSectroni\tSectronic\n00:27:06\tYoisys\t\n00:27:07\tLiftComp\tLift Complex DS, JSC\n00:27:08\tNordiagA\tNordiag ASA\n00:27:09\tNintendo\tNintendo Co., Ltd.\n00:27:0A\tIeeSA\tIee S.A.\n00:27:0B\tAduraTec\tAdura Technologies\n00:27:0C\tCisco\tCisco Systems, Inc\n00:27:0D\tCisco\tCisco Systems, Inc\n00:27:0E\tIntelCor\tIntel Corporate\n00:27:0F\tEnvision\tEnvisionnovation Inc\n00:27:10\tIntelCor\tIntel Corporate\n00:27:11\tLanpro\tLanPro Inc\n00:27:12\tMaxvisio\tMaxVision LLC\n00:27:13\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\n00:27:14\tGrainmus\tGrainmustards, Co,ltd.\n00:27:15\tReboundT\tRebound Telecom. Co., Ltd\n00:27:16\tAdachi-S\tAdachi-Syokai Co., Ltd.\n00:27:17\tCeDigita\tCE Digital(Zhenjiang)Co.,Ltd\n00:27:18\tSuzhouNe\tSuzhou NEW SEAUNION Video Technology Co.,Ltd\n00:27:19\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n00:27:1A\tGeenovoT\tGeenovo Technology Ltd.\n00:27:1B\tAlecSich\tAlec Sicherheitssysteme GmbH\n00:27:1C\tMercury\tMercury Corporation\n00:27:1D\tCombaTel\tComba Telecom Systems (China) Ltd.\n00:27:1E\tXagylCom\tXagyl Communications\n00:27:1F\tMiproEle\tMIPRO Electronics Co., Ltd\n00:27:20\tNew-SolC\tNEW-SOL COM\n00:27:21\tShenzhen\tShenzhen Baoan Fenda Industrial Co., Ltd\n00:27:22\tUbiquiti\tUbiquiti Networks Inc.\n00:27:90\tCisco\tCisco Systems, Inc\n00:27:E3\tCisco\tCisco Systems, Inc\n00:27:F8\tBrocadeC\tBrocade Communications Systems, Inc.\n00:28:9F\tSemptian\tSemptian Co., Ltd.\n00:28:F8\tIntelCor\tIntel Corporate\n00:29:26\tAppliedO\tApplied Optoelectronics, Inc Taiwan Branch\n00:2A:10\tCisco\tCisco Systems, Inc\n00:2A:6A\tCisco\tCisco Systems, Inc\n00:2A:AF\tLarsys-A\tLARsys-Automation GmbH\n00:2C:C8\tCisco\tCisco Systems, Inc\n00:2D:76\tTitech\tTITECH GmbH\n00:2E:C7\tHuaweiTe\tHuawei Technologies Co.,Ltd\n00:2F:D9\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n00:30:00\tAllwellT\tAllwell Technology Corp.\n00:30:01\tSmp\t\n00:30:02\tExpandNe\tExpand Networks\n00:30:03\tPhasys\tPhasys Ltd.\n00:30:04\tLeadtekR\tLeadtek Research Inc.\n00:30:05\tFujitsuS\tFujitsu Siemens Computers\n00:30:06\tSuperpow\tSuperpower Computer\n00:30:07\tOpti\tOpti, Inc.\n00:30:08\tAvioDigi\tAvio Digital, Inc.\n00:30:09\tTachionN\tTachion Networks, Inc.\n00:30:0A\tAztechEl\tAztech Electronics Pte Ltd\n00:30:0B\tMphaseTe\tmPHASE Technologies, Inc.\n00:30:0C\tCongruen\tCongruency, Ltd.\n00:30:0D\tMmcTechn\tMMC Technology, Inc.\n00:30:0E\tKlotzDig\tKlotz Digital AG\n00:30:0F\tImt-Info\tIMT - Information Management T\n00:30:10\tVisionet\tVisionetics International\n00:30:11\tHmsIndus\tHMS Industrial Networks\n00:30:12\tDigitalE\tDigital Engineering Ltd.\n00:30:13\tNec\tNEC Corporation\n00:30:14\tDivio\tDivio, Inc.\n00:30:15\tCpClare\tCp Clare Corp.\n00:30:16\tIshida\tIshida Co., Ltd.\n00:30:17\tBluearcU\tBlueArc UK Ltd\n00:30:18\tJetwayIn\tJetway Information Co., Ltd.\n00:30:19\tCisco\tCisco Systems, Inc\n00:30:1A\tSmartbri\tSmartbridges Pte. Ltd.\n00:30:1B\tShuttle\tShuttle, Inc.\n00:30:1C\tAltvater\tAltvater Airdata Systems\n00:30:1D\tSkystrea\tSkystream, Inc.\n00:30:1E\t3comEuro\t3COM EUROPE LTD\n00:30:1F\tOpticalN\tOptical Networks, Inc.\n00:30:20\tTsi\tTSI, Inc..\n00:30:21\tHsingTec\tHsing Tech. Enterprise Co.,Ltd\n00:30:22\tFongKaiI\tFong Kai Industrial Co., Ltd.\n00:30:23\tCogentCo\tCogent Computer Systems, Inc.\n00:30:24\tCisco\tCisco Systems, Inc\n00:30:25\tCheckout\tCheckout Computer Systems, Ltd\n00:30:26\tHeitelDi\tHeiTel Digital Video GmbH\n00:30:27\tKerbango\tKerbango, Inc.\n00:30:28\tFaseSald\tFASE Saldatura srl\n00:30:29\tOpicom\t\n00:30:2A\tSouthern\tSouthern Information\n00:30:2B\tInalpNet\tInalp Networks, Inc.\n00:30:2C\tSylantro\tSylantro Systems Corporation\n00:30:2D\tQuantumB\tQuantum Bridge Communications\n00:30:2E\tHoftWess\tHoft & Wessel AG\n00:30:2F\tGeAviati\tGE Aviation System\n00:30:30\tHarmonix\tHarmonix Corporation\n00:30:31\tLightwav\tLightwave Communications, Inc.\n00:30:32\tMagicram\tMagicRam, Inc.\n00:30:33\tOrientTe\tOrient Telecom Co., Ltd.\n00:30:34\tSetEngin\tSet Engineering\n00:30:35\tCorning\tCorning Incorporated\n00:30:36\tRmpElekt\tRmp Elektroniksysteme Gmbh\n00:30:37\tPackardB\tPackard Bell Nec Services\n00:30:38\tXcp\tXcp, Inc.\n00:30:39\tSoftbook\tSoftbook Press\n00:30:3A\tMaatel\t\n00:30:3B\tPowercom\tPowerCom Technology\n00:30:3C\tOnnto\tOnnto Corp.\n00:30:3D\tIva\tIva Corporation\n00:30:3E\tRadcom\tRadcom Ltd.\n00:30:3F\tTurbocom\tTurboComm Tech Inc.\n00:30:40\tCisco\tCisco Systems, Inc\n00:30:41\tSaejinTM\tSAEJIN T & M CO., LTD.\n00:30:42\tDetewe-D\tDeTeWe-Deutsche Telephonwerke\n00:30:43\tIdreamTe\tIdream Technologies, Pte. Ltd.\n00:30:44\tCradlepo\tCradlePoint, Inc\n00:30:45\tVillageN\tVillage Networks, Inc. (VNI)\n00:30:46\tControll\tControlled Electronic Manageme\n00:30:47\tNisseiEl\tNissei Electric Co., Ltd.\n00:30:48\tSuperMic\tSuper Micro Computer, Inc.\n00:30:49\tBryantTe\tBryant Technology, Ltd.\n00:30:4A\tFraunhof\tFraunhofer IPMS\n00:30:4B\tOrbacom\tOrbacom Systems, Inc.\n00:30:4C\tAppianCo\tAppian Communications, Inc.\n00:30:4D\tEsi\t\n00:30:4E\tBustecPr\tBustec Production Ltd.\n00:30:4F\tPlanetTe\tPLANET Technology Corporation\n00:30:50\tVersaTec\tVersa Technology\n00:30:51\tOrbitAvi\tORBIT AVIONIC & COMMUNICATION\n00:30:52\tElasticN\tElastic Networks\n00:30:53\tBasler\tBasler AG\n00:30:54\tCastlene\tCastlenet Technology, Inc.\n00:30:55\tRenesasT\tRenesas Technology America, Inc.\n00:30:56\tBeckIpc\tBeck IPC GmbH\n00:30:57\tQtelnet\tQTelNet, Inc.\n00:30:58\tApiMotio\tApi Motion\n00:30:59\tKontronC\tKontron Compact Computers Ag\n00:30:5A\tTelgen\tTelgen Corporation\n00:30:5B\tToko\tToko Inc.\n00:30:5C\tSmarLabo\tSMAR Laboratories Corp.\n00:30:5D\tDigitra\tDigitra Systems, Inc.\n00:30:5E\tAbelkoIn\tAbelko Innovation\n00:30:5F\tHasselbl\tHasselblad\n00:30:60\tPowerfil\tPowerfile, Inc.\n00:30:61\tMobytel\t\n00:30:62\tIpVideoN\tIP Video Networks Inc\n00:30:63\tSantera\tSantera Systems, Inc.\n00:30:64\tAdlinkTe\tAdlink Technology, Inc.\n00:30:65\tApple\tApple, Inc.\n00:30:66\tRfm\t\n00:30:67\tBiostarM\tBIOSTAR Microtech Int'l Corp.\n00:30:68\tCybernet\tCybernetics Tech. Co., Ltd.\n00:30:69\tImpacctT\tImpacct Technology Corp.\n00:30:6A\tPentaMed\tPenta Media Co., Ltd.\n00:30:6B\tCmos\tCmos Systems, Inc.\n00:30:6C\tHitex\tHitex Holding GmbH\n00:30:6D\tLucentTe\tLucent Technologies\n00:30:6E\tHewlettP\tHewlett Packard\n00:30:6F\tSeyeonTe\tSeyeon Tech. Co., Ltd.\n00:30:70\t1net\t1Net Corporation\n00:30:71\tCisco\tCisco Systems, Inc\n00:30:72\tIntellib\tIntellibyte Inc.\n00:30:73\tInternat\tInternational Microsystems, In\n00:30:74\tEquiinet\tEquiinet Ltd.\n00:30:75\tAdtech\t\n00:30:76\tAkamba\tAkamba Corporation\n00:30:77\tOnpremNe\tOnprem Networks\n00:30:78\tCisco\tCisco Systems, Inc\n00:30:79\tCqos\tCqos, Inc.\n00:30:7A\tAdvanced\tAdvanced Technology & Systems\n00:30:7B\tCisco\tCisco Systems, Inc\n00:30:7C\tAdidSa\tAdid Sa\n00:30:7D\tGreAmeri\tGre America, Inc.\n00:30:7E\tRedflexC\tRedflex Communication Systems\n00:30:7F\tIrlan\tIrlan Ltd.\n00:30:80\tCisco\tCisco Systems, Inc\n00:30:81\tAltosC&C\tALTOS C&C\n00:30:82\tTaihanEl\tTaihan Electric Wire Co., Ltd.\n00:30:83\tIvron\tIvron Systems\n00:30:84\tAlliedTe\tAllied Telesyn Internaional\n00:30:85\tCisco\tCisco Systems, Inc\n00:30:86\tTransist\tTransistor Devices, Inc.\n00:30:87\tVegaGrie\tVega Grieshaber Kg\n00:30:88\tEricsson\t\n00:30:89\tSpectrap\tSpectrapoint Wireless, LLC\n00:30:8A\tNicotraS\tNicotra Sistemi S.P.A\n00:30:8B\tBrixNetw\tBrix Networks\n00:30:8C\tQuantum\tQuantum Corporation\n00:30:8D\tPinnacle\tPinnacle Systems, Inc.\n00:30:8E\tCrossMat\tCross Match Technologies, Inc.\n00:30:8F\tMicrilor\tMICRILOR, Inc.\n00:30:90\tCyraTech\tCyra Technologies, Inc.\n00:30:91\tTaiwanFi\tTaiwan First Line Elec. Corp.\n00:30:92\tModunorm\tModuNORM GmbH\n00:30:93\tSonnetTe\tSonnet Technologies, Inc\n00:30:94\tCisco\tCisco Systems, Inc\n00:30:95\tProcompI\tProcomp Informatics, Ltd.\n00:30:96\tCisco\tCisco Systems, Inc\n00:30:97\tRegin\tAB Regin\n00:30:98\tGlobalCo\tGlobal Converging Technologies\n00:30:99\tBoenigUn\tBoenig Und Kallenbach Ohg\n00:30:9A\tAstroTer\tAstro Terra Corp.\n00:30:9B\tSmartwar\tSmartware\n00:30:9C\tTimingAp\tTiming Applications, Inc.\n00:30:9D\tNimbleMi\tNimble Microsystems, Inc.\n00:30:9E\tWorkbit\tWorkbit Corporation.\n00:30:9F\tAmberNet\tAmber Networks\n00:30:A0\tTycoSubm\tTyco Submarine Systems, Ltd.\n00:30:A1\tWebgate\tWEBGATE Inc.\n00:30:A2\tLightner\tLightner Engineering\n00:30:A3\tCisco\tCisco Systems, Inc\n00:30:A4\tWoodwind\tWoodwind Communications System\n00:30:A5\tActivePo\tActive Power\n00:30:A6\tVianetTe\tVianet Technologies, Ltd.\n00:30:A7\tSchweitz\tSchweitzer Engineering\n00:30:A8\tOlECommu\tOL'E COMMUNICATIONS, INC.\n00:30:A9\tNetivers\tNetiverse, Inc.\n00:30:AA\tAxusMicr\tAxus Microsystems, Inc.\n00:30:AB\tDeltaNet\tDelta Networks, Inc.\n00:30:AC\tSystemeL\tSysteme Lauer GmbH & Co., Ltd.\n00:30:AD\tShanghai\tShanghai Communication\n00:30:AE\tTimesNSy\tTimes N System, Inc.\n00:30:AF\tHoneywel\tHoneywell GmbH\n00:30:B0\tConverge\tConvergenet Technologies\n00:30:B1\tTrunknet\t\n00:30:B2\tL-3Sonom\tL-3 Sonoma EO\n00:30:B3\tSanValle\tSan Valley Systems, Inc.\n00:30:B4\tIntersil\tIntersil Corp.\n00:30:B5\tTadiranM\tTadiran Microwave Networks\n00:30:B6\tCisco\tCisco Systems, Inc\n00:30:B7\tTeletrol\tTeletrol Systems, Inc.\n00:30:B8\tRiverdel\tRiverDelta Networks\n00:30:B9\tEctel\t\n00:30:BA\tAc&TSyst\tAC&T SYSTEM CO., LTD.\n00:30:BB\tCacheflo\tCacheFlow, Inc.\n00:30:BC\tOptronic\tOptronic AG\n00:30:BD\tBelkinCo\tBelkin Components\n00:30:BE\tCity-Net\tCity-Net Technology, Inc.\n00:30:BF\tMultidat\tMultidata Gmbh\n00:30:C0\tLaraTech\tLara Technology, Inc.\n00:30:C1\tHewlettP\tHewlett Packard\n00:30:C2\tComone\t\n00:30:C3\tFlueckig\tFlueckiger Elektronik Ag\n00:30:C4\tCanonIma\tCanon Imaging Systems Inc.\n00:30:C5\tCadenceD\tCadence Design Systems, Inc.\n00:30:C6\tControlS\tControl Solutions, Inc.\n00:30:C7\tMacromat\tMacromate Corp.\n00:30:C8\tGadLine\tGad Line, Ltd.\n00:30:C9\tLuxnN\tLuxN, N\n00:30:CA\tDiscover\tDiscovery Com\n00:30:CB\tOmniFlow\tOmni Flow Computers, Inc.\n00:30:CC\tTenorNet\tTenor Networks, Inc.\n00:30:CD\tConexant\tConexant Systems, Inc.\n00:30:CE\tZaffire\t\n00:30:CF\tTwoTechn\tTwo Technologies, Inc.\n00:30:D0\tTellabs\t\n00:30:D1\tInova\tInova Corporation\n00:30:D2\tWinTechn\tWin Technologies, Co., Ltd.\n00:30:D3\tAgilentT\tAgilent Technologies, Inc.\n00:30:D4\tAae\tAAE Systems, Inc.\n00:30:D5\tDresearc\tDResearch GmbH\n00:30:D6\tMscVertr\tMsc Vertriebs Gmbh\n00:30:D7\tInnovati\tInnovative Systems, L.L.C.\n00:30:D8\tSitek\t\n00:30:D9\tDatacore\tDatacore Software Corp.\n00:30:DA\tComtrend\tComtrend Corporation\n00:30:DB\tMindread\tMindready Solutions, Inc.\n00:30:DC\tRightech\tRightech Corporation\n00:30:DD\tIndigita\tIndigita Corporation\n00:30:DE\tWagoKont\tWAGO Kontakttechnik GmbH\n00:30:DF\tKb/TelTe\tKB/TEL TELECOMUNICACIONES\n00:30:E0\tOxfordSe\tOxford Semiconductor Ltd.\n00:30:E1\tNetworkE\tNetwork Equipment Technologies, Inc.\n00:30:E2\tGarnet\tGarnet Systems Co., Ltd.\n00:30:E3\tSedonaNe\tSedona Networks Corp.\n00:30:E4\tChiyodaS\tChiyoda System Riken\n00:30:E5\tAmperDat\tAmper Datos S.A.\n00:30:E6\tDraegerM\tDraeger Medical Systems, Inc.\n00:30:E7\tCnfMobil\tCnf Mobile Solutions, Inc.\n00:30:E8\tEnsim\tEnsim Corp.\n00:30:E9\tGmaCommu\tGMA COMMUNICATION MANUFACT'G\n00:30:EA\tTeraforc\tTeraForce Technology Corporation\n00:30:EB\tTurbonet\tTurbonet Communications, Inc.\n00:30:EC\tBorgardt\t\n00:30:ED\tExpertMa\tExpert Magnetics Corp.\n00:30:EE\tDsgTechn\tDSG Technology, Inc.\n00:30:EF\tNeonTech\tNeon Technology, Inc.\n00:30:F0\tUniformI\tUniform Industrial Corp.\n00:30:F1\tAcctonTe\tAccton Technology Corp\n00:30:F2\tCisco\tCisco Systems, Inc\n00:30:F3\tAtWorkCo\tAt Work Computers\n00:30:F4\tStardotT\tStardot Technologies\n00:30:F5\tWildLab\tWild Lab. Ltd.\n00:30:F6\tSecurelo\tSecurelogix Corporation\n00:30:F7\tRamix\tRamix Inc.\n00:30:F8\tDynapro\tDynapro Systems, Inc.\n00:30:F9\tSollae\tSollae Systems Co., Ltd.\n00:30:FA\tTelica\tTelica, Inc.\n00:30:FB\tAzsTechn\tAZS Technology AG\n00:30:FC\tTerawave\tTerawave Communications, Inc.\n00:30:FD\tIntegrat\tIntegrated Systems Design\n00:30:FE\tDsa\tDSA GmbH\n00:30:FF\tDatafab\tDataFab Systems Inc.\n00:31:46\tJuniperN\tJuniper Networks\n00:32:3A\tSo-Logic\t\n00:33:6C\tSynapsen\tSynapSense Corporation\n00:34:DA\tLgElectr\tLG Electronics (Mobile Communications)\n00:34:F1\tRadicomR\tRadicom Research, Inc.\n00:34:FE\tHuaweiTe\tHuawei Technologies Co.,Ltd\n00:35:1A\tCisco\tCisco Systems, Inc\n00:35:32\tElectro-\tElectro-Metrics Corporation\n00:35:60\tRosenAvi\tRosen Aviation\n00:36:76\tArrisGro\tARRIS Group, Inc.\n00:36:F8\tContiTem\tConti Temic microelectronic GmbH\n00:36:FE\tSupervis\tSuperVision\n00:37:6D\tMurataMa\tMurata Manufacturing Co., Ltd.\n00:37:B7\tSagemcom\tSagemcom Broadband SAS\n00:38:DF\tCisco\tCisco Systems, Inc\n00:3A:7D\tCisco\tCisco Systems, Inc\n00:3A:98\tCisco\tCisco Systems, Inc\n00:3A:99\tCisco\tCisco Systems, Inc\n00:3A:9A\tCisco\tCisco Systems, Inc\n00:3A:9B\tCisco\tCisco Systems, Inc\n00:3A:9C\tCisco\tCisco Systems, Inc\n00:3A:9D\tNecPlatf\tNEC Platforms, Ltd.\n00:3A:AF\tBluebit\tBlueBit Ltd.\n00:3C:10\tCisco\tCisco Systems, Inc\n00:3C:C5\tWonwooEn\tWONWOO Engineering Co., Ltd\n00:3D:41\tHattelan\tHatteland Computer AS\n00:3D:E8\tLgElectr\tLG Electronics (Mobile Communications)\n00:3E:E1\tApple\tApple, Inc.\n00:40:00\tPciCompo\tPci Componentes Da Amzonia Ltd\n00:40:01\tZeroOneT\tZero One Technology Co Ltd (ZyXEL?)\n00:40:02\tPerle\tPerle Systems Limited\n00:40:03\tEmersonP\tEmerson Process Management Power & Water Solutions, Inc.\n00:40:04\tIcm\tIcm Co. Ltd.\n00:40:05\tAniCommu\tAni Communications Inc.\n00:40:06\tSampoTec\tSampo Technology Corporation\n00:40:07\tTelmatIn\tTelmat Informatique\n00:40:08\tAPlusInf\tA Plus Info Corporation\n00:40:09\tTachiban\tTachibana Tectron Co Ltd\n00:40:0A\tPivotalT\tPivotal Technologies, Inc.\n00:40:0B\tCresc\t\n00:40:0C\tGeneralM\tGeneral Micro Systems, Inc.\n00:40:0D\tLannetDa\tLANNET Data Communications\n00:40:0E\tMemotec\tMemotec, Inc.\n00:40:0F\tDatacomT\tDatacom Technologies\n00:40:10\tSonicMac\tSonic\n00:40:11\tAndoverC\tAndover Controls Corporation\n00:40:12\tWindata\tWindata, Inc.\n00:40:13\tNttDataC\tNTT Data Communication Systems Corp\n00:40:14\tComsoft\t\n00:40:15\tAscom\t\n00:40:16\tAdc-Glob\tADC - Global Connectivity Solutions Division\n00:40:17\tSilexTec\tSilex Technology America\n00:40:18\tAdobe\tAdobe Systems, Inc.\n00:40:19\tAeon\tAeon Systems, Inc.\n00:40:1A\tFujiElec\tFuji Electric Co., Ltd.\n00:40:1B\tPrinter\tPrinter Systems Corp.\n00:40:1C\tAstPenti\tAST\n00:40:1D\tInvisibl\tInvisible Software, Inc.\n00:40:1E\tIcc\t\n00:40:1F\tColorgra\tColorgraph Ltd\n00:40:20\tCommscop\tCommScope Inc\n00:40:21\tRasterGr\tRaster Graphics\n00:40:22\tKleverCo\tKlever Computers, Inc.\n00:40:23\tLogic\t\n00:40:24\tCompac\tCompac Inc.\n00:40:25\tMolecula\tMolecular Dynamics\n00:40:26\tBuffalo\tBuffalo.Inc\n00:40:27\tSmcMassa\tSMC Massachusetts\n00:40:28\tNetcomm\t\n00:40:29\tCompex\t\n00:40:2A\tCanoga-P\tCanoga-Perkins\n00:40:2B\tTrigem\t\n00:40:2C\tIsisDist\tIsis Distributed Systems, Inc.\n00:40:2D\tHarrisAd\tHarris Adacom Corporation\n00:40:2E\tPrecisio\tPrecision Software, Inc.\n00:40:2F\tXlntDesi\tXlnt Designs Inc (XDI)\n00:40:30\tGkComput\tGK Computer\n00:40:31\tKokusaiE\tKokusai Electric Co., Ltd\n00:40:32\tDigitalC\tDigital Communications\n00:40:33\tAddtronT\tAddtron Technology Co., Ltd.\n00:40:34\tBustek\tBustek Corporation\n00:40:35\tOpcom\t\n00:40:36\tZoomTele\tZoom Telephonics, Inc\n00:40:37\tSea-Ilan\tSEA-ILAN, INC.\n00:40:38\tTalentEl\tTalent Electric Incorporated\n00:40:39\tOptecDai\tOptec Daiichi Denko Co Ltd\n00:40:3A\tImpactTe\tImpact Technologies\n00:40:3B\tSynerjet\tSynerjet International Corp.\n00:40:3C\tForks\t\n00:40:3D\tTeradata\tTeradata Corporation\n00:40:3E\tRasterOp\tRaster Ops Corporation\n00:40:3F\tSsangyon\tSsangyong Computer Systems\n00:40:40\tRingAcce\tRing Access, Inc.\n00:40:41\tFujikura\tFujikura Ltd.\n00:40:42\tNAT\tN.A.T. Gmbh\n00:40:43\tNokiaDat\tNokia Data Communications\n00:40:44\tQnixComp\tQnix Computer Co., Ltd.\n00:40:45\tTwinhead\tTwinhead Corporation\n00:40:46\tUdcResea\tUdc Research Limited\n00:40:47\tWindRive\tWind River Systems\n00:40:48\tSmdInfor\tSMD Informatica S.A.\n00:40:49\tRocheDia\tRoche Diagnostics International Ltd.\n00:40:4A\tWestAust\tWest Australian Department\n00:40:4B\tMapleCom\tMaple Computer Systems\n00:40:4C\tHypertec\tHypertec Pty Ltd.\n00:40:4D\tTelecomm\tTelecomm Techniques\n00:40:4E\tFluent\tFluent, Inc.\n00:40:4F\tSpaceNav\tSpace & Naval Warfare Systems\n00:40:50\tIronics\t\n00:40:51\tGracilis\tGracilis, Inc.\n00:40:52\tStarTech\tStar Technologies Inc\n00:40:53\tAmproCom\tAmpro Computers\n00:40:54\tThinking\tThinking Machines Corporation\n00:40:55\tMetronix\tMetronix Gmbh\n00:40:56\tMcmJapan\tMcm Japan Ltd.\n00:40:57\tLockheed\tLockheed-Sanders\n00:40:58\tKronos\tKronos, Inc.\n00:40:59\tYoshidaK\tYoshida Kogyo K.K.\n00:40:5A\tGoldstar\tGOLDSTAR INFORMATION & COMM.\n00:40:5B\tFunasset\tFunasset Limited\n00:40:5C\tFuture\tFuture Systems, Inc.\n00:40:5D\tStar-Tek\tStar-Tek Inc\n00:40:5E\tNorthHil\tNorth Hills Israel\n00:40:5F\tAfeCompu\tAfe Computers Ltd.\n00:40:60\tComendec\tComendec Ltd\n00:40:61\tDatatech\tDatatech Enterprises Co., Ltd.\n00:40:62\tE-System\tE-SYSTEMS, INC./GARLAND DIV.\n00:40:63\tViaTechn\tVia Technologies, Inc.\n00:40:64\tKlaInstr\tKla Instruments Corporation\n00:40:65\tGteSpace\tGte Spacenet\n00:40:66\tApresia\tAPRESIA Systems Ltd\n00:40:67\tOmnibyte\tOmnibyte Corporation\n00:40:68\tExtended\tExtended Systems\n00:40:69\tLemcom\t\n00:40:6A\tKentekIn\tKentek Information Systems Inc\n00:40:6B\tSysgen\t\n00:40:6C\tCoperniq\tCopernique\n00:40:6D\tLanco\tLanco, Inc.\n00:40:6E\tCorollar\tCorollary, Inc.\n00:40:6F\tSyncRese\tSync Research Inc\n00:40:70\tInterwar\tInterware Co., Ltd.\n00:40:71\tAtmCompu\tAtm Computer Gmbh\n00:40:72\tAppliedI\tApplied Innovation\n00:40:73\tBassAsso\tBass Associates\n00:40:74\tCableAnd\tCable and Wireless\n00:40:75\tTattileS\tTattile SRL\n00:40:76\tSunConve\tSun Conversion Technologies\n00:40:77\tMaxtonTe\tMaxton Technology Corporation\n00:40:78\tWearnesA\tWearnes Automation Pte Ltd\n00:40:79\tJukoManu\tJuko Manufacture Company, Ltd.\n00:40:7A\tSocieteD\tSOCIETE D'EXPLOITATION DU CNIT\n00:40:7B\tScientif\tScientific Atlanta\n00:40:7C\tQume\tQume Corporation\n00:40:7D\tExtensio\tExtension Technology Corp.\n00:40:7E\tEvergree\tEvergreen Systems, Inc.\n00:40:7F\tFlir\tFLIR Systems\n00:40:80\tAthenix\tAthenix Corporation\n00:40:81\tMannesma\tMannesmann Scangraphic Gmbh\n00:40:82\tLaborato\tLaboratory Equipment Corp\n00:40:83\tTdaIndus\tTda Industria De Produtos\n00:40:84\tHoneywel\tHoneywell International HPS\n00:40:85\tSaabInst\tSAAB Instruments AB\n00:40:86\tMichelsK\tMichels & Kleberhoff Computer\n00:40:87\tUbitrex\t\n00:40:88\tMobuisNu\tMobuis\n00:40:89\tMeidensh\tMeidensha Corporation\n00:40:8A\tTpsTelep\tTPS Teleprocessing Sys. Gmbh\n00:40:8B\tRaylan\tRaylan Corporation\n00:40:8C\tAxisComm\tAxis Communications AB\n00:40:8D\tGoodyear\tTHE GOODYEAR TIRE & RUBBER CO.\n00:40:8E\tTattileS\tTattile SRL\n00:40:8F\tWm-DataM\tWM-Data Minfo AB\n00:40:90\tAnselCom\tAnsel Communications\n00:40:91\tProcompI\tProcomp Industria Eletronica\n00:40:92\tAspCompu\tASP Computer Products, Inc.\n00:40:93\tPaxdataN\tPaxdata Networks Ltd.\n00:40:94\tShograph\tShographics Inc\n00:40:95\tRPTInter\tR.P.T. INTERGROUPS INT'L LTD.\n00:40:96\tAironet\t\n00:40:97\tDatexDiv\tDatex Division Of\n00:40:98\tDressler\tDRESSLER GMBH & CO.\n00:40:99\tNewgen\tNewgen Systems Corp.\n00:40:9A\tNetworkE\tNetwork Express Inc\n00:40:9B\tHalCompu\tHal Computer Systems Inc.\n00:40:9C\tTranswar\tTransware\n00:40:9D\tDigiboar\tDigiBoard\n00:40:9E\tConcurre\tConcurrent Technologies Ltd.\n00:40:9F\tTelco\tTelco Systems, Inc.\n00:40:A0\tGoldstar\tGoldstar Co., Ltd.\n00:40:A1\tErgoComp\tErgo Computing\n00:40:A2\tKingstar\tKingstar Technology Inc.\n00:40:A3\tMicrouni\tMicrounity Systems Engineering\n00:40:A4\tRoseElec\tRose Electronics\n00:40:A5\tClinicom\tClinicomp Intl.\n00:40:A6\tCrayRese\tCray Research Inc.\n00:40:A7\tItautecP\tItautec Philco S.A.\n00:40:A8\tImfInter\tImf International Ltd.\n00:40:A9\tDatacom\tDatacom Inc.\n00:40:AA\tValmetAu\tValmet Automation Inc\n00:40:AB\tRolandDg\tRoland Dg Corporation\n00:40:AC\tSuperWor\tSuper Workstation, Inc.\n00:40:AD\tSmaRegel\tSMA Regelsysteme Gmbh\n00:40:AE\tDeltaCon\tDelta Controls, Inc.\n00:40:AF\tDigitalP\tDigital Products, Inc. (DPI).\n00:40:B0\tBytexEng\tBytex Corporation, Engineering\n00:40:B1\tCodonics\tCodonics Inc.\n00:40:B2\tSystemfo\tSystemforschung\n00:40:B3\tPartech\tParTech Inc.\n00:40:B4\t3comKK\t\n00:40:B5\tVideoTec\tVideo Technology Computers Ltd\n00:40:B6\tComputer\tComputerm Corporation\n00:40:B7\tStealthC\tStealth Computer Systems\n00:40:B8\tIdeaAsso\tIdea Associates\n00:40:B9\tMacqElec\tMACQ Electronique SA\n00:40:BA\tAlliantC\tAlliant Computer Systems Corp.\n00:40:BB\tGoldstar\tGoldstar Cable Co., Ltd.\n00:40:BC\tAlgorith\tAlgorithmics Ltd.\n00:40:BD\tStarligh\tStarlight Networks Inc\n00:40:BE\tBoeingDe\tBOEING DEFENSE & SPACE\n00:40:BF\tChannelI\tCHANNEL SYSTEMS INTERN'L INC.\n00:40:C0\tVistaCon\tVista Controls Corporation\n00:40:C1\tBizerba-\tBizerba-Werke Wilheim Kraut\n00:40:C2\tAppliedC\tApplied Computing Devices\n00:40:C3\tFischerA\tFischer and Porter Co.\n00:40:C4\tKinkeiSy\tKinkei System Corporation\n00:40:C5\tMicomCom\tMicom Communications Corp.\n00:40:C6\tFibernet\tFibernet Research, Inc.\n00:40:C7\tRubyTech\tRuby Tech Corporation\n00:40:C8\tMilanTec\tMilan Technology Corp.\n00:40:C9\tNcube\t\n00:40:CA\tFirstInt\tFIRST INTERNAT'L COMPUTER, INC\n00:40:CB\tLanwanTe\tLanwan Technologies\n00:40:CC\tSilcomMa\tSilcom Manufacturing Technology Inc\n00:40:CD\tTeraMicr\tTera Microsystems, Inc.\n00:40:CE\tNet-Sour\tNET-SOURCE, INC.\n00:40:CF\tStrawber\tStrawberry Tree Inc\n00:40:D0\tMitacInt\tMitac International Corp.\n00:40:D1\tFukudaDe\tFukuda Denshi Co., Ltd.\n00:40:D2\tPagine\t\n00:40:D3\tKimpsion\tKimpsion International Corp.\n00:40:D4\tGageTalk\tGage Talker Corp.\n00:40:D5\tSartoriu\tSartorius Mechatronics T&H GmbH\n00:40:D6\tLocamati\tLocamation B.V.\n00:40:D7\tStudioGe\tStudio Gen Inc\n00:40:D8\tOceanOff\tOcean Office Automation Ltd\n00:40:D9\tAmerican\tAmerican Megatrends Inc.\n00:40:DA\tTelspec\tTelspec Ltd\n00:40:DB\tAdvanced\tAdvanced Technical Solutions\n00:40:DC\tTritecEl\tTritec Electronic Gmbh\n00:40:DD\tHongTech\tHong Technologies\n00:40:DE\tElsagDat\tElsag Datamat spa\n00:40:DF\tDigalog\t\n00:40:E0\tAtomwide\tAtomwide Ltd.\n00:40:E1\tMarnerIn\tMarner International Inc\n00:40:E2\tMesaRidg\tMesa Ridge Technologies Inc\n00:40:E3\tQuin\t\n00:40:E4\tE-MTechn\tE-M TECHNOLOGY, INC.\n00:40:E5\tSybus\t\n00:40:E6\tCAEN\tC.A.E.N.\n00:40:E7\tArnosIns\tArnos Instruments & Computer\n00:40:E8\tCharlesR\tCharles River Data Systems,Inc\n00:40:E9\tAccord\t\n00:40:EA\tPlaintre\tPlainTree Systems Inc\n00:40:EB\tMartinMa\tMartin Marietta Corporation\n00:40:EC\tMikasaSy\tMikasa System Engineering\n00:40:ED\tNetworkC\tNetwork Controls International Inc\n00:40:EE\tOptimem\t\n00:40:EF\tHypercom\tHypercom, Inc.\n00:40:F0\tMicro\t\n00:40:F1\tChuoElec\tChuo Electronics Co., Ltd.\n00:40:F2\tJanichKl\tJANICH & KLASS COMPUTERTECHNIK\n00:40:F3\tNetcor\t\n00:40:F4\tCameoCom\tCameo Communications, Inc.\n00:40:F5\tOemEngin\tOEM Engines\n00:40:F6\tKatronCo\tKatron Computers Inc\n00:40:F7\tPolaroid\tPolaroid Corporation\n00:40:F8\tSystemha\tSystemhaus Discom\n00:40:F9\tCombinet\t\n00:40:FA\tMicroboa\tMicroboards Inc\n00:40:FB\tCascadeC\tCascade Communications Corp.\n00:40:FC\tIbrCompu\tIbr Computer Technik Gmbh\n00:40:FD\tLxe\t\n00:40:FE\tSymplexC\tSymplex Communications\n00:40:FF\tTelebitC\tTelebit Corporation\n00:41:B4\tWuxiZhon\tWuxi Zhongxing Optoelectronics Technology Co.,Ltd.\n00:41:D2\tCisco\tCisco Systems, Inc\n00:42:52\tRlxTechn\tRLX Technologies\n00:42:5A\tCisco\tCisco Systems, Inc\n00:42:68\tCisco\tCisco Systems, Inc\n00:42:79\tSunitecE\tSunitec Enterprise Co.,Ltd\n00:43:FF\tKetronSR\tKetron S.R.L.\n00:45:01\tVersusTe\tVersus Technology, Inc.\n00:45:1D\tCisco\tCisco Systems, Inc\n00:46:4B\tHuaweiTe\tHuawei Technologies Co.,Ltd\n00:48:54\tDigitalS\tDigital SemiConductor\n00:4A:77\tZte\tzte corporation\n00:4B:F3\tShenzhen\tShenzhen Mercury Communication Technologies Co.,Ltd.\n00:4D:32\tAndonHea\tAndon Health Co.,Ltd.\n00:4F:49\tRealtek\t\n00:4F:4B\tPineTech\tPine Technology Ltd.\n00:50:00\tNexoComm\tNexo Communications, Inc.\n00:50:01\tYamashit\tYamashita Systems Corp.\n00:50:02\tOmnisec\tOmnisec Ag\n00:50:03\tXrite\tXrite Inc\n00:50:04\t3com3c90\t3com\n00:50:06\tTac\tTac Ab\n00:50:07\tSiemensT\tSiemens Telecommunication Systems Limited\n00:50:08\tTivaMicr\tTIVA MICROCOMPUTER CORP. (TMC)\n00:50:09\tPhilipsB\tPhilips Broadband Networks\n00:50:0A\tIrisTech\tIris Technologies, Inc.\n00:50:0B\tCisco\tCisco Systems, Inc\n00:50:0C\tE-TekLab\te-Tek Labs, Inc.\n00:50:0D\tSatoriEl\tSatori Electoric Co., Ltd.\n00:50:0E\tChromati\tChromatis Networks, Inc.\n00:50:0F\tCisco\t\n00:50:10\tNovanetL\tNovaNET Learning, Inc.\n00:50:12\tCbl-\tCBL - GMBH\n00:50:13\tSeagateC\tSeagate Cloud Systems Inc\n00:50:14\tCisco\tCisco Systems, Inc\n00:50:15\tBrightSt\tBright Star Engineering\n00:50:16\tMolexCan\tMolex Canada Ltd\n00:50:17\tRsrSRL\tRsr S.R.L.\n00:50:18\tAmit\tAMIT, Inc.\n00:50:19\tSpringTi\tSpring Tide Networks, Inc.\n00:50:1A\tIqinvisi\tIQinVision\n00:50:1B\tAblCanad\tAbl Canada, Inc.\n00:50:1C\tJatom\tJatom Systems, Inc.\n00:50:1E\tGrassVal\tGrass Valley, A Belden Brand\n00:50:1F\tMrg\tMrg Systems, Ltd.\n00:50:20\tMediasta\tMediastar Co., Ltd.\n00:50:21\tEisInter\tEis International, Inc.\n00:50:22\tZonetTec\tZonet Technology, Inc.\n00:50:23\tPgDesign\tPg Design Electronics, Inc.\n00:50:24\tNavic\tNavic Systems, Inc.\n00:50:26\tCosystem\tCosystems, Inc.\n00:50:27\tGenicom\tGenicom Corporation\n00:50:28\tAvalComm\tAval Communications\n00:50:29\t1394Prin\t1394 PRINTER WORKING GROUP\n00:50:2A\tCisco\tCisco Systems, Inc\n00:50:2B\tGenrad\tGenrad Ltd.\n00:50:2C\tSoyoComp\tSoyo Computer, Inc.\n00:50:2D\tAccel\tAccel, Inc.\n00:50:2E\tCambex\tCambex Corporation\n00:50:2F\tTollbrid\tTollBridge Technologies, Inc.\n00:50:30\tFuturePl\tFuture Plus Systems\n00:50:31\tAeroflex\tAeroflex Laboratories, Inc.\n00:50:32\tPicazoCo\tPicazo Communications, Inc.\n00:50:33\tMayanNet\tMayan Networks\n00:50:36\tNetcam\tNetcam, Ltd.\n00:50:37\tKogaElec\tKoga Electronics Co.\n00:50:38\tDainTele\tDain Telecom Co., Ltd.\n00:50:39\tMarinerN\tMariner Networks\n00:50:3A\tDatongEl\tDatong Electronics Ltd.\n00:50:3B\tMediafir\tMediafire Corporation\n00:50:3C\tTsinghua\tTsinghua Novel Electronics\n00:50:3E\tCisco\tCisco Systems, Inc\n00:50:3F\tAnchorGa\tAnchor Games\n00:50:40\tPanasoni\tPanasonic Electric Works Co., Ltd.\n00:50:41\tCoretron\tCoretronic Corporation\n00:50:42\tSciManuf\tSci Manufacturing Singapore Pte, Ltd.\n00:50:43\tMarvellS\tMarvell Semiconductor, Inc.\n00:50:44\tAsaca\tAsaca Corporation\n00:50:45\tRioworks\tRioworks Solutions, Inc.\n00:50:46\tMenicxIn\tMenicx International Co., Ltd.\n00:50:47\tPrivate\t\n00:50:48\tInfolibr\tInfolibria\n00:50:49\tArborNet\tArbor Networks Inc\n00:50:4A\tEltecoAS\tElteco A.S.\n00:50:4B\tBarconet\tBarconet N.V.\n00:50:4C\tGalilMot\tGalil Motion Control\n00:50:4D\tTokyoEle\tTokyo Electron Device Limited\n00:50:4E\tSierraMo\tSierra Monitor Corp.\n00:50:4F\tOlencomE\tOlencom Electronics\n00:50:50\tCisco\t\n00:50:51\tIwatsuEl\tIwatsu Electric Co., Ltd.\n00:50:52\tTiaraNet\tTiara Networks, Inc.\n00:50:53\tCisco\tCisco Systems, Inc\n00:50:54\tCisco\tCisco Systems, Inc\n00:50:55\tDoms\tDOMS A/S\n00:50:56\tVmware\tVMware, Inc.\n00:50:57\tBroadban\tBroadband Access Systems\n00:50:58\tSangomaT\tSangoma Technologies\n00:50:59\tIbahn\t\n00:50:5A\tNetworkA\tNetwork Alchemy, Inc.\n00:50:5B\tKawasaki\tKawasaki Lsi U.S.A., Inc.\n00:50:5C\tTundo\tTundo Corporation\n00:50:5E\tDigitekM\tDigitek Micrologic S.A.\n00:50:5F\tBrandInn\tBrand Innovators\n00:50:60\tTandberg\tTandberg Telecom As\n00:50:62\tKouwellE\tKOUWELL ELECTRONICS CORP.  **\n00:50:63\tOyComsel\tOy Comsel System Ab\n00:50:64\tCaeElect\tCae Electronics\n00:50:65\tTdk-Lamb\tTDK-Lambda Corporation\n00:50:66\tAtecomAd\tAtecoM GmbH advanced telecomunication modules\n00:50:67\tAerocomm\tAerocomm, Inc.\n00:50:68\tElectron\tElectronic Industries Association\n00:50:69\tPixstrea\tPixStream Incorporated\n00:50:6A\tEdeva\tEdeva, Inc.\n00:50:6B\tSpx-Ateg\t\n00:50:6C\tBeijerEl\tBeijer Electronics Products AB\n00:50:6D\tVideojet\tVideojet Systems\n00:50:6E\tCorderEn\tCorder Engineering Corporation\n00:50:6F\tG-Connec\tG-CONNECT\n00:50:70\tChaintec\tChaintech Computer Co., Ltd.\n00:50:71\tAiwa\tAiwa Co., Ltd.\n00:50:72\tCorvis\tCorvis Corporation\n00:50:73\tCisco\tCisco Systems, Inc\n00:50:74\tAdvanced\tADVANCED HI-TECH CORP.\n00:50:75\tKestrelS\tKestrel Solutions\n00:50:76\tIbm\tIBM Corp\n00:50:77\tProlific\tProlific Technology, Inc.\n00:50:78\tMegatonH\tMegaton House, Ltd.\n00:50:79\tPrivate\t\n00:50:7A\tXpeed\tXpeed, Inc.\n00:50:7B\tMerlotCo\tMerlot Communications\n00:50:7C\tVideocon\tVideocon Ag\n00:50:7D\tIfp\t\n00:50:7E\tNewerTec\tNewer Technology\n00:50:7F\tDraytek\tDrayTek Corp.\n00:50:80\tCisco\tCisco Systems, Inc\n00:50:81\tMurataMa\tMurata Machinery, Ltd.\n00:50:82\tForesson\tForesson Corporation\n00:50:83\tGilbarco\tGilbarco, Inc.\n00:50:84\tAtlProdu\tAtl Products\n00:50:86\tTelkomSa\tTelkom Sa, Ltd.\n00:50:87\tTerasaki\tTerasaki Electric Co., Ltd.\n00:50:88\tAmano\tAmano Corporation\n00:50:89\tSafetyMa\tSafety Management Systems\n00:50:8B\tHewlettP\tHewlett Packard\n00:50:8C\tRsi\tRsi Systems\n00:50:8D\tAbitComp\tAbit Computer Corporation\n00:50:8E\tOptimati\tOptimation, Inc.\n00:50:8F\tAsitaTec\tASITA TECHNOLOGIES INT'L LTD.\n00:50:90\tDctri\t\n00:50:91\tNetacces\tNetaccess, Inc.\n00:50:92\tRigakuOs\tRigaku Corporation Osaka Plant\n00:50:93\tBoeing\t\n00:50:94\tArrisGro\tARRIS Group, Inc.\n00:50:95\tPeracomN\tPeracom Networks\n00:50:96\tSalixTec\tSalix Technologies, Inc.\n00:50:97\tMmc-Embe\tMMC-EMBEDDED COMPUTERTECHNIK GmbH\n00:50:98\tGlobaloo\tGlobaloop, Ltd.\n00:50:99\t3comEuro\t3COM EUROPE LTD\n00:50:9A\tTagElect\tTag Electronic Systems\n00:50:9B\tSwitchco\tSwitchcore Ab\n00:50:9C\tBetaRese\tBeta Research\n00:50:9D\tIndustre\tThe Industree B.V.\n00:50:9E\tLesTechn\tLes Technologies SoftAcoustik Inc.\n00:50:9F\tHorizonC\tHorizon Computer\n00:50:A0\tDeltaCom\tDelta Computer Systems, Inc.\n00:50:A1\tCarloGav\tCarlo Gavazzi, Inc.\n00:50:A2\tCisco\tCisco Systems, Inc\n00:50:A3\tTransmed\tTransMedia Communications, Inc.\n00:50:A4\tIoTech\tIo Tech, Inc.\n00:50:A5\tCapitolB\tCapitol Business Systems, Ltd.\n00:50:A6\tOptronic\tOptronics\n00:50:A7\tCisco\tCisco Systems, Inc\n00:50:A8\tOpencon\tOpenCon Systems, Inc.\n00:50:A9\tMoldatWi\tMoldat Wireless Technolgies\n00:50:AA\tKonicaMi\tKonica Minolta Holdings, Inc.\n00:50:AB\tNaltec\tNALTEC, Inc.\n00:50:AC\tMapleCom\tMaple Computer Corporation\n00:50:AD\tCommuniq\tCommUnique Wireless Corp.\n00:50:AE\tFdk\tFDK Co., Ltd\n00:50:AF\tIntergon\tIntergon, Inc.\n00:50:B0\tTechnolo\tTechnology Atlanta Corporation\n00:50:B1\tGiddings\tGIDDINGS & LEWIS\n00:50:B2\tBrodel\tBRODEL GmbH\n00:50:B3\tVoiceboa\tVoiceboard Corporation\n00:50:B4\tSatchwel\tSatchwell Control Systems, Ltd\n00:50:B5\tFichetSe\tFichet Securite Electronique\n00:50:B6\tGoodWayI\tGood Way Ind. Co., Ltd.\n00:50:B7\tBoserTec\tBoser Technology Co., Ltd.\n00:50:B8\tInovaCom\tINOVA COMPUTERS GMBH & CO. KG\n00:50:B9\tXitronTe\tXitron Technologies, Inc.\n00:50:BA\tD-Link\tD-Link Corporation\n00:50:BB\tCmsTechn\tCms Technologies\n00:50:BC\tHammerSt\tHammer Storage Solutions\n00:50:BD\tCisco\t\n00:50:BE\tFastMult\tFast Multimedia Ag\n00:50:BF\tMetallig\tMetalligence Technology Corp.\n00:50:C0\tGatan\tGatan, Inc.\n00:50:C1\tGemflexN\tGemflex Networks, Ltd.\n00:50:C2\tIeeeRegi\tIEEE Registration Authority\n00:50:C2:00:00:00/36\tTLS\tT.L.S. Corp.\n00:50:C2:00:10:00/36\tJmbsDeve\tJMBS Developpements\n00:50:C2:00:20:00/36\tIntegrat\tIntegrated Automation Solutions\n00:50:C2:00:30:00/36\tMicrosof\tMicrosoft\n00:50:C2:00:40:00/36\tSciTechn\tSCI Technology Inc.\n00:50:C2:00:50:00/36\tGdCalifo\tGD California, Inc.\n00:50:C2:00:60:00/36\tProjectM\tProject Management Enterprises, Inc.\n00:50:C2:00:70:00/36\tCliveGre\tClive Green & Co. Ltd.\n00:50:C2:00:80:00/36\tPortable\tPortable Add-Ons\n00:50:C2:00:90:00/36\tDatakine\tDatakinetics Ltd.\n00:50:C2:00:A0:00/36\tTharsys\t\n00:50:C2:00:B0:00/36\tIo\tIO Limited\n00:50:C2:00:C0:00/36\tVbrick\tVbrick Systems Inc.\n00:50:C2:00:D0:00/36\tOpusTele\tOpus Telecom Inc.\n00:50:C2:00:E0:00/36\tTttech\t\n00:50:C2:00:F0:00/36\tXln-T\t\n00:50:C2:01:00:00/36\tMoisture\tMoisture Systems\n00:50:C2:01:10:00/36\tBihl+Wie\tBihl + Wiedemann GmbH\n00:50:C2:01:20:00/36\tFlowareS\tFloware System Solutions Ltd.\n00:50:C2:01:30:00/36\tSensysTe\tSensys Technologies Inc.\n00:50:C2:01:40:00/36\tCanal+\tCanal +\n00:50:C2:01:50:00/36\tLeroyAut\tLeroy Automation\n00:50:C2:01:60:00/36\tDspDesig\tDSP Design Ltd.\n00:50:C2:01:70:00/36\tHunterTe\tHunter Technology Inc.\n00:50:C2:01:80:00/36\tCad-Ul\tCAD-UL GmbH\n00:50:C2:01:90:00/36\tEmtacTec\tEmtac Technology Corp.\n00:50:C2:01:A0:00/36\tSkylakeT\tSkylake Talix\n00:50:C2:01:B0:00/36\tCrossPro\tCross Products Ltd.\n00:50:C2:01:C0:00/36\tTadiranS\tTadiran Scopus\n00:50:C2:01:D0:00/36\tPrinceto\tPrinceton Gamma Tech\n00:50:C2:01:E0:00/36\tCalltech\tCallTech International Limited\n00:50:C2:01:F0:00/36\tKbsIndus\tKBS Industrieelektronik GmbH\n00:50:C2:02:00:00/36\tIconRese\tIcon Research Ltd.\n00:50:C2:02:10:00/36\tDrsTechn\tDRS Technologies Canada Co.\n00:50:C2:02:20:00/36\tAshlingM\tAshling Microsystems Ltd.\n00:50:C2:02:30:00/36\tZabacom\tZabacom, Inc.\n00:50:C2:02:40:00/36\tIpitek\t\n00:50:C2:02:50:00/36\tTeracomT\tTeracom Telematica Ltda.\n00:50:C2:02:60:00/36\tAbatis\tAbatis Systems Corp.\n00:50:C2:02:70:00/36\tIndustri\tIndustrial Control Links\n00:50:C2:02:80:00/36\tFrenschP\tThe Frensch Corporation (Pty) Ltd.\n00:50:C2:02:90:00/36\tGrossenb\tGrossenbacher Systeme AG\n00:50:C2:02:A0:00/36\tVersalog\tVersaLogic Corp.\n00:50:C2:02:B0:00/36\tNovaEngi\tNova Engineering Inc.\n00:50:C2:02:C0:00/36\tNarrowba\tNarrowband Telecommunications\n00:50:C2:02:D0:00/36\tInnocor\tInnocor LTD\n00:50:C2:02:E0:00/36\tTurtleMo\tTurtle Mountain Corp\n00:50:C2:02:F0:00/36\tSinetica\tSinetica Corp\n00:50:C2:03:00:00/36\tLockheed\tLockheed Martin Tactical Defense Systems Eagan\n00:50:C2:03:10:00/36\tEloquenc\tEloquence Ltd\n00:50:C2:03:20:00/36\tMotionio\t\n00:50:C2:03:30:00/36\tDobleEng\tDoble Engineering\n00:50:C2:03:40:00/36\tIngBuero\tIng. Buero W. Kanis GmbH\n00:50:C2:03:50:00/36\tAlliantT\tAlliant Techsystems, Inc.\n00:50:C2:03:60:00/36\tArcturus\tArcturus Networks Inc.\n00:50:C2:03:70:00/36\tEISM\tE.I.S.M.\n00:50:C2:03:80:00/36\tEtheiraT\tEtheira Technologies\n00:50:C2:03:90:00/36\tApexSign\tApex Signal Corp\n00:50:C2:03:A0:00/36\tPllbElet\tPLLB Elettronica SPA\n00:50:C2:03:B0:00/36\tVnrElect\tVNR Electronique SA\n00:50:C2:03:C0:00/36\tBrainbox\tBrainBoxes Ltd\n00:50:C2:03:D0:00/36\tIsdnGate\tISDN Gateway Technology AG\n00:50:C2:03:E0:00/36\tMsuUk\tMSU UK Ltd\n00:50:C2:03:F0:00/36\tCelotek\tCelotek Corp\n00:50:C2:04:00:00/36\tMispo\tMiSPO Co., Ltd.\n00:50:C2:04:10:00/36\tDamlerCh\tDamler Chrysler Rail System (Signal) AB\n00:50:C2:04:20:00/36\tBEARSolu\tB.E.A.R. Solutions (Australasia) Pty, Ltd\n00:50:C2:04:30:00/36\tCurtis\tCurtis, Inc.\n00:50:C2:04:40:00/36\tPrivate\t\n00:50:C2:04:50:00/36\tChaseMan\tChase Manhattan Bank\n00:50:C2:04:60:00/36\tPrivate\t\n00:50:C2:04:70:00/36\tBRElectr\tB. R. Electronics\n00:50:C2:04:80:00/36\tCybectec\tCybectec Inc.\n00:50:C2:04:90:00/36\tComputer\tComputer Concepts Corp\n00:50:C2:04:A0:00/36\tTelecomA\tTelecom Analysis Systems, LP\n00:50:C2:04:B0:00/36\tTecstarD\tTecstar Demo Systems Division\n00:50:C2:04:C0:00/36\tNewStand\tNew Standard Engineering NV\n00:50:C2:04:E0:00/36\tIndustri\tIndustrial Electronic Engineers, Inc.\n00:50:C2:04:F0:00/36\tLuma\tLuma Corporation\n00:50:C2:05:00:00/36\tDataprob\tDataprobe, Inc.\n00:50:C2:05:10:00/36\tJsrUltra\tJSR Ultrasonics\n00:50:C2:05:20:00/36\tMayoFoun\tMayo Foundation\n00:50:C2:05:40:00/36\tOptionex\tOptionexist Limited\n00:50:C2:05:50:00/36\tSanCastl\tSan Castle Technologies, Inc.\n00:50:C2:05:60:00/36\tBase2\tBase 2\n00:50:C2:05:70:00/36\tLiteF\tLite F GmBH\n00:50:C2:05:80:00/36\tVisionRe\tVision Research, Inc.\n00:50:C2:05:90:00/36\tAustcoCo\tAustco Communication Systems Pty, Ltd\n00:50:C2:05:A0:00/36\tSonifex\tSonifex Ltd\n00:50:C2:05:B0:00/36\tRadiomet\tRadiometer Medical A/S\n00:50:C2:05:C0:00/36\tNortelNe\tNortel Networks PLC (UK)\n00:50:C2:05:D0:00/36\tIgnitusC\tIgnitus Communications, LLC\n00:50:C2:05:E0:00/36\tDiva\tDIVA Systems\n00:50:C2:05:F0:00/36\tMaldenEl\tMalden Electronics Ltd\n00:50:C2:06:00:00/36\tPrivate\t\n00:50:C2:06:10:00/36\tSimpleNe\tSimple Network Magic Corporation\n00:50:C2:06:20:00/36\tPrivate\t\n00:50:C2:06:30:00/36\tTicketma\tTicketmaster Corp\n00:50:C2:06:40:00/36\tPrivate\t\n00:50:C2:06:50:00/36\tCleverDe\tClever Devices, Ltd.\n00:50:C2:06:60:00/36\tPrivate\t\n00:50:C2:06:70:00/36\tRiverlin\tRiverlink Computers, Ltd.\n00:50:C2:06:80:00/36\tSeabridg\tSeabridge\n00:50:C2:06:90:00/36\tEcElettr\tEC Elettronica S.R.L.\n00:50:C2:06:A0:00/36\tUnimark\t\n00:50:C2:06:B0:00/36\tNcast\tNCast Corporation\n00:50:C2:06:C0:00/36\tWavecomE\tWaveCom Electronics, Inc.\n00:50:C2:06:D0:00/36\tAdvanced\tAdvanced Signal Corp.\n00:50:C2:06:E0:00/36\tAvtronMa\tAvtron Manufacturing Inc.\n00:50:C2:06:F0:00/36\tDigitalS\tDigital Services Group\n00:50:C2:07:00:00/36\tKatchall\tKatchall Technologies Group\n00:50:C2:07:10:00/36\tNetvisio\tNetVision Telecom\n00:50:C2:07:20:00/36\tNeuberge\tNeuberger Gebaeudeautomation GmbH & Co.\n00:50:C2:07:30:00/36\tAlstomSi\tAlstom Signalling Ltd.\n00:50:C2:07:40:00/36\tEdgeTech\tEdge Tech Co., Ltd.\n00:50:C2:07:50:00/36\tEnttecPt\tENTTEC Pty Ltd.\n00:50:C2:07:60:00/36\tLittonGu\tLitton Guidance & Control Systems\n00:50:C2:07:70:00/36\tSacoSmar\tSaco Smartvision Inc.\n00:50:C2:07:80:00/36\tReselec\tReselec AG\n00:50:C2:07:90:00/36\tFlextelS\tFlextel S.p.A\n00:50:C2:07:A0:00/36\tRadiotel\t\n00:50:C2:07:B0:00/36\tTrikonTe\tTrikon Technologies Ltd.\n00:50:C2:07:C0:00/36\tPllbElet\tPLLB elettronica spa\n00:50:C2:07:D0:00/36\tCaspianN\tCaspian Networks\n00:50:C2:07:E0:00/36\tJl-Tekni\tJL-teknik\n00:50:C2:07:F0:00/36\tDunti\tDunti Corporation\n00:50:C2:08:00:00/36\tAim\t\n00:50:C2:08:10:00/36\tMatusche\tMatuschek Messtechnik GmbH\n00:50:C2:08:20:00/36\tGfiChron\tGFI Chrono Time\n00:50:C2:08:30:00/36\tArdSa\tard sa\n00:50:C2:08:40:00/36\tDialog4S\tDIALOG4 System Engineering GmbH\n00:50:C2:08:50:00/36\tCrosspor\tCrossport Systems\n00:50:C2:08:60:00/36\tValidyne\tValidyne Engineering Corp.\n00:50:C2:08:70:00/36\tMonitorB\tMonitor Business Machines Ltd.\n00:50:C2:08:80:00/36\tTelinc\tTELINC Corporation\n00:50:C2:08:90:00/36\tFenwalIt\tFenwal Italia S.P.A.\n00:50:C2:08:A0:00/36\tRisingEd\tRising Edge Technologies\n00:50:C2:08:B0:00/36\tHyperchi\tHYPERCHIP Inc.\n00:50:C2:08:C0:00/36\tIpUnity\tIP Unity\n00:50:C2:08:D0:00/36\tKylinkCo\tKylink Communications Corp.\n00:50:C2:08:E0:00/36\tBsquare\t\n00:50:C2:08:F0:00/36\tGeneralI\tGeneral Industries Argentina\n00:50:C2:09:00:00/36\tInvensys\tInvensys Controls Network Systems\n00:50:C2:09:10:00/36\tStorlogi\tStorLogic, Inc.\n00:50:C2:09:20:00/36\tDigitall\tDigitAll World Co., Ltd\n00:50:C2:09:30:00/36\tKorealin\tKorealink\n00:50:C2:09:40:00/36\tAnalytic\tAnalytical Spectral Devices, Inc.\n00:50:C2:09:50:00/36\tSeatech\t\n00:50:C2:09:60:00/36\tUtronixE\tUtronix Elektronikutreckling AB\n00:50:C2:09:70:00/36\tImvInver\tIMV Invertomatic\n00:50:C2:09:80:00/36\tEpelIndu\tEPEL Industrial, S.A.\n00:50:C2:09:90:00/36\tCaseInfo\tCase Information & Communications\n00:50:C2:09:A0:00/36\tNboDevel\tNBO Development Center Sekusui Chemical Co. Ltd.\n00:50:C2:09:B0:00/36\tSeffleIn\tSeffle Instrument AB\n00:50:C2:09:C0:00/36\tRfApplic\tRF Applications, Inc.\n00:50:C2:09:D0:00/36\tZelpos\t\n00:50:C2:09:E0:00/36\tInfinite\tInfinitec Networks, Inc.\n00:50:C2:09:F0:00/36\tMetawave\tMetaWave Vedeo Systems\n00:50:C2:0A:00:00/36\tCynaps\t\n00:50:C2:0A:10:00/36\tVisableG\tVisable Genetics, Inc.\n00:50:C2:0A:20:00/36\tJägerCom\tJäger Computergesteuerte Meßtechnik GmbH.\n00:50:C2:0A:30:00/36\tBasytec\tBaSyTec GmbH\n00:50:C2:0A:40:00/36\tBountyPt\tBounty Systems Pty Ltd.\n00:50:C2:0A:50:00/36\tMobiltex\tMobiltex Data Ltd.\n00:50:C2:0A:60:00/36\tArula\tArula Systems, Inc.\n00:50:C2:0A:70:00/36\tWatercov\tWaterCove Networks\n00:50:C2:0A:80:00/36\tKaveriNe\tKaveri Networks\n00:50:C2:0A:90:00/36\tRadiantN\tRadiant Networks Plc\n00:50:C2:0A:A0:00/36\tLog-In\tLog-In, Inc.\n00:50:C2:0A:B0:00/36\tFastware\tFastware.Net, LLC\n00:50:C2:0A:C0:00/36\tHoneywel\tHoneywell GNO\n00:50:C2:0A:D0:00/36\tBmcMesss\tBMC Messsysteme GmbH\n00:50:C2:0A:E0:00/36\tZarak\tZarak Systems Corp.\n00:50:C2:0A:F0:00/36\tLatusLig\tLatus Lightworks, Inc.\n00:50:C2:0B:00:00/36\tLmiTechn\tLMI Technologies\n00:50:C2:0B:10:00/36\tBeelineN\tBeeline Networks, Inc.\n00:50:C2:0B:20:00/36\tRFMicroD\tR F Micro Devices\n00:50:C2:0B:30:00/36\tSmx\tSMX Corporation\n00:50:C2:0B:40:00/36\tWavefly\tWavefly Corporation\n00:50:C2:0B:50:00/36\tExtremeC\tExtreme Copper, Inc.\n00:50:C2:0B:60:00/36\tApsecure\tApSecure Technologies (Canada), Inc.\n00:50:C2:0B:70:00/36\tRymic\t\n00:50:C2:0B:80:00/36\tLanContr\tLAN Controls, Inc.\n00:50:C2:0B:90:00/36\tHelmutMa\tHelmut Mauell GmbH Werk Weida\n00:50:C2:0B:A0:00/36\tPro-Acti\tPro-Active\n00:50:C2:0B:B0:00/36\tMazet\tMAZet GmbH\n00:50:C2:0B:C0:00/36\tInfolink\tInfolink Software AG\n00:50:C2:0B:D0:00/36\tTattile\t\n00:50:C2:0B:E0:00/36\tStellaEl\tStella Electronics & Tagging\n00:50:C2:0B:F0:00/36\tPrivate\t\n00:50:C2:0C:00:00/36\tImigix\tImigix Ltd.\n00:50:C2:0C:10:00/36\tCasabyte\t\n00:50:C2:0C:20:00/36\tAlchemyS\tAlchemy Semiconductor, Inc.\n00:50:C2:0C:30:00/36\tTonbu\tTonbu, Inc.\n00:50:C2:0C:40:00/36\tInterepo\tInterEpoch Technology,INC.\n00:50:C2:0C:50:00/36\tSaiaBurg\tSAIA Burgess Controls AG\n00:50:C2:0C:60:00/36\tAdvanced\tAdvanced Medical Information Technologies, Inc.\n00:50:C2:0C:70:00/36\tTranscom\tTransComm Technology System, Inc.\n00:50:C2:0C:80:00/36\tTrane\tThe Trane Company\n00:50:C2:0C:90:00/36\tDssNetwo\tDSS Networks, Inc.\n00:50:C2:0C:A0:00/36\tJDRichar\tJ D Richards\n00:50:C2:0C:B0:00/36\tStudiel\t\n00:50:C2:0C:C0:00/36\tAlphamed\tAlphaMedia Co., Ltd\n00:50:C2:0C:D0:00/36\tLinetOy\tLinet Oy\n00:50:C2:0C:E0:00/36\tRflElect\tRFL Electronics, Inc.\n00:50:C2:0C:F0:00/36\tPcsc\t\n00:50:C2:0D:00:00/36\tTelefran\tTelefrang AB\n00:50:C2:0D:10:00/36\tRenaissa\tRenaissance Networking, Inc.\n00:50:C2:0D:20:00/36\tRealWorl\tReal World Computing Partnership\n00:50:C2:0D:30:00/36\tLakeTech\tLake Technology, Ltd.\n00:50:C2:0D:40:00/36\tPalm\tPalm, Inc.\n00:50:C2:0D:50:00/36\tZelax\t\n00:50:C2:0D:60:00/36\tIncoStar\tInco Startec GmbH\n00:50:C2:0D:70:00/36\tSummitAv\tSummit Avionics, Inc.\n00:50:C2:0D:80:00/36\tCharlott\tCharlotte's Web Networks\n00:50:C2:0D:90:00/36\tLoeweOpt\tLoewe Opta GmbH\n00:50:C2:0D:A0:00/36\tMotionAn\tMotion Analysis Corp.\n00:50:C2:0D:B0:00/36\tCyberex\t\n00:50:C2:0D:C0:00/36\tElbit\tElbit Systems Ltd.\n00:50:C2:0D:D0:00/36\tInterisa\tInterisa Electronica, S.A.\n00:50:C2:0D:E0:00/36\tFrederic\tFrederick Engineering\n00:50:C2:0D:F0:00/36\tInnovati\tInnovation Institute, Inc.\n00:50:C2:0E:00:00/36\tEmac\tEMAC, Inc.\n00:50:C2:0E:10:00/36\tInspirat\tInspiration Technology P/L\n00:50:C2:0E:20:00/36\tVisualCi\tVisual Circuits Corp.\n00:50:C2:0E:30:00/36\tLanexSA\tLanex S.A.\n00:50:C2:0E:40:00/36\tCollaboT\tCollabo Tec. Co., Ltd.\n00:50:C2:0E:50:00/36\tClearwat\tClearwater Networks\n00:50:C2:0E:60:00/36\tRoutefre\tRouteFree, Inc.\n00:50:C2:0E:70:00/36\tCenturyG\tCentury Geophysical Corp.\n00:50:C2:0E:80:00/36\tAudioDes\tAudio Design Associates, Inc.\n00:50:C2:0E:90:00/36\tSmartmed\tSmartmedia LLC\n00:50:C2:0E:A0:00/36\tIready\tiReady Corporation\n00:50:C2:0E:B0:00/36\tIrezTech\tiREZ Technologies LLC\n00:50:C2:0E:C0:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:0E:D0:00/36\tValleyPr\tValley Products Corporation\n00:50:C2:0E:E0:00/36\tIndustri\tIndustrial Indexing Systems, Inc.\n00:50:C2:0E:F0:00/36\tMovazNet\tMovaz Networks, Inc.\n00:50:C2:0F:00:00/36\tVhbTechn\tVHB Technologies, Inc.\n00:50:C2:0F:10:00/36\tPolyvisi\tPolyvision Corporation\n00:50:C2:0F:20:00/36\tKms\tKMS Systems, Inc.\n00:50:C2:0F:30:00/36\tYoungCom\tYoung Computer Co., Ltd.\n00:50:C2:0F:40:00/36\tSysnet\tSysnet Co., Ltd.\n00:50:C2:0F:50:00/36\tSpectraT\tSpectra Technologies Holding Co., Ltd.\n00:50:C2:0F:60:00/36\tCarlBaas\tCarl Baasel Lasertechnik GmbH\n00:50:C2:0F:70:00/36\tFossNirs\tFoss NIRSystems, Inc.\n00:50:C2:0F:80:00/36\tTecnintH\tTecnint HTE SRL\n00:50:C2:0F:90:00/36\tRavenInd\tRaven Industries\n00:50:C2:0F:A0:00/36\tGeTransp\tGE Transportation Systems\n00:50:C2:0F:B0:00/36\tPiusys\tPIUSYS Co., Ltd.\n00:50:C2:0F:C0:00/36\tKimmonMa\tKimmon Manufacturing Co., Ltd.\n00:50:C2:0F:D0:00/36\tInducomp\tInducomp Corporation\n00:50:C2:0F:E0:00/36\tEnergyIc\tEnergy ICT\n00:50:C2:0F:F0:00/36\tIpaxs\tIPAXS Corporation\n00:50:C2:10:00:00/36\tCorelatu\tCorelatus A.B.\n00:50:C2:10:10:00/36\tLaudElec\tLAUD Electronic Design AS\n00:50:C2:10:20:00/36\tMillionT\tMillion Tech Development Ltd.\n00:50:C2:10:30:00/36\tGreenHil\tGreen Hills Software, Inc.\n00:50:C2:10:40:00/36\tAdescom\tAdescom Inc.\n00:50:C2:10:50:00/36\tLumentis\tLumentis AB\n00:50:C2:10:60:00/36\tMatsuoka\t\n00:50:C2:10:70:00/36\tNewher\tNewHer Systems\n00:50:C2:10:80:00/36\tBaloghSA\tBalogh S.A.\n00:50:C2:10:90:00/36\tItkDrKas\tITK Dr. Kassen GmbH\n00:50:C2:10:A0:00/36\tQuinx\tQuinx AG\n00:50:C2:10:B0:00/36\tMarekmic\tMarekMicro GmbH\n00:50:C2:10:C0:00/36\tPhotonic\tPhotonic Bridges, Inc.\n00:50:C2:10:D0:00/36\tImplemen\tImplementa GmbH\n00:50:C2:10:E0:00/36\tUnipower\tUnipower AB\n00:50:C2:10:F0:00/36\tPercepti\tPerceptics Corp.\n00:50:C2:11:00:00/36\tQuescom\t\n00:50:C2:11:10:00/36\tEndusis\tEndusis Limited\n00:50:C2:11:20:00/36\tCompuwor\tCompuworx\n00:50:C2:11:30:00/36\tAceElect\tAce Electronics, Inc.\n00:50:C2:11:40:00/36\tQuestInn\tQuest Innovations\n00:50:C2:11:50:00/36\tVidco\tVidco, Inc.\n00:50:C2:11:60:00/36\tDspDesig\tDSP Design, Ltd.\n00:50:C2:11:70:00/36\tWintegra\tWintegra Ltd.\n00:50:C2:11:80:00/36\tMicrobit\tMicrobit 2.0 AB\n00:50:C2:11:90:00/36\tGlobalOp\tGlobal Opto Communication Tech. Corp\n00:50:C2:11:A0:00/36\tTeamaxes\tTeamaxess Ticketing GmbH\n00:50:C2:11:B0:00/36\tDigitalV\tDigital Vision AB\n00:50:C2:11:C0:00/36\tStonefly\tStonefly Networks\n00:50:C2:11:D0:00/36\tDestinyN\tDestiny Networks, Inc.\n00:50:C2:11:E0:00/36\tVolvoCar\tVolvo Car Corporation\n00:50:C2:11:F0:00/36\tCssIndus\tCSS Industrie Computer GmbH\n00:50:C2:12:00:00/36\tXstore\tXStore, Inc.\n00:50:C2:12:10:00/36\tCoe\tCOE Limited\n00:50:C2:12:20:00/36\tDiva\tDiva Systems\n00:50:C2:12:30:00/36\tSeranoaN\tSeranoa Networks, Inc.\n00:50:C2:12:40:00/36\tTokaiSof\tTokai Soft Corporation\n00:50:C2:12:50:00/36\tTecwings\tTecwings GmBh\n00:50:C2:12:60:00/36\tMaxlinea\tMaxLinear Hispania S.L.U.\n00:50:C2:12:70:00/36\tTpaTraff\tTPA Traffic & Parking Automation BV\n00:50:C2:12:80:00/36\tPycon\tPycon, Inc.\n00:50:C2:12:90:00/36\tTtpcom\tTTPCom Ltd.\n00:50:C2:12:A0:00/36\tSymbolic\tSymbolic Sound Corp.\n00:50:C2:12:B0:00/36\tDongAElt\tDong A Eltek Co., Ltd.\n00:50:C2:12:C0:00/36\tDeltaTau\tDelta Tau Data Systems, Inc.\n00:50:C2:12:D0:00/36\tMegisto\tMegisto Systems, Inc.\n00:50:C2:12:E0:00/36\tRuncom\t\n00:50:C2:12:F0:00/36\tHaag-Str\tHaag-Streit AG\n00:50:C2:13:00:00/36\tUSTraffi\tU.S. Traffic Corporation\n00:50:C2:13:10:00/36\tInbusEng\tInBus Engineering, Inc.\n00:50:C2:13:20:00/36\tProconEl\tProcon Electronics\n00:50:C2:13:30:00/36\tChipwrig\tChipWrights, Inc.\n00:50:C2:13:40:00/36\tDrsPhotr\tDRS Photronics\n00:50:C2:13:50:00/36\tEladSrl\tElad Srl\n00:50:C2:13:60:00/36\tTensilic\tTensilica, Inc.\n00:50:C2:13:70:00/36\tUniwellU\tUniwell Systems (UK) Ltd.\n00:50:C2:13:80:00/36\tDelphinT\tDelphin Technology AG\n00:50:C2:13:90:00/36\tSrResear\tSR Research Ltd.\n00:50:C2:13:A0:00/36\tTexCompu\tTex Computer SRL\n00:50:C2:13:B0:00/36\tVaisalaO\tVaisala Oyj\n00:50:C2:13:C0:00/36\tNbgIndus\tNBG Industrial Automation B.V.\n00:50:C2:13:D0:00/36\tFormulaO\tFormula One Management Ltd.\n00:50:C2:13:E0:00/36\tAvermedi\tAVerMedia Systems, Inc.\n00:50:C2:13:F0:00/36\tSentitoN\tSentito Networks\n00:50:C2:14:00:00/36\tIts\tITS, Inc.\n00:50:C2:14:10:00/36\tTimeTerm\tTime Terminal Adductor Group AB\n00:50:C2:14:20:00/36\tInstrume\tInstrumeter A/S\n00:50:C2:14:30:00/36\tAartesys\tAartesys Ag\n00:50:C2:14:40:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:14:50:00/36\tElcLight\tELC Lighting\n00:50:C2:14:60:00/36\tApcon\tAPCON, Inc.\n00:50:C2:14:70:00/36\tUnisur\t\n00:50:C2:14:80:00/36\tAlltec\tAlltec GmbH\n00:50:C2:14:90:00/36\tHaag-Str\tHaag-Streit AG\n00:50:C2:14:A0:00/36\tDycecSA\tDycec, S.A.\n00:50:C2:14:B0:00/36\tHecubaEl\tHECUBA Elektronik\n00:50:C2:14:C0:00/36\tOptibase\tOptibase Ltd.\n00:50:C2:14:D0:00/36\tWellink\twellink, Ltd.\n00:50:C2:14:E0:00/36\tCorinexG\tCorinex Global\n00:50:C2:14:F0:00/36\tTelephon\tTelephonics Corp.\n00:50:C2:15:00:00/36\tTorse\t\n00:50:C2:15:10:00/36\tReduxCom\tRedux Communications Ltd.\n00:50:C2:15:20:00/36\tAirvastT\tAirVast Technology Inc.\n00:50:C2:15:30:00/36\tAdvanced\tAdvanced Devices SpA\n00:50:C2:15:40:00/36\tJostra\tJostra AB\n00:50:C2:15:50:00/36\tEneaReal\tEnea Real Time AB\n00:50:C2:15:60:00/36\tCommserv\tCommServ Solutions Inc.\n00:50:C2:15:70:00/36\tNcore\tnCore, Inc.\n00:50:C2:15:80:00/36\tCommunic\tCommunication Solutions, Inc.\n00:50:C2:15:90:00/36\tStandard\tStandard Comm. Corp.\n00:50:C2:15:A0:00/36\tPlextek\tPlextek Limited\n00:50:C2:15:B0:00/36\tDuneNetw\tDune Networks\n00:50:C2:15:C0:00/36\tAoptixTe\tAoptix Technologies\n00:50:C2:15:D0:00/36\tCepheid\t\n00:50:C2:15:E0:00/36\tCelite\tCelite Systems, Inc.\n00:50:C2:15:F0:00/36\tPulsar\tPulsar GmbH\n00:50:C2:16:00:00/36\tTti-Tele\tTTI - Telecom International Ltd.\n00:50:C2:16:10:00/36\tJ&BEngin\tJ&B Engineering Group S.L.\n00:50:C2:16:20:00/36\tTeseda\tTeseda Corporation\n00:50:C2:16:30:00/36\tComputer\tComputerwise, Inc.\n00:50:C2:16:40:00/36\tAcuniaNV\tAcunia N.V.\n00:50:C2:16:50:00/36\tIpcast\t\n00:50:C2:16:60:00/36\tInfineer\tInfineer Ltd.\n00:50:C2:16:70:00/36\tPrecisio\tPrecision Filters, Inc.\n00:50:C2:16:80:00/36\tExtremes\tExtremeSpeed Inc.\n00:50:C2:16:90:00/36\tNordson\tNordson Corp.\n00:50:C2:16:A0:00/36\tTimeDoma\tTime Domain\n00:50:C2:16:B0:00/36\tMastercl\tMasterclock, Inc.\n00:50:C2:16:C0:00/36\tBrijingE\tBrijing Embedor Embedded Internet Tech. Co. Ltd.\n00:50:C2:16:D0:00/36\tPostecDa\tPostec Data Systems Ltd.\n00:50:C2:16:E0:00/36\tPmc\t\n00:50:C2:16:F0:00/36\tDicksonT\tDickson Technologies\n00:50:C2:17:00:00/36\tTaishodo\tTaishodo Seiko Co., Ltd.\n00:50:C2:17:10:00/36\tQuantron\tQuantronix, Inc.\n00:50:C2:17:20:00/36\tSaetISSR\tSAET I.S. S.r.l.\n00:50:C2:17:30:00/36\tDemetec\tDeMeTec GmbH\n00:50:C2:17:40:00/36\tN&PTechn\tN&P Technologies\n00:50:C2:17:50:00/36\tSeiSPA\tSei S.p.A.\n00:50:C2:17:60:00/36\tWavium\tWavium AB\n00:50:C2:17:70:00/36\tUnicoi\tUnicoi Systems\n00:50:C2:17:80:00/36\tPartnerV\tPartner Voxstream A/S\n00:50:C2:17:90:00/36\tVerifibe\tVerifiber LLC\n00:50:C2:17:A0:00/36\tWolfAdva\tWOLF Advanced Technology.\n00:50:C2:17:B0:00/36\tBroadsto\tBroadstorm Telecom\n00:50:C2:17:C0:00/36\tJeffress\tJeffress Engineering Pty Ltd\n00:50:C2:17:D0:00/36\tCognex\tCognex Corporation\n00:50:C2:17:E0:00/36\tBinaryWa\tBinary Wave Technologies Inc.\n00:50:C2:17:F0:00/36\tPdqManuf\tPDQ Manufacturing\n00:50:C2:18:00:00/36\tZultysTe\tZultys Technologies\n00:50:C2:18:10:00/36\tTask84\tTask 84 Spa\n00:50:C2:18:20:00/36\tWolf-Inf\twolf-inf-tec\n00:50:C2:18:30:00/36\tMixbaalS\tMixbaal S.A. de C.V.\n00:50:C2:18:40:00/36\tHMComput\tH M Computing Limited\n00:50:C2:18:50:00/36\tOpticalW\tOptical Wireless Link Inc.\n00:50:C2:18:60:00/36\tPantecEn\tPantec Engineering AG\n00:50:C2:18:70:00/36\tCyanTech\tCyan Technology Ltd\n00:50:C2:18:80:00/36\tDresden-\tdresden-elektronik\n00:50:C2:18:90:00/36\tCc\tCC Systems AB\n00:50:C2:18:A0:00/36\tBaslerEl\tBasler Electric Company\n00:50:C2:18:B0:00/36\tTeradyne\tTeradyne Inc.\n00:50:C2:18:C0:00/36\tTechnodr\tTechnodrive srl\n00:50:C2:18:D0:00/36\tCciiPty\tCCII Systems (Pty) Ltd\n00:50:C2:18:E0:00/36\tSparrEle\tSparr Electronics Ltd\n00:50:C2:18:F0:00/36\tMatsuiMf\tMatsui Mfg Co.,Ltd\n00:50:C2:19:00:00/36\tGoerlitz\tGoerlitz AG\n00:50:C2:19:10:00/36\tPartnerV\tPartner Voxstream A/S\n00:50:C2:19:20:00/36\tAdvanced\tAdvanced Concepts, Inc.\n00:50:C2:19:30:00/36\tLaserbit\tLaserBit Communications Corp.\n00:50:C2:19:40:00/36\tCominfo\tCominfo, Inc.\n00:50:C2:19:50:00/36\tMomentum\tMomentum Data Systems\n00:50:C2:19:60:00/36\tNetsynt\tNetsynt Spa\n00:50:C2:19:70:00/36\tEpmTecno\tEPM Tecnologia e Equipamentos\n00:50:C2:19:80:00/36\tPotstek\tPotsTek, Inc\n00:50:C2:19:90:00/36\tSurvalen\tSurvalent Technology Corporation\n00:50:C2:19:A0:00/36\tAzioTech\tAzio Technology Co.\n00:50:C2:19:B0:00/36\tWilcoxon\tWilcoxon Research, Inc.\n00:50:C2:19:C0:00/36\tArtecDes\tArtec Design\n00:50:C2:19:D0:00/36\tElectrex\tElectrex S.R.L\n00:50:C2:19:E0:00/36\tPaltroni\tPaltronics, Inc.\n00:50:C2:19:F0:00/36\tFleetwoo\tFleetwood Electronics Ltd\n00:50:C2:1A:00:00/36\tScaData\tSCA Data Systems\n00:50:C2:1A:10:00/36\tPortalpl\tPortalplayer, Inc\n00:50:C2:1A:20:00/36\tAbbSwitz\tABB Switzerland Inc\n00:50:C2:1A:30:00/36\tTidelEng\tTidel Engineering, L.P.\n00:50:C2:1A:40:00/36\tProtechO\tProtech Optronics Co. Ltd.\n00:50:C2:1A:50:00/36\tNorco\t\n00:50:C2:1A:60:00/36\tRfCode\tRF Code\n00:50:C2:1A:70:00/36\tAlphaBet\tAlpha Beta Technologies, Inc.\n00:50:C2:1A:80:00/36\tAnovaBro\tAnova Broadband\n00:50:C2:1A:90:00/36\tAxotecTe\tAxotec Technologies GmbH\n00:50:C2:1A:A0:00/36\tBitbox\tBitBox Ltd\n00:50:C2:1A:B0:00/36\tStreamin\tStreaming Networks\n00:50:C2:1A:C0:00/36\tBeckmann\tBeckmann+Egle GmbH\n00:50:C2:1A:D0:00/36\tRemiaSRO\tRemia s.r.o.\n00:50:C2:1A:E0:00/36\tHomeDire\tHome Director, Inc\n00:50:C2:1A:F0:00/36\tPesaSwit\tPESA Switching Systems, Inc.\n00:50:C2:1B:00:00/36\tBlankomA\tBLANKOM Antennentechnik GmbH\n00:50:C2:1B:10:00/36\tAxesTech\tAxes Technologies\n00:50:C2:1B:20:00/36\tSigosSys\tSIGOS Systemintegration GmbH\n00:50:C2:1B:30:00/36\tDspDesig\tDsp Design\n00:50:C2:1B:40:00/36\tDspGroup\tDSP Group Inc.\n00:50:C2:1B:50:00/36\tThraneTh\tThrane & Thrane A/S\n00:50:C2:1B:60:00/36\tDts\tDTS, Inc.\n00:50:C2:1B:70:00/36\tMoschipU\tMosChip USA\n00:50:C2:1B:80:00/36\tElectron\tElectronic Systems Development\n00:50:C2:1B:90:00/36\tEmcomTec\tEmCom Technology Inc.\n00:50:C2:1B:A0:00/36\tInterzea\tInterzeag Ag\n00:50:C2:1B:B0:00/36\tEmailMet\tEmail Metering\n00:50:C2:1B:C0:00/36\tDinecInt\tDINEC International\n00:50:C2:1B:D0:00/36\tAioi\tAIOI Systems Co., Ltd.\n00:50:C2:1B:E0:00/36\tSediaEle\tSedia Electronics\n00:50:C2:1B:F0:00/36\tInternat\tInternational Test & Engineering Services Co.,Ltd.\n00:50:C2:1C:00:00/36\tWillmoni\tWillMonius Inc.\n00:50:C2:1C:10:00/36\tInfiniti\tInfinitiNetworks Inc.\n00:50:C2:1C:20:00/36\tWeltroni\tWeltronics Corp.\n00:50:C2:1C:30:00/36\tTtElectr\tTT electronics plc\n00:50:C2:1C:40:00/36\tPalmSolu\tPalm Solutions Group\n00:50:C2:1C:50:00/36\tFlanderO\tFlander Oy\n00:50:C2:1C:60:00/36\tRemcoIta\tRemco Italia Spa\n00:50:C2:1C:70:00/36\tTwinDeve\tTwin Development S.A.\n00:50:C2:1C:80:00/36\tEuphonyT\tEuphony technology CO., LTD.\n00:50:C2:1C:90:00/36\tModas\tmodas GmbH\n00:50:C2:1C:A0:00/36\tEverSpZO\tEVER Sp. z o.o.\n00:50:C2:1C:B0:00/36\tQuantumb\tquantumBEAM Limited\n00:50:C2:1C:C0:00/36\tWaveip\t\n00:50:C2:1C:D0:00/36\tIncaaInf\tINCAA Informatica Italia  srl\n00:50:C2:1C:E0:00/36\tDatatekA\tDatatek Applications, Inc.\n00:50:C2:1C:F0:00/36\tLifetime\tLifetime Memory Products, Inc.\n00:50:C2:1D:00:00/36\tYazakiNo\tYazaki North America, Inc.\n00:50:C2:1D:10:00/36\tBenchmar\tBenchmark Electronics\n00:50:C2:1D:20:00/36\tShenyang\tShenyang Internet Technology Inc\n00:50:C2:1D:30:00/36\tSynopsys\t\n00:50:C2:1D:40:00/36\tPhaseIvE\tPhase IV Engineering Inc.\n00:50:C2:1D:50:00/36\tRedpoint\tRedpoint Controls\n00:50:C2:1D:60:00/36\tShanghai\tshanghai trend intelligent systems CO.,LTD\n00:50:C2:1D:70:00/36\tPleoraTe\tPleora Technologies Inc.\n00:50:C2:1D:80:00/36\tGuardian\tGuardian Controls International Ltd\n00:50:C2:1D:90:00/36\tEdc\t\n00:50:C2:1D:A0:00/36\tGfiChron\tGFI Chrono Time\n00:50:C2:1D:B0:00/36\tAppliedE\tApplied Systems Engineering, Inc.\n00:50:C2:1D:C0:00/36\tImardaNe\tImarda New Zealand Limited\n00:50:C2:1D:D0:00/36\tPeikerAc\tPeiker acustic GmbH & Co. KG\n00:50:C2:1D:E0:00/36\tRelion\tReliOn Inc.\n00:50:C2:1D:F0:00/36\tLuleaUni\tLulea University of Technology\n00:50:C2:1E:00:00/36\tCognex\tCognex Corporation\n00:50:C2:1E:10:00/36\tAutomaat\tAutomaatiotekniikka Seppo Saari Oy\n00:50:C2:1E:20:00/36\tDigitron\tDIGITRONIC Automationsanlagen GmbH\n00:50:C2:1E:30:00/36\tBluesock\tBluesocket, Inc.\n00:50:C2:1E:40:00/36\tSoronti\tSoronti, Inc.\n00:50:C2:1E:50:00/36\tDorletSa\tDorlet Sau\n00:50:C2:1E:60:00/36\tUnitedTr\tUnited Tri-Tech Corporation\n00:50:C2:1E:70:00/36\tSmithMet\tSmith Meter, Inc.\n00:50:C2:1E:80:00/36\tMetrotec\tMetrotech\n00:50:C2:1E:90:00/36\tRanchNet\tRanch Networks\n00:50:C2:1E:A0:00/36\tDaveSrl\tDave Srl\n00:50:C2:1E:B0:00/36\tDataResp\tData Respons A/S\n00:50:C2:1E:C0:00/36\tCosmo\tCOSMO co.,ltd.\n00:50:C2:1E:D0:00/36\tEmka-Ele\tEMKA-electronic AG\n00:50:C2:1E:E0:00/36\tPertoPer\tPerto Periféricos de Automação S.A.\n00:50:C2:1E:F0:00/36\tM2Techno\tM2 Technology Pty Ltd\n00:50:C2:1F:00:00/36\tExiWirel\tEXI Wireless Systems Inc.\n00:50:C2:1F:10:00/36\tSkyCompu\tSKY Computers, Inc.\n00:50:C2:1F:20:00/36\tTattileS\tTattile srl\n00:50:C2:1F:30:00/36\tRadionor\tRadionor Communications\n00:50:C2:1F:40:00/36\tCovia\tCovia, Inc\n00:50:C2:1F:50:00/36\tAbestCom\tAbest Communication Corp.\n00:50:C2:1F:60:00/36\tBaeContr\tBAE SYSTEMS Controls\n00:50:C2:1F:70:00/36\tArcCréat\tARC'Créations\n00:50:C2:1F:80:00/36\tUltracke\tUltracker Technology\n00:50:C2:1F:90:00/36\tFrSauter\tFr. Sauter AG\n00:50:C2:1F:A0:00/36\tSpContro\tSP Controls, Inc\n00:50:C2:1F:B0:00/36\tWillowgl\tWillowglen Systems Inc.\n00:50:C2:1F:C0:00/36\tEddSrl\tEDD Srl\n00:50:C2:1F:D0:00/36\tSouthwin\tSouthWing S.L.\n00:50:C2:1F:E0:00/36\tSafetran\tSafetran Traffic Systems Inc.\n00:50:C2:1F:F0:00/36\tProductD\tProduct Design Dept., Sohwa Corporation\n00:50:C2:20:00:00/36\tWhittier\tWhittier Mailing Products, Inc.\n00:50:C2:20:10:00/36\tOlympusn\tOlympusNDT\n00:50:C2:20:20:00/36\tAudioRid\tAudio Riders Oy\n00:50:C2:20:30:00/36\tVocality\tVocality International Ltd\n00:50:C2:20:40:00/36\tAlgodueE\tAlgodue Elettronica srl\n00:50:C2:20:50:00/36\tSysting\t\n00:50:C2:20:60:00/36\tWindmill\tWindmill Innovations\n00:50:C2:20:70:00/36\tSolectro\tSolectron Ind.Com.Servs.Exportadora do Brasil Ltda.\n00:50:C2:20:80:00/36\tNnovia\tnNovia, Inc.\n00:50:C2:20:90:00/36\tLk\tLK Ltd\n00:50:C2:20:A0:00/36\tFerrariE\tFerrari electronic AG\n00:50:C2:20:B0:00/36\tRafael\t\n00:50:C2:20:C0:00/36\tCommunic\tCommunication and Telemechanical Systems Company Limited\n00:50:C2:20:D0:00/36\tVarisys\tVarisys Ltd\n00:50:C2:20:E0:00/36\tPyramidC\tPYRAMID Computer GmbH\n00:50:C2:20:F0:00/36\tOmicronE\tOMICRON electronics GmbH\n00:50:C2:21:00:00/36\tInnovics\tInnovics Wireless Inc\n00:50:C2:21:10:00/36\tHochschu\tHochschule für Technik, Wirtschaft und Kultur Leipzig (FH)\n00:50:C2:21:20:00/36\t4links\t4Links Limited\n00:50:C2:21:30:00/36\tSysaware\tSysAware S.A.R.L.\n00:50:C2:21:40:00/36\tOshimiSy\tOshimi System Design Inc.\n00:50:C2:21:50:00/36\tVoicecom\tVoiceCom AG\n00:50:C2:21:60:00/36\tLevelCon\tLevel Control Systems\n00:50:C2:21:70:00/36\tLinnProd\tLinn Products Ltd\n00:50:C2:21:80:00/36\tNansenSA\tNansen S. A. - Instrumentos de Precisão\n00:50:C2:21:90:00/36\tAeroflex\tAeroflex GmbH\n00:50:C2:21:A0:00/36\tMst\tMst Systems Limited\n00:50:C2:21:B0:00/36\tGdMissio\tGD Mission Systems\n00:50:C2:21:C0:00/36\tFracarro\tFracarro srl\n00:50:C2:21:D0:00/36\tEsgElekt\tESG Elektroniksystem u. Logistik GmbH\n00:50:C2:21:E0:00/36\tAppliedT\tApplied Technologies Associates\n00:50:C2:21:F0:00/36\tMonitorB\tMonitor Business Machines Ltd\n00:50:C2:22:00:00/36\tServeron\tServeron Corporation\n00:50:C2:22:10:00/36\tGetingeI\tGetinge IT Solutions ApS\n00:50:C2:22:20:00/36\tImo-Elek\timo-elektronik GmbH\n00:50:C2:22:30:00/36\tVisicont\tvisicontrol GmbH\n00:50:C2:22:40:00/36\tPannocom\tPANNOCOM Ltd.\n00:50:C2:22:50:00/36\tNventSch\tnVent, Schroff GmbH\n00:50:C2:22:60:00/36\tRossVide\tRoss Video Limited\n00:50:C2:22:70:00/36\tIntellig\tIntelligent Photonics Control\n00:50:C2:22:80:00/36\tIntellig\tIntelligent Media Technologies, Inc.\n00:50:C2:22:90:00/36\tEko\teko systems inc.\n00:50:C2:22:A0:00/36\tCrescend\tCrescendo Networks\n00:50:C2:22:B0:00/36\tRieglLas\tRiegl Laser Measurement Systems GmbH\n00:50:C2:22:C0:00/36\tIntrinsi\tIntrinsity\n00:50:C2:22:D0:00/36\tAsetek\tasetek Inc.\n00:50:C2:22:E0:00/36\tLordInge\tLord Ingenierie\n00:50:C2:22:F0:00/36\tHtec\tHTEC Limited\n00:50:C2:23:00:00/36\tAutotool\tAutoTOOLS group Co. Ltd.\n00:50:C2:23:10:00/36\tLegra\tLegra Systems, Inc.\n00:50:C2:23:20:00/36\tSimet\t\n00:50:C2:23:30:00/36\tEdentree\tEdenTree Technologies, Inc.\n00:50:C2:23:40:00/36\tSilverba\tSilverback Systems\n00:50:C2:23:50:00/36\tPolimarE\tPolimar Elektronik Ltd.\n00:50:C2:23:60:00/36\tJlcooper\tJLCooper Electronics\n00:50:C2:23:70:00/36\tTandata\tTandata Systems Ltd\n00:50:C2:23:80:00/36\tSchwer+K\tSchwer+Kopka GmbH\n00:50:C2:23:90:00/36\tStinsCom\tStins Coman\n00:50:C2:23:A0:00/36\tChantryN\tChantry Networks\n00:50:C2:23:B0:00/36\tEnvara\t\n00:50:C2:23:C0:00/36\tWheatsto\tWheatstone Corporation\n00:50:C2:23:D0:00/36\tGauging\tGauging Systems Inc\n00:50:C2:23:E0:00/36\tKallastr\tKallastra Inc.\n00:50:C2:23:F0:00/36\tHallibur\tHalliburton - NUMAR\n00:50:C2:24:00:00/36\tGeoquip\tGeoquip Ltd\n00:50:C2:24:10:00/36\tControni\tContronics Automacao Ltda\n00:50:C2:24:20:00/36\tMdsSciex\tMds Sciex\n00:50:C2:24:30:00/36\tRgbSpect\tRGB Spectrum\n00:50:C2:24:40:00/36\tIntec\tintec GmbH\n00:50:C2:24:50:00/36\tHauppaug\tHauppauge Computer Works, Inc.\n00:50:C2:24:60:00/36\tHardmeie\tHardmeier\n00:50:C2:24:70:00/36\tGradualT\tGradual Tecnologia Ltda.\n00:50:C2:24:80:00/36\tDixtalBi\tDixtal Biomedica Ind. Com. Ltda.\n00:50:C2:24:90:00/36\tBender\tBender GmbH & Co. KG\n00:50:C2:24:A0:00/36\tCdsRail\tCDS Rail\n00:50:C2:24:B0:00/36\tAzimuth\tAzimuth Systems, Inc.\n00:50:C2:24:C0:00/36\tSupertel\t\n00:50:C2:24:D0:00/36\tMettlerT\tMettler Toledo Hi Speed\n00:50:C2:24:E0:00/36\tScharffW\tScharff Weisberg Systems Integration Inc\n00:50:C2:24:F0:00/36\tMacronet\tMacronet s.r.l.\n00:50:C2:25:00:00/36\tAcdElekt\tACD Elektronik GmbH\n00:50:C2:25:10:00/36\tDgtSpZOO\tDGT Sp. z o.o.\n00:50:C2:25:20:00/36\tAds-Tec\tads-tec GmbH\n00:50:C2:25:30:00/36\tDsm-Mess\tDSM-Messtechnik GmbH\n00:50:C2:25:40:00/36\tThalesCo\tThales Communications Ltd\n00:50:C2:25:50:00/36\tStmicroe\tSTMicroelectronics SRL\n00:50:C2:25:60:00/36\tInformat\tInformation Technology Corp.\n00:50:C2:25:70:00/36\tDigicast\tDigicast Networks\n00:50:C2:25:80:00/36\tSpacesav\tSpacesaver Corporation\n00:50:C2:25:90:00/36\tOmicronC\tOmicron Ceti AB\n00:50:C2:25:A0:00/36\tZendex\tZendex Corporation\n00:50:C2:25:B0:00/36\tWinfordE\tWinford Engineering\n00:50:C2:25:C0:00/36\tSofthill\tSofthill Technologies Ltd.\n00:50:C2:25:D0:00/36\tRdtech\t\n00:50:C2:25:E0:00/36\tMiteHrad\tMITE Hradec Kralove, s.r.o.\n00:50:C2:25:F0:00/36\tAlbertHa\tAlbert Handtmann Maschinenfabrik GmbH&Co.KG\n00:50:C2:26:00:00/36\tBiotage\t\n00:50:C2:26:10:00/36\tTattileS\tTattile Srl\n00:50:C2:26:20:00/36\tShanghai\tShanghai Gaozhi Science&Technology Development Ltd.\n00:50:C2:26:30:00/36\tVanscoEl\tVansco Electronics Oy\n00:50:C2:26:40:00/36\tConfiden\tConfidence Direct Ltd\n00:50:C2:26:50:00/36\tBelikSPR\tBelik S.P.R.L.\n00:50:C2:26:60:00/36\tAtomGike\tATOM GIKEN Co.,Ltd.\n00:50:C2:26:70:00/36\tAllenMar\tAllen Martin Conservation Ltd\n00:50:C2:26:80:00/36\tParabit\tParabit Systems\n00:50:C2:26:90:00/36\tTechnisy\tTechnisyst Pty Ltd\n00:50:C2:26:A0:00/36\tFgSynery\tFg Synerys\n00:50:C2:26:B0:00/36\tContinen\tContinental Gateway Limited\n00:50:C2:26:C0:00/36\tCrystalV\tCrystal Vision Ltd\n00:50:C2:26:D0:00/36\tDspDesig\tDsp Design\n00:50:C2:26:E0:00/36\tZpEngine\tZP Engineering SEL\n00:50:C2:26:F0:00/36\tDigitalR\tDigital Recorders Inc\n00:50:C2:27:00:00/36\tS4Techno\tS4 Technology Pty Ltd\n00:50:C2:27:10:00/36\tVlsipTec\tVlsip Technologies Inc.\n00:50:C2:27:20:00/36\tVerexTec\tVerex Technology\n00:50:C2:27:30:00/36\tServicio\tServicios Condumex, S. A. de C. V.\n00:50:C2:27:40:00/36\tFundació\tFundación TECNALIA Research & Innovation\n00:50:C2:27:50:00/36\tExtremeE\tExtreme Engineering Solutions\n00:50:C2:27:60:00/36\tTielineR\tTieline Research Pty Ltd\n00:50:C2:27:70:00/36\tT/R\tT/R Systems, Inc.\n00:50:C2:27:80:00/36\tReplicom\tReplicom Ltd.\n00:50:C2:27:90:00/36\tPatlite\tPATLITE Corporation\n00:50:C2:27:A0:00/36\tMaestroP\tMaestro Pty Ltd\n00:50:C2:27:B0:00/36\tLinksecu\tLinkSecurity A/S\n00:50:C2:27:C0:00/36\tDanlaw\tDanlaw Inc\n00:50:C2:27:D0:00/36\tAlliedTe\tAllied Telesis K.K.\n00:50:C2:27:E0:00/36\tAnalogic\tAnaLogic Computers Ltd.\n00:50:C2:27:F0:00/36\tAirBroad\tAir Broadband Communications, Inc.\n00:50:C2:28:00:00/36\tAgecodag\tAgecodagis Sarl\n00:50:C2:28:10:00/36\tCabtroni\tCabTronix GmbH\n00:50:C2:28:20:00/36\tTelvent\t\n00:50:C2:28:30:00/36\tAnsitex\tAnsitex Corp.\n00:50:C2:28:40:00/36\tMicronet\tMicronet Ltd.\n00:50:C2:28:50:00/36\tLittwin\tLittwin GmbH & Co KG\n00:50:C2:28:60:00/36\tAteme\t\n00:50:C2:28:70:00/36\tTecnewEl\tTECNEW Electronics Engineering Cr., Ltd.\n00:50:C2:28:80:00/36\tRpm\tRPM Systems Corporation\n00:50:C2:28:90:00/36\tRototype\tRototype S.p.A.\n00:50:C2:28:A0:00/36\tRealTime\tReal Time Systems\n00:50:C2:28:B0:00/36\tOrionTec\tOrion Technologies,LLC\n00:50:C2:28:C0:00/36\tFutaba\tFutaba Corporation\n00:50:C2:28:D0:00/36\tAxodeSa\tAxode Sa\n00:50:C2:28:E0:00/36\tTattileS\tTattile srl\n00:50:C2:28:F0:00/36\tSpellman\tSpellman High Voltage Electronics Corp\n00:50:C2:29:00:00/36\tEbneuro\tEbneuro Spa\n00:50:C2:29:10:00/36\tChauvinA\tChauvin Arnoux\n00:50:C2:29:20:00/36\tAmirix\tAMIRIX Systems\n00:50:C2:29:30:00/36\tIpUnity\tIP Unity\n00:50:C2:29:40:00/36\tEpsa\tEPSa GmbH\n00:50:C2:29:50:00/36\tLogosol\tLogosol, Inc.\n00:50:C2:29:60:00/36\tOpvista\t\n00:50:C2:29:70:00/36\tKinetics\t\n00:50:C2:29:80:00/36\tHarvadUn\tHarvad University\n00:50:C2:29:90:00/36\tCad-Ul\tCAD-UL GmbH\n00:50:C2:29:A0:00/36\tPacketTe\tPacket Techniques Inc.\n00:50:C2:29:B0:00/36\tAcdElekt\tACD Elektronik GmbH\n00:50:C2:29:C0:00/36\t2nTeleko\t2N TELEKOMUNIKACE a.s.\n00:50:C2:29:D0:00/36\tGlobeWir\tGlobe Wireless\n00:50:C2:29:E0:00/36\tSelexCom\tSELEX Communications Ltd\n00:50:C2:29:F0:00/36\tBaudisch\tBaudisch Electronic GmbH\n00:50:C2:2A:00:00/36\tSterling\tSterling Industry Consult GmbH\n00:50:C2:2A:10:00/36\tInfineti\tInfinetix Corp\n00:50:C2:2A:20:00/36\tEpelsaSl\tEpelsa, SL\n00:50:C2:2A:30:00/36\tWest-Com\tWest-Com Nurse Call Systems, Inc.\n00:50:C2:2A:40:00/36\tXipherEm\tXipher Embedded Networking\n00:50:C2:2A:50:00/36\tSeptierC\tSeptier Communication Ltd\n00:50:C2:2A:60:00/36\tBrannstr\tBrannstroms Elektronik AB\n00:50:C2:2A:70:00/36\tMicroSys\tMicro System Architecturing srl\n00:50:C2:2A:80:00/36\tDvtelIsr\tDVTel Israel Ltd.\n00:50:C2:2A:90:00/36\tDrStaige\tDr. Staiger, Mohilo + Co GmbH\n00:50:C2:2A:A0:00/36\tDeutaWer\tDEUTA Werke GmbH\n00:50:C2:2A:B0:00/36\tAumInfot\tAUM Infotech Private Limited\n00:50:C2:2A:C0:00/36\tBbiEngin\tBBI Engineering, Inc.\n00:50:C2:2A:D0:00/36\tAbbT&D\tABB T&D Spa\n00:50:C2:2A:E0:00/36\tQuestRet\tQuest Retail Technology Pty Ltd\n00:50:C2:2A:F0:00/36\tCsaCompu\tCSA  Computer & Antriebstechnik GmbH\n00:50:C2:2B:00:00/36\tTeldaEle\tTelda Electronics\n00:50:C2:2B:10:00/36\tPrivate\t\n00:50:C2:2B:20:00/36\tSmithsDe\tSmiths Detection\n00:50:C2:2B:30:00/36\tEmbedded\tEmbedded Systems Design\n00:50:C2:2B:40:00/36\tPolatis\tPolatis Ltd\n00:50:C2:2B:50:00/36\tHobbesCo\tHobbes Computer Network Accessories\n00:50:C2:2B:60:00/36\tSoftier\tSoftier Inc.\n00:50:C2:2B:70:00/36\tRafi\tRAFI GmbH & Co.KG\n00:50:C2:2B:80:00/36\tAdmiralS\tAdmiral Secure Products, Ltd.\n00:50:C2:2B:90:00/36\tRichmond\tRichmond Sound Design Ltd.\n00:50:C2:2B:A0:00/36\tNorcoInd\tNorco Industrial Technology Inc\n00:50:C2:2B:B0:00/36\tTaInstru\tTA Instruments Ltd\n00:50:C2:2B:C0:00/36\tUsterTec\tUster Technologies AG\n00:50:C2:2B:D0:00/36\tStorlink\tStorLink Semi\n00:50:C2:2B:E0:00/36\tLipowsky\tLipowsky Industrie-Elektronik GmbH\n00:50:C2:2B:F0:00/36\tPerax\t\n00:50:C2:2C:00:00/36\tMagellan\tMagellan Technology Pty Limited\n00:50:C2:2C:10:00/36\tStageTec\tStage Tec Entwicklungsgesellschaft für professionelle Audio\n00:50:C2:2C:20:00/36\tSmarteye\tSmarteye Corporation\n00:50:C2:2C:30:00/36\tDigitalS\tDigital SP Ltd\n00:50:C2:2C:40:00/36\tInvensys\tInvensys Energy Systens (NZ) Limited\n00:50:C2:2C:50:00/36\tElmanSrl\tElman srl\n00:50:C2:2C:60:00/36\tInitialE\tInitial Electronic Security Systems\n00:50:C2:2C:70:00/36\tSiliquen\tSiliquent Technologies Ltd\n00:50:C2:2C:80:00/36\tSelco\t\n00:50:C2:2C:90:00/36\tRosemanE\tRoseman Engineering Ltd.\n00:50:C2:2C:A0:00/36\tPutercom\tPutercom Co., Ltd\n00:50:C2:2C:B0:00/36\tFactsEng\tFACTS Engineering LLC\n00:50:C2:2C:C0:00/36\tEmbedded\tEmbedded Toolsmiths\n00:50:C2:2C:D0:00/36\tDatawind\tDataWind Research\n00:50:C2:2C:E0:00/36\tRossVide\tRoss Video Limited\n00:50:C2:2C:F0:00/36\tDiseñoDe\tDiseño de Sistemas en Silicio S.A.\n00:50:C2:2D:00:00/36\tWorthDat\tWorth Data, Inc.\n00:50:C2:2D:10:00/36\tMiritek\tMiritek, Inc.\n00:50:C2:2D:20:00/36\tAirnetCo\tAirnet Communications Corp\n00:50:C2:2D:30:00/36\tGerberSc\tGerber Scientific Products, Inc.\n00:50:C2:2D:40:00/36\tIntegrat\tIntegrated System Solution Corp.\n00:50:C2:2D:50:00/36\tPixy\tPixy Ag\n00:50:C2:2D:60:00/36\tWisTechn\tWIS Technologies\n00:50:C2:2D:70:00/36\tNeoElect\tNeo Electronics Ltd\n00:50:C2:2D:80:00/36\tSyn-Tech\tSYN-TECH SYSTEMS INC\n00:50:C2:2D:90:00/36\tPrivate\t\n00:50:C2:2D:A0:00/36\tPyramidC\tPYRAMID Computer GmbH\n00:50:C2:2D:B0:00/36\tAutotool\tAutoTOOLS group Co. Ltd.\n00:50:C2:2D:C0:00/36\tWienerPl\tWiener, Plein & Baus GmbH\n00:50:C2:2D:D0:00/36\tWestekTe\tWestek Technology Ltd\n00:50:C2:2D:E0:00/36\tResearch\tResearch Applications\n00:50:C2:2D:F0:00/36\tMicrel-N\tMICREL-NKE\n00:50:C2:2E:00:00/36\tBaxterIn\tBaxter International Inc\n00:50:C2:2E:10:00/36\tAccessIs\tAccess IS\n00:50:C2:2E:20:00/36\tBallardT\tBallard Technology, Inc,\n00:50:C2:2E:30:00/36\tMgIndust\tMG Industrieelektronik GmbH\n00:50:C2:2E:40:00/36\tIamba\tiamba LTD.\n00:50:C2:2E:50:00/36\tTranstec\tTranstech DSP\n00:50:C2:2E:60:00/36\tDalsa\t\n00:50:C2:2E:70:00/36\tSafeview\tSafeView, Inc.\n00:50:C2:2E:80:00/36\tSMVSyste\tS.M.V. Systemelektronik GmbH\n00:50:C2:2E:90:00/36\tSriInter\tSRI International\n00:50:C2:2E:A0:00/36\tQubisoft\tQUBIsoft S.r.l.\n00:50:C2:2E:B0:00/36\tLinggJan\tLingg & Janke OHG\n00:50:C2:2E:C0:00/36\tChengduB\tChengdu Book Digital Co., Ltd\n00:50:C2:2E:D0:00/36\t4rfCommu\t4RF Communications Ltd\n00:50:C2:2E:E0:00/36\tShfCommu\tSHF Communication Technologies AG\n00:50:C2:2E:F0:00/36\tProfline\tProfline B.V.\n00:50:C2:2F:00:00/36\tLeco\tLECO Corporation\n00:50:C2:2F:10:00/36\tGeometri\tGeometrics, Inc.\n00:50:C2:2F:20:00/36\tEurotekS\tEurotek Srl\n00:50:C2:2F:30:00/36\tCrossbow\tCrossbow Technology, Inc.\n00:50:C2:2F:40:00/36\tEfficien\tEfficient Channel Coding\n00:50:C2:2F:50:00/36\tAdchips\t\n00:50:C2:2F:60:00/36\tClifford\tClifford Chance LLP\n00:50:C2:2F:70:00/36\tGillam-F\tGILLAM-FEI S.A.\n00:50:C2:2F:80:00/36\tSavvycor\tSavvyCorp.com Ltd\n00:50:C2:2F:90:00/36\tDigilent\tDigilent Inc.\n00:50:C2:2F:A0:00/36\tTornadoM\tTornado Modular Systems, Ltd\n00:50:C2:2F:B0:00/36\tArthurIn\tArthur Industries Inc., dba On Hold Media Group\n00:50:C2:2F:C0:00/36\tBlacklin\tBlackline Systems Corporation\n00:50:C2:2F:D0:00/36\tAmerican\tAmerican Microsystems, Ltd.\n00:50:C2:2F:E0:00/36\tSaab\tSaab AB\n00:50:C2:2F:F0:00/36\tPatriaAd\tPatria Advanced Solutions\n00:50:C2:30:00:00/36\tSoredexI\tSoredex Instrumentarium Oyj\n00:50:C2:30:10:00/36\tDelphiDi\tDelphi Display Systems, Inc.\n00:50:C2:30:20:00/36\tEurodesi\tEuroDesign embedded technologies GmbH\n00:50:C2:30:30:00/36\tCi\tCI Systems Ltd.\n00:50:C2:30:40:00/36\tComerson\tCOMERSON S.r.l.\n00:50:C2:30:50:00/36\tSymbium\tSymbium Corporation\n00:50:C2:30:60:00/36\tNoranTel\tNoran Tel Communications Ltd.\n00:50:C2:30:70:00/36\tUniondig\tUniondigital.,Co.Ltd\n00:50:C2:30:80:00/36\tFiveco\t\n00:50:C2:30:90:00/36\tRackmast\tRackmaster Systems, Inc.\n00:50:C2:30:A0:00/36\tInningsT\tInnings Telecom Inc.\n00:50:C2:30:B0:00/36\tVxTechno\tVX Technologies Inc.\n00:50:C2:30:C0:00/36\tTeamlog\t\n00:50:C2:30:D0:00/36\tSetaram\t\n00:50:C2:30:E0:00/36\tObvius\t\n00:50:C2:30:F0:00/36\tDigicont\tDigicontrole Lda\n00:50:C2:31:00:00/36\tCybertro\tCybertron Co., Ltd.\n00:50:C2:31:10:00/36\tComodo\t\n00:50:C2:31:20:00/36\tDeseTech\tDese Technologies SL\n00:50:C2:31:30:00/36\tSaiaBurg\tSAIA Burgess Controls AG\n00:50:C2:31:40:00/36\tMicrobee\tMicroBee Systems, Inc\n00:50:C2:31:50:00/36\tIfakSyst\tifak system GmbH\n00:50:C2:31:60:00/36\tDataline\tDataline AB\n00:50:C2:31:70:00/36\tCosine\tCosine Systems, Inc.\n00:50:C2:31:80:00/36\tMilmega\tMilmega Ltd\n00:50:C2:31:90:00/36\tInvatron\tInvatron Systems Corp.\n00:50:C2:31:A0:00/36\tZodiakDa\tZodiak Data Systems\n00:50:C2:31:B0:00/36\tDatacon\t\n00:50:C2:31:C0:00/36\tCasa\tCasa Systems Inc.\n00:50:C2:31:D0:00/36\tImardaNe\tImarda New Zealand Limited\n00:50:C2:31:E0:00/36\tC3-IlexL\tC3-ilex, LLC\n00:50:C2:31:F0:00/36\tGeotechI\tGeotech Instruments, LLC\n00:50:C2:32:00:00/36\tDtasenso\tDTASENSOR S.p.A.\n00:50:C2:32:10:00/36\tUxp\t\n00:50:C2:32:20:00/36\tBqtSolut\tBQT Solutions (Australia) Limited\n00:50:C2:32:30:00/36\tRedRockN\tRed Rock Networks\n00:50:C2:32:40:00/36\tOdixion\t\n00:50:C2:32:50:00/36\tFederalA\tFederal Aviation Administration\n00:50:C2:32:60:00/36\tNavionic\tNavionics S.p.A.\n00:50:C2:32:70:00/36\tDornier\tDornier GmbH\n00:50:C2:32:80:00/36\tICSElect\tI.C.S. Electronics Limited\n00:50:C2:32:90:00/36\tImax\t\n00:50:C2:32:A0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:32:B0:00/36\tDigitalM\tDigital Multimedia Technologies Spa\n00:50:C2:32:C0:00/36\tIntegrat\tIntegrated Silicon Solution (Taiwan), Inc.\n00:50:C2:32:D0:00/36\tConsensZ\tConsens Zeiterfassung GMBH\n00:50:C2:32:E0:00/36\tManusa-G\tMANUSA-GEST, S.L.\n00:50:C2:32:F0:00/36\tPultroni\tPultronics\n00:50:C2:33:00:00/36\tSiconSrl\tSicon srl\n00:50:C2:33:10:00/36\tBroadcas\tBroadcast Sports Inc\n00:50:C2:33:20:00/36\tPunjabCo\tPunjab Communications Ltd\n00:50:C2:33:30:00/36\tRadix\tRadix Corporation\n00:50:C2:33:40:00/36\tPictureE\tPicture Elements, Inc.\n00:50:C2:33:50:00/36\tNimcatNe\tNimcat Networks\n00:50:C2:33:60:00/36\tGoldenRi\tGolden River Traffic\n00:50:C2:33:70:00/36\tEti\t\n00:50:C2:33:80:00/36\tErnitec\tErnitec A/S\n00:50:C2:33:90:00/36\tSecureSe\tSecure Systems & Services\n00:50:C2:33:A0:00/36\tUnitedTe\tUnited Telecoms Ltd\n00:50:C2:33:B0:00/36\tMultimed\tMultimediaLED\n00:50:C2:33:C0:00/36\tSkipjam\t\n00:50:C2:33:D0:00/36\tGdMissio\tGD Mission Systems\n00:50:C2:33:E0:00/36\tCaTechno\tCA Technology, Inc\n00:50:C2:33:F0:00/36\tExysBvba\tEXYS bvba\n00:50:C2:34:00:00/36\tVirtu\t\n00:50:C2:34:10:00/36\tNovx\tNovx Systems\n00:50:C2:34:20:00/36\tStMichae\tSt. Michael Strategies\n00:50:C2:34:30:00/36\tAbbXiame\tABB Xiamen Switchgear Co. Ltd.\n00:50:C2:34:40:00/36\tAds-Tec\tads-tec GmbH\n00:50:C2:34:50:00/36\tAct\t\n00:50:C2:34:60:00/36\tBiokeysy\tbiokeysystem\n00:50:C2:34:70:00/36\tRowSeven\tRow Seven Ltd\n00:50:C2:34:80:00/36\tKoolspan\tKoolSpan, Inc.\n00:50:C2:34:90:00/36\tSsiSchae\tSSI Schaefer Peem\n00:50:C2:34:A0:00/36\tNie\tNIE Corporation\n00:50:C2:34:B0:00/36\tEcutel\tEcutel Systems, Inc.\n00:50:C2:34:C0:00/36\tChuoElec\tChuo Electric Works Co., LTD.\n00:50:C2:34:D0:00/36\tBmkProfe\tBMK professional electronics GmbH\n00:50:C2:34:E0:00/36\tAbbPower\tABB Power Technologies S.p.A.  Unità  Operativa SACE (PTMV)\n00:50:C2:34:F0:00/36\tNorthPol\tNorth Pole Engineering, Inc.\n00:50:C2:35:00:00/36\tKinesysP\tKinesys Projects Limited\n00:50:C2:35:10:00/36\tFinesyst\tFinesystem Co., Ltd\n00:50:C2:35:20:00/36\tLuceo\t\n00:50:C2:35:30:00/36\tCrossing\tCrossing Informationssysteme GmbH\n00:50:C2:35:40:00/36\tAdvanced\tAdvanced IP Communications\n00:50:C2:35:50:00/36\tIhm\t\n00:50:C2:35:60:00/36\tBaytechC\tBaytech Cinema\n00:50:C2:35:70:00/36\tAthenaSe\tAthena Semiconductor\n00:50:C2:35:80:00/36\tAlcea\t\n00:50:C2:35:90:00/36\tKramerEl\tKramer Electronics Ltd.\n00:50:C2:35:A0:00/36\tAdvanced\tAdvanced Si-Net Co., LTD.\n00:50:C2:35:B0:00/36\tVlsipTec\tVlsip Technologies, Inc\n00:50:C2:35:C0:00/36\tRatotec\tRatotec GmbH\n00:50:C2:35:D0:00/36\tNettest\tNetTest A/S\n00:50:C2:35:E0:00/36\tJobinYvo\tJobin Yvon,Inc\n00:50:C2:35:F0:00/36\tFImmSRL\tF.Imm. S.r.L.\n00:50:C2:36:00:00/36\tDigitalR\tDigital Receiver Technology\n00:50:C2:36:10:00/36\tContec\t\n00:50:C2:36:20:00/36\tAzdPraha\tAZD Praha s.r.o.\n00:50:C2:36:30:00/36\tSeptentr\tSeptentrio nv/sa\n00:50:C2:36:40:00/36\tTattileS\tTattile srl\n00:50:C2:36:50:00/36\tVpg\t\n00:50:C2:36:60:00/36\tVanguard\tVanguard Technology Corp.\n00:50:C2:36:70:00/36\tCanmaxTe\tCANMAX Technology Ltd.\n00:50:C2:36:80:00/36\tAspelSA\tAspel S.A.\n00:50:C2:36:90:00/36\tAlwaysOn\tAlways On Wireless\n00:50:C2:36:A0:00/36\tOptronic\tOptronic Partner pr AB\n00:50:C2:36:B0:00/36\tMinervaT\tMinerva Technology Inc\n00:50:C2:36:C0:00/36\tRiscoGro\tRISCO Group\n00:50:C2:36:D0:00/36\tOplinkCo\tOplink Communications\n00:50:C2:36:E0:00/36\tMinicomA\tMinicom Advanced Systems Ltd\n00:50:C2:36:F0:00/36\tXimeaSRO\tXIMEA s.r.o.\n00:50:C2:37:00:00/36\tEuropeTe\tEurope Technologies\n00:50:C2:37:10:00/36\tDigitalA\tDigital Art System\n00:50:C2:37:20:00/36\tElvElekt\tELV Elektronik AG\n00:50:C2:37:30:00/36\tCompanio\tCompanion Worlds, inc.\n00:50:C2:37:40:00/36\tOwasysAd\tOwasys Advanced Wireless Devices\n00:50:C2:37:50:00/36\tTir\tTIR Systems Ltd.\n00:50:C2:37:60:00/36\tCleode\t\n00:50:C2:37:70:00/36\tXycomVme\tXycom VME\n00:50:C2:37:80:00/36\tDaintree\tDaintree Networks Pty\n00:50:C2:37:90:00/36\tControlL\tControl LAN S.A.\n00:50:C2:37:A0:00/36\tIda\tIDA Corporation\n00:50:C2:37:B0:00/36\tFreescal\tFreescale Semiconductor\n00:50:C2:37:C0:00/36\tModia\tMODIA SYSTEMS Co., Ltd\n00:50:C2:37:D0:00/36\tVerotrak\tVeroTrak Inc.\n00:50:C2:37:E0:00/36\tNiSRL\tNi.Co. S.r.l.\n00:50:C2:37:F0:00/36\tForesear\tForesearch\n00:50:C2:38:00:00/36\tEke-Elec\tEKE-Electronics Ltd.\n00:50:C2:38:10:00/36\tRealtime\tRealtime Engineering AG\n00:50:C2:38:20:00/36\tColorado\tColorado vNet\n00:50:C2:38:30:00/36\tIcsElect\tICS Electronics\n00:50:C2:38:40:00/36\tWireless\tWireless Reading Systems Holding ASA\n00:50:C2:38:50:00/36\tSungjinN\tSUNGJIN NEOTECH Co.Ltd.\n00:50:C2:38:60:00/36\tPrecisio\tPrecision System Science Co.,Ltd\n00:50:C2:38:70:00/36\tInoteska\tInoteska s.r.o.\n00:50:C2:38:80:00/36\tIee\tIEE Inc\n00:50:C2:38:90:00/36\tExavio\tExavio Inc.\n00:50:C2:38:A0:00/36\tEmbedtro\tEmbedtronics Enterprise\n00:50:C2:38:B0:00/36\tInterbri\tInterBridge,Inc.\n00:50:C2:38:C0:00/36\tEpsilonS\tEpsilon Srl\n00:50:C2:38:D0:00/36\tA&GSoluz\tA&G Soluzioni Digitali\n00:50:C2:38:E0:00/36\tNordicAl\tNordic Alarm AB\n00:50:C2:38:F0:00/36\tTtcTelec\tTTC Telecom\n00:50:C2:39:00:00/36\tTcCommun\tTC Communications\n00:50:C2:39:10:00/36\tEsensors\tEsensors, Inc.\n00:50:C2:39:20:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:39:30:00/36\tSysTecEl\tSYS TEC electronic GmbH\n00:50:C2:39:40:00/36\tEmbedit\tEmbedit A/S\n00:50:C2:39:50:00/36\tVidisys\tvidisys gmbh\n00:50:C2:39:60:00/36\tRapidwav\tRapidWave Inc.\n00:50:C2:39:70:00/36\tMangoDsp\tMANGO DSP Ltd.\n00:50:C2:39:80:00/36\tInhandEl\tInhand Electronics, Inc.\n00:50:C2:39:90:00/36\tAdvanced\tAdvanced Micro Controls Inc.\n00:50:C2:39:A0:00/36\tOpticalA\tOptical Air Data Systems\n00:50:C2:39:B0:00/36\tYuyamaMf\tYUYAMA MFG Co.,Ltd\n00:50:C2:39:C0:00/36\tTiyodaMf\tTiyoda Mfg Co.,Ltd.\n00:50:C2:39:D0:00/36\tDigitald\tDigitalDeck, Inc.\n00:50:C2:39:E0:00/36\tARGElect\tA.R.G ElectroDesign Ltd\n00:50:C2:39:F0:00/36\tIsensix\t\n00:50:C2:3A:00:00/36\tStreetfi\tStreetFire Sound Labs, LLC\n00:50:C2:3A:10:00/36\tSamsoft\t\n00:50:C2:3A:20:00/36\tVegasAmu\tVegas Amusement\n00:50:C2:3A:30:00/36\tStarLink\tStar Link Communication Pvt. Ltd.\n00:50:C2:3A:40:00/36\tSilvertr\tSilvertree Engineering Ltd\n00:50:C2:3A:50:00/36\tLabjack\tLabJack Corporation\n00:50:C2:3A:60:00/36\tIntellid\tIntelliDesign Pty Ltd\n00:50:C2:3A:70:00/36\tElektrot\tElektrotechnik & Elektronik Oltmann GmbH\n00:50:C2:3A:80:00/36\tEngim\tEngim, Inc.\n00:50:C2:3A:90:00/36\tWestroni\tWestronic Systems Inc.\n00:50:C2:3A:A0:00/36\tNetworke\tNetworked Robotics Corporation\n00:50:C2:3A:B0:00/36\tTaskitRe\ttaskit Rechnertechnik GmbH\n00:50:C2:3A:C0:00/36\tInaccess\tInAccess Networks\n00:50:C2:3A:D0:00/36\tSpirentC\tSpirent Communications (Scotland) Limited\n00:50:C2:3A:E0:00/36\tHankukTa\tHankuk Tapi Computer Co., Ltd\n00:50:C2:3A:F0:00/36\tNorbitOd\tNorbit ODM AS\n00:50:C2:3B:00:00/36\tMicrotar\tMicrotarget Tecnologia Digital Ltda.\n00:50:C2:3B:10:00/36\tSpecstro\tSpecstroy-Svyaz Ltd\n00:50:C2:3B:20:00/36\tTennesse\tTennessee Valley Authority\n00:50:C2:3B:30:00/36\tMediaLab\tMedia Lab., Inc.\n00:50:C2:3B:40:00/36\tContrôle\tContrôle Analytique inc.\n00:50:C2:3B:50:00/36\tNecTokin\tNEC TOKIN Corporation\n00:50:C2:3B:60:00/36\tArecontV\tArecont Vision\n00:50:C2:3B:70:00/36\tMindspee\tMindspeed Technologies\n00:50:C2:3B:80:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:3B:90:00/36\tGilbarco\tGilbarco Autotank AB\n00:50:C2:3B:A0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:3B:B0:00/36\tImagoTec\tIMAGO Technologies GmbH\n00:50:C2:3B:C0:00/36\tTyzx\tTyzx, Inc.\n00:50:C2:3B:D0:00/36\tBigbangL\tBigbang L.T.D.\n00:50:C2:3B:E0:00/36\tPaulySte\tPauly Steuer- und Regelanlagen GmbH & Co. KG\n00:50:C2:3B:F0:00/36\tAudioPro\tAudio Processing Technology Ltd\n00:50:C2:3C:00:00/36\tEdaIndus\tEDA Industries Pte. Ltd\n00:50:C2:3C:10:00/36\tMicrotek\tMicroTek Electronics, Inc.\n00:50:C2:3C:20:00/36\tCasabyte\tCasabyte Inc.\n00:50:C2:3C:30:00/36\t4gTechno\t4g Technologies, L.P.\n00:50:C2:3C:40:00/36\tSyprisEl\tSypris Electronics\n00:50:C2:3C:50:00/36\tSiliconO\tSilicon Optix Canada Inc.\n00:50:C2:3C:60:00/36\tNetOptic\tNet Optics\n00:50:C2:3C:70:00/36\tSalentTe\tSalent Technologies Ltd\n00:50:C2:3C:80:00/36\tWheelsOf\tWheels of Zeus Inc.\n00:50:C2:3C:90:00/36\tDilaxInt\tDilax Intelcom AG\n00:50:C2:3C:A0:00/36\tAbb\tABB Inc.\n00:50:C2:3C:B0:00/36\tAnalytic\tAnalytica GmbH\n00:50:C2:3C:C0:00/36\tLinkwell\tLinkwell Telesystems Pvt Ltd\n00:50:C2:3C:D0:00/36\tMicro-Me\tMicro-Measurements\n00:50:C2:3C:E0:00/36\tWardLeon\tWard Leonard Electric Company\n00:50:C2:3C:F0:00/36\tTechnova\tTechnovare Systems, Inc.\n00:50:C2:3D:00:00/36\tMicro-Ro\tMicro-Robotics Limited\n00:50:C2:3D:10:00/36\tBraintro\tBraintronics BV\n00:50:C2:3D:20:00/36\tAdilecEn\tAdilec Enginyeria SL\n00:50:C2:3D:30:00/36\tAmerican\tAmerican LED-gible Inc.\n00:50:C2:3D:40:00/36\tWisnuAnd\tWisnu and Supak Co.Ltd.\n00:50:C2:3D:50:00/36\tFlukeBio\tFluke Biomedical, Radiation Management Services\n00:50:C2:3D:60:00/36\tComlab\tComlab Inc.\n00:50:C2:3D:70:00/36\tTtcTelek\tTTC TELEKOMUNIKACE Ltd\n00:50:C2:3D:80:00/36\tKey\tKey Systems , Inc.\n00:50:C2:3D:90:00/36\tBavariaD\tBavaria Digital Technik GmbH\n00:50:C2:3D:A0:00/36\tM5Data\tM5 Data Limited\n00:50:C2:3D:B0:00/36\tOsmetech\tOsmetech Inc.\n00:50:C2:3D:C0:00/36\t3dPercep\t3D perception\n00:50:C2:3D:D0:00/36\tElmic\tELMIC GmbH\n00:50:C2:3D:E0:00/36\tAbbPower\tABB Power Technologies S.p.A.  Unità  Operativa SACE (PTMV)\n00:50:C2:3D:F0:00/36\tBiode\tBiODE Inc.\n00:50:C2:3E:00:00/36\tOyStingh\tOy Stinghorn Ltd\n00:50:C2:3E:10:00/36\tNeulion\tNeuLion Incorporated\n00:50:C2:3E:20:00/36\tSysnova\t\n00:50:C2:3E:30:00/36\tCsiro-Di\tCSIRO - Division of Exploration and Mining\n00:50:C2:3E:40:00/36\tCueAS\tCUE, a.s.\n00:50:C2:3E:50:00/36\tVacon\tVacon Plc\n00:50:C2:3E:60:00/36\tCrde\t\n00:50:C2:3E:70:00/36\tRevoluti\tRevolution Education Ltd\n00:50:C2:3E:80:00/36\tConforma\tConformative Systems, Inc.\n00:50:C2:3E:90:00/36\tMedavant\tMedAvant Healthcare\n00:50:C2:3E:A0:00/36\tAlroInfo\tAlro Information Systems SA\n00:50:C2:3E:B0:00/36\tIssInter\tISS International\n00:50:C2:3E:C0:00/36\tTeneros\t\n00:50:C2:3E:D0:00/36\tBoardRoo\tThe Board Room Inc.\n00:50:C2:3E:E0:00/36\tCommoca\tCommoca, Inc\n00:50:C2:3E:F0:00/36\tPatIndus\tPAT Industries, DBA Pacific Advanced Technology\n00:50:C2:3F:00:00/36\tMegatecE\tmegatec electronic GmbH\n00:50:C2:3F:10:00/36\tSallandE\tSalland Electronics Holding BV\n00:50:C2:3F:20:00/36\tStl\tSTL GmbH\n00:50:C2:3F:30:00/36\tAbb-Powe\tABB AG - Power Grids - Grid Automation\n00:50:C2:3F:40:00/36\tMcTechno\tMC TECHNOLOGY GmbH\n00:50:C2:3F:50:00/36\tPhaedrus\tPhaedrus Limited\n00:50:C2:3F:60:00/36\tDaftdata\tdAFTdATA Limited\n00:50:C2:3F:70:00/36\tAdvantag\tAdvantage R&D\n00:50:C2:3F:80:00/36\tSuperna\tSuperna Ltd\n00:50:C2:3F:90:00/36\tSintium\tSintium Ltd\n00:50:C2:3F:A0:00/36\tTumsan\t\n00:50:C2:3F:B0:00/36\tNventSch\tnVent, Schroff GmbH\n00:50:C2:3F:C0:00/36\tWeinberg\tWeinberger Deutschland GmbH\n00:50:C2:3F:D0:00/36\tHartmann\tHARTMANN software GbR\n00:50:C2:3F:E0:00/36\tHaivisio\tHaiVision Systems Inc\n00:50:C2:3F:F0:00/36\tCastIron\tCast Iron Systems\n00:50:C2:40:00:00/36\tSmartmot\tSmartMotor AS\n00:50:C2:40:10:00/36\tPromess\tPromess Incorporated\n00:50:C2:40:20:00/36\tNumeronS\tNumeron Sp. z o.o.\n00:50:C2:40:30:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n00:50:C2:40:40:00/36\tNanshanb\tNanShanBridge Co.Ltd\n00:50:C2:40:50:00/36\tGuralp\tGuralp Systems Limited\n00:50:C2:40:60:00/36\tCorestre\tCoreStreet, Ltd\n00:50:C2:40:70:00/36\tAieEtude\tAIE Etudes\n00:50:C2:40:80:00/36\tTern\tTERN, Inc.\n00:50:C2:40:90:00/36\tKtec\tKtec Ltd\n00:50:C2:40:A0:00/36\tContecSt\tContec Steuerungstechnik & Automation GmbH\n00:50:C2:40:B0:00/36\tCenterVo\tCenter VOSPI JSC\n00:50:C2:40:C0:00/36\tAppliedM\tApplied Materials UK Ltd\n00:50:C2:40:D0:00/36\tAfonicsF\tAfonics Fibreoptics Ltd\n00:50:C2:40:E0:00/36\tAds-Tec\tads-tec GmbH\n00:50:C2:40:F0:00/36\tBir\tBir,Inc.\n00:50:C2:41:00:00/36\tGrossenb\tGrossenbacher Systeme AG\n00:50:C2:41:10:00/36\tMultimes\tMultimessage Systems Ltd.\n00:50:C2:41:20:00/36\tTsbSolut\tTSB Solutions Inc.\n00:50:C2:41:30:00/36\tGoodrich\t\n00:50:C2:41:40:00/36\tTalleres\tTalleres de Escoriaza SA\n00:50:C2:41:50:00/36\tSensotec\tSensoTech GmbH\n00:50:C2:41:60:00/36\tSelcoSRL\tSELCO s.r.l.\n00:50:C2:41:70:00/36\tQt\tQT systems ab\n00:50:C2:41:80:00/36\tPlaneaOy\tPlanea Oy\n00:50:C2:41:90:00/36\tMecselOy\tMecsel Oy\n00:50:C2:41:A0:00/36\tBluewate\tBluewater Systems Ltd\n00:50:C2:41:B0:00/36\tLogimSof\tLogiM GmbH Software und Entwicklung\n00:50:C2:41:C0:00/36\tInfrasaf\tInfrasafe, Inc.\n00:50:C2:41:D0:00/36\tAltronic\tAltronic, Inc.\n00:50:C2:41:E0:00/36\tVideotek\tVideotek Sistemas Eletronicos Ltda.\n00:50:C2:41:F0:00/36\tAvionica\tAvionica, Inc\n00:50:C2:42:00:00/36\tBoundles\tBoundless Technologies\n00:50:C2:42:10:00/36\tEfsys\t\n00:50:C2:42:20:00/36\tAds-Tec\tads-tec GmbH\n00:50:C2:42:30:00/36\tPower-On\tPower-One Inc.\n00:50:C2:42:40:00/36\tMetrolab\tMetrolab Technology SA\n00:50:C2:42:50:00/36\tPinnacle\tPinnacle Technology\n00:50:C2:42:60:00/36\tStomSyst\tSTOM System\n00:50:C2:42:70:00/36\tScheidtB\tScheidt & Bachmann GmbH\n00:50:C2:42:80:00/36\tRoxar\tRoxar A/S\n00:50:C2:42:90:00/36\tMatthews\tMatthews Australasia\n00:50:C2:42:A0:00/36\tDspDesig\tDsp Design\n00:50:C2:42:B0:00/36\tVlsipTec\tVlsip Technologies, Inc.\n00:50:C2:42:C0:00/36\tTrapezeS\tTrapeze Software Group Inc\n00:50:C2:42:D0:00/36\tArgo-Tec\tArgo-Tech\n00:50:C2:42:E0:00/36\tOelmannE\tOelmann Elektronik GmbH\n00:50:C2:42:F0:00/36\tWin4net\t\n00:50:C2:43:00:00/36\tArcomDig\tArcom Digital\n00:50:C2:43:10:00/36\tOctatron\tOctatron, Inc.\n00:50:C2:43:20:00/36\tTopwayIn\tTopway Industries Ltd.\n00:50:C2:43:30:00/36\tIdetechE\tIdetech Europe S.A.\n00:50:C2:43:40:00/36\tImperati\tImperativeNetworks\n00:50:C2:43:50:00/36\tAdatelTe\tAdatel Telecomunicaciones S.A.\n00:50:C2:43:60:00/36\tSatellit\tSatellite Services BV\n00:50:C2:43:70:00/36\tPowerwan\tPowerWAN, Inc\n00:50:C2:43:80:00/36\tTelecomP\tTelecom Protection Technologies Limited\n00:50:C2:43:90:00/36\tPeletonP\tPeleton Photonic Systems\n00:50:C2:43:A0:00/36\tProdesig\tProDesign GmbH\n00:50:C2:43:B0:00/36\tA3ip\t\n00:50:C2:43:C0:00/36\tDucommun\tDucommun LaBarge Technologies, Inc\n00:50:C2:43:D0:00/36\tAnnArbor\tAnn Arbor Sensor Systems LLC\n00:50:C2:43:E0:00/36\tCopperco\tCoppercom\n00:50:C2:43:F0:00/36\tArvooIma\tARVOO Imaging Products BV\n00:50:C2:44:00:00/36\tAdvanced\tAdvanced Modular Computers Ltd.\n00:50:C2:44:10:00/36\tSammiInf\tSammi Information Systems Co.,Ltd\n00:50:C2:44:20:00/36\tPicoComp\tPico Computing, Inc.\n00:50:C2:44:30:00/36\tPickerin\tPickering Laboratories\n00:50:C2:44:40:00/36\tOffshore\tOffshore Systems Ltd\n00:50:C2:44:50:00/36\tMicronic\tMICRONIC s.r.o.\n00:50:C2:44:60:00/36\tMicroTec\tMicro Technic A-S\n00:50:C2:44:70:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n00:50:C2:44:80:00/36\tComtech\tComtech Systems Inc.\n00:50:C2:44:90:00/36\tBleileDa\tBLEILE DATENTECHNIK GmbH\n00:50:C2:44:A0:00/36\tElettron\tElettronica Santerno SpA\n00:50:C2:44:B0:00/36\tSolace\tSolace Systems, Inc.\n00:50:C2:44:C0:00/36\tComputim\tComputime Systems UK Ltd.\n00:50:C2:44:D0:00/36\tElectro-\tElectro-Matic Products, Inc.\n00:50:C2:44:E0:00/36\tQqTechno\tQQ Technology,Inc\n00:50:C2:44:F0:00/36\tKippdata\tkippdata GmbH\n00:50:C2:45:00:00/36\tEnconair\tEnconair Ecological Chambers Inc.\n00:50:C2:45:10:00/36\tHameg\tHAMEG GmbH\n00:50:C2:45:20:00/36\tScameSis\tScame Sistemi srl\n00:50:C2:45:30:00/36\tErhardt+\tErhardt+Leimer GmbH\n00:50:C2:45:40:00/36\tBrivoLlc\tBrivo Systems, LLC\n00:50:C2:45:50:00/36\tGogoBa\tGogo BA\n00:50:C2:45:60:00/36\tDrdcValc\tDRDC Valcartier\n00:50:C2:45:70:00/36\tDanbridg\tDanbridge\n00:50:C2:45:80:00/36\tHrzData\tHRZ data GmbH\n00:50:C2:45:90:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:45:A0:00/36\tFunkwerk\tFunkwerk plettac electronic GmbH\n00:50:C2:45:B0:00/36\tMatraEle\tMatra Electronique\n00:50:C2:45:C0:00/36\tDeisterE\tDeister Electronic GmbH\n00:50:C2:45:D0:00/36\tDigitalE\tDigital Engineering, Inc.\n00:50:C2:45:E0:00/36\tHallibur\tHalliburton - Sperry Drilling Service\n00:50:C2:45:F0:00/36\tT2cMarke\tT2C Marketing AB\n00:50:C2:46:00:00/36\tVitelnet\t\n00:50:C2:46:10:00/36\tTattileS\tTattile Srl\n00:50:C2:46:20:00/36\tCt\tCT Company\n00:50:C2:46:30:00/36\tCodem\tCodem Systems, Inc.\n00:50:C2:46:40:00/36\tXytacSys\tXYTAC system technologies\n00:50:C2:46:50:00/36\tPdts\tPDTS GmbH\n00:50:C2:46:60:00/36\tLonap\tLONAP Limited\n00:50:C2:46:70:00/36\tUnitedWe\tUnited Western Technologies\n00:50:C2:46:80:00/36\tNetworkI\tNetwork I/O\n00:50:C2:46:90:00/36\tBipomEle\tBiPOM Electronics, Inc.\n00:50:C2:46:A0:00/36\tIse\tISE GmbH\n00:50:C2:46:B0:00/36\tEasytech\tEASYTECH GmbH\n00:50:C2:46:C0:00/36\tCamco\tCAMCO GmbH\n00:50:C2:46:D0:00/36\tPaulSche\tPaul Scherrer Institut (PSI)\n00:50:C2:46:E0:00/36\tAvenirTe\tAvenir Technologies Inc.\n00:50:C2:46:F0:00/36\tNeurowar\tNeuroware\n00:50:C2:47:00:00/36\tCybectec\tCybectec inc.\n00:50:C2:47:10:00/36\tPixtreeT\tPixtree Technologies, inc.\n00:50:C2:47:20:00/36\tKop\tKOP Ltd\n00:50:C2:47:30:00/36\tSensusMe\tSensus Metering Systems Israel\n00:50:C2:47:40:00/36\tVenue1\tVenue 1, Inc.\n00:50:C2:47:50:00/36\tIsepos\tISEPOS GmbH\n00:50:C2:47:60:00/36\tAsconSPA\tAscon S.p.a.\n00:50:C2:47:70:00/36\tSevTidsy\tSEV Tidsystem AB\n00:50:C2:47:80:00/36\tMetafix\tMetafix Inc.\n00:50:C2:47:90:00/36\tUnlimite\tUnlimited Bandwidth LLC\n00:50:C2:47:A0:00/36\tEfficien\tEfficient Channel Coding\n00:50:C2:47:B0:00/36\tPitneyBo\tPitney Bowes, Inc\n00:50:C2:47:C0:00/36\tAuconet\tAUCONET GmbH\n00:50:C2:47:D0:00/36\tWit\tWIT Inc\n00:50:C2:47:E0:00/36\tEnergieU\tEnergie Umwelt Systemtechnik GmbH\n00:50:C2:47:F0:00/36\tBrit\tBRIT Inc.\n00:50:C2:48:00:00/36\tSelkom\tSELKOM GmbH\n00:50:C2:48:10:00/36\tComputer\tComputer Sciences Corp\n00:50:C2:48:20:00/36\tPriamusS\tPriamus System Technologies Ag\n00:50:C2:48:30:00/36\tSes\t\n00:50:C2:48:40:00/36\tKooltech\tKooltech LLC\n00:50:C2:48:50:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:48:60:00/36\tSafegate\tSafegate International AB\n00:50:C2:48:70:00/36\tEridon\tEridon Corporation\n00:50:C2:48:80:00/36\tDaSistem\tDa Sistemi Spa\n00:50:C2:48:90:00/36\tEreeElec\tEREE Electronique\n00:50:C2:48:A0:00/36\tMobileMa\tMobile Matrix, Inc.\n00:50:C2:48:B0:00/36\tAds-Tec\tads-tec GmbH\n00:50:C2:48:C0:00/36\tUniton\tUniton Ag\n00:50:C2:48:D0:00/36\tMetronSp\tMetron Sp. z o.o.\n00:50:C2:48:E0:00/36\tTeledyne\tTeledyne Tekmar\n00:50:C2:48:F0:00/36\tDengyosh\tDENGYOSHA co.,LTD.\n00:50:C2:49:00:00/36\tCloanto\tCloanto Corporation\n00:50:C2:49:10:00/36\tFrSauter\tFr. Sauter AG\n00:50:C2:49:20:00/36\tTrafsysA\tTrafsys As\n00:50:C2:49:30:00/36\tArtis\tArtis GmbH\n00:50:C2:49:40:00/36\tUltimate\tUltimate Technology, Inc.\n00:50:C2:49:50:00/36\tVazaElek\tVAZA Elektronik AB\n00:50:C2:49:60:00/36\tAcutelog\tAcutelogic Corporation\n00:50:C2:49:70:00/36\tAdvanced\tAdvanced Driver Information Technology GmbH\n00:50:C2:49:80:00/36\tQuartetT\tQuartet Technology, Inc.\n00:50:C2:49:90:00/36\tTrelliaN\tTrellia Networks\n00:50:C2:49:A0:00/36\tTelasicC\tTelASIC Communications, Inc.\n00:50:C2:49:B0:00/36\tVgContro\tvg controls, inc\n00:50:C2:49:C0:00/36\tEnvisaco\tEnvisacor Technologies Inc.\n00:50:C2:49:D0:00/36\tCritical\tCritical Link LLC\n00:50:C2:49:E0:00/36\tArmorlin\tArmorlink Co .Ltd\n00:50:C2:49:F0:00/36\tGcs\tGCS, Inc\n00:50:C2:4A:00:00/36\tAdvanced\tAdvanced technologies & Engineering (pty) Ltd\n00:50:C2:4A:10:00/36\tNventSch\tnVent, Schroff GmbH\n00:50:C2:4A:20:00/36\tSpecs\tSPECS GmbH\n00:50:C2:4A:30:00/36\tProtiumT\tProtium Technologies, Inc.\n00:50:C2:4A:40:00/36\tIeeeP160\tIEEE P1609 WG\n00:50:C2:4A:50:00/36\tTeledyne\tTeledyne Monitor Labs\n00:50:C2:4A:60:00/36\tBuyangEl\tBuyang Electronics Industrial Co., Ltd.\n00:50:C2:4A:70:00/36\tIsegSpez\tiseg Spezialelektronik GmbH\n00:50:C2:4A:80:00/36\tCyjayaKo\tCYJAYA Korea\n00:50:C2:4A:90:00/36\tFaberEle\tFaber Electronics BV\n00:50:C2:4A:A0:00/36\tHeinenEl\tHEINEN ELEKTRONIK GmbH\n00:50:C2:4A:B0:00/36\tJvfCommu\tJVF Communications Ltd\n00:50:C2:4A:C0:00/36\tDoramu\tDoramu Co.,Ltd.\n00:50:C2:4A:D0:00/36\tOpenpeak\tOpenPeak, Inc.\n00:50:C2:4A:E0:00/36\tAds-Tec\tads-tec GmbH\n00:50:C2:4A:F0:00/36\tOrbisOy\tOrbis Oy\n00:50:C2:4B:00:00/36\tEsmartDi\tEsmart Distribution Pte Ltd\n00:50:C2:4B:10:00/36\tNsfocusI\tNSFOCUS Information Technology Co., Ltd.\n00:50:C2:4B:20:00/36\tTeslaAS\tTESLA, a.s.\n00:50:C2:4B:30:00/36\tAnsa\tANSA Corporation\n00:50:C2:4B:40:00/36\tMatrixAu\tMatrix Audio Designs\n00:50:C2:4B:50:00/36\tValleyTe\tValley Tecnologia\n00:50:C2:4B:60:00/36\tGeneralR\tGeneral Resources Co., LTD.\n00:50:C2:4B:70:00/36\tGfiChron\tGFI Chrono Time\n00:50:C2:4B:80:00/36\tShenzhen\tShenzhen Hongdian Technologies.,Ltd\n00:50:C2:4B:90:00/36\tRoseTech\tRose Technologies\n00:50:C2:4B:A0:00/36\tMistleto\tMistletoe Technologies\n00:50:C2:4B:B0:00/36\tProtonic\tProtonic Holland\n00:50:C2:4B:C0:00/36\tSaiaBurg\tSaia Burgess Controls AG\n00:50:C2:4B:D0:00/36\tArgonSt\tArgon ST\n00:50:C2:4B:E0:00/36\tDigitalD\tDigital Dynamics, Inc.\n00:50:C2:4B:F0:00/36\tWestingh\tWestinghouse Rail Systems Ltd\n00:50:C2:4C:00:00/36\tBio-Logi\tBio-logic Systems Corp\n00:50:C2:4C:10:00/36\tMovazNet\tMovaz Networks, Inc.\n00:50:C2:4C:20:00/36\tElbit\tElbit Systems Ltd.\n00:50:C2:4C:30:00/36\tQuantum3\tQuantum3D, Inc.\n00:50:C2:4C:40:00/36\tBlackDia\tBlack Diamond Video, Inc.\n00:50:C2:4C:50:00/36\tExrayBro\teXray Broadband Inc.\n00:50:C2:4C:60:00/36\tRubin\tRubin Ltd.\n00:50:C2:4C:70:00/36\tTransbit\tTransbit Sp.z o.o.\n00:50:C2:4C:80:00/36\tNeets\t\n00:50:C2:4C:90:00/36\tScirocco\tScirocco AB\n00:50:C2:4C:A0:00/36\tYargBiom\tYarg Biometrics Limited\n00:50:C2:4C:B0:00/36\tVerint\tVerint Systems Ltd\n00:50:C2:4C:C0:00/36\tImpedime\tImpediMed Limited\n00:50:C2:4C:D0:00/36\tBixi\tBixi Systems Ltd.\n00:50:C2:4C:E0:00/36\tOpenDate\tOpen Date Equipment Limited\n00:50:C2:4C:F0:00/36\tZiehl-Ab\tZiehl-Abegg AG\n00:50:C2:4D:00:00/36\tRcsEnerg\tRCS Energy Management Ltd\n00:50:C2:4D:10:00/36\tSlicanSp\tSLICAN sp. z o.o.\n00:50:C2:4D:20:00/36\tTwowayCa\tTwoway CATV SERVICE INC.\n00:50:C2:4D:30:00/36\tElprocSp\tELPROC sp. z o.o.\n00:50:C2:4D:40:00/36\tHerholdt\tHerholdt Controls srl\n00:50:C2:4D:50:00/36\tSebaDesi\tSEBA Design Pty Ltd\n00:50:C2:4D:60:00/36\tIngenieu\tIngenieurbüro Schober\n00:50:C2:4D:70:00/36\tDeltaTau\tDelta Tau Data Systems, Inc.\n00:50:C2:4D:80:00/36\tAvantry\tAvantry Ltd.\n00:50:C2:4D:90:00/36\tGeSecuri\tGE Security Kampro\n00:50:C2:4D:A0:00/36\tMediorne\tMEDIORNET GmbH\n00:50:C2:4D:B0:00/36\tAlfingMo\tAlfing Montagetechnik GmbH\n00:50:C2:4D:C0:00/36\tAceElect\tAce Electronics, Inc.\n00:50:C2:4D:D0:00/36\tTruteqWi\tTruteq Wireless (PTY) Ltd.\n00:50:C2:4D:E0:00/36\tGdMissio\tGD Mission Systems\n00:50:C2:4D:F0:00/36\tThermoEl\tThermo Electron\n00:50:C2:4E:00:00/36\tTelematr\tTelematrix\n00:50:C2:4E:10:00/36\tSsTeleco\tSS Telecoms CC\n00:50:C2:4E:20:00/36\tAppliedR\tApplied Research Laboratories: UT\n00:50:C2:4E:30:00/36\tRomteckP\tRomteck Pty Ltd\n00:50:C2:4E:40:00/36\tEmbigenc\tEmbigence GmbH\n00:50:C2:4E:50:00/36\tSedo\tSedo Systems Ltd\n00:50:C2:4E:60:00/36\tPhotonic\tPhotonic Bridges  Inc.\n00:50:C2:4E:70:00/36\tComputer\tComputerized Elevator Contol\n00:50:C2:4E:80:00/36\tSatelSpZ\tSATEL sp. z o.o.\n00:50:C2:4E:90:00/36\tSeachang\tSeachange international\n00:50:C2:4E:A0:00/36\tPmc\t\n00:50:C2:4E:B0:00/36\tMandozzi\tMandozzi Elettronica SA\n00:50:C2:4E:C0:00/36\tThalesDe\tThales Defence and Security Systems GmbH\n00:50:C2:4E:D0:00/36\tLabXTech\tLab X Technologies, LLC\n00:50:C2:4E:E0:00/36\tBeijingC\tBeijing Corelogic Communication Co., Ltd.\n00:50:C2:4E:F0:00/36\tCreative\tCreative Retail Entertainment\n00:50:C2:4F:00:00/36\tMedavant\tMedAvant Healthcare\n00:50:C2:4F:10:00/36\tPacketIs\tPacket Island Inc.\n00:50:C2:4F:20:00/36\tTantroni\tTantronic AG\n00:50:C2:4F:30:00/36\tAutronic\tAutronica Fire And Securirty\n00:50:C2:4F:40:00/36\tO2run\t\n00:50:C2:4F:50:00/36\tMonroeEl\tMonroe Electronics, Inc.\n00:50:C2:4F:60:00/36\tRealD\tReal D\n00:50:C2:4F:70:00/36\tWaveip\t\n00:50:C2:4F:80:00/36\tProdcoIn\tProdco International Inc.\n00:50:C2:4F:90:00/36\tRtdsTech\tRTDS Technologies Inc.\n00:50:C2:4F:A0:00/36\tCambridg\tCambridge Technology, Inc.\n00:50:C2:4F:B0:00/36\tBesTechn\tBES Technology Group\n00:50:C2:4F:C0:00/36\tHwayoung\tHwayoung RF Solution Inc\n00:50:C2:4F:D0:00/36\tNetworkA\tNetwork Automation mxc AB\n00:50:C2:4F:E0:00/36\tGemElett\tGEM ELETTRONICA Srl\n00:50:C2:4F:F0:00/36\tDakty\tDakty GmbH\n00:50:C2:50:00:00/36\tOrenco\tOrenco Systems, Inc.\n00:50:C2:50:10:00/36\tIbexUk\tIBEX UK Limited\n00:50:C2:50:20:00/36\tCriterio\tCriterion Systems Limited\n00:50:C2:50:30:00/36\tRespiron\tRespironics Inc.\n00:50:C2:50:40:00/36\tAphex\tAphex Systems Ltd.\n00:50:C2:50:50:00/36\tComputer\tComputerwise, Inc.\n00:50:C2:50:60:00/36\t7+Kft\t7+ Kft\n00:50:C2:50:70:00/36\tMicroCon\tMicro Connect Pty Ltd\n00:50:C2:50:80:00/36\tPutercom\tPutercom Enterprise Co., Ltd.\n00:50:C2:50:90:00/36\tHillcres\tHillcrest Laboratories, Inc.\n00:50:C2:50:A0:00/36\tMonitorB\tMonitor Business Machines Ltd\n00:50:C2:50:B0:00/36\tLogicBea\tLogic Beach Inc\n00:50:C2:50:C0:00/36\tAirwiseT\tAirwise Technology Co., Ltd.\n00:50:C2:50:D0:00/36\tClearson\tClearsonics Pty. Ltd.\n00:50:C2:50:E0:00/36\tFibresav\tFibresavers Corporation\n00:50:C2:50:F0:00/36\tPolystar\tPolystar Instruments AB\n00:50:C2:51:00:00/36\tSummitDe\tSummit Developmen\n00:50:C2:51:10:00/36\tTecnaSrl\tTecna Srl\n00:50:C2:51:20:00/36\tLinearAc\tLinear Acoustic, Inc\n00:50:C2:51:30:00/36\tGenieNet\tGenie Network Resource Management Inc.\n00:50:C2:51:40:00/36\tTadianEl\tTadian Electronics Systems LTD\n00:50:C2:51:50:00/36\tMonaghan\tMonaghan Engineering, Inc.\n00:50:C2:51:60:00/36\tSowaElec\tSowa Electric Co., Ltd.\n00:50:C2:51:70:00/36\tSolidSta\tSolid State Logic\n00:50:C2:51:80:00/36\tChristEl\tChrist Elektronik GmbH\n00:50:C2:51:90:00/36\tDbmcorp\tDBMCORP, Inc.\n00:50:C2:51:A0:00/36\tSpeastec\tSpeasTech, Inc.\n00:50:C2:51:B0:00/36\tBetaLase\tBeta Lasermike Ltd\n00:50:C2:51:C0:00/36\tToa\tTOA Systems\n00:50:C2:51:D0:00/36\tVelux\t\n00:50:C2:51:E0:00/36\tAlconTec\tAlcon Technologies\n00:50:C2:51:F0:00/36\tTraquair\tTraquair Data Systems, Inc.\n00:50:C2:52:00:00/36\tMccainTr\tMcCain Traffic Supply\n00:50:C2:52:10:00/36\tArisTech\tAris Technologies\n00:50:C2:52:20:00/36\tMarkIvId\tMark IV IDS Corp.\n00:50:C2:52:30:00/36\tAmrdecPr\tAMRDEC Prototype Integration Facility\n00:50:C2:52:40:00/36\tMotecPty\tMotec Pty Ltd\n00:50:C2:52:50:00/36\tVastech\t\n00:50:C2:52:60:00/36\tAcSRO\tAC SYSTEMS, s.r.o.\n00:50:C2:52:70:00/36\tIrtrans\tIRTrans GmbH\n00:50:C2:52:80:00/36\tTattileS\tTattile srl\n00:50:C2:52:90:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:52:A0:00/36\tOmnitron\tOmnitronics Pty Ltd\n00:50:C2:52:B0:00/36\tSiconSrl\tSicon srl\n00:50:C2:52:C0:00/36\tVitecMul\tVitec Multimedia\n00:50:C2:52:D0:00/36\tSmartcom\tSmartcom-Bulgaria AD\n00:50:C2:52:E0:00/36\tDspDesig\tDsp Design\n00:50:C2:52:F0:00/36\tGesellsc\tGesellschaft für  Rationalisierung und Rechentechnik mbH\n00:50:C2:53:00:00/36\tInnovati\tInnovation, Institute, Inc\n00:50:C2:53:10:00/36\tOrionTec\tOrion Technologies,LLC\n00:50:C2:53:20:00/36\tNve\tNVE Corporation\n00:50:C2:53:30:00/36\tNanshanb\tNanShanBridge Co.Ltd\n00:50:C2:53:40:00/36\tHyundaiJ\tHyundai J. Comm\n00:50:C2:53:50:00/36\tMmsServi\tMMS Servis s.r.o.\n00:50:C2:53:60:00/36\tC2Diagno\tC2 DIAGNOSTICS\n00:50:C2:53:70:00/36\tDstContr\tDst Control Ab\n00:50:C2:53:80:00/36\tEthertek\tEtherTek Circuits\n00:50:C2:53:90:00/36\tDetectio\tDetection Technology Inc.\n00:50:C2:53:A0:00/36\tImageCon\tImage Control Design Limited\n00:50:C2:53:B0:00/36\tTeleks\tTeleks Co. Ltd.\n00:50:C2:53:C0:00/36\tMarposs\tMarposs SPA\n00:50:C2:53:D0:00/36\tDigitalC\tDigital communications Technologies\n00:50:C2:53:E0:00/36\tHoneywel\tHoneywell\n00:50:C2:53:F0:00/36\tEllipsBV\tEllips B.V.\n00:50:C2:54:00:00/36\tMesureCo\tMesure Controle Commande\n00:50:C2:54:10:00/36\tWavesSys\tWaves System\n00:50:C2:54:20:00/36\tAvermedi\tAVerMedia Technologies, Inc.\n00:50:C2:54:30:00/36\tDigiSesn\tDigi Sesn Ag\n00:50:C2:54:40:00/36\tZetera\t\n00:50:C2:54:50:00/36\tSecuinfo\tSecuInfo Co., Ltd.\n00:50:C2:54:60:00/36\tUniversi\tUniversidad de Chile Facultad de Medicina\n00:50:C2:54:70:00/36\tBlankomA\tBLANKOM Antennentechnik GmbH\n00:50:C2:54:80:00/36\tITWBetap\tI.T.W. Betaprint\n00:50:C2:54:90:00/36\tNetsyntS\tNetsynt S.p.A.\n00:50:C2:54:A0:00/36\tIptcTech\tIPTC Tech. Comm. AB\n00:50:C2:54:B0:00/36\tInnopsys\t\n00:50:C2:54:C0:00/36\tSintecno\tSintecnos srl\n00:50:C2:54:D0:00/36\tSilentSy\tSilent System\n00:50:C2:54:E0:00/36\tConverge\tConvergent Design\n00:50:C2:54:F0:00/36\tValtroni\tValtronic SA\n00:50:C2:55:00:00/36\tLjuAutom\tLJU Automatisierungstechnik GmbH\n00:50:C2:55:10:00/36\tInnovati\tInnovative Neurotroncs\n00:50:C2:55:20:00/36\tElfiq\tElfiq Inc.\n00:50:C2:55:30:00/36\tAthSyste\tATH system\n00:50:C2:55:40:00/36\tWeinzier\tWeinzierl Engineering GmbH\n00:50:C2:55:50:00/36\tControlA\tControl Alternative Solutions, Inc.\n00:50:C2:55:60:00/36\tFreiburg\tFreiburger BlickZentrum\n00:50:C2:55:70:00/36\tNetcomse\tNetcomsec Co Ltd\n00:50:C2:55:80:00/36\tBedoElek\tBedo Elektronik GmbH\n00:50:C2:55:90:00/36\tFailSafe\tFail Safe Solutions LLC\n00:50:C2:55:A0:00/36\tValde\tValde Systems, Inc.\n00:50:C2:55:B0:00/36\tMatrixTe\tMatrix Telecom Pvt. Ltd.\n00:50:C2:55:C0:00/36\tAds-Tec\tads-tec GmbH\n00:50:C2:55:D0:00/36\tAcdElekt\tACD Elektronik GmbH\n00:50:C2:55:E0:00/36\tHanzasEl\tHanzas Elektronika, Sia\n00:50:C2:55:F0:00/36\tMoogBroa\tMoog Broad Reach\n00:50:C2:56:00:00/36\tProconEl\tProcon Electronics\n00:50:C2:56:10:00/36\tSeitecEl\tSeitec Elektronik GmbH\n00:50:C2:56:20:00/36\tC21\tC21 Systems Limited\n00:50:C2:56:30:00/36\tOrtratSL\tOrtrat, S.L.\n00:50:C2:56:40:00/36\tLastMile\tLast Mile Gear\n00:50:C2:56:50:00/36\tWorkpowe\tWORKPOWER TECNOLOGIA ELETRONICA LTDA-EPP\n00:50:C2:56:60:00/36\tUbinetsy\tubinetsys.co..ltd\n00:50:C2:56:70:00/36\tTess\tTess GmbH\n00:50:C2:56:80:00/36\tGeofocus\tGeoFocus, LLC\n00:50:C2:56:90:00/36\tTwinwinT\tTwinwin Technplogy Co.,Ltd.\n00:50:C2:56:A0:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n00:50:C2:56:B0:00/36\tDatatonU\tDataton Utvecklings AB\n00:50:C2:56:C0:00/36\tTargeted\tTargeted Technologies, LLC\n00:50:C2:56:D0:00/36\tComputro\tComputrol Fuel Systems Inc.\n00:50:C2:56:E0:00/36\tLab-ElEl\tLAB-EL ELEKTRONIKA LABORATORYJNA S.J.\n00:50:C2:56:F0:00/36\tGmaLlc\tGma, Llc\n00:50:C2:57:00:00/36\tEllexMed\tEllex Medical Pty Ltd\n00:50:C2:57:10:00/36\tOberonSe\tOberon Service srl\n00:50:C2:57:20:00/36\tChellIns\tChell Instruments Ltd\n00:50:C2:57:30:00/36\tDatamicr\tDATAMICRO Co., Ltd.\n00:50:C2:57:40:00/36\tIngenier\tIngeniería AlmudÃ­ S.L.\n00:50:C2:57:50:00/36\tSolystic\t\n00:50:C2:57:60:00/36\tVisi-Tec\tVisi-tech Systems Ltd\n00:50:C2:57:70:00/36\tAdvanced\tAdvanced Software Technologies\n00:50:C2:57:80:00/36\tDelphiDi\tDelphi Display Systems, Inc.\n00:50:C2:57:90:00/36\tGastager\tGastager Systemtechnik GmbH\n00:50:C2:57:A0:00/36\tNventSch\tnVent, Schroff GmbH\n00:50:C2:57:B0:00/36\tPtswitch\t\n00:50:C2:57:C0:00/36\tÉolane\t\n00:50:C2:57:D0:00/36\tSierraVi\tSierra Video Systems\n00:50:C2:57:E0:00/36\tDigitalW\tDigital Way\n00:50:C2:57:F0:00/36\tOrderite\tOrderite, Inc.\n00:50:C2:58:00:00/36\tBuyangEl\tBuyang Electronics Industrial co.,Ltd.\n00:50:C2:58:10:00/36\tDevitech\tDevitech ApS\n00:50:C2:58:20:00/36\tAllsun\tAllSun A/S\n00:50:C2:58:30:00/36\tJungerAu\tJunger Audio-Studiotechnik GmbH\n00:50:C2:58:40:00/36\tToyotaMo\tToyota Motorsport GmbH\n00:50:C2:58:50:00/36\tWireless\tWireless Cables Inc.\n00:50:C2:58:60:00/36\tGenetix\tGenetix Ltd\n00:50:C2:58:70:00/36\tDynalco\t\n00:50:C2:58:80:00/36\tFederalE\tFederal Electronics\n00:50:C2:58:90:00/36\tHoribaAb\tHoriba Abx Sas\n00:50:C2:58:A0:00/36\tDixellSP\tDixell S.p.a.\n00:50:C2:58:B0:00/36\tInnovati\tInnovative Dynamics GmbH\n00:50:C2:58:C0:00/36\tLatticeS\tLattice Semiconductor Corp. (LPA)\n00:50:C2:58:D0:00/36\tZao\t\n00:50:C2:58:E0:00/36\tPennyGil\tPenny & Giles Aerospace Ltd\n00:50:C2:58:F0:00/36\tXoipPty\tXoIP Systems Pty Ltd\n00:50:C2:59:00:00/36\tEmMotors\tEM Motorsport Ltd\n00:50:C2:59:10:00/36\tGrosveno\tGrosvenor Technology Ltd\n00:50:C2:59:20:00/36\tPalodexG\tPaloDEx Group Oy\n00:50:C2:59:30:00/36\tBroadlig\tBroadlight\n00:50:C2:59:40:00/36\tPixelVel\tPixel Velocity, Inc\n00:50:C2:59:50:00/36\tCallpod\tCallpod, Inc.\n00:50:C2:59:60:00/36\tSpansion\t\n00:50:C2:59:70:00/36\tNautel\tNautel Limited\n00:50:C2:59:80:00/36\tBundesam\tBundesamt für Strahlenschutz\n00:50:C2:59:90:00/36\tFenTechn\tFen Technology Limited\n00:50:C2:59:A0:00/36\tMultitro\tMultiTrode Pty Ltd\n00:50:C2:59:B0:00/36\tSapec\t\n00:50:C2:59:C0:00/36\tDelsatGr\tDelsat Group S.A.\n00:50:C2:59:D0:00/36\tDssNetwo\tDSS Networks, Inc.\n00:50:C2:59:E0:00/36\tLegerity\t\n00:50:C2:59:F0:00/36\tAds-Tec\tads-tec GmbH\n00:50:C2:5A:00:00/36\tRudolphT\tRudolph Technologies, Inc.\n00:50:C2:5A:10:00/36\tVestfold\tVestfold Butikkdata AS\n00:50:C2:5A:20:00/36\tInet\tiNET Systems Inc.\n00:50:C2:5A:30:00/36\tLumelSA\tLumel S.A.\n00:50:C2:5A:40:00/36\tFederalS\tFederal State Unitary Enterprise Experimental Factory for Sc\n00:50:C2:5A:50:00/36\tEquiposD\tEquipos de Telecomunicación  Optoelectronicos, S.A.\n00:50:C2:5A:60:00/36\tPlasticL\tPlastic Logic\n00:50:C2:5A:70:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:5A:80:00/36\tEtapNv\tEtap Nv\n00:50:C2:5A:90:00/36\tAycTelec\tAYC Telecom Ltd\n00:50:C2:5A:A0:00/36\tTransenn\tTransenna AB\n00:50:C2:5A:B0:00/36\tEatonEle\tEaton Corp. Electrical Group Data Center Solutions - Pulizzi\n00:50:C2:5A:C0:00/36\tKinemetr\tKinemetrics, Inc.\n00:50:C2:5A:D0:00/36\tEmcom\tEmcom Systems\n00:50:C2:5A:E0:00/36\tCpsEurop\tCps Europe B.V.\n00:50:C2:5A:F0:00/36\tDorletSa\tDorlet Sau\n00:50:C2:5B:00:00/36\tIncotec\tINCOTEC GmbH\n00:50:C2:5B:10:00/36\tRosta\tRosta Ltd\n00:50:C2:5B:20:00/36\tSyntroni\tSyntronic AB\n00:50:C2:5B:30:00/36\tHitecomS\tHITECOM System\n00:50:C2:5B:40:00/36\tTerrasci\tTerrascience Systems Ltd.\n00:50:C2:5B:50:00/36\tRafael\t\n00:50:C2:5B:60:00/36\tKontronB\tKontron (BeiJing) Technology Co.,Ltd\n00:50:C2:5B:70:00/36\tAvermedi\tAVerMedia Technologies, Inc.\n00:50:C2:5B:80:00/36\tWestfali\tWestfaliaSurge GmbH\n00:50:C2:5B:90:00/36\tTaiwanVi\tTaiwan Video & Monitor\n00:50:C2:5B:A0:00/36\tSaiaBurg\tSAIA Burgess Controls AG\n00:50:C2:5B:B0:00/36\tUnicTech\tUnic Technologies Inc\n00:50:C2:5B:C0:00/36\tGuangzho\tGuangzhou Hui Si Information Technologies Inc.\n00:50:C2:5B:D0:00/36\tNomusCom\tNomus Comm Systems\n00:50:C2:5B:E0:00/36\tCardAcce\tCard Access Services Pty Ltd\n00:50:C2:5B:F0:00/36\tTechimpS\tTechimp Systems S.r.l.\n00:50:C2:5C:00:00/36\tPyott-Bo\tPyott-Boone Electronics\n00:50:C2:5C:10:00/36\tRLDrake\tR. L. Drake Company\n00:50:C2:5C:20:00/36\tIntuitiv\tIntuitive Surgical, Inc\n00:50:C2:5C:30:00/36\tKsSystem\tKS System GmbH\n00:50:C2:5C:40:00/36\tPromik\tProMik GmbH\n00:50:C2:5C:50:00/36\tRadiantI\tRadiant Imaging, Inc.\n00:50:C2:5C:60:00/36\tTechnisc\tTechnische Alternative GmbH\n00:50:C2:5C:70:00/36\tInsyncTe\tInSync Technology Ltd\n00:50:C2:5C:80:00/36\tGeorgiaT\tGeorgia Tech Research Institute\n00:50:C2:5C:90:00/36\tShenzhen\tShenzhen Quanlong Technique Co.Ltd\n00:50:C2:5C:A0:00/36\tBuyangEl\tBuyang Electronics Industrial Co., Ltd.\n00:50:C2:5C:B0:00/36\tKoboldSi\tKobold Sistemi s.r.l.\n00:50:C2:5C:C0:00/36\tEnseo\tEnseo, Inc.\n00:50:C2:5C:D0:00/36\tRadaElec\tRADA Electronics Industries Ltd.\n00:50:C2:5C:E0:00/36\tRokeMano\tRoke Manor Research Ltd\n00:50:C2:5C:F0:00/36\tInnomedM\tInnomed Medical Inc\n00:50:C2:5D:00:00/36\tAutomata\tAutomata Spa\n00:50:C2:5D:10:00/36\tMeucciSo\tMeucci Solutions\n00:50:C2:5D:20:00/36\tDa-Desig\tDA-Design Oy\n00:50:C2:5D:30:00/36\tWexiodis\tWexiodisk AB\n00:50:C2:5D:40:00/36\tBuyangEl\tBuyang Electronics Industrial Co., Ltd.\n00:50:C2:5D:50:00/36\tCannonTe\tCannon Technologies\n00:50:C2:5D:60:00/36\tBioacces\tBioAccess Tecnologia em Biometria Ltda.\n00:50:C2:5D:70:00/36\tSynrad\tSynrad, Inc.\n00:50:C2:5D:80:00/36\tTechnifo\tTechnifor Sas\n00:50:C2:5D:90:00/36\tCrimsonM\tCrimson Microsystems, Inc.\n00:50:C2:5D:A0:00/36\tTonnaEle\tTonna Electronique\n00:50:C2:5D:B0:00/36\tSecureSe\tSecure Systems & Services\n00:50:C2:5D:C0:00/36\tRmMichae\tRM Michaelides Software & Elektronik GmbH\n00:50:C2:5D:D0:00/36\tSomerdat\tSomerData ltd\n00:50:C2:5D:E0:00/36\tMagalSen\tMagal Senstar Inc.\n00:50:C2:5D:F0:00/36\tGnutek\tGnutek Ltd.\n00:50:C2:5E:00:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:5E:10:00/36\tIttiamP\tIttiam Systems (P) Ltd\n00:50:C2:5E:20:00/36\tPyramidC\tPYRAMID Computer GmbH\n00:50:C2:5E:30:00/36\tComputec\tComputechnic AG\n00:50:C2:5E:40:00/36\tBuyangEl\tBuyang Electronics Industrial Co., Ltd.\n00:50:C2:5E:50:00/36\tStresste\tStresstech OY\n00:50:C2:5E:60:00/36\tMusatel\t\n00:50:C2:5E:70:00/36\tEadsTest\tEADS TEST & SERVICES\n00:50:C2:5E:80:00/36\tInfo-Chi\tInfo-Chip Communications Ltd.\n00:50:C2:5E:90:00/36\tMicroTec\tMicro Technology Services Inc.\n00:50:C2:5E:A0:00/36\tMicroEle\tMicro Elektronische Producten\n00:50:C2:5E:B0:00/36\tGarperTe\tGarper Telecomunicaciones, S.L.\n00:50:C2:5E:C0:00/36\tAsisTech\tASiS Technologies Pte Ltd\n00:50:C2:5E:D0:00/36\tAquarott\tAquarotter A Franke Company\n00:50:C2:5E:E0:00/36\tCondre\tCondre Corporation\n00:50:C2:5E:F0:00/36\tPikkerto\tpikkerton GmbH\n00:50:C2:5F:00:00/36\tDiasInfr\tDIAS Infrared GmbH\n00:50:C2:5F:10:00/36\tTechnoma\tTechnomarine JSC\n00:50:C2:5F:20:00/36\tEsemGrün\tESEM Grünau GmbH & Co. KG\n00:50:C2:5F:30:00/36\tPosnetPo\tPOSNET Polska S.A.\n00:50:C2:5F:40:00/36\tTeamproj\tTeamProjects BV\n00:50:C2:5F:50:00/36\tGenesis\tGenesis inc\n00:50:C2:5F:60:00/36\tCambridg\tCambridge Consultants Ltd\n00:50:C2:5F:70:00/36\tMetrolog\tMetrologic Group\n00:50:C2:5F:80:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n00:50:C2:5F:90:00/36\tRotharyS\tROTHARY Solutions AG\n00:50:C2:5F:A0:00/36\tLeaDOO\tLEA d.o.o.\n00:50:C2:5F:B0:00/36\tAll-Syst\tAll-Systems Electronics Pty Ltd\n00:50:C2:5F:C0:00/36\tFilmligh\tFilmLight Limited\n00:50:C2:5F:D0:00/36\tMegElect\tMEG Electronic Inc.\n00:50:C2:5F:E0:00/36\tNovacomm\tNovacomm Ltda\n00:50:C2:5F:F0:00/36\tGazelleM\tGazelle Monitoring Systems\n00:50:C2:60:00:00/36\tProtecFi\tProtec Fire Detection plc\n00:50:C2:60:10:00/36\tMedavant\tMedAvant Healthcare\n00:50:C2:60:20:00/36\tChauvinA\tChauvin Arnoux\n00:50:C2:60:30:00/36\tCerus\tCerus Corp\n00:50:C2:60:40:00/36\tHcjbGlob\tHCJB Global\n00:50:C2:60:50:00/36\tSwistec\tSwistec GmbH\n00:50:C2:60:60:00/36\tShenzhen\tShenzhen Huazhong Technology Inc\n00:50:C2:60:70:00/36\tTelecomF\tTelecom FM\n00:50:C2:60:80:00/36\tSilexInd\tSilex Industrial Automation Ltd.\n00:50:C2:60:90:00/36\tToptech\tToptech Systems, Inc.\n00:50:C2:60:A0:00/36\tGradualT\tGradual Tecnologia Ltda.\n00:50:C2:60:B0:00/36\tShanghai\tShanghai QianJin Electronic Equipment Co. Ltd.\n00:50:C2:60:C0:00/36\tIdentic\tIdentic Ab\n00:50:C2:60:D0:00/36\tSiconSrl\tSicon srl\n00:50:C2:60:E0:00/36\tAutomati\tAutomation and Control Technology, Inc.\n00:50:C2:60:F0:00/36\tKommunik\tKommunikations- & Sicherheitssysteme Gesellschaft m.b.H\n00:50:C2:61:00:00/36\tFdtManuf\tFDT Manufacturing, LLC\n00:50:C2:61:10:00/36\tBrookhav\tBrookhaven National Laboratory\n00:50:C2:61:20:00/36\tIhp-Gmbh\t\n00:50:C2:61:30:00/36\tTattileS\tTattile Srl\n00:50:C2:61:40:00/36\tProserv\t\n00:50:C2:61:50:00/36\tAxisElec\tAxis Electronics\n00:50:C2:61:60:00/36\tHoneywel\tHoneywell\n00:50:C2:61:70:00/36\tNarinet\tNarinet, Inc.\n00:50:C2:61:80:00/36\tIntergra\tIntergrated Security Mfg. Ltd\n00:50:C2:61:90:00/36\tLinkbit\tLinkbit, Inc.\n00:50:C2:61:A0:00/36\tCommunic\tCommunication Components Inc.\n00:50:C2:61:B0:00/36\tNciTechn\tNCI Technologies Inc.\n00:50:C2:61:C0:00/36\tTestpro\tTestPro Systems, Inc.\n00:50:C2:61:D0:00/36\tSutus\tSutus Inc\n00:50:C2:61:E0:00/36\tLesterEl\tLester Electronics Ltd\n00:50:C2:61:F0:00/36\tImagineC\tImagine Communications\n00:50:C2:62:00:00/36\tHarman/B\tHarman/Becker Automotive Systems GmbH\n00:50:C2:62:10:00/36\tVersion-\tVersion-T\n00:50:C2:62:20:00/36\t2nTeleko\t2N TELEKOMUNIKACE a.s.\n00:50:C2:62:30:00/36\tSafeline\tSafeline Sl\n00:50:C2:62:40:00/36\tComtestN\tComtest Networks\n00:50:C2:62:50:00/36\tEbneuro\tEBNeuro SpA\n00:50:C2:62:60:00/36\tWinsysIn\tWinsys Informatica ltda\n00:50:C2:62:70:00/36\tJunglesy\tJungleSystem Co., Ltd.\n00:50:C2:62:80:00/36\tDareDeve\tDARE Development\n00:50:C2:62:90:00/36\tMacdonal\tMacDonald Humfrey (Products) Ltd\n00:50:C2:62:A0:00/36\tPrismaEn\tPrisma Engineering srl\n00:50:C2:62:B0:00/36\tFirstCon\tFirst Control Systems AB\n00:50:C2:62:C0:00/36\tAirmatri\tAirMatrix, Inc.\n00:50:C2:62:D0:00/36\tProconEl\tProcon Electronics\n00:50:C2:62:E0:00/36\tTdmIngén\tTDM Ingénierie\n00:50:C2:62:F0:00/36\tQes\t\n00:50:C2:63:00:00/36\tAuroraFl\tAurora Flight Sciences\n00:50:C2:63:10:00/36\tFraunhof\tFraunhofer IIS\n00:50:C2:63:20:00/36\tRosetech\tRoseTechnology A/S\n00:50:C2:63:30:00/36\tRiceUniv\tRice University\n00:50:C2:63:40:00/36\tSohon\tSohon Inc\n00:50:C2:63:50:00/36\tShockfis\tShockfish SA\n00:50:C2:63:60:00/36\tDspace\tdSPACE GmbH\n00:50:C2:63:70:00/36\tOmnitrol\tOmnitrol Networks, Inc.\n00:50:C2:63:80:00/36\tHungaroc\tHUNGAROCOM Telecommunication Ltd.\n00:50:C2:63:90:00/36\tQstreams\tQstreams Networks Inc.\n00:50:C2:63:A0:00/36\t3dsp\t3DSP Corporation\n00:50:C2:63:B0:00/36\tPowis\tPowis Corporation\n00:50:C2:63:C0:00/36\tDpictIma\tdPict Imaging, Inc.\n00:50:C2:63:D0:00/36\tIders\tIDERs Inc\n00:50:C2:63:E0:00/36\tT2Commun\tT2 Communication Ltd\n00:50:C2:63:F0:00/36\tSpeechTe\tSpeech Technology Center Limited\n00:50:C2:64:00:00/36\tIac\t\n00:50:C2:64:10:00/36\tNeoInfor\tNEO Information Systems Co., Ltd.\n00:50:C2:64:20:00/36\tStantonT\tStanton Technologies Sdn Bhd\n00:50:C2:64:30:00/36\tEnatel\tEnatel Limited\n00:50:C2:64:40:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:64:50:00/36\tSoftware\tThe Software Group Limited\n00:50:C2:64:60:00/36\tTrutouch\tTrutouch Technologies Inc\n00:50:C2:64:70:00/36\tR&DTechn\tR&D Technology Solutionz Limited\n00:50:C2:64:80:00/36\tFidelity\tFidelity Comtech, Inc.\n00:50:C2:64:90:00/36\tPan-Star\tPan-STARRS\n00:50:C2:64:A0:00/36\tCpqd\t\n00:50:C2:64:B0:00/36\tMangodsp\t\n00:50:C2:64:C0:00/36\tCis\tCIS Corporation\n00:50:C2:64:D0:00/36\tTeraInfo\tTera Information System Labs\n00:50:C2:64:E0:00/36\tNorthern\tNorthern Power\n00:50:C2:64:F0:00/36\tMaLighti\tMA Lighting Technology GmbH\n00:50:C2:65:00:00/36\tLiquidBr\tLiquid Breaker, LLC\n00:50:C2:65:10:00/36\tStaer\tStaer Spa\n00:50:C2:65:20:00/36\tWidecoSw\tWideco Sweden AB\n00:50:C2:65:30:00/36\tDobleEng\tDoble Engineering\n00:50:C2:65:40:00/36\tPalodexG\tPaloDEx Group Oy\n00:50:C2:65:50:00/36\tPhysikIn\tPhysik Instrumente (PI) GmbH&Co.KG\n00:50:C2:65:60:00/36\tLdaAudio\tLDA Audio Video Profesional\n00:50:C2:65:70:00/36\tMonytelS\tMonytel S.A.\n00:50:C2:65:80:00/36\tOpenpkg\tOpenPKG GmbH\n00:50:C2:65:90:00/36\tDorsettT\tDorsett Technologies, Inc.\n00:50:C2:65:A0:00/36\tHisstema\tHisstema AB\n00:50:C2:65:B0:00/36\tSilverbr\tSilverbrook Research\n00:50:C2:65:C0:00/36\tVtzDOO\tVTZ d.o.o.\n00:50:C2:65:D0:00/36\tRedfoneC\tRedfone Communications LLC\n00:50:C2:65:E0:00/36\tCantion\tCantion A/S\n00:50:C2:65:F0:00/36\tInvocon\tInvocon, Inc.\n00:50:C2:66:00:00/36\tIzisoft\t\n00:50:C2:66:10:00/36\tPCE\tP.C.E.\n00:50:C2:66:20:00/36\tAsiaPaci\tAsia Pacific Card & System Sdn Bhd\n00:50:C2:66:30:00/36\tCoe\tCOE Limited\n00:50:C2:66:40:00/36\tWestelWi\tWestel Wireless Systems\n00:50:C2:66:50:00/36\tNetworks\tNetworkSound, Inc\n00:50:C2:66:60:00/36\tXworksNz\tXworks NZ Limited\n00:50:C2:66:70:00/36\tVocality\tVocality International Ltd\n00:50:C2:66:80:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:66:90:00/36\tDspDesig\tDsp Design\n00:50:C2:66:A0:00/36\tAbbTrans\tABB Transmission and Distribution Automation Equipment (Xiamen) Co., Ltd.\n00:50:C2:66:B0:00/36\tFlsystem\t\n00:50:C2:66:C0:00/36\tDesy\t\n00:50:C2:66:D0:00/36\tDigitekS\tDIGITEK S.p.A.\n00:50:C2:66:E0:00/36\tLinear\tLinear Systems Ltd.\n00:50:C2:66:F0:00/36\tNilan\tNilan A/S\n00:50:C2:67:00:00/36\tNaimAudi\tNaim Audio\n00:50:C2:67:10:00/36\tSkylineP\tSkyline Products, Inc\n00:50:C2:67:20:00/36\tDdsElett\tDDS Elettronica srl\n00:50:C2:67:30:00/36\tFerrariE\tFerrari electronic AG\n00:50:C2:67:40:00/36\tProtechO\tProtech Optronics Co., Ltd.\n00:50:C2:67:50:00/36\tKentonRe\tKenton Research Ltd\n00:50:C2:67:60:00/36\tEds\t\n00:50:C2:67:70:00/36\tProconxP\tProconX Pty Ltd\n00:50:C2:67:80:00/36\tIhm\t\n00:50:C2:67:90:00/36\tIndustri\tIndustrial Vacuum Systems\n00:50:C2:67:A0:00/36\tCc\tCC Systems AB\n00:50:C2:67:B0:00/36\tSpartonE\tSparton Electronics\n00:50:C2:67:C0:00/36\tGogoBa\tGogo BA\n00:50:C2:67:D0:00/36\tEsaMesst\tESA  Messtechnik GmbH\n00:50:C2:67:E0:00/36\tSaiaBurg\tSAIA Burgess Controls AG\n00:50:C2:67:F0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:68:00:00/36\tHoneyNet\tHoney Network Research Limited\n00:50:C2:68:10:00/36\tOwasysAd\tOwasys Advanced Wireless Devices\n00:50:C2:68:20:00/36\tCommet\tCommet AB\n00:50:C2:68:30:00/36\tMeggittS\tMEGGITT Safety System\n00:50:C2:68:40:00/36\tReasonTe\tREASON Tecnologia S.A.\n00:50:C2:68:50:00/36\tDatamars\tDatamars SA\n00:50:C2:68:60:00/36\tAnnaxAnz\tANNAX Anzeigesysteme GmbH\n00:50:C2:68:70:00/36\tAccessSp\tAccess Specialties, Inc\n00:50:C2:68:80:00/36\tElkProdu\tElk Products\n00:50:C2:68:90:00/36\tRfCode\tRF Code, Inc.\n00:50:C2:68:A0:00/36\tZhuhaiJi\tZhuhai Jiahe Electronics Co.,LTD\n00:50:C2:68:B0:00/36\tSimtek\tSimtek Inc.\n00:50:C2:68:C0:00/36\tIsochron\tIsochron Inc\n00:50:C2:68:D0:00/36\tCxrLarus\tCXR Larus Corporation\n00:50:C2:68:E0:00/36\tSelco\t\n00:50:C2:68:F0:00/36\tBertroni\tBertronic Srl\n00:50:C2:69:00:00/36\tGhlBerha\tGHL Systems Berhad\n00:50:C2:69:10:00/36\tInteropi\tInteropix, Inc.\n00:50:C2:69:20:00/36\tMateMedi\tMate Media Access Technologies\n00:50:C2:69:30:00/36\tTechComm\tTech Comm, Inc.\n00:50:C2:69:40:00/36\tInitelSr\tInitel srl\n00:50:C2:69:50:00/36\tPurelink\tPurelink Technology, inc.\n00:50:C2:69:60:00/36\tCasabyte\tCasabyte Inc.\n00:50:C2:69:70:00/36\tMonarchI\tMonarch Instrument\n00:50:C2:69:80:00/36\tNavtechR\tNavtech Radar Ltd\n00:50:C2:69:90:00/36\tBulleten\tBulletendpoints Enterprises Inc\n00:50:C2:69:A0:00/36\tStoretec\tStoreTech Limited\n00:50:C2:69:B0:00/36\tTsienUk\tTsien (UK) Ltd\n00:50:C2:69:C0:00/36\tBugLabs\tBug Labs, Inc.\n00:50:C2:69:D0:00/36\tDvation\tDvation.co.,Ltd\n00:50:C2:69:E0:00/36\tIdeus\tIdeus AB\n00:50:C2:69:F0:00/36\tTotalRfL\tTotal RF, LLC\n00:50:C2:6A:00:00/36\tGfpLabSR\tGFP Lab S.r.l.\n00:50:C2:6A:10:00/36\tPricol\tPricol Limited\n00:50:C2:6A:20:00/36\tCadiScie\tCadi Scientific Pte Ltd\n00:50:C2:6A:30:00/36\tCreatech\tCreaTech Electronics Co.\n00:50:C2:6A:40:00/36\tTeletask\t\n00:50:C2:6A:50:00/36\tEatonFhf\tEATON FHF Funke + Huster Fernsig GmbH\n00:50:C2:6A:60:00/36\tVictoryC\tVictory Concept Industries Ltd.\n00:50:C2:6A:70:00/36\tHoerIndu\tHoer GmbH & Co. Industrie-Electronic KG\n00:50:C2:6A:80:00/36\tDelcanTe\tDelcan Technologies, Inc\n00:50:C2:6A:90:00/36\tArmidaTe\tArmida Technologies Corporation\n00:50:C2:6A:A0:00/36\tIfox-Ind\tIfox - Industria e Comercio Ltda\n00:50:C2:6A:B0:00/36\tSoftware\tSoftwareentwicklung\n00:50:C2:6A:C0:00/36\tThalesUk\tThales UK\n00:50:C2:6A:D0:00/36\tHeim-Bür\tHeim- & Bürokommunikation\n00:50:C2:6A:E0:00/36\tQualisys\tQualisys AB\n00:50:C2:6A:F0:00/36\tNanoradi\tNanoradio AB\n00:50:C2:6B:00:00/36\tSmartKey\tSmart Key International Limited\n00:50:C2:6B:10:00/36\tBurkTech\tBurk Technology\n00:50:C2:6B:20:00/36\tEdgeware\tEdgeware AB\n00:50:C2:6B:30:00/36\t4rfCommu\t4RF Communications Ltd\n00:50:C2:6B:40:00/36\tSomesca\t\n00:50:C2:6B:50:00/36\tTriumf\t\n00:50:C2:6B:60:00/36\tCommodas\tCommoDaS GmbH\n00:50:C2:6B:70:00/36\tSystemLs\tSystem LSI CO.Ltd.\n00:50:C2:6B:80:00/36\tEpecOy\tEpec Oy\n00:50:C2:6B:90:00/36\tUnipo\tunipo GmbH\n00:50:C2:6B:A0:00/36\tFertronC\tFertron Controle e Automacao Industrial Ltda.\n00:50:C2:6B:B0:00/36\tEleMagSR\tEle.Mag S.r.l.\n00:50:C2:6B:C0:00/36\tParaytec\tParaytec Ltd\n00:50:C2:6B:D0:00/36\tMitronOy\tMitron Oy\n00:50:C2:6B:E0:00/36\tEstec\tESTEC Co.,Ltd.\n00:50:C2:6B:F0:00/36\tOptoplan\tOptoplan as\n00:50:C2:6C:00:00/36\tGlosterS\tGloster Sante Europe\n00:50:C2:6C:10:00/36\tRadiusSw\tRADIUS Sweden AB\n00:50:C2:6C:20:00/36\tHoseotel\tHoseoTelnet Inc...\n00:50:C2:6C:30:00/36\tItracs\tiTRACS Corporation\n00:50:C2:6C:40:00/36\tRexxon\tREXXON GmbH\n00:50:C2:6C:50:00/36\tOerlikon\tOerlikon Contraves AG\n00:50:C2:6C:60:00/36\tMedavant\tMedAvant Healthcare\n00:50:C2:6C:70:00/36\tQuickcir\tQuickCircuit Ltd.\n00:50:C2:6C:80:00/36\tB&SMedia\tB&S MEDIA Co., LTD.\n00:50:C2:6C:90:00/36\tNetami\t\n00:50:C2:6C:A0:00/36\tDynamicH\tDynamic Hearing Pty Ltd\n00:50:C2:6C:B0:00/36\tStreamPr\tStream Processors\n00:50:C2:6C:C0:00/36\tWidmerTi\tWidmer Time Recorder Co., Inc.\n00:50:C2:6C:D0:00/36\tRgm\tRgm Spa\n00:50:C2:6C:E0:00/36\tEmitallS\tEMITALL Surveillance S.A,\n00:50:C2:6C:F0:00/36\tMicroway\t\n00:50:C2:6D:00:00/36\tEdsSyste\tEDS Systemtechnik\n00:50:C2:6D:10:00/36\tSchnick-\tSchnick-Schnack-Systems GmbH\n00:50:C2:6D:20:00/36\tLumistar\tLumistar Incorporated\n00:50:C2:6D:30:00/36\tDigisens\tDigiSensory technologies Pty Ltd\n00:50:C2:6D:40:00/36\tEtaniEle\tEtani Electronics Co.,Ltd.\n00:50:C2:6D:50:00/36\tBeckerEl\tBecker Electronics GmbH\n00:50:C2:6D:60:00/36\tAdlElect\tADL Electronics Ltd.\n00:50:C2:6D:70:00/36\tMavenirS\tMavenir System, Inc.\n00:50:C2:6D:80:00/36\tBlHealth\tBL Healthcare, Inc.\n00:50:C2:6D:90:00/36\tAjecoOy\tAjeco Oy\n00:50:C2:6D:A0:00/36\tTechnoFi\tTechno Fittings S.r.l.\n00:50:C2:6D:B0:00/36\tGebhardt\tGebhardt Ventilatoren GmbH\n00:50:C2:6D:C0:00/36\tL-3Commu\tL-3 Communications Mobile-Vision, Inc.\n00:50:C2:6D:D0:00/36\tZmicro\tZmicro Systems Inc\n00:50:C2:6D:E0:00/36\tLaserToo\tLaser Tools & Technics Corp.\n00:50:C2:6D:F0:00/36\tQrScienc\tQR Sciences Ltd\n00:50:C2:6E:00:00/36\tFirsttru\tFIRSTTRUST Co.,Ltd.\n00:50:C2:6E:10:00/36\tNewonsys\tNewOnSys Ltd.\n00:50:C2:6E:20:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:6E:30:00/36\tMirosAs\tMiros AS\n00:50:C2:6E:40:00/36\tMangodsp\t\n00:50:C2:6E:50:00/36\tBoeckele\tBoeckeler Instruments, Inc.\n00:50:C2:6E:60:00/36\tLanetco\t\n00:50:C2:6E:70:00/36\tAceAxis\tAce Axis Limited\n00:50:C2:6E:80:00/36\tAnymax\t\n00:50:C2:6E:90:00/36\tBandoEle\tBando electronic communication Co.Lltd\n00:50:C2:6E:A0:00/36\tFirstecS\tFirstec Sa\n00:50:C2:6E:B0:00/36\tHarrison\tHarrison Audio, LLC\n00:50:C2:6E:C0:00/36\tNetistix\tNetistix Technologies Corporation\n00:50:C2:6E:D0:00/36\tSechanEl\tSechan Electronics, Inc.\n00:50:C2:6E:E0:00/36\tInteract\tInteractive Electronic Systems\n00:50:C2:6E:F0:00/36\tPneumopa\tPneumopartners LaenneXT SA\n00:50:C2:6F:00:00/36\tStanleyS\tStanley Security Solutions, Inc.\n00:50:C2:6F:10:00/36\tItsTelec\tITS Telecom\n00:50:C2:6F:20:00/36\tLaserEle\tLaser Electronics Ltd\n00:50:C2:6F:30:00/36\tE3switch\tE3Switch LLC\n00:50:C2:6F:40:00/36\tCryogeni\tCryogenic Control Systems, Inc.\n00:50:C2:6F:50:00/36\tKitronMi\tKitron Microelectronics AB\n00:50:C2:6F:60:00/36\tAvSatcom\tAV SatCom AS\n00:50:C2:6F:70:00/36\tInfoplan\tinfoplan Gesellschaftfür  Informationssysteme mbH\n00:50:C2:6F:80:00/36\tRvTechno\tRV Technology Limited\n00:50:C2:6F:90:00/36\tRevox\tRevox GmbH\n00:50:C2:6F:A0:00/36\tDcns\t\n00:50:C2:6F:B0:00/36\tWaveip\t\n00:50:C2:6F:C0:00/36\tActeSpZO\tActe Sp. z o.o.\n00:50:C2:6F:D0:00/36\tSaiaBurg\tSAIA Burgess Controls AG\n00:50:C2:6F:E0:00/36\tBlueOrig\tBlue Origin\n00:50:C2:6F:F0:00/36\tStMichae\tSt. Michael Strategies Inc.\n00:50:C2:70:00:00/36\tGem-MedS\tGEM-MED SL\n00:50:C2:70:10:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:70:20:00/36\tSpmInstr\tSPM Instrument AB\n00:50:C2:70:30:00/36\tSaeIt-Sy\tSAE IT-systems GmbH & Co. KG\n00:50:C2:70:40:00/36\tDiniGrou\tThe Dini Group, La Jolla inc.\n00:50:C2:70:50:00/36\tHauchBac\tHauch & Bach ApS\n00:50:C2:70:60:00/36\tDiodigiw\tDioDigiWorks. CO., LTD.\n00:50:C2:70:70:00/36\tDtechLab\tDTech Labs Inc\n00:50:C2:70:80:00/36\tSmartekD\tSmartek d.o.o.\n00:50:C2:70:90:00/36\tRoVeRLab\tRO.VE.R. Laboratories S.p.A\n00:50:C2:70:A0:00/36\tEfficien\tEfficient Channel Coding\n00:50:C2:70:B0:00/36\tBEARSolu\tB.E.A.R. Solutions (Australasia) Pty, Ltd\n00:50:C2:70:C0:00/36\tExertus\t\n00:50:C2:70:D0:00/36\tEla-Soft\tela-soft GmbH & Co. KG\n00:50:C2:70:E0:00/36\tAudicoOy\tAudico Systems Oy\n00:50:C2:70:F0:00/36\tZumbachE\tZumbach Electronic AG\n00:50:C2:71:00:00/36\tWhartonE\tWharton Electronics Ltd\n00:50:C2:71:10:00/36\tLinkitSR\tLinkit S.R.L.\n00:50:C2:71:20:00/36\tPasanSa\tPasan SA\n00:50:C2:71:30:00/36\t3dx-Ray\t3DX-Ray Limited\n00:50:C2:71:40:00/36\tTEAmSA\tT.E.Am., S. A.\n00:50:C2:71:50:00/36\tRiexinge\tRIEXINGER Elektronik\n00:50:C2:71:60:00/36\tMitrolSR\tMitrol S.R.L.\n00:50:C2:71:70:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n00:50:C2:71:80:00/36\tIllunisL\tillunis LLC\n00:50:C2:71:90:00/36\tEnnovati\tennovatis GmbH\n00:50:C2:71:A0:00/36\tLogusBro\tLogus Broadband Wireless Solutions Inc.\n00:50:C2:71:B0:00/36\tAdvaOpti\tADVA Optical Networking\n00:50:C2:71:C0:00/36\tElmec\tElmec Inc.\n00:50:C2:71:D0:00/36\tMgSRL\tMG s.r.l.\n00:50:C2:71:E0:00/36\tAskiIndu\tASKI Industrie Elektronik Ges.m.b.H.\n00:50:C2:71:F0:00/36\tAscTelec\tASC telecom AG\n00:50:C2:72:00:00/36\tColorado\tColorado Engineering Inc.\n00:50:C2:72:10:00/36\tSpectrum\tSpectrum Communications FZE\n00:50:C2:72:20:00/36\tCentricT\tCentric TSolve BV\n00:50:C2:72:30:00/36\tPowerEle\tPower Electronics Espana, S.L.\n00:50:C2:72:40:00/36\tHsc-Rege\tHSC-Regelungstechnik GmbH\n00:50:C2:72:50:00/36\tDspDesig\tDsp Design\n00:50:C2:72:60:00/36\tEtaSyste\teta systemi CKB\n00:50:C2:72:70:00/36\tPelwecky\tPelweckyj Videotechnik GmbH\n00:50:C2:72:80:00/36\tInterdig\tInterDigital Canada Ltd\n00:50:C2:72:90:00/36\tSpContro\tSP Controls, Inc\n00:50:C2:72:A0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:72:B0:00/36\tSequeste\tSequestered Solutions\n00:50:C2:72:C0:00/36\tRichardG\tRichard Griessbach Feinmechanik GmbH\n00:50:C2:72:D0:00/36\tPhysical\tPhysical Acoustics Corporation\n00:50:C2:72:E0:00/36\tSncfEimP\tSncf Eim Pays De Loire\n00:50:C2:72:F0:00/36\tPriority\tPriority Electronics Ltd\n00:50:C2:73:00:00/36\tHaberKoe\thaber & koenig electronics gmbh\n00:50:C2:73:10:00/36\tSpirentC\tSpirent Communications\n00:50:C2:73:20:00/36\tSchlumbe\tSchlumberger K.K.\n00:50:C2:73:30:00/36\tCimetric\tCimetrics Research Pty Ltd\n00:50:C2:73:40:00/36\tCardiome\tCardioMEMS Inc.\n00:50:C2:73:50:00/36\tAntLamp\tAnt Lamp, Inc\n00:50:C2:73:60:00/36\tNika\tNika Ltd\n00:50:C2:73:70:00/36\tTeradici\tTeradici Corporation\n00:50:C2:73:80:00/36\tMiracomT\tMiracom Technology Co., Ltd.\n00:50:C2:73:90:00/36\tTattileS\tTattile srl\n00:50:C2:73:A0:00/36\tNaturela\tNaturela Ltd.\n00:50:C2:73:B0:00/36\tOnAirNet\tOn Air Networks\n00:50:C2:73:C0:00/36\tSimicon\t\n00:50:C2:73:D0:00/36\tCryptiri\tcryptiris\n00:50:C2:73:E0:00/36\tQuantecN\tQuantec Networks GmbH\n00:50:C2:73:F0:00/36\tMedav\tMEDAV GmbH\n00:50:C2:74:00:00/36\tMcquayCh\tMcQuay China\n00:50:C2:74:10:00/36\tDain\t\n00:50:C2:74:20:00/36\tFantuzzi\tFantuzzi Reggiane\n00:50:C2:74:30:00/36\tElektro-\tElektro-Top 3000 Ltd.\n00:50:C2:74:40:00/36\tAvonaco\tAvonaco Systems, Inc.\n00:50:C2:74:50:00/36\tAcisa\t\n00:50:C2:74:60:00/36\tRealtron\tRealtronix Company\n00:50:C2:74:70:00/36\tCdsaDamN\tCDSA Dam Neck\n00:50:C2:74:80:00/36\tLetechni\tLetechnic Ltd\n00:50:C2:74:90:00/36\tAffolter\tAffolter Technologies SA\n00:50:C2:74:A0:00/36\tMonitorE\tMonitor Electronics Ltd\n00:50:C2:74:B0:00/36\tStar-Dun\tSTAR-Dundee Ltd\n00:50:C2:74:C0:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:74:D0:00/36\tBeceemCo\tBeceem Communications, Inc.\n00:50:C2:74:E0:00/36\tTronico\t\n00:50:C2:74:F0:00/36\tGermanTe\tGerman Technologies\n00:50:C2:75:00:00/36\tBrightli\tBrightlights Intellectual Property Ltd\n00:50:C2:75:10:00/36\tE&SEngin\te&s Engineering & Software GmbH\n00:50:C2:75:20:00/36\tLoberSA\tLober, S.A.\n00:50:C2:75:30:00/36\tAbb\t\n00:50:C2:75:40:00/36\tAbeo\tAbeo Corporation\n00:50:C2:75:50:00/36\tTeletekE\tTeletek Electronics\n00:50:C2:75:60:00/36\tChesapea\tChesapeake Sciences Corp\n00:50:C2:75:70:00/36\tESPTechn\tE S P Technologies Ltd\n00:50:C2:75:80:00/36\tAixsolve\tAixSolve GmbH\n00:50:C2:75:90:00/36\tSequentr\tSequentric Energy Systems, LLC\n00:50:C2:75:A0:00/36\tGaislerR\tGaisler Research AB\n00:50:C2:75:B0:00/36\tDmtSyste\tDMT System S.p.A.\n00:50:C2:75:C0:00/36\tStörk-Tr\tSTÖRK-TRONIC Störk GmbH&Co. KG\n00:50:C2:75:D0:00/36\tFluidAna\tFluid Analytics, Inc.\n00:50:C2:75:E0:00/36\tSky-Skan\tSky-Skan, Incorporated\n00:50:C2:75:F0:00/36\tBRexroth\tB. Rexroth the identity company GmbH\n00:50:C2:76:00:00/36\tArS\tAR'S CO., LTD.\n00:50:C2:76:10:00/36\tElbitOfA\tElbit Systems of America - Fort Worth Operations\n00:50:C2:76:20:00/36\tAssembly\tAssembly Contracts Limited\n00:50:C2:76:30:00/36\tXtendwav\tXtendWave\n00:50:C2:76:40:00/36\tArgus-Sp\tARGUS-SPECTRUM\n00:50:C2:76:50:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:76:60:00/36\tGuterman\tGutermann Technology GmbH\n00:50:C2:76:70:00/36\tEid\t\n00:50:C2:76:80:00/36\tControlS\tControl Service do Brasil Ltda\n00:50:C2:76:90:00/36\tBes\tBES GmbH\n00:50:C2:76:A0:00/36\tDigidriv\tDigidrive Audio Limited\n00:50:C2:76:B0:00/36\tPutercom\tPutercom Enterprise Co., LTD.\n00:50:C2:76:C0:00/36\tEfgCzSpo\tEFG CZ spol. s r.o.\n00:50:C2:76:D0:00/36\tMobilism\tMobilisme\n00:50:C2:76:E0:00/36\tCrinia\tCrinia Corporation\n00:50:C2:76:F0:00/36\tControlA\tControl and Robotics Solutions\n00:50:C2:77:00:00/36\tCadexEle\tCadex Electronics Inc.\n00:50:C2:77:10:00/36\tZigbeeAl\tZigBee Alliance\n00:50:C2:77:20:00/36\tIesElekt\tIES Elektronikentwicklung\n00:50:C2:77:30:00/36\tPointeCo\tPointe Conception Medical Inc.\n00:50:C2:77:40:00/36\tGeosig\tGeoSIG Ltd.\n00:50:C2:77:50:00/36\tLaserdyn\tLaserdyne Technologies\n00:50:C2:77:60:00/36\tIntegrat\tIntegrated Security Corporation\n00:50:C2:77:70:00/36\tEuroDisp\tEuro Display Srl\n00:50:C2:77:80:00/36\tSungardV\tSunGard Vivista\n00:50:C2:77:90:00/36\tCoralTel\tCoral Telecom Ltd\n00:50:C2:77:A0:00/36\tSmithMet\tSmith Meter, Inc\n00:50:C2:77:B0:00/36\tItibiaTe\tItibia Technologies\n00:50:C2:77:C0:00/36\tAtecSrl\tAtec Srl\n00:50:C2:77:D0:00/36\tLincolnI\tLincoln Industrial\n00:50:C2:77:E0:00/36\tCominfo\tCominfo, Inc.\n00:50:C2:77:F0:00/36\tAcdElekt\tACD Elektronik GmbH\n00:50:C2:78:00:00/36\tIqSoluti\tIQ Solutions GmbH & Co. KG\n00:50:C2:78:10:00/36\tStarling\tStarling Advanced Communications\n00:50:C2:78:20:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:78:30:00/36\tNorma\tNORMA systems GmbH\n00:50:C2:78:40:00/36\tLewisCon\tLewis Controls Inc.\n00:50:C2:78:50:00/36\tIconTime\tIcon Time Systems\n00:50:C2:78:60:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:78:70:00/36\tAustcoCo\tAustco Communication Systems Pty Ltd\n00:50:C2:78:80:00/36\tHosaTech\tHosa Technology, Inc.\n00:50:C2:78:90:00/36\tRosslare\tRosslare Enterprises Limited\n00:50:C2:78:A0:00/36\tLevelTel\tLevel Telecom\n00:50:C2:78:B0:00/36\tOmicronE\tOMICRON electronics GmbH\n00:50:C2:78:C0:00/36\tGiga-Tro\tGiga-tronics, Inc.\n00:50:C2:78:D0:00/36\tTelairit\tTelairity\n00:50:C2:78:E0:00/36\tGlobalco\tGlobalcom Engineering Srl\n00:50:C2:78:F0:00/36\tElmarEle\tELMAR electronic\n00:50:C2:79:00:00/36\tGeSecuri\tGE Security-Kampro\n00:50:C2:79:10:00/36\tMSquared\tM Squared Lasers Limited\n00:50:C2:79:20:00/36\tSmartro\tSMARTRO Co.,Ltd.\n00:50:C2:79:30:00/36\tEnertexB\tEnertex Bayern GmbH\n00:50:C2:79:40:00/36\tComsonic\tComsonics, Inc.\n00:50:C2:79:50:00/36\tAmeli\tAmeli Spa\n00:50:C2:79:60:00/36\tDorletSa\tDorlet Sau\n00:50:C2:79:70:00/36\tTiefenba\tTiefenbach Control Systems GmbH\n00:50:C2:79:80:00/36\tIndefia\t\n00:50:C2:79:90:00/36\tAavd\t\n00:50:C2:79:A0:00/36\tJmcAmeri\tJMC America, LLC\n00:50:C2:79:B0:00/36\tSchniewi\tSchniewindt GmbH & Co. KG\n00:50:C2:79:C0:00/36\tVital\tVital Systems Inc\n00:50:C2:79:D0:00/36\tMiratrek\t\n00:50:C2:79:E0:00/36\tBenshawC\tBenshaw Canada Controls, Inc.\n00:50:C2:79:F0:00/36\tZaoNpc\tZao Npc\n00:50:C2:7A:00:00/36\tMedavant\tMedAvant Healthcare\n00:50:C2:7A:10:00/36\tFieldDes\tField Design Service\n00:50:C2:7A:20:00/36\tRaysatIs\tRaySat Israel LTD\n00:50:C2:7A:30:00/36\tAbbTrans\tABB Transmission and Distribution Automation Equipment (Xiamen) Co., Ltd.\n00:50:C2:7A:40:00/36\tCalibreU\tCalibre UK LTD\n00:50:C2:7A:50:00/36\tQuantumM\tQuantum Medical Imaging\n00:50:C2:7A:60:00/36\tAsianaId\tAsiana Idt\n00:50:C2:7A:70:00/36\tGuidance\tGuidance Navigation Limited\n00:50:C2:7A:80:00/36\tIntegrat\tIntegrated Design Tools, Inc.\n00:50:C2:7A:90:00/36\tDeltaTau\tDelta Tau Data Systems, Inc.\n00:50:C2:7A:A0:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n00:50:C2:7A:B0:00/36\tGeneralM\tGeneral Microsystems Sdn Bhd\n00:50:C2:7A:C0:00/36\tIusaSaDe\tIusa Sa De Cv\n00:50:C2:7A:D0:00/36\tTurunTur\tTurun Turvatekniikka Oy\n00:50:C2:7A:E0:00/36\tGlobalTe\tGlobal Tel-Link\n00:50:C2:7A:F0:00/36\tC2Micros\tC2 Microsystems\n00:50:C2:7B:00:00/36\tImpTelek\tIMP Telekom\n00:50:C2:7B:10:00/36\tAteme\t\n00:50:C2:7B:20:00/36\tADIVideo\tA.D.I Video technologies\n00:50:C2:7B:30:00/36\tElmec\tElmec,  Inc.\n00:50:C2:7B:40:00/36\tT1Engine\tT 1 Engineering\n00:50:C2:7B:50:00/36\tDit-McoI\tDIT-MCO International\n00:50:C2:7B:60:00/36\tAlstomSc\tAlstom (Schweiz) AG\n00:50:C2:7B:70:00/36\tTattileS\tTattile srl\n00:50:C2:7B:80:00/36\tDesign20\tDesign 2000 Pty Ltd\n00:50:C2:7B:90:00/36\tTechnova\tTechnovare Systems, Inc.\n00:50:C2:7B:A0:00/36\tInfodevE\tInfodev Electronic Designers Intl.\n00:50:C2:7B:B0:00/36\tInraySol\tInRay Solutions Ltd.\n00:50:C2:7B:C0:00/36\tEidos\tEidos Spa\n00:50:C2:7B:D0:00/36\tPromateE\tPromate Electronic Co.Ltd\n00:50:C2:7B:E0:00/36\tPowerlin\tPowerlinx, Inc.\n00:50:C2:7B:F0:00/36\tZoeMedic\tZoe Medical\n00:50:C2:7C:00:00/36\tEuropean\tEuropean Industrial Electronics B.V.\n00:50:C2:7C:10:00/36\tPrimaryI\tPrimary Integration Encorp LLC\n00:50:C2:7C:20:00/36\tDsrInfor\tDSR Information Technologies Ltd.\n00:50:C2:7C:30:00/36\tAst\tAst Incorporated\n00:50:C2:7C:40:00/36\tMobacon\t\n00:50:C2:7C:50:00/36\tVentureR\tVenture Research Inc.\n00:50:C2:7C:60:00/36\tLyngdorf\tLyngdorf Audio Aps\n00:50:C2:7C:70:00/36\tPyrosequ\tPyrosequencing AB\n00:50:C2:7C:80:00/36\tFrSauter\tFr. Sauter AG\n00:50:C2:7C:90:00/36\tBluebell\tBluebell Opticom Limited\n00:50:C2:7C:A0:00/36\tCedarAud\tCEDAR Audio Limited\n00:50:C2:7C:B0:00/36\tViewplus\tViewPlus Technologies, Inc.\n00:50:C2:7C:C0:00/36\tSwecoJap\tSweco Japs Ab\n00:50:C2:7C:D0:00/36\tPrecisio\tPrecision MicroControl Corporation\n00:50:C2:7C:E0:00/36\tGogoBa\tGogo BA\n00:50:C2:7C:F0:00/36\tEmitech\tEmitech Corporation\n00:50:C2:7D:00:00/36\tRadarTro\tRadar Tronic ltd.\n00:50:C2:7D:10:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:7D:20:00/36\tBittital\tBittitalo Oy\n00:50:C2:7D:30:00/36\tHighrail\tHighrail Systems Limited\n00:50:C2:7D:40:00/36\tWr\tWR Systems, Ltd.\n00:50:C2:7D:50:00/36\tDeuta-We\tDeuta-Werke GmbH\n00:50:C2:7D:60:00/36\tInternat\tInternational Mining Technologies\n00:50:C2:7D:70:00/36\tNewtec\tNewtec A/S\n00:50:C2:7D:80:00/36\tInnoscan\tInnoScan K/S\n00:50:C2:7D:90:00/36\tVolumati\tVolumatic Limited\n00:50:C2:7D:A0:00/36\tHtec\tHTEC Limited\n00:50:C2:7D:B0:00/36\tMuellerE\tMueller Elektronik\n00:50:C2:7D:C0:00/36\tAixtrusi\taiXtrusion GmbH\n00:50:C2:7D:D0:00/36\tLsElektr\tLS Elektronik AB\n00:50:C2:7D:E0:00/36\tCascadeT\tCascade Technologies Ltd\n00:50:C2:7D:F0:00/36\tPrivate\t\n00:50:C2:7E:00:00/36\tC&DTechn\tC&D Technologies, Inc\n00:50:C2:7E:10:00/36\tZeltiqAe\tZeltiq Aesthetics, Inc.\n00:50:C2:7E:20:00/36\tDigitrol\tDigitrol Ltd\n00:50:C2:7E:30:00/36\tProgente\tProgentech Limited\n00:50:C2:7E:40:00/36\tMetaVisi\tMeta Vision Systems Ltd.\n00:50:C2:7E:50:00/36\tNystromE\tNystrom Engineering\n00:50:C2:7E:60:00/36\tEmpirixI\tEmpirix Italy S.p.A.\n00:50:C2:7E:70:00/36\tV2green\tV2Green, Inc.\n00:50:C2:7E:80:00/36\tMistralS\tMistral Solutions Pvt. Ltd\n00:50:C2:7E:90:00/36\tSiconSrl\tSicon srl\n00:50:C2:7E:A0:00/36\tMonitorB\tMonitor Business Machines Ltd.\n00:50:C2:7E:B0:00/36\tSesolInd\tSesol Industrial Computer\n00:50:C2:7E:C0:00/36\tLyngsoe\tLyngsoe Systems\n00:50:C2:7E:D0:00/36\tGenesisA\tGenesis Automation Inc.\n00:50:C2:7E:E0:00/36\tNhResear\tNH Research\n00:50:C2:7E:F0:00/36\tGfiChron\tGFI Chrono Time\n00:50:C2:7F:00:00/36\tNetworkH\tNetwork Harbor, Inc.\n00:50:C2:7F:10:00/36\tStuhlReg\tSTUHL Regelsysteme GmbH\n00:50:C2:7F:20:00/36\tLogother\tLogotherm Regelsysteme GmbH\n00:50:C2:7F:30:00/36\tSorec\t\n00:50:C2:7F:40:00/36\tWireless\tWireless Cables Inc.\n00:50:C2:7F:50:00/36\tAceCarwa\tACE Carwash Systems\n00:50:C2:7F:60:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:7F:70:00/36\tMangodsp\t\n00:50:C2:7F:80:00/36\tWiseIndu\tWise Industria de Telecomunicações Ldta.\n00:50:C2:7F:90:00/36\tKarlDung\tKarl DUNGS GmbH & Co. KG\n00:50:C2:7F:A0:00/36\tAutomati\tAutomationX GmbH\n00:50:C2:7F:B0:00/36\tQtronPty\tQtron Pty Ltd\n00:50:C2:7F:C0:00/36\tTisDialo\tTIS Dialog LLC\n00:50:C2:7F:D0:00/36\tAdeneo\t\n00:50:C2:7F:E0:00/36\tWireless\tWireless Cables Inc.\n00:50:C2:7F:F0:00/36\tShenzhen\tShenzhen MaiWei Cable TV Equipment CO.,LTD.\n00:50:C2:80:00:00/36\tDelphiDi\tDelphi Display Systems, Inc.\n00:50:C2:80:10:00/36\tJanusSrl\tJANUS srl\n00:50:C2:80:20:00/36\tPrivate\t\n00:50:C2:80:30:00/36\tDbBroadc\tdB Broadcast Limited\n00:50:C2:80:40:00/36\tSoftswit\tSoftSwitching Technologies\n00:50:C2:80:50:00/36\tMultimed\tMultimediaLED\n00:50:C2:80:60:00/36\tCet\t\n00:50:C2:80:70:00/36\tTechnoma\tTechnomark\n00:50:C2:80:80:00/36\tItbCompu\tITB CompuPhase\n00:50:C2:80:90:00/36\tVarmaEle\tVarma Electronics Oy\n00:50:C2:80:A0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:80:B0:00/36\tOpenVide\tOpen Video, Inc.\n00:50:C2:80:C0:00/36\tLuxpertT\tLuxpert Technologies Co., Ltd.\n00:50:C2:80:D0:00/36\tAcubeSRL\tAcube Systems s.r.l.\n00:50:C2:80:E0:00/36\tBrunoInt\tBruno International Ltd.\n00:50:C2:80:F0:00/36\tSelekron\tSelekron Microcontrol s.l.\n00:50:C2:81:00:00/36\tAlphion\tAlphion Corporation\n00:50:C2:81:10:00/36\tOpenSyst\tOpen System Solutions Limited\n00:50:C2:81:20:00/36\tFemtoSa\tFemto SA\n00:50:C2:81:30:00/36\tIntellef\tIntelleflex Corporation\n00:50:C2:81:40:00/36\tTelvent\t\n00:50:C2:81:50:00/36\tMicrocDe\tmicroC Design SRL\n00:50:C2:81:60:00/36\tInteligh\tIntelight Inc.\n00:50:C2:81:70:00/36\tOdinTele\tOdin TeleSystems Inc\n00:50:C2:81:80:00/36\tWireless\tWireless Value BV\n00:50:C2:81:90:00/36\tCabinpla\tCabinplant A/S\n00:50:C2:81:A0:00/36\tInfoglob\tInfoGLOBAL\n00:50:C2:81:B0:00/36\tBrainTec\tBrain Tech Co., Ltd\n00:50:C2:81:C0:00/36\tTelcom\t\n00:50:C2:81:D0:00/36\tItSalux\tIt Salux Co., Ltd.\n00:50:C2:81:E0:00/36\tChannelo\tChannelot Ltd.\n00:50:C2:81:F0:00/36\t2nTeleko\t2N TELEKOMUNIKACE a.s.\n00:50:C2:82:00:00/36\tTescanSR\tTESCAN, s.r.o.\n00:50:C2:82:10:00/36\tMiscoRef\tMISCO Refractometer\n00:50:C2:82:20:00/36\tWinnerTe\tWinner Technology Co, Ltd.\n00:50:C2:82:30:00/36\tRobotVis\tRobot Visual Systems GmbH\n00:50:C2:82:40:00/36\tSmtDOO\tSMT d.o.o.\n00:50:C2:82:50:00/36\tFunkwerk\tFunkwerk Information Technologies Karlsfeld GmbH\n00:50:C2:82:60:00/36\tHewiHein\tHEWI Heinrich Wilke GmbH\n00:50:C2:82:70:00/36\tEneroSol\tEnero Solutions inc.\n00:50:C2:82:80:00/36\tSlicanSp\tSLICAN sp. z o.o.\n00:50:C2:82:90:00/36\tIntellec\tIntellectronika\n00:50:C2:82:A0:00/36\tVdcDispl\tVDC Display Systems\n00:50:C2:82:B0:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:82:C0:00/36\tVitelNet\tVitel Net\n00:50:C2:82:D0:00/36\tElmec\tElmec, Inc.\n00:50:C2:82:E0:00/36\tLogicom\tLogiCom GmbH\n00:50:C2:82:F0:00/36\tMomentum\tMomentum Data Systems\n00:50:C2:83:00:00/36\tCompusho\tCompuShop Services LLC\n00:50:C2:83:10:00/36\tStJudeMe\tSt Jude Medical, Inc.\n00:50:C2:83:20:00/36\tS1nn\tS1nn GmbH & Co. KG\n00:50:C2:83:30:00/36\tLaserlin\tLaserLinc, Inc.\n00:50:C2:83:40:00/36\tAntek\tANTEK GmbH\n00:50:C2:83:50:00/36\tCommunic\tCommunications Laboratories Inc\n00:50:C2:83:60:00/36\tDspDesig\tDsp Design\n00:50:C2:83:70:00/36\tId-Karta\tID-KARTA s.r.o.\n00:50:C2:83:80:00/36\tTProjeMu\tT Proje Muhendislik Dis. Tic. Ltd. Sti.\n00:50:C2:83:90:00/36\tImsRöntg\tIMS Röntgensysteme GmbH\n00:50:C2:83:A0:00/36\tSyr-TecE\tSyr-Tec Engineering & Marketing\n00:50:C2:83:B0:00/36\tOBay\tO. Bay AG\n00:50:C2:83:C0:00/36\tHemaElec\thema electronic GmbH\n00:50:C2:83:D0:00/36\tBeronet\tberoNet GmbH\n00:50:C2:83:E0:00/36\tKpeSpolS\tKPE spol. s r.o.\n00:50:C2:83:F0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:84:00:00/36\tResident\tResidential Control Systems\n00:50:C2:84:10:00/36\tConnecti\tConnection Electronics Ltd.\n00:50:C2:84:20:00/36\tQuantumC\tQuantum Controls BV\n00:50:C2:84:30:00/36\tXtensor\tXtensor Systems Inc.\n00:50:C2:84:40:00/36\tProdigyE\tProdigy Electronics Limited\n00:50:C2:84:50:00/36\tVisualso\tVisualSonics Inc.\n00:50:C2:84:60:00/36\tEsp-Plan\tESP-Planning Co.\n00:50:C2:84:70:00/36\tLarsMori\tLars Morich Kommunikationstechnik GmbH\n00:50:C2:84:80:00/36\tDasaRobo\tDASA ROBOT Co., Ltd.\n00:50:C2:84:90:00/36\tDesignAn\tDesign Analysis Associates, Inc.\n00:50:C2:84:A0:00/36\tKeystone\tKeystone Electronic Solutions\n00:50:C2:84:B0:00/36\tTaskSist\tTask Sistemas De Computacao Ltda\n00:50:C2:84:C0:00/36\tPerforma\tPerformance Motion Devices\n00:50:C2:84:D0:00/36\tBmti\t\n00:50:C2:84:E0:00/36\tDraco\tDraco Systems\n00:50:C2:84:F0:00/36\tGamber-J\tGamber-Johnson LLC\n00:50:C2:85:00:00/36\tKKRocky\tK.K. Rocky\n00:50:C2:85:10:00/36\tSpjEmbed\tSPJ Embedded Technologies Pvt. Ltd.\n00:50:C2:85:20:00/36\tEinfochi\teInfochips Ltd.\n00:50:C2:85:30:00/36\tEttusRes\tEttus Research LLC\n00:50:C2:85:40:00/36\tRatiopla\tRatioplast-Optoelectronics GmbH\n00:50:C2:85:50:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n00:50:C2:85:60:00/36\tCt\tCT Company\n00:50:C2:85:70:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n00:50:C2:85:80:00/36\tWireless\tWireless Acquisition LLC\n00:50:C2:85:90:00/36\tNuvation\t\n00:50:C2:85:A0:00/36\tArt\tArt Spa\n00:50:C2:85:B0:00/36\tBoreste\t\n00:50:C2:85:C0:00/36\tBSE\tB S E\n00:50:C2:85:D0:00/36\tIngKnaus\tIng. Knauseder Mechatronik GmbH\n00:50:C2:85:E0:00/36\tRadiomet\tRadiometer Medical ApS\n00:50:C2:85:F0:00/36\tGdMissio\tGD Mission Systems\n00:50:C2:86:00:00/36\tEutronSP\tEutron S.p.A.\n00:50:C2:86:10:00/36\tGrantron\tGrantronics Pty Ltd\n00:50:C2:86:20:00/36\tElsys\tElsys AG\n00:50:C2:86:30:00/36\tAdvanced\tAdvanced Technology Solutions\n00:50:C2:86:40:00/36\tAtgAutom\tATG Automatisierungstechnik GERA GmbH\n00:50:C2:86:50:00/36\tPersyCon\tPersy Control Services B.v.\n00:50:C2:86:60:00/36\tSaiaBurg\tSaia Burgess Controls AG\n00:50:C2:86:70:00/36\tSyntroni\tSyntronics\n00:50:C2:86:80:00/36\tAethon\tAethon, Inc.\n00:50:C2:86:90:00/36\tFunkwerk\tFunkwerk plettac electronic GmbH\n00:50:C2:86:A0:00/36\tUsm\tUSM Systems, Ltd\n00:50:C2:86:B0:00/36\tOmbSiste\tOMB Sistemas Electronicos S.A.\n00:50:C2:86:C0:00/36\tCondigiT\tCondigi Televagt A/S\n00:50:C2:86:D0:00/36\tTielineR\tTieline Research Pty Ltd\n00:50:C2:86:E0:00/36\tHanyangE\tHanyang Electric Cp., Ltd\n00:50:C2:86:F0:00/36\tB-Plus\tb-plus GmbH\n00:50:C2:87:00:00/36\tLogelSRL\tLogel S.R.L.\n00:50:C2:87:10:00/36\tR-S-IEle\tR-S-I Elektrotechnik GmbH & Co. KG\n00:50:C2:87:20:00/36\tOliotalo\tOliotalo Oy\n00:50:C2:87:30:00/36\tXronet\tXRONET Corporation\n00:50:C2:87:40:00/36\tArcosTec\tArcos Technologies Ltd.\n00:50:C2:87:50:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:87:60:00/36\tPrivatqu\tPrivatquelle Gruber GmbH & CO KG\n00:50:C2:87:70:00/36\tMotionAn\tMotion Analysis Corp\n00:50:C2:87:80:00/36\tAcoustic\tAcoustic Research Laboratories Pty Ltd\n00:50:C2:87:90:00/36\tMilesys\t\n00:50:C2:87:A0:00/36\tSpectrum\tSpectrum Management, LC\n00:50:C2:87:B0:00/36\tUavnavig\tUAVNavigation S.L.\n00:50:C2:87:C0:00/36\tArcontia\tArcontia AB\n00:50:C2:87:D0:00/36\tAt&TGove\tAT&T Government Solutions\n00:50:C2:87:E0:00/36\tScmProdu\tScm Products, Inc.\n00:50:C2:87:F0:00/36\tOptoelet\tOptoelettronica Italia S.r.l.\n00:50:C2:88:00:00/36\tCreation\tCreation Technologies Chicago\n00:50:C2:88:10:00/36\tInnotran\tInnoTrans Communications, Inc.\n00:50:C2:88:20:00/36\tWarecube\tWarecube,Inc.\n00:50:C2:88:30:00/36\tNeocontr\tNeocontrol Soluções em Automação\n00:50:C2:88:40:00/36\tIpThinki\tIP Thinking A/S\n00:50:C2:88:50:00/36\tOooNtkIm\tOoo Ntk Imos\n00:50:C2:88:60:00/36\tTransasM\tTransas Marine Limited\n00:50:C2:88:70:00/36\tInventis\tInventis Technology Pty Limited\n00:50:C2:88:80:00/36\tIadea\tIAdea Corporation\n00:50:C2:88:90:00/36\tAcsMotio\tACS Motion Control Ltd.\n00:50:C2:88:A0:00/36\tContinen\tContinental Electronics Corp.\n00:50:C2:88:B0:00/36\tHollisEl\tHollis Electronics Company LLC\n00:50:C2:88:C0:00/36\tZ-App\tZ-App Systems\n00:50:C2:88:D0:00/36\tL3Commun\tL3 Communications Nova Engineering\n00:50:C2:88:E0:00/36\tCardinal\tCardinal Scale Mfg Co\n00:50:C2:88:F0:00/36\tKeynoteS\tKeynote SIGOS GmbH\n00:50:C2:89:00:00/36\tBaeHäggl\tBAE Systems Hägglunds AB\n00:50:C2:89:10:00/36\tAdmiralS\tAdmiral Secure Products, Ltd.\n00:50:C2:89:20:00/36\tTrakceAS\tTrakce a.s.\n00:50:C2:89:30:00/36\tEizoTech\tEIZO Technologies GmbH\n00:50:C2:89:40:00/36\tShockfis\tShockfish SA\n00:50:C2:89:50:00/36\tMarineCo\tMarine Communications Limited\n00:50:C2:89:60:00/36\tBlankom\t\n00:50:C2:89:70:00/36\tOdfOptro\tODF Optronics, Inc.\n00:50:C2:89:80:00/36\tVeecoPro\tVeeco Process Equipment, Inc.\n00:50:C2:89:90:00/36\tInicoTec\tInico Technologies Ltd.\n00:50:C2:89:A0:00/36\tNeptuneT\tNeptune Technology Group Inc.\n00:50:C2:89:B0:00/36\tSensataT\tSensata Technologies, Inc.\n00:50:C2:89:C0:00/36\tMediana\t\n00:50:C2:89:D0:00/36\tSystemte\tSystemtechnik GmbH\n00:50:C2:89:E0:00/36\tBroadcas\tBroadcast Electronics\n00:50:C2:89:F0:00/36\tDatalink\tDatalink Technologies Gateways Inc.\n00:50:C2:8A:00:00/36\tSpeciali\tSpecialized Communications Corp.\n00:50:C2:8A:10:00/36\tIntuneNe\tIntune Networks\n00:50:C2:8A:20:00/36\tUavision\tUAVISION Engenharia de Sistemas\n00:50:C2:8A:30:00/36\tRtw\tRTW GmbH & Co.KG\n00:50:C2:8A:40:00/36\tBaloghTA\tBALOGH T.A.G Corporation\n00:50:C2:8A:50:00/36\tMocon\tMocon, Inc.\n00:50:C2:8A:60:00/36\tSelco\t\n00:50:C2:8A:70:00/36\tPixeye\tPixeye Ltd\n00:50:C2:8A:80:00/36\tAltekEle\tAltek Electronics\n00:50:C2:8A:90:00/36\tIntellig\tIntelligent Security Systems\n00:50:C2:8A:A0:00/36\tAtsElekt\tATS Elektronik GmbH\n00:50:C2:8A:B0:00/36\tNanomoti\tNanomotion Ltd.\n00:50:C2:8A:C0:00/36\tTelsaSRL\tTelsa s.r.l\n00:50:C2:8A:D0:00/36\tThalesCo\tThales Communications Inc\n00:50:C2:8A:E0:00/36\tDesarrol\tDesarrollo De Sistemas Integrados De Control S.A.\n00:50:C2:8A:F0:00/36\tXelerate\tXelerated\n00:50:C2:8B:00:00/36\tBkInnova\tBK Innovation, Inc.\n00:50:C2:8B:10:00/36\tRingcube\tRingCube Technologies, Inc.\n00:50:C2:8B:20:00/36\tServaind\tServaind Sa.\n00:50:C2:8B:30:00/36\tVtqVidet\tVTQ Videtronik GmbH\n00:50:C2:8B:40:00/36\tSandarTe\tSandar Telecast AS\n00:50:C2:8B:50:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:8B:60:00/36\tShadrins\tShadrinskiy Telefonny Zavod\n00:50:C2:8B:70:00/36\tCalnexSo\tCalnex Solutions Limited\n00:50:C2:8B:80:00/36\tDssNetwo\tDSS Networks, Inc.\n00:50:C2:8B:90:00/36\tAcdElekt\tACD Elektronik GmbH\n00:50:C2:8B:A0:00/36\tFrSauter\tFr. Sauter AG\n00:50:C2:8B:B0:00/36\tSmtagInt\tsmtag international ag\n00:50:C2:8B:C0:00/36\tHoneywel\tHoneywell Sensotec\n00:50:C2:8B:D0:00/36\tMatrixSw\tMatrix Switch Corporation\n00:50:C2:8B:E0:00/36\tPennsylv\tThe Pennsylvania State University\n00:50:C2:8B:F0:00/36\tAristoGr\tARISTO Graphic Systeme GmbH & Co. KG\n00:50:C2:8C:00:00/36\tSCESRL\tS.C.E. s.r.l.\n00:50:C2:8C:10:00/36\tHeraeusN\tHeraeus Noblelight GmbH\n00:50:C2:8C:20:00/36\tAccessCo\tAccess Control Systems JSC\n00:50:C2:8C:30:00/36\tBytePara\tByte Paradigm\n00:50:C2:8C:40:00/36\tSoldigIn\tSoldig Industria e Comercio de Equipamentos Eletronicos LTDA\n00:50:C2:8C:50:00/36\tVortexEn\tVortex Engineering pvt ltd\n00:50:C2:8C:60:00/36\tGradualT\tGradual Tecnologia Ltda.\n00:50:C2:8C:70:00/36\tTattileS\tTattile Srl\n00:50:C2:8C:80:00/36\tPumatron\tPumatronix Equipamentos Eletronicos Ltda.\n00:50:C2:8C:90:00/36\tA+SAktua\tA+S Aktuatorik und Sensorik GmbH\n00:50:C2:8C:A0:00/36\tAltairSe\tAltair semiconductor Ltd\n00:50:C2:8C:B0:00/36\tBeonic\tBeonic Corporation\n00:50:C2:8C:C0:00/36\tLyconsys\tLyconSys GmbH & Co.KG\n00:50:C2:8C:D0:00/36\tCambridg\tCambridge Sound Management, LLC\n00:50:C2:8C:E0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:8C:F0:00/36\tGigalinx\tGigaLinx Ltd.\n00:50:C2:8D:00:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:8D:10:00/36\tBachmann\tBachmann Monitoring GmbH\n00:50:C2:8D:20:00/36\tTti\tTTi Ltd\n00:50:C2:8D:30:00/36\tIfam\tIFAM GmbH\n00:50:C2:8D:40:00/36\tInternet\tInternet Protocolo Lógica SL\n00:50:C2:8D:50:00/36\tPeekTraf\tPeek Traffic Corp\n00:50:C2:8D:60:00/36\tUltravis\tUltraVision Security Systems, Inc.\n00:50:C2:8D:70:00/36\tPolygonI\tPolygon Informatics Ltd.\n00:50:C2:8D:80:00/36\tArrayTec\tArray Technologies Inc\n00:50:C2:8D:90:00/36\tIndustri\tIndustrial Control and Communication Limited\n00:50:C2:8D:A0:00/36\tDocutemp\tDocutemp, Inc\n00:50:C2:8D:B0:00/36\tDcomNetw\tDCOM Network Technology (Pty) Ltd\n00:50:C2:8D:C0:00/36\tFrame\tFrame Systems Limited\n00:50:C2:8D:D0:00/36\tGimcon\t\n00:50:C2:8D:E0:00/36\tCoherix\tCoherix, Inc\n00:50:C2:8D:F0:00/36\tDipl-Ing\tDipl.-Ing. W. Nophut GmbH\n00:50:C2:8E:00:00/36\tShenzhen\tShenzhen Pennda Technologies Co., Ltd.\n00:50:C2:8E:10:00/36\tDeutsche\tDeutscher Weterdienst\n00:50:C2:8E:20:00/36\tWireless\tWireless Cables Inc.\n00:50:C2:8E:30:00/36\tBiomérie\tbioMérieux Italia S.p.A.\n00:50:C2:8E:40:00/36\tMacapsIn\tMaCaPS International Limited\n00:50:C2:8E:50:00/36\tBerthel\tBerthel GmbH\n00:50:C2:8E:60:00/36\tSandelAv\tSandel Avionics, Inc.\n00:50:C2:8E:70:00/36\tMktSyste\tMKT Systemtechnik\n00:50:C2:8E:80:00/36\tFriedric\tFriedrich Kuhnt GmbH\n00:50:C2:8E:90:00/36\tUnidata\t\n00:50:C2:8E:A0:00/36\tAteme\t\n00:50:C2:8E:B0:00/36\tC-ComSat\tC-COM Satellite Systems Inc.\n00:50:C2:8E:C0:00/36\tBalfourB\tBalfour Beatty Rail GmbH\n00:50:C2:8E:D0:00/36\tAt-Autom\tAT-Automation Technology GmbH\n00:50:C2:8E:E0:00/36\tPcsc\t\n00:50:C2:8E:F0:00/36\tTechnolo\tTechnologies Sensio Inc\n00:50:C2:8F:00:00/36\tXentrasC\tXentras Communications\n00:50:C2:8F:10:00/36\tDetectio\tDetection Technologies Ltd.\n00:50:C2:8F:20:00/36\tSchneide\tSchneider Electric GmbH\n00:50:C2:8F:30:00/36\tCurtisDo\tCurtis Door Systems Inc\n00:50:C2:8F:40:00/36\tCritical\tCritical Link LLC\n00:50:C2:8F:50:00/36\tTec5\ttec5 AG\n00:50:C2:8F:60:00/36\tK-Mac\tK-MAC Corp.\n00:50:C2:8F:70:00/36\tTge\tTGE Co., Ltd.\n00:50:C2:8F:80:00/36\tRmsd\tRmsd Ltd\n00:50:C2:8F:90:00/36\tHoneywel\tHoneywell\n00:50:C2:8F:A0:00/36\tTeliumSC\tTELIUM s.c.\n00:50:C2:8F:B0:00/36\tAlfredKu\tAlfred Kuhse GmbH\n00:50:C2:8F:C0:00/36\tSymetric\tSymetrics Industries\n00:50:C2:8F:D0:00/36\tSindomaM\tSindoma Müh Mim Ýnþ Elk San Tic Ltd.\n00:50:C2:8F:E0:00/36\tCrossCou\tCross Country Systems AB\n00:50:C2:8F:F0:00/36\tLuceat\t\n00:50:C2:90:00:00/36\tMagorCom\tMagor Communications Corp\n00:50:C2:90:10:00/36\tResearch\tResearch Applications Incorp\n00:50:C2:90:20:00/36\tChinaRai\tChina Railway Signal & Communication Corp.\n00:50:C2:90:30:00/36\tEcoaxisP\tEcoAxis Systems Pvt. Ltd.\n00:50:C2:90:40:00/36\tR2sonicL\tR2Sonic, LLC\n00:50:C2:90:50:00/36\tLinkComm\tLink Communications, Inc\n00:50:C2:90:60:00/36\tGidel\t\n00:50:C2:90:70:00/36\tCristalC\tCristal Controles Ltee\n00:50:C2:90:80:00/36\tCodexDig\tCodex Digital Ltd\n00:50:C2:90:90:00/36\tElisra\t\n00:50:C2:90:A0:00/36\tBoardLev\tBoard Level Limited\n00:50:C2:90:B0:00/36\tEOnEsSve\tE.ON ES Sverige AB\n00:50:C2:90:C0:00/36\tLss\tLSS GmbH\n00:50:C2:90:D0:00/36\tEvkDiKer\tEVK DI Kerschhaggl GmbH\n00:50:C2:90:E0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:90:F0:00/36\tIntegraB\tINTEGRA Biosciences AG\n00:50:C2:91:00:00/36\tAutotank\tAutotank AB\n00:50:C2:91:10:00/36\tVaporRai\tVapor Rail\n00:50:C2:91:20:00/36\tAssetInt\tASSET InterTech, Inc.\n00:50:C2:91:30:00/36\tLeonardo\tLeonardo MW Ltd (Land & Naval Defence Electronic)\n00:50:C2:91:40:00/36\tIo-Conne\tIO-Connect\n00:50:C2:91:50:00/36\tVerint\tVerint Systems Ltd.\n00:50:C2:91:60:00/36\tChkGrids\tCHK GridSense P/L\n00:50:C2:91:70:00/36\tCirtem\t\n00:50:C2:91:80:00/36\tDesignLi\tDesign Lightning Corp\n00:50:C2:91:90:00/36\tAhv\tAHV Systems, Inc.\n00:50:C2:91:A0:00/36\tXtoneNet\tXtone Networks\n00:50:C2:91:B0:00/36\tEmbedded\tEmbedded Data Systems, LLC\n00:50:C2:91:C0:00/36\tMangodsp\t\n00:50:C2:91:D0:00/36\tRosendah\tRosendahl Studiotechnik GmbH\n00:50:C2:91:E0:00/36\tAutomati\tAutomation Tec\n00:50:C2:91:F0:00/36\t2ncommDe\t2NCOMM DESIGN SRL\n00:50:C2:92:00:00/36\tRogueEng\tRogue Engineering Inc.\n00:50:C2:92:10:00/36\tIqueRfid\tiQue RFID Technologies BV\n00:50:C2:92:20:00/36\tMetrumSw\tMetrum Sweden AB\n00:50:C2:92:30:00/36\tAmicusWi\tAmicus Wireless\n00:50:C2:92:40:00/36\tLinkElec\tLink Electric & Safety Control Co.\n00:50:C2:92:50:00/36\tPhbEletr\tPHB Eletronica Ltda.\n00:50:C2:92:60:00/36\tDitestFa\tDiTEST Fahrzeugdiagnose GmbH\n00:50:C2:92:70:00/36\tAtisGrou\tATIS group s.r.o.\n00:50:C2:92:80:00/36\tCinetix\tCinetix GmbH\n00:50:C2:92:90:00/36\tFlightDe\tFlight Deck Resources\n00:50:C2:92:A0:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n00:50:C2:92:B0:00/36\tDspDesig\tDsp Design\n00:50:C2:92:C0:00/36\tExatrol\tExatrol Corporation\n00:50:C2:92:D0:00/36\tApprosof\tAPProSoftware.com\n00:50:C2:92:E0:00/36\tGoannaTe\tGoanna Technologies Pty Ltd\n00:50:C2:92:F0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:93:00:00/36\tNetaElek\tNETA Elektronik AS\n00:50:C2:93:10:00/36\tKoreaTel\tKorea Telecom Internet Solutions (KTIS)\n00:50:C2:93:20:00/36\tSmavis\tSMAVIS Inc.\n00:50:C2:93:30:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:93:40:00/36\tXilar\tXilar Corp.\n00:50:C2:93:50:00/36\tImageVid\tImage Video\n00:50:C2:93:60:00/36\tMargarit\tMargaritis Engineering\n00:50:C2:93:70:00/36\tBigbear\t\n00:50:C2:93:80:00/36\tPostecDa\tPostec Data Systems Ltd\n00:50:C2:93:90:00/36\tMosaicDy\tMosaic Dynamic Solutions\n00:50:C2:93:A0:00/36\tAlphatro\tALPHATRONICS nv\n00:50:C2:93:B0:00/36\tReliatro\tReliatronics Inc.\n00:50:C2:93:C0:00/36\tFracture\tFractureCode Corporation\n00:50:C2:93:D0:00/36\tLighting\tLighting Science Group\n00:50:C2:93:E0:00/36\tRcsCommu\tRCS Communication Test Systems Ltd.\n00:50:C2:93:F0:00/36\tTsbSolut\tTSB Solutions Inc.\n00:50:C2:94:00:00/36\tPhitek\tPhitek Systems Ltd.\n00:50:C2:94:10:00/36\tRolbit\t\n00:50:C2:94:20:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:94:30:00/36\tQuanzhou\tQuanZhou TDX Electronics Co., Ltd.\n00:50:C2:94:40:00/36\tWireonai\tWireonair A/S\n00:50:C2:94:50:00/36\tExiFlowM\tExi Flow Measurement Ltd\n00:50:C2:94:60:00/36\tMegwareC\tMEGWARE Computer GmbH\n00:50:C2:94:70:00/36\tImexhigh\tIMEXHIGHWAY cvba\n00:50:C2:94:80:00/36\tElectron\tElectronia\n00:50:C2:94:90:00/36\tTaskit\ttaskit GmbH\n00:50:C2:94:A0:00/36\tTrumedia\tTruMedia Measurement Ltd.\n00:50:C2:94:B0:00/36\tPillerEn\tPiller engineering Ltd.\n00:50:C2:94:C0:00/36\tTemix\t\n00:50:C2:94:D0:00/36\tC&HTechn\tC&H technology  ltd.\n00:50:C2:94:E0:00/36\tZynixOri\tZynix Original Sdn. Bhd.\n00:50:C2:94:F0:00/36\tIt-Desig\tIT-Designers GmbH\n00:50:C2:95:00:00/36\tTeleAndR\tTele and Radio Research Institute\n00:50:C2:95:10:00/36\tElCASocC\tEL.C.A. soc. coop.\n00:50:C2:95:20:00/36\tTechFass\tTech Fass s.r.o.\n00:50:C2:95:30:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n00:50:C2:95:40:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:95:50:00/36\tRoessman\tRoessmann Engineering\n00:50:C2:95:60:00/36\tSiconSrl\tSicon srl\n00:50:C2:95:70:00/36\tStratecC\tSTRATEC Control Systems\n00:50:C2:95:80:00/36\tSensopti\tSensoptics Ltd\n00:50:C2:95:90:00/36\tDectris\tDECTRIS Ltd.\n00:50:C2:95:A0:00/36\tTechnoap\t\n00:50:C2:95:B0:00/36\tAsSolar\tAS Solar GmbH\n00:50:C2:95:C0:00/36\tResurgen\tResurgent Health & Medical\n00:50:C2:95:D0:00/36\tFullElec\tfull electronic system\n00:50:C2:95:E0:00/36\tBeecube\tBEEcube Inc.\n00:50:C2:95:F0:00/36\tMetronic\tMETRONIC APARATURA KONTROLNO - POMIAROWA\n00:50:C2:96:00:00/36\tKuroneko\tkuroneko dennnou kenkyuushitsu\n00:50:C2:96:10:00/36\tPicsolve\tPicsolve International Limited\n00:50:C2:96:20:00/36\tShockfis\tShockfish SA\n00:50:C2:96:30:00/36\tLécureux\tLécureux SA\n00:50:C2:96:40:00/36\tIqAutoma\tIQ Automation GmbH\n00:50:C2:96:50:00/36\tEmitech\tEmitech Corporation\n00:50:C2:96:60:00/36\tPcmIndus\tPCM Industries\n00:50:C2:96:70:00/36\tWatthour\tWatthour Engineering Co., Inc.\n00:50:C2:96:80:00/36\tBulogics\tBuLogics, Inc.\n00:50:C2:96:90:00/36\tGehrkeKo\tGehrke Kommunikationssysteme GmbH\n00:50:C2:96:A0:00/36\tBittiumW\tBittium Wireless Ltd\n00:50:C2:96:B0:00/36\tElectron\tElectronic Media Services Ltd\n00:50:C2:96:C0:00/36\tAquaCool\tAqua Cooler Pty Ltd\n00:50:C2:96:D0:00/36\tKeeneEle\tKeene Electronics Ltd.\n00:50:C2:96:E0:00/36\tPeekTraf\tPeek Traffic Corporation\n00:50:C2:96:F0:00/36\tVarec\tVarec Inc.\n00:50:C2:97:00:00/36\tTsujiEle\tTsuji Electronics Co.,Ltd\n00:50:C2:97:10:00/36\tIpitek\t\n00:50:C2:97:20:00/36\tSwitchSc\tSwitch Science (Panini Keikaku)\n00:50:C2:97:30:00/36\tSystèmes\tSystèmes Pran\n00:50:C2:97:40:00/36\tEmac\tEMAC, Inc.\n00:50:C2:97:50:00/36\tPyramidT\tPyramid Technical Consultants\n00:50:C2:97:60:00/36\tSandsIns\tSands Instrumentation India Pvt Ltd\n00:50:C2:97:70:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:97:80:00/36\tLogitalD\tLOGITAL DIGITAL MEDIA srl\n00:50:C2:97:90:00/36\tFarSouth\tFar South Networks (Pty) Ltd\n00:50:C2:97:A0:00/36\tKstTechn\tKST Technology Co., Ltd\n00:50:C2:97:B0:00/36\tSmartqua\tSmartquantum Sa\n00:50:C2:97:C0:00/36\tCreaconT\tCreacon Technologies B.V.\n00:50:C2:97:D0:00/36\tSoehnleP\tSoehnle Professional GmbH & Co.KG\n00:50:C2:97:E0:00/36\tRfIndust\tRF Industries\n00:50:C2:97:F0:00/36\tC&I\tC&I  Co.Ltd\n00:50:C2:98:00:00/36\tDigitalP\tDigital Payment Technologies\n00:50:C2:98:10:00/36\tNovotron\tNovotronik GmbH\n00:50:C2:98:20:00/36\tTripleRi\tTriple Ring Technologies, Inc.\n00:50:C2:98:30:00/36\tBogartEn\tBogart Engineering\n00:50:C2:98:40:00/36\tAtel\tAtel Corporation\n00:50:C2:98:50:00/36\tEarnestc\tEarnestcom Sdn Bhd\n00:50:C2:98:60:00/36\tDsci\t\n00:50:C2:98:70:00/36\tJoinsoon\tJoinsoon Electronics MFG. Co., Ltd\n00:50:C2:98:80:00/36\tPantelIn\tPantel International\n00:50:C2:98:90:00/36\tPsigenic\tPsigenics Corporation\n00:50:C2:98:A0:00/36\tMev\tMEV Limited\n00:50:C2:98:B0:00/36\tTi2000Te\tTI2000 TECNOLOGIA INFORMATICA 2000\n00:50:C2:98:C0:00/36\tMgm-Devi\tMGM-Devices Oy\n00:50:C2:98:D0:00/36\tMecos\tMecos AG\n00:50:C2:98:E0:00/36\tLinkTech\tLink Technologies, Inc\n00:50:C2:98:F0:00/36\tBelikSPR\tBelik S.P.R.L.\n00:50:C2:99:00:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:99:10:00/36\tUgl\tUGL Limited\n00:50:C2:99:20:00/36\tIdtSound\tIDT Sound Processing Corporation\n00:50:C2:99:30:00/36\tUnetconv\tUnetconvergence Co., Ltd\n00:50:C2:99:40:00/36\tXafaxNed\tXafax Nederland bv\n00:50:C2:99:50:00/36\tInterCon\tInter Control Hermann Köhler  Elektrik GmbH&Co.KG\n00:50:C2:99:60:00/36\tCommerci\tCommercial Timesharing Inc.\n00:50:C2:99:70:00/36\tDeproÉle\tDepro Électronique\n00:50:C2:99:80:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:99:90:00/36\tCambusti\tCambustion Ltd\n00:50:C2:99:A0:00/36\tMiromico\tMiromico AG\n00:50:C2:99:B0:00/36\tBettiniS\tBettini srl\n00:50:C2:99:C0:00/36\tCats3\tCaTs3 Limited\n00:50:C2:99:D0:00/36\tPowersen\tPowersense A/S\n00:50:C2:99:E0:00/36\tEngageTe\tEngage Technologies\n00:50:C2:99:F0:00/36\tSietronE\tSietron Elektronik\n00:50:C2:9A:00:00/36\tTrs\tTrs Systems, Inc.\n00:50:C2:9A:10:00/36\tComapSRO\tComAp s.r.o\n00:50:C2:9A:20:00/36\tSamsyste\tSAMsystems GmbH\n00:50:C2:9A:30:00/36\tComputer\tComputerwise, Inc.\n00:50:C2:9A:40:00/36\tEntwickl\tEntwicklung Hard- & Software\n00:50:C2:9A:50:00/36\tConolog\tConolog Corporation\n00:50:C2:9A:60:00/36\tMetodo2\t\n00:50:C2:9A:70:00/36\tThalesCo\tThales Communications & Security S.A.\n00:50:C2:9A:80:00/36\tDomisSa\tDomis Sa\n00:50:C2:9A:90:00/36\tGdMissio\tGD Mission Systems\n00:50:C2:9A:A0:00/36\tTekoTele\tTEKO TELECOM SpA\n00:50:C2:9A:B0:00/36\tElectrod\tElectrodata Inc.\n00:50:C2:9A:C0:00/36\tQuestekA\tQuestek Australia Pty Ltd\n00:50:C2:9A:D0:00/36\tChronosT\tChronos Technology Ltd.\n00:50:C2:9A:E0:00/36\tEsensors\tEsensors, Inc.\n00:50:C2:9A:F0:00/36\tKress-Ne\tKRESS-NET Krzysztof Rutecki\n00:50:C2:9B:00:00/36\tEbru\tEbru GmbH\n00:50:C2:9B:10:00/36\tBonHora\tBon Hora GmbH\n00:50:C2:9B:20:00/36\tMesaLabs\tMesa Labs, Inc.\n00:50:C2:9B:30:00/36\tKahlerAu\tKahler Automation\n00:50:C2:9B:40:00/36\tEukreaEl\tEukrea Electromatique Sarl\n00:50:C2:9B:50:00/36\tTelegamm\tTelegamma srl\n00:50:C2:9B:60:00/36\tActech\t\n00:50:C2:9B:70:00/36\tStMichae\tSt. Michael Strategies\n00:50:C2:9B:80:00/36\tSoundPla\tSound Player Systems e.K.\n00:50:C2:9B:90:00/36\tIsa-Inte\tISA - Intelligent Sensing Anywhere, S.A.\n00:50:C2:9B:A0:00/36\tConnor-W\tConnor-Winfield\n00:50:C2:9B:B0:00/36\tOmicronE\tOMICRON electronics GmbH\n00:50:C2:9B:C0:00/36\tVesterEl\tVester Elektronik GmbH\n00:50:C2:9B:D0:00/36\tSensitro\tSensitron Semiconductor\n00:50:C2:9B:E0:00/36\tXadCommu\tXad Communications Ltd\n00:50:C2:9B:F0:00/36\t2nTeleko\t2N TELEKOMUNIKACE a.s.\n00:50:C2:9C:00:00/36\tStuytsEn\tStuyts Engineering Haarlem BV\n00:50:C2:9C:10:00/36\tTattileS\tTattile srl\n00:50:C2:9C:20:00/36\tTeamEngi\tTeam Enginers\n00:50:C2:9C:30:00/36\tGeSecuri\tGE Security-Kampro\n00:50:C2:9C:40:00/36\tVitelNet\tVitel Net\n00:50:C2:9C:50:00/36\tScansoni\tScansonic MI GmbH\n00:50:C2:9C:60:00/36\tProtroni\tProtronic GmbH\n00:50:C2:9C:70:00/36\tKumeraDr\tKumera Drives Oy\n00:50:C2:9C:80:00/36\tEthermet\tethermetrics\n00:50:C2:9C:90:00/36\tLuminexL\tLUMINEX Lighting Control Equipment\n00:50:C2:9C:A0:00/36\tEsab-Ata\tESAB-ATAS GmbH\n00:50:C2:9C:B0:00/36\tNis-Time\tNIS-time GmbH\n00:50:C2:9C:C0:00/36\tHirotech\tHirotech, Inc\n00:50:C2:9C:D0:00/36\tUweSchne\tUwe Schneider GmbH\n00:50:C2:9C:E0:00/36\tRonanEng\tRonan Engineering\n00:50:C2:9C:F0:00/36\tIntuitiv\tIntuitive Surgical, Inc\n00:50:C2:9D:00:00/36\tJDittric\tJ. DITTRICH ELEKTRONIC GmbH & Co. KG\n00:50:C2:9D:10:00/36\tBladeliu\tBladelius Design Group AB\n00:50:C2:9D:20:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:9D:30:00/36\tTelemetr\tTelemetrie Elektronik GmbH\n00:50:C2:9D:40:00/36\tFirst\t\n00:50:C2:9D:50:00/36\tNetpower\tNetpower Labs AB\n00:50:C2:9D:60:00/36\tInnovati\tInnovation, Institute, Inc\n00:50:C2:9D:70:00/36\tMelex\tMelex Inc.\n00:50:C2:9D:80:00/36\tSamsungH\tSamsung Heavy Industries Co.,Ltd.\n00:50:C2:9D:90:00/36\tCns\tCNS Systems, Inc.\n00:50:C2:9D:A0:00/36\tNeutroni\tNEUTRONIK e.K.\n00:50:C2:9D:B0:00/36\tWalterGr\tWalter Grotkasten\n00:50:C2:9D:C0:00/36\tFtmMarke\tFTM Marketing Limited\n00:50:C2:9D:D0:00/36\tInstitut\tInstitut Dr. Foerster\n00:50:C2:9D:E0:00/36\tChauvinA\tChauvin Arnoux\n00:50:C2:9D:F0:00/36\tCodec\tCODEC Co., Ltd.\n00:50:C2:9E:00:00/36\tDstSwiss\tDST Swiss AG\n00:50:C2:9E:10:00/36\tEnreduce\tEnreduce Energy Control AB\n00:50:C2:9E:20:00/36\tE-ViewsS\tE-ViEWS SAFETY SYSTEMS, INC\n00:50:C2:9E:30:00/36\tSaiInfor\tSAI Informationstechnik\n00:50:C2:9E:40:00/36\tPyxisCon\tPyxis Controls WLL\n00:50:C2:9E:50:00/36\tHallibur\tHalliburton Far East Pte Ltd\n00:50:C2:9E:60:00/36\tKumhoEle\tKumho Electric, Inc.\n00:50:C2:9E:70:00/36\tDorletSa\tDorlet Sau\n00:50:C2:9E:80:00/36\tHammock\tHammock Corporation\n00:50:C2:9E:90:00/36\tCiemmeSi\tCiemme Sistemi Spa\n00:50:C2:9E:A0:00/36\tSismodul\tSISMODULAR - Engenharia, Lda\n00:50:C2:9E:B0:00/36\tAforeSol\tAFORE Solutions Inc.\n00:50:C2:9E:C0:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n00:50:C2:9E:D0:00/36\tPicellBV\tPicell B.V.\n00:50:C2:9E:E0:00/36\tMichaelS\tMichael Stevens & Partners Ltd\n00:50:C2:9E:F0:00/36\tWoka-Ele\tWoKa-Elektronik GmbH\n00:50:C2:9F:00:00/36\tVeracity\tVeracity UK Ltd\n00:50:C2:9F:10:00/36\tIdeasSRL\tIDEAS s.r.l.\n00:50:C2:9F:20:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:9F:30:00/36\tVisionTe\tVision Technologies, Inc.\n00:50:C2:9F:40:00/36\tFsr\tFSR Inc.\n00:50:C2:9F:50:00/36\tCommexTe\tCommex Technologies\n00:50:C2:9F:60:00/36\tIonSense\tIon Sense Inc.\n00:50:C2:9F:70:00/36\tDaveJone\tDave Jones Design\n00:50:C2:9F:80:00/36\tAustcoCo\tAustco Communication Systems Pty Ltd\n00:50:C2:9F:90:00/36\tAbbTrans\tABB Transmission and Distribution Automation Equipment (Xiamen) Co., Ltd.\n00:50:C2:9F:A0:00/36\tTeranexA\tTeranex A Division of Silicon Optix\n00:50:C2:9F:B0:00/36\tVillbauK\tVillbau Kft.\n00:50:C2:9F:C0:00/36\tEctec\tEctec Inc.\n00:50:C2:9F:D0:00/36\tBittTech\tBitt technology-A Ltd.\n00:50:C2:9F:E0:00/36\tSpectraE\tSpectra Embedded Systems\n00:50:C2:9F:F0:00/36\tHumphrey\tHumphrey Products\n00:50:C2:A0:00:00/36\tTechnova\tTechnovare Systems\n00:50:C2:A0:10:00/36\tPatronic\tPatronics International LTD\n00:50:C2:A0:20:00/36\tReferenc\tReference, LLC.\n00:50:C2:A0:30:00/36\tEegEnter\tEEG Enterprises Inc\n00:50:C2:A0:40:00/36\tTpRadio\tTP Radio\n00:50:C2:A0:50:00/36\tAdgilDes\tAdgil Design Inc.\n00:50:C2:A0:60:00/36\tCloosEle\tCloos Electronic Gmbh\n00:50:C2:A0:70:00/36\tDynonIns\tDynon Instruments\n00:50:C2:A0:80:00/36\tLabjack\tLabJack Corporation\n00:50:C2:A0:90:00/36\tInnovati\tInnovative American Technology\n00:50:C2:A0:A0:00/36\tAcdElekt\tACD Elektronik GmbH\n00:50:C2:A0:B0:00/36\tIdsGeora\tIDS GeoRadar s.r.l.\n00:50:C2:A0:C0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:A0:D0:00/36\tCharlyro\tCharlyrobot\n00:50:C2:A0:E0:00/36\tEngicamS\tENGICAM s.r.l.\n00:50:C2:A0:F0:00/36\tVisualwa\tVisualware Inc\n00:50:C2:A1:00:00/36\tEssentia\tEssential Design & Integration P/L\n00:50:C2:A1:10:00/36\tOjscRawe\tOJSC Rawenstvo\n00:50:C2:A1:20:00/36\tHceEngin\tHCE Engineering S.r.l.\n00:50:C2:A1:30:00/36\tTalyst\tTalyst, Inc.\n00:50:C2:A1:40:00/36\tElbitOfA\tElbit Systems of America - Tallahassee Operations\n00:50:C2:A1:50:00/36\tIndustri\tIndustrial Computing Ltd\n00:50:C2:A1:60:00/36\tBaudisch\tBaudisch Electronic GmbH\n00:50:C2:A1:70:00/36\tWinnersS\tWinners Satellite Electronics Corp.\n00:50:C2:A1:80:00/36\tEoslink\t\n00:50:C2:A1:90:00/36\tIconTime\tIcon Time Systems\n00:50:C2:A1:A0:00/36\tDdl\t\n00:50:C2:A1:B0:00/36\tRealtime\tRealtime Systems Ltd.\n00:50:C2:A1:C0:00/36\tMicrotec\tMicrotechnica\n00:50:C2:A1:D0:00/36\tSamhEngi\tSAMH Engineering Services\n00:50:C2:A1:E0:00/36\tMamac\tMAMAC Systems, Inc.\n00:50:C2:A1:F0:00/36\tFlightDa\tFlight Data Systems Pty Ltd\n00:50:C2:A2:00:00/36\tQuorumTe\tQuorum Technologies Ltd\n00:50:C2:A2:10:00/36\tIsacSrl\tIsac Srl\n00:50:C2:A2:20:00/36\tNipponMa\tNippon Manufacturing Service Corporation (abbreviated as 'nms')\n00:50:C2:A2:30:00/36\tAgilityM\tAgility Mfg, Inc.\n00:50:C2:A2:40:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n00:50:C2:A2:50:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:A2:60:00/36\tPreferre\tPreferred Oil, LLC\n00:50:C2:A2:70:00/36\tMeconetE\tmeconet e. K.\n00:50:C2:A2:80:00/36\tKendaEle\tKenda Electronic Systems Limited\n00:50:C2:A2:90:00/36\tLuminex\tLuminex Corporation\n00:50:C2:A2:A0:00/36\tCustomCo\tCustom Control Concepts\n00:50:C2:A2:B0:00/36\tApriliaR\tAprilia Racing S.R.L.\n00:50:C2:A2:C0:00/36\tKws-Elec\tKWS-Electronic GmbH\n00:50:C2:A2:D0:00/36\tInventur\tInventure Inc.\n00:50:C2:A2:E0:00/36\tYuyamaMf\tYUYAMA MFG Co.,Ltd\n00:50:C2:A2:F0:00/36\tDragonfl\tDragonFly Scientific LLC\n00:50:C2:A3:00:00/36\tD-Ta\tD-TA Systems\n00:50:C2:A3:10:00/36\tCoolit\tCoolit Systems, Inc.\n00:50:C2:A3:20:00/36\tHarrisDe\tHarris Designs of NRV, Inc.\n00:50:C2:A3:30:00/36\tFujiFirm\tFuji Firmware\n00:50:C2:A3:40:00/36\tCasabyte\tCasabyte Inc.\n00:50:C2:A3:50:00/36\tAppareoL\tAppareo Systems, LLC\n00:50:C2:A3:60:00/36\tShenzhen\tShenzhen Shangji electronic Co.Ltd\n00:50:C2:A3:70:00/36\tSoftware\tSoftware Systems Plus\n00:50:C2:A3:80:00/36\tTredDisp\tTred Displays\n00:50:C2:A3:90:00/36\tIndustri\tIndustrial Data Products Ltd\n00:50:C2:A3:A0:00/36\tTelecor\tTelecor Inc.\n00:50:C2:A3:B0:00/36\tIpcontro\tIPcontrols GmbH\n00:50:C2:A3:C0:00/36\tBrählerI\tBrähler ICS Konferenztechnik AG\n00:50:C2:A3:D0:00/36\tOwandy\t\n00:50:C2:A3:E0:00/36\tDueviSnc\tDuevi Snc Di Mora E Santese\n00:50:C2:A3:F0:00/36\tLhaCc\tLHA Systems CC\n00:50:C2:A4:00:00/36\tMosberge\tMosberger Consulting LLC\n00:50:C2:A4:10:00/36\tMeiryoDe\tMeiryo Denshi Corp.\n00:50:C2:A4:20:00/36\tRealvisi\tRealVision Inc.\n00:50:C2:A4:30:00/36\tNks\tNKS Co.Ltd.\n00:50:C2:A4:40:00/36\tTorcTech\tTORC Technologies\n00:50:C2:A4:50:00/36\tSofradir\tSofradir-EC\n00:50:C2:A4:60:00/36\tSoftroni\tSoftronics Ltd.\n00:50:C2:A4:70:00/36\tPrimetec\tPrimetech Engineering Corp.\n00:50:C2:A4:80:00/36\tThalesUk\tThales UK Limited\n00:50:C2:A4:90:00/36\tWayneDal\tWayne Dalton Corp.\n00:50:C2:A4:A0:00/36\tDitronSR\tDITRON S.r.l.\n00:50:C2:A4:B0:00/36\tL-3Commu\tL-3 Communications Mobile-Vision, Inc.\n00:50:C2:A4:C0:00/36\tVasonova\tVasoNova, Inc.\n00:50:C2:A4:D0:00/36\tLevelsta\tLevelStar LLC.\n00:50:C2:A4:E0:00/36\tConduant\tConduant Corporation\n00:50:C2:A4:F0:00/36\tDeuta\tDeuta GmbH\n00:50:C2:A5:00:00/36\tI-RedInf\ti-RED Infrarot Systeme GmbH\n00:50:C2:A5:10:00/36\tY-Produc\tY-products co.ltd.\n00:50:C2:A5:20:00/36\tVon\tThe VON Corporation\n00:50:C2:A5:30:00/36\tQualityD\tQuality & Design\n00:50:C2:A5:40:00/36\tDiamondP\tDiamond Point International (Europe) Ltd\n00:50:C2:A5:50:00/36\tArrowval\tArrowvale Electronics\n00:50:C2:A5:60:00/36\tReametri\tReaMetrix, Inc.\n00:50:C2:A5:70:00/36\tJuiceTec\tJuice Technologies, LLC\n00:50:C2:A5:80:00/36\tEpl\t\n00:50:C2:A5:90:00/36\tGspSprac\tGSP Sprachtechnologie GmbH\n00:50:C2:A5:A0:00/36\tItas\tITAS A/S\n00:50:C2:A5:B0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:A5:C0:00/36\tJscCompo\tJSC Component-ASU\n00:50:C2:A5:D0:00/36\tMecc\tMecc Co., Ltd.\n00:50:C2:A5:E0:00/36\tAnsenInv\tAnsen Investment Holdings Ltd.\n00:50:C2:A5:F0:00/36\tAlgaMicr\tAlga Microwave Inc\n00:50:C2:A6:00:00/36\tArrowCen\tArrow Central Europe GmbH - Division Spoerle\n00:50:C2:A6:10:00/36\tFrSauter\tFr. Sauter AG\n00:50:C2:A6:20:00/36\tGrossenb\tGrossenbacher Systeme AG\n00:50:C2:A6:30:00/36\tEmsIndus\tEMS Industries\n00:50:C2:A6:40:00/36\tTetronik\ttetronik GmbH AEN\n00:50:C2:A6:50:00/36\tMark-O-P\tMark-O-Print GmbH\n00:50:C2:A6:60:00/36\tDvtech\t\n00:50:C2:A6:70:00/36\tGssAvion\tGSS Avionics Limited\n00:50:C2:A6:80:00/36\tX-PertPa\tX-Pert Paint Mixing Systems\n00:50:C2:A6:90:00/36\tAdvanced\tAdvanced Integrated Systems\n00:50:C2:A6:A0:00/36\tInfocros\tInfocrossing\n00:50:C2:A6:B0:00/36\tExplorer\tExplorer Inc.\n00:50:C2:A6:C0:00/36\tFigmentD\tFigment Design Laboratories\n00:50:C2:A6:D0:00/36\tDtvInnov\tDTV Innovations\n00:50:C2:A6:E0:00/36\tScreenTe\tScreen Technics Pty Limited\n00:50:C2:A6:F0:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:A7:00:00/36\tReliable\tReliable System Services Corp\n00:50:C2:A7:10:00/36\tPurite\tPurite Ltd\n00:50:C2:A7:20:00/36\tGamber-J\tGamber-Johnson LLC.\n00:50:C2:A7:30:00/36\tKyoeiEng\tKYOEI ENGINEERING Co.,Ltd.\n00:50:C2:A7:40:00/36\tDspDesig\tDsp Design Ltd\n00:50:C2:A7:50:00/36\tJtl\tJTL Systems Ltd.\n00:50:C2:A7:60:00/36\tRoeschWa\tRoesch & Walter Industrie-Elektronik GmbH\n00:50:C2:A7:70:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:A7:80:00/36\tApantacL\tApantac LLC\n00:50:C2:A7:90:00/36\tSaintron\tSaintronic\n00:50:C2:A7:A0:00/36\tDetnetSo\tDetNet South Africa PTY (LTD)\n00:50:C2:A7:B0:00/36\tOrangeTr\tOrange Tree Technologies\n00:50:C2:A7:C0:00/36\tPneu-Log\tPneu-Logic Corporation\n00:50:C2:A7:D0:00/36\tVitelNet\tVitel Net\n00:50:C2:A7:E0:00/36\tIndepend\tIndependent Project Engineering Ltd\n00:50:C2:A7:F0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:A8:00:00/36\tArdSa\tard sa\n00:50:C2:A8:10:00/36\tBpcCircu\tBPC circuits Ltd\n00:50:C2:A8:20:00/36\tCt\tCT Company\n00:50:C2:A8:30:00/36\tTechnoSo\tTechno Sobi Co. Ltd.\n00:50:C2:A8:40:00/36\tLinoManf\tLino Manfrotto +Co spa\n00:50:C2:A8:50:00/36\tJoysyste\tJoysystem\n00:50:C2:A8:60:00/36\tLimab\tLimab Ab\n00:50:C2:A8:70:00/36\tLittlemo\tLittlemore Scientific\n00:50:C2:A8:80:00/36\tS-Sys\t\n00:50:C2:A8:90:00/36\tCaTraffi\tCA Traffic Ltd\n00:50:C2:A8:A0:00/36\tAudioEng\tAudio Engineering Ltd.\n00:50:C2:A8:B0:00/36\tNavicron\tNavicron Oy\n00:50:C2:A8:C0:00/36\tRedwireL\tRedwire, LLC\n00:50:C2:A8:D0:00/36\tFrontier\tFrontier Electronic Systems Corp.\n00:50:C2:A8:E0:00/36\tBfiIndus\tBFI Industrie-Elektronik GmbH & Co.KG\n00:50:C2:A8:F0:00/36\tQuantum3\tQuantum3D, Inc.\n00:50:C2:A9:00:00/36\tSTwo\tS.two Corporation\n00:50:C2:A9:10:00/36\tCeronTec\tCeron Tech Co.,LTD\n00:50:C2:A9:20:00/36\tSiconSrl\tSicon srl\n00:50:C2:A9:30:00/36\tSpxDehyd\tSPX Dehydration & Filtration\n00:50:C2:A9:40:00/36\tPar-Tech\tPar-Tech, Inc.\n00:50:C2:A9:50:00/36\tInnovaci\tINNOVACIONES Microelectrónicas SL (AnaFocus)\n00:50:C2:A9:60:00/36\tFepSrl\tFep Srl\n00:50:C2:A9:70:00/36\tMicrosys\tMicrosystemes\n00:50:C2:A9:80:00/36\tSentry36\tSentry 360 Security\n00:50:C2:A9:90:00/36\tHaivisio\tHaivision Systems Inc\n00:50:C2:A9:A0:00/36\tAbsolutr\tAbsolutron. LLC\n00:50:C2:A9:B0:00/36\tPdqManuf\tPDQ Manufacturing  Inc.\n00:50:C2:A9:C0:00/36\tStarElec\tStar Electronics GmbH & Co. KG\n00:50:C2:A9:D0:00/36\tJoehlKoe\tJoehl & Koeferli AG\n00:50:C2:A9:E0:00/36\tProconEn\tProcon Engineering Limited\n00:50:C2:A9:F0:00/36\tYellowso\tYellowSoft Co., Ltd.\n00:50:C2:AA:00:00/36\tSmithMet\tSmith Meter, Inc.\n00:50:C2:AA:10:00/36\tElremEle\tElrem Electronic Ag\n00:50:C2:AA:20:00/36\tElpaSas\tELPA sas\n00:50:C2:AA:30:00/36\tPeekTraf\tPeek Traffic Corporation\n00:50:C2:AA:40:00/36\tPsiPrint\tPSi Printer Systems international GmbH\n00:50:C2:AA:50:00/36\tTampereU\tTampere University of Technology\n00:50:C2:AA:60:00/36\tBassettE\tBassett Electronic Systems ltd\n00:50:C2:AA:70:00/36\tEndeasOy\tEndeas Oy\n00:50:C2:AA:80:00/36\tNexansCa\tNexans Cabling Solutions\n00:50:C2:AA:90:00/36\tSanGiorg\tSAN GIORGIO S.E.I.N. srl\n00:50:C2:AA:A0:00/36\tFlexible\tFlexible Picture Systems\n00:50:C2:AA:B0:00/36\tBrsSiste\tBRS Sistemas Eletrônicos\n00:50:C2:AA:C0:00/36\tVisicon\tVisiCon GmbH\n00:50:C2:AA:D0:00/36\tUpdate\tUpdate Systems Inc.\n00:50:C2:AA:E0:00/36\tOutlineS\tOUTLINE srl\n00:50:C2:AA:F0:00/36\tSantaBar\tSanta Barbara Instrument Group\n00:50:C2:AB:00:00/36\tFrakoKon\tFRAKO Kondensatoren- und Anlagenbau GmbH\n00:50:C2:AB:10:00/36\tBitmanuf\tBitmanufaktur GmbH\n00:50:C2:AB:20:00/36\tProcom\tProCom Systems, Inc.\n00:50:C2:AB:30:00/36\tCompañía\tCompañía de Instrumentacion y control, S.L.\n00:50:C2:AB:40:00/36\tN3kInfor\tn3k Informatik GmbH\n00:50:C2:AB:50:00/36\tMettlerT\tMettler Toledo Hi Speed\n00:50:C2:AB:60:00/36\tGygaxEmb\tGygax Embedded Engineering GEE.ch\n00:50:C2:AB:70:00/36\tTwinfall\tTwinfalls Technologies\n00:50:C2:AB:80:00/36\tAhmClika\tAHM Limited (CLiKAPAD)\n00:50:C2:AB:90:00/36\tShowtacl\tShowtacle\n00:50:C2:AB:A0:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:AB:B0:00/36\tVolantic\tVolantic AB\n00:50:C2:AB:C0:00/36\tBarrick\t\n00:50:C2:AB:D0:00/36\tMonitorB\tMonitor Business Machines Ltd.\n00:50:C2:AB:E0:00/36\tApLabs\tAP Labs\n00:50:C2:AB:F0:00/36\tMccCompu\tMCC Computer Company\n00:50:C2:AC:00:00/36\tDsProAud\tDS PRO Audio Ltda\n00:50:C2:AC:10:00/36\tDaishin-\tDAISHIN-DENSHI Co., Ltd\n00:50:C2:AC:20:00/36\tOpenxsBV\tOpenXS B.V.\n00:50:C2:AC:30:00/36\tDiversif\tDiversified Control, Inc.\n00:50:C2:AC:40:00/36\tOrionTec\tOrion Technologies,LLC\n00:50:C2:AC:50:00/36\tE-Motion\tE-Motion System, Inc.\n00:50:C2:AC:60:00/36\tMarathon\tMarathon Products, Inc.\n00:50:C2:AC:70:00/36\tWaveip\t\n00:50:C2:AC:80:00/36\tPalladio\tPalladio Systeme GmbH\n00:50:C2:AC:90:00/36\tSteinbei\tSteinbeis-Transferzentrum Embedded Design und Networking\n00:50:C2:AC:A0:00/36\tSoftCont\tSoft & Control Technology s.r.o.\n00:50:C2:AC:B0:00/36\tU-Care\tU-CARE INC.\n00:50:C2:AC:C0:00/36\tStockery\tStockerYale\n00:50:C2:AC:D0:00/36\tMeshwork\tMeshWorks Wireless Oy\n00:50:C2:AC:E0:00/36\tChronolo\tChronoLogic Pty. Ltd.\n00:50:C2:AC:F0:00/36\tSpContro\tSP Controls, Inc\n00:50:C2:AD:00:00/36\tGeonauti\tGeonautics Australia Pty Ltd\n00:50:C2:AD:10:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:AD:20:00/36\tRafael\t\n00:50:C2:AD:30:00/36\tPeekTraf\tPeek Traffic Corporation\n00:50:C2:AD:40:00/36\tGlobalRa\tGlobal Rainmakers Inc.\n00:50:C2:AD:50:00/36\tMightyLu\tMighty Lube Systematic Lubrication, Inc.\n00:50:C2:AD:60:00/36\tUnisenso\tUnisensor A/S\n00:50:C2:AD:70:00/36\tAirMonit\tAir Monitors Ltd\n00:50:C2:AD:80:00/36\tIncyma\t\n00:50:C2:AD:90:00/36\tElettron\telettrondata srl\n00:50:C2:AD:A0:00/36\tEssepieS\tEssepie Srl\n00:50:C2:AD:B0:00/36\tGoEngine\tGO engineering GmbH\n00:50:C2:AD:C0:00/36\tSynthese\tSynthesechemie Dr. Penth GmbH\n00:50:C2:AD:D0:00/36\tGdMissio\tGD Mission Systems\n00:50:C2:AD:E0:00/36\tNeoptix\tNeoptix Inc.\n00:50:C2:AD:F0:00/36\tAltinex\tAltinex, Inc\n00:50:C2:AE:00:00/36\tAt4Wirel\tAT4 wireless.S.A\n00:50:C2:AE:10:00/36\tEvercare\t\n00:50:C2:AE:20:00/36\tPowerMed\tPower Medical Interventions\n00:50:C2:AE:30:00/36\tPsd\t\n00:50:C2:AE:40:00/36\tAdvanced\tAdvanced Electronic Designs, Inc.\n00:50:C2:AE:50:00/36\tAbsGesel\tABS Gesellschaft f. Automatisierung, Bildverarbeitung und Software mbH\n00:50:C2:AE:60:00/36\tVecomUsa\tVecom Usa\n00:50:C2:AE:70:00/36\tRedwood\tRedwood Systems\n00:50:C2:AE:80:00/36\tBit-LabP\tBit-Lab PTY LTD\n00:50:C2:AE:90:00/36\tClearcor\tClearCorp Enterprises, Inc\n00:50:C2:AE:A0:00/36\tEmbedia\t\n00:50:C2:AE:B0:00/36\tUmlogics\tUMLogics Corporation\n00:50:C2:AE:C0:00/36\tFritzPau\tFritz Pauker Ingenieure GmbH\n00:50:C2:AE:D0:00/36\t3roam\t\n00:50:C2:AE:E0:00/36\tIptec\tIPtec, Inc.\n00:50:C2:AE:F0:00/36\tNational\tNational CineMedia\n00:50:C2:AF:00:00/36\tFrSauter\tFr. Sauter AG\n00:50:C2:AF:10:00/36\tGreenGoo\tGreen Goose\n00:50:C2:AF:20:00/36\tAcdElekt\tACD Elektronik GmbH\n00:50:C2:AF:30:00/36\tPalomarP\tPalomar Products, Inc.\n00:50:C2:AF:40:00/36\tDixellSP\tDixell S.p.A.\n00:50:C2:AF:50:00/36\tKramaraS\tKramara s.r.o.\n00:50:C2:AF:60:00/36\tEnergid\t\n00:50:C2:AF:70:00/36\tMidwestM\tMidwest Microwave Solutions Inc.\n00:50:C2:AF:80:00/36\tGlobalSa\tGlobal Satellite Engineering\n00:50:C2:AF:90:00/36\tIngenieu\tIngenieurbuero Bickele und Buehler GmbH\n00:50:C2:AF:A0:00/36\tAbsolute\tAbsolute Fire Solutions Inc.\n00:50:C2:AF:B0:00/36\tVocality\tVocality International Ltd\n00:50:C2:AF:C0:00/36\tOdusTech\tOdus Technologies SA\n00:50:C2:AF:D0:00/36\tHomescen\tHomeScenario, Inc.\n00:50:C2:AF:E0:00/36\tTrolex\tTrolex Limited\n00:50:C2:AF:F0:00/36\tXobyteLl\tXoByte LLC\n00:50:C2:B0:00:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:B0:10:00/36\tHsrHaral\tHSR Harald L. Reuter\n00:50:C2:B0:20:00/36\tMaster\tMaster Co Ltd\n00:50:C2:B0:30:00/36\tSpiderTe\tSpider Tecnologia Ind. e Com. Ltda.\n00:50:C2:B0:40:00/36\tUbiquiti\tUbiquiti Networks Inc.\n00:50:C2:B0:50:00/36\tPolaSRL\tPOLA s.r.l.\n00:50:C2:B0:60:00/36\tCompudes\tCompuDesigns, Inc.\n00:50:C2:B0:70:00/36\tFareco\t\n00:50:C2:B0:80:00/36\tGoerlitz\tGoerlitz AG\n00:50:C2:B0:90:00/36\tHarperCh\tHarper Chalice Group Limited\n00:50:C2:B0:A0:00/36\tInduther\tIndutherm Giesstechnologie GmbH\n00:50:C2:B0:B0:00/36\tHoneywel\tHoneywell\n00:50:C2:B0:C0:00/36\tSmartbTe\tSmartb Technologies\n00:50:C2:B0:D0:00/36\tJapanEle\tJapan Electronics System, Inc\n00:50:C2:B0:E0:00/36\tKyabLule\tKYAB Lulea AB\n00:50:C2:B0:F0:00/36\tNaraCont\tNARA Controls Inc.\n00:50:C2:B1:00:00/36\tMarineEn\tMarine Entertainment Systems Ltd\n00:50:C2:B1:10:00/36\tExelSRL\tEXEL s.r.l\n00:50:C2:B1:20:00/36\tCmElektr\tCM Elektronik GmbH\n00:50:C2:B1:30:00/36\tMeasyEle\tMeasy Electronics Co., Ltd.\n00:50:C2:B1:40:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:B1:50:00/36\tPhototel\tPhotoTelesis LP\n00:50:C2:B1:60:00/36\tNeothing\tNeothings, Inc.\n00:50:C2:B1:70:00/36\tElcoteqD\tElcoteq Design Center Oy\n00:50:C2:B1:80:00/36\tRosslare\tRosslare Enterprises Limited\n00:50:C2:B1:90:00/36\tPolytron\tPolytron Corporation\n00:50:C2:B1:A0:00/36\tElcus\t\n00:50:C2:B1:B0:00/36\tIntegrat\tIntegrated  Control Corp.\n00:50:C2:B1:C0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:B1:D0:00/36\tTelegeni\tTelegenix\n00:50:C2:B1:E0:00/36\tAbbottMe\tAbbott Medical Optics\n00:50:C2:B1:F0:00/36\tAtlasCop\tAtlas Copco IAS GmbH\n00:50:C2:B2:00:00/36\tFive9Net\tFIVE9 NETWORK SYSTEMS LLC\n00:50:C2:B2:10:00/36\tPhytron-\tPhytron-Elektronik GmbH\n00:50:C2:B2:20:00/36\tFarsiteC\tFarSite Communications Limited\n00:50:C2:B2:30:00/36\tRonyoTec\tRonyo Technologies s.r.o.\n00:50:C2:B2:40:00/36\tTeledyne\tTeledyne Defence Limited\n00:50:C2:B2:50:00/36\tTriax\tTriax A/S\n00:50:C2:B2:60:00/36\tElko\tElko Systems\n00:50:C2:B2:70:00/36\tAteme\t\n00:50:C2:B2:80:00/36\tMicromax\tMicromax Pty. Ltd.\n00:50:C2:B2:90:00/36\tIntegraL\tIntegra LifeSciences (Ireland) Ltd\n00:50:C2:B2:A0:00/36\tTrenchAu\tTrench Austria GmbH\n00:50:C2:B2:B0:00/36\tCosmodat\tCosmoData Informatica Ltda.\n00:50:C2:B2:C0:00/36\tConcepte\tConcepteers, LLC\n00:50:C2:B2:D0:00/36\tDatasatD\tDatasat Digital Entertainment\n00:50:C2:B2:E0:00/36\tAct\t\n00:50:C2:B2:F0:00/36\tIntelliv\tIntelliVision Technologies, Corp\n00:50:C2:B3:00:00/36\tAppliedM\tApplied Micro Electronics AME bv\n00:50:C2:B3:10:00/36\tShopSafe\tShop Safe AG\n00:50:C2:B3:20:00/36\tByresSec\tByres Security Inc\n00:50:C2:B3:30:00/36\tNumcore\tNumcore Ltd\n00:50:C2:B3:40:00/36\tMeisol\tMeisol co.,ltd\n00:50:C2:B3:50:00/36\tHaneron\t\n00:50:C2:B3:60:00/36\tCrde\t\n00:50:C2:B3:70:00/36\tIadea\tIAdea Corporation\n00:50:C2:B3:80:00/36\tGrenmore\tGrenmore Ltd\n00:50:C2:B3:90:00/36\tSixis\tsiXis, Inc.\n00:50:C2:B3:A0:00/36\tNikon\tNikon Systems Inc.\n00:50:C2:B3:B0:00/36\tSportvis\tSportvision Inc.\n00:50:C2:B3:C0:00/36\tJanascar\tJanasCard\n00:50:C2:B3:D0:00/36\tAms\t\n00:50:C2:B3:E0:00/36\tSageCons\tSage Consultants\n00:50:C2:B3:F0:00/36\tM-Tronic\tM-Tronic Design and Technology GmbH\n00:50:C2:B4:00:00/36\tTecnintH\tTecnint HTE SRL\n00:50:C2:B4:10:00/36\tTataPowe\tTata Power Company, Strategic Electronics Division\n00:50:C2:B4:20:00/36\tEtmElect\tETM Electromatic Incorporated\n00:50:C2:B4:30:00/36\tJ-System\tJ-Systems Inc.\n00:50:C2:B4:40:00/36\tAmpcontr\tAmpcontrol Pty Ltd\n00:50:C2:B4:50:00/36\tEfftroni\tEfftronics Systems (P) Ltd\n00:50:C2:B4:60:00/36\tMobileye\t\n00:50:C2:B4:70:00/36\tMcsMicro\tMCS MICRONIC Computer Systeme GmbH\n00:50:C2:B4:80:00/36\tMtd\tMTD GmbH\n00:50:C2:B4:90:00/36\tAplexTec\tAplex Technology Inc.\n00:50:C2:B4:A0:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:B4:B0:00/36\tChitose\tChitose Co.,Ltd\n00:50:C2:B4:C0:00/36\tElectroc\tElectroCom\n00:50:C2:B4:D0:00/36\tTroll\tTroll Systems Corporation\n00:50:C2:B4:E0:00/36\tAixcontr\tAixControl GmbH\n00:50:C2:B4:F0:00/36\tSenconUk\tSencon UK Ltd.\n00:50:C2:B5:00:00/36\tSelco\t\n00:50:C2:B5:10:00/36\tAeroflex\tAeroflex GmbH\n00:50:C2:B5:20:00/36\tSmhTechn\tSMH Technologies\n00:50:C2:B5:30:00/36\tProdco\t\n00:50:C2:B5:40:00/36\tApgCashD\tAPG Cash Drawer, LLC\n00:50:C2:B5:50:00/36\tSanyoEle\tSanyo Electronic Industries Co.,Ltd\n00:50:C2:B5:60:00/36\tSinoviaS\tSinovia Sa\n00:50:C2:B5:70:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:B5:80:00/36\tRealD\tReal D\n00:50:C2:B5:90:00/36\tSlicanSp\tSLICAN sp. z o.o.\n00:50:C2:B5:A0:00/36\tGreenCen\tGREEN Center s.r.o.\n00:50:C2:B5:B0:00/36\tTimberli\tTimberline Mfg Company\n00:50:C2:B5:C0:00/36\tAdiVideo\tADI Video Technologies\n00:50:C2:B5:D0:00/36\tPlitronM\tPlitron Manufacturing Inc.\n00:50:C2:B5:E0:00/36\tPalgiken\tPalgiken Co.,Ltd.\n00:50:C2:B5:F0:00/36\tNorthBri\tNorth Bridge Technologies\n00:50:C2:B6:00:00/36\tOooNpfAt\tOoo Npf Atis\n00:50:C2:B6:10:00/36\tNayos\tNayos LTD\n00:50:C2:B6:20:00/36\tMeasurem\tMeasurement Technology NW\n00:50:C2:B6:30:00/36\tRoVeRLab\tRO.VE.R. Laboratories S.p.A\n00:50:C2:B6:40:00/36\tFewBauer\tFEW Bauer GmbH\n00:50:C2:B6:50:00/36\tPeekTraf\tPeek Traffic Corporation\n00:50:C2:B6:60:00/36\tDeuta-We\tDeuta-Werke GmbH\n00:50:C2:B6:70:00/36\tRc\tRC Systems Co. Inc.\n00:50:C2:B6:80:00/36\tElectron\tElectronic Systems Protection, Inc.\n00:50:C2:B6:90:00/36\tThetisSP\tThetis S.p.A.\n00:50:C2:B6:A0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:B6:B0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:B6:C0:00/36\tDrinelec\t\n00:50:C2:B6:D0:00/36\tSoundMet\tSound Metrics Corp\n00:50:C2:B6:E0:00/36\tPrivate\t\n00:50:C2:B6:F0:00/36\tCt\tCT Company\n00:50:C2:B7:00:00/36\tNisshinE\tNisshin Electronics co.,ltd.\n00:50:C2:B7:10:00/36\tDigitale\tDigitale Analoge COMponenten West Electronic Vertriebs GmbH\n00:50:C2:B7:20:00/36\tAdvanced\tAdvanced Desktop Systems Ltd\n00:50:C2:B7:30:00/36\tArkrayKy\tARKRAY, Inc. Kyoto Laboratory\n00:50:C2:B7:40:00/36\tAxedJaku\tAXED Jakubowski Wojciechowski sp.j.\n00:50:C2:B7:50:00/36\tBlankom\t\n00:50:C2:B7:60:00/36\tItfFrösc\tITF Fröschl GmbH\n00:50:C2:B7:70:00/36\tKristech\t\n00:50:C2:B7:80:00/36\tFolink\t\n00:50:C2:B7:90:00/36\tMitsuyaL\tMitsuya Laboratories Inc.\n00:50:C2:B7:A0:00/36\tSchnoorI\tSchnoor Industrieelektronik GmbH & Co. KG\n00:50:C2:B7:B0:00/36\tQuartech\tQuartech Corporation\n00:50:C2:B7:C0:00/36\tBettiniS\tBettini srl\n00:50:C2:B7:D0:00/36\tEletechS\tELETECH Srl\n00:50:C2:B7:E0:00/36\tNaretren\tNaretrends\n00:50:C2:B7:F0:00/36\tEnatel\t\n00:50:C2:B8:00:00/36\tIscreenL\tiScreen LLC\n00:50:C2:B8:10:00/36\tGhlAdvan\tGHL Advanced Technolgy GmbH & Co. KG\n00:50:C2:B8:20:00/36\tTanabiki\tTANABIKI Inc.\n00:50:C2:B8:30:00/36\tAdvanced\tAdvanced Storage Concepts, Inc.\n00:50:C2:B8:40:00/36\tInnovate\tInnovate Software Solutions Pvt Ltd\n00:50:C2:B8:50:00/36\tSilverne\tSilverNet\n00:50:C2:B8:60:00/36\tAsto\t\n00:50:C2:B8:70:00/36\tEmac\tEMAC, Inc.\n00:50:C2:B8:80:00/36\tGigatron\tGigatronik  Köln GmbH\n00:50:C2:B8:90:00/36\tEntecEle\tENTEC Electric & Electronic Co., LTD.\n00:50:C2:B8:A0:00/36\tMicropoi\tMicroPoise\n00:50:C2:B8:B0:00/36\tFbb\t\n00:50:C2:B8:C0:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:B8:D0:00/36\tCemsi\t\n00:50:C2:B8:E0:00/36\tWacIsrae\tWAC (Israel) Ltd.\n00:50:C2:B8:F0:00/36\tGentec\t\n00:50:C2:B9:00:00/36\tNaonwork\tNAONWORKS Co., Ltd\n00:50:C2:B9:10:00/36\tFinnet-S\tFinnet-Service Ltd.\n00:50:C2:B9:20:00/36\tAbbTrans\tABB Transmission and Distribution Automation Equipment (Xiamen) Co., Ltd.\n00:50:C2:B9:30:00/36\tEmcPartn\tEmc Partner Ag\n00:50:C2:B9:40:00/36\tTritechI\tTritech International Ltd\n00:50:C2:B9:50:00/36\tRxMonito\tRx Monitoring Services\n00:50:C2:B9:60:00/36\tOnixElec\tOnix Electronic Systems Inc\n00:50:C2:B9:70:00/36\tIkerlan\t\n00:50:C2:B9:80:00/36\tSouthwes\tSouthwest Research Institute\n00:50:C2:B9:90:00/36\tGreenlig\tGreenlight Innovation Corp.\n00:50:C2:B9:A0:00/36\tTaloNv\tTalo, NV Inc\n00:50:C2:B9:B0:00/36\tTelventy\tTelventy Energia S.A.\n00:50:C2:B9:C0:00/36\tDaveSrl\tDave Srl\n00:50:C2:B9:D0:00/36\tWVershov\tW. Vershoven GmbH\n00:50:C2:B9:E0:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:B9:F0:00/36\tAudiosco\tAUDIOSCOPE 2K SRL\n00:50:C2:BA:00:00/36\tTxtr\ttxtr GmbH\n00:50:C2:BA:10:00/36\tTranstec\tTranstechnik GmbH & Co.KG\n00:50:C2:BA:20:00/36\tLogicalT\tLogical Tools s.r.l.\n00:50:C2:BA:30:00/36\tDspDesig\tDsp Design Ltd\n00:50:C2:BA:40:00/36\tCustosMo\tCustos Mobile S.L.\n00:50:C2:BA:50:00/36\tIntercel\tInterCel Pty Ltd\n00:50:C2:BA:60:00/36\tJomitek\t\n00:50:C2:BA:70:00/36\tRaumcomp\tRaumComputer Entwicklungs- und Vertriebs GmbH\n00:50:C2:BA:80:00/36\tPeekTraf\tPeek Traffic Corporation\n00:50:C2:BA:90:00/36\tSissTech\tSISS Technology Inc.\n00:50:C2:BA:A0:00/36\tNetworkf\tNetworkFX Communications, LLC\n00:50:C2:BA:B0:00/36\tIdealTek\tiDeal Teknoloji Bilisim Cozumleri A.S.\n00:50:C2:BA:C0:00/36\tVitecoVn\tViteco Vnpt Jsc\n00:50:C2:BA:D0:00/36\tPredikto\tPrediktor AS\n00:50:C2:BA:E0:00/36\tFiberCon\tFiber Connections Inc.\n00:50:C2:BA:F0:00/36\tMangodsp\t\n00:50:C2:BB:00:00/36\tGainbrai\tGainbrain\n00:50:C2:BB:10:00/36\tPro4tech\t\n00:50:C2:BB:20:00/36\tStMichae\tSt Michael Strategies Inc\n00:50:C2:BB:30:00/36\tClimatew\tClimateWell AB (publ)\n00:50:C2:BB:40:00/36\tJscElect\tJSC Electrical Equipment Factory\n00:50:C2:BB:50:00/36\tMroadInf\tMroad Information System\n00:50:C2:BB:60:00/36\tQuarchTe\tQuarch Technology Ltd\n00:50:C2:BB:70:00/36\tGdMissio\tGD Mission Systems\n00:50:C2:BB:80:00/36\tMoetroni\tMoeTronix\n00:50:C2:BB:90:00/36\tToptech\tToptech Systems, Inc.\n00:50:C2:BB:A0:00/36\tSystemte\tSystemteq Limited\n00:50:C2:BB:B0:00/36\tGhlBerha\tGHL Systems Berhad\n00:50:C2:BB:C0:00/36\tImpactsy\tImpactSystems\n00:50:C2:BB:D0:00/36\tItsTelec\tITS Telecom\n00:50:C2:BB:E0:00/36\tOnlinepi\tOnlinepizza Norden AB\n00:50:C2:BB:F0:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:BC:00:00/36\tGalaxiaE\tGalaxia Electronics\n00:50:C2:BC:10:00/36\tSentec\tSentec Ltd\n00:50:C2:BC:20:00/36\tXslentEn\tXslent Energy Technologies. LLC\n00:50:C2:BC:30:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:BC:40:00/36\tWheatsto\tWheatstone Corporation\n00:50:C2:BC:50:00/36\tToptechn\tToptechnology SRL\n00:50:C2:BC:60:00/36\tMirerota\tMireroTack\n00:50:C2:BC:70:00/36\tPts\tPTS GmbH\n00:50:C2:BC:80:00/36\tAgwtech\tAGWTech Ltd\n00:50:C2:BC:90:00/36\tNextmove\tNextmove Technologies\n00:50:C2:BC:A0:00/36\tAitecsys\tAitecsystem Co.,Ltd.\n00:50:C2:BC:B0:00/36\tArteixoT\tArteixo Telecom\n00:50:C2:BC:C0:00/36\tVvdnTech\tVvdn Technologies Pvt. Ltd.\n00:50:C2:BC:D0:00/36\tHighligh\tHighlight Parking Systems Ltd\n00:50:C2:BC:E0:00/36\tTvPortal\tTV Portal Co., Ltd.\n00:50:C2:BC:F0:00/36\tEpikoEle\tEpiko, elektronski sistemi d.o.o.\n00:50:C2:BD:00:00/36\tEdcWifi\tEDC wifi\n00:50:C2:BD:10:00/36\tAriemTec\tAriem Technologies Pvt Ltd\n00:50:C2:BD:20:00/36\tPercello\tPercello Ltd.\n00:50:C2:BD:30:00/36\tPostjet\tPostjet Systems Ltd\n00:50:C2:BD:40:00/36\tGlobalSe\tGlobal Security Devices\n00:50:C2:BD:50:00/36\tRf-Embed\tRF-Embedded GmbH\n00:50:C2:BD:60:00/36\tBg\tBG Systems, Inc.\n00:50:C2:BD:70:00/36\tSlat\t\n00:50:C2:BD:80:00/36\tBAB-Tech\tb.a.b-technologie gmbh\n00:50:C2:BD:90:00/36\tAmsContr\tAMS Controls, Inc.\n00:50:C2:BD:A0:00/36\tDigitalL\tDigital Lumens\n00:50:C2:BD:B0:00/36\tGastops\tGasTOPS Ltd.\n00:50:C2:BD:C0:00/36\tSsLlc\tSS Systems LLC\n00:50:C2:BD:E0:00/36\tEvo-TehD\tEvo-Teh d.o.o.\n00:50:C2:BD:F0:00/36\tEuro-Kon\tEuro-Konsult Sp. z o.o.\n00:50:C2:BE:00:00/36\tPhaedrus\tPhaedrus Limited\n00:50:C2:BE:10:00/36\tTattileS\tTattile srl\n00:50:C2:BE:20:00/36\tConverge\tConvergent Bioscience Ltd.\n00:50:C2:BE:30:00/36\tJiskoot\tJiskoot Ltd\n00:50:C2:BE:40:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n00:50:C2:BE:50:00/36\tRfCode\tRF Code, Inc\n00:50:C2:BE:60:00/36\tDocobo\tDocobo Ltd\n00:50:C2:BE:70:00/36\tGenetec\tGenetec Inc.\n00:50:C2:BE:80:00/36\tVehicleT\tVehicle Testing Equipment, S.L.\n00:50:C2:BE:90:00/36\tZucchett\tZucchetti Spa\n00:50:C2:BE:A0:00/36\tDaeyoung\tDaeyoung inc.\n00:50:C2:BE:B0:00/36\tPeekTraf\tPeek Traffic Corporation\n00:50:C2:BE:C0:00/36\tDrsLarue\tDRS Laruel Technologies\n00:50:C2:BE:D0:00/36\tTouchRev\tTouch Revolution Inc.\n00:50:C2:BE:E0:00/36\tPrivate\t\n00:50:C2:BE:F0:00/36\tSociedad\tSOCIEDAD IBERICA DE CONSTRUCCIONES ELECTRICAS, S.A. (SICE)\n00:50:C2:BF:00:00/36\tAim\t\n00:50:C2:BF:10:00/36\tAmaticIn\tAmatic Industries GmbH\n00:50:C2:BF:20:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:BF:30:00/36\tWanco\tWanco Inc.\n00:50:C2:BF:40:00/36\tMonarchI\tMonarch Innovative Technologies Pvt Ltd\n00:50:C2:BF:50:00/36\tAilesEle\tAiles Electronics Co., Ltd.\n00:50:C2:BF:60:00/36\tNolamEmb\tNolam Embedded Systems\n00:50:C2:BF:70:00/36\tPhytecMe\tPhytec Messtechnik GmbH\n00:50:C2:BF:80:00/36\tCrtiical\tCrtiical Link\n00:50:C2:BF:90:00/36\tVitelNet\tVitel Net\n00:50:C2:BF:A0:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n00:50:C2:BF:B0:00/36\tEcsSrl\tECS Srl\n00:50:C2:BF:C0:00/36\tAltronix\tAltronix Corporation\n00:50:C2:BF:D0:00/36\tErnemann\tErnemann Cine Tec GmbH\n00:50:C2:BF:E0:00/36\tIngeteam\tIngeteam Paneles S.A.U.\n00:50:C2:BF:F0:00/36\tISASRL\tI.S.A. S.r.l.\n00:50:C2:C0:00:00/36\tAcdElekt\tACD Elektronik GmbH\n00:50:C2:C0:10:00/36\tQuercusT\tQuercus Technologies, S.L.\n00:50:C2:C0:20:00/36\tHanningE\tHanning Elektro-Werke GmbH & Co. KG\n00:50:C2:C0:30:00/36\tVolumati\tVolumatic Limited.\n00:50:C2:C0:40:00/36\tSogeme\t\n00:50:C2:C0:50:00/36\tDopplerL\tDoppler Systems LLC\n00:50:C2:C0:60:00/36\tAnalogWa\tAnalog Way\n00:50:C2:C0:70:00/36\tCioInfor\tCIO Informatique Industrielle\n00:50:C2:C0:80:00/36\tJuicebos\tjuiceboss\n00:50:C2:C0:90:00/36\tGlobeWir\tGlobe Wireless\n00:50:C2:C0:A0:00/36\tAbbTrans\tABB Transmission and Distribution Automation Equipment (Xiamen) Co., Ltd.\n00:50:C2:C0:B0:00/36\tProsourc\tProSourcing GmbH\n00:50:C2:C0:C0:00/36\tAltierre\t\n00:50:C2:C0:D0:00/36\tFrSauter\tFr. SauterAG\n00:50:C2:C0:E0:00/36\tAvitroni\tAVItronic GmbH\n00:50:C2:C0:F0:00/36\tDycecSA\tDycec, S.A.\n00:50:C2:C1:00:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:C1:10:00/36\tArtAntri\tART Antriebs- und Regeltechnik GmbH\n00:50:C2:C1:20:00/36\tOkiDenki\tOki Denki Bohsai Co.,Ltd.\n00:50:C2:C1:30:00/36\tDantecDy\tDantec Dynamics A/S\n00:50:C2:C1:40:00/36\tSpectron\tSpectronix Corporation\n00:50:C2:C1:50:00/36\tIno-Inst\tINO - Institut National d'Optique\n00:50:C2:C1:60:00/36\tOmicronE\tOMICRON electronics GmbH\n00:50:C2:C1:70:00/36\tAxis-Shi\tAxis-Shield PoC AS\n00:50:C2:C1:80:00/36\tLinuxsta\tLinuxstamp Designs, LLC\n00:50:C2:C1:90:00/36\tIbercomp\tIbercomp SA\n00:50:C2:C1:A0:00/36\tSam\tSAM Co., Ltd.\n00:50:C2:C1:B0:00/36\tGraessli\tGraesslin GmbH\n00:50:C2:C1:C0:00/36\tBectonDi\tBecton Dickinson\n00:50:C2:C1:D0:00/36\tPowerbas\tPowerbase Energy Systems Inc.\n00:50:C2:C1:E0:00/36\tPeperoni\tPeperoni-Light\n00:50:C2:C1:F0:00/36\tSpeciali\tSpecialist Electronics Services Ltd\n00:50:C2:C2:00:00/36\tSrcCompu\tSRC Computers, LLC\n00:50:C2:C2:10:00/36\tPrivate\t\n00:50:C2:C2:20:00/36\tAudient\tAudient Ltd\n00:50:C2:C2:30:00/36\tVidiconL\tVidicon LLC\n00:50:C2:C2:40:00/36\tQualneti\tQualnetics Corporation\n00:50:C2:C2:50:00/36\tPrivate\t\n00:50:C2:C2:60:00/36\tAustcoCo\tAustco Communication Systems Pty Ltd\n00:50:C2:C2:70:00/36\tQtechnol\tQtechnology A/S\n00:50:C2:C2:80:00/36\tElreha\tELREHA GmbH\n00:50:C2:C2:90:00/36\tNewtelEn\tNewtel Engineering S.r.l.\n00:50:C2:C2:A0:00/36\tRealtime\tRealTime Systems Ltd\n00:50:C2:C2:B0:00/36\tZ-App\tZ-App Systems, Inc.\n00:50:C2:C2:C0:00/36\tBach-Mes\tbach-messtechnik gmbh\n00:50:C2:C2:D0:00/36\tDigitale\tDigitale Analoge COMponenten West Electronic Vertriebs GmbH\n00:50:C2:C2:E0:00/36\tDismunte\tDismuntel Sal\n00:50:C2:C2:F0:00/36\tReflexCe\tReflex Ces\n00:50:C2:C3:00:00/36\tWagnerGr\tWagner Group GmbH\n00:50:C2:C3:10:00/36\t4dTechno\t4D Technology Corporation\n00:50:C2:C3:20:00/36\tProconEl\tProcon Electronics\n00:50:C2:C3:40:00/36\tKyuhen\t\n00:50:C2:C3:50:00/36\tInsitu\tInsitu, Inc\n00:50:C2:C3:60:00/36\tSet\tSET GmbH\n00:50:C2:C3:70:00/36\tBEARSolu\tB.E.A.R. Solutions (Australasia) Pty, Ltd\n00:50:C2:C3:80:00/36\tComputer\tComputer Automation Technology Inc\n00:50:C2:C3:90:00/36\tSecadSa\tSecad Sa\n00:50:C2:C3:A0:00/36\tSiconSrl\tSicon srl\n00:50:C2:C3:B0:00/36\tElektro-\tELEKTRO-AUTOMATIK GmbH & Co. KG\n00:50:C2:C3:C0:00/36\tElsistSR\tELSIST S.r.l.\n00:50:C2:C3:D0:00/36\tPlaElect\tPla Electro Appliances Pvt. Ltd.\n00:50:C2:C3:E0:00/36\tSysacom\t\n00:50:C2:C3:F0:00/36\tAnxebusi\tANXeBusiness Corporation\n00:50:C2:C4:00:00/36\tBaeBofor\tBAE Systems Bofors AB\n00:50:C2:C4:10:00/36\tComprion\tCOMPRION GmbH\n00:50:C2:C4:20:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:C4:30:00/36\tCammegh\tCammegh Limited\n00:50:C2:C4:40:00/36\tBeijingZ\tBeijing Zhongherongzhi Elec.&Tech.Co.,Ltd.\n00:50:C2:C4:50:00/36\tGalvamat\tGalvamat & Unican Technologies SA\n00:50:C2:C4:60:00/36\tQne\tQNE GmbH & Co. KG\n00:50:C2:C4:70:00/36\tWeltekTe\tWeltek Technologies Co. Ltd.\n00:50:C2:C4:80:00/36\tCytekMed\tCytek Media Systems, INC.\n00:50:C2:C4:90:00/36\tElektron\tElektronic Thoma GmbH\n00:50:C2:C4:A0:00/36\tHerrickT\tHerrick Technology Laboratories, Inc.\n00:50:C2:C4:B0:00/36\tRVRElett\tR.V.R. elettronica s.p.a.\n00:50:C2:C4:C0:00/36\tLancierM\tLancier Monitoring GmbH\n00:50:C2:C4:D0:00/36\tIndustri\tIndustrial Automation Systems\n00:50:C2:C4:E0:00/36\tElaso\tElaso AG\n00:50:C2:C4:F0:00/36\tPowersen\tPowersense A/S\n00:50:C2:C5:00:00/36\tBeceemCo\tBeceem Communications, Inc.\n00:50:C2:C5:10:00/36\tInforceC\tInForce Computing, Inc.\n00:50:C2:C5:20:00/36\tSmartfie\tSmartfield, Inc.\n00:50:C2:C5:30:00/36\tEilersen\tEilersen Electric A/S\n00:50:C2:C5:40:00/36\tHpcPlatf\tHPC Platform\n00:50:C2:C5:50:00/36\tWatterot\tWatterott electronic\n00:50:C2:C5:60:00/36\tSpirentC\tSpirent Communications\n00:50:C2:C5:70:00/36\tHighSpee\tHigh Speed Design, Inc.\n00:50:C2:C5:80:00/36\tFoerster\tFoerster-Technik GmbH\n00:50:C2:C5:90:00/36\tSkdSyste\tSKD System AB\n00:50:C2:C5:A0:00/36\tCommotiv\tCommotive A/S\n00:50:C2:C5:B0:00/36\tMicroTec\tMicro Technica\n00:50:C2:C5:C0:00/36\tWavecomE\tWavecom Elektronik Ag\n00:50:C2:C5:D0:00/36\tSwemet\tSweMet AB\n00:50:C2:C5:E0:00/36\tCellplus\tCellPlus technologies, Inc.\n00:50:C2:C5:F0:00/36\tIconTime\tIcon Time Systems\n00:50:C2:C6:00:00/36\tIntegrat\tIntegration Technologies Limited\n00:50:C2:C6:10:00/36\tHaivisio\tHaiVision Systems Incorporated\n00:50:C2:C6:20:00/36\tZeusPriv\tZeus Systems Private Limited\n00:50:C2:C6:30:00/36\tPotterEl\tPotter Electric Signal Co. LLC\n00:50:C2:C6:40:00/36\tPalSoftw\tPal Software Service Co.,Ltd.\n00:50:C2:C6:50:00/36\tMicroI/O\tMicro I/O Servicos de Electronica, Lda\n00:50:C2:C6:60:00/36\tKsBescha\tKS Beschallungstechnik GmbH\n00:50:C2:C6:70:00/36\tPractica\tPractical Control Ltd\n00:50:C2:C6:80:00/36\tBroadsof\tBroadsoft PacketSmart, Inc.\n00:50:C2:C6:90:00/36\tRebo\tRebo Co.,Ltd.\n00:50:C2:C6:A0:00/36\tElectron\tElectronica Keld\n00:50:C2:C6:B0:00/36\tSigarden\tSiGarden Sp z o.o.\n00:50:C2:C6:C0:00/36\tDorletSa\tDorlet Sau\n00:50:C2:C6:D0:00/36\tDeansoft\tDeansoft CO., Ltd.\n00:50:C2:C6:E0:00/36\tTbs\tTBS Holding AG\n00:50:C2:C6:F0:00/36\tMsbElekt\tMSB Elektronik und Geraetebau GmbH\n00:50:C2:C7:00:00/36\tWilkeTec\tWilke Technology GmbH\n00:50:C2:C7:10:00/36\tSequoiaT\tSequoia Technology Group Ltd\n00:50:C2:C7:20:00/36\tQuail\t\n00:50:C2:C7:30:00/36\tIndustry\tIndustry Controls, Inc.\n00:50:C2:C7:40:00/36\tWapice\tWapice Ltd.\n00:50:C2:C7:50:00/36\tRovsing\tRovsing A/S\n00:50:C2:C7:60:00/36\tGridmana\tGridManager A/S\n00:50:C2:C7:70:00/36\tAim\tAIM Co.,Ltd\n00:50:C2:C7:80:00/36\t9solutio\t9Solutions Oy\n00:50:C2:C7:90:00/36\tCodesyst\tCODESYSTEM Co.,Ltd\n00:50:C2:C7:A0:00/36\tProtonic\tProtonic Holland\n00:50:C2:C7:B0:00/36\tHoneywel\tHoneywell\n00:50:C2:C7:C0:00/36\tScienlab\tScienlab Electronic Systems GmbH\n00:50:C2:C7:D0:00/36\tTaeAntri\tTAE Antriebstechnik GmbH\n00:50:C2:C7:E0:00/36\tBuerkert\tBuerkert Werke GmbH\n00:50:C2:C7:F0:00/36\tKinectsS\tKinects Solutions Inc\n00:50:C2:C8:00:00/36\tReko-Vek\t\n00:50:C2:C8:10:00/36\tOdysseeS\tOdyssee Systemes SAS\n00:50:C2:C8:20:00/36\tKyoshaIn\tKyosha Industries\n00:50:C2:C8:30:00/36\tGronic\tGronic Systems GmbH\n00:50:C2:C8:40:00/36\tDomis\t\n00:50:C2:C8:50:00/36\tPeekTraf\tPeek Traffic Corporation\n00:50:C2:C8:60:00/36\tBruckner\tBruckner & Jarosch Ingenieurgesellschaft mbH\n00:50:C2:C8:70:00/36\tLeco\tLECO Corporation\n00:50:C2:C8:80:00/36\tCsiContr\tCSI Controles e Sistemas Industriais Ltda.\n00:50:C2:C8:90:00/36\tCreative\tCreative Micro Design\n00:50:C2:C8:A0:00/36\tAutomate\tAutomated Media Services, Inc.\n00:50:C2:C8:B0:00/36\tOcasAs\tOcas As\n00:50:C2:C8:C0:00/36\tLanmarkC\tLanmark Controls Inc.\n00:50:C2:C8:D0:00/36\tEmergenc\tEmergency Message Controls LLC\n00:50:C2:C8:E0:00/36\tSddItg\tSdd Itg\n00:50:C2:C8:F0:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:C9:00:00/36\tReald\t\n00:50:C2:C9:10:00/36\tMediaTec\tMedia Technologies Ltd.\n00:50:C2:C9:20:00/36\tEmac\tEMAC, Inc.\n00:50:C2:C9:30:00/36\tSensairP\tSENSAIR Pty Ltd\n00:50:C2:C9:40:00/36\tIsisEngi\tIsis Engineering, S.A.\n00:50:C2:C9:50:00/36\tIpsesSRL\tIPSES S.r.l.\n00:50:C2:C9:60:00/36\tCybercra\tCyberCraft\n00:50:C2:C9:70:00/36\tMstronic\tMstronic Co., Ltd.\n00:50:C2:C9:80:00/36\tCriticar\tCriticare Systems, Inc\n00:50:C2:C9:90:00/36\tHjpcDbaP\tHJPC Corporation dba Pactron\n00:50:C2:C9:A0:00/36\tPacompSp\tPACOMP Sp. z o.o.\n00:50:C2:C9:B0:00/36\tSmElectr\tSm electronic co.\n00:50:C2:C9:C0:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:C9:D0:00/36\tRadiusSw\tRadius Sweden AB\n00:50:C2:C9:E0:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n00:50:C2:C9:F0:00/36\tXxterBV\txxter b.v.\n00:50:C2:CA:00:00/36\tKieferTe\tKiefer technic GmbH\n00:50:C2:CA:10:00/36\tWayneKer\tWayne Kerr Electronics\n00:50:C2:CA:20:00/36\tLogical\tThe Logical Company\n00:50:C2:CA:30:00/36\tCt\tCT Company\n00:50:C2:CA:40:00/36\tVoxTechn\tVox Technologies\n00:50:C2:CA:50:00/36\tYokowo\tYokowo Co.,Ltd\n00:50:C2:CA:60:00/36\tVidisys\tVidisys GmbH\n00:50:C2:CA:70:00/36\tThermoFi\tThermo Fisher Scientific\n00:50:C2:CA:80:00/36\tWithInte\tSystems With Intelligence Inc.\n00:50:C2:CA:90:00/36\tIntellig\tIntelligent Devices\n00:50:C2:CA:A0:00/36\tDspDesig\tDsp Design Ltd\n00:50:C2:CA:B0:00/36\tSaeIt-Sy\tSAE IT-systems GmbH & Co. KG\n00:50:C2:CA:C0:00/36\tPurvis\tPURVIS Systems Incorporated\n00:50:C2:CA:D0:00/36\tPacificC\tPacific Coast Engineering\n00:50:C2:CA:E0:00/36\tCampbell\tCampbell Scientific Canada Corp.\n00:50:C2:CA:F0:00/36\tFrSauter\tFr. Sauter AG\n00:50:C2:CB:00:00/36\tKonsmeta\tKonsmetal S.A.\n00:50:C2:CB:10:00/36\tZkCellte\tZK Celltest Inc\n00:50:C2:CB:20:00/36\tMoravian\tMoravian Instruments\n00:50:C2:CB:30:00/36\tDeuta-We\tDeuta-Werke GmbH\n00:50:C2:CB:40:00/36\tGeaFarmT\tGEA Farm Technologies GmbH\n00:50:C2:CB:50:00/36\tPrivate\t\n00:50:C2:CB:60:00/36\tKrontekP\tKrontek Pty Ltd\n00:50:C2:CB:70:00/36\tInotech\tinotech GmbH\n00:50:C2:CB:80:00/36\tRaith\tRaith GmbH\n00:50:C2:CB:90:00/36\tMicroTec\tMicro Technic A/S\n00:50:C2:CB:A0:00/36\tDeltaTau\tDelta Tau Data Systems, Inc.\n00:50:C2:CB:B0:00/36\tCoptonix\tCoptonix GmbH\n00:50:C2:CB:C0:00/36\tCpEletro\tCp Eletronica Sa\n00:50:C2:CB:D0:00/36\tHiTechEl\tHi Tech Electronics Ltd\n00:50:C2:CB:E0:00/36\tCodeBlue\tCode Blue Corporation\n00:50:C2:CB:F0:00/36\tMegacon\tMegacon AB\n00:50:C2:CC:00:00/36\tWorldTim\tWorld Time Solutions Limited\n00:50:C2:CC:10:00/36\tLevel3Co\tLevel 3 Communications\n00:50:C2:CC:20:00/36\tConectai\tConectaIP Tecnologia S.L.\n00:50:C2:CC:30:00/36\tViscount\tviscount systems inc.\n00:50:C2:CC:40:00/36\tGdMissio\tGD Mission Systems\n00:50:C2:CC:50:00/36\tTecnovum\tTecnovum AG\n00:50:C2:CC:60:00/36\tKdt\t\n00:50:C2:CC:70:00/36\tToproott\tTOPROOTTechnology Corp. Ltd.\n00:50:C2:CC:80:00/36\tPrivate\t\n00:50:C2:CC:90:00/36\tPromess\tPromess GmbH\n00:50:C2:CC:A0:00/36\tSanminaS\tSanmina Shenzhen\n00:50:C2:CC:B0:00/36\tCaptivea\tCaptiveAire Systems Inc.\n00:50:C2:CC:C0:00/36\tSmartech\tSmartech-technology\n00:50:C2:CC:D0:00/36\tFujiData\tFUJI DATA SYSTEM Co.,Ltd.\n00:50:C2:CC:E0:00/36\tMac-Gray\tMac-Gray Corporation\n00:50:C2:CC:F0:00/36\tTaskSist\tTask Sistemas De Computacao Ltda\n00:50:C2:CD:00:00/36\tMmeMuell\tMME Mueller Mikroelektronik\n00:50:C2:CD:10:00/36\tAcdElekt\tACD Elektronik GmbH\n00:50:C2:CD:20:00/36\tSim2Mult\tSIM2 Multimedia S.p.A.\n00:50:C2:CD:30:00/36\tCovidenc\tCovidence A/S\n00:50:C2:CD:40:00/36\tSchraml\tSCHRAML GmbH\n00:50:C2:CD:50:00/36\tArcosTec\tArcos Technologies Ltd.\n00:50:C2:CD:60:00/36\tArktan\tArktan Systems\n00:50:C2:CD:70:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:CD:80:00/36\tIt-IsInt\tIT-IS International Ltd.\n00:50:C2:CD:90:00/36\tNdcInfra\tNDC Infrared Engineering, Inc.\n00:50:C2:CD:A0:00/36\tTaskit\ttaskit GmbH\n00:50:C2:CD:B0:00/36\tRutter\tRutter Inc\n00:50:C2:CD:C0:00/36\tAbbTrans\tABB Transmission and Distribution Automation Equipment (Xiamen) Co., Ltd.\n00:50:C2:CD:D0:00/36\tKCCShoka\tK.C.C. Shokai Limited\n00:50:C2:CD:E0:00/36\tAxotecTe\tAxotec Technologies GmbH\n00:50:C2:CD:F0:00/36\tCoreelTe\tCoreEL TEchnologies (I) Pvt Ltd\n00:50:C2:CE:00:00/36\tIndustri\tIndustrial Control Links, Inc.\n00:50:C2:CE:10:00/36\tSatellin\tSatellink Inc.\n00:50:C2:CE:20:00/36\tSiconSrl\tSicon srl\n00:50:C2:CE:30:00/36\tIndustri\tIndustrial Automatics Design Bureau\n00:50:C2:CE:40:00/36\tTektroni\tTektronik\n00:50:C2:CE:50:00/36\tMaretron\tMaretron, LLP\n00:50:C2:CE:60:00/36\tAplicaTe\tAplica Technologies\n00:50:C2:CE:70:00/36\tEchola\tEchola Systems\n00:50:C2:CE:80:00/36\tThomasBe\tThomas & Betts\n00:50:C2:CE:90:00/36\tPrivate\t\n00:50:C2:CE:A0:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:CE:B0:00/36\tToyonRes\tToyon Research Corporation\n00:50:C2:CE:C0:00/36\tErhardt+\tErhardt+Leimer GmbH\n00:50:C2:CE:D0:00/36\tAeromech\tAeroMechanical Services Ltd, FLYHT\n00:50:C2:CE:E0:00/36\tEmbed-It\tEMBED-IT OG\n00:50:C2:CE:F0:00/36\tLupatecn\tLupatecnologia e Sistemas Ltda\n00:50:C2:CF:00:00/36\tInvisoBV\tInviso B.V.\n00:50:C2:CF:10:00/36\tTelgaas\tTelGaAs, Inc.\n00:50:C2:CF:20:00/36\tWeissRob\tWeiss Robotics GmbH & Co. KG\n00:50:C2:CF:30:00/36\tDaikenAu\tDaiken Automacao Ltda\n00:50:C2:CF:40:00/36\tBaudisch\tBaudisch Electronic GmbH\n00:50:C2:CF:50:00/36\tGogoBa\tGogo BA\n00:50:C2:CF:60:00/36\tEpecOy\tEpec Oy\n00:50:C2:CF:70:00/36\tArmourHo\tArmour Home Electronics LTD\n00:50:C2:CF:80:00/36\tBeksKomm\tbeks Kommunikacios Technika kft\n00:50:C2:CF:90:00/36\tElbitOfA\tElbit Systems of America - Fort Worth Operations\n00:50:C2:CF:A0:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n00:50:C2:CF:B0:00/36\tNewEmbed\tNew Embedded Technology\n00:50:C2:CF:C0:00/36\tTritiumP\tTritium Pty Ltd\n00:50:C2:CF:D0:00/36\tAirfolc\tAirfolc,Inc.\n00:50:C2:CF:E0:00/36\tTechlead\tTechleader\n00:50:C2:CF:F0:00/36\tInfrasaf\tInfrasafe, Inc.\n00:50:C2:D0:00:00/36\tBodensee\tBodensee Gravitymeter Geosystem GmbH\n00:50:C2:D0:10:00/36\tAanderaa\tAanderaa Data Instruments\n00:50:C2:D0:20:00/36\tSurvalen\tSurvalent Technology Corp\n00:50:C2:D0:30:00/36\tPeekelIn\tPeekel Instruments B.V.\n00:50:C2:D0:40:00/36\tTehamaWi\tTehama Wireless\n00:50:C2:D0:60:00/36\tNckResea\tnCk Research LLC\n00:50:C2:D0:70:00/36\tIaf\tIAF GmbH\n00:50:C2:D0:80:00/36\tReimesch\tReimesch Kommunikationssysteme GmbH\n00:50:C2:D0:90:00/36\tGuardtec\tGuardtec,Inc\n00:50:C2:D0:A0:00/36\tAirpoint\tAirpoint Co., Ltd.\n00:50:C2:D0:B0:00/36\tCodacoEl\tCODACO ELECTRONIC s.r.o.\n00:50:C2:D0:C0:00/36\tJvlIndus\tJVL Industri Elektronik\n00:50:C2:D0:D0:00/36\tDecaCard\tDECA Card Engineering GmbH\n00:50:C2:D0:E0:00/36\tWeinertE\tWeinert Engineering GmbH\n00:50:C2:D0:F0:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:D1:00:00/36\tRosslare\tRosslare Enterprises Ltd.\n00:50:C2:D1:10:00/36\tAplexTec\tAplex Technology Inc.\n00:50:C2:D1:20:00/36\tTokyoWel\tTokyo Weld Co.,Ltd.\n00:50:C2:D1:30:00/36\tGunmaEle\tGunma Electronics Co Ltd\n00:50:C2:D1:40:00/36\tSaetIS\tSaet I.S.\n00:50:C2:D1:50:00/36\tMsr-Offi\tMSR-Office GmbH\n00:50:C2:D1:60:00/36\tImricorM\tImricor Medical Systems, Inc.\n00:50:C2:D1:70:00/36\tCueAS\tCUE, a.s.\n00:50:C2:D1:80:00/36\tGlyn\tGlyn GmbH & Co.KG\n00:50:C2:D1:90:00/36\tAppliedM\tApplied Medical Technologies, Inc DBA AirClean Systems\n00:50:C2:D1:A0:00/36\tGillam-F\tGILLAM-FEI S.A.\n00:50:C2:D1:B0:00/36\tTechkon\tTECHKON GmbH\n00:50:C2:D1:C0:00/36\tReconDyn\tRecon Dynamics, LLC\n00:50:C2:D1:D0:00/36\tMocoMedi\tMoco Media Pty Ltd\n00:50:C2:D1:E0:00/36\tTobila\tTobila Systems, Inc.\n00:50:C2:D1:F0:00/36\tOlympusN\tOlympus NDT Canada Inc.\n00:50:C2:D2:00:00/36\t7+Kft\t7+ Kft\n00:50:C2:D2:10:00/36\tInnovati\tInnovative Circuit Technology\n00:50:C2:D2:20:00/36\tEmdeeTec\teMDee Technology, Inc.\n00:50:C2:D2:30:00/36\tBlueston\tBluestone Technology GmbH\n00:50:C2:D2:40:00/36\tExproNor\tExpro North Sea\n00:50:C2:D2:50:00/36\tVafInstr\tVAF Instruments BV\n00:50:C2:D2:60:00/36\tRchGroup\tRch Group\n00:50:C2:D2:70:00/36\tFrSauter\tFr.Sauter AG\n00:50:C2:D2:80:00/36\tDigitale\tDigitale Analoge COMponenten West Electronic Vertriebs GmbH\n00:50:C2:D2:90:00/36\tAxibleTe\tAxible Technologies\n00:50:C2:D2:A0:00/36\tMillenni\tMillennium Electronics Pty.Ltd.\n00:50:C2:D2:B0:00/36\tVideoTec\tVideo Tech Laboratories, Inc.\n00:50:C2:D2:C0:00/36\tSchneide\tSchneider Electric Motion USA\n00:50:C2:D2:D0:00/36\tCadiScie\tCadi Scientific Pte Ltd\n00:50:C2:D2:E0:00/36\tRsGesell\tRS Gesellschaft fur Informationstechnik mbH & Co KG\n00:50:C2:D2:F0:00/36\tKey\tKey Systems, Inc.\n00:50:C2:D3:00:00/36\tActivFin\tACTIV Financial Systems, Inc.\n00:50:C2:D3:10:00/36\tUngavaTe\tUNGAVA Technologies Inc.\n00:50:C2:D3:20:00/36\tRealtime\tRealTime Systems Ltd\n00:50:C2:D3:30:00/36\tMaddalen\tMaddalena S.p.A\n00:50:C2:D3:40:00/36\tGaonTech\tGAON TECH corp.\n00:50:C2:D3:50:00/36\tUg\tUG Systems GmbH & Co. KG\n00:50:C2:D3:60:00/36\tEnatel\tEnatel Limited\n00:50:C2:D3:70:00/36\tLjtAssoc\tLJT & Associates, Inc.\n00:50:C2:D3:80:00/36\tKyowaEle\tKyowa Electronics Co.,Ltd.\n00:50:C2:D3:90:00/36\tApexNv\tApex NV\n00:50:C2:D3:A0:00/36\tWellsens\tWellSense Technologies\n00:50:C2:D3:B0:00/36\tGitsn\tGitsn Inc.\n00:50:C2:D3:C0:00/36\tAssystem\tASSYSTEM France\n00:50:C2:D3:D0:00/36\tTellabsO\tTellabs Operations Inc.\n00:50:C2:D3:E0:00/36\tSynatecE\tSynatec Electronic GmbH\n00:50:C2:D3:F0:00/36\tCssLlc\tCss, Llc\n00:50:C2:D4:00:00/36\tDemmelPr\tdemmel products\n00:50:C2:D4:10:00/36\tAreaEner\tArea Energy, Inc.\n00:50:C2:D4:20:00/36\tHagenukK\tHagenuk KMT GmbH\n00:50:C2:D4:30:00/36\tDsp4you\tDSP4YOU LTd\n00:50:C2:D4:40:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:D4:50:00/36\tTechnago\tTechnagon GmbH\n00:50:C2:D4:60:00/36\tThalesNe\tThales Nederland BV\n00:50:C2:D4:70:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n00:50:C2:D4:80:00/36\tWatermar\tWatermark Estate Management Services, LLC\n00:50:C2:D4:90:00/36\tSmithMet\tSmith Meter, Inc\n00:50:C2:D4:A0:00/36\tAthSyste\tATH system\n00:50:C2:D4:B0:00/36\tIndraAus\tIndra Australia\n00:50:C2:D4:C0:00/36\tDalogDia\tDALOG Diagnosesysteme GmbH\n00:50:C2:D4:D0:00/36\tYardneyT\tYardney Technical Products Inc.\n00:50:C2:D4:E0:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:D4:F0:00/36\tSecom\tSECOM GmbH\n00:50:C2:D5:00:00/36\tSolbrigE\tSolbrig Electronics, Inc.\n00:50:C2:D5:10:00/36\tBettiniS\tBettini Srl\n00:50:C2:D5:20:00/36\tF+DFeinw\tF+D Feinwerk- und Drucktechnik GmbH\n00:50:C2:D5:30:00/36\tTelemerk\tTelemerkki Oy\n00:50:C2:D5:40:00/36\tAbtrackS\tABtrack s.r.l.\n00:50:C2:D5:50:00/36\tSternaSe\tSterna Security\n00:50:C2:D5:60:00/36\tSelexCom\tSELEX Communications Limited\n00:50:C2:D5:70:00/36\tHijikata\tHijikata Denki Corp.\n00:50:C2:D5:80:00/36\tNik-Elek\tNIK-ELEKTRONIKA Ltd\n00:50:C2:D5:90:00/36\tBuancoSy\tBUANCO SYSTEM A/S\n00:50:C2:D5:A0:00/36\tEmbedded\tEmbedded Monitoring Systems Ltd.\n00:50:C2:D5:B0:00/36\tInfiniti\tInfinition Inc.\n00:50:C2:D5:C0:00/36\tIbetorSL\tIbetor S.L.\n00:50:C2:D5:D0:00/36\tGlobalco\tGlobalcom Engineering Srl\n00:50:C2:D5:E0:00/36\tInfinite\tinfinitec co., ltd.\n00:50:C2:D5:F0:00/36\tEmbedded\tEmbedded Solution Bank Co., Ltd.\n00:50:C2:D6:00:00/36\tNihonKes\tNihon Kessho Koogaku Co., Ltd.\n00:50:C2:D6:10:00/36\tSystem2\tsystem2 GmbH\n00:50:C2:D6:20:00/36\tEmac\tEMAC, Inc.\n00:50:C2:D6:30:00/36\tDataregi\tDataregis S.A.\n00:50:C2:D6:40:00/36\tTv1\tTV1 GmbH\n00:50:C2:D6:50:00/36\tTxTechno\tTX Technology Corp\n00:50:C2:D6:60:00/36\tUvaxConc\tUvax Concepts\n00:50:C2:D6:70:00/36\tKlingFre\tKLING & FREITAG GmbH\n00:50:C2:D6:80:00/36\tHispeedD\tHiSpeed Data, Inc.\n00:50:C2:D6:90:00/36\tGhlBhd\tGHL Systems Bhd\n00:50:C2:D6:A0:00/36\tA&TElect\tA&T Corporation, Electrics Group , LAS R&D Unit,\n00:50:C2:D6:B0:00/36\tNemecAut\tNemec Automation\n00:50:C2:D6:C0:00/36\tAlpha\tALPHA Corporation\n00:50:C2:D6:D0:00/36\tPro-Digi\tPro-Digital Industria Eletronica\n00:50:C2:D6:E0:00/36\tBcIllumi\tBC Illumination, Inc.\n00:50:C2:D6:F0:00/36\tImtronMe\tImtron Messtechnik GmbH\n00:50:C2:D7:00:00/36\tCRobHamm\tC. Rob. Hammerstein GmbH & Co. KG\n00:50:C2:D7:10:00/36\tEmac\tEMAC, Inc.\n00:50:C2:D7:20:00/36\tScale-Tr\tScale-Tron, Inc.\n00:50:C2:D7:30:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:D7:40:00/36\tComputec\tComputech International\n00:50:C2:D7:50:00/36\tCollectr\tCollectric AB\n00:50:C2:D7:60:00/36\tTelvent\t\n00:50:C2:D7:70:00/36\tFrSauter\tFr.SauterAG\n00:50:C2:D7:80:00/36\tP4qElect\tP4Q Electronics\n00:50:C2:D7:90:00/36\tDsiRf\tDSI RF Systems, Inc.\n00:50:C2:D7:A0:00/36\tTransbit\tTransbit Sp. z o.o.\n00:50:C2:D7:B0:00/36\tOwita\tOWITA GmbH\n00:50:C2:D7:C0:00/36\tMicrocub\tMicrocubs Systems Pvt Ltd\n00:50:C2:D7:D0:00/36\tVoltechI\tVoltech Instruments\n00:50:C2:D7:E0:00/36\tLynxTech\tLYNX Technik AG\n00:50:C2:D7:F0:00/36\tHmiTechn\tHMI Technologies\n00:50:C2:D8:00:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:D8:10:00/36\tTattileS\tTattile srl\n00:50:C2:D8:20:00/36\tAudioAut\tAudio Authority Corp\n00:50:C2:D8:30:00/36\tBlankom\t\n00:50:C2:D8:40:00/36\tAbbTrans\tABB Transmission and Distribution Automation Equipment (Xiamen) Co., Ltd.\n00:50:C2:D8:50:00/36\tVitec\t\n00:50:C2:D8:60:00/36\tEcommEra\tEcomm Era\n00:50:C2:D8:70:00/36\tElectrol\tElectrolight Shivuk (1994) Ltd.\n00:50:C2:D8:80:00/36\tT+AElekt\tT+A elektroakustik GmbH & Co.KG\n00:50:C2:D8:90:00/36\tVisualTe\tVisual Telecommunication Network, Inc\n00:50:C2:D8:A0:00/36\tOptolink\tOptoLink  Industria e Comercio Ltda\n00:50:C2:D8:B0:00/36\tSiconSrl\tSicon srl\n00:50:C2:D8:C0:00/36\tIrphoton\tiRphotonics\n00:50:C2:D8:D0:00/36\tCs-Instr\tCS-Instruments\n00:50:C2:D8:E0:00/36\tLsdScien\tLSD Science&Technology Co.,Ltd.\n00:50:C2:D8:F0:00/36\tSyesSrl\tSyes srl\n00:50:C2:D9:00:00/36\tDumpsEle\tDumps Electronic\n00:50:C2:D9:10:00/36\tChauvinA\tChauvin Arnoux\n00:50:C2:D9:20:00/36\tManz\t\n00:50:C2:D9:30:00/36\tAxlon\tAxlon AB\n00:50:C2:D9:40:00/36\tSoftware\tSoftware Effect Enterprises, Inc\n00:50:C2:D9:50:00/36\tHoneywel\tHoneywell\n00:50:C2:D9:60:00/36\tContec\tCONTEC GmbH\n00:50:C2:D9:70:00/36\tErsElect\tERS electronic GmbH\n00:50:C2:D9:80:00/36\tRongShun\tRong Shun Xuan Corp.\n00:50:C2:D9:90:00/36\tT-Indust\tT-Industry, s.r.o.\n00:50:C2:D9:A0:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:D9:B0:00/36\tIntuitiv\tIntuitive Surgical, Inc\n00:50:C2:D9:C0:00/36\tGamberJo\tGamber Johnson LLC\n00:50:C2:D9:D0:00/36\tMistralS\tMistral Solutions Pvt. Ltd\n00:50:C2:D9:E0:00/36\tVocality\tVocality International Ltd\n00:50:C2:D9:F0:00/36\tBitwiseC\tBitWise Controls\n00:50:C2:DA:00:00/36\tPrecisio\tPrecision Remotes\n00:50:C2:DA:10:00/36\tMangodsp\t\n00:50:C2:DA:20:00/36\tMetratec\tmetraTec GmbH\n00:50:C2:DA:30:00/36\tGdMissio\tGD Mission Systems\n00:50:C2:DA:40:00/36\tDeuta-We\tDeuta-Werke GmbH\n00:50:C2:DA:50:00/36\tMegatecE\tmegatec electronic GmbH\n00:50:C2:DA:60:00/36\tManitowo\tManitowoc Ice\n00:50:C2:DA:70:00/36\tCapton\t\n00:50:C2:DA:80:00/36\tSine\tSine Systems, Inc.\n00:50:C2:DA:90:00/36\tTielineR\tTieline Research Pty Ltd\n00:50:C2:DA:A0:00/36\tMPaul\tM & PAUL, INC\n00:50:C2:DA:B0:00/36\tAplexTec\tAplex Technology Inc.\n00:50:C2:DA:C0:00/36\tRflElect\tRFL Electronics, Inc.\n00:50:C2:DA:D0:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:DA:E0:00/36\tSpangPow\tSpang Power Electronics\n00:50:C2:DA:F0:00/36\tEumigInd\teumig industrie-tv GmbH\n00:50:C2:DB:00:00/36\tImagoTec\tIMAGO Technologies GmbH\n00:50:C2:DB:10:00/36\tRfCode\tRF Code, Inc\n00:50:C2:DB:20:00/36\tSoftware\tSoftwareCannery\n00:50:C2:DB:30:00/36\tLaudaDrR\tLAUDA DR. R. WOBSER GMBH & CO. KG\n00:50:C2:DB:40:00/36\tZaoNpcKo\tZAO NPC Kompjuternie Technologii\n00:50:C2:DB:50:00/36\tDspDesig\tDsp Design Ltd\n00:50:C2:DB:60:00/36\tProsoft-\tPROSOFT-SYSTEMS LTD\n00:50:C2:DB:70:00/36\tSorelMik\tSOREL GmbH Mikroelektronik\n00:50:C2:DB:80:00/36\tComsatVe\tComsat VertriebsgmbH\n00:50:C2:DB:90:00/36\tPeekTraf\tPeek Traffic Corporation\n00:50:C2:DB:A0:00/36\tMPElectr\tM.P. Electronics\n00:50:C2:DB:B0:00/36\tEsensors\tEsensors, Inc.\n00:50:C2:DB:C0:00/36\tNantesPr\tNantes Systems Private Limited\n00:50:C2:DB:D0:00/36\tMargento\tMargento R&D\n00:50:C2:DB:E0:00/36\tWithsyst\tWITHSYSTEM Co.,Ltd\n00:50:C2:DB:F0:00/36\tOne-Nemo\tOne-Nemoto Engineering Corporation\n00:50:C2:DC:00:00/36\tSecurity\tSecurity Services Group (SSG)\n00:50:C2:DC:10:00/36\tAcruxTec\tAcrux Technology Limited\n00:50:C2:DC:20:00/36\tTesseraT\tTessera Technology Inc.\n00:50:C2:DC:30:00/36\tZedZiegl\tZED Ziegler Electronic Devices GmbH\n00:50:C2:DC:40:00/36\tKeithKoe\tKeith & Koep GmbH\n00:50:C2:DC:50:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:DC:60:00/36\tFluidCom\tFluid Components International\n00:50:C2:DC:70:00/36\tAgtHoldi\tAGT Holdings Limited\n00:50:C2:DC:80:00/36\tT2m2\tT2M2 GmbH\n00:50:C2:DC:90:00/36\tKinotong\tKinotonGmbH\n00:50:C2:DC:A0:00/36\tTeleData\tTele Data Control\n00:50:C2:DC:B0:00/36\tCt\tCT Company\n00:50:C2:DC:C0:00/36\tInstrume\tInstrumentel Limited\n00:50:C2:DC:D0:00/36\tDilitron\tdilitronics GmbH\n00:50:C2:DC:E0:00/36\tMecselOy\tMecsel Oy\n00:50:C2:DC:F0:00/36\tMcsEngen\tMCS Engenharia ltda\n00:50:C2:DD:00:00/36\tIdcSolut\tIDC Solutions Pty Ltd\n00:50:C2:DD:10:00/36\tBrankamp\tBrankamp GmbH\n00:50:C2:DD:20:00/36\tElectron\tElectronic Applications, Inc.\n00:50:C2:DD:30:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n00:50:C2:DD:40:00/36\tSystech\t\n00:50:C2:DD:50:00/36\tFriendSp\tFriend Spring Industrial Co., Ltd.\n00:50:C2:DD:60:00/36\tTransasM\tTransas Marine Limited\n00:50:C2:DD:70:00/36\tTornadoM\tTornado Modular Systems\n00:50:C2:DD:80:00/36\tLeonardo\tLeonardo MW Ltd (Land & Naval Defence Electronic)\n00:50:C2:DD:90:00/36\tMetrawar\tMetraware\n00:50:C2:DD:A0:00/36\tRbzRobot\trbz robot design s.l.\n00:50:C2:DD:B0:00/36\tLuceo\t\n00:50:C2:DD:C0:00/36\tVisionCo\tVision  & Control GmbH\n00:50:C2:DD:D0:00/36\tA&AGener\tA&A GENERAL SRL\n00:50:C2:DD:E0:00/36\tDrsImagi\tDRS Imaging and Targeting Solutions\n00:50:C2:DD:F0:00/36\tDevice\tDevice GmbH\n00:50:C2:DE:00:00/36\tInternet\tInternet Protocolo Logica Sl\n00:50:C2:DE:10:00/36\tAbbTrans\tABB Transmission and Distribution Automation Equipment (Xiamen) Co., Ltd.\n00:50:C2:DE:20:00/36\tSequtec\tSequtec Inc\n00:50:C2:DE:30:00/36\tBreakawa\tBreakaway Systems LLC\n00:50:C2:DE:40:00/36\tEgsTechn\tEGS Technologies Ltd\n00:50:C2:DE:50:00/36\tNeets\t\n00:50:C2:DE:60:00/36\tFrSauter\tFr. Sauter AG\n00:50:C2:DE:70:00/36\tElan\tElan Systems\n00:50:C2:DE:80:00/36\tVisualPr\tVisual Productions\n00:50:C2:DE:90:00/36\tDacomWes\tDacom West GmbH\n00:50:C2:DE:A0:00/36\tCerner\tCerner Corporation\n00:50:C2:DE:B0:00/36\tRuwischK\tRuwisch & Kollegen GmbH\n00:50:C2:DE:C0:00/36\tVendnova\tVendNovation LLC\n00:50:C2:DE:D0:00/36\tLeeLaser\tLee Laser\n00:50:C2:DE:F0:00/36\tPowersen\tPowersense A/S\n00:50:C2:DF:00:00/36\tKoncarEl\tKoncar Electrical Engineering Institute\n00:50:C2:DF:10:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:DF:20:00/36\tOceanSon\tOcean Sonics\n00:50:C2:DF:30:00/36\tInsevis\tINSEVIS GmbH\n00:50:C2:DF:40:00/36\tPotterEl\tPotter Electric Signal Co. LLC\n00:50:C2:DF:50:00/36\tEtherlig\tEtherLight\n00:50:C2:DF:60:00/36\tHinoEngi\tHino Engineering, Inc\n00:50:C2:DF:70:00/36\tCombilen\tCombilent\n00:50:C2:DF:80:00/36\tTommotek\tTommotek (WA) Pty Ltd.\n00:50:C2:DF:90:00/36\tJennySci\tJenny Science AG\n00:50:C2:DF:A0:00/36\tMacValve\tMAC Valves, Inc.\n00:50:C2:DF:B0:00/36\tBettiniS\tBettini Srl\n00:50:C2:DF:C0:00/36\tI-Evo\tI-Evo Ltd\n00:50:C2:DF:D0:00/36\tWotbox\tWotbox ltd\n00:50:C2:DF:E0:00/36\tXitekDes\tXitek Design Limited\n00:50:C2:DF:F0:00/36\tTantalEl\tTantal Electronica, Sl\n00:50:C2:E0:00:00/36\tAplexTec\tAplex Technology Inc.\n00:50:C2:E0:10:00/36\tTycoTraf\tTyco Traffic & Transportation\n00:50:C2:E0:20:00/36\tCleversc\tCleverscope\n00:50:C2:E0:30:00/36\tIcuScand\tICU Scandinavia Schweiz GmbH\n00:50:C2:E0:40:00/36\tSecEngPt\tSec.Eng Systems Pty Ltd\n00:50:C2:E0:50:00/36\tNocosium\t\n00:50:C2:E0:60:00/36\tEbnerEle\tEbner Electronic GmbH\n00:50:C2:E0:70:00/36\tProtagon\tProtagon Process Technologies GmbH\n00:50:C2:E0:80:00/36\tKstTechn\tKST Technology\n00:50:C2:E0:90:00/36\tAteme\t\n00:50:C2:E0:A0:00/36\tSiconSrl\tSicon srl\n00:50:C2:E0:B0:00/36\tSeartech\t\n00:50:C2:E0:C0:00/36\tYouhoEle\tYouho Electric Ind.,Ltd.\n00:50:C2:E0:D0:00/36\tUnixmedi\tUnixmedia Srl\n00:50:C2:E0:E0:00/36\tPmacJapa\tPmac Japan\n00:50:C2:E0:F0:00/36\tTrentino\tTrentino Systems\n00:50:C2:E1:00:00/36\tRadinetw\tRadinetworks Co., Ltd\n00:50:C2:E1:10:00/36\tRadiomob\tRadioMobile Inc\n00:50:C2:E1:20:00/36\tKagoElec\tKago Electronics BV\n00:50:C2:E1:30:00/36\tAutomati\tAutomation Assist Japan Company\n00:50:C2:E1:40:00/36\tCalixtoP\tCalixto Systems Pvt Ltd\n00:50:C2:E1:50:00/36\tIhiScube\tIHI Scube Co.,Ltd\n00:50:C2:E1:60:00/36\tJetstrea\tJetstream Ltd.\n00:50:C2:E1:70:00/36\tGallTank\tGall Tankdatensysteme GmbH\n00:50:C2:E1:80:00/36\tAbbTrans\tABB Transmission and Distribution Automation Equipment (Xiamen) Co., Ltd.\n00:50:C2:E1:90:00/36\tZoeMedic\tZoe Medical\n00:50:C2:E1:A0:00/36\tRosslare\tRosslare Enterprises Limited\n00:50:C2:E1:B0:00/36\tEmbedded\tEmbedded Labs\n00:50:C2:E1:C0:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:E1:D0:00/36\tHoldline\tHoldline Tecnologia e Sistemas Ltda\n00:50:C2:E1:E0:00/36\tLo-Q\tLo-Q plc\n00:50:C2:E1:F0:00/36\tElvees\t\n00:50:C2:E2:00:00/36\tDivelbis\tDivelbiss Corporation\n00:50:C2:E2:10:00/36\tNorwiaAs\tNorwia AS\n00:50:C2:E2:20:00/36\tMichaelR\tMichael Riedel Transformatorenbau GmbH\n00:50:C2:E2:30:00/36\tVitec\t\n00:50:C2:E2:40:00/36\tDitestFa\tDiTEST Fahrzeugdiagnose GmbH\n00:50:C2:E2:50:00/36\tAcdElekt\tACD Elektronik GmbH\n00:50:C2:E2:60:00/36\tCinetixS\tCinetix s.r.l.\n00:50:C2:E2:70:00/36\tControlS\tCONTROL SYSTEMS Srl\n00:50:C2:E2:80:00/36\tTeplovod\tTeplovodokhran\n00:50:C2:E2:90:00/36\tFrSauter\tFr. Sauter AG\n00:50:C2:E2:A0:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n00:50:C2:E2:B0:00/36\tPlantInt\tPlant Integrity Limited\n00:50:C2:E2:C0:00/36\tEnElectr\tEN ElectronicNetwork Hamburg GmbH\n00:50:C2:E2:D0:00/36\tFunkwerk\tFunkwerk IT Karlsfeld GmbH\n00:50:C2:E2:E0:00/36\tDs!Ingen\tDS! Ingenieurbuero\n00:50:C2:E2:F0:00/36\tBeam\tBeam Ltd\n00:50:C2:E3:00:00/36\tGoennhei\tGoennheimer Elektronic GmbH\n00:50:C2:E3:10:00/36\tEnsis\tENSIS Co., Ltd.\n00:50:C2:E3:20:00/36\tOshoksh\tOshoksh Corporation\n00:50:C2:E3:30:00/36\tMoritaTe\tMorita Technical Center Company\n00:50:C2:E3:40:00/36\tHglDynam\tHGL Dynamics\n00:50:C2:E3:50:00/36\tOmnica\tOmnica Corporation\n00:50:C2:E3:60:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:E3:70:00/36\tFujiData\tFUJI DATA SYSTEM Co., Ltd\n00:50:C2:E3:80:00/36\tAesirCop\tAesir Copenhagen\n00:50:C2:E3:90:00/36\tTelemetr\tTelemetrics Inc.\n00:50:C2:E3:A0:00/36\tVocality\tVocality International Ltd\n00:50:C2:E3:B0:00/36\tNanosolu\tNanosolution Inc.\n00:50:C2:E3:C0:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n00:50:C2:E3:D0:00/36\tBaudisch\tBaudisch Electronic GmbH\n00:50:C2:E3:E0:00/36\tMonnit\tMonnit Corp.\n00:50:C2:E3:F0:00/36\tVisitoSR\tVisito S.R.L.\n00:50:C2:E4:00:00/36\tEcrin\tEcrin Systems\n00:50:C2:E4:10:00/36\tHigecoSR\tHigeco S.r.l.\n00:50:C2:E4:20:00/36\tWingsFor\tWings for Media SL\n00:50:C2:E4:30:00/36\tTechnica\tTechnica Engineering GmbH\n00:50:C2:E4:40:00/36\tDeuta-We\tDeuta-Werke GmbH\n00:50:C2:E4:50:00/36\tStichtin\tStichting Sunrise\n00:50:C2:E4:60:00/36\tIndustre\tIndustrea Mining Technology\n00:50:C2:E4:70:00/36\tEnikaCz\tEnika.Cz\n00:50:C2:E4:80:00/36\tItwReyfl\tITW Reyflex North America\n00:50:C2:E4:90:00/36\tCtfTechn\tCtf Technologies Do Brasil Ltda\n00:50:C2:E4:A0:00/36\tGhlBhd\tGHL Systems Bhd\n00:50:C2:E4:B0:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n00:50:C2:E4:C0:00/36\tAppliedM\tApplied Micro Electronics AME bv\n00:50:C2:E4:D0:00/36\tPcsc\t\n00:50:C2:E4:E0:00/36\tInstitut\tInstitute For Information Industry\n00:50:C2:E4:F0:00/36\tWineTech\tWine Technology Marlborough\n00:50:C2:E5:00:00/36\tTattileS\tTattile srl\n00:50:C2:E5:10:00/36\tMotecPty\tMotec Pty Ltd\n00:50:C2:E5:20:00/36\tFamasSys\tFamas System S.p.A.\n00:50:C2:E5:30:00/36\tNextVide\tNEXT video systems Hard- and Software Development GmbH\n00:50:C2:E5:40:00/36\tArcosTec\tArcos Technologies LTD\n00:50:C2:E5:50:00/36\tTti\tTTi Ltd\n00:50:C2:E5:60:00/36\tRfengine\tRfengine Co., Ltd.\n00:50:C2:E5:70:00/36\tEolaneMo\tEolane Montceau\n00:50:C2:E5:80:00/36\tAgri-Hit\tAgri-hitech LLC\n00:50:C2:E5:90:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:E5:A0:00/36\tFutec\tFutec Inc.\n00:50:C2:E5:B0:00/36\tCaipoAut\tCAIPO Automazione Industriale s.r.l.\n00:50:C2:E5:C0:00/36\tMcopia\tMCOPIA Co., Ltd\n00:50:C2:E5:D0:00/36\tT8\tT8 Ltd\n00:50:C2:E5:E0:00/36\tOrep\t\n00:50:C2:E5:F0:00/36\tPantecEn\tPantec Engineering AG\n00:50:C2:E6:00:00/36\tTaiyoSei\tTaiyo Seiki Co.,Ltd.\n00:50:C2:E6:10:00/36\tDetechEl\tDetech Electronics ApS\n00:50:C2:E6:20:00/36\tSaeIt-Sy\tSAE IT-systems GmbH & Co. KG\n00:50:C2:E6:30:00/36\tPrimaSis\tPrima sistemi\n00:50:C2:E6:40:00/36\tEdgeware\tEdgeware AB\n00:50:C2:E6:50:00/36\tIbElektr\tIB Elektronik GmbH\n00:50:C2:E6:60:00/36\tEmac\tEMAC, Inc.\n00:50:C2:E6:70:00/36\tCritical\tCritical Link LLC\n00:50:C2:E6:80:00/36\tKyoritsu\tKyoritsu Electric Corporation\n00:50:C2:E6:90:00/36\tNetmaker\t\n00:50:C2:E6:A0:00/36\tAplexTec\tAplex Technology Inc.\n00:50:C2:E6:B0:00/36\tSikaTech\tSika Technology AG\n00:50:C2:E6:C0:00/36\tSamsungE\tSAMSUNG Electronics Co.,Ltd.(LED Division)\n00:50:C2:E6:D0:00/36\tAllerta\tAllerta Inc\n00:50:C2:E6:E0:00/36\tPower-On\tPower-One Italia S.p.A\n00:50:C2:E6:F0:00/36\tLeydenEn\tLeyden Engineering\n00:50:C2:E7:00:00/36\tDorletSa\tDorlet Sau\n00:50:C2:E7:10:00/36\tTrafficN\ttraffic network solutions s.l\n00:50:C2:E7:30:00/36\tAcsMotio\tACS Motion Control Ltd.\n00:50:C2:E7:40:00/36\tWill\tWill corp.\n00:50:C2:E7:50:00/36\tFsm\tFsm Ag\n00:50:C2:E7:60:00/36\tEmbedded\tEmbedded Solution Bank Co., Ltd.\n00:50:C2:E7:70:00/36\tFrSauter\tFr. Sauter AG\n00:50:C2:E7:80:00/36\tTaskSist\tTask Sistemas De Computacao Ltda\n00:50:C2:E7:90:00/36\tMcsMicro\tMCS MICRONIC Computer Systeme GmbH\n00:50:C2:E7:A0:00/36\tLightel\t\n00:50:C2:E7:B0:00/36\tAtomGike\tATOM GIKEN Co.,Ltd.\n00:50:C2:E7:C0:00/36\tSpContro\tsp controls, inc\n00:50:C2:E7:D0:00/36\tAelMicro\tAEL Microsystems Limited\n00:50:C2:E7:E0:00/36\tSwarefle\tSwareflex GmbH\n00:50:C2:E7:F0:00/36\tLsContro\tLS Control A/S\n00:50:C2:E8:00:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:E8:10:00/36\tAdaptive\tAdaptive Technologies, Inc.\n00:50:C2:E8:20:00/36\tXploreTe\tXplore Technologies Corp\n00:50:C2:E8:30:00/36\tWitree\tWitree Co.,Ltd\n00:50:C2:E8:40:00/36\tAbbTrans\tABB Transmission and Distribution Automation Equipment (Xiamen) Co., Ltd.\n00:50:C2:E8:50:00/36\tCosmoLif\tCosmo Life Co.,Ltd\n00:50:C2:E8:60:00/36\tMultisun\tMultisuns Corporation\n00:50:C2:E8:70:00/36\tLamsonSa\tLamson Safes & Security\n00:50:C2:E8:80:00/36\tPivitecL\tPivitec, LLC\n00:50:C2:E8:90:00/36\tProteqse\tProteqsen\n00:50:C2:E8:A0:00/36\tMacronet\tMacronet s.r.l.\n00:50:C2:E8:B0:00/36\tRpaElect\tRPA Electronic Solutions, Inc.\n00:50:C2:E8:C0:00/36\tEpecOy\tEpec Oy\n00:50:C2:E8:D0:00/36\tSystemad\tSystemAdvanced Co,Ltd\n00:50:C2:E8:E0:00/36\tGdMissio\tGD Mission Systems\n00:50:C2:E8:F0:00/36\tSttCondi\tSTT Condigi A/S\n00:50:C2:E9:00:00/36\tGsElektr\tGS Elektromedizinische Geraete G. Stemple GmbH\n00:50:C2:E9:10:00/36\tDspDesig\tDsp Design Ltd\n00:50:C2:E9:20:00/36\tCt\tCT Company\n00:50:C2:E9:30:00/36\tPercepti\tPerceptive Pixel Inc.\n00:50:C2:E9:40:00/36\tAna-U\tANA-U GmbH\n00:50:C2:E9:50:00/36\tDliteCom\tDlite Comercio, Importadora e Serviços de Automação Ltda\n00:50:C2:E9:60:00/36\tProyecso\tProyecson S.A.\n00:50:C2:E9:70:00/36\tArista\tArista Systems Corporation\n00:50:C2:E9:80:00/36\tI3Intern\ti3 International Inc.\n00:50:C2:E9:90:00/36\tUvNetwor\tUV Networks, Inc.\n00:50:C2:E9:A0:00/36\tSolace\tSolace Systems\n00:50:C2:E9:B0:00/36\tHentsche\tHentschel System GmbH\n00:50:C2:E9:C0:00/36\tSparq\tSPARQ systems\n00:50:C2:E9:D0:00/36\tNicai-Sy\tnicai-systems\n00:50:C2:E9:E0:00/36\tAmerican\tAmerican Microsystems, Ltd.\n00:50:C2:E9:F0:00/36\tDatasoft\tDataSoft Corporation\n00:50:C2:EA:00:00/36\tRobertBo\tRobert Bosch Healthcare Systems, Inc.\n00:50:C2:EA:10:00/36\tTexCompu\tTex Computer Srl\n00:50:C2:EA:20:00/36\tThinkrf\tThinkRF Corp\n00:50:C2:EA:30:00/36\tSubsea\tSubsea Systems, Inc.\n00:50:C2:EA:40:00/36\tHead\t\n00:50:C2:EA:50:00/36\tAerodata\tAerodata AG\n00:50:C2:EA:60:00/36\tPowersen\tPowersense A/S\n00:50:C2:EA:70:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:EA:80:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n00:50:C2:EA:90:00/36\tMettlerT\tMettler Toledo Hi Speed\n00:50:C2:EA:A0:00/36\tBae\tBAE Systems\n00:50:C2:EA:B0:00/36\tWarp9Tec\tWarp9 Tech Design, Inc.\n00:50:C2:EA:C0:00/36\tAliasIp\tAlias ip\n00:50:C2:EA:D0:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n00:50:C2:EA:E0:00/36\tAlyricaN\tAlyrica Networks\n00:50:C2:EA:F0:00/36\tGogoBa\tGogo BA\n00:50:C2:EB:00:00/36\tPulseCom\tPulse Communication Systems Pvt. Ltd.\n00:50:C2:EB:10:00/36\tPduExper\tPdu Expert Uk Ltd\n00:50:C2:EB:20:00/36\tOtakiEle\tOtaki Electric Corporation\n00:50:C2:EB:30:00/36\tArRf/Mic\tAR RF/Microwave Instrumentation\n00:50:C2:EB:40:00/36\tWishtekT\tWishtek Technology, Inc.\n00:50:C2:EB:50:00/36\tCovidenc\tCovidence A/S\n00:50:C2:EB:60:00/36\tMonsoonS\tMonsoon Solutions, Inc.\n00:50:C2:EB:70:00/36\tSaab\tSaab AB\n00:50:C2:EB:80:00/36\tDspnor\t\n00:50:C2:EB:90:00/36\tAlpha-Mo\tALPHA-MOS\n00:50:C2:EB:A0:00/36\tWest-Com\tWest-Com Nurse Call Systems, Inc.\n00:50:C2:EB:B0:00/36\tTimeterm\tTimeTerminal Adductor Group AB\n00:50:C2:EB:C0:00/36\tDiehlAko\tDiehl AKO Stiftung & Co. KG\n00:50:C2:EB:D0:00/36\tDropletM\tDroplet Measurement Technologies\n00:50:C2:EB:E0:00/36\tGlobalTe\tGlobal Tecnologia LTDA.\n00:50:C2:EB:F0:00/36\tCivoluti\tCivolution\n00:50:C2:EC:00:00/36\tUgmoTech\tUgMO Technologies\n00:50:C2:EC:10:00/36\tAntGroup\tANT Group s.r.l\n00:50:C2:EC:20:00/36\tIxonos\tIxonos Plc\n00:50:C2:EC:30:00/36\tAplexTec\tAplex Technology Inc.\n00:50:C2:EC:40:00/36\tLogicalE\tLogical Electromechanical Sys Inc.\n00:50:C2:EC:50:00/36\tRsupport\tRSUPPORT Co., Ltd.\n00:50:C2:EC:60:00/36\tInfronic\tInfronics Systems Limited\n00:50:C2:EC:70:00/36\tLiquidRo\tLiquid Robotics, Inc\n00:50:C2:EC:80:00/36\tIbernexI\tIbernex Ingenieria, S.L.\n00:50:C2:EC:90:00/36\tAmsterda\tAmsterdam Scientific Instruments BV\n00:50:C2:EC:A0:00/36\tBitwiseC\tBitWise Controls\n00:50:C2:EC:B0:00/36\tFal\tFAL Corp\n00:50:C2:EC:C0:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:EC:D0:00/36\tPeekTraf\tPeek Traffic Corporation\n00:50:C2:EC:E0:00/36\tEasiiIcA\teasii ic adiis\n00:50:C2:EC:F0:00/36\tTaiwanHi\tTaiwan Hiplus Corporation\n00:50:C2:ED:00:00/36\tNipponSy\tNippon Systemware Co.,Ltd.\n00:50:C2:ED:10:00/36\tArcontia\tArcontia Technology AB\n00:50:C2:ED:20:00/36\tKlangspe\tKlangspektrum GmbH\n00:50:C2:ED:30:00/36\tEcoMonit\tEco Monitoring Utility Systems Ltd\n00:50:C2:ED:40:00/36\tTamagawa\tTamagawa Electronics Co.,Ltd.\n00:50:C2:ED:50:00/36\tRflElect\tRFL Electronics, Inc.\n00:50:C2:ED:60:00/36\tCat\tCat AB\n00:50:C2:ED:70:00/36\tFbtElett\tFBT Elettronica spa\n00:50:C2:ED:80:00/36\tAvocatio\tAVocation Systems, Inc.\n00:50:C2:ED:90:00/36\tPlasmatr\tPlasmatronics pty ltd\n00:50:C2:ED:A0:00/36\tJointSto\tJoint Stock Company Svyaz Inginiring M\n00:50:C2:ED:B0:00/36\tBelikSPR\tBelik S.P.R.L.\n00:50:C2:ED:C0:00/36\tEyelock\tEyelock Corporation\n00:50:C2:ED:D0:00/36\tEbneuro\tEbneuro Spa\n00:50:C2:ED:E0:00/36\tSmartGri\tSmart Grid Networks\n00:50:C2:ED:F0:00/36\tMonitorB\tMonitor Business Machines\n00:50:C2:EE:00:00/36\tOsfHansj\tosf Hansjuergen Meier GmbH & Co. KG\n00:50:C2:EE:10:00/36\tProconEl\tProcon Electronics\n00:50:C2:EE:20:00/36\tSystemIn\tSystem Industrie Electronic GmbH\n00:50:C2:EE:30:00/36\tTecnintH\tTecnint HTE SRL\n00:50:C2:EE:40:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n00:50:C2:EE:50:00/36\tCytecZyl\tCytec Zylindertechnik GmbH\n00:50:C2:EE:60:00/36\tB:TechAS\tB:TECH, a. s.\n00:50:C2:EE:70:00/36\tSyesSrl\tsyes srl\n00:50:C2:EE:80:00/36\tKamachoS\tKamacho Scale Co., Ltd.\n00:50:C2:EE:90:00/36\tQuantaSR\tQUANTA S.r.l.\n00:50:C2:EE:A0:00/36\tPosition\tPositioneering Limited\n00:50:C2:EE:B0:00/36\tFibriste\tfibrisTerre GmbH\n00:50:C2:EE:C0:00/36\tYuyamaMf\tYUYAMA MFG Co.,Ltd\n00:50:C2:EE:D0:00/36\tFutureDe\tFuture Design Controls, Inc\n00:50:C2:EE:E0:00/36\tAbbTrans\tABB Transmission and Distribution Automation Equipment (Xiamen) Co., Ltd.\n00:50:C2:EE:F0:00/36\tIdtronic\tIDTRONIC GmbH\n00:50:C2:EF:00:00/36\tHomaetri\tHomaetrix Ltd\n00:50:C2:EF:10:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:EF:20:00/36\tSpecialt\tSpecialty Microwave Corp\n00:50:C2:EF:30:00/36\tSmartPow\tSmart Power Electronics GmbH & Co. KG\n00:50:C2:EF:40:00/36\tRoVeRLab\tRO.VE.R. Laboratories S.p.A\n00:50:C2:EF:50:00/36\tHumanNet\tHuman Network Labs, Inc.\n00:50:C2:EF:60:00/36\tNetlineC\tNetline Communication Technologies\n00:50:C2:EF:70:00/36\tAmstella\tAmstelland Electronic BV\n00:50:C2:EF:80:00/36\tHclTechn\tHCL Technologies\n00:50:C2:EF:90:00/36\tHoribaAb\tHoriba Abx Sas\n00:50:C2:EF:A0:00/36\tPredicti\tPredictive Sensor Technology\n00:50:C2:EF:B0:00/36\tNorbitOd\tNorbit ODM AS\n00:50:C2:EF:C0:00/36\tPrivate\t\n00:50:C2:EF:D0:00/36\tSanmina\t\n00:50:C2:EF:E0:00/36\tPlrInfor\tPLR Information Systems Ltd.\n00:50:C2:EF:F0:00/36\tZephyrus\tZephyrus Electronics LTD.\n00:50:C2:F0:00:00/36\tSyscomIn\tSyscom Instruments\n00:50:C2:F0:10:00/36\tMangoDsp\tMango DSP, Inc\n00:50:C2:F0:20:00/36\tBmr\t\n00:50:C2:F0:30:00/36\tWrenSoun\tWren Sound Systems\n00:50:C2:F0:40:00/36\tKinkiRoe\tKinki Roentgen Industrial Co.,Ltd\n00:50:C2:F0:50:00/36\tEsiVentu\tESI Ventures\n00:50:C2:F0:60:00/36\tMicro-Ke\tMicro-Key BV\n00:50:C2:F0:70:00/36\tIconRese\tIcon Research Ltd\n00:50:C2:F0:80:00/36\tAplexTec\tAplex Technology Inc.\n00:50:C2:F0:90:00/36\tWheatsto\tWheatstone Corporation\n00:50:C2:F0:A0:00/36\tHascomIn\tHASCOM International Pty Ltd\n00:50:C2:F0:B0:00/36\tTreehave\tTreehaven Technologies, Inc.\n00:50:C2:F0:C0:00/36\tSkychann\tSkychannel Ltd\n00:50:C2:F0:D0:00/36\tBluetest\tBluetest AB\n00:50:C2:F0:E0:00/36\tMicroTec\tMicro Technic A/S\n00:50:C2:F0:F0:00/36\tAerovisi\tAeroVision Avionics, Inc.\n00:50:C2:F1:00:00/36\tWincorNi\tWincor Nixdorf Sp. z o.o.\n00:50:C2:F1:10:00/36\tOrganis\tOrganis GmbH\n00:50:C2:F1:20:00/36\tGeneralI\tGeneral Industrial Controls Pvt Ltd\n00:50:C2:F1:30:00/36\tPacketPl\tPacket Plus, Inc.\n00:50:C2:F1:40:00/36\tVisionAe\tVision Systems Aeronautic\n00:50:C2:F1:50:00/36\tSascalDi\tSascal Displays Ltd\n00:50:C2:F1:60:00/36\tPeterHub\tPeter Huber Kältemaschinenbau GmbH\n00:50:C2:F1:70:00/36\tAbbTrans\tABB Transmission and Distribution Automation Equipment (Xiamen) Co., Ltd.\n00:50:C2:F1:80:00/36\tVitecMul\tVitec Multimedia\n00:50:C2:F1:90:00/36\tNetlinkB\tNetlink Bilisim Sistemleri San. ve Tic. Ltd. Sti.\n00:50:C2:F1:A0:00/36\tAquaMana\tAqua Management\n00:50:C2:F1:B0:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:F1:C0:00/36\tGdMissio\tGD Mission Systems\n00:50:C2:F1:D0:00/36\tGrossenb\tGrossenbacher Systeme AG\n00:50:C2:F1:E0:00/36\tDellOrto\tDell'Orto S.P.A.\n00:50:C2:F1:F0:00/36\tVerified\tVerified Energy, LLC.\n00:50:C2:F2:00:00/36\tUnforsIn\tUnfors Instruments AB\n00:50:C2:F2:10:00/36\tSeitec\tSEITEC Co. Ltd\n00:50:C2:F2:20:00/36\tHarlandS\tHarland Simon plc\n00:50:C2:F2:30:00/36\tElectro-\tElectro-Motive Diesel\n00:50:C2:F2:40:00/36\tCt\tCT Company\n00:50:C2:F2:50:00/36\tSamwayEl\tSamway Electronic SRL\n00:50:C2:F2:60:00/36\tWaveip\t\n00:50:C2:F2:70:00/36\tElan\tElan Systems\n00:50:C2:F2:80:00/36\tVertexAn\tVertex Antennentechnik GmbH\n00:50:C2:F2:90:00/36\tRadyne\tRadyne Corporation\n00:50:C2:F2:A0:00/36\tAcdElekt\tACD Elektronik GmbH\n00:50:C2:F2:B0:00/36\tBioGuard\tBio Guard component & technologies\n00:50:C2:F2:C0:00/36\tTerratel\tTerratel Technology s.r.o.\n00:50:C2:F2:D0:00/36\tRobertBo\tRobert Bosch Healthcare Systems, Inc.\n00:50:C2:F2:E0:00/36\tH&LInstr\tH&L Instruments, LLC\n00:50:C2:F2:F0:00/36\tArcosTec\tArcos Technologies LTD\n00:50:C2:F3:00:00/36\tMiris\tMiris AB\n00:50:C2:F3:10:00/36\tRuetzTec\tRuetz Technologies GmbH\n00:50:C2:F3:20:00/36\tNet4thin\tNet4Things\n00:50:C2:F3:30:00/36\tAppliedM\tApplied Micro Electronics AME bv\n00:50:C2:F3:40:00/36\tSequipS+\tSequip S+E GmbH\n00:50:C2:F3:50:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n00:50:C2:F3:60:00/36\tVisitech\tVisitech AS\n00:50:C2:F3:70:00/36\tRosslare\tRosslare Enterprises Limited\n00:50:C2:F3:80:00/36\tAerocont\tAeroControl, Inc.\n00:50:C2:F3:90:00/36\tInforceC\tInForce Computing, Inc.\n00:50:C2:F3:A0:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:F3:B0:00/36\tTamsFirm\tTAMS firmware co.\n00:50:C2:F3:C0:00/36\tVemcoSpZ\tVemco Sp. z o. o.\n00:50:C2:F3:D0:00/36\tProjectS\tProject service S.a.s\n00:50:C2:F3:E0:00/36\tVtronPty\tVtron Pty Ltd\n00:50:C2:F3:F0:00/36\tDenseiCo\tDENSEI COMMUNICATION Inc.\n00:50:C2:F4:00:00/36\tIbworld\tiBWorld co.,ltd.\n00:50:C2:F4:10:00/36\tFairydev\tFairyDevices Inc.\n00:50:C2:F4:20:00/36\tDspcon\t\n00:50:C2:F4:30:00/36\tSpecialE\tSpecial Systems Engineering Center LLC\n00:50:C2:F4:40:00/36\tSteinbic\tSteinbichler Optotechnik GmbH\n00:50:C2:F4:50:00/36\tHustyMSt\tHUSTY M.Styczen J.Hupert Sp.J.\n00:50:C2:F4:60:00/36\tReasonTe\tReason Tecnologia S.A.\n00:50:C2:F4:70:00/36\tCadac\tcadac,inc.\n00:50:C2:F4:80:00/36\tMidasTec\tMidas Technology DBA Phoenix Audio Technologies\n00:50:C2:F4:90:00/36\tGreenIns\tGreen Instruments A/S\n00:50:C2:F4:A0:00/36\tZ-App\tZ-App Systems, Inc.\n00:50:C2:F4:B0:00/36\tSupranet\t\n00:50:C2:F4:C0:00/36\tEnistic\tEnistic Limited\n00:50:C2:F4:D0:00/36\tKnowhowI\tKnowhow Infocom Inc.\n00:50:C2:F4:E0:00/36\tHeinzing\tHeinzinger electronic GmbH\n00:50:C2:F4:F0:00/36\tBapPreci\tBAP Precision Ltd.\n00:50:C2:F5:00:00/36\tMoritex\tMoritex Corporation\n00:50:C2:F5:10:00/36\tNdcInfra\tNDC Infrared Engineering, Inc.\n00:50:C2:F5:20:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n00:50:C2:F5:30:00/36\tBaycomOp\tBAYCOM OPTO-ELECTRONICS TECHNOLGY CO., LTD.\n00:50:C2:F5:40:00/36\tHellaGut\tHella Gutmann Solutions GmbH\n00:50:C2:F5:50:00/36\tHoneywel\tHoneywell\n00:50:C2:F5:60:00/36\tMonsoonS\tMonsoon Solutions, Inc.\n00:50:C2:F5:70:00/36\tReachTec\tReach Technologies Inc.\n00:50:C2:F5:80:00/36\tIeeeRegi\tIEEE Registration Authority\n00:50:C2:F5:90:00/36\tG3Techno\tG3 Technologies\n00:50:C2:F5:A0:00/36\tSentry36\tSentry 360 Security\n00:50:C2:F5:B0:00/36\tSaia-Bur\tSaia-Burgess Controls AG\n00:50:C2:F5:C0:00/36\tDspDesig\tDsp Design Ltd\n00:50:C2:F5:D0:00/36\tSmartbTe\tSmartb Technologies\n00:50:C2:F5:E0:00/36\tY-CamSol\tY-cam Solutions Ltd\n00:50:C2:F5:F0:00/36\tBoryeuTe\tBoryeu Technology Co.,Ltd\n00:50:C2:F6:00:00/36\tDeckma\tDeckma GmbH\n00:50:C2:F6:10:00/36\tBrauchEl\tBrauch Elektronik GmbH&Co.KG\n00:50:C2:F6:20:00/36\tEmac\tEMAC, Inc.\n00:50:C2:F6:30:00/36\tTriax\tTriax A/S\n00:50:C2:F6:40:00/36\tChrissoT\tChrisso Technologies LLC\n00:50:C2:F6:50:00/36\tTelebyte\tTelebyte Inc.\n00:50:C2:F6:60:00/36\tGwtLlc\tGwt Llc\n00:50:C2:F6:70:00/36\tCelestia\tCelestial Audio\n00:50:C2:F6:80:00/36\tNewtec\tNewtec A/S\n00:50:C2:F6:90:00/36\tSafePlac\tSafe Place Solutions Ltd\n00:50:C2:F6:A0:00/36\tOfiDba2d\tOFI Inc. (dba 2D2C)\n00:50:C2:F6:B0:00/36\tAlgodueE\tAlgodue Elettronica Srl\n00:50:C2:F6:C0:00/36\tProDesig\tPro Design Electronic GmbH\n00:50:C2:F6:D0:00/36\tProDesig\tPro Design Electronic GmbH\n00:50:C2:F6:E0:00/36\tSmithMet\tSmith Meter, Inc.\n00:50:C2:F6:F0:00/36\tAplexTec\tAplex Technology Inc.\n00:50:C2:F7:00:00/36\tNoraltaT\tNoralta Technologies Inc\n00:50:C2:F7:10:00/36\tRfCode\tRF Code, Inc\n00:50:C2:F7:20:00/36\tMaxdetec\tMaxDeTec AG\n00:50:C2:F7:30:00/36\tDeltacas\tDeltacast.Tv\n00:50:C2:F7:40:00/36\tThorTech\tThor Technologies Pty Ltd\n00:50:C2:F7:50:00/36\tPumpwell\tPumpWell Solutions Ltd.\n00:50:C2:F7:60:00/36\tRongJieF\tRong Jie(FuZhou)Electronics Co.,Ltd\n00:50:C2:F7:70:00/36\tSystemte\tSYSTEMTECHNIK GmbH\n00:50:C2:F7:80:00/36\tGetsMssS\tGets MSS S.A.\n00:50:C2:F7:90:00/36\tTattileS\tTattile srl\n00:50:C2:F7:A0:00/36\tC3Llc\tC3 LLC\n00:50:C2:F7:B0:00/36\tMcmElect\tMCM Electronics\n00:50:C2:F7:C0:00/36\tAtonomet\tAtonometrics, Inc.\n00:50:C2:F7:D0:00/36\tD-HikeEl\tD-Hike Electroncs Technology Co.,Ltd\n00:50:C2:F7:E0:00/36\tTruteqWi\tTruTeq Wireless (Pty) Ltd\n00:50:C2:F7:F0:00/36\tDynamicD\tDynamic Design\n00:50:C2:F8:00:00/36\tSysTecEl\tSYS TEC electronic GmbH\n00:50:C2:F8:10:00/36\tPlda\t\n00:50:C2:F8:20:00/36\tSincairI\tSincair Systems International\n00:50:C2:F8:30:00/36\tGspSprac\tGSP Sprachtechnologie GmbH\n00:50:C2:F8:40:00/36\tDynonIns\tDynon Instruments\n00:50:C2:F8:50:00/36\tEnetics\tEnetics, Inc.\n00:50:C2:F8:60:00/36\tAudioPow\tAudio Power Labs\n00:50:C2:F8:70:00/36\tVaisalaO\tVaisala Oyj\n00:50:C2:F8:80:00/36\tRtcManuf\tRTC Manufacturing Inc.\n00:50:C2:F8:90:00/36\tCsaEngin\tCSA Engineering AG\n00:50:C2:F8:A0:00/36\tEmac\tEMAC, Inc.\n00:50:C2:F8:B0:00/36\tComletVe\tcomlet Verteilte Systeme GmbH\n00:50:C2:F8:C0:00/36\tUbstechn\tUBSTechnology Co., Ltd\n00:50:C2:F8:D0:00/36\tGuangdon\tGuangdong East Power Co.,\n00:50:C2:F8:E0:00/36\tGpo\t\n00:50:C2:F8:F0:00/36\tComputer\tComputerwise, Inc.\n00:50:C2:F9:00:00/36\tSecurete\tSecureTech Systems, Inc.\n00:50:C2:F9:10:00/36\tRe2\tRE2 Inc\n00:50:C2:F9:20:00/36\tConetSol\tCONET Solutions GmbH\n00:50:C2:F9:30:00/36\tBaudisch\tBaudisch Electronic GmbH\n00:50:C2:F9:40:00/36\tDigitalB\tDigital Barriers\n00:50:C2:F9:50:00/36\tTtiThurl\tTTi LTD (Thurlby Thandar Instruments LTD)\n00:50:C2:F9:60:00/36\tJlcooper\tJLCooper Electronics\n00:50:C2:F9:70:00/36\tSiconSrl\tSicon srl\n00:50:C2:F9:80:00/36\tInfotech\tInfotech North America\n00:50:C2:F9:90:00/36\tDrNeuman\tDr. Neumann elektronik GmbH\n00:50:C2:F9:A0:00/36\tTelvent\t\n00:50:C2:F9:B0:00/36\tNewellTe\tNewell Technologies Limited\n00:50:C2:F9:C0:00/36\tR&DKomet\tR&D KOMETEH\n00:50:C2:F9:D0:00/36\tJscKalug\tJSC Kaluga Teletypes Manufacturing Plant\n00:50:C2:F9:E0:00/36\tMatsusad\tMatsusada Precision Inc.\n00:50:C2:F9:F0:00/36\tNanjingS\tNanjing SAC Power Grid Automation Co., Ltd.\n00:50:C2:FA:00:00/36\tAmplusCo\tAmplus Communication Pte Ltd\n00:50:C2:FA:10:00/36\tN-HandsU\tN-Hands GmbH und Co KG\n00:50:C2:FA:20:00/36\tPower-On\tPower-One\n00:50:C2:FA:30:00/36\tXemexNv\tXemex NV\n00:50:C2:FA:50:00/36\tIntuitiv\tIntuitive Surgical, Inc\n00:50:C2:FA:60:00/36\tHilkomDi\tHilkom digital GmbH\n00:50:C2:FA:70:00/36\tExelis\tExelis Inc.\n00:50:C2:FA:80:00/36\tYashSiqu\tYash SiQure Technologies India Pvt. Ltd.\n00:50:C2:FA:90:00/36\tHijetPri\tHijet Print d.o.o.\n00:50:C2:FA:A0:00/36\tYjsystem\t\n00:50:C2:FA:B0:00/36\tAplexTec\tAplex Technology Inc.\n00:50:C2:FA:C0:00/36\tAdetelGr\tAdetel Group\n00:50:C2:FA:D0:00/36\tFinishin\tFinishing Brands\n00:50:C2:FA:E0:00/36\tAtiAutom\tATI Automação Telecomunicações e Informática Ltda\n00:50:C2:FA:F0:00/36\tVremya-C\tVremya-CH JSC\n00:50:C2:FB:00:00/36\tTateishi\tTateishi Kobisha Co.LTD\n00:50:C2:FB:10:00/36\tMatelex\t\n00:50:C2:FB:20:00/36\tPrestonI\tPreston Industries dba PolyScience\n00:50:C2:FB:30:00/36\tCt\tCT Company\n00:50:C2:FB:40:00/36\tMc-Monit\tMC-monitoring SA\n00:50:C2:FB:50:00/36\tAssembly\tAssembly Contracts Limited\n00:50:C2:FB:60:00/36\tArgus-Sp\tARGUS-SPECTRUM\n00:50:C2:FB:70:00/36\tPounceCo\tPounce Consulting\n00:50:C2:FB:80:00/36\tTechno\tTechno Co.,Ltd.\n00:50:C2:FB:90:00/36\tCoralTel\tCoral Telecom Ltd\n00:50:C2:FB:A0:00/36\tElbitOfA\tElbit Systems of America - Fort Worth Operations\n00:50:C2:FB:B0:00/36\tAcida\tACIDA GmbH\n00:50:C2:FB:C0:00/36\tLeroySom\tLeroy Somer\n00:50:C2:FB:D0:00/36\tEatonFhf\tEATON FHF Funke + Huster Fernsig GmbH\n00:50:C2:FB:E0:00/36\tSentecEl\tsenTec Elektronik GmbH\n00:50:C2:FB:F0:00/36\tMylogic\t\n00:50:C2:FC:00:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n00:50:C2:FC:10:00/36\tMotecPty\tMotec Pty Ltd\n00:50:C2:FC:20:00/36\tElta\t\n00:50:C2:FC:30:00/36\tHsdcSpZO\tHSDC Sp. z o.o.\n00:50:C2:FC:40:00/36\tKyowaden\tKyowadensi\n00:50:C2:FC:50:00/36\tSakuraSe\tSakura Seiki Co.,Ltd.\n00:50:C2:FC:60:00/36\tCritical\tCritical Link LLC\n00:50:C2:FC:70:00/36\tSercomRe\tSERCOM Regeltechniek\n00:50:C2:FC:80:00/36\tFarSouth\tFar South Networks\n00:50:C2:FC:90:00/36\tMehtaTec\tMehta Tech, Inc.\n00:50:C2:FC:A0:00/36\tTelemisi\tTelemisis Ltd\n00:50:C2:FC:B0:00/36\tPropagat\tPropagation Systems Limited\n00:50:C2:FC:C0:00/36\tSoudroni\tSoudronic AG\n00:50:C2:FC:D0:00/36\tJinyoung\tJinyoung Contech\n00:50:C2:FC:E0:00/36\tKoyoElec\tKoyo Electric\n00:50:C2:FC:F0:00/36\tDintekSh\tDINTEK Shanghai Electronic Ltd\n00:50:C2:FD:00:00/36\tSimpleSo\tSimple Solutions\n00:50:C2:FD:10:00/36\tEnyxSa\tEnyx SA\n00:50:C2:FD:20:00/36\tAutonomi\tAutonomic Controls. Inc\n00:50:C2:FD:30:00/36\tAsterEle\tAster Electric Co.,Ltd.\n00:50:C2:FD:40:00/36\tInsitu\tInsitu, Inc\n00:50:C2:FD:50:00/36\tAmerican\tAmerican Microsystems, Ltd.\n00:50:C2:FD:60:00/36\tCityComp\tCity Computing Ltd\n00:50:C2:FD:70:00/36\tDeuta-We\tDeuta-Werke GmbH\n00:50:C2:FD:80:00/36\tEase\tEase Inc.\n00:50:C2:FD:90:00/36\tFigmentD\tFigment Design Laboratories\n00:50:C2:FD:A0:00/36\tElan\tElan Systems\n00:50:C2:FD:B0:00/36\tSecurity\tThe Security Center Inc\n00:50:C2:FD:C0:00/36\tQuercusT\tQuercus Technologies, S.L.\n00:50:C2:FD:D0:00/36\tToptech\tToptech Systems, Inc.\n00:50:C2:FD:E0:00/36\tPeekTraf\tPeek Traffic\n00:50:C2:FD:F0:00/36\tAcdElekt\tACD Elektronik GmbH\n00:50:C2:FE:00:00/36\tAzurtest\t\n00:50:C2:FE:10:00/36\tDotocean\t\n00:50:C2:FE:20:00/36\tPulsotro\tPulsotronic Anlagentechnik GmbH\n00:50:C2:FE:30:00/36\tPrivate\t\n00:50:C2:FE:40:00/36\tRttMobil\tRTT Mobile Interpretation\n00:50:C2:FE:50:00/36\tScandino\tScandinova Systems AB\n00:50:C2:FE:60:00/36\tExibea\tExibea AB\n00:50:C2:FE:70:00/36\tErhardt+\tErhardt+Leimer GmbH\n00:50:C2:FE:80:00/36\tMangoDsp\tMango DSP, Inc.\n00:50:C2:FE:90:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n00:50:C2:FE:A0:00/36\tBrunelSe\tBrunel GmbH Section Communications\n00:50:C2:FE:B0:00/36\tAxibleTe\tAxible Technologies\n00:50:C2:FE:C0:00/36\tFirstSys\tFirst System Technology Co., Ltd.\n00:50:C2:FE:D0:00/36\tLogisolK\tLOGISOL Kft.\n00:50:C2:FE:E0:00/36\tSparksIn\tSparks Instruments SA\n00:50:C2:FE:F0:00/36\tTaskSist\tTask Sistemas de Computacao\n00:50:C2:FF:00:00/36\tGdMissio\tGD Mission Systems\n00:50:C2:FF:10:00/36\tDitestFa\tDiTEST Fahrzeugdiagnose GmbH\n00:50:C2:FF:20:00/36\tGlobalco\tGlobalcom Engineering Srl\n00:50:C2:FF:30:00/36\tControlS\tCONTROL SYSTEMS Srl\n00:50:C2:FF:40:00/36\tBurkTech\tBurk Technology\n00:50:C2:FF:50:00/36\tFlexkomI\tFlexkom Internet Pazarlama Bilipim ve Eoitim Hiz.Inp.Mim.Muh.Oto.Enerji San. Tic. A.p.\n00:50:C2:FF:60:00/36\tBooycoEl\tBooyco Electronics\n00:50:C2:FF:70:00/36\tHumanInt\tHuman Intech\n00:50:C2:FF:80:00/36\tKstTechn\tKST technology\n00:50:C2:FF:90:00/36\tPenttech\tPenttech AB\n00:50:C2:FF:A0:00/36\tNupoint\tNupoint Systems Inc.\n00:50:C2:FF:B0:00/36\tSefram\t\n00:50:C2:FF:C0:00/36\tSpirentC\tSpirent Communications\n00:50:C2:FF:D0:00/36\tTouchles\tTouchless Biometric Systems AG\n00:50:C2:FF:E0:00/36\tSensataT\tSensata Technologies\n00:50:C2:FF:F0:00/36\tMsr-Solu\tMSR-Solutions GmbH\n00:50:C4\tImd\t\n00:50:C5\tAdsTechn\tADS Technologies, Inc\n00:50:C6\tLoopTele\tLoop Telecommunication International, Inc.\n00:50:C7\tPrivate\t\n00:50:C8\tAddonics\tAddonics Technologies, Inc.\n00:50:C9\tMasproDe\tMaspro Denkoh Corp.\n00:50:CA\tNetToNet\tNet To Net Technologies\n00:50:CB\tJetter\t\n00:50:CC\tSeagateC\tSeagate Cloud Systems Inc\n00:50:CD\tDigiansw\tDIGIANSWER A/S\n00:50:CE\tLgIntern\tLg International Corp.\n00:50:CF\tVanlinkC\tVanlink Communication Technology Research Institute\n00:50:D0\tMinerva\tMinerva Systems\n00:50:D1\tCisco\tCisco Systems, Inc\n00:50:D2\tCmcElect\tCMC Electronics Inc\n00:50:D3\tDigitalA\tDigital Audio Processing Pty. Ltd.\n00:50:D4\tJoohongI\tJOOHONG INFORMATION &\n00:50:D5\tAd\tAd Systems Corp.\n00:50:D6\tAtlasCop\tAtlas Copco Tools Ab\n00:50:D7\tTelstrat\t\n00:50:D8\tUnicornC\tUnicorn Computer Corp.\n00:50:D9\tEngetron\tENGETRON-ENGENHARIA ELETRONICA IND. e COM. LTDA\n00:50:DA\t3com\t\n00:50:DB\tContempo\tContemporary Control\n00:50:DC\tTasTelef\tTAS TELEFONBAU A. SCHWABE GMBH & CO. KG\n00:50:DD\tSerraSol\tSerra Soldadura, S.A.\n00:50:DE\tSignum\tSignum Systems Corp.\n00:50:DF\tAirfiber\tAirFiber, Inc.\n00:50:E1\tNsTechEl\tNs Tech Electronics Sdn Bhd\n00:50:E2\tCisco\t\n00:50:E3\tArrisGro\tARRIS Group, Inc.\n00:50:E4\tApple\tApple, Inc.\n00:50:E6\tHakusan\tHakusan Corporation\n00:50:E7\tParadise\tPARADISE INNOVATIONS (ASIA)\n00:50:E8\tNomadix\tNomadix Inc.\n00:50:EA\tXelCommu\tXel Communications, Inc.\n00:50:EB\tAlpha-To\tALPHA-TOP CORPORATION\n00:50:EC\tOlicom\tOLICOM A/S\n00:50:ED\tAndaNetw\tAnda Networks\n00:50:EE\tTekDigit\tTek Digitel Corporation\n00:50:EF\tSpeSyste\tSPE Systemhaus GmbH\n00:50:F0\tCisco\tCisco Systems, Inc\n00:50:F1\tIntel\tIntel Corporation\n00:50:F2\tMicrosof\tMicrosoft Corp.\n00:50:F3\tGlobalNe\tGLOBAL NET INFORMATION CO., Ltd.\n00:50:F4\tSigmatek\tSIGMATEK GMBH & CO. KG\n00:50:F6\tPan-Inte\tPAN-INTERNATIONAL INDUSTRIAL CORP.\n00:50:F7\tVentureM\tVENTURE MANUFACTURING (SINGAPORE) LTD.\n00:50:F8\tEntregaT\tEntrega Technologies, Inc.\n00:50:F9\tSensorma\tSensormatic Electronics LLC\n00:50:FA\tOxtel\tOxtel, Ltd.\n00:50:FB\tVskElect\tVsk Electronics\n00:50:FC\tEdimaxTe\tEdimax Technology Co. Ltd.\n00:50:FD\tVisionco\tVisioncomm Co., Ltd.\n00:50:FE\tPctvnetA\tPCTVnet ASA\n00:50:FF\tHakkoEle\tHakko Electronics Co., Ltd.\n00:51:ED\tLgInnote\tLG Innotek\n00:52:18\tWuxiKebo\tWuxi Keboda Electron Co.Ltd\n00:54:9F\tAvaya\tAvaya Inc\n00:54:AF\tContinen\tContinental Automotive Systems Inc.\n00:54:BD\tSwelaser\tSwelaser AB\n00:55:00\tXerox\t\n00:55:DA\tIeeeRegi\tIEEE Registration Authority\n00:55:DA:00:00:00/28\tShinkoTe\tShinko Technos co.,ltd.\n00:55:DA:10:00:00/28\tKoolpos\tKoolPOS Inc.\n00:55:DA:20:00:00/28\tBeijingC\tBeijing Connected Information Technology Co.,Ltd.\n00:55:DA:30:00:00/28\tNovexxSo\tNovexx Solutions GmbH\n00:55:DA:40:00:00/28\tDatapath\tDatapath Limited\n00:55:DA:50:00:00/28\tNanoleaf\t\n00:55:DA:60:00:00/28\tOooDekat\tOoo Dekatron\n00:55:DA:70:00:00/28\tLucistec\tLUCISTECHNOLOGIES（SHANGHAI）CO.,LTD\n00:55:DA:80:00:00/28\tBroadsof\tBroadSoft, Inc.\n00:55:DA:90:00:00/28\tQuantumC\tQuantum Communication Technology Co., Ltd.,Anhui\n00:55:DA:A0:00:00/28\tSpeechla\tSpeechlab\n00:55:DA:B0:00:00/28\tInteraxo\tInteraxon Inc\n00:55:DA:C0:00:00/28\tDonguanW\tDonguan WideLink Communication Technology Co.,Ltd.\n00:55:DA:D0:00:00/28\tArrowEle\tArrow Electronics,Inc.\n00:55:DA:E0:00:00/28\tVictorsu\tVictorsure Limited\n00:55:DA:F0:00:00/28\tPrivate\t\n00:56:2B\tCisco\tCisco Systems, Inc\n00:56:CD\tApple\tApple, Inc.\n00:57:C1\tLgElectr\tLG Electronics (Mobile Communications)\n00:57:D2\tCisco\tCisco Systems, Inc\n00:58:3F\tPcAquari\tPC Aquarius\n00:59:07\tLenovoem\tLenovoEMC Products USA, LLC\n00:59:79\tNetworke\tNetworked Energy Services\n00:59:AC\tKpnBV\tKpn. B.V.\n00:59:DC\tCisco\tCisco Systems, Inc\n00:5A:13\tHuaweiTe\tHuawei Technologies Co.,Ltd\n00:5A:39\tShenzhen\tShenzhen Fast Technologies Co.,Ltd\n00:5B:A1\tShanghai\tshanghai huayuan chuangxin software CO., LTD.\n00:5C:86\tShenzhen\tShenzhen Fast Technologies Co.,Ltd\n00:5C:B1\tGospellD\tGospell DIGITAL TECHNOLOGY CO., LTD\n00:5D:03\tXilinx\tXilinx, Inc\n00:5D:73\tCisco\tCisco Systems, Inc\n00:5F:86\tCisco\tCisco Systems, Inc\n00:60:00\tXycom\tXycom Inc.\n00:60:01\tInnosys\tInnoSys, Inc.\n00:60:02\tScreenSu\tScreen Subtitling Systems, Ltd\n00:60:03\tTeraokaW\tTeraoka Weigh System Pte, Ltd.\n00:60:04\tComputad\tComputadores Modulares Sa\n00:60:05\tFeedback\tFeedback Data Ltd.\n00:60:06\tSotec\tSotec Co., Ltd\n00:60:07\tAcresGam\tAcres Gaming, Inc.\n00:60:08\t3com3com\t3Com\n00:60:09\tCiscoCat\tCisco\n00:60:0A\tSordComp\tSord Computer Corporation\n00:60:0B\tLogware\tLOGWARE GmbH\n00:60:0C\tEurotech\tEurotech Inc.\n00:60:0D\tDigitalL\tDigital Logic GmbH\n00:60:0E\tWavenetI\tWavenet International, Inc.\n00:60:0F\tWestellT\tWestell Technologies Inc.\n00:60:10\tNetworkM\tNetwork Machines, Inc.\n00:60:11\tCrystalS\tCrystal Semiconductor Corp.\n00:60:12\tPowerCom\tPower Computing Corporation\n00:60:13\tNetstalM\tNetstal Maschinen Ag\n00:60:14\tEdec\tEdec Co., Ltd.\n00:60:15\tNet2net\tNET2NET CORPORATION\n00:60:16\tClariion\t\n00:60:17\tTokimec\tTokimec Inc.\n00:60:18\tStellarO\tStellar One Corporation\n00:60:19\tRocheDia\tRoche Diagnostics\n00:60:1A\tKeithley\tKeithley Instruments\n00:60:1B\tMesaElec\tMesa Electronics\n00:60:1C\tTelxon\tTelxon Corporation\n00:60:1D\tLucentTe\tLucent Technologies\n00:60:1E\tSoftlab\tSoftlab, Inc.\n00:60:1F\tStallion\tStallion Technologies\n00:60:20\tPivotalN\tPivotal Networking, Inc.\n00:60:21\tDsc\tDsc Corporation\n00:60:22\tVicom\tVicom Systems, Inc.\n00:60:23\tPericomS\tPericom Semiconductor Corp.\n00:60:24\tGradient\tGradient Technologies, Inc.\n00:60:25\tActiveIm\tActive Imaging Inc.\n00:60:26\tVikingMo\tVIKING Modular Solutions\n00:60:27\tSuperior\tSuperior Modular Products\n00:60:28\tMacrovis\tMacrovision Corporation\n00:60:29\tCaryPeri\tCary Peripherals Inc.\n00:60:2A\tSymicron\tSymicron Computer Communications, Ltd.\n00:60:2B\tPeakAudi\tPeak Audio\n00:60:2C\tLinxData\tLINX Data Terminals, Inc.\n00:60:2D\tAlertonT\tAlerton Technologies, Inc.\n00:60:2E\tCyclades\tCyclades Corporation\n00:60:2F\tCisco\t\n00:60:30\tVillaget\tVillageTronic\n00:60:31\tHrk\tHrk Systems\n00:60:32\tI-Cube\tI-CUBE, INC.\n00:60:33\tAcuityIm\tAcuity Imaging, Inc.\n00:60:34\tRobertBo\tROBERT BOSCH GmbH\n00:60:35\tDallasSe\tDallas Semiconductor, Inc.\n00:60:36\tAitAustr\tAIT Austrian Institute of Technology GmbH\n00:60:37\tNxpSemic\tNXP Semiconductors\n00:60:38\tNortelNe\tNortel Networks\n00:60:39\tSancomTe\tSanCom Technology, Inc.\n00:60:3A\tQuickCon\tQuick Controls Ltd.\n00:60:3B\tAmtec\tAMTEC spa\n00:60:3C\tHagiwara\tHAGIWARA SYS-COM CO., LTD.\n00:60:3D\t3cx\t\n00:60:3E\tCisco100\tCisco\n00:60:3F\tPatapsco\tPatapsco Designs\n00:60:40\tNetro\tNetro Corp.\n00:60:41\tYokogawa\tYokogawa Digital Computer Corporation\n00:60:42\tTksUsa\tTKS (USA), INC.\n00:60:43\tIdirect\tiDirect, INC.\n00:60:44\tLitton/P\tLITTON/POLY-SCIENTIFIC\n00:60:45\tPathligh\tPathlight Technologies\n00:60:46\tVmetro\tVmetro, Inc.\n00:60:47\tCisco\t\n00:60:48\tDellEmc\tDell EMC\n00:60:49\tVinaTech\tVina Technologies\n00:60:4A\tSaicIdea\tSaic Ideas Group\n00:60:4B\tSafe-Com\tSafe-com GmbH & Co. KG\n00:60:4C\tSagemcom\tSagemcom Broadband SAS\n00:60:4D\tMmcNetwo\tMmc Networks, Inc.\n00:60:4E\tCycleCom\tCycle Computer (Sun MotherBoard Replacements)\n00:60:4F\tTattileS\tTattile SRL\n00:60:50\tInternix\tInternix Inc.\n00:60:51\tQualityS\tQuality Semiconductor\n00:60:52\tPeripher\tPERIPHERALS ENTERPRISE CO., Ltd.\n00:60:53\tToyodaMa\tToyoda Machine Works, Ltd.\n00:60:54\tControlw\tControlware Gmbh\n00:60:55\tCornellU\tCornell University\n00:60:56\tNetworkT\tNetwork Tools, Inc.\n00:60:57\tMurataMa\tMurata Manufacturing Co., Ltd.\n00:60:58\tCopperMo\tCopper Mountain Communications, Inc.\n00:60:59\tTechnica\tTechnical Communications Corp.\n00:60:5A\tCelcore\tCelcore, Inc.\n00:60:5B\tIntraser\tIntraServer Technology, Inc.\n00:60:5C\tCisco\t\n00:60:5D\tScanival\tScanivalve Corp.\n00:60:5E\tLibertyT\tLiberty Technology Networking\n00:60:5F\tNipponUn\tNippon Unisoft Corporation\n00:60:60\tDataInno\tData Innovations North America\n00:60:61\tWhistleC\tWhistle Communications Corp.\n00:60:62\tTelesync\tTelesync, Inc.\n00:60:63\tPsionDac\tPsion Dacom Plc.\n00:60:64\tNetcomm\tNetcomm Limited\n00:60:65\tBernecke\tBERNECKER & RAINER INDUSTRIE-ELEKTRONIC GmbH\n00:60:66\tLacroixT\tLACROIX Trafic\n00:60:67\tAcerLan\t\n00:60:68\tDialogic\tDialogic Corporation\n00:60:69\tBrocadeC\tBrocade Communications Systems, Inc.\n00:60:6A\tMitsubis\tMitsubishi Wireless Communications. Inc.\n00:60:6B\tSynclaye\tSynclayer Inc.\n00:60:6C\tArescom\t\n00:60:6D\tDigitalE\tDigital Equipment Corp.\n00:60:6E\tDavicomS\tDavicom Semiconductor, Inc.\n00:60:6F\tClarionO\tClarion Corporation Of America\n00:60:70\tCiscoRou\tCisco\n00:60:71\tMidasLab\tMidas Lab, Inc.\n00:60:72\tVxlInstr\tVxl Instruments, Limited\n00:60:73\tRedcreek\tRedcreek Communications, Inc.\n00:60:74\tQscLlc\tQsc Llc\n00:60:75\tPentek\tPentek, Inc.\n00:60:76\tSchlumbe\tSchlumberger Technologies Retail Petroleum Systems\n00:60:77\tPrisaNet\tPrisa Networks\n00:60:78\tPowerMea\tPower Measurement Ltd.\n00:60:79\tMainstre\tMainstream Data, Inc.\n00:60:7A\tDvs\tDvs Gmbh\n00:60:7B\tFore\tFore Systems, Inc.\n00:60:7C\tWaveacce\tWaveAccess, Ltd.\n00:60:7D\tSentient\tSentient Networks Inc.\n00:60:7E\tGigalabs\tGigalabs, Inc.\n00:60:7F\tAuroraTe\tAurora Technologies, Inc.\n00:60:80\tMicrotro\tMicrotronix Datacom Ltd.\n00:60:81\tTv/ComIn\tTV/COM INTERNATIONAL\n00:60:82\tNovalink\tNovalink Technologies, Inc.\n00:60:83\tCisco362\tCisco Systems, Inc.\n00:60:84\tDigitalV\tDigital Video\n00:60:85\tStorageC\tStorage Concepts\n00:60:86\tLogicRep\tLogic Replacement Tech. Ltd.\n00:60:87\tKansaiEl\tKansai Electric Co., Ltd.\n00:60:88\tAnalogDe\tAnalog Devices, Inc.\n00:60:89\tXata\t\n00:60:8A\tCitadelC\tCitadel Computer\n00:60:8B\tConferte\tConferTech International\n00:60:8C\t3com1990\t3Com (1990 onwards)\n00:60:8D\tUnipulse\tUnipulse Corp.\n00:60:8E\tHeElectr\tHE ELECTRONICS, TECHNOLOGIE & SYSTEMTECHNIK GmbH\n00:60:8F\tTekramTe\tTekram Technology Co., Ltd.\n00:60:90\tArtizaNe\tArtiza Networks Inc\n00:60:91\tFirstPac\tFirst Pacific Networks, Inc.\n00:60:92\tMicro/Sy\tMICRO/SYS, INC.\n00:60:93\tVarian\t\n00:60:94\tAmdPcnet\tAMD PCNET PCI\n00:60:95\tAccu-Tim\tACCU-TIME SYSTEMS, INC.\n00:60:96\tTSMicrot\tT.S. Microtech Inc.\n00:60:97\t3com\t\n00:60:98\tHtCommun\tHt Communications\n00:60:99\tSbe\tSBE, Inc.\n00:60:9A\tNjkTechn\tNjk Techno Co.\n00:60:9B\tAstronov\tAstroNova, Inc\n00:60:9C\tPerkin-E\tPerkin-Elmer Incorporated\n00:60:9D\tPmiFoodE\tPmi Food Equipment Group\n00:60:9E\tAscX3-In\tASC X3 - INFORMATION TECHNOLOGY STANDARDS SECRETARIATS\n00:60:9F\tPhast\tPhast Corporation\n00:60:A0\tSwitched\tSwitched Network Technologies, Inc.\n00:60:A1\tVpnet\tVPNet, Inc.\n00:60:A2\tNihonUni\tNihon Unisys Limited Co.\n00:60:A3\tContinuu\tContinuum Technology Corp.\n00:60:A4\tGewTechn\tGEW Technologies (PTY)Ltd\n00:60:A5\tPerforma\tPerformance Telecom Corp.\n00:60:A6\tParticle\tParticle Measuring Systems\n00:60:A7\tMicrosen\tMICROSENS GmbH & CO. KG\n00:60:A8\tTidomat\tTidomat Ab\n00:60:A9\tGesytecM\tGesytec Mbh\n00:60:AA\tIntellig\tINTELLIGENT DEVICES INC. (IDI)\n00:60:AB\tLarscom\tLarscom Incorporated\n00:60:AC\tResilien\tResilience Corporation\n00:60:AD\tMegachip\tMegaChips Corporation\n00:60:AE\tTrioInfo\tTrio Information Systems Ab\n00:60:AF\tPacificM\tPacific Micro Data, Inc.\n00:60:B0\tHP\t\n00:60:B1\tInput/Ou\tInput/Output, Inc.\n00:60:B2\tProcessC\tProcess Control Corp.\n00:60:B3\tZ-Com\tZ-COM, INC.\n00:60:B4\tGlenayre\tGLENAYRE R&D INC.\n00:60:B5\tKeba\tKEBA GmbH\n00:60:B6\tLandComp\tLand Computer Co., Ltd.\n00:60:B7\tChannelm\tChannelmatic, Inc.\n00:60:B8\tCorelis\tCORELIS Inc.\n00:60:B9\tNecPlatf\tNEC Platforms, Ltd\n00:60:BA\tSaharaNe\tSahara Networks, Inc.\n00:60:BB\tCabletro\tCabletron Systems, Inc.\n00:60:BC\tKeunyoun\tKeunYoung Electronics & Communication Co., Ltd.\n00:60:BD\tEnginuit\tEnginuity Communications\n00:60:BE\tWebtroni\tWebtronics\n00:60:BF\tMacraigo\tMacraigor Systems, Inc.\n00:60:C0\tNeraNetw\tNera Networks AS\n00:60:C1\tWavespan\tWaveSpan Corporation\n00:60:C2\tMpl\tMpl Ag\n00:60:C3\tNetvisio\tNetvision Corporation\n00:60:C4\tSolitonK\tSoliton Systems K.K.\n00:60:C5\tAncot\tAncot Corp.\n00:60:C6\tDcs\tDcs Ag\n00:60:C7\tAmatiCom\tAmati Communications Corp.\n00:60:C8\tKukaWeld\tKUKA WELDING SYSTEMS & ROBOTS\n00:60:C9\tControln\tControlNet, Inc.\n00:60:CA\tHarmonic\tHarmonic Systems Incorporated\n00:60:CB\tHitachiZ\tHitachi Zosen Corporation\n00:60:CC\tEmtrak\tEmtrak, Incorporated\n00:60:CD\tVideoser\tVideoServer, Inc.\n00:60:CE\tAcclaimC\tAcclaim Communications\n00:60:CF\tAlteonNe\tAlteon Networks, Inc.\n00:60:D0\tSnmpRese\tSnmp Research Incorporated\n00:60:D1\tCascadeC\tCascade Communications\n00:60:D2\tLucentTe\tLucent Technologies Taiwan Telecommunications Co., Ltd.\n00:60:D3\tAt&T\t\n00:60:D4\tEldatCom\tEldat Communication Ltd.\n00:60:D5\tAmadaMiy\tAMADA MIYACHI Co., Ltd\n00:60:D6\tNovatel\tNovAtel Inc.\n00:60:D7\tEcolePol\tECOLE POLYTECHNIQUE FEDERALE DE LAUSANNE (EPFL)\n00:60:D8\tElmic\tElmic Systems, Inc.\n00:60:D9\tTransysN\tTransys Networks Inc.\n00:60:DA\tRedLionC\tRed Lion Controls, LP\n00:60:DB\tNtpElekt\tNTP ELEKTRONIK A/S\n00:60:DC\tNecMagnu\tNEC Magnus Communications,Ltd.\n00:60:DD\tMyricom\tMyricom, Inc.\n00:60:DE\tKayser-T\tKayser-Threde GmbH\n00:60:DF\tBrocadeC\tBrocade Communications Systems, Inc.\n00:60:E0\tAxiomTec\tAxiom Technology Co., Ltd.\n00:60:E1\tOrckitCo\tOrckit Communications Ltd.\n00:60:E2\tQuestEng\tQUEST ENGINEERING & DEVELOPMENT\n00:60:E3\tArbinIns\tArbin Instruments\n00:60:E4\tCompuser\tCompuserve, Inc.\n00:60:E5\tFujiAuto\tFuji Automation Co., Ltd.\n00:60:E6\tShomiti\tShomiti Systems Incorporated\n00:60:E7\tRandata\t\n00:60:E8\tHitachiC\tHITACHI COMPUTER PRODUCTS (AMERICA), INC.\n00:60:E9\tAtopTech\tAtop Technologies, Inc.\n00:60:EA\tStreamlo\tStreamLogic\n00:60:EB\tFourthtr\tFourthtrack Systems\n00:60:EC\tHermaryO\tHermary Opto Electronics Inc.\n00:60:ED\tRicardoT\tRicardo Test Automation Ltd.\n00:60:EE\tApollo\t\n00:60:EF\tFlytechT\tFlytech Technology Co., Ltd.\n00:60:F0\tJohnsonJ\tJOHNSON & JOHNSON MEDICAL, INC\n00:60:F1\tExpCompu\tExp Computer, Inc.\n00:60:F2\tLasergra\tLasergraphics, Inc.\n00:60:F3\tPerforma\tPerformance Analysis Broadband, Spirent plc\n00:60:F4\tAdvanced\tADVANCED COMPUTER SOLUTIONS, Inc.\n00:60:F5\tIconWest\tIcon West, Inc.\n00:60:F6\tNextestC\tNextest Communications Products, Inc.\n00:60:F7\tDatafusi\tDatafusion Systems\n00:60:F8\tLoranInt\tLoran International Technologies Inc.\n00:60:F9\tDiamondL\tDiamond Lane Communications\n00:60:FA\tEducatio\tEducational Technology Resources, Inc.\n00:60:FB\tPacketee\tPacketeer, Inc.\n00:60:FC\tConserva\tConservation Through Innovation Ltd.\n00:60:FD\tNetics\tNetICs, Inc.\n00:60:FE\tLynxSyst\tLynx System Developers, Inc.\n00:60:FF\tQuvis\tQuVis, Inc.\n00:61:71\tApple\tApple, Inc.\n00:62:EC\tCisco\tCisco Systems, Inc\n00:64:40\tCisco\tCisco Systems, Inc\n00:64:A6\tMaquetCa\tMaquet CardioVascular\n00:66:4B\tHuaweiTe\tHuawei Technologies Co.,Ltd\n00:6B:8E\tShanghai\tShanghai Feixun Communication Co.,Ltd.\n00:6B:9E\tVizio\tVizio, Inc\n00:6B:A0\tShenzhen\tShenzhen Universal Intellisys Pte Ltd\n00:6B:F1\tCisco\tCisco Systems, Inc\n00:6C:BC\tCisco\tCisco Systems, Inc\n00:6C:FD\tSichuanC\tSichuan Changhong Electric Ltd.\n00:6D:52\tApple\tApple, Inc.\n00:6D:FB\tVutrixTe\tVutrix Technologies Ltd\n00:6F:64\tSamsungE\tSamsung Electronics Co.,Ltd\n00:70:B0\tM/A-ComC\tM/A-COM INC. COMPANIES\n00:70:B3\tDataReca\tData Recall Ltd.\n00:71:47\tAmazonTe\tAmazon Technologies Inc.\n00:71:C2\tPegatron\tPegatron Corporation\n00:71:CC\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n00:72:04\tSamsungE\tSamsung Electronics Co., Ltd. ARTIK\n00:72:63\tNetcoreT\tNetcore Technology Inc.\n00:72:78\tCisco\tCisco Systems, Inc\n00:73:8D\tShenzhen\tShenzhen TINNO Mobile Technology Corp.\n00:73:E0\tSamsungE\tSamsung Electronics Co.,Ltd\n00:74:9C\tRuijieNe\tRuijie Networks Co.,LTD\n00:75:32\tInidBv\tInid Bv\n00:75:E1\tAmptLlc\tAmpt, LLC\n00:76:86\tCisco\tCisco Systems, Inc\n00:76:B1\tSomfy-Pr\tSomfy-Protect By Myfox SAS\n00:78:88\tCisco\tCisco Systems, Inc\n00:78:9E\tSagemcom\tSagemcom Broadband SAS\n00:78:CD\tIgnition\tIgnition Design Labs\n00:7B:18\tSentry\tSENTRY Co., LTD.\n00:7C:2D\tSamsungE\tSamsung Electronics Co.,Ltd\n00:7D:FA\tVolkswag\tVolkswagen Group of America\n00:7E:56\tChinaDra\tChina Dragon Technology Limited\n00:7E:95\tCisco\tCisco Systems, Inc\n00:7F:28\tActionte\tActiontec Electronics, Inc\n00:80:00\tMultitec\tMultitech Systems Inc\n00:80:01\tPeriphon\tPeriphonics Corporation\n00:80:02\tSatelcom\tSATELCOM (UK) LTD\n00:80:03\tHytecEle\tHytec Electronics Ltd.\n00:80:04\tAntlowCo\tAntlow Computers, Ltd.\n00:80:05\tCactusCo\tCactus Computer Inc.\n00:80:06\tCompuadd\tCompuadd Corporation\n00:80:07\tDlogNc-S\tDlog NC-Systeme\n00:80:08\tDynatech\tDynatech Computer Systems\n00:80:09\tJupiterO\tJupiter Systems (older MX-600 series machines)\n00:80:0A\tJapanCom\tJapan Computer Corp.\n00:80:0B\tCsk\tCsk Corporation\n00:80:0C\tVidecom\tVidecom Limited\n00:80:0D\tVosswink\tVosswinkel FU\n00:80:0E\tAtlantix\tAtlantix Corporation\n00:80:0F\tSMC\t\n00:80:10\tCommodor\tCommodore\n00:80:11\tDigitalI\tDIGITAL SYSTEMS INT'L. INC.\n00:80:12\tImsImsFa\tIMS Corp.\n00:80:13\tThomasCo\tThomas Conrad Corp.\n00:80:14\tEsprit\tEsprit Systems\n00:80:15\tSeiko\t\n00:80:16\tWandelGo\tWandel & Goltermann\n00:80:17\tPfu\t\n00:80:18\tKobeStee\tKobe Steel, Ltd.\n00:80:19\tDaynaCom\tDayna Communications\n00:80:1A\tBellAtla\tBell Atlantic\n00:80:1B\tKodiakTe\tKodiak Technology\n00:80:1C\tCisco\t\n00:80:1D\tIntegrat\tIntegrated Inference Machines\n00:80:1E\tXinetron\tXinetron, Inc.\n00:80:1F\tKruppAtl\tKrupp Atlas Electronik Gmbh\n00:80:20\tNetworkP\tNetwork Products\n00:80:21\tAlcatelC\tAlcatel Canada Inc.\n00:80:22\tScan-Opt\tSCAN-OPTICS\n00:80:23\tIntegrat\tIntegrated Business Networks\n00:80:24\tKalpana\t\n00:80:25\tTelitWir\tTelit Wireless Solutions GmbH\n00:80:26\tNetworkP\tNetwork Products Corporation\n00:80:27\tAdaptive\tAdaptive Systems, Inc.\n00:80:28\tTradpost\tTRADPOST (HK) LTD\n00:80:29\tEagleTec\tEagle Technology, Inc.\n00:80:2A\tTestSimu\tTest Systems & Simulations Inc\n00:80:2B\tIntegrat\tIntegrated Marketing Co\n00:80:2C\tSageGrou\tThe Sage Group PLC\n00:80:2D\tXylogics\tXylogics, Inc.\n00:80:2E\tCastleRo\tCastle Rock Computing\n00:80:2F\tNational\tNational Instruments Corp.\n00:80:30\tNexusEle\tNexus Electronics\n00:80:31\tBasys\tBasys, Corp.\n00:80:32\tAccess\tAccess Co., Ltd.\n00:80:33\tEmsAviat\tEMS Aviation, Inc.\n00:80:34\tSmt-Goup\tSMT-Goupil\n00:80:35\tTechnolo\tTechnology Works\n00:80:36\tReflexMa\tReflex Manufacturing Systems\n00:80:37\tEricsson\tEricsson Business Comm.\n00:80:38\tDataRese\tData Research & Applications\n00:80:39\tAlcatelS\tAlcatel Stc Australia\n00:80:3A\tVaritype\tVarityper, Inc.\n00:80:3B\tAptCommu\tAPT Communications, Inc.\n00:80:3C\tTvsElect\tTvs Electronics Ltd\n00:80:3D\tSurigike\tSurigiken Co Ltd\n00:80:3E\tSynernet\tSynernetics\n00:80:3F\tTatung\tTatung Company\n00:80:40\tJohnFluk\tJohn Fluke Manufacturing Co.\n00:80:41\tVebKombi\tVeb Kombinat Robotron\n00:80:42\tForceCom\tForce Computers\n00:80:43\tNetworld\tNetworld Inc\n00:80:44\tSystechC\tSystech Computer Corp.\n00:80:45\tMatsushi\tMatsushita Electric Ind Co\n00:80:46\tTattileS\tTattile SRL\n00:80:47\tIn-Net\tIN-NET CORP.\n00:80:48\tCompexUs\tCompex, used by Commodore and DEC at least\n00:80:49\tNissinEl\tNissin Electric Co Ltd\n00:80:4A\tPro-Log\t\n00:80:4B\tEagleTec\tEagle Technologies Pty.Ltd.\n00:80:4C\tContec\t\n00:80:4D\tCycloneM\tCyclone Microsystems, Inc.\n00:80:4E\tApexComp\tApex Computer Company\n00:80:4F\tDaikinIn\tDaikin Industries, Ltd.\n00:80:50\tZiatech\tZiatech Corporation\n00:80:51\tAdcFiber\tADC Fibermux\n00:80:52\tTechnica\tTechnically Elite Concepts\n00:80:53\tIntellic\tIntellicom, Inc.\n00:80:54\tFrontier\tFrontier Technologies Corp.\n00:80:55\tFermilab\t\n00:80:56\tSphinxEl\tSPHINX Electronics GmbH & Co KG\n00:80:57\tAdsoft\t\n00:80:58\tPrinter\tPrinter Systems Corp.\n00:80:59\tStanleyE\tStanley Electric Co., Ltd\n00:80:5A\tTulipCom\tTulip Computers International BV\n00:80:5B\tCondor\t\n00:80:5C\tAgilis\t\n00:80:5D\tCanstar\t\n00:80:5E\tLsiLogic\tLsi Logic Corporation\n00:80:5F\tHewlettP\tHewlett Packard\n00:80:60\tNetworkI\tNetwork Interface Corporation\n00:80:61\tLitton\tLitton Systems, Inc.\n00:80:62\tInterfac\tInterface Co.\n00:80:63\tRichardH\tRichard Hirschmann Gmbh & Co\n00:80:64\tWyse\t\n00:80:65\tCybergra\tCybergraphic Systems Pty Ltd.\n00:80:66\tArcomCon\tArcom Control Systems, Ltd.\n00:80:67\tSquareD\t\n00:80:68\tYamatech\tYamatech Scientific Ltd.\n00:80:69\tComputon\tComputone Systems\n00:80:6A\tEriEmpac\tERI (Empac Research Inc.)\n00:80:6B\tSchmidTe\tSchmid Telecommunication\n00:80:6C\tCegelecP\tCegelec Projects Ltd\n00:80:6D\tCentury\t\n00:80:6E\tNipponSt\tNippon Steel Corporation\n00:80:6F\tOnelan\t\n00:80:70\tComputad\tComputadoras Micron\n00:80:71\tSaiTechn\tSAI Technology\n00:80:72\tMicrople\tMicroplex Systems Ltd\n00:80:73\tDwbAssoc\tDwb Associates\n00:80:74\tFisherCo\tFisher Controls\n00:80:75\tParsytec\tParsytec Gmbh\n00:80:76\tMcnc\t\n00:80:77\tBrotherI\tBrother industries, LTD.\n00:80:78\tPractica\tPractical Peripherals, Inc.\n00:80:79\tMicrobus\tMicrobus Designs Ltd\n00:80:7A\tAitech\tAitech Systems Ltd.\n00:80:7B\tArtelCom\tArtel Communications Corp.\n00:80:7C\tFibercom\t\n00:80:7D\tEquinox\t\n00:80:7E\tSouthern\tSouthern Pacific Ltd.\n00:80:7F\tDy-4\tDY-4 INCORPORATED\n00:80:80\tDatamedi\tDatamedia Corporation\n00:80:81\tKendallS\tKendall Square Research Corp.\n00:80:82\tPepModul\tPEP Modular Computers Gmbh\n00:80:83\tAmdahl\t\n00:80:84\tCloud\tThe Cloud Inc.\n00:80:85\tH-Three\tH-THREE SYSTEMS CORPORATION\n00:80:86\tComputer\tComputer Generation Inc.\n00:80:87\tOkidata\t\n00:80:88\tVictorOf\tVictor Company Of Japan, Ltd.\n00:80:89\tTecnetic\tTECNETICS (PTY) LTD.\n00:80:8A\tSummit\t\n00:80:8B\tDacoll\t\n00:80:8C\tNetscout\tNetscout Systems (formerly Frontier Software Development)\n00:80:8D\tWestcove\tWestcove Technology BV\n00:80:8E\tRadstone\tRadstone Technology\n00:80:8F\tCItohEle\tC. Itoh Electronics, Inc.\n00:80:90\tMicrotek\tMicrotek International Inc\n00:80:91\tTokyoEle\tTokyo Electric Co.,Ltd\n00:80:92\tSilexTec\tSilex Technology, Inc.\n00:80:93\tXyron\t\n00:80:94\tAlfaLava\tAlfa Laval Automation Ab\n00:80:95\tBasicMer\tBasic Merton Handelsges.M.B.H.\n00:80:96\tHDS\t\n00:80:97\tCentralp\tCentralp Automatismes\n00:80:98\tTdk\t\n00:80:99\tEatonInd\tEaton Industries GmbH\n00:80:9A\tNovusNet\tNovus Networks Ltd\n00:80:9B\tJustsyst\tJustsystem Corporation\n00:80:9C\tLuxcom\tLuxcom, Inc.\n00:80:9D\tCommscra\tCommscraft Ltd.\n00:80:9E\tDatus\tDatus Gmbh\n00:80:9F\tAlcatelB\tAlcatel Business Systems\n00:80:A0\tHewlettP\tHewlett Packard\n00:80:A1\tMicrotes\tMicrotest\n00:80:A2\tCreative\tCreative Electronic Systems\n00:80:A3\tLantroni\tLantronix\n00:80:A4\tLibertyE\tLiberty Electronics\n00:80:A5\tSpeedInt\tSpeed International\n00:80:A6\tRepublic\tRepublic Technology Inc\n00:80:A7\tHoneywel\tHoneywell International Inc\n00:80:A8\tVitacom\tVitacom Corporation\n00:80:A9\tClearpoi\tClearpoint Research\n00:80:AA\tMaxpeed\t\n00:80:AB\tDukaneNe\tDukane Network Integration\n00:80:AC\tImlogixD\tImlogix, Division Of Genesys\n00:80:AD\tCnetTech\tCnet Technology, Inc.\n00:80:AE\tHughesNe\tHughes Network Systems\n00:80:AF\tAllumer\t\n00:80:B0\tAdvanced\tAdvanced Information\n00:80:B1\tSoftcom\t\n00:80:B2\tNetNetwo\tNET (Network Equipment Technologies)\n00:80:B3\tAvalData\tAval Data Corporation\n00:80:B4\tSophia\tSophia Systems\n00:80:B5\tUnitedNe\tUnited Networks Inc.\n00:80:B6\tThemis\t\n00:80:B7\tStellarC\tStellar Computer\n00:80:B8\tDmgMoriB\tDmg Mori B.U.G. Co., Ltd.\n00:80:B9\tArcheTec\tArche Technoligies Inc.\n00:80:BA\tSpeciali\tSpecialix (Asia) Pte Ltd\n00:80:BB\tHughesLa\tHughes Lan Systems\n00:80:BC\tHitachiE\tHitachi Engineering Co., Ltd\n00:80:BD\tFurukawa\tThe Furukawa Electric Co., Ltd\n00:80:BE\tAriesRes\tAries Research\n00:80:BF\tTakaokaE\tTakaoka Electric Mfg. Co. Ltd.\n00:80:C0\tPenrilDa\tPenril Datability Networks\n00:80:C1\tLanex\tLanex Corporation\n00:80:C2\tIeee8021\tIEEE\n00:80:C3\tBiccInfo\tBICC INFORMATION SYSTEMS & SVC\n00:80:C4\tDocument\tDocument Technologies, Inc.\n00:80:C5\tNovellco\tNovellco De Mexico\n00:80:C6\tNational\tNational Datacomm Corporation\n00:80:C7\tXircom\t\n00:80:C8\tD-LinkAl\tD-Link\n00:80:C9\tAlbertaM\tAlberta Microelectronic Centre\n00:80:CA\tNetcomRe\tNetcom Research Incorporated\n00:80:CB\tFalcoDat\tFalco Data Products\n00:80:CC\tMicrowav\tMicrowave Bypass Systems\n00:80:CD\tMicronic\tMicronics Computer, Inc.\n00:80:CE\tBroadcas\tBroadcast Television Systems\n00:80:CF\tEmbedded\tEmbedded Performance Inc.\n00:80:D0\tComputer\tComputer Products International\n00:80:D1\tKimtron\tKimtron Corporation\n00:80:D2\tShinniho\tShinnihondenko Co., Ltd.\n00:80:D3\tShivaApp\tShiva\n00:80:D4\tChase\t\n00:80:D5\tCadreTec\tCadre Technologies\n00:80:D6\tNuvotech\tNuvotech, Inc.\n00:80:D7\tFantumEl\tFantum Electronics\n00:80:D8\tNetworkP\tNetwork Peripherals\n00:80:D9\tEmkElekt\tEMK Elektronik GmbH & Co. KG\n00:80:DA\tBruelKja\tBruel & Kjaer\n00:80:DB\tGraphon\tGraphon Corporation\n00:80:DC\tPickerIn\tPicker International\n00:80:DD\tGmxInc/G\tGMX INC/GIMIX\n00:80:DE\tGipsiSA\tGipsi S.A.\n00:80:DF\tAdcCoden\tAdc Codenoll Technology Corp.\n00:80:E0\tXtp\t\n00:80:E1\tStmicroe\tSTMicroelectronics SRL\n00:80:E2\tTDI\tT.D.I. Co., Ltd.\n00:80:E3\tCoral\t\n00:80:E4\tNorthwes\tNorthwest Digital Systems, Inc\n00:80:E5\tNetapp\t\n00:80:E6\tPeerNetw\tPeer Networks, Inc.\n00:80:E7\tLeonardo\tLeonardo Tactical Systems.\n00:80:E8\tCumulusC\tCumulus Corporatiion\n00:80:E9\tMadge\tMadge Ltd.\n00:80:EA\tAdvaOpti\tADVA Optical Networking Ltd.\n00:80:EB\tCompcont\tCompcontrol B.V.\n00:80:EC\tSupercom\tSupercomputing Solutions, Inc.\n00:80:ED\tIqTechno\tIq Technologies, Inc.\n00:80:EE\tThomsonC\tThomson Csf\n00:80:EF\tRational\t\n00:80:F0\tPanasoni\tPanasonic Communications Co., Ltd.\n00:80:F1\tOpus\t\n00:80:F2\tRaycom\tRaycom Systems Inc\n00:80:F3\tSunElect\tSun Electronics Corp\n00:80:F4\tTelemech\tTelemechanique Electrique\n00:80:F5\tQuantel\t\n00:80:F6\tSynergyM\tSynergy Microsystems\n00:80:F7\tZenithCo\tZenith Communications Products\n00:80:F8\tMizar\tMizar, Inc.\n00:80:F9\tHeurikon\tHeurikon Corporation\n00:80:FA\tRwt\tRwt Gmbh\n00:80:FB\tBvm\t\n00:80:FC\tAvatar\tAvatar Corporation\n00:80:FD\tExsceedC\tExsceed Corpration\n00:80:FE\tAzureTec\tAzure Technologies Inc\n00:80:FF\tSocDeTel\tSoc. De Teleinformatique Rtc\n00:81:C4\tCisco\tCisco Systems, Inc\n00:81:F9\tTexasIns\tTexas Instruments\n00:84:ED\tPrivate\t\n00:86:9C\tPaloAlto\tPalo Alto Networks\n00:86:A0\tPrivate\t\n00:87:01\tSamsungE\tSamsung Electronics Co.,Ltd\n00:87:31\tCisco\tCisco Systems, Inc\n00:88:65\tApple\tApple, Inc.\n00:8A:96\tCisco\tCisco Systems, Inc\n00:8B:43\tRftech\t\n00:8B:FC\tMixi\tmixi,Inc.\n00:8C:10\tBlackBox\tBlack Box Corp.\n00:8C:54\tAdbBroad\tADB Broadband Italia\n00:8C:FA\tInventec\tInventec Corporation\n00:8D:4E\tCjscNiiS\tCjsc Nii Stt\n00:8D:DA\tLinkOne\tLink One Co., Ltd.\n00:8E:73\tCisco\tCisco Systems, Inc\n00:8E:F2\tNetgear\t\n00:90:00\tDiamondM\tDiamond Multimedia\n00:90:01\tNishimuE\tNishimu Electronics Industries Co., Ltd.\n00:90:02\tAllgon\tAllgon Ab\n00:90:03\tAplio\t\n00:90:04\t3com\t\n00:90:05\tProtech\tProtech Systems Co., Ltd.\n00:90:06\tHamamats\tHamamatsu Photonics K.K.\n00:90:07\tDomexTec\tDomex Technology Corp.\n00:90:08\tHana\tHanA Systems Inc.\n00:90:09\tIControl\tI Controls, Inc.\n00:90:0A\tProtonEl\tProton Electronic Industrial Co., Ltd.\n00:90:0B\tLannerEl\tLanner Electronics, Inc.\n00:90:0C\tCisco\tCisco Systems, Inc\n00:90:0D\tOverland\tOverland Storage Inc.\n00:90:0E\tHandlink\tHandlink Technologies, Inc.\n00:90:0F\tKawasaki\tKawasaki Heavy Industries, Ltd\n00:90:10\tSimulati\tSimulation Laboratories, Inc.\n00:90:11\tWavtrace\tWAVTrace, Inc.\n00:90:12\tGlobespa\tGlobespan Semiconductor, Inc.\n00:90:13\tSamsan\tSamsan Corp.\n00:90:14\tRotorkIn\tRotork Instruments, Ltd.\n00:90:15\tCentigra\tCentigram Communications Corp.\n00:90:16\tZac\t\n00:90:17\tZypcom\tZypcom, Inc\n00:90:18\tItoElect\tIto Electric Industry Co, Ltd.\n00:90:19\tHermesEl\tHermes Electronics Co., Ltd.\n00:90:1A\tUnispher\tUnisphere Solutions\n00:90:1B\tDigitalC\tDigital Controls\n00:90:1C\tMpsSoftw\tmps Software Gmbh\n00:90:1D\tPecNz\tPEC (NZ) LTD.\n00:90:1E\tSelestaI\tSelesta Ingegneria S.p.A.\n00:90:1F\tAdtecPro\tAdtec Productions, Inc.\n00:90:20\tPhilipsA\tPHILIPS ANALYTICAL X-RAY B.V.\n00:90:21\tCisco\tCisco Systems, Inc\n00:90:22\tIvex\t\n00:90:23\tZilog\tZilog Inc.\n00:90:24\tPipelink\tPipelinks, Inc.\n00:90:25\tBaeAustr\tBAE Systems Australia (Electronic Systems) Pty Ltd\n00:90:26\tAdvanced\tAdvanced Switching Communications, Inc.\n00:90:27\tIntel\t\n00:90:28\tNipponSi\tNippon Signal Co., Ltd.\n00:90:29\tCrypto\tCrypto Ag\n00:90:2A\tCommunic\tCommunication Devices, Inc.\n00:90:2B\tCiscoEth\tCisco\n00:90:2C\tDataCont\tDATA & CONTROL EQUIPMENT LTD.\n00:90:2D\tDataElec\tDATA ELECTRONICS (AUST.) PTY, LTD.\n00:90:2E\tNamco\tNamco Limited\n00:90:2F\tNetcore\tNetcore Systems, Inc.\n00:90:30\tHoneywel\tHONEYWELL-DATING\n00:90:31\tMysticom\tMysticom, Ltd.\n00:90:32\tPelcombe\tPelcombe Group Ltd.\n00:90:33\tInnovaph\tInnovaphone Ag\n00:90:34\tImagic\tImagic, Inc.\n00:90:35\tAlphaTel\tAlpha Telecom, Inc.\n00:90:36\tEns\tens, inc.\n00:90:37\tAcucomm\tAcucomm, Inc.\n00:90:38\tFountain\tFountain Technologies, Inc.\n00:90:39\tShastaNe\tShasta Networks\n00:90:3A\tNihonMed\tNihon Media Tool Inc.\n00:90:3B\tTriemsRe\tTriEMS Research Lab, Inc.\n00:90:3C\tAtlantic\tAtlantic Network Systems\n00:90:3D\tBiopac\tBiopac Systems, Inc.\n00:90:3E\tNVPhilip\tN.V. Philips Industrial Activities\n00:90:3F\tAztecRad\tAztec Radiomedia\n00:90:40\tSiemensN\tSiemens Network Convergence LLC\n00:90:41\tAppliedD\tApplied Digital Access\n00:90:42\tEccs\tECCS, Inc.\n00:90:43\tTattileS\tTattile SRL\n00:90:44\tAssuredD\tAssured Digital, Inc.\n00:90:45\tMarconiC\tMarconi Communications\n00:90:46\tDexdyne\tDexdyne, Ltd.\n00:90:47\tGigaFast\tGiga Fast E. Ltd.\n00:90:48\tZeal\tZeal Corporation\n00:90:49\tEntridia\tEntridia Corporation\n00:90:4A\tConcurSy\tConcur System Technologies\n00:90:4B\tGemtekTe\tGemtek Technology Co., Ltd.\n00:90:4C\tEpigram\tEpigram, Inc.\n00:90:4D\tSpecSA\tSpec S.A.\n00:90:4E\tDelemBv\tDelem Bv\n00:90:4F\tAbbPower\tABB POWER T&D COMPANY, INC.\n00:90:50\tTeleste\tTeleste Corporation\n00:90:51\tUltimate\tUltimate Technology Corp.\n00:90:52\tSelcomEl\tSelcom Elettronica S.R.L.\n00:90:53\tDaewooEl\tDaewoo Electronics Co., Ltd.\n00:90:54\tInnovati\tInnovative Semiconductors, Inc\n00:90:55\tParkerHa\tParker Hannifin Corporation Compumotor Division\n00:90:56\tTelestre\tTelestream, Inc.\n00:90:57\tAanetcom\tAANetcom, Inc.\n00:90:58\tUltraEle\tUltra Electronics Command & Control Systems\n00:90:59\tTelecomD\tTelecom Device K.K.\n00:90:5A\tDearborn\tDearborn Group, Inc.\n00:90:5B\tRaymondA\tRaymond And Lae Engineering\n00:90:5C\tEdmi\t\n00:90:5D\tNetcomSi\tNetcom Sicherheitstechnik Gmbh\n00:90:5E\tRauland-\tRAULAND-BORG CORPORATION\n00:90:5F\tCisco\tCisco Systems, Inc\n00:90:60\tSystemCr\tSystem Create Corp.\n00:90:61\tPacificR\tPACIFIC RESEARCH & ENGINEERING CORPORATION\n00:90:62\tIcpVorte\tICP VORTEX COMPUTERSYSTEME GmbH\n00:90:63\tCoherent\tCoherent Communications Systems Corporation\n00:90:64\tThomson\tThomson Inc.\n00:90:65\tFinisar\tFinisar Corporation\n00:90:66\tTroikaNe\tTroika Networks, Inc.\n00:90:67\tWalkabou\tWalkAbout Computers, Inc.\n00:90:68\tDvt\tDvt Corp.\n00:90:69\tJuniperN\tJuniper Networks\n00:90:6A\tTurnston\tTurnstone Systems, Inc.\n00:90:6B\tAppliedR\tApplied Resources, Inc.\n00:90:6C\tSartoriu\tSartorius Hamburg GmbH\n00:90:6D\tCisco\tCisco Systems, Inc\n00:90:6E\tPraxon\tPraxon, Inc.\n00:90:6F\tCisco\tCisco Systems, Inc\n00:90:70\tNeoNetwo\tNeo Networks, Inc.\n00:90:71\tAppliedI\tApplied Innovation Inc.\n00:90:72\tSimradAs\tSimrad As\n00:90:73\tGaioTech\tGaio Technology\n00:90:74\tArgonNet\tArgon Networks, Inc.\n00:90:75\tNecDoBra\tNec Do Brasil S.A.\n00:90:76\tFmtAircr\tFmt Aircraft Gate Support Systems Ab\n00:90:77\tAdvanced\tAdvanced Fibre Communications\n00:90:78\tMerTelem\tMer Telemanagement Solutions, Ltd.\n00:90:79\tClearone\tClearOne, Inc.\n00:90:7A\tSpectral\tSpectralink, Inc\n00:90:7B\tE-Tech\tE-TECH, INC.\n00:90:7C\tDigitalc\tDigitalcast, Inc.\n00:90:7D\tLakeComm\tLake Communications\n00:90:7E\tVetronix\tVetronix Corp.\n00:90:7F\tWatchgua\tWatchGuard Technologies, Inc.\n00:90:80\tNot\tNot Limited, Inc.\n00:90:81\tAlohaNet\tAloha Networks, Inc.\n00:90:82\tForceIns\tForce Institute\n00:90:83\tTurboCom\tTurbo Communication, Inc.\n00:90:84\tAtechSys\tAtech System\n00:90:85\tGoldenEn\tGolden Enterprises, Inc.\n00:90:86\tCisco\t\n00:90:87\tItis\t\n00:90:88\tBaxallSe\tBaxall Security Ltd.\n00:90:89\tSoftcomM\tSoftcom Microsystems, Inc.\n00:90:8A\tBaylyCom\tBayly Communications, Inc.\n00:90:8B\tTattileS\tTattile SRL\n00:90:8C\tEtrendEl\tEtrend Electronics, Inc.\n00:90:8D\tVickersE\tVickers Electronics Systems\n00:90:8E\tNortelNe\tNortel Networks Broadband Access\n00:90:8F\tAudioCod\tAudio Codes Ltd.\n00:90:90\tI-Bus\t\n00:90:91\tDigitals\tDigitalScape, Inc.\n00:90:92\tCisco\t\n00:90:93\tEizo\tEIZO Corporation\n00:90:94\tOspreyTe\tOsprey Technologies, Inc.\n00:90:95\tUniversa\tUniversal Avionics\n00:90:96\tAskeyCom\tAskey Computer Corp\n00:90:97\tSycamore\tSycamore Networks\n00:90:98\tSbcDesig\tSbc Designs, Inc.\n00:90:99\tAlliedTe\tAllied Telesis, K.K.\n00:90:9A\tOneWorld\tOne World Systems, Inc.\n00:90:9B\tMarkem-I\tMARKEM-IMAJE\n00:90:9C\tArrisGro\tARRIS Group, Inc.\n00:90:9D\tNovatech\tNovaTech Process Solutions, LLC\n00:90:9E\tCritical\tCritical IO, LLC\n00:90:9F\tDigi-Dat\tDIGI-DATA CORPORATION\n00:90:A0\t8x8\t8X8 INC.\n00:90:A1\tFlyingPi\tFlying Pig Systems/High End Systems Inc.\n00:90:A2\tCybertan\tCyberTAN Technology Inc.\n00:90:A3\tCorecess\tCorecess Inc.\n00:90:A4\tAltigaNe\tAltiga Networks\n00:90:A5\tSpectraL\tSpectra Logic\n00:90:A6\tCisco\tCisco Systems, Inc\n00:90:A7\tClientec\tClientec Corporation\n00:90:A8\tNinetile\tNineTiles Networks, Ltd.\n00:90:A9\tWesternD\tWestern Digital\n00:90:AA\tIndigoAc\tIndigo Active Vision Systems Limited\n00:90:AB\tCisco\t\n00:90:AC\tOptivisi\tOptivision, Inc.\n00:90:AD\tAspectEl\tAspect Electronics, Inc.\n00:90:AE\tItaltelS\tITALTEL S.p.A/RF-UP-I\n00:90:AF\tJMoritaM\tJ. Morita Mfg. Corp.\n00:90:B0\tVadem\t\n00:90:B1\tCisco\t\n00:90:B2\tAvici\tAvici Systems Inc.\n00:90:B3\tAgranat\tAgranat Systems\n00:90:B4\tWillowbr\tWillowbrook Technologies\n00:90:B5\tNikon\tNikon Corporation\n00:90:B6\tFibex\tFibex Systems\n00:90:B7\tDigitalL\tDigital Lightwave, Inc.\n00:90:B8\tRohdeSch\tROHDE & SCHWARZ GMBH & CO. KG\n00:90:B9\tBeranIns\tBeran Instruments Ltd.\n00:90:BA\tValidNet\tValid Networks, Inc.\n00:90:BB\tTainetCo\tTAINET COMMUNICATION SYSTEM Corp.\n00:90:BC\tTelemann\tTelemann Co., Ltd.\n00:90:BD\tOmniaCom\tOmnia Communications, Inc.\n00:90:BE\tIbc/Inte\tIBC/INTEGRATED BUSINESS COMPUTERS\n00:90:BF\tCisco\tCisco Systems, Inc\n00:90:C0\tKJLawEng\tK.J. Law Engineers, Inc.\n00:90:C1\tPecoIi\tPeco II, Inc.\n00:90:C2\tJkMicros\tJK microsystems, Inc.\n00:90:C3\tTopicSem\tTopic Semiconductor Corp.\n00:90:C4\tJavelin\tJavelin Systems, Inc.\n00:90:C5\tInternet\tInternet Magic, Inc.\n00:90:C6\tOptim\tOptim Systems, Inc.\n00:90:C7\tIcom\tIcom Inc.\n00:90:C8\tWaveride\tWAVERIDER COMMUNICATIONS (CANADA) INC.\n00:90:C9\tDpacTech\tDPAC Technologies\n00:90:CA\tAccordVi\tAccord Video Telecommunications, Ltd.\n00:90:CB\tWireless\tWireless OnLine, Inc.\n00:90:CC\tPlanexCo\tPlanex Communications Inc.\n00:90:CD\tEnt-Empr\tENT-EMPRESA NACIONAL DE TELECOMMUNICACOES, S.A.\n00:90:CE\tAvateram\tavateramedical Mechatronics GmbH\n00:90:CF\tNortel\t\n00:90:D0\tThomsonT\tThomson Telecom Belgium\n00:90:D1\tLeichuEn\tLeichu Enterprise Co., Ltd.\n00:90:D2\tArtelVid\tArtel Video Systems\n00:90:D3\tGiesecke\tGIESECKE & DEVRIENT GmbH\n00:90:D4\tBindview\tBindView Development Corp.\n00:90:D5\tEuphonix\tEuphonix, Inc.\n00:90:D6\tCrystalG\tCrystal Group, Inc.\n00:90:D7\tNetboost\tNetBoost Corp.\n00:90:D8\tWhitecro\tWhitecross Systems\n00:90:D9\tCisco\tCisco Systems, Inc\n00:90:DA\tDynarc\tDynarc, Inc.\n00:90:DB\tNextLeve\tNext Level Communications\n00:90:DC\tTecoInfo\tTeco Information Systems\n00:90:DD\tMiharuCo\tMIHARU COMMUNICATIONS Inc\n00:90:DE\tCardkey\tCardkey Systems, Inc.\n00:90:DF\tMitsubis\tMitsubishi Chemical America, Inc.\n00:90:E0\tSystran\tSystran Corp.\n00:90:E1\tTelenaSP\tTelena S.P.A.\n00:90:E2\tDistribu\tDistributed Processing Technology\n00:90:E3\tAvexElec\tAvex Electronics Inc.\n00:90:E4\tNecAmeri\tNec America, Inc.\n00:90:E5\tTeknema\tTeknema, Inc.\n00:90:E6\tAli\tALi Corporation\n00:90:E7\tHorschEl\tHorsch Elektronik Ag\n00:90:E8\tMoxaTech\tMoxa Technologies Corp., Ltd.\n00:90:E9\tJanzComp\tJanz Computer Ag\n00:90:EA\tAlphaTec\tAlpha Technologies, Inc.\n00:90:EB\tSentryTe\tSentry Telecom Systems\n00:90:EC\tPyrescom\t\n00:90:ED\tCentralS\tCentral System Research Co., Ltd.\n00:90:EE\tPersonal\tPersonal Communications Technologies\n00:90:EF\tIntegrix\tIntegrix, Inc.\n00:90:F0\tHarmonic\tHarmonic Video Systems Ltd.\n00:90:F1\tSeagateC\tSeagate Cloud Systems Inc\n00:90:F2\tCiscoEth\tCisco\n00:90:F3\tAspectCo\tAspect Communications\n00:90:F4\tLightnin\tLightning Instrumentation\n00:90:F5\tClevo\tClevo Co.\n00:90:F6\tEscalate\tEscalate Networks, Inc.\n00:90:F7\tNbaseCom\tNbase Communications Ltd.\n00:90:F8\tMediatri\tMediatrix Telecom\n00:90:F9\tImagineC\tImagine Communications\n00:90:FA\tEmulex\tEmulex Corporation\n00:90:FB\tPortwell\tPortwell, Inc.\n00:90:FC\tNetworkC\tNetwork Computing Devices\n00:90:FD\tCopperco\tCopperCom, Inc.\n00:90:FE\tElecomLa\tELECOM CO., LTD.  (LANEED DIV.)\n00:90:FF\tTellusTe\tTellus Technology Inc.\n00:91:D6\tCrystalG\tCrystal Group, Inc.\n00:91:FA\tSynapseP\tSynapse Product Development\n00:92:FA\tShenzhen\tShenzhen Wisky Technology Co.,Ltd\n00:93:63\tUni-Link\tUni-Link Technology Co., Ltd.\n00:94:A1\tF5Networ\tF5 Networks, Inc.\n00:95:69\tLsdScien\tLSD Science and Technology Co.,Ltd.\n00:97:FF\tHeimannS\tHeimann Sensor GmbH\n00:9A:CD\tHuaweiTe\tHuawei Technologies Co.,Ltd\n00:9A:D2\tCisco\tCisco Systems, Inc\n00:9C:02\tHewlettP\tHewlett Packard\n00:9D:6B\tMurataMa\tMurata Manufacturing Co., Ltd.\n00:9D:8E\tCardiacR\tCardiac Recorders, Inc.\n00:9E:1E\tCisco\tCisco Systems, Inc\n00:9E:C8\tXiaomiCo\tXiaomi Communications Co Ltd\n00:A0:00\tCentilli\tCentillion Networks, Inc.\n00:A0:01\tDrsSigna\tDRS Signal Solutions\n00:A0:02\tLeedsNor\tLEEDS & NORTHRUP AUSTRALIA PTY LTD\n00:A0:03\tSiemensS\tSiemens Switzerland Ltd., I B T HVP\n00:A0:04\tNetpower\tNetpower, Inc.\n00:A0:05\tDanielIn\tDaniel Instruments, Ltd.\n00:A0:06\tImageDat\tImage Data Processing System Group\n00:A0:07\tApexxTec\tApexx Technology, Inc.\n00:A0:08\tNetcorp\t\n00:A0:09\tWhitetre\tWhitetree Network\n00:A0:0A\tAirspan\t\n00:A0:0B\tComputex\tComputex Co., Ltd.\n00:A0:0C\tKingmaxT\tKingmax Technology Inc.\n00:A0:0D\tPandaPro\tThe Panda Project\n00:A0:0E\tNetscout\tNetScout Systems, Inc.\n00:A0:0F\tBroadban\tBroadband Technologies\n00:A0:10\tSyslogic\tSyslogic Datentechnik Ag\n00:A0:11\tMutohInd\tMutoh Industries Ltd.\n00:A0:12\tTelco\tTelco Systems, Inc.\n00:A0:13\tTeltrend\tTeltrend Ltd.\n00:A0:14\tCsir\t\n00:A0:15\tWyle\t\n00:A0:16\tMicropol\tMicropolis Corp.\n00:A0:17\tJBM\tJ B M Corporation\n00:A0:18\tCreative\tCreative Controllers, Inc.\n00:A0:19\tNebulaCo\tNebula Consultants, Inc.\n00:A0:1A\tBinarEle\tBinar Elektronik Ab\n00:A0:1B\tPremisys\tPremisys Communications, Inc.\n00:A0:1C\tNascentN\tNascent Networks Corporation\n00:A0:1D\tRedLionC\tRed Lion Controls, LP\n00:A0:1E\tEst\tEst Corporation\n00:A0:1F\tTricord\tTricord Systems, Inc.\n00:A0:20\tCiticorp\tCITICORP/TTI\n00:A0:21\tGeneralD\tGeneral Dynamics Mission Systems\n00:A0:22\tCentreFo\tCentre For Development Of Advanced Computing\n00:A0:23\tAppliedC\tApplied Creative Technology, Inc.\n00:A0:24\t3com\t\n00:A0:25\tRedcomLa\tRedcom Labs Inc.\n00:A0:26\tTeldatSA\tTeldat, S.A.\n00:A0:27\tFirepowe\tFirepower Systems, Inc.\n00:A0:28\tConnerPe\tConner Peripherals\n00:A0:29\tCoulter\tCoulter Corporation\n00:A0:2A\tTrancell\tTrancell Systems\n00:A0:2B\tTransiti\tTransitions Research Corp.\n00:A0:2C\tInterwav\tinterWAVE Communications\n00:A0:2D\t1394Trad\t1394 Trade Association\n00:A0:2E\tBrandCom\tBrand Communications, Ltd.\n00:A0:2F\tAdbBroad\tADB Broadband Italia\n00:A0:30\tCaptorNv\tCAPTOR NV/SA\n00:A0:31\tHazeltin\tHAZELTINE CORPORATION, MS 1-17\n00:A0:32\tGesSinga\tGes Singapore Pte. Ltd.\n00:A0:33\tImcMebsy\timc MeBsysteme GmbH\n00:A0:34\tAxel\t\n00:A0:35\tCylink\tCylink Corporation\n00:A0:36\tAppliedN\tApplied Network Technology\n00:A0:37\tMindrayD\tMindray DS USA, Inc.\n00:A0:38\tEmailEle\tEmail Electronics\n00:A0:39\tRossTech\tRoss Technology, Inc.\n00:A0:3A\tKubotek\tKubotek Corporation\n00:A0:3B\tToshinEl\tToshin Electric Co., Ltd.\n00:A0:3C\tEg&GNucl\tEG&G NUCLEAR INSTRUMENTS\n00:A0:3D\tOpto-22\t\n00:A0:3E\tAtmForum\tAtm Forum\n00:A0:3F\tComputer\tCOMPUTER SOCIETY MICROPROCESSOR & MICROPROCESSOR STANDARDS C\n00:A0:40\tApplePci\tApple (PCI Mac)\n00:A0:41\tInficon\t\n00:A0:42\tSpurProd\tSpur Products Corp.\n00:A0:43\tAmerican\tAmerican Technology Labs, Inc.\n00:A0:44\tNttIt\tNtt It Co., Ltd.\n00:A0:45\tPhoenixC\tPHOENIX CONTACT Electronics GmbH\n00:A0:46\tScitex\tScitex Corp. Ltd.\n00:A0:47\tIntegrat\tIntegrated Fitness Corp.\n00:A0:48\tQuestech\tQuestech, Ltd.\n00:A0:49\tDigitech\tDigitech Industries, Inc.\n00:A0:4A\tNisshinE\tNisshin Electric Co., Ltd.\n00:A0:4B\tTflLan\tTfl Lan Inc.\n00:A0:4C\tInnovati\tINNOVATIVE SYSTEMS & TECHNOLOGIES, INC.\n00:A0:4D\tEdaInstr\tEda Instruments, Inc.\n00:A0:4E\tVoelkerT\tVoelker Technologies, Inc.\n00:A0:4F\tAmeritec\tAmeritec Corp.\n00:A0:50\tCypressS\tCypress Semiconductor\n00:A0:51\tAngiaCom\tAngia Communications. Inc.\n00:A0:52\tStanilit\tStanilite Electronics Pty. Ltd\n00:A0:53\tCompactD\tCompact Devices, Inc.\n00:A0:54\tPrivate\t\n00:A0:55\tDataDevi\tData Device Corporation\n00:A0:56\tMicropro\tMicropross\n00:A0:57\tLancom\tLANCOM Systems GmbH\n00:A0:58\tGlory\tGlory, Ltd.\n00:A0:59\tHamilton\tHamilton Hallmark\n00:A0:5A\tKofaxIma\tKofax Image Products\n00:A0:5B\tMarquip\tMarquip, Inc.\n00:A0:5C\tInventor\tINVENTORY CONVERSION, INC./\n00:A0:5D\tCsComput\tCS COMPUTER SYSTEME GmbH\n00:A0:5E\tMyriadLo\tMyriad Logic Inc.\n00:A0:5F\tBtgElect\tBTG Electronics Design BV\n00:A0:60\tAcerPeri\tAcer Peripherals, Inc.\n00:A0:61\tPuritanB\tPuritan Bennett\n00:A0:62\tAesProda\tAes Prodata\n00:A0:63\tJrl\tJrl Systems, Inc.\n00:A0:64\tKvb/Anal\tKVB/ANALECT\n00:A0:65\tSymantec\tSymantec Corporation\n00:A0:66\tIsa\tIsa Co., Ltd.\n00:A0:67\tNetworkS\tNetwork Services Group\n00:A0:68\tBhp\tBhp Limited\n00:A0:69\tSymmetri\tSymmetricom, Inc.\n00:A0:6A\tVerilink\tVerilink Corporation\n00:A0:6B\tDmsDorsc\tDms Dorsch Mikrosystem Gmbh\n00:A0:6C\tShindeng\tShindengen Electric Mfg. Co., Ltd.\n00:A0:6D\tMannesma\tMannesmann Tally Corporation\n00:A0:6E\tAustron\tAustron, Inc.\n00:A0:6F\tColorSen\tColor Sentinel Systems, LLC\n00:A0:70\tCoastcom\t\n00:A0:71\tVideoLot\tVideo Lottery Technologies,Inc\n00:A0:72\tOvation\tOvation Systems Ltd.\n00:A0:73\tCom21\t\n00:A0:74\tPercepti\tPerception Technology\n00:A0:75\tMicronTe\tMicron Technology, Inc.\n00:A0:76\tCardware\tCardware Lab, Inc.\n00:A0:77\tFujitsuN\tFujitsu Nexion, Inc.\n00:A0:78\tMarconiC\tMarconi Communications\n00:A0:79\tAlpsElec\tALPS ELECTRIC (USA), INC.\n00:A0:7A\tAdvanced\tAdvanced Peripherals Technologies, Inc.\n00:A0:7B\tDawnComp\tDawn Computer Incorporation\n00:A0:7C\tTonyangN\tTonyang Nylon Co., Ltd.\n00:A0:7D\tSeeqTech\tSeeq Technology, Inc.\n00:A0:7E\tAvidTech\tAvid Technology, Inc.\n00:A0:7F\tGsm-Synt\tGSM-SYNTEL, LTD.\n00:A0:80\tTattileS\tTattile SRL\n00:A0:81\tAlcatelD\tAlcatel Data Networks\n00:A0:82\tNktElekt\tNKT ELEKTRONIK A/S\n00:A0:83\tAsimmpho\tAsimmphony Turkey\n00:A0:84\tDataplex\tDataplex Pty Ltd\n00:A0:85\tPrivate\t\n00:A0:86\tAmberWav\tAmber Wave Systems, Inc.\n00:A0:87\tMicrosem\tMicrosemi Corporation\n00:A0:88\tEssentia\tEssential Communications\n00:A0:89\tXpointTe\tXpoint Technologies, Inc.\n00:A0:8A\tBrooktro\tBrooktrout Technology, Inc.\n00:A0:8B\tAstonEle\tAston Electronic Designs Ltd.\n00:A0:8C\tMultimed\tMultiMedia LANs, Inc.\n00:A0:8D\tJacomo\tJacomo Corporation\n00:A0:8E\tCheckPoi\tCheck Point Software Technologies\n00:A0:8F\tDesknet\tDesknet Systems, Inc.\n00:A0:90\tTimestep\tTimeStep Corporation\n00:A0:91\tApplicom\tApplicom International\n00:A0:92\tHBollman\tH. Bollmann Manufacturers, Ltd\n00:A0:93\tB/EAeros\tB/E AEROSPACE, Inc.\n00:A0:94\tComsat\tComsat Corporation\n00:A0:95\tAcaciaNe\tAcacia Networks, Inc.\n00:A0:96\tMitsumiE\tMitsumi Electric Co.,Ltd.\n00:A0:97\tJcInform\tJc Information Systems\n00:A0:98\tNetapp\t\n00:A0:99\tK-Net\tK-NET LTD.\n00:A0:9A\tNihonKoh\tNihon Kohden America\n00:A0:9B\tQpsxComm\tQpsx Communications, Ltd.\n00:A0:9C\tXyplex\tXyplex, Inc.\n00:A0:9D\tJohnatho\tJohnathon Freeman Technologies\n00:A0:9E\tIctv\t\n00:A0:9F\tCommvisi\tCommvision Corp.\n00:A0:A0\tCompactD\tCompact Data, Ltd.\n00:A0:A1\tEpicData\tEpic Data Inc.\n00:A0:A2\tDigicomS\tDigicom S.P.A.\n00:A0:A3\tReliable\tReliable Power Meters\n00:A0:A4\tOracle\tOracle Corporation\n00:A0:A5\tTeknorMi\tTeknor Microsysteme, Inc.\n00:A0:A6\tMIKK\tM.I. Systems, K.K.\n00:A0:A7\tVorax\tVorax Corporation\n00:A0:A8\tRenex\tRenex Corporation\n00:A0:A9\tNavtelCo\tNavtel Communications Inc.\n00:A0:AA\tSpacelab\tSpacelabs Medical\n00:A0:AB\tNetcsInf\tNetcs Informationstechnik Gmbh\n00:A0:AC\tGilatSat\tGilat Satellite Networks, Ltd.\n00:A0:AD\tMarconi\tMarconi Spa\n00:A0:AE\tNucom\tNucom Systems, Inc.\n00:A0:AF\tWmsIndus\tWms Industries\n00:A0:B0\tI-ODataD\tI-O DATA DEVICE, INC.\n00:A0:B1\tFirstVir\tFirst Virtual Corporation\n00:A0:B2\tShimaSei\tShima Seiki\n00:A0:B3\tZykronix\t\n00:A0:B4\tTexasMic\tTexas Microsystems, Inc.\n00:A0:B5\t3hTechno\t3H TECHNOLOGY\n00:A0:B6\tSanritzA\tSanritz Automation Co., Ltd.\n00:A0:B7\tCordant\tCordant, Inc.\n00:A0:B8\tNetapp\t\n00:A0:B9\tEagleTec\tEagle Technology, Inc.\n00:A0:BA\tPattonEl\tPatton Electronics Co.\n00:A0:BB\tHilan\tHilan Gmbh\n00:A0:BC\tViasat\tViasat, Incorporated\n00:A0:BD\tI-Tech\tI-TECH CORP.\n00:A0:BE\tIntegrat\tIntegrated Circuit Systems, Inc. Communications Group\n00:A0:BF\tWireless\tWireless Data Group Motorola\n00:A0:C0\tDigitalL\tDigital Link Corp.\n00:A0:C1\tOrtivusM\tOrtivus Medical Ab\n00:A0:C2\tRA\tR.A. Systems Co., Ltd.\n00:A0:C3\tUnicompu\tUnicomputer Gmbh\n00:A0:C4\tCristieE\tCristie Electronics Ltd.\n00:A0:C5\tZyxelCom\tZyxel Communications Corporation\n00:A0:C6\tQualcomm\tQualcomm Inc.\n00:A0:C7\tTadiranT\tTadiran Telecommunications\n00:A0:C8\tAdtran\t\n00:A0:C9\tIntelPro\tIntel (PRO100B and PRO100+)\n00:A0:CA\tFujitsuD\tFujitsu Denso Ltd.\n00:A0:CB\tArkTelec\tArk Telecommunications, Inc.\n00:A0:CC\tLite-OnU\tLite-On\n00:A0:CD\tDrJohann\tDR. JOHANNES HEIDENHAIN GmbH\n00:A0:CE\tEcessa\t\n00:A0:CF\tSotas\tSotas, Inc.\n00:A0:D0\tTenXTech\tTen X Technology, Inc.\n00:A0:D1\tInventec\tInventec Corporation\n00:A0:D2\tAlliedTe\tAllied Telesyn\n00:A0:D3\tInstemCo\tInstem Computer Systems, Ltd.\n00:A0:D4\tRadiolan\tRadiolan, Inc.\n00:A0:D5\tSierraWi\tSierra Wireless Inc\n00:A0:D6\tSbe\tSBE, Inc.\n00:A0:D7\tKastenCh\tKasten Chase Applied Research\n00:A0:D8\tSpectra-\tSPECTRA - TEK\n00:A0:D9\tConvexCo\tConvex Computer Corporation\n00:A0:DA\tIntegrat\tINTEGRATED SYSTEMS Technology, Inc.\n00:A0:DB\tFisherPa\tFISHER & PAYKEL PRODUCTION\n00:A0:DC\tONElectr\tO.N. Electronic Co., Ltd.\n00:A0:DD\tAzonix\tAzonix Corporation\n00:A0:DE\tYamaha\tYamaha Corporation\n00:A0:DF\tStsTechn\tSts Technologies, Inc.\n00:A0:E0\tTennyson\tTennyson Technologies Pty Ltd\n00:A0:E1\tWestport\tWestport Research Associates, Inc.\n00:A0:E2\tKeisokug\tKeisokugiken Corporation\n00:A0:E3\tXkl\tXkl Systems Corp.\n00:A0:E4\tOptiques\tOptiquest\n00:A0:E5\tNhcCommu\tNhc Communications\n00:A0:E6\tDialogic\tDialogic Corporation\n00:A0:E7\tCentralD\tCentral Data Corporation\n00:A0:E8\tReutersH\tReuters Holdings Plc\n00:A0:E9\tElectron\tElectronic Retailing Systems International\n00:A0:EA\tEthercom\tEthercom Corp.\n00:A0:EB\tEncoreNe\tEncore Networks, Inc.\n00:A0:EC\tTransmit\tTransmitton Ltd.\n00:A0:ED\tBrooksAu\tBrooks Automation, Inc.\n00:A0:EE\tNashobaN\tNashoba Networks\n00:A0:EF\tLucidata\tLucidata Ltd.\n00:A0:F0\tTorontoM\tToronto Microelectronics Inc.\n00:A0:F1\tMti\t\n00:A0:F2\tInfotekC\tInfotek Communications, Inc.\n00:A0:F3\tStaubli\t\n00:A0:F4\tGe\t\n00:A0:F5\tRadguard\tRadguard Ltd.\n00:A0:F6\tAutogas\tAutoGas Systems Inc.\n00:A0:F7\tVIComput\tV.I Computer Corp.\n00:A0:F8\tZebraTec\tZebra Technologies Inc\n00:A0:F9\tBintecCo\tBintec Communications Gmbh\n00:A0:FA\tMarconiC\tMarconi Communication GmbH\n00:A0:FB\tTorayEng\tToray Engineering Co., Ltd.\n00:A0:FC\tImageSci\tImage Sciences, Inc.\n00:A0:FD\tScitexDi\tScitex Digital Printing, Inc.\n00:A0:FE\tBostonTe\tBoston Technology, Inc.\n00:A0:FF\tTellabsO\tTellabs Operations, Inc.\n00:A1:DE\tShenzhen\tShenZhen ShiHua Technology CO.,LTD\n00:A2:89\tCisco\tCisco Systems, Inc\n00:A2:DA\tInat\tINAT GmbH\n00:A2:EE\tCisco\tCisco Systems, Inc\n00:A2:F5\tGuangzho\tGuangzhou Yuanyun Network Technology Co.,Ltd\n00:A2:FF\tAbatecGr\tabatec group AG\n00:A3:8E\tCisco\tCisco Systems, Inc\n00:A3:D1\tCisco\tCisco Systems, Inc\n00:A5:09\tWigwag\tWigWag Inc.\n00:A5:BF\tCisco\tCisco Systems, Inc\n00:A6:CA\tCisco\tCisco Systems, Inc\n00:A7:42\tCisco\tCisco Systems, Inc\n00:A7:84\tItxSecur\tITX security\n00:AA:00\tIntel\t\n00:AA:01\tIntel\tIntel Corporation\n00:AA:02\tIntel\tIntel Corporation\n00:AA:3C\tOlivetti\tOLIVETTI TELECOM SPA (OLTECO)\n00:AA:6E\tCisco\tCisco Systems, Inc\n00:AA:70\tLgElectr\tLG Electronics (Mobile Communications)\n00:AC:E0\tArrisGro\tARRIS Group, Inc.\n00:AD:24\tD-LinkIn\tD-Link International\n00:AE:CD\tPensando\tPensando Systems\n00:AE:FA\tMurataMa\tMurata Manufacturing Co., Ltd.\n00:AF:1F\tCisco\tCisco Systems, Inc\n00:B0:09\tGrassVal\tGrass Valley, A Belden Brand\n00:B0:17\tInfogear\tInfoGear Technology Corp.\n00:B0:19\tUtcCcs\tUtc Ccs\n00:B0:1C\tWestport\tWestport Technologies\n00:B0:1E\tRanticLa\tRantic Labs, Inc.\n00:B0:2A\tOrsys\tORSYS GmbH\n00:B0:2D\tViagateT\tViaGate Technologies, Inc.\n00:B0:33\tOaoIzhev\tOAO Izhevskiy radiozavod\n00:B0:3B\tHiqNetwo\tHiQ Networks\n00:B0:48\tMarconiC\tMarconi Communications Inc.\n00:B0:4A\tCisco\tCisco Systems, Inc\n00:B0:52\tAtherosC\tAtheros Communications\n00:B0:64\tCisco\tCisco Systems, Inc\n00:B0:69\tHonewell\tHonewell Oy\n00:B0:6D\tJonesFut\tJones Futurex Inc.\n00:B0:80\tMannesma\tMannesmann Ipulsys B.V.\n00:B0:86\tLocsoft\tLocSoft Limited\n00:B0:8E\tCisco\tCisco Systems, Inc\n00:B0:91\tTransmet\tTransmeta Corp.\n00:B0:94\tAlaris\tAlaris, Inc.\n00:B0:9A\tMorrowTe\tMorrow Technologies Corp.\n00:B0:9D\tPointGre\tPoint Grey Research Inc.\n00:B0:AC\tSiae-Mic\tSIAE-Microelettronica S.p.A.\n00:B0:AE\tSymmetri\tSymmetricom\n00:B0:B3\tXstreami\tXstreamis Plc\n00:B0:C2\tCisco\tCisco Systems, Inc\n00:B0:C7\tTellabsO\tTellabs Operations, Inc.\n00:B0:CE\tViverisT\tViveris Technologies\n00:B0:D0\tComputer\tComputer Products International\n00:B0:DB\tNextcell\tNextcell, Inc.\n00:B0:DF\tStarboar\tStarboard Storage Systems\n00:B0:E1\tCisco\tCisco Systems, Inc\n00:B0:E7\tBritishF\tBritish Federal Ltd.\n00:B0:EC\tEacem\t\n00:B0:EE\tAjile\tAjile Systems, Inc.\n00:B0:F0\tCalyNetw\tCaly Networks\n00:B0:F5\tNetworth\tNetWorth Technologies, Inc.\n00:B1:E3\tCisco\tCisco Systems, Inc\n00:B3:38\tKontronA\tKontron Asia Pacific Design Sdn. Bhd\n00:B3:42\tMacrosan\tMacroSAN Technologies Co., Ltd.\n00:B3:62\tApple\tApple, Inc.\n00:B4:F5\tDongguan\tDongGuan Siyoto Electronics Co., Ltd\n00:B5:6D\tDavidEle\tDavid Electronics Co., LTD.\n00:B5:D0\tSamsungE\tSamsung Electronics Co.,Ltd\n00:B5:D6\tOmnibit\tOmnibit Inc.\n00:B6:70\tCisco\tCisco Systems, Inc\n00:B6:9F\tLatch\t\n00:B7:71\tCisco\tCisco Systems, Inc\n00:B7:8D\tNanjingS\tNanjing Shining Electric Automation Co., Ltd\n00:B8:B3\tCisco\tCisco Systems, Inc\n00:B8:C2\tHeightsT\tHeights Telecom T ltd\n00:B9:F6\tShenzhen\tShenzhen Super Rich Electronics Co.,Ltd\n00:BA:C0\tBiometri\tBiometric Access Company\n00:BB:01\tOctothor\tOctothorpe Corp.\n00:BB:3A\tAmazonTe\tAmazon Technologies Inc.\n00:BB:60\tIntelCor\tIntel Corporate\n00:BB:8E\tHme\tHME Co., Ltd.\n00:BB:C1\tCanon\tCanon Inc.\n00:BB:F0\tUngerman\tUNGERMANN-BASS INC.\n00:BC:60\tCisco\tCisco Systems, Inc\n00:BD:27\tExar\tExar Corp.\n00:BD:3A\tNokia\tNokia Corporation\n00:BD:82\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\n00:BE:3B\tHuaweiTe\tHuawei Technologies Co.,Ltd\n00:BE:75\tCisco\tCisco Systems, Inc\n00:BE:9E\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n00:BF:15\tGenetec\tGenetec Inc.\n00:BF:61\tSamsungE\tSamsung Electronics Co.,Ltd\n00:BF:77\tCisco\tCisco Systems, Inc\n00:C0:00\tLanoptic\tLanoptics Ltd\n00:C0:01\tDiatekPa\tDiatek Patient Managment\n00:C0:02\tSercomm\t\n00:C0:03\tGlobalne\tGlobalnet Communications\n00:C0:04\tJapanBus\tJapan Business Computer Co.Ltd\n00:C0:05\tLivingst\tLivingston Enterprises Inc\n00:C0:06\tNipponAv\tNippon Avionics Co Ltd\n00:C0:07\tPinnacle\tPinnacle Data Systems Inc\n00:C0:08\tSecoSrl\t\n00:C0:09\tKtTechno\tKT Technology (s) Pte Inc\n00:C0:0A\tMicroCra\tMicro Craft\n00:C0:0B\tNorcontr\tNorcontrol A.S.\n00:C0:0C\tReliaTec\tRelia Technolgies\n00:C0:0D\tAdvanced\tAdvanced Logic Research Inc\n00:C0:0E\tPsitech\t\n00:C0:0F\tQnxSoftw\tQNX Software Systems Ltd.\n00:C0:10\tHirakawa\tHirakawa Hewtech Corp.\n00:C0:11\tInteract\tInteractive Computing Devices\n00:C0:12\tNetspan\t\n00:C0:13\tNetrix\t\n00:C0:14\tTelemati\tTelematics Calabasas\n00:C0:15\tNewMedia\tNew Media Corp\n00:C0:16\tElectron\tElectronic Theatre Controls\n00:C0:17\tNetscout\tNetScout Systems, Inc.\n00:C0:18\tLanart\t\n00:C0:19\tLeapTech\tLeap Technology, Inc.\n00:C0:1A\tCorometr\tCorometrics Medical Systems\n00:C0:1B\tSocketCo\tSocket Communications\n00:C0:1C\tInterlin\tInterlink Communications Ltd.\n00:C0:1D\tGrandJun\tGrand Junction Networks, Inc.\n00:C0:1E\tLaFranca\tLa Francaise Des Jeux\n00:C0:1F\tSERCEL\t\n00:C0:20\tArcoElec\tArco Electronic, Control Ltd.\n00:C0:21\tNetexpre\tNetexpress\n00:C0:22\tLasermas\tLasermaster Technologies, Inc.\n00:C0:23\tTutankha\tTutankhamon Electronics\n00:C0:24\tEdenSist\tEden Sistemas De Computacao SA\n00:C0:25\tDataprod\tDataproducts Corporation\n00:C0:26\tLansTech\tLans Technology Co., Ltd.\n00:C0:27\tCipher\t\n00:C0:28\tJasco\t\n00:C0:29\tNexansDe\tNexans Deutschland GmbH - ANS\n00:C0:2A\tOhkuraEl\tOhkura Electric Co\n00:C0:2B\tGerloffG\tGerloff Gesellschaft Fur\n00:C0:2C\tCentrumC\tCentrum Communications, Inc.\n00:C0:2D\tFujiPhot\tFuji Photo Film Co., Ltd.\n00:C0:2E\tNetwiz\t\n00:C0:2F\tOkuma\t\n00:C0:30\tIntegrat\tIntegrated Engineering B. V.\n00:C0:31\tDesignRe\tDesign Research Systems, Inc.\n00:C0:32\tI-Cubed\t\n00:C0:33\tTelebit\t\n00:C0:34\tTransact\tTransaction Network\n00:C0:35\tQuintar\t\n00:C0:36\tRaytechE\tRaytech Electronic Corp\n00:C0:37\tDynatem\t\n00:C0:38\tRasterIm\tRaster Image Processing System\n00:C0:39\tTeridian\tTeridian Semiconductor Corporation\n00:C0:3A\tMen-Mikr\tMEN-MIKRO ELEKTRONIK GMBH\n00:C0:3B\tMultiacc\tMultiaccess Computing Corp\n00:C0:3C\tTowerTec\tTower Tech S.R.L.\n00:C0:3D\tWieseman\tWiesemann & Theis Gmbh\n00:C0:3E\tFaGebrHe\tFa. Gebr. Heller Gmbh\n00:C0:3F\tStoresAu\tStores Automated Systems Inc\n00:C0:40\tEcci\t\n00:C0:41\tDigitalT\tDigital Transmission Systems\n00:C0:42\tDatalux\t\n00:C0:43\tStrataco\tStratacom\n00:C0:44\tEmcom\t\n00:C0:45\tIsolatio\tIsolation Systems Inc\n00:C0:46\tBlueChip\tBlue Chip Technology Ltd\n00:C0:47\tUnimicro\tUnimicro Systems Inc\n00:C0:48\tBayTechn\tBay Technical Associates\n00:C0:49\tUsRoboti\tUS Robotics Total Control (tm) NETServer Card\n00:C0:4A\tGroup200\tGROUP 2000 AG\n00:C0:4B\tCreative\tCreative Microsystems\n00:C0:4C\tDepartme\tDepartment Of Foreign Affairs\n00:C0:4D\tMitec\t\n00:C0:4E\tComtrol\t\n00:C0:4F\tDell\t\n00:C0:50\tToyoDenk\tToyo Denki Seizo K.K.\n00:C0:51\tAdvanced\tAdvanced Integration Research\n00:C0:52\tBurr-Bro\tBURR-BROWN\n00:C0:53\tAspectSo\tAspect Software Inc.\n00:C0:54\tNetworkP\tNetwork Peripherals, Ltd.\n00:C0:55\tModularC\tModular Computing Technologies\n00:C0:56\tSomelec\t\n00:C0:57\tMycoElec\tMyco Electronics\n00:C0:58\tDataexpe\tDataexpert Corp\n00:C0:59\tDenso\tDenso Corporation\n00:C0:5A\tSemaphor\tSemaphore Communications Corp.\n00:C0:5B\tNetworks\tNetworks Northwest Inc\n00:C0:5C\tElonex\t\n00:C0:5D\tL&NTechn\tL&N Technologies\n00:C0:5E\tVari-Lit\tVari-Lite Inc\n00:C0:5F\tFine-Pal\tFINE-PAL COMPANY LIMITED\n00:C0:60\tIdScandi\tID Scandinavia A/S\n00:C0:61\tSolectek\tSolectek Corporation\n00:C0:62\tImpulseT\tImpulse Technology\n00:C0:63\tMorningS\tMorning Star Technologies Inc\n00:C0:64\tGeneralD\tGeneral Datacomm Ind Inc\n00:C0:65\tScopeCom\tScope Communications Inc\n00:C0:66\tDocupoin\tDocupoint, Inc.\n00:C0:67\tUnitedBa\tUnited Barcode Industries\n00:C0:68\tHmeClear\tHME Clear-Com LTD.\n00:C0:69\tAxxceler\tAxxcelera Broadband Wireless\n00:C0:6A\tZahner-E\tZahner-Elektrik Gmbh & Co KG\n00:C0:6B\tOsiPlus\t\n00:C0:6C\tSvecComp\tSVEC Computer Corp\n00:C0:6D\tBocaRese\tBoca Research, Inc.\n00:C0:6E\tHaftTech\tHaft Technology, Inc.\n00:C0:6F\tKomatsu\t\n00:C0:70\tSectraSe\tSectra Secure-Transmission AB\n00:C0:71\tAreanexC\tAreanex Communications, Inc.\n00:C0:72\tKnx\t\n00:C0:73\tXedia\t\n00:C0:74\tToyodaAu\tToyoda Automatic Loom Works Ltd\n00:C0:75\tXanteCor\tXante Corporation\n00:C0:76\tI-DataIn\tI-Data International A-S\n00:C0:77\tDaewooTe\tDaewoo Telecom Ltd\n00:C0:78\tComputer\tComputer Systems Engineering\n00:C0:79\tFonsys\t\n00:C0:7A\tPrivaBv\t\n00:C0:7B\tAscendCo\tAscend Communications\n00:C0:7C\tHightech\tHightech Information\n00:C0:7D\tRiscDeve\tRISC Developments Ltd\n00:C0:7E\tKubotaEl\tKubota Corporation Electronic\n00:C0:7F\tNuponCom\tNupon Computing Corp\n00:C0:80\tNetstar\t\n00:C0:81\tMetrodat\tMetrodata Ltd\n00:C0:82\tMoorePro\tMoore Products Co\n00:C0:83\tTraceMou\tTrace Mountain Products, Inc.\n00:C0:84\tDataLink\tData Link Corp Ltd\n00:C0:85\tCanon\t\n00:C0:86\tLynk\t\n00:C0:87\tUunetTec\tUUNET Technologies Inc\n00:C0:88\tEkfElekt\tEkf Elektronik Gmbh\n00:C0:89\tTelindus\tTelindus Distribution\n00:C0:8A\tLauterba\tLauterbach GmbH\n00:C0:8B\tRisqModu\tRISQ Modular Systems Inc\n00:C0:8C\tPerforma\tPerformance Technologies Inc\n00:C0:8D\tTronixPr\tTronix Product Development\n00:C0:8E\tNetworkI\tNetwork Information Technology\n00:C0:8F\tPanasoni\tPanasonic Electric Works Co., Ltd.\n00:C0:90\tPraimSRL\tPraim S.R.L.\n00:C0:91\tJabilCir\tJabil Circuit, Inc.\n00:C0:92\tMennenMe\tMennen Medical Inc\n00:C0:93\tAltaRese\tAlta Research Corp.\n00:C0:94\tVmx\tVmx Inc.\n00:C0:95\tZnyxNetw\tZnyx (Network Appliance); Jupiter Systems (MX-700); Apple (G3)  all seen\n00:C0:96\tTamura\t\n00:C0:97\tArchipel\tArchipel SA\n00:C0:98\tChuntexE\tChuntex Electronic Co., Ltd.\n00:C0:99\tYoshikiI\tYoshiki Industrial Co.,Ltd.\n00:C0:9A\tPhotonic\tPhotonics Corporation\n00:C0:9B\tReliance\tReliance Comm/Tec, R-Tec Systems Inc\n00:C0:9C\tHiokiEE\tHioki E.E. Corporation\n00:C0:9D\tDistribu\tDistributed Systems Int'l, Inc.\n00:C0:9E\tCacheCom\tCache Computers, Inc.\n00:C0:9F\tQuantaCo\tQuanta Computer Inc\n00:C0:A0\tAdvanceM\tAdvance Micro Research, Inc.\n00:C0:A1\tTokyoDen\tTokyo Denshi Sekei Co\n00:C0:A2\tIntermed\tIntermedium A/S\n00:C0:A3\tDualEnte\tDual Enterprises Corporation\n00:C0:A4\tUnigrafO\tUnigraf OY\n00:C0:A5\tDickensD\tDickens Data Systems\n00:C0:A6\tExicomAu\tExicom Australia Pty. Ltd\n00:C0:A7\tSeel\t\n00:C0:A8\tGvc\t\n00:C0:A9\tBarronMc\tBarron McCann Ltd\n00:C0:AA\tSiliconV\tSilicon Valley Computer\n00:C0:AB\tTelco\tTelco Systems, Inc.\n00:C0:AC\tGambitCo\tGambit Computer Communications\n00:C0:AD\tMarbenCo\tMarben Communication Systems\n00:C0:AE\tTowercom\tTowercom Co Inc DBA PC House\n00:C0:AF\tTeklogix\tTeklogix Inc.\n00:C0:B0\tGccTechn\tGCC Technologies,Inc.\n00:C0:B1\tGeniusNe\tGenius Net Co.\n00:C0:B2\tNorand\t\n00:C0:B3\tComstatD\tComstat Datacomm Corporation\n00:C0:B4\tMysonTec\tMyson Technology Inc\n00:C0:B5\tCorporat\tCorporate Network Systems Inc\n00:C0:B6\tOverland\tOverland Storage, Inc.\n00:C0:B7\tAmerican\tAmerican Power Conversion Corp\n00:C0:B8\tFraserSH\tFraser's Hill Ltd.\n00:C0:B9\tFunkSoft\tFunk Software Inc\n00:C0:BA\tNetvanta\tNetvantage\n00:C0:BB\tForvalCr\tForval Creative Inc\n00:C0:BC\tTelecomA\tTELECOM AUSTRALIA/CSSC\n00:C0:BD\tInexTech\tInex Technologies, Inc.\n00:C0:BE\tAlcatel-\tAlcatel - Sel\n00:C0:BF\tTechnolo\tTechnology Concepts Ltd\n00:C0:C0\tShoreMic\tShore Microsystems Inc\n00:C0:C1\tQuad/Gra\tQuad/Graphics Inc\n00:C0:C2\tInfinite\tInfinite Networks Ltd.\n00:C0:C3\tAcusonCo\tAcuson Computed Sonography\n00:C0:C4\tComputer\tComputer Operational\n00:C0:C5\tSidInfor\tSID Informatica\n00:C0:C6\tPersonal\tPersonal Media Corp\n00:C0:C7\tSparktru\tSparktrum Microsystems, Inc.\n00:C0:C8\tMicroByt\tMicro Byte Pty Ltd\n00:C0:C9\tBaileyCo\tBailey Controls Co\n00:C0:CA\tAlfa\t\n00:C0:CB\tControlT\tControl Technology Corporation\n00:C0:CC\tTelescie\tTelesciences Co Systems, Inc.\n00:C0:CD\tComeltaS\tComelta S.A.\n00:C0:CE\tCeiEngin\tCEI SYSTEMS & ENGINEERING PTE\n00:C0:CF\tImatranV\tImatran Voima Oy\n00:C0:D0\tRatocSys\tRatoc System Inc\n00:C0:D1\tComtreeT\tComtree Technology Corporation (EFA also reported)\n00:C0:D2\tSyntelle\tSyntellect Inc\n00:C0:D3\tOlympusI\tOlympus Image Systems, Inc.\n00:C0:D4\tAxonNetw\tAxon Networks Inc\n00:C0:D5\tQuancomE\tQuancom Electronic Gmbh\n00:C0:D6\tJ1\t\n00:C0:D7\tTaiwanTr\tTaiwan Trading Center Dba\n00:C0:D8\tUniversa\tUniversal Data Systems\n00:C0:D9\tQuinteNe\tQuinte Network Confidentiality Equipment Inc\n00:C0:DA\tNice\tNice Systems Ltd.\n00:C0:DB\tIpcPte\t\n00:C0:DC\tEosTechn\tEOS Technologies, Inc.\n00:C0:DD\tQlogic\tQLogic Corporation\n00:C0:DE\tZcomm\t\n00:C0:DF\tKye\t\n00:C0:E0\tDscCommu\tDsc Communication Corp.\n00:C0:E1\tSonicSol\tSonic Solutions\n00:C0:E2\tCalcomp\t\n00:C0:E3\tOsitechC\tOsitech Communications Inc\n00:C0:E4\tSiemensB\tSiemens Building\n00:C0:E5\tGespacSA\tGESPAC S.A.\n00:C0:E6\tVerilink\tVerilink Corporation\n00:C0:E7\tFiberdat\tFiberdata AB\n00:C0:E8\tPlexcom\t\n00:C0:E9\tOakSolut\tOak Solutions Ltd\n00:C0:EA\tArrayTec\tArray Technology Ltd.\n00:C0:EB\tSehCompu\tSeh Computertechnik Gmbh\n00:C0:EC\tDauphinT\tDauphin Technology\n00:C0:ED\tUsArmyEl\tUS Army Electronic Proving Ground\n00:C0:EE\tKyocera\t\n00:C0:EF\tAbit\t\n00:C0:F0\tKingston\tKingston Technology Corporation\n00:C0:F1\tShinkoEl\tShinko Electric Co Ltd\n00:C0:F2\tTransiti\tTransition Engineering Inc\n00:C0:F3\tNetworkC\tNetwork Communications Corp\n00:C0:F4\tInterlin\tInterlink System Co., Ltd.\n00:C0:F5\tMetacomp\tMetacomp Inc\n00:C0:F6\tCelanTec\tCelan Technology Inc.\n00:C0:F7\tEngageCo\tEngage Communication, Inc.\n00:C0:F8\tAboutCom\tAbout Computing Inc.\n00:C0:F9\tArtesynE\tArtesyn Embedded Technologies\n00:C0:FA\tCanaryCo\tCanary Communications Inc\n00:C0:FB\tAdvanced\tAdvanced Technology Labs\n00:C0:FC\tAsdg\t\n00:C0:FD\tProsum\t\n00:C0:FE\tAptecCom\tAptec Computer Systems, Inc.\n00:C0:FF\tSeagateC\tSeagate Cloud Systems Inc\n00:C1:4F\tDdl\tDDL Co,.ltd.\n00:C1:64\tCisco\tCisco Systems, Inc\n00:C1:B1\tCisco\tCisco Systems, Inc\n00:C2:C6\tIntelCor\tIntel Corporate\n00:C3:F4\tSamsungE\tSamsung Electronics Co.,Ltd\n00:C5:DB\tDatatech\tDatatech Sistemas Digitales Avanzados SL\n00:C6:10\tApple\tApple, Inc.\n00:C8:8B\tCisco\tCisco Systems, Inc\n00:CA:E5\tCisco\tCisco Systems, Inc\n00:CB:00\tPrivate\t\n00:CB:B4\tShenzhen\tShenzhen Ateko Photoelectricity Co.,Ltd\n00:CB:BD\tCambridg\tCambridge Broadband Networks Ltd.\n00:CC:3F\tUniversa\tUniversal Electronics, Inc.\n00:CC:FC\tCisco\tCisco Systems, Inc\n00:CD:90\tMasElekt\tMAS Elektronik AG\n00:CD:FE\tApple\tApple, Inc.\n00:CF:1C\tCommunic\tCommunication Machinery Corporation\n00:CF:C0\tChinaMob\tChina Mobile Group Device Co.,Ltd.\n00:D0:00\tFerranSc\tFerran Scientific, Inc.\n00:D0:01\tVstTechn\tVst Technologies, Inc.\n00:D0:02\tDitech\tDitech Corporation\n00:D0:03\tComdaEnt\tComda Enterprises Corp.\n00:D0:04\tPentacom\tPentacom Ltd.\n00:D0:05\tZhsZeitm\tZhs Zeitmanagementsysteme\n00:D0:06\tCisco\tCisco Systems, Inc\n00:D0:07\tMicAssoc\tMic Associates, Inc.\n00:D0:08\tMactell\tMactell Corporation\n00:D0:09\tHsingTec\tHsing Tech. Enterprise Co. Ltd\n00:D0:0A\tLanacces\tLanaccess Telecom S.A.\n00:D0:0B\tRhkTechn\tRhk Technology, Inc.\n00:D0:0C\tSnijderM\tSnijder Micro Systems\n00:D0:0D\tMicromer\tMicromeritics Instrument\n00:D0:0E\tPluris\tPluris, Inc.\n00:D0:0F\tSpeechDe\tSpeech Design Gmbh\n00:D0:10\tConverge\tConvergent Networks, Inc.\n00:D0:11\tPrismVid\tPrism Video, Inc.\n00:D0:12\tGatework\tGateworks Corp.\n00:D0:13\tPrimexAe\tPrimex Aerospace Company\n00:D0:14\tRoot\tRoot, Inc.\n00:D0:15\tUnivexMi\tUnivex Microtechnology Corp.\n00:D0:16\tScmMicro\tScm Microsystems, Inc.\n00:D0:17\tSyntechI\tSyntech Information Co., Ltd.\n00:D0:18\tQwesCom\tQwes. Com, Inc.\n00:D0:19\tDainippo\tDainippon Screen Corporate\n00:D0:1A\tUrmetTlc\tUrmet Tlc S.P.A.\n00:D0:1B\tMimakiEn\tMimaki Engineering Co., Ltd.\n00:D0:1C\tSbsTechn\tSbs Technologies,\n00:D0:1D\tFurunoEl\tFuruno Electric Co., Ltd.\n00:D0:1E\tPingtel\tPingtel Corp.\n00:D0:1F\tSenetas\tSenetas Corporation Ltd\n00:D0:20\tAimSyste\tAim System, Inc.\n00:D0:21\tRegentEl\tRegent Electronics Corp.\n00:D0:22\tIncredib\tIncredible Technologies, Inc.\n00:D0:23\tInfortre\tInfortrend Technology, Inc.\n00:D0:24\tCognex\tCognex Corporation\n00:D0:25\tXrosstec\tXrosstech, Inc.\n00:D0:26\tHirschma\tHirschmann Austria Gmbh\n00:D0:27\tAppliedA\tApplied Automation, Inc.\n00:D0:28\tHarmonic\tHarmonic, Inc\n00:D0:29\tWakefern\tWakefern Food Corporation\n00:D0:2A\tVoxent\tVoxent Systems Ltd.\n00:D0:2B\tJetcell\tJetcell, Inc.\n00:D0:2C\tCampbell\tCampbell Scientific, Inc.\n00:D0:2D\tResideo\t\n00:D0:2E\tCommunic\tCommunication Automation Corp.\n00:D0:2F\tVlsiTech\tVlsi Technology Inc.\n00:D0:30\tSafetran\tSafetran Systems Corp\n00:D0:31\tIndustri\tIndustrial Logic Corporation\n00:D0:32\tYanoElec\tYano Electric Co., Ltd.\n00:D0:33\tDalianDa\tDalian Daxian Network\n00:D0:34\tOrmec\tOrmec Systems Corp.\n00:D0:35\tBehavior\tBehavior Tech. Computer Corp.\n00:D0:36\tTechnolo\tTechnology Atlanta Corp.\n00:D0:37\tArrisGro\tARRIS Group, Inc.\n00:D0:38\tFivemere\tFivemere, Ltd.\n00:D0:39\tUtilicom\tUtilicom, Inc.\n00:D0:3A\tZoneworx\tZoneworx, Inc.\n00:D0:3B\tVisionPr\tVision Products Pty. Ltd.\n00:D0:3C\tVieo\tVieo, Inc.\n00:D0:3D\tGalileoT\tGalileo Technology, Ltd.\n00:D0:3E\tRocketch\tRocketchips, Inc.\n00:D0:3F\tAmerican\tAmerican Communication\n00:D0:40\tSysmate\tSysmate Co., Ltd.\n00:D0:41\tAmigoTec\tAmigo Technology Co., Ltd.\n00:D0:42\tMahloUg\tMAHLO GMBH & CO. UG\n00:D0:43\tZonalRet\tZonal Retail Data Systems\n00:D0:44\tAlidianN\tAlidian Networks, Inc.\n00:D0:45\tKvaser\tKvaser Ab\n00:D0:46\tDolbyLab\tDolby Laboratories, Inc.\n00:D0:47\tXnTechno\tXn Technologies\n00:D0:48\tEcton\tEcton, Inc.\n00:D0:49\tImpresst\tImpresstek Co., Ltd.\n00:D0:4A\tPresence\tPresence Technology Gmbh\n00:D0:4B\tLaCieGro\tLa Cie Group S.A.\n00:D0:4C\tEurotelT\tEurotel Telecom Ltd.\n00:D0:4D\tDivOfRes\tDIV OF RESEARCH & STATISTICS\n00:D0:4E\tLogibag\t\n00:D0:4F\tBitronic\tBitronics, Inc.\n00:D0:50\tIskratel\t\n00:D0:51\tO2Micro\tO2 MICRO, INC.\n00:D0:52\tAscendCo\tAscend Communications, Inc.\n00:D0:53\tConnecte\tConnected Systems\n00:D0:54\tSasInsti\tSas Institute Inc.\n00:D0:55\tKathrein\tKATHREIN-WERKE KG\n00:D0:56\tSomat\tSomat Corporation\n00:D0:57\tUltrak\tUltrak, Inc.\n00:D0:58\tCisco\tCisco Systems, Inc\n00:D0:59\tAmbitMic\tAmbit Microsystems Corp.\n00:D0:5A\tSymbioni\tSymbionics, Ltd.\n00:D0:5B\tAcroloop\tAcroloop Motion Control\n00:D0:5C\tKathrein\tKATHREIN TechnoTrend GmbH\n00:D0:5D\tIntelliw\tIntelliworxx, Inc.\n00:D0:5E\tStratabe\tStratabeam Technology, Inc.\n00:D0:5F\tValcom\tValcom, Inc.\n00:D0:60\tPanasoni\tPanasonic Europe Ltd.\n00:D0:61\tTremonEn\tTremon Enterprises Co., Ltd.\n00:D0:62\tDigigram\t\n00:D0:63\tCisco\tCisco Systems, Inc\n00:D0:64\tMultitel\t\n00:D0:65\tTokoElec\tToko Electric\n00:D0:66\tWintriss\tWintriss Engineering Corp.\n00:D0:67\tCampioCo\tCampio Communications\n00:D0:68\tIwill\tIwill Corporation\n00:D0:69\tTechnolo\tTechnologic Systems\n00:D0:6A\tLinkup\tLinkup Systems Corporation\n00:D0:6B\tSrTeleco\tSr Telecom Inc.\n00:D0:6C\tSharewav\tSharewave, Inc.\n00:D0:6D\tAcrison\tAcrison, Inc.\n00:D0:6E\tTrendvie\tTrendview Recorders Ltd.\n00:D0:6F\tKmcContr\tKmc Controls\n00:D0:70\tLongWell\tLong Well Electronics Corp.\n00:D0:71\tEchelon\tEchelon Corp.\n00:D0:72\tBroadlog\tBroadlogic\n00:D0:73\tAcnAdvan\tAcn Advanced Communications\n00:D0:74\tTaqua\tTaqua Systems, Inc.\n00:D0:75\tAlarisMe\tAlaris Medical Systems, Inc.\n00:D0:76\tBankOfAm\tBank of America\n00:D0:77\tLucentTe\tLucent Technologies\n00:D0:78\tEltexOfS\tEltex of Sweden AB\n00:D0:79\tCisco\tCisco Systems, Inc\n00:D0:7A\tAmaquest\tAmaquest Computer Corp.\n00:D0:7B\tComcamIn\tComcam International Inc\n00:D0:7C\tKoyoElec\tKoyo Electronics Inc. Co.,Ltd.\n00:D0:7D\tCosineCo\tCosine Communications\n00:D0:7E\tKeycorp\tKeycorp Ltd.\n00:D0:7F\tStrategy\tSTRATEGY & TECHNOLOGY, LIMITED\n00:D0:80\tExabyte\tExabyte Corporation\n00:D0:81\tRtdEmbed\tRTD Embedded Technologies, Inc.\n00:D0:82\tIowave\tIowave Inc.\n00:D0:83\tInvertex\tInvertex, Inc.\n00:D0:84\tNexcomm\tNexcomm Systems, Inc.\n00:D0:85\tOtisElev\tOtis Elevator Company\n00:D0:86\tFoveon\tFoveon, Inc.\n00:D0:87\tMicrofir\tMicrofirst Inc.\n00:D0:88\tArrisGro\tARRIS Group, Inc.\n00:D0:89\tDynacolo\tDynacolor, Inc.\n00:D0:8A\tPhotronU\tPhotron Usa\n00:D0:8B\tAdvaOpti\tADVA Optical Networking Ltd.\n00:D0:8C\tGenoaTec\tGenoa Technology, Inc.\n00:D0:8D\tPhoenixG\tPhoenix Group, Inc.\n00:D0:8E\tGrassVal\tGrass Valley, A Belden Brand\n00:D0:8F\tArdentTe\tArdent Technologies, Inc.\n00:D0:90\tCisco\tCisco Systems, Inc\n00:D0:91\tSmartsan\tSmartsan Systems, Inc.\n00:D0:92\tGlenayre\tGlenayre Western Multiplex\n00:D0:93\tTq-Compo\tTQ - COMPONENTS GMBH\n00:D0:94\tSeeionCo\tSeeion Control LLC\n00:D0:95\tAlcatel-\tAlcatel-Lucent Enterprise\n00:D0:96\t3comEuro\t3COM EUROPE LTD\n00:D0:97\tCisco\tCisco Systems, Inc\n00:D0:98\tPhotonDy\tPhoton Dynamics Canada Inc.\n00:D0:99\tElcardWi\tElcard Wireless Systems Oy\n00:D0:9A\tFilanet\tFilanet Corporation\n00:D0:9B\tSpectel\tSpectel Ltd.\n00:D0:9C\tKapadiaC\tKapadia Communications\n00:D0:9D\tVerisInd\tVeris Industries\n00:D0:9E\t2wire\t2Wire Inc\n00:D0:9F\tNovtekTe\tNovtek Test Systems\n00:D0:A0\tMipsDenm\tMips Denmark\n00:D0:A1\tOskarVie\tOSKAR VIERLING GMBH + CO. KG\n00:D0:A2\tIntegrat\tIntegrated Device\n00:D0:A3\tVocalDat\tVocal Data, Inc.\n00:D0:A4\tAlantroC\tAlantro Communications\n00:D0:A5\tAmerican\tAmerican Arium\n00:D0:A6\tLanbirdT\tLanbird Technology Co., Ltd.\n00:D0:A7\tTokyoSok\tTokyo Sokki Kenkyujo Co., Ltd.\n00:D0:A8\tNetworkE\tNetwork Engines, Inc.\n00:D0:A9\tShinanoK\tShinano Kenshi Co., Ltd.\n00:D0:AA\tChaseCom\tChase Communications\n00:D0:AB\tDeltakab\tDeltakabel Telecom Cv\n00:D0:AC\tCommscop\tCommscope, Inc\n00:D0:AD\tTlIndust\tTl Industries\n00:D0:AE\tOresisCo\tOresis Communications, Inc.\n00:D0:AF\tCutler-H\tCUTLER-HAMMER, INC.\n00:D0:B0\tBitswitc\tBitswitch Ltd.\n00:D0:B1\tOmegaEle\tOmega Electronics Sa\n00:D0:B2\tXiotech\tXiotech Corporation\n00:D0:B3\tDrsTechn\tDRS Technologies Canada Ltd\n00:D0:B4\tKatsujim\tKatsujima Co., Ltd.\n00:D0:B5\tIpricotF\tIPricot formerly DotCom\n00:D0:B6\tCrescent\tCrescent Networks, Inc.\n00:D0:B7\tIntel\tIntel Corporation\n00:D0:B8\tIomega\tIomega Corporation\n00:D0:B9\tMicrotek\tMicrotek International, Inc.\n00:D0:BA\tCisco\tCisco Systems, Inc\n00:D0:BB\tCisco\tCisco Systems, Inc\n00:D0:BC\tCisco\tCisco Systems, Inc\n00:D0:BD\tLatticeS\tLattice Semiconductor Corp. (LPA)\n00:D0:BE\tEmutec\tEmutec Inc.\n00:D0:BF\tPivotalT\tPivotal Technologies\n00:D0:C0\tCisco\tCisco Systems, Inc\n00:D0:C1\tHarmonic\tHarmonic Data Systems, Ltd.\n00:D0:C2\tBalthaza\tBalthazar Technology Ab\n00:D0:C3\tVividTec\tVivid Technology Pte, Ltd.\n00:D0:C4\tTeratech\tTeratech Corporation\n00:D0:C5\tComputat\tComputational Systems, Inc.\n00:D0:C6\tThomasBe\tTHOMAS & BETTS CORP.\n00:D0:C7\tPathway\tPathway, Inc.\n00:D0:C8\tPrevas\tPrevas A/S\n00:D0:C9\tAdvantec\tAdvantech Co., Ltd.\n00:D0:CA\tIntrinsy\tIntrinsyc Software International Inc.\n00:D0:CB\tDasan\tDasan Co., Ltd.\n00:D0:CC\tTechnolo\tTechnologies Lyre Inc.\n00:D0:CD\tAtanTech\tAtan Technology Inc.\n00:D0:CE\tIsystemL\tiSystem Labs\n00:D0:CF\tMoretonB\tMoreton Bay\n00:D0:D0\tZhongxin\tZhongxing Telecom Ltd.\n00:D0:D1\tSycamore\tSycamore Networks\n00:D0:D2\tEpilog\tEpilog Corporation\n00:D0:D3\tCisco\tCisco Systems, Inc\n00:D0:D4\tV-Bits\tV-BITS, INC.\n00:D0:D5\tGrundig\tGrundig Ag\n00:D0:D6\tAethraTe\tAethra Telecomunicazioni\n00:D0:D7\tB2c2\tB2C2, INC.\n00:D0:D8\t3com\t\n00:D0:D9\tDedicate\tDedicated Microcomputers\n00:D0:DA\tTaicomDa\tTaicom Data Systems Co., Ltd.\n00:D0:DB\tMcquayIn\tMcquay International\n00:D0:DC\tModularM\tModular Mining Systems, Inc.\n00:D0:DD\tSunriseT\tSunrise Telecom, Inc.\n00:D0:DE\tPhilipsM\tPhilips Multimedia Network\n00:D0:DF\tKuzumiEl\tKuzumi Electronics, Inc.\n00:D0:E0\tDooinEle\tDooin Electronics Co.\n00:D0:E1\tAvionite\tAvionitek Israel Inc.\n00:D0:E2\tMrtMicro\tMrt Micro, Inc.\n00:D0:E3\tEle-Chem\tELE-CHEM ENGINEERING CO., LTD.\n00:D0:E4\tCisco\tCisco Systems, Inc\n00:D0:E5\tSolidum\tSolidum Systems Corp.\n00:D0:E6\tIbond\tIbond Inc.\n00:D0:E7\tVconTele\tVcon Telecommunication Ltd.\n00:D0:E8\tMacSyste\tMac System Co., Ltd.\n00:D0:E9\tAdvantag\tAdvantage Century Telecommunication Corp.\n00:D0:EA\tNextoneC\tNextone Communications, Inc.\n00:D0:EB\tLightera\tLightera Networks, Inc.\n00:D0:EC\tNakayo\tNAKAYO Inc\n00:D0:ED\tXiox\t\n00:D0:EE\tDictapho\tDictaphone Corporation\n00:D0:EF\tIgt\t\n00:D0:F0\tConvisio\tConvision Technology Gmbh\n00:D0:F1\tSegaEnte\tSega Enterprises, Ltd.\n00:D0:F2\tMonterey\tMonterey Networks\n00:D0:F3\tSolariDi\tSolari Di Udine Spa\n00:D0:F4\tCarinthi\tCarinthian Tech Institute\n00:D0:F5\tOrangeMi\tOrange Micro, Inc.\n00:D0:F6\tNokia\t\n00:D0:F7\tNextNets\tNext Nets Corporation\n00:D0:F8\tFujianSt\tFujian Star Terminal\n00:D0:F9\tAcuteCom\tAcute Communications Corp.\n00:D0:FA\tThalesE-\tThales e-Security Ltd.\n00:D0:FB\tTekMicro\tTek Microsystems, Incorporated\n00:D0:FC\tGraniteM\tGranite Microsystems\n00:D0:FD\tOptimaTe\tOptima Tele.Com, Inc.\n00:D0:FE\tAstralPo\tAstral Point\n00:D0:FF\tCisco\tCisco Systems, Inc\n00:D1:1C\tAcetel\t\n00:D3:18\tSpgContr\tSPG Controls\n00:D3:8D\tHotelTec\tHotel Technology Next Generation\n00:D6:32\tGeEnergy\tGE Energy\n00:D6:FE\tCisco\tCisco Systems, Inc\n00:D7:8F\tCisco\tCisco Systems, Inc\n00:D9:D1\tSonyInte\tSony Interactive Entertainment Inc.\n00:DA:55\tCisco\tCisco Systems, Inc\n00:DB:1E\tAlbedoTe\tAlbedo Telecom SL\n00:DB:45\tThamway\tThamway Co.,Ltd.\n00:DB:70\tApple\tApple, Inc.\n00:DB:DF\tIntelCor\tIntel Corporate\n00:DD:00\tUngerman\tUngermann-Bass\n00:DD:01\tUngerman\tUngermann-Bass\n00:DD:02\tUngerman\tUNGERMANN-BASS INC.\n00:DD:03\tUngerman\tUNGERMANN-BASS INC.\n00:DD:04\tUngerman\tUNGERMANN-BASS INC.\n00:DD:05\tUngerman\tUNGERMANN-BASS INC.\n00:DD:06\tUngerman\tUNGERMANN-BASS INC.\n00:DD:07\tUngerman\tUNGERMANN-BASS INC.\n00:DD:08\tUngerman\tUngermann-Bass\n00:DD:09\tUngerman\tUNGERMANN-BASS INC.\n00:DD:0A\tUngerman\tUNGERMANN-BASS INC.\n00:DD:0B\tUngerman\tUNGERMANN-BASS INC.\n00:DD:0C\tUngerman\tUNGERMANN-BASS INC.\n00:DD:0D\tUngerman\tUNGERMANN-BASS INC.\n00:DD:0E\tUngerman\tUNGERMANN-BASS INC.\n00:DD:0F\tUngerman\tUNGERMANN-BASS INC.\n00:DE:FB\tCisco\tCisco Systems, Inc\n00:E0:00\tFujitsu\tFujitsu Limited\n00:E0:01\tStrandLi\tStrand Lighting Limited\n00:E0:02\tCrossroa\tCrossroads Systems, Inc.\n00:E0:03\tNokiaWir\tNokia Wireless Business Commun\n00:E0:04\tPmc-Sier\tPMC-SIERRA, INC.\n00:E0:05\tTechnica\tTechnical Corp.\n00:E0:06\tSiliconI\tSilicon Integrated Sys. Corp.\n00:E0:07\tAvayaEcs\tAvaya ECS Ltd\n00:E0:08\tAmazingC\tAMAZING CONTROLS! INC.\n00:E0:09\tStratusT\tStratus Technologies\n00:E0:0A\tDiba\tDiba, Inc.\n00:E0:0B\tRooftopC\tRooftop Communications Corp.\n00:E0:0C\tMotorola\t\n00:E0:0D\tRadiant\tRadiant Systems\n00:E0:0E\tAvalonIm\tAvalon Imaging Systems, Inc.\n00:E0:0F\tShanghai\tShanghai Baud Data Communication Co.,Ltd.\n00:E0:10\tHessSb-A\tHESS SB-AUTOMATENBAU GmbH\n00:E0:11\tUniden\t\n00:E0:12\tPlutoTec\tPluto Technologies International Inc.\n00:E0:13\tEasternE\tEastern Electronic Co., Ltd.\n00:E0:14\tCisco\t\n00:E0:15\tHeiwa\tHeiwa Corporation\n00:E0:16\tRapid-Ci\trapid-city (now a part of bay networks)\n00:E0:17\tExxact\tEXXACT GmbH\n00:E0:18\tAsustekI\tAsustek\n00:E0:19\tIngGiord\tIng. Giordano Elettronica\n00:E0:1A\tComtec\tComtec Systems. Co., Ltd.\n00:E0:1B\tSphereCo\tSphere Communications, Inc.\n00:E0:1C\tCradlepo\tCradlepoint, Inc\n00:E0:1D\tWebtvNet\tWebTV NETWORKS, INC.\n00:E0:1E\tCisco\t\n00:E0:1F\tAvidia\tAVIDIA Systems, Inc.\n00:E0:20\tTecnomen\tTecnomen Oy\n00:E0:21\tFreegate\tFreegate Corp.\n00:E0:22\tAnalogDe\tAnalog Devices, Inc.\n00:E0:23\tTelrad\t\n00:E0:24\tGadzooxN\tGadzoox Networks\n00:E0:25\tDit\tdit Co., Ltd.\n00:E0:26\tRedlakeM\tRedlake MASD LLC\n00:E0:27\tDux\tDux, Inc.\n00:E0:28\tAptix\tAptix Corporation\n00:E0:29\tSmcEther\tSMC EtherPower II 10/100\n00:E0:2A\tTandberg\tTandberg Television As\n00:E0:2B\tExtremeN\tExtreme Networks, Inc.\n00:E0:2C\tAst-Buil\tAST - built into 5166M PC motherboard (win95 id's as Intel)\n00:E0:2D\tInnomedi\tInnoMediaLogic, Inc.\n00:E0:2E\tSpcElect\tSpc Electronics Corporation\n00:E0:2F\tMcnsHold\tMcns Holdings, L.P.\n00:E0:30\tMelitaIn\tMelita International Corp.\n00:E0:31\tHagiwara\tHagiwara Electric Co., Ltd.\n00:E0:32\tMisysFin\tMisys Financial Systems, Ltd.\n00:E0:33\tEEPD\tE.E.P.D. GmbH\n00:E0:34\tCisco\t\n00:E0:35\tArtesynE\tArtesyn Embedded Technologies\n00:E0:36\tPioneer\tPioneer Corporation\n00:E0:37\tCentury\tCentury Corporation\n00:E0:38\tProxima\tProxima Corporation\n00:E0:39\tParadyne\tParadyne 7112 T1 DSU/CSU\n00:E0:3A\tCabletro\tCabletron Systems, Inc.\n00:E0:3B\tProminet\tProminet Corporation\n00:E0:3C\tAdvansys\t\n00:E0:3D\tFoconEle\tFOCON ELECTRONIC SYSTEMS A/S\n00:E0:3E\tAlfatech\tAlfatech, Inc.\n00:E0:3F\tJaton\tJaton Corporation\n00:E0:40\tDeskstat\tDeskStation Technology, Inc.\n00:E0:41\tCspi\t\n00:E0:42\tPacom\tPacom Systems Ltd.\n00:E0:43\tVitalcom\t\n00:E0:44\tLsics\tLsics Corporation\n00:E0:45\tTouchwav\tTouchwave, Inc.\n00:E0:46\tBentlyNe\tBently Nevada Corp.\n00:E0:47\tInfocus\tInFocus Corporation\n00:E0:48\tSdlCommu\tSdl Communications, Inc.\n00:E0:49\tMicrowiE\tMICROWI ELECTRONIC GmbH\n00:E0:4A\tZxTechno\tZX Technologies, Inc\n00:E0:4B\tJumpIndu\tJUMP INDUSTRIELLE COMPUTERTECHNIK GmbH\n00:E0:4C\tRealtekS\tRealtek Semiconductor Corp.\n00:E0:4D\tInternet\tInternet Initiative Japan, Inc\n00:E0:4E\tSanyoDen\tSanyo Denki Co., Ltd.\n00:E0:4F\tCisco\t\n00:E0:50\tExecuton\tExecutone Information Systems, Inc.\n00:E0:51\tTalx\tTalx Corporation\n00:E0:52\tBrocadeC\tBrocade Communications Systems, Inc.\n00:E0:53\tCellport\tCellport Labs, Inc.\n00:E0:54\tKodaiHit\tKodai Hitec Co., Ltd.\n00:E0:55\tIngenier\tIngenieria Electronica Comercial Inelcom S.A.\n00:E0:56\tHolontec\tHolontech Corporation\n00:E0:57\tHanMicro\tHan Microtelecom. Co., Ltd.\n00:E0:58\tPhaseOne\tPHASE ONE DENMARK A/S\n00:E0:59\tControll\tControlled Environments, Ltd.\n00:E0:5A\tGaleaNet\tGalea Network Security\n00:E0:5B\tWestEnd\tWest End Systems Corp.\n00:E0:5C\tPhc\tPHC Corporation\n00:E0:5D\tUnitec\tUnitec Co., Ltd.\n00:E0:5E\tJapanAvi\tJapan Aviation Electronics Industry, Ltd.\n00:E0:5F\tE-Net\te-Net, Inc.\n00:E0:60\tSherwood\t\n00:E0:61\tEdgepoin\tEdgePoint Networks, Inc.\n00:E0:62\tHostEngi\tHost Engineering\n00:E0:63\tCabletro\tCabletron Systems, Inc.\n00:E0:64\tSamsungE\tSamsung Electronics\n00:E0:65\tOpticalA\tOptical Access International\n00:E0:66\tPromax\tProMax Systems, Inc.\n00:E0:67\tEacAutom\teac AUTOMATION-CONSULTING GmbH\n00:E0:68\tMerrimac\tMerrimac Systems Inc.\n00:E0:69\tJaycor\t\n00:E0:6A\tKapsch\tKapsch Ag\n00:E0:6B\tW&GSpeci\tW&G SPECIAL PRODUCTS\n00:E0:6C\tUltraEle\tUltra Electronics Command & Control Systems\n00:E0:6D\tCompuwar\tCompuware Corporation\n00:E0:6E\tFarSPA\tFAR SYSTEMS S.p.A.\n00:E0:6F\tArrisGro\tARRIS Group, Inc.\n00:E0:70\tDhTechno\tDh Technology\n00:E0:71\tEpisMicr\tEpis Microcomputer\n00:E0:72\tLynk\t\n00:E0:73\tNational\tNational Amusement Network, Inc.\n00:E0:74\tTiernanC\tTiernan Communications, Inc.\n00:E0:75\tVerilink\tVerilink Corporation\n00:E0:76\tDevelopm\tDevelopment Concepts, Inc.\n00:E0:77\tWebgear\tWebgear, Inc.\n00:E0:78\tBerkeley\tBerkeley Networks\n00:E0:79\tATNR\tA.T.N.R.\n00:E0:7A\tMikrodid\tMikrodidakt Ab\n00:E0:7B\tBayNetwo\tBay Networks\n00:E0:7C\tMettler-\tMETTLER-TOLEDO, INC.\n00:E0:7D\tEncoreNe\tEncore (Netronix?)\n00:E0:7E\tWaltDisn\tWalt Disney Imagineering\n00:E0:7F\tLogistis\tLOGISTISTEM s.r.l.\n00:E0:80\tControlR\tControl Resources Corporation\n00:E0:81\tTyanComp\tTyan Computer Corp.\n00:E0:82\tAnerma\t\n00:E0:83\tJatoTech\tJato Technologies, Inc.\n00:E0:84\tCompulit\tCOMPULITE R&D\n00:E0:85\tGlobalMa\tGlobal Maintech, Inc.\n00:E0:86\tEmersonN\tEmerson Network Power, Avocent Division\n00:E0:87\tLecroy-N\tLeCroy - Networking Productions Division\n00:E0:88\tLtx-Cred\tLTX-Credence CORPORATION\n00:E0:89\tIonNetwo\tION Networks, Inc.\n00:E0:8A\tGecAvery\tGec Avery, Ltd.\n00:E0:8B\tQlogic\tQLogic Corporation\n00:E0:8C\tNeoparad\tNeoparadigm Labs, Inc.\n00:E0:8D\tPressure\tPressure Systems, Inc.\n00:E0:8E\tUtstarco\tUtstarcom\n00:E0:8F\tCiscoSys\tCisco Systems\n00:E0:90\tBeckmanL\tBeckman Lab. Automation Div.\n00:E0:91\tLgElectr\tLG Electronics\n00:E0:92\tAdmtek\tAdmtek Incorporated\n00:E0:93\tAckfinNe\tAckfin Networks\n00:E0:94\tOsaiSrl\tOsai Srl\n00:E0:95\tAdvanced\tADVANCED-VISION TECHNOLGIES CORP.\n00:E0:96\tShimadzu\tShimadzu Corporation\n00:E0:97\tCarrierA\tCarrier Access Corporation\n00:E0:98\tAbocom\t\n00:E0:99\tSamson\tSamson Ag\n00:E0:9A\tPositron\tPositron Inc.\n00:E0:9B\tEngageNe\tEngage Networks, Inc.\n00:E0:9C\tMii\t\n00:E0:9D\tSarnoff\tSarnoff Corporation\n00:E0:9E\tQuantum\tQuantum Corporation\n00:E0:9F\tPixelVis\tPixel Vision\n00:E0:A0\tWiltron\tWiltron Co.\n00:E0:A1\tHimaPaul\tHIMA PAUL HILDEBRANDT GmbH Co. KG\n00:E0:A2\tMicrosla\tMicroslate Inc.\n00:E0:A3\tCiscoSys\tCisco Systems\n00:E0:A4\tEsaoteSP\tESAOTE S.p.A.\n00:E0:A5\tComcoreS\tComCore Semiconductor, Inc.\n00:E0:A6\tTelogyNe\tTelogy Networks, Inc.\n00:E0:A7\tIpcInfor\tIpc Information Systems, Inc.\n00:E0:A8\tSat\tSAT GmbH & Co.\n00:E0:A9\tFunaiEle\tFunai Electric Co., Ltd.\n00:E0:AA\tElectros\tElectrosonic Ltd.\n00:E0:AB\tDimatSA\tDimat S.A.\n00:E0:AC\tMidsco\tMidsco, Inc.\n00:E0:AD\tEesTechn\tEes Technology, Ltd.\n00:E0:AE\tXaqti\tXaqti Corporation\n00:E0:AF\tGeneralD\tGeneral Dynamics Information Systems\n00:E0:B0\tCiscoSys\tCisco Systems\n00:E0:B1\tAlcatel-\tAlcatel-Lucent Enterprise\n00:E0:B2\tTelmaxCo\tTelmax Communications Corp.\n00:E0:B3\tEtherwan\tEtherWAN Systems, Inc.\n00:E0:B4\tTechnoSc\tTechno Scope Co., Ltd.\n00:E0:B5\tArdentCo\tArdent Communications Corp.\n00:E0:B6\tEntradaN\tEntrada Networks\n00:E0:B7\tPiGroup\tPi Group, Ltd.\n00:E0:B8\tAmdPcnet\tAMD PCNet\n00:E0:B9\tByas\tByas Systems\n00:E0:BA\tBerghofA\tBERGHOF AUTOMATIONSTECHNIK GmbH\n00:E0:BB\tNbx\tNbx Corporation\n00:E0:BC\tSymonCom\tSymon Communications, Inc.\n00:E0:BD\tInterfac\tInterface Systems, Inc.\n00:E0:BE\tGenrocoI\tGenroco International, Inc.\n00:E0:BF\tTorrentN\tTorrent Networking Technologies Corp.\n00:E0:C0\tSeiwaEle\tSeiwa Electric Mfg. Co., Ltd.\n00:E0:C1\tMemorexT\tMemorex Telex Japan, Ltd.\n00:E0:C2\tNecsySPA\tNECSY S.p.A.\n00:E0:C3\tSakaiSys\tSakai System Development Corp.\n00:E0:C4\tHornerEl\tHorner Electric, Inc.\n00:E0:C5\tBcomElec\tBCOM Electronics Inc.\n00:E0:C6\tLink2itL\tLINK2IT, L.L.C.\n00:E0:C7\tEurotech\tEurotech Srl\n00:E0:C8\tVirtualA\tVirtual Access, Ltd.\n00:E0:C9\tAutomate\tAutomatedLogic Corporation\n00:E0:CA\tBestData\tBest Data Products\n00:E0:CB\tReson\tReson, Inc.\n00:E0:CC\tHero\tHero Systems, Ltd.\n00:E0:CD\tSaabSens\tSaab Sensis Corporation\n00:E0:CE\tArn\t\n00:E0:CF\tIntegrat\tIntegrated Device\n00:E0:D0\tNetspeed\tNetspeed, Inc.\n00:E0:D1\tTelsis\tTelsis Limited\n00:E0:D2\tVersanet\tVersanet Communications, Inc.\n00:E0:D3\tDatentec\tDATENTECHNIK GmbH\n00:E0:D4\tExcellen\tExcellent Computer\n00:E0:D5\tEmulex\tEmulex Corporation\n00:E0:D6\tComputer\tCOMPUTER & COMMUNICATION RESEARCH LAB.\n00:E0:D7\tSunshine\tSunshine Electronics, Inc.\n00:E0:D8\tLanbitCo\tLANBit Computer, Inc.\n00:E0:D9\tTazmo\tTazmo Co., Ltd.\n00:E0:DA\tAlcatel-\tAlcatel-Lucent Enterprise\n00:E0:DB\tViavideo\tViaVideo Communications, Inc.\n00:E0:DC\tNexware\tNexware Corp.\n00:E0:DD\tZenithEl\tZenith Electronics Corporation\n00:E0:DE\tDataxNv\tDatax Nv\n00:E0:DF\tKeymile\tKEYMILE GmbH\n00:E0:E0\tSiElectr\tSi Electronics, Ltd.\n00:E0:E1\tG2Networ\tG2 NETWORKS, INC.\n00:E0:E2\tInnova\tInnova Corp.\n00:E0:E3\tSk-Elekt\tSK-ELEKTRONIK GMBH\n00:E0:E4\tFanucRob\tFANUC ROBOTICS NORTH AMERICA, Inc.\n00:E0:E5\tCincoNet\tCinco Networks, Inc.\n00:E0:E6\tIncaaCom\tINCAA Computers\n00:E0:E7\tRaytheon\tRAYTHEON E-SYSTEMS, INC.\n00:E0:E8\tGretacod\tGRETACODER Data Systems AG\n00:E0:E9\tDataLabs\tData Labs, Inc.\n00:E0:EA\tInnovatC\tInnovat Communications, Inc.\n00:E0:EB\tDigicom\tDigicom Systems, Incorporated\n00:E0:EC\tCelestic\tCelestica Inc.\n00:E0:ED\tSilicom\tSilicom, Ltd.\n00:E0:EE\tMarelHf\tMarel Hf\n00:E0:EF\tDionex\t\n00:E0:F0\tAblerTec\tAbler Technology, Inc.\n00:E0:F1\tThat\tThat Corporation\n00:E0:F2\tArlottoC\tArlotto Comnet, Inc.\n00:E0:F3\tWebsprin\tWebSprint Communications, Inc.\n00:E0:F4\tInsideTe\tINSIDE Technology A/S\n00:E0:F5\tTeles\tTeles Ag\n00:E0:F6\tDecision\tDecision Europe\n00:E0:F7\tCisco\t\n00:E0:F8\tDicnaCon\tDicna Control Ab\n00:E0:F9\tCisco\t\n00:E0:FA\tTrlTechn\tTrl Technology, Ltd.\n00:E0:FB\tLeightro\tLeightronix, Inc.\n00:E0:FC\tHuaweiTe\tHuawei Technologies Co.,Ltd\n00:E0:FD\tA-TrendT\tA-TREND TECHNOLOGY CO., LTD.\n00:E0:FE\tCisco\t\n00:E0:FF\tSecurity\tSECURITY DYNAMICS TECHNOLOGIES, Inc.\n00:E1:6D\tCisco\tCisco Systems, Inc\n00:E1:75\tAk-Syste\tAK-Systems Ltd\n00:E1:8C\tIntelCor\tIntel Corporate\n00:E3:B2\tSamsungE\tSamsung Electronics Co.,Ltd\n00:E4:00\tSichuanC\tSichuan Changhong Electric Ltd.\n00:E6:66\tArimaCom\tARIMA Communications Corp.\n00:E6:D3\tNixdorfC\tNixdorf Computer Corp.\n00:E6:E8\tNetzinTe\tNetzin Technology Corporation,.Ltd.\n00:E8:AB\tMeggittT\tMeggitt Training Systems, Inc.\n00:EA:BD\tCisco\tCisco Systems, Inc\n00:EB:2D\tSonyMobi\tSony Mobile Communications Inc\n00:EB:D5\tCisco\tCisco Systems, Inc\n00:EC:0A\tXiaomiCo\tXiaomi Communications Co Ltd\n00:EE:BD\tHtc\tHTC Corporation\n00:F0:51\tKwb\tKWB Gmbh\n00:F2:2C\tShanghai\tShanghai B-star Technology Co.,Ltd.\n00:F2:8B\tCisco\tCisco Systems, Inc\n00:F3:DB\tWooSport\tWOO Sports\n00:F4:03\tOrbisOy\tOrbis Systems Oy\n00:F4:6F\tSamsungE\tSamsung Electronics Co.,Ltd\n00:F4:8D\tLiteonTe\tLiteon Technology Corporation\n00:F4:B9\tApple\tApple, Inc.\n00:F6:63\tCisco\tCisco Systems, Inc\n00:F7:6F\tApple\tApple, Inc.\n00:F8:1C\tHuaweiTe\tHuawei Technologies Co.,Ltd\n00:F8:2C\tCisco\tCisco Systems, Inc\n00:F8:60\tPtPanggu\tPT. Panggung Electric Citrabuana\n00:F8:71\tDgsDenma\tDGS Denmark A/S\n00:FA:3B\tCloosEle\tCloos Electronic Gmbh\n00:FC:58\tWebsilic\tWebSilicon Ltd.\n00:FC:70\tIntrepid\tIntrepid Control Systems, Inc.\n00:FC:8B\tAmazonTe\tAmazon Technologies Inc.\n00:FC:8D\tHitronTe\tHitron Technologies. Inc\n00:FC:BA\tCisco\tCisco Systems, Inc\n00:FD:45\tHewlettP\tHewlett Packard Enterprise\n00:FD:4C\tNevatec\t\n00:FE:C8\tCisco\tCisco Systems, Inc\n01:0E:CF\tPN-MC\t\n02:04:06\tBbnInter\tBBN\n02:07:01\tRacal-Da\tRACAL-DATACOM\n02:1C:7C\tPerq\tPerq Systems Corporation\n02:20:48\tMarconi\t\n02:60:60\t3com\t\n02:60:86\tLogicRep\tLogic Replacement Tech. Ltd.\n02:60:8C\t3comIbmP\t3Com\n02:70:01\tRacal-Da\tRACAL-DATACOM\n02:70:B0\tM/A-ComC\tM/A-COM INC. COMPANIES\n02:70:B3\tDataReca\tData Recall Ltd.\n02:9D:8E\tCardiacR\tCardiac Recorders, Inc.\n02:A0:C9\tIntel\t\n02:AA:3C\tOlivetti\t\n02:BB:01\tOctothor\tOctothorpe Corp.\n02:C0:8C\t3com\t\n02:CF:1C\tCommunic\tCommunication Machinery Corporation\n02:CF:1F\tCMC\t\n02:E0:3B\tProminet\tProminet Corporation\n02:E6:D3\tNixdorfC\tNixdorf Computer Corp.\n04:02:1F\tHuaweiTe\tHuawei Technologies Co.,Ltd\n04:02:CA\tShenzhen\tShenzhen Vtsonic Co.,ltd\n04:03:D6\tNintendo\tNintendo Co.,Ltd\n04:04:EA\tValensSe\tValens Semiconductor Ltd.\n04:09:73\tHewlettP\tHewlett Packard Enterprise\n04:09:A5\tHfr\tHFR, Inc.\n04:0A:83\tAlcatel-\tAlcatel-Lucent\n04:0A:E0\tXmitComp\tXmit Ag Computer Networks\n04:0C:CE\tApple\tApple, Inc.\n04:0E:C2\tViewsoni\tViewSonic Mobile China Limited\n04:15:52\tApple\tApple, Inc.\n04:15:D9\tViwone\t\n04:18:0F\tSamsungE\tSamsung Electronics Co.,Ltd\n04:18:B6\tPrivate\t\n04:18:D6\tUbiquiti\tUbiquiti Networks Inc.\n04:19:7F\tGraspher\tGrasphere Japan\n04:1A:04\tWaveip\t\n04:1B:6D\tLgElectr\tLG Electronics (Mobile Communications)\n04:1B:94\tHostMobi\tHost Mobility AB\n04:1B:BA\tSamsungE\tSamsung Electronics Co.,Ltd\n04:1D:10\tDreamWar\tDream Ware Inc.\n04:1E:64\tApple\tApple, Inc.\n04:1E:7A\tDspworks\t\n04:20:9A\tPanasoni\tPanasonic Corporation AVC Networks Company\n04:21:4C\tInsightE\tInsight Energy Ventures LLC\n04:22:34\tWireless\tWireless Standard Extensions\n04:25:C5\tHuaweiTe\tHuawei Technologies Co.,Ltd\n04:26:05\tGfrGesel\tGFR Gesellschaft für Regelungstechnik und Energieeinsparung mbH\n04:26:65\tApple\tApple, Inc.\n04:27:58\tHuaweiTe\tHuawei Technologies Co.,Ltd\n04:2A:E2\tCisco\tCisco Systems, Inc\n04:2B:BB\tPicocela\tPicoCELA, Inc.\n04:2D:B4\tFirstPro\tFirst Property (Beijing) Co., Ltd Modern MOMA Branch\n04:2F:56\tAtocsShe\tATOCS (Shenzhen) LTD\n04:31:10\tInspurGr\tInspur Group Co., Ltd.\n04:32:F4\tPartron\t\n04:33:89\tHuaweiTe\tHuawei Technologies Co.,Ltd\n04:36:04\tGyeyoung\tGyeyoung I&T\n04:3A:0D\tSmOptics\tSM Optics S.r.l.\n04:3D:98\tChongqin\tChongQing QingJia Electronics CO.,LTD\n04:40:A9\tNewH3cTe\tNew H3C Technologies Co., Ltd\n04:41:69\tGopro\t\n04:44:A1\tTeleconG\tTelecon Galicia,S.A.\n04:46:65\tMurataMa\tMurata Manufacturing Co., Ltd.\n04:48:9A\tApple\tApple, Inc.\n04:4A:50\tRamaxelT\tRamaxel Technology (Shenzhen) limited company\n04:4B:ED\tApple\tApple, Inc.\n04:4B:FF\tGuangzho\tGuangZhou Hedy Digital Technology Co., Ltd\n04:4C:EF\tFujianSa\tFujian Sanao Technology Co.,Ltd\n04:4E:06\tEricsson\tEricsson AB\n04:4E:5A\tArrisGro\tARRIS Group, Inc.\n04:4E:AF\tLgInnote\tLG Innotek\n04:4F:17\tHumax\tHUMAX Co., Ltd.\n04:4F:4C\tHuaweiTe\tHuawei Technologies Co.,Ltd\n04:4F:8B\tAdapteva\tAdapteva, Inc.\n04:4F:AA\tRuckusWi\tRuckus Wireless\n04:50:DA\tQikuInte\tQiku Internet Network Scientific (Shenzhen) Co., Ltd\n04:52:C7\tBose\tBose Corporation\n04:52:F3\tApple\tApple, Inc.\n04:53:D5\tSysorexG\tSysorex Global Holdings\n04:54:53\tApple\tApple, Inc.\n04:55:CA\tBriviewX\tBriView (Xiamen) Corp.\n04:56:04\tGioneeCo\tGionee Communication Equipment Co.,Ltd.\n04:57:2F\tSertelEl\tSertel Electronics UK Ltd\n04:58:6F\tSichuanW\tSichuan Whayer information industry Co.,LTD\n04:5A:95\tNokia\tNokia Corporation\n04:5C:06\tZmodoTec\tZmodo Technology Corporation\n04:5C:8E\tGosundGr\tgosund GROUP CO.,LTD\n04:5D:4B\tSony\tSony Corporation\n04:5D:56\tCamtronI\tcamtron industrial inc.\n04:5F:A7\tShenzhen\tShenzhen Yichen Technology Development Co.,LTD\n04:61:69\tMediaGlo\tMedia Global Links Co., Ltd.\n04:62:73\tCisco\tCisco Systems, Inc\n04:62:D7\tAlstomHy\tAlstom Hydro France\n04:63:E0\tNomeOy\tNome Oy\n04:65:65\tTestop\t\n04:67:85\tScemtecH\tscemtec Hard- und Software fuer Mess- und Steuerungstechnik GmbH\n04:69:F8\tApple\tApple, Inc.\n04:6B:1B\tSysdine\tSYSDINE Co., Ltd.\n04:6B:25\tSichuanT\tSichuan Tianyi Comheart Telecom Co.,Ltd\n04:6C:9D\tCisco\tCisco Systems, Inc\n04:6D:42\tBryston\tBryston Ltd.\n04:6E:02\tOpenrtls\tOpenRTLS Group\n04:6E:49\tTaiyearE\tTaiYear Electronic Technology (Suzhou) Co., Ltd\n04:70:BC\tGlobalst\tGlobalstar Inc.\n04:71:4B\tIeeeRegi\tIEEE Registration Authority\n04:71:4B:00:00:00/28\tNeurioTe\tNeurio Technology Inc.\n04:71:4B:10:00:00/28\tUavionix\tuAvionix Corporation\n04:71:4B:20:00:00/28\tShenzhen\tShenzhen WayOS Technology Crop., Ltd.\n04:71:4B:30:00:00/28\tGriesser\tGriesser Electronic AG\n04:71:4B:40:00:00/28\tApparate\tApparatebau Gauting GmbH\n04:71:4B:50:00:00/28\tBureauEl\tBureau Electronique Appliquee\n04:71:4B:60:00:00/28\tArmstron\tArmstrong Fluid Technology\n04:71:4B:70:00:00/28\tOmylisPt\tOmylis Pte Ltd\n04:71:4B:80:00:00/28\tEnergpor\tEnergport Inc\n04:71:4B:90:00:00/28\tLighthou\tLighthouse AI, Inc\n04:71:4B:A0:00:00/28\tObservab\tObservables, Inc.\n04:71:4B:B0:00:00/28\tDigibest\tDigibest Technology Co., Ltd.\n04:71:4B:C0:00:00/28\tKittyhaw\tKittyHawk Corporation\n04:71:4B:D0:00:00/28\tShenzhen\tShenzhen BoClouds Technology Co.,Ltd.\n04:71:4B:E0:00:00/28\tGimsoMob\tGimso Mobile Ltd\n04:74:A1\tAligeraE\tAligera Equipamentos Digitais Ltda\n04:75:03\tHuaweiTe\tHuawei Technologies Co.,Ltd\n04:75:F5\tCsst\t\n04:76:6E\tAlpsElec\tAlps Electric Co.,Ltd.\n04:78:63\tShanghai\tShanghai MXCHIP Information Technology Co., Ltd.\n04:79:70\tHuaweiTe\tHuawei Technologies Co.,Ltd\n04:79:B7\tTexasIns\tTexas Instruments\n04:7D:50\tShenzhen\tShenzhen Kang Ying Technology Co.Ltd.\n04:7D:7B\tQuantaCo\tQuanta Computer Inc.\n04:7E:4A\tMoobox\tmoobox CO., Ltd.\n04:81:AE\tClack\tClack Corporation\n04:84:8A\t7inovaTe\t7INOVA TECHNOLOGY LIMITED\n04:88:45\tBayNetwo\tBay Networks\n04:88:8C\tEifelwer\tEifelwerk Butler Systeme GmbH\n04:88:E2\tBeatsEle\tBeats Electronics LLC\n04:8A:15\tAvaya\tAvaya Inc\n04:8A:E1\tFlextron\tFLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.\n04:8B:42\tSkspruce\tSkspruce Technologies\n04:8C:03\tThinpadT\tThinPAD Technology (Shenzhen)CO.,LTD\n04:8D:38\tNetcoreT\tNetcore Technology Inc.\n04:91:62\tMicrochi\tMicrochip Technology Inc.\n04:92:26\tAsustekC\tASUSTek COMPUTER INC.\n04:92:EE\tIway\tiway AG\n04:94:6B\tTecnoMob\tTecno Mobile Limited\n04:94:A1\tCatchWin\tCatch The Wind Inc\n04:95:73\tZte\tzte corporation\n04:95:E6\tTendaTec\tTenda Technology Co.,Ltd.Dongguan branch\n04:96:45\tWuxiSkyC\tWuxi Sky Chip Interconnection Technology Co.,Ltd.\n04:97:90\tLartechT\tLartech telecom LLC\n04:98:F3\tAlpsElec\tAlps Electric Co.,Ltd.\n04:99:E6\tShenzhen\tShenzhen Yoostar Technology Co., Ltd\n04:9B:9C\tEadingco\tEadingcore  Intelligent Technology Co., Ltd.\n04:9C:62\tBmtMedic\tBMT Medical Technology s.r.o.\n04:9F:06\tSmobile\tSmobile Co., Ltd.\n04:9F:81\tNetscout\tNetScout Systems, Inc.\n04:9F:CA\tHuaweiTe\tHuawei Technologies Co.,Ltd\n04:A1:51\tNetgear\t\n04:A3:16\tTexasIns\tTexas Instruments\n04:A3:F3\tEmicon\t\n04:A8:2A\tNokia\tNokia Corporation\n04:AB:18\tElecom\tElecom Co.,Ltd.\n04:AC:44\tHoltekSe\tHoltek Semiconductor Inc.\n04:B0:E7\tHuaweiTe\tHuawei Technologies Co.,Ltd\n04:B1:67\tXiaomiCo\tXiaomi Communications Co Ltd\n04:B3:B6\tSeamapUk\tSeamap (UK) Ltd\n04:B4:66\tBsp\tBSP Co., Ltd.\n04:B6:48\tZenner\t\n04:BA:36\tLiSengTe\tLi Seng Technology Ltd\n04:BB:F9\tPavilion\tPavilion Data Systems Inc\n04:BC:87\tShenzhen\tShenzhen JustLink Technology Co., LTD\n04:BD:70\tHuaweiTe\tHuawei Technologies Co.,Ltd\n04:BD:88\tArubaNet\tAruba Networks\n04:BF:6D\tZyxelCom\tZyxel Communications Corporation\n04:BF:A8\tIsb\tISB Corporation\n04:C0:5B\tTigoEner\tTigo Energy\n04:C0:6F\tHuaweiTe\tHuawei Technologies Co.,Ltd\n04:C0:9C\tTellabs\tTellabs Inc.\n04:C1:03\tCloverNe\tClover Network, Inc.\n04:C1:B9\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n04:C2:3E\tHtc\tHTC Corporation\n04:C2:41\tNokia\t\n04:C3:E6\tIeeeRegi\tIEEE Registration Authority\n04:C3:E6:00:00:00/28\tDreamkas\tDreamkas Llc\n04:C3:E6:10:00:00/28\tGuangdon\tGuangdong New Pulse Electric Co., Ltd.\n04:C3:E6:20:00:00/28\tSisTechn\tSiS Technology\n04:C3:E6:30:00:00/28\tExtechEl\tExtech Electronics Co., LTD.\n04:C3:E6:40:00:00/28\tInnovusi\tInnovusion Inc.\n04:C3:E6:50:00:00/28\tInvasys\t\n04:C3:E6:60:00:00/28\tShenzhen\tShenzhen Shuotian Information Technology Co., LTD\n04:C3:E6:70:00:00/28\tAdvanced\tAdvanced Digital Technologies, s.r.o.\n04:C3:E6:80:00:00/28\tSloc\tSLOC GmbH\n04:C3:E6:90:00:00/28\tEkinTekn\tEkin Teknoloji San ve Tic A.S.\n04:C3:E6:A0:00:00/28\tSealedUn\tSealed Unit Parts Co., Inc.\n04:C3:E6:B0:00:00/28\tFlintecU\tFlintec UK Ltd.\n04:C3:E6:C0:00:00/28\tShantouY\tSHANTOU YINGSHENG IMPORT & EXPORT TRADING CO.,LTD.\n04:C3:E6:D0:00:00/28\tAmiosec\tAmiosec Ltd\n04:C3:E6:E0:00:00/28\tTeleepoc\tTeleepoch Ltd\n04:C5:A4\tCisco\tCisco Systems, Inc\n04:C8:80\tSamtec\tSamtec Inc\n04:C9:91\tPhistek\tPhistek INC.\n04:C9:D9\tDishTech\tDish Technologies Corp\n04:CB:1D\tTraka\tTraka plc\n04:CE:14\tWilocity\tWilocity LTD.\n04:CF:25\tManycolo\tManycolors, Inc.\n04:CF:8C\tXiaomiEl\tXIAOMI Electronics,CO.,LTD\n04:D1:3A\tXiaomiCo\tXiaomi Communications Co Ltd\n04:D3:B0\tIntelCor\tIntel Corporate\n04:D3:CF\tApple\tApple, Inc.\n04:D4:37\tZnv\t\n04:D6:AA\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\n04:D7:83\tY&HE&C\tY&H E&C Co.,LTD.\n04:DA:D2\tCisco\tCisco Systems, Inc\n04:DB:56\tApple\tApple, Inc.\n04:DB:8A\tSuntechI\tSuntech International Ltd.\n04:DD:4C\tVelocyte\tVelocytech\n04:DE:DB\tRockport\tRockport Networks Inc\n04:DE:F2\tShenzhen\tShenzhen ECOM Technology Co. Ltd\n04:DF:69\tCarConne\tCar Connectivity Consortium\n04:E0:B0\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\n04:E0:C4\tTriumph-\tTRIUMPH-ADLER AG\n04:E1:C8\tImsSoluç\tIMS Soluções em Energia Ltda.\n04:E2:29\tQingdaoH\tQingdao Haier Technology Co.,Ltd\n04:E2:F8\tAepTicke\tAEP Ticketing solutions srl\n04:E4:51\tTexasIns\tTexas Instruments\n04:E5:36\tApple\tApple, Inc.\n04:E5:48\tCohdaWir\tCohda Wireless Pty Ltd\n04:E6:62\tAcroname\tAcroname Inc.\n04:E6:76\tAmpakTec\tAMPAK Technology, Inc.\n04:E9:E5\tPjrcComL\tPjrc.Com, Llc\n04:EB:40\tCisco\tCisco Systems, Inc\n04:EC:BB\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n04:EE:91\tX-Fabric\tx-fabric GmbH\n04:F0:21\tCompexPt\tCompex Systems Pte Ltd\n04:F1:28\tHmdGloba\tHMD Global Oy\n04:F1:3E\tApple\tApple, Inc.\n04:F1:7D\tTaranaWi\tTarana Wireless\n04:F4:BC\tXenaNetw\tXena Networks\n04:F7:E4\tApple\tApple, Inc.\n04:F8:C2\tFlaircom\tFlaircomm Microelectronics, Inc.\n04:F9:38\tHuaweiTe\tHuawei Technologies Co.,Ltd\n04:FA:3F\tOpticore\tOpticore Inc.\n04:FA:83\tQingdaoH\tQingdao Haier Technology Co.,Ltd\n04:FE:31\tSamsungE\tSamsung Electronics Co.,Ltd\n04:FE:7F\tCisco\tCisco Systems, Inc\n04:FE:8D\tHuaweiTe\tHuawei Technologies Co.,Ltd\n04:FE:A1\tFihonest\tFihonest communication co.,Ltd\n04:FF:51\tNovamedi\tNovamedia Innovision Sp. Z O.O.\n08:00:01\tComputer\tComputer Vision\n08:00:02\tBridgeCo\tBridge Communications Inc.\n08:00:03\tACC\t\n08:00:04\tCromemco\tCromemco Incorporated\n08:00:05\tSymbolic\tSymbolics\n08:00:06\tSiemensN\tSiemens Nixdorf\n08:00:07\tApple\t\n08:00:08\tBBN\t\n08:00:09\tHP\t\n08:00:0A\tNestar\t\n08:00:0B\tUnisysAl\tUnisys also Ascom-Timeplex (former Unisys subsidiary)\n08:00:0C\tMiklynDe\tMiklyn Development Co.\n08:00:0D\tIclInter\tICL (International Computers, Ltd.)\n08:00:0E\tNcr/At&T\t\n08:00:0F\tMitel\tMitel Corporation\n08:00:10\tAt&T[Mis\tAT&T [misrepresentation of 800010?]\n08:00:11\tTektroni\tTektronix, Inc.\n08:00:12\tBellAtla\tBell Atlantic Integrated Syst.\n08:00:13\tExxon\t\n08:00:14\tExcelanB\tExcelan\n08:00:15\tStcBusin\tStc Business Systems\n08:00:16\tBarriste\tBarrister Info Sys Corp\n08:00:17\tNational\tNational Semiconductor Corp. (used to have Network System Corp., wrong NSC)\n08:00:18\tPirelliF\tPirelli Focom Networks\n08:00:19\tGeneralE\tGeneral Electric Corporation\n08:00:1A\tTiara/10\tTIARA/ 10NET\n08:00:1B\tDellEmc\tDell EMC\n08:00:1C\tKdd-Koku\tKDD-KOKUSAI DEBNSIN DENWA CO.\n08:00:1D\tAbleComm\tAble Communications Inc.\n08:00:1E\tApollo\t\n08:00:1F\tSharp\t\n08:00:20\tOracle\tOracle Corporation\n08:00:21\t3m\t3M COMPANY\n08:00:22\tNbiNothi\tNBI (Nothing But Initials)\n08:00:23\tPanasoni\tPanasonic Communications Co., Ltd.\n08:00:24\t10netCom\t10NET COMMUNICATIONS/DCA\n08:00:25\tCdc\t\n08:00:26\tNorskDat\tNorsk Data (Nord)\n08:00:27\tPcsCompu\tPCS Computer Systems GmbH\n08:00:28\tTiExplor\tTI\n08:00:29\tMegatek\tMegatek Corporation\n08:00:2A\tMosaicTe\tMosaic Technologies Inc.\n08:00:2B\tDec\t\n08:00:2C\tBrittonL\tBritton Lee Inc.\n08:00:2D\tLan-Tec\tLAN-TEC INC.\n08:00:2E\tMetaphor\t\n08:00:2F\tPrimeCom\tPrime Computer\n08:00:30\tCERN\t\n08:00:31\tLittleMa\tLittle Machines Inc.\n08:00:32\tTigan\t\n08:00:33\tBauschLo\tBAUSCH & LOMB\n08:00:34\tFilenet\tFilenet Corporation\n08:00:35\tMicrofiv\tMicrofive Corporation\n08:00:36\tIntergra\tIntergraph\n08:00:37\tFujiXero\tFuji Xerox\n08:00:38\tBull\t\n08:00:39\tSpider\t\n08:00:3A\tOrcatech\tOrcatech Inc.\n08:00:3B\tTorus\t\n08:00:3C\tSchlumbe\tSchlumberger Well Services\n08:00:3D\tCadnetix\t\n08:00:3E\tCodex\tCodex Corporation\n08:00:3F\tFredKosc\tFred Koschara Enterprises\n08:00:40\tFerranti\tFerranti Computer Sys. Limited\n08:00:41\tRacal-Mi\tRACAL-MILGO INFORMATION SYS..\n08:00:42\tJapanMac\tJapan Macnics Corp.\n08:00:43\tPixelCom\tPixel Computer Inc.\n08:00:44\tDsiDavid\tDSI (DAVID Systems, Inc.)\n08:00:45\tConcurre\tConcurrent Computer Corp.\n08:00:46\tSony\t\n08:00:47\tSequent\t\n08:00:48\tEurother\tEurotherm Gauging Systems\n08:00:49\tUnivatio\tUnivation\n08:00:4A\tBanyan\tBanyan Systems Inc.\n08:00:4B\tPlanning\tPlanning Research Corp.\n08:00:4C\tHydraCom\tHydra Computer Systems Inc.\n08:00:4D\tCorvus\tCorvus Systems Inc.\n08:00:4E\t3comEuro\t3COM EUROPE LTD\n08:00:4F\tCygnet\tCygnet Systems\n08:00:50\tDaisy\tDaisy Systems Corp.\n08:00:51\tExperdat\tExperdata\n08:00:52\tInsystec\t\n08:00:53\tMiddleEa\tMiddle East Tech. University\n08:00:55\tStanford\tStanford Telecomm. Inc.\n08:00:56\tStanford\tStanford University\n08:00:57\tEvansSut\tEvans & Sutherland (?)\n08:00:58\tConcepts\tSystems Concepts\n08:00:59\tMycron\tA/S MYCRON\n08:00:5A\tIbm\tIBM Corp\n08:00:5B\tVtaTechn\tVta Technologies Inc.\n08:00:5C\tFourPhas\tFour Phase Systems\n08:00:5D\tGould\tGould Inc.\n08:00:5E\tCounterp\tCounterpoint Computer Inc.\n08:00:5F\tSaberTec\tSaber Technology Corp.\n08:00:60\tIndustri\tIndustrial Networking Inc.\n08:00:61\tJarogate\tJarogate Ltd.\n08:00:62\tGeneralD\tGeneral Dynamics\n08:00:63\tPlessey\t\n08:00:64\tSitasys\tSitasys AG\n08:00:65\tGenrad\tGenrad Inc.\n08:00:66\tAgfaPrin\tAGFA\n08:00:67\tComdesig\tComdesign\n08:00:68\tRidge\t\n08:00:69\tSGI\t\n08:00:6A\tAttst?\t\n08:00:6B\tAccelTec\tAccel Technologies Inc.\n08:00:6C\tSuntekTe\tSUNTEK TECHNOLOGY INT'L\n08:00:6D\tWhitecha\tWhitechapel Computer Works\n08:00:6E\tExcelan\t\n08:00:6F\tPhilipsA\tPhilips Apeldoorn B.V.\n08:00:70\tMitsubis\tMitsubishi\n08:00:71\tMatraDsi\tMATRA (DSIE)\n08:00:72\tXeroxUni\tXerox Corp Univ Grant Program\n08:00:73\tTecmar\tTecmar Inc.\n08:00:74\tCasio\t\n08:00:75\tDdeDanis\tDDE (Danish Data Elektronik A/S)\n08:00:76\tPcLanTec\tPc Lan Technologies\n08:00:77\tTslNowRe\tTSL (now Retix)\n08:00:78\tAccell\tAccell Corporation\n08:00:79\tDroidWor\tThe Droid Works\n08:00:7A\tIndata\t\n08:00:7B\tSanyoEle\tSanyo Electric Co. Ltd.\n08:00:7C\tVitalink\tVitalink\n08:00:7E\tAmalgama\tAMALGAMATED WIRELESS(AUS) LTD\n08:00:7F\tCarnegie\tCARNEGIE-MELLON UNIVERSITY\n08:00:80\tAesData\tAes Data Inc.\n08:00:81\tCrosfiel\tCrosfield Electronics\n08:00:82\tVeritasS\tVeritas Software\n08:00:83\tSeikoDen\tSeiko Denshi\n08:00:84\tTomenEle\tTomen Electronics Corp.\n08:00:85\tElxsi\t\n08:00:86\tImagen/Q\tImagen/QMS [Now Konica Minolta]\n08:00:87\tXyplexTe\tXyplex\n08:00:88\tBrocadeC\tBrocade Communications Systems, Inc.\n08:00:89\tKinetics\tKinetics\n08:00:8A\tPerftech\tPerfTech, Inc.\n08:00:8B\tPyramid\t\n08:00:8C\tNetworkR\tNetwork Research Corporation\n08:00:8D\tXyvision\tXyVision\n08:00:8E\tTandem/S\tTandem / Solbourne Computer ?\n08:00:8F\tChipcom\t\n08:00:90\tSonoma\tSonoma Systems\n08:01:0F\tSichuanT\tSichuan Tianyi Comheart Telecomco.,Ltd\n08:02:8E\tNetgear\t\n08:03:71\tKrgCorpo\tKrg Corporate\n08:05:81\tRoku\tRoku, Inc.\n08:05:CD\tDongguan\tDongGuang EnMai Electronic Product Co.Ltd.\n08:08:C2\tSamsungE\tSamsung Electronics Co.,Ltd\n08:08:EA\tAmsc\t\n08:09:B6\tMasimo\tMasimo Corp\n08:0A:4E\tPlanetBi\tPlanet Bingo® — 3rd Rock Gaming®\n08:0C:0B\tSysmikDr\tSysMik GmbH Dresden\n08:0C:C9\tMissionT\tMission Technology Group, dba Magma\n08:0D:84\tGeco\tGECO, Inc.\n08:0E:A8\tVelexSRL\tVelex s.r.l.\n08:0F:FA\tKsp\tKsp Inc.\n08:11:5E\tBitel\tBitel Co., Ltd.\n08:11:96\tIntelCor\tIntel Corporate\n08:14:43\tUnibrain\tUnibrain S.A.\n08:15:2F\tSamsungE\tSamsung Electronics Co., Ltd. ARTIK\n08:16:51\tShenzhen\tShenzhen Sea Star Technology Co.,Ltd\n08:17:35\tCisco\tCisco Systems, Inc\n08:17:F4\tIbm\tIBM Corp\n08:18:1A\tZte\tzte corporation\n08:18:4C\tASThomas\tA. S. Thomas, Inc.\n08:19:A6\tHuaweiTe\tHuawei Technologies Co.,Ltd\n08:1D:C4\tThermoFi\tThermo Fisher Scientific Messtechnik GmbH\n08:1D:FB\tShanghai\tShanghai Mexon Communication Technology Co.,Ltd\n08:1F:3F\tWondalin\tWondaLink Inc.\n08:1F:71\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n08:1F:EB\tBincube\t\n08:1F:F3\tCisco\tCisco Systems, Inc\n08:21:EF\tSamsungE\tSamsung Electronics Co.,Ltd\n08:23:B2\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n08:25:22\tAdvansee\t\n08:25:25\tXiaomiCo\tXiaomi Communications Co Ltd\n08:27:19\tApsSyste\tAPS systems/electronic AG\n08:27:CE\tNaganoKe\tNagano Keiki Co., Ltd.\n08:2A:D0\tSrdInnov\tSRD Innovations Inc.\n08:2C:B0\tNetworkI\tNetwork Instruments\n08:2E:5F\tHewlettP\tHewlett Packard\n08:30:6B\tPaloAlto\tPalo Alto Networks\n08:35:71\tCaswell\tCASwell INC.\n08:35:B2\tCoreedge\tCoreEdge Networks Co., Ltd\n08:37:3D\tSamsungE\tSamsung Electronics Co.,Ltd\n08:37:9C\tTopaz\tTopaz Co. LTD.\n08:38:A5\tFunkwerk\tFunkwerk plettac electronic GmbH\n08:3A:5C\tJunilab\tJunilab, Inc.\n08:3A:B8\tShinodaP\tShinoda Plasma Co., Ltd.\n08:3D:88\tSamsungE\tSamsung Electronics Co.,Ltd\n08:3E:0C\tArrisGro\tARRIS Group, Inc.\n08:3E:5D\tSagemcom\tSagemcom Broadband SAS\n08:3E:8E\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n08:3F:3E\tWsh\tWSH GmbH\n08:3F:76\tIntellia\tIntellian Technologies, Inc.\n08:3F:BC\tZte\tzte corporation\n08:40:27\tGridstor\tGridstore Inc.\n08:40:F3\tTendaTec\tTenda Technology Co.,Ltd.Dongguan branch\n08:46:56\tVeo-Labs\t\n08:47:D0\tNokiaSha\tNokia Shanghai Bell Co. Ltd.）\n08:48:2C\tRaycoreT\tRaycore Taiwan Co., LTD.\n08:4A:CF\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n08:4E:1C\tH2aLlc\tH2A Systems, LLC\n08:4E:BF\tBroadNet\tBroad Net Mux Corporation\n08:51:14\tQingdaoT\tQingdao Topscomm Communication Co., Ltd\n08:51:2E\tOrionDia\tOrion Diagnostica Oy\n08:52:40\tEbvElekt\tEbV Elektronikbau- und Vertriebs GmbH\n08:57:00\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n08:5A:E0\tRecovisi\tRecovision Technology Co., Ltd.\n08:5B:0E\tFortinet\tFortinet, Inc.\n08:5B:DA\tClinicar\tCliniCare LTD\n08:5D:DD\tMercury\tMercury Corporation\n08:60:6E\tAsustekC\tASUSTek COMPUTER INC.\n08:62:66\tAsustekC\tASUSTek COMPUTER INC.\n08:63:61\tHuaweiTe\tHuawei Technologies Co.,Ltd\n08:66:1F\tPaloAlto\tPalo Alto Networks\n08:66:98\tApple\tApple, Inc.\n08:67:4E\tHisenseB\tHisense broadband multimedia technology Co.,Ltd\n08:68:D0\tJapanSys\tJapan System Design\n08:68:EA\tEitoElec\tEito Electronics Co., Ltd.\n08:6A:0A\tAskeyCom\tAskey Computer Corp\n08:6D:41\tApple\tApple, Inc.\n08:6D:F2\tShenzhen\tShenzhen MIMOWAVE Technology Co.,Ltd\n08:70:45\tApple\tApple, Inc.\n08:74:02\tApple\tApple, Inc.\n08:74:F6\tWinterha\tWinterhalter Gastronom GmbH\n08:75:72\tObeluxOy\tObelux Oy\n08:76:18\tVieTechn\tViE Technologies Sdn. Bhd.\n08:76:95\tAutoIndu\tAuto Industrial Co., Ltd.\n08:76:FF\tThomsonT\tThomson Telecom Belgium\n08:78:08\tSamsungE\tSamsung Electronics Co.,Ltd\n08:79:99\tAim\tAIM GmbH\n08:7A:4C\tHuaweiTe\tHuawei Technologies Co.,Ltd\n08:7B:AA\tSvyazkom\tSvyazkomplektservice, Llc\n08:7C:BE\tQuintic\tQuintic Corp.\n08:7D:21\tAltasecT\tAltasec technology corporation\n08:80:39\tCiscoSpv\tCisco SPVTG\n08:81:BC\tHongkong\tHongKong Ipro Technology Co., Limited\n08:81:F4\tJuniperN\tJuniper Networks\n08:84:66\tNovartis\tNovartis Pharma AG\n08:86:20\tTecnoMob\tTecno Mobile Limited\n08:86:3B\tBelkinIn\tBelkin International Inc.\n08:8C:2C\tSamsungE\tSamsung Electronics Co.,Ltd\n08:8D:C8\tRyowaEle\tRyowa Electronics Co.,Ltd\n08:8E:4F\tSfSoftwa\tSF Software Solutions\n08:8F:2C\tHillsSou\tHills Sound Vision & Lighting\n08:90:BA\tDanlaw\tDanlaw Inc\n08:94:EF\tWistronI\tWistron Infocomm (Zhongshan) Corporation\n08:95:2A\tTechnico\tTechnicolor CH USA Inc.\n08:96:AD\tCisco\tCisco Systems, Inc\n08:96:D7\tAvm\tAVM GmbH\n08:97:34\tHewlettP\tHewlett Packard Enterprise\n08:97:58\tShenzhen\tShenzhen Strong Rising Electronics Co.,Ltd DongGuan Subsidiary\n08:9B:4B\tIkuaiNet\tiKuai Networks\n08:9E:01\tQuantaCo\tQuanta Computer Inc.\n08:9E:08\tGoogle\tGoogle, Inc.\n08:9F:97\tLeroyAut\tLeroy Automation\n08:A1:2B\tShenzhen\tShenZhen EZL Technology Co., Ltd\n08:A5:C8\tSunnovoI\tSunnovo International Limited\n08:A8:A1\tCyclotro\tCyclotronics Power Concepts, Inc\n08:A9:5A\tAzurewav\tAzureWave Technology Inc.\n08:AC:A5\tBenuVide\tBenu Video, Inc.\n08:AE:D6\tSamsungE\tSamsung Electronics Co.,Ltd\n08:AF:78\tTotusSol\tTotus Solutions, Inc.\n08:B2:58\tJuniperN\tJuniper Networks\n08:B2:A3\tCynnyIta\tCynny Italia S.r.L.\n08:B4:CF\tAbicomIn\tAbicom International\n08:B7:38\tLite-OnT\tLite-On Technogy Corp.\n08:B7:EC\tWireless\tWireless Seismic\n08:BA:22\tSwaive\tSwaive Corporation\n08:BA:5F\tQingdaoH\tQingdao Hisense Electronics Co.,Ltd.\n08:BB:CC\tAk-NordE\tAK-NORD EDV VERTRIEBSGES. mbH\n08:BC:20\tHangzhou\tHangzhou Royal Cloud Technology Co., Ltd\n08:BD:43\tNetgear\t\n08:BE:09\tAstrolEl\tAstrol Electronic AG\n08:BE:77\tGreenEle\tGreen Electronics\n08:BE:AC\tEdimaxTe\tEdimax Technology Co. Ltd.\n08:C0:21\tHuaweiTe\tHuawei Technologies Co.,Ltd\n08:C5:E1\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\n08:C6:B3\tQtechLlc\tQtech Llc\n08:CA:45\tToyouFei\tToyou Feiji Electronics Co., Ltd.\n08:CC:68\tCisco\tCisco Systems, Inc\n08:CC:A7\tCisco\tCisco Systems, Inc\n08:CD:9B\tSamtecAu\tsamtec automotive electronics & software GmbH\n08:D0:9F\tCisco\tCisco Systems, Inc\n08:D0:B7\tQingdaoH\tQingdao Hisense Communications Co.,Ltd.\n08:D2:9A\tProforma\tProformatique\n08:D3:4B\tTechmanE\tTechman Electronics (Changshu) Co., Ltd.\n08:D4:0C\tIntelCor\tIntel Corporate\n08:D4:2B\tSamsungE\tSamsung Electronics Co.,Ltd\n08:D4:6A\tLgElectr\tLG Electronics (Mobile Communications)\n08:D5:9D\tSagemcom\tSagemcom Broadband SAS\n08:D5:C0\tSeersTec\tSeers Technology Co., Ltd\n08:D8:33\tShenzhen\tShenzhen RF Technology Co., Ltd\n08:DF:1F\tBose\tBose Corporation\n08:DF:CB\tSystrome\tSystrome Networks\n08:E5:DA\tNanjingF\tNanjing Fujitsu Computer Products Co.,Ltd.\n08:E6:72\tJebseeEl\tJebsee Electronics Co.,Ltd.\n08:E6:89\tApple\tApple, Inc.\n08:E8:4F\tHuaweiTe\tHuawei Technologies Co.,Ltd\n08:EA:40\tShenzhen\tSHENZHEN BILIAN ELECTRONIC CO.，LTD\n08:EA:44\tAerohive\tAerohive Networks Inc.\n08:EB:29\tJiangsuH\tJiangsu Huitong Group Co.,Ltd.\n08:EB:74\tHumax\tHUMAX Co., Ltd.\n08:EB:ED\tWorldEli\tWorld Elite Technology Co.,LTD\n08:EC:A9\tSamsungE\tSamsung Electronics Co.,Ltd\n08:ED:02\tIeeeRegi\tIEEE Registration Authority\n08:ED:02:00:00:00/28\tD2slink\tD2SLink Systems\n08:ED:02:10:00:00/28\tImperx\tImperx, Inc\n08:ED:02:20:00:00/28\tTesTouch\tTES Touch Embedded Solutions Inc.\n08:ED:02:30:00:00/28\tJiangsuL\tJiangsu Logread Network Technology Co., LTD.\n08:ED:02:40:00:00/28\tFio\tFio Corporation\n08:ED:02:50:00:00/28\tVigitron\tVigitron Inc.\n08:ED:02:60:00:00/28\tSangoEle\tSango Electronics Co\n08:ED:02:70:00:00/28\tElevenEn\tEleven Engineering Incorporated\n08:ED:02:80:00:00/28\tHantas\tHantas Co., Ltd.\n08:ED:02:90:00:00/28\tSavoxCom\tSavox Communications\n08:ED:02:A0:00:00/28\tVictiana\tVictiana SRL\n08:ED:02:B0:00:00/28\tSzokEner\tSzok Energy and Communication Co., Ltd.\n08:ED:02:C0:00:00/28\tGuardRfi\tGuard RFID Solutions\n08:ED:02:D0:00:00/28\tOrigamiE\tOrigami Energy Ltd\n08:ED:02:E0:00:00/28\tTelstra\tTelstra Corporation Limited\n08:ED:B9\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n08:EE:8B\tSamsungE\tSamsung Electronics Co.,Ltd\n08:EF:3B\tMcsLogic\tMCS Logic Inc.\n08:EF:AB\tSaymeWir\tSayme Wireless Sensor Network\n08:F1:B7\tTowerstr\tTowerstream Corpration\n08:F2:F4\tNetOnePa\tNet One Partners Co.,Ltd.\n08:F4:AB\tApple\tApple, Inc.\n08:F6:9C\tApple\tApple, Inc.\n08:F6:F8\tGetEngin\tGET Engineering\n08:F7:28\tGloboMul\tGLOBO Multimedia Sp. z o.o. Sp.k.\n08:FA:E0\tFohhnAud\tFohhn Audio AG\n08:FC:52\tOpenxsBv\tOpenXS BV\n08:FC:88\tSamsungE\tSamsung Electronics Co.,Ltd\n08:FD:0E\tSamsungE\tSamsung Electronics Co.,Ltd\n09:00:6A\tAT&T\t\n0A:87:36\tIeee1901\tIEEE 1901 Working Group\n0A:E4:71\tCaterpil\tCaterpillar Inc.\n0C:01:DB\tInfinixM\tInfinix mobility limited\n0C:02:27\tTechnico\tTechnicolor CH USA Inc.\n0C:04:00\tJantarDO\tJantar d.o.o.\n0C:05:35\tJuniper\tJuniper Systems\n0C:08:B4\tHumax\tHUMAX Co., Ltd.\n0C:11:05\tRingslin\tRingslink (Xiamen) Network Communication Technologies Co., Ltd\n0C:11:67\tCisco\tCisco Systems, Inc\n0C:12:62\tZte\tzte corporation\n0C:13:0B\tUniqoteq\tUniqoteq Ltd.\n0C:14:20\tSamsungE\tSamsung Electronics Co.,Ltd\n0C:15:39\tApple\tApple, Inc.\n0C:15:C5\tSdtec\tSDTEC Co., Ltd.\n0C:17:F1\tTelecsys\t\n0C:19:1F\tInformEl\tInform Electronik\n0C:1A:10\tAcoustic\tAcoustic Stream\n0C:1C:19\tLongconn\tLONGCONN ELECTRONICS(SHENZHEN) CO.,LTD\n0C:1C:20\tKakao\tKakao Corp\n0C:1C:57\tTexasIns\tTexas Instruments\n0C:1D:AF\tXiaomiCo\tXiaomi Communications Co Ltd\n0C:1D:C2\tSeahNetw\tSeAH Networks\n0C:20:26\tNoaxTech\tnoax Technologies AG\n0C:21:38\tHengstle\tHengstler GmbH\n0C:23:69\tHoneywel\tHoneywell SPS\n0C:25:76\tLongchee\tLongcheer Telecommunication Limited\n0C:27:24\tCisco\tCisco Systems, Inc\n0C:27:55\tValuable\tValuable Techologies Limited\n0C:2A:69\tElectric\telectric imp, incorporated\n0C:2A:86\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n0C:2A:E7\tBeijingG\tBeijing General Research Institute of Mining and Metallurgy\n0C:2C:54\tHuaweiTe\tHuawei Technologies Co.,Ltd\n0C:2D:89\tQiiqComm\tQiiQ Communications Inc.\n0C:30:21\tApple\tApple, Inc.\n0C:37:47\tZte\tzte corporation\n0C:37:DC\tHuaweiTe\tHuawei Technologies Co.,Ltd\n0C:38:3E\tFanvilTe\tFanvil Technology Co., Ltd.\n0C:39:56\tObservat\tObservator instruments\n0C:3C:65\tDomeImag\tDome Imaging Inc\n0C:3C:CD\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\n0C:3E:9F\tApple\tApple, Inc.\n0C:41:01\tRuichiAu\tRuichi Auto Technology (Guangzhou) Co., Ltd.\n0C:41:3E\tMicrosof\tMicrosoft Corporation\n0C:41:E9\tHuaweiTe\tHuawei Technologies Co.,Ltd\n0C:45:BA\tHuaweiTe\tHuawei Technologies Co.,Ltd\n0C:46:9D\tMsSedco\tMS Sedco\n0C:47:3D\tHitronTe\tHitron Technologies. Inc\n0C:47:C9\tAmazonTe\tAmazon Technologies Inc.\n0C:48:85\tLgElectr\tLG Electronics (Mobile Communications)\n0C:49:33\tSichuanJ\tSichuan Jiuzhou Electronic Technology Co., Ltd.\n0C:4B:54\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n0C:4C:39\tMitrasta\tMitraStar Technology Corp.\n0C:4D:E9\tApple\tApple, Inc.\n0C:4F:5A\tAsa-RtSR\tASA-RT s.r.l.\n0C:51:01\tApple\tApple, Inc.\n0C:51:F7\tChauvinA\tChauvin Arnoux\n0C:52:03\tAgmGroup\tAgm Group Limited\n0C:53:31\tEthZuric\tETH Zurich\n0C:54:15\tIntelCor\tIntel Corporate\n0C:54:A5\tPegatron\tPegatron Corporation\n0C:54:B9\tNokia\t\n0C:55:21\tAxiros\tAxiros GmbH\n0C:56:5C\tHybroadV\tHyBroad Vision (Hong Kong) Technology Co Ltd\n0C:57:EB\tMueller\tMueller Systems\n0C:58:42\tDmeMicro\tDME Micro\n0C:5A:19\tAxtionSd\tAxtion Sdn Bhd\n0C:5A:9E\tWi-SunAl\tWi-SUN Alliance\n0C:5C:D8\tDoliElek\tDOLI Elektronik GmbH\n0C:5F:35\tNiagaraV\tNiagara Video Corporation\n0C:60:76\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n0C:61:11\tAndaTech\tAnda Technologies SAC\n0C:61:27\tActionte\tActiontec Electronics, Inc\n0C:61:CF\tTexasIns\tTexas Instruments\n0C:62:A6\tHuiZhouG\tHui Zhou Gaoshengda Technology Co.,LTD\n0C:63:FC\tNanjingS\tNanjing Signway Technology Co., Ltd\n0C:68:03\tCisco\tCisco Systems, Inc\n0C:6A:BC\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n0C:6A:E6\tStanleyS\tStanley Security Solutions\n0C:6E:4F\tPrimevol\tPrimeVOLT Co., Ltd.\n0C:6F:9C\tShawComm\tShaw Communications Inc.\n0C:70:4A\tHuaweiTe\tHuawei Technologies Co.,Ltd\n0C:71:5D\tSamsungE\tSamsung Electronics Co.,Ltd\n0C:72:2C\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n0C:72:D9\tZte\tzte corporation\n0C:73:BE\tDongguan\tDongguan Haimai Electronie Technology Co.,Ltd\n0C:73:EB\tIeeeRegi\tIEEE Registration Authority\n0C:73:EB:00:00:00/28\tGeminiDa\tGemini Data Loggers (UK) Limited\n0C:73:EB:10:00:00/28\tEversecT\tEversec Technology Corporation\n0C:73:EB:20:00:00/28\tDeltapat\tDeltapath, Inc.\n0C:73:EB:30:00:00/28\tTiinlabA\tTiinlab Acoustic Technology (Shenzhen) Co., Ltd.\n0C:73:EB:40:00:00/28\tU-Pass\tU-PASS.CO.,LTD\n0C:73:EB:50:00:00/28\tHustyMSt\tHusty M.Styczen J.Hupert Sp.J.\n0C:73:EB:60:00:00/28\tGreenFox\tGreen Fox Electro AS\n0C:73:EB:70:00:00/28\tDinkleEn\tDinkle Enterprise Co., Ltd.\n0C:73:EB:80:00:00/28\tBeijingM\tBeijing Miiiw Technology Co., Ltd\n0C:73:EB:90:00:00/28\tBeijingL\tBeijing L&S Lancom Platform Tech. Co., Ltd.\n0C:73:EB:A0:00:00/28\tPiInnovo\tPi Innovo LLC\n0C:73:EB:B0:00:00/28\tSynacces\tSynaccess Networks\n0C:73:EB:C0:00:00/28\tShenzhen\tShenzhen Samchung Video Technology Co., Ltd.\n0C:73:EB:D0:00:00/28\tD-Link（S\tD-Link （Shanghai）Limited Corp.\n0C:73:EB:E0:00:00/28\tTaiwanPu\tTaiwan Pulse Motion Co., Ltd.\n0C:74:C2\tApple\tApple, Inc.\n0C:75:12\tShenzhen\tShenzhen Kunlun TongTai Technology  Co.,Ltd.\n0C:75:23\tBeijingG\tBeijing Gehua Catv Network Co.,Ltd\n0C:75:6C\tAnarenMi\tAnaren Microwave, Inc.\n0C:75:BD\tCisco\tCisco Systems, Inc\n0C:77:1A\tApple\tApple, Inc.\n0C:7C:28\tNokia\t\n0C:7D:7C\tKexiangI\tKexiang Information Technology Co, Ltd.\n0C:80:63\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n0C:81:12\tPrivate\t\n0C:82:30\tShenzhen\tShenzhen Magnus Technologies Co.,Ltd\n0C:82:68\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n0C:82:6A\tWuhanHua\tWuhan Huagong Genuine Optics Technology Co., Ltd\n0C:84:11\tAOSmithW\tA.O. Smith Water Products\n0C:84:84\tZenoviaE\tZenovia Electronics Inc.\n0C:84:DC\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n0C:85:25\tCisco\tCisco Systems, Inc\n0C:86:10\tJuniperN\tJuniper Networks\n0C:89:10\tSamsungE\tSamsung Electronics Co.,Ltd\n0C:8A:87\tAglogica\tAgLogica Holdings, Inc\n0C:8B:D3\tItelMobi\tItel Mobile Limited\n0C:8B:FD\tIntelCor\tIntel Corporate\n0C:8C:24\tShenzhen\tSHENZHEN BILIAN ELECTRONIC CO.，LTD\n0C:8C:8F\tKamoTech\tKamo Technology Limited\n0C:8C:DC\tSuuntoOy\tSuunto Oy\n0C:8D:98\tTopEight\tTop Eight Ind Corp\n0C:8D:DB\tCiscoMer\tCisco Meraki\n0C:8F:FF\tHuaweiTe\tHuawei Technologies Co.,Ltd\n0C:91:60\tHuiZhouG\tHui Zhou Gaoshengda Technology Co.,LTD\n0C:92:4E\tRiceLake\tRice Lake Weighing Systems\n0C:93:01\tPtPrasim\tPT. Prasimax Inovasi Teknologi\n0C:93:FB\tBnsSolut\tBNS Solutions\n0C:96:BF\tHuaweiTe\tHuawei Technologies Co.,Ltd\n0C:96:E6\tCloudNet\tCloud Network Technology (Samoa) Limited\n0C:98:38\tXiaomiCo\tXiaomi Communications Co Ltd\n0C:9A:42\tFn-LinkT\tFN-LINK TECHNOLOGY LIMITED\n0C:9B:13\tShanghai\tShanghai Magic Mobile Telecommunication Co.Ltd.\n0C:9D:56\tConsortC\tConsort Controls Ltd\n0C:9D:92\tAsustekC\tASUSTek COMPUTER INC.\n0C:9E:91\tSankosha\tSankosha Corporation\n0C:A1:38\tBlinqWir\tBlinq Wireless Inc.\n0C:A2:F4\tChameleo\tChameleon Technology (UK) Limited\n0C:A4:02\tAlcatel-\tAlcatel-Lucent IPD\n0C:A4:2A\tObTeleco\tOB Telecom Electronic Technology Co., Ltd\n0C:A6:94\tSunitecE\tSunitec Enterprise Co.,Ltd\n0C:A8:A7\tSamsungE\tSamsung Electronics Co.,Ltd\n0C:AC:05\tUnitendT\tUnitend Technologies Inc.\n0C:AE:7D\tTexasIns\tTexas Instruments\n0C:AF:5A\tGenusPow\tGenus Power Infrastructures Limited\n0C:B2:B7\tTexasIns\tTexas Instruments\n0C:B3:19\tSamsungE\tSamsung Electronics Co.,Ltd\n0C:B3:4F\tShenzhen\tShenzhen Xiaoqi Intelligent Technology Co., Ltd.\n0C:B4:59\tMarketec\tMarketech International Corp.\n0C:B4:A4\tXintaiAu\tXintai Automobile Intelligent Network Technology\n0C:B4:EF\tDigience\tDigience Co.,Ltd.\n0C:B5:27\tHuaweiTe\tHuawei Technologies Co.,Ltd\n0C:B5:DE\tAlcatelL\tAlcatel Lucent\n0C:B6:D2\tD-LinkIn\tD-Link International\n0C:B9:12\tJm-Data\tJM-DATA GmbH\n0C:B9:37\tUbeeInte\tUbee Interactive Co., Limited\n0C:BC:9F\tApple\tApple, Inc.\n0C:BD:51\tTctMobil\tTCT mobile ltd\n0C:BF:15\tGenetec\tGenetec Inc.\n0C:BF:3F\tShenzhen\tShenzhen Lencotion Technology Co.,Ltd\n0C:BF:74\tMorseMic\tMorse Micro\n0C:C0:C0\tMagnetiM\tMagneti Marelli Sistemas Electronicos Mexico\n0C:C3:A7\tMeritec\t\n0C:C4:7A\tSuperMic\tSuper Micro Computer, Inc.\n0C:C4:7E\tEucast\tEUCAST Co., Ltd.\n0C:C6:55\tWuxiYste\tWuxi YSTen Technology Co.,Ltd.\n0C:C6:6A\tNokia\tNokia Corporation\n0C:C6:AC\tDags\t\n0C:C6:CC\tHuaweiTe\tHuawei Technologies Co.,Ltd\n0C:C7:31\tCurrant\tCurrant, Inc.\n0C:C8:1F\tSummerIn\tSummer Infant, Inc.\n0C:C9:C6\tSamwinHo\tSamwin Hong Kong Limited\n0C:CB:85\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n0C:CB:8D\tAscoNuma\tASCO Numatics GmbH\n0C:CC:26\tAirenetw\tAirenetworks\n0C:CD:D3\tEastrive\tEastriver Technology Co., Ltd.\n0C:CD:FB\tEdic\tEDIC Systems Inc.\n0C:CE:F6\tGuizhouF\tGuizhou Fortuneship Technology Co., Ltd\n0C:CF:D1\tSpringwa\tSPRINGWAVE Co., Ltd\n0C:D2:92\tIntelCor\tIntel Corporate\n0C:D2:B5\tBinatone\tBinatone Telecommunication Pvt. Ltd\n0C:D5:02\tWestellT\tWestell Technologies Inc.\n0C:D6:96\tAmimon\tAmimon Ltd\n0C:D6:BD\tHuaweiTe\tHuawei Technologies Co.,Ltd\n0C:D7:46\tApple\tApple, Inc.\n0C:D7:C2\tAxiumTec\tAxium Technologies, Inc.\n0C:D8:6C\tShenzhen\tShenzhen Fast Technologies Co.,Ltd\n0C:D9:96\tCisco\tCisco Systems, Inc\n0C:D9:C1\tVisteon\tVisteon Corporation\n0C:DA:41\tHangzhou\tHangzhou H3C Technologies Co., Limited\n0C:DC:CC\tInalaTec\tInala Technologies\n0C:DD:EF\tNokia\tNokia Corporation\n0C:DF:A4\tSamsungE\tSamsung Electronics Co.,Ltd\n0C:E0:DC\tSamsungE\tSamsung Electronics Co.,Ltd\n0C:E0:E4\tPlantron\tPlantronics, Inc.\n0C:E5:D3\tDhElectr\tDH electronics GmbH\n0C:E7:09\tFoxCrypt\tFox Crypto B.V.\n0C:E7:25\tMicrosof\tMicrosoft Corporation\n0C:E8:2F\tBonfigli\tBonfiglioli Vectron GmbH\n0C:E9:36\tElimosSr\tELIMOS srl\n0C:EA:C9\tArrisGro\tARRIS Group, Inc.\n0C:EE:E6\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n0C:EF:7C\tAnacom\tAnaCom Inc\n0C:EF:AF\tIeeeRegi\tIEEE Registration Authority\n0C:EF:AF:00:00:00/28\tKenmore\t\n0C:EF:AF:10:00:00/28\tGoerlitz\tGoerlitz AG\n0C:EF:AF:20:00:00/28\tLumelSA\tLumel S.A.\n0C:EF:AF:30:00:00/28\tEngineer\tEngineering Center ENERGOSERVICE\n0C:EF:AF:40:00:00/28\tSentry36\tSentry360\n0C:EF:AF:50:00:00/28\tPremiumS\tPremium Sa\n0C:EF:AF:60:00:00/28\tFirmware\tFirmware Design AS\n0C:EF:AF:70:00:00/28\tSyntrans\tSyntrans AB\n0C:EF:AF:80:00:00/28\tBsxAthle\tBSX Athletics\n0C:EF:AF:90:00:00/28\tRotel\t\n0C:EF:AF:A0:00:00/28\tChengduJ\tchengdu joyotime Technology Co., Ltd.\n0C:EF:AF:B0:00:00/28\tHubeiCen\tHubei Century Network Technology Co., Ltd\n0C:EF:AF:C0:00:00/28\tGainstro\tGainStrong Industry Co.,Ltd\n0C:EF:AF:D0:00:00/28\tCjsc«Svy\tCJSC «Svyaz Engineering»\n0C:EF:AF:E0:00:00/28\tInfiniso\tInfinisource Inc.\n0C:EF:AF:F0:00:00/28\tPrivate\t\n0C:F0:19\tMalgnTec\tMalgn Technology Co., Ltd.\n0C:F0:B4\tGlobalsa\tGlobalsat International Technology Ltd\n0C:F3:46\tXiaomiCo\tXiaomi Communications Co Ltd\n0C:F3:61\tJavaInfo\tJava Information\n0C:F3:EE\tEmMicroe\tEM Microelectronic\n0C:F4:05\tBeijingS\tBeijing Signalway Technologies Co.,Ltd\n0C:F4:D5\tRuckusWi\tRuckus Wireless\n0C:F5:A4\tCisco\tCisco Systems, Inc\n0C:F8:93\tArrisGro\tARRIS Group, Inc.\n0C:F9:C0\tBskyb\tBSkyB Ltd\n0C:FC:83\tAirohaTe\tAiroha Technology Corp.,\n0C:FD:37\tSuseLinu\tSUSE Linux GmbH\n0C:FE:45\tSonyInte\tSony Interactive Entertainment Inc.\n10:00:00\tPrivate\t\n10:00:5A\tIbm\t\n10:00:90\tHP\t\n10:00:D4\tDEC\t\n10:00:E0\tAppleA/U\tApple A/UX\n10:00:E8\tNational\tNational Semiconductor\n10:00:FD\tLaonpeop\tLaonPeople\n10:01:CA\tAshleyBu\tAshley Butterworth\n10:02:B5\tIntelCor\tIntel Corporate\n10:05:01\tPegatron\tPegatron Corporation\n10:05:B1\tArrisGro\tARRIS Group, Inc.\n10:05:CA\tCisco\tCisco Systems, Inc\n10:07:23\tIeeeRegi\tIEEE Registration Authority\n10:07:23:00:00:00/28\tRipplete\tRippleTek Tech Ltd\n10:07:23:10:00:00/28\tBeijingA\tBeijing Assem Technology Co., ltd\n10:07:23:20:00:00/28\tDiginetC\tDiginet Control Systems Pty Ltd\n10:07:23:30:00:00/28\tTongfang\tTongfang computer co.Ltd.\n10:07:23:40:00:00/28\tAudioEng\tAudio Engineering Ltd.\n10:07:23:50:00:00/28\tBeijingS\tBeijing Sooall Information Technology Co.,Ltd\n10:07:23:60:00:00/28\tEstoneTe\tEstone Technology Inc\n10:07:23:70:00:00/28\tNanotech\tnanoTech Co., Ltd.\n10:07:23:80:00:00/28\tIonProfe\tIon Professional Solutions\n10:07:23:90:00:00/28\tWireless\tWireless input technology Inc.\n10:07:23:A0:00:00/28\tTesseraT\tTessera Technology Inc.\n10:07:23:B0:00:00/28\tFujianQu\tFujian Quanzhou Dong Ang Electronics Co., Ltd.\n10:07:23:C0:00:00/28\tShenzhen\tShenzhen Xinfa Electronic Co.,ltd\n10:07:23:E0:00:00/28\tFirstCha\tFirst Chair Acoustics Co., Ltd.\n10:07:23:F0:00:00/28\tPrivate\t\n10:07:B6\tSamsungE\tSamsung Electronics Co.,Ltd\n10:08:B1\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n10:09:0C\tJanomeSe\tJanome Sewing Machine Co., Ltd.\n10:0B:A9\tIntelCor\tIntel Corporate\n10:0C:24\tPomdevic\tpomdevices, LLC\n10:0D:2F\tOnlineSe\tOnline Security Pty. Ltd.\n10:0D:32\tEmbedian\tEmbedian, Inc.\n10:0D:7F\tNetgear\t\n10:0E:2B\tNecCasio\tNEC CASIO Mobile Communications\n10:0E:7E\tJuniperN\tJuniper Networks\n10:0F:18\tFuGangEl\tFu Gang Electronic(KunShan)CO.,LTD\n10:10:B6\tMccain\tMcCain Inc\n10:12:12\tVivoInte\tVivo International Corporation Pty Ltd\n10:12:18\tKorins\tKorins Inc.\n10:12:48\tItg\tITG, Inc.\n10:12:50\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n10:12:B4\tSichuanT\tSichuan Tianyi Comheart Telecom Co.,Ltd\n10:13:31\tTechnico\tTechnicolor\n10:13:EE\tJustecIn\tJustec International Technology INC.\n10:18:9E\tElmoMoti\tElmo Motion Control\n10:1B:54\tHuaweiTe\tHuawei Technologies Co.,Ltd\n10:1C:0C\tApple\tApple, Inc.\n10:1D:51\t8meshNet\t8Mesh Networks Limited\n10:1D:C0\tSamsungE\tSamsung Electronics Co.,Ltd\n10:1F:74\tHewlettP\tHewlett Packard\n10:22:79\tZerodesk\tZeroDesktop, Inc.\n10:27:BE\tTvip\t\n10:28:31\tMorion\tMorion Inc.\n10:2A:B3\tXiaomiCo\tXiaomi Communications Co Ltd\n10:2C:83\tXimea\t\n10:2D:96\tLooxcie\tLooxcie Inc.\n10:2E:AF\tTexasIns\tTexas Instruments\n10:2F:6B\tMicrosof\tMicrosoft Corporation\n10:30:34\tCara\tCara Systems\n10:30:47\tSamsungE\tSamsung Electronics Co.,Ltd\n10:33:78\tFlectron\tFLECTRON Co., LTD\n10:37:11\tSimlinkA\tSimlink AS\n10:3B:59\tSamsungE\tSamsung Electronics Co.,Ltd\n10:3D:EA\tHfcTechn\tHFC Technology (Beijing) Ltd. Co.\n10:40:F3\tApple\tApple, Inc.\n10:41:7F\tApple\tApple, Inc.\n10:43:69\tSoundmax\tSoundmax Electronic Limited\n10:44:00\tHuaweiTe\tHuawei Technologies Co.,Ltd\n10:44:5A\tShaanxiH\tShaanxi Hitech Electronic Co., LTD\n10:45:BE\tNorphoni\tNorphonic AS\n10:45:F8\tLnt-Auto\tLNT-Automation GmbH\n10:46:B4\tFormeric\tFormericaOE\n10:47:80\tHuaweiTe\tHuawei Technologies Co.,Ltd\n10:48:B1\tBeijingD\tBeijing Duokan Technology Limited\n10:49:63\tHartingK\tHarting K.K.\n10:4A:7D\tIntelCor\tIntel Corporate\n10:4B:46\tMitsubis\tMitsubishi Electric Corporation\n10:4D:77\tInnovati\tInnovative Computer Engineering\n10:4E:07\tShanghai\tShanghai Genvision Industries Co.,Ltd\n10:4E:89\tGarminIn\tGarmin International\n10:4F:A8\tSony\tSony Corporation\n10:51:72\tHuaweiTe\tHuawei Technologies Co.,Ltd\n10:56:11\tArrisGro\tARRIS Group, Inc.\n10:56:CA\tPeplinkI\tPeplink International Ltd.\n10:58:87\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n10:59:17\tTonal\t\n10:5A:F7\tAdbItali\tADB Italia\n10:5B:AD\tMegaWell\tMega Well Limited\n10:5C:3B\tPerma-Pi\tPerma-Pipe, Inc.\n10:5C:BF\tDurobyte\tDuroByte Inc\n10:5F:06\tActionte\tActiontec Electronics, Inc\n10:5F:49\tCiscoSpv\tCisco SPVTG\n10:60:4B\tHewlettP\tHewlett Packard\n10:62:C9\tAdatis\tAdatis GmbH & Co. KG\n10:62:D0\tTechnico\tTechnicolor CH USA Inc.\n10:62:E5\tHewlettP\tHewlett Packard\n10:62:EB\tD-LinkIn\tD-Link International\n10:64:E2\tAdfwebCo\tADFweb.com s.r.l.\n10:65:30\tDell\tDell Inc.\n10:65:A3\tCoreBran\tCore Brands LLC\n10:65:CF\tIqsim\t\n10:66:82\tNecPlatf\tNEC Platforms, Ltd.\n10:68:3F\tLgElectr\tLG Electronics (Mobile Communications)\n10:6F:3F\tBuffalo\tBuffalo.Inc\n10:6F:EF\tAd-SolNi\tAd-Sol Nissin Corp\n10:71:F9\tCloudTel\tCloud Telecomputers, LLC\n10:72:23\tTellesco\tTellescom Industria E Comercio Em Telecomunicacao\n10:76:8A\tEocell\t\n10:77:B0\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n10:77:B1\tSamsungE\tSamsung Electronics Co.,Ltd\n10:78:5B\tActionte\tActiontec Electronics, Inc\n10:78:73\tShenzhen\tShenzhen Jinkeyi Communication Co., Ltd.\n10:78:CE\tHanvitSi\tHanvit SI, Inc.\n10:78:D2\tElitegro\tElitegroup Computer Systems Co.,Ltd.\n10:7A:86\tU&UEngin\tU&U ENGINEERING INC.\n10:7B:44\tAsustekC\tASUSTek COMPUTER INC.\n10:7B:A4\tOliveDov\tOlive & Dove Co.,Ltd.\n10:7B:EF\tZyxelCom\tZyxel Communications Corporation\n10:7D:1A\tDell\tDell Inc.\n10:81:B4\tHunanGre\tHunan Greatwall Galaxy Science and Technology Co.,Ltd.\n10:83:D2\tMicrosev\tMicroseven Systems, LLC\n10:86:8C\tArrisGro\tARRIS Group, Inc.\n10:88:0F\tDarumaTe\tDaruma Telecomunicações e Informática S.A.\n10:88:CE\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n10:8A:1B\tRaonix\tRAONIX Inc.\n10:8C:CF\tCisco\tCisco Systems, Inc\n10:8E:E0\tSamsungE\tSamsung Electronics Co.,Ltd\n10:92:66\tSamsungE\tSamsung Electronics Co.,Ltd\n10:93:E9\tApple\tApple, Inc.\n10:94:BB\tApple\tApple, Inc.\n10:95:4B\tMegabyte\tMegabyte Ltd.\n10:98:36\tDell\tDell Inc.\n10:98:C3\tMurataMa\tMurata Manufacturing Co., Ltd.\n10:9A:B9\tTosiboxO\tTosibox Oy\n10:9A:DD\tApple\tApple, Inc.\n10:9F:A9\tActionte\tActiontec Electronics, Inc\n10:A1:3B\tFujikura\tFujikura Rubber Ltd.\n10:A2:4E\tGold3lin\tGOLD3LINK ELECTRONICS CO., LTD\n10:A4:B9\tBaiduOnl\tBaidu Online Network Technology (Beijing) Co., Ltd\n10:A4:BE\tShenzhen\tSHENZHEN BILIAN ELECTRONIC CO.，LTD\n10:A5:D0\tMurataMa\tMurata Manufacturing Co., Ltd.\n10:A6:59\tMobileCr\tMobile Create Co.,Ltd.\n10:A7:43\tSkMtek\tSK Mtek Limited\n10:A9:32\tBeijingC\tBeijing Cyber Cloud Technology Co. ,Ltd.\n10:AE:60\tPrivate\t\n10:AF:78\tShenzhen\tShenzhen ATUE Technology Co., Ltd\n10:B1:F8\tHuaweiTe\tHuawei Technologies Co.,Ltd\n10:B2:6B\tBase\tbase Co.,Ltd.\n10:B3:6F\tBoweiTec\tBowei Technology Company Limited\n10:B7:13\tPrivate\t\n10:B7:F6\tPlastofo\tPlastoform Industries Ltd.\n10:B9:F7\tNiko-Ser\tNiko-Servodan\n10:B9:FE\tLikaSrl\tLika srl\n10:BA:A5\tGanaI&C\tGANA I&C CO., LTD\n10:BD:18\tCisco\tCisco Systems, Inc\n10:BD:55\tQ-Lab\tQ-Lab Corporation\n10:BE:F5\tD-LinkIn\tD-Link International\n10:BF:48\tAsustekC\tASUSTek COMPUTER INC.\n10:C0:7C\tBlu-RayD\tBlu-ray Disc Association\n10:C1:72\tHuaweiTe\tHuawei Technologies Co.,Ltd\n10:C2:2F\tChinaEnt\tChina Entropy Co., Ltd.\n10:C2:5A\tTechnico\tTechnicolor CH USA Inc.\n10:C2:BA\tUtt\tUTT Co., Ltd.\n10:C3:7B\tAsustekC\tASUSTek COMPUTER INC.\n10:C5:86\tBioSound\tBio Sound Lab Co., Ltd.\n10:C6:0C\tDominoUk\tDomino UK Ltd\n10:C6:1F\tHuaweiTe\tHuawei Technologies Co.,Ltd\n10:C6:7E\tShenzhen\tShenzhen Juchin Technology Co., Ltd\n10:C6:FC\tGarminIn\tGarmin International\n10:C7:3F\tMidasKla\tMidas Klark Teknik Ltd\n10:C7:53\tQingdaoI\tQingdao Intelligent&Precise Electronics Co.,Ltd.\n10:CA:81\tPrecia\t\n10:CC:1B\tLiverock\tLiverock technologies,INC\n10:CC:DB\tAximumPr\tAximum Produits Electroniques\n10:CD:6E\tFisys\t\n10:CD:AE\tAvaya\tAvaya Inc\n10:CD:B6\tEssentia\tEssential Products, Inc.\n10:CE:A9\tTexasIns\tTexas Instruments\n10:D0:7A\tAmpakTec\tAMPAK Technology, Inc.\n10:D0:AB\tZte\tzte corporation\n10:D1:DC\tInstarDe\tINSTAR Deutschland GmbH\n10:D3:8A\tSamsungE\tSamsung Electronics Co.,Ltd\n10:D5:42\tSamsungE\tSamsung Electronics Co.,Ltd\n10:DA:43\tNetgear\t\n10:DD:B1\tApple\tApple, Inc.\n10:DD:F4\tMaxwayEl\tMaxway Electronics CO.,LTD\n10:DE:E4\tAutomati\tautomationNEXT GmbH\n10:DF:8B\tShenzhen\tShenzhen CareDear Communication Technology Co.,Ltd\n10:DF:FC\tSiemens\tSiemens AG\n10:E2:D5\tQiHardwa\tQi Hardware Inc.\n10:E3:C7\tSeohwaTe\tSeohwa Telecom\n10:E4:AF\tAprLlc\tApr, Llc\n10:E6:8F\tKwangsun\tKwangsung Electronics Korea Co.,Ltd.\n10:E6:AE\tSourceTe\tSource Technologies, LLC\n10:E7:C6\tHewlettP\tHewlett Packard\n10:E8:78\tNokia\t\n10:E8:EE\tPhasespa\tPhaseSpace\n10:EA:59\tCiscoSpv\tCisco SPVTG\n10:EE:D9\tCanogaPe\tCanoga Perkins Corporation\n10:F0:05\tIntelCor\tIntel Corporate\n10:F1:63\tTnk\tTnk Co.,Ltd\n10:F1:F2\tLgElectr\tLG Electronics (Mobile Communications)\n10:F3:11\tCisco\tCisco Systems, Inc\n10:F3:DB\tGridco\tGridco Systems, Inc.\n10:F4:9A\tT3Innova\tT3 Innovation\n10:F6:81\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n10:F9:6F\tLgElectr\tLG Electronics (Mobile Communications)\n10:F9:EB\tIndustri\tIndustria Fueguina de Relojería Electrónica s.a.\n10:F9:EE\tNokia\tNokia Corporation\n10:FA:CE\tReacheng\tReacheng Communication Technology Co.,Ltd\n10:FB:F0\tKangshen\tKangSheng LTD.\n10:FC:54\tShanyEle\tShany Electronic Co., Ltd.\n10:FC:B6\tMirusyst\tmirusystems CO.,LTD\n10:FE:ED\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n11:00:AA\tPrivate\t\n11:11:11\tPrivate\t\n14:02:EC\tHewlettP\tHewlett Packard Enterprise\n14:04:67\tSnkTechn\tSNK Technologies Co.,Ltd.\n14:07:08\tPrivate\t\n14:07:E0\tAbrantix\tAbrantix AG\n14:09:DC\tHuaweiTe\tHuawei Technologies Co.,Ltd\n14:0C:5B\tPlnetwor\tPLNetworks\n14:0C:76\tFreeboxS\tFreebox Sas\n14:0D:4F\tFlextron\tFlextronics International\n14:10:9F\tApple\tApple, Inc.\n14:11:14\tTecnoMob\tTecno Mobile Limited\n14:13:30\tAnakreon\tAnakreon UK LLP\n14:13:57\tAtpElect\tATP Electronics, Inc.\n14:14:4B\tRuijieNe\tRuijie Networks Co.,LTD\n14:14:E6\tNingboSa\tNingbo Sanhe Digital Co.,Ltd\n14:15:7C\tTokyoCos\tTokyo Cosmos Electric Co.,Ltd.\n14:16:9E\tWingtech\tWingtech Group (HongKong）Limited\n14:18:77\tDell\tDell Inc.\n14:1A:51\tTreetech\tTreetech Sistemas Digitais\n14:1A:A3\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n14:1B:BD\tVolex\tVolex Inc.\n14:1B:F0\tIntellim\tIntellimedia Systems Ltd\n14:1F:78\tSamsungE\tSamsung Electronics Co.,Ltd\n14:1F:BA\tIeeeRegi\tIEEE Registration Authority\n14:1F:BA:00:00:00/28\tShenzhen\tShenzhen Mining Technology Co.,Ltd.\n14:1F:BA:10:00:00/28\tGloquad\t\n14:1F:BA:20:00:00/28\tDeutsche\tDeutsche Energieversorgung GmbH\n14:1F:BA:30:00:00/28\tPrivate\t\n14:1F:BA:40:00:00/28\tByzero\t\n14:1F:BA:50:00:00/28\tInttelix\tInttelix Brasil Tecnologia e Sistemas Ltda\n14:1F:BA:60:00:00/28\tThalesCo\tThales Communications & Security SAS\n14:1F:BA:70:00:00/28\tWisnetwo\tWisnetworks Technologies Co., Ltd.\n14:1F:BA:80:00:00/28\tShenzhen\tShenzhen CATIC Information Technology Industry Co.,Ltd\n14:1F:BA:90:00:00/28\tBlackMot\tBlack Moth Technologies\n14:1F:BA:A0:00:00/28\tWinsonic\tWinsonic Electronics Co., Ltd.\n14:1F:BA:B0:00:00/28\tNewingsC\tNewings Communication CO., LTD.\n14:1F:BA:C0:00:00/28\tSwissEle\tSwiss Electronic (Shenzhen) Co., Ltd\n14:1F:BA:D0:00:00/28\tAjisDali\tAJIS(DALIAN)co.,LTD\n14:1F:BA:E0:00:00/28\tPosSyste\tPOS Systema LLC\n14:1F:BA:F0:00:00/28\tPrivate\t\n14:20:5E\tApple\tApple, Inc.\n14:22:33\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n14:22:DB\tEero\teero inc.\n14:23:D7\tEutronix\tEutronix Co., Ltd.\n14:28:82\tMidicomE\tMidicom Electronics Co.Ltd\n14:29:71\tNemoaEle\tNEMOA ELECTRONICS (HK) CO. LTD\n14:2B:D2\tArmtel\tArmtel Ltd.\n14:2B:D6\tGuangdon\tGuangdong Appscomm Co.,Ltd\n14:2D:27\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n14:2D:8B\tIncipioT\tIncipio Technologies, Inc\n14:2D:F5\tAmphitec\tAmphitech\n14:2F:FD\tLtSecuri\tLt Security Inc\n14:30:04\tHuaweiTe\tHuawei Technologies Co.,Ltd\n14:30:7A\tAvermetr\tAvermetrics\n14:30:C6\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n14:32:D1\tSamsungE\tSamsung Electronics Co.,Ltd\n14:33:65\tTemMobil\tTEM Mobile Limited\n14:35:8B\tMediabri\tMediabridge Products, LLC.\n14:35:B3\tFutureDe\tFuture Designs, Inc.\n14:36:05\tNokia\tNokia Corporation\n14:36:C6\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\n14:37:19\tPtPrakar\tPT Prakarsa Visi Valutama\n14:37:3B\tProcom\tPROCOM Systems\n14:3A:EA\tDynapowe\tDynapower Company LLC\n14:3D:F2\tBeijingS\tBeijing Shidai Hongyuan Network Communication Co.,Ltd\n14:3E:60\tNokia\t\n14:3E:BF\tZte\tzte corporation\n14:3F:27\tNoccelaO\tNoccela Oy\n14:41:46\tHoneywel\tHoneywell (China) Co., LTD\n14:41:E2\tMonacoEn\tMonaco Enterprises, Inc.\n14:43:19\tCreative\tCreative&Link Technology Limited\n14:44:4A\tApolloSe\tApollo Seiko Ltd.\n14:46:E4\tAvistel\t\n14:48:02\tYeolrim\tTHE YEOLRIM Co.,Ltd.\n14:48:8B\tShenzhen\tShenzhen Doov Technology Co.,Ltd\n14:49:78\tDigitalC\tDigital Control Incorporated\n14:49:E0\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\n14:4C:1A\tMaxCommu\tMax Communication GmbH\n14:4D:67\tZioncomE\tZioncom Electronics (Shenzhen) Ltd.\n14:4E:34\tRemoteSo\tRemote Solution\n14:4F:8A\tIntelCor\tIntel Corporate\n14:4F:D7\tIeeeRegi\tIEEE Registration Authority\n14:4F:D7:00:00:00/28\tAnnapurn\tannapurnalabs\n14:4F:D7:10:00:00/28\tZehnderG\tZehnder Group AG\n14:4F:D7:20:00:00/28\tFedexSer\tFedEx Services OTI\n14:4F:D7:30:00:00/28\tQingdaoW\tQingdao Wodatong Electronics Co., Ltd.\n14:4F:D7:40:00:00/28\tRedTechn\tRed Technology Limited\n14:4F:D7:50:00:00/28\tFlsFinla\tFls Finland Oy\n14:4F:D7:60:00:00/28\tI-Sens\ti-SENS, Inc.\n14:4F:D7:70:00:00/28\tShenzhen\tShenzhen V-Streaming Technology Co., Ltd.\n14:4F:D7:80:00:00/28\tNportNet\tNPort Networks Inc.,\n14:4F:D7:90:00:00/28\tEmersonN\tEmerson Network Power (India) Pvt. Ltd.\n14:4F:D7:A0:00:00/28\tUnirobot\tUnirobot Corporation\n14:4F:D7:B0:00:00/28\tArkus-St\tArkus-ST Ltd\n14:4F:D7:C0:00:00/28\tD&SCable\tD&S Cable Industries (HK) Limited\n14:4F:D7:D0:00:00/28\tShanghai\tShanghai B&A Technology Co., Ltd\n14:4F:D7:E0:00:00/28\tEdanInst\tEdan Instruments, Inc.\n14:54:12\tEntis\tEntis Co., Ltd.\n14:56:45\tSavitech\tSavitech Corp.\n14:56:8E\tSamsungE\tSamsung Electronics Co.,Ltd\n14:57:9F\tHuaweiTe\tHuawei Technologies Co.,Ltd\n14:58:D0\tHewlettP\tHewlett Packard\n14:59:C0\tNetgear\t\n14:5A:05\tApple\tApple, Inc.\n14:5A:83\tLogi-D\tLogi-D inc\n14:5B:D1\tArrisGro\tARRIS Group, Inc.\n14:5B:E1\tNyantec\tnyantec GmbH\n14:5E:45\tKaleao\tKaleao Limited\n14:5F:94\tHuaweiTe\tHuawei Technologies Co.,Ltd\n14:60:80\tZte\tzte corporation\n14:61:02\tAlpineEl\tAlpine Electronics, Inc.\n14:61:2F\tAvaya\tAvaya Inc\n14:63:08\tJabilCir\tJABIL CIRCUIT (SHANGHAI) LTD.\n14:69:A2\tSichuanT\tSichuan Tianyi Comheart Telecom Co.,Ltd\n14:6A:0B\tCypressE\tCypress Electronics Limited\n14:6B:72\tShenzhen\tShenzhen Fortune Ship Technology Co., Ltd.\n14:6B:9C\tShenzhen\tSHENZHEN BILIAN ELECTRONIC CO.，LTD\n14:6E:0A\tPrivate\t\n14:73:73\tTubitakU\tTubitak Uekae\n14:74:11\tRim\t\n14:75:90\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n14:78:0B\tVarexIma\tVarex Imaging Deutschland AG\n14:79:F3\tChinaMob\tChina Mobile Group Device Co.,Ltd.\n14:7D:B3\tJoaTelec\tJoa Telecom.Co.,Ltd\n14:7D:C5\tMurataMa\tMurata Manufacturing Co., Ltd.\n14:82:5B\tHefeiRad\tHefei Radio Communication Technology Co., Ltd\n14:86:92\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n14:89:3E\tVixtelTe\tVixtel Technologies Limted\n14:89:51\tLcfcHefe\tLCFC(HeFei) Electronics Technology co., ltd\n14:89:FD\tSamsungE\tSamsung Electronics Co.,Ltd\n14:8A:70\tAds\tADS GmbH\n14:8F:21\tGarminIn\tGarmin International\n14:8F:C6\tApple\tApple, Inc.\n14:90:90\tKongtopI\tKongTop industrial(shen zhen)CO.,LTD\n14:91:82\tBelkinIn\tBelkin International Inc.\n14:93:46\tPniSenso\tPNI sensor corporation\n14:94:2F\tUsys\tUsys Co.,Ltd.\n14:94:48\tBluCastl\tBlu Castle S.A.\n14:96:E5\tSamsungE\tSamsung Electronics Co.,Ltd\n14:98:7D\tTechnico\tTechnicolor CH USA Inc.\n14:99:E2\tApple\tApple, Inc.\n14:9A:10\tMicrosof\tMicrosoft Corporation\n14:9B:2F\tJiangsuZ\tJiangSu ZhongXie Intelligent Technology co., LTD\n14:9D:09\tHuaweiTe\tHuawei Technologies Co.,Ltd\n14:9E:CF\tDell\tDell Inc.\n14:9F:3C\tSamsungE\tSamsung Electronics Co.,Ltd\n14:9F:B6\tGuangdon\tGuangdong Genius Technology Co.,Ltd.\n14:9F:E8\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\n14:A0:F8\tHuaweiTe\tHuawei Technologies Co.,Ltd\n14:A3:64\tSamsungE\tSamsung Electronics Co.,Ltd\n14:A5:1A\tHuaweiTe\tHuawei Technologies Co.,Ltd\n14:A6:2C\tSMDezacS\tS.M. Dezac S.A.\n14:A7:2B\tCurrento\tcurrentoptronics Pvt.Ltd\n14:A7:8B\tZhejiang\tZhejiang Dahua Technology Co., Ltd.\n14:A8:6B\tShenzhen\tShenZhen Telacom Science&Technology Co., Ltd\n14:A9:E3\tMst\tMst Corporation\n14:AB:C5\tIntelCor\tIntel Corporate\n14:AB:F0\tArrisGro\tARRIS Group, Inc.\n14:AE:DB\tVtechTel\tVTech Telecommunications Ltd.\n14:B1:26\tIndustri\tIndustrial Software Co\n14:B1:C8\tInfiniwi\tInfiniWing, Inc.\n14:B3:1F\tDell\tDell Inc.\n14:B3:70\tGigasetD\tGigaset Digital Technology (Shenzhen) Co., Ltd.\n14:B4:84\tSamsungE\tSamsung Electronics Co.,Ltd\n14:B7:3D\tArcheanT\tARCHEAN Technologies\n14:B7:F8\tTechnico\tTechnicolor CH USA Inc.\n14:B8:37\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\n14:B9:68\tHuaweiTe\tHuawei Technologies Co.,Ltd\n14:BB:6E\tSamsungE\tSamsung Electronics Co.,Ltd\n14:BD:61\tApple\tApple, Inc.\n14:C0:89\tDuneHd\tDune Hd Ltd\n14:C1:26\tNokia\tNokia Corporation\n14:C1:FF\tShenzhen\tShenZhen QianHai Comlan communication Co.,LTD\n14:C2:13\tApple\tApple, Inc.\n14:C2:1D\tSabtechI\tSabtech Industries\n14:C3:C2\tKASchmer\tK.A. Schmersal GmbH & Co. KG\n14:C6:97\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n14:C9:13\tLgElectr\tLG Electronics\n14:CA:A0\tHu&Co\t\n14:CC:20\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n14:CF:8D\tOhsung\t\n14:CF:92\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n14:CF:E2\tArrisGro\tARRIS Group, Inc.\n14:D1:1F\tHuaweiTe\tHuawei Technologies Co.,Ltd\n14:D1:69\tHuaweiTe\tHuawei Technologies Co.,Ltd\n14:D4:FE\tArrisGro\tARRIS Group, Inc.\n14:D6:4D\tD-LinkIn\tD-Link International\n14:D7:6E\tConchEle\tCONCH ELECTRONIC Co.,Ltd\n14:DA:E9\tAsustekC\tASUSTek COMPUTER INC.\n14:DB:85\tSNetMedi\tS Net Media\n14:DD:A9\tAsustekC\tASUSTek COMPUTER INC.\n14:DD:E5\tMpmkvvcl\t\n14:E4:EC\tMlogicLl\tmLogic LLC\n14:E6:E4\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n14:E7:C8\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n14:E9:B2\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n14:EB:33\tBsmedias\tBSMediasoft Co., Ltd.\n14:ED:A5\tWächter\tWächter GmbH Sicherheitssysteme\n14:ED:BB\t2wire\t2Wire Inc\n14:ED:E4\tKaiam\tKaiam Corporation\n14:EE:9D\tAirnavLl\tAirNav Systems LLC\n14:EF:CF\tSchreder\t\n14:F0:C5\tXtremio\tXtremio Ltd.\n14:F2:8E\tShenyang\tShenYang ZhongKe-Allwin Technology Co.LTD\n14:F4:2A\tSamsungE\tSamsung Electronics Co.,Ltd\n14:F6:5A\tXiaomiCo\tXiaomi Communications Co Ltd\n14:F8:93\tWuhanFib\tWuhan FiberHome Digital Technology Co.,Ltd.\n14:FE:AF\tSagittar\tSagittar Limited\n14:FE:B5\tDell\tDell Inc.\n18:00:2D\tSonyMobi\tSony Mobile Communications Inc\n18:00:DB\tFitbit\tFitbit Inc.\n18:01:7D\tHarbinAr\tHarbin Arteor technology co., LTD\n18:01:E3\tBittiumW\tBittium Wireless Ltd\n18:01:F1\tXiaomiCo\tXiaomi Communications Co Ltd\n18:03:73\tDell\tDell Inc.\n18:03:FA\tIbtInter\tIBT Interfaces\n18:04:ED\tTexasIns\tTexas Instruments\n18:06:75\tDilaxInt\tDilax Intelcom GmbH\n18:06:FF\tAcerComp\tAcer Computer(Shanghai) Limited.\n18:0B:52\tNanotron\tNanotron Technologies GmbH\n18:0C:14\tIsonea\tiSonea Limited\n18:0C:77\tWestingh\tWestinghouse Electric Company, LLC\n18:0C:AC\tCanon\tCanon Inc.\n18:0F:76\tD-LinkIn\tD-Link International\n18:10:4E\tCedint-U\tCEDINT-UPM\n18:12:12\tCeptonTe\tCepton Technologies\n18:14:20\tTebSas\tTeb Sas\n18:14:56\tNokia\tNokia Corporation\n18:16:C9\tSamsungE\tSamsung Electronics Co.,Ltd\n18:17:14\tDaewoois\t\n18:17:25\tCameoCom\tCameo Communications, Inc.\n18:19:3F\tTamtronO\tTamtron Oy\n18:1B:EB\tActionte\tActiontec Electronics, Inc\n18:1D:EA\tIntelCor\tIntel Corporate\n18:1E:78\tSagemcom\tSagemcom Broadband SAS\n18:1E:B0\tSamsungE\tSamsung Electronics Co.,Ltd\n18:20:12\tAztechAs\tAztech Associates Inc.\n18:20:32\tApple\tApple, Inc.\n18:20:4C\tKummler+\tKummler+Matter AG\n18:20:A6\tSage\tSage Co., Ltd.\n18:21:95\tSamsungE\tSamsung Electronics Co.,Ltd\n18:22:7E\tSamsungE\tSamsung Electronics Co.,Ltd\n18:26:66\tSamsungE\tSamsung Electronics Co.,Ltd\n18:28:61\tAirtiesW\tAirTies Wireless Networks\n18:2A:7B\tNintendo\tNintendo Co., Ltd.\n18:2B:05\t8dTechno\t8D Technologies\n18:2C:91\tConceptD\tConcept Development, Inc.\n18:2C:B4\tNectarso\tNectarsoft Co., Ltd.\n18:2D:98\tJinwooIn\tJinwoo Industrial system\n18:30:09\tWoojinIn\tWoojin Industrial Systems Co., Ltd.\n18:31:BF\tAsustekC\tASUSTek COMPUTER INC.\n18:32:A2\tLaonTech\tLaon Technology Co., Ltd.\n18:33:9D\tCisco\tCisco Systems, Inc\n18:34:51\tApple\tApple, Inc.\n18:35:D1\tArrisGro\tARRIS Group, Inc.\n18:36:FC\tElecsysI\tElecsys International Corporation\n18:38:25\tWuhanLin\tWuhan Lingjiu High-tech Co.,Ltd.\n18:38:64\tCap-Tech\tCAP-TECH INTERNATIONAL CO., LTD.\n18:38:AE\tConspinS\tConspin Solution\n18:39:19\tUnicoi\tUnicoi Systems\n18:39:6E\tSunseaTe\tSunsea Telecommunications Co.,Ltd.\n18:3A:2D\tSamsungE\tSamsung Electronics Co.,Ltd\n18:3A:48\tVostrone\tVostroNet\n18:3B:D2\tBydPreci\tBYD Precision Manufacture Company Ltd.\n18:3D:A2\tIntelCor\tIntel Corporate\n18:3F:47\tSamsungE\tSamsung Electronics Co.,Ltd\n18:40:A4\tShenzhen\tShenzhen Trylong Smart Science and Technology Co., Ltd.\n18:42:1D\tPrivate\t\n18:42:2F\tAlcatelL\tAlcatel Lucent\n18:44:62\tRiavaNet\tRiava Networks, Inc.\n18:44:E6\tZte\tzte corporation\n18:46:17\tSamsungE\tSamsung Electronics Co.,Ltd\n18:48:D8\tFastback\tFastback Networks\n18:4A:6F\tAlcatel-\tAlcatel-Lucent Shanghai Bell Co., Ltd\n18:4B:0D\tRuckusWi\tRuckus Wireless\n18:4C:08\tRockwell\tRockwell Automation\n18:4E:94\tMessoaTe\tMessoa Technologies Inc.\n18:4F:32\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n18:50:2A\tSoarnex\t\n18:52:07\tSichuanT\tSichuan Tianyi Comheart Telecomco., Ltd\n18:52:53\tPixord\tPixord Corporation\n18:52:82\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n18:53:E0\tHanyangD\tHanyang Digitech Co.Ltd\n18:55:0F\tCiscoSpv\tCisco SPVTG\n18:56:80\tIntelCor\tIntel Corporate\n18:59:33\tCiscoSpv\tCisco SPVTG\n18:59:36\tXiaomiCo\tXiaomi Communications Co Ltd\n18:5A:E8\tZenotech\tZenotech.Co.,Ltd\n18:5D:9A\tBobjgear\tBobjGear LLC\n18:5E:0F\tIntelCor\tIntel Corporate\n18:60:24\tHewlettP\tHewlett Packard\n18:61:C7\tLemonbea\tlemonbeat GmbH\n18:62:2C\tSagemcom\tSagemcom Broadband SAS\n18:62:E4\tTexasIns\tTexas Instruments\n18:64:72\tArubaNet\tAruba Networks\n18:65:71\tTopVicto\tTop Victory Electronics (Taiwan) Co., Ltd.\n18:65:90\tApple\tApple, Inc.\n18:66:C7\tShenzhen\tShenzhen Libre Technology Co., Ltd\n18:66:DA\tDell\tDell Inc.\n18:66:E3\tVeros\tVeros Systems, Inc.\n18:67:3F\tHanoverD\tHanover Displays Limited\n18:67:51\tKomegInd\tKOMEG Industrielle Messtechnik GmbH\n18:67:B0\tSamsungE\tSamsung Electronics Co.,Ltd\n18:68:6A\tZte\tzte corporation\n18:68:82\tBewardR&\tBeward R&D Co., Ltd.\n18:68:CB\tHangzhou\tHangzhou Hikvision Digital Technology Co.,Ltd.\n18:69:DA\tChinaMob\tChina Mobile Group Device Co.,Ltd.\n18:6D:99\tAdanis\tAdanis Inc.\n18:71:17\tEtaPlusE\teta plus electronic gmbh\n18:74:2E\tAmazonTe\tAmazon Technologies Inc.\n18:75:32\tSichuanT\tSichuan Tianyi Comheart Telecomco., Ltd\n18:79:A2\tGmjElect\tGmj Electric Limited\n18:7A:93\tAmiccomE\tAMICCOM Electronics Corporation\n18:7C:81\tValeoVis\tValeo Vision Systems\n18:7E:D5\tShenzhen\tshenzhen kaism technology Co. Ltd\n18:80:90\tCisco\tCisco Systems, Inc\n18:80:CE\tBarberry\tBarberry Solutions Ltd\n18:80:F5\tAlcatel-\tAlcatel-Lucent Shanghai Bell Co., Ltd\n18:81:0E\tApple\tApple, Inc.\n18:82:19\tAlibabaC\tAlibaba Cloud Computing Ltd.\n18:83:31\tSamsungE\tSamsung Electronics Co.,Ltd\n18:83:BF\tArcadyan\tArcadyan Technology Corporation\n18:84:10\tCoretrus\tCoreTrust Inc.\n18:86:3A\tDigitalA\tDigital Art System\n18:86:AC\tNokiaDan\tNokia Danmark A/S\n18:87:96\tHtc\tHTC Corporation\n18:88:57\tBeijingJ\tBeijing Jinhong Xi-Dian Information Technology Corp.\n18:89:5B\tSamsungE\tSamsung Electronics Co.,Ltd\n18:89:A0\tWuhanFun\tWuhan Funshion Online Technologies Co.,Ltd\n18:89:DF\tCerebrex\tCerebrEX Inc.\n18:8B:15\tShenzhen\tShenZhen ZhongRuiJing Technology co.,LTD\n18:8B:45\tCisco\tCisco Systems, Inc\n18:8B:9D\tCisco\tCisco Systems, Inc\n18:8E:D5\tTpVision\tTP Vision Belgium N.V. - innovation site Brugge\n18:8E:F9\tG2c\tG2C Co. Ltd.\n18:90:D8\tSagemcom\tSagemcom Broadband SAS\n18:92:2C\tVirtualI\tVirtual Instruments\n18:93:7F\tAmpakTec\tAMPAK Technology, Inc.\n18:93:D7\tTexasIns\tTexas Instruments\n18:94:C6\tShenzhen\tShenZhen Chenyee Technology Co., Ltd.\n18:97:FF\tTechfait\tTechFaith Wireless Technology Limited\n18:99:F5\tSichuanC\tSichuan Changhong Electric Ltd.\n18:9A:67\tCse-Serv\tCSE-Servelec Limited\n18:9B:A5\tIeeeRegi\tIEEE Registration Authority\n18:9B:A5:00:00:00/28\tDectris\tDectris Ltd.\n18:9B:A5:10:00:00/28\tChengduV\tChengDu Vantron Technology, Ltd.\n18:9B:A5:20:00:00/28\tAirprote\tAirprotec\n18:9B:A5:30:00:00/28\tPhinetwo\tPhinetworks\n18:9B:A5:40:00:00/28\tInnomind\tInnominds Software Inc\n18:9B:A5:50:00:00/28\tStarfire\tStarfire Industries LLC\n18:9B:A5:60:00:00/28\tMantraSo\tMantra Softech India Pvt Ltd\n18:9B:A5:70:00:00/28\tBeijingX\tBeijing Xinertel Technology Co., Ltd.\n18:9B:A5:80:00:00/28\tShenzhen\tShenzhen Tong Tai Yi information Technology Co.,Ltd\n18:9B:A5:90:00:00/28\tApana\tAPANA Inc.\n18:9B:A5:A0:00:00/28\tShenzhen\tShenzhen Fionexx Technologies Ltd.\n18:9B:A5:B0:00:00/28\tEutron\tEutron SPA\n18:9B:A5:C0:00:00/28\tChristEl\tChrist Electronic System GmbH\n18:9B:A5:D0:00:00/28\tLegendsk\tlegendsky tech\n18:9B:A5:E0:00:00/28\tTaiwanNa\tTaiwan Name Plate Co.,LTD\n18:9C:27\tArrisGro\tARRIS Group, Inc.\n18:9C:5D\tCisco\tCisco Systems, Inc\n18:9E:FC\tApple\tApple, Inc.\n18:A2:8A\tEssel-T\tEssel-T Co., Ltd\n18:A3:E8\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n18:A6:F7\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n18:A7:F1\tQingdaoH\tQingdao Haier Technology Co.,Ltd\n18:A9:05\tHewlettP\tHewlett Packard\n18:A9:58\tProvisio\tProvision Thai Co., Ltd.\n18:A9:9B\tDell\tDell Inc.\n18:AA:45\tFonTechn\tFon Technology\n18:AB:F5\tUltraEle\tUltra Electronics Electrics\n18:AC:9E\tItelMobi\tItel Mobile Limited\n18:AD:4D\tPolostar\tPolostar Technology Corporation\n18:AE:BB\tSiemensC\tSiemens Convergence Creators GmbH&Co.KG\n18:AF:61\tApple\tApple, Inc.\n18:AF:8F\tApple\tApple, Inc.\n18:AF:9F\tDigitron\tDIGITRONIC Automationsanlagen GmbH\n18:B1:69\tSonicwal\tSonicwall\n18:B2:09\tTorreyPi\tTorrey Pines Logic, Inc\n18:B3:BA\tNetlogic\tNetlogic AB\n18:B4:30\tNestLabs\tNest Labs Inc.\n18:B5:91\tI-Storm\t\n18:B7:9E\tInvoxia\t\n18:B8:1F\tArrisGro\tARRIS Group, Inc.\n18:BC:5A\tZhejiang\tZhejiang Tmall Technology Co., Ltd.\n18:BD:AD\tL-Tech\tL-TECH CORPORATION\n18:BE:92\tDeltaNet\tDelta Networks, Inc.\n18:C0:86\tBroadcom\t\n18:C1:9D\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n18:C2:BF\tBuffalo\tBuffalo.Inc\n18:C4:51\tTucsonEm\tTucson Embedded Systems\n18:C5:01\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\n18:C5:8A\tHuaweiTe\tHuawei Technologies Co.,Ltd\n18:C8:E7\tShenzhen\tShenzhen Hualistone Technology Co.,Ltd\n18:CC:23\tPhilioTe\tPhilio Technology Corporation\n18:CC:88\tHitachiJ\tHitachi Johnson Controls Air\n18:CF:5E\tLiteonTe\tLiteon Technology Corporation\n18:D0:71\tDasan\tDasan Co., Ltd.\n18:D2:25\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n18:D2:76\tHuaweiTe\tHuawei Technologies Co.,Ltd\n18:D5:B6\tSmgHoldi\tSMG Holdings LLC\n18:D6:6A\tInmarsat\t\n18:D6:C7\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n18:D6:CF\tKurthEle\tKurth Electronic GmbH\n18:D7:17\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n18:D9:49\tQvisLabs\tQvis Labs, LLC\n18:DB:F2\tDell\tDell Inc.\n18:DC:56\tYulongCo\tYulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd\n18:DE:D7\tHuaweiTe\tHuawei Technologies Co.,Ltd\n18:E2:88\tSttCondi\tSTT Condigi\n18:E2:9F\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n18:E2:C2\tSamsungE\tSamsung Electronics Co.,Ltd\n18:E3:BC\tTctMobil\tTCT mobile ltd\n18:E7:28\tCisco\tCisco Systems, Inc\n18:E7:F4\tApple\tApple, Inc.\n18:E8:0F\tVikingEl\tViking Electronics Inc.\n18:E8:29\tUbiquiti\tUbiquiti Networks Inc.\n18:E8:DD\tModulete\tModuletek\n18:EE:69\tApple\tApple, Inc.\n18:EF:63\tCisco\tCisco Systems, Inc\n18:F0:E4\tXiaomiCo\tXiaomi Communications Co Ltd\n18:F1:45\tNetcommW\tNetComm Wireless Limited\n18:F1:D8\tApple\tApple, Inc.\n18:F2:92\tShannon\tShannon Systems\n18:F4:6A\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n18:F6:43\tApple\tApple, Inc.\n18:F6:50\tMultimed\tMultimedia Pacific Limited\n18:F7:6B\tZhejiang\tZhejiang Winsight Technology CO.,LTD\n18:F8:7A\tI3Intern\ti3 International Inc.\n18:FA:6F\tIscAppli\tISC applied systems corp\n18:FB:7B\tDell\tDell Inc.\n18:FC:9F\tChangheE\tChanghe Electronics Co., Ltd.\n18:FE:34\tEspressi\tEspressif Inc.\n18:FF:0F\tIntelCor\tIntel Corporate\n18:FF:2E\tShenzhen\tShenzhen Rui Ying Da Technology Co., Ltd\n1A:75:FB\tAutosar\t\n1C:00:42\tNariTech\tNARI Technology Co., Ltd.\n1C:06:56\tIdy\tIDY Corporation\n1C:08:C1\tLgInnote\tLg Innotek\n1C:0B:52\tEpicomSA\tEpicom S.A\n1C:0F:AF\tLucidVis\tLucid Vision Labs\n1C:0F:CF\tSyproOpt\tSypro Optics GmbH\n1C:11:61\tCiena\tCiena Corporation\n1C:11:E1\tWartsila\tWartsila Finland Oy\n1C:12:9D\tIeeePesP\tIEEE PES PSRC/SUB\n1C:14:48\tArrisGro\tARRIS Group, Inc.\n1C:14:B3\tAirwireT\tAirwire Technologies\n1C:15:1F\tHuaweiTe\tHuawei Technologies Co.,Ltd\n1C:17:D3\tCisco\tCisco Systems, Inc\n1C:18:4A\tShenzhen\tShenZhen RicherLink Technologies Co.,LTD\n1C:19:DE\tEyevis\teyevis GmbH\n1C:1A:C0\tApple\tApple, Inc.\n1C:1B:0D\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\n1C:1B:68\tArrisGro\tARRIS Group, Inc.\n1C:1B:B5\tIntelCor\tIntel Corporate\n1C:1C:FD\tDalianHi\tDalian Hi-Think Computer Technology, Corp\n1C:1D:67\tHuaweiTe\tHuawei Technologies Co.,Ltd\n1C:1D:86\tCisco\tCisco Systems, Inc\n1C:1E:E3\tHuiZhouG\tHui Zhou Gaoshengda Technology Co.,LTD\n1C:1F:D4\tLifebeam\tLifeBEAM Technologies LTD\n1C:21:D1\tIeeeRegi\tIEEE Registration Authority\n1C:21:D1:00:00:00/28\tToyoSyst\tToyo System CO.,LTD.\n1C:21:D1:10:00:00/28\tOgnios\tOgnios GmbH\n1C:21:D1:20:00:00/28\tVaraaniW\tVaraani Works Oy\n1C:21:D1:30:00:00/28\tMicrovie\tMicroview Science and Technology Co.,Ltd\n1C:21:D1:40:00:00/28\tScientif\tScientific-Production Enterprise Dynamics\n1C:21:D1:50:00:00/28\tB-Scada\tB-Scada Inc.\n1C:21:D1:60:00:00/28\tWuhanTie\tWuhan TieChi Detection Technology Co., Ltd.\n1C:21:D1:70:00:00/28\tSoundtra\tSoundtrack Your Brand Sweden AB\n1C:21:D1:80:00:00/28\tReliatro\tReliatronics Inc.\n1C:21:D1:90:00:00/28\tDynojetR\tDynojet Research\n1C:21:D1:A0:00:00/28\tLgCns\tLg Cns\n1C:21:D1:B0:00:00/28\tGlobalDe\tGlobal Design Solutions Ltd\n1C:21:D1:C0:00:00/28\tPrivate\t\n1C:21:D1:D0:00:00/28\tLiscotec\tLiscotech System Co., Ltd.\n1C:21:D1:E0:00:00/28\tP2-Plus\tp2-plus inc.\n1C:21:D1:F0:00:00/28\tPrivate\t\n1C:23:2C\tSamsungE\tSamsung Electronics Co.,Ltd\n1C:23:4F\tEdmiEuro\tEDMI  Europe Ltd\n1C:24:CD\tAskeyCom\tAskey Computer Corp.\n1C:25:E1\tChinaMob\tChina Mobile IOT Company Limited\n1C:27:DD\tDatangGo\tDatang Gohighsec(zhejiang)Information Technology Co.,Ltd.\n1C:33:0E\tPernixda\tPernixData\n1C:33:4D\tItsTelec\tITS Telecom\n1C:34:77\tInnovati\tInnovation Wireless\n1C:35:F1\tNewLiftN\tNEW Lift Neue Elektronische Wege Steuerungsbau GmbH\n1C:36:BB\tApple\tApple, Inc.\n1C:37:BF\tCloudium\tCloudium Systems Ltd.\n1C:39:47\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\n1C:39:8A\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n1C:3A:4F\tAccuspec\tAccuSpec Electronics, LLC\n1C:3A:DE\tSamsungE\tSamsung Electronics Co.,Ltd\n1C:3D:E7\tSigmaKok\tSigma Koki Co.,Ltd.\n1C:3E:84\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n1C:40:24\tDell\tDell Inc.\n1C:40:E8\tShenzhen\tSHENZHEN PROGRESS&WIN TECHNOLOGY CO.,LTD\n1C:41:58\tGemaltoM\tGemalto M2M GmbH\n1C:42:7D\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n1C:43:EC\tJapanCir\tJapan Circuit Co.,Ltd\n1C:44:19\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n1C:45:93\tTexasIns\tTexas Instruments\n1C:48:40\tImsMesss\tIMS Messsysteme GmbH\n1C:48:CE\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n1C:48:F9\tGnNetcom\tGN Netcom A/S\n1C:49:7B\tGemtekTe\tGemtek Technology Co., Ltd.\n1C:4A:F7\tAmon\tAmon Inc\n1C:4B:B9\tSmgEnter\tSmg Enterprise, Llc\n1C:4B:D6\tAzurewav\tAzureWave Technology Inc.\n1C:4D:70\tIntelCor\tIntel Corporate\n1C:51:B5\tTechaya\tTechaya LTD\n1C:52:16\tDongguan\tDongguan Hele Electronics Co., Ltd\n1C:52:D6\tFlatDisp\tFlat Display Technology Corporation\n1C:55:3A\tQiangua\tQianGua Corp.\n1C:56:FE\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n1C:57:D8\tKraftway\tKraftway Corporation PLC\n1C:59:9B\tHuaweiTe\tHuawei Technologies Co.,Ltd\n1C:5A:0B\tTegile\tTegile Systems\n1C:5A:3E\tSamsungE\tSamsung Electronics Co.,Ltd\n1C:5A:6B\tPhilipsE\tPhilips Electronics Nederland BV\n1C:5C:55\tPrimaCin\tPRIMA Cinema, Inc\n1C:5C:60\tShenzhen\tShenzhen Belzon Technology Co.,LTD.\n1C:5C:F2\tApple\tApple, Inc.\n1C:5F:2B\tD-LinkIn\tD-Link International\n1C:5F:FF\tBeijingE\tBeijing Ereneben Information Technology Co.,Ltd Shenzhen Branch\n1C:60:DE\tMercuryC\tMercury Communication Technologies Co.,Ltd.\n1C:62:B8\tSamsungE\tSamsung Electronics Co.,Ltd\n1C:63:B7\tOpenprod\tOpenProducts 237 AB\n1C:65:9D\tLiteonTe\tLiteon Technology Corporation\n1C:66:6D\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n1C:66:AA\tSamsungE\tSamsung Electronics Co.,Ltd\n1C:67:58\tHuaweiTe\tHuawei Technologies Co.,Ltd\n1C:69:A5\tBlackber\tBlackBerry RTS\n1C:6A:7A\tCisco\tCisco Systems, Inc\n1C:6B:CA\tMitsunam\tMitsunami Co., Ltd.\n1C:6E:4C\tLogistic\tLogistic Service & Engineering Co.,Ltd\n1C:6E:76\tQuarionT\tQuarion Technology Inc\n1C:6F:65\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\n1C:70:22\tMurataMa\tMurata Manufacturing Co., Ltd.\n1C:73:28\tConnecte\tConnected Home\n1C:73:70\tNeotech\t\n1C:74:0D\tZyxelCom\tZyxel Communications Corporation\n1C:75:08\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\n1C:76:CA\tTerasicT\tTerasic Technologies Inc.\n1C:77:F6\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n1C:78:39\tShenzhen\tShenzhen Tencent Computer System Co., Ltd.\n1C:7B:21\tSonyMobi\tSony Mobile Communications Inc\n1C:7B:23\tQingdaoH\tQingdao Hisense Communications Co.,Ltd.\n1C:7C:11\tEid\t\n1C:7C:45\tVitekInd\tVitek Industrial Video Products, Inc.\n1C:7C:C7\tCoriant\tCoriant GmbH\n1C:7D:22\tFujiXero\tFuji Xerox Co., Ltd.\n1C:7E:51\t3bumenCo\t3bumen.com\n1C:7E:E5\tD-LinkIn\tD-Link International\n1C:83:41\tHefeiBit\tHefei Bitland Information Technology Co.Ltd\n1C:83:B0\tLinkedIp\tLinked IP GmbH\n1C:84:64\tFormosaW\tFormosa Wireless Communication Corp.\n1C:86:AD\tMct\tMct Co., Ltd.\n1C:87:2C\tAsustekC\tASUSTek COMPUTER INC.\n1C:87:74:00:00:00/28\tPhilipsP\tPhilips Personal Health Solutions\n1C:87:74:10:00:00/28\tSigfox\t\n1C:87:74:20:00:00/28\tNichigak\tNichigaku\n1C:87:74:30:00:00/28\tSiloraR&\tSilora R&D\n1C:87:74:40:00:00/28\tWeberMar\tWeber Marking Systems GmbH\n1C:87:74:50:00:00/28\tXiaoxing\tXiaoxinge (Tangshan) Electronic Technology Co., Ltd.\n1C:87:74:60:00:00/28\tSchawbel\tSchawbel Technologies LLC\n1C:87:74:70:00:00/28\tIngBuero\tIng Buero Ziegler\n1C:87:74:80:00:00/28\tSurtecIn\tSurtec Industries, Inc\n1C:87:74:90:00:00/28\tWideWorl\tWide World Trade HK ltd.\n1C:87:74:A0:00:00/28\tNebbiolo\tNebbiolo Technologies\n1C:87:74:B0:00:00/28\tHabeyUsa\tHABEY USA Inc.\n1C:87:74:C0:00:00/28\tNewNordi\tNew Nordic Engineering\n1C:87:74:D0:00:00/28\tClaber\tClaber Spa\n1C:87:74:E0:00:00/28\tQuestInt\tQuest Integrity\n1C:87:76:00:00:00/28\tDspreadT\tDspread Technology (Beijing) Inc.\n1C:87:76:10:00:00/28\tEbsSpZOO\tEBS Sp. z o.o.\n1C:87:76:20:00:00/28\tIbeoAuto\tIbeo Automotive Systems GmbH\n1C:87:76:30:00:00/28\tUnjo\tUnjo AB\n1C:87:76:40:00:00/28\tRdpRu\tRdp.Ru\n1C:87:76:50:00:00/28\tZhuhaiMy\tZhuhai MYZR Technology Co.,Ltd\n1C:87:76:60:00:00/28\tPhilandr\tphilandro Software GmbH\n1C:87:76:70:00:00/28\tCorporat\tCorporate Systems Engineering\n1C:87:76:80:00:00/28\tGuangzho\tGuangzhou Video-Star Electronics Co.,Ltd.\n1C:87:76:90:00:00/28\tTokyoDra\tTokyo Drawing Ltd.\n1C:87:76:A0:00:00/28\tJiangsuE\tJiangsu ETERN COMMUNICATION Co.,ltd\n1C:87:76:B0:00:00/28\tHekatron\tHekatron Vertriebs GmbH\n1C:87:76:C0:00:00/28\tStroneTe\tStrone Technology\n1C:87:76:D0:00:00/28\tQivivo\t\n1C:87:76:E0:00:00/28\tArtis\tArtis GmbH\n1C:87:79:00:00:00/28\tWurmElek\tWurm GmbH & Co. KG Elektronische Systeme\n1C:87:79:10:00:00/28\tA-Gear\tA-GEAR COMPANY LIMITED\n1C:87:79:20:00:00/28\tSmartmov\tSMARTMOVT TECHNOLOGY Co.， LTD\n1C:87:79:30:00:00/28\tVisualLa\tVisual Land Inc.\n1C:87:79:40:00:00/28\tNovetta\t\n1C:87:79:50:00:00/28\tBeidianG\tBeidian Group\n1C:87:79:60:00:00/28\tShenzhen\tShenzhen Shouxin Tongda Technology Co.,Ltd\n1C:87:79:70:00:00/28\tTasc\tTASC Systems Inc.\n1C:87:79:80:00:00/28\tZhejiang\tZhejiang Itenal Technology Co.,Ltd\n1C:87:79:90:00:00/28\tIstriaSo\tIstria soluciones de criptografia, S. A.\n1C:87:79:A0:00:00/28\tHangzhou\tHangzhou Xiaowen Intelligent Technology Co., Ltd.\n1C:87:79:B0:00:00/28\tBeijingG\tBeijing Geedeen Technology Co., Ltd\n1C:87:79:C0:00:00/28\tAllthing\tAllThingsTalk\n1C:87:79:D0:00:00/28\tShenzhen\tShenzhen Innovaconn Systems Co.,Ltd\n1C:87:79:E0:00:00/28\tAssystem\tASSYSTEM France\n1C:88:79:00:00:00/28\tNewps\tNewps co.,ltd\n1C:88:79:10:00:00/28\tAndraSpZ\tANDRA Sp. z o.o.\n1C:88:79:20:00:00/28\tAirsmart\tAirsmart System Co.,Ltd\n1C:88:79:30:00:00/28\tShenzhen\tShenzhen Xiaoxi Technology Co., Ltd.\n1C:88:79:40:00:00/28\tUltraflu\tUltraflux\n1C:88:79:50:00:00/28\tShenzhen\tShenzhenfreelink Electronic Co.,Ltd\n1C:88:79:60:00:00/28\tEolosIt\tEolos IT Corp\n1C:88:79:70:00:00/28\tSensysNe\tSensys Networks, Inc.\n1C:88:79:80:00:00/28\tToshibaT\tToshiba Toko Meter Systems Co., LTD.\n1C:88:79:90:00:00/28\tXingtera\tXingtera China Ltd\n1C:88:79:A0:00:00/28\tItw-Feg\t\n1C:88:79:B0:00:00/28\tGekartel\tgekartel AG\n1C:88:79:C0:00:00/28\tAccriva\t\n1C:88:79:D0:00:00/28\tBeijingR\tBeijing Raycores Technology Co.,Ltd\n1C:88:79:E0:00:00/28\tOrionLab\tOrion Labs inc\n1C:8E:5C\tHuaweiTe\tHuawei Technologies Co.,Ltd\n1C:8E:8E\tDbCommun\tDB Communication & Systems Co., ltd.\n1C:8F:8A\tPhaseMot\tPhase Motion Control SpA\n1C:91:48\tApple\tApple, Inc.\n1C:91:79\tIntegrat\tIntegrated System Technologies Ltd\n1C:94:92\tRuagSchw\tRUAG Schweiz AG\n1C:95:5D\tI-LaxEle\tI-LAX ELECTRONICS INC.\n1C:95:9F\tVeethree\tVeethree Electronics And Marine LLC\n1C:96:5A\tWeifangG\tWeifang Goertek Electronics Co.,Ltd\n1C:97:3D\tPricomDe\tPRICOM Design\n1C:98:EC\tHewlettP\tHewlett Packard Enterprise\n1C:99:4C\tMurataMa\tMurata Manufacturing Co., Ltd.\n1C:9C:26\tZoovelTe\tZoovel Technologies\n1C:9D:3E\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n1C:9E:46\tApple\tApple, Inc.\n1C:9E:CB\tBeijingN\tBeijing Nari Smartchip Microelectronics Company Limited\n1C:A0:B8\tHonHaiPr\tHon Hai Precision Ind. Co., Ltd.\n1C:A0:D3\tIeeeRegi\tIEEE Registration Authority\n1C:A0:D3:00:00:00/28\tOooTekhn\tOOO Tekhnotronika\n1C:A0:D3:10:00:00/28\tJabilCir\tJabil circuit italia srl\n1C:A0:D3:20:00:00/28\tNovtech\tNovTech, Inc.\n1C:A0:D3:30:00:00/28\tSavelec\t\n1C:A0:D3:40:00:00/28\tNpoTelec\tNpo Telecom Jsc\n1C:A0:D3:50:00:00/28\tDynamicC\tDynamic Connect (Suzhou) Hi-Tech Electronic Co.,Ltd.\n1C:A0:D3:60:00:00/28\tIntertec\tIntertecno SRL NISUTA\n1C:A0:D3:70:00:00/28\tPrivate\t\n1C:A0:D3:80:00:00/28\tDesarrol\tDesarrollos y Soluciones Guinea I+D S.L.\n1C:A0:D3:90:00:00/28\tCirqueAu\tCirque Audio Technology Co., Ltd\n1C:A0:D3:A0:00:00/28\tDsmMesst\tDSM Messtechnik GmbH\n1C:A0:D3:B0:00:00/28\tGuangDon\tGuang Dong He Zheng Network Technology Co.,Ltd\n1C:A0:D3:C0:00:00/28\tLyt\tLYT inc.\n1C:A0:D3:D0:00:00/28\tEratoHk\tERATO (HK) Corporation Limited\n1C:A0:D3:E0:00:00/28\tExicomTe\tExicom Tele-Systems Ltd.\n1C:A2:B1\tRuwidoAu\truwido austria gmbh\n1C:A5:32\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\n1C:A7:70\tShenzhen\tSHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\n1C:AA:07\tCisco\tCisco Systems, Inc\n1C:AB:01\tInnovolt\t\n1C:AB:34\tNewH3cTe\tNew H3C Technologies Co., Ltd\n1C:AB:A7\tApple\tApple, Inc.\n1C:AB:C0\tHitronTe\tHitron Technologies. Inc\n1C:AD:D1\tBosungEl\tBosung Electronics Co., Ltd.\n1C:AF:05\tSamsungE\tSamsung Electronics Co.,Ltd\n1C:AF:F7\tD-LinkIn\tD-Link International\n1C:B0:44\tAskeyCom\tAskey Computer Corp\n1C:B0:94\tHtc\tHTC Corporation\n1C:B1:7F\tNecPlatf\tNEC Platforms, Ltd.\n1C:B2:43\tTdc\tTDC A/S\n1C:B7:2C\tAsustekC\tASUSTek COMPUTER INC.\n1C:B8:57\tBeconTec\tBecon Technologies Co,.Ltd.\n1C:B9:C4\tRuckusWi\tRuckus Wireless\n1C:BA:8C\tTexasIns\tTexas Instruments\n1C:BB:A8\tOjscUfim\tOJSC Ufimskiy Zavod Promsvyaz\n1C:BD:0E\tAmplifie\tAmplified Engineering Pty Ltd\n1C:BD:B9\tD-LinkIn\tD-Link International\n1C:C0:35\tPlanexCo\tPlanex Communications Inc.\n1C:C0:E1\tIeeeRegi\tIEEE Registration Authority\n1C:C0:E1:00:00:00/28\tShenzhen\tShenzhen Highsharp Electronics Ltd.\n1C:C0:E1:10:00:00/28\tHangzhou\tHangzhou Kaierda Electric Welding Machine Co.,Ltd\n1C:C0:E1:20:00:00/28\tAbbottMe\tAbbott Medical Optics Inc.\n1C:C0:E1:30:00:00/28\tHangzhou\tHangzhou Softel Optic Co., Ltd\n1C:C0:E1:40:00:00/28\tVideri\tVideri Inc.\n1C:C0:E1:50:00:00/28\tKidsWire\tKids Wireless Inc\n1C:C0:E1:60:00:00/28\tMonument\tMonument Labs, Inc.\n1C:C0:E1:70:00:00/28\tShenzhen\tSHENZHEN KINSTONE D&T DEVELOP CO.,LTD\n1C:C0:E1:80:00:00/28\tLxPty\tLX Corporation Pty Ltd\n1C:C0:E1:90:00:00/28\tOspicon\tOspicon Company Limited\n1C:C0:E1:A0:00:00/28\tSecheron\tSecheron Sa\n1C:C0:E1:B0:00:00/28\tExigentS\tExigent Sensors\n1C:C0:E1:C0:00:00/28\tNittoSei\tNitto Seiko\n1C:C0:E1:D0:00:00/28\tNewlandN\tNewLand (NZ) Communication Tech Limited\n1C:C0:E1:E0:00:00/28\tYunYangF\tYun Yang Fire Safety Equipment Co.,Ltd.\n1C:C1:1A\tWavetron\tWavetronix\n1C:C1:DE\tHewlettP\tHewlett Packard\n1C:C3:16\tMilesigh\tMileSight Technology Co., Ltd.\n1C:C3:EB\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n1C:C5:86\tAbsolute\tAbsolute Acoustics\n1C:C6:3C\tArcadyan\tArcadyan Technology Corporation\n1C:C7:2D\tShenzhen\tShenzhen Huapu Digital CO.,Ltd\n1C:CA:E3\tIeeeRegi\tIEEE Registration Authority\n1C:CA:E3:00:00:00/28\tPrivate\t\n1C:CA:E3:10:00:00/28\tPgaElect\tPga Electronic\n1C:CA:E3:20:00:00/28\tInsigma\tInsigma Inc\n1C:CA:E3:30:00:00/28\tShenzhen\tShenzhen Smart Device Technology Co.,LTD\n1C:CA:E3:40:00:00/28\tSunrayMe\tSunray Medical Apparatus Co.,Ltd.\n1C:CA:E3:50:00:00/28\tTengfeng\t\n1C:CA:E3:60:00:00/28\tTokaiRik\tTokai Rika Co., Ltd.\n1C:CA:E3:70:00:00/28\tBirdHome\tBird Home Automation GmbH\n1C:CA:E3:80:00:00/28\tOxysecSR\tOxySec S.r.l.\n1C:CA:E3:90:00:00/28\tShin-Yos\tSHIN-YOSHA CORPORATION\n1C:CA:E3:A0:00:00/28\tSirea\t\n1C:CA:E3:B0:00:00/28\tDreamVis\tDream Visions Co., LTD\n1C:CA:E3:C0:00:00/28\tGahdeung\tGahdeung Elecom\n1C:CA:E3:D0:00:00/28\tEsight\teSight Corporation\n1C:CA:E3:E0:00:00/28\tDabiAtla\tDabi Atlante S/A Industrias Medico Odontológicas\n1C:CA:E3:F0:00:00/28\tPrivate\t\n1C:CB:99\tTctMobil\tTCT mobile ltd\n1C:CD:E5\tShanghai\tShanghai Wind Technologies Co.,Ltd\n1C:D4:0C\tKriwanIn\tKriwan Industrie-Elektronik GmbH\n1C:D6:BD\tLeedarso\tLeedarson Lighting Co., Ltd.\n1C:DA:27\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n1C:DD:EA\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n1C:DE:A7\tCisco\tCisco Systems, Inc\n1C:DF:0F\tCisco\tCisco Systems, Inc\n1C:DF:52\tTexasIns\tTexas Instruments\n1C:E1:65\tMarshal\tMarshal Corporation\n1C:E1:92\tQisda\tQisda Corporation\n1C:E2:CC\tTexasIns\tTexas Instruments\n1C:E6:2B\tApple\tApple, Inc.\n1C:E6:C7\tCisco\tCisco Systems, Inc\n1C:E8:5D\tCisco\tCisco Systems, Inc\n1C:EA:1B\tNokia\t\n1C:EE:C9\tEloTouch\tElo touch solutions\n1C:EE:E8\tIlshinEl\tIlshin Elecom\n1C:EF:CE\tBebroEle\tbebro electronic GmbH\n1C:F0:3E\tWearhaus\tWearhaus Inc.\n1C:F0:61\tScaps\tSCAPS GmbH\n1C:F4:CA\tPrivate\t\n1C:F5:E7\tTurtleIn\tTurtle Industry Co., Ltd.\n1C:FA:68\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n1C:FC:BB\tRealfict\tRealfiction ApS\n1C:FD:08\tIeeeRegi\tIEEE Registration Authority\n1C:FD:08:00:00:00/28\tInseatSo\tInSeat Solutions, LLC\n1C:FD:08:10:00:00/28\tShenzhen\tShenzhen SEWO Technology Co.,Ltd.\n1C:FD:08:20:00:00/28\tHihi\tHiHi Ltd\n1C:FD:08:30:00:00/28\tUmeoxInn\tUmeox Innovations Co.,Ltd\n1C:FD:08:40:00:00/28\tSabikOff\tSABIK Offshore GmbH\n1C:FD:08:50:00:00/28\tBeijingH\tBeijing Hengxin Rainbow Information Technology Co.,Ltd\n1C:FD:08:60:00:00/28\tA&BTechn\tA&B Technology\n1C:FD:08:70:00:00/28\tSunweitI\tsunweit industrial limited\n1C:FD:08:80:00:00/28\tShenzhen\tShenZhen DeLippo Technology Co., LTD\n1C:FD:08:90:00:00/28\tLabel\t\n1C:FD:08:A0:00:00/28\tBanmakTe\tBanmak Technogies Co.,Ltd\n1C:FD:08:B0:00:00/28\tGuangzho\tguangzhou huiqun intelligent technology co. LTD\n1C:FD:08:C0:00:00/28\tShanghai\tShanghai YottaTech Co Ltd (上海尧它科技有限公司）\n1C:FD:08:D0:00:00/28\tTianjinK\tTianjin Keyvia Electric Co.,Ltd\n1C:FD:08:E0:00:00/28\tMeshboxF\tMeshbox Foundation Pte. Ltd.\n1C:FE:A7\tIdentyte\tIDentytech Solutins Ltd.\n20:01:4F\tLineaRes\tLinea Research Ltd\n20:02:AF\tMurataMa\tMurata Manufacturing Co., Ltd.\n20:04:0F\tDell\tDell Inc.\n20:05:05\tRadmaxCo\tRadmax Communication Private Limited\n20:05:E8\tOooInpro\tOOO InProMedia\n20:08:ED\tHuaweiTe\tHuawei Technologies Co.,Ltd\n20:0A:5E\tXiangsha\tXiangshan Giant Eagle Technology Developing Co., Ltd.\n20:0B:C7\tHuaweiTe\tHuawei Technologies Co.,Ltd\n20:0C:C8\tNetgear\t\n20:0E:95\tIec–Tc9W\tIEC – TC9 WG43\n20:0F:70\tFoxtech\t\n20:10:7A\tGemtekTe\tGemtek Technology Co., Ltd.\n20:12:57\tMostLuck\tMost Lucky Trading Ltd\n20:12:D5\tScientec\tScientech Materials Corporation\n20:13:E0\tSamsungE\tSamsung Electronics Co.,Ltd\n20:16:3D\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n20:16:B9\tIntelCor\tIntel Corporate\n20:16:D8\tLiteonTe\tLiteon Technology Corporation\n20:18:0E\tShenzhen\tShenzhen Sunchip Technology Co., Ltd\n20:1A:06\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\n20:1D:03\tElatec\tElatec GmbH\n20:1F:31\tIntenoBr\tInteno Broadband Technology AB\n20:21:A5\tLgElectr\tLG Electronics (Mobile Communications)\n20:25:64\tPegatron\tPegatron Corporation\n20:25:98\tTeleview\t\n20:28:3E\tHuaweiTe\tHuawei Technologies Co.,Ltd\n20:28:BC\tVisionsc\tVisionscape Co,. Ltd.\n20:2B:C1\tHuaweiTe\tHuawei Technologies Co.,Ltd\n20:2C:B7\tKongYueE\tKong Yue Electronics & Information Industry (Xinhui) Ltd.\n20:2D:07\tSamsungE\tSamsung Electronics Co.,Ltd\n20:2D:23\tCollinea\tCollinear Networks Inc.\n20:2D:F8\tDigitalM\tDigital Media Cartridge Ltd.\n20:31:EB\tHdsn\t\n20:36:5B\tMegafone\tMegafone Limited\n20:37:06\tCisco\tCisco Systems, Inc\n20:37:BC\tKuipersE\tKuipers Electronic Engineering BV\n20:39:56\tHmdGloba\tHMD Global Oy\n20:3A:07\tCisco\tCisco Systems, Inc\n20:3A:EF\tSivantos\tSivantos GmbH\n20:3C:AE\tApple\tApple, Inc.\n20:3D:66\tArrisGro\tARRIS Group, Inc.\n20:3D:B2\tHuaweiTe\tHuawei Technologies Co.,Ltd\n20:3D:BD\tLgInnote\tLG Innotek\n20:40:05\tFeno\tfeno GmbH\n20:41:5A\tSmartehD\tSmarteh d.o.o.\n20:44:3A\tSchneide\tSchneider Electric Asia Pacific Ltd\n20:46:A1\tVecow\tVECOW Co., Ltd\n20:46:F9\tAdvanced\tAdvanced Network Devices (dba:AND)\n20:47:47\tDell\tDell Inc.\n20:47:DA\tXiaomiCo\tXiaomi Communications Co Ltd\n20:47:ED\tBskyb\tBSkyB Ltd\n20:4A:AA\tHanscanS\tHanscan Spain S.A.\n20:4C:03\tArubaNet\tAruba Networks\n20:4C:6D\tHugoBren\tHugo Brennenstuhl Gmbh & Co. KG.\n20:4C:9E\tCisco\tCisco Systems, Inc\n20:4E:6B\tAxxanaIs\tAxxana(israel) ltd\n20:4E:71\tJuniperN\tJuniper Networks\n20:4E:7F\tNetgear\t\n20:53:CA\tRiskTech\tRisk Technology Ltd\n20:54:76\tSonyMobi\tSony Mobile Communications Inc\n20:54:FA\tHuaweiTe\tHuawei Technologies Co.,Ltd\n20:55:31\tSamsungE\tSamsung Electronics Co.,Ltd\n20:55:32\tGotechIn\tGotech International Technology Limited\n20:57:21\tSalixTec\tSalix Technology CO., Ltd.\n20:57:AF\tShenzhen\tShenzhen FH-NET OPTOELECTRONICS CO.,LTD\n20:59:A0\tParagonT\tParagon Technologies Inc.\n20:5A:00\tCoval\t\n20:5B:2A\tPrivate\t\n20:5B:5E\tShenzhen\tShenzhen Wonhe Technology Co., Ltd\n20:5C:FA\tYangzhou\tYangzhou ChangLian Network Technology Co,ltd.\n20:5D:47\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n20:5E:F7\tSamsungE\tSamsung Electronics Co.,Ltd\n20:62:74\tMicrosof\tMicrosoft Corporation\n20:63:5F\tAbeeway\t\n20:64:32\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\n20:67:7C\tHewlettP\tHewlett Packard Enterprise\n20:67:B1\tPluto\tPluto inc.\n20:68:9D\tLiteonTe\tLiteon Technology Corporation\n20:6A:8A\tWistronI\tWistron Infocomm (Zhongshan) Corporation\n20:6A:FF\tAtlasEle\tAtlas Elektronik UK Limited\n20:6B:E7\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n20:6C:8A\tAerohive\tAerohive Networks Inc.\n20:6E:9C\tSamsungE\tSamsung Electronics Co.,Ltd\n20:6F:EC\tBraemacC\tBraemac CA LLC\n20:71:9E\tSfTechno\tSF Technology Co.,Ltd\n20:73:55\tArrisGro\tARRIS Group, Inc.\n20:74:CF\tShenzhen\tShenzhen Voxtech Co.,Ltd\n20:76:00\tActionte\tActiontec Electronics, Inc\n20:76:8F\tApple\tApple, Inc.\n20:76:93\tLenovoBe\tLenovo (Beijing) Limited.\n20:78:0B\tDeltaFau\tDelta Faucet Company\n20:78:52\tNokia\t\n20:78:F0\tApple\tApple, Inc.\n20:7C:8F\tQuantaMi\tQuanta Microsystems,Inc.\n20:7D:74\tApple\tApple, Inc.\n20:82:C0\tXiaomiCo\tXiaomi Communications Co Ltd\n20:85:8C\tAssa\t\n20:87:56\tSiemens\tSiemens Ag\n20:87:AC\tAesMotom\tAES motomation\n20:89:6F\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n20:89:84\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\n20:89:86\tZte\tzte corporation\n20:8B:37\tSkyworth\tSkyworth Digital Technology(Shenzhen) Co.,Ltd\n20:90:6F\tShenzhen\tShenzhen Tencent Computer System Co., Ltd.\n20:91:48\tTexasIns\tTexas Instruments\n20:91:8A\tProfalux\t\n20:91:D9\tIM\tI'M SPA\n20:93:4D\tFujianSt\tFUJIAN STAR-NET COMMUNICATION CO.,LTD\n20:9A:E9\tVolacomm\tVolacomm Co., Ltd\n20:9B:A5\tJiaxingG\tJIAXING GLEAD Electronics Co.,Ltd\n20:9B:CD\tApple\tApple, Inc.\n20:A2:E4\tApple\tApple, Inc.\n20:A2:E7\tLee-Dick\tLee-Dickens Ltd\n20:A6:0C\tXiaomiCo\tXiaomi Communications Co Ltd\n20:A6:80\tHuaweiTe\tHuawei Technologies Co.,Ltd\n20:A6:CD\tHewlettP\tHewlett Packard Enterprise\n20:A7:83\tMicontro\tmiControl GmbH\n20:A7:87\tBointecT\tBointec Taiwan Corporation Limited\n20:A8:B9\tSiemens\tSiemens Ag\n20:A9:0E\tTctMobil\tTCT mobile ltd\n20:A9:9B\tMicrosof\tMicrosoft Corporation\n20:AA:25\tIp-NetLl\tIP-NET LLC\n20:AA:4B\tCisco-Li\tCisco-Linksys, LLC\n20:AB:37\tApple\tApple, Inc.\n20:AD:56\tContinen\tContinental Automotive Systems Inc.\n20:B0:01\tTechnico\tTechnicolor\n20:B0:F7\tEnclustr\tEnclustra GmbH\n20:B3:99\tEnterasy\tEnterasys\n20:B5:C6\tMimosaNe\tMimosa Networks\n20:B7:C0\tOmicronE\tOMICRON electronics GmbH\n20:BB:76\tColGiova\tCOL GIOVANNI PAOLO SpA\n20:BB:C0\tCisco\tCisco Systems, Inc\n20:BB:C6\tJabilCir\tJabil Circuit Hungary Ltd.\n20:BF:DB\tDvl\t\n20:C0:47\tVerizon\t\n20:C0:6D\tShenzhen\tShenzhen Spacetek Technology Co.,Ltd\n20:C1:AF\tIWitDigi\ti Wit Digital Co., Limited\n20:C3:8F\tTexasIns\tTexas Instruments\n20:C3:A4\tRetailne\tRetailNext\n20:C6:0D\tShanghai\tShanghai annijie Information technology Co.,LTD\n20:C6:EB\tPanasoni\tPanasonic Corporation AVC Networks Company\n20:C8:B3\tShenzhen\tSHENZHEN BUL-TECH CO.,LTD.\n20:C9:D0\tApple\tApple, Inc.\n20:CD:39\tTexasIns\tTexas Instruments\n20:CE:C4\tPerasoTe\tPeraso Technologies\n20:CF:30\tAsustekC\tASUSTek COMPUTER INC.\n20:D1:60\tPrivate\t\n20:D2:1F\tWincalTe\tWincal Technology Corp.\n20:D2:5F\tSmartcap\tSmartCap Technologies\n20:D3:90\tSamsungE\tSamsung Electronics Co.,Ltd\n20:D5:AB\tKoreaInf\tKorea Infocom Co.,Ltd.\n20:D5:BF\tSamsungE\tSamsung Electronics Co.,Ltd\n20:D6:07\tNokia\tNokia Corporation\n20:D7:5A\tPoshMobi\tPosh Mobile Limited\n20:D8:0B\tJuniperN\tJuniper Networks\n20:D9:06\tIota\tIota, Inc.\n20:DB:AB\tSamsungE\tSamsung Electronics Co., Ltd.\n20:DC:93\tCheetahH\tCheetah Hi-Tech, Inc.\n20:DC:E6\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n20:DE:88\tIcRealti\tIC Realtime LLC\n20:DF:3F\tNanjingS\tNanjing SAC Power Grid Automation Co., Ltd.\n20:DF:B9\tGoogle\tGoogle, Inc.\n20:E0:9C\tNokia\t\n20:E4:07\tSparkSrl\tSpark srl\n20:E5:2A\tNetgear\t\n20:E5:64\tArrisGro\tARRIS Group, Inc.\n20:E7:91\tSiemensH\tSiemens Healthcare Diagnostics, Inc\n20:E8:82\tZte\tzte corporation\n20:EA:C7\tShenzhen\tShenzhen Riopine Electronics Co., Ltd\n20:ED:74\tAbilityE\tAbility enterprise co.,Ltd.\n20:EE:28\tApple\tApple, Inc.\n20:EE:C6\tElefirst\tElefirst Science & Tech Co ., ltd\n20:F0:02\tMtdataDe\tMTData Developments Pty. Ltd.\n20:F1:7C\tHuaweiTe\tHuawei Technologies Co.,Ltd\n20:F1:9E\tArrisGro\tARRIS Group, Inc.\n20:F3:A3\tHuaweiTe\tHuawei Technologies Co.,Ltd\n20:F4:1B\tShenzhen\tShenzhen Bilian electronic CO.,LTD\n20:F4:52\tShanghai\tShanghai IUV Software Development Co. Ltd\n20:F5:10\tCodexDig\tCodex Digital Limited\n20:F5:43\tHuiZhouG\tHui Zhou Gaoshengda Technology Co.,LTD\n20:F7:7C\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n20:F8:5E\tDeltaEle\tDelta Electronics\n20:FA:BB\tCambridg\tCambridge Executive Limited\n20:FD:F1\t3comEuro\t3COM EUROPE LTD\n20:FE:CD\tSystemIn\tSystem In Frontier Inc.\n20:FE:DB\tM2mSolut\tM2M Solution S.A.S.\n24:00:BA\tHuaweiTe\tHuawei Technologies Co.,Ltd\n24:01:C7\tCisco\tCisco Systems, Inc\n24:05:0F\tMtnElect\tMTN Electronic Co. Ltd\n24:05:88\tGoogle\tGoogle, Inc.\n24:05:F5\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n24:09:17\tDevlinEl\tDevlin Electronics Limited\n24:09:95\tHuaweiTe\tHuawei Technologies Co.,Ltd\n24:0A:11\tTctMobil\tTCT mobile ltd\n24:0A:63\tArrisGro\tARRIS Group, Inc.\n24:0A:64\tAzurewav\tAzureWave Technology Inc.\n24:0A:C4\tEspressi\tEspressif Inc.\n24:0B:0A\tPaloAlto\tPalo Alto Networks\n24:0B:2A\tViettelG\tViettel Group\n24:0B:B1\tKostalIn\tKOSTAL Industrie Elektrik GmbH\n24:0D:65\tShenzhen\tShenzhen Vsun Communication Technology Co., Ltd.\n24:0D:6C\tSmnd\t\n24:0D:C2\tTctMobil\tTCT mobile ltd\n24:10:64\tShenzhen\tShenzhen Ecsino Tecnical Co. Ltd\n24:11:25\tHutek\tHutek Co., Ltd.\n24:11:48\tEntropix\tEntropix, LLC\n24:11:D0\tChongqin\tChongqing Ehs Science and Technology Development Co.,Ltd.\n24:18:1D\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\n24:1A:8C\tSquarehe\tSquarehead Technology AS\n24:1B:13\tShanghai\tShanghai Nutshell Electronic Co., Ltd.\n24:1B:44\tHangzhou\tHangzhou Tuners Electronics Co., Ltd\n24:1B:7A\tApple\tApple, Inc.\n24:1C:04\tShenzhen\tShenzhen Jehe Technology Development Co., Ltd.\n24:1E:EB\tApple\tApple, Inc.\n24:1F:2C\tCalsys\tCalsys, Inc.\n24:1F:A0\tHuaweiTe\tHuawei Technologies Co.,Ltd\n24:20:C7\tSagemcom\tSagemcom Broadband SAS\n24:21:24\tNokia\t\n24:21:AB\tSonyMobi\tSony Mobile Communications Inc\n24:24:0E\tApple\tApple, Inc.\n24:26:42\tSharp\tSHARP Corporation.\n24:29:FE\tKyocera\tKYOCERA Corporation\n24:2E:02\tHuaweiTe\tHuawei Technologies Co.,Ltd\n24:2E:90\tPalitMic\tPalit Microsystems, Ltd\n24:2F:FA\tToshibaG\tToshiba Global Commerce Solutions\n24:31:84\tSharp\tSHARP Corporation\n24:33:6C\tPrivate\t\n24:35:CC\tZhongsha\tZhongshan Scinan Internet of Things Co.,Ltd.\n24:37:4C\tCiscoSpv\tCisco SPVTG\n24:37:EF\tEmcElect\tEMC Electronic Media Communication SA\n24:3A:82\tIrts\t\n24:3C:20\tDynamode\tDynamode Group\n24:42:BC\tAlinco\tAlinco,incorporated\n24:44:27\tHuaweiTe\tHuawei Technologies Co.,Ltd\n24:45:97\tGemueGeb\tGEMUE Gebr. Mueller Apparatebau\n24:47:0E\tPentroni\tPentronicAB\n24:49:7B\tInnovati\tInnovative Converged Devices Inc\n24:4B:03\tSamsungE\tSamsung Electronics Co.,Ltd\n24:4B:81\tSamsungE\tSamsung Electronics Co.,Ltd\n24:4C:07\tHuaweiTe\tHuawei Technologies Co.,Ltd\n24:4C:E3\tAmazonTe\tAmazon Technologies Inc.\n24:4E:7B\tIeeeRegi\tIEEE Registration Authority\n24:4E:7B:00:00:00/28\tTekelekE\tTekelek Europe Ltd\n24:4E:7B:10:00:00/28\tSonoscap\tsonoscape\n24:4E:7B:20:00:00/28\tRccTime\tRcc Time Co .,Limited\n24:4E:7B:30:00:00/28\tShenzhen\tShenzhen Ruixunyun Technology Co.,Ltd.\n24:4E:7B:40:00:00/28\tLeshiInt\tLeshi Internet Information & Technology (Beijing) Corp.\n24:4E:7B:50:00:00/28\tJiangsuX\tJiangsu Xuanbo Electronic Technologies Co.,Ltd\n24:4E:7B:60:00:00/28\tOwasysAd\tOwasys Advanced Wireless Devices\n24:4E:7B:70:00:00/28\tNanjingW\tNanjing Wanlida Technology Co., Ltd.\n24:4E:7B:80:00:00/28\tCyber1st\t\n24:4E:7B:90:00:00/28\tUnimatAu\tUniMAT Automation Technology Co., Ltd.\n24:4E:7B:A0:00:00/28\tShenzhen\tShenzhen AWT science &  technology limited\n24:4E:7B:B0:00:00/28\tMightyAu\tMighty Audio, Inc.\n24:4E:7B:C0:00:00/28\tChunghsi\tChunghsin Technology Group Co.,Ltd\n24:4E:7B:D0:00:00/28\tPrivate\t\n24:4E:7B:E0:00:00/28\tWithwinT\tWithWin Technology ShenZhen CO.,LTD\n24:4F:1D\tIruleLlc\tiRule LLC\n24:58:80\tVizeo\t\n24:59:0B\tWhiteSky\tWhite Sky Inc. Limited\n24:5B:A7\tApple\tApple, Inc.\n24:5B:F0\tLiteon\tLiteon, Inc.\n24:5C:BF\tNcse\t\n24:5C:CB\tAxieCons\tAXIe Consortium, Inc.\n24:5E:BE\tQnap\tQNAP Systems, Inc.\n24:5F:DF\tKyocera\tKyocera Corporation\n24:60:81\tRazberiT\trazberi technologies\n24:61:5A\tChinaMob\tChina Mobile Group Device Co.,Ltd.\n24:62:78\tSysmocom\tsysmocom - systems for mobile communications GmbH\n24:64:EF\tCygSunri\tCyg Sunri Co.,Ltd.\n24:65:11\tAvm\tAVM GmbH\n24:68:80\tBraverid\tBraveridge.co.,ltd.\n24:69:3E\tInnodisk\tinnodisk Corporation\n24:69:4A\tJasmine\tJasmine Systems Inc.\n24:69:68\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n24:69:A5\tHuaweiTe\tHuawei Technologies Co.,Ltd\n24:6A:AB\tIt-IsInt\tIT-IS International\n24:6C:8A\tYukaiEng\tYUKAI Engineering\n24:6E:96\tDell\tDell Inc.\n24:71:89\tTexasIns\tTexas Instruments\n24:72:60\tIottech\tIOTTECH Corp\n24:76:56\tShanghai\tShanghai Net Miles Fiber Optics Technology Co., LTD.\n24:76:7D\tCiscoSpv\tCisco SPVTG\n24:77:03\tIntelCor\tIntel Corporate\n24:79:2A\tRuckusWi\tRuckus Wireless\n24:7C:4C\tHermanMi\tHerman Miller\n24:7E:12\tCisco\tCisco Systems, Inc\n24:7E:51\tZte\tzte corporation\n24:7F:20\tSagemcom\tSagemcom Broadband SAS\n24:7F:3C\tHuaweiTe\tHuawei Technologies Co.,Ltd\n24:80:00\tWestcont\tWestcontrol AS\n24:81:AA\tKshInter\tKSH International Co., Ltd.\n24:82:8A\tProwaveT\tProwave Technologies Ltd.\n24:84:98\tBeijingJ\tBeijing Jiaoda Microunion Tech.Co.,Ltd.\n24:86:F4\tCtek\tCtek, Inc.\n24:87:07\tSenergy\tSEnergy Corporation\n24:88:94\tShenzhen\tshenzhen lensun Communication Technology LTD\n24:8A:07\tMellanox\tMellanox Technologies, Inc.\n24:8B:E0\tSichuanT\tSichuan Tianyi Comheart Telecomco., Ltd\n24:92:0E\tSamsungE\tSamsung Electronics Co.,Ltd\n24:93:CA\tVoxtroni\tVoxtronic Technology Computer-Systeme GmbH\n24:94:42\tOpenRoad\tOpen Road Solutions , Inc.\n24:95:04\tSfr\t\n24:97:ED\tTechvisi\tTechvision Intelligent Technology Limited\n24:9E:AB\tHuaweiTe\tHuawei Technologies Co.,Ltd\n24:A0:74\tApple\tApple, Inc.\n24:A2:E1\tApple\tApple, Inc.\n24:A4:2C\tKoukaamA\tKOUKAAM a.s.\n24:A4:3C\tUbiquiti\tUbiquiti Networks Inc.\n24:A4:95\tThalesCa\tThales Canada Inc.\n24:A5:34\tSyntrust\tSynTrust Tech International Ltd.\n24:A7:DC\tBskyb\tBSkyB Ltd\n24:A8:7D\tPanasoni\tPanasonic Automotive Systems Asia Pacific(Thailand)Co.,Ltd.\n24:A9:37\tPureStor\tPURE Storage\n24:AB:81\tApple\tApple, Inc.\n24:AF:4A\tAlcatel-\tAlcatel-Lucent IPD\n24:AF:54\tNexgenMe\tNEXGEN Mediatech Inc.\n24:B0:A9\tShanghai\tShanghai Mobiletek Communication Ltd.\n24:B2:09\tAvaya\tAvaya Inc\n24:B2:DE\tEspressi\tEspressif Inc.\n24:B6:57\tCisco\tCisco Systems, Inc\n24:B6:B8\tFriem\tFriem Spa\n24:B6:FD\tDell\tDell Inc.\n24:B8:8C\tCrenus\tCrenus Co.,Ltd.\n24:B8:D2\tOpzoonTe\tOpzoon Technology Co.,Ltd.\n24:BA:13\tRisoKaga\tRiso Kagaku Corporation\n24:BA:30\tTechnica\tTechnical Consumer Products, Inc.\n24:BB:C1\tAbsolute\tAbsolute Analysis\n24:BC:82\tDaliWire\tDali Wireless, Inc.\n24:BC:F8\tHuaweiTe\tHuawei Technologies Co.,Ltd\n24:BE:05\tHewlettP\tHewlett Packard\n24:BE:18\tDadoutek\tDadoutek Company Limited\n24:BF:74\tPrivate\t\n24:C0:B3\tRsf\t\n24:C1:BD\tCrrcDali\tCRRC DALIAN R&D CO.,LTD.\n24:C3:F9\tSecurita\tSecuritas Direct AB\n24:C4:2F\tPhilipsL\tPhilips Lifeline\n24:C4:4A\tZte\tzte corporation\n24:C6:96\tSamsungE\tSamsung Electronics Co.,Ltd\n24:C8:48\tMywerkPo\tmywerk Portal GmbH\n24:C8:6E\tChaneyIn\tChaney Instrument Co.\n24:C9:A1\tRuckusWi\tRuckus Wireless\n24:C9:DE\tGenoray\t\n24:CA:CB\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n24:CB:E7\tMyk\tMYK, Inc.\n24:CF:21\tShenzhen\tShenzhen State Micro Technology Co., Ltd\n24:D1:3F\tMexus\tMexus Co.,Ltd\n24:D2:CC\tSmartdri\tSmartDrive Systems Inc.\n24:D3:F2\tZte\tzte corporation\n24:D5:1C\tZhongtia\tZhongtian broadband technology co., LTD\n24:D7:6B\tSyntroni\tSyntronic AB\n24:D9:21\tAvaya\tAvaya Inc\n24:DA:11\tNoNda\tNO NDA Inc\n24:DA:9B\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n24:DA:B6\tSistemas\tSistemas de Gestión Energética S.A. de C.V\n24:DB:AC\tHuaweiTe\tHuawei Technologies Co.,Ltd\n24:DB:AD\tShoppert\tShopperTrak RCT Corporation\n24:DB:ED\tSamsungE\tSamsung Electronics Co.,Ltd\n24:DE:C6\tArubaNet\tAruba Networks\n24:DF:6A\tHuaweiTe\tHuawei Technologies Co.,Ltd\n24:E1:24\tXiamenUr\tXiamen Ursaconn Technology Co. , Ltd.\n24:E2:71\tQingdaoH\tQingdao Hisense Communications Co.,Ltd.\n24:E3:14\tApple\tApple, Inc.\n24:E4:3F\tWenzhouK\tWenzhou Kunmei Communication Technology Co.,Ltd.\n24:E5:AA\tPhilipsO\tPhilips Oral Healthcare, Inc.\n24:E6:BA\tJscZavod\tJSC Zavod im. Kozitsky\n24:E9:B3\tCisco\tCisco Systems, Inc\n24:EA:40\tHelmholz\tHelmholz GmbH & Co. KG\n24:EB:65\tSaetISSR\tSAET I.S. S.r.l.\n24:EC:51\tAdfTechn\tADF Technologies Sdn Bhd\n24:EC:99\tAskeyCom\tAskey Computer Corp\n24:EC:D6\tCsgScien\tCSG Science & Technology Co.,Ltd.Hefei\n24:EE:3A\tChengduY\tChengdu Yingji Electronic Hi-tech Co Ltd\n24:F0:94\tApple\tApple, Inc.\n24:F0:FF\tGht\tGHT Co., Ltd.\n24:F1:28\tTelstra\t\n24:F2:7F\tHewlettP\tHewlett Packard Enterprise\n24:F2:DD\tRadiantZ\tRadiant Zemax LLC\n24:F5:7E\tHwh\tHwh Co., Ltd.\n24:F5:A2\tBelkinIn\tBelkin International Inc.\n24:F5:AA\tSamsungE\tSamsung Electronics Co.,Ltd\n24:F6:77\tApple\tApple, Inc.\n24:FA:F3\tShanghai\tShanghai Flexem Technology Co.,Ltd.\n24:FB:65\tHuaweiTe\tHuawei Technologies Co.,Ltd\n24:FC:E5\tSamsungE\tSamsung Electronics Co.,Ltd\n24:FD:52\tLiteonTe\tLiteon Technology Corporation\n24:FD:5B\tSmartthi\tSmartThings, Inc.\n28:02:45\tKonzeSys\tKonze System Technology Co.,Ltd.\n28:02:D8\tSamsungE\tSamsung Electronics Co.,Ltd\n28:04:E0\tFermaxEl\tFermax Electronica S.A.U.\n28:06:1E\tNingboGl\tNingbo Global Useful Electric Co.,Ltd\n28:06:8D\tItlLlc\tItl, Llc\n28:07:0D\tGuangzho\tGuangzhou Winsound Information Technology Co.,Ltd.\n28:0B:5C\tApple\tApple, Inc.\n28:0C:28\tUnigenDa\tUnigen DataStorage Corporation\n28:0C:B8\tMikrosay\tMikrosay Yazilim ve Elektronik A.S.\n28:0D:FC\tSonyInte\tSony Interactive Entertainment Inc.\n28:0E:8B\tBeijingS\tBeijing Spirit Technology Development Co., Ltd.\n28:10:1B\tMagnacom\t\n28:10:7B\tD-LinkIn\tD-Link International\n28:11:A5\tBose\tBose Corporation\n28:14:71\tLantis\tLantis co., LTD.\n28:16:2E\t2wire\t2Wire Inc\n28:16:A8\tMicrosof\tMicrosoft Corporation\n28:16:AD\tIntelCor\tIntel Corporate\n28:17:CE\tOmnisens\tOmnisense Ltd\n28:18:78\tMicrosof\tMicrosoft Corporation\n28:18:FD\tAdityaIn\tAditya Infotech Ltd.\n28:22:46\tBeijingS\tBeijing Sinoix Communication Co., LTD\n28:23:73\tDigita\t\n28:24:FF\tWistronN\tWistron Neweb Corporation\n28:25:36\tShenzhen\tShenzhen Holatek Co.,Ltd\n28:26:A6\tPbrElect\tPBR electronics GmbH\n28:27:BF\tSamsungE\tSamsung Electronics Co.,Ltd\n28:28:5D\tZyxelCom\tZyxel Communications Corporation\n28:29:86\tApcBySch\tAPC by Schneider Electric\n28:29:CC\tCorsaTec\tCorsa Technology Incorporated\n28:29:D9\tGlobalbe\tGlobalBeiMing technology (Beijing)Co. Ltd\n28:2C:02\tIeeeRegi\tIEEE Registration Authority\n28:2C:02:00:00:00/28\tSakataDe\tSAKATA DENKI Co., Ltd.\n28:2C:02:10:00:00/28\tAstronic\tAstronics AES\n28:2C:02:20:00:00/28\tShenzhen\tShenzhen emb-star technology co. LTD\n28:2C:02:30:00:00/28\tDexinDig\tDexin Digital Technology Corp. Ltd.\n28:2C:02:40:00:00/28\tEfentoTP\tEFENTO T P SZYDŁOWSKI K ZARĘBA SPÓŁKA JAWNA\n28:2C:02:50:00:00/28\tLlcMicro\tLlc Microteh\n28:2C:02:60:00:00/28\tLookmanE\tLookman Electroplast Industries Ltd\n28:2C:02:70:00:00/28\tTelecomA\tTelecom and Microelectonic Industries\n28:2C:02:80:00:00/28\tShenzhen\tShenzhen Neoway Technology Co.,Ltd.\n28:2C:02:90:00:00/28\tSystecIn\tSystec Intelligent Building Technology (Tianjin) Co.,Ltd.\n28:2C:02:A0:00:00/28\tTokin\tTokin Limited\n28:2C:02:B0:00:00/28\tThirdrea\tThirdReality, Inc\n28:2C:02:C0:00:00/28\tEpochInt\tEpoch International Enterprises, Inc.\n28:2C:02:D0:00:00/28\tShenzhen\tShenzhen Domenor Technology Llc\n28:2C:02:E0:00:00/28\tCapintec\tCapintec, Inc.\n28:2C:B2\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n28:2F:C2\tAutomoti\tAutomotive Data Solutions\n28:30:AC\tFrontiir\tFrontiir Co. Ltd.\n28:31:52\tHuaweiTe\tHuawei Technologies Co.,Ltd\n28:31:66\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n28:32:C5\tHumax\tHUMAX Co., Ltd.\n28:34:10\tEnigmaDi\tEnigma Diagnostics Limited\n28:34:A2\tCisco\tCisco Systems, Inc\n28:35:45\tShenzhen\tSHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\n28:36:38\tIeeeRegi\tIEEE Registration Authority\n28:36:38:00:00:00/28\tKnowlesE\tKnowles Electronics LLC\n28:36:38:10:00:00/28\tPanasoni\tPanasonic System Solutions Europe\n28:36:38:20:00:00/28\tShenzhen\tShenzhen Gospell Smarthome Electronic Co., Ltd.\n28:36:38:30:00:00/28\tSabinete\tSabinetek\n28:36:38:40:00:00/28\tDspreadT\tDspread Technology (Beijing) Inc.\n28:36:38:50:00:00/28\tChargeli\tChargelib\n28:36:38:60:00:00/28\tGeorgNeu\tGeorg Neumann GmbH\n28:36:38:70:00:00/28\tInnovati\tInnovative Technology Ltd\n28:36:38:80:00:00/28\tHavellsI\tHavells India Limited\n28:36:38:90:00:00/28\tShenzhen\tShenzhen  Zhi Hua  Creative Technology  Co., Ltd.\n28:36:38:A0:00:00/28\tBluekeyP\tBluekey Pty Ltd\n28:36:38:B0:00:00/28\tShanghai\tShangHai Canall Information Technology Co.,Ltd\n28:36:38:C0:00:00/28\tSwisson\tSwisson AG\n28:36:38:D0:00:00/28\tAppeakTe\tAPPEAK Technology System Co.Ltd.\n28:36:38:E0:00:00/28\tScaHygie\tSCA Hygiene Products AB\n28:37:13\tShenzhen\tShenzhen 3Nod Digital Technology Co., Ltd.\n28:37:37\tApple\tApple, Inc.\n28:38:5C\tFlextron\tFlextronics\n28:38:CF\tGen2wave\t\n28:39:26\tCybertan\tCyberTAN Technology Inc.\n28:39:5E\tSamsungE\tSamsung Electronics Co.,Ltd\n28:39:E7\tPrecenoT\tPreceno Technology Pte.Ltd.\n28:3A:4D\tCloudNet\tCloud Network Technology (Samoa) Limited\n28:3B:82\tD-LinkIn\tD-Link International\n28:3B:96\tCoolCont\tCool Control LTD\n28:3C:E4\tHuaweiTe\tHuawei Technologies Co.,Ltd\n28:3E:76\tCommonNe\tCommon Networks\n28:3F:69\tSonyMobi\tSony Mobile Communications Inc\n28:40:1A\tC8Medise\tC8 MediSensors, Inc.\n28:41:21\tOptisens\tOptiSense Network, LLC\n28:44:30\tGenesist\tGenesisTechnical Systems (UK) Ltd\n28:47:AA\tNokia\tNokia Corporation\n28:48:46\tGridcent\tGridCentric Inc.\n28:4C:53\tIntuneNe\tIntune Networks\n28:4D:92\tLuminato\tLuminator\n28:4E:D7\tOutsmart\tOutSmart Power Systems, Inc.\n28:4F:CE\tLiaoning\tLiaoning Wontel Science and Technology Development Co.,Ltd.\n28:51:32\tShenzhen\tShenzhen Prayfly Technology Co.,Ltd\n28:52:61\tCisco\tCisco Systems, Inc\n28:52:E0\tLayonInt\tLayon international Electronic & Telecom Co.,Ltd\n28:56:5A\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n28:56:C1\tHarmanIn\tHarman International\n28:57:67\tDishTech\tDish Technologies Corp\n28:57:BE\tHangzhou\tHangzhou Hikvision Digital Technology Co.,Ltd.\n28:5A:EB\tApple\tApple, Inc.\n28:5F:2F\tRnware\tRNware Co.,Ltd.\n28:5F:DB\tHuaweiTe\tHuawei Technologies Co.,Ltd\n28:60:46\tLantechC\tLantech Communications Global, Inc.\n28:60:94\tCapelec\t\n28:63:36\tSiemens\tSiemens AG\n28:65:6B\tKeystone\tKeystone Microtech Corporation\n28:66:E3\tAzurewav\tAzureWave Technology Inc.\n28:6A:B8\tApple\tApple, Inc.\n28:6A:BA\tApple\tApple, Inc.\n28:6C:07\tXiaomiEl\tXIAOMI Electronics,CO.,LTD\n28:6D:97\tSamjin\tSAMJIN Co., Ltd.\n28:6D:CD\tBeijingW\tBeijing Winner Microelectronics Co.,Ltd.\n28:6E:D4\tHuaweiTe\tHuawei Technologies Co.,Ltd\n28:6F:7F\tCisco\tCisco Systems, Inc\n28:71:84\tSpirePay\tSpire Payments\n28:72:C5\tSmartmat\tSmartmatic Corp\n28:72:F0\tAthena\t\n28:76:10\tIgnitene\tIgniteNet\n28:76:CD\tFunshion\tFunshion Online Technologies Co.,Ltd\n28:79:94\tRealplay\tRealplay Digital Technology(Shenzhen) Co.,Ltd\n28:7A:EE\tArrisGro\tARRIS Group, Inc.\n28:7B:09\tZte\tzte corporation\n28:7C:DB\tHefeiToy\tHefei  Toycloud Technology Co.,ltd\n28:80:23\tHewlettP\tHewlett Packard\n28:80:A2\tNovatelW\tNovatel Wireless Solutions, Inc.\n28:83:35\tSamsungE\tSamsung Electronics Co.,Ltd\n28:84:0E\tSiliconV\tsilicon valley immigration service\n28:84:FA\tSharp\tSHARP Corporation\n28:85:2D\tTouchNet\tTouch Networks\n28:89:15\tCashguar\tCashGuard Sverige AB\n28:8A:1C\tJuniperN\tJuniper Networks\n28:8C:B8\tZte\tzte corporation\n28:91:D0\tStageTec\tStage Tec Entwicklungsgesellschaft für professionelle Audiotechnik mbH\n28:92:4A\tHewlettP\tHewlett Packard\n28:93:FE\tCisco\tCisco Systems, Inc\n28:94:0F\tCisco\tCisco Systems, Inc\n28:94:AF\tSamhwaTe\tSamhwa Telecom\n28:98:7B\tSamsungE\tSamsung Electronics Co.,Ltd\n28:99:3A\tAristaNe\tArista Networks\n28:9A:4B\tSteelser\tSteelSeries ApS\n28:9A:FA\tTctMobil\tTCT mobile ltd\n28:9E:97\tHuaweiTe\tHuawei Technologies Co.,Ltd\n28:9E:DF\tDanfossT\tDanfoss Turbocor Compressors, Inc\n28:9E:FC\tSagemcom\tSagemcom Broadband SAS\n28:A0:2B\tApple\tApple, Inc.\n28:A1:83\tAlpsElec\tAlps Electric Co.,Ltd.\n28:A1:86\tEnblink\t\n28:A1:92\tGerpSolu\tGERP Solution\n28:A1:EB\tEtekTech\tETEK TECHNOLOGY (SHENZHEN) CO.,LTD\n28:A2:41\tExlar\texlar corp\n28:A2:4B\tJuniperN\tJuniper Networks\n28:A5:74\tMillerEl\tMiller Electric Mfg. Co.\n28:A5:EE\tShenzhen\tShenzhen SDGI CATV Co., Ltd\n28:A6:AC\tSeca\tseca gmbh & co. kg\n28:A6:DB\tHuaweiTe\tHuawei Technologies Co.,Ltd\n28:AC:67\tMachPowe\tMach Power, Rappresentanze Internazionali s.r.l.\n28:AC:9E\tCisco\tCisco Systems, Inc\n28:AD:3E\tShenzhen\tShenzhen TONG BO WEI Technology CO.,LTD\n28:AF:0A\tSiriusXm\tSirius XM Radio Inc\n28:B0:CC\tXenyaDOO\tXenya d.o.o.\n28:B2:BD\tIntelCor\tIntel Corporate\n28:B3:AB\tGenmarkA\tGenmark Automation\n28:B4:48\tHuaweiTe\tHuawei Technologies Co.,Ltd\n28:B9:D9\tRadisys\tRadisys Corporation\n28:BA:18\tNextnavL\tNextNav, LLC\n28:BA:B5\tSamsungE\tSamsung Electronics Co.,Ltd\n28:BB:59\tRnetTech\tRNET Technologies, Inc.\n28:BC:18\tSourcing\tSourcingOverseas Co. Ltd\n28:BC:56\tEmac\tEMAC, Inc.\n28:BE:03\tTctMobil\tTCT mobile ltd\n28:BE:9B\tTechnico\tTechnicolor CH USA Inc.\n28:BF:89\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n28:C0:DA\tJuniperN\tJuniper Networks\n28:C1:3C\tHonHaiPr\tHon Hai Precision Ind. Co., Ltd.\n28:C2:DD\tAzurewav\tAzureWave Technology Inc.\n28:C6:3F\tIntelCor\tIntel Corporate\n28:C6:71\tYotaDevi\tYota Devices OY\n28:C6:8E\tNetgear\t\n28:C7:18\tAltierre\t\n28:C7:CE\tCisco\tCisco Systems, Inc\n28:C8:25\tDellking\tDellKing Industrial Co., Ltd\n28:C8:7A\tArrisGro\tARRIS Group, Inc.\n28:C9:14\tTaimag\tTaimag Corporation\n28:CA:09\tThyssenk\tThyssenKrupp Elevators (Shanghai) Co.,Ltd\n28:CB:EB\tOne\t\n28:CC:01\tSamsungE\tSamsung Electronics Co.,Ltd\n28:CC:FF\tCorporac\tCorporacion Empresarial Altra SL\n28:CD:1C\tEspotelO\tEspotel Oy\n28:CD:4C\tIndividu\tIndividual Computers GmbH\n28:CD:9C\tShenzhen\tShenzhen Dynamax Software Development Co.,Ltd.\n28:CF:08\tEssys\t\n28:CF:DA\tApple\tApple, Inc.\n28:CF:E9\tApple\tApple, Inc.\n28:D0:CB\tCambridg\tCambridge Communication Systems Ltd\n28:D1:AF\tNokia\tNokia Corporation\n28:D2:44\tLcfcHefe\tLCFC(HeFei) Electronics Technology Co., Ltd.\n28:D4:36\tJiangsuD\tJiangsu dewosi electric co., LTD\n28:D5:76\tPremierW\tPremier Wireless, Inc.\n28:D9:3E\tTelecor\tTelecor Inc.\n28:D9:8A\tHangzhou\tHangzhou Konke Technology Co.,Ltd.\n28:D9:97\tYuduanMo\tYuduan Mobile Co., Ltd.\n28:DB:81\tShanghai\tShanghai Guao Electronic Technology Co., Ltd\n28:DE:F6\tBiomerie\tbioMerieux Inc.\n28:E0:2C\tApple\tApple, Inc.\n28:E1:4C\tApple\tApple, Inc.\n28:E2:97\tShanghai\tShanghai InfoTM Microelectronics Co.,Ltd.\n28:E3:1F\tXiaomiCo\tXiaomi Communications Co Ltd\n28:E3:47\tLiteonTe\tLiteon Technology Corporation\n28:E4:76\tPi-Coral\t\n28:E6:08\tTokheim\t\n28:E6:E9\tSisSatIn\tSIS Sat Internet Services GmbH\n28:E7:94\tMicrotim\tMicrotime Computer Inc.\n28:E7:CF\tApple\tApple, Inc.\n28:ED:58\tJagJakob\tJAG Jakob AG\n28:ED:6A\tApple\tApple, Inc.\n28:ED:E0\tAmpakTec\tAMPAK Technology, Inc.\n28:EE:2C\tFrontlin\tFrontline Test Equipment\n28:EE:52\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n28:EE:D3\tShenzhen\tShenzhen Super D Technology Co., Ltd\n28:EF:01\tPrivate\t\n28:F0:76\tApple\tApple, Inc.\n28:F1:0E\tDell\tDell Inc.\n28:F3:58\t2c-Trifo\t2C - Trifonov & Co\n28:F3:66\tShenzhen\tShenzhen Bilian electronic CO.,LTD\n28:F5:32\tAdd-Engi\tADD-Engineering BV\n28:F5:37\tIeeeRegi\tIEEE Registration Authority\n28:F5:37:00:00:00/28\tValeoSie\tValeo Siemens eAutomotive Norway\n28:F5:37:10:00:00/28\tUmojo\t\n28:F5:37:20:00:00/28\tUnicairC\tUnicair Communication Tec Co., Ltd.\n28:F5:37:30:00:00/28\tPrimetec\tPrimetech Engineering Corp.\n28:F5:37:40:00:00/28\tPhynLlc\tPhyn LLC\n28:F5:37:50:00:00/28\tAtomrock\tAtomrock LLC\n28:F5:37:60:00:00/28\tMyomega\tMyOmega Systems GmbH\n28:F5:37:70:00:00/28\tShenzhen\tShenzhen Modern Cowboy Technology Co.,Ltd.\n28:F5:37:80:00:00/28\t1more\t1MORE, INC.\n28:F5:37:90:00:00/28\tHerbertW\tHerbert Waldmann GmbH & Co. KG\n28:F5:37:A0:00:00/28\tHoneywel\tHoneywell Safety Products USA, Inc\n28:F5:37:B0:00:00/28\tLogimSof\tLogiM GmbH Software und Entwicklung\n28:F5:37:C0:00:00/28\tMatricxS\tMatricx Singapore Pte Ltd\n28:F5:37:D0:00:00/28\tSkyrocke\tSkyrockettoys LLC\n28:F5:37:E0:00:00/28\tPerforma\tPerformance Motion Devices\n28:F6:06\tSyesSrl\tSyes srl\n28:FA:A0\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n28:FB:D3\tRagentek\tRagentek Technology Group\n28:FC:51\tElectric\tThe Electric Controller and Manufacturing Co., LLC\n28:FC:F6\tShenzhen\tShenzhen Xin KingBrand enterprises Co.,Ltd\n28:FD:80\tIeeeRegi\tIEEE Registration Authority\n28:FD:80:00:00:00/28\tMillcode\t\n28:FD:80:10:00:00/28\tGalileo\tGalileo, Inc.\n28:FD:80:20:00:00/28\tZhixiang\tZhixiang Technology Co., Ltd.\n28:FD:80:30:00:00/28\tNuuo\tNUUO, Inc.\n28:FD:80:40:00:00/28\tDigitalS\tDigital Signal Corp\n28:FD:80:50:00:00/28\tXiaocong\tXiaocong Network Limited\n28:FD:80:60:00:00/28\tVigilMon\tVigil Monitoring\n28:FD:80:70:00:00/28\tUniversi\tUniversity of York\n28:FD:80:80:00:00/28\tJascoPro\tJasco Products Company\n28:FD:80:90:00:00/28\tJinliton\tJinlitong International Co.,Ltd\n28:FD:80:A0:00:00/28\tApolloDi\tApollo Digital (Taiwan) Ltd.\n28:FD:80:B0:00:00/28\tPoketHar\tPoket Hardware GmbH\n28:FD:80:C0:00:00/28\tAirbusDe\tAirbus Defence and Space Oy\n28:FD:80:D0:00:00/28\tGrandway\tGrandway Technology (Shenzhen) Limited\n28:FD:80:E0:00:00/28\tT-RadioA\tT-Radio AS\n28:FD:80:F0:00:00/28\tPrivate\t\n28:FE:CD\tLemobile\tLemobile Information Technology (Beijing) Co., Ltd.\n28:FE:DE\tComesta\tCOMESTA, Inc.\n28:FF:3C\tApple\tApple, Inc.\n28:FF:3E\tZte\tzte corporation\n2A:EA:15\tTibitCom\tTibit Communications\n2A:FD:6A\tCharterC\tCharter Communications\n2C:00:2C\tUnowhy\t\n2C:00:33\tEcontrol\tEControls, LLC\n2C:00:F7\tXos\t\n2C:01:0B\tNascentT\tNASCENT Technology, LLC - RemKon\n2C:02:9F\t3alogics\t\n2C:06:23\tWinLeade\tWin Leader Inc.\n2C:07:3C\tDevline\tDevline Limited\n2C:08:1C\tOvh\t\n2C:08:8C\tHumax\tHUMAX Co., Ltd.\n2C:09:4D\tRaptorEn\tRaptor Engineering, LLC\n2C:09:CB\tCobs\tCobs Ab\n2C:0B:E9\tCisco\tCisco Systems, Inc\n2C:0E:3D\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\n2C:10:C1\tNintendo\tNintendo Co., Ltd.\n2C:15:E1\tPhicommS\tPhicomm (Shanghai) Co., Ltd.\n2C:18:75\tSkyworth\tSkyworth Digital Technology(Shenzhen) Co.,Ltd\n2C:18:AE\tTrendEle\tTrend Electronics Co., Ltd.\n2C:19:84\tIdnTelec\tIDN Telecom, Inc.\n2C:1A:31\tElectron\tElectronics Company Limited\n2C:1B:C8\tHunanTop\tHunan Topview Network System CO.,LTD\n2C:1D:B8\tArrisGro\tARRIS Group, Inc.\n2C:1E:EA\tAerodev\t\n2C:1F:23\tApple\tApple, Inc.\n2C:20:0B\tApple\tApple, Inc.\n2C:21:31\tJuniperN\tJuniper Networks\n2C:21:72\tJuniperN\tJuniper Networks\n2C:21:D7\tImax\tIMAX Corporation\n2C:22:8B\tCtrSrl\tCtr Srl\n2C:23:3A\tHewlettP\tHewlett Packard\n2C:24:5F\tBabolatV\tBabolat VS\n2C:26:17\tOculusVr\tOculus VR, LLC\n2C:26:5F\tIeeeRegi\tIEEE Registration Authority\n2C:26:5F:00:00:00/28\tXiamenVo\tXiamen Vorlink Iot Technology Co.,Ltd.\n2C:26:5F:10:00:00/28\tGriessba\tGriessbach\n2C:26:5F:20:00:00/28\tJiangsuJ\tJiangsu JARI Technology Group Co., LTD\n2C:26:5F:30:00:00/28\tShenzhen\tshenzhen Clever Electronic Co., Ltd.\n2C:26:5F:40:00:00/28\tGtaElect\tGTA Electronics Co., Ltd.\n2C:26:5F:50:00:00/28\tMotec\tMotec GmbH\n2C:26:5F:60:00:00/28\tAppostar\tAppostar Technology Co. Ltd\n2C:26:5F:70:00:00/28\tCoremate\tCoremate Technical Co., Ltd\n2C:26:5F:80:00:00/28\tItusNetw\tItus Networks, LLC\n2C:26:5F:90:00:00/28\tBrüelKja\tBrüel & Kjaer Vibro GmbH\n2C:26:5F:A0:00:00/28\tPolaraEn\tPolara Engineering\n2C:26:5F:B0:00:00/28\tRexgen\tRexgen Inc.\n2C:26:5F:C0:00:00/28\tAatonDig\tAaton Digital\n2C:26:5F:D0:00:00/28\tECore\tE Core Corporation\n2C:26:5F:E0:00:00/28\tHysentel\tHysentel Technology Co., Ltd\n2C:26:5F:F0:00:00/28\tPrivate\t\n2C:26:C5\tZte\tzte corporation\n2C:27:9E\tIeeeRegi\tIEEE Registration Authority\n2C:27:9E:00:00:00/28\tChangzho\tChangzhou WEBO Weighing Device & System CO.,LTD\n2C:27:9E:10:00:00/28\tElectron\tElectronique Bluewave Inc.\n2C:27:9E:20:00:00/28\tKunyiEle\tKunyi electronic technology (Shanghai) Co., Ltd.\n2C:27:9E:30:00:00/28\tPrivate\t\n2C:27:9E:40:00:00/28\tShijiazh\tShijiazhuang King Transportation Equipment Co.,Ltd\n2C:27:9E:50:00:00/28\tAudionor\tAudioNord Distribution A/S\n2C:27:9E:60:00:00/28\tRutledge\tRutledge Omni Services Pte Ltd\n2C:27:9E:80:00:00/28\tInstitut\tInstitut Dr. Foerster GmbH & Co. KG\n2C:27:9E:90:00:00/28\tOctoscop\toctoScope, Inc.\n2C:27:9E:A0:00:00/28\tExegy\tExegy Inc\n2C:27:9E:C0:00:00/28\tWaycomTe\tWAYCOM Technology Co.,Ltd\n2C:27:9E:D0:00:00/28\tJiangsuJ\tJiangsu JianHu Science & Technology Co., Ltd.\n2C:27:9E:E0:00:00/28\tAmaryllo\tAmaryllo International Inc.\n2C:27:D7\tHewlettP\tHewlett Packard\n2C:28:2D\tBbkEduca\tBbk Educational Electronics Corp.,Ltd.\n2C:28:B7\tHangzhou\tHangzhou Ruiying technology co., LTD\n2C:29:97\tMicrosof\tMicrosoft Corporation\n2C:2D:48\tBctElect\tbct electronic GesmbH\n2C:30:33\tNetgear\t\n2C:30:68\tPantech\tPantech Co.,Ltd\n2C:31:24\tCisco\tCisco Systems, Inc\n2C:33:11\tCisco\tCisco Systems, Inc\n2C:33:61\tApple\tApple, Inc.\n2C:33:7A\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n2C:34:27\tErcoGene\tERCO & GENER\n2C:35:57\tElliyPow\tELLIY Power CO..Ltd\n2C:36:A0\tCapisco\tCapisco Limited\n2C:36:F8\tCisco\tCisco Systems, Inc\n2C:37:31\tShenzhen\tShenzhen Yifang Digital Technology Co.,Ltd.\n2C:37:96\tCybo\tCybo Co.,Ltd.\n2C:37:C5\tQingdaoH\tQingdao Haier Intelligent Home Appliance Technology Co.,Ltd\n2C:39:96\tSagemcom\tSagemcom Broadband SAS\n2C:39:C1\tCiena\tCiena Corporation\n2C:3A:28\tFagorEle\tFagor Electrónica\n2C:3A:E8\tEspressi\tEspressif Inc.\n2C:3B:FD\tNetstorT\tNetstor Technology Co., Ltd.\n2C:3E:CF\tCisco\tCisco Systems, Inc\n2C:3F:38\tCisco\tCisco Systems, Inc\n2C:3F:3E\tAlge-Tim\tAlge-Timing GmbH\n2C:40:2B\tSmartIbl\tSmart iBlue Technology Limited\n2C:40:53\tSamsungE\tSamsung Electronics Co.,Ltd\n2C:41:38\tHewlettP\tHewlett Packard\n2C:41:A1\tBose\tBose Corporation\n2C:42:05\tLytx\t\n2C:43:1A\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\n2C:44:01\tSamsungE\tSamsung Electronics Co.,Ltd\n2C:44:1B\tSpectrum\tSpectrum Medical Limited\n2C:44:FD\tHewlettP\tHewlett Packard\n2C:47:59\tBeijingM\tBeijing MEGA preponderance Science & Technology Co. Ltd\n2C:48:35\tIeeeRegi\tIEEE Registration Authority\n2C:48:35:00:00:00/28\tProgress\tProgress Rail Services, Inspection and Information Systems\n2C:48:35:10:00:00/28\tAdvanced\tAdvanced Electronics Company Ltd\n2C:48:35:20:00:00/28\tRheonikM\tRheonik Messtechnik GmbH\n2C:48:35:30:00:00/28\tNewtraxT\tNewtrax Technologies Inc\n2C:48:35:40:00:00/28\tGeartech\tGeartech Ltd\n2C:48:35:50:00:00/28\tScoutSec\tScout Security, Inc.\n2C:48:35:60:00:00/28\tExertusO\tExertus Oy\n2C:48:35:70:00:00/28\tFast\t\n2C:48:35:80:00:00/28\tDpsElect\tDPS Electronics\n2C:48:35:90:00:00/28\tSureflap\tSureFlap Ltd\n2C:48:35:A0:00:00/28\tCollatz+\tCollatz+Trojan GmbH\n2C:48:35:B0:00:00/28\tShanghai\tShanghai Visteon Automotive Electronics System CO. Ltd.\n2C:48:35:C0:00:00/28\tSantec\tSantec Corporation\n2C:48:35:D0:00:00/28\tPhasorSo\tPhasor Solutions Ltd\n2C:48:35:E0:00:00/28\tIrootech\tIrootech Technology Co.,Ltd\n2C:4D:54\tAsustekC\tASUSTek COMPUTER INC.\n2C:4D:79\tWeifangG\tWeifang Goertek Electronics Co.,Ltd\n2C:50:89\tShenzhen\tShenzhen Kaixuan Visual Technology Co.,Limited\n2C:53:4A\tShenzhen\tShenzhen Winyao Electronic Limited\n2C:54:2D\tCisco\tCisco Systems, Inc\n2C:54:91\tMicrosof\tMicrosoft Corporation\n2C:54:CF\tLgElectr\tLG Electronics (Mobile Communications)\n2C:55:3C\tGainspee\tGainspeed, Inc.\n2C:55:D3\tHuaweiTe\tHuawei Technologies Co.,Ltd\n2C:56:DC\tAsustekC\tASUSTek COMPUTER INC.\n2C:57:31\tWingtech\tWingtech Group (HongKong）Limited\n2C:58:4F\tArrisGro\tARRIS Group, Inc.\n2C:59:8A\tLgElectr\tLG Electronics (Mobile Communications)\n2C:59:E5\tHewlettP\tHewlett Packard\n2C:5A:05\tNokia\tNokia Corporation\n2C:5A:0F\tCisco\tCisco Systems, Inc\n2C:5A:8D\tSystroni\tSYSTRONIK Elektronik u. Systemtechnik GmbH\n2C:5A:A3\tPromateE\tPromate Electronic Co.Ltd\n2C:5B:B8\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n2C:5B:E1\tCentripe\tCentripetal Networks, Inc\n2C:5D:93\tRuckusWi\tRuckus Wireless\n2C:5F:F3\tPertroni\tPertronic Industries\n2C:60:0C\tQuantaCo\tQuanta Computer Inc.\n2C:61:04\tShenzhen\tShenzhen Fenglian Technology Co., Ltd.\n2C:61:F6\tApple\tApple, Inc.\n2C:62:5A\tFinestSe\tFinest Security Systems Co., Ltd\n2C:62:89\tRegeners\tRegenersis (Glenrothes) Ltd\n2C:63:73\tSichuanT\tSichuan Tianyi Comheart Telecomco., Ltd\n2C:67:98\tIntaltec\tInTalTech Ltd.\n2C:67:FB\tShenzhen\tShenZhen Zhengjili Electronics Co., LTD\n2C:69:BA\tRfContro\tRF Controls, LLC\n2C:6A:6F\tIeeeRegi\tIEEE Registration Authority\n2C:6A:6F:00:00:00/28\tShanghai\tShanghai Shuncom Electronic Technology Co.,Ltd\n2C:6A:6F:10:00:00/28\tElkoEpSR\tELKO EP, s.r.o.\n2C:6A:6F:20:00:00/28\tNanchang\tNanChang LangJie Technology Co.,Ltd\n2C:6A:6F:30:00:00/28\tCloudpro\tCloudproject Generation Srl\n2C:6A:6F:40:00:00/28\tTinyco\t\n2C:6A:6F:50:00:00/28\tShenZhen\tSHEN ZHEN SIS SCIENCE & TECHNOLOGY LTD.\n2C:6A:6F:60:00:00/28\tBeep\tBeep, Inc.\n2C:6A:6F:70:00:00/28\tSmDsp\tSm Dsp Co.,Ltd.\n2C:6A:6F:80:00:00/28\tMilbankM\tMilbank Manufacturing Co.\n2C:6A:6F:90:00:00/28\tLogicIoA\tLogic IO Aps\n2C:6A:6F:A0:00:00/28\tWellntel\tWellntel, Inc.\n2C:6A:6F:B0:00:00/28\tSchneide\tSchneider Electric Korea\n2C:6A:6F:C0:00:00/28\tSensity\tSensity Systems\n2C:6A:6F:D0:00:00/28\tHoljeron\t\n2C:6A:6F:E0:00:00/28\tEatonFhf\tEATON FHF Funke + Huster Fernsig GmbH\n2C:6A:6F:F0:00:00/28\tPrivate\t\n2C:6B:7D\tTexasIns\tTexas Instruments\n2C:6B:F5\tJuniperN\tJuniper Networks\n2C:6E:85\tIntelCor\tIntel Corporate\n2C:6F:C9\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n2C:71:55\tHivemoti\tHiveMotion\n2C:72:C3\tSoundmat\tSoundmatters\n2C:73:60\tEardaTec\tEarda Technologies co Ltd\n2C:75:0F\tShanghai\tShanghai Dongzhou-Lawton Communication Technology Co. Ltd.\n2C:76:8A\tHewlettP\tHewlett Packard\n2C:79:D7\tSagemcom\tSagemcom Broadband SAS\n2C:7B:5A\tMilper\tMilper Ltd\n2C:7B:84\tOooPetrT\tOOO Petr Telegin\n2C:7C:E4\tWuhanTia\tWuhan Tianyu Information Industry Co., Ltd.\n2C:7E:81\tArrisGro\tARRIS Group, Inc.\n2C:7E:CF\tOnzo\tOnzo Ltd\n2C:80:65\tHartingO\tHARTING Inc. of North America\n2C:81:58\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n2C:86:D2\tCisco\tCisco Systems, Inc\n2C:8A:72\tHtc\tHTC Corporation\n2C:8B:F2\tHitachiM\tHitachi Metals America Ltd\n2C:91:27\tEintechn\tEintechno Corporation\n2C:92:2C\tKishuGik\tKishu Giken Kogyou Company Ltd,.\n2C:94:64\tCincoze\tCincoze Co., Ltd.\n2C:95:69\tArrisGro\tARRIS Group, Inc.\n2C:95:7F\tZte\tzte corporation\n2C:96:62\tInvenitB\tInvenit BV\n2C:97:17\tICYBV\tI.C.Y. B.V.\n2C:97:B1\tHuaweiTe\tHuawei Technologies Co.,Ltd\n2C:99:24\tArrisGro\tARRIS Group, Inc.\n2C:9A:A4\tEolo\tEolo SpA\n2C:9D:1E\tHuaweiTe\tHuawei Technologies Co.,Ltd\n2C:9E:5F\tArrisGro\tARRIS Group, Inc.\n2C:9E:EC\tJabilCir\tJabil Circuit Penang\n2C:9E:FC\tCanon\tCanon Inc.\n2C:A0:2F\tVeroguar\tVeroguard Systems Pty Ltd\n2C:A1:57\tAcromate\tacromate, Inc.\n2C:A1:7D\tArrisGro\tARRIS Group, Inc.\n2C:A2:B4\tFortifyT\tFortify Technologies, LLC\n2C:A3:0E\tPowerDra\tPower Dragon Development Limited\n2C:A5:39\tParallel\tParallel Wireless, Inc\n2C:A7:80\tTrueTech\tTrue Technologies Inc.\n2C:A8:35\tRim\t\n2C:AB:00\tHuaweiTe\tHuawei Technologies Co.,Ltd\n2C:AB:25\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\n2C:AB:A4\tCiscoSpv\tCisco SPVTG\n2C:AB:EB\tCisco\tCisco Systems, Inc\n2C:AC:44\tConextop\t\n2C:AD:13\tShenzhen\tShenzhen Zhilu Technology Co.,Ltd\n2C:AE:2B\tSamsungE\tSamsung Electronics Co.,Ltd\n2C:B0:5D\tNetgear\t\n2C:B0:DF\tSolitonT\tSoliton Technologies Pvt Ltd\n2C:B1:15\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n2C:B2:1A\tPhicommS\tPhicomm (Shanghai) Co., Ltd.\n2C:B4:3A\tApple\tApple, Inc.\n2C:B6:93\tRadware\t\n2C:B6:9D\tRedDigit\tRED Digital Cinema\n2C:B8:ED\tSonicwal\tSonicWall\n2C:BA:BA\tSamsungE\tSamsung Electronics Co.,Ltd\n2C:BE:08\tApple\tApple, Inc.\n2C:BE:97\tIngenieu\tIngenieurbuero Bickele und Buehler GmbH\n2C:C2:60\tOracle\tOracle Corporation\n2C:C5:48\tIadea\tIAdea Corporation\n2C:C5:D3\tRuckusWi\tRuckus Wireless\n2C:CA:0C\tWithusPl\tWithus Planet\n2C:CC:15\tNokia\tNokia Corporation\n2C:CC:44\tSonyInte\tSony Interactive Entertainment Inc.\n2C:CD:27\tPrecor\tPrecor Inc\n2C:CD:43\tSummitTe\tSummit Technology Group\n2C:CD:69\tAqaviCom\tAqavi.com\n2C:CF:58\tHuaweiTe\tHuawei Technologies Co.,Ltd\n2C:D0:2D\tCisco\tCisco Systems, Inc\n2C:D0:5A\tLiteonTe\tLiteon Technology Corporation\n2C:D1:41\tIeeeRegi\tIEEE Registration Authority\n2C:D1:41:00:00:00/28\tIcirroun\tiCIRROUND Inc\n2C:D1:41:10:00:00/28\tEzee\tEzee Systems Limited\n2C:D1:41:20:00:00/28\tIntellil\tIntelliLUM\n2C:D1:41:30:00:00/28\tAoptixTe\tAOptix Technologies, Inc\n2C:D1:41:40:00:00/28\tShanghai\tShanghai RW ELE&TEC CO.,LTD\n2C:D1:41:50:00:00/28\tZenic\tZenic Inc.\n2C:D1:41:60:00:00/28\tBoweiTec\tBowei Technology Company Limited\n2C:D1:41:70:00:00/28\tXiamen35\tXiaMen 35.com Technology Co,.Ltd.\n2C:D1:41:80:00:00/28\tMinnoLlc\tMinno LLC\n2C:D1:41:90:00:00/28\tBeijingH\tBeijing Hexing Chuangxiang Technology Co., Ltd.\n2C:D1:41:A0:00:00/28\tFiberroa\tFiberroad Technology Co., Ltd.\n2C:D1:41:B0:00:00/28\tResusInd\tResus Industries\n2C:D1:41:C0:00:00/28\tPinShang\tPIN SHANG LED Co., LTD.\n2C:D1:41:D0:00:00/28\tPrivate\t\n2C:D1:41:E0:00:00/28\tCitaSmar\tCita Smart Solutions Ltd\n2C:D1:41:F0:00:00/28\tPrivate\t\n2C:D1:DA\tSanjole\tSanjole, Inc.\n2C:D2:E7\tNokia\tNokia Corporation\n2C:D4:44\tFujitsu\tFujitsu Limited\n2C:D9:74\tHuiZhouG\tHui Zhou Gaoshengda Technology Co.,LTD\n2C:DC:AD\tWistronN\tWistron Neweb Corporation\n2C:DD:0C\tDiscover\tDiscovergy GmbH\n2C:DD:95\tTaicangT\tTaicang T&W Electronics\n2C:DD:A3\tPointGre\tPoint Grey Research Inc.\n2C:E2:A8\tDevicede\tDeviceDesign\n2C:E4:12\tSagemcom\tSagemcom Broadband SAS\n2C:E6:CC\tRuckusWi\tRuckus Wireless\n2C:E8:71\tAlertMet\tAlert Metalguard ApS\n2C:ED:EB\tAlpheusD\tAlpheus Digital Company Limited\n2C:EE:26\tPetroleu\tPetroleum Geo-Services\n2C:F0:A2\tApple\tApple, Inc.\n2C:F0:EE\tApple\tApple, Inc.\n2C:F2:03\tEmkoElek\tEmko Elektronik San Ve Tic As\n2C:F4:C5\tAvaya\tAvaya Inc\n2C:F7:F1\tSeeedTec\tSeeed Technology Inc.\n2C:FA:A2\tAlcatel-\tAlcatel-Lucent Enterprise\n2C:FC:E4\tCtekSwed\tCTEK Sweden AB\n2C:FD:37\tBlueCaly\tBlue Calypso, Inc.\n2C:FD:A1\tAsustekC\tASUSTek COMPUTER INC.\n2C:FD:AB\tMotorola\tMotorola (Wuhan) Mobility Technologies Communication Co., Ltd.\n2C:FF:65\tOkiElect\tOki Electric Industry Co., Ltd.\n2E:2E:2E\tLaaLocal\tLAA (Locally Administered Address) for Meditech Systems\n30:05:3F\tJti\tJTI Co.,Ltd.\n30:05:5C\tBrotherI\tBrother industries, LTD.\n30:07:4D\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\n30:09:F9\tIeeeRegi\tIEEE Registration Authority\n30:09:F9:00:00:00/28\tHurrayCl\tHurray Cloud Technology Co., Ltd.\n30:09:F9:10:00:00/28\tShenzhen\tShenzhen Sunvell Electronics Co., Ltd.\n30:09:F9:20:00:00/28\tBeijingN\tBeijing Netswift Technology Co.,Ltd.\n30:09:F9:30:00:00/28\tOooMicro\tOOO Microlink-Svyaz\n30:09:F9:40:00:00/28\tPunktTro\tPunkt Tronics AG\n30:09:F9:50:00:00/28\tVelsitec\tVELSITEC-CLIBASE\n30:09:F9:60:00:00/28\tBeijingM\tBeijing Mydreamplus Information Technology Co., Ltd.\n30:09:F9:70:00:00/28\tMaytroni\tMaytronics Ltd.\n30:09:F9:80:00:00/28\tEssenceS\tessence security\n30:09:F9:90:00:00/28\tBonraybi\tBonraybio\n30:09:F9:A0:00:00/28\tShenzhen\tShenzhen Tencent Computer System Co., Ltd.\n30:09:F9:B0:00:00/28\tSichuanN\tSichuan Nebula Networks Co.,LTD.\n30:09:F9:C0:00:00/28\tHoneywel\tHoneywell\n30:09:F9:D0:00:00/28\tTechnolo\tTechnology for Humankind\n30:09:F9:E0:00:00/28\tZhongliH\tZhongLi HengFeng (Shenzhen) Technology co.,Ltd.\n30:0A:60\tIeeeRegi\tIEEE Registration Authority\n30:0A:60:00:00:00/28\tKazutech\tKAZUtechnica Co.,Ltd.\n30:0A:60:10:00:00/28\tBeijingR\tBeijing Ruiteng Zhongtian TECH Ltd.,Co\n30:0A:60:20:00:00/28\tAdvanced\tAdvanced Electronic Designs, Inc.\n30:0A:60:30:00:00/28\tPrivate\t\n30:0A:60:40:00:00/28\tAvicJonh\tAvic Jonhon Optronic Technology Co., Ltd.\n30:0A:60:50:00:00/28\tA9\t\n30:0A:60:60:00:00/28\tRealtime\tRealtime biometrics India pvt ltd\n30:0A:60:70:00:00/28\tNewtons4\tNewtons4th Ltd\n30:0A:60:80:00:00/28\tBronkhor\tBronkhorst High-Tech BV\n30:0A:60:90:00:00/28\tWintekSy\tWINTEK System Co., Ltd\n30:0A:60:A0:00:00/28\tAmpetron\tAmpetronic Ltd\n30:0A:60:B0:00:00/28\tGiax\tGiax GmbH\n30:0A:60:C0:00:00/28\tThermoPr\tThermo Process Instruments, LP\n30:0A:60:D0:00:00/28\tSixthEne\tSixth Energy Technologies Private Limited\n30:0A:60:E0:00:00/28\tImageoSR\tImageo s.r.o.\n30:0A:C5\tRuioTele\tRuio telecommunication technologies Co., Limited\n30:0B:9C\tDeltaMob\tDelta Mobile Systems, Inc.\n30:0C:23\tZte\tzte corporation\n30:0D:2A\tZhejiang\tZhejiang Wellcom Technology Co.,Ltd.\n30:0D:43\tMicrosof\tMicrosoft Mobile Oy\n30:0E:D5\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n30:0E:E3\tAquantia\tAquantia Corporation\n30:10:B3\tLiteonTe\tLiteon Technology Corporation\n30:10:E4\tApple\tApple, Inc.\n30:13:89\tSiemensA\tSiemens AG, Automations & Drives,\n30:14:2D\tPiciorgr\tPiciorgros GmbH\n30:14:4A\tWistronN\tWistron Neweb Corporation\n30:15:18\tUbiquito\tUbiquitous Communication Co. ltd.\n30:16:8D\tProlon\t\n30:17:C8\tSonyMobi\tSony Mobile Communications Inc\n30:18:CF\tDeosCont\tDEOS control systems GmbH\n30:19:66\tSamsungE\tSamsung Electronics Co.,Ltd\n30:1A:28\tMakoNetw\tMako Networks Ltd\n30:1F:9A\tIeeeRegi\tIEEE Registration Authority\n30:1F:9A:00:00:00/28\tIlsanEle\tIlsan Electronics\n30:1F:9A:10:00:00/28\tDewesoft\tDewesoft d.o.o.\n30:1F:9A:20:00:00/28\tChisonMe\tCHISON Medical Technologies Co., Ltd.\n30:1F:9A:30:00:00/28\tMicomsof\tMicomsoft Co.,Ltd.\n30:1F:9A:40:00:00/28\tNcmSuppl\tNCM Supplies, Inc.\n30:1F:9A:50:00:00/28\tBeijingS\tBeijing Surestar Technology Co. Ltd,\n30:1F:9A:60:00:00/28\tYishengT\tYiSheng technology  co.,LTD\n30:1F:9A:70:00:00/28\tTriax\tTriax A/S\n30:1F:9A:80:00:00/28\tFineTriu\tFine Triumph Technology Corp.,Ltd.\n30:1F:9A:90:00:00/28\tPrivate\t\n30:1F:9A:A0:00:00/28\tHunanCha\tHunan Changsha Hengjian Technoldgy Develpment Co.,Ltd.\n30:1F:9A:B0:00:00/28\tSmartCom\tSmart Component Technologies LTD\n30:1F:9A:C0:00:00/28\tOrigamiG\tOrigami Group Limited\n30:1F:9A:D0:00:00/28\tOlimex\tOLIMEX Ltd\n30:1F:9A:E0:00:00/28\tShenzhen\tShenzhen Fengliyuan Energy Conservating Technology Co. Ltd\n30:21:5B\tShenzhen\tShenzhen Ostar Display Electronic Co.,Ltd\n30:23:03\tBelkinIn\tBelkin International Inc.\n30:24:32\tIntelCor\tIntel Corporate\n30:29:52\tHillston\tHillstone Networks Inc\n30:29:BE\tShanghai\tShanghai MRDcom Co.,Ltd\n30:2D:E8\tJdaLlcJd\tJDA, LLC (JDA Systems)\n30:32:94\tW-Ie-Ne-\tW-IE-NE-R Plein & Baus GmbH\n30:32:D4\tHanilstm\tHanilstm Co., Ltd.\n30:33:35\tBoosty\t\n30:34:D2\tAvailink\tAvailink, Inc.\n30:35:AD\tApple\tApple, Inc.\n30:37:A6\tCisco\tCisco Systems, Inc\n30:38:55\tNokia\tNokia Corporation\n30:39:26\tSonyMobi\tSony Mobile Communications Inc\n30:39:55\tShenzhen\tShenzhen Jinhengjia Electronic Co., Ltd.\n30:39:F2\tAdbBroad\tADB Broadband Italia\n30:3A:64\tIntelCor\tIntel Corporate\n30:3D:08\tGlinttTe\tGlintt Tes S.A.\n30:3E:AD\tSonavoxC\tSonavox Canada Inc\n30:41:74\tAltecLan\tAltec Lansing Llc\n30:42:25\tBurg-Wäc\tBURG-WÄCHTER KG\n30:42:A1\tIlumisys\tilumisys Inc. DBA Toggled\n30:44:49\tPlath\tPLATH GmbH\n30:44:87\tHefeiRad\tHefei Radio Communication Technology Co., Ltd\n30:44:A1\tShanghai\tShanghai Nanchao Information Technology\n30:45:11\tTexasIns\tTexas Instruments\n30:45:96\tHuaweiTe\tHuawei Technologies Co.,Ltd\n30:46:9A\tNetgear\t\n30:49:3B\tNanjingZ\tNanjing Z-Com Wireless Co.,Ltd\n30:4B:07\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n30:4C:7E\tPanasoni\tPanasonic Electric Works Automation Controls Techno Co.,Ltd.\n30:4E:C3\tTianjinT\tTianjin Techua Technology Co., Ltd.\n30:51:F8\tByk-Gard\tBYK-Gardner GmbH\n30:52:5A\tNst\tNST Co., LTD\n30:52:CB\tLiteonTe\tLiteon Technology Corporation\n30:55:ED\tTrexNetw\tTrex Network LLC\n30:57:AC\tIrlab\tIrlab Ltd.\n30:58:90\tFrontier\tFrontier Silicon Ltd\n30:59:5B\tStreamno\tstreamnow AG\n30:59:B7\tMicrosof\tMicrosoft\n30:5A:3A\tAsustekC\tASUSTek COMPUTER INC.\n30:5D:38\tBeissbar\tBeissbarth\n30:5D:A6\tAdvalySy\tADVALY SYSTEM Inc.\n30:60:23\tArrisGro\tARRIS Group, Inc.\n30:61:12\tPav\tPAV GmbH\n30:61:18\tParadom\tParadom Inc.\n30:63:6B\tApple\tApple, Inc.\n30:65:EC\tWistronC\tWistron (ChongQing)\n30:68:8C\tReachTec\tReach Technology Inc.\n30:69:4B\tRim\t\n30:6A:85\tSamsungE\tSamsung Electronics Co.,Ltd\n30:6C:BE\tSkymotio\tSkymotion Technology (HK) Limited\n30:6E:5C\tValidusT\tValidus Technologies\n30:71:B2\tHangzhou\tHangzhou Prevail Optoelectronic Equipment Co.,LTD.\n30:73:50\tInpecoSa\tInpeco SA\n30:74:96\tHuaweiTe\tHuawei Technologies Co.,Ltd\n30:75:12\tSonyMobi\tSony Mobile Communications Inc\n30:76:6F\tLgElectr\tLG Electronics (Mobile Communications)\n30:77:CB\tMaikeInd\tMaike Industry(Shenzhen)CO.,LTD\n30:78:5C\tPartowTa\tPartow Tamas Novin (Parman)\n30:78:6B\tTianjinG\tTIANJIN Golden Pentagon Electronics Co., Ltd.\n30:78:C2\tInnowire\tInnowireless / QUCELL Networks\n30:7B:AC\tNewH3cTe\tNew H3C Technologies Co., Ltd\n30:7C:30\tRim\t\n30:7C:5E\tJuniperN\tJuniper Networks\n30:7C:B2\tAnovFran\tAnov France\n30:7E:CB\tSfr\t\n30:84:54\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n30:85:A9\tAsustekC\tASUSTek COMPUTER INC.\n30:87:30\tHuaweiTe\tHuawei Technologies Co.,Ltd\n30:87:D9\tRuckusWi\tRuckus Wireless\n30:88:41\tSichuanA\tSichuan AI-Link Technology Co., Ltd.\n30:89:76\tDalianLa\tDalian Lamba Technology Co.,Ltd\n30:89:99\tGuangdon\tGuangdong East Power Co.,\n30:89:D3\tHongkong\tHongkong Ucloudlink Network Technology Limited\n30:8C:FB\tDropcam\t\n30:8D:99\tHewlettP\tHewlett Packard\n30:90:AB\tApple\tApple, Inc.\n30:91:8F\tTechnico\tTechnicolor\n30:92:F6\tShanghai\tShanghai Sunmon Communication Technogy Co.,Ltd\n30:95:E3\tShanghai\tShanghai Simcom Limited\n30:96:FB\tSamsungE\tSamsung Electronics Co.,Ltd\n30:99:35\tZte\tzte corporation\n30:9B:AD\tBbkEduca\tBbk Educational Electronics Corp.,Ltd.\n30:9C:23\tMicro-St\tMicro-Star INTL CO., LTD.\n30:9F:FB\tArdomusN\tArdomus Networks Corporation\n30:A1:FA\tHuaweiTe\tHuawei Technologies Co.,Ltd\n30:A2:20\tArgTelec\tARG Telecom\n30:A2:43\tShenzhen\tShenzhen Prifox Innovation Technology Co., Ltd.\n30:A8:DB\tSonyMobi\tSony Mobile Communications Inc\n30:A9:DE\tLgInnote\tLG Innotek\n30:AA:BD\tShanghai\tShanghai Reallytek Information Technology Co.,Ltd\n30:AE:7B\tDeqingDu\tDeqing Dusun Electron CO., LTD\n30:AE:A4\tEspressi\tEspressif Inc.\n30:AE:F6\tRadioMob\tRadio Mobile Access\n30:B1:64\tPowerEle\tPower Electronics International Inc.\n30:B2:16\tAbb-Powe\tABB AG - Power Grids - Grid Automation\n30:B3:A2\tShenzhen\tShenzhen Heguang Measurement & Control Technology Co.,Ltd\n30:B4:9E\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n30:B4:B8\tLgElectr\tLG Electronics\n30:B5:C2\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n30:B5:F1\tAitexinT\tAitexin Technology Co., Ltd\n30:B6:2D\tMojoNetw\tMojo Networks, Inc.\n30:B6:4F\tJuniperN\tJuniper Networks\n30:B7:D4\tHitronTe\tHitron Technologies. Inc\n30:C0:1B\tShenzhen\tShenzhen Jingxun Software Telecommunication Technology Co.,Ltd\n30:C3:D9\tAlpsElec\tAlps Electric Co.,Ltd.\n30:C5:07\tEciTelec\tECI Telecom Ltd.\n30:C7:50\tMicTechn\tMIC Technology Group\n30:C7:AE\tSamsungE\tSamsung Electronics Co.,Ltd\n30:C8:2A\tWi-BizSr\tWI-BIZ srl\n30:CB:F8\tSamsungE\tSamsung Electronics Co.,Ltd\n30:CD:A7\tSamsungE\tSamsung Electronics Co.,Ltd\n30:D1:6B\tLiteonTe\tLiteon Technology Corporation\n30:D1:7E\tHuaweiTe\tHuawei Technologies Co.,Ltd\n30:D3:2D\tDevolo\tdevolo AG\n30:D3:57\tLogosol\tLogosol, Inc.\n30:D3:86\tZte\tzte corporation\n30:D4:6A\tAutosale\tAutosales Incorporated\n30:D5:87\tSamsungE\tSamsung Electronics Co.,Ltd\n30:D6:59\tMergingT\tMerging Technologies SA\n30:D6:C9\tSamsungE\tSamsung Electronics Co.,Ltd\n30:D9:D9\tApple\tApple, Inc.\n30:DE:86\tCedacSof\tCedac Software S.r.l.\n30:E0:90\tLinctron\tLinctronix Ltd,\n30:E1:71\tHewlettP\tHewlett Packard\n30:E3:7A\tIntelCor\tIntel Corporate\n30:E3:D6\tSpotifyU\tSpotify USA Inc.\n30:E4:8E\tVodafone\tVodafone UK\n30:E4:DB\tCisco\tCisco Systems, Inc\n30:EB:1F\tSkylabM&\tSkylab M&C Technology Co.,Ltd\n30:EB:25\tIntekDig\tIntek Digital\n30:EF:D1\tAlstomSt\tAlstom Strongwish (Shenzhen) Co., Ltd.\n30:F3:1D\tZte\tzte corporation\n30:F3:35\tHuaweiTe\tHuawei Technologies Co.,Ltd\n30:F3:3A\t+PluggSr\t+plugg srl\n30:F4:2F\tEsp\t\n30:F6:B9\tEcocentr\tEcocentric Energy\n30:F7:0D\tCisco\tCisco Systems, Inc\n30:F7:72\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n30:F7:7F\tSMobileD\tS Mobile Devices Limited\n30:F7:C5\tApple\tApple, Inc.\n30:F7:D7\tThreadTe\tThread Technology Co., Ltd\n30:F9:ED\tSony\tSony Corporation\n30:FA:B7\tTunaiCre\tTunai Creative\n30:FB:94\tShanghai\tShanghai Fangzhiwei Information Technology CO.,Ltd.\n30:FC:68\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n30:FD:11\tMacrotec\tMACROTECH (USA) INC.\n30:FD:38\tGoogle\tGoogle, Inc.\n30:FE:31\tNokia\t\n30:FF:F6\tHangzhou\tHangZhou KuoHeng Technology Co.,ltd\n34:00:8A\tIeeeRegi\tIEEE Registration Authority\n34:00:8A:00:00:00/28\tAngeeTec\tAngee Technologies Ltd.\n34:00:8A:10:00:00/28\tZqamComm\tZQAM Communications\n34:00:8A:20:00:00/28\tRpeMonit\tRPE Monitor\n34:00:8A:30:00:00/28\tGlobex99\tGlobex 99 LTD\n34:00:8A:40:00:00/28\tFotonicI\tFotonic i Norden AB\n34:00:8A:50:00:00/28\tFederalA\tFederal Aviation Administration\n34:00:8A:60:00:00/28\tSithonTe\tSithon Technologies SAS\n34:00:8A:70:00:00/28\tUbergard\tuberGARD Pte. Ltd.\n34:00:8A:80:00:00/28\tShenzhen\tShenzhen Andakai Technologies Co., Ltd.\n34:00:8A:90:00:00/28\tKeruyunT\tKeruyun Technoligies(Beijing) Corporation Limited\n34:00:8A:A0:00:00/28\tHibertek\tHibertek International Limited\n34:00:8A:B0:00:00/28\tProjectE\tProject Engineering srl\n34:00:8A:C0:00:00/28\tShenzhen\tShenzhen Eternal Idea Tech Co.,Ltd\n34:00:8A:D0:00:00/28\tChengduH\tChengDu HuiZhong Cloud Information Technology Co., Ltd.\n34:00:8A:E0:00:00/28\tShenzhen\tShenzhen Wxl Electronics Co., Ltd.\n34:00:A3\tHuaweiTe\tHuawei Technologies Co.,Ltd\n34:02:86\tIntelCor\tIntel Corporate\n34:02:9B\tCloudber\tCloudBerry Technologies Private Limited\n34:03:DE\tTexasIns\tTexas Instruments\n34:04:9E\tIeeeRegi\tIEEE Registration Authority\n34:04:9E:00:00:00/28\tGochip\tGoChip Inc.\n34:04:9E:10:00:00/28\tConnecte\tConnected IO Inc.\n34:04:9E:20:00:00/28\tEfdInduc\tEFD Induction\n34:04:9E:30:00:00/28\tNanjingM\tNanjing Mythware Information Technology Co., Ltd.\n34:04:9E:40:00:00/28\tHarbinYa\tHarbin Yantuo Science and Technology Development Co., Ltd\n34:04:9E:50:00:00/28\tSeeinerT\tSeeiner Technology Co.,LTD\n34:04:9E:60:00:00/28\tLifeInte\tLife Interface Co., Ltd.\n34:04:9E:70:00:00/28\tPebbleTe\tPebble Technology\n34:04:9E:80:00:00/28\tEclipseI\tEclipse Information Technologies\n34:04:9E:90:00:00/28\tPrivate\t\n34:04:9E:A0:00:00/28\tI3Intern\ti3 International Inc.\n34:04:9E:B0:00:00/28\tEginity\tEginity, Inc.\n34:04:9E:C0:00:00/28\tPrivate\t\n34:04:9E:D0:00:00/28\tUikismar\tuikismart\n34:04:9E:E0:00:00/28\tNdSatcom\tND SatCom GmbH\n34:07:4F\tAccelsto\tAccelStor, Inc.\n34:07:FB\tEricsson\tEricsson AB\n34:08:04\tD-Link\tD-Link Corporation\n34:08:BC\tApple\tApple, Inc.\n34:0A:22\tTop-Acce\tTOP-ACCESS ELECTRONICS CO LTD\n34:0A:98\tHuaweiTe\tHuawei Technologies Co.,Ltd\n34:0A:FF\tQingdaoH\tQingdao Hisense Communications Co.,Ltd.\n34:0B:40\tMiosElet\tMios Elettronica Srl\n34:0C:ED\tModuel\tModuel AB\n34:12:90\tTreeview\tTreeview Co.,Ltd.\n34:12:98\tApple\tApple, Inc.\n34:12:F9\tHuaweiTe\tHuawei Technologies Co.,Ltd\n34:13:A8\tMediplan\tMediplan Limited\n34:13:E8\tIntelCor\tIntel Corporate\n34:14:5F\tSamsungE\tSamsung Electronics Co.,Ltd\n34:15:13\tTexasIns\tTexas Instruments\n34:15:9E\tApple\tApple, Inc.\n34:17:EB\tDell\tDell Inc.\n34:1A:35\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n34:1A:4C\tShenzhen\tShenzhen Weibu Electronics Co.,Ltd.\n34:1B:22\tGrandbei\tGrandbeing Technology Co., Ltd\n34:1E:6B\tHuaweiTe\tHuawei Technologies Co.,Ltd\n34:1F:E4\tArrisGro\tARRIS Group, Inc.\n34:21:09\tJensenSc\tJensen Scandinavia AS\n34:23:87\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n34:23:BA\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\n34:25:5D\tShenzhen\tShenzhen Loadcom Technology Co.,Ltd\n34:26:06\tCarepred\tCarePredict, Inc.\n34:27:92\tFreeboxS\tFreebox Sas\n34:28:F0\tAtnInter\tATN International Limited\n34:29:12\tHuaweiTe\tHuawei Technologies Co.,Ltd\n34:29:8F\tIeeeRegi\tIEEE Registration Authority\n34:29:8F:00:00:00/28\tBlackedg\tBlackEdge Capital\n34:29:8F:10:00:00/28\tChengduM\tChengdu Meross Technology Co., Ltd.\n34:29:8F:20:00:00/28\tShenzhen\tShenzhen Advance River System Technology Co., Ltd\n34:29:8F:30:00:00/28\tBeijingV\tBeijing Vorx Telecommunications Co., Ltd.\n34:29:8F:40:00:00/28\tIsraVisi\tISRA Vision AG\n34:29:8F:50:00:00/28\tHighlite\tHighlite International B.V.\n34:29:8F:60:00:00/28\tBellmanS\tBellman & Symfon\n34:29:8F:70:00:00/28\tDongguan\tDongguan Kingtron Electronics Tech Co., Ltd\n34:29:8F:80:00:00/28\tNanjingS\tNanjing Sandemarine Electric Co.,Ltd\n34:29:8F:90:00:00/28\tWiesheu\tWiesheu GmbH\n34:29:8F:A0:00:00/28\tVirtualT\tVirtual Trunk Pte Ltd\n34:29:8F:B0:00:00/28\tSchnick-\tSchnick-Schnack-Systems GmbH\n34:29:8F:C0:00:00/28\tAlbertHa\tAlbert Handtmann Maschinenfabrik GmbH&Co.KG\n34:29:8F:D0:00:00/28\tKeystone\tKeystone Electronic Solutions\n34:29:8F:E0:00:00/28\tArcTechn\tARC Technology Co., Ltd\n34:29:EA\tMcdElect\tMcd Electronics Sp. Z O.O.\n34:2A:F1\tTexasIns\tTexas Instruments\n34:2C:C4\tCompalBr\tCompal Broadband Networks, Inc.\n34:2D:0D\tSamsungE\tSamsung Electronics Co.,Ltd\n34:2E:B6\tHuaweiTe\tHuawei Technologies Co.,Ltd\n34:2F:6E\tAnywire\tAnywire corporation\n34:31:11\tSamsungE\tSamsung Electronics Co.,Ltd\n34:31:C4\tAvm\tAVM GmbH\n34:32:E6\tPanasoni\tPanasonic Industrial Devices Europe GmbH\n34:36:3B\tApple\tApple, Inc.\n34:37:59\tZte\tzte corporation\n34:38:AF\tInlabSof\tInlab Software GmbH\n34:38:B7\tHumax\tHUMAX Co., Ltd.\n34:3D:98\tJinqianm\tJinQianMao Technology Co.,Ltd.\n34:3D:C4\tBuffalo\tBuffalo.Inc\n34:40:B5\tIbm\t\n34:41:5D\tIntelCor\tIntel Corporate\n34:46:6F\tHitemEng\tHiTEM Engineering\n34:4B:3D\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n34:4B:50\tZte\tzte corporation\n34:4C:A4\tAmazipoi\tamazipoint technology Ltd.\n34:4C:C8\tEchodyne\tEchodyne Corp\n34:4D:EA\tZte\tzte corporation\n34:4D:F7\tLgElectr\tLG Electronics (Mobile Communications)\n34:4F:3F\tIo-Power\tIO-Power Technology Co., Ltd.\n34:4F:5C\tR&Amp;M\tR&amp;M AG\n34:4F:69\tEkinopsS\tEkinops Sas\n34:51:AA\tJidGloba\tJid Global\n34:51:C9\tApple\tApple, Inc.\n34:54:3C\tTakaokaT\tTakaoka Toko Co.,Ltd.\n34:56:FE\tCiscoMer\tCisco Meraki\n34:57:60\tMitrasta\tMitraStar Technology Corp.\n34:5A:06\tSharp\tSHARP Corporation\n34:5A:BA\tTcloudIn\ttcloud intelligence\n34:5B:11\tEviHeat\tEvi Heat Ab\n34:5B:BB\tGdMideaA\tGD Midea Air-Conditioning Equipment Co.,Ltd.\n34:5C:40\tCargtHol\tCargt Holdings LLC\n34:5D:10\tWytek\t\n34:61:78\tBoeing\tThe Boeing Company\n34:62:88\tCisco\tCisco Systems, Inc\n34:64:A9\tHewlettP\tHewlett Packard\n34:66:EA\tVertuInt\tVertu International Corporation Limited\n34:68:4A\tTerawork\tTeraworks Co., Ltd.\n34:68:95\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n34:69:87\tZte\tzte corporation\n34:6A:C2\tHuaweiTe\tHuawei Technologies Co.,Ltd\n34:6B:46\tSagemcom\tSagemcom Broadband SAS\n34:6B:D3\tHuaweiTe\tHuawei Technologies Co.,Ltd\n34:6C:0F\tPramodTe\tPramod Telecom Pvt. Ltd\n34:6E:8A\tEcosense\t\n34:6E:9D\tEricsson\tEricsson AB\n34:6F:90\tCisco\tCisco Systems, Inc\n34:6F:92\tWhiteRod\tWhite Rodgers Division\n34:6F:ED\tEnovatio\tEnovation Controls\n34:75:C7\tAvaya\tAvaya Inc\n34:76:C5\tI-ODataD\tI-O DATA DEVICE, INC.\n34:78:77\tO-NetCom\tO-Net Communications (Shenzhen) Limited\n34:78:D7\tGioneeCo\tGionee Communication Equipment Co.,Ltd.\n34:79:16\tHuaweiTe\tHuawei Technologies Co.,Ltd\n34:7A:60\tArrisGro\tARRIS Group, Inc.\n34:7C:25\tApple\tApple, Inc.\n34:7E:39\tNokiaDan\tNokia Danmark A/S\n34:7E:5C\tSonos\tSonos, Inc.\n34:7E:CA\tNextwill\t\n34:80:0D\tCavium\tCavium Inc\n34:80:B3\tXiaomiCo\tXiaomi Communications Co Ltd\n34:81:37\tUnicardS\tUnicard Sa\n34:81:C4\tAvm\tAVM GmbH\n34:81:F4\tSstTaiwa\tSST Taiwan Ltd.\n34:82:DE\tKiio\tKiio Inc\n34:83:02\tIforcom\tiFORCOM Co., Ltd\n34:84:46\tEricsson\tEricsson AB\n34:85:84\tAerohive\tAerohive Networks Inc.\n34:86:2A\tHeinzLac\tHeinz Lackmann GmbH & Co KG\n34:87:3D\tQuectelW\tQuectel Wireless Solution Co.,Ltd.\n34:88:5D\tLogitech\tLogitech Far East\n34:8A:7B\tSamsungE\tSamsung Electronics Co.,Ltd\n34:8A:AE\tSagemcom\tSagemcom Broadband SAS\n34:8B:75\tLavaInte\tLAVA INTERNATIONAL(H.K) LIMITED\n34:8F:27\tRuckusWi\tRuckus Wireless\n34:95:DB\tLogitec\tLogitec Corporation\n34:96:72\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n34:97:F6\tAsustekC\tASUSTek COMPUTER INC.\n34:97:FB\tAdvanced\tAdvanced Rf Technologies Inc\n34:99:6F\tVpiEngin\tVPI Engineering\n34:99:71\tQuantaSt\tQuanta Storage Inc.\n34:99:D7\tUniversa\tUniversal Flow Monitors, Inc.\n34:9A:0D\tZbdDispl\tZBD Displays Ltd\n34:9B:5B\tMaquet\tMaquet GmbH\n34:9D:90\tHeinzman\tHeinzmann GmbH & CO. KG\n34:9E:34\tEvervict\tEvervictory Electronic Co.Ltd\n34:A1:83\tAware\tAWare, Inc\n34:A2:A2\tHuaweiTe\tHuawei Technologies Co.,Ltd\n34:A3:95\tApple\tApple, Inc.\n34:A3:BF\tTerewave\tTerewave. Inc.\n34:A5:5D\tTechnoso\tTechnosoft International Srl\n34:A5:E1\tSensoris\tSensorist ApS\n34:A6:8C\tShinePro\tShine Profit Development Limited\n34:A7:09\tTrevilSr\tTrevil srl\n34:A7:BA\tFischerI\tFischer International Systems Corporation\n34:A8:43\tKyoceraD\tKYOCERA Display Corporation\n34:A8:4E\tCisco\tCisco Systems, Inc\n34:AA:8B\tSamsungE\tSamsung Electronics Co.,Ltd\n34:AA:99\tNokia\t\n34:AA:EE\tMikrovis\tMikrovisatos Servisas UAB\n34:AB:37\tApple\tApple, Inc.\n34:AD:E4\tShanghai\tShanghai Chint Power Systems Co., Ltd.\n34:AF:2C\tNintendo\tNintendo Co., Ltd.\n34:B1:F7\tTexasIns\tTexas Instruments\n34:B3:54\tHuaweiTe\tHuawei Technologies Co.,Ltd\n34:B5:71\tPlds\t\n34:B7:FD\tGuangzho\tGuangzhou Younghead Electronic Technology Co.,Ltd\n34:BA:38\tPalMohan\tPal Mohan Electronics Pvt Ltd\n34:BA:51\tSe-KureC\tSe-Kure Controls, Inc.\n34:BA:75\tEverestN\tEverest Networks, Inc\n34:BA:9A\tAsiatelc\tAsiatelco Technologies Co.\n34:BB:1F\tBlackber\tBlackBerry RTS\n34:BB:26\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n34:BC:A6\tBeijingD\tBeijing Ding Qing Technology, Ltd.\n34:BD:C8\tCisco\tCisco Systems, Inc\n34:BD:F9\tShanghai\tShanghai WDK Industrial Co.,Ltd.\n34:BD:FA\tCiscoSpv\tCisco SPVTG\n34:BE:00\tSamsungE\tSamsung Electronics Co.,Ltd\n34:BF:90\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n34:C0:59\tApple\tApple, Inc.\n34:C0:F9\tRockwell\tRockwell Automation\n34:C3:AC\tSamsungE\tSamsung Electronics Co.,Ltd\n34:C3:D2\tFn-LinkT\tFN-LINK TECHNOLOGY LIMITED\n34:C5:D0\tHagleitn\tHagleitner Hygiene International GmbH\n34:C6:9A\tEnecsys\tEnecsys Ltd\n34:C7:31\tAlpsElec\tAlps Electric Co.,Ltd.\n34:C8:03\tNokia\tNokia Corporation\n34:C9:9D\tEidolonC\tEidolon Communications Technology Co. Ltd.\n34:C9:F0\tLmTechno\tLM Technologies Ltd\n34:CC:28\tNexpring\tNexpring Co. LTD.,\n34:CD:6D\tCommskyT\tCommSky Technologies\n34:CD:BE\tHuaweiTe\tHuawei Technologies Co.,Ltd\n34:CE:00\tXiaomiEl\tXIAOMI Electronics,CO.,LTD\n34:CE:94\tParsecPt\tParsec (Pty) Ltd\n34:D0:9B\tMobilmax\tMobilMAX Technology Inc.\n34:D0:B8\tIeeeRegi\tIEEE Registration Authority\n34:D0:B8:00:00:00/28\tCaptec\tCaptec Ltd\n34:D0:B8:10:00:00/28\tShenzhen\tShenzhen Bao Lai Wei Intelligent Technology Co., L\n34:D0:B8:20:00:00/28\tBlustrea\tBlustream Pty Ltd\n34:D0:B8:30:00:00/28\tTascent\tTascent, Inc.\n34:D0:B8:40:00:00/28\tEqplayIn\tEQPlay Intelligent Technology(Kunshan) Co,Ltd.\n34:D0:B8:50:00:00/28\tEesy-Inn\teesy-innovation GmbH\n34:D0:B8:60:00:00/28\tNumberfo\tNumberFour AG\n34:D0:B8:70:00:00/28\tShenzhen\tShenzhen Rikomagic Tech Corp.,Ltd\n34:D0:B8:80:00:00/28\tVtrekGro\tVtrek Group International Ltd.\n34:D0:B8:90:00:00/28\tSkytechC\tSkytech Creations Limited\n34:D0:B8:A0:00:00/28\tMeatestS\tMeatest sro\n34:D0:B8:B0:00:00/28\tOrosound\tOrosound Sas\n34:D0:B8:C0:00:00/28\tGloryMar\tGlory Mark Electronic Ltd. Taiwan Branch (B.V.I.)\n34:D0:B8:D0:00:00/28\tNtxEmbed\tNTX Embedded\n34:D0:B8:E0:00:00/28\tKongqigu\tKongqiguanjia (Beijing)Technology co.，ltd\n34:D2:70\tAmazonTe\tAmazon Technologies Inc.\n34:D2:C4\tRenaPrin\tRENA GmbH Print Systeme\n34:D7:12\tSmartisa\tSmartisan Digital Co., Ltd\n34:D7:B4\tTributar\tTributary Systems, Inc.\n34:D9:54\tWibotic\tWiBotic Inc.\n34:DA:C1\tSaeTechn\tSAE Technologies Development(Dongguan) Co., Ltd.\n34:DB:FD\tCisco\tCisco Systems, Inc\n34:DE:1A\tIntelCor\tIntel Corporate\n34:DE:34\tZte\tzte corporation\n34:DF:2A\tFujikonI\tFujikon Industrial Co.,Limited\n34:E0:CF\tZte\tzte corporation\n34:E0:D7\tDongguan\tDongguan Qisheng Electronics Industrial Co., Ltd\n34:E1:2D\tIntelCor\tIntel Corporate\n34:E2:FD\tApple\tApple, Inc.\n34:E3:80\tGenexisB\tGenexis B.V.\n34:E4:2A\tAutomati\tAutomatic Bar Controls Inc.\n34:E5:EC\tPaloAlto\tPalo Alto Networks\n34:E6:AD\tIntelCor\tIntel Corporate\n34:E6:D7\tDell\tDell Inc.\n34:E7:0B\tHanNetwo\tHAN Networks Co., Ltd\n34:E7:1C\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\n34:E8:94\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n34:E9:11\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n34:EA:34\tHangzhou\tHangZhou Gubei Electronics Technology Co.,Ltd\n34:ED:0B\tShanghai\tShanghai XZ-COM.CO.,Ltd.\n34:EF:44\t2wire\t2Wire Inc\n34:EF:8B\tNttCommu\tNTT Communications Corporation\n34:F0:CA\tShenzhen\tShenzhen Linghangyuan Digital Technology Co.,Ltd.\n34:F3:9A\tIntelCor\tIntel Corporate\n34:F3:9B\tWizlan\tWizLAN Ltd.\n34:F6:2D\tSharp\tSHARP Corporation\n34:F6:4B\tIntelCor\tIntel Corporate\n34:F6:D2\tPanasoni\tPanasonic Taiwan Co.,Ltd.\n34:F9:68\tAtekProd\tATEK Products, LLC\n34:FA:40\tGuangzho\tGuangzhou Robustel Technologies Co., Limited\n34:FA:9F\tRuckusWi\tRuckus Wireless\n34:FC:6F\tAlcea\t\n34:FC:B9\tHewlettP\tHewlett Packard Enterprise\n34:FC:EF\tLgElectr\tLG Electronics (Mobile Communications)\n38:01:95\tSamsungE\tSamsung Electronics Co.,Ltd\n38:01:97\tTsstGlob\tTSST Global,Inc\n38:01:9F\tShenzhen\tShenzhen Fast Technologies Co.,Ltd\n38:05:46\tFoctekPh\tFoctek Photonics, Inc.\n38:05:AC\tPillerGr\tPiller Group GmbH\n38:06:B4\tADC\tA.D.C. GmbH\n38:07:D4\tZeppelin\tZeppelin Systems GmbH\n38:08:FD\tSilca\tSilca Spa\n38:09:A4\tFireflyI\tFirefly Integrations\n38:0A:0A\tSky-City\tSky-City Communication and Electronics Limited Company\n38:0A:94\tSamsungE\tSamsung Electronics Co.,Ltd\n38:0A:AB\tFormlabs\t\n38:0B:40\tSamsungE\tSamsung Electronics Co.,Ltd\n38:0D:D4\tPrimaxEl\tPrimax Electronics Ltd.\n38:0E:4D\tCisco\tCisco Systems, Inc\n38:0E:7B\tVPSThai\tV.P.S. Thai Co., Ltd\n38:0F:4A\tApple\tApple, Inc.\n38:0F:E4\tDedicate\tDedicated Network Partners Oy\n38:10:D5\tAvmAudio\tAVM Audiovisuelles Marketing und Computersysteme GmbH\n38:16:D1\tSamsungE\tSamsung Electronics Co.,Ltd\n38:17:66\tPromzaka\tPromzakaz Ltd.\n38:17:C3\tHewlettP\tHewlett Packard Enterprise\n38:17:E1\tTechnico\tTechnicolor CH USA Inc.\n38:19:2F\tNokia\tNokia Corporation\n38:1C:1A\tCisco\tCisco Systems, Inc\n38:1C:23\tHilanTec\tHilan Technology CO.,LTD\n38:1C:4A\tSimcomWi\tSIMCom Wireless Solutions Co.,Ltd.\n38:1D:D9\tFn-LinkT\tFN-LINK TECHNOLOGY LIMITED\n38:20:56\tCisco\tCisco Systems, Inc\n38:20:A8\tColortok\tColorTokens, Inc.\n38:21:87\tMideaGro\tMidea Group Co., Ltd.\n38:22:9D\tAdbBroad\tADB Broadband Italia\n38:22:D6\tHangzhou\tHangzhou H3C Technologies Co., Limited\n38:25:6B\tMicrosof\tMicrosoft Mobile Oy\n38:26:2B\tUtranTec\tUTran Technology\n38:26:CD\tAndtek\t\n38:28:EA\tFujianNe\tFujian Netcom Technology Co., LTD\n38:29:5A\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n38:29:DD\tOnvocal\tONvocal Inc\n38:2B:78\tEcoPlugs\tEco Plugs Enterprise Co., Ltd\n38:2C:4A\tAsustekC\tASUSTek COMPUTER INC.\n38:2D:D1\tSamsungE\tSamsung Electronics Co.,Ltd\n38:2D:E8\tSamsungE\tSamsung Electronics Co.,Ltd\n38:30:F9\tLgElectr\tLG Electronics (Mobile Communications)\n38:31:AC\tWeg\t\n38:35:FB\tSagemcom\tSagemcom Broadband SAS\n38:37:8B\tHuaweiTe\tHuawei Technologies Co.,Ltd\n38:3A:21\tIeeeRegi\tIEEE Registration Authority\n38:3A:21:00:00:00/28\tR3cInfor\tR3C Information(Shenzhen) Co.，Ltd.\n38:3A:21:10:00:00/28\tHobart\tHOBART GmbH\n38:3A:21:20:00:00/28\tShenzhen\tShenzhen HS Fiber Communication Equipment CO., LTD\n38:3A:21:30:00:00/28\tShanghai\tShanghai Greatwall Safety System Co.,Ltd\n38:3A:21:40:00:00/28\tDongguan\tDongguan Innovation Technology Co Ltd\n38:3A:21:50:00:00/28\tOooNppUr\tOOO NPP Uraltechnologiya\n38:3A:21:60:00:00/28\tShenzhen\tShenzhen Smart-core Technology co., Ltd.\n38:3A:21:70:00:00/28\tChengduK\tChengdu Krosslan Technology Inc.\n38:3A:21:80:00:00/28\tAlicatSc\tAlicat Scientific\n38:3A:21:90:00:00/28\tSkylarkW\tSkylark Wireless LLC\n38:3A:21:A0:00:00/28\tForesigh\tForesight Sports\n38:3A:21:B0:00:00/28\tPactron\t\n38:3A:21:C0:00:00/28\tMissionE\tMission Embedded GmbH\n38:3A:21:D0:00:00/28\tColooc\tColooc AB\n38:3A:21:E0:00:00/28\tSdnwareT\tSDNware technology co.,LTD\n38:3B:C8\t2wire\t2Wire Inc\n38:3F:10\tDblTechn\tDBL Technology Ltd.\n38:42:33\tWildeboe\tWildeboer Bauteile GmbH\n38:42:A6\tIngenieu\tIngenieurbuero Stahlkopf\n38:43:69\tPatrolPr\tPatrol Products Consortium LLC\n38:43:7D\tCompalBr\tCompal Broadband Networks, Inc.\n38:45:4C\tLightLab\tLight Labs, Inc.\n38:45:8C\tMycloudT\tMyCloud Technology corporation\n38:46:08\tZte\tzte corporation\n38:48:4C\tApple\tApple, Inc.\n38:4B:76\tAirtameA\tAIRTAME ApS\n38:4C:4F\tHuaweiTe\tHuawei Technologies Co.,Ltd\n38:4C:90\tArrisGro\tARRIS Group, Inc.\n38:4F:49\tJuniperN\tJuniper Networks\n38:4F:F0\tAzurewav\tAzureWave Technology Inc.\n38:52:1A\tNokia\t\n38:53:9C\tApple\tApple, Inc.\n38:56:10\tCandyHou\tCANDY HOUSE, Inc.\n38:56:B5\tPeerbrid\tPeerbridge Health Inc\n38:58:0C\tPanacces\tPanaccess Systems GmbH\n38:59:F8\tMindmade\tMindMade Sp. z o.o.\n38:59:F9\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n38:5A:A8\tBeijingZ\tBeijing Zhongdun Security Technology Development Co.\n38:5F:66\tCiscoSpv\tCisco SPVTG\n38:5F:C3\tYuJeongS\tYu Jeong System, Co.Ltd\n38:60:77\tPegatron\tPegatron Corporation\n38:63:BB\tHewlettP\tHewlett Packard\n38:63:F6\t3nodMult\t3NOD MULTIMEDIA(SHENZHEN)CO.,LTD\n38:66:45\tOosicTec\tOOSIC Technology CO.,Ltd\n38:66:F0\tApple\tApple, Inc.\n38:67:93\tAsiaOpti\tAsia Optical Co., Inc.\n38:68:DD\tInventec\tInventec Corporation\n38:6B:1C\tShenzhen\tShenzhen Mercury Communication Technologies Co.,Ltd.\n38:6B:BB\tArrisGro\tARRIS Group, Inc.\n38:6C:9B\tIvyBiome\tIvy Biomedical\n38:6E:21\tWasionGr\tWasion Group Ltd.\n38:6E:88\tZte\tzte corporation\n38:6E:A2\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n38:70:0C\tArrisGro\tARRIS Group, Inc.\n38:71:DE\tApple\tApple, Inc.\n38:72:C0\tComtrend\tComtrend Corporation\n38:73:EA\tIeeeRegi\tIEEE Registration Authority\n38:73:EA:00:00:00/28\tL-3Commu\tL-3 Communications Mobile-Vision, Inc.\n38:73:EA:10:00:00/28\tKingwayI\tKingWay Information Co.,Ltd.\n38:73:EA:20:00:00/28\tEyesight\tEyesight(Shanghai)Communication Technology Co.,Ltd.\n38:73:EA:30:00:00/28\tProchPla\tProch plastic Co., Ltd.\n38:73:EA:40:00:00/28\tLightBlu\tLight Blue Optics Ltd.\n38:73:EA:50:00:00/28\tIstcontr\tIstcontrol\n38:73:EA:60:00:00/28\tLiveSent\tLive Sentinel\n38:73:EA:70:00:00/28\tPinggps\tPingGPS Inc\n38:73:EA:80:00:00/28\tRockElec\tRock Electronic Co., Ltd.\n38:73:EA:90:00:00/28\tLightfor\tLightform, Inc.\n38:73:EA:A0:00:00/28\tShenzhen\tShenzhen Cse Technology Co., Ltd\n38:73:EA:B0:00:00/28\tShanghai\tShanghai ZoomSmart Technology Co., Ltd.\n38:73:EA:C0:00:00/28\tLgElectr\tLG Electronics\n38:73:EA:D0:00:00/28\tAnnapurn\tannapurnalabs\n38:73:EA:E0:00:00/28\tShenzhen\tShenzhen Jixian Technology Co., Ltd.\n38:76:CA\tShenzhen\tShenzhen Smart Intelligent Technology Co.Ltd\n38:76:D1\tEuronda\tEuronda SpA\n38:78:62\tSonyMobi\tSony Mobile Communications Inc\n38:7B:47\tAkela\tAKELA, Inc.\n38:80:DF\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n38:81:D7\tTexasIns\tTexas Instruments\n38:83:45\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n38:86:02\tFlexopti\tFlexoptix GmbH\n38:89:2C\tApple\tApple, Inc.\n38:89:DC\tOpticonS\tOpticon Sensors Europe B.V.\n38:8A:B7\tItcNetwo\tITC Networks\n38:8B:59\tGoogle\tGoogle, Inc.\n38:8C:50\tLgElectr\tLG Electronics\n38:8E:E7\tFanhatta\tFanhattan LLC\n38:90:A5\tCisco\tCisco Systems, Inc\n38:91:D5\tHangzhou\tHangzhou H3C Technologies Co., Limited\n38:91:FB\tXenoxBv\tXenox Holding BV\n38:94:96\tSamsungE\tSamsung Electronics Co.,Ltd\n38:94:E0\tSyrotech\tSyrotech Networks. Ltd.\n38:95:92\tBeijingT\tBeijing Tendyron Corporation\n38:97:D6\tHangzhou\tHangzhou H3C Technologies Co., Limited\n38:98:D8\tMeritech\tMeritech Co.,Ltd\n38:9A:F6\tSamsungE\tSamsung Electronics Co.,Ltd\n38:9D:92\tSeikoEps\tSeiko Epson Corporation\n38:9F:5A\tC-KurTv\tC-Kur TV Inc.\n38:9F:83\tOtnNV\tOTN Systems N.V.\n38:A2:8C\tShenzhen\tSHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\n38:A4:ED\tXiaomiCo\tXiaomi Communications Co Ltd\n38:A5:3C\tComecerN\tCOMECER Netherlands\n38:A5:B6\tShenzhen\tShenzhen Megmeet Electrical Co.,Ltd\n38:A6:CE\tBskyb\tBSkyB Ltd\n38:A8:51\tMoogIng\tMoog, Ing\n38:A8:6B\tOrgaBv\tOrga BV\n38:A9:5F\tActifio\tActifio Inc\n38:AA:3C\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\n38:AC:3D\tNephos\tNephos Inc\n38:AD:8E\tNewH3cTe\tNew H3C Technologies Co., Ltd\n38:AD:BE\tNewH3cTe\tNew H3C Technologies Co., Ltd\n38:AF:29\tZhejiang\tZhejiang Dahua Technology Co., Ltd.\n38:AF:D7\tFujitsu\tFujitsu Limited\n38:B1:2D\tSonotron\tSonotronic Nagel GmbH\n38:B1:DB\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n38:B4:D3\tBshHausg\tBSH Hausgeraete GmbH\n38:B5:4D\tApple\tApple, Inc.\n38:B5:BD\tEGOElekt\tE.G.O. Elektro-Ger\n38:B7:25\tWistronI\tWistron Infocomm (Zhongshan) Corporation\n38:B7:4D\tFijowave\tFijowave Limited\n38:B8:EB\tIeeeRegi\tIEEE Registration Authority\n38:B8:EB:00:00:00/28\tBumjinC&\tBumjin C&L Co., Ltd.\n38:B8:EB:10:00:00/28\t1AConnec\t1.A Connect GmbH\n38:B8:EB:20:00:00/28\tBaroxKom\tbarox Kommunikation GmbH\n38:B8:EB:30:00:00/28\tAinaWire\tAina Wireless Inc\n38:B8:EB:40:00:00/28\tUmlogics\t\n38:B8:EB:50:00:00/28\tDojo-Lab\tDojo-Labs Ltd\n38:B8:EB:60:00:00/28\tMatrixst\tMatrixstream Technologies, Inc.\n38:B8:EB:70:00:00/28\tPrivate\t\n38:B8:EB:80:00:00/28\tCeenex\tCeeNex Inc\n38:B8:EB:90:00:00/28\tNhsSiste\tNHS Sistemas de Energia\n38:B8:EB:A0:00:00/28\tSecadSa\tSecad Sa\n38:B8:EB:B0:00:00/28\tExascale\tExaScaler Inc.\n38:B8:EB:C0:00:00/28\tAjax\tAjax Systems Inc\n38:B8:EB:D0:00:00/28\tYellowbr\tYellowbrick Data, Inc.\n38:B8:EB:E0:00:00/28\tWyresSas\tWyres SAS\n38:BA:F8\tIntelCor\tIntel Corporate\n38:BB:23\tOzvision\tOzVision America LLC\n38:BB:3C\tAvaya\tAvaya Inc\n38:BC:01\tHuaweiTe\tHuawei Technologies Co.,Ltd\n38:BC:1A\tMeizuTec\tMEIZU Technology Co., Ltd.\n38:BF:2F\tEspec\tEspec Corp.\n38:BF:33\tNecCasio\tNEC CASIO Mobile Communications\n38:C0:96\tAlpsElec\tAlps Electric Co.,Ltd.\n38:C7:0A\tWifisong\t\n38:C7:BA\tCsServic\tCS Services Co.,Ltd.\n38:C8:5C\tCiscoSpv\tCisco SPVTG\n38:C9:86\tApple\tApple, Inc.\n38:C9:A9\tSmartHig\tSMART High Reliability Solutions, Inc.\n38:CA:97\tContourD\tContour Design LLC\n38:CA:DA\tApple\tApple, Inc.\n38:CD:07\tBeijingF\tBeijing FaceCam Technology Co., Ltd.\n38:D1:35\tEasyioSd\tEasyIO Corporation Sdn. Bhd.\n38:D2:69\tTexasIns\tTexas Instruments\n38:D4:0B\tSamsungE\tSamsung Electronics Co.,Ltd\n38:D5:47\tAsustekC\tASUSTek COMPUTER INC.\n38:D6:20\tLimideaC\tLimidea Concept Pte. Ltd.\n38:D7:CA\t7hugsLab\t7HUGS LABS\n38:D8:2F\tZte\tzte corporation\n38:DB:BB\tSunbowTe\tSunbow Telecom Co., Ltd.\n38:DE:60\tMohlenho\tMohlenhoff GmbH\n38:DE:AD\tIntelCor\tIntel Corporate\n38:E0:8E\tMitsubis\tMitsubishi Electric Corporation\n38:E1:AA\tZte\tzte corporation\n38:E2:DD\tZte\tzte corporation\n38:E3:C5\tTaicangT\tTaicang T&W Electronics\n38:E5:95\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\n38:E6:0A\tXiaomiCo\tXiaomi Communications Co Ltd\n38:E7:D8\tHtc\tHTC Corporation\n38:E8:DF\tBMedien+\tb gmbh medien + datenbanken\n38:E9:8C\tRecoSPA\tReco S.p.A.\n38:EA:A7\tHewlettP\tHewlett Packard\n38:EC:11\tNovatekM\tNovatek Microelectronics Corp.\n38:EC:E4\tSamsungE\tSamsung Electronics Co.,Ltd\n38:ED:18\tCisco\tCisco Systems, Inc\n38:EE:9D\tAnedo\tAnedo Ltd.\n38:F0:98\tVaporSto\tVapor Stone Rail Systems\n38:F0:C8\tLivestre\tLivestream\n38:F1:35\tSensorte\tSensorTec-Canada\n38:F2:3E\tMicrosof\tMicrosoft Mobile Oy\n38:F3:3F\tTatsuno\tTatsuno Corporation\n38:F5:54\tHisenseE\tHisense Electric Co.,Ltd\n38:F5:57\tJolata\tJolata, Inc.\n38:F5:97\tHome2net\thome2net GmbH\n38:F7:08\tNational\tNational Resource Management, Inc.\n38:F7:3D\tAmazonTe\tAmazon Technologies Inc.\n38:F7:B2\tSeojunEl\tSeojun Electric\n38:F8:89\tHuaweiTe\tHuawei Technologies Co.,Ltd\n38:F8:B7\tV2comPar\tV2COM PARTICIPACOES S.A.\n38:F8:CA\tOwin\tOWIN Inc.\n38:FA:CA\tSkyworth\tSkyworth Digital Technology(Shenzhen) Co.,Ltd\n38:FD:FE\tIeeeRegi\tIEEE Registration Authority\n38:FD:FE:00:00:00/28\tEdgeI&D\tEdge I&D Co., Ltd.\n38:FD:FE:10:00:00/28\tWaytoneB\tWAYTONE (BEIIJNG) COMMUNICATIONS CO.,LTD\n38:FD:FE:20:00:00/28\tSmartSol\tSmart Solution Technology, Inc\n38:FD:FE:30:00:00/28\tSiemensP\tSiemens AG, PG IE R&D\n38:FD:FE:40:00:00/28\tNewTelec\tNew Telecom Solutions LLC\n38:FD:FE:50:00:00/28\tCaptivea\tCaptiveAire Systems Inc.\n38:FD:FE:60:00:00/28\tInspero\tInspero Inc\n38:FD:FE:70:00:00/28\tRademach\tRademacher Geraete-Elektronik GmbH\n38:FD:FE:80:00:00/28\tIndraNav\tIndra Navia AS\n38:FD:FE:90:00:00/28\tOooGroup\tOOO Group of Industrial Technologies\n38:FD:FE:A0:00:00/28\tManageme\tManagement Service Corporation\n38:FD:FE:B0:00:00/28\tSwedishA\tSwedish Adrenaline AB\n38:FD:FE:C0:00:00/28\tNewGarde\tNew Garden Co., Ltd.\n38:FD:FE:D0:00:00/28\tFubaAuto\tFUBA Automotive Electronics GmbH\n38:FD:FE:E0:00:00/28\tIsmartEl\tiSmart electronic technology co.,LTD\n38:FE:C5\tEllipsBV\tEllips B.V.\n38:FF:36\tRuckusWi\tRuckus Wireless\n3A:02:92\tVideoEle\tVideo Electronics Standards Association\n3A:5E:03\tCirrusDa\tCirrus Data Solutions, Inc\n3A:A3:F8\tIeee8021\tIEEE 802.1 Working Group\n3A:BA:37\tCirrent\t\n3A:CF:C5\tQuicklin\tQuickline AG\n3C:00:00\t3Com\t\n3C:01:EF\tSonyMobi\tSony Mobile Communications Inc\n3C:02:B1\tCreation\tCreation Technologies LP\n3C:04:61\tArrisGro\tARRIS Group, Inc.\n3C:04:BF\tPravis\tPRAVIS SYSTEMS Co.Ltd.,\n3C:05:18\tSamsungE\tSamsung Electronics Co.,Ltd\n3C:05:AB\tProductC\tProduct Creation Studio\n3C:07:54\tApple\tApple, Inc.\n3C:07:71\tSony\tSony Corporation\n3C:08:1E\tBeijingY\tBeijing Yupont Electric Power Technology Co.,Ltd\n3C:08:F6\tCisco\tCisco Systems, Inc\n3C:09:6D\tPowerhou\tPowerhouse Dynamics\n3C:0C:48\tServergy\tServergy, Inc.\n3C:0C:DB\tUnionman\tUnionman Technology Co.,Ltd\n3C:0E:23\tCisco\tCisco Systems, Inc\n3C:0F:C1\tKbcNetwo\tKBC Networks\n3C:10:40\tDaesungN\tdaesung network\n3C:10:6F\tAlbahith\tAlbahith Technologies\n3C:10:E6\tPhazr\tPHAZR Inc.\n3C:11:B2\tFraunhof\tFraunhofer FIT\n3C:15:C2\tApple\tApple, Inc.\n3C:15:EA\tTescom\tTescom Co., Ltd.\n3C:15:FB\tHuaweiTe\tHuawei Technologies Co.,Ltd\n3C:17:10\tSagemcom\tSagemcom Broadband SAS\n3C:18:9F\tNokia\tNokia Corporation\n3C:18:A0\tLuxshare\tLuxshare Precision Industry Company Limited\n3C:19:15\tGfiChron\tGFI Chrono Time\n3C:19:7D\tEricsson\tEricsson AB\n3C:1A:0F\tClearsky\tClearSky Data\n3C:1A:57\tCardiopu\tCardiopulmonary Corp\n3C:1A:79\tHuayuanT\tHuayuan Technology CO.,LTD\n3C:1C:BE\tJadakLlc\tJadak Llc\n3C:1E:04\tD-LinkIn\tD-Link International\n3C:1E:13\tHangzhou\tHangzhou Sunrise Technology Co., Ltd\n3C:24:F0\tIeeeRegi\tIEEE Registration Authority\n3C:24:F0:00:00:00/28\tShenzhen\tShenzhen Pinsida Technology Co.,Ltd.\n3C:24:F0:10:00:00/28\tAbrites\tAbrites Ltd.\n3C:24:F0:20:00:00/28\tLaipacTe\tLaipac Technology Inc.\n3C:24:F0:30:00:00/28\tWisycom\t\n3C:24:F0:40:00:00/28\tInter-Co\tInter-Coastal Electronics\n3C:24:F0:50:00:00/28\tCaskyEte\tCASKY eTech Co., Ltd.\n3C:24:F0:60:00:00/28\tInterAct\tInter Action Corporation\n3C:24:F0:70:00:00/28\tSwissdot\tSwissdotnet SA\n3C:24:F0:80:00:00/28\tSivatTec\tSivat Technology Co.,Ltd.\n3C:24:F0:90:00:00/28\tSiemens-\tSiemens AG - Siemens Deutschland Mobility\n3C:24:F0:A0:00:00/28\tShenzhen\tShenzhen Bestway Technology Co., Ltd\n3C:24:F0:B0:00:00/28\tComatis\t\n3C:24:F0:C0:00:00/28\tAuthenti\tAuthentico Technologies\n3C:24:F0:D0:00:00/28\tTravisBV\tTravis Holding B.V.\n3C:24:F0:E0:00:00/28\tGetmobit\tGetmobit Llc\n3C:25:D7\tNokia\tNokia Corporation\n3C:26:D5\tSoteraWi\tSotera Wireless\n3C:27:63\tSleQuali\tSLE quality engineering GmbH & Co. KG\n3C:2A:F4\tBrotherI\tBrother Industries, LTD.\n3C:2C:94\t杭州德澜科技有限\t杭州德澜科技有限公司（HangZhou Delan Technology Co.,Ltd）\n3C:2C:99\tEdgecore\tEdgecore Networks Corporation\n3C:2D:B7\tTexasIns\tTexas Instruments\n3C:2E:F9\tApple\tApple, Inc.\n3C:2E:FF\tApple\tApple, Inc.\n3C:2F:3A\tSforzato\tSFORZATO Corp.\n3C:30:0C\tDewarEle\tDewar Electronics Pty Ltd\n3C:31:78\tQolsys\tQolsys Inc.\n3C:33:00\tShenzhen\tShenzhen Bilian electronic CO.,LTD\n3C:35:56\tCognitec\tCognitec Systems GmbH\n3C:36:3D\tNokia\tNokia Corporation\n3C:36:E4\tArrisGro\tARRIS Group, Inc.\n3C:38:88\tConnectq\tConnectQuest, llc\n3C:39:C3\tJwElectr\tJW Electronics Co., Ltd.\n3C:39:E7\tIeeeRegi\tIEEE Registration Authority\n3C:39:E7:00:00:00/28\tHannstar\tHannstar Display Corp\n3C:39:E7:10:00:00/28\tBewatecK\tBEWATEC Kommunikationstechnik GmbH\n3C:39:E7:20:00:00/28\tHomewiza\tHomeWizard B.V.\n3C:39:E7:30:00:00/28\tElsaJapa\tELSA Japan Inc.\n3C:39:E7:40:00:00/28\tUniversi\tUniversity of British Columbia\n3C:39:E7:50:00:00/28\tAttrackt\tAttrackting AG\n3C:39:E7:60:00:00/28\tRoVeRLab\tRO.VE.R. Laboratories S.p.A\n3C:39:E7:70:00:00/28\tSensorTo\tSensor to Image GmbH\n3C:39:E7:80:00:00/28\tMartemAs\tMartem AS\n3C:39:E7:90:00:00/28\tZoneCont\tZone Controls AB\n3C:39:E7:A0:00:00/28\tIim\tiiM AG\n3C:39:E7:B0:00:00/28\tChipsgui\tchipsguide technology Co.,LTD\n3C:39:E7:C0:00:00/28\tVanstone\tVANSTONE ELECTRONIC (BEIJING)CO,. LTD.\n3C:39:E7:E0:00:00/28\tMarposs\tMarposs Spa\n3C:39:E7:F0:00:00/28\tPrivate\t\n3C:3A:73\tAvaya\tAvaya Inc\n3C:3F:51\t2crsi\t\n3C:40:4F\tGuangdon\tGuangdong Pisen Electronics Co.,Ltd\n3C:42:7E\tIeeeRegi\tIEEE Registration Authority\n3C:42:7E:00:00:00/28\tGrandway\tGrandway Technology (Shenzhen) Limited\n3C:42:7E:10:00:00/28\tDongguan\tDongguan Taide Industrial Co.,Ltd.\n3C:42:7E:20:00:00/28\tStarloop\tStarloop Tech Co., Ltd.\n3C:42:7E:30:00:00/28\tShenzhen\tShenzhen VETAS Communication Technology Co , Ltd.\n3C:42:7E:40:00:00/28\tTeknowar\tTeknoware Oy\n3C:42:7E:50:00:00/28\tGeoplanK\tGeoplan Korea\n3C:42:7E:60:00:00/28\tEditSrl\tEdit Srl\n3C:42:7E:70:00:00/28\tGjs\tGJS Co., Ltd.\n3C:42:7E:80:00:00/28\tUbtechRo\tUbtech Robotics Corp\n3C:42:7E:90:00:00/28\tTaitex\tTaitex Corporation\n3C:42:7E:A0:00:00/28\tSnap40\tsnap40 Ltd\n3C:42:7E:B0:00:00/28\tCompalEl\tCompal Electronics INC.\n3C:42:7E:C0:00:00/28\tPrivacyL\tPrivacy Labs\n3C:42:7E:D0:00:00/28\tRoboxSma\tROBOX SMART MOTION (WUHU) CO.,LTD\n3C:42:7E:E0:00:00/28\tXiaoniuN\tXiaoniu network technology (Shanghai) Co., Ltd.\n3C:43:8E\tArrisGro\tARRIS Group, Inc.\n3C:46:D8\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n3C:47:11\tHuaweiTe\tHuawei Technologies Co.,Ltd\n3C:47:9B\tTheissen\tTheissen Training Systems, Inc.\n3C:49:37\tAssmannE\tASSMANN Electronic GmbH\n3C:4A:92\tHewlettP\tHewlett Packard\n3C:4C:69\tInfinity\tInfinity System S.L.\n3C:4C:D0\tCeragonN\tCeragon Networks\n3C:4E:47\tEtronic\tEtronic A/S\n3C:52:82\tHewlettP\tHewlett Packard\n3C:57:4F\tChinaMob\tChina Mobile Group Device Co.,Ltd.\n3C:57:6C\tSamsungE\tSamsung Electronics Co.,Ltd\n3C:57:BD\tKesslerC\tKessler Crane Inc.\n3C:57:D5\tFiveco\t\n3C:59:1E\tTclKingE\tTCL King Electrical Appliances (Huizhou) Co., Ltd\n3C:5A:37\tSamsungE\tSamsung Electronics Co.,Ltd\n3C:5A:B4\tGoogle\tGoogle, Inc.\n3C:5C:C3\tShenzhen\tShenzhen First Blue Chip Technology Ltd\n3C:5E:C3\tCisco\tCisco Systems, Inc\n3C:5F:01\tSynerchi\tSynerchip Co., Ltd.\n3C:61:04\tJuniperN\tJuniper Networks\n3C:62:00\tSamsungE\tSamsung Electronics Co.,Ltd\n3C:62:78\tShenzhen\tShenzhen Jetnet Technology Co.,Ltd.\n3C:67:16\tLilyRobo\tLily Robotics\n3C:67:2C\tSciovid\tSciovid Inc.\n3C:67:8C\tHuaweiTe\tHuawei Technologies Co.,Ltd\n3C:68:16\tVxi\tVXi Corporation\n3C:6A:2C\tIeeeRegi\tIEEE Registration Authority\n3C:6A:2C:00:00:00/28\tRioLagoT\tRio Lago Technologies  LLC\n3C:6A:2C:10:00:00/28\tOlibraLl\tOlibra LLC\n3C:6A:2C:20:00:00/28\tBoschAut\tBosch Automotive Products (Suzhou) Co., Ltd.\n3C:6A:2C:30:00:00/28\tFigur8\tfigur8, Inc.\n3C:6A:2C:40:00:00/28\tXiAnYepT\tXI'AN YEP TELECOM TECHNOLOGY CO.,LTD\n3C:6A:2C:50:00:00/28\tQingdaoI\tQingdao iGuan Technology Co., Ltd.\n3C:6A:2C:60:00:00/28\tLaBarriè\tLa Barrière Automatique\n3C:6A:2C:70:00:00/28\tHomegear\tHomegear GmbH\n3C:6A:2C:80:00:00/28\tTpRadio\tTP Radio\n3C:6A:2C:90:00:00/28\tWicks\tWICKS Co., Ltd.\n3C:6A:2C:A0:00:00/28\tMetro\t\n3C:6A:2C:B0:00:00/28\tPhytiumT\tPhytium Technology Co., Ltd.\n3C:6A:2C:C0:00:00/28\tEltovSys\tEltov System\n3C:6A:2C:D0:00:00/28\tXiamenSm\tXiamen Smarttek CO., Ltd.\n3C:6A:2C:E0:00:00/28\tBeijingD\tBeijing Donghua Hongtai Polytron Technologies Inc\n3C:6A:7D\tNiigataP\tNiigata Power Systems Co., Ltd.\n3C:6A:9D\tDexatekT\tDexatek Technology LTD.\n3C:6A:A7\tIntelCor\tIntel Corporate\n3C:6E:63\tMitronOy\tMitron OY\n3C:6F:45\tFiberpro\tFiberpro Inc.\n3C:6F:EA\tPanasoni\tPanasonic India Pvt. Ltd.\n3C:6F:F7\tEntek\tEnTek Systems, Inc.\n3C:70:59\tMakerbot\tMakerBot Industries\n3C:71:BF\tEspressi\tEspressif Inc.\n3C:74:37\tRim\t\n3C:75:4A\tArrisGro\tARRIS Group, Inc.\n3C:77:E6\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n3C:78:43\tHuaweiTe\tHuawei Technologies Co.,Ltd\n3C:78:73\tAirsonic\tAirsonics\n3C:7A:8A\tArrisGro\tARRIS Group, Inc.\n3C:7D:B1\tTexasIns\tTexas Instruments\n3C:7F:6F\tTelechip\tTelechips, Inc.\n3C:80:AA\tRansnetS\tRansnet Singapore Pte Ltd\n3C:81:D8\tSagemcom\tSagemcom Broadband SAS\n3C:83:1E\tCkd\tCKD Corporation\n3C:83:75\tMicrosof\tMicrosoft Corporation\n3C:83:B5\tAdvanceV\tAdvance Vision Electronics Co. Ltd.\n3C:86:A8\tSangshin\tSangshin elecom .co,, LTD\n3C:89:70\tNeosfar\t\n3C:89:94\tBskyb\tBSkyB Ltd\n3C:89:A6\tKapelse\t\n3C:8A:B0\tJuniperN\tJuniper Networks\n3C:8A:E5\tTensunIn\tTensun Information Technology(Hangzhou) Co.,LTD\n3C:8B:CD\tAlcatel-\tAlcatel-Lucent Shanghai Bell Co., Ltd\n3C:8B:FE\tSamsungE\tSamsung Electronics Co.,Ltd\n3C:8C:40\tHangzhou\tHangzhou H3C Technologies Co., Limited\n3C:8C:F8\tTrendnet\tTRENDnet, Inc.\n3C:90:66\tSmartrg\tSmartRG, Inc.\n3C:91:2B\tVexata\tVexata Inc\n3C:91:57\tYulongCo\tYulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd\n3C:91:74\tAlongCom\tAlong Communication Technology\n3C:92:DC\tOctopodT\tOctopod Technology Co. Ltd.\n3C:94:D5\tJuniperN\tJuniper Networks\n3C:95:09\tLiteonTe\tLiteon Technology Corporation\n3C:97:0E\tWistronI\tWistron InfoComm(Kunshan)Co.,Ltd.\n3C:97:7E\tIpsTechn\tIPS Technology Limited\n3C:98:72\tSercomm\tSercomm Corporation.\n3C:98:BF\tQuestCon\tQuest Controls, Inc.\n3C:99:F7\tLansente\tLansentechnology AB\n3C:9A:77\tTechnico\tTechnicolor CH USA Inc.\n3C:9B:D6\tVizio\tVizio, Inc\n3C:9F:81\tShenzhen\tShenzhen CATIC Bit Communications Technology Co.,Ltd\n3C:A0:67\tLiteonTe\tLiteon Technology Corporation\n3C:A1:0D\tSamsungE\tSamsung Electronics Co.,Ltd\n3C:A3:08\tTexasIns\tTexas Instruments\n3C:A3:15\tBlessInf\tBless Information & Communications Co., Ltd\n3C:A3:1A\tOilfindI\tOilfind International LLC\n3C:A3:48\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n3C:A5:81\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n3C:A6:16\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n3C:A7:2B\tMrvCommu\tMRV Communications (Networks) LTD\n3C:A8:2A\tHewlettP\tHewlett Packard\n3C:A9:F4\tIntelCor\tIntel Corporate\n3C:AA:3F\tIkey\tiKey, Ltd.\n3C:AB:8E\tApple\tApple, Inc.\n3C:AE:69\tEsaElekt\tESA Elektroschaltanlagen Grimma GmbH\n3C:B1:5B\tAvaya\tAvaya Inc\n3C:B1:7F\tWattwatc\tWattwatchers Pty Ld\n3C:B6:B7\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n3C:B7:2B\tPlumgrid\tPLUMgrid Inc\n3C:B7:92\tHitachiM\tHitachi Maxell, Ltd., Optronics Division\n3C:B8:7A\tPrivate\t\n3C:B9:A6\tBeldenDe\tBelden Deutschland GmbH\n3C:BB:73\tShenzhen\tShenzhen Xinguodu Technology Co., Ltd.\n3C:BB:FD\tSamsungE\tSamsung Electronics Co.,Ltd\n3C:BD:3E\tBeijingX\tBeijing Xiaomi Electronics Co., Ltd.\n3C:BD:D8\tLgElectr\tLg Electronics Inc\n3C:BE:E1\tNikon\tNikon Corporation\n3C:C0:79\tShenzhen\tShenzhen One-Nine Intelligent Electronic Science and Technology Co., Ltd\n3C:C0:C6\tD&BAudio\td&b audiotechnik GmbH\n3C:C1:2C\tAes\tAES Corporation\n3C:C1:F6\tMelangeP\tMelange Systems Pvt. Ltd.\n3C:C2:43\tNokia\tNokia Corporation\n3C:C2:E1\tXinhuaCo\tXinhua Control Engineering Co.,Ltd\n3C:C9:9E\tHuiyangT\tHuiyang Technology Co., Ltd\n3C:CA:87\tIders\tIders Incorporated\n3C:CB:7C\tTctMobil\tTCT mobile ltd\n3C:CD:5A\tTechnisc\tTechnische Alternative GmbH\n3C:CD:5D\tHuaweiTe\tHuawei Technologies Co.,Ltd\n3C:CD:93\tLgElectr\tLg Electronics Inc\n3C:CE:15\tMercedes\tMercedes-Benz USA, LLC\n3C:CE:73\tCisco\tCisco Systems, Inc\n3C:CF:5B\tIcommHk\tIcomm Hk Limited\n3C:D0:F8\tApple\tApple, Inc.\n3C:D1:6E\tTelepowe\tTelepower Communication Co., Ltd\n3C:D4:D6\tWireless\tWirelessWERX, Inc\n3C:D7:DA\tSkMtekMi\tSK Mtek microelectronics(shenzhen)limited\n3C:D9:2B\tHewlettP\tHewlett Packard\n3C:D9:CE\tEclipseW\tEclipse WiFi\n3C:DA:2A\tZte\tzte corporation\n3C:DC:BC\tSamsungE\tSamsung Electronics Co.,Ltd\n3C:DD:89\tSomoHold\tSOMO HOLDINGS & TECH. CO.,LTD.\n3C:DF:1E\tCisco\tCisco Systems, Inc\n3C:DF:A9\tArrisGro\tARRIS Group, Inc.\n3C:DF:BD\tHuaweiTe\tHuawei Technologies Co.,Ltd\n3C:E0:72\tApple\tApple, Inc.\n3C:E1:A1\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\n3C:E5:A6\tHangzhou\tHangzhou H3C Technologies Co., Limited\n3C:E5:B4\tKidasenI\tKidasen Industria E Comercio De Antenas Ltda\n3C:E6:24\tLgDispla\tLG Display\n3C:E8:24\tHuaweiTe\tHuawei Technologies Co.,Ltd\n3C:EA:4F\t2wire\t2Wire Inc\n3C:EA:F9\tJubixcol\tJubixcoltd\n3C:EA:FB\tNse\tNse Ag\n3C:EF:8C\tZhejiang\tZhejiang Dahua Technology Co., Ltd.\n3C:F3:92\tVirtualt\tVirtualtek. Co. Ltd\n3C:F4:F9\tModa-Inn\tModa-InnoChips\n3C:F5:2C\tDspecial\tDSPECIALISTS GmbH\n3C:F5:91\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n3C:F5:CC\tNewH3cTe\tNew H3C Technologies Co., Ltd\n3C:F7:2A\tNokia\tNokia Corporation\n3C:F7:48\tShenzhen\tShenzhen Linsn Technology Development Co.,Ltd\n3C:F7:A4\tSamsungE\tSamsung Electronics Co.,Ltd\n3C:F8:08\tHuaweiTe\tHuawei Technologies Co.,Ltd\n3C:F8:62\tIntelCor\tIntel Corporate\n3C:FA:43\tHuaweiTe\tHuawei Technologies Co.,Ltd\n3C:FB:5C\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n3C:FB:96\tEmcraftL\tEmcraft Systems LLC\n3C:FD:FE\tIntelCor\tIntel Corporate\n40:00:03\tNetWare?\tNet Ware (?)\n40:00:E0\tDerekSha\tDerek(Shaoguan)Limited\n40:01:07\tArista\tArista Corp\n40:01:7A\tCisco\tCisco Systems, Inc\n40:01:C6\t3comEuro\t3COM EUROPE LTD\n40:04:0C\tA&T\t\n40:06:A0\tTexasIns\tTexas Instruments\n40:07:C0\tRailtec\tRailtec Systems GmbH\n40:0D:10\tArrisGro\tARRIS Group, Inc.\n40:0E:67\tTremol\tTremol Ltd.\n40:0E:85\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\n40:11:DC\tSonance\t\n40:12:E4\tCompass-\tCompass-EOS\n40:13:D9\tGlobalEs\tGlobal ES\n40:15:97\tProtectA\tProtect America, Inc.\n40:16:3B\tSamsungE\tSamsung Electronics Co.,Ltd\n40:16:7E\tAsustekC\tASUSTek COMPUTER INC.\n40:16:9F\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n40:16:FA\tEkmMeter\tEKM Metering\n40:17:E2\tIntaiTec\tIntai Technology Corp.\n40:18:B1\tAerohive\tAerohive Networks Inc.\n40:18:D7\tSmartron\tSmartronix, Inc.\n40:1B:5F\tWeifangG\tWeifang Goertek Electronics Co.,Ltd\n40:1D:59\tBiometri\tBiometric Associates, LP\n40:22:ED\tDigitalP\tDigital Projection Ltd\n40:25:C2\tIntelCor\tIntel Corporate\n40:26:19\tApple\tApple, Inc.\n40:27:0B\tMobileec\tMobileeco Co., Ltd\n40:28:14\tRfiEngin\tRFI Engineering\n40:2B:A1\tSonyMobi\tSony Mobile Communications Inc\n40:2C:F4\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\n40:2E:28\tMixtelem\tMiXTelematics\n40:30:04\tApple\tApple, Inc.\n40:30:67\tConlogPt\tConlog (Pty) Ltd\n40:31:3C\tXiaomiEl\tXIAOMI Electronics,CO.,LTD\n40:33:1A\tApple\tApple, Inc.\n40:33:6C\tGodrejBo\tGodrej & Boyce Mfg. co. ltd\n40:37:AD\tMacroIma\tMacro Image Technology, Inc.\n40:3C:FC\tApple\tApple, Inc.\n40:3D:EC\tHumax\tHUMAX Co., Ltd.\n40:3F:8C\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n40:40:22\tZiv\t\n40:40:6B\tIcomera\t\n40:40:A7\tSonyMobi\tSony Mobile Communications Inc\n40:42:29\tLayer3tv\tLayer3TV, Inc\n40:45:DA\tSpreadtr\tSpreadtrum Communications (Shanghai) Co., Ltd.\n40:47:6A\tAcquisit\tAG Acquisition Corp. d.b.a. ASTRO Gaming\n40:48:FD\tIeeeRegi\tIEEE Registration Authority\n40:48:FD:00:00:00/28\tBeijingC\tBEIJING C&W ELECTRONICS(GROUP)CO.,LTD\n40:48:FD:10:00:00/28\tFastProg\tFast Programming\n40:48:FD:20:00:00/28\tMithrasT\tMITHRAS Technology Co., LTD\n40:48:FD:30:00:00/28\tRlContro\tRL Controls LLC.\n40:48:FD:40:00:00/28\tDynamicE\tDynamic Engineering\n40:48:FD:50:00:00/28\t52ndRese\tThe 52nd Research Institute of China Electronic Technology Group Corporation\n40:48:FD:60:00:00/28\tSwarcoTe\tSwarco Technology ApS\n40:48:FD:70:00:00/28\tCloud4wi\t\n40:48:FD:80:00:00/28\tDorelJuv\tDorel Juvenile\n40:48:FD:90:00:00/28\tPlusOneG\tPlus One Global Ltd.\n40:48:FD:A0:00:00/28\tShenzhen\tShenzhen Yifang Digital Technology Co., LTD.\n40:48:FD:B0:00:00/28\tMagentaL\tMagenta Labs, Inc.\n40:48:FD:C0:00:00/28\tEcotapBV\tEcotap B.V.\n40:48:FD:D0:00:00/28\tNox\tNOX Systems AG\n40:48:FD:E0:00:00/28\tSmartSen\tSmart Sensor Devices Ab\n40:49:0F\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n40:49:8A\tSynaptic\tSynapticon GmbH\n40:4A:03\tZyxelCom\tZyxel Communications Corporation\n40:4A:18\tAddrekSm\tAddrek Smart Solutions\n40:4A:D4\tWidex\tWidex A/S\n40:4D:7F\tApple\tApple, Inc.\n40:4D:8E\tHuaweiTe\tHuawei Technologies Co.,Ltd\n40:4E:36\tHtc\tHTC Corporation\n40:4E:EB\tHigherWa\tHigher Way Electronic Co., Ltd.\n40:50:B5\tShenzhen\tShenzhen New Species Technology Co., Ltd.\n40:50:E0\tMiltonSe\tMilton Security Group LLC\n40:51:6C\tGrandexI\tGrandex International Corporation\n40:52:0D\tPicoTech\tPico Technology\n40:54:E4\tWearsafe\tWearsafe Labs Inc\n40:55:39\tCisco\tCisco Systems, Inc\n40:56:0C\tInHomeDi\tIn Home Displays Ltd\n40:56:2D\tSmartron\tSmartron India Pvt ltd\n40:56:62\tGuotengs\tGuoTengShengHua Electronics LTD.\n40:5A:9B\tAnovo\t\n40:5C:FD\tDell\tDell Inc.\n40:5D:82\tNetgear\t\n40:5E:E1\tShenzhen\tShenzhen H&T Intelligent Control Co.,Ltd.\n40:5F:BE\tRim\t\n40:5F:C2\tTexasIns\tTexas Instruments\n40:60:5A\tHawkeyeT\tHawkeye Tech Co. Ltd\n40:61:86\tMicro-St\tMICRO-STAR INT'L CO.,LTD\n40:61:8E\tStella-G\tStella-Green Co\n40:62:31\tGifa\t\n40:62:B6\tTeleSyst\tTele system communication\n40:62:EA\tChinaMob\tChina Mobile Group Device Co.,Ltd.\n40:64:A4\tFurukawa\tThe Furukawa Electric Co., Ltd\n40:65:A3\tSagemcom\tSagemcom Broadband SAS\n40:66:7A\tMediola-\tmediola - connected living AG\n40:68:26\tThalesUk\tThales UK Limited\n40:6A:8E\tHangzhou\tHangzhou Puwell OE Tech Ltd.\n40:6A:AB\tRim\t\n40:6C:8F\tApple\tApple, Inc.\n40:6F:2A\tBlackber\tBlackBerry RTS\n40:70:09\tArrisGro\tARRIS Group, Inc.\n40:70:4A\tPowerIde\tPower Idea Technology Limited\n40:70:74\tLifeTech\tLife Technology (China) Co., Ltd\n40:71:83\tJuniperN\tJuniper Networks\n40:74:96\tAfunTech\taFUN TECHNOLOGY INC.\n40:78:6A\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n40:78:75\tImbel-In\tIMBEL - Industria de Material Belico do Brasil\n40:7A:80\tNokia\tNokia Corporation\n40:7B:1B\tMettleNe\tMettle Networks Inc.\n40:7C:7D\tNokia\t\n40:7D:0F\tHuaweiTe\tHuawei Technologies Co.,Ltd\n40:7F:E0\tGlorySta\tGlory Star Technics (ShenZhen) Limited\n40:82:56\tContinen\tContinental Automotive GmbH\n40:83:1D\tApple\tApple, Inc.\n40:83:DE\tZebraTec\tZebra Technologies Inc\n40:84:93\tClaviste\tClavister AB\n40:86:2E\tJdmMobil\tJdm Mobile Internet Solution Co., Ltd.\n40:88:05\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n40:88:E0\tBeijingE\tBeijing Ereneben Information Technology Limited Shenzhen Branch\n40:8A:9A\tTiteng\tTITENG CO., Ltd.\n40:8B:07\tActionte\tActiontec Electronics, Inc\n40:8B:F6\tShenzhen\tShenzhen TCL New Technology Co., Ltd\n40:8D:5C\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\n40:95:58\tAisino\tAisino Corporation\n40:95:BD\tNtmore\tNTmore.Co.,Ltd\n40:97:D1\tBkElectr\tBK Electronics cc\n40:98:4C\tCasacomS\tCasacom Solutions AG\n40:98:4E\tTexasIns\tTexas Instruments\n40:98:7B\tAisino\tAisino Corporation\n40:98:AD\tApple\tApple, Inc.\n40:99:22\tAzurewav\tAzureWave Technology Inc.\n40:9B:0D\tShenzhen\tShenzhen Yourf Kwan Industrial Co., Ltd\n40:9B:CD\tD-LinkIn\tD-Link International\n40:9C:28\tApple\tApple, Inc.\n40:9F:38\tAzurewav\tAzureWave Technology Inc.\n40:9F:87\tJideTech\tJide Technology (Hong Kong) Limited\n40:9F:C7\tBaekchun\tBAEKCHUN I&C Co., Ltd.\n40:A1:08\tMotorola\tMotorola (Wuhan) Mobility Technologies Communication Co., Ltd.\n40:A3:6B:00:00:00/28\tFinRobot\tFin Robotics Inc\n40:A3:6B:10:00:00/28\tTw-Teamw\tTW-TeamWare\n40:A3:6B:20:00:00/28\tToproott\tTOPROOTTechnology Corp. Ltd.\n40:A3:6B:30:00:00/28\tOmnitrac\tOmnitracs, LLC\n40:A3:6B:40:00:00/28\tSks-Kink\tSKS-Kinkel Elektronik GmbH\n40:A3:6B:50:00:00/28\tNational\tNational Research Council of Canada\n40:A3:6B:60:00:00/28\tBixi\tBixi Systems Ltd.\n40:A3:6B:70:00:00/28\tPella\tPella Corporation\n40:A3:6B:80:00:00/28\tSft\tSFT Co., Ltd.\n40:A3:6B:90:00:00/28\tPhTechni\tPH Technical Labs\n40:A3:6B:A0:00:00/28\tEmbrioni\tEmbrionix Design Inc.\n40:A3:6B:B0:00:00/28\tAmobileI\tAmobile Intelligent Corp.\n40:A3:6B:C0:00:00/28\tOnion\tOnion Corporation\n40:A3:6B:D0:00:00/28\tFaod\tFAOD Co.,Ltd.\n40:A3:CC\tIntelCor\tIntel Corporate\n40:A5:EF\tShenzhen\tShenzhen Four Seas Global Link Network Technology Co., Ltd.\n40:A6:77\tJuniperN\tJuniper Networks\n40:A6:A4\tPassivsy\tPassivSystems Ltd\n40:A6:D9\tApple\tApple, Inc.\n40:A6:E8\tCisco\tCisco Systems, Inc\n40:A8:F0\tHewlettP\tHewlett Packard\n40:A9:3F\tPrivate\t\n40:AC:8D\tDataMana\tData Management, Inc.\n40:B0:34\tHewlettP\tHewlett Packard\n40:B0:FA\tLgElectr\tLG Electronics (Mobile Communications)\n40:B2:C8\tNortelNe\tNortel Networks\n40:B3:95\tApple\tApple, Inc.\n40:B3:CD\tChiyodaE\tChiyoda Electronics Co.,Ltd.\n40:B3:FC\tLogital\tLogital Co. Limited\n40:B4:CD\tAmazonTe\tAmazon Technologies Inc.\n40:B4:F0\tJuniperN\tJuniper Networks\n40:B6:88\tLegicIde\tLEGIC Identsystems AG\n40:B6:B1\tSungsam\tSUNGSAM CO,.Ltd\n40:B7:F3\tArrisGro\tARRIS Group, Inc.\n40:B8:37\tSonyMobi\tSony Mobile Communications Inc\n40:B8:9A\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n40:B9:3C\tHewlettP\tHewlett Packard Enterprise\n40:BA:61\tArimaCom\tARIMA Communications Corp.\n40:BC:73\tCronopla\tCronoplast  S.L.\n40:BC:8B\tItelio\titelio GmbH\n40:BD:32\tTexasIns\tTexas Instruments\n40:BD:9E\tPhysio-C\tPhysio-Control, Inc\n40:BF:17\tDigistar\tDigistar Telecom. SA\n40:C2:45\tShenzhen\tShenzhen Hexicom Technology Co., Ltd.\n40:C3:C6\tSnaprout\tSnapRoute\n40:C4:D6\tChongqin\tChongQing Camyu Technology Development Co.,Ltd.\n40:C6:2A\tShanghai\tShanghai Jing Ren Electronic Technology Co., Ltd.\n40:C7:29\tSagemcom\tSagemcom Broadband SAS\n40:C7:C9\tNaviit\tNaviit Inc.\n40:C8:1F\tShenzhen\tShenzhen Xinguodu Technology Co., Ltd.\n40:C8:CB\tAmTeleco\tAM Telecom co., Ltd.\n40:CB:A8\tHuaweiTe\tHuawei Technologies Co.,Ltd\n40:CB:C0\tApple\tApple, Inc.\n40:CD:3A\tZ3Techno\tZ3 Technology\n40:CD:7A\tQingdaoH\tQingdao Hisense Communications Co.,Ltd.\n40:CE:24\tCisco\tCisco Systems, Inc\n40:D2:8A\tNintendo\tNintendo Co., Ltd.\n40:D3:2D\tApple\tApple, Inc.\n40:D3:57\tIsonTech\tIson Technology Co., Ltd.\n40:D3:AE\tSamsungE\tSamsung Electronics Co.,Ltd\n40:D4:0E\tBiodata\tBiodata Ltd\n40:D5:59\tMicroSER\tMicro S.E.R.I.\n40:D6:3C\tEquitech\tEquitech Industrial(DongGuan)Co.,Ltd\n40:D8:55\tIeeeRegi\tIEEE Registration Authority\n40:D8:55:00:00:00/36\tXronos\tXronos.Inc\n40:D8:55:00:10:00/36\tVemotion\t\n40:D8:55:00:20:00/36\tHangzhou\tHangzhou Chenxiao Technologies Co. Ltd.\n40:D8:55:00:30:00/36\tAlphanav\tAlphaNavigation coltd\n40:D8:55:00:40:00/36\tCrMagnet\tCR Magnetics, Inc.\n40:D8:55:00:50:00/36\tMonarchI\tMonarch Instrument\n40:D8:55:00:60:00/36\tBactest\tBactest Limited\n40:D8:55:00:70:00/36\tDigitalA\tDigital Audio SA\n40:D8:55:00:80:00/36\tKaoriInd\tKaori Industria Eletronica Ltda\n40:D8:55:00:90:00/36\tClearsit\tClearSite Communications Inc.\n40:D8:55:00:A0:00/36\tSaranaSi\tSarana Sistem Mikro\n40:D8:55:00:B0:00/36\tGogoBa\tGogo BA\n40:D8:55:00:C0:00/36\tAplexTec\tAplex Technology Inc.\n40:D8:55:00:D0:00/36\tHuns\t\n40:D8:55:00:E0:00/36\tBrightwe\tBrightwell Dispensers\n40:D8:55:00:F0:00/36\tDigitalD\tDigital Dynamics, Inc.\n40:D8:55:01:00:00/36\tApgCashD\tAPG Cash Drawer, LLC\n40:D8:55:01:10:00/36\tFleximSe\tFlexim Security Oy\n40:D8:55:01:20:00/36\tSencon\tSencon Inc.\n40:D8:55:01:30:00/36\tGrandeVi\tGrande Vitesse Systems\n40:D8:55:01:40:00/36\tToniStud\tToni Studio\n40:D8:55:01:50:00/36\tBitmillS\tBITMILL srl\n40:D8:55:01:60:00/36\tPar-Tech\tPar-Tech, Inc.\n40:D8:55:01:70:00/36\tFrankeAq\tFranke Aquarotter GmbH\n40:D8:55:01:80:00/36\tStaneoSa\tStaneo Sas\n40:D8:55:01:90:00/36\tNautel\tNautel Limited\n40:D8:55:01:A0:00/36\tMeggittD\tMeggitt Defense Systems Inc.\n40:D8:55:01:B0:00/36\tAudioEnh\tAudio Enhancement\n40:D8:55:01:C0:00/36\tBergClou\tBERG Cloud Limited\n40:D8:55:01:D0:00/36\tScharcoE\tScharco Elektronik GmbH\n40:D8:55:01:E0:00/36\tA2s\t\n40:D8:55:01:F0:00/36\tSitepIta\tSitep Italia Spa\n40:D8:55:02:00:00/36\tEntecEle\tENTEC Electric & Electronic CO., LTD.\n40:D8:55:02:10:00/36\tSmtDOO\tSmt D.O.O.\n40:D8:55:02:20:00/36\tDigimerg\tDigimerge Technology Inc\n40:D8:55:02:30:00/36\tShanghai\tShanghai o-solution electronics & Technology Co., Ltd.\n40:D8:55:02:40:00/36\tElectric\tElectrical Geodesics Incorporated\n40:D8:55:02:50:00/36\tRosemoun\tRosemount Analytical\n40:D8:55:02:60:00/36\tSymetric\tSymetrics Industries\n40:D8:55:02:70:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n40:D8:55:02:80:00/36\tIntegrat\tIntegrated Control Corp.\n40:D8:55:02:90:00/36\tDeproEle\tDepro Electronique\n40:D8:55:02:A0:00/36\tTinkerfo\tTinkerforge GmbH\n40:D8:55:02:B0:00/36\tNomatron\tNomatronics\n40:D8:55:02:C0:00/36\tInventla\tInventLab s.c.\n40:D8:55:02:D0:00/36\tElgamaSi\tElgama Sistemos\n40:D8:55:02:E0:00/36\tCircuite\tCircuitec Ind. Equip. Eletr. Ltda\n40:D8:55:02:F0:00/36\tAdvatekL\tAdvatek Lighting Pty Ltd\n40:D8:55:03:00:00/36\tTecnolog\tTecnologias Plexus\n40:D8:55:03:10:00/36\tDommel\tDommel GmbH\n40:D8:55:03:20:00/36\tBettiniS\tBettini Srl\n40:D8:55:03:30:00/36\tErmesEle\tErmes Elettronica s.r.l.\n40:D8:55:03:40:00/36\tDacomWes\tDacom West GmbH\n40:D8:55:03:50:00/36\tMesotech\tMesotech International, Inc.\n40:D8:55:03:60:00/36\tSchweers\tSchweers informationstechnologie GmbH\n40:D8:55:03:70:00/36\tSoftware\tSoftware Workshop\n40:D8:55:03:80:00/36\tSpecialM\tSpecial Measurements Labs LLC\n40:D8:55:03:90:00/36\tCi\tCI Systems Ltd\n40:D8:55:03:A0:00/36\tSocusNet\tSocus networks\n40:D8:55:03:B0:00/36\tTelcomko\tTelcomkorea\n40:D8:55:03:C0:00/36\tComputer\tComputer System Co.,Ltd\n40:D8:55:03:D0:00/36\tTekelekE\tTekelek Europe Ltd\n40:D8:55:03:E0:00/36\tVishayCe\tVishay Celtron Technologies, Inc.\n40:D8:55:03:F0:00/36\tUnisvrGl\tUniSVR Global Information Technology Corp.\n40:D8:55:04:00:00/36\tGhlBerha\tGHL Systems Berhad\n40:D8:55:04:10:00/36\tTQMItaca\tT.Q.M. Itaca Technology s.r.l.\n40:D8:55:04:20:00/36\tMangoCom\tMango Communicaitons Inc.\n40:D8:55:04:30:00/36\tSchulerc\tSchulerControl GmbH\n40:D8:55:04:40:00/36\tAnChenCo\tAn Chen Computer Co., Ltd.\n40:D8:55:04:50:00/36\tGenadsys\tGenadsystem\n40:D8:55:04:60:00/36\tCircuitl\tCircuitlink Pty Ltd\n40:D8:55:04:70:00/36\tDos&Dont\tDos&Donts SRL\n40:D8:55:04:80:00/36\tGdMissio\tGD Mission Systems\n40:D8:55:04:90:00/36\tThermoFi\tThermo Fisher Scientific\n40:D8:55:04:A0:00/36\tGatewayT\tGateway Technologies SA de CV\n40:D8:55:04:B0:00/36\tVitalTec\tVital Tech Industria e Comercio Ltda\n40:D8:55:04:C0:00/36\tServeron\tServeron Corporation\n40:D8:55:04:D0:00/36\tMachinep\tMACHINEPERFORMANCE ApS\n40:D8:55:04:E0:00/36\tHoneywel\tHoneywell International\n40:D8:55:04:F0:00/36\tHaeinS&S\tHaein S&S Co., Ltd\n40:D8:55:05:00:00/36\tAtgUvTec\tATG UV Technology\n40:D8:55:05:10:00/36\tCsInstru\tCS Instruments Asia\n40:D8:55:05:20:00/36\tDanElect\tDAN ELECTRONICS SYSTEM (P) LIMITED\n40:D8:55:05:30:00/36\tAmantys\tAmantys Ltd\n40:D8:55:05:40:00/36\tVitec\t\n40:D8:55:05:50:00/36\tHelmholt\tHelmholtz Zentrum Dresden Rossendorf e.V.\n40:D8:55:05:60:00/36\tGroup57\tGROUP 57\n40:D8:55:05:70:00/36\tTammerma\tTammermatic Group Oy\n40:D8:55:05:80:00/36\tEnergyTe\tEnergy Team S.p.A.\n40:D8:55:05:90:00/36\tColonial\tCOLONIAL ASSEMBLY and  DESIGN\n40:D8:55:05:A0:00/36\tUltraEle\tUltra Electronics Flightline Systems\n40:D8:55:05:B0:00/36\tDataFlow\tData Flow Systems, Inc.\n40:D8:55:05:C0:00/36\tRosslare\tRosslare Enterprises Limited\n40:D8:55:05:D0:00/36\tLeicaBio\tLeica Biosystems\n40:D8:55:05:E0:00/36\tInoage\tinoage GmbH\n40:D8:55:05:F0:00/36\tEpsa\tEPSa GmbH\n40:D8:55:06:00:00/36\tAplexTec\tAplex Technology Inc.\n40:D8:55:06:10:00/36\tCominfo\tCominfo, Inc.\n40:D8:55:06:20:00/36\tTechSour\tTech Source Inc\n40:D8:55:06:30:00/36\tProtonic\tProtonic Holland\n40:D8:55:06:40:00/36\tHipodrom\tHipodromo De Agua Caliente, S.A. De C.V.\n40:D8:55:06:50:00/36\tParallel\tParallel Wireless\n40:D8:55:06:60:00/36\tTeratron\tTeraTron GmbH\n40:D8:55:06:70:00/36\tTronicCo\tTronic Control ltd.\n40:D8:55:06:80:00/36\tOkiSeate\tOki Seatec Co., Ltd.\n40:D8:55:06:90:00/36\tSmartcom\tSmartcom-Bulgaria AD\n40:D8:55:06:A0:00/36\tElgris\t\n40:D8:55:06:B0:00/36\tBrsSiste\tBRS Sistemas Eletrônicos\n40:D8:55:06:C0:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n40:D8:55:06:D0:00/36\tBroadsof\tBroadSoft, INC\n40:D8:55:06:E0:00/36\tC-ComSat\tC-COM Satellite Systems Inc.\n40:D8:55:06:F0:00/36\tDorletSa\tDorlet Sau\n40:D8:55:07:00:00/36\tJscElect\tJSC Electrical Equipment Factory\n40:D8:55:07:10:00/36\tTattileS\tTattile Srl\n40:D8:55:07:20:00/36\tCt\tCT Company\n40:D8:55:07:30:00/36\tDiamondT\tDiamond Technologies, Inc\n40:D8:55:07:40:00/36\tSphereMe\tSphere Medical Ltd\n40:D8:55:07:50:00/36\tTeraflop\tTeraflops\n40:D8:55:07:60:00/36\tInternet\tInternet Protocolo Logica Sl\n40:D8:55:07:70:00/36\tToecTech\tToec Technology Co.,Ltd\n40:D8:55:07:80:00/36\tNachi-Fu\tNACHI-FUJIKOSHI CORP\n40:D8:55:07:90:00/36\tDelfisol\tDelfiSolutions A/S\n40:D8:55:07:A0:00/36\t4embedde\t4embedded\n40:D8:55:07:B0:00/36\tIpsTechn\tIPS Technology Limited\n40:D8:55:07:C0:00/36\tAgramkow\tAgramkow Fluid Systems A/S\n40:D8:55:07:D0:00/36\tWuxiSine\tWuxi SiNeng New Energy Co., Ltd.\n40:D8:55:07:E0:00/36\tTescom\tTescom Corporation\n40:D8:55:07:F0:00/36\tWheatsto\tWheatstone Corporation\n40:D8:55:08:00:00/36\tHoneywel\tHoneywell\n40:D8:55:08:10:00/36\tSiconSrl\tSicon srl\n40:D8:55:08:20:00/36\tArdSa\tard sa\n40:D8:55:08:30:00/36\tDelopt\t\n40:D8:55:08:40:00/36\tPapendor\tPapendorf Software Engineering GmbH\n40:D8:55:08:50:00/36\tPeekTraf\tPeek Traffic Corporation\n40:D8:55:08:60:00/36\tDspDesig\tDsp Design\n40:D8:55:08:70:00/36\tBestelCh\tBestel China\n40:D8:55:08:80:00/36\tJelSyste\tJel System Co., Ltd.\n40:D8:55:08:90:00/36\tWuhanXin\tWuhan Xingtuxinke ELectronic Co.,Ltd\n40:D8:55:08:A0:00/36\tLederEle\tLeder Elektronik Design\n40:D8:55:08:B0:00/36\tMeshwork\tMeshWorks Wireless Oy\n40:D8:55:08:C0:00/36\tMagnesca\tMagnescale Co.,Ltd\n40:D8:55:08:D0:00/36\tBoehmeNa\tBoehme Nachrichtentechnik\n40:D8:55:08:E0:00/36\tLyngsoe\tLyngsoe Systems\n40:D8:55:08:F0:00/36\tExcelita\tExcelitas\n40:D8:55:09:00:00/36\tAxxessId\tAxxess Identification Ltd\n40:D8:55:09:10:00/36\tKdt\t\n40:D8:55:09:20:00/36\tWasserba\tWasserbauer GmbH\n40:D8:55:09:30:00/36\tSentry36\tSentry 360 Security\n40:D8:55:09:40:00/36\tNomadDig\tNomad Digital Limited\n40:D8:55:09:50:00/36\tHeartFor\tHeart Force Medical\n40:D8:55:09:60:00/36\tComtelEl\tComtel Electronics GmbH\n40:D8:55:09:70:00/36\tBurtonTe\tBurton Technical Services LLC\n40:D8:55:09:80:00/36\tDaveSrl\tDave Srl\n40:D8:55:09:90:00/36\tIdcell\tidcell co.ltd\n40:D8:55:09:A0:00/36\tCoherent\tCoherentPlus Sdn Bhd\n40:D8:55:09:B0:00/36\tTokyoDen\tTokyo Denki Gijutsu Kogyo\n40:D8:55:09:C0:00/36\tKeywareS\tKeyware Solutions Inc.\n40:D8:55:09:D0:00/36\tEmac\tEMAC, Inc.\n40:D8:55:09:E0:00/36\tNanopuls\tNanoPulse, Inc.\n40:D8:55:09:F0:00/36\tBascules\tBascules Robbe nv\n40:D8:55:0A:00:00/36\tQuantron\tQuantronix, Inc.\n40:D8:55:0A:10:00/36\tAdvalySy\tADVALY SYSTEM Inc.\n40:D8:55:0A:20:00/36\tXemexNv\tXemex NV\n40:D8:55:0A:30:00/36\tTelefran\tTelefrank GmbH\n40:D8:55:0A:40:00/36\tReschEle\tResch Electronic Innovation GmbH\n40:D8:55:0A:50:00/36\tWooshcom\tWooshCom Corporation\n40:D8:55:0A:60:00/36\tAlumbraP\tAlumbra Produtos Elétricos e Eletrônicos Ltda\n40:D8:55:0A:70:00/36\tFirstDes\tFirst Design System Inc.\n40:D8:55:0A:80:00/36\tBaudisch\tBaudisch Electronic GmbH\n40:D8:55:0A:90:00/36\tApantacL\tApantac LLC\n40:D8:55:0A:A0:00/36\tThermalI\tThermal Imaging Radar, LLC\n40:D8:55:0A:B0:00/36\tEnelDooB\tEnel doo Belgrade\n40:D8:55:0A:C0:00/36\tFraunhof\tFraunhofer HHI\n40:D8:55:0A:D0:00/36\tSpaceMic\tSpace Micro\n40:D8:55:0A:E0:00/36\tGdMissio\tGD Mission Systems\n40:D8:55:0A:F0:00/36\tEnverv\tEnVerv Inc.\n40:D8:55:0B:00:00/36\tMicrolog\tMicrologic\n40:D8:55:0B:10:00/36\tNanjingT\tNanjing TIANSU Automation Control System Co., Ltd.\n40:D8:55:0B:20:00/36\tEverTren\tEver Trend Technology Development Limited\n40:D8:55:0B:30:00/36\tTWSSrl\tT.W.S. srl\n40:D8:55:0B:40:00/36\tMitsubis\tMITSUBISHI ELECTRIC SYSTEM & SERVICE CO.,LTD.\n40:D8:55:0B:50:00/36\tDataShar\tData Sharing Consulting\n40:D8:55:0B:60:00/36\tTelvent\t\n40:D8:55:0B:70:00/36\tAcdElekt\tACD Elektronik GmbH\n40:D8:55:0B:80:00/36\tFerlinTr\tFerlin Trading BV\n40:D8:55:0B:90:00/36\tWxbrSist\tWxBR Sistemas de Telecomunicacoes Ltda\n40:D8:55:0B:A0:00/36\tPchEngin\tPCH Engineering A/S\n40:D8:55:0B:B0:00/36\tWhiptail\t\n40:D8:55:0B:C0:00/36\tAplexTec\tAplex Technology Inc.\n40:D8:55:0B:D0:00/36\tIcognize\tiCOGNIZE GmbH\n40:D8:55:0B:E0:00/36\tManufact\tManufacturing System Insights Inc\n40:D8:55:0B:F0:00/36\tShenzhen\tShenzhen SETEC Power Co.,Ltd\n40:D8:55:0C:00:00/36\tAct\t\n40:D8:55:0C:10:00/36\tXeptoCom\tXepto Computing Inc\n40:D8:55:0C:20:00/36\tScTechsw\tSC Techswarm SRL\n40:D8:55:0C:30:00/36\tApgCashD\tAPG Cash Drawer, LLC\n40:D8:55:0C:40:00/36\tInspired\tInspired Systems\n40:D8:55:0C:50:00/36\tMMElektr\tM.M. Elektrolab\n40:D8:55:0C:60:00/36\tComtime\tcomtime GmbH\n40:D8:55:0C:70:00/36\tInsensiv\tinsensiv GmbH\n40:D8:55:0C:80:00/36\tMettlerT\tMettler Toledo Hi Speed\n40:D8:55:0C:90:00/36\tQuantafl\tQuantaflow\n40:D8:55:0C:A0:00/36\tNeutrik\tNeutrik Ag\n40:D8:55:0C:B0:00/36\tRelion\tReliOn Inc\n40:D8:55:0C:C0:00/36\tAteme\t\n40:D8:55:0C:D0:00/36\tLogicalP\tLogical Product\n40:D8:55:0C:E0:00/36\tEstAnaly\tEST Analytical\n40:D8:55:0C:F0:00/36\tClark-Mx\tClark-MXR, Inc.\n40:D8:55:0D:00:00/36\tIcraftOy\tIcraft Oy\n40:D8:55:0D:10:00/36\tCantada\tCantada Inc\n40:D8:55:0D:20:00/36\tElan\tElan Systems\n40:D8:55:0D:30:00/36\tLeco\tLECO Corporation\n40:D8:55:0D:40:00/36\tMitsubis\tMitsubishi Heavy Industries, Ltd.\n40:D8:55:0D:50:00/36\tShimizuE\tShimizu Electric Co., Ltd.\n40:D8:55:0D:60:00/36\tDeskontr\tdeskontrol electronics\n40:D8:55:0D:70:00/36\tAvantTec\tAvant Technologies\n40:D8:55:0D:80:00/36\tNext!SCS\tNEXT! s.c. S.Piela B.Dryja\n40:D8:55:0D:90:00/36\tYukoElec\tYuko Electric Co.,Ltd\n40:D8:55:0D:A0:00/36\tDevialet\tDevialet SA\n40:D8:55:0D:B0:00/36\tTopConne\tTop Connect OU\n40:D8:55:0D:C0:00/36\tNvsTechn\tNVS Technologies Inc\n40:D8:55:0D:D0:00/36\tEmbed\tEmbed Limited\n40:D8:55:0D:E0:00/36\tVpg\t\n40:D8:55:0D:F0:00/36\tXadi\tXadi Inc\n40:D8:55:0E:00:00/36\tRichter\t\n40:D8:55:0E:10:00/36\tStvElect\tSTV Electronic GmbH\n40:D8:55:0E:20:00/36\tKeockoKf\tKeocko Holding Kft.\n40:D8:55:0E:30:00/36\tMedigus\tMedigus Ltd\n40:D8:55:0E:40:00/36\tArago\tArago Systems\n40:D8:55:0E:50:00/36\tTritonEl\tTriton Electronics LTD\n40:D8:55:0E:60:00/36\tKyoritsu\tKyoritsu Electric Corp.\n40:D8:55:0E:70:00/36\tLightsta\tLightstar\n40:D8:55:0E:80:00/36\tHeitec\tHeitec Ag\n40:D8:55:0E:90:00/36\tHameg\tHAMEG GmbH\n40:D8:55:0E:A0:00/36\tA-Z-E\t\n40:D8:55:0E:B0:00/36\tWantechN\tWANTECH Networks\n40:D8:55:0E:C0:00/36\tSentry36\tSentry 360 Security\n40:D8:55:0E:D0:00/36\tIntellid\tIntelliDesign Pty Ltd\n40:D8:55:0E:E0:00/36\tSiegmarZ\tSiegmar Zander HuSWare\n40:D8:55:0E:F0:00/36\tGenesysE\tGeneSys Elektronik GmbH\n40:D8:55:0F:00:00/36\tRedwood\tRedwood Systems\n40:D8:55:0F:10:00/36\tGrossenb\tGrossenbacher Systeme AG\n40:D8:55:0F:20:00/36\tSigmaphi\tSigmaPhi Electronics\n40:D8:55:0F:30:00/36\tEcon\tECON Systems Inc.\n40:D8:55:0F:40:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n40:D8:55:0F:50:00/36\tCstGroup\tCST Group\n40:D8:55:0F:60:00/36\tPrivate\t\n40:D8:55:0F:70:00/36\tComlineE\tComline Elektronik Elektrotechnik GmbH\n40:D8:55:0F:80:00/36\tBetterPl\tBetter Place\n40:D8:55:0F:90:00/36\tInvisuaL\tInvisua Lighting BV\n40:D8:55:0F:A0:00/36\tMarmitek\tMarmitek BV\n40:D8:55:0F:B0:00/36\tInfomacS\tInfoMac Sp. z o. o. Sp. k.\n40:D8:55:0F:C0:00/36\tEumigInd\teumig industrie-tv GmbH\n40:D8:55:0F:D0:00/36\tMonogram\tMONOGRAM technologies ltd\n40:D8:55:0F:E0:00/36\tCytechTe\tCytech Technology Pte Ltd\n40:D8:55:0F:F0:00/36\tYuyamaMf\tYUYAMA MFG Co.,Ltd\n40:D8:55:10:00:00/36\tTaskSist\tTask Sistemas De Computacao S.A.\n40:D8:55:10:10:00/36\tEPGElett\te.p.g. Elettronica Srl\n40:D8:55:10:20:00/36\tPowerEle\tPower Electronics Espana, S.L.\n40:D8:55:10:30:00/36\tPeekTraf\tPeek Traffic Corporation\n40:D8:55:10:40:00/36\tImpleSis\tImple Sistemas Eletronicos Embarcados Ltda\n40:D8:55:10:50:00/36\tTielineR\tTieline Research Pty Ltd\n40:D8:55:10:60:00/36\tOrbital\tOrbital A/S\n40:D8:55:10:70:00/36\tSmithMet\tSmith Meter, Inc\n40:D8:55:10:80:00/36\tAlphaDes\tAlpha Design Co.,Ltd.\n40:D8:55:10:90:00/36\tRosslare\tRosslare Enterprises Limited\n40:D8:55:10:A0:00/36\tDavisDer\tDavis Derby Limited\n40:D8:55:10:B0:00/36\tSo-Cool\tSo-Cool Corporation.\n40:D8:55:10:C0:00/36\tContrans\tContrans TI sp. z o.o.\n40:D8:55:10:D0:00/36\tRite-Tec\tRite-Tech Industrial Co., Ltd.\n40:D8:55:10:E0:00/36\tHks-Proz\tHKS-Prozesstechnik GmbH\n40:D8:55:10:F0:00/36\tCavalryS\tCavalry Storage Inc\n40:D8:55:11:00:00/36\tAplexTec\tAplex Technology Inc.\n40:D8:55:11:10:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n40:D8:55:11:20:00/36\tHallibur\tHalliburton - Sperry Drilling Service\n40:D8:55:11:30:00/36\tTestbook\tTestbook Ltd\n40:D8:55:11:40:00/36\tGdMissio\tGD Mission Systems\n40:D8:55:11:50:00/36\tMesaElec\tMESA Electronic GmbH\n40:D8:55:11:60:00/36\tUniscanL\tUniscan LLC\n40:D8:55:11:70:00/36\tRcsEnerg\tRCS Energy Management Limited\n40:D8:55:11:80:00/36\tUniversi\tUniversity of Nebraska -- Lincoln\n40:D8:55:11:90:00/36\tOooGroup\tOOO Group of Industrial Technologies\n40:D8:55:11:A0:00/36\tSiconSrl\tSicon srl\n40:D8:55:11:B0:00/36\tNanotron\tnanoTRONIC GmbH\n40:D8:55:11:C0:00/36\tDeuta-We\tDEUTA-WERKE GmbH\n40:D8:55:11:D0:00/36\tAcdElekt\tACD Elektronik GmbH\n40:D8:55:11:E0:00/36\tCemsi\tCEMSI, Inc.\n40:D8:55:11:F0:00/36\tKompanPa\tKOMPAN Pawel Sokolowski\n40:D8:55:12:00:00/36\tObjectfa\tObjectFab GmbH\n40:D8:55:12:10:00/36\tShanghai\tshanghai Anjian Information technology co. , ltd.\n40:D8:55:12:20:00/36\tAtxNetwo\tATX Networks Ltd.\n40:D8:55:12:30:00/36\tZaoNpcKo\tZAO NPC  Kompjuternie Technologii\n40:D8:55:12:40:00/36\tDebugSRL\tDebug s.r.l.\n40:D8:55:12:50:00/36\tScandyna\tScandyna A/S\n40:D8:55:12:60:00/36\tTti\tTti Ltd\n40:D8:55:12:70:00/36\tLightsta\tLightstar\n40:D8:55:12:80:00/36\tAkseSrl\tAkse srl\n40:D8:55:12:90:00/36\tDspDesig\tDsp Design\n40:D8:55:12:A0:00/36\tJadpodCo\tJadpod Communication Company Limited\n40:D8:55:12:B0:00/36\tMangoDsp\tMango DSP, Inc.\n40:D8:55:12:C0:00/36\tNspEurop\tNSP Europe Ltd\n40:D8:55:12:D0:00/36\tBiotageS\tBiotage Sweden AB\n40:D8:55:12:E0:00/36\tCanfield\tCanfield Scientific, Inc.\n40:D8:55:12:F0:00/36\tPrivate\t\n40:D8:55:13:00:00/36\tGspSprac\tGSP Sprachtechnologie GmbH\n40:D8:55:13:10:00/36\tEmac\tEMAC, Inc.\n40:D8:55:13:20:00/36\tAerovisi\tAeroVision Avionics, Inc\n40:D8:55:13:30:00/36\tTattileS\tTattile Srl\n40:D8:55:13:40:00/36\tDigitech\tdigitech GmbH &amp; Co. KG\n40:D8:55:13:50:00/36\tGlobalco\tGlobalcom Engineering Srl\n40:D8:55:13:60:00/36\tDevrieco\tDevriecom B.V.\n40:D8:55:13:70:00/36\tGdePolsk\tGDE Polska\n40:D8:55:13:80:00/36\tCalonAss\tCalon Associates Limited\n40:D8:55:13:90:00/36\tWowSyste\tWOW System\n40:D8:55:13:A0:00/36\tSupplier\tSupplier Ind. e Com de Eletroeletrônicos\n40:D8:55:13:B0:00/36\tDavinTec\tDavin Technologies Co.,Ltd\n40:D8:55:13:C0:00/36\tShanghai\tshanghai Anjian Information technology co. , ltd.\n40:D8:55:13:D0:00/36\tPermScie\tPerm Scientific-Industrial Instrument Making Company JSC\n40:D8:55:13:E0:00/36\tHanatech\t\n40:D8:55:13:F0:00/36\tZhejiang\tZhejiang Wellsun Electric Meter Co.,Ltd\n40:D8:55:14:00:00/36\tInnotran\tInnoTrans Communications, Inc\n40:D8:55:14:10:00/36\tKey\tKey Systems, Inc.\n40:D8:55:14:20:00/36\tTetracor\tTetracore, Inc.\n40:D8:55:14:30:00/36\tTokyoDra\tTokyo Drawing Ltd.\n40:D8:55:14:40:00/36\tVenco\t\n40:D8:55:14:50:00/36\tWeberMar\tWeber Marking Systems GmbH\n40:D8:55:14:60:00/36\tPleigerE\tPleiger Elektronik GmbH  and Co. KG\n40:D8:55:14:70:00/36\tAplexTec\tAplex Technology Inc.\n40:D8:55:14:80:00/36\tSeikoTim\tSeiko Time Systems Inc.\n40:D8:55:14:90:00/36\tEngageTe\tEngage Technologies\n40:D8:55:14:A0:00/36\tGdMissio\tGD Mission Systems\n40:D8:55:14:B0:00/36\tVocality\tVocality International Ltd\n40:D8:55:14:C0:00/36\tPlt\t\n40:D8:55:14:D0:00/36\tSomfySas\tSomfy Sas\n40:D8:55:14:E0:00/36\tMarpossS\tMarposs S.p.A\n40:D8:55:14:F0:00/36\tTdsSoftw\tTDS Software Solutions Pty Ltd\n40:D8:55:15:00:00/36\tShikinoH\tSHIKINO HIGH-TECH\n40:D8:55:15:10:00/36\tProgress\tProgress Rail Services, Inspection and Information Systems\n40:D8:55:15:20:00/36\tHomeAuto\tHome Automation Europe\n40:D8:55:15:30:00/36\tBlinkpip\tBlinkPipe Ltd\n40:D8:55:15:40:00/36\tIart\t\n40:D8:55:15:50:00/36\tTelefran\tTelefrang AB\n40:D8:55:15:60:00/36\tEmphysys\tEmphysys, Inc.\n40:D8:55:15:70:00/36\tHitachiP\tHitachi Power Solutions Co., Ltd.\n40:D8:55:15:80:00/36\tExibea\tExibea AB\n40:D8:55:15:90:00/36\tPlatinum\tPLATINUM GmbH\n40:D8:55:15:A0:00/36\tDorletSa\tDorlet Sau\n40:D8:55:15:B0:00/36\tSqfSpezi\tSQF Spezialelektronik GmbH\n40:D8:55:15:C0:00/36\tSpectrat\tSpectratech Inc.\n40:D8:55:15:D0:00/36\tActronic\tActronic Technologies\n40:D8:55:15:E0:00/36\tProdcoIn\tProdco International Inc.\n40:D8:55:15:F0:00/36\tCt\tCT Company\n40:D8:55:16:00:00/36\tThermoFi\tThermo Fisher Sceintific\n40:D8:55:16:10:00/36\tSolidsca\tSolidscape Inc\n40:D8:55:16:20:00/36\tLuna-Nex\tLUNA-NEXUS\n40:D8:55:16:30:00/36\tKmtronic\tKMtronic LTD\n40:D8:55:16:40:00/36\tNftAutom\tNFT Automatisierungssysteme GmbH\n40:D8:55:16:50:00/36\tTechboar\tTechboard Srl\n40:D8:55:16:60:00/36\tAnhuiJia\tAnhui Jiante Network Technology Co., Ltd.\n40:D8:55:16:70:00/36\tAssembly\tAssembly Contracts Ltd\n40:D8:55:16:80:00/36\tOpasca\tOPASCA Systems GmbH\n40:D8:55:16:90:00/36\tPhotopKo\tPhotop Koncent\n40:D8:55:16:A0:00/36\tAplexTec\tAplex Technology Inc.\n40:D8:55:16:B0:00/36\tTechway\t\n40:D8:55:16:C0:00/36\tPrivate\t\n40:D8:55:16:D0:00/36\tGdMissio\tGD Mission Systems\n40:D8:55:16:E0:00/36\tSecuinfo\tSecuinfo Co.Ltd\n40:D8:55:16:F0:00/36\tBrightle\tBrightLeaf Power\n40:D8:55:17:00:00/36\tIcsEletr\tICS Eletronics\n40:D8:55:17:10:00/36\tSiconSrl\tSicon srl\n40:D8:55:17:20:00/36\tYawataEl\tYawata Electric Industrial Co.,Ltd.\n40:D8:55:17:30:00/36\tContecSt\tContec Steuerungstechnik & Automation GmbH\n40:D8:55:17:40:00/36\tEcoguard\tEcoGuard AB\n40:D8:55:17:50:00/36\tAhbSyste\tAHB Systeme GmbH\n40:D8:55:17:60:00/36\tSchneide\tSchneider Electric Motion, Inc. USA\n40:D8:55:17:70:00/36\tTriEngin\tTRI Engineering co.,ltd.\n40:D8:55:17:80:00/36\tRederDom\tREDER Domotic GmbH\n40:D8:55:17:90:00/36\tServo-Ro\tServo-Robot Inc.\n40:D8:55:17:A0:00/36\tArgus-Sp\tARGUS-SPECTRUM\n40:D8:55:17:B0:00/36\tLuceo\t\n40:D8:55:17:C0:00/36\tCritical\tCritical Link LLC\n40:D8:55:17:D0:00/36\tKiwigrid\tKiwigrid GmbH\n40:D8:55:17:E0:00/36\tTokhatec\t\n40:D8:55:17:F0:00/36\tTelvent\t\n40:D8:55:18:00:00/36\tBroadsof\tBroadSoft Inc\n40:D8:55:18:10:00/36\tErocca\t\n40:D8:55:18:20:00/36\tGeorgNeu\tGeorg Neumann GmbH\n40:D8:55:18:30:00/36\tEmac\tEMAC, Inc.\n40:D8:55:18:40:00/36\tSatkirit\tSatkirit Ltd\n40:D8:55:18:50:00/36\tStandard\tStandard Change Makers\n40:D8:55:18:60:00/36\tKstTechn\tKST technology\n40:D8:55:18:70:00/36\tCdex\tCDEX Corp.\n40:D8:55:18:80:00/36\tArray\tArray Corporation\n40:D8:55:18:90:00/36\tYoozma\tYoozma Corporation\n40:D8:55:18:A0:00/36\tAplexTec\tAplex Technology Inc.\n40:D8:55:18:B0:00/36\tDiagnosy\tDiagnosys Test Systems Ltd\n40:D8:55:18:C0:00/36\tEosSRL\tEOS S.r.l.\n40:D8:55:18:D0:00/36\tZoeMedic\tZoe Medical\n40:D8:55:18:E0:00/36\tKerunVis\tKerun Visual Technology Co., Ltd.(Shenzhen)\n40:D8:55:18:F0:00/36\tBeatSens\tBeat Sensing co. , ltd.\n40:D8:55:19:00:00/36\tSpiderTe\tSpider Tecnologia Ind. e Com Ltda\n40:D8:55:19:10:00/36\tSoukaiEl\tSoukai Electric\n40:D8:55:19:20:00/36\tGdMissio\tGD Mission Systems\n40:D8:55:19:30:00/36\tForzaSil\tForza Silicon Corp.\n40:D8:55:19:40:00/36\tRfCode\tRF Code\n40:D8:55:19:50:00/36\tTonnaEle\tTonna Electronique\n40:D8:55:19:60:00/36\tAdvanced\tAdvanced Micro Controls Inc.\n40:D8:55:19:70:00/36\tBergClou\tBerg Cloud Limited\n40:D8:55:19:80:00/36\tDevboard\tdevboards GmbH\n40:D8:55:19:90:00/36\tPressolS\tPRESSOL Schmiergeraete GmbH\n40:D8:55:19:A0:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n40:D8:55:19:B0:00/36\tNorthern\tNorthern Star Technologies\n40:D8:55:19:C0:00/36\tParrisSe\tParris Service Corporation\n40:D8:55:19:D0:00/36\tEmac\tEMAC, Inc.\n40:D8:55:19:E0:00/36\tThirdway\tThirdwayv Inc.\n40:D8:55:19:F0:00/36\tPatriaAv\tPatria Aviation Oy\n40:D8:55:1A:00:00/36\tFutaba\tFutaba Corporation\n40:D8:55:1A:10:00/36\tKronotec\tKronotech Srl\n40:D8:55:1A:20:00/36\tHipodrom\tHipodromo De Agua Caliente, S.A. De C.V.\n40:D8:55:1A:30:00/36\tNoritake\tNoritake Itron Corporation\n40:D8:55:1A:40:00/36\tCibite\tcibite AG\n40:D8:55:1A:50:00/36\tDemopad\t\n40:D8:55:1A:60:00/36\tRb-LinkW\tRB-LINK Wireless\n40:D8:55:1A:70:00/36\tEntecEle\tENTEC Electric & Electronic CO., LTD\n40:D8:55:1A:80:00/36\tMultiobr\tMultiobrabotka\n40:D8:55:1A:90:00/36\tLubinoSR\tLubino s.r.o.\n40:D8:55:1A:A0:00/36\tBroachli\tBroachlink Technology Co.,Limited\n40:D8:55:1A:B0:00/36\tRosslare\tRosslare Enterprises Limited\n40:D8:55:1A:C0:00/36\tElan\tElan Systems\n40:D8:55:1A:D0:00/36\tWicherDi\tWicher Digital Technik\n40:D8:55:1A:E0:00/36\tAutonomo\tAutonomous Solutions, Inc\n40:D8:55:1A:F0:00/36\tVigitron\tVigitron Inc.\n40:D8:55:1B:00:00/36\tShin-EiE\tShin-ei Electronic Measuring Co.,Ltd.\n40:D8:55:1B:10:00/36\tLogos01S\tLogos 01 S.r.l.\n40:D8:55:1B:20:00/36\tAgeAGilg\tAGE A. Gilg Elektronik\n40:D8:55:1B:30:00/36\tBettiniS\tBettini Srl\n40:D8:55:1B:40:00/36\tInforceC\tInforce Computing Inc.\n40:D8:55:1B:50:00/36\tA+EcKlei\tA+EC Klein Ingenieurbuero\n40:D8:55:1B:60:00/36\tMagic\tMagic Systems\n40:D8:55:1B:70:00/36\tTewsElek\tTEWS Elektronik GmbH & Co. KG\n40:D8:55:1B:80:00/36\tOrion\tOrion Systems, Inc\n40:D8:55:1B:90:00/36\tBekingIn\tBeking Industrieele automatisering\n40:D8:55:1B:A0:00/36\tCreative\tCreative Lighting And Sound Systems Pty Ltd\n40:D8:55:1B:B0:00/36\tMicromeg\tMicromega Dynamics SA\n40:D8:55:1B:C0:00/36\tKbdevice\tKbDevice,Inc.\n40:D8:55:1B:D0:00/36\tHoribaAb\tHoriba Abx Sas\n40:D8:55:1B:E0:00/36\tPeekTraf\tPeek Traffic\n40:D8:55:1B:F0:00/36\tShanghai\tshanghai mingding information tech co.Ltd\n40:D8:55:1C:00:00/36\tNpbAutom\tNPB Automation AB\n40:D8:55:1C:10:00/36\tTriamecM\tTriamec Motion AG\n40:D8:55:1C:20:00/36\tDigitalD\tDigital Display Systems\n40:D8:55:1C:30:00/36\tCornfedL\tCornfed Systems LLC\n40:D8:55:1C:40:00/36\tQedAdvan\tQED Advanced Systems Limited\n40:D8:55:1C:50:00/36\tPrivate\t\n40:D8:55:1C:60:00/36\tDeviceSo\tDevice Solutions Ltd\n40:D8:55:1C:70:00/36\tWexiodis\tWexiodisk AB\n40:D8:55:1C:80:00/36\tSensataT\tSensata Technologies\n40:D8:55:1C:90:00/36\tAndy-L\tAndy-L Ltd.\n40:D8:55:1C:A0:00/36\tRigelEng\tRigel Engineering\n40:D8:55:1C:B0:00/36\tMgSRL\tMG S.r.l.\n40:D8:55:1C:C0:00/36\tNktPhoto\tNKT Photonics A/S\n40:D8:55:1C:D0:00/36\tYxlonInt\tYXLON International A/S\n40:D8:55:1C:E0:00/36\tPeterHub\tPeter Huber\n40:D8:55:1C:F0:00/36\tOmnikNew\tOmnik New Energy Co., Ltd\n40:D8:55:1D:00:00/36\tWebeasyB\tWebeasy BV\n40:D8:55:1D:10:00/36\tFounderB\tFounder Broadband Network Service Co.,Ltd.\n40:D8:55:1D:20:00/36\tInventla\tInventLab s.c.\n40:D8:55:1D:30:00/36\tKalugaTe\tKaluga Teletypes Manufacturing Plant\n40:D8:55:1D:40:00/36\tPrismaEn\tPrisma Engineering srl\n40:D8:55:1D:50:00/36\tFst21\tFST21 Ltd.\n40:D8:55:1D:60:00/36\tEmsCompu\tEMS Computers Pty Ltd\n40:D8:55:1D:70:00/36\tWheatsto\tWheatstone Corporation\n40:D8:55:1D:80:00/36\tOwlCompu\tOwl Computing Technologies, Inc.\n40:D8:55:1D:90:00/36\tCommerci\tCommercial Wireless Systems International LLC.\n40:D8:55:1D:A0:00/36\tEnergyTe\tEnergy Technology and Control Ltd.\n40:D8:55:1D:B0:00/36\tNipponTe\tNippon Techno Lab.,Inc,\n40:D8:55:1D:C0:00/36\tAplexTec\tAplex Technology Inc.\n40:D8:55:1D:D0:00/36\tBaoptBen\tBaOpt Benelux bv\n40:D8:55:1D:E0:00/36\tVidisys\tVidisys GmbH\n40:D8:55:1D:F0:00/36\tChengduM\tChengdu Meihuan Technology Co.,Ltd\n40:D8:55:1E:00:00/36\tEmbedded\tEmbedded Technology Corporation\n40:D8:55:1E:10:00/36\tAdQualit\tAd Qualite\n40:D8:55:1E:20:00/36\tElnecSRO\tELNEC s.r.o.\n40:D8:55:1E:30:00/36\tMegaElec\tMega Electronics Ltd\n40:D8:55:1E:40:00/36\tStek\tSTEK Ltd\n40:D8:55:50:D0:00/36\tShenzhen\tShenzhen MaiWei Cable TV Equipment CO.,LTD.\n40:D8:55:EE:60:00/36\tNarinet\tNarinet, Inc.\n40:DC:9D\tHajen\t\n40:E2:30\tAzurewav\tAzureWave Technology Inc.\n40:E3:D6\tArubaNet\tAruba Networks\n40:E7:30\tDeyStora\tDEY Storage Systems, Inc.\n40:E7:93\tShenzhen\tShenzhen Siviton Technology Co.,Ltd\n40:EA:CE\tFounderB\tFounder Broadband Network Service Co.,Ltd\n40:EC:F8\tSiemens\tSiemens AG\n40:ED:98\tIeeeRegi\tIEEE Registration Authority\n40:ED:98:00:00:00/28\tTsinghua\tTsinghua Tongfang Co., LTD\n40:ED:98:10:00:00/28\tGuangzho\tGuangZhou FiiO Electronics Technology Co.,Ltd\n40:ED:98:20:00:00/28\tA-Iox\tA-IOX INC.\n40:ED:98:30:00:00/28\tKnox\tKnox Company\n40:ED:98:40:00:00/28\tKendrion\tKendrion Kuhnke Automation GmbH\n40:ED:98:50:00:00/28\tCape\t\n40:ED:98:60:00:00/28\tShanghai\tShanghai Broadwan Communications Co.,Ltd\n40:ED:98:70:00:00/28\tVaisalaO\tVaisala Oyj\n40:ED:98:80:00:00/28\tGuangzho\tGuangzhou Auric Intelligent Technology Co.,Ltd.\n40:ED:98:90:00:00/28\tTeratron\tTeraTron GmbH\n40:ED:98:A0:00:00/28\tIntegrat\tIntegrated Design Ltd\n40:ED:98:B0:00:00/28\tSiebertI\tSiebert Industrieelektronik GmbH\n40:ED:98:C0:00:00/28\tBloomsky\tBloomSky,Inc.\n40:ED:98:D0:00:00/28\tHangzhou\tHangzhou GANX Technology Co.,Ltd.\n40:ED:98:E0:00:00/28\tBordaTec\tBorda Technology\n40:EE:DD\tHuaweiTe\tHuawei Technologies Co.,Ltd\n40:EF:4C\tFihonest\tFihonest communication co.,Ltd\n40:F0:2F\tLiteonTe\tLiteon Technology Corporation\n40:F0:4E\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n40:F1:4C\tIseEurop\tISE Europe SPRL\n40:F2:01\tSagemcom\tSagemcom Broadband SAS\n40:F2:E9\tIbm\t\n40:F3:08\tMurataMa\tMurata Manufacturing Co., Ltd.\n40:F3:85\tIeeeRegi\tIEEE Registration Authority\n40:F3:85:00:00:00/28\tSubpac\t\n40:F3:85:10:00:00/28\tJohnsonM\tJohnson Matthey\n40:F3:85:20:00:00/28\tBeijingZ\tBeijing Zongheng Electro-Mechanical Technology Development Co.\n40:F3:85:30:00:00/28\tIntellid\tIntelliDesign Pty Ltd\n40:F3:85:40:00:00/28\tEmbedded\tEmbedded IQ\n40:F3:85:50:00:00/28\tKatoEngi\tKato Engineering Inc.\n40:F3:85:60:00:00/28\tLennoxIn\tLennox International Incorporated\n40:F3:85:70:00:00/28\tPalazzet\tPalazzetti Lelio Spa\n40:F3:85:80:00:00/28\tTeleepoc\tTeleepoch Ltd\n40:F3:85:90:00:00/28\tFastPrec\tFast Precision Technologies Co. Ltd.\n40:F3:85:A0:00:00/28\tCreanord\t\n40:F3:85:B0:00:00/28\tUrmetHom\tURMET Home & Building Solutions Pty Ltd\n40:F3:85:C0:00:00/28\tClixxoBr\tClixxo Broadband Private Limited\n40:F3:85:D0:00:00/28\tDigitalB\tDigital Bros S.p.A.\n40:F3:85:E0:00:00/28\tBbb\tBBB Inc.\n40:F4:07\tNintendo\tNintendo Co., Ltd.\n40:F4:13\tRubezh\t\n40:F4:20\tSichuanT\tSichuan Tianyi Comheart Telecomco.,Ltd\n40:F4:EC\tCisco\tCisco Systems, Inc\n40:F5:2E\tLeicaMic\tLeica Microsystems (Schweiz) AG\n40:FA:7F\tPrehCarC\tPreh Car Connect GmbH\n40:FC:89\tArrisGro\tARRIS Group, Inc.\n40:FE:0D\tMaxio\t\n44:00:10\tApple\tApple, Inc.\n44:00:49\tAmazonTe\tAmazon Technologies Inc.\n44:03:2C\tIntelCor\tIntel Corporate\n44:03:A7\tCisco\tCisco Systems, Inc\n44:04:44\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n44:07:0B\tGoogle\tGoogle, Inc.\n44:09:B8\tSalcompS\tSalcomp (Shenzhen) CO., LTD.\n44:0C:FD\tNetman\tNetMan Co., Ltd.\n44:11:02\tEdmiEuro\tEDMI  Europe Ltd\n44:11:C2\tTelegart\tTelegartner Karl Gartner GmbH\n44:13:19\tWkkTechn\tWkk Technology Ltd.\n44:14:41\tAudiocon\tAudioControl Inc.\n44:18:4F\tFitview\t\n44:19:B6\tHangzhou\tHangzhou Hikvision Digital Technology Co.,Ltd.\n44:1C:A8\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n44:1E:91\tArvidaIn\tARVIDA Intelligent Electronics Technology  Co.,Ltd.\n44:1E:98\tRuckusWi\tRuckus Wireless\n44:1E:A1\tHewlettP\tHewlett Packard\n44:22:F1\tSFac\tS.Fac, Inc\n44:23:AA\tFarmage\tFarmage Co., Ltd.\n44:25:BB\tBambooEn\tBamboo Entertainment Corporation\n44:29:38\tNietzsch\tNietZsche enterprise Co.Ltd.\n44:2A:60\tApple\tApple, Inc.\n44:2A:FF\tE3Techno\tE3 Technology, Inc.\n44:2B:03\tCisco\tCisco Systems, Inc\n44:2C:05\tAmpakTec\tAMPAK Technology, Inc.\n44:31:92\tHewlettP\tHewlett Packard\n44:32:2A\tAvaya\tAvaya Inc\n44:32:C8\tTechnico\tTechnicolor CH USA Inc.\n44:33:4C\tShenzhen\tShenzhen Bilian electronic CO.,LTD\n44:34:8F\tMxtIndus\tMxt Industrial Ltda\n44:34:A7\tArrisGro\tARRIS Group, Inc.\n44:35:6F\tNeterix\t\n44:37:08\tMrvComun\tMRV Comunications\n44:37:19\t2SaveEne\t2 Save Energy Ltd\n44:37:6F\tYoungEle\tYoung Electric Sign Co\n44:37:E6\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n44:38:39\tCumulusN\tCumulus Networks, inc\n44:39:C4\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\n44:3C:9C\tPintschT\tPintsch Tiefenbach GmbH\n44:3D:21\tNuvolt\t\n44:3E:B2\tDeotron\tDEOTRON Co., LTD.\n44:44:50\tOttoq\t\n44:45:53\tMicrosoft\t\n44:46:49\tDfiDiamo\tDFI (Diamond Flower Industries)\n44:47:CC\tHangzhou\tHangzhou Hikvision Digital Technology Co.,Ltd.\n44:48:91\tHdmiLice\tHDMI Licensing, LLC\n44:48:C1\tHewlettP\tHewlett Packard Enterprise\n44:4A:65\tSilverfl\tSilverflare Ltd.\n44:4A:B0\tZhejiang\tZhejiang Moorgen Intelligence Technology Co., Ltd\n44:4B:5D\tGeHealth\tGE Healthcare\n44:4C:0C\tApple\tApple, Inc.\n44:4C:A8\tAristaNe\tArista Networks\n44:4E:1A\tSamsungE\tSamsung Electronics Co.,Ltd\n44:4E:6D\tAvmAudio\tAVM Audiovisuelles Marketing und Computersysteme GmbH\n44:4F:5E\tPanStudi\tPan Studios Co.,Ltd.\n44:51:DB\tRaytheon\tRaytheon BBN Technologies\n44:54:C0\tThompson\tThompson Aerospace\n44:55:B1\tHuaweiTe\tHuawei Technologies Co.,Ltd\n44:56:8D\tPncTechn\tPNC Technologies  Co., Ltd.\n44:56:B7\tSpawnLab\tSpawn Labs, Inc\n44:58:29\tCiscoSpv\tCisco SPVTG\n44:59:9F\tCriticar\tCriticare Systems, Inc\n44:5E:CD\tRazer\tRazer Inc\n44:5E:F3\tTonalite\tTonalite Holding B.V.\n44:5F:7A\tShihlinE\tShihlin Electric & Engineering Corp.\n44:5F:8C\tIntercel\tIntercel Group Limited\n44:61:32\tEcobee\tecobee inc\n44:61:9C\tFonsyste\tFONsystem co. ltd.\n44:62:46\tComat\tComat AG\n44:65:0D\tAmazonTe\tAmazon Technologies Inc.\n44:65:6A\tMegaVide\tMega Video Electronic(HK) Industry Co., Ltd\n44:65:7F\tCalix\tCalix Inc.\n44:66:6E\tIp-Line\t\n44:66:FC\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n44:67:55\tOrbitIrr\tOrbit Irrigation\n44:68:AB\tJuin\tJuin Company, Limited\n44:6A:2E\tHuaweiTe\tHuawei Technologies Co.,Ltd\n44:6A:B7\tArrisGro\tARRIS Group, Inc.\n44:6C:24\tReallinE\tReallin Electronic Co.,Ltd\n44:6D:57\tLiteonTe\tLiteon Technology Corporation\n44:6D:6C\tSamsungE\tSamsung Electronics Co.,Ltd\n44:6E:E5\tHuaweiTe\tHuawei Technologies Co.,Ltd\n44:70:0B\tIffu\t\n44:70:98\tMingHong\tMING HONG TECHNOLOGY (SHEN ZHEN) LIMITED\n44:73:D6\tLogitech\t\n44:74:6C\tSonyMobi\tSony Mobile Communications Inc\n44:78:3E\tSamsungE\tSamsung Electronics Co.,Ltd\n44:7B:BB\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\n44:7B:C4\tDualshin\tDualShine Technology(SZ)Co.,Ltd\n44:7C:7F\tInnoligh\tInnolight Technology Corporation\n44:7D:A5\tVtionInf\tVTION INFORMATION TECHNOLOGY (FUJIAN) CO.,LTD\n44:7E:76\tTrekTech\tTrek Technology (S) Pte Ltd\n44:7E:95\tAlphaAnd\tAlpha and Omega, Inc\n44:7F:77\tConnecte\tConnected Home\n44:80:EB\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n44:82:E5\tHuaweiTe\tHuawei Technologies Co.,Ltd\n44:83:12\tStar-Net\t\n44:85:00\tIntelCor\tIntel Corporate\n44:86:C1\tSiemensL\tSiemens Low Voltage & Products\n44:87:23\tHoyaServ\tHoya Service Corporation\n44:87:FC\tElitegro\tElitegroup Computer Systems Co.,Ltd.\n44:88:CB\tCamcoTec\tCamco Technologies NV\n44:8A:5B\tMicro-St\tMicro-Star INT'L CO., LTD.\n44:8C:52\tKtis\tKTIS CO., Ltd\n44:8E:12\tDtResear\tDT Research, Inc.\n44:8E:81\tVig\t\n44:8F:17\tSamsungE\tSamsung Electronics Co., Ltd. ARTIK\n44:91:60\tMurataMa\tMurata Manufacturing Co., Ltd.\n44:91:DB\tShanghai\tShanghai Huaqin Telecom Technology Co.,Ltd\n44:94:FC\tNetgear\t\n44:95:FA\tQingdaoS\tQingdao Santong Digital Technology Co.Ltd\n44:96:2B\tAidonOy\tAidon Oy\n44:97:5A\tShenzhen\tShenzhen Fast Technologies Co.,Ltd\n44:9B:78\tNowFacto\tThe Now Factory\n44:9C:B5\tAlcomp\tAlcomp, Inc\n44:9E:F9\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n44:9F:7F\tDatacore\tDataCore Software Corporation\n44:A4:2D\tTctMobil\tTCT mobile ltd\n44:A4:66\tGroupeLd\tGroupe Ldlc\n44:A6:89\tPromaxEl\tPromax Electronica Sa\n44:A6:E5\tThinking\tThinking Technology Co.,Ltd\n44:A7:CF\tMurataMa\tMurata Manufacturing Co., Ltd.\n44:A8:42\tDell\tDell Inc.\n44:A8:C2\tSewooTec\tSewoo Tech Co., Ltd\n44:AA:27\tUdworks\tudworks Co., Ltd.\n44:AA:50\tJuniperN\tJuniper Networks\n44:AA:E8\tNanotecE\tNanotec Electronic GmbH & Co. KG\n44:AA:F5\tArrisGro\tARRIS Group, Inc.\n44:AD:19\tXingfei（\tXINGFEI （H.K）LIMITED\n44:AD:D9\tCisco\tCisco Systems, Inc\n44:B3:2D\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n44:B3:82\tKuang-Ch\tKuang-chi Institute of Advanced Technology\n44:B4:12\tSius\tSius Ag\n44:BA:46\tSichuanT\tSichuan Tianyi Comheart Telecomco.,Ltd\n44:BF:E3\tShenzhen\tShenzhen Longtech Electronics Co.,Ltd\n44:C1:5C\tTexasIns\tTexas Instruments\n44:C2:33\tGuangzho\tGuangzhou Comet Technology Development Co.Ltd\n44:C3:06\tSifrom\tSIFROM Inc.\n44:C3:46\tHuaweiTe\tHuawei Technologies Co.,Ltd\n44:C3:9B\tOooRubez\tOoo Rubezh Npo\n44:C4:A9\tOpticomC\tOpticom Communication, LLC\n44:C5:6F\tNgnEasyS\tNGN Easy Satfinder (Tianjin) Electronic Co., Ltd\n44:C6:9B\tWuhanFen\tWuhan Feng Tian Information Network CO.,LTD\n44:C8:74\tChinaMob\tChina Mobile Group Device Co.,Ltd.\n44:C9:A2\tGreenwal\tGreenwald Industries\n44:CD:0E\tFlextron\tFLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.\n44:CE:7D\tSfr\t\n44:D1:5E\tShanghai\tShanghai Kingto Information Technology Ltd\n44:D1:FA\tShenzhen\tShenzhen Yunlink Technology Co., Ltd\n44:D2:44\tSeikoEps\tSeiko Epson Corporation\n44:D2:CA\tAnviaTvO\tAnvia TV Oy\n44:D3:CA\tCisco\tCisco Systems, Inc\n44:D4:37\tIntenoBr\tInteno Broadband Technology AB\n44:D4:E0\tSonyMobi\tSony Mobile Communications Inc\n44:D5:A5\tAddonCom\tAddOn Computer\n44:D6:3D\tTalariNe\tTalari Networks\n44:D6:E1\tSnuzaInt\tSnuza International Pty. Ltd.\n44:D8:32\tAzurewav\tAzureWave Technology Inc.\n44:D8:84\tApple\tApple, Inc.\n44:D9:E7\tUbiquiti\tUbiquiti Networks Inc.\n44:DC:91\tPlanexCo\tPlanex Communications Inc.\n44:DC:CB\tSemindia\tSemindia Systems Pvt Ltd\n44:E0:8E\tCiscoSpv\tCisco SPVTG\n44:E1:37\tArrisGro\tARRIS Group, Inc.\n44:E4:9A\tOmnitron\tOmnitronics Pty Ltd\n44:E4:D9\tCisco\tCisco Systems, Inc\n44:E4:EE\tWistronN\tWistron Neweb Corporation\n44:E8:A5\tMyrekaTe\tMyreka Technologies Sdn. Bhd.\n44:E9:DD\tSagemcom\tSagemcom Broadband SAS\n44:EA:4B\tActlas\tActlas Inc.\n44:EA:D8\tTexasIns\tTexas Instruments\n44:ED:57\tLongicor\tLongicorn, inc.\n44:EE:02\tMti\tMTI Ltd.\n44:EE:30\tBudelman\tBudelmann Elektronik GmbH\n44:EF:CF\tUgeneSol\tUGENE SOLUTION inc.\n44:F0:34\tKaonmedi\tKaonmedia CO., LTD.\n44:F4:36\tZte\tzte corporation\n44:F4:59\tSamsungE\tSamsung Electronics Co.,Ltd\n44:F4:77\tJuniperN\tJuniper Networks\n44:F8:49\tUnionPac\tUnion Pacific Railroad\n44:FB:42\tApple\tApple, Inc.\n44:FD:A3\tEverysig\tEverysight LTD.\n44:FF:BA\tZte\tzte corporation\n47:54:43\tGtcNotRe\tGTC (Not registered!)\n48:00:31\tHuaweiTe\tHuawei Technologies Co.,Ltd\n48:00:33\tTechnico\tTechnicolor CH USA Inc.\n48:02:2A\tB-LinkEl\tB-Link Electronic Limited\n48:03:62\tDesayEle\tDESAY ELECTRONICS(HUIZHOU)CO.,LTD\n48:06:6A\tTempered\tTempered Networks, Inc.\n48:0B:B2\tIeeeRegi\tIEEE Registration Authority\n48:0B:B2:00:00:00/28\tRidangoA\tRidango AS\n48:0B:B2:10:00:00/28\tBajaElec\tBaja Electronics Technology Limited\n48:0B:B2:20:00:00/28\tThalesCe\tThales CETCA Avionics CO., Ltd\n48:0B:B2:30:00:00/28\tShanghai\tshanghai Rinlink  Intelligent Technology Co., Ltd.\n48:0B:B2:40:00:00/28\tHangzhou\tHangzhou Freely Communication Co., Ltd.\n48:0B:B2:50:00:00/28\tSolaredg\tSolaredge LTD.\n48:0B:B2:60:00:00/28\tAnnapurn\tannapurnalabs\n48:0B:B2:70:00:00/28\tBeijingD\tBeijing Dragon Resources Limited.\n48:0B:B2:80:00:00/28\tBravocom\tBravoCom（xiamen）TechCo.Ltd\n48:0B:B2:90:00:00/28\tMicropro\tMicroprogram Information Co., Ltd\n48:0B:B2:A0:00:00/28\tXiamenRo\tXiamen Rongta Technology Co.,Ltd.\n48:0B:B2:B0:00:00/28\tPopitOy\tPopit Oy\n48:0B:B2:C0:00:00/28\tShenzhen\tShenzhen Topwell Technology Co..Ltd\n48:0B:B2:D0:00:00/28\tM2lab\tM2Lab Ltd.\n48:0B:B2:E0:00:00/28\tBeijingM\tBeijing MFOX technology Co., Ltd.\n48:0C:49\tNakayo\tNAKAYO Inc\n48:0E:EC\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n48:0F:CF\tHewlettP\tHewlett Packard\n48:10:63\tNttInnov\tNTT Innovation Institute, Inc.\n48:12:49\tLuxcomTe\tLuxcom Technologies Inc.\n48:13:7E\tSamsungE\tSamsung Electronics Co.,Ltd\n48:13:F3\tBbkEduca\tBbk Educational Electronics Corp.,Ltd.\n48:17:4C\tMicropow\tMicroPower technologies\n48:18:42\tShanghai\tShanghai Winaas Co. Equipment Co. Ltd.\n48:18:FA\tNocsys\t\n48:1A:84\tPointerT\tPointer Telocation Ltd\n48:1B:D2\tIntronSc\tIntron Scientific co., ltd.\n48:1D:70\tCiscoSpv\tCisco SPVTG\n48:26:E8\tTek-Air\tTek-Air Systems, Inc.\n48:27:EA\tSamsungE\tSamsung Electronics Co.,Ltd\n48:28:2F\tZte\tzte corporation\n48:2A:E3\tWistronI\tWistron InfoComm(Kunshan)Co.,Ltd.\n48:2C:A0\tXiaomiCo\tXiaomi Communications Co Ltd\n48:2C:EA\tMotorola\tMotorola Inc Business Light Radios\n48:33:DD\tZennioAv\tZennio Avance Y Tecnologia, S.L.\n48:34:3D\tIep\tIEP GmbH\n48:36:5F\tWintecro\tWintecronics Ltd.\n48:39:74\tProwareT\tProware Technologies Co., Ltd.\n48:3B:38\tApple\tApple, Inc.\n48:3C:0C\tHuaweiTe\tHuawei Technologies Co.,Ltd\n48:3D:32\tSyscorCo\tSyscor Controls &amp; Automation\n48:43:5A\tHuaweiTe\tHuawei Technologies Co.,Ltd\n48:43:7C\tApple\tApple, Inc.\n48:44:53\tHds???\t\n48:44:87\tCiscoSpv\tCisco SPVTG\n48:44:F7\tSamsungE\tSamsung Electronics Co.,Ltd\n48:45:20\tIntelCor\tIntel Corporate\n48:46:F1\tUrosOy\tUros Oy\n48:46:FB\tHuaweiTe\tHuawei Technologies Co.,Ltd\n48:49:C7\tSamsungE\tSamsung Electronics Co.,Ltd\n48:4A:E9\tHewlettP\tHewlett Packard Enterprise\n48:4B:AA\tApple\tApple, Inc.\n48:4C:00\tNetworkS\tNetwork Solutions\n48:4D:7E\tDell\tDell Inc.\n48:50:73\tMicrosof\tMicrosoft Corporation\n48:51:B7\tIntelCor\tIntel Corporate\n48:52:61\tSoreel\t\n48:54:15\tNetRules\tNet Rules Tecnologia Eireli\n48:54:E8\tWinbond?\t\n48:55:5C\tWuQiTech\tWu Qi Technologies,Inc.\n48:55:5F\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n48:57:02\tHuaweiTe\tHuawei Technologies Co.,Ltd\n48:57:DD\tFacebook\tFacebook Inc\n48:59:29\tLgElectr\tLG Electronics (Mobile Communications)\n48:59:A4\tZte\tzte corporation\n48:5A:3F\tWisol\t\n48:5A:B6\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n48:5B:39\tAsustekC\tASUSTek COMPUTER INC.\n48:5D:36\tVerizon\t\n48:5D:60\tAzurewav\tAzureWave Technology Inc.\n48:5F:99\tCloudNet\tCloud Network Technology (Samoa) Limited\n48:60:5F\tLgElectr\tLG Electronics (Mobile Communications)\n48:60:BC\tApple\tApple, Inc.\n48:61:A3\tConcernA\tConcern Axion JSC\n48:62:76\tHuaweiTe\tHuawei Technologies Co.,Ltd\n48:65:EE\tIeeeRegi\tIEEE Registration Authority\n48:65:EE:00:00:00/28\tDefpower\tDefPower Ltd\n48:65:EE:10:00:00/28\tGopodGro\tGopod Group Limited\n48:65:EE:20:00:00/28\tCaptionc\tCaptionCall\n48:65:EE:30:00:00/28\tDataTech\tData Technology Inc.\n48:65:EE:40:00:00/28\tMissionM\tMission Microwave Technologies, Inc\n48:65:EE:50:00:00/28\tSwistec\tSwistec Systems AG\n48:65:EE:60:00:00/28\tShenzhen\tshenzhen sunflower technologies CO., LIMITED\n48:65:EE:70:00:00/28\tVentureR\tVenture Research Inc.\n48:65:EE:80:00:00/28\tSmartdis\tSmartDisplayer Technology Co., Ltd.\n48:65:EE:90:00:00/28\tVideosti\tVideoStitch, Inc\n48:65:EE:A0:00:00/28\tShenzhen\tShenzhen Inpor cloud Computing Co., Ltd.\n48:65:EE:B0:00:00/28\tEnbwEner\tEnBW Energie Baden-Württemberg AG\n48:65:EE:C0:00:00/28\tDnvGl\tDnv Gl\n48:65:EE:D0:00:00/28\tWinnTech\tWinn Technology Co.,Ltd\n48:65:EE:E0:00:00/28\tCnu\t\n48:68:34\tSiliconM\tSilicon Motion, Inc.\n48:6B:2C\tBbkEduca\tBbk Educational Electronics Corp.,Ltd.\n48:6B:91\tFleetwoo\tFleetwood Group Inc.\n48:6D:BB\tVestelEl\tVestel Elektronik San ve Tic. A.Ş.\n48:6E:73\tPica8\tPica8, Inc.\n48:6E:FB\tDavitSys\tDavit System Technology Co., Ltd.\n48:6F:D2\tStorsimp\tStorSimple Inc\n48:71:19\tSgbGroup\tSgb Group Ltd.\n48:74:6E\tApple\tApple, Inc.\n48:75:83\tIntellio\tIntellion AG\n48:76:04\tPrivate\t\n48:7A:55\tAleInter\tALE International\n48:7A:DA\tHangzhou\tHangzhou H3C Technologies Co., Limited\n48:7B:6B\tHuaweiTe\tHuawei Technologies Co.,Ltd\n48:7D:2E\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n48:82:44\tLifeFitn\tLife Fitness / Div. of Brunswick\n48:82:F2\tAppelEle\tAppel Elektronik GmbH\n48:83:C7\tSagemcom\tSagemcom Broadband SAS\n48:86:E8\tMicrosof\tMicrosoft Corporation\n48:87:2D\tShenZhen\tShen Zhen Da Xia Long Que Technology Co.,Ltd\n48:88:03\tMantechn\tManTechnology Inc.\n48:88:1E\tEthoswit\tEthoSwitch LLC\n48:88:CA\tMotorola\tMotorola (Wuhan) Mobility Technologies Communication Co., Ltd.\n48:8A:D2\tMercuryC\tMercury Communication Technologies Co.,Ltd.\n48:8D:36\tArcadyan\tArcadyan Corporation\n48:8E:42\tDigalog\tDIGALOG GmbH\n48:8E:EF\tHuaweiTe\tHuawei Technologies Co.,Ltd\n48:91:53\tWeinmann\tWeinmann Geräte für Medizin GmbH + Co. KG\n48:91:F6\tShenzhen\tShenzhen Reach software technology CO.,LTD\n48:98:CA\tSichuanA\tSichuan AI-Link Technology Co., Ltd.\n48:9A:42\tTechnoma\tTechnomate Ltd\n48:9B:E2\tSciInnov\tSCI Innovations Ltd\n48:9D:18\tFlashbay\tFlashbay Limited\n48:9D:24\tBlackber\tBlackBerry RTS\n48:A0:F8\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n48:A1:95\tApple\tApple, Inc.\n48:A2:2D\tShenzhen\tShenzhen Huaxuchang Telecom Technology Co.,Ltd\n48:A2:B7\tKodofonJ\tKodofon JSC\n48:A3:80\tGioneeCo\tGionee Communication Equipment Co.,Ltd.\n48:A4:72\tIntelCor\tIntel Corporate\n48:A6:B8\tSonos\tSonos, Inc.\n48:A6:D2\tGjsunOpt\tGJsun Optical Science and Tech Co.,Ltd.\n48:A7:4E\tZte\tzte corporation\n48:A9:1C\tApple\tApple, Inc.\n48:A9:D2\tWistronN\tWistron Neweb Corporation\n48:AA:5D\tStoreEle\tStore Electronic Systems\n48:AD:08\tHuaweiTe\tHuawei Technologies Co.,Ltd\n48:B2:53\tMarketax\tMarketaxess Corporation\n48:B5:A7\tGloryHor\tGlory Horse Industries Ltd.\n48:B6:20\tRoli\tROLI Ltd.\n48:B8:DE\tHomewins\tHomewins Technology Co.,Ltd.\n48:B9:77\tPulseonO\tPulseOn Oy\n48:B9:C2\tTeletics\tTeletics Inc.\n48:BA:4E\tHewlettP\tHewlett Packard\n48:BC:A6\t​AsungTe\t​ASUNG TECHNO CO.,Ltd\n48:BD:3D\tNewH3cTe\tNew H3C Technologies Co., Ltd\n48:BE:2D\tSymanitr\tSymanitron\n48:BF:6B\tApple\tApple, Inc.\n48:BF:74\tBaicells\tBaicells Technologies Co.,LTD\n48:C0:49\tBroadTel\tBroad Telecom SA\n48:C0:93\tXirrus\tXirrus, Inc.\n48:C1:AC\tPlantron\tPlantronics, Inc.\n48:C5:8D\tLear\tLear Corporation GmbH\n48:C6:63\tGtoAcces\tGTO Access Systems LLC\n48:C7:96\tSamsungE\tSamsung Electronics Co.,Ltd\n48:C8:62\tSimoWire\tSimo Wireless,Inc.\n48:C8:B6\tSystec\tSysTec GmbH\n48:CB:6E\tCelloEle\tCello Electronics (UK) Ltd\n48:D0:CF\tUniversa\tUniversal Electronics, Inc.\n48:D1:8E\tMetisCom\tMetis Communication Co.,Ltd\n48:D2:24\tLiteonTe\tLiteon Technology Corporation\n48:D3:43\tArrisGro\tARRIS Group, Inc.\n48:D3:5D\tPrivate\t\n48:D5:39\tHuaweiTe\tHuawei Technologies Co.,Ltd\n48:D5:4C\tJedaNetw\tJeda Networks\n48:D6:D5\tGoogle\tGoogle, Inc.\n48:D7:05\tApple\tApple, Inc.\n48:D7:FF\tBlankomA\tBLANKOM Antennentechnik GmbH\n48:D8:55\tTelvent\t\n48:D8:FE\tClaridyS\tClarIDy Solutions, Inc.\n48:DA:96\tEddySmar\tEddy Smart Home Solutions Inc.\n48:DB:50\tHuaweiTe\tHuawei Technologies Co.,Ltd\n48:DC:FB\tNokia\tNokia Corporation\n48:DD:9D\tItelMobi\tItel Mobile Limited\n48:DF:1C\tWuhanNec\tWuhan NEC Fibre Optic Communications industry Co. Ltd\n48:DF:37\tHewlettP\tHewlett Packard Enterprise\n48:E1:AF\tVity\t\n48:E2:44\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n48:E9:F1\tApple\tApple, Inc.\n48:EA:63\tZhejiang\tZhejiang Uniview Technologies Co., Ltd.\n48:EB:30\tEternaTe\tEterna Technology, Inc.\n48:EC:5B\tNokia\t\n48:ED:80\tDaesungE\tdaesung eltec\n48:EE:07\tSilverPa\tSilver Palm Technologies LLC\n48:EE:0C\tD-LinkIn\tD-Link International\n48:EE:86\tUtstarco\tUTStarcom (China) Co.,Ltd\n48:F0:27\tChengduN\tChengdu newifi Co.,Ltd\n48:F0:7B\tAlpsElec\tAlps Electric Co.,Ltd.\n48:F2:30\tUbizcore\tUbizcore Co.,LTD\n48:F3:17\tPrivate\t\n48:F4:7D\tTechvisi\tTechVision Holding  Internation Limited\n48:F7:C0\tTechnico\tTechnicolor CH USA Inc.\n48:F7:F1\tNokia\t\n48:F8:B3\tCisco-Li\tCisco-Linksys, LLC\n48:F8:E1\tNokia\t\n48:F9:25\tMaestron\tMaestronic\n48:F9:7C\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n48:FC:B6\tLavaInte\tLAVA INTERNATIONAL(H.K) LIMITED\n48:FC:B8\tWoodstre\tWoodstream Corporation\n48:FD:8E\tHuaweiTe\tHuawei Technologies Co.,Ltd\n48:FE:EA\tHomaBV\tHoma B.V.\n4A:07:D6\tIeee8021\tIEEE 802.1 Working Group\n4A:19:1B\tZigbeeAl\tZigBee Alliance\n4A:5A:6F\tAppliedM\tApplied Materials\n4A:72:06\tCaire\tCAIRE, Inc.\n4A:DA:10\tEmotivaA\tEmotiva Audio Corp\n4C:00:82\tCisco\tCisco Systems, Inc\n4C:01:43\tEero\teero inc.\n4C:02:2E\tCmrKorea\tCmr Korea Co., Ltd\n4C:02:89\tLexCompu\tLex Computech Co., Ltd\n4C:06:8A\tBaslerEl\tBasler Electric Company\n4C:07:C9\tComputer\tCOMPUTER OFFICE Co.,Ltd.\n4C:09:B4\tZte\tzte corporation\n4C:09:D4\tArcadyan\tArcadyan Technology Corporation\n4C:0B:3A\tTctMobil\tTCT mobile ltd\n4C:0B:BE\tMicrosof\tMicrosoft\n4C:0D:EE\tJabilCir\tJABIL CIRCUIT (SHANGHAI) LTD.\n4C:0F:6E\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n4C:0F:C7\tEardaTec\tEarda Technologies co Ltd\n4C:11:59\tVisionIn\tVision Information & Communications\n4C:11:BF\tZhejiang\tZhejiang Dahua Technology Co., Ltd.\n4C:12:65\tArrisGro\tARRIS Group, Inc.\n4C:13:65\tEmplusTe\tEmplus Technologies\n4C:14:80\tNoregon\tNoregon Systems, Inc\n4C:14:A3\tTclTechn\tTCL Technoly Electronics (Huizhou) Co., Ltd.\n4C:16:94\tShenzhen\tshenzhen sibituo Technology Co., Ltd\n4C:16:F1\tZte\tzte corporation\n4C:16:FC\tJuniperN\tJuniper Networks\n4C:17:EB\tSagemcom\tSagemcom Broadband SAS\n4C:18:9A\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n4C:1A:3A\tPrimaRes\tPRIMA Research And Production Enterprise Ltd.\n4C:1A:3D\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n4C:1A:95\tNovakon\tNovakon Co., Ltd.\n4C:1B:86\tArcadyan\tArcadyan Corporation\n4C:1F:CC\tHuaweiTe\tHuawei Technologies Co.,Ltd\n4C:21:D0\tSonyMobi\tSony Mobile Communications Inc\n4C:22:58\tCozybit\tcozybit, Inc.\n4C:25:78\tNokia\tNokia Corporation\n4C:26:E7\tWelgate\tWelgate Co., Ltd.\n4C:2C:80\tBeijingS\tBeijing Skyway Technologies Co.,Ltd\n4C:2C:83\tZhejiang\tZhejiang KaNong Network Technology Co.,Ltd.\n4C:2F:9D\tIcmContr\tICM Controls\n4C:30:89\tThalesTr\tThales Transportation Systems GmbH\n4C:32:2D\tTeledata\tTeledata Networks\n4C:32:75\tApple\tApple, Inc.\n4C:32:D9\tMRuttyHo\tM Rutty Holdings Pty. Ltd.\n4C:33:4E\tHightech\t\n4C:34:88\tIntelCor\tIntel Corporate\n4C:36:4E\tPanasoni\tPanasonic Corporation  Connected Solutions Company\n4C:38:D5\tMitacCom\tMitac Computing Technology Corporation\n4C:38:D8\tArrisGro\tARRIS Group, Inc.\n4C:39:09\tHplElect\tHPL Electric & Power Private Limited\n4C:39:10\tNewtekEl\tNewtek Electronics co., Ltd.\n4C:3B:74\tVogtecHK\tVOGTEC(H.K.) Co., Ltd\n4C:3C:16\tSamsungE\tSamsung Electronics Co.,Ltd\n4C:3F:D3\tTexasIns\tTexas Instruments\n4C:42:4C\tInformat\tInformation Modes software modified addresses (not registered?)\n4C:48:DA\tBeijingA\tBeijing Autelan Technology Co.,Ltd\n4C:49:E3\tXiaomiCo\tXiaomi Communications Co Ltd\n4C:4B:68\tMobileDe\tMobile Device, Inc.\n4C:4E:03\tTctMobil\tTCT mobile ltd\n4C:4E:35\tCisco\tCisco Systems, Inc\n4C:52:62\tFujitsuT\tFujitsu Technology Solutions GmbH\n4C:54:27\tLineproS\tLinepro Sp. z o.o.\n4C:54:99\tHuaweiTe\tHuawei Technologies Co.,Ltd\n4C:55:85\tHamilton\tHamilton Systems\n4C:55:B8\tTurkcell\tTurkcell Teknoloji\n4C:55:CC\tZentriPt\tZentri Pty Ltd\n4C:56:9D\tApple\tApple, Inc.\n4C:57:CA\tApple\tApple, Inc.\n4C:5D:CD\tOyFinnis\tOy Finnish Electric Vehicle Technologies Ltd\n4C:5E:0C\tRouterbo\tRouterboard.com\n4C:5F:D2\tAlcatel-\tAlcatel-Lucent\n4C:60:D5\tAirpoint\tairPointe of New Hampshire\n4C:60:DE\tNetgear\t\n4C:62:55\tSanmina-\tSANMINA-SCI SYSTEM DE MEXICO S.A. DE C.V.\n4C:63:EB\tApplicat\tApplication Solutions (Electronics and Vision) Ltd\n4C:64:D9\tGuangdon\tGuangdong Leawin Group Co., Ltd\n4C:65:A8\tIeeeRegi\tIEEE Registration Authority\n4C:65:A8:00:00:00/28\tWelt\tWELT Corporation\n4C:65:A8:10:00:00/28\tBeijingB\tBeijing Bluehalo Internet Inc.\n4C:65:A8:20:00:00/28\tOricaEur\tOrica Europe Pty Ltd & Co KG\n4C:65:A8:30:00:00/28\tRoost\t\n4C:65:A8:40:00:00/28\tPlusOneJ\tPlus One Japan Limited\n4C:65:A8:50:00:00/28\tTel-Elec\tTEL-Electronics Ltd\n4C:65:A8:60:00:00/28\tNuvizOy\tNuviz Oy\n4C:65:A8:70:00:00/28\tWuhanMor\tWuhan MoreQuick Network Technology Co., Ltd.\n4C:65:A8:80:00:00/28\tInstantB\tInstant Byte, S.L.\n4C:65:A8:90:00:00/28\tShenzhen\tShenzhen Lisaier Tronics Co.,Ltd\n4C:65:A8:A0:00:00/28\tSuzhouEm\tSuzhou Embedded Electronic Technology Co., Ltd.\n4C:65:A8:B0:00:00/28\tZminTech\tZMIN Technologies\n4C:65:A8:C0:00:00/28\tFuse\t\n4C:65:A8:D0:00:00/28\tQingping\tQingping Technology (Beijing) Co., Ltd.\n4C:65:A8:E0:00:00/28\tHighInfi\tHigh Infinity Germany\n4C:66:41\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\n4C:6E:6E\tComnectT\tComnect Technology CO.,LTD\n4C:72:B9\tPegatron\tPegatron Corporation\n4C:73:67\tGeniusBy\tGenius Bytes Software Solutions GmbH\n4C:73:A5\tKove\t\n4C:74:03\tBq\t\n4C:74:87\tLeaderPh\tLeader Phone Communication Technology Co., Ltd.\n4C:74:BF\tApple\tApple, Inc.\n4C:76:25\tDell\tDell Inc.\n4C:77:4F\tEmbedded\tEmbedded Wireless Labs\n4C:77:6D\tCisco\tCisco Systems, Inc\n4C:78:72\tCavUffGi\tCav. Uff. Giacomo Cimberio S.p.A.\n4C:78:97\tArrowhea\tArrowhead Alarm Products Ltd\n4C:79:BA\tIntelCor\tIntel Corporate\n4C:7C:5F\tApple\tApple, Inc.\n4C:7F:62\tNokia\tNokia Corporation\n4C:80:4F\tArmstron\tArmstrong Monitoring Corp\n4C:80:93\tIntelCor\tIntel Corporate\n4C:81:20\tTaicangT\tTaicang T&W Electronics\n4C:82:CF\tDishTech\tDish Technologies Corp\n4C:83:DE\tCiscoSpv\tCisco SPVTG\n4C:8B:30\tActionte\tActiontec Electronics, Inc\n4C:8B:55\tGrupoDig\tGrupo Digicon\n4C:8B:EF\tHuaweiTe\tHuawei Technologies Co.,Ltd\n4C:8D:79\tApple\tApple, Inc.\n4C:8E:CC\tSilkanSa\tSilkan Sa\n4C:8F:A5\tJastec\t\n4C:91:0C\tLanixInt\tLanix Internacional, S.A. de C.V.\n4C:96:14\tJuniperN\tJuniper Networks\n4C:98:EF\tZeo\t\n4C:9E:80\tKyokkoEl\tKYOKKO ELECTRIC Co., Ltd.\n4C:9E:E4\tHanyangN\tHanyang Navicom Co.,Ltd.\n4C:9E:FF\tZyxelCom\tZyxel Communications Corporation\n4C:A0:03\tT-21Tech\tT-21 Technologies LLC\n4C:A1:61\tRainBird\tRain Bird Corporation\n4C:A5:15\tBaikalEl\tBaikal Electronics JSC\n4C:A5:6D\tSamsungE\tSamsung Electronics Co.,Ltd\n4C:A7:4B\tAlcatelL\tAlcatel Lucent\n4C:A9:28\tInsensi\t\n4C:AA:16\tAzurewav\tAzureWave Technologies (Shanghai) Inc.\n4C:AB:33\tKstTechn\tKST technology\n4C:AB:FC\tZte\tzte corporation\n4C:AC:0A\tZte\tzte corporation\n4C:AE:1C\tSainxtTe\tSaiNXT Technologies LLP\n4C:AE:31\tShenghai\tShengHai Electronics (Shenzhen) Ltd\n4C:B0:08\tShenzhen\tShenzhen Gwelltimes Technology Co.,Ltd\n4C:B0:E8\tBeijingR\tBeijing RongZhi xinghua technology co., LTD\n4C:B1:6C\tHuaweiTe\tHuawei Technologies Co.,Ltd\n4C:B1:99\tApple\tApple, Inc.\n4C:B2:1C\tMaxphoto\tMaxphotonics Co.,Ltd\n4C:B4:4A\tNanowave\tNANOWAVE Technologies Inc.\n4C:B4:EA\tHrdSPte\tHRD (S) PTE., LTD.\n4C:B7:6D\tNoviSecu\tNovi Security\n4C:B8:1C\tSamElect\tSAM Electronics GmbH\n4C:B8:2C\tCambridg\tCambridge Mobile Telematics, Inc.\n4C:B8:B5\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\n4C:B9:C8\tConet\tConet Co., Ltd.\n4C:BA:A3\tBisonEle\tBison Electronics Inc.\n4C:BB:58\tChiconyE\tChicony Electronics Co., Ltd.\n4C:BC:42\tShenzhen\tShenzhen Hangsheng Electronics Co.,Ltd.\n4C:BC:A5\tSamsungE\tSamsung Electronics Co.,Ltd\n4C:BD:8F\tHangzhou\tHangzhou Hikvision Digital Technology Co.,Ltd.\n4C:C0:0A\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n4C:C2:06\tSomfy\t\n4C:C4:52\tShangHai\tShang Hai Tyd. Electon Technology Ltd.\n4C:C6:02\tRadios\tRadios, Inc.\n4C:C6:81\tShenzhen\tShenzhen Aisat Electronic Co., Ltd.\n4C:C9:4F\tNokia\t\n4C:CA:53\tSkyera\tSkyera, Inc.\n4C:CB:F5\tZte\tzte corporation\n4C:CC:34\tMotorola\tMotorola Solutions Inc.\n4C:CC:6A\tMicro-St\tMicro-Star INTL CO., LTD.\n4C:D0:8A\tHumax\tHUMAX Co., Ltd.\n4C:D0:CB\tHuaweiTe\tHuawei Technologies Co.,Ltd\n4C:D1:A1\tHuaweiTe\tHuawei Technologies Co.,Ltd\n4C:D6:37\tQsonoEle\tQsono Electronics Co., Ltd\n4C:D7:B6\tHelmerSc\tHelmer Scientific\n4C:D9:8F\tDell\tDell Inc.\n4C:D9:C4\tMagnetiM\tMagneti Marelli Automotive Electronics (Guangzhou) Co. Ltd\n4C:DD:31\tSamsungE\tSamsung Electronics Co.,Ltd\n4C:DF:3D\tTeamEngi\tTeam Engineers Advance Technologies India Pvt Ltd\n4C:E1:73\tIeeeRegi\tIEEE Registration Authority\n4C:E1:73:00:00:00/28\tBeijingS\tBeijing Sutongwang E-Business Co., Ltd\n4C:E1:73:10:00:00/28\tNexoforg\tNexoforge Inc.\n4C:E1:73:20:00:00/28\tLenovoDa\tLenovo Data Center Group\n4C:E1:73:30:00:00/28\tOutpacei\toutpaceIO\n4C:E1:73:40:00:00/28\tHuizhouD\tHuizhou Dehong Technology Co., Ltd.\n4C:E1:73:50:00:00/28\tNewvaste\tNewVastek\n4C:E1:73:60:00:00/28\tDaikokuD\tDaikoku Denki Co.,Ltd.\n4C:E1:73:70:00:00/28\tErsúles\tErsúles Limited\n4C:E1:73:80:00:00/28\tNanjingT\tNanjing Tongke Technology Development Co., LTD\n4C:E1:73:90:00:00/28\tShenzhen\tShenzhen Evolution Dynamics Co., Ltd.\n4C:E1:73:A0:00:00/28\tJvi\t\n4C:E1:73:B0:00:00/28\tShanghai\tShanghai Ehong Technology Co.,Ltd\n4C:E1:73:C0:00:00/28\tRemondeN\tRemonde Network\n4C:E1:73:D0:00:00/28\tKtcK-Tel\tKTC(K-TEL)\n4C:E1:73:E0:00:00/28\tPlusOneJ\tPlus One Japan Limited\n4C:E1:BB\tZhuhaiHi\tZhuhai HiFocus Technology Co., Ltd.\n4C:E2:F1\tSclakSrl\tsclak srl\n4C:E6:76\tBuffalo\tBuffalo.Inc\n4C:E9:33\tRailcomm\tRailComm, LLC\n4C:EB:42\tIntelCor\tIntel Corporate\n4C:EC:EF\tSoraa\tSoraa, Inc.\n4C:ED:DE\tAskeyCom\tAskey Computer Corp\n4C:ED:FB\tAsustekC\tASUSTek COMPUTER INC.\n4C:EE:B0\tShcNetzw\tSHC Netzwerktechnik GmbH\n4C:EF:C0\tAmazonTe\tAmazon Technologies Inc.\n4C:F0:2E\tVifaDenm\tVifa Denmark A/S\n4C:F2:BF\tCambridg\tCambridge Industries(Group) Co.,Ltd.\n4C:F4:5B\tBlueClov\tBlue Clover Devices\n4C:F5:A0\tScalable\tScalable Network Technologies Inc\n4C:F7:37\tSamjiEle\tSamJi Electronics Co., Ltd\n4C:F9:5D\tHuaweiTe\tHuawei Technologies Co.,Ltd\n4C:FA:CA\tCambridg\tCambridge Industries(Group) Co.,Ltd.\n4C:FB:45\tHuaweiTe\tHuawei Technologies Co.,Ltd\n4C:FF:12\tFuzeEnte\tFuze Entertainment Co., ltd\n50:00:8C\tHongKong\tHong Kong Telecommunications (HKT) Limited\n50:01:6B\tHuaweiTe\tHuawei Technologies Co.,Ltd\n50:01:BB\tSamsungE\tSamsung Electronics Co.,Ltd\n50:01:D9\tHuaweiTe\tHuawei Technologies Co.,Ltd\n50:04:B8\tHuaweiTe\tHuawei Technologies Co.,Ltd\n50:05:3D\tCyweeGro\tCyWee Group Ltd\n50:06:04\tCisco\tCisco Systems, Inc\n50:06:AB\tCisco\tCisco Systems, Inc\n50:09:59\tTechnico\tTechnicolor CH USA Inc.\n50:0B:32\tFoxdaTec\tFoxda Technology Industrial(ShenZhen)Co.,LTD\n50:0B:91\tIeeeRegi\tIEEE Registration Authority\n50:0B:91:00:00:00/28\tIgor\tIgor, Inc.\n50:0B:91:10:00:00/28\tSpdDevel\tSPD Development Company Ltd\n50:0B:91:20:00:00/28\tAnnapurn\tannapurnalabs\n50:0B:91:30:00:00/28\tEwinTech\tEwin Technology Limited\n50:0B:91:40:00:00/28\tSinopeTe\tSinope technologies Inc\n50:0B:91:50:00:00/28\tJiangsuZ\tjiangsu zhongling high-tech CO.,LTD.\n50:0B:91:60:00:00/28\tSecurity\tSecurity Alarms & Co. S.A.\n50:0B:91:70:00:00/28\tShenzhen\tShenzhen Xinfa Electronic Co.,ltd\n50:0B:91:80:00:00/28\tPanasoni\tPanasonic Enterprise Solutions Company\n50:0B:91:90:00:00/28\tMachfu\tMachfu, Inc.\n50:0B:91:A0:00:00/28\tNewAudio\tNew Audio LLC\n50:0B:91:B0:00:00/28\tThumbzup\tthumbzup UK Limited\n50:0B:91:C0:00:00/28\tDiamondT\tDiamond Traffic Products, Inc\n50:0B:91:D0:00:00/28\tShenzhen\tShenzhen Lucky Sonics Co .,Ltd\n50:0B:91:E0:00:00/28\tShenzhen\tShenzhen zhong ju  Fiber optical Co.Ltd\n50:0E:6D\tTrafficc\tTrafficCast International\n50:0F:80\tCisco\tCisco Systems, Inc\n50:0F:F5\tTendaTec\tTenda Technology Co.,Ltd.Dongguan branch\n50:11:EB\tSilverne\tSilverNet Ltd\n50:14:79\tIrobot\tiRobot Corporation\n50:14:B5\tRichfitI\tRichfit Information Technology Co., Ltd\n50:17:FF\tCisco\tCisco Systems, Inc\n50:18:4C\tPlatina\tPlatina Systems Inc.\n50:1A:A5\tGnNetcom\tGN Netcom A/S\n50:1A:C5\tMicrosof\tMicrosoft\n50:1C:B0\tCisco\tCisco Systems, Inc\n50:1C:BF\tCisco\tCisco Systems, Inc\n50:1D:93\tHuaweiTe\tHuawei Technologies Co.,Ltd\n50:1E:2D\tStreamun\tStreamUnlimited Engineering GmbH\n50:20:6B\tEmersonC\tEmerson Climate Technologies Transportation Solutions\n50:22:67\tPixelink\t\n50:25:2B\tNethraIm\tNethra Imaging Incorporated\n50:26:90\tFujitsu\tFujitsu Limited\n50:27:C7\tTechnart\tTECHNART Co.,Ltd\n50:29:4D\tNanjingI\tNanjing Iot Sensor Technology Co,Ltd\n50:29:F5\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n50:2A:7E\tSmartEle\tSmart electronic GmbH\n50:2A:8B\tTelekomR\tTelekom Research and Development Sdn Bhd\n50:2B:73\tTendaTec\tTenda Technology Co.,Ltd.Dongguan branch\n50:2D:1D\tNokia\tNokia Corporation\n50:2D:A2\tIntelCor\tIntel Corporate\n50:2D:F4\tPhytecMe\tPhytec Messtechnik GmbH\n50:2E:5C\tHtc\tHTC Corporation\n50:2E:CE\tAsahiEle\tAsahi Electronics Co.,Ltd\n50:2F:A8\tCisco\tCisco Systems, Inc\n50:31:AD\tAbbGloba\tABB Global Industries and Services Private Limited\n50:32:37\tApple\tApple, Inc.\n50:32:75\tSamsungE\tSamsung Electronics Co.,Ltd\n50:33:8B\tTexasIns\tTexas Instruments\n50:33:F0\tYichenSh\tYICHEN (SHENZHEN) TECHNOLOGY CO.LTD\n50:39:55\tCiscoSpv\tCisco SPVTG\n50:3A:7D\tAlphatec\tAlphaTech PLC Int’l Co., Ltd.\n50:3A:A0\tShenzhen\tShenzhen Mercury Communication Technologies Co.,Ltd.\n50:3C:C4\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\n50:3C:EA\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n50:3D:A1\tSamsungE\tSamsung Electronics Co.,Ltd\n50:3D:E5\tCisco\tCisco Systems, Inc\n50:3E:AA\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n50:3F:56\tSyncmold\tSyncmold Enterprise Corp\n50:3F:98\tCmitech\t\n50:40:61\tNokia\t\n50:45:F7\tLiuheInt\tLiuhe Intelligence Technology Ltd.\n50:46:5D\tAsustekC\tASUSTek COMPUTER INC.\n50:48:EB\tBeijingH\tBeijing Haihejinsheng Network Technology Co. Ltd.\n50:4A:5E\tMasimo\tMasimo Corporation\n50:4A:6E\tNetgear\t\n50:4B:5B\tControlt\tCONTROLtronic GmbH\n50:4C:7E\t41stInst\tTHE 41ST INSTITUTE OF CETC\n50:4E:DC\tPingComm\tPing Communication\n50:4F:94\tLoxoneEl\tLoxone Electronics GmbH\n50:50:2A\tEgardia\t\n50:50:65\tTakt\tTAKT Corporation\n50:50:CE\tHangzhou\tHangzhou Dianyixia Communication Technology Co. Ltd.\n50:52:D2\tHangzhou\tHangzhou Telin Technologies Co., Limited\n50:55:27\tLgElectr\tLG Electronics (Mobile Communications)\n50:56:63\tTexasIns\tTexas Instruments\n50:56:A8\tJolla\tJolla Ltd\n50:56:BF\tSamsungE\tSamsung Electronics Co.,Ltd\n50:57:9C\tSeikoEps\tSeiko Epson Corporation\n50:57:A8\tCisco\tCisco Systems, Inc\n50:58:00\tWytecInt\tWyTec International, Inc.\n50:58:4F\tWaytotec\twaytotec,Inc.\n50:59:67\tIntentSo\tIntent Solutions Inc\n50:5A:C6\tGuangdon\tGuangdong Super Telecom Co.,Ltd.\n50:5B:C2\tLiteonTe\tLiteon Technology Corporation\n50:5D:AC\tHuaweiTe\tHuawei Technologies Co.,Ltd\n50:60:28\tXirrus\tXirrus Inc.\n50:61:84\tAvaya\tAvaya Inc\n50:61:BF\tCisco\tCisco Systems, Inc\n50:61:D6\tIndu-Sol\tIndu-Sol GmbH\n50:63:13\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n50:64:2B\tXiaomiEl\tXIAOMI Electronics,CO.,LTD\n50:64:41\tGreenlee\t\n50:65:83\tTexasIns\tTexas Instruments\n50:65:F3\tHewlettP\tHewlett Packard\n50:67:87\tPlanetNe\tPlanet Networks\n50:67:AE\tCisco\tCisco Systems, Inc\n50:67:F0\tZyxelCom\tZyxel Communications Corporation\n50:68:0A\tHuaweiTe\tHuawei Technologies Co.,Ltd\n50:6A:03\tNetgear\t\n50:6B:4B\tMellanox\tMellanox Technologies, Inc.\n50:6B:8D\tNutanix\t\n50:6C:BE\tInnosili\tInnosiliconTechnology Ltd\n50:6E:92\tInnocent\tInnocent Technology Co., Ltd.\n50:6F:77\tHuaweiTe\tHuawei Technologies Co.,Ltd\n50:6F:98\tSehajSyn\tSehaj Synergy Technologies Private Limited\n50:6F:9A\tWi-FiAll\tWi-Fi Alliance\n50:70:E5\tHeShanWo\tHe Shan World Fair Electronics Technology Limited\n50:72:24\tTexasIns\tTexas Instruments\n50:72:4D\tBegBruec\tBEG Brueck Electronic GmbH\n50:76:91\tTekpea\tTekpea, Inc.\n50:76:A6\tEcilInfo\tEcil Informatica Ind. Com. Ltda\n50:76:AF\tIntelCor\tIntel Corporate\n50:77:05\tSamsungE\tSamsung Electronics Co.,Ltd\n50:79:5B\tInterexp\tInterexport Telecomunicaciones S.A.\n50:7A:55\tApple\tApple, Inc.\n50:7B:9D\tLcfcHefe\tLCFC(HeFei) Electronics Technology co., ltd\n50:7D:02\tBiodit\t\n50:7E:5D\tArcadyan\tArcadyan Technology Corporation\n50:82:D5\tApple\tApple, Inc.\n50:85:69\tSamsungE\tSamsung Electronics Co.,Ltd\n50:87:89\tCisco\tCisco Systems, Inc\n50:87:B8\tNuvyyo\tNuvyyo Inc\n50:89:65\tShenzhen\tShenzhen Mercury Communication Technologies Co.,Ltd.\n50:8A:0F\tShenzhen\tShenzhen Fise Technology Holding Co.,Ltd.\n50:8A:42\tUptmateT\tUptmate Technology Co., LTD\n50:8A:CB\tShenzhen\tShenzhen Maxmade Technology Co., Ltd.\n50:8C:77\tDirmeier\tDIRMEIER Schanktechnik GmbH &Co KG\n50:8C:B1\tTexasIns\tTexas Instruments\n50:8D:6F\tChahoo\tCHAHOO Limited\n50:8F:4C\tXiaomiCo\tXiaomi Communications Co Ltd\n50:92:B9\tSamsungE\tSamsung Electronics Co.,Ltd\n50:93:4F\tGradualT\tGradual Tecnologia Ltda.\n50:95:51\tArrisGro\tARRIS Group, Inc.\n50:97:72\tWestingh\tWestinghouse Digital\n50:98:71\tInventum\tInventum Technologies Private Limited\n50:98:F3\tRheemAus\tRheem Australia Pty Ltd\n50:9A:4C\tDell\tDell Inc.\n50:9E:A7\tSamsungE\tSamsung Electronics Co.,Ltd\n50:9F:27\tHuaweiTe\tHuawei Technologies Co.,Ltd\n50:9F:3B\tOiElectr\tOi Electric Co.,Ltd\n50:A0:09\tXiaomiCo\tXiaomi Communications Co Ltd\n50:A0:54\tActineon\t\n50:A0:A4\tNokia\t\n50:A0:BF\tAlbaFibe\tAlba Fiber Systems Inc.\n50:A4:C8\tSamsungE\tSamsung Electronics Co.,Ltd\n50:A4:D0\tIeeeRegi\tIEEE Registration Authority\n50:A4:D0:00:00:00/28\tTraxens\t\n50:A4:D0:10:00:00/28\tBeijingA\tBeijing ANTVR Technology Co., LTD\n50:A4:D0:20:00:00/28\tSeneco\tSeneco A/S\n50:A4:D0:30:00:00/28\tGuangzho\tGuangzhou Hysoon Electronic Co., Ltd.\n50:A4:D0:40:00:00/28\tRavenInd\tRaven Industries Inc.\n50:A4:D0:50:00:00/28\tTrexomSR\tTREXOM S.r.l.\n50:A4:D0:60:00:00/28\tPointgra\tPointGrab\n50:A4:D0:70:00:00/28\tShanghai\tShanghai Pujiang Smart Card Systems Co., Ltd.\n50:A4:D0:80:00:00/28\tXinlianA\tXinLian'AnBao（Beijing）Technology Co.，LTD.\n50:A4:D0:90:00:00/28\tOemProdu\tOem Production Inc.\n50:A4:D0:A0:00:00/28\tChangsha\tChangsha SinoCare, Inc\n50:A4:D0:B0:00:00/28\tZhengDia\tZheng Dian Electronics Limited\n50:A4:D0:C0:00:00/28\tBeijingY\tBeijing YangLian Networks Technology co., LTD\n50:A4:D0:D0:00:00/28\tAxelTech\tAxel Technology\n50:A4:D0:E0:00:00/28\tSagetech\tSagetech Corporation\n50:A6:7F\tApple\tApple, Inc.\n50:A6:E3\tDavidCla\tDavid Clark Company\n50:A7:15\tAboundi\tAboundi, Inc.\n50:A7:2B\tHuaweiTe\tHuawei Technologies Co.,Ltd\n50:A7:33\tRuckusWi\tRuckus Wireless\n50:A8:3A\tSMobileD\tS Mobile Devices Limited\n50:A9:DE\tSmartcom\tSmartcom - Bulgaria AD\n50:AB:3E\tQibixx\tQibixx AG\n50:AB:BF\tHoseoTel\tHoseo Telecom\n50:AD:D5\tDynalec\tDynalec Corporation\n50:AF:73\tShenzhen\tShenzhen Bitland Information Technology Co., Ltd.\n50:B3:63\tDigitron\tDigitron da Amazonia S/A\n50:B6:95\tMicropoi\tMicropoint Biotechnologies,Inc.\n50:B7:C3\tSamsungE\tSamsung Electronics Co.,Ltd\n50:B8:88\tWi2beTec\twi2be Tecnologia S/A\n50:B8:A2\tImtechTe\tImTech Technologies LLC,\n50:BC:96\tApple\tApple, Inc.\n50:BD:5F\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n50:C0:06\tCarmanah\tCarmanah Signs\n50:C2:71\tSecurete\tSecuretech Inc\n50:C5:8D\tJuniperN\tJuniper Networks\n50:C7:BF\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n50:C8:E5\tSamsungE\tSamsung Electronics Co.,Ltd\n50:C9:71\tGnNetcom\tGN Netcom A/S\n50:C9:A0\tSkipperA\tSkipper As\n50:CC:F8\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\n50:CD:22\tAvaya\tAvaya Inc\n50:CD:32\tNanjingC\tNanJing Chaoran Science & Technology Co.,Ltd.\n50:CE:75\tMeasyEle\tMeasy Electronics Co., Ltd.\n50:D2:13\tCvilux\tCviLux Corporation\n50:D2:74\tSteffes\tSteffes Corporation\n50:D3:7F\tYuFlyMik\tYu Fly Mikly Way Science and Technology Co., Ltd.\n50:D5:9C\tThaiHabe\tThai Habel Industrial Co., Ltd.\n50:D6:D7\tTakahata\tTakahata Precision\n50:D7:53\tConelcom\tCONELCOM GmbH\n50:DA:00\tHangzhou\tHangzhou H3C Technologies Co., Limited\n50:DB:3F\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\n50:DC:E7\tAmazonTe\tAmazon Technologies Inc.\n50:DC:FC\tEcocom\t\n50:DD:4F\tAutomati\tAutomation Components, Inc\n50:DF:95\tLytx\t\n50:E0:C7\tTurcontr\tTurControlSystme AG\n50:E0:EF\tNokia\t\n50:E1:4A\tPrivate\t\n50:E5:49\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\n50:E6:66\tShenzhen\tShenzhen Techtion Electronics Co., Ltd.\n50:E9:71\tJibo\tJibo, Inc.\n50:EA:D6\tApple\tApple, Inc.\n50:EB:1A\tBrocadeC\tBrocade Communications Systems, Inc.\n50:ED:78\tChangzho\tChangzhou Yongse Infotech Co.,Ltd\n50:ED:94\tEgatelSl\tEgatel Sl\n50:F0:03\tOpenStac\tOpen Stack, Inc.\n50:F0:D3\tSamsungE\tSamsung Electronics Co.,Ltd\n50:F1:4A\tTexasIns\tTexas Instruments\n50:F4:3C\tLeeo\tLeeo Inc\n50:F5:20\tSamsungE\tSamsung Electronics Co.,Ltd\n50:F5:DA\tAmazonTe\tAmazon Technologies Inc.\n50:F6:1A\tKunshanJ\tKunshan JADE Technologies co., Ltd.\n50:F7:22\tCisco\tCisco Systems, Inc\n50:FA:84\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n50:FA:AB\tL-TekDOO\tL-tek d.o.o.\n50:FC:30\tTreehous\tTreehouse Labs\n50:FC:9F\tSamsungE\tSamsung Electronics Co.,Ltd\n50:FE:F2\tSifyTech\tSify Technologies Ltd\n50:FF:20\tKeenetic\tKeenetic Limited\n50:FF:99\tIeeeRegi\tIEEE Registration Authority\n50:FF:99:00:00:00/28\tSimicon\t\n50:FF:99:10:00:00/28\tCoyoteSy\tCoyote Sytem\n50:FF:99:20:00:00/28\tShenzhen\tShenzhen Kingvt Electronics Co.,Ltd\n50:FF:99:30:00:00/28\tYongjing\tYongjing Shanghai Electronic Science and Technology\n50:FF:99:40:00:00/28\tIpcGloba\tIPC Global\n50:FF:99:50:00:00/28\tGarrison\tGarrison Technology\n50:FF:99:60:00:00/28\tLegendWi\tLegend Winner Limited\n50:FF:99:70:00:00/28\tHoneywel\tHoneywell International\n50:FF:99:80:00:00/28\tDolphinC\tDolphin Concepts Limited\n50:FF:99:90:00:00/28\tSeaEagle\tSea Eagle Optoelectronic Information Technology(Tianjin)co,Ltd\n50:FF:99:A0:00:00/28\tMetratec\tmetraTec GmbH\n50:FF:99:B0:00:00/28\tSichuanD\tSichuan Dowlab Electronics Technology Co. Ltd\n50:FF:99:C0:00:00/28\tGoetting\tGoetting KG\n50:FF:99:D0:00:00/28\tShenzhen\tShenzhen Haipengxin Electronic Co., Ltd.\n50:FF:99:E0:00:00/28\tInformaL\tInforma LLC\n52:54:00\tRealtekU\tRealtek (UpTech? also reported)\n52:54:4C\tNovell20\tNovell 2000\n52:54:AB\tRealtekA\tREALTEK (a Realtek 8029 based PCI Card)\n54:02:37\tTeltroni\tTeltronic AG\n54:03:84\tHangkong\tHangkong Nano IC Technologies Co., Ltd\n54:03:F5\tEbnTechn\tEBN Technology Corp.\n54:04:96\tGigawave\tGigawave LTD\n54:04:A6\tAsustekC\tASUSTek COMPUTER INC.\n54:05:36\tVivagoOy\tVivago Oy\n54:05:5F\tAlcatelL\tAlcatel Lucent\n54:05:93\tWooriEle\tWOORI ELEC Co.,Ltd\n54:06:8B\tNingboDe\tNingbo Deli Kebei Technology Co.LTD\n54:09:55\tZte\tzte corporation\n54:09:8D\tDeisterE\tdeister electronic GmbH\n54:10:31\tSmarto\t\n54:10:EC\tMicrochi\tMicrochip Technology Inc.\n54:11:2F\tSulzerPu\tSulzer Pump Solutions Finland Oy\n54:11:5F\tAtamoPty\tAtamo Pty Ltd\n54:13:79\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n54:14:73\tWingtech\tWingtech Group (HongKong）Limited\n54:14:FD\tOrbbec3d\tOrbbec 3D Technology International\n54:19:C8\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n54:1B:5D\tTechno-I\tTechno-Innov\n54:1D:FB\tFreestyl\tFreestyle Energy Ltd\n54:1E:56\tJuniperN\tJuniper Networks\n54:1F:D5\tAdvantag\tAdvantage Electronics\n54:20:18\tTelyLabs\tTely Labs\n54:21:60\tResoluti\tResolution Products\n54:22:F8\tZte\tzte corporation\n54:25:EA\tHuaweiTe\tHuawei Technologies Co.,Ltd\n54:26:96\tApple\tApple, Inc.\n54:27:1E\tAzurewav\tAzureWave Technology Inc.\n54:27:58\tMotorola\tMotorola (Wuhan) Mobility Technologies Communication Co., Ltd.\n54:27:6C\tJiangsuH\tJiangsu Houge Technology Corp.\n54:27:8D\tNxpChina\tNXP (China) Management Ltd.\n54:2A:9C\tLsyDefen\tLSY Defense, LLC.\n54:2A:A2\tAlphaNet\tAlpha Networks Inc.\n54:2B:57\tNightOwl\tNight Owl SP\n54:2C:EA\tProtectr\tProtectron\n54:2F:89\tEuclidLa\tEuclid Laboratories, Inc.\n54:2F:8A\tTellesco\tTellescom Industria E Comercio Em Telecomunicacao\n54:31:31\tRasterVi\tRaster Vision Ltd\n54:33:CB\tApple\tApple, Inc.\n54:35:30\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n54:35:DF\tSymeo\tSymeo GmbH\n54:36:9B\t1vergeIn\t1Verge Internet Technology (Beijing) Co., Ltd.\n54:39:68\tEdgewate\tEdgewater Networks Inc\n54:39:DF\tHuaweiTe\tHuawei Technologies Co.,Ltd\n54:3B:30\tDuagon\tduagon AG\n54:3D:37\tRuckusWi\tRuckus Wireless\n54:3E:64\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n54:40:AD\tSamsungE\tSamsung Electronics Co.,Ltd\n54:42:49\tSony\tSony Corporation\n54:44:08\tNokia\tNokia Corporation\n54:46:6B\tShenzhen\tShenzhen CZTIC Electronic Technology Co., Ltd\n54:48:10\tDell\tDell Inc.\n54:48:9C\tCdoubles\tCdoubles Electronics Co. Ltd.\n54:4A:00\tCisco\tCisco Systems, Inc\n54:4A:05\tWenglorS\twenglor sensoric gmbh\n54:4A:16\tTexasIns\tTexas Instruments\n54:4B:8C\tJuniperN\tJuniper Networks\n54:4E:45\tPrivate\t\n54:4E:90\tApple\tApple, Inc.\n54:51:1B\tHuaweiTe\tHuawei Technologies Co.,Ltd\n54:51:46\tAmg\tAMG Systems Ltd.\n54:53:ED\tSony\tSony Corporation\n54:54:14\tDigitalR\tDigital RF Corea, Inc\n54:54:CF\tProbedig\tProbedigital Co.,Ltd\n54:5A:A6\tEspressi\tEspressif Inc.\n54:5E:BD\tNlTechno\tNL Technologies\n54:5F:A9\tTeracom\tTeracom Limited\n54:60:09\tGoogle\tGoogle, Inc.\n54:61:72\tZodiacAe\tZodiac Aerospace Sas\n54:61:EA\tZaplox\tZaplox AB\n54:64:D9\tSagemcom\tSagemcom Broadband SAS\n54:65:DE\tArrisGro\tARRIS Group, Inc.\n54:66:6C\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\n54:67:51\tCompalBr\tCompal Broadband Networks, Inc.\n54:6A:D8\tElsterWa\tElster Water Metering\n54:6C:0E\tTexasIns\tTexas Instruments\n54:6D:52\tTopviewO\tTopview Optronics Corp.\n54:72:4F\tApple\tApple, Inc.\n54:73:98\tToyoElec\tToyo Electronics Corporation\n54:74:E6\tWebtechW\tWebtech Wireless\n54:75:95\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n54:75:D0\tCisco\tCisco Systems, Inc\n54:78:1A\tCisco\tCisco Systems, Inc\n54:79:75\tNokia\tNokia Corporation\n54:7A:52\tCteInter\tCTE International srl\n54:7C:69\tCisco\tCisco Systems, Inc\n54:7D:CD\tTexasIns\tTexas Instruments\n54:7F:54\tIngenico\t\n54:7F:A8\tTelcoSRO\tTELCO systems, s.r.o.\n54:7F:EE\tCisco\tCisco Systems, Inc\n54:80:28\tHewlettP\tHewlett Packard Enterprise\n54:81:2D\tPaxCompu\tPAX Computer Technology(Shenzhen) Ltd.\n54:81:AD\tEagleRes\tEagle Research Corporation\n54:83:3A\tZyxelCom\tZyxel Communications Corporation\n54:84:7B\tDigitalD\tDigital Devices GmbH\n54:88:0E\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\n54:89:22\tZelfy\tZelfy Inc\n54:89:98\tHuaweiTe\tHuawei Technologies Co.,Ltd\n54:8C:A0\tLiteonTe\tLiteon Technology Corporation\n54:92:BE\tSamsungE\tSamsung Electronics Co.,Ltd\n54:93:59\tShenzhen\tShenzhen Twowing Technologies Co.,Ltd.\n54:94:78\tSilversh\tSilvershore Technology Partners\n54:99:63\tApple\tApple, Inc.\n54:9A:11\tIeeeRegi\tIEEE Registration Authority\n54:9A:11:00:00:00/28\tShenzhen\tShenzhen Excera Technology Co.,Ltd.\n54:9A:11:10:00:00/28\tSpearx\tSpearX Inc.\n54:9A:11:20:00:00/28\tTorrapDe\tTorrap Design Limited\n54:9A:11:30:00:00/28\tRoyalBoo\tRoyal Boon Edam International BV\n54:9A:11:40:00:00/28\tEtauroLl\teTauro LLC\n54:9A:11:50:00:00/28\tElotechI\tElotech Industrieelektronik GmbH\n54:9A:11:60:00:00/28\tOrientDi\tOrient Direct, Inc.\n54:9A:11:70:00:00/28\tNiveoInt\tNiveo International BV\n54:9A:11:80:00:00/28\tTite\tTite, Inc.\n54:9A:11:90:00:00/28\tAlfenBv\tAlfen BV\n54:9A:11:A0:00:00/28\tVendnova\tVendNovation LLC\n54:9A:11:B0:00:00/28\tEliteSil\tElite Silicon Technology, Inc.\n54:9A:11:C0:00:00/28\tXiAnHuaF\tXi'an Hua Fan Technology Co.,Ltd.\n54:9A:11:D0:00:00/28\tHangzhou\tHangzhou duotin Technology Co., Ltd.\n54:9A:11:E0:00:00/28\tBeijingH\tBeijing HTSmartech Co.,Ltd\n54:9A:11:F0:00:00/28\tPrivate\t\n54:9A:16\tUzushioE\tUzushio Electric Co.,Ltd.\n54:9A:4C\tGuangdon\tGuangdong Homecare Technology Co.,Ltd.\n54:9B:12\tSamsungE\tSamsung Electronics Co.,Ltd\n54:9D:85\tEneracce\tEnerAccess inc\n54:9F:13\tApple\tApple, Inc.\n54:9F:35\tDell\tDell Inc.\n54:9F:AE\tIbaseGam\tiBASE Gaming Inc\n54:A0:4F\tT-MacTec\tt-mac Technologies Ltd\n54:A0:50\tAsustekC\tASUSTek COMPUTER INC.\n54:A2:74\tCisco\tCisco Systems, Inc\n54:A3:1B\tShenzhen\tShenzhen Linkworld Technology Co,.LTD\n54:A3:FA\tBqtSolut\tBQT Solutions (Australia)Pty Ltd\n54:A5:1B\tHuaweiTe\tHuawei Technologies Co.,Ltd\n54:A5:4B\tNscCommu\tNSC Communications Siberia Ltd\n54:A6:19\tAlcatel-\tAlcatel-Lucent Shanghai Bell Co., Ltd\n54:A6:5C\tTechnico\tTechnicolor CH USA Inc.\n54:A9:D4\tMinibar\tMinibar Systems\n54:AB:3A\tQuantaCo\tQuanta Computer Inc.\n54:AE:27\tApple\tApple, Inc.\n54:B1:21\tHuaweiTe\tHuawei Technologies Co.,Ltd\n54:B2:03\tPegatron\tPegatron Corporation\n54:B5:6C\tXiAnNova\tXi'an NovaStar Tech Co., Ltd\n54:B6:20\tSuhdolE&\tSUHDOL E&C Co.Ltd.\n54:B7:53\tHunanFen\tHunan Fenghui Yinjia Science And Technology Co.,Ltd\n54:B7:E5\tRaysonTe\tRayson Technology Co., Ltd.\n54:B8:02\tSamsungE\tSamsung Electronics Co.,Ltd\n54:B8:0A\tD-LinkIn\tD-Link International\n54:BD:79\tSamsungE\tSamsung Electronics Co.,Ltd\n54:BE:53\tZte\tzte corporation\n54:BE:F7\tPegatron\tPegatron Corporation\n54:BF:64\tDell\tDell Inc.\n54:C3:3E\tCiena\tCiena Corporation\n54:C4:15\tHangzhou\tHangzhou Hikvision Digital Technology Co.,Ltd.\n54:C5:7A\tSunnovoI\tSunnovo International Limited\n54:C8:0F\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n54:C9:DF\tFn-LinkT\tFN-LINK TECHNOLOGY LIMITED\n54:CD:10\tPanasoni\tPanasonic Mobile Communications Co.,Ltd.\n54:CD:A7\tFujianSh\tFujian Shenzhou Electronic Co.,Ltd\n54:CD:EE\tShenzhen\tShenZhen Apexis Electronic Co.,Ltd\n54:D0:B4\tXiamenFo\tXiamen Four-Faith Communication Technology Co.,Ltd\n54:D0:ED\tAximComm\tAXIM Communications\n54:D1:63\tMax-Tech\tMAX-TECH,INC\n54:D1:B0\tUniversa\tUniversal Laser Systems, Inc\n54:D2:72\tNukiHome\tNuki Home Solutions GmbH\n54:D4:6F\tCiscoSpv\tCisco SPVTG\n54:D7:51\tProximus\t\n54:D9:E4\tBrillian\tBrilliantts Co., Ltd\n54:DC:1D\tYulongCo\tYulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd\n54:DF:00\tUlterius\tUlterius Technologies, LLC\n54:DF:24\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n54:DF:63\tIntrakey\tIntrakey technologies GmbH\n54:E0:32\tJuniperN\tJuniper Networks\n54:E0:61\tSichuanT\tSichuan Tianyi Comheart Telecomco., Ltd\n54:E1:40\tIngenico\t\n54:E1:AD\tLcfcHefe\tLCFC(HeFei) Electronics Technology co., ltd\n54:E2:C8\tDongguan\tDongguan Aoyuan Electronics Technology Co., Ltd\n54:E2:E0\tArrisGro\tARRIS Group, Inc.\n54:E3:B0\tJvlIndus\tJVL Industri Elektronik\n54:E3:F6\tAlcatel-\tAlcatel-Lucent\n54:E4:3A\tApple\tApple, Inc.\n54:E4:BD\tFn-LinkT\tFN-LINK TECHNOLOGY LIMITED\n54:E6:3F\tShenzhen\tShenZhen LingKeWeiEr Technology Co., Ltd.\n54:E6:FC\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n54:EA:A8\tApple\tApple, Inc.\n54:ED:A3\tNavdy\tNavdy, Inc.\n54:EE:75\tWistronI\tWistron InfoComm(Kunshan)Co.,Ltd.\n54:EF:92\tShenzhen\tShenzhen Elink Technology Co., LTD\n54:EF:FE\tFullpowe\tFullpower Technologies, Inc.\n54:F2:01\tSamsungE\tSamsung Electronics Co.,Ltd\n54:F5:B6\tOriental\tOriental Pacific International Limited\n54:F6:66\tBerthold\tBerthold Technologies GmbH and Co.KG\n54:F6:C5\tFujianSt\tFUJIAN STAR-NET COMMUNICATION CO.,LTD\n54:F8:76\tAbb\tAbb Ag\n54:FA:3E\tSamsungE\tSamsung Electronics Co.,Ltd\n54:FA:96\tNokia\t\n54:FB:58\tWiseware\tWISEWARE, Lda\n54:FC:F0\tSamsungE\tSamsung Electronics Co.,Ltd\n54:FD:BF\tScheidtB\tScheidt & Bachmann GmbH\n54:FF:82\tDavitSol\tDavit Solution co.\n54:FF:CF\tMopriaAl\tMopria Alliance\n56:58:57\tAculabPl\tAculab plc\n58:00:BB\tJuniperN\tJuniper Networks\n58:00:E3\tLiteonTe\tLiteon Technology Corporation\n58:03:FB\tHangzhou\tHangzhou Hikvision Digital Technology Co.,Ltd.\n58:04:54\tIcommHk\tIcomm Hk Limited\n58:04:CB\tTianjinH\tTianjin Huisun Technology Co.,Ltd.\n58:05:28\tLabrisNe\tLabris Networks\n58:05:56\tElettron\tElettronica GF S.r.L.\n58:08:FA\tFiberOpt\tFiber Optic & telecommunication INC.\n58:09:43\tPrivate\t\n58:09:E5\tKivic\tKivic Inc.\n58:0A:20\tCisco\tCisco Systems, Inc\n58:10:8C\tIntelbra\tIntelbras\n58:12:43\tAcsipTec\tAcSiP Technology Corp.\n58:16:26\tAvaya\tAvaya Inc\n58:17:0C\tSonyMobi\tSony Mobile Communications Inc\n58:19:F8\tArrisGro\tARRIS Group, Inc.\n58:1C:BD\tAffinegy\t\n58:1D:91\tAdvanced\tAdvanced Mobile Telecom co.,ltd.\n58:1F:28\tHuaweiTe\tHuawei Technologies Co.,Ltd\n58:1F:67\tOpen-MTe\tOpen-m technology limited\n58:1F:AA\tApple\tApple, Inc.\n58:1F:EF\tTuttnaer\tTuttnaer LTD\n58:20:B1\tHewlettP\tHewlett Packard\n58:21:36\tKmbSRO\tKMB systems, s.r.o.\n58:21:E9\tTwpi\t\n58:23:8C\tTechnico\tTechnicolor CH USA Inc.\n58:2A:F7\tHuaweiTe\tHuawei Technologies Co.,Ltd\n58:2B:DB\tPax\tPax AB\n58:2D:34\tQingping\tQingping Electronics (Suzhou) Co., Ltd\n58:2E:FE\tLighting\tLighting Science Group\n58:2F:40\tNintendo\tNintendo Co.,Ltd\n58:2F:42\tUniversa\tUniversal Electric Corporation\n58:31:12\tDrust\t\n58:32:77\tReliance\tReliance Communications LLC\n58:34:3B\tGlovastT\tGlovast Technology Ltd.\n58:35:D9\tCisco\tCisco Systems, Inc\n58:38:79\tRicoh\tRicoh Company, Ltd.\n58:3B:D9\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n58:3C:C6\tOmnealit\tOmneality Ltd.\n58:3F:54\tLgElectr\tLG Electronics (Mobile Communications)\n58:40:4E\tApple\tApple, Inc.\n58:42:E4\tBaxterIn\tBaxter International Inc\n58:44:98\tXiaomiCo\tXiaomi Communications Co Ltd\n58:46:8F\tKoncarEl\tKoncar Electronics and Informatics\n58:46:E1\tBaxterIn\tBaxter International Inc\n58:47:04\tShenzhen\tShenzhen Webridge Technology Co.,Ltd\n58:48:22\tSonyMobi\tSony Mobile Communications Inc\n58:48:C0\tCoflec\t\n58:49:25\tE3Enterp\tE3 Enterprise\n58:49:3B\tPaloAlto\tPalo Alto Networks\n58:49:BA\tChitaiEl\tChitai Electronic Corp.\n58:4C:19\tChongqin\tChongqing Guohong Technology Development Company Limited\n58:4C:EE\tDigitalO\tDigital One Technologies, Limited\n58:50:76\tLinearEq\tLinear Equipamentos Eletronicos SA\n58:50:AB\tTls\tTLS Corporation\n58:50:E6\tBestBuy\tBest Buy Corporation\n58:52:8A\tMitsubis\tMitsubishi Electric Corporation\n58:53:C0\tBeijingG\tBeijing Guang Runtong Technology Development Company co.,Ltd\n58:55:CA\tApple\tApple, Inc.\n58:56:E8\tArrisGro\tARRIS Group, Inc.\n58:57:0D\tDanfossS\tDanfoss Solar Inverters\n58:5F:F6\tZte\tzte corporation\n58:60:5F\tHuaweiTe\tHuawei Technologies Co.,Ltd\n58:61:63\tQuantumN\tQuantum Networks (SG) Pte. Ltd.\n58:63:56\tFn-LinkT\tFN-LINK TECHNOLOGY LIMITED\n58:63:9A\tTplSyste\tTpl Systemes\n58:65:E6\tInfomark\tInfomark Co., Ltd.\n58:66:BA\tHangzhou\tHangzhou H3C Technologies Co., Limited\n58:67:1A\tBarnes&N\tBarnes&Noble\n58:67:7F\tClareCon\tClare Controls Inc.\n58:68:5D\tTempoAus\tTempo Australia Pty Ltd\n58:69:6C\tRuijieNe\tRuijie Networks Co.,LTD\n58:69:F9\tFusionTr\tFusion Transactive Ltd.\n58:6A:B1\tHangzhou\tHangzhou H3C Technologies Co., Limited\n58:6D:8F\tCisco-Li\tCisco-Linksys, LLC\n58:6E:D6\tPrivate\t\n58:70:C6\tShanghai\tShanghai Xiaoyi Technology Co., Ltd.\n58:75:21\tCjscRtso\tCJSC RTSoft\n58:76:75\tBeijingE\tBeijing ECHO Technologies Co.,Ltd\n58:76:C5\tDigiIS\tDIGI I'S LTD\n58:7A:4D\tStonesof\tStonesoft Corporation\n58:7A:62\tTexasIns\tTexas Instruments\n58:7A:6A\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n58:7B:E9\tAirproTe\tAirPro Technology India Pvt. Ltd\n58:7E:61\tQingdaoH\tQingdao Hisense Communications Co.,Ltd.\n58:7F:57\tApple\tApple, Inc.\n58:7F:66\tHuaweiTe\tHuawei Technologies Co.,Ltd\n58:7F:B7\tSonarInd\tSonar Industrial Co., Ltd.\n58:7F:C8\tS2m\t\n58:82:1D\tHSchomäc\tH. Schomäcker GmbH\n58:82:A8\tMicrosof\tMicrosoft\n58:84:E4\tIp500All\tIP500 Alliance e.V.\n58:85:6E\tQsc\tQsc Ag\n58:87:4C\tLite-OnC\tLITE-ON CLEAN ENERGY TECHNOLOGY CORP.\n58:87:E2\tShenzhen\tShenzhen Coship Electronics Co., Ltd.\n58:8A:5A\tDell\tDell Inc.\n58:8B:F3\tZyxelCom\tZyxel Communications Corporation\n58:8D:09\tCisco\tCisco Systems, Inc\n58:8D:64\tXiAnClev\tXi'an Clevbee Technology Co.,Ltd\n58:90:43\tSagemcom\tSagemcom Broadband SAS\n58:91:CF\tIntelCor\tIntel Corporate\n58:92:0D\tKineticA\tKinetic Avionics Limited\n58:93:96\tRuckusWi\tRuckus Wireless\n58:94:6B\tIntelCor\tIntel Corporate\n58:94:CF\tVertexSt\tVertex Standard LMR, Inc.\n58:97:1E\tCisco\tCisco Systems, Inc\n58:97:BD\tCisco\tCisco Systems, Inc\n58:98:35\tTechnico\tTechnicolor\n58:98:6F\tRevoluti\tRevolution Display\n58:9B:0B\tShineway\tShineway Technologies, Inc.\n58:9C:FC\tFreebsdF\tFreeBSD Foundation\n58:A0:CB\tTracknet\tTrackNet, Inc\n58:A2:B5\tLgElectr\tLG Electronics (Mobile Communications)\n58:A4:8E\tPixartIm\tPixArt Imaging Inc.\n58:A7:6F\tId\tiD corporation\n58:A8:39\tIntelCor\tIntel Corporate\n58:AC:78\tCisco\tCisco Systems, Inc\n58:B0:35\tApple\tApple, Inc.\n58:B0:D4\tZunidata\tZuniData Systems Inc.\n58:B1:0F\tSamsungE\tSamsung Electronics Co.,Ltd\n58:B3:FC\tShenzhen\tSHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\n58:B4:2D\tYstenTec\tYSTen Technology Co.,Ltd\n58:B5:68\tSecurita\tSECURITAS DIRECT ESPAÑA, SAU\n58:B6:33\tRuckusWi\tRuckus Wireless\n58:B9:61\tSolemEle\tSOLEM Electronique\n58:B9:E1\tCrystalf\tCrystalfontz America, Inc.\n58:BA:D4\tHuaweiTe\tHuawei Technologies Co.,Ltd\n58:BC:27\tCisco\tCisco Systems, Inc\n58:BC:8F\tCognitiv\tCognitive Systems Corp.\n58:BD:A3\tNintendo\tNintendo Co., Ltd.\n58:BD:F9\tSigrand\t\n58:BF:EA\tCisco\tCisco Systems, Inc\n58:C1:7A\tCambiumN\tCambium Networks Limited\n58:C2:32\tNec\tNEC Corporation\n58:C3:8B\tSamsungE\tSamsung Electronics Co.,Ltd\n58:C5:83\tItelMobi\tItel Mobile Limited\n58:C5:CB\tSamsungE\tSamsung Electronics Co.,Ltd\n58:C8:76\tChinaMob\tChina Mobile (Hangzhou) Information Technology Co., Ltd.\n58:C9:35\tChiunMai\tChiun Mai Communication Systems, Inc\n58:CF:4B\tLufkinIn\tLufkin Industries\n58:D0:71\tBwBroadc\tBW Broadcast\n58:D0:8F\tIeee1904\tIEEE 1904.1 Working Group\n58:D5:6E\tD-LinkIn\tD-Link International\n58:D6:7A\tTcplink\t\n58:D6:D3\tDairyChe\tDairy Cheq Inc\n58:D7:59\tHuaweiTe\tHuawei Technologies Co.,Ltd\n58:D9:D5\tTendaTec\tTenda Technology Co.,Ltd.Dongguan branch\n58:DB:15\tTecnoMob\tTecno Mobile Limited\n58:DB:8D\tFast\tFast Co., Ltd.\n58:DC:6D\tExceptio\tExceptional Innovation, Inc.\n58:E0:2C\tMicroTec\tMicro Technic A/S\n58:E1:6C\tYingHuaI\tYing Hua Information Technology (Shanghai)Co., LTD\n58:E2:8F\tApple\tApple, Inc.\n58:E3:26\tCompassT\tCompass Technologies Inc.\n58:E4:76\tCentronC\tCentron Communications Technologies Fujian Co.,Ltd\n58:E6:36\tEvrsafeT\tEVRsafe Technologies\n58:E6:BA\tApple\tApple, Inc.\n58:E7:47\tDeltanet\tDeltanet AG\n58:E8:08\tAutonics\tAutonics Corporation\n58:E8:76\tIeeeRegi\tIEEE Registration Authority\n58:E8:76:00:00:00/28\tPrivate\t\n58:E8:76:10:00:00/28\tBeijingP\tBeijing Perabytes IS Technology Co., Ltd\n58:E8:76:20:00:00/28\tCoalaLif\tCoala Life AB\n58:E8:76:30:00:00/28\tMcwongIn\tMcWong International Inc\n58:E8:76:40:00:00/28\tProbitSr\tProbit Srl\n58:E8:76:50:00:00/28\tBroadAir\tBroad Air Technology Co., LTD.\n58:E8:76:60:00:00/28\tDiviotec\tDivioTec Inc.\n58:E8:76:70:00:00/28\tChronosT\tChronos Technology Ltd.\n58:E8:76:80:00:00/28\tChengduV\tChengdu Vision-Zenith Technology Co.,Ltd\n58:E8:76:90:00:00/28\tTemMobil\tTEM Mobile Limited\n58:E8:76:A0:00:00/28\tShenzhen\tShenzhen Digissin Technology\n58:E8:76:B0:00:00/28\tAnnapurn\tannapurnalabs\n58:E8:76:C0:00:00/28\tKustomSi\tKustom Signals Inc\n58:E8:76:D0:00:00/28\tXiamenCa\tXiamen Cacamle Technology Co.,Ltd.\n58:E8:76:E0:00:00/28\tBaoruhEl\tBaoruh Electronic Co., Ltd.\n58:EB:14\tProteusD\tProteus Digital Health\n58:EC:E1\tNewport\tNewport Corporation\n58:EE:CE\tIconTime\tIcon Time Systems\n58:EF:68\tBelkinIn\tBelkin International Inc.\n58:F1:02\tBluProdu\tBLU Products Inc.\n58:F3:87\tHccp\t\n58:F3:9C\tCisco\tCisco Systems, Inc\n58:F4:96\tSourceCh\tSource Chain\n58:F6:7B\tXiaMenUn\tXia Men UnionCore Technology LTD.\n58:F6:BF\tKyotoUni\tKyoto University\n58:F9:87\tHuaweiTe\tHuawei Technologies Co.,Ltd\n58:F9:8E\tSecudos\tSECUDOS GmbH\n58:FB:84\tIntelCor\tIntel Corporate\n58:FC:73\tArriaLiv\tArria Live Media, Inc.\n58:FC:DB\tIeeeRegi\tIEEE Registration Authority\n58:FC:DB:00:00:00/28\tSpangPow\tSpang Power Electronics\n58:FC:DB:10:00:00/28\tCertisTe\tCertis Technology International\n58:FC:DB:20:00:00/28\tBeseyeCl\tBeseye Cloud Security Co. Ltd.\n58:FC:DB:30:00:00/28\tCustomBi\tCustom Biogenic Systems\n58:FC:DB:40:00:00/28\tInforceC\tInforce Computing Inc.\n58:FC:DB:50:00:00/28\tShenzhen\tShenzhen Siecom Communication Technology Development Co.,Ltd.\n58:FC:DB:60:00:00/28\tTimexGro\tTimex Group USA Inc\n58:FC:DB:70:00:00/28\tOpenRoad\tOpen Roads Consulting, Inc.\n58:FC:DB:80:00:00/28\tShanghai\tShanghai Qianjin Electronic Equipment Co. Ltd\n58:FC:DB:90:00:00/28\tHi-Targe\tHi-Target Surveying Instrument Co., Ltd.\n58:FC:DB:A0:00:00/28\tXmodus\tXmodus Systems GmbH\n58:FC:DB:B0:00:00/28\tSwarcoTr\tSwarco Traffic Systems Gmbh\n58:FC:DB:C0:00:00/28\tExcenonM\tExcenon Mobile Technology Co., Ltd.\n58:FC:DB:D0:00:00/28\tXiamenLe\tXiamen Leelen Technology Co.,Ltd\n58:FC:DB:E0:00:00/28\tAppliedD\tApplied Device Technologies\n58:FC:DB:F0:00:00/28\tPrivate\t\n58:FD:20\tBravidaS\tBravida Sakerhet AB\n58:FD:BE\tShenzhen\tShenzhen Taikaida Technology Co., Ltd\n5A:CB:D3\tSimaudio\tSimaudio Ltd\n5A:E6:60\tNyantec\tnyantec GmbH\n5C:00:38\tViasatGr\tViasat Group S.p.A.\n5C:02:6A\tAppliedV\tApplied Vision Corporation\n5C:03:39\tHuaweiTe\tHuawei Technologies Co.,Ltd\n5C:07:6F\tThoughtC\tThought Creator\n5C:09:47\tApple\tApple, Inc.\n5C:09:79\tHuaweiTe\tHuawei Technologies Co.,Ltd\n5C:0A:5B\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\n5C:0C:0E\tGuizhouH\tGuizhou Huaxintong Semiconductor Technology Co Ltd\n5C:0C:BB\tCelizion\tCELIZION Inc.\n5C:0E:8B\tExtremeN\tExtreme Networks, Inc.\n5C:11:93\tSealOne\tSeal One AG\n5C:14:37\tThyssenk\tThyssenkrupp Aufzugswerke GmbH\n5C:15:15\tAdvan\t\n5C:15:E1\tAidcTech\tAIDC TECHNOLOGY (S) PTE LTD\n5C:16:C7\tBigSwitc\tBig Switch Networks\n5C:17:37\tI-ViewNo\tI-View Now, LLC.\n5C:17:D3\tLge\t\n5C:18:B5\tTalonCom\tTalon Communications\n5C:1A:6F\tCambridg\tCambridge Industries(Group) Co.,Ltd.\n5C:1D:D9\tApple\tApple, Inc.\n5C:20:D0\tAsoniCom\tAsoni Communication Co., Ltd.\n5C:22:C4\tDaeEunEl\tDae Eun Eletronics Co., Ltd\n5C:24:43\tO-SungTe\tO-Sung Telecom Co., Ltd.\n5C:24:79\tBaltech\tBaltech AG\n5C:25:4C\tAvireGlo\tAvire Global Pte Ltd\n5C:26:0A\tDell\tDell Inc.\n5C:26:23\tWavelynx\tWaveLynx Technologies Corporation\n5C:2A:EF\tOpenAcce\tOpen Access Pty Ltd\n5C:2B:F5\tVivintWi\tVivint Wireless Inc.\n5C:2E:59\tSamsungE\tSamsung Electronics Co.,Ltd\n5C:2E:D2\tAbcXishe\tABC(XiSheng) Electronics Co.,Ltd\n5C:31:3E\tTexasIns\tTexas Instruments\n5C:33:27\tSpazioIt\tSpazio Italia srl\n5C:33:5C\tSwisspho\tSwissphone Telecom AG\n5C:33:8E\tAlphaNet\tAlpha Networks Inc.\n5C:35:3B\tCompalBr\tCompal Broadband Networks, Inc.\n5C:35:DA\tThereOy\tThere Corporation Oy\n5C:36:B8\tTclKingE\tTCL King Electrical Appliances (Huizhou) Co., Ltd\n5C:38:E0\tShanghai\tShanghai Super Electronics Technology Co.,LTD\n5C:3B:35\tGehirn\tGehirn Inc.\n5C:3C:27\tSamsungE\tSamsung Electronics Co.,Ltd\n5C:40:58\tJefferso\tJefferson Audio Video Systems, Inc.\n5C:41:E7\tWiatecIn\tWiatec International Ltd.\n5C:43:D2\tHazemeye\tHazemeyer\n5C:45:27\tJuniperN\tJuniper Networks\n5C:49:79\tAvmAudio\tAVM Audiovisuelles Marketing und Computersysteme GmbH\n5C:49:7D\tSamsungE\tSamsung Electronics Co.,Ltd\n5C:4A:1F\tSichuanT\tSichuan Tianyi Comheart Telecomco., Ltd\n5C:4A:26\tEnguityT\tEnguity Technology Corp\n5C:4C:A9\tHuaweiTe\tHuawei Technologies Co.,Ltd\n5C:50:15\tCisco\tCisco Systems, Inc\n5C:51:4F\tIntelCor\tIntel Corporate\n5C:51:81\tSamsungE\tSamsung Electronics Co.,Ltd\n5C:51:88\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n5C:52:1E\tNintendo\tNintendo Co.,Ltd\n5C:54:6D\tHuaweiTe\tHuawei Technologies Co.,Ltd\n5C:56:ED\t3pleplay\t3pleplay Electronics Private Limited\n5C:57:1A\tArrisGro\tARRIS Group, Inc.\n5C:57:C8\tNokia\tNokia Corporation\n5C:58:19\tJingshen\tJingsheng Technology Co., Ltd.\n5C:59:48\tApple\tApple, Inc.\n5C:5A:EA\tFord\t\n5C:5B:35\tMist\tMist Systems, Inc.\n5C:5B:C2\tYik\tYIK Corporation\n5C:5E:AB\tJuniperN\tJuniper Networks\n5C:5F:67\tIntelCor\tIntel Corporate\n5C:63:BF\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n5C:63:C9\tIntellit\tIntellithings Ltd.\n5C:67:76\tIdsImagi\tIDS Imaging Development Systems GmbH\n5C:69:84\tNuvico\t\n5C:6A:7D\tKentkart\tKentkart Ege Elektronik San. Ve Tic. Ltd. Sti.\n5C:6A:80\tZyxelCom\tZyxel Communications Corporation\n5C:6B:32\tTexasIns\tTexas Instruments\n5C:6B:4F\tHello\tHello Inc.\n5C:6D:20\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n5C:6F:4F\tSASistel\tS.A. Sistel\n5C:70:A3\tLgElectr\tLG Electronics (Mobile Communications)\n5C:77:57\tHaivisio\tHaivision Network Video\n5C:77:76\tTctMobil\tTCT mobile ltd\n5C:7D:5E\tHuaweiTe\tHuawei Technologies Co.,Ltd\n5C:81:A7\tNetworkD\tNetwork Devices Pty Ltd\n5C:83:8F\tCisco\tCisco Systems, Inc\n5C:84:86\tBrightso\tBrightsource Industries Israel LTD\n5C:86:13\tBeijingZ\tBeijing Zhoenet Technology Co., Ltd\n5C:86:4A\tSecretLa\tSecret Labs LLC\n5C:86:5C\tSamsungE\tSamsung Electronics Co.,Ltd\n5C:86:C1\tDongguan\tDongguan Solum Electronics Co.,Ltd\n5C:87:78\tCybertel\tCybertelbridge co.,ltd\n5C:89:9A\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n5C:89:D4\tBeijingB\tBeijing Banner Electric Co.,Ltd\n5C:8A:38\tHewlettP\tHewlett Packard\n5C:8D:2D\tShanghai\tShanghai Wellpay Information Technology Co., Ltd\n5C:8D:4E\tApple\tApple, Inc.\n5C:8F:E0\tArrisGro\tARRIS Group, Inc.\n5C:93:A2\tLiteonTe\tLiteon Technology Corporation\n5C:95:AE\tApple\tApple, Inc.\n5C:96:56\tAzurewav\tAzureWave Technology Inc.\n5C:96:6A\tRtnet\t\n5C:96:9D\tApple\tApple, Inc.\n5C:97:F3\tApple\tApple, Inc.\n5C:99:60\tSamsungE\tSamsung Electronics Co.,Ltd\n5C:9A:D8\tFujitsu\tFujitsu Limited\n5C:A1:76\tSichuanT\tSichuan Tianyi Comheart Telecomco., Ltd\n5C:A1:78\tTabletop\tTableTop Media (dba Ziosk)\n5C:A3:9D\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\n5C:A3:EB\tLokelSRO\tLokel s.r.o.\n5C:A4:8A\tCisco\tCisco Systems, Inc\n5C:A8:6A\tHuaweiTe\tHuawei Technologies Co.,Ltd\n5C:A9:33\tLumaHome\tLuma Home\n5C:AA:FD\tSonos\tSonos, Inc.\n5C:AC:4C\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n5C:AD:76\tShenzhen\tShenzhen TCL New Technology Co., Ltd\n5C:AD:CF\tApple\tApple, Inc.\n5C:AF:06\tLgElectr\tLG Electronics (Mobile Communications)\n5C:B0:66\tArrisGro\tARRIS Group, Inc.\n5C:B3:95\tHuaweiTe\tHuawei Technologies Co.,Ltd\n5C:B3:F6\tHuman\tHuman, Incorporated\n5C:B4:3E\tHuaweiTe\tHuawei Technologies Co.,Ltd\n5C:B5:24\tSonyMobi\tSony Mobile Communications Inc\n5C:B5:59\tCnexLabs\tCNEX Labs\n5C:B6:CC\tNovacomm\tNovaComm Technologies Inc.\n5C:B8:CB\tAllisCom\tAllis Communications\n5C:B9:01\tHewlettP\tHewlett Packard\n5C:BA:37\tMicrosof\tMicrosoft Corporation\n5C:BD:9E\tHongkong\tHONGKONG MIRACLE EAGLE TECHNOLOGY(GROUP) LIMITED\n5C:C2:13\tFrSauter\tFr. Sauter AG\n5C:C3:07\tHuaweiTe\tHuawei Technologies Co.,Ltd\n5C:C5:D4\tIntelCor\tIntel Corporate\n5C:C6:D0\tSkyworth\tSkyworth Digital Technology(Shenzhen) Co.,Ltd\n5C:C6:E9\tEdifierI\tEdifier International\n5C:C7:D7\tAzroadTe\tAzroad Technology Company Limited\n5C:C9:99\tNewH3cTe\tNew H3C Technologies Co., Ltd\n5C:C9:D3\tPalladiu\tPalladium Energy Eletronica Da Amazonia Ltda\n5C:CA:1A\tMicrosof\tMicrosoft Mobile Oy\n5C:CA:32\tTheben\tTheben AG\n5C:CC:A0\tGridwiz\tGridwiz Inc.\n5C:CC:FF\tTechrout\tTechroutes Network Pvt Ltd\n5C:CD:7C\tMeizuTec\tMEIZU Technology Co.,Ltd.\n5C:CE:AD\tCdyne\tCDYNE Corporation\n5C:CF:7F\tEspressi\tEspressif Inc.\n5C:D1:35\tXtremePo\tXtreme Power Systems\n5C:D2:0B\tYytek\tYytek Co., Ltd.\n5C:D2:E4\tIntelCor\tIntel Corporate\n5C:D4:1B\tUczoonTe\tUCZOON Technology Co., LTD\n5C:D4:AB\tZektor\t\n5C:D6:1F\tQardio\tQardio, Inc\n5C:D9:98\tD-Link\tD-Link Corporation\n5C:DA:D4\tMurataMa\tMurata Manufacturing Co., Ltd.\n5C:DC:96\tArcadyan\tArcadyan Technology Corporation\n5C:DD:70\tHangzhou\tHangzhou H3C Technologies Co., Limited\n5C:E0:C5\tIntelCor\tIntel Corporate\n5C:E0:CA\tFeitianU\tFeiTian United (Beijing) System Technology Co., Ltd.\n5C:E0:F6\tNicBr-Nu\tNIC.br- Nucleo de Informacao e Coordenacao do Ponto BR\n5C:E2:23\tDelphinT\tDelphin Technology AG\n5C:E2:86\tNortelNe\tNortel Networks\n5C:E2:8C\tZyxelCom\tZyxel Communications Corporation\n5C:E2:F4\tAcsipTec\tAcSiP Technology Corp.\n5C:E3:0E\tArrisGro\tARRIS Group, Inc.\n5C:E3:B6\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n5C:E7:BF\tNewSingu\tNew Singularity International Technical Development Co.,Ltd\n5C:E8:B7\tOraimoTe\tOraimo Technology Limited\n5C:E8:EB\tSamsungE\tSamsung Electronics Co.,Ltd\n5C:EA:1D\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n5C:EB:4E\tRStahlHm\tR. STAHL HMI Systems GmbH\n5C:EB:68\tCheersta\tCheerstar Technology Co., Ltd\n5C:EE:79\tGlobalDi\tGlobal Digitech Co LTD\n5C:F2:07\tSpecoTec\tSpeco Technologies\n5C:F2:86\tIeeeRegi\tIEEE Registration Authority\n5C:F2:86:00:00:00/28\tHangzhou\tHangzhou Signwei Electronics Technology Co., Ltd\n5C:F2:86:10:00:00/28\tIsonTech\tiSon Tech\n5C:F2:86:20:00:00/28\tShanghai\tShanghai Notion Information Technology CO.,LTD.\n5C:F2:86:30:00:00/28\tBeijingY\tbeijing your wonderful control system technology co.,ltd\n5C:F2:86:40:00:00/28\tChipsen\tCHIPSEN Co.,Ltd.\n5C:F2:86:50:00:00/28\tEuroimmu\tEUROIMMUN Medizinische Labordiagnostika AG\n5C:F2:86:60:00:00/28\tVpinstru\tVPInstruments\n5C:F2:86:70:00:00/28\tAccessIs\tAccess IS\n5C:F2:86:80:00:00/28\tShenzhen\tShenzhen Hivt Technology Co.,Ltd\n5C:F2:86:90:00:00/28\tShenzhen\tShenzhen VST Automotive Electronics Co., LTD\n5C:F2:86:A0:00:00/28\tUnforsRa\tUnfors Raysafe AB\n5C:F2:86:B0:00:00/28\tItronUk\tItron UK Limited\n5C:F2:86:C0:00:00/28\tSunpetIn\tSunpet Industries Limited\n5C:F2:86:D0:00:00/28\tBrightsk\tBrightSky, LLC\n5C:F2:86:E0:00:00/28\tDaisenEl\tDaisen Electronic Industrial Co., Ltd.\n5C:F3:70\tCc&CTech\tCC&C Technologies, Inc\n5C:F3:FC\tIbm\tIBM Corp\n5C:F4:AB\tZyxelCom\tZyxel Communications Corporation\n5C:F5:0D\tInstitut\tInstitute of microelectronic applications\n5C:F5:DA\tApple\tApple, Inc.\n5C:F6:DC\tSamsungE\tSamsung Electronics Co.,Ltd\n5C:F7:C3\tSyntechH\tSYNTECH (HK) TECHNOLOGY LIMITED\n5C:F7:E6\tApple\tApple, Inc.\n5C:F8:21\tTexasIns\tTexas Instruments\n5C:F8:A1\tMurataMa\tMurata Manufacturing Co., Ltd.\n5C:F9:38\tApple\tApple, Inc.\n5C:F9:6A\tHuaweiTe\tHuawei Technologies Co.,Ltd\n5C:F9:DD\tDell\tDell Inc.\n5C:F9:F0\tAtomosEn\tAtomos Engineering P/L\n5C:FB:7C\tShenzhen\tShenzhen Jingxun Software Telecommunication Technology Co.,Ltd\n5C:FC:66\tCisco\tCisco Systems, Inc\n5C:FF:35\tWistron\tWistron Corporation\n5C:FF:FF\tShenzhen\tShenzhen Kezhonglong Optoelectronic Technology Co., Ltd\n60:01:94\tEspressi\tEspressif Inc.\n60:02:92\tPegatron\tPegatron Corporation\n60:02:B4\tWistronN\tWistron Neweb Corporation\n60:03:08\tApple\tApple, Inc.\n60:03:47\tBillionE\tBillion Electric Co. Ltd.\n60:04:17\tPosbank\tPosbank Co.,Ltd\n60:05:8A\tHitachiM\tHitachi Metals, Ltd.\n60:08:10\tHuaweiTe\tHuawei Technologies Co.,Ltd\n60:08:37\tIvviScie\tivvi Scientific(Nanchang)Co.Ltd\n60:0B:03\tHangzhou\tHangzhou H3C Technologies Co., Limited\n60:0F:77\tSilverpl\tSilverPlus, Inc\n60:11:99\tSiama\tSiama Systems Inc\n60:12:83\tTsbRealT\tTsb Real Time Location Systems S.L.\n60:12:8B\tCanon\tCanon Inc.\n60:14:66\tZte\tzte corporation\n60:14:B3\tCybertan\tCyberTAN Technology Inc.\n60:15:C7\tIdatech\t\n60:18:03\tDaikinAi\tDaikin Air-conditioning (Shanghai) Co., Ltd.\n60:18:2E\tShenzhen\tShenZhen Protruly Electronic Ltd co.\n60:18:88\tZte\tzte corporation\n60:19:0C\tRramac\t\n60:19:29\tVoltroni\tVOLTRONIC POWER TECHNOLOGY(SHENZHEN) CORP.\n60:19:70\tHuizhouQ\tHuizhou Qiaoxing Electronics Technology Co., Ltd.\n60:19:71\tArrisGro\tARRIS Group, Inc.\n60:1D:0F\tMidniteS\tMidnite Solar\n60:1E:02\tEltexala\tEltexAlatau\n60:21:01\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n60:21:03\tI4vine\tI4VINE, INC\n60:21:C0\tMurataMa\tMurata Manufacturing Co., Ltd.\n60:24:C1\tJiangsuZ\tJiangsu Zhongxun Electronic Technology Co., Ltd\n60:27:1C\tVideorEH\tVIDEOR E. Hartig GmbH\n60:2A:54\tCardiote\tCardioTek B.V.\n60:2A:D0\tCiscoSpv\tCisco SPVTG\n60:2E:20\tHuaweiTe\tHuawei Technologies Co.,Ltd\n60:30:D4\tApple\tApple, Inc.\n60:31:3B\tSunnovoI\tSunnovo International Limited\n60:31:97\tZyxelCom\tZyxel Communications Corporation\n60:32:F0\tMplusTec\tMplus technology\n60:33:4B\tApple\tApple, Inc.\n60:35:53\tBuwonTec\tBuwon Technology\n60:35:C0\tSfr\t\n60:36:96\tSapling\tThe Sapling Company\n60:36:DD\tIntelCor\tIntel Corporate\n60:38:0E\tAlpsElec\tAlps Electric Co.,Ltd.\n60:38:E0\tBelkinIn\tBelkin International Inc.\n60:39:1F\tAbb\tABB Ltd\n60:3D:26\tTechnico\tTechnicolor CH USA Inc.\n60:3E:7B\tGafachi\tGafachi, Inc.\n60:3E:CA\tCambridg\tCambridge Medical Robotics Ltd\n60:3F:C5\tCox\tCox Co., Ltd\n60:42:7F\tShenzhen\tSHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\n60:44:F5\tEasyDigi\tEasy Digital Ltd.\n60:45:5E\tLiptelSR\tLiptel s.r.o.\n60:45:BD\tMicrosof\tMicrosoft\n60:45:CB\tAsustekC\tASUSTek COMPUTER INC.\n60:46:16\tXiamenVa\tXiamen Vann Intelligent Co., Ltd\n60:47:62\tBeijingS\tBeijing Sensoro Technology Co.,Ltd.\n60:47:D4\tForicsEl\tFORICS Electronic Technology Co., Ltd.\n60:48:26\tNewbridg\tNewbridge Technologies Int. Ltd.\n60:49:C1\tAvaya\tAvaya Inc\n60:4A:1C\tSuyin\tSUYIN Corporation\n60:4B:AA\tMagicLea\tMagic Leap, Inc.\n60:50:C1\tKinetekS\tKinetek Sports\n60:51:2C\tTctMobil\tTCT mobile ltd\n60:52:D0\tFactsEng\tFACTS Engineering\n60:53:17\tSandston\tSandstone Technologies\n60:54:64\tEyedroGr\tEyedro Green Solutions Inc.\n60:57:18\tIntelCor\tIntel Corporate\n60:5B:B4\tAzurewav\tAzureWave Technology Inc.\n60:5F:8D\tEero\teero inc.\n60:60:1F\tSzDjiTec\tSz Dji Technology Co.,Ltd\n60:63:F9\tCiholas\tCiholas, Inc.\n60:63:FD\tTranscen\tTranscend Communication Beijing Co.,Ltd.\n60:64:05\tTexasIns\tTexas Instruments\n60:64:53\tAod\tAOD Co.,Ltd.\n60:64:A1\tRadiflow\tRADiflow Ltd.\n60:67:20\tIntelCor\tIntel Corporate\n60:69:44\tApple\tApple, Inc.\n60:69:9B\tIsepos\tisepos GmbH\n60:6B:BD\tSamsungE\tSamsung Electronics Co.,Ltd\n60:6B:FF\tNintendo\tNintendo Co.,Ltd\n60:6C:66\tIntelCor\tIntel Corporate\n60:6D:3C\tLuxshare\tLuxshare Precision Industry Company Limited\n60:6D:C7\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n60:72:0B\tBluProdu\tBLU Products Inc\n60:73:5C\tCisco\tCisco Systems, Inc\n60:73:BC\tZte\tzte corporation\n60:74:8D\tAtmacaEl\tAtmaca Elektronik\n60:76:88\tVelodyne\t\n60:77:E2\tSamsungE\tSamsung Electronics Co.,Ltd\n60:7E:DD\tMicrosof\tMicrosoft Mobile Oy\n60:81:2B\tCustomCo\tCustom Control Concepts\n60:81:F9\tHelium\tHelium Systems, Inc\n60:83:34\tHuaweiTe\tHuawei Technologies Co.,Ltd\n60:83:B2\tGkwareEK\tGkWare e.K.\n60:84:3B\tSoladigm\tSoladigm, Inc.\n60:84:BD\tBuffalo\tBuffalo.Inc\n60:86:45\tAveryWei\tAvery Weigh-Tronix, LLC\n60:89:3C\tThermoFi\tThermo Fisher Scientific P.O.A.\n60:89:B1\tKeyDigit\tKey Digital Systems\n60:89:B7\tKaelMühe\tKAEL MÜHENDİSLİK ELEKTRONİK TİCARET SANAYİ LİMİTED ŞİRKETİ\n60:8C:2B\tHansonTe\tHanson Technology\n60:8C:4A\tApple\tApple, Inc.\n60:8C:E6\tArrisGro\tARRIS Group, Inc.\n60:8D:17\tSentrusG\tSentrus Government Systems Division, Inc\n60:8E:08\tSamsungE\tSamsung Electronics Co.,Ltd\n60:8F:5C\tSamsungE\tSamsung Electronics Co.,Ltd\n60:90:84\tDssd\tDSSD Inc\n60:91:F3\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n60:92:17\tApple\tApple, Inc.\n60:96:20\tPrivate\t\n60:97:DD\tMicrosys\tMicroSys Electronics GmbH\n60:98:13\tShanghai\tShanghai Visking Digital Technology Co. LTD\n60:99:D1\tVuzix/Le\tVuzix / Lenovo\n60:9A:A4\tGviSecur\tGvi Security Inc.\n60:9A:C1\tApple\tApple, Inc.\n60:9B:C8\tHipadInt\tHipad Intelligent Technology Co., Ltd.\n60:9C:9F\tBrocadeC\tBrocade Communications Systems, Inc.\n60:9E:64\tVivonic\tVivonic GmbH\n60:9F:9D\tCloudswi\tCloudSwitch\n60:A1:0A\tSamsungE\tSamsung Electronics Co.,Ltd\n60:A3:7D\tApple\tApple, Inc.\n60:A4:4C\tAsustekC\tASUSTek COMPUTER INC.\n60:A4:D0\tSamsungE\tSamsung Electronics Co.,Ltd\n60:A8:FE\tNokia\t\n60:A9:B0\tMerchand\tMerchandising Technologies, Inc\n60:AC:C8\tKunteng\tKunTeng Inc.\n60:AF:6D\tSamsungE\tSamsung Electronics Co.,Ltd\n60:B1:85\tAthSyste\tATH system\n60:B3:87\tSynergic\tSynergics Technologies GmbH\n60:B3:C4\tElberSrl\tElber Srl\n60:B4:F7\tPlumeDes\tPlume Design Inc\n60:B6:06\tPhorus\t\n60:B6:17\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n60:B9:33\tDeutronE\tDeutron Electronics Corp.\n60:B9:82\tRoVeRLab\tRO.VE.R. Laboratories S.p.A.\n60:BA:18\tNextlap\tnextLAP GmbH\n60:BB:0C\tBeijingH\tBeijing HuaqinWorld Technology Co,Ltd\n60:BC:4C\tEwmHight\tEWM Hightec Welding GmbH\n60:BD:91\tMoveInno\tMove Innovation\n60:BE:B5\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n60:C0:BF\tOnSemico\tON Semiconductor\n60:C1:CB\tFujianGr\tFujian Great Power PLC Equipment Co.,Ltd\n60:C3:97\t2wire\t2Wire Inc\n60:C5:47\tApple\tApple, Inc.\n60:C5:A8\tBeijingL\tBeijing LT Honway Technology Co.,Ltd\n60:C5:AD\tSamsungE\tSamsung Electronics Co.,Ltd\n60:C6:58\tPhytroni\tPHYTRONIX Co.,Ltd.\n60:C7:98\tVerifone\t\n60:C9:80\tTrymus\t\n60:CB:FB\tAirscape\tAirScape Inc.\n60:CD:A9\tAbloomy\t\n60:CD:C5\tTaiwanCa\tTaiwan Carol Electronics., Ltd\n60:CE:92\tRefinedI\tThe Refined Industry Company Limited\n60:D0:2C\tRuckusWi\tRuckus Wireless\n60:D0:A9\tSamsungE\tSamsung Electronics Co.,Ltd\n60:D1:AA\tVishalTe\tVishal Telecommunications Pvt Ltd\n60:D2:1C\tSunnovoI\tSunnovo International Limited\n60:D2:62\tTzukuriP\tTzukuri Pty Ltd\n60:D2:B9\tRealandB\tRealand Bio Co., Ltd.\n60:D3:0A\tQuatius\tQuatius Limited\n60:D7:E3\tIeeeRegi\tIEEE Registration Authority\n60:D7:E3:00:00:00/28\tAvalun\t\n60:D7:E3:10:00:00/28\tElapSRL\tElap s.r.l.\n60:D7:E3:20:00:00/28\tNovoInno\tNovo innovations Ltd\n60:D7:E3:30:00:00/28\tSksAutom\tSKS Automaatio oy\n60:D7:E3:40:00:00/28\tHemisphe\tHemisphere GNSS\n60:D7:E3:50:00:00/28\tRevolTec\tRevol Technologies inc\n60:D7:E3:60:00:00/28\tAmeliSRL\tAmeli s.r.l.\n60:D7:E3:70:00:00/28\tPhaseOne\tPhase One A/S\n60:D7:E3:80:00:00/28\tHindlepo\tHindlePower, Inc\n60:D7:E3:90:00:00/28\tLongsung\tLongSung Technology (Shanghai) Co.,Ltd.\n60:D7:E3:A0:00:00/28\tWilderne\tWilderness Labs Inc.\n60:D7:E3:B0:00:00/28\tNextivit\tNextivity\n60:D7:E3:C0:00:00/28\tZhejiang\tZhejiang Send Intelligent Technology,Ltd\n60:D7:E3:D0:00:00/28\tQuantron\tQuantronix, Inc.\n60:D7:E3:E0:00:00/28\tHubdic\tHuBDIC CO.,LTD\n60:D8:19\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n60:D9:A0\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\n60:D9:C7\tApple\tApple, Inc.\n60:DA:23\tEstech\tEstech Co.,Ltd\n60:DA:83\tHangzhou\tHangzhou H3C Technologies Co., Limited\n60:DB:2A\tHns\t\n60:DE:44\tHuaweiTe\tHuawei Technologies Co.,Ltd\n60:DE:F3\tHuaweiTe\tHuawei Technologies Co.,Ltd\n60:E0:0E\tShinseiE\tShinsei Electronics Co Ltd\n60:E3:27\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n60:E3:AC\tLgElectr\tLG Electronics (Mobile Communications)\n60:E6:BC\tSino-Tel\tSino-Telecom Technology Co.,Ltd.\n60:E7:01\tHuaweiTe\tHuawei Technologies Co.,Ltd\n60:E7:8A\tUnisem\t\n60:E9:56\tAylaNetw\tAyla Networks, Inc\n60:EB:69\tQuantaCo\tQuanta Computer Inc.\n60:EE:5C\tShenzhen\tShenzhen Fast Technologies Co.,Ltd\n60:EF:C6\tShenzhen\tShenzhen Chima Technologies Co Limited\n60:F1:3D\tJablocom\tJABLOCOM s.r.o.\n60:F1:89\tMurataMa\tMurata Manufacturing Co., Ltd.\n60:F1:8A\tHuaweiTe\tHuawei Technologies Co.,Ltd\n60:F2:81\tTranwoTe\tTranwo Technology Co., Ltd.\n60:F2:EF\tVisionve\tVisionVera International Co., Ltd.\n60:F3:DA\tLogicWay\tLogic Way GmbH\n60:F4:45\tApple\tApple, Inc.\n60:F4:94\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n60:F5:9C\tCru-Data\tCRU-Dataport\n60:F6:73\tTerumo\tTerumo Corporation\n60:F6:77\tIntelCor\tIntel Corporate\n60:F8:1D\tApple\tApple, Inc.\n60:FA:9D\tHuaweiTe\tHuawei Technologies Co.,Ltd\n60:FA:CD\tApple\tApple, Inc.\n60:FB:42\tApple\tApple, Inc.\n60:FD:56\tWoorisys\tWOORISYSTEMS CO., Ltd\n60:FE:1E\tChinaPal\tChina Palms Telecom.Ltd\n60:FE:20\t2wire\t2Wire Inc\n60:FE:C5\tApple\tApple, Inc.\n60:FE:F9\tThomasBe\tThomas & Betts\n60:FF:DD\tCEElectr\tC.E. Electronics, Inc\n64:00:2D\tPowerlin\tPowerlinq Co., LTD\n64:00:6A\tDell\tDell Inc.\n64:00:F1\tCisco\tCisco Systems, Inc\n64:02:CB\tArrisGro\tARRIS Group, Inc.\n64:05:BE\tNewLight\tNew Light Led\n64:05:E9\tShenzhen\tShenzhen WayOS Technology Crop., Ltd.\n64:09:4C\tBeijingS\tBeijing Superbee Wireless Technology Co.,Ltd\n64:09:80\tXiaomiCo\tXiaomi Communications Co Ltd\n64:0B:4A\tDigitalT\tDigital Telecom Technology Limited\n64:0D:CE\tShenzhen\tShenzhen Mercury Communication Technologies Co.,Ltd.\n64:0D:E6\tPetra\tPetra Systems\n64:0E:36\tTaztag\t\n64:0E:94\tPluribus\tPluribus Networks, Inc.\n64:0F:28\t2wire\t2Wire Inc\n64:10:84\tHexiumTe\tHEXIUM Technical Development Co., Ltd.\n64:12:25\tCisco\tCisco Systems, Inc\n64:12:69\tArrisGro\tARRIS Group, Inc.\n64:13:31\tBoschCar\tBosch Car Multimedia (Wuhu) Co. Ltd.\n64:13:6C\tZte\tzte corporation\n64:16:66\tNestLabs\tNest Labs Inc.\n64:16:7F\tPolycom\t\n64:16:8D\tCisco\tCisco Systems, Inc\n64:16:F0\tHuaweiTe\tHuawei Technologies Co.,Ltd\n64:1A:22\tHeliospe\tHeliospectra AB\n64:1C:67\tDigibras\tDIGIBRAS INDUSTRIA DO BRASILS/A\n64:1C:AE\tSamsungE\tSamsung Electronics Co.,Ltd\n64:1C:B0\tSamsungE\tSamsung Electronics Co.,Ltd\n64:1E:81\tDowslake\tDowslake Microsystems\n64:20:0C\tApple\tApple, Inc.\n64:20:9F\tTilgin\tTilgin AB\n64:21:84\tNipponDe\tNippon Denki Kagaku Co.,LTD\n64:22:16\tShandong\tShandong Taixin Electronic co.,Ltd\n64:24:00\tXorcom\tXorcom Ltd.\n64:27:37\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n64:2B:8A\tAllBestI\tALL BEST Industrial Co., Ltd.\n64:2D:B7\tSeungilE\tSeungil Electronics\n64:31:50\tHewlettP\tHewlett Packard\n64:31:7E\tDexin\tDexin Corporation\n64:32:A8\tIntelCor\tIntel Corporate\n64:34:09\tBitwaveP\tBITwave Pte Ltd\n64:35:1C\tE-ConInd\te-CON SYSTEMS INDIA PVT LTD\n64:3A:B1\tSichuanT\tSichuan Tianyi Comheart Telecomco.,Ltd\n64:3E:8C\tHuaweiTe\tHuawei Technologies Co.,Ltd\n64:3F:5F\tExablaze\t\n64:42:14\tSwisscom\tSwisscom Energy Solutions AG\n64:43:46\tGuangdon\tGuangDong Quick Network Computer CO.,LTD\n64:47:E0\tFeitianT\tFeitian Technologies Co., Ltd\n64:4B:C3\tShanghai\tShanghai WOASiS Telecommunications Ltd., Co.\n64:4B:F0\tCaldigit\tCalDigit, Inc\n64:4D:70\tDspace\tdSPACE GmbH\n64:4F:42\tJetter\tJETTER CO., Ltd.\n64:4F:74\tLenus\tLENUS Co., Ltd.\n64:4F:B0\tHyunjinC\tHyunjin.com\n64:51:06\tHewlettP\tHewlett Packard\n64:51:7E\tLongBenD\tLONG BEN (DONGGUAN) ELECTRONIC TECHNOLOGY CO.,LTD.\n64:52:99\tChamberl\tThe Chamberlain Group, Inc\n64:53:5D\tFrausche\tFrauscher Sensortechnik\n64:54:22\tEquinoxP\tEquinox Payments\n64:55:63\tInteligh\tIntelight Inc.\n64:55:7F\tNsfocusI\tNSFOCUS Information Technology Co., Ltd.\n64:55:B1\tArrisGro\tARRIS Group, Inc.\n64:56:01\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n64:59:F8\tVodafone\tVodafone Omnitel B.V.\n64:5A:04\tChiconyE\tChicony Electronics Co., Ltd.\n64:5A:ED\tApple\tApple, Inc.\n64:5D:86\tIntelCor\tIntel Corporate\n64:5D:92\tSichuanT\tSichuan Tianyi Comheart Telecomco.,Ltd\n64:5D:D7\tShenzhen\tShenzhen Lifesense Medical Electronics Co., Ltd.\n64:5E:BE\tYahoo!Ja\tYahoo! JAPAN\n64:5F:FF\tNicoletN\tNicolet Neuro\n64:61:84\tVelux\t\n64:62:23\tCellient\tCellient Co., Ltd.\n64:62:8A\tEvon\tevon GmbH\n64:64:9B\tJuniperN\tJuniper Networks\n64:65:C0\tNuvon\tNuvon, Inc\n64:66:B3\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n64:67:07\tBeijingO\tBeijing Omnific Technology, Ltd.\n64:68:0C\tComtrend\tComtrend Corporation\n64:69:BC\tHyteraCo\tHytera Communications Co .,ltd\n64:6A:52\tAvaya\tAvaya Inc\n64:6A:74\tAuth-Ser\tAUTH-SERVERS, LLC\n64:6C:B2\tSamsungE\tSamsung Electronics Co.,Ltd\n64:6D:6C\tHuaweiTe\tHuawei Technologies Co.,Ltd\n64:6E:69\tLiteonTe\tLiteon Technology Corporation\n64:6E:6C\tRadioDat\tRadio Datacom LLC\n64:6E:EA\tIskratel\tIskratel d.o.o.\n64:70:02\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n64:70:33\tApple\tApple, Inc.\n64:72:D8\tGoowiTec\tGooWi Technology Co.,Limited\n64:73:E2\tArbiter\tArbiter Systems, Inc.\n64:74:F6\tShooterD\tShooter Detection Systems\n64:76:57\tInnovati\tInnovative Security Designs\n64:76:BA\tApple\tApple, Inc.\n64:77:7D\tHitronTe\tHitron Technologies. Inc\n64:77:91\tSamsungE\tSamsung Electronics Co.,Ltd\n64:79:A7\tPhisonEl\tPhison Electronics Corp.\n64:7B:CE\tSamsungE\tSamsung Electronics Co.,Ltd\n64:7B:D4\tTexasIns\tTexas Instruments\n64:7C:34\tUbeeInte\tUbee Interactive Co., Limited\n64:7D:81\tYokotaIn\tYokota Industrial Co,.Ltd\n64:7F:DA\tTektelic\tTEKTELIC Communications Inc.\n64:80:8B\tVgContro\tVG Controls, Inc.\n64:80:99\tIntelCor\tIntel Corporate\n64:81:25\tAlphatro\tAlphatron Marine BV\n64:87:88\tJuniperN\tJuniper Networks\n64:87:D7\tAdbBroad\tADB Broadband Italia\n64:88:FF\tSichuanC\tSichuan Changhong Electric Ltd.\n64:89:9A\tLgElectr\tLG Electronics (Mobile Communications)\n64:8D:9E\tIvtElect\tIVT Electronic Co.,Ltd\n64:98:29\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n64:99:5D\tLge\t\n64:99:68\tElentec\t\n64:99:A0\tElektron\tAG Elektronik AB\n64:9A:08\tShenzhen\tShenzhen SuperElectron Technology Co.,LTD\n64:9A:12\tP2Mobile\tP2 Mobile Technologies Limited\n64:9A:BE\tApple\tApple, Inc.\n64:9B:24\tVTechnol\tV Technology Co., Ltd.\n64:9C:81\tQualcomm\tQualcomm Inc.\n64:9C:8E\tTexasIns\tTexas Instruments\n64:9E:F3\tCisco\tCisco Systems, Inc\n64:9F:F7\tKoneOyj\tKone OYj\n64:A0:E7\tCisco\tCisco Systems, Inc\n64:A2:32\tOooSamli\tOOO Samlight\n64:A2:F9\tOneplusT\tOnePlus Technology (Shenzhen) Co., Ltd\n64:A3:41\tWonderla\tWonderlan (Beijing) Technology Co., Ltd.\n64:A3:CB\tApple\tApple, Inc.\n64:A5:C3\tApple\tApple, Inc.\n64:A6:51\tHuaweiTe\tHuawei Technologies Co.,Ltd\n64:A6:8F\tZhongsha\tZhongshan Readboy Electronics Co.,Ltd\n64:A7:69\tHtc\tHTC Corporation\n64:A7:DD\tAvaya\tAvaya Inc\n64:A8:37\tJuniKore\tJuni Korea Co., Ltd\n64:AE:0C\tCisco\tCisco Systems, Inc\n64:AE:88\tPolytec\tPolytec GmbH\n64:B0:A6\tApple\tApple, Inc.\n64:B2:1D\tChengduP\tChengdu Phycom Tech Co., Ltd.\n64:B3:10\tSamsungE\tSamsung Electronics Co.,Ltd\n64:B3:70\tPowercom\tPowerComm Solutions LLC\n64:B4:73\tXiaomiCo\tXiaomi Communications Co Ltd\n64:B5:C6\tNintendo\tNintendo Co.,Ltd\n64:B6:4A\tVivotech\tViVOtech, Inc.\n64:B8:53\tSamsungE\tSamsung Electronics Co.,Ltd\n64:B9:E8\tApple\tApple, Inc.\n64:BA:BD\tSdjTechn\tSDJ Technologies, Inc.\n64:BC:0C\tLgElectr\tLG Electronics (Mobile Communications)\n64:BC:11\tCombiq\tCombiQ AB\n64:C3:54\tAvaya\tAvaya Inc\n64:C3:D6\tJuniperN\tJuniper Networks\n64:C5:AA\tSouthAfr\tSouth African Broadcasting Corporation\n64:C6:67\tBarnes&N\tBarnes&Noble\n64:C6:AF\tAxerraNe\tAXERRA Networks Ltd\n64:C9:44\tLarkTech\tLARK Technologies, Inc\n64:CB:5D\tSiaTeles\tSIA TeleSet\n64:CB:A3\tPointmob\tPointmobile\n64:CC:2E\tXiaomiCo\tXiaomi Communications Co Ltd\n64:CF:D9\tTexasIns\tTexas Instruments\n64:D0:2D\tNextGene\tNext Generation Integration (NGI)\n64:D1:54\tRouterbo\tRouterboard.com\n64:D1:A3\tSitecomE\tSitecom Europe BV\n64:D2:41\tKeithKoe\tKeith & Koep GmbH\n64:D4:BD\tAlpsElec\tAlps Electric Co.,Ltd.\n64:D4:DA\tIntelCor\tIntel Corporate\n64:D8:14\tCisco\tCisco Systems, Inc\n64:D9:12\tSolidica\tSolidica, Inc.\n64:D9:54\tTaicangT\tTaicang T&W Electronics\n64:D9:89\tCisco\tCisco Systems, Inc\n64:DA:A0\tRobertBo\tRobert Bosch Smart Home GmbH\n64:DB:18\tOpenpatt\tOpenPattern\n64:DB:43\tMotorola\tMotorola (Wuhan) Mobility Technologies Communication Co., Ltd.\n64:DB:81\tSyszone\tSyszone Co., Ltd.\n64:DB:8B\tHangzhou\tHangzhou Hikvision Digital Technology Co.,Ltd.\n64:DB:A0\tSelectCo\tSelect Comfort\n64:DC:01\tStaticGr\tStatic Systems Group PLC\n64:DE:1C\tKingneti\tKingnetic Pte Ltd\n64:DF:E9\tAteme\t\n64:E1:61\tDep\tDEP Corp.\n64:E5:99\tEfmNetwo\tEFM Networks\n64:E6:25\tWoxuWire\tWoxu Wireless Co., Ltd\n64:E6:82\tApple\tApple, Inc.\n64:E8:4F\tSerialwa\tSerialway Communication Technology Co. Ltd\n64:E8:92\tMorioDen\tMorio Denki Co., Ltd.\n64:E8:E6\tGlobalMo\tglobal moisture management system\n64:E9:50\tCisco\tCisco Systems, Inc\n64:EA:C5\tSibotech\tSiboTech Automation Co., Ltd.\n64:EB:8C\tSeikoEps\tSeiko Epson Corporation\n64:ED:57\tArrisGro\tARRIS Group, Inc.\n64:ED:62\tWoori\tWOORI SYSTEMS Co., Ltd\n64:EE:B7\tNetcoreT\tNetcore Technology Inc\n64:F2:42\tGerdesAk\tGerdes Aktiengesellschaft\n64:F5:0E\tKinionTe\tKinion Technology Company Limited\n64:F6:9D\tCisco\tCisco Systems, Inc\n64:F8:8A\tChinaMob\tChina Mobile IOT Company Limited\n64:F9:70\tKenadeEl\tKenade Electronics Technology Co.,LTD.\n64:F9:87\tAvvasi\tAvvasi Inc.\n64:FB:50\tRoomread\tRoomReady/Zdi, Inc.\n64:FB:81\tIeeeRegi\tIEEE Registration Authority\n64:FB:81:00:00:00/28\tShanghai\tShanghai Simcom Limited\n64:FB:81:10:00:00/28\tNarrativ\tNarrative AB\n64:FB:81:20:00:00/28\tSevenSol\tSeven Solutions S.L\n64:FB:81:30:00:00/28\tMobilus\tMOBILUS Inc.\n64:FB:81:40:00:00/28\tPricer\tPricer AB\n64:FB:81:50:00:00/28\tKaySchul\tKay Schulze & Karsten Pohle GbR\n64:FB:81:60:00:00/28\tXimoComm\tXIMO Communication Technology Co., Ltd\n64:FB:81:70:00:00/28\tSecurosy\tSecurosys SA\n64:FB:81:80:00:00/28\tNpgTechn\tNPG Technology S.A.\n64:FB:81:90:00:00/28\tHiqview\thiQview Corporation\n64:FB:81:A0:00:00/28\tBronkhor\tBronkhorst High-Tech BV\n64:FB:81:B0:00:00/28\tSichuanH\tSichuan Haige Actec Communication Technology Co.,Ltd.\n64:FB:81:C0:00:00/28\tBridgepo\tBridgeport Instruments, LLC\n64:FB:81:D0:00:00/28\tDongyang\tDongyang unitech.co.ltd\n64:FB:81:E0:00:00/28\tChengduK\tChengDu KeChuang LongXin Sci-tech Co.,Ltd\n64:FB:81:F0:00:00/28\tPrivate\t\n64:FC:8C\tZonar\tZonar Systems\n68:02:35\tKontenNe\tKonten Networks Inc.\n68:05:71\tSamsungE\tSamsung Electronics Co.,Ltd\n68:05:CA\tIntelCor\tIntel Corporate\n68:07:15\tIntelCor\tIntel Corporate\n68:09:27\tApple\tApple, Inc.\n68:0A:D7\tYancheng\tYancheng Kecheng Optoelectronic Technology Co., Ltd\n68:12:2D\tSpecialI\tSpecial Instrument Development Co., Ltd.\n68:12:95\tLupineLi\tLupine Lighting Systems GmbH\n68:14:01\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n68:15:90\tSagemcom\tSagemcom Broadband SAS\n68:15:D3\tZakladyE\tZaklady Elektroniki i Mechaniki Precyzyjnej R&G S.A.\n68:16:05\tAndElect\tSystems And Electronic Development FZCO\n68:17:29\tIntelCor\tIntel Corporate\n68:19:3F\tDigitalA\tDigital Airways\n68:1A:B2\tZte\tzte corporation\n68:1C:A2\tRosewill\tRosewill Inc.\n68:1D:64\tSunwaveC\tSunwave Communications Co., Ltd\n68:1D:EF\tShenzhen\tShenzhen CYX Technology Co., Ltd.\n68:1E:8B\tInfosigh\tInfoSight Corporation\n68:1F:40\tBluWirel\tBlu Wireless Technology Ltd\n68:1F:D8\tSiemensI\tSiemens Industry, Inc.\n68:23:4B\tNihonDen\tNihon Dengyo Kousaku\n68:26:2A\tSichuanT\tSichuan Tianyi Comheart Telecomco., Ltd\n68:27:37\tSamsungE\tSamsung Electronics Co.,Ltd\n68:28:BA\tDejai\t\n68:28:F6\tVubiqNet\tVubiq Networks, Inc.\n68:2C:7B\tCisco\tCisco Systems, Inc\n68:2D:DC\tWuhanCha\tWuhan Changjiang Electro-Communication Equipment CO.,LTD\n68:31:FE\tTeladin\tTeladin Co.,Ltd.\n68:35:63\tShenzhen\tShenzhen Liown Electronics Co.,Ltd.\n68:36:B5\tDrivesca\tDriveScale, Inc.\n68:37:E9\tAmazonTe\tAmazon Technologies Inc.\n68:3A:1E\tCiscoMer\tCisco Meraki\n68:3B:1E\tCountwis\tCountwise LTD\n68:3C:7D\tMagicInt\tMagic Intelligence Technology Limited\n68:3E:02\tSiemensD\tSIEMENS AG, Digital Factory, Motion Control System\n68:3E:34\tMeizuTec\tMEIZU Technology Co., Ltd.\n68:3E:EC\tEreca\t\n68:43:52\tBhuu\tBhuu Limited\n68:43:D7\tAgilecom\tAgilecom Photonics Solutions Guangdong Limited\n68:47:49\tTexasIns\tTexas Instruments\n68:48:98\tSamsungE\tSamsung Electronics Co.,Ltd\n68:4B:88\tGaltroni\tGaltronics Telemetry Inc.\n68:4C:A8\tShenzhen\tShenzhen Herotel Tech. Co., Ltd.\n68:51:B7\tPowerclo\tPowerCloud Systems, Inc.\n68:53:6C\tSpns\tSPnS Co.,Ltd\n68:53:88\tP&STechn\tP&S Technology\n68:54:C1\tColortok\tColorTokens, Inc.\n68:54:ED\tAlcatel-\tAlcatel-Lucent\n68:54:F5\tEnlighte\tenLighted Inc\n68:54:FD\tAmazonTe\tAmazon Technologies Inc.\n68:57:2D\tHangzhou\tHangzhou Aixiangji Technology Co., Ltd\n68:58:C5\tZfTrwAut\tZF TRW Automotive\n68:59:7F\tAlcatelL\tAlcatel Lucent\n68:5A:CF\tSamsungE\tSamsung Electronics Co.,Ltd\n68:5B:35\tApple\tApple, Inc.\n68:5B:36\tPowertec\tPowertech Industrial Co., Ltd.\n68:5D:43\tIntelCor\tIntel Corporate\n68:5E:6B\tPowerray\tPowerRay Co., Ltd.\n68:63:59\tAdvanced\tAdvanced Digital Broadcast SA\n68:64:4B\tApple\tApple, Inc.\n68:69:2E\tZycoo\tZycoo Co.,Ltd\n68:69:75\tAnglerLa\tAngler Labs Inc\n68:69:F2\tComapSRO\tComAp s.r.o.\n68:6E:23\tWi3\tWi3 Inc.\n68:6E:48\tProphetE\tProphet Electronic Technology Corp.,Ltd\n68:72:51\tUbiquiti\tUbiquiti Networks Inc.\n68:72:DC\tCetoryTv\tCETORY.TV Company Limited\n68:76:4F\tSonyMobi\tSony Mobile Communications Inc\n68:78:48\tWestunit\tWestunitis Co., Ltd.\n68:78:4C\tNortelNe\tNortel Networks\n68:79:24\tEls-Gmbh\tELS-GmbH & Co. KG\n68:79:ED\tSharp\tSHARP Corporation\n68:7C:C8\tMeasurem\tMeasurement Systems S. de R.L.\n68:7C:D5\tYSoftAS\tY Soft Corporation, a.s.\n68:7F:74\tCisco-Li\tCisco-Linksys, LLC\n68:83:1A\tPandoraM\tPandora Mobility Corporation\n68:84:70\tEssys\teSSys Co.,Ltd\n68:85:40\tIgiMobil\tIGI Mobile, Inc.\n68:85:6A\tOuterlin\tOuterLink Corporation\n68:86:A7\tCisco\tCisco Systems, Inc\n68:86:E7\tOrbotix\tOrbotix, Inc.\n68:87:6B\tInqMobil\tINQ Mobile Limited\n68:89:75\tNuoxc\t\n68:89:C1\tHuaweiTe\tHuawei Technologies Co.,Ltd\n68:8A:B5\tEdpServi\tEDP Servicos\n68:8A:F0\tZte\tzte corporation\n68:8D:B6\tAetek\tAetek Inc.\n68:8F:2E\tHitronTe\tHitron Technologies. Inc\n68:8F:84\tHuaweiTe\tHuawei Technologies Co.,Ltd\n68:91:D0\tIeeeRegi\tIEEE Registration Authority\n68:91:D0:00:00:00/28\tCentralR\tCentral Railway Manufacturing\n68:91:D0:10:00:00/28\tMultiAla\tMulti Alarm Zrt.\n68:91:D0:20:00:00/28\tShenzhen\tShenzhen NeaTech Intelligence Technology Co., Ltd.\n68:91:D0:30:00:00/28\tAmbitioL\tAmbitio LLC\n68:91:D0:40:00:00/28\tG-TechIn\tG-TECH Instruments Inc.\n68:91:D0:50:00:00/28\tNipkElec\tNIPK Electron Co.\n68:91:D0:60:00:00/28\tFemrice\t\n68:91:D0:70:00:00/28\tOmniimpe\tOmniimpex GmbH\n68:91:D0:80:00:00/28\tSolvimus\tsolvimus GmbH\n68:91:D0:90:00:00/28\tQuantex\t\n68:91:D0:A0:00:00/28\tWisecube\t\n68:91:D0:B0:00:00/28\tAltisTec\tAltis Technology\n68:91:D0:C0:00:00/28\tSpraying\tSpraying Systems Co.\n68:91:D0:D0:00:00/28\tFuzhouX-\tFuzhou x-speed information technology Co.,Ltd.\n68:91:D0:E0:00:00/28\tOutstand\tOutstanding Technology Co., Ltd.\n68:92:34\tRuckusWi\tRuckus Wireless\n68:93:61\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n68:94:23\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n68:96:7B\tApple\tApple, Inc.\n68:97:4B\tShenzhen\tShenzhen Costar Electronics Co. Ltd.\n68:97:E8\tSocietyO\tSociety of Motion Picture &amp; Television Engineers\n68:98:61\tBeacon\tBeacon Inc\n68:99:CD\tCisco\tCisco Systems, Inc\n68:9A:B7\tAtelierV\tAtelier Vision Corporation\n68:9C:5E\tAcsipTec\tAcSiP Technology Corp.\n68:9C:70\tApple\tApple, Inc.\n68:9C:E2\tCisco\tCisco Systems, Inc\n68:9E:19\tTexasIns\tTexas Instruments\n68:9F:F0\tZte\tzte corporation\n68:A0:F6\tHuaweiTe\tHuawei Technologies Co.,Ltd\n68:A1:B7\tHonghaoM\tHonghao Mingchuan Technology (Beijing) CO.,Ltd.\n68:A3:78\tFreeboxS\tFreebox Sas\n68:A3:C4\tLiteonTe\tLiteon Technology Corporation\n68:A4:0E\tBshHausg\tBSH Hausgeräte GmbH\n68:A4:7D\tSunCupid\tSun Cupid Technology (HK) LTD\n68:A6:82\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\n68:A8:28\tHuaweiTe\tHuawei Technologies Co.,Ltd\n68:A8:6D\tApple\tApple, Inc.\n68:A8:E1\tWacom\tWacom Co.,Ltd.\n68:AA:D2\tDatecs\tDatecs Ltd.,\n68:AB:1E\tApple\tApple, Inc.\n68:AB:8A\tRfIdeas\tRF IDeas\n68:AE:20\tApple\tApple, Inc.\n68:AF:13\tFuturaMo\tFutura Mobility\n68:B0:94\tInesaEle\tInesa Electron Co.,Ltd\n68:B3:5E\tShenzhen\tShenzhen Neostra Technology Co.Ltd\n68:B4:3A\tWaterfur\tWaterFurnace International, Inc.\n68:B5:99\tHewlettP\tHewlett Packard\n68:B6:FC\tHitronTe\tHitron Technologies. Inc\n68:B8:D9\tActKde\tAct KDE, Inc.\n68:B9:83\tB-Plus\tb-plus GmbH\n68:BC:0C\tCisco\tCisco Systems, Inc\n68:BD:AB\tCisco\tCisco Systems, Inc\n68:C4:4D\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n68:C6:3A\tEspressi\tEspressif Inc.\n68:C9:0B\tTexasIns\tTexas Instruments\n68:CA:00\tOctopus\tOctopus Systems Limited\n68:CA:E4\tCisco\tCisco Systems, Inc\n68:CC:6E\tHuaweiTe\tHuawei Technologies Co.,Ltd\n68:CC:9C\tMineSite\tMine Site Technologies\n68:CD:0F\tUTek\tU Tek Company Limited\n68:CE:4E\tL-3Commu\tL-3 Communications Infrared Products\n68:D1:BA\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\n68:D1:FD\tShenzhen\tShenzhen Trimax Technology Co.,Ltd\n68:D2:47\tPortalis\tPortalis LC\n68:D4:82\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\n68:D9:25\tProsysDe\tProSys Development Services\n68:D9:3C\tApple\tApple, Inc.\n68:DB:54\tPhicommS\tPhicomm (Shanghai) Co., Ltd.\n68:DB:67\tNantongC\tNantong Coship Electronics Co., Ltd\n68:DB:96\tOpwillTe\tOPWILL Technologies CO .,LTD\n68:DB:CA\tApple\tApple, Inc.\n68:DC:E8\tPacketst\tPacketStorm Communications\n68:DD:26\tShanghai\tShanghai Focus Vision Security Technology Co.,Ltd\n68:DF:DD\tXiaomiCo\tXiaomi Communications Co Ltd\n68:E1:66\tPrivate\t\n68:E4:1F\tUnglaube\tUnglaube Identech GmbH\n68:E7:C2\tSamsungE\tSamsung Electronics Co.,Ltd\n68:E8:EB\tLinktelT\tLinktel Technologies Co.,Ltd\n68:EB:AE\tSamsungE\tSamsung Electronics Co.,Ltd\n68:EB:C5\tAngstrem\tAngstrem Telecom\n68:EC:62\tYodoTech\tYODO Technology Corp. Ltd.\n68:EC:C5\tIntelCor\tIntel Corporate\n68:ED:43\tBlackber\tBlackBerry RTS\n68:ED:A4\tShenzhen\tShenzhen Seavo Technology Co.,Ltd\n68:EE:96\tCiscoSpv\tCisco SPVTG\n68:EF:43\tApple\tApple, Inc.\n68:EF:BD\tCisco\tCisco Systems, Inc\n68:F0:6D\tAlongInd\tAlong Industrial Co., Limited\n68:F0:BC\tShenzhen\tShenzhen LiWiFi Technology Co., Ltd\n68:F1:25\tDataCont\tData Controls Inc.\n68:F7:28\tLcfcHefe\tLCFC(HeFei) Electronics Technology co., ltd\n68:F8:95\tRedflow\tRedflow Limited\n68:F9:56\tObjetivo\tObjetivos y Servicio de Valor Añadido\n68:FB:7E\tApple\tApple, Inc.\n68:FB:95\tGeneralp\tGeneralplus Technology Inc.\n68:FC:B3\tNextLeve\tNext Level Security Systems, Inc.\n68:FE:DA\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n68:FE:F7\tApple\tApple, Inc.\n6A:0E:20\tGeofrenz\tGeoFrenzy, Inc\n6A:1F:6C\tIpass\tiPass, Inc.\n6A:40:65\tOpenConn\tOpen Connectivity Foundation\n6A:73:7D\t25gEther\t25G Ethernet Consortium\n6A:B6:F2\tEliTechn\tEli Technology Inc\n6A:E6:4A\tS&OElect\tS&O Electronics (Malaysia) Sdn. Bhd.\n6C:00:6B\tSamsungE\tSamsung Electronics Co.,Ltd\n6C:02:73\tShenzhen\tShenzhen Jin Yun Video Equipment Co., Ltd.\n6C:04:60\tRbhAcces\tRBH Access Technologies Inc.\n6C:05:D5\tEthertro\tEthertronics Inc\n6C:09:0A\tGematica\tGematica Srl\n6C:09:D6\tDigiques\tDigiquest Electronics LTD\n6C:0B:84\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\n6C:0E:0D\tSonyMobi\tSony Mobile Communications Inc\n6C:0E:E6\tChengduX\tChengdu Xiyida Electronic Technology Co,.Ltd\n6C:0F:6A\tJdcTech\tJDC Tech Co., Ltd.\n6C:14:F7\tErhardt+\tErhardt+Leimer GmbH\n6C:15:F9\tNautroni\tNautronix Limited\n6C:16:0E\tShottrac\tShotTracker\n6C:18:11\tDecaturE\tDecatur Electronics\n6C:19:8F\tD-LinkIn\tD-Link International\n6C:19:C0\tApple\tApple, Inc.\n6C:1E:70\tGuangzho\tGuangzhou YBDS IT Co.,Ltd\n6C:1E:90\tHansolTe\tHansol Technics Co., Ltd.\n6C:20:56\tCisco\tCisco Systems, Inc\n6C:21:A2\tAmpakTec\tAMPAK Technology, Inc.\n6C:22:AB\tAinswort\tAinsworth Game Technology\n6C:23:B9\tSonyMobi\tSony Mobile Communications Inc\n6C:24:83\tMicrosof\tMicrosoft Mobile Oy\n6C:25:B9\tBbkEduca\tBbk Educational Electronics Corp.,Ltd.\n6C:27:79\tMicrosof\tMicrosoft Mobile Oy\n6C:29:95\tIntelCor\tIntel Corporate\n6C:2A:CB\tPaxtonAc\tPaxton Access Ltd\n6C:2C:06\tOooNppSy\tOOO NPP Systemotechnika-NN\n6C:2C:DC\tSkyworth\tSkyworth Digital Technology(Shenzhen) Co.,Ltd\n6C:2E:33\tAccelink\tAccelink Technologies Co.,Ltd.\n6C:2E:72\tB&BExpor\tB&B EXPORTING LIMITED\n6C:2E:85\tSagemcom\tSagemcom Broadband SAS\n6C:2F:2C\tSamsungE\tSamsung Electronics Co.,Ltd\n6C:32:DE\tIndieonT\tIndieon Technologies Pvt. Ltd.\n6C:33:A9\tMagicjac\tMagicjack LP\n6C:38:38\tMarkingS\tMarking System Technology Co., Ltd.\n6C:38:45\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n6C:38:A1\tUbeeInte\tUbee Interactive Co., Limited\n6C:39:1D\tBeijingZ\tBeijing ZhongHuaHun Network Information center\n6C:3A:84\tShenzhen\tShenzhen Aero-Startech. Co.Ltd\n6C:3B:6B\tRouterbo\tRouterboard.com\n6C:3B:E5\tHewlettP\tHewlett Packard\n6C:3C:53\tSoundhaw\tSoundHawk Corp\n6C:3E:6D\tApple\tApple, Inc.\n6C:3E:9C\tKeKneste\tKE Knestel Elektronik GmbH\n6C:40:08\tApple\tApple, Inc.\n6C:40:C6\tNimbusDa\tNimbus Data Systems, Inc.\n6C:41:6A\tCisco\tCisco Systems, Inc\n6C:44:18\tZappware\t\n6C:45:98\tAntexEle\tAntex Electronic Corp.\n6C:49:C1\tO2ones\to2ones Co., Ltd.\n6C:4A:39\tBita\t\n6C:4B:7F\tVossloh-\tVossloh-Schwabe Deutschland GmbH\n6C:4B:90\tLiteon\t\n6C:4D:73\tApple\tApple, Inc.\n6C:4E:86\tThirdMil\tThird Millennium Systems Ltd.\n6C:50:4D\tCisco\tCisco Systems, Inc\n6C:54:CD\tLampexEl\tLampex Electronics Limited\n6C:56:97\tAmazonTe\tAmazon Technologies Inc.\n6C:57:79\tAclima\tAclima, Inc.\n6C:59:40\tMercuryC\tMercury Communication Technologies Co.,Ltd.\n6C:59:76\tShanghai\tShanghai Tricheer Technology Co.,Ltd.\n6C:5A:34\tShenzhen\tShenzhen Haitianxiong Electronic Co., Ltd.\n6C:5A:B5\tTclTechn\tTCL Technoly Electronics (Huizhou) Co., Ltd.\n6C:5C:14\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n6C:5C:3D\tIeeeRegi\tIEEE Registration Authority\n6C:5C:3D:00:00:00/28\tShenzhen\tShenZhen Hugsun Technology Co.,Ltd.\n6C:5C:3D:10:00:00/28\tShenzhen\tShenzhen Justek Technology Co., Ltd\n6C:5C:3D:20:00:00/28\tVertivIn\tVertiv Industrial Systems\n6C:5C:3D:30:00:00/28\tKwongMin\tKwong Ming Electrical Manufactory Limited\n6C:5C:3D:40:00:00/28\tHti\tHTI Co., LTD.\n6C:5C:3D:50:00:00/28\tUnitelEn\tUnitel Engineering\n6C:5C:3D:60:00:00/28\tHangzhou\tHangzhou Netease Yanxuan Trading Co.,Ltd\n6C:5C:3D:70:00:00/28\tSoundkin\tSOUNDKING ELECTRONICS&SOUND CO., LTD.\n6C:5C:3D:80:00:00/28\tGuangzho\tGuangzhou Guangri Elevator Industry Co.,Ltd\n6C:5C:3D:90:00:00/28\tIskraura\tIskraUralTEL\n6C:5C:3D:C0:00:00/28\tChoyangP\tchoyang powertech\n6C:5C:DE\tSunrepor\tSunReports, Inc.\n6C:5D:63\tShenzhen\tShenZhen Rapoo Technology Co., Ltd.\n6C:5E:7A\tUbiquito\tUbiquitous Internet Telecom Co., Ltd\n6C:5F:1C\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\n6C:60:EB\tZhiYuanE\tZhi Yuan Electronics Co., Limited\n6C:61:26\tRinicomH\tRinicom Holdings\n6C:62:6D\tMicro-St\tMicro-Star INT'L CO., LTD\n6C:64:1A\tPenguinC\tPenguin Computing\n6C:6C:D3\tCisco\tCisco Systems, Inc\n6C:6E:FE\tCoreLogi\tCore Logic Inc.\n6C:6F:18\tStereota\tStereotaxis, Inc.\n6C:70:39\tNovar\tNovar GmbH\n6C:70:9F\tApple\tApple, Inc.\n6C:71:BD\tEzelinkT\tEzelink Telecom\n6C:71:D9\tAzurewav\tAzureWave Technology Inc.\n6C:72:20\tD-LinkIn\tD-Link International\n6C:72:E7\tApple\tApple, Inc.\n6C:75:0D\tWifisong\t\n6C:76:60\tKyocera\tKyocera Corporation\n6C:81:FE\tMitsuba\tMitsuba Corporation\n6C:83:36\tSamsungE\tSamsung Electronics Co.,Ltd\n6C:83:66\tNanjingS\tNanjing SAC Power Grid Automation Co., Ltd.\n6C:86:86\tTechnoni\tTechnonia\n6C:88:14\tIntelCor\tIntel Corporate\n6C:8B:2F\tZte\tzte corporation\n6C:8C:DB\tOtusTech\tOtus Technologies Ltd\n6C:8D:65\tWireless\tWireless Glue Networks, Inc.\n6C:8D:C1\tApple\tApple, Inc.\n6C:8F:B5\tMicrosof\tMicrosoft Mobile Oy\n6C:90:B1\tSanlogic\tSanLogic Inc\n6C:92:BF\tInspurEl\tInspur Electronic Information Industry Co.,Ltd.\n6C:93:54\tYaojinTe\tYaojin Technology (Shenzhen) Co., LTD.\n6C:94:F8\tApple\tApple, Inc.\n6C:95:22\tScalys\t\n6C:96:CF\tApple\tApple, Inc.\n6C:98:EB\tRiverbed\tRiverbed Technology, Inc.\n6C:99:89\tCisco\tCisco Systems, Inc\n6C:9A:C9\tValentin\tValentine Research, Inc.\n6C:9B:02\tNokia\tNokia Corporation\n6C:9B:C0\tChemopti\tChemoptics Inc.\n6C:9C:E9\tNimbleSt\tNimble Storage\n6C:9C:ED\tCisco\tCisco Systems, Inc\n6C:A1:00\tIntelCor\tIntel Corporate\n6C:A6:82\tEdamInfo\tEDAM information & communications\n6C:A7:5F\tZte\tzte corporation\n6C:A7:80\tNokia\tNokia Corporation\n6C:A7:FA\tYoungboE\tYoungbo Engineering Inc.\n6C:A8:49\tAvaya\tAvaya Inc\n6C:A8:58\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n6C:A9:06\tTelefiel\tTelefield Ltd\n6C:A9:6F\tTranspac\tTransPacket AS\n6C:AA:B3\tRuckusWi\tRuckus Wireless\n6C:AB:31\tApple\tApple, Inc.\n6C:AB:4D\tDigitalP\tDigital Payment Technologies\n6C:AC:60\tVenetex\tVenetex Corp\n6C:AD:3F\tHubbellB\tHubbell Building Automation, Inc.\n6C:AD:EF\tKzBroadb\tKZ Broadband Technologies, Ltd.\n6C:AD:F8\tAzurewav\tAzureWave Technology Inc.\n6C:AE:8B\tIbm\tIBM Corporation\n6C:AF:15\tWebastoS\tWebasto SE\n6C:B0:CE\tNetgear\t\n6C:B2:27\tSonyVide\tSony Video & Sound Products Inc.\n6C:B2:AE\tCisco\tCisco Systems, Inc\n6C:B3:11\tShenzhen\tShenzhen Lianrui Electronics Co.,Ltd\n6C:B3:50\tAnhuiCom\tAnhui comhigher tech co.,ltd\n6C:B4:A7\tLandauer\tLandauer, Inc.\n6C:B5:6B\tHumax\tHUMAX Co., Ltd.\n6C:B6:CA\tDivus\tDIVUS GmbH\n6C:B7:49\tHuaweiTe\tHuawei Technologies Co.,Ltd\n6C:B7:F4\tSamsungE\tSamsung Electronics Co.,Ltd\n6C:B9:C5\tDeltaNet\tDelta Networks, Inc.\n6C:BE:E9\tAlcatel-\tAlcatel-Lucent IPD\n6C:BF:B5\tNoonTech\tNoon Technology Co., Ltd\n6C:C1:47\tXiamenHa\tXiamen Hanin Electronic Technology Co., Ltd\n6C:C1:D2\tArrisGro\tARRIS Group, Inc.\n6C:C2:17\tHewlettP\tHewlett Packard\n6C:C2:6B\tApple\tApple, Inc.\n6C:C3:74\tTexasIns\tTexas Instruments\n6C:C4:D5\tHmdGloba\tHMD Global Oy\n6C:C7:EC\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\n6C:CA:08\tArrisGro\tARRIS Group, Inc.\n6C:D0:32\tLgElectr\tLG Electronics\n6C:D1:46\tSmartekD\tSmartek d.o.o.\n6C:D1:B0\tWingSing\tWing Sing Electronics Hong Kong Limited\n6C:D6:8A\tLgElectr\tLG Electronics (Mobile Communications)\n6C:DC:6A\tPromethe\tPromethean Limited\n6C:DD:30\tCisco\tCisco Systems, Inc\n6C:E0:1E\tModcam\tModcam AB\n6C:E0:B0\tSound4\t\n6C:E3:B6\tNeraTele\tNera Telecommunications Ltd.\n6C:E4:CE\tVilliger\tVilliger Security Solutions AG\n6C:E4:DA\tNecPlatf\tNEC Platforms, Ltd.\n6C:E8:5C\tApple\tApple, Inc.\n6C:E8:73\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n6C:E9:07\tNokia\tNokia Corporation\n6C:E9:83\tGastron\tGastron Co., LTD.\n6C:EB:B2\tDongguan\tDongguan Sen DongLv Electronics Co.,Ltd\n6C:EC:5A\tHonHaiPr\tHon Hai Precision Ind. CO.,Ltd.\n6C:EC:A1\tShenzhen\tShenzhen Clou Electronics Co. Ltd.\n6C:EC:EB\tTexasIns\tTexas Instruments\n6C:ED:51\tNexcontr\tNEXCONTROL Co.,Ltd\n6C:EF:C6\tShenzhen\tShenzhen Twowing Technologies Co.,Ltd.\n6C:F0:49\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\n6C:F3:73\tSamsungE\tSamsung Electronics Co.,Ltd\n6C:F3:7F\tArubaNet\tAruba Networks\n6C:F5:E8\tMooredol\tMooredoll Inc.\n6C:F9:7C\tNanoptix\tNanoptix Inc.\n6C:F9:D2\tChengduP\tChengdu Povodo Electronic Technology Co., Ltd\n6C:FA:58\tAvaya\tAvaya Inc\n6C:FA:89\tCisco\tCisco Systems, Inc\n6C:FA:A7\tAmpakTec\tAMPAK Technology, Inc.\n6C:FD:B9\tProwareT\tProware Technologies Co Ltd.\n6C:FF:BE\tMpbCommu\tMPB Communications Inc.\n70:01:36\tFatekAut\tFATEK Automation Corporation\n70:01:B5\tCisco\tCisco Systems, Inc\n70:02:58\t01db-Met\t01DB-METRAVIB\n70:03:7E\tTechnico\tTechnicolor CH USA Inc.\n70:05:14\tLgElectr\tLG Electronics (Mobile Communications)\n70:06:AC\tEastcomp\tEastcompeace Technology Co., Ltd\n70:0B:01\tSagemcom\tSagemcom Broadband SAS\n70:0B:C0\tDewavTec\tDewav Technology Company\n70:0F:6A\tCisco\tCisco Systems, Inc\n70:0F:C7\tShenzhen\tShenzhen Ikinloop Technology Co.,Ltd.\n70:0F:EC\tPoindus\tPoindus Systems Corp.\n70:10:5C\tCisco\tCisco Systems, Inc\n70:10:6F\tHewlettP\tHewlett Packard Enterprise\n70:11:24\tApple\tApple, Inc.\n70:11:AE\tMusicLif\tMusic Life LTD\n70:14:04\tLiabilit\tLimited Liability Company\n70:14:A6\tApple\tApple, Inc.\n70:16:9F\tEthercat\tEtherCAT Technology Group\n70:18:8B\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n70:19:2F\tHuaweiTe\tHuawei Technologies Co.,Ltd\n70:1A:04\tLiteonTe\tLiteon Technology Corporation\n70:1A:ED\tAdvas\tAdvas Co., Ltd.\n70:1C:E7\tIntelCor\tIntel Corporate\n70:1D:08\t99iotShe\t99IOT Shenzhen co.,ltd\n70:1D:7F\tComtechT\tComtech Technology Co., Ltd.\n70:1D:C4\tNorthsta\tNorthStar Battery Company, LLC\n70:1F:53\tCisco\tCisco Systems, Inc\n70:20:84\tHonHaiPr\tHon Hai Precision Ind. Co., Ltd.\n70:23:93\tFos4x\tfos4X GmbH\n70:25:26\tNokia\t\n70:25:59\tCybertan\tCyberTAN Technology Inc.\n70:26:05\tSonyVisu\tSONY Visual Products Inc.\n70:28:8B\tSamsungE\tSamsung Electronics Co.,Ltd\n70:29:00\tShenzhen\tShenzhen ChipTrip Technology Co,Ltd\n70:2A:7D\tEpspot\tEpSpot AB\n70:2A:D5\tSamsungE\tSamsung Electronics Co.,Ltd\n70:2B:1D\tE-DomusI\tE-Domus International Limited\n70:2C:1F\tWisol\t\n70:2D:84\tI4cInnov\ti4C Innovations\n70:2D:D1\tNewingsC\tNewings Communication CO., LTD.\n70:2E:22\tZte\tzte corporation\n70:2E:D9\tGuangzho\tGuangzhou Shiyuan Electronics Co., Ltd.\n70:2F:4B\tPolyvisi\tPolyVision Inc.\n70:2F:97\tAavaMobi\tAava Mobile Oy\n70:30:18\tAvaya\tAvaya Inc\n70:30:5D\tUbiquoss\tUbiquoss Inc\n70:30:5E\tNanjingZ\tNanjing Zhongke Menglian Information Technology Co.,LTD\n70:31:87\tAcx\tACX GmbH\n70:32:D5\tAthenaWi\tAthena Wireless Communications Inc\n70:38:11\tInvensys\tInvensys Rail\n70:38:B4\tLowTechS\tLow Tech Solutions\n70:38:EE\tAvaya\tAvaya Inc\n70:3A:0E\tArubaNet\tAruba Networks\n70:3A:73\tShenzhen\tShenzhen Sundray Technologies Company Limited\n70:3A:CB\tGoogle\tGoogle, Inc.\n70:3A:D8\tShenzhen\tShenzhen Afoundry Electronic Co., Ltd\n70:3C:03\tRadiant\tRadiAnt Co.,Ltd\n70:3C:39\tSeawingK\tSEAWING Kft\n70:3D:15\tHangzhou\tHangzhou H3C Technologies Co., Limited\n70:3E:AC\tApple\tApple, Inc.\n70:41:B7\tEdwardsL\tEdwards Lifesciences LLC\n70:46:42\tChyngHon\tChyng Hong Electronic Co., Ltd.\n70:47:E9\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n70:48:0F\tApple\tApple, Inc.\n70:4A:AE\tXstreamF\tXstream Flow (Pty) Ltd\n70:4A:E4\tRinstrum\tRinstrum Pty Ltd\n70:4C:A5\tFortinet\tFortinet, Inc.\n70:4C:ED\tTmrg\tTMRG, Inc.\n70:4D:7B\tAsustekC\tASUSTek COMPUTER INC.\n70:4E:01\tKwangwon\tKwangwon Tech Co., Ltd.\n70:4E:66\tShenzhen\tShenzhen Fast Technologies Co.,Ltd\n70:4F:08\tShenzhen\tShenzhen Huisheng Information Technology Co., Ltd.\n70:4F:57\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n70:4F:B8\tArrisGro\tARRIS Group, Inc.\n70:50:AF\tBskyb\tBSkyB Ltd\n70:52:C5\tAvaya\tAvaya Inc\n70:53:3F\tAlfaInst\tAlfa Instrumentos Eletronicos Ltda.\n70:54:B4\tVestelEl\tVestel Elektronik San ve Tic. A.Ş.\n70:54:D2\tPegatron\tPegatron Corporation\n70:54:F5\tHuaweiTe\tHuawei Technologies Co.,Ltd\n70:55:F8\tCerebras\tCerebras Systems Inc\n70:56:81\tApple\tApple, Inc.\n70:58:12\tPanasoni\tPanasonic Corporation AVC Networks Company\n70:58:96\tInshowTe\tInShow Technology\n70:59:57\tMedallio\tMedallion Instrumentation Systems\n70:59:86\tOooTtv\tOoo Ttv\n70:5A:0F\tHewlettP\tHewlett Packard\n70:5A:9E\tTechnico\tTechnicolor CH USA Inc.\n70:5A:AC\tSamsungE\tSamsung Electronics Co.,Ltd\n70:5A:B6\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\n70:5B:2E\tM2commun\tM2Communication Inc.\n70:5C:AD\tKonamiGa\tKonami Gaming Inc\n70:5D:CC\tEfmNetwo\tEFM Networks\n70:5E:AA\tActionTa\tAction Target, Inc.\n70:60:DE\tLavision\tLaVision GmbH\n70:61:73\tCalantec\tCalantec GmbH\n70:62:B8\tD-LinkIn\tD-Link International\n70:64:17\tOrbisTec\tOrbis Tecnologia Electrica S.A.\n70:65:82\tSuzhouHa\tSuzhou Hanming Technologies Co., Ltd.\n70:65:A3\tKandaoLi\tKandao lightforge Co., Ltd.\n70:66:1B\tSonova\tSonova AG\n70:68:79\tSaijoDen\tSaijo Denki International Co., Ltd.\n70:69:5A\tCisco\tCisco Systems, Inc\n70:6B:B9\tCisco\tCisco Systems, Inc\n70:6D:15\tCisco\tCisco Systems, Inc\n70:6D:EC\tWifi-Sof\tWifi-soft LLC\n70:6E:6D\tCisco\tCisco Systems, Inc\n70:6F:81\tPrivate\t\n70:70:0D\tApple\tApple, Inc.\n70:70:4C\tPurpleCo\tPurple Communications, Inc\n70:70:8B\tCisco\tCisco Systems, Inc\n70:71:B3\tBrain\tBrain Corporation\n70:71:BC\tPegatron\tPegatron Corporation\n70:72:0D\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\n70:72:3C\tHuaweiTe\tHuawei Technologies Co.,Ltd\n70:72:CF\tEdgecore\tEdgeCore Networks\n70:73:CB\tApple\tApple, Inc.\n70:76:30\tArrisGro\tARRIS Group, Inc.\n70:76:DD\tOxyguard\tOxyguard International A/S\n70:76:F0\tLevelone\tLevelOne Communications (India) Private Limited\n70:76:FF\tKerlink\t\n70:77:81\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n70:78:8B\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n70:79:38\tWuxiZhan\tWuxi Zhanrui Electronic Technology Co.,LTD\n70:79:90\tHuaweiTe\tHuawei Technologies Co.,Ltd\n70:79:B3\tCisco\tCisco Systems, Inc\n70:7B:E8\tHuaweiTe\tHuawei Technologies Co.,Ltd\n70:7C:18\tAdataTec\tADATA Technology Co., Ltd\n70:7C:69\tAvaya\tAvaya Inc\n70:7D:95\tShenzhen\tShenzhen City LinwlanTechnology Co. Ltd.\n70:7D:B9\tCisco\tCisco Systems, Inc\n70:7E:43\tArrisGro\tARRIS Group, Inc.\n70:7E:DE\tNastec\tNastec Ltd.\n70:81:05\tCisco\tCisco Systems, Inc\n70:81:EB\tApple\tApple, Inc.\n70:82:0E\tAsElectr\tas electronics GmbH\n70:82:8E\tOleumtec\tOleumTech Corporation\n70:85:C2\tAsrockIn\tASRock Incorporation\n70:85:C6\tArrisGro\tARRIS Group, Inc.\n70:86:C1\tTexasIns\tTexas Instruments\n70:88:4D\tJapanRad\tJapan Radio Co., Ltd.\n70:88:6B:00:00:00/28\tVeracity\tVeracity UK Ltd\n70:88:6B:10:00:00/28\tBitfinde\tBitfinder Inc\n70:88:6B:20:00:00/28\tCvnet\t\n70:88:6B:40:00:00/28\tHori\tHori Co., Ltd.\n70:88:6B:50:00:00/28\tChengduO\tChengdu Ophylink Communication Technology Ltd.\n70:88:6B:60:00:00/28\tChurchDw\tChurch & Dwight Co., Inc.\n70:88:6B:80:00:00/28\tCableMat\tCable Matters Inc.\n70:88:6B:90:00:00/28\tShenzhen\tShenzhen Coolhear Information Technology Co., Ltd.\n70:88:6B:A0:00:00/28\tRhxtuneT\tRHXTune Technology Co.,Ltd\n70:88:6B:B0:00:00/28\tBeijingS\tBeijing Strongleader Science & Technology Co., Ltd.\n70:88:6B:C0:00:00/28\tMax4g\tMAX4G, Inc.\n70:89:CC\tChinaMob\tChina Mobile Group Device Co.,Ltd.\n70:8A:09\tHuaweiTe\tHuawei Technologies Co.,Ltd\n70:8B:78\tCitygrow\tcitygrow technology co., ltd\n70:8B:CD\tAsustekC\tASUSTek COMPUTER INC.\n70:8D:09\tNokia\tNokia Corporation\n70:91:8F\tWeber-St\tWeber-Stephen Products LLC\n70:91:F3\tUniversa\tUniversal Electronics, Inc.\n70:93:83\tIntellig\tIntelligent Optical Network High Tech CO.,LTD.\n70:93:F8\tSpaceMon\tSpace Monkey, Inc.\n70:97:56\tHappyele\tHappyelectronics Co.,Ltd\n70:99:1C\tShenzhen\tShenzhen Honesty Electronics Co.,Ltd\n70:9A:0B\tItalianI\tItalian Institute of Technology\n70:9B:A5\tShenzhen\tShenzhen Y&D Electronics Co.,LTD.\n70:9B:FC\tBryton\tBryton Inc.\n70:9C:8F\tNero\tNero AG\n70:9E:29\tSonyInte\tSony Interactive Entertainment Inc.\n70:9E:86\tX6d\tX6D Limited\n70:9F:2D\tZte\tzte corporation\n70:9F:A9\tTecnoMob\tTecno Mobile Limited\n70:A1:91\tTrendset\tTrendsetter Medical, LLC\n70:A2:B3\tApple\tApple, Inc.\n70:A4:1C\tAdvanced\tAdvanced Wireless Dynamics S.L.\n70:A6:6A\tProxDyna\tProx Dynamics AS\n70:A8:4C\tMonad\tMONAD., Inc.\n70:A8:E3\tHuaweiTe\tHuawei Technologies Co.,Ltd\n70:AA:B2\tBlackber\tBlackBerry RTS\n70:AD:54\tMalvernI\tMalvern Instruments Ltd\n70:AF:24\tTpVision\tTP Vision Belgium NV\n70:AF:25\tNishiyam\tNishiyama Industry Co.,LTD.\n70:AF:6A\tShenzhen\tShenzhen Fenglian Technology Co., Ltd.\n70:B0:35\tShenzhen\tShenzhen Zowee Technology Co., Ltd\n70:B0:8C\tShenouCo\tShenou Communication Equipment Co.,Ltd\n70:B1:4E\tArrisGro\tARRIS Group, Inc.\n70:B2:65\tHiltronS\tHiltron s.r.l.\n70:B3:D5\tIeeeRegi\tIEEE Registration Authority\n70:B3:D5:00:10:00/36\tSorediTo\tSOREDI touch systems GmbH\n70:B3:D5:00:20:00/36\tGogoBa\tGogo BA\n70:B3:D5:00:70:00/36\tSensoneo\t\n70:B3:D5:00:90:00/36\tHolidayc\tHolidayCoro\n70:B3:D5:00:A0:00/36\tFujicom\tFUJICOM Co.,Ltd.\n70:B3:D5:00:D0:00/36\tScrona\tScrona AG\n70:B3:D5:00:E0:00/36\tMagosys\tMagosys Systems LTD\n70:B3:D5:01:00:00/36\tHanwaEle\tHanwa Electronic Ind.Co.,Ltd.\n70:B3:D5:01:10:00/36\tSumerDat\tSumer Data S.L\n70:B3:D5:01:20:00/36\tKstTechn\tKST technology\n70:B3:D5:01:40:00/36\tFrakoKon\tFRAKO Kondensatoren und Anlagenbau GmbH\n70:B3:D5:01:50:00/36\tEnElectr\tEN ElectronicNetwork Hamburg GmbH\n70:B3:D5:01:60:00/36\tGuardian\tGuardian Controls International Ltd\n70:B3:D5:01:A0:00/36\tCubroAcr\tCubro Acronet GesmbH\n70:B3:D5:01:C0:00/36\tKumuNetw\tKumu Networks\n70:B3:D5:01:D0:00/36\tWeiglEle\tWeigl Elektronik & Mediaprojekte\n70:B3:D5:01:E0:00/36\tEpointEm\tePOINT Embedded Computing Limited\n70:B3:D5:01:F0:00/36\tSpxFlowT\tSPX Flow Technology BV\n70:B3:D5:02:20:00/36\tRavelin\tRavelin Ltd\n70:B3:D5:02:30:00/36\tCambridg\tCambridge Pixel\n70:B3:D5:02:40:00/36\tG+DMobil\tG+D Mobile Security\n70:B3:D5:02:50:00/36\tElsuhdNe\tElsuhd Net Ltd Co.\n70:B3:D5:02:60:00/36\tTelstra\t\n70:B3:D5:02:70:00/36\tRedcapSo\tRedcap Solutions s.r.o.\n70:B3:D5:02:80:00/36\tAt-Autom\tAT-Automation Technology GmbH\n70:B3:D5:02:90:00/36\tMarimoEl\tMarimo electronics Co.,Ltd.\n70:B3:D5:02:A0:00/36\tBaeSurfa\tBAE Systems Surface Ships Limited\n70:B3:D5:02:D0:00/36\tNexttecS\tNEXTtec srl\n70:B3:D5:02:E0:00/36\tMonnit\tMonnit Corporation\n70:B3:D5:02:F0:00/36\tLegendai\tLegendaire Technology Co., Ltd.\n70:B3:D5:03:00:00/36\tTresentT\tTresent Technologies\n70:B3:D5:03:10:00/36\tShenzhen\tShenzhen Gaona Electronic Co.Ltd\n70:B3:D5:03:20:00/36\tIfreecom\tiFreecomm Technology Co., Ltd\n70:B3:D5:03:30:00/36\tSailmonB\tSailmon BV\n70:B3:D5:03:50:00/36\tHkw-Elek\tHKW-Elektronik GmbH\n70:B3:D5:03:70:00/36\tEiffageE\tEiffage Energie Electronique\n70:B3:D5:03:90:00/36\tDowooDig\tDoWoo Digitech\n70:B3:D5:03:B0:00/36\tSsl-Elec\tSSL - Electrical Aerospace Ground Equipment Section\n70:B3:D5:03:C0:00/36\tUltimate\tUltimate Software\n70:B3:D5:03:D0:00/36\tQuercusT\tQuercus Technologies, S.L.\n70:B3:D5:03:F0:00/36\tElesar\tElesar Limited\n70:B3:D5:04:00:00/36\tSavari\tSavari Inc\n70:B3:D5:04:10:00/36\tFibernet\tFibernet Ltd\n70:B3:D5:04:20:00/36\tCovelozT\tCoveloz Technologies Inc.\n70:B3:D5:04:40:00/36\tDonElect\tDon Electronics Ltd\n70:B3:D5:04:60:00/36\tShenzhen\tShenzhen Rihuida Electronics Co,. Ltd\n70:B3:D5:04:90:00/36\tAppEngin\tAPP Engineering, Inc.\n70:B3:D5:04:A0:00/36\tGeckoRob\tGecko Robotics Inc\n70:B3:D5:04:B0:00/36\tDreamISy\tDream I System Co., Ltd\n70:B3:D5:04:C0:00/36\tMapnaGro\tmapna group\n70:B3:D5:04:D0:00/36\tSiconSrl\tSicon srl\n70:B3:D5:04:E0:00/36\tHugel\tHUGEL GmbH\n70:B3:D5:05:00:00/36\tCompusig\tCompusign Systems Pty Ltd\n70:B3:D5:05:20:00/36\tSudoPrem\tSudo Premium Engineering\n70:B3:D5:05:40:00/36\tGroupeer\tGroupeer Technologies\n70:B3:D5:05:80:00/36\tTelinkSe\tTelink Semiconductor CO, Limtied, Taiwan\n70:B3:D5:05:90:00/36\tPro-Digi\tPro-Digital Projetos Eletronicos Ltda\n70:B3:D5:05:A0:00/36\tUniContr\tUni Control System Sp. z o. o.\n70:B3:D5:05:D0:00/36\tKoms\tKOMS Co.,Ltd.\n70:B3:D5:05:E0:00/36\tVitec\t\n70:B3:D5:05:F0:00/36\tUnisorMu\tUnisor Multisystems Ltd\n70:B3:D5:06:10:00/36\tIntellid\tIntelliDesign Pty Ltd\n70:B3:D5:06:20:00/36\tRmMichae\tRM Michaelides Software & Elektronik GmbH\n70:B3:D5:06:30:00/36\tPooldigi\tPoolDigital GmbH & Co. KG\n70:B3:D5:06:60:00/36\tNorthPol\tNorth Pole Engineering, Inc.\n70:B3:D5:06:90:00/36\tOndemand\tONDEMAND LABORATORY Co., Ltd.\n70:B3:D5:06:B0:00/36\tU-Tech\t\n70:B3:D5:06:C0:00/36\tApptek\t\n70:B3:D5:06:F0:00/36\tBeijingD\tBeijing Daswell Science and Technology Co.LTD\n70:B3:D5:07:00:00/36\tLumiplan\tLumiplan Duhamel\n70:B3:D5:07:30:00/36\tLiteonTe\tLiteon Technology Corporation\n70:B3:D5:07:50:00/36\tMo-SysEn\tMo-Sys Engineering Ltd\n70:B3:D5:07:70:00/36\tInaccess\tInAccess Networks SA\n70:B3:D5:07:80:00/36\tOrbiwise\tOrbiWise SA\n70:B3:D5:07:90:00/36\tCheckbil\tCheckBill Co,Ltd.\n70:B3:D5:07:A0:00/36\tZaoZeo\tZao Zeo\n70:B3:D5:07:B0:00/36\tWallbe\twallbe GmbH\n70:B3:D5:07:D0:00/36\tPanorami\tPanoramic Power\n70:B3:D5:07:E0:00/36\tEntecEle\tENTEC Electric & Electronic CO., LTD\n70:B3:D5:07:F0:00/36\tAbalance\tAbalance Corporation\n70:B3:D5:08:10:00/36\tIstTechn\tIST Technologies (SHENZHEN) Limited\n70:B3:D5:08:30:00/36\tZaoZeo\tZao Zeo\n70:B3:D5:08:40:00/36\tRakoCont\tRako Controls Ltd\n70:B3:D5:08:50:00/36\tHumanInt\tHuman Systems Integration\n70:B3:D5:08:60:00/36\tHustyMSt\tHusty M.Styczen J.Hupert Sp.J.\n70:B3:D5:08:70:00/36\tTempusFu\tTempus Fugit Consoles bvba\n70:B3:D5:08:80:00/36\tOptiscan\tOptiScan Biomedical Corp.\n70:B3:D5:08:A0:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n70:B3:D5:08:D0:00/36\tCloverEl\tClover Electronics Technology Co., Ltd.\n70:B3:D5:08:E0:00/36\tBeijingC\tBeijing CONvision Technology Co.,Ltd\n70:B3:D5:08:F0:00/36\tDeuta-We\tDEUTA-WERKE GmbH\n70:B3:D5:09:00:00/36\tPowercra\tPowercraft Electronics Pvt. Ltd.\n70:B3:D5:09:10:00/36\tProfitt\tPROFITT Ltd\n70:B3:D5:09:20:00/36\tInomedMe\tinomed Medizintechnik GmbH\n70:B3:D5:09:40:00/36\tCircuitl\tCircuitlink Pty Ltd\n70:B3:D5:09:60:00/36\tHavelsan\tHAVELSAN A.Ş.\n70:B3:D5:09:70:00/36\tAvantTec\tAvant Technologies\n70:B3:D5:09:90:00/36\tSchwer+K\tSchwer+Kopka GmbH\n70:B3:D5:09:A0:00/36\tAkseSrl\tAkse srl\n70:B3:D5:09:B0:00/36\tJacarta\tJacarta Ltd\n70:B3:D5:09:D0:00/36\tP&S\tP&S GmbH\n70:B3:D5:09:E0:00/36\tMobiprom\tMobiPromo\n70:B3:D5:09:F0:00/36\tComtechK\tCOMTECH Kft.\n70:B3:D5:0A:00:00/36\tCominfo\tCominfo, Inc.\n70:B3:D5:0A:10:00/36\tPtnElect\tPTN Electronics Limited\n70:B3:D5:0A:20:00/36\tTechsign\tTechSigno srl\n70:B3:D5:0A:30:00/36\tSolace\tSolace Systems Inc.\n70:B3:D5:0A:40:00/36\tCommunic\tCommunication Technology Ltd.\n70:B3:D5:0A:50:00/36\tFuelcell\tFuelcellpower\n70:B3:D5:0A:60:00/36\tPaConsul\tPa Consulting Services\n70:B3:D5:0A:80:00/36\tSymetric\tSymetrics Industries d.b.a. Extant Aerospace\n70:B3:D5:0A:90:00/36\tProconne\tProConnections, Inc.\n70:B3:D5:0A:A0:00/36\tWanco\tWanco Inc\n70:B3:D5:0A:B0:00/36\tKstTechn\tKST technology\n70:B3:D5:0A:C0:00/36\tRobocore\tRoboCore Tecnologia\n70:B3:D5:0A:E0:00/36\tNorsatIn\tNorsat International Inc.\n70:B3:D5:0A:F0:00/36\tKmtronic\tKMtronic ltd\n70:B3:D5:0B:00:00/36\tRavenDes\tRaven Systems Design, Inc\n70:B3:D5:0B:20:00/36\tNdbTechn\tndb technologies\n70:B3:D5:0B:30:00/36\tReonixAu\tReonix Automation\n70:B3:D5:0B:40:00/36\tAver\t\n70:B3:D5:0B:60:00/36\tLandisGy\tLandis Gyr\n70:B3:D5:0B:80:00/36\tLucas-Nü\tLucas-Nülle GmbH\n70:B3:D5:0B:90:00/36\tEasyDigi\tEasy Digital Concept\n70:B3:D5:0B:A0:00/36\tAyreAcou\tAyre Acoustics, Inc.\n70:B3:D5:0B:C0:00/36\tPractica\tPractical Software Studio LLC\n70:B3:D5:0B:D0:00/36\tAndium\t\n70:B3:D5:0B:E0:00/36\tChamsys\tChamSys Ltd\n70:B3:D5:0B:F0:00/36\tDenAutom\tDen Automation\n70:B3:D5:0C:00:00/36\tMoluTech\tMolu Technology Inc., LTD.\n70:B3:D5:0C:10:00/36\tNexusTec\tNexus Technologies Pty Ltd\n70:B3:D5:0C:20:00/36\tLookEasy\tLook Easy International Limited\n70:B3:D5:0C:40:00/36\tTiama\t\n70:B3:D5:0C:50:00/36\tPrecitec\tPrecitec Optronik GmbH\n70:B3:D5:0C:60:00/36\tEmbedded\tEmbedded Arts Co., Ltd.\n70:B3:D5:0C:80:00/36\tFinRobot\tFin Robotics Inc\n70:B3:D5:0C:90:00/36\tLineageP\tLineage Power Pvt Ltd.,\n70:B3:D5:0C:D0:00/36\tAmlOcean\tAML Oceanographic\n70:B3:D5:0C:E0:00/36\tInnomind\tInnominds Software Inc\n70:B3:D5:0D:10:00/36\tCommonSe\tCommon Sense Monitoring Solutions Ltd.\n70:B3:D5:0D:20:00/36\tUnmanned\tUnmanned Spa\n70:B3:D5:0D:30:00/36\tTsatAs\tTsat As\n70:B3:D5:0D:40:00/36\tGuangzho\tGuangzhou Male Industrial Animation Technology Co.,Ltd.\n70:B3:D5:0D:60:00/36\tTattileS\tTattile Srl\n70:B3:D5:0D:70:00/36\tRussianT\tRussian Telecom Equipment Company\n70:B3:D5:0D:80:00/36\tLaserIma\tLaser Imagineering GmbH\n70:B3:D5:0D:90:00/36\tBrechbue\tBrechbuehler AG\n70:B3:D5:0D:A0:00/36\tAquavisi\tAquavision Distribution Ltd\n70:B3:D5:0D:C0:00/36\tTalleres\tTalleres de Escoriaza\n70:B3:D5:0D:E0:00/36\tGrossenb\tGrossenbacher Systeme AG\n70:B3:D5:0D:F0:00/36\tBEASa\tB.E.A. sa\n70:B3:D5:0E:00:00/36\tPlcis\t\n70:B3:D5:0E:10:00/36\tMiwaveCo\tMiWave Consulting, LLC\n70:B3:D5:0E:30:00/36\tSintauSr\tSinTau SrL\n70:B3:D5:0E:50:00/36\tDeltaSol\tDelta Solutions LLC\n70:B3:D5:0E:60:00/36\tNasdaq\t\n70:B3:D5:0E:80:00/36\tGrossenb\tGrossenbacher Systeme AG\n70:B3:D5:0E:A0:00/36\tAevBroad\tAEV Broadcast Srl\n70:B3:D5:0E:C0:00/36\tAcsMotio\tAcs Motion Control\n70:B3:D5:0E:E0:00/36\tPictureE\tPicture Elements, Inc.\n70:B3:D5:0E:F0:00/36\tDexteraL\tDextera Labs\n70:B3:D5:0F:00:00/36\tAvionica\t\n70:B3:D5:0F:10:00/36\tBeijingO\tBeijing One City Science & Technology Co., LTD\n70:B3:D5:0F:30:00/36\tMonsoonr\tMonsoonRF, Inc.\n70:B3:D5:0F:70:00/36\tBespoon\t\n70:B3:D5:0F:80:00/36\tSpecialS\tSpecial Services Group, LLC\n70:B3:D5:0F:A0:00/36\tInsiderf\tInsideRF Co., Ltd.\n70:B3:D5:0F:B0:00/36\tCygnusLl\tCygnus LLC\n70:B3:D5:0F:C0:00/36\tVitalcar\tvitalcare\n70:B3:D5:0F:E0:00/36\tVocality\tVocality International Ltd\n70:B3:D5:0F:F0:00/36\tInternet\tInternet Protocolo Logica Sl\n70:B3:D5:10:00:00/36\tGupsy\tGupsy GmbH\n70:B3:D5:10:30:00/36\tHanyoung\tHanyoung Nux Co.,Ltd\n70:B3:D5:10:40:00/36\tPlumSpZO\tPlum sp. z o.o\n70:B3:D5:10:50:00/36\tBeijingN\tBeijing Nacao Technology Co., Ltd.\n70:B3:D5:10:60:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:10:80:00/36\tTexCompu\tTex Computer Srl\n70:B3:D5:10:90:00/36\tDitestFa\tDiTEST Fahrzeugdiagnose GmbH\n70:B3:D5:10:A0:00/36\tSeasonDe\tSeason Design Technology\n70:B3:D5:10:C0:00/36\tVocality\tVocality International Ltd\n70:B3:D5:10:E0:00/36\tColorime\tColorimetry Research, Inc\n70:B3:D5:10:F0:00/36\tNeqis\t\n70:B3:D5:11:20:00/36\tDitestFa\tDiTEST Fahrzeugdiagnose GmbH\n70:B3:D5:11:40:00/36\tProjectH\tProject H Pty Ltd\n70:B3:D5:11:50:00/36\tWelltec\tWelltec Corp.\n70:B3:D5:11:90:00/36\tPrivate\t\n70:B3:D5:11:B0:00/36\tHoseotel\tHoseoTelnet Inc...\n70:B3:D5:11:C0:00/36\tSamriddi\tSamriddi Automations Pvt. Ltd.\n70:B3:D5:11:D0:00/36\tDaktonMi\tDakton Microlabs LLC\n70:B3:D5:11:F0:00/36\tGeppetto\tGeppetto Electronics\n70:B3:D5:12:00:00/36\tGspSprac\tGSP Sprachtechnologie GmbH\n70:B3:D5:12:20:00/36\tHenriHol\tHenri Systems Holland bv\n70:B3:D5:12:30:00/36\tAmfitech\tAmfitech ApS\n70:B3:D5:12:40:00/36\tForschun\tForschungs- und Transferzentrum Leipzig e.V.\n70:B3:D5:12:50:00/36\tSecuroly\tSecurolytics, Inc.\n70:B3:D5:12:70:00/36\tVitec\t\n70:B3:D5:12:90:00/36\tOooMicro\tOOO Microlink-Svyaz\n70:B3:D5:12:B0:00/36\tRicElect\tRIC Electronics\n70:B3:D5:12:C0:00/36\tCielleSR\tCielle S.R.L.\n70:B3:D5:12:E0:00/36\tGreenflu\tGreenFlux\n70:B3:D5:12:F0:00/36\tDsp4you\tDSP4YOU LTd\n70:B3:D5:13:10:00/36\tInovaDes\tInova Design Solutions Ltd\n70:B3:D5:13:20:00/36\tHagenukK\tHagenuk KMT Kabelmesstechnik GmbH\n70:B3:D5:13:30:00/36\tVidisys\tVidisys GmbH\n70:B3:D5:13:40:00/36\tConjingN\tConjing Networks Inc.\n70:B3:D5:13:50:00/36\tDorletSa\tDorlet Sau\n70:B3:D5:13:60:00/36\tMiguelCo\tMiguel Corporate Services Pte Ltd\n70:B3:D5:13:80:00/36\tSmitecSP\tSMITEC S.p.A.\n70:B3:D5:13:90:00/36\tTunstall\tTunstall A/S\n70:B3:D5:13:A0:00/36\tDeuta-We\tDEUTA-WERKE GmbH\n70:B3:D5:13:B0:00/36\tSienna\tSienna Corporation\n70:B3:D5:13:C0:00/36\tDetec\tDetec Systems Ltd\n70:B3:D5:13:D0:00/36\tElsistSr\tElsist Srl\n70:B3:D5:13:E0:00/36\tStaraInd\tStara S/A Indústria de Implementos Agrícolas\n70:B3:D5:13:F0:00/36\tFarmobil\tFarmobile\n70:B3:D5:14:00:00/36\tVirtaLab\tVirta Laboratories, Inc.\n70:B3:D5:14:10:00/36\tMTSRL\tM.T. S.R.L.\n70:B3:D5:14:20:00/36\tDaveSrl\tDave Srl\n70:B3:D5:14:40:00/36\tGsElektr\tGS Elektromedizinsiche Geräte G. Stemple GmbH\n70:B3:D5:14:50:00/36\tSiconSrl\tSicon srl\n70:B3:D5:14:60:00/36\t3cityEle\t3City Electronics\n70:B3:D5:14:70:00/36\tRomoWind\tROMO Wind A/S\n70:B3:D5:14:80:00/36\tPowerEle\tPower Electronics Espana, S.L.\n70:B3:D5:14:90:00/36\tEleven-X\t\n70:B3:D5:14:A0:00/36\tExsensTe\tExSens Technology (Pty) Ltd.\n70:B3:D5:14:C0:00/36\tCrde\t\n70:B3:D5:14:D0:00/36\t2-Observ\t2-Observe\n70:B3:D5:14:E0:00/36\tInnosoni\tInnosonix GmbH\n70:B3:D5:14:F0:00/36\tMobileDe\tMobile Devices Unlimited\n70:B3:D5:15:20:00/36\tXpedPty\tXped Corporation Pty Ltd\n70:B3:D5:15:30:00/36\tSchneide\tSchneider Electric Motion USA\n70:B3:D5:15:40:00/36\tWalkHori\tWalk Horizon Technology (Beijing) Co., Ltd.\n70:B3:D5:15:C0:00/36\tWoodsHol\tWoods Hole Oceanographic Institution\n70:B3:D5:15:D0:00/36\tVtronPty\tVtron Pty Ltd\n70:B3:D5:15:E0:00/36\tSeasonEl\tSeason Electronics Ltd\n70:B3:D5:15:F0:00/36\tSavroni̇\tSAVRONİK ELEKTRONİK\n70:B3:D5:16:10:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n70:B3:D5:16:20:00/36\tEspaiDeP\tESPAI DE PRODUCCIÓ I ELECTRÓNI\n70:B3:D5:16:30:00/36\tBharatHe\tBharat Heavy Electricals Limited\n70:B3:D5:16:40:00/36\tTokyoDra\tTokyo Drawing Ltd.\n70:B3:D5:16:60:00/36\tSerialIm\tSerial Image Inc.\n70:B3:D5:16:70:00/36\tEiden\tEiden Co.,Ltd.\n70:B3:D5:16:80:00/36\tBiwaveTe\tBiwave Technologies, Inc.\n70:B3:D5:16:90:00/36\tServiceP\tService Plus LLC\n70:B3:D5:16:B0:00/36\tIotEngin\tIOT Engineering\n70:B3:D5:16:C0:00/36\tOcean\t\n70:B3:D5:16:E0:00/36\tJemacSwe\tJemac Sweden AB\n70:B3:D5:16:F0:00/36\tNimbelin\tNimbeLink Corp\n70:B3:D5:17:20:00/36\tLumigrow\tLumiGrow, Inc\n70:B3:D5:17:30:00/36\tNational\tNational TeleConsultants LLC\n70:B3:D5:17:40:00/36\tCarlsonW\tCarlson Wireless Technologies Inc.\n70:B3:D5:17:50:00/36\tAkribis\tAkribis Systems\n70:B3:D5:17:80:00/36\tGamberJo\tGamber Johnson-LLC\n70:B3:D5:17:90:00/36\tAltranUk\tAltran Uk\n70:B3:D5:17:A0:00/36\tGencoa\tGencoa Ltd\n70:B3:D5:17:B0:00/36\tVistecEl\tVistec Electron Beam GmbH\n70:B3:D5:17:D0:00/36\tEntechEl\tEntech Electronics\n70:B3:D5:17:E0:00/36\tOculiVis\tOculi Vision\n70:B3:D5:17:F0:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n70:B3:D5:18:00:00/36\tLhaPty\tLHA Systems (Pty) Ltd\n70:B3:D5:18:10:00/36\tTaskSist\tTask Sistemas\n70:B3:D5:18:20:00/36\tKitronUa\tKitron UAB\n70:B3:D5:18:30:00/36\tEvcoSPA\tEvco S.p.a.\n70:B3:D5:18:40:00/36\tXv360Opt\tXV360 Optical Information Systems Ltd.\n70:B3:D5:18:50:00/36\tR&DGran-\tR&D Gran-System-S LLC\n70:B3:D5:18:60:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n70:B3:D5:18:70:00/36\tElektron\tElektronik & Präzisionsbau Saalfeld GmbH\n70:B3:D5:18:80:00/36\tBirketEn\tBirket Engineering\n70:B3:D5:18:90:00/36\tDaveSrl\tDave Srl\n70:B3:D5:18:B0:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:18:C0:00/36\tCmcIndus\tCMC Industrial Electronics Ltd\n70:B3:D5:18:D0:00/36\tForoTel\tForo Tel\n70:B3:D5:18:E0:00/36\tNipponSe\tNippon Seiki Co., Ltd.\n70:B3:D5:19:00:00/36\tFantomWi\tFantom Wireless, Inc.\n70:B3:D5:19:20:00/36\tAspt\tAspt, Inc.\n70:B3:D5:19:40:00/36\tHustyMSt\tHusty M.Styczen J.Hupert Sp.J.\n70:B3:D5:19:70:00/36\tLattechP\tLattech Systems Pty Ltd\n70:B3:D5:19:B0:00/36\tGlobalTe\tGlobal Technical Systems\n70:B3:D5:19:C0:00/36\tKubu\tKubu, Inc.\n70:B3:D5:19:E0:00/36\tJ-Factor\tJ-Factor Embedded Technologies\n70:B3:D5:19:F0:00/36\tKoizumiL\tKoizumi Lighting Technology Corp.\n70:B3:D5:1A:00:00/36\tUfatech\tUfatech Ltd\n70:B3:D5:1A:10:00/36\tHmicro\tHMicro Inc\n70:B3:D5:1A:30:00/36\tTelairit\tTelairity Semiconductor\n70:B3:D5:1A:50:00/36\tMetronic\tMETRONIC APARATURA KONTROLNO - POMIAROWA\n70:B3:D5:1A:60:00/36\tRobotelf\tRobotelf Technologies (Chengdu) Co., Ltd.\n70:B3:D5:1A:80:00/36\tStcRainb\tSTC Rainbow Ltd.\n70:B3:D5:1A:90:00/36\tOceanix\tOceanix Inc.\n70:B3:D5:1A:B0:00/36\tAccessCo\tAccess Control Systems JSC\n70:B3:D5:1A:C0:00/36\tSvpBroad\tSVP Broadcast Microwave S.L.\n70:B3:D5:1A:D0:00/36\tTechworl\tTechworld Industries Ltd\n70:B3:D5:1A:F0:00/36\tTeenageE\tTeenage Engineering AB\n70:B3:D5:1B:40:00/36\t5nines\t\n70:B3:D5:1B:50:00/36\tStarbrid\tStarBridge, Inc.\n70:B3:D5:1B:60:00/36\tDacomWes\tDACOM West GmbH\n70:B3:D5:1B:80:00/36\tOes\tOES Inc.\n70:B3:D5:1B:90:00/36\tRelisteG\tRELISTE Ges.m.b.H.\n70:B3:D5:1B:B0:00/36\tEfentoTP\tEFENTO T P SZYDŁOWSKI K ZARĘBA SPÓŁKA JAWNA\n70:B3:D5:1B:E0:00/36\tPotterEl\tPotter Electric Signal Co. LLC\n70:B3:D5:1C:40:00/36\tSmegSPA\tSmeg S.p.A.\n70:B3:D5:1C:50:00/36\tElsag\t\n70:B3:D5:1C:70:00/36\tHoshinEl\tHoshin Electronics Co., Ltd.\n70:B3:D5:1C:80:00/36\tLdaAudio\tLDA audio video profesional S.L.\n70:B3:D5:1C:B0:00/36\tMatchx\tMatchX GmbH\n70:B3:D5:1C:C0:00/36\tAoogeeCo\tAooGee Controls Co., LTD.\n70:B3:D5:1C:D0:00/36\tEleusi\tELEUSI GmbH\n70:B3:D5:1D:00:00/36\tShenzhen\tShenzhen INVT Electric Co.,Ltd\n70:B3:D5:1D:10:00/36\tEurotekS\tEurotek Srl\n70:B3:D5:1D:30:00/36\tAirobotO\tAIROBOT OÜ\n70:B3:D5:1D:40:00/36\tBrinkman\tBrinkmann Audio GmbH\n70:B3:D5:1D:70:00/36\tPrivate\t\n70:B3:D5:1D:A0:00/36\tPromess\tPromess Inc.\n70:B3:D5:1D:B0:00/36\tHudsonRo\tHudson Robotics\n70:B3:D5:1D:C0:00/36\tTekvel\tTEKVEL Ltd.\n70:B3:D5:1D:D0:00/36\tRfCreati\tRf Creations Ltd\n70:B3:D5:1D:E0:00/36\tDycecSA\tDycec, S.A.\n70:B3:D5:1E:00:00/36\tToproott\tTOPROOTTechnology Corp. Ltd.\n70:B3:D5:1E:30:00/36\tHatelEle\tHatel Elektronik LTD. STI.\n70:B3:D5:1E:40:00/36\tTecnolog\tTecnologix s.r.l.\n70:B3:D5:1E:50:00/36\tVendnova\tVendNovation LLC\n70:B3:D5:1E:60:00/36\tSanminaI\tSanmina Israel\n70:B3:D5:1E:90:00/36\tComtime\tcomtime GmbH\n70:B3:D5:1E:A0:00/36\tSenseFor\tSense For Innovation\n70:B3:D5:1E:F0:00/36\tAdtek\t\n70:B3:D5:1F:30:00/36\tSmartEne\tSmart Energy Code Company Limited\n70:B3:D5:1F:40:00/36\tHangzhou\tHangzhou Woosiyuan Communication Co.,Ltd.\n70:B3:D5:1F:50:00/36\tMartecSP\tMartec S.p.A.\n70:B3:D5:1F:80:00/36\tConverge\tConvergent Design\n70:B3:D5:1F:D0:00/36\tBrsSiste\tBRS Sistemas Eletrônicos\n70:B3:D5:1F:E0:00/36\tMobiprom\tMobiPromo\n70:B3:D5:20:00:00/36\tNextev\tNextEV Co., Ltd.\n70:B3:D5:20:20:00/36\tDeuta-We\tDEUTA-WERKE GmbH\n70:B3:D5:20:30:00/36\tWoojin\tWOOJIN Inc\n70:B3:D5:20:40:00/36\tTwc\t\n70:B3:D5:20:50:00/36\tEsourceS\tEsource Srl\n70:B3:D5:20:70:00/36\tSavari\tSavari Inc\n70:B3:D5:20:80:00/36\tDspDesig\tDsp Design Ltd\n70:B3:D5:20:90:00/36\tSmartnod\tSmartNodes\n70:B3:D5:20:A0:00/36\tGoldenGr\tGolden Grid Systems\n70:B3:D5:20:C0:00/36\tSiemensH\tSiemens Healthcare Diagnostics\n70:B3:D5:20:D0:00/36\tEngageTe\tEngage Technologies\n70:B3:D5:20:E0:00/36\tAmrehnPa\tAmrehn & Partner EDV-Service GmbH\n70:B3:D5:20:F0:00/36\tTielineR\tTieline Research Pty Ltd\n70:B3:D5:21:10:00/36\tFracarro\tFracarro srl\n70:B3:D5:21:30:00/36\tEtonDeut\tETON Deutschland Electro Acoustic GmbH\n70:B3:D5:21:40:00/36\tSignalpa\tsignalparser\n70:B3:D5:21:50:00/36\tDataspee\tDataspeed Inc\n70:B3:D5:21:60:00/36\tFlextron\tFlextronics\n70:B3:D5:21:70:00/36\tTecnintH\tTecnint HTE SRL\n70:B3:D5:21:B0:00/36\tLab241\tLab241 Co.,Ltd.\n70:B3:D5:21:C0:00/36\tEnyxSa\tEnyx SA\n70:B3:D5:21:D0:00/36\tIrf-Inte\tiRF - Intelligent RF Solutions, LLC\n70:B3:D5:21:E0:00/36\tHildebra\tHildebrand Technology Limited\n70:B3:D5:21:F0:00/36\tChronome\tChronomedia\n70:B3:D5:22:00:00/36\tPrivate\t\n70:B3:D5:22:20:00/36\tMarioffO\tMarioff Corporation Oy\n70:B3:D5:22:40:00/36\tUrbanaSm\tUrbana Smart Solutions Pte Ltd\n70:B3:D5:22:50:00/36\tRcdRadio\tRCD Radiokomunikace\n70:B3:D5:22:60:00/36\tYaviar\t\n70:B3:D5:22:70:00/36\tMontalvo\t\n70:B3:D5:22:80:00/36\tHeitec\tHeitec Ag\n70:B3:D5:22:90:00/36\tControlS\tCONTROL SYSTEMS Srl\n70:B3:D5:22:B0:00/36\tVitec\t\n70:B3:D5:22:C0:00/36\tHiquelEl\tHiquel Elektronik- und Anlagenbau GmbH\n70:B3:D5:22:E0:00/36\tPrivate\t\n70:B3:D5:22:F0:00/36\tInstec\tInstec, Inc.\n70:B3:D5:23:00:00/36\tCt\tCT Company\n70:B3:D5:23:10:00/36\tDeltaTau\tDelta Tau Data Systems, Inc.\n70:B3:D5:23:20:00/36\tUconsys\t\n70:B3:D5:23:40:00/36\tEdfelect\tEDFelectronics JRMM Sp z o.o. sp.k.\n70:B3:D5:23:50:00/36\tCameonSA\tCameon S.A.\n70:B3:D5:23:60:00/36\tMonnit\tMonnit Corporation\n70:B3:D5:23:80:00/36\tAreteAss\tArete Associates\n70:B3:D5:23:A0:00/36\tMesaLabs\tMesa Labs, Inc.\n70:B3:D5:23:B0:00/36\tFinkTele\tFink Telecom Services\n70:B3:D5:23:C0:00/36\tQuasonix\tQuasonix, LLC\n70:B3:D5:23:E0:00/36\tTornadoM\tTornado Modular Systems\n70:B3:D5:23:F0:00/36\tEta-Usa\t\n70:B3:D5:24:00:00/36\tOrlacoPr\tOrlaco Products B.V.\n70:B3:D5:24:10:00/36\tBolideTe\tBolide Technology Group, Inc.\n70:B3:D5:24:30:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n70:B3:D5:24:50:00/36\tNewtec\tNewtec A/S\n70:B3:D5:24:60:00/36\tSalineLe\tSaline Lectronics, Inc.\n70:B3:D5:24:80:00/36\tGlTech\tGl Tech Co.,Ltd\n70:B3:D5:24:B0:00/36\tToseiEng\tTosei Engineering Corp.\n70:B3:D5:24:D0:00/36\tInfoCrea\tINFO CREATIVE (HK) LTD\n70:B3:D5:24:E0:00/36\tChengduC\tChengdu Cove Technology CO.,LTD\n70:B3:D5:24:F0:00/36\tElbitBmd\tELBIT SYSTEMS BMD AND LAND EW - ELISRA LTD\n70:B3:D5:25:00:00/36\tDatumEle\tDatum Electronics Limited\n70:B3:D5:25:20:00/36\tSierraNe\tSierra Nevada Corporation\n70:B3:D5:25:30:00/36\tWimateTe\tWimate Technology Solutions Private Limited\n70:B3:D5:25:40:00/36\tSpectrum\tSpectrum Brands\n70:B3:D5:25:50:00/36\tAsystems\tAsystems Corporation\n70:B3:D5:25:70:00/36\tLgElectr\tLG Electronics\n70:B3:D5:25:90:00/36\tZebraEle\tZebra Elektronik A.S.\n70:B3:D5:25:A0:00/36\tDeuta-We\tDEUTA-WERKE GmbH\n70:B3:D5:25:B0:00/36\tGidIndus\tGID Industrial\n70:B3:D5:25:D0:00/36\tMimoNetw\tMimo Networks\n70:B3:D5:26:00:00/36\tModusyst\tModuSystems, Inc\n70:B3:D5:26:10:00/36\tPotterEl\tPotter Electric Signal Co. LLC\n70:B3:D5:26:60:00/36\tSpectraD\tSpectra Displays Ltd\n70:B3:D5:26:70:00/36\tZehntner\tZehntner Testing Instruments\n70:B3:D5:26:80:00/36\tCardinal\tCardinal Scale Mfg Co\n70:B3:D5:26:90:00/36\tGilbarco\tGilbarco Veeder-Root  ‎\n70:B3:D5:26:B0:00/36\tSoramaBv\tSorama BV\n70:B3:D5:26:C0:00/36\tEaElektr\tEA Elektroautomatik GmbH & Co. KG\n70:B3:D5:26:E0:00/36\tHi-TechS\tHI-TECH SYSTEM Co. Ltd.\n70:B3:D5:27:20:00/36\tTelecomS\tTelecom Sante\n70:B3:D5:27:30:00/36\tWevoTech\tWeVo Tech\n70:B3:D5:27:40:00/36\tStercomP\tStercom Power Solutions GmbH\n70:B3:D5:27:60:00/36\tTellSoft\tTELL Software Hungaria Kft.\n70:B3:D5:27:70:00/36\tVoltawar\tVoltaware Limited\n70:B3:D5:27:80:00/36\tPrivate\t\n70:B3:D5:27:90:00/36\tPrivate\t\n70:B3:D5:27:A0:00/36\tTdEcophi\tTd Ecophisika\n70:B3:D5:27:D0:00/36\tTelenorC\tTelenor Connexion AB\n70:B3:D5:27:E0:00/36\tMettlerT\tMettler Toledo Hi Speed\n70:B3:D5:27:F0:00/36\tStAerosp\tST Aerospace Systems\n70:B3:D5:28:00:00/36\tComputec\tComputech International\n70:B3:D5:28:30:00/36\tTextninj\tTextNinja Co.\n70:B3:D5:28:40:00/36\tGlobalco\tGlobalcom Engineering SPA\n70:B3:D5:28:50:00/36\tBentecDr\tBentec GmbH Drilling & Oilfield Systems\n70:B3:D5:28:60:00/36\tPedaxDan\tPedax Danmark\n70:B3:D5:28:80:00/36\tBressler\tBresslergroup\n70:B3:D5:28:90:00/36\tShenzhen\tShenzhen Rongda Computer Co.,Ltd\n70:B3:D5:28:A0:00/36\tTransitS\tTransit Solutions, LLC.\n70:B3:D5:28:B0:00/36\tArnouseD\tArnouse Digital Devices, Corp.\n70:B3:D5:28:C0:00/36\tStepTech\tStep Technica Co., Ltd.\n70:B3:D5:28:D0:00/36\tTechnica\tTechnica Engineering GmbH\n70:B3:D5:28:E0:00/36\tTexCompu\tTex Computer Srl\n70:B3:D5:28:F0:00/36\tOverline\tOverline Systems\n70:B3:D5:29:20:00/36\tPrivate\t\n70:B3:D5:29:30:00/36\tSolarRig\tSolar RIg Technologies\n70:B3:D5:29:50:00/36\tCelloEle\tCello Electronics (UK) Ltd\n70:B3:D5:29:60:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n70:B3:D5:29:70:00/36\tGrossenb\tGrossenbacher Systeme AG\n70:B3:D5:29:B0:00/36\tDermalum\tDermaLumics S.L.\n70:B3:D5:29:C0:00/36\tTekoTele\tTeko Telecom Srl\n70:B3:D5:29:D0:00/36\tXtech2Si\tXTech2 SIA\n70:B3:D5:29:F0:00/36\tCodeHard\tCode Hardware SA\n70:B3:D5:2A:10:00/36\tBlinkSer\tBlink Services AB\n70:B3:D5:2A:20:00/36\tVisualwa\tVisualware, Inc.\n70:B3:D5:2A:30:00/36\tAttNussb\tATT Nussbaum Prüftechnik GmbH\n70:B3:D5:2A:40:00/36\tGspSprac\tGSP Sprachtechnologie GmbH\n70:B3:D5:2A:50:00/36\tTaitotek\tTaitotekniikka\n70:B3:D5:2A:70:00/36\tPlasmabi\tPlasmability, LLC\n70:B3:D5:2A:80:00/36\tDynamicP\tDynamic Perspective GmbH\n70:B3:D5:2A:90:00/36\tPowerEle\tPower Electronics Espana, S.L.\n70:B3:D5:2A:A0:00/36\tFlirtey\tFlirtey Inc\n70:B3:D5:2A:B0:00/36\tNasaJohn\tNASA Johnson Space Center\n70:B3:D5:2A:C0:00/36\tNewImagi\tNew Imaging Technologies\n70:B3:D5:2A:D0:00/36\tOpgalOpt\tOpgal Optronic Industries\n70:B3:D5:2A:E0:00/36\tAlereTec\tAlere Technologies AS\n70:B3:D5:2B:00:00/36\tBeijingZ\tBeijing Zhongyi Yue Tai Technology Co., Ltd\n70:B3:D5:2B:10:00/36\tWixcon\tWIXCON Co., Ltd\n70:B3:D5:2B:20:00/36\tSunCreat\tSun Creative (ZheJiang) Technology INC.\n70:B3:D5:2B:30:00/36\tHas\tHAS co.,ltd.\n70:B3:D5:2B:40:00/36\tFoerster\tFoerster-Technik GmbH\n70:B3:D5:2B:70:00/36\tMatrixOr\tMatrix Orbital Corporation\n70:B3:D5:2B:90:00/36\tBelectri\tBELECTRIC GmbH\n70:B3:D5:2B:A0:00/36\tActiveBr\tActive Brains\n70:B3:D5:2B:B0:00/36\tAutomati\tAutomation Networks & Solutions LLC\n70:B3:D5:2B:C0:00/36\tEquiposD\tEQUIPOS DE TELECOMUNICACIÓN OPTOELECTRÓNICOS, S.A.\n70:B3:D5:2B:D0:00/36\tMg-Senso\tmg-sensor GmbH\n70:B3:D5:2B:E0:00/36\tCoherent\tCoherent Logix, Inc.\n70:B3:D5:2B:F0:00/36\tFoshanVo\tFoshan Vohom\n70:B3:D5:2C:20:00/36\tQuantumD\tQuantum Detectors\n70:B3:D5:2C:30:00/36\tProterra\t\n70:B3:D5:2C:90:00/36\tSeasonDe\tSeason Design Technology\n70:B3:D5:2C:A0:00/36\tTattileS\tTattile Srl\n70:B3:D5:2C:C0:00/36\tWeworkCo\tWeWork Companies, Inc.\n70:B3:D5:2C:D0:00/36\tKoreaAir\tKorea Airports Corporation\n70:B3:D5:2C:E0:00/36\tKdt\t\n70:B3:D5:2C:F0:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n70:B3:D5:2D:00:00/36\tIjin\tijin co.,ltd.\n70:B3:D5:2D:20:00/36\tShanghai\tShanghai Irisian Optronics Technology Co.,Ltd.\n70:B3:D5:2D:40:00/36\tCt\tCT Company\n70:B3:D5:2D:50:00/36\tTeucoGuz\tTeuco Guzzini\n70:B3:D5:2D:60:00/36\tKvazarLl\tKvazar LLC\n70:B3:D5:2D:A0:00/36\tSkywaveN\tSkywave Networks Private Limited\n70:B3:D5:2D:B0:00/36\tProtopix\tProtoPixel SL\n70:B3:D5:2D:C0:00/36\tBolideTe\tBolide Technology Group, Inc.\n70:B3:D5:2E:00:00/36\tPeterHub\tPeter Huber\n70:B3:D5:2E:20:00/36\tSparkLas\tSpark Lasers\n70:B3:D5:2E:30:00/36\tMeiknolo\tMeiknologic GmbH\n70:B3:D5:2E:50:00/36\tFläktWoo\tFläkt Woods AB\n70:B3:D5:2E:70:00/36\tAtos\tAtos spa\n70:B3:D5:2E:80:00/36\tTelefire\t\n70:B3:D5:2E:A0:00/36\tSchneide\tSchneider Electric Motion\n70:B3:D5:2E:B0:00/36\tBrnet\tBrnet Co.,Ltd.\n70:B3:D5:2E:C0:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n70:B3:D5:2E:E0:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:2E:F0:00/36\tIemSa\tIem Sa\n70:B3:D5:2F:00:00/36\tClock-O-\tClock-O-Matic\n70:B3:D5:2F:10:00/36\tInspikeS\tInspike S.R.L.\n70:B3:D5:2F:20:00/36\tHealthCa\tHealth Care Originals, Inc.\n70:B3:D5:2F:30:00/36\tScameSis\tScame Sistemi srl\n70:B3:D5:2F:40:00/36\tRadixonS\tRadixon s.r.o.\n70:B3:D5:2F:60:00/36\tTattileS\tTattile Srl\n70:B3:D5:2F:80:00/36\tTunstall\tTunstall A/S\n70:B3:D5:2F:90:00/36\tConsospy\t\n70:B3:D5:2F:A0:00/36\tTorayMed\tToray　Medical　Co.,Ltd\n70:B3:D5:2F:D0:00/36\tSpecialP\tSpecial Projects Group, Inc\n70:B3:D5:2F:E0:00/36\tYahamOpt\tYaham Optoelectronics Co., Ltd\n70:B3:D5:30:00:00/36\tNovoDr\tNovo DR Ltd.\n70:B3:D5:30:30:00/36\tFuchuGik\tFuchu Giken, Inc.\n70:B3:D5:30:40:00/36\tTransasM\tTransas Marine Limited\n70:B3:D5:30:50:00/36\tCaitronI\tCAITRON Industrial Solutions GmbH\n70:B3:D5:30:70:00/36\tEnergiIn\tEnergi innovation Aps\n70:B3:D5:30:80:00/36\tDsdMicro\tDsd Microtechnology,Inc.\n70:B3:D5:30:B0:00/36\tAshTechn\tAsh Technologies\n70:B3:D5:30:C0:00/36\tSiconSrl\tSicon srl\n70:B3:D5:30:D0:00/36\tFiberbas\tFiberbase\n70:B3:D5:30:E0:00/36\tPrivate\t\n70:B3:D5:31:30:00/36\tDiehlCon\tDIEHL Controls\n70:B3:D5:31:70:00/36\tIotopiaS\tIotopia Solutions\n70:B3:D5:31:90:00/36\tIso/Tc22\tISO/TC 22/SC 31\n70:B3:D5:31:B0:00/36\tSilterra\tSilTerra Malaysia Sdn. Bhd.\n70:B3:D5:31:C0:00/36\tFinancie\tFINANCIERE DE L'OMBREE (eolane)\n70:B3:D5:31:E0:00/36\tGillam-F\tGILLAM-FEI S.A.\n70:B3:D5:32:30:00/36\tTattileS\tTattile Srl\n70:B3:D5:32:40:00/36\tThalesNe\tThales Nederland BV\n70:B3:D5:32:50:00/36\tBluemark\tBlueMark Innovations BV\n70:B3:D5:32:60:00/36\tNemeus-S\tNEMEUS-SAS\n70:B3:D5:32:70:00/36\tSeneco\tSeneco A/S\n70:B3:D5:32:80:00/36\tHipodrom\tHipodromo De Agua Caliente Sa Cv\n70:B3:D5:32:A0:00/36\tWuhanXin\tWuhan Xingtuxinke ELectronic Co.,Ltd\n70:B3:D5:32:D0:00/36\tHanwellT\tHanwell Technology Co., Ltd.\n70:B3:D5:32:F0:00/36\tMovidius\tMovidius SRL\n70:B3:D5:33:20:00/36\tInnosent\t\n70:B3:D5:33:40:00/36\tDokuen\tDokuen Co. Ltd.\n70:B3:D5:33:60:00/36\tSynacces\tSynaccess Networks Inc.\n70:B3:D5:33:80:00/36\tOpti-Sci\tOpti-Sciences, Inc.\n70:B3:D5:33:90:00/36\tSierraNe\tSierra Nevada Corporation\n70:B3:D5:33:B0:00/36\tSealShie\tSeal Shield, LLC\n70:B3:D5:33:C0:00/36\tVideri\tVideri Inc.\n70:B3:D5:33:E0:00/36\tDynamicC\tDynamic Connect (Suzhou) Hi-Tech Electronic Co.,Ltd.\n70:B3:D5:34:00:00/36\tRenesasE\tRenesas Electronics\n70:B3:D5:34:10:00/36\tVtronPty\tVtron Pty Ltd\n70:B3:D5:34:20:00/36\tSolectri\tSolectrix\n70:B3:D5:34:30:00/36\tElektro-\tElektro-System s.c.\n70:B3:D5:34:40:00/36\tIhiInspe\tIHI Inspection & Instrumentation Co., Ltd.\n70:B3:D5:34:60:00/36\tUltamati\tUltamation Limited\n70:B3:D5:34:70:00/36\tOasSwede\tOAS Sweden AB\n70:B3:D5:34:80:00/36\tBärBahns\tBÄR Bahnsicherung AG\n70:B3:D5:34:90:00/36\tSlat\t\n70:B3:D5:34:A0:00/36\tPavoTasa\tPAVO TASARIM ÜRETİM TİC A.Ş.\n70:B3:D5:34:C0:00/36\tGltExpor\tGLT Exports Ltd\n70:B3:D5:34:E0:00/36\tRiskExpe\tRisk Expert sarl\n70:B3:D5:35:00:00/36\tTickster\tTickster AB\n70:B3:D5:35:10:00/36\tKstTechn\tKST technology\n70:B3:D5:35:20:00/36\tGlobalco\tGlobalcom Engineering SPA\n70:B3:D5:35:30:00/36\tDigitalO\tDigital Outfit\n70:B3:D5:35:50:00/36\tHongin\tHongin., Ltd\n70:B3:D5:35:70:00/36\tMoviment\tMovimento Group AB\n70:B3:D5:35:90:00/36\tBoutroni\tBoutronic\n70:B3:D5:35:A0:00/36\tAppliedR\tApplied Radar, Inc.\n70:B3:D5:35:C0:00/36\tAcsElect\tACS electronics srl\n70:B3:D5:35:D0:00/36\tFreshIde\tFresh Idea Factory BV\n70:B3:D5:35:E0:00/36\tEidosSPA\tEIDOS s.p.a.\n70:B3:D5:35:F0:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:36:00:00/36\tPtEmsoni\tPT. Emsonic Indonesia\n70:B3:D5:36:10:00/36\tParentPo\tParent Power\n70:B3:D5:36:20:00/36\tAsiga\t\n70:B3:D5:36:30:00/36\tContecDt\tContec DTx\n70:B3:D5:36:40:00/36\tAdamczew\tADAMCZEWSKI elektronische Messtechnik GmbH\n70:B3:D5:36:50:00/36\tCircuitm\tCircuitMeter Inc.\n70:B3:D5:36:70:00/36\tLivingWa\tLiving Water\n70:B3:D5:36:80:00/36\tWhiteMat\tWhite Matter LLC\n70:B3:D5:36:A0:00/36\tBectonDi\tBecton Dickinson\n70:B3:D5:36:C0:00/36\tSiconSrl\tSicon srl\n70:B3:D5:36:D0:00/36\tCybertea\tCyberteam Sp z o o\n70:B3:D5:36:F0:00/36\tBuddygua\tBuddyGuard GmbH\n70:B3:D5:37:00:00/36\tInphi\tInphi Corporation\n70:B3:D5:37:10:00/36\tBederov\tBEDEROV GmbH\n70:B3:D5:37:40:00/36\tOooNppMa\tOOO NPP Mars-Energo\n70:B3:D5:37:50:00/36\tAdelSyst\tAdel System srl\n70:B3:D5:37:60:00/36\tPrivate\t\n70:B3:D5:37:70:00/36\tMonnit\tMonnit Corporation\n70:B3:D5:37:80:00/36\tSynchrot\tsynchrotron SOLEIL\n70:B3:D5:37:90:00/36\tVensi\tVensi, Inc.\n70:B3:D5:37:A0:00/36\tApgCashD\tAPG Cash Drawer, LLC\n70:B3:D5:37:B0:00/36\tPower\tPower Ltd.\n70:B3:D5:37:C0:00/36\tMerusPow\tMerus Power Dynamics Ltd.\n70:B3:D5:37:D0:00/36\tDxShop\tThe DX Shop Limited\n70:B3:D5:37:F0:00/36\tIdsInnom\tIDS Innomic GmbH\n70:B3:D5:38:10:00/36\tCrde\t\n70:B3:D5:38:20:00/36\tNavalGro\tNaval Group\n70:B3:D5:38:30:00/36\tLpaExcil\tLPA Excil Electronics\n70:B3:D5:38:40:00/36\tSensohiv\tSensohive Technologies\n70:B3:D5:38:70:00/36\tGwfMesss\tGWF MessSysteme AG\n70:B3:D5:38:90:00/36\tPrivate\t\n70:B3:D5:38:B0:00/36\tLookmanE\tLookman Electroplast Industries Ltd\n70:B3:D5:38:C0:00/36\tMiraesig\tMiraeSignal Co., Ltd\n70:B3:D5:38:F0:00/36\tSorynory\tSorynorydotcom Inc\n70:B3:D5:39:20:00/36\tContecDt\tContec DTx\n70:B3:D5:39:60:00/36\tCtgSpZOO\tCTG sp. z o. o.\n70:B3:D5:39:70:00/36\tGuangxiH\tGuangxi Hunter Information Industry Co.,Ltd\n70:B3:D5:39:A0:00/36\tVideotre\tVideotrend srl\n70:B3:D5:39:B0:00/36\tIroc\tIroc Ab\n70:B3:D5:39:C0:00/36\tGdMissio\tGD Mission Systems\n70:B3:D5:39:D0:00/36\tComarkIn\tComark Interactive Solutions\n70:B3:D5:39:E0:00/36\tLanmarkC\tLanmark Controls Inc.\n70:B3:D5:3A:10:00/36\tReckeenH\tReckeen HDP Media sp. z o.o. sp. k.\n70:B3:D5:3A:50:00/36\tKmtronic\tKMtronic ltd\n70:B3:D5:3A:70:00/36\tVarikore\tVarikorea\n70:B3:D5:3A:80:00/36\tJamhub\tJamHub Corp.\n70:B3:D5:3A:90:00/36\tVivalnk\t\n70:B3:D5:3A:A0:00/36\tRcatsone\t\n70:B3:D5:3A:D0:00/36\tCt\tCT Company\n70:B3:D5:3A:E0:00/36\tExicomTe\tExicom Technologies fze\n70:B3:D5:3A:F0:00/36\tTurboTec\tTurbo Technologies Corporation\n70:B3:D5:3B:00:00/36\tMillenni\tMillennial Net, Inc.\n70:B3:D5:3B:20:00/36\tSiconSrl\tSicon srl\n70:B3:D5:3B:50:00/36\tPrestonI\tPreston Industries dba PolyScience\n70:B3:D5:3B:70:00/36\tPaulSche\tPaul Scherrer Institut (PSI)\n70:B3:D5:3B:80:00/36\tNvideon\tnVideon, Inc.\n70:B3:D5:3B:A0:00/36\tSilexIns\tSilex Inside\n70:B3:D5:3B:B0:00/36\tA-M\tA-M Systems\n70:B3:D5:3B:C0:00/36\tScitroni\tSciTronix\n70:B3:D5:3B:E0:00/36\tMydefenc\tMyDefence Communication ApS\n70:B3:D5:3B:F0:00/36\tStarElec\tStar Electronics GmbH & Co. KG\n70:B3:D5:3C:00:00/36\tDk-Techn\tDK-Technologies A/S\n70:B3:D5:3C:20:00/36\tCellular\tCellular Specialties, Inc.\n70:B3:D5:3C:30:00/36\tAimco\t\n70:B3:D5:3C:40:00/36\tHagiwara\tHagiwara Solutions Co., Ltd.\n70:B3:D5:3C:50:00/36\tP4qElect\tP4Q ELECTRONICS, S.L.\n70:B3:D5:3C:60:00/36\tAcdElekr\tACD Elekronik GmbH\n70:B3:D5:3C:70:00/36\tSoftcrea\tSoftcreate Corp.\n70:B3:D5:3C:90:00/36\tDuerkopp\tDuerkopp-Adler\n70:B3:D5:3C:A0:00/36\tTti\tTTI Ltd\n70:B3:D5:3C:C0:00/36\tTeropta\tTerOpta Ltd\n70:B3:D5:3C:E0:00/36\tAditec\tAditec GmbH\n70:B3:D5:3C:F0:00/36\tEngineer\tSystems Engineering Arts Pty Ltd\n70:B3:D5:3D:20:00/36\tImagine\tImagine Inc.\n70:B3:D5:3D:40:00/36\tSanminaI\tSanmina Israel\n70:B3:D5:3D:50:00/36\tOxynetSo\toxynet Solutions\n70:B3:D5:3D:70:00/36\tRemoteSe\tRemote Sensing Solutions, Inc.\n70:B3:D5:3D:80:00/36\tAbitsoft\tAbitsoftware, Ltd.\n70:B3:D5:3D:90:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:3D:A0:00/36\tLoopLabs\tLoop Labs, Inc.\n70:B3:D5:3D:B0:00/36\tKstTechn\tKST technology\n70:B3:D5:3D:E0:00/36\tElomacEl\tELOMAC Elektronik GmbH\n70:B3:D5:3D:F0:00/36\tMultidyn\tMultiDyne\n70:B3:D5:3E:10:00/36\tBarnstor\tBarnstormer Softworks\n70:B3:D5:3E:20:00/36\tAviPty\tAVI Pty Ltd\n70:B3:D5:3E:30:00/36\tHead\t\n70:B3:D5:3E:40:00/36\tNeptecTe\tNeptec Technologies Corp.\n70:B3:D5:3E:50:00/36\tAteme\t\n70:B3:D5:3E:60:00/36\tMachineq\t\n70:B3:D5:3E:80:00/36\tCosmosWe\tCOSMOS web Co., Ltd.\n70:B3:D5:3E:90:00/36\tApolloGi\tAPOLLO GIKEN Co.,Ltd.\n70:B3:D5:3E:D0:00/36\tUltraEle\tUltra Electronics Sonar System Division\n70:B3:D5:3E:F0:00/36\tVtronPty\tVtron Pty Ltd\n70:B3:D5:3F:00:00/36\tInterval\tIntervala\n70:B3:D5:3F:10:00/36\tOlympusN\tOlympus NDT Canada\n70:B3:D5:3F:20:00/36\tH3d\tH3D, Inc.\n70:B3:D5:3F:30:00/36\tSpea\tSpea Spa\n70:B3:D5:3F:40:00/36\tWincodeT\tWincode Technology Co., Ltd.\n70:B3:D5:3F:50:00/36\tDolbyLab\tDolby Laboratories, Inc.\n70:B3:D5:3F:60:00/36\tSycompEl\tSycomp Electronic GmbH\n70:B3:D5:3F:70:00/36\tAdvansid\t\n70:B3:D5:3F:90:00/36\tHerrickT\tHerrick Tech Labs\n70:B3:D5:3F:E0:00/36\tMentorGr\tMentor Graphics\n70:B3:D5:3F:F0:00/36\tHydraCon\tHydra Controls\n70:B3:D5:40:00:00/36\tVtronPty\tVtron Pty Ltd\n70:B3:D5:40:10:00/36\tPrivate\t\n70:B3:D5:40:20:00/36\tAkisTech\tAKIS technologies\n70:B3:D5:40:40:00/36\tRanix\tRANIX,Inc.\n70:B3:D5:40:50:00/36\tMgSRL\tMG s.r.l.\n70:B3:D5:40:60:00/36\tAcrodea\tAcrodea, Inc.\n70:B3:D5:40:70:00/36\tIdosens\t\n70:B3:D5:40:80:00/36\tComrodAs\tComrod AS\n70:B3:D5:40:A0:00/36\tMonroeEl\tMonroe Electronics, Inc.\n70:B3:D5:40:E0:00/36\tLiaoyunI\tLiaoyun Information Technology Co., Ltd.\n70:B3:D5:41:00:00/36\tAvantTec\tAvant Technologies, Inc\n70:B3:D5:41:20:00/36\tTattileS\tTattile Srl\n70:B3:D5:41:30:00/36\tAxess\tAxess AG\n70:B3:D5:41:50:00/36\tIdea\tIdea Spa\n70:B3:D5:41:70:00/36\tFigmentD\tFigment Design Laboratories\n70:B3:D5:41:80:00/36\tDevSyste\tDEV Systemtechnik GmbH& Co KG\n70:B3:D5:41:A0:00/36\tHyosungP\tHYOSUNG Power & Industrial Systems\n70:B3:D5:41:E0:00/36\tRedlerCo\tRedler Computers\n70:B3:D5:42:10:00/36\tNorthSta\tNorth Star Bestech Co.,\n70:B3:D5:42:60:00/36\tZehnderG\tZehnder Group Nederland\n70:B3:D5:42:70:00/36\tKeyChemi\tKey Chemical & Equipment Company\n70:B3:D5:42:80:00/36\tPresenta\tPresentation Switchers, Inc.\n70:B3:D5:42:90:00/36\tRedcoAud\tRedco Audio Inc\n70:B3:D5:42:A0:00/36\tCritical\tCritical Link LLC\n70:B3:D5:42:C0:00/36\tDMarchio\tD.Marchiori Srl\n70:B3:D5:42:D0:00/36\tRchItali\tRCH Italia SpA\n70:B3:D5:42:E0:00/36\tDrZinngr\tDr. Zinngrebe GmbH\n70:B3:D5:42:F0:00/36\tSintokog\tSintokogio, Ltd\n70:B3:D5:43:00:00/36\tAlgodueE\tAlgodue Elettronica Srl\n70:B3:D5:43:10:00/36\tPowerEle\tPower Electronics Espana, S.L.\n70:B3:D5:43:20:00/36\tDeuta-We\tDEUTA-WERKE GmbH\n70:B3:D5:43:30:00/36\tFlexsolu\tFlexsolution APS\n70:B3:D5:43:40:00/36\tWitCom\tWit.com Inc\n70:B3:D5:43:50:00/36\tWuhanXin\tWuhan Xingtuxinke ELectronic Co.,Ltd\n70:B3:D5:43:60:00/36\tHenrichE\tHenrich Electronics Corporation\n70:B3:D5:43:70:00/36\tDigitalW\tDigital Way\n70:B3:D5:43:90:00/36\tTriled\t\n70:B3:D5:43:B0:00/36\tKalycito\tKalycito Infotech Private Limited\n70:B3:D5:43:D0:00/36\tVeryxTec\tVeryx Technologies Private Limited\n70:B3:D5:43:F0:00/36\tBiosilve\tbiosilver .co.,ltd\n70:B3:D5:44:00:00/36\tDiscover\tDiscover Video\n70:B3:D5:44:10:00/36\tVideopor\tVideoport S.A.\n70:B3:D5:44:20:00/36\tBlairCom\tBlair Companies\n70:B3:D5:44:30:00/36\tSlot3\tSlot3 GmbH\n70:B3:D5:44:50:00/36\tAdvanced\tAdvanced Devices SpA\n70:B3:D5:44:60:00/36\tSantaBar\tSanta Barbara Imaging Systems\n70:B3:D5:44:80:00/36\tB/EAeros\tB/E Aerospace, Inc.\n70:B3:D5:44:B0:00/36\tOpenSyst\tOpen System Solutions Limited\n70:B3:D5:44:E0:00/36\tSolace\tSolace Systems Inc.\n70:B3:D5:45:50:00/36\tHeartlan\tHeartlandmicropayments\n70:B3:D5:45:70:00/36\tVivaldiC\tVivaldi Clima Srl\n70:B3:D5:45:90:00/36\tProtiumT\tProtium Technologies, Inc.\n70:B3:D5:45:C0:00/36\tAlytech\t\n70:B3:D5:45:D0:00/36\tSensapex\tSensapex Oy\n70:B3:D5:45:E0:00/36\tEsol\teSOL Co.,Ltd.\n70:B3:D5:45:F0:00/36\tCloud4wi\t\n70:B3:D5:46:00:00/36\tGuilinTr\tGuilin Tryin Technology Co.,Ltd\n70:B3:D5:46:10:00/36\tTesec\tTESEC Corporation\n70:B3:D5:46:20:00/36\tEartex\t\n70:B3:D5:46:50:00/36\tEnergism\tEnergisme\n70:B3:D5:46:90:00/36\tGentec\tGentec Systems  Co.\n70:B3:D5:46:B0:00/36\tAirborne\tAirborne Engineering Limited\n70:B3:D5:46:C0:00/36\tShanghai\tShanghai Chenzhu Instrument Co., Ltd.\n70:B3:D5:46:F0:00/36\tServaTra\tserva transport systems GmbH\n70:B3:D5:47:00:00/36\tKitronUa\tKitron Uab\n70:B3:D5:47:10:00/36\tSyscoSic\tSYSCO Sicherheitssysteme GmbH\n70:B3:D5:47:20:00/36\tQuadioDe\tQuadio Devices Private Limited\n70:B3:D5:47:50:00/36\tEwattch\t\n70:B3:D5:47:60:00/36\tFr-TeamI\tFR-Team International SA\n70:B3:D5:47:80:00/36\tTouchnet\tTouchnet/OneCard\n70:B3:D5:47:90:00/36\tLineageP\tLineage Power Pvt Ltd.,\n70:B3:D5:47:C0:00/36\tPar-Tech\tPar-Tech, Inc.\n70:B3:D5:47:F0:00/36\tAse\tASE GmbH\n70:B3:D5:48:00:00/36\tEmergenc\tEmergency Lighting Products Limited\n70:B3:D5:48:20:00/36\tAeryonLa\tAeryon Labs Inc\n70:B3:D5:48:60:00/36\tChongqin\tChongQing JianTao Technology Co., Ltd.\n70:B3:D5:48:80:00/36\tCardinal\tCardinal Scale Mfg Co\n70:B3:D5:48:90:00/36\tArdSa\tard sa\n70:B3:D5:48:A0:00/36\tGeorgeWi\tGeorge Wilson Industries Ltd\n70:B3:D5:48:C0:00/36\tIntegrat\tIntegrated Systems Engineering, Inc.\n70:B3:D5:48:D0:00/36\tOmegaBil\tOMEGA BILANCE SRL SOCIETA' UNIPERSONALE\n70:B3:D5:48:E0:00/36\tAllimSys\tAllim System Co,.Ltd.\n70:B3:D5:48:F0:00/36\tSeiwaGik\tSeiwa Giken\n70:B3:D5:49:20:00/36\tJiangsuJ\tJiangsu Jinheng  Information Technology Co.,Ltd.\n70:B3:D5:49:30:00/36\tImpulseN\tImpulse Networks Pte Ltd\n70:B3:D5:49:40:00/36\tSchildkn\tSchildknecht AG\n70:B3:D5:49:50:00/36\tFiemIndu\tFiem Industries Ltd.\n70:B3:D5:49:80:00/36\tXgemSas\tXgem Sas\n70:B3:D5:49:90:00/36\tPycom\tPycom Ltd\n70:B3:D5:49:A0:00/36\tHaxeSyst\tHaxe Systeme\n70:B3:D5:49:B0:00/36\tAlgodueE\tAlgodue Elettronica Srl\n70:B3:D5:49:E0:00/36\tCaptempL\tCAPTEMP, Lda\n70:B3:D5:49:F0:00/36\tBPASrl\tB.P.A. Srl\n70:B3:D5:4A:00:00/36\tFludia\t\n70:B3:D5:4A:10:00/36\tHerholdt\tHerholdt Controls srl\n70:B3:D5:4A:50:00/36\tIntermin\tIntermind Inc.\n70:B3:D5:4A:60:00/36\tHzhyTech\tHzhy Technology\n70:B3:D5:4A:70:00/36\tAelettro\taelettronica group srl\n70:B3:D5:4A:90:00/36\tWarecube\tWarecube,Inc\n70:B3:D5:4A:A0:00/36\tTwowayCo\tTwoway Communications, Inc.\n70:B3:D5:4A:D0:00/36\tGaci\t\n70:B3:D5:4A:E0:00/36\tReinhard\tReinhardt System- und Messelectronic GmbH\n70:B3:D5:4A:F0:00/36\tAgramkow\tAgramkow Fluid Systems A/S\n70:B3:D5:4B:00:00/36\tTecogen\tTecogen Inc.\n70:B3:D5:4B:10:00/36\tLaceLlc\tLace Llc.\n70:B3:D5:4B:20:00/36\tCertusOp\tCertus Operations Ltd\n70:B3:D5:4B:40:00/36\tHiTech\tHi Tech Systems Ltd\n70:B3:D5:4B:60:00/36\tVeilux\tVeilux Inc.\n70:B3:D5:4B:70:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:4B:80:00/36\tInternat\tInternational Roll-Call Corporation\n70:B3:D5:4B:90:00/36\tShenZhen\tShen Zhen Ttk Technology Co,Ltd\n70:B3:D5:4B:A0:00/36\tSinftech\tSinftech LLC\n70:B3:D5:4B:B0:00/36\tPlazma-T\t\n70:B3:D5:4B:D0:00/36\tBoulderA\tBoulder Amplifiers, Inc.\n70:B3:D5:4B:E0:00/36\tGy-FxSas\tGY-FX SAS\n70:B3:D5:4C:00:00/36\tTechnica\tTechnica Engineering GmbH\n70:B3:D5:4C:10:00/36\tQuercusT\tQuercus Technologies, S. L.\n70:B3:D5:4C:20:00/36\tHeraLabo\thera Laborsysteme GmbH\n70:B3:D5:4C:40:00/36\tOooResea\tOOO Research and Production Center Computer Technologies\n70:B3:D5:4C:50:00/36\tMovingIm\tMoving iMage Technologies LLC\n70:B3:D5:4C:60:00/36\tBlueboxV\tBlueBox Video Limited\n70:B3:D5:4C:70:00/36\tSolveris\tSOLVERIS sp. z o.o.\n70:B3:D5:4C:80:00/36\tHosokawa\tHosokawa Micron Powder Systems\n70:B3:D5:4C:D0:00/36\tPowerEle\tPower Electronics Espana, S.L.\n70:B3:D5:4C:E0:00/36\tAgilack\t\n70:B3:D5:4C:F0:00/36\tGreenHou\tGreen House Co., Ltd.\n70:B3:D5:4D:10:00/36\tContrave\tContraves Advanced Devices Sdn. Bhd.\n70:B3:D5:4D:40:00/36\tNortekGl\tNortek Global HVAC\n70:B3:D5:4D:50:00/36\tMoogReko\tMoog Rekofa  GmbH\n70:B3:D5:4D:80:00/36\tVersilis\tVersilis Inc.\n70:B3:D5:4D:B0:00/36\tTemperat\tTemperature@lert\n70:B3:D5:4D:C0:00/36\tJkDevice\tJk Device Corporation\n70:B3:D5:4D:D0:00/36\tRoad-IqL\tRoad-iQ, LLC\n70:B3:D5:4D:E0:00/36\tOsoTechn\tOso Technologies, Inc.\n70:B3:D5:4D:F0:00/36\tNidecAvt\tNidec Avtron Automation Corp\n70:B3:D5:4E:10:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n70:B3:D5:4E:50:00/36\tVizaarIn\tviZaar industrial imaging AG\n70:B3:D5:4E:70:00/36\tDigitalD\tDigital Domain\n70:B3:D5:4E:90:00/36\tAdetecSa\tAdetec Sas\n70:B3:D5:4E:A0:00/36\tVocality\tVocality international T/A Cubic\n70:B3:D5:4E:B0:00/36\tInfosoft\tINFOSOFT DIGITAL DESIGN & SERVICES PRIVATE LIMITED\n70:B3:D5:4E:C0:00/36\tHangzhou\tHangzhou Youshi Industry Co., Ltd.\n70:B3:D5:4E:F0:00/36\tCmi\tCMI, Inc.\n70:B3:D5:4F:00:00/36\tLiSengTe\tLi Seng Technology Ltd.,\n70:B3:D5:4F:40:00/36\tWitagg\tWiTagg, Inc\n70:B3:D5:4F:80:00/36\tPrivate\t\n70:B3:D5:4F:90:00/36\tOptoprec\tOptoPrecision GmbH\n70:B3:D5:4F:C0:00/36\tMettlerT\tMettler Toledo\n70:B3:D5:4F:E0:00/36\tWitagg\tWiTagg, Inc\n70:B3:D5:50:00:00/36\tMistralS\tMistral Solutions Pvt. LTD\n70:B3:D5:50:10:00/36\tPeekTraf\tPeek Traffic\n70:B3:D5:50:20:00/36\tGlidewel\tGlidewell Laboratories\n70:B3:D5:50:30:00/36\tItestCom\tItest communication Tech Co., LTD\n70:B3:D5:50:40:00/36\tXsight\tXsight Systems Ltd.\n70:B3:D5:50:50:00/36\tMc2-Tech\tMC2-Technologies\n70:B3:D5:50:70:00/36\tHumanOri\tHuman Oriented Technology, Inc.\n70:B3:D5:50:80:00/36\tInsevis\tINSEVIS GmbH\n70:B3:D5:50:E0:00/36\tMicroTre\tMicro Trend Automation Co., LTD\n70:B3:D5:51:10:00/36\tNextSigh\tNext Sight srl\n70:B3:D5:51:30:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n70:B3:D5:51:50:00/36\tPcsc\t\n70:B3:D5:51:60:00/36\tLineageP\tLineage Power Pvt Ltd.,\n70:B3:D5:51:70:00/36\tIspher\t\n70:B3:D5:51:80:00/36\tCruxell\tCRUXELL Corp.\n70:B3:D5:51:B0:00/36\tVitreaSm\tVitrea Smart Home Technologies\n70:B3:D5:51:C0:00/36\tAtxNetwo\tATX Networks Corp\n70:B3:D5:51:D0:00/36\tTecnintH\tTecnint HTE SRL\n70:B3:D5:51:E0:00/36\tFundació\tFundación Cardiovascular de Colombia\n70:B3:D5:52:20:00/36\tSyncopat\tSyncopated Engineering Inc\n70:B3:D5:52:30:00/36\tTibitCom\tTibit Communications\n70:B3:D5:52:40:00/36\tWuxiNewO\tWuxi New Optical Communication Co.,Ltd.\n70:B3:D5:52:50:00/36\tPlantiga\tPlantiga Technologies Inc\n70:B3:D5:52:60:00/36\tFlownetL\tFlowNet LLC\n70:B3:D5:52:80:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:52:B0:00/36\tGeAviati\tGE Aviation Cheltenham\n70:B3:D5:52:C0:00/36\tCenturya\tCenturyarks Ltd.,\n70:B3:D5:52:D0:00/36\tTanakaEl\tTanaka Electric Industry Co., Ltd.\n70:B3:D5:52:E0:00/36\tSwisspon\tSwissponic Sagl\n70:B3:D5:53:00:00/36\tIsis-Ex\tiSiS-Ex Limited\n70:B3:D5:53:10:00/36\tAteme\t\n70:B3:D5:53:20:00/36\tTalleres\tTalleres de Escoriaza SA\n70:B3:D5:53:80:00/36\tSydetion\tsydetion UG (h.b.)\n70:B3:D5:53:A0:00/36\tPano0ram\tPano0ramic Power\n70:B3:D5:53:B0:00/36\tMrLoop\tMr.Loop\n70:B3:D5:53:C0:00/36\tAirthing\tAirthings\n70:B3:D5:53:D0:00/36\tAccel\tAccel Corp\n70:B3:D5:54:20:00/36\tRtdsTech\tRTDS Technologies Inc.\n70:B3:D5:54:40:00/36\tSiliconS\tSilicon Safe Ltd\n70:B3:D5:54:60:00/36\tSensefar\tSensefarm AB\n70:B3:D5:54:70:00/36\tCeLink\tCe Link Limited\n70:B3:D5:54:80:00/36\tDigiverv\tDigiverv Inc\n70:B3:D5:54:90:00/36\tProconAu\tProcon automatic systems GmbH\n70:B3:D5:54:B0:00/36\tBrakelsI\tBrakels IT\n70:B3:D5:54:C0:00/36\tHustyMSt\tHusty M.Styczen J.Hupert Sp.J.\n70:B3:D5:54:D0:00/36\tQingdaoH\tQingdao Haitian Weiye Automation Control System Co., Ltd\n70:B3:D5:54:E0:00/36\tRflElect\tRFL Electronics, Inc.\n70:B3:D5:54:F0:00/36\tAssembly\tAssembly Contracts Limited\n70:B3:D5:55:00:00/36\tMertenGm\tMerten GmbH&CoKG\n70:B3:D5:55:10:00/36\tInfrachi\tinfrachip\n70:B3:D5:55:40:00/36\tTeletype\tTeletypes Manufacturing Plant\n70:B3:D5:55:50:00/36\tSoftlab-\tSoftLab-NSK\n70:B3:D5:55:70:00/36\tHeitec\tHeitec Ag\n70:B3:D5:55:90:00/36\tEagleMou\tEagle Mountain Technology\n70:B3:D5:55:A0:00/36\tSontay\tSontay Ltd.\n70:B3:D5:55:B0:00/36\tProconEl\tProcon Electronics Pty Ltd\n70:B3:D5:55:C0:00/36\tSaratoga\tSaratoga Speed, Inc.\n70:B3:D5:55:D0:00/36\tLunanexu\tLunaNexus Inc\n70:B3:D5:55:E0:00/36\tBrsSiste\tBRS Sistemas Eletrônicos\n70:B3:D5:56:30:00/36\tZhejiang\tZhejiang Hao Teng Electronic Technology Co., Ltd.\n70:B3:D5:56:40:00/36\tChristma\tchristmann informationstechnik + medien GmbH & Co. KG\n70:B3:D5:56:60:00/36\tDataInfo\tData Informs LLC\n70:B3:D5:56:A0:00/36\tHarvardT\tHarvard Technology Ltd\n70:B3:D5:56:B0:00/36\tSEI\tS.E.I. Co.,Ltd.\n70:B3:D5:57:00:00/36\tBayernEn\tBayern Engineering GmbH & Co. KG\n70:B3:D5:57:20:00/36\tCrde\t\n70:B3:D5:57:60:00/36\tShandong\tShandong Hospot IOT Technology Co.,Ltd.\n70:B3:D5:57:80:00/36\tImageTec\tImage Tech Co.,Ltd\n70:B3:D5:57:90:00/36\tChelseaT\tChelsea Technologies Group Ltd\n70:B3:D5:57:B0:00/36\tElamakat\tELAMAKATO GmbH\n70:B3:D5:57:C0:00/36\tAutomata\tAutomata GmbH & Co. KG\n70:B3:D5:57:D0:00/36\tWicom1\tWICOM1 GmbH\n70:B3:D5:58:00:00/36\tPrivate\t\n70:B3:D5:58:20:00/36\tVaglerIn\tVAGLER International Sdn Bhd\n70:B3:D5:58:30:00/36\tDucommun\tDucommun Inc.\n70:B3:D5:58:40:00/36\tSertoneA\tSertone, a division of Opti-Knights Ltd\n70:B3:D5:58:50:00/36\tNefteavt\tNefteavtomatika\n70:B3:D5:58:70:00/36\tIncaaCom\tINCAA Computers\n70:B3:D5:58:90:00/36\tCityntel\tCityntel OU\n70:B3:D5:58:C0:00/36\tOptsys\t\n70:B3:D5:58:D0:00/36\tDorletSa\tDorlet Sau\n70:B3:D5:58:E0:00/36\tVeilux\tVeilux Inc.\n70:B3:D5:58:F0:00/36\tLsl\tLSL systems\n70:B3:D5:59:10:00/36\tPrivate\t\n70:B3:D5:59:20:00/36\tCrde\t\n70:B3:D5:59:30:00/36\tAsisPro\tAsis Pro\n70:B3:D5:59:40:00/36\tAte\tATE Systems Inc\n70:B3:D5:59:50:00/36\tPlrPruef\tPLR Prueftechnik Linke und Ruehe GmbH\n70:B3:D5:59:60:00/36\tMencom\tMencom Corporation\n70:B3:D5:59:70:00/36\tVapeRail\tVape Rail International\n70:B3:D5:59:90:00/36\tLeco\tLECO Corporation\n70:B3:D5:59:C0:00/36\tDaveSrl\tDave Srl\n70:B3:D5:59:D0:00/36\tServicio\tservicios de consultoria independiente S.L.\n70:B3:D5:5A:00:00/36\tAsconTec\tAscon Tecnologic S.r.l.\n70:B3:D5:5A:20:00/36\tWallnerA\tWallner Automation GmbH\n70:B3:D5:5A:30:00/36\tCt\tCT Company\n70:B3:D5:5A:50:00/36\tRehwork\tRehwork GmbH\n70:B3:D5:5A:80:00/36\tFarmobil\tFarmobile\n70:B3:D5:5A:90:00/36\tBunkaShu\tBunka Shutter Co., Ltd.\n70:B3:D5:5A:A0:00/36\tChugokuE\tChugoku Electric Manufacturing Co.,Inc\n70:B3:D5:5A:B0:00/36\tSeaAirAn\tSea Air and Land Communications Ltd\n70:B3:D5:5B:00:00/36\tQxpertsI\tQxperts Italia S.r.l.\n70:B3:D5:5B:10:00/36\tEpdElect\tEPD Electronics\n70:B3:D5:5B:50:00/36\tLehighEl\tLehigh Electric Products Co\n70:B3:D5:5B:60:00/36\tEthicalL\tEthical Lighting and Sensor Solutions Limited\n70:B3:D5:5B:80:00/36\tHellaGut\tHella Gutmann Solutions GmbH\n70:B3:D5:5B:C0:00/36\tLamtecMe\tLAMTEC Meß- und Regeltechnik für Feuerungen GmbH & Co. KG\n70:B3:D5:5B:E0:00/36\tCaswa\t\n70:B3:D5:5B:F0:00/36\tAtonSrl\tAton srl\n70:B3:D5:5C:10:00/36\tShanghai\tShanghai JaWay Information Technology Co., Ltd.\n70:B3:D5:5C:40:00/36\tTattileS\tTattile Srl\n70:B3:D5:5C:50:00/36\tHaag-Str\tHaag-Streit AG\n70:B3:D5:5C:80:00/36\tYuyamaMf\tYUYAMA MFG Co.,Ltd\n70:B3:D5:5C:A0:00/36\tAcdElekr\tACD Elekronik GmbH\n70:B3:D5:5C:C0:00/36\tAkseSrl\tAkse srl\n70:B3:D5:5C:D0:00/36\tMvtVideo\tMVT Video Technologies R + H Maedler GbR\n70:B3:D5:5C:F0:00/36\tProelTsi\tPROEL TSI s.r.l.\n70:B3:D5:5D:10:00/36\tSoftware\tSoftware Motor Corp\n70:B3:D5:5D:30:00/36\tSupracon\tSupracon AG\n70:B3:D5:5D:50:00/36\tCt\tCT Company\n70:B3:D5:5D:60:00/36\tBmtMesst\tBMT Messtechnik Gmbh\n70:B3:D5:5D:80:00/36\tLynxTech\tLYNX Technik AG\n70:B3:D5:5D:A0:00/36\tValkWeld\tValk Welding B.V.\n70:B3:D5:5D:B0:00/36\tMovicomL\tMovicom LLC\n70:B3:D5:5D:C0:00/36\tFactoryl\tFactoryLab B.V.\n70:B3:D5:5D:E0:00/36\tHangzhou\tHangzhou AwareTec Technology Co., Ltd\n70:B3:D5:5E:00:00/36\tHexagonM\tHexagon Metrology SAS\n70:B3:D5:5E:20:00/36\tGrossenb\tGrossenbacher Systeme AG\n70:B3:D5:5E:30:00/36\tImeconEn\tImecon Engineering SrL\n70:B3:D5:5E:40:00/36\tDspDesig\tDsp Design\n70:B3:D5:5E:50:00/36\tHaiyangO\tHaiyang Olix Co.,Ltd.\n70:B3:D5:5E:60:00/36\tMechatro\tMechatronics Systems Private Limited\n70:B3:D5:5E:80:00/36\tVitec\t\n70:B3:D5:5E:90:00/36\tZehetner\tZehetner-Elektronik GmbH\n70:B3:D5:5E:A0:00/36\tKys\tKys,Inc\n70:B3:D5:5E:D0:00/36\tEaElektr\tEA Elektroautomatik GmbH & Co. KG\n70:B3:D5:5E:E0:00/36\tMikrotro\tMikrotron Mikrocomputer, Digital- und Analogtechnik GmbH\n70:B3:D5:5E:F0:00/36\tStarInte\tStar Systems International\n70:B3:D5:5F:00:00/36\tManagee\tmanagee GmbH & Co KG\n70:B3:D5:5F:10:00/36\tFaterRas\tFater Rasa Noor\n70:B3:D5:5F:20:00/36\tInvisibl\tInvisible Systems Limited\n70:B3:D5:5F:30:00/36\tRtone\t\n70:B3:D5:5F:40:00/36\tFdstimin\tFDSTiming\n70:B3:D5:5F:60:00/36\tFreeflig\tFreeFlight Systems\n70:B3:D5:5F:90:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n70:B3:D5:5F:A0:00/36\tTexCompu\tTex Computer Srl\n70:B3:D5:5F:B0:00/36\tTeleplat\tTeleplatforms\n70:B3:D5:5F:C0:00/36\tSurtec\t\n70:B3:D5:5F:D0:00/36\tWindarPh\tWindar Photonics\n70:B3:D5:5F:F0:00/36\tVaisalaO\tVaisala Oyj\n70:B3:D5:60:00:00/36\tStellwer\tStellwerk GmbH\n70:B3:D5:60:20:00/36\tQuantumO\tQuantum Opus, LLC\n70:B3:D5:60:50:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:60:70:00/36\tAteme\t\n70:B3:D5:60:80:00/36\tEiitSa\tEiit Sa\n70:B3:D5:60:90:00/36\tPbsiGrou\tPBSI Group Limited\n70:B3:D5:60:A0:00/36\tTataPowe\tTata Power Sed\n70:B3:D5:60:B0:00/36\tEdgeware\tEdgeware AB\n70:B3:D5:60:C0:00/36\tIstElekt\tIST ElektronikgesmbH\n70:B3:D5:60:D0:00/36\tLinkElec\tLink Electric & Safety Control Co.\n70:B3:D5:60:E0:00/36\tHdanywhe\tHdanywhere\n70:B3:D5:60:F0:00/36\tTanakaIn\tTanaka Information System, LLC.\n70:B3:D5:61:00:00/36\tPolvisio\tPolvision\n70:B3:D5:61:10:00/36\tAvionica\t\n70:B3:D5:61:30:00/36\tSuprockT\tSuprock Technologies\n70:B3:D5:61:50:00/36\tJscOtzvu\tJsc Otzvuk\n70:B3:D5:61:60:00/36\tAxxessId\tAxxess Identification Ltd\n70:B3:D5:61:80:00/36\tMotecPty\tMotec Pty Ltd\n70:B3:D5:61:A0:00/36\tRocketLa\tRocket Lab Ltd.\n70:B3:D5:61:B0:00/36\tNubewell\tNubewell Networks Pvt Ltd\n70:B3:D5:61:C0:00/36\tEarthWor\tEarth Works\n70:B3:D5:61:D0:00/36\tTelonicB\tTelonic Berkeley Inc\n70:B3:D5:61:E0:00/36\tPkeElect\tPKE Electronics AG\n70:B3:D5:61:F0:00/36\tLabotect\tLabotect Labor-Technik-Göttingen GmbH\n70:B3:D5:62:30:00/36\tBeijingH\tBeijing HuaLian Technology Co, Ltd.\n70:B3:D5:62:50:00/36\tVxInstru\tVX Instruments GmbH\n70:B3:D5:62:80:00/36\tMectSRL\tMect S.R.L.\n70:B3:D5:62:B0:00/36\tSilicann\tSilicann Systems GmbH\n70:B3:D5:63:00:00/36\tLge\t\n70:B3:D5:63:10:00/36\tSenso2me\t\n70:B3:D5:63:40:00/36\tIdaqs\tidaqs Co.,Ltd.\n70:B3:D5:63:50:00/36\tCosylabD\tCosylab d.d.\n70:B3:D5:63:60:00/36\tGlobalco\tGlobalcom Engineering SPA\n70:B3:D5:63:70:00/36\tIneo-Sen\tINEO-SENSE\n70:B3:D5:63:A0:00/36\tDaveSrl\tDave Srl\n70:B3:D5:63:B0:00/36\tLazerSaf\tLazer Safe Pty Ltd\n70:B3:D5:63:C0:00/36\tPivothea\tPivothead\n70:B3:D5:63:D0:00/36\tStorbyte\tStorbyte, Inc.\n70:B3:D5:63:E0:00/36\tRikenOpt\tRiken Optech Corporation\n70:B3:D5:63:F0:00/36\tYg\tYg Company Co., Ltd\n70:B3:D5:64:00:00/36\tElectron\tElectronic Equipment Company Pvt. Ltd.\n70:B3:D5:64:30:00/36\tMarquesS\tMarques,S.A.\n70:B3:D5:64:40:00/36\tAtxNetwo\tATX Networks Corp\n70:B3:D5:64:50:00/36\tProjectD\tProject Decibel, Inc.\n70:B3:D5:64:70:00/36\tKzta\t\n70:B3:D5:64:90:00/36\tSwissled\tswissled technologies AG\n70:B3:D5:64:A0:00/36\tNetbricT\tNetbric Technology Co.,Ltd.\n70:B3:D5:64:B0:00/36\tKalfire\t\n70:B3:D5:64:C0:00/36\tAcemisFr\tAcemis France\n70:B3:D5:64:E0:00/36\tBigstuff\tBigStuff3, Inc.\n70:B3:D5:65:00:00/36\tGifas-El\tGIFAS-ELECTRIC GmbH\n70:B3:D5:65:10:00/36\tRoxford\t\n70:B3:D5:65:20:00/36\tRobertBo\tRobert Bosch, LLC\n70:B3:D5:65:30:00/36\tLuxarTec\tLuxar Tech, Inc.\n70:B3:D5:65:40:00/36\tEmac\tEMAC, Inc.\n70:B3:D5:65:50:00/36\tAotSyste\tAOT System GmbH\n70:B3:D5:65:60:00/36\tSonosoun\tSonoSound ApS\n70:B3:D5:65:80:00/36\tEmperorB\temperor brands\n70:B3:D5:65:90:00/36\tE2gSrl\tE2G srl\n70:B3:D5:65:A0:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:65:B0:00/36\tRoush\t\n70:B3:D5:65:C0:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:65:D0:00/36\tGegaElec\tGega Electronique\n70:B3:D5:66:00:00/36\tSmartSer\tSmart Service Technologies CO., LTD\n70:B3:D5:66:10:00/36\tDesignaE\tDesignA Electronics Limited\n70:B3:D5:66:40:00/36\tSankyoIn\tSankyo Intec co.,ltd\n70:B3:D5:66:50:00/36\tCertusus\tCertUsus GmbH\n70:B3:D5:66:60:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:66:A0:00/36\tPrivate\t\n70:B3:D5:66:B0:00/36\tInnitive\tInnitive B.V.\n70:B3:D5:67:00:00/36\tParticle\tParticle sizing systems\n70:B3:D5:67:10:00/36\tSeaShell\tSea Shell Corporation\n70:B3:D5:67:20:00/36\tKleiberI\tKLEIBER Infrared GmbH\n70:B3:D5:67:30:00/36\tAcdElekr\tACD Elekronik GmbH\n70:B3:D5:67:40:00/36\tFortress\tFortress Cyber Security\n70:B3:D5:67:50:00/36\tAlfamati\talfamation spa\n70:B3:D5:67:60:00/36\tSamwooel\tsamwooeleco\n70:B3:D5:67:70:00/36\tFraunhof\tFraunhofer-Institut IIS\n70:B3:D5:67:80:00/36\tDiniGrou\tThe Dini Group, La Jolla inc.\n70:B3:D5:67:90:00/36\tEmac\tEMAC, Inc.\n70:B3:D5:67:B0:00/36\tStesalit\tStesalit Systems Ltd\n70:B3:D5:67:D0:00/36\tAcrodea\tAcrodea, Inc.\n70:B3:D5:68:00:00/36\tBasf\tBASF Corporation\n70:B3:D5:68:20:00/36\tRosslare\tRosslare Enterprises Limited\n70:B3:D5:68:80:00/36\tMgSRL\tMG s.r.l.\n70:B3:D5:68:90:00/36\tPrismaTe\tPrisma Telecom Testing Srl\n70:B3:D5:68:C0:00/36\tNdMeter\tNd Meter\n70:B3:D5:68:D0:00/36\tMeta-Chr\tMeta-chrom Co. Ltd.\n70:B3:D5:68:E0:00/36\tCeaTechn\tCEA Technologies Pty Ltd\n70:B3:D5:68:F0:00/36\tPeekTraf\tPeek Traffic\n70:B3:D5:69:20:00/36\tHosinInd\tHosin Industrial Limited\n70:B3:D5:69:30:00/36\tAltronAS\tAltron, a.s.\n70:B3:D5:69:40:00/36\tMovither\tMoviTHERM\n70:B3:D5:69:60:00/36\tOpenGrow\tOpen Grow\n70:B3:D5:69:70:00/36\tAlazarTe\tAlazar Technologies Inc.\n70:B3:D5:69:C0:00/36\tKeepen\t\n70:B3:D5:69:E0:00/36\tPtype\tPTYPE Co., LTD.\n70:B3:D5:69:F0:00/36\tT+AElekt\tT+A elektroakustik GmbH & Co.KG\n70:B3:D5:6A:00:00/36\tActiveRe\tActive Research Limited\n70:B3:D5:6A:10:00/36\tGlialTec\tGlial Technology\n70:B3:D5:6A:50:00/36\tAkenoriP\tAkenori PTE LTD\n70:B3:D5:6A:60:00/36\tWowSyste\tWOW System\n70:B3:D5:6A:80:00/36\tVitschEl\tVitsch Electronics\n70:B3:D5:6A:90:00/36\tOhmoriEl\tOhmori Electric Industries Co.Ltd\n70:B3:D5:6A:D0:00/36\tConnit\t\n70:B3:D5:6A:F0:00/36\tSensorbe\tSensorberg GmbH\n70:B3:D5:6B:00:00/36\tPtype\tPTYPE Co., LTD.\n70:B3:D5:6B:10:00/36\tTtcTelek\tTTC TELEKOMUNIKACE, s.r.o.\n70:B3:D5:6B:20:00/36\tCrde\t\n70:B3:D5:6B:30:00/36\tDuracomm\tDuraComm Corporation\n70:B3:D5:6B:50:00/36\tArt\tArt Spa\n70:B3:D5:6B:60:00/36\tInradios\tINRADIOS GmbH\n70:B3:D5:6B:70:00/36\tGrossenb\tGrossenbacher Systeme AG\n70:B3:D5:6B:80:00/36\tBt9\t\n70:B3:D5:6B:B0:00/36\tLuceo\t\n70:B3:D5:6B:E0:00/36\tVantageI\tVantage Integrated Security Solutions Pvt Ltd\n70:B3:D5:6B:F0:00/36\tOttoBihl\tOtto Bihler Maschinenfabrik GmbH & Co. KG\n70:B3:D5:6C:10:00/36\tLabtroni\tLabtronik s.r.l.\n70:B3:D5:6C:30:00/36\tBeijingZ\tBeijing Zgh Security Research Institute Co., Ltd\n70:B3:D5:6C:50:00/36\tCjsc«Rus\tCJSC «Russian telecom equipment company» (CJSC RTEC)\n70:B3:D5:6C:70:00/36\tBectonDi\tBecton Dickinson\n70:B3:D5:6C:D0:00/36\tNorthbou\tNorthbound Networks Pty. Ltd.\n70:B3:D5:6C:F0:00/36\tPrivate\t\n70:B3:D5:6D:00:00/36\tCodeBlue\tCode Blue Corporation\n70:B3:D5:6D:10:00/36\tVisualEn\tVisual Engineering Technologies Ltd\n70:B3:D5:6D:20:00/36\tAhrensBi\tAhrens & Birner Company GmbH\n70:B3:D5:6D:30:00/36\tDeuta-We\tDEUTA-WERKE GmbH\n70:B3:D5:6D:60:00/36\tKmtronic\tKMtronic Ltd.\n70:B3:D5:6D:80:00/36\tShanghai\tShanghai YuanAn Environmental Protection Technology Co.,Ltd\n70:B3:D5:6D:90:00/36\tVectare\tVECTARE Inc\n70:B3:D5:6D:A0:00/36\tEnovativ\tEnovative Networks, Inc.\n70:B3:D5:6D:F0:00/36\tMangoDsp\tMango DSP, Inc.\n70:B3:D5:6E:00:00/36\tAbb-Dmpc\tABB SPA - DMPC\n70:B3:D5:6E:10:00/36\tShanghai\tShanghai Holystar Information Technology Co.,Ltd\n70:B3:D5:6E:40:00/36\tInstitut\tInstitute of Power Engineering, Gdansk Division\n70:B3:D5:6E:50:00/36\tDeuta-We\tDEUTA-WERKE GmbH\n70:B3:D5:6E:60:00/36\tElevenEn\tEleven Engineering Incorporated\n70:B3:D5:6E:70:00/36\tAml\t\n70:B3:D5:6E:80:00/36\tBluWirel\tBlu Wireless Technology Ltd\n70:B3:D5:6E:90:00/36\tKrontech\t\n70:B3:D5:6E:A0:00/36\tEdgeware\tEdgeware AB\n70:B3:D5:6E:B0:00/36\tQuantafl\tQuantaflow\n70:B3:D5:6E:C0:00/36\tCrde\t\n70:B3:D5:6E:D0:00/36\tWiingtec\tWiingtech International Co. LTD.\n70:B3:D5:6F:00:00/36\tItelasof\tiTelaSoft Pvt Ltd\n70:B3:D5:6F:20:00/36\tP&CMicro\tP&C Micro's Pty Ltd\n70:B3:D5:6F:30:00/36\tIungo\t\n70:B3:D5:6F:60:00/36\tAccoBran\tAcco Brands Europe\n70:B3:D5:6F:70:00/36\tEgiconSr\tEgicon Srl\n70:B3:D5:6F:80:00/36\tSenseon\tSENSEON Corporation\n70:B3:D5:6F:90:00/36\tEnvitech\tENVItech s.r.o.\n70:B3:D5:6F:A0:00/36\tDatafort\tDataforth Corporation\n70:B3:D5:6F:B0:00/36\tShachiha\tShachihata Inc.\n70:B3:D5:6F:C0:00/36\tMi\tMI Inc.\n70:B3:D5:6F:D0:00/36\tCoreAkıl\tCore Akıllı Ev Sistemleri\n70:B3:D5:6F:F0:00/36\tAkeoPlus\tAkeo Plus\n70:B3:D5:70:00:00/36\tUniversi\tUniversity Of Groningen\n70:B3:D5:70:20:00/36\tSensorHi\tSensor Highway Ltd\n70:B3:D5:70:30:00/36\tStromide\tStromIdee GmbH\n70:B3:D5:70:40:00/36\tMelecsEw\tMelecs EWS GmbH\n70:B3:D5:70:50:00/36\tDigitalM\tDigital Matter Pty Ltd\n70:B3:D5:70:60:00/36\tSmithMet\tSmith Meter, Inc.\n70:B3:D5:70:70:00/36\tKocoMoti\tKoco Motion US LLC\n70:B3:D5:70:80:00/36\tIbmResea\tIBM Research GmbH\n70:B3:D5:70:90:00/36\tAml\t\n70:B3:D5:70:A0:00/36\tPullnetT\tPULLNET TECHNOLOGY, SA DE CV SSC1012302S73\n70:B3:D5:70:F0:00/36\tAlionSci\tAlion Science & Technology\n70:B3:D5:71:00:00/36\tGuardian\tGuardian Controls International Ltd\n70:B3:D5:71:10:00/36\tX-LaserL\tX-Laser LLC\n70:B3:D5:71:20:00/36\tApgCashD\tAPG Cash Drawer, LLC\n70:B3:D5:71:40:00/36\tAlturnaN\tAlturna Networks\n70:B3:D5:71:50:00/36\tRiot\t\n70:B3:D5:71:60:00/36\tLodeBv\tLode BV\n70:B3:D5:71:70:00/36\tSecureSe\tSecure Systems & Services\n70:B3:D5:71:80:00/36\tPeekTraf\tPeek Traffic\n70:B3:D5:71:B0:00/36\tElsys\t\n70:B3:D5:71:E0:00/36\tMotecPty\tMotec Pty Ltd\n70:B3:D5:72:00:00/36\tPrivate\t\n70:B3:D5:72:10:00/36\tZoeMedic\tZoe Medical\n70:B3:D5:72:20:00/36\tUman\t\n70:B3:D5:72:30:00/36\tLgElectr\tLG Electronics\n70:B3:D5:72:40:00/36\tQuanInte\tQuan International Co., Ltd.\n70:B3:D5:72:70:00/36\tLpTechno\tLP Technologies Inc.\n70:B3:D5:72:80:00/36\tBcdAudio\tBCD Audio\n70:B3:D5:72:90:00/36\tEmac\tEMAC, Inc.\n70:B3:D5:72:C0:00/36\tNuri&GEn\tNuRi&G Engineering co,.Ltd.\n70:B3:D5:72:D0:00/36\tKronMedi\tKron Medidores\n70:B3:D5:72:E0:00/36\tMaharsys\tMaharsystem\n70:B3:D5:73:00:00/36\tVideogen\tVideogenix\n70:B3:D5:73:10:00/36\tPhoniro\tPhoniro Systems AB\n70:B3:D5:73:20:00/36\tTofwerk\tTofwerk Ag\n70:B3:D5:73:30:00/36\tSaInstru\tSA Instrumentation Limited\n70:B3:D5:73:40:00/36\tMansionI\tMansion Industry Co., Ltd.\n70:B3:D5:73:50:00/36\tSwissAud\tSwiss Audio\n70:B3:D5:73:70:00/36\tSdBiosen\tSD Biosensor\n70:B3:D5:73:90:00/36\tZigencor\tZigencorp, Inc\n70:B3:D5:73:A0:00/36\tPrivate\t\n70:B3:D5:73:B0:00/36\tS-I-C\t\n70:B3:D5:73:D0:00/36\tNetways\tNETWAYS GmbH\n70:B3:D5:73:E0:00/36\tTridentR\tTrident RFID Pty Ltd\n70:B3:D5:74:00:00/36\tPrismaTe\tPrisma Telecom Testing Srl\n70:B3:D5:74:10:00/36\tHow-E\t\n70:B3:D5:74:20:00/36\tYuyamaMf\tYUYAMA MFG Co.,Ltd\n70:B3:D5:74:30:00/36\tEaElektr\tEA Elektroautomatik GmbH & Co. KG\n70:B3:D5:74:50:00/36\tTmsiLlc\tTmsi Llc\n70:B3:D5:74:70:00/36\tEvaAutom\tEva Automation\n70:B3:D5:74:90:00/36\tGraniteR\tGranite River Labs Inc\n70:B3:D5:74:A0:00/36\tMettlerT\tMettler Toledo Hi Speed\n70:B3:D5:74:C0:00/36\tKwantCon\tKwant Controls BV\n70:B3:D5:74:D0:00/36\tSpeechTe\tSpeech Technology Center Limited\n70:B3:D5:74:E0:00/36\tPushcorp\tPushCorp, Inc.\n70:B3:D5:74:F0:00/36\tUnitedSt\tUnited States Technologies Inc.\n70:B3:D5:75:00:00/36\tNeurioTe\tNeurio Technology Inc.\n70:B3:D5:75:10:00/36\tGnf\t\n70:B3:D5:75:30:00/36\tHchKündi\tHCH. Kündig & CIE. AG\n70:B3:D5:75:50:00/36\tLandmark\tLandmarkTech Systems Technology Co.,Ltd.\n70:B3:D5:75:80:00/36\tGrossenb\tGrossenbacher Systeme AG\n70:B3:D5:75:90:00/36\tAml\t\n70:B3:D5:75:A0:00/36\tStandard\tStandard Backhaul Communications\n70:B3:D5:75:B0:00/36\tNetoolLl\tNetool LLC\n70:B3:D5:75:C0:00/36\tUpmTechn\tUPM Technology, Inc\n70:B3:D5:75:D0:00/36\tNanjingM\tNanjing Magewell Electronics Co., Ltd.\n70:B3:D5:75:E0:00/36\tCardinal\tCardinal Health\n70:B3:D5:75:F0:00/36\tVocality\tVocality international T/A Cubic\n70:B3:D5:76:00:00/36\tQualitte\tQualitteq Llc\n70:B3:D5:76:10:00/36\tCritical\tCritical Link LLC\n70:B3:D5:76:30:00/36\tATrapUsa\tA Trap, USA\n70:B3:D5:76:40:00/36\tSchmidEl\tSCHMID electronic\n70:B3:D5:76:60:00/36\tTirasoft\tTirasoft Nederland\n70:B3:D5:76:70:00/36\tFranklin\tFranklin France\n70:B3:D5:76:80:00/36\tKazanNet\tKazan Networks Corporation\n70:B3:D5:76:A0:00/36\tSwiftnet\tSwiftnet SOC Ltd\n70:B3:D5:76:B0:00/36\tEmpelor\tEMPELOR GmbH\n70:B3:D5:76:C0:00/36\tAural\tAural Ltd\n70:B3:D5:76:D0:00/36\tTrimble\t\n70:B3:D5:76:E0:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n70:B3:D5:76:F0:00/36\tOti\tOti Ltd\n70:B3:D5:77:00:00/36\tStrega\t\n70:B3:D5:77:10:00/36\tApatorMi\tApator Miitors ApS\n70:B3:D5:77:20:00/36\tEnmodus\t\n70:B3:D5:77:30:00/36\tRuggedSc\tRugged Science\n70:B3:D5:77:40:00/36\tMicramIn\tMicram Instruments Ltd\n70:B3:D5:77:50:00/36\tSonelSA\tSonel S.A.\n70:B3:D5:77:60:00/36\tPower\tPower Ltd.\n70:B3:D5:77:70:00/36\tQuercusT\tQuercus Technologies, S.L.\n70:B3:D5:77:80:00/36\tLumacron\tLumacron Technology Ltd.\n70:B3:D5:77:90:00/36\tDrBridge\tDr.Bridge Aquatech\n70:B3:D5:77:B0:00/36\tAerovisi\tAeroVision Avionics, Inc.\n70:B3:D5:77:C0:00/36\tHustyMSt\tHUSTY M.Styczen J.Hupert Sp.J.\n70:B3:D5:77:E0:00/36\tBlueMarb\tBlue Marble Communications, Inc.\n70:B3:D5:78:10:00/36\tProjectS\tProject Service S.a.s.\n70:B3:D5:78:20:00/36\tThou&Tec\tthou&tech\n70:B3:D5:78:40:00/36\tShenzhen\tShenzhen bayue software co. LTD\n70:B3:D5:78:50:00/36\tDensity\tDensity Inc.\n70:B3:D5:78:90:00/36\tSemex-En\tSEMEX-EngCon GmbH\n70:B3:D5:78:A0:00/36\tHillsHea\tHills Health Solutions\n70:B3:D5:78:B0:00/36\tJingtuPr\tJingtu Printing Systems Co., Ltd\n70:B3:D5:78:C0:00/36\tSurvalen\tSurvalent Technology Corporation\n70:B3:D5:78:E0:00/36\tEffectas\teffectas GmbH\n70:B3:D5:78:F0:00/36\tSofiha\t\n70:B3:D5:79:00:00/36\tAviPty\tAVI Pty Ltd\n70:B3:D5:79:10:00/36\tRomteckA\tRomteck Australia\n70:B3:D5:79:30:00/36\tGastechA\tGastech Australia Pty Ltd\n70:B3:D5:79:40:00/36\tShadinAv\tShadin Avionics\n70:B3:D5:79:60:00/36\tGamptMbh\tGAMPT mbH\n70:B3:D5:79:90:00/36\tVitecSys\tVitec System Engineering Inc.\n70:B3:D5:79:A0:00/36\tInnerspe\tInnerspec Technologies Inc.\n70:B3:D5:79:B0:00/36\tSoniclea\tSoniclean Pty Ltd\n70:B3:D5:79:E0:00/36\tCw2\tCW2. Gmbh & Co. KG\n70:B3:D5:7A:00:00/36\tReactec\tReactec Ltd\n70:B3:D5:7A:10:00/36\tExcelfor\tExcelfore Corporation\n70:B3:D5:7A:20:00/36\tAlphaEss\tAlpha ESS Co., Ltd.\n70:B3:D5:7A:30:00/36\tImpulseA\tImpulse Automation\n70:B3:D5:7A:40:00/36\tPotterEl\tPotter Electric Signal Co. LLC\n70:B3:D5:7A:50:00/36\tTritonEl\tTriton Electronics Ltd\n70:B3:D5:7A:60:00/36\tElectrol\tElectrolux\n70:B3:D5:7A:70:00/36\tSymbicon\tSymbicon Ltd\n70:B3:D5:7A:80:00/36\tDieentwi\tdieEntwickler Elektronik GmbH\n70:B3:D5:7A:90:00/36\tAdidas\tadidas AG\n70:B3:D5:7A:A0:00/36\tSadelSPA\tSadel S.p.A.\n70:B3:D5:7A:B0:00/36\tMicrogat\tMicrogate Srl\n70:B3:D5:7A:C0:00/36\tVeritySt\tVerity Studios AG\n70:B3:D5:7A:D0:00/36\tInsitu\tInsitu, Inc\n70:B3:D5:7A:E0:00/36\tExiFlowM\tExi Flow Measurement Ltd\n70:B3:D5:7A:F0:00/36\tHessware\tHessware GmbH\n70:B3:D5:7B:00:00/36\tMedisafe\tMedisafe International\n70:B3:D5:7B:20:00/36\tRailPowe\tRail Power Systems GmbH\n70:B3:D5:7B:30:00/36\tBroadsof\tBroadSoft Inc\n70:B3:D5:7B:40:00/36\tZumbachE\tZumbach Electronic AG\n70:B3:D5:7B:60:00/36\tAmadaMiy\tAmada Miyachi America Inc.\n70:B3:D5:7B:70:00/36\tLsb-LaSa\tLSB - LA SALLE BLANCHE\n70:B3:D5:7B:80:00/36\tSerenerg\tSerEnergy A/S\n70:B3:D5:7B:90:00/36\tQiagenIn\tQIAGEN Instruments AG\n70:B3:D5:7B:F0:00/36\tStoneThr\tStone Three\n70:B3:D5:7C:00:00/36\tTorgovyy\tTorgovyy Dom Tehnologiy Llc\n70:B3:D5:7C:10:00/36\tDataScie\tData Sciences International\n70:B3:D5:7C:20:00/36\tMorganSc\tMorgan Schaffer Inc.\n70:B3:D5:7C:30:00/36\tFleximSe\tFlexim Security Oy\n70:B3:D5:7C:70:00/36\tSiconSrl\tSicon srl\n70:B3:D5:7C:80:00/36\tCrde\t\n70:B3:D5:7C:90:00/36\tCouncilR\tCouncil Rock\n70:B3:D5:7C:D0:00/36\tMolekule\tMolekuler Goruntuleme A.S.\n70:B3:D5:7C:E0:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:7C:F0:00/36\tOrcaTech\tORCA Technologies, LLC\n70:B3:D5:7D:00:00/36\tCubitech\t\n70:B3:D5:7D:10:00/36\tSchneide\tSchneider Electric Motion USA\n70:B3:D5:7D:20:00/36\tSdkKrist\tSDK Kristall\n70:B3:D5:7D:50:00/36\tSicsSwed\tSICS Swedish ICT\n70:B3:D5:7D:60:00/36\tYukilab\t\n70:B3:D5:7D:70:00/36\tGedomo\tGedomo GmbH\n70:B3:D5:7D:90:00/36\tAtomGike\tATOM GIKEN Co.,Ltd.\n70:B3:D5:7D:C0:00/36\tSoftware\tSoftware Systems Plus\n70:B3:D5:7D:D0:00/36\tExcelMed\tExcel Medical Electronics LLC\n70:B3:D5:7D:E0:00/36\tTelaeris\tTelaeris, Inc.\n70:B3:D5:7D:F0:00/36\tRdt\tRDT Ltd\n70:B3:D5:7E:00:00/36\tSanko-Sh\tSanko-sha,inc.\n70:B3:D5:7E:10:00/36\tAppliedM\tApplied Materials\n70:B3:D5:7E:20:00/36\tDeproÉle\tDepro Électronique inc\n70:B3:D5:7E:30:00/36\tRedleafS\tRedLeaf Security\n70:B3:D5:7E:40:00/36\tC21\tC21 Systems Ltd\n70:B3:D5:7E:50:00/36\tMegaflex\tMegaflex Oy\n70:B3:D5:7E:70:00/36\tAtessa\tAtessa, Inc.\n70:B3:D5:7E:80:00/36\tMannkind\tMannkind Corporation\n70:B3:D5:7E:90:00/36\tMecselOy\tMecsel Oy\n70:B3:D5:7E:A0:00/36\tWaterkot\tWaterkotte GmbH\n70:B3:D5:7E:B0:00/36\tXeroxInt\tXerox International Partners\n70:B3:D5:7E:C0:00/36\tGridsmar\tGRIDSMART Technologies\n70:B3:D5:7E:D0:00/36\tThingsNe\tThe Things Network Foundation\n70:B3:D5:7E:E0:00/36\tAdveez\t\n70:B3:D5:7E:F0:00/36\tCravis\tCravis Co., Limited\n70:B3:D5:7F:10:00/36\tAerovisi\tAeroVision Avionics, Inc.\n70:B3:D5:7F:20:00/36\tTci\t\n70:B3:D5:7F:30:00/36\tShenzhen\tShenzhen Virtual Clusters Information Technology Co.,Ltd.\n70:B3:D5:7F:40:00/36\tKstTechn\tKST technology\n70:B3:D5:7F:50:00/36\tIncusens\tIncusense\n70:B3:D5:7F:70:00/36\tJascoApp\tJASCO Applied Sciences Canada Ltd\n70:B3:D5:7F:80:00/36\tSolveraL\tSolvera Lynx d.d.\n70:B3:D5:7F:90:00/36\tCss\tCSS Inc.\n70:B3:D5:7F:B0:00/36\tDbBroadc\tdb Broadcast Products Ltd\n70:B3:D5:7F:D0:00/36\tSysTecEl\tSYS TEC electronic GmbH\n70:B3:D5:7F:E0:00/36\tRchItali\tRCH Italia SpA\n70:B3:D5:80:40:00/36\tPmt\tPMT Corporation\n70:B3:D5:80:50:00/36\tEurotron\tEurotronik Kranj d.o.o.\n70:B3:D5:80:70:00/36\tCamsatPr\tCamsat Przemysław Gralak\n70:B3:D5:80:90:00/36\tTecnintH\tTecnint HTE SRL\n70:B3:D5:80:A0:00/36\tSensingL\tSensing Labs\n70:B3:D5:80:B0:00/36\tFischerB\tFischer Block, Inc.\n70:B3:D5:80:D0:00/36\tDataPhys\tData Physics Corporation\n70:B3:D5:80:F0:00/36\tQuickwar\tQuickware Eng & Des LLC\n70:B3:D5:81:00:00/36\tAdvice\t\n70:B3:D5:81:10:00/36\tCjsc«Int\tCJSC «INTERSET»\n70:B3:D5:81:30:00/36\tWavemedS\tWavemed srl\n70:B3:D5:81:40:00/36\tIngenieu\tIngenieurbuero SOMTRONIK\n70:B3:D5:81:60:00/36\tSmithMet\tSmith Meter, Inc.\n70:B3:D5:81:70:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:81:80:00/36\tCrde\t\n70:B3:D5:81:90:00/36\t«Intelle\t«Intellect module» LLC\n70:B3:D5:81:A0:00/36\tJoehlKoe\tJoehl & Koeferli AG\n70:B3:D5:81:B0:00/36\tBobz\tbobz GmbH\n70:B3:D5:81:E0:00/36\tNovathin\tNovathings\n70:B3:D5:82:00:00/36\tBeckerNa\tBecker Nachrichtentechnik GmbH\n70:B3:D5:82:10:00/36\tHl2Group\tHL2 group\n70:B3:D5:82:30:00/36\tSpContro\tSP Controls\n70:B3:D5:82:50:00/36\tTattileS\tTattile Srl\n70:B3:D5:82:60:00/36\tElbitOfA\tElbit Systems of America\n70:B3:D5:82:70:00/36\tMetromat\tMetromatics Pty Ltd\n70:B3:D5:82:80:00/36\tXacti\tXacti Corporation\n70:B3:D5:82:C0:00/36\tNels\tNELS Ltd.\n70:B3:D5:82:D0:00/36\tElektron\tElektronik Art S.C.\n70:B3:D5:82:E0:00/36\tPlayaliv\tPlayAlive A/S\n70:B3:D5:83:10:00/36\tArnouseD\tArnouse Digital Devices Corp\n70:B3:D5:83:30:00/36\tAlpiqInt\tAlpiq InTec Management AG\n70:B3:D5:83:50:00/36\tCommboxP\tCommBox P/L\n70:B3:D5:83:70:00/36\tHides\tHiDes, Inc.\n70:B3:D5:83:80:00/36\tTofino\t\n70:B3:D5:83:90:00/36\tRockwell\tRockwell Collins Canada\n70:B3:D5:83:B0:00/36\tTelefoni\tTelefonix Incorporated\n70:B3:D5:83:C0:00/36\tSinoembe\tSinoembed\n70:B3:D5:83:F0:00/36\tLumineLi\tLumine Lighting Solutions Oy\n70:B3:D5:84:00:00/36\tXm\t\n70:B3:D5:84:10:00/36\tStanet\tStanet Co.,Ltd\n70:B3:D5:84:20:00/36\tPlutoSol\tPLUTO Solution co.,ltd.\n70:B3:D5:84:40:00/36\tSansfilT\tSANSFIL Technologies\n70:B3:D5:84:50:00/36\tHarborsi\tHarborside Technology\n70:B3:D5:84:70:00/36\tAi-Lynx\t\n70:B3:D5:84:80:00/36\tAldridge\tAldridge Electrical Industries\n70:B3:D5:84:90:00/36\tRf-Tuote\tRF-Tuote Oy\n70:B3:D5:84:A0:00/36\tMogLabor\tMOG Laboratories Pty Ltd\n70:B3:D5:84:C0:00/36\tCorekine\tCoreKinect\n70:B3:D5:84:D0:00/36\tQuantumD\tQuantum Design Inc.\n70:B3:D5:84:E0:00/36\tChromalo\tChromalox, Inc.\n70:B3:D5:85:00:00/36\tReo\tReo Ag\n70:B3:D5:85:20:00/36\tNetboxsc\tNetBoxSC, LLC\n70:B3:D5:85:30:00/36\tHghSyste\tHgh Systemes Infrarouges\n70:B3:D5:85:40:00/36\tAdimecAd\tAdimec Advanced Image Systems\n70:B3:D5:85:50:00/36\tCrde\t\n70:B3:D5:85:70:00/36\tRchItali\tRCH Italia SpA\n70:B3:D5:85:A0:00/36\tBrushies\t\n70:B3:D5:85:B0:00/36\tTsubakim\tTsubakimoto Chain Co.\n70:B3:D5:85:C0:00/36\tRobotPub\tRobot Pub Group\n70:B3:D5:85:D0:00/36\tAthreya\tAthreya Inc\n70:B3:D5:85:E0:00/36\tXlogicSr\tXLOGIC srl\n70:B3:D5:85:F0:00/36\tYuyamaMf\tYUYAMA MFG Co.,Ltd\n70:B3:D5:86:10:00/36\tKstTechn\tKST technology\n70:B3:D5:86:20:00/36\tTripleor\tTripleOre\n70:B3:D5:86:60:00/36\tMepsReal\tMEPS Realtime\n70:B3:D5:86:80:00/36\tU-JinMes\tU-JIN Mesco Co., Ltd.\n70:B3:D5:86:C0:00/36\tEeas\teeas gmbh\n70:B3:D5:86:D0:00/36\tCensusDi\tCensus Digital Incorporated\n70:B3:D5:86:E0:00/36\tProfcon\tProfcon AB\n70:B3:D5:87:00:00/36\tBentrupI\tbentrup Industriesteuerungen\n70:B3:D5:87:10:00/36\tOsoTechn\tOso Technologies\n70:B3:D5:87:30:00/36\tVishayNo\tVishay Nobel AB\n70:B3:D5:87:50:00/36\tPeekTraf\tPeek Traffic\n70:B3:D5:87:60:00/36\tIonetech\t\n70:B3:D5:87:70:00/36\tPolynetT\tPolynet Telecommunications Consulting and Contractor Ltd.\n70:B3:D5:87:80:00/36\tPackageG\tPackage Guard, Inc\n70:B3:D5:87:90:00/36\tZigpos\tZIGPOS GmbH\n70:B3:D5:87:B0:00/36\tLiquidIn\tLiquid Instruments Pty Ltd\n70:B3:D5:87:C0:00/36\tNautel\tNautel Limited\n70:B3:D5:87:D0:00/36\tInvixium\tInvixium Access Inc.\n70:B3:D5:87:E0:00/36\tSeptentr\tSeptentrio NV\n70:B3:D5:87:F0:00/36\tNacPlann\tNAC Planning Co., Ltd.\n70:B3:D5:88:00:00/36\tSkopeiBV\tSkopei B.V.\n70:B3:D5:88:10:00/36\tTattileS\tTattile Srl\n70:B3:D5:88:20:00/36\tSimonTec\tSimon Tech, S.L.\n70:B3:D5:88:50:00/36\tQuirklog\tQuirkLogic\n70:B3:D5:88:80:00/36\tZetechti\tZetechtics Ltd\n70:B3:D5:88:90:00/36\tInnovati\tInnovative Circuit Technology\n70:B3:D5:88:A0:00/36\tPercepti\tPerceptics, LLC\n70:B3:D5:88:B0:00/36\tWuhanEas\tWUHAN EASYLINKIN TECHNOLOGY co.,LTD\n70:B3:D5:88:D0:00/36\tLgElectr\tLG Electronics\n70:B3:D5:88:F0:00/36\tQuaestaI\tQuaesta Instruments, LLC\n70:B3:D5:89:00:00/36\tEidosSRL\tEIDOS s.r.l.\n70:B3:D5:89:10:00/36\tNeocontr\tneocontrol soluções em automação\n70:B3:D5:89:20:00/36\tAbb\t\n70:B3:D5:89:30:00/36\tCubitech\t\n70:B3:D5:89:40:00/36\tUniSyste\tUnI Systech Co.,Ltd\n70:B3:D5:89:50:00/36\tIntegrat\tIntegrated Control Corp.\n70:B3:D5:89:60:00/36\tShanghai\tShanghai Longpal Communication Equipment Co., Ltd.\n70:B3:D5:89:70:00/36\tEfgCzSpo\tEFG CZ spol. s r.o.\n70:B3:D5:89:B0:00/36\tControlw\tControlWorks, Inc.\n70:B3:D5:8A:00:00/36\tDmRadioc\tDm Radiocom\n70:B3:D5:8A:20:00/36\tWinnersD\tWinners Digital Corporation\n70:B3:D5:8A:40:00/36\tPhytonMi\tPhyton, Inc. Microsystems and Development Tools\n70:B3:D5:8A:50:00/36\tKstTechn\tKST technology\n70:B3:D5:8A:60:00/36\tCrde\t\n70:B3:D5:8A:80:00/36\tMegatecE\tmegatec electronic GmbH\n70:B3:D5:8A:B0:00/36\tEmac\tEMAC, Inc.\n70:B3:D5:8A:C0:00/36\t​AsungTe\t​ASUNG TECHNO CO.,Ltd\n70:B3:D5:8A:D0:00/36\tGlobalCo\tGlobal Communications Technology LLC\n70:B3:D5:8B:00:00/36\tIesSRL\tIES S.r.l.\n70:B3:D5:8B:10:00/36\tM-TechIn\tM-Tech Innovations Limited\n70:B3:D5:8B:20:00/36\tNpfModem\tNPF Modem, LLC\n70:B3:D5:8B:30:00/36\tFireflyR\tFirefly RFID Solutions\n70:B3:D5:8B:40:00/36\tScenario\tScenario Automation\n70:B3:D5:8B:70:00/36\tContecDt\tContec DTx\n70:B3:D5:8B:90:00/36\tToptech\tToptech Systems, Inc.\n70:B3:D5:8B:E0:00/36\tConnoise\tConnoiseur Electronics Private Limited\n70:B3:D5:8C:10:00/36\tRievtech\tRievtech Electronic Co.,Ltd\n70:B3:D5:8C:20:00/36\tF-Domain\tF-domain corporation\n70:B3:D5:8C:30:00/36\tWyebot\tWyebot, Inc.\n70:B3:D5:8C:50:00/36\tHmicro\tHMicro Inc\n70:B3:D5:8C:60:00/36\tOnosokki\tOnosokki Co.,Ltd\n70:B3:D5:8C:80:00/36\tKronotec\tKronotech Srl\n70:B3:D5:8C:A0:00/36\tAlliedDa\tAllied Data Systems\n70:B3:D5:8C:B0:00/36\tWelt\tWELT Corporation\n70:B3:D5:8C:E0:00/36\tCores\tCORES Corporation\n70:B3:D5:8C:F0:00/36\tDainichi\tDainichi Denshi　Co.,LTD\n70:B3:D5:8D:00:00/36\tRaftTech\tRaft Technologies\n70:B3:D5:8D:30:00/36\tPerforma\tPerformance Controls, Inc.\n70:B3:D5:8D:70:00/36\tSchneide\tSchneider Electric Motion USA\n70:B3:D5:8D:80:00/36\tVng\tVNG Corporation\n70:B3:D5:8D:90:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n70:B3:D5:8D:A0:00/36\tMicroele\tMicroElectronics System Co.Ltd\n70:B3:D5:8D:B0:00/36\tKratosAn\tKratos Analytical Ltd\n70:B3:D5:8D:C0:00/36\tNiveoInt\tNiveo International BV\n70:B3:D5:8E:00:00/36\tSoudaxEq\tSoudax Equipements\n70:B3:D5:8E:10:00/36\tWoka-Ele\tWoKa-Elektronik GmbH\n70:B3:D5:8E:30:00/36\tDorletSa\tDorlet Sau\n70:B3:D5:8E:40:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:8E:B0:00/36\tProconEl\tProcon Electronics Pty Ltd\n70:B3:D5:8E:C0:00/36\tRudyTell\tRudy Tellert\n70:B3:D5:8E:E0:00/36\tNetworkA\tNetwork Additions\n70:B3:D5:8E:F0:00/36\tBeeperCo\tBeeper Communications Ltd.\n70:B3:D5:8F:00:00/36\tEraeseed\tERAESEEDS co.,ltd.\n70:B3:D5:8F:20:00/36\tRimota\tRimota Limited\n70:B3:D5:8F:30:00/36\tTattileS\tTattile Srl\n70:B3:D5:8F:50:00/36\tStmovic\t\n70:B3:D5:8F:60:00/36\tDofuntec\tDofuntech Co.,LTD.\n70:B3:D5:8F:70:00/36\tIESevkoA\tI.E. Sevko A.V.\n70:B3:D5:8F:80:00/36\tWi6labs\t\n70:B3:D5:8F:A0:00/36\tDeaSyste\tDea System Spa\n70:B3:D5:8F:F0:00/36\tImst\tIMST GmbH\n70:B3:D5:90:10:00/36\tAts-Conv\tATS-CONVERS\n70:B3:D5:90:20:00/36\tUnlimite\tUnlimiterhear co.,ltd. taiwan branch\n70:B3:D5:90:30:00/36\tCymtec\tCymtec Ltd\n70:B3:D5:90:40:00/36\tPhbEletr\tPHB Eletronica Ltda.\n70:B3:D5:90:60:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:90:70:00/36\tNingboCr\tNingbo Crrc Times Transducer Technology Co., Ltd\n70:B3:D5:90:80:00/36\tAccusoni\tAccusonic\n70:B3:D5:90:A0:00/36\tHangzhou\tHangzhou SunTown Intelligent Science & Technology Co.,Ltd.\n70:B3:D5:90:B0:00/36\tMatrixSw\tMatrix Switch Corporation\n70:B3:D5:90:C0:00/36\tAntek\tANTEK GmbH\n70:B3:D5:90:D0:00/36\tModtroni\tModtronix Engineering\n70:B3:D5:90:E0:00/36\tPrivate\t\n70:B3:D5:90:F0:00/36\tDtronCom\tDTRON Communications (Pty) Ltd\n70:B3:D5:91:00:00/36\tEginity\tEginity, Inc.\n70:B3:D5:91:10:00/36\tEquatel\t\n70:B3:D5:91:30:00/36\tShenzhen\tShenzhen Riitek Technology Co.,Ltd\n70:B3:D5:91:60:00/36\tTechnoMa\tTechno Mathematical Co.,Ltd\n70:B3:D5:91:70:00/36\tKsj\tKSJ Co.Ltd\n70:B3:D5:91:80:00/36\tGlovaRai\tGlova Rail A/S\n70:B3:D5:91:A0:00/36\tFujianLa\tFujian Landfone Information Technology Co.,Ltd\n70:B3:D5:91:B0:00/36\tDolotron\tDolotron d.o.o.\n70:B3:D5:91:E0:00/36\tCreotech\tCreotech Instruments S.A.\n70:B3:D5:91:F0:00/36\tJscInfor\tJSC InformInvestGroup\n70:B3:D5:92:00:00/36\tSlat\t\n70:B3:D5:92:30:00/36\tEumigInd\teumig industrie-tv GmbH\n70:B3:D5:92:40:00/36\tMeridian\tMeridian Technologies Inc\n70:B3:D5:92:50:00/36\tDiamante\tDiamante Lighting Srl\n70:B3:D5:92:70:00/36\tLgElectr\tLG Electronics\n70:B3:D5:92:90:00/36\tOutsys\t\n70:B3:D5:92:A0:00/36\tMiravue\t\n70:B3:D5:92:B0:00/36\tEntecEle\tENTEC Electric & Electronic Co., LTD.\n70:B3:D5:92:E0:00/36\tMedicalM\tMedical Monitoring Center OOD\n70:B3:D5:92:F0:00/36\tSifive\t\n70:B3:D5:93:00:00/36\tInstitut\tThe Institute of Mine Seismology\n70:B3:D5:93:20:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n70:B3:D5:93:30:00/36\tSarlS@Ti\tSARL S@TIS\n70:B3:D5:93:40:00/36\tRbsNetko\tRBS Netkom GmbH\n70:B3:D5:93:50:00/36\tSensorDe\tSensor Developments\n70:B3:D5:93:60:00/36\tFaroTech\tFaro Technologies, Inc.\n70:B3:D5:93:70:00/36\tTattileS\tTattile Srl\n70:B3:D5:93:80:00/36\tJetiTech\tJETI Technische Instrumente GmbH\n70:B3:D5:93:90:00/36\tInvertek\tInvertek Drives Ltd\n70:B3:D5:93:E0:00/36\tWithInte\tSystems With Intelligence Inc.\n70:B3:D5:94:00:00/36\tParadigm\tParadigm Technology Services B.V.\n70:B3:D5:94:10:00/36\tTriax\tTriax A/S\n70:B3:D5:94:20:00/36\tTruteqDe\tTruTeq Devices (Pty) Ltd\n70:B3:D5:94:30:00/36\tAbbottMe\tAbbott Medical Optics Inc.\n70:B3:D5:94:50:00/36\tSymbotic\tSymboticware Incorporated\n70:B3:D5:94:70:00/36\tCheckbil\tCheckbill Co,Ltd.\n70:B3:D5:94:80:00/36\tVisionAu\tVISION SYSTEMS AURTOMOTIVE (SAFETY TECH)\n70:B3:D5:94:A0:00/36\tShenzhen\tShenzhen Wisewing Internet Technology Co.,Ltd\n70:B3:D5:94:D0:00/36\tSeasonDe\tSeason Design Technology\n70:B3:D5:94:F0:00/36\tMartNetw\tMart Network Solutions Ltd\n70:B3:D5:95:00:00/36\tCmtMedic\tCMT Medical technologies\n70:B3:D5:95:20:00/36\tRequea\t\n70:B3:D5:95:30:00/36\tSpectrum\tSpectrum Techniques, LLC\n70:B3:D5:95:40:00/36\tDotSyste\tDot System S.r.l.\n70:B3:D5:95:50:00/36\tDynacard\tDynacard Co., Ltd.\n70:B3:D5:95:60:00/36\tAerovisi\tAeroVision Avionics, Inc.\n70:B3:D5:95:70:00/36\tEaElektr\tEA Elektroautomatik GmbH & Co. KG\n70:B3:D5:95:80:00/36\tPurelifi\tpureLiFi Ltd\n70:B3:D5:95:90:00/36\tZulexInt\tZulex International Co.,Ltd.\n70:B3:D5:95:A0:00/36\tSigmannE\tSigmann Elektronik GmbH\n70:B3:D5:95:B0:00/36\tSrsGroup\tSRS Group s.r.o.\n70:B3:D5:95:C0:00/36\tWilsonEl\tWilson Electronics\n70:B3:D5:95:E0:00/36\tBlocksiL\tBlocksi Llc\n70:B3:D5:96:00:00/36\tHorizonT\tHorizon Telecom\n70:B3:D5:96:10:00/36\tTaskSist\tTask Sistemas De Computacao Ltda\n70:B3:D5:96:30:00/36\tTriax\tTriax A/S\n70:B3:D5:96:60:00/36\tDaTomato\tdA Tomato Limited\n70:B3:D5:96:70:00/36\tTattileS\tTattile Srl\n70:B3:D5:96:80:00/36\tLgmIngén\tLGM Ingénierie\n70:B3:D5:96:90:00/36\tEmtelSys\tEmtel System Sp. z o.o.\n70:B3:D5:96:B0:00/36\tFocal-Jm\tFOCAL-JMLab\n70:B3:D5:96:D0:00/36\tMsbElekt\tMSB Elektronik und Gerätebau GmbH\n70:B3:D5:96:F0:00/36\t4cam\t4CAM GmbH\n70:B3:D5:97:30:00/36\tAutonomi\tAutonomic Controls, Inc.\n70:B3:D5:97:40:00/36\tJirehInd\tJireh Industries Ltd.\n70:B3:D5:97:50:00/36\tCoesterA\tCoester Automação Ltda\n70:B3:D5:97:60:00/36\tAtonarpM\tAtonarp Micro-Systems India Pvt. Ltd.\n70:B3:D5:97:70:00/36\tEngageTe\tEngage Technologies\n70:B3:D5:97:80:00/36\tSatixfyI\tSatixfy Israel Ltd.\n70:B3:D5:97:A0:00/36\tOrion\tOrion Corporation\n70:B3:D5:97:C0:00/36\tNu-TekPo\tNu-Tek Power Controls and Automation\n70:B3:D5:97:F0:00/36\tBistos\tBISTOS.,Co.,Ltd\n70:B3:D5:98:10:00/36\tZamirRec\tZamir Recognition Systems Ltd.\n70:B3:D5:98:40:00/36\tSanminaI\tSanmina Israel\n70:B3:D5:98:50:00/36\tBurkTech\tBurk Technology\n70:B3:D5:98:60:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:98:70:00/36\tAxis\tAxis Corporation\n70:B3:D5:98:90:00/36\tDcns\t\n70:B3:D5:98:B0:00/36\tRichardP\tRichard Paul Russell Ltd\n70:B3:D5:98:C0:00/36\tUniversi\tUniversity of Wisconsin Madison - Department of High Energy Physics\n70:B3:D5:98:E0:00/36\tAutocomD\tAutocom Diagnostic Partner AB\n70:B3:D5:98:F0:00/36\tSpacefli\tSpaceflight Industries\n70:B3:D5:99:10:00/36\tJavaspar\tJavasparrow Inc.\n70:B3:D5:99:30:00/36\tIothings\t\n70:B3:D5:99:40:00/36\tKeffNetw\tKeFF Networks\n70:B3:D5:99:50:00/36\tLaytec\tLayTec AG\n70:B3:D5:99:60:00/36\tXpertsea\tXpertSea Solutions inc.\n70:B3:D5:99:70:00/36\tProtomIn\tProTom International\n70:B3:D5:99:90:00/36\tLogicube\tLogicube Inc\n70:B3:D5:99:A0:00/36\tKevic\tKEVIC. inc,\n70:B3:D5:99:C0:00/36\tEnerwise\tEnerwise Solutions Ltd.\n70:B3:D5:99:E0:00/36\tTrinityC\tTrinity College Dublin\n70:B3:D5:99:F0:00/36\tConfedBV\tConfed Holding B.V.\n70:B3:D5:9A:00:00/36\tEldes\t\n70:B3:D5:9A:10:00/36\tItsIndus\tITS Industrial Turbine Services GmbH\n70:B3:D5:9A:70:00/36\tHoneywel\tHoneywell\n70:B3:D5:9A:A0:00/36\tTecsysDo\tTecsys do Brasil Industrial Ltda\n70:B3:D5:9A:B0:00/36\tGroupePa\tGroupe Paris-Turf\n70:B3:D5:9A:D0:00/36\tFortunaI\tFortuna Impex Pvt ltd\n70:B3:D5:9A:E0:00/36\tVolansys\tVolansys technologies pvt ltd\n70:B3:D5:9B:10:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:9B:20:00/36\tContinen\tCONTINENT, Ltd\n70:B3:D5:9B:30:00/36\tK&JSchmi\tK&J Schmittschneider AG\n70:B3:D5:9B:40:00/36\tMyoungsu\tMyoungSung System\n70:B3:D5:9B:50:00/36\tIdeetron\tIdeetron b.v.\n70:B3:D5:9B:60:00/36\tIntercom\tIntercomp S.p.A.\n70:B3:D5:9B:80:00/36\tLoma\tLoma Systems\n70:B3:D5:9B:A0:00/36\tAtimRadi\tATIM Radiocommunication\n70:B3:D5:9B:D0:00/36\tSignalPr\tSignal Processing Devices Sweden AB\n70:B3:D5:9C:00:00/36\tSchneide\tSchneider Displaytechnik GmbH\n70:B3:D5:9C:10:00/36\tZeroplus\tZeroplus Technology Co.,Ltd.\n70:B3:D5:9C:60:00/36\tOverspee\tOverspeed SARL\n70:B3:D5:9C:70:00/36\tYuyamaMf\tYUYAMA MFG Co.,Ltd\n70:B3:D5:9C:80:00/36\tAppliedE\tApplied Systems Engineering, Inc.\n70:B3:D5:9C:90:00/36\tPkSound\tPK Sound\n70:B3:D5:9C:A0:00/36\tKomsisEl\tKomsis Elektronik Sistemleri San. Tic. Ltd.Sti\n70:B3:D5:9C:B0:00/36\tAlligato\tAlligator Communications\n70:B3:D5:9C:E0:00/36\tTerragen\tTerragene S.A\n70:B3:D5:9D:00:00/36\tRj45Tech\tRJ45 Technologies\n70:B3:D5:9D:10:00/36\tOs42UgHa\tOS42 UG (haftungsbeschraenkt)\n70:B3:D5:9D:20:00/36\tAcsMotio\tAcs Motion Control\n70:B3:D5:9D:30:00/36\tCommunic\tCommunication Technology Ltd.\n70:B3:D5:9D:40:00/36\tTransasM\tTransas Marine Limited\n70:B3:D5:9D:50:00/36\tSouthern\tSouthern Tier Technologies\n70:B3:D5:9D:70:00/36\tKmOptoel\tKM OptoElektronik GmbH\n70:B3:D5:9D:90:00/36\tAtxNetwo\tATX Networks Corp\n70:B3:D5:9D:B0:00/36\tCasMedic\tCAS Medical Systems, Inc\n70:B3:D5:9D:C0:00/36\tShanghai\tShanghai Daorech Industry Developmnet Co.,Ltd\n70:B3:D5:9D:D0:00/36\tHumaneye\tHumanEyes Technologies Ltd.\n70:B3:D5:9D:E0:00/36\tSystem11\tSystem 11 Sp. z o.o.\n70:B3:D5:9D:F0:00/36\tDobeComp\tDOBE Computing\n70:B3:D5:9E:00:00/36\tEsIndust\tES Industrial Systems Co., Ltd.\n70:B3:D5:9E:20:00/36\tOfilUsa\tOfil USA\n70:B3:D5:9E:30:00/36\tLgElectr\tLG Electronics\n70:B3:D5:9E:60:00/36\tBlocksiL\tBlocksi Llc\n70:B3:D5:9E:70:00/36\tXiamenMa\tXiamen Maxincom Technologies Co., Ltd.\n70:B3:D5:9E:B0:00/36\tPrestonI\tPreston Industries dba PolyScience\n70:B3:D5:9E:C0:00/36\tEsoftthi\teSoftThings\n70:B3:D5:9E:D0:00/36\tBenchmar\tBenchmark Electronics BV\n70:B3:D5:9E:F0:00/36\tCottonwo\tCottonwood Creek Technologies, Inc.\n70:B3:D5:9F:00:00/36\tFujicom\tFUJICOM Co.,Ltd.\n70:B3:D5:9F:10:00/36\tRfel\tRFEL Ltd\n70:B3:D5:9F:20:00/36\tAcordeTe\tAcorde Technologies\n70:B3:D5:9F:30:00/36\tIeeeRegi\tIEEE Registration Authority\n70:B3:D5:9F:40:00/36\tTbandSrl\tTband srl\n70:B3:D5:9F:50:00/36\tVickersE\tVickers Electronics Ltd\n70:B3:D5:9F:60:00/36\tEdgeware\tEdgeware AB\n70:B3:D5:9F:80:00/36\tAsymmetr\tAsymmetric Technologies\n70:B3:D5:9F:90:00/36\tFluidCom\tFluid Components Intl\n70:B3:D5:9F:A0:00/36\tIdeasSrl\tIdeas srl\n70:B3:D5:9F:B0:00/36\tUnicomGl\tUnicom Global, Inc.\n70:B3:D5:A0:00:00/36\tAtxNetwo\tAtx Networks Ltd\n70:B3:D5:A0:10:00/36\tFeldtech\tFeldTech GmbH\n70:B3:D5:A0:30:00/36\tPrivate\t\n70:B3:D5:A0:40:00/36\tGaleaEle\tGalea Electric S.L.\n70:B3:D5:A0:50:00/36\tTransasM\tTransas Marine Limited\n70:B3:D5:A0:60:00/36\tKopisMob\tKopis Mobile LLC\n70:B3:D5:A0:70:00/36\tIotrekTe\tIoTrek Technology Private Limited\n70:B3:D5:A0:80:00/36\tBiobusin\tBioBusiness\n70:B3:D5:A0:A0:00/36\tCapsys\t\n70:B3:D5:A0:B0:00/36\tAmbihome\tambiHome GmbH\n70:B3:D5:A0:D0:00/36\tGlobalco\tGlobalcom Engineering SPA\n70:B3:D5:A0:E0:00/36\tVetaphon\tVetaphone A/S\n70:B3:D5:A1:00:00/36\tW-Tec\tw-tec AG\n70:B3:D5:A1:20:00/36\tQuercusT\tQuercus Technologies, S.L.\n70:B3:D5:A1:30:00/36\tUplevel\tUplevel Systems Inc\n70:B3:D5:A1:50:00/36\tIntercor\tIntercore GmbH\n70:B3:D5:A1:70:00/36\tTunstall\tTunstall A/S\n70:B3:D5:A1:80:00/36\tEmbedded\tEmbedded Systems Lukasz Panasiuk\n70:B3:D5:A1:90:00/36\tQualitro\tQualitronix Madrass Pvt Ltd\n70:B3:D5:A1:B0:00/36\tPotterEl\tPotter Electric Signal Co. LLC\n70:B3:D5:A1:C0:00/36\tMecaSyst\tMeca System\n70:B3:D5:A1:D0:00/36\tFluidCom\tFluid Components International\n70:B3:D5:A1:F0:00/36\tGlobalte\tGlobalTest LLC\n70:B3:D5:A2:00:00/36\tDesignFo\tDesign For Life Systems\n70:B3:D5:A2:10:00/36\tPpi\tPPI Inc.\n70:B3:D5:A2:50:00/36\tPulsetor\tPulseTor LLC\n70:B3:D5:A2:60:00/36\tHearGear\tHear Gear, Inc.\n70:B3:D5:A2:70:00/36\tHdlDaAma\tHDL da Amazônia Industria Eletrônica Ltda\n70:B3:D5:A2:80:00/36\tPeekTraf\tPeek Traffic\n70:B3:D5:A2:90:00/36\tQiagenIn\tQIAGEN Instruments AG\n70:B3:D5:A2:A0:00/36\tRedwood\tRedwood Systems\n70:B3:D5:A2:C0:00/36\tTlv\tTlv Co., Ltd.\n70:B3:D5:A2:E0:00/36\tKokam\tKokam Co., Ltd\n70:B3:D5:A2:F0:00/36\tBotek\tBotek Systems AB\n70:B3:D5:A3:00:00/36\tShenZhen\tSHEN ZHEN HUAWANG TECHNOLOGY CO; LTD\n70:B3:D5:A3:20:00/36\tToughdog\tToughdog Security Systems\n70:B3:D5:A3:30:00/36\tTiama\t\n70:B3:D5:A3:50:00/36\tSiconSrl\tSicon srl\n70:B3:D5:A3:60:00/36\tBeijingD\tBeijing DamingWuzhou Science&Technology Co., Ltd.\n70:B3:D5:A3:70:00/36\tMitsubis\tMitsubishi Heavy Industries Thermal Systems, Ltd.\n70:B3:D5:A3:A0:00/36\tEpsoft\tEPSOFT Co., Ltd\n70:B3:D5:A3:B0:00/36\tGraceDes\tGrace Design/Lunatec LLC\n70:B3:D5:A3:C0:00/36\tWaveMusi\tWave Music Ltd\n70:B3:D5:A3:F0:00/36\tPhpowerS\tPHPower Srl\n70:B3:D5:A4:00:00/36\tStrackLi\tSTRACK LIFT AUTOMATION GmbH\n70:B3:D5:A4:30:00/36\tOledcomm\t\n70:B3:D5:A4:40:00/36\tFsr\tFSR Inc\n70:B3:D5:A4:60:00/36\tFoxconn4\tFoxconn 4Tech\n70:B3:D5:A4:70:00/36\tKanoa\tKanoa Inc\n70:B3:D5:A4:80:00/36\tAppliedS\tApplied Satellite Engineering\n70:B3:D5:A4:A0:00/36\tBeijingA\tBeijing Arrow SEED Technology Co,.Ltd.\n70:B3:D5:A4:B0:00/36\tMckayBro\tMcKay Brothers LLC\n70:B3:D5:A4:C0:00/36\tAlereTec\tAlere Technologies AS\n70:B3:D5:A4:E0:00/36\tArrayTec\tArray Technologies Inc.\n70:B3:D5:A4:F0:00/36\tWeltekTe\tWeltek Technologies Co. Ltd.\n70:B3:D5:A5:00:00/36\tLecip\tLecip Corporation\n70:B3:D5:A5:10:00/36\tRfCode\tRF Code\n70:B3:D5:A5:30:00/36\tGsIndust\tGS Industrie-Elektronik GmbH\n70:B3:D5:A5:40:00/36\tProvedo\t\n70:B3:D5:A5:50:00/36\tEmbestTe\tEmbest Technology Co., Ltd\n70:B3:D5:A5:60:00/36\tDorletSa\tDorlet Sau\n70:B3:D5:A5:70:00/36\tPcsc\t\n70:B3:D5:A5:80:00/36\tMcqTech\tMCQ TECH GmbH\n70:B3:D5:A5:90:00/36\tMuuntosä\tMuuntosähkö Oy - Trafox\n70:B3:D5:A5:A0:00/36\tRcsEnerg\tRCS Energy Management Ltd\n70:B3:D5:A5:B0:00/36\tChristEl\tChrist Elektronik GmbH\n70:B3:D5:A5:C0:00/36\tMolekule\t\n70:B3:D5:A5:E0:00/36\tConectai\tConectaIP Tecnologia S.L.\n70:B3:D5:A5:F0:00/36\tDaatrics\tDaatrics LTD\n70:B3:D5:A6:20:00/36\tEnvirone\tEnvironexus\n70:B3:D5:A6:40:00/36\tNewshine\t\n70:B3:D5:A6:60:00/36\tTrapezeS\tTrapeze Software Group Inc\n70:B3:D5:A6:90:00/36\tLeviatha\tLeviathan Solutions Ltd.\n70:B3:D5:A6:D0:00/36\tMetekMet\tMetek Meteorologische Messtechnik GmbH\n70:B3:D5:A6:E0:00/36\tJscElect\tJSC Electrical Equipment Factory\n70:B3:D5:A6:F0:00/36\t8cups\t\n70:B3:D5:A7:10:00/36\tSamwellI\tSamwell International Inc\n70:B3:D5:A7:20:00/36\tBusiness\tBusiness Marketers Group, Inc.\n70:B3:D5:A7:30:00/36\tMobiprom\tMobiPromo\n70:B3:D5:A7:60:00/36\tPietroFi\tPietro Fiorentini\n70:B3:D5:A7:80:00/36\tBionics\tBionics co.,ltd.\n70:B3:D5:A7:A0:00/36\tFluidMan\tFluid Management Technology\n70:B3:D5:A7:C0:00/36\tTransele\tTranselektronik Messgeräte GmbH\n70:B3:D5:A7:E0:00/36\tQuiccoSo\tQUICCO SOUND Corporation\n70:B3:D5:A8:10:00/36\tSiendaNe\tSienda New Media Technologies GmbH\n70:B3:D5:A8:20:00/36\tTelefran\tTelefrank GmbH\n70:B3:D5:A8:50:00/36\tExceetEl\texceet electronics GesmbH\n70:B3:D5:A8:60:00/36\tDivigrap\tDivigraph (Pty) LTD\n70:B3:D5:A8:70:00/36\tTornadoM\tTornado Modular Systems\n70:B3:D5:A8:80:00/36\tShangdon\tShangdong Bosure Automation Technology Ltd\n70:B3:D5:A8:90:00/36\tGbsCommu\tGbs Communications, Llc\n70:B3:D5:A8:B0:00/36\tGiantPow\tGiant Power Technology Biomedical Corporation\n70:B3:D5:A8:D0:00/36\tCodeBlue\tCode Blue Corporation\n70:B3:D5:A8:E0:00/36\tOmeshCit\tOmesh City Group\n70:B3:D5:A9:00:00/36\tEraAS\tERA a.s.\n70:B3:D5:A9:10:00/36\tIdealInd\tIDEAL INDUSTRIES Ltd t/a Casella\n70:B3:D5:A9:20:00/36\tGrossenb\tGrossenbacher Systeme AG\n70:B3:D5:A9:30:00/36\tMesCommu\tMes Communication Co., Ltd\n70:B3:D5:A9:40:00/36\tEtaTechn\tETA Technology Pvt Ltd\n70:B3:D5:A9:50:00/36\tDeuta-We\tDEUTA-WERKE GmbH\n70:B3:D5:A9:60:00/36\tÖstlingM\tÖstling Marking Systems GmbH\n70:B3:D5:A9:70:00/36\tBizwerks\tBizwerks, LLC\n70:B3:D5:A9:90:00/36\tBandelin\tBandelin electronic GmbH & Co. KG\n70:B3:D5:A9:A0:00/36\tAmphenol\tAmphenol Advanced Sensors\n70:B3:D5:A9:C0:00/36\tVeoTechn\tVeo Technologies\n70:B3:D5:A9:D0:00/36\tVitecMul\tVitec Multimedia\n70:B3:D5:A9:E0:00/36\tArgonSt\tArgon ST\n70:B3:D5:A9:F0:00/36\tPrivate\t\n70:B3:D5:AA:00:00/36\tSimpleWo\tSimple Works, Inc.\n70:B3:D5:AA:10:00/36\tShenzhen\tShenzhen Weema TV Technology Co.,Ltd.\n70:B3:D5:AA:20:00/36\tEumigInd\teumig industrie-TV GmbH.\n70:B3:D5:AA:30:00/36\tLineageP\tLineage Power Pvt Ltd.,\n70:B3:D5:AA:40:00/36\tPullnetT\tPullnet Technology,S.L.\n70:B3:D5:AA:60:00/36\tProximus\t\n70:B3:D5:AA:70:00/36\tAteme\t\n70:B3:D5:AA:80:00/36\tWest-Com\tWest-Com Nurse Call Systems, Inc.\n70:B3:D5:AA:A0:00/36\tXemexNv\tXemex NV\n70:B3:D5:AA:C0:00/36\tSensotec\tSensoTec GmbH\n70:B3:D5:AA:D0:00/36\tBartec\tBartec GmbH\n70:B3:D5:AA:E0:00/36\tNuvizOy\tNuviz Oy\n70:B3:D5:AA:F0:00/36\tExiFlowM\tExi Flow Measurement Ltd\n70:B3:D5:AB:00:00/36\tOsrR&DIs\tOSR R&D ISRAEL LTD\n70:B3:D5:AB:30:00/36\tMicas\tMicas Ag\n70:B3:D5:AB:40:00/36\tSysTecEl\tSYS TEC electronic GmbH\n70:B3:D5:AB:50:00/36\tBroadsof\tBroadSoft Inc\n70:B3:D5:AB:70:00/36\tSiglead\tSiglead Inc\n70:B3:D5:AB:80:00/36\tHoribaAb\tHoriba Abx Sas\n70:B3:D5:AB:90:00/36\tDynamicC\tDynamic Controls\n70:B3:D5:AB:A0:00/36\tClIntern\tCL International\n70:B3:D5:AB:C0:00/36\tBkm-Micr\tBKM-Micronic Richtfunkanlagen GmbH\n70:B3:D5:AB:E0:00/36\tMartNetw\tMart Network Solutions Ltd\n70:B3:D5:AB:F0:00/36\tAgrInter\tAGR International\n70:B3:D5:AC:10:00/36\tAemSinga\tAEM Singapore Pte. Ltd.\n70:B3:D5:AC:30:00/36\tNovoptel\tNovoptel GmbH\n70:B3:D5:AC:40:00/36\tLexiDevi\tLexi Devices, Inc.\n70:B3:D5:AC:50:00/36\tAtomGike\tATOM GIKEN Co.,Ltd.\n70:B3:D5:AC:60:00/36\tSmtc\tSMTC Corporation\n70:B3:D5:AC:70:00/36\tVivamos\t\n70:B3:D5:AC:80:00/36\tHeartlan\tHeartland.Data Inc.\n70:B3:D5:AC:90:00/36\tTrinityS\tTrinity Solutions LLC\n70:B3:D5:AC:B0:00/36\tTattileS\tTattile Srl\n70:B3:D5:AC:D0:00/36\tCrde\t\n70:B3:D5:AC:F0:00/36\tApgCashD\tAPG Cash Drawer, LLC\n70:B3:D5:AD:10:00/36\tSensileT\tSensile Technologies SA\n70:B3:D5:AD:20:00/36\tWart-Ele\tWart-Elektronik\n70:B3:D5:AD:50:00/36\tBirdland\tBirdland Audio\n70:B3:D5:AD:60:00/36\tLemonade\tLemonade Lab Inc\n70:B3:D5:AD:80:00/36\tEuklisBy\tEuklis by GSG International\n70:B3:D5:AD:A0:00/36\tPrivate\t\n70:B3:D5:AD:B0:00/36\tRfCode\tRF Code\n70:B3:D5:AD:D0:00/36\tGhlBerha\tGHL Systems Berhad\n70:B3:D5:AD:E0:00/36\tIsacSrl\tIsac Srl\n70:B3:D5:AD:F0:00/36\tSeraphim\tSeraphim Optronics Ltd\n70:B3:D5:AE:00:00/36\tAnycomm\tAnyComm.Co.,Ltd.\n70:B3:D5:AE:10:00/36\tDimocore\tDimoCore Corporation\n70:B3:D5:AE:20:00/36\tTransasM\tTransas Marine Limited\n70:B3:D5:AE:30:00/36\tZhejiang\tZhejiang Wellsun Electric Meter Co.,Ltd\n70:B3:D5:AE:50:00/36\tBeatcraf\tBeatCraft, Inc.\n70:B3:D5:AE:60:00/36\tYaBathoT\tYa Batho Trading (Pty) Ltd\n70:B3:D5:AE:70:00/36\tE-T-AEle\tE-T-A Elektrotechnische Apparate GmbH\n70:B3:D5:AE:90:00/36\tCariElec\tCari Electronic\n70:B3:D5:AE:A0:00/36\tBbrVerke\tBBR Verkehrstechnik GmbH\n70:B3:D5:AE:B0:00/36\tAssociat\tAssociation Romandix\n70:B3:D5:AE:E0:00/36\tDitestFa\tDiTEST Fahrzeugdiagnose GmbH\n70:B3:D5:AE:F0:00/36\tBaumtec\tBaumtec GmbH\n70:B3:D5:AF:00:00/36\tSeasonDe\tSeason Design Technology\n70:B3:D5:AF:10:00/36\tEmkaTech\tEmka Technologies\n70:B3:D5:AF:20:00/36\tTrueNetw\tTrue Networks Ltd.\n70:B3:D5:AF:30:00/36\tNewJapan\tNew Japan Radio Co., Ltd\n70:B3:D5:AF:40:00/36\tTattileS\tTattile Srl\n70:B3:D5:AF:50:00/36\tNetAndPr\tNet And Print Inc.\n70:B3:D5:AF:60:00/36\tSCESrl\tS.C.E. srl\n70:B3:D5:AF:70:00/36\tDimosyst\tDimoSystems BV\n70:B3:D5:AF:80:00/36\tBoekel\t\n70:B3:D5:AF:90:00/36\tCritical\tCritical Link LLC\n70:B3:D5:AF:A0:00/36\tPowerSec\tPower Security Systems Ltd.\n70:B3:D5:AF:B0:00/36\tShanghai\tShanghai Tianhe Automation Instrumentation Co., Ltd.\n70:B3:D5:AF:E0:00/36\tMesotech\tMesotechnic\n70:B3:D5:AF:F0:00/36\tDigital-\tdigital-spice\n70:B3:D5:B0:20:00/36\tNordicAu\tNordic Automation Systems AS\n70:B3:D5:B0:40:00/36\tHerrmann\tHerrmann Datensysteme GmbH\n70:B3:D5:B0:50:00/36\tE-PlusTe\tE-PLUS TECHNOLOGY CO., LTD\n70:B3:D5:B0:70:00/36\tArrowval\tArrowvale Electronics\n70:B3:D5:B0:80:00/36\tSecuinfo\tSecuinfo Co. Ltd\n70:B3:D5:B0:90:00/36\tFirstLig\tFirst Light Imaging\n70:B3:D5:B0:B0:00/36\tInternet\tInternet Protocolo Logica Sl\n70:B3:D5:B0:C0:00/36\tVigilate\tVigilate srl\n70:B3:D5:B0:F0:00/36\tMerkurFu\tmerkur Funksysteme AG\n70:B3:D5:B1:10:00/36\tCabSRL\tCab S.R.L.\n70:B3:D5:B1:30:00/36\tOmwave\t\n70:B3:D5:B1:50:00/36\tEtaBetaS\tEta Beta Srl\n70:B3:D5:B1:60:00/36\tXiAnShen\tXI'AN SHENMING ELECTRON TECHNOLOGY CO.,LTD\n70:B3:D5:B1:70:00/36\tIntesens\t\n70:B3:D5:B1:80:00/36\tAbbasAS\tAbbas, a.s.\n70:B3:D5:B1:A0:00/36\tAaronia\tAaronia AG\n70:B3:D5:B1:D0:00/36\tSafeletB\tSafelet BV\n70:B3:D5:B1:E0:00/36\tFen\tFen Systems Ltd\n70:B3:D5:B1:F0:00/36\tTecnowat\tTecnowatt\n70:B3:D5:B2:10:00/36\tTattileS\tTattile Srl\n70:B3:D5:B2:30:00/36\tSupervis\tSupervision Test et Pilotage\n70:B3:D5:B2:40:00/36\tDatasatD\tDatasat Digital Entertainment\n70:B3:D5:B2:60:00/36\tIntecInt\tINTEC International GmbH\n70:B3:D5:B2:80:00/36\tHustyMSt\tHUSTY M.Styczen J.Hupert sp.j.\n70:B3:D5:B2:90:00/36\tWivicom\tWiViCom Co., Ltd.\n70:B3:D5:B2:A0:00/36\tMyroCont\tMyro Control, LLC\n70:B3:D5:B2:B0:00/36\tVtronPty\tVtron Pty Ltd\n70:B3:D5:B2:E0:00/36\tGreenAcc\tGreen Access Ltd\n70:B3:D5:B3:00:00/36\tSystoléH\tSystolé Hardware B.V.\n70:B3:D5:B3:10:00/36\tQwave\tQwave Inc\n70:B3:D5:B3:30:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:B3:40:00/36\tMedtroni\tMedtronic\n70:B3:D5:B3:50:00/36\tRexxam\tRexxam Co.,Ltd.\n70:B3:D5:B3:70:00/36\tCodec\tCODEC Co., Ltd.\n70:B3:D5:B3:90:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n70:B3:D5:B3:A0:00/36\tAdigital\tAdigitalmedia\n70:B3:D5:B3:B0:00/36\tInsitu\tInsitu, Inc\n70:B3:D5:B3:C0:00/36\tDorletSa\tDorlet Sau\n70:B3:D5:B3:D0:00/36\tInras\tInras GmbH\n70:B3:D5:B3:E0:00/36\tParadigm\tParadigm Communication Systems Ltd\n70:B3:D5:B3:F0:00/36\tOrbitInt\tOrbit International\n70:B3:D5:B4:00:00/36\tWuhanXin\tWuhan Xingtuxinke ELectronic Co.,Ltd\n70:B3:D5:B4:30:00/36\tZaoZeo\tZao Zeo\n70:B3:D5:B4:40:00/36\tEntecEle\tENTEC Electric & Electronic Co., LTD.\n70:B3:D5:B4:70:00/36\tDsitSolu\tDSIT Solutions LTD\n70:B3:D5:B4:80:00/36\tDwqInfor\tDWQ Informatikai Tanacsado es Vezerlestechnikai KFT\n70:B3:D5:B4:90:00/36\tAnalogic\tAnalogics Tech India Ltd\n70:B3:D5:B4:A0:00/36\tMedex\t\n70:B3:D5:B4:D0:00/36\tAvidbots\tAvidbots Corporation\n70:B3:D5:B5:10:00/36\tCritical\tCritical Link LLC\n70:B3:D5:B5:30:00/36\tRevoluti\tRevolution Retail Systems, LLC\n70:B3:D5:B5:50:00/36\tCtag-Esg\tCTAG - ESG36871424\n70:B3:D5:B5:60:00/36\tPowerEle\tPower Electronics Espana, S.L.\n70:B3:D5:B5:90:00/36\tFuturete\tFutureTechnologyLaboratories INC.\n70:B3:D5:B5:C0:00/36\tProzessT\tProzess Technologie\n70:B3:D5:B6:20:00/36\tSakuraSe\tSakura Seiki Co.,Ltd.\n70:B3:D5:B6:40:00/36\tOsungLst\tOsung Lst Co.,Ltd.\n70:B3:D5:B6:60:00/36\tSilentGl\tSilent Gliss International Ltd\n70:B3:D5:B6:70:00/36\tRedwaveL\tRedWave Labs Ltd\n70:B3:D5:B6:A0:00/36\tYuyamaMf\tYUYAMA MFG Co.,Ltd\n70:B3:D5:B6:B0:00/36\tCambria\tCambria Corporation\n70:B3:D5:B6:C0:00/36\tGhm-Mess\tGHM-Messtechnik GmbH (Standort IMTRON)\n70:B3:D5:B6:D0:00/36\tMovis\t\n70:B3:D5:B7:10:00/36\tPrivate\t\n70:B3:D5:B7:20:00/36\tUb330Net\tUB330.net d.o.o.\n70:B3:D5:B7:40:00/36\tOnyield\tOnYield Inc Ltd\n70:B3:D5:B7:70:00/36\tMotecPty\tMotec Pty Ltd\n70:B3:D5:B7:80:00/36\tHoermann\tHOERMANN GmbH\n70:B3:D5:B7:A0:00/36\tMahle\t\n70:B3:D5:B7:C0:00/36\tElectron\tElectronic Navigation Ltd\n70:B3:D5:B7:D0:00/36\tLogixIts\tLOGIX ITS Inc\n70:B3:D5:B7:E0:00/36\tElbitOfA\tElbit Systems of America - Fort Worth Operations\n70:B3:D5:B7:F0:00/36\tJskSyste\tJSK System\n70:B3:D5:B8:10:00/36\tInstroPr\tInstro Precision Limited\n70:B3:D5:B8:20:00/36\tLookoutP\tLookout Portable Security\n70:B3:D5:B8:50:00/36\tFenotech\tFenotech Inc.\n70:B3:D5:B8:80:00/36\tArp\tARP Corporation\n70:B3:D5:B8:90:00/36\tIda\t\n70:B3:D5:B8:A0:00/36\tNexusTec\tNexus Tech. VN\n70:B3:D5:B8:B0:00/36\tProfound\tProfound Medical Inc.\n70:B3:D5:B8:C0:00/36\tEpointEm\tePOINT Embedded Computing Limited\n70:B3:D5:B8:D0:00/36\tJungwooe\tJungwooEng Co., Ltd\n70:B3:D5:B8:E0:00/36\tUrFogSRL\tUr Fog S.R.L.\n70:B3:D5:B8:F0:00/36\tAssembly\tAssembly Contracts Ltd\n70:B3:D5:B9:10:00/36\tDynetics\tDynetics, Inc.\n70:B3:D5:B9:30:00/36\tInternet\tInternet Protocolo Logica Sl\n70:B3:D5:B9:40:00/36\tCygnetic\tCygnetic Technologies (Pty) Ltd\n70:B3:D5:B9:70:00/36\tCanamTec\tCanam Technology, Inc.\n70:B3:D5:B9:80:00/36\tGsfPte\tGSF Corporation Pte Ltd\n70:B3:D5:B9:90:00/36\tDomosafe\tDomoSafety S.A.\n70:B3:D5:B9:B0:00/36\tElektron\tElektronik Art\n70:B3:D5:B9:C0:00/36\tEdcoTech\tEDCO Technology 1993 ltd\n70:B3:D5:B9:E0:00/36\tPolsyste\tPolsystem Si Sp. Z O.O., S.K.A.\n70:B3:D5:BA:10:00/36\tCathwell\tCathwell AS\n70:B3:D5:BA:20:00/36\tMamac\tMAMAC Systems, Inc.\n70:B3:D5:BA:30:00/36\tTiama\t\n70:B3:D5:BA:40:00/36\tEiwaGike\tEiwa Giken Inc.\n70:B3:D5:BA:70:00/36\tDigitalY\tDigital Yacht Ltd\n70:B3:D5:BA:90:00/36\tAlma\t\n70:B3:D5:BA:A0:00/36\tDeviceSo\tDevice Solutions Ltd\n70:B3:D5:BA:B0:00/36\tAxotecTe\tAxotec Technologies GmbH\n70:B3:D5:BA:C0:00/36\tAdinte\tAdInte, inc.\n70:B3:D5:BA:D0:00/36\tTechnikD\tTechnik & Design GmbH\n70:B3:D5:BA:E0:00/36\tWarecube\tWarecube,Inc\n70:B3:D5:BA:F0:00/36\tSysTecEl\tSYS TEC electronic GmbH\n70:B3:D5:BB:20:00/36\tMettlerT\tMettler Toledo Hi Speed\n70:B3:D5:BB:30:00/36\tApgCashD\tAPG Cash Drawer, LLC\n70:B3:D5:BB:40:00/36\tIntegrit\tIntegritech\n70:B3:D5:BB:70:00/36\tInnoflig\tInnoflight, Inc.\n70:B3:D5:BB:80:00/36\tAlKamelS\tAl Kamel Systems S.L.\n70:B3:D5:BB:90:00/36\tKosmek\tKOSMEK.Ltd\n70:B3:D5:BB:D0:00/36\tProvidiu\tProvidius Corp\n70:B3:D5:BB:E0:00/36\tSunriseE\tSunrise Systems Electronics Co. Inc.\n70:B3:D5:BB:F0:00/36\tEnsysSrl\tEnsys srl\n70:B3:D5:BC:10:00/36\tAbionic\t\n70:B3:D5:BC:20:00/36\tDwewoong\tDWEWOONG ELECTRIC Co., Ltd.\n70:B3:D5:BC:30:00/36\tEwireles\teWireless\n70:B3:D5:BC:60:00/36\tHattelan\tHatteland Display AS\n70:B3:D5:BC:A0:00/36\tDeymedDi\tDeymed Diagnostic\n70:B3:D5:BC:B0:00/36\tSmartVis\tSmart Vision Lights\n70:B3:D5:BC:C0:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n70:B3:D5:BC:E0:00/36\tYawataEl\tYawata Electric Industrial Co.,Ltd.\n70:B3:D5:BC:F0:00/36\tApgCashD\tAPG Cash Drawer, LLC\n70:B3:D5:BD:10:00/36\tCablelab\tCableLabs\n70:B3:D5:BD:20:00/36\tBurkTech\tBurk Technology\n70:B3:D5:BD:30:00/36\tFotonaDD\tFotona D.D.\n70:B3:D5:BD:50:00/36\tSynics\tSynics AG\n70:B3:D5:BD:80:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n70:B3:D5:BD:90:00/36\tSolwayte\tSolwayTech\n70:B3:D5:BD:A0:00/36\t5-D\t5-D Systems, Inc.\n70:B3:D5:BD:D0:00/36\tCdrSrl\tCdr Srl\n70:B3:D5:BE:10:00/36\tFecon\tFeCon GmbH\n70:B3:D5:BE:30:00/36\tSaratovE\tSaratov Electrounit Production Plant named after Sergo Ordzhonikidze, OJSC\n70:B3:D5:BE:40:00/36\tKunshanE\tKunshan excellent Intelligent Technology Co., Ltd.\n70:B3:D5:BE:50:00/36\tPantecEn\tPantec Engineering AG\n70:B3:D5:BE:60:00/36\tCciiPty\tCCII Systems (Pty) Ltd\n70:B3:D5:BE:80:00/36\tAndfun\tAndFun Co.,Ltd.\n70:B3:D5:BE:90:00/36\tTelecast\tTelecast Inc.\n70:B3:D5:BE:A0:00/36\tVirtuosy\tVirtuosys Ltd\n70:B3:D5:BE:C0:00/36\tTokyoCom\tTokyo Communication Equipment MFG Co.,ltd.\n70:B3:D5:BE:D0:00/36\tItrinegy\tItrinegy Ltd.\n70:B3:D5:BE:F0:00/36\tSensorte\tSensortech Systems Inc.\n70:B3:D5:BF:10:00/36\tFlashnet\tFlashnet SRL\n70:B3:D5:BF:20:00/36\tTwinDeve\tTwin Development\n70:B3:D5:BF:30:00/36\tCg-Wirel\tCG-WIRELESS\n70:B3:D5:BF:50:00/36\tAcaciaRe\tAcacia Research\n70:B3:D5:BF:60:00/36\tComtac\tcomtac AG\n70:B3:D5:BF:90:00/36\tOkolabSr\tOkolab Srl\n70:B3:D5:BF:A0:00/36\tNesaSrl\tNesa Srl\n70:B3:D5:BF:B0:00/36\tSensor42\tSensor 42\n70:B3:D5:BF:E0:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:C0:10:00/36\tSmartgua\tSmartGuard LLC\n70:B3:D5:C0:30:00/36\tXaviTech\tXAVi Technologies Corp.\n70:B3:D5:C0:50:00/36\tKstTechn\tKST technology\n70:B3:D5:C0:60:00/36\tXotonics\tXotonicsMED GmbH\n70:B3:D5:C0:70:00/36\tAreco\t\n70:B3:D5:C0:A0:00/36\tInfosock\tInfosocket Co., Ltd.\n70:B3:D5:C0:B0:00/36\tFstudio\tFstudio Co Ltd\n70:B3:D5:C0:C0:00/36\tTech4rac\tTech4Race\n70:B3:D5:C0:E0:00/36\tSysdevSr\tSYSDEV Srl\n70:B3:D5:C0:F0:00/36\tHoneywel\tHoneywell Safety Products USA, Inc\n70:B3:D5:C1:10:00/36\tAristonT\tAriston Thermo s.p.a.\n70:B3:D5:C1:20:00/36\tBeijingW\tBeijing Wisetone Information Technology Co.,Ltd.\n70:B3:D5:C1:40:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n70:B3:D5:C1:50:00/36\tSensobox\tSensobox GmbH\n70:B3:D5:C1:60:00/36\tSouthern\tSouthern Innovation\n70:B3:D5:C1:70:00/36\tPotterEl\tPotter Electric Signal Co. LLC\n70:B3:D5:C1:A0:00/36\tXylon\t\n70:B3:D5:C1:B0:00/36\tLabinven\tLabinvent JSC\n70:B3:D5:C1:C0:00/36\tDEM\tD.E.M. Spa\n70:B3:D5:C1:D0:00/36\tKranzeTe\tKranze Technology Solutions\n70:B3:D5:C2:00:00/36\tMipotSPA\tMipot S.p.a.\n70:B3:D5:C2:10:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:C2:20:00/36\tSkyriver\tSkyriver Communications Inc.\n70:B3:D5:C2:40:00/36\tElbitOfA\tElbit Systems of America - Fort Worth Operations\n70:B3:D5:C2:50:00/36\tSpeedsig\tspeedsignal GmbH\n70:B3:D5:C2:60:00/36\tTriplePl\tTriple Play Communications\n70:B3:D5:C2:70:00/36\tGdMissio\tGD Mission Systems\n70:B3:D5:C2:A0:00/36\tArrayTel\tArray Telepresence\n70:B3:D5:C2:C0:00/36\tDromontS\tDromont S.p.A.\n70:B3:D5:C2:E0:00/36\tTriax\tTriax A/S\n70:B3:D5:C2:F0:00/36\tAtbis\tATBiS Co.,Ltd\n70:B3:D5:C3:20:00/36\tInfrasaf\tINFRASAFE/ ADVANTOR SYSTEMS\n70:B3:D5:C3:30:00/36\tDandongD\tDandong Dongfang Measurement & Control Technology Co., Ltd.\n70:B3:D5:C3:40:00/36\tTechnica\tTechnical Panels Co. Ltd.\n70:B3:D5:C3:50:00/36\tVibratio\tVibrationmaster\n70:B3:D5:C3:70:00/36\tKeycom\tKeycom Corp.\n70:B3:D5:C3:80:00/36\tCresprit\tCresprit Inc.\n70:B3:D5:C3:90:00/36\tMeshwork\tMeshWorks Wireless Oy\n70:B3:D5:C3:B0:00/36\tVironova\tVironova AB\n70:B3:D5:C3:C0:00/36\tPeekTraf\tPeek Traffic\n70:B3:D5:C3:D0:00/36\tCistechS\tCISTECH Solutions\n70:B3:D5:C3:E0:00/36\tDosadore\tDosadores Alltronic\n70:B3:D5:C3:F0:00/36\tCodeBlue\tCode Blue Corporation\n70:B3:D5:C4:10:00/36\tMerlinCs\tMerlin CSI\n70:B3:D5:C4:20:00/36\tCrde\t\n70:B3:D5:C4:30:00/36\tFutureSk\tFuture Skies\n70:B3:D5:C4:50:00/36\tStiebelE\tStiebel Eltron GmbH\n70:B3:D5:C4:90:00/36\tBtgInstr\tBTG Instruments AB\n70:B3:D5:C4:A0:00/36\tTiama\t\n70:B3:D5:C4:B0:00/36\tAnker-Ea\tANKER-EAST\n70:B3:D5:C4:D0:00/36\tRadaElec\tRADA Electronics Industries Ltd.\n70:B3:D5:C4:F0:00/36\tAeVanDeV\tAE Van de Vliet BVBA\n70:B3:D5:C5:30:00/36\tSLabsSpZ\tS Labs sp. z o.o.\n70:B3:D5:C5:50:00/36\tIntellig\tIntelligent Energy Ltd\n70:B3:D5:C5:60:00/36\tTeletask\t\n70:B3:D5:C5:80:00/36\tRmiLaser\tRMI Laser LLC\n70:B3:D5:C5:A0:00/36\tCommsign\tCommsignia Ltd.\n70:B3:D5:C5:B0:00/36\tAcdElekt\tACD Elektronik GmbH\n70:B3:D5:C5:C0:00/36\tLayerLog\tLayer Logic Inc\n70:B3:D5:C5:D0:00/36\tFoshanSh\tFoshan Shilantian Network S.T. Co., Ltd.\n70:B3:D5:C6:00:00/36\tGogoBa\tGogo BA\n70:B3:D5:C6:10:00/36\tJcHunter\tJc Hunter Technologies\n70:B3:D5:C6:20:00/36\tWiznova\t\n70:B3:D5:C6:30:00/36\tXentechS\tXentech Solutions Limited\n70:B3:D5:C6:40:00/36\tSysTecEl\tSYS TEC electronic GmbH\n70:B3:D5:C6:50:00/36\tPeekTraf\tPeek Traffic\n70:B3:D5:C6:60:00/36\tBlueAcce\tBlue Access Inc\n70:B3:D5:C6:70:00/36\tColliniD\tCollini Dienstleistungs GmbH\n70:B3:D5:C6:80:00/36\tMiniSolu\tMini Solution Co. Ltd.\n70:B3:D5:C6:A0:00/36\tPrivate\t\n70:B3:D5:C6:C0:00/36\tMcq\tMcQ Inc\n70:B3:D5:C6:D0:00/36\tCyvizAs\tCyviz AS\n70:B3:D5:C6:E0:00/36\tOrionTec\tOrion Technologies, LLC\n70:B3:D5:C6:F0:00/36\tNyantec\tnyantec GmbH\n70:B3:D5:C7:30:00/36\tCDN\tC.D.N.Corporation\n70:B3:D5:C7:40:00/36\tQtechnol\tQtechnology A/S\n70:B3:D5:C7:70:00/36\tYönnetAk\tYönnet Akıllı Bina ve Otomasyon Sistemleri\n70:B3:D5:C7:80:00/36\tNetaElek\tNETA Elektronik AS\n70:B3:D5:C7:90:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n70:B3:D5:C7:D0:00/36\tMetatron\tMetatronics B.V.\n70:B3:D5:C7:E0:00/36\tBirddogA\tBirdDog Australia\n70:B3:D5:C7:F0:00/36\tTattileS\tTattile Srl\n70:B3:D5:C8:00:00/36\tLinkCare\tLink Care Services\n70:B3:D5:C8:10:00/36\tDspDesig\tDsp Design\n70:B3:D5:C8:50:00/36\tSolidSta\tSolid State Disks Ltd\n70:B3:D5:C8:60:00/36\tWoodam\tWoodam Co., Ltd.\n70:B3:D5:C8:70:00/36\tSiemens\tSiemens AG\n70:B3:D5:C8:80:00/36\tSinedSrl\tSINED srl\n70:B3:D5:C8:90:00/36\tArd\t\n70:B3:D5:C8:B0:00/36\tAsiaPaci\tAsia Pacific Satellite Coummunication Inc.\n70:B3:D5:C8:C0:00/36\tRollogo\tRollogo Limited\n70:B3:D5:C8:D0:00/36\tKstTechn\tKST technology\n70:B3:D5:C8:F0:00/36\tTridentI\tTrident Infosol Pvt Ltd\n70:B3:D5:C9:10:00/36\tGrossenb\tGrossenbacher Systeme AG\n70:B3:D5:C9:20:00/36\tUnitroFl\tUnitro Fleischmann\n70:B3:D5:C9:60:00/36\tUniDimen\tUni Dimenxi Sdn Bhd\n70:B3:D5:C9:70:00/36\tCsinfote\tCsinfotel\n70:B3:D5:C9:B0:00/36\tTietoSwe\tTieto Sweden AB\n70:B3:D5:C9:D0:00/36\tApgCashD\tAPG Cash Drawer, LLC\n70:B3:D5:C9:E0:00/36\tFukudaSa\tFukuda Sangyo Co., Ltd.\n70:B3:D5:C9:F0:00/36\tTriax\tTriax A/S\n70:B3:D5:CA:20:00/36\tDeHaardt\tDe Haardt bv\n70:B3:D5:CA:30:00/36\tSaankhya\tSaankhya Labs Private Limited\n70:B3:D5:CA:40:00/36\tNetemera\tNetemera Sp. z o.o.\n70:B3:D5:CA:80:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n70:B3:D5:CA:90:00/36\tNxcontro\tNxcontrol system Co., Ltd.\n70:B3:D5:CA:A0:00/36\tBelPower\tBel Power Solutions GmbH\n70:B3:D5:CA:B0:00/36\tNotice\tNOTICE Co., Ltd.\n70:B3:D5:CA:C0:00/36\tCrde\t\n70:B3:D5:CA:E0:00/36\tThema\t\n70:B3:D5:CB:20:00/36\tSeclab\t\n70:B3:D5:CB:30:00/36\tKstTechn\tKST technology\n70:B3:D5:CB:40:00/36\tPlanewav\tPlanewave Instruments\n70:B3:D5:CB:60:00/36\tKuebrich\tKuebrich Ingeniergesellschaft mbh & Co. KG\n70:B3:D5:CB:70:00/36\tHkc\tHKC Limited\n70:B3:D5:CB:80:00/36\tVertiTec\tVerti Tecnologia\n70:B3:D5:CB:C0:00/36\tProconEl\tProcon Electronics Pty Ltd\n70:B3:D5:CB:E0:00/36\tEnsuraSo\tEnsura Solutions BV\n70:B3:D5:CC:10:00/36\tBeecube\tBEEcube Inc.\n70:B3:D5:CC:20:00/36\tLscLight\tLSC Lighting Systems (Aust) Pty Ltd\n70:B3:D5:CC:30:00/36\tFidaliaN\tFidalia Networks Inc\n70:B3:D5:CC:50:00/36\tIntecom\t\n70:B3:D5:CC:80:00/36\tProfenCo\tProfen Communications\n70:B3:D5:CC:90:00/36\tRapiscan\tRapiscan Systems\n70:B3:D5:CC:A0:00/36\tSiemensA\tSiemens As\n70:B3:D5:CC:B0:00/36\tReald\t\n70:B3:D5:CC:C0:00/36\tAecSRL\tAEC s.r.l.\n70:B3:D5:CC:D0:00/36\tSuzhouPo\tSuzhou PowerCore Technology Co.,Ltd.\n70:B3:D5:CC:E0:00/36\tProconex\tProconex 2010 Inc.\n70:B3:D5:CC:F0:00/36\tNetberg\t\n70:B3:D5:CD:00:00/36\tEllenexP\tEllenex Pty Ltd\n70:B3:D5:CD:10:00/36\tCannexTe\tCannex Technology Inc.\n70:B3:D5:CD:20:00/36\tHbhMicro\tHBH Microwave GmbH\n70:B3:D5:CD:30:00/36\tControlr\tControlrad\n70:B3:D5:CD:50:00/36\tApantacL\tApantac LLC\n70:B3:D5:CD:60:00/36\tVideoray\tVideoRay LLC\n70:B3:D5:CD:90:00/36\tPeterHub\tPeter Huber Kaeltemaschinenbau GmbH\n70:B3:D5:CD:A0:00/36\tVitec\t\n70:B3:D5:CD:E0:00/36\tMultipur\tMultipure International\n70:B3:D5:CD:F0:00/36\t3dPrinti\t3D Printing Specialists\n70:B3:D5:CE:10:00/36\tEaElektr\tEA Elektroautomatik GmbH & Co. KG\n70:B3:D5:CE:20:00/36\tCentero\t\n70:B3:D5:CE:30:00/36\tDalcnetS\tDalcnet srl\n70:B3:D5:CE:50:00/36\tGridbrid\tGridBridge Inc\n70:B3:D5:CE:70:00/36\tJuneAuto\tJune Automation Singapore Pte. Ltd.\n70:B3:D5:CE:90:00/36\tKinemetr\tKinemetrics\n70:B3:D5:CE:A0:00/36\tComputer\tComputerwise, Inc.\n70:B3:D5:CE:D0:00/36\tAdvanced\tAdvanced Products Corporation Pte Ltd\n70:B3:D5:CF:10:00/36\tLightdec\tLightDec GmbH & Co. KG\n70:B3:D5:CF:20:00/36\tTinnos\t\n70:B3:D5:CF:30:00/36\tMeshMoti\tMesh Motion Inc\n70:B3:D5:CF:40:00/36\tHarbinCh\tHarbin Cheng Tian Technology Development Co., Ltd.\n70:B3:D5:CF:50:00/36\tPetringE\tPetring Energietechnik GmbH\n70:B3:D5:CF:60:00/36\tTornadoM\tTornado Modular Systems\n70:B3:D5:CF:D0:00/36\tIloqOy\tiLOQ Oy\n70:B3:D5:CF:E0:00/36\tSecturio\tSecturion Systems\n70:B3:D5:CF:F0:00/36\tDtechLab\tDTECH Labs, Inc.\n70:B3:D5:D0:50:00/36\tColmek\t\n70:B3:D5:D0:70:00/36\tWaversa\tWaversa Systems\n70:B3:D5:D0:80:00/36\tVeecoIns\tVeeco Instruments\n70:B3:D5:D0:90:00/36\tRishaadB\tRishaad Brown\n70:B3:D5:D0:A0:00/36\tPrivate\t\n70:B3:D5:D0:C0:00/36\tConnorWi\tConnor Winfield LTD\n70:B3:D5:D0:D0:00/36\tLogiwast\tLogiwaste AB\n70:B3:D5:D0:E0:00/36\tBeijingA\tBeijing Aumiwalker technology CO.,LTD\n70:B3:D5:D1:00:00/36\tContecDt\tContec DTx\n70:B3:D5:D1:10:00/36\tEreeElec\tEREE Electronique\n70:B3:D5:D1:20:00/36\tFideltro\tFideltronik Poland Sp. Z O.O.\n70:B3:D5:D1:B0:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n70:B3:D5:D1:C0:00/36\tSpeciali\tSpecialised Imaging Limited\n70:B3:D5:D1:E0:00/36\tHoustonR\tHouston Radar LLC\n70:B3:D5:D1:F0:00/36\tEmbsec\tEmbsec AB\n70:B3:D5:D2:00:00/36\tRheonics\tRheonics GmbH\n70:B3:D5:D2:20:00/36\tDekTechn\tDEK Technologies\n70:B3:D5:D2:40:00/36\tMicrotro\tMicrotronics Engineering GmbH\n70:B3:D5:D2:50:00/36\tEngenesi\tENGenesis\n70:B3:D5:D2:60:00/36\tMi\tMI Inc.\n70:B3:D5:D2:90:00/36\tSportzca\tSportzcast\n70:B3:D5:D2:B0:00/36\tStreampl\tStreamPlay Oy Ltd\n70:B3:D5:D2:D0:00/36\tEvoluteP\tEvolute Systems Private Limited\n70:B3:D5:D2:E0:00/36\tCoherosO\tCoheros Oy\n70:B3:D5:D2:F0:00/36\tLIFESa\tL.I.F.E. Corporation SA\n70:B3:D5:D3:20:00/36\tEuklisBy\tEuklis by GSG International\n70:B3:D5:D3:40:00/36\tG-Philos\tG-PHILOS CO.,LTD\n70:B3:D5:D3:70:00/36\tSiconSrl\tSicon srl\n70:B3:D5:D3:80:00/36\tVistaRes\tVista Research, Inc.\n70:B3:D5:D3:B0:00/36\tNimbelin\tNimbeLink Corp\n70:B3:D5:D3:C0:00/36\tHrt\t\n70:B3:D5:D3:F0:00/36\tGlobalco\tGlobalcom Engineering Spa\n70:B3:D5:D4:00:00/36\tCrde\t\n70:B3:D5:D4:10:00/36\tKse\tKSE GmbH\n70:B3:D5:D4:20:00/36\tDspDesig\tDsp Design\n70:B3:D5:D4:30:00/36\tEzsys\tEZSYS Co., Ltd.\n70:B3:D5:D4:40:00/36\tIc-Autom\tic-automation GmbH\n70:B3:D5:D4:60:00/36\tContineo\tContineo s.r.o.\n70:B3:D5:D4:70:00/36\tYotascop\tYotaScope Technologies Co., Ltd.\n70:B3:D5:D4:80:00/36\tHeadroom\tHEADROOM Broadcast GmbH\n70:B3:D5:D4:A0:00/36\tOüElikoT\tOÜ ELIKO Tehnoloogia Arenduskeskus\n70:B3:D5:D4:B0:00/36\tHermannL\tHermann Lümmen GmbH\n70:B3:D5:D4:C0:00/36\tElystecT\tElystec Technology Co., Ltd\n70:B3:D5:D4:D0:00/36\tMorey\tThe Morey Corporation\n70:B3:D5:D4:E0:00/36\tFlsmidth\t\n70:B3:D5:D5:10:00/36\tAzcomTec\tAzcom Technology S.r.l.\n70:B3:D5:D5:40:00/36\tJlWorld\tJL World Corporation Limited\n70:B3:D5:D5:50:00/36\tWmDesign\tWM Design s.r.o\n70:B3:D5:D5:70:00/36\tTriumphB\tTRIUMPH BOARD a.s.\n70:B3:D5:D5:80:00/36\tIdyllicE\tIdyllic Engineering Pte Ltd\n70:B3:D5:D5:90:00/36\tWyrestor\tWyreStorm Technologies Ltd\n70:B3:D5:D5:A0:00/36\tWyrestor\tWyreStorm Technologies Ltd\n70:B3:D5:D5:B0:00/36\tWyrestor\tWyreStorm Technologies Ltd\n70:B3:D5:D5:C0:00/36\tCritical\tCritical Link LLC\n70:B3:D5:D5:F0:00/36\tCoreBala\tCore Balance Co., Ltd.\n70:B3:D5:D6:00:00/36\tFlintab\tFlintab AB\n70:B3:D5:D6:10:00/36\tVitec\t\n70:B3:D5:D6:20:00/36\tAndasisE\tAndasis Elektronik San. ve Tic. A.Ş.\n70:B3:D5:D6:30:00/36\tCrde\t\n70:B3:D5:D6:40:00/36\tMettlerT\tMettler Toledo Hi Speed\n70:B3:D5:D6:50:00/36\tCrde\t\n70:B3:D5:D6:60:00/36\tAscenden\tAscendent Technology Group\n70:B3:D5:D6:70:00/36\tAlpha\tALPHA　Corporation\n70:B3:D5:D6:90:00/36\tThermoFi\tThermo Fisher Scientific\n70:B3:D5:D6:A0:00/36\tKnowroam\tKnowRoaming\n70:B3:D5:D6:B0:00/36\tUwinloc\t\n70:B3:D5:D6:C0:00/36\tGp\tGP Systems GmbH\n70:B3:D5:D6:E0:00/36\tArdSa\tard sa\n70:B3:D5:D6:F0:00/36\tX-Spex\tX-SPEX GmbH\n70:B3:D5:D7:00:00/36\tRational\tRational Production srl Unipersonale\n70:B3:D5:D7:10:00/36\tRzbRudol\tRZB Rudolf Zimmermann, Bamberg GmbH\n70:B3:D5:D7:20:00/36\tOnyield\tOnYield Inc Ltd\n70:B3:D5:D7:30:00/36\tErmine\tERMINE Corporation\n70:B3:D5:D7:40:00/36\tSandiaNa\tSandia National Laboratories\n70:B3:D5:D7:50:00/36\tHyundaiM\tHyundai MNSOFT\n70:B3:D5:D7:60:00/36\tAttocube\tattocube systems AG\n70:B3:D5:D7:90:00/36\tGomaElet\tGOMA ELETTRONICA SpA\n70:B3:D5:D7:A0:00/36\tSpeedifi\tSpeedifi Inc\n70:B3:D5:D7:B0:00/36\tPeterHub\tPeter Huber Kaeltemaschinenbau AG\n70:B3:D5:D7:C0:00/36\tDTSIllum\tD.T.S Illuminazione Srl\n70:B3:D5:D7:E0:00/36\tTriax\tTriax A/S\n70:B3:D5:D7:F0:00/36\tConectai\tConectaIP Tecnologia S.L.\n70:B3:D5:D8:00:00/36\tAmmt\tAMMT GmbH\n70:B3:D5:D8:10:00/36\tPddGroup\tPDD Group Ltd\n70:B3:D5:D8:40:00/36\tSentry36\tSentry360\n70:B3:D5:D8:60:00/36\tWpgsysPt\tWPGSYS Pte Ltd\n70:B3:D5:D8:70:00/36\tZigen\tZigen Corp\n70:B3:D5:D8:90:00/36\tResoluti\tResolution Systems\n70:B3:D5:D8:B0:00/36\tLenoxiAu\tLenoxi Automation s.r.o.\n70:B3:D5:D8:C0:00/36\tDamerell\tDamerell Design Limited (DCL)\n70:B3:D5:D8:D0:00/36\tPullnetT\tPullnet Technology,S.L.\n70:B3:D5:D8:E0:00/36\tAxatelSr\tAxatel SrL\n70:B3:D5:D8:F0:00/36\tMoluTech\tMolu Technology Inc., LTD.\n70:B3:D5:D9:00:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:D9:10:00/36\tFoodalyt\tFoodALYT GmbH\n70:B3:D5:D9:20:00/36\tZamirRec\tZamir Recognition Systems Ltd.\n70:B3:D5:D9:30:00/36\tPamir\tPAMIR Inc\n70:B3:D5:D9:40:00/36\tDewetron\tDewetron GmbH\n70:B3:D5:D9:50:00/36\tSanoServ\tSANO SERVICE Co.,Ltd\n70:B3:D5:D9:70:00/36\tBrsSiste\tBRS Sistemas Eletronicos\n70:B3:D5:D9:80:00/36\tAcdElekr\tACD Elekronik GmbH\n70:B3:D5:D9:A0:00/36\tWuhanXin\tWuhan Xingtuxinke ELectronic Co.,Ltd\n70:B3:D5:D9:B0:00/36\tRussianT\tRussian Telecom Equipment Company\n70:B3:D5:D9:C0:00/36\tSubiniti\tSubinitial LLC\n70:B3:D5:D9:D0:00/36\tElectroi\tElectroimpact, Inc.\n70:B3:D5:D9:E0:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n70:B3:D5:DA:10:00/36\tQprelSrl\tQprel srl\n70:B3:D5:DA:40:00/36\tCrde\t\n70:B3:D5:DA:50:00/36\tRoboteq\t\n70:B3:D5:DA:60:00/36\tRedfishG\tRedfish Group Pty Ltd\n70:B3:D5:DA:80:00/36\tTagarnoA\tTagarno AS\n70:B3:D5:DA:A0:00/36\tAmtoteAu\tAmTote Australasia\n70:B3:D5:DA:D0:00/36\tGdMissio\tGD Mission Systems\n70:B3:D5:DB:00:00/36\tArnouseD\tArnouse Digital Devices Corp\n70:B3:D5:DB:10:00/36\tBiovigil\tBiovigil Hygiene Technologies\n70:B3:D5:DB:20:00/36\tMicroEle\tMicro Electroninc Products\n70:B3:D5:DB:40:00/36\tYuyamaMf\tYUYAMA MFG Co.,Ltd\n70:B3:D5:DB:50:00/36\tXiamenPo\tXiamen Point Circle Technologh Co,ltd\n70:B3:D5:DB:60:00/36\tCsintech\t\n70:B3:D5:DB:80:00/36\tSistemSa\tSistem Sa\n70:B3:D5:DB:F0:00/36\tInfodevE\tInfodev Electronic Designers Intl.\n70:B3:D5:DC:00:00/36\tAteme\t\n70:B3:D5:DC:50:00/36\tExcelMed\tExcel Medical Electronics LLC\n70:B3:D5:DC:60:00/36\tIdem\tIdem Inc.\n70:B3:D5:DC:80:00/36\tEnertexB\tEnertex Bayern GmbH\n70:B3:D5:DC:90:00/36\tSensoter\tSensoterra BV\n70:B3:D5:DC:A0:00/36\tDsan\tDSan Corporation\n70:B3:D5:DC:C0:00/36\tEutron\tEutron SPA\n70:B3:D5:DC:E0:00/36\tStahl\tStahl GmbH\n70:B3:D5:DC:F0:00/36\tKlsNethe\tKLS Netherlands B.V.\n70:B3:D5:DD:10:00/36\tEm-Tec\tem-tec GmbH\n70:B3:D5:DD:50:00/36\tCooltera\tCooltera Limited\n70:B3:D5:DD:70:00/36\tDetectAu\tDETECT Australia\n70:B3:D5:DD:80:00/36\tEmscan\tEMSCAN Corp.\n70:B3:D5:DD:B0:00/36\tIntra\tIntra Corporation\n70:B3:D5:DD:C0:00/36\tSyscomIn\tSyscom Instruments SA\n70:B3:D5:DD:D0:00/36\tBioRadLa\tBio Rad Laboratories\n70:B3:D5:DD:F0:00/36\tAerovisi\tAeroVision Avionics, Inc.\n70:B3:D5:DE:00:00/36\tEcozy\teCozy GmbH\n70:B3:D5:DE:20:00/36\tAcdElekr\tACD Elekronik GmbH\n70:B3:D5:DE:40:00/36\tMaviliEl\tMavili Elektronik Tic. Ve San. A.S.\n70:B3:D5:DE:60:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n70:B3:D5:DE:70:00/36\tInnomind\tInnominds Software Private Limited\n70:B3:D5:DE:80:00/36\tNation-E\tNation-E Ltd.\n70:B3:D5:DE:90:00/36\tPrivate\t\n70:B3:D5:DE:A0:00/36\tAdvanced\tAdvanced Ventilation Applications, Inc.\n70:B3:D5:DE:C0:00/36\tCondev-A\tCondev-Automation GmbH\n70:B3:D5:DE:E0:00/36\tCrde\t\n70:B3:D5:DF:00:00/36\tAstoziCo\tastozi consulting Tomasz Zieba\n70:B3:D5:DF:10:00/36\tCoxlab\tCoXlab Inc.\n70:B3:D5:DF:20:00/36\tAml\t\n70:B3:D5:DF:30:00/36\tSpcBiocl\tSPC Bioclinicum\n70:B3:D5:DF:60:00/36\tTiab\tTiab Limited\n70:B3:D5:DF:70:00/36\tRefecorO\tRefecor Oy\n70:B3:D5:DF:80:00/36\tRmaMess-\tRMA Mess- und Regeltechnik GmbH & Co.KG\n70:B3:D5:DF:90:00/36\tKoreaPla\tKorea Plant Maintenance\n70:B3:D5:DF:A0:00/36\tNewtouch\tNewtouch Electronics (Shanghai) Co.,Ltd.\n70:B3:D5:DF:C0:00/36\tElectron\tElectronic Systems Design Sprl\n70:B3:D5:DF:D0:00/36\tContiweb\t\n70:B3:D5:DF:F0:00/36\tSpanawav\tSpanawave Corporation\n70:B3:D5:E0:20:00/36\tYehlJord\tYEHL & JORDAN LLC\n70:B3:D5:E0:40:00/36\tCombilen\tCombilent\n70:B3:D5:E0:70:00/36\tBaaderPl\tBaader Planetarium GmbH\n70:B3:D5:E0:80:00/36\tOlssen\t\n70:B3:D5:E0:90:00/36\tL-3Commu\tL-3 communications ComCept Division\n70:B3:D5:E0:B0:00/36\tEntecEle\tENTEC Electric & Electronic Co., LTD.\n70:B3:D5:E0:D0:00/36\tSigmaCon\tSigma Connectivity AB\n70:B3:D5:E0:F0:00/36\tVtronPty\tVtron Pty Ltd\n70:B3:D5:E1:60:00/36\tChinaEnt\tChina Entropy Co., Ltd.\n70:B3:D5:E1:70:00/36\tPrivate\t\n70:B3:D5:E1:80:00/36\tPlasmapp\tPlasmapp Co.,Ltd.\n70:B3:D5:E1:A0:00/36\tBizerbaL\tBizerba Luceo\n70:B3:D5:E1:B0:00/36\tNeuron\tNeuron GmbH\n70:B3:D5:E1:C0:00/36\tXcenterA\tXcenter AS\n70:B3:D5:E2:00:00/36\tSignatur\tSignature Control Systems, LLC.\n70:B3:D5:E2:10:00/36\tLlvision\tLlvision Technology Co.,Ltd\n70:B3:D5:E2:20:00/36\tPrivate\t\n70:B3:D5:E2:30:00/36\tSmithMet\tSmith Meter, Inc.\n70:B3:D5:E2:60:00/36\tFeitian\tFeitian Co.,Ltd.\n70:B3:D5:E2:70:00/36\tWoodside\tWoodside Electronics\n70:B3:D5:E2:80:00/36\tIotec\tiotec GmbH\n70:B3:D5:E2:B0:00/36\tGuanShow\tGuan Show Technologe Co., Ltd.\n70:B3:D5:E2:C0:00/36\tFourthFr\tFourth Frontier Technologies Private Limited\n70:B3:D5:E2:E0:00/36\tMerzSRO\tMerz s.r.o.\n70:B3:D5:E3:00:00/36\tQuiss\tQuiss Ag\n70:B3:D5:E3:20:00/36\tHerutuEl\tHerutu Electronics Corporation\n70:B3:D5:E3:50:00/36\tNanospee\tNanospeed Technologies Limited\n70:B3:D5:E3:60:00/36\tGuidance\tGuidance Navigation Limited\n70:B3:D5:E3:90:00/36\tThinnect\tThinnect, Inc,\n70:B3:D5:E3:A0:00/36\tCyanview\t\n70:B3:D5:E3:B0:00/36\tComnavTe\tComNav Technology Ltd.\n70:B3:D5:E3:D0:00/36\tLeoBodna\tLeo Bodnar Electronics Ltd\n70:B3:D5:E3:E0:00/36\tSolWeldi\tSol Welding srl\n70:B3:D5:E3:F0:00/36\tBestcode\tBestcode Llc\n70:B3:D5:E4:30:00/36\tSlAudio\tSL Audio A/S\n70:B3:D5:E4:50:00/36\tMomentum\tMomentum Data Systems\n70:B3:D5:E4:80:00/36\tTdi\tTDI. Co., LTD\n70:B3:D5:E4:90:00/36\tKendrion\tKendrion Mechatronics Center GmbH\n70:B3:D5:E4:A0:00/36\tIcpNewte\tICP NewTech Ltd\n70:B3:D5:E4:B0:00/36\tDelta\t\n70:B3:D5:E4:C0:00/36\tIai-Isra\tIAI-Israel Aerospace Industries MBT\n70:B3:D5:E4:E0:00/36\tMidfin\tMidfin Systems\n70:B3:D5:E4:F0:00/36\tRwsAutom\tRWS Automation GmbH\n70:B3:D5:E5:00:00/36\tAdvanced\tAdvanced Vision Technology Ltd\n70:B3:D5:E5:20:00/36\tGuangzho\tGuangzhou Moblin Technology Co., Ltd.\n70:B3:D5:E5:30:00/36\tMi\tMi Inc.\n70:B3:D5:E5:50:00/36\tBeltSRL\tBELT S.r.l.\n70:B3:D5:E5:70:00/36\tIradimed\t\n70:B3:D5:E5:80:00/36\tThurlbyT\tThurlby Thandar Instruments LTD\n70:B3:D5:E5:90:00/36\tFracarro\tFracarro srl\n70:B3:D5:E5:D0:00/36\tBoffinsT\tBoffins Technologies AB\n70:B3:D5:E5:E0:00/36\tCritical\tCritical Link LLC\n70:B3:D5:E6:10:00/36\tAdeli\t\n70:B3:D5:E6:70:00/36\tAppliedP\tApplied Processing\n70:B3:D5:E6:90:00/36\tFire4Uk\tFire4 Systems UK Ltd\n70:B3:D5:E6:C0:00/36\tFusarTec\tFusar Technologies inc\n70:B3:D5:E6:D0:00/36\tDomusSC\tDomus S.C.\n70:B3:D5:E6:E0:00/36\tLieronBv\tLieron BVBA\n70:B3:D5:E7:00:00/36\tDiskMult\tDISK Multimedia s.r.o.\n70:B3:D5:E7:10:00/36\tSisTechn\tSiS Technology\n70:B3:D5:E7:40:00/36\tExfronti\tExfrontier Co., Ltd.\n70:B3:D5:E7:50:00/36\tNke\t\n70:B3:D5:E7:60:00/36\tDorsettT\tDorsett Technologies, Inc.\n70:B3:D5:E7:70:00/36\tOptixJsc\tOptix Jsc\n70:B3:D5:E7:A0:00/36\tArt\tArt Spa\n70:B3:D5:E7:B0:00/36\tShenzhen\tShenzhen  SanYeCao  Electronics  Co.,Ltd\n70:B3:D5:E7:C0:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:E7:D0:00/36\tNanjingD\tNanjing Dandick Science&technology development co., LTD\n70:B3:D5:E7:E0:00/36\tGroupeCi\tGroupe Citypassenger Inc\n70:B3:D5:E8:20:00/36\tRfTrack\tRF Track\n70:B3:D5:E8:40:00/36\tEntecEle\tENTEC Electric & Electronic Co., LTD.\n70:B3:D5:E8:50:00/36\tExplorer\tExplorer Inc.\n70:B3:D5:E8:60:00/36\tYuyamaMf\tYUYAMA MFG Co.,Ltd\n70:B3:D5:E8:80:00/36\tBreasMed\tBreas Medical AB\n70:B3:D5:E8:E0:00/36\tMacnicaT\tMacnica Technology\n70:B3:D5:E8:F0:00/36\tDismunte\tDismuntel, S.A.\n70:B3:D5:E9:00:00/36\tGeteinBi\tGetein Biotechnology Co.,ltd\n70:B3:D5:E9:10:00/36\tNasAustr\tNAS Australia P/L\n70:B3:D5:E9:20:00/36\tFujiData\tFuji Data System Co.,Ltd.\n70:B3:D5:E9:30:00/36\tEconTech\tECON Technology Co.Ltd\n70:B3:D5:E9:40:00/36\tLumiplan\tLumiplan Duhamel\n70:B3:D5:E9:50:00/36\tBroadsof\tBroadSoft Inc\n70:B3:D5:E9:60:00/36\tCellierD\tCellier Domesticus inc\n70:B3:D5:E9:80:00/36\tJscKalug\tJSC Kaluga Astral\n70:B3:D5:E9:90:00/36\tAdvitron\tAdvitronics telecom bv\n70:B3:D5:E9:A0:00/36\tMetaComp\tMeta Computing Services, Corp\n70:B3:D5:E9:B0:00/36\tNumataR&\tNUMATA R&D Co.,Ltd\n70:B3:D5:E9:C0:00/36\tAtgUvTec\tATG UV Technology\n70:B3:D5:E9:E0:00/36\tMsbElekt\tMSB Elektronik und Gerätebau GmbH\n70:B3:D5:EA:00:00/36\tPark24\t\n70:B3:D5:EA:20:00/36\tTranspor\tTransportal Solutions Ltd\n70:B3:D5:EA:30:00/36\tGridless\tGridless Power Corperation\n70:B3:D5:EA:40:00/36\tGrupoEpe\tGrupo Epelsa S.L.\n70:B3:D5:EA:60:00/36\tGalios\t\n70:B3:D5:EA:70:00/36\tSICESSrl\tS.I.C.E.S. srl\n70:B3:D5:EA:80:00/36\tDia-Stro\tDia-Stron Limited\n70:B3:D5:EA:B0:00/36\tApenGrou\tAPEN GROUP SpA (VAT IT08767740155)\n70:B3:D5:EA:C0:00/36\tKentechI\tKentech Instruments Limited\n70:B3:D5:EA:E0:00/36\tOrlacoPr\tOrlaco Products B.V.\n70:B3:D5:EB:00:00/36\tNautelLi\tNautel Limted\n70:B3:D5:EB:10:00/36\tCpContec\tCP contech electronic GmbH\n70:B3:D5:EB:20:00/36\tShooterD\tShooter Detection Systems\n70:B3:D5:EB:30:00/36\tKws-Elec\tKWS-Electronic GmbH\n70:B3:D5:EB:40:00/36\tRoboticR\tRobotic Research, LLC\n70:B3:D5:EB:50:00/36\tJustek\tJustek Inc\n70:B3:D5:EB:70:00/36\tSkreens\t\n70:B3:D5:EB:90:00/36\tThielAud\tThiel Audio Products Company, LLC\n70:B3:D5:EB:A0:00/36\tLastMile\tLast Mile Gear\n70:B3:D5:EB:B0:00/36\tBeijingW\tBeijing Wing ICT Technology Co., Ltd.\n70:B3:D5:EB:C0:00/36\tRefineTe\tRefine Technology, LLC\n70:B3:D5:EB:D0:00/36\tMidbitTe\tmidBit Technologies, LLC\n70:B3:D5:EB:E0:00/36\tSierraPa\tSierra Pacific Innovations Corp\n70:B3:D5:EC:10:00/36\tXafaxNed\tXafax Nederland bv\n70:B3:D5:EC:60:00/36\tEsii\t\n70:B3:D5:EC:70:00/36\tNeoptix\tNeoptix Inc.\n70:B3:D5:EC:80:00/36\tVikoElek\tViko Elektrik-Elektronik A.Ş.\n70:B3:D5:EC:A0:00/36\tTranstro\tTranstronic AB\n70:B3:D5:EC:B0:00/36\tRe-Contr\tRe spa - Controlli Industriali - IT01782300154\n70:B3:D5:EC:D0:00/36\tSbs-Fein\tSBS-Feintechnik GmbH & Co. KG\n70:B3:D5:EC:E0:00/36\tComm-Con\tCOMM-connect A/S\n70:B3:D5:EC:F0:00/36\tIpitek\t\n70:B3:D5:ED:00:00/36\tShanghai\tshanghai qiaoqi zhinengkeji\n70:B3:D5:ED:10:00/36\tPrzemysl\tPrzemyslowy Instytut Automatyki i Pomiarow\n70:B3:D5:ED:50:00/36\tHangzhou\thangzhou battle link technology Co.,Ltd\n70:B3:D5:ED:70:00/36\tWave\t\n70:B3:D5:ED:B0:00/36\tNetfortS\tNetfort Solutions\n70:B3:D5:ED:C0:00/36\tJDKoftin\tJ.D. Koftinoff Software, Ltd.\n70:B3:D5:ED:D0:00/36\tSolarNet\tSolar Network & Partners\n70:B3:D5:ED:F0:00/36\tGridnavi\tGridNavigator\n70:B3:D5:EE:10:00/36\tAlloraFa\tallora Factory BVBA\n70:B3:D5:EE:30:00/36\tLitheTec\tLithe Technology, LLC\n70:B3:D5:EE:40:00/36\tO-NetAut\tO-Net Automation Technology (Shenzhen)Limited\n70:B3:D5:EE:50:00/36\tBeijingH\tBeijing Hzhytech Technology Co.Ltd\n70:B3:D5:EE:70:00/36\tBlue-Sol\tBLUE-SOLUTIONS CANADA INC.\n70:B3:D5:EE:A0:00/36\tDameca\tDameca a/s\n70:B3:D5:EE:C0:00/36\tImpolux\tImpolux GmbH\n70:B3:D5:EE:D0:00/36\tComm-Con\tCOMM-connect A/S\n70:B3:D5:EE:E0:00/36\tSociedad\tSOCIEDAD IBERICA DE CONSTRUCCIONES ELECTRICAS, S.A. (SICE)\n70:B3:D5:EE:F0:00/36\tTattileS\tTattile Srl\n70:B3:D5:EF:20:00/36\tKongsber\tKongsberg Intergrated Tactical Systems\n70:B3:D5:EF:30:00/36\tOctoscop\toctoScope\n70:B3:D5:EF:40:00/36\tOrangeTr\tOrange Tree Technologies Ltd\n70:B3:D5:EF:50:00/36\tDeuta-We\tDEUTA-WERKE GmbH\n70:B3:D5:EF:60:00/36\tChargeli\tChargelib\n70:B3:D5:EF:70:00/36\tDaveSrl\tDave Srl\n70:B3:D5:EF:80:00/36\tDksDiens\tDKS Dienstl.ges. f. Komm.anl. d. Stadt- u. Reg.verk. mbH\n70:B3:D5:EF:90:00/36\tCritical\tCritical Link LLC\n70:B3:D5:EF:A0:00/36\tNexteraE\tNextEra Energy Resources, LLC\n70:B3:D5:EF:B0:00/36\tPxmSpK\tPXM sp.k.\n70:B3:D5:EF:E0:00/36\tMeidenSy\tMeiden System Solutions\n70:B3:D5:F0:00:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:F0:10:00/36\tSoftware\tSoftware Systems Plus\n70:B3:D5:F0:30:00/36\tGmi\tGMI Ltd\n70:B3:D5:F0:50:00/36\tMotomuto\tMotomuto Aps\n70:B3:D5:F0:60:00/36\tWarecube\tWarecube,Inc\n70:B3:D5:F0:70:00/36\tDuvalMes\tDuval Messien\n70:B3:D5:F0:80:00/36\tSzaboSof\tSzabo Software & Engineering UK Ltd\n70:B3:D5:F0:B0:00/36\tRfIndust\tRF Industries\n70:B3:D5:F0:C0:00/36\tModulate\tModulaTeam GmbH\n70:B3:D5:F0:D0:00/36\tMeq\tMeQ Inc.\n70:B3:D5:F1:00:00/36\tRieglLas\tRiegl Laser Measurement Systems GmbH\n70:B3:D5:F1:10:00/36\tBroadsof\tBroadSoft Inc\n70:B3:D5:F1:20:00/36\tIncoilIn\tIncoil Induktion AB\n70:B3:D5:F1:30:00/36\tMediamSp\tMEDIAM Sp. z o.o.\n70:B3:D5:F1:40:00/36\tSanyuSwi\tSanyu Switch Co., Ltd.\n70:B3:D5:F1:60:00/36\tBrsSiste\tBRS Sistemas Eletrônicos\n70:B3:D5:F1:70:00/36\tVitec\t\n70:B3:D5:F1:90:00/36\tVitroTec\tVitro Technology Corporation\n70:B3:D5:F1:A0:00/36\tSatorCon\tSator Controls s.r.o.\n70:B3:D5:F1:D0:00/36\tCritical\tCritical Link LLC\n70:B3:D5:F1:E0:00/36\tAtxNetwo\tAtx Networks Ltd\n70:B3:D5:F1:F0:00/36\tHkc\tHKC Limited\n70:B3:D5:F2:40:00/36\tDaavlin\t\n70:B3:D5:F2:50:00/36\tJsc“Scie\tJSC “Scientific Industrial Enterprise Rubin\n70:B3:D5:F2:70:00/36\tNirit-Xi\tNIRIT- Xinwei  Telecom Technology Co., Ltd.\n70:B3:D5:F2:A0:00/36\tWibondIn\tWIBOND Informationssysteme GmbH\n70:B3:D5:F2:B0:00/36\tSensys\tSENSYS GmbH\n70:B3:D5:F2:C0:00/36\tHengenTe\tHengen Technologies GmbH\n70:B3:D5:F2:D0:00/36\tIdLockAs\tID Lock AS\n70:B3:D5:F2:E0:00/36\tShanghai\tShanghai JCY Technology Company\n70:B3:D5:F3:00:00/36\tAdeTechn\tADE Technology Inc.\n70:B3:D5:F3:40:00/36\tMacgrayS\tMacGray Services\n70:B3:D5:F3:50:00/36\tCarbontr\tcarbonTRACK\n70:B3:D5:F3:60:00/36\tDinosys\t\n70:B3:D5:F3:70:00/36\tMitsubis\tMitsubishi Electric Micro-Computer Application Software Co.,Ltd.\n70:B3:D5:F3:80:00/36\tScanvaeg\tScanvaegt Nordic A/S\n70:B3:D5:F3:90:00/36\tZenrosAp\tZenros ApS\n70:B3:D5:F3:B0:00/36\tEpdmPty\tEpdm Pty Ltd\n70:B3:D5:F3:C0:00/36\tGigaray\t\n70:B3:D5:F4:20:00/36\tMatsuhis\tMatsuhisa Corporation\n70:B3:D5:F4:50:00/36\tNorbitOd\tNorbit ODM AS\n70:B3:D5:F4:C0:00/36\tGlobalLi\tGlobal Lightning Protection Services A(S\n70:B3:D5:F4:D0:00/36\tHoneywel\tHoneywell\n70:B3:D5:F4:F0:00/36\tPowerEle\tPower Electronics Espana, S.L.\n70:B3:D5:F5:10:00/36\tIotRoute\tIoT Routers Limited\n70:B3:D5:F5:20:00/36\tAlereTec\tAlere Technologies AS\n70:B3:D5:F5:40:00/36\tRevoluti\tRevolution Retail Systems\n70:B3:D5:F5:50:00/36\tKohlerMi\tKohler Mira Ltd\n70:B3:D5:F5:60:00/36\tVirtualh\tVirtualHere Pty. Ltd.\n70:B3:D5:F5:70:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:F5:80:00/36\tCdrSrl\tCdr Srl\n70:B3:D5:F5:A0:00/36\tHameg\tHAMEG GmbH\n70:B3:D5:F5:B0:00/36\tAFMensah\tA.F.Mensah, Inc\n70:B3:D5:F5:C0:00/36\tNableCom\tNable Communications, Inc.\n70:B3:D5:F5:E0:00/36\tSelexEs\tSelex ES Inc.\n70:B3:D5:F5:F0:00/36\tRfrainLl\tRFRain LLC\n70:B3:D5:F6:10:00/36\tPowerDia\tPower Diagnostic Service\n70:B3:D5:F6:20:00/36\tFrs\tFRS GmbH & Co. KG\n70:B3:D5:F6:30:00/36\tArsProdu\tArs Products\n70:B3:D5:F6:50:00/36\tMarkusLa\tMarkus Labs\n70:B3:D5:F6:70:00/36\tWinsun\twinsun AG\n70:B3:D5:F6:80:00/36\tAlZajelM\tAl Zajel Modern Telecomm\n70:B3:D5:F6:D0:00/36\tQowisio\t\n70:B3:D5:F6:E0:00/36\tStreambo\tStreambox Inc\n70:B3:D5:F7:00:00/36\tHoneywel\tHoneywell\n70:B3:D5:F7:20:00/36\tHanshinE\tHanshin Electronics\n70:B3:D5:F7:30:00/36\tAslHoldi\tASL Holdings\n70:B3:D5:F7:50:00/36\tEnlaps\t\n70:B3:D5:F7:60:00/36\tThermoFi\tThermo Fisher Scientific\n70:B3:D5:F7:70:00/36\tSatcube\tSatcube AB\n70:B3:D5:F7:80:00/36\tManvishE\tManvish eTech Pvt. Ltd.\n70:B3:D5:F7:90:00/36\tFirehose\tFirehose Labs, Inc.\n70:B3:D5:F7:A0:00/36\tSenso2me\t\n70:B3:D5:F7:B0:00/36\tKstTechn\tKST technology\n70:B3:D5:F7:C0:00/36\tPrivate\t\n70:B3:D5:F7:E0:00/36\tAlphaEle\tAlpha Elettronica s.r.l.\n70:B3:D5:F8:10:00/36\tLittlemo\tLittlemore Scientific\n70:B3:D5:F8:30:00/36\tTataComm\tTata Communications Ltd.\n70:B3:D5:F8:40:00/36\tDeuta-We\tDEUTA-WERKE GmbH\n70:B3:D5:F8:50:00/36\tSolystic\t\n70:B3:D5:F8:70:00/36\tShinwaIn\tShinwa Industries, Inc.\n70:B3:D5:F8:80:00/36\tOdawarak\tODAWARAKIKI AUTO-MACHINE MFG.CO.,LTD\n70:B3:D5:F8:A0:00/36\tFrs\tFRS GmbH & Co. KG\n70:B3:D5:F8:B0:00/36\tIoootaSr\tIOOOTA Srl\n70:B3:D5:F8:C0:00/36\tEuropean\tEuropean Advanced Technologies\n70:B3:D5:F8:D0:00/36\tFlextron\tFlextronics Canafa Design Services\n70:B3:D5:F8:E0:00/36\tIsabelle\tIsabellenhütte Heusler Gmbh &Co KG\n70:B3:D5:F8:F0:00/36\tDimastec\tDIMASTEC GESTAO DE PONTO E ACESSO EIRELI-ME\n70:B3:D5:F9:20:00/36\tTechone\t\n70:B3:D5:F9:30:00/36\tHellaGut\tHella Gutmann Solutions GmbH\n70:B3:D5:F9:50:00/36\tGetSat\tGet SAT\n70:B3:D5:F9:60:00/36\tEcologic\tEcologicsense\n70:B3:D5:F9:80:00/36\tMetrumSw\tMetrum Sweden AB\n70:B3:D5:F9:90:00/36\tTexCompu\tTex Computer Srl\n70:B3:D5:F9:A0:00/36\tKrabbenh\tKrabbenhøft og Ingolfsson\n70:B3:D5:F9:C0:00/36\tSureflap\tSureFlap Ltd\n70:B3:D5:F9:E0:00/36\tInternat\tInternational Center for Elementary Particle Physics, The University of Tokyo\n70:B3:D5:FA:00:00/36\tTiama\t\n70:B3:D5:FA:10:00/36\tBbiEngin\tBBI Engineering, Inc.\n70:B3:D5:FA:20:00/36\tSarokalT\tSarokal Test Systems Oy\n70:B3:D5:FA:30:00/36\tElva-1Mi\tELVA-1 MICROWAVE HANDELSBOLAG\n70:B3:D5:FA:40:00/36\tEnergybo\tEnergybox Limited\n70:B3:D5:FA:50:00/36\tShenzhen\tShenzhen Hui Rui Tianyan Technology Co., Ltd.\n70:B3:D5:FA:60:00/36\tRflElect\tRFL Electronics, Inc.\n70:B3:D5:FA:70:00/36\tNordson\tNordson Corporation\n70:B3:D5:FA:A0:00/36\tLogimSof\tLogiM GmbH Software und Entwicklung\n70:B3:D5:FA:D0:00/36\tArcTechn\tARC Technology Solutions, LLC\n70:B3:D5:FA:E0:00/36\tSilixa\tSilixa Ltd\n70:B3:D5:FA:F0:00/36\tRadigHar\tRadig Hard & Software\n70:B3:D5:FB:00:00/36\tRohde&Sc\tRohde&Schwarz Topex SA\n70:B3:D5:FB:30:00/36\t3ps\t3PS Inc\n70:B3:D5:FB:50:00/36\tOrangeTr\tOrange Tree Technologies Ltd\n70:B3:D5:FB:60:00/36\tKronotec\tKronotech Srl\n70:B3:D5:FB:70:00/36\tSaice\t\n70:B3:D5:FB:A0:00/36\tApogeeAp\tApogee Applied Research, Inc.\n70:B3:D5:FB:B0:00/36\tVenaEngi\tVena Engineering Corporation\n70:B3:D5:FB:C0:00/36\tTwowayCo\tTwoway Communications, Inc.\n70:B3:D5:FB:D0:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n70:B3:D5:FB:E0:00/36\tHanbatNa\tHanbat National University\n70:B3:D5:FB:F0:00/36\tSensysDe\tSenSys (Design Electronics Ltd)\n70:B3:D5:FC:00:00/36\tCodesyst\tCODESYSTEM Co.,Ltd\n70:B3:D5:FC:10:00/36\tIndicor\t\n70:B3:D5:FC:20:00/36\tHunterLi\tHunter Liberty Corporation\n70:B3:D5:FC:50:00/36\tEltwin\tEltwin A/S\n70:B3:D5:FC:60:00/36\tTecnintH\tTecnint HTE SRL\n70:B3:D5:FC:80:00/36\tModuware\tModuware PTY LTD\n70:B3:D5:FC:90:00/36\tShanghai\tShanghai EICT Global Service Co., Ltd\n70:B3:D5:FC:A0:00/36\tM2mCyber\tM2M Cybernetics Pvt Ltd\n70:B3:D5:FC:C0:00/36\tDigsilen\tDIgSILENT GmbH\n70:B3:D5:FC:D0:00/36\tEngageTe\tEngage Technologies\n70:B3:D5:FC:F0:00/36\tAcc+Ess\tAcc+Ess Ltd\n70:B3:D5:FD:10:00/36\tRedrat\tRedRat Ltd\n70:B3:D5:FD:20:00/36\tDalianLe\tDalian Levear Electric Co., Ltd\n70:B3:D5:FD:30:00/36\tAkisTech\tAKIS technologies\n70:B3:D5:FD:60:00/36\tVisualFa\tVisual Fan\n70:B3:D5:FD:70:00/36\tCentumAd\tCentum Adetel Group\n70:B3:D5:FD:80:00/36\tMbConnec\tMB connect line GmbH Fernwartungssysteme\n70:B3:D5:FD:A0:00/36\tAcdElekt\tACD Elektronik GmbH\n70:B3:D5:FD:B0:00/36\tDesignSh\tDesign SHIFT\n70:B3:D5:FD:D0:00/36\tLaserIma\tLaser Imagineering Vertriebs GmbH\n70:B3:D5:FD:E0:00/36\tAeronaut\tAERONAUTICAL & GENERAL INSTRUMENTS LTD.\n70:B3:D5:FD:F0:00/36\tNaraCont\tNara Controls Inc.\n70:B3:D5:FE:20:00/36\tGalileoT\tGalileo Tıp Teknolojileri San. ve Tic. A.S.\n70:B3:D5:FE:30:00/36\tCsmMachi\tCSM MACHINERY srl\n70:B3:D5:FE:40:00/36\tCarePvt\tCare Pvt Ltd\n70:B3:D5:FE:60:00/36\tShizukiE\tShizuki Electric Co.,Inc\n70:B3:D5:FE:70:00/36\tVeilux\tVeilux Inc.\n70:B3:D5:FE:80:00/36\tPcme\tPCME Ltd.\n70:B3:D5:FE:90:00/36\tCamsatPr\tCamsat Przemysław Gralak\n70:B3:D5:FE:A0:00/36\tHengDian\tHeng Dian Technology Co., Ltd\n70:B3:D5:FE:B0:00/36\tLesDistr\tLes distributions Multi-Secure incorporee\n70:B3:D5:FE:C0:00/36\tFinder\tFinder SpA\n70:B3:D5:FE:F0:00/36\tHangzhou\tHangzhou Hualan Microelectronique Co.,Ltd\n70:B3:D5:FF:00:00/36\tE-Metrot\tE-MetroTel\n70:B3:D5:FF:10:00/36\tDataStra\tData Strategy Limited\n70:B3:D5:FF:30:00/36\tAplexTec\tAplex Technology Inc.\n70:B3:D5:FF:40:00/36\tServeron\tServeron Corporation\n70:B3:D5:FF:50:00/36\tProlanPr\tProlan Process Control Co.\n70:B3:D5:FF:70:00/36\tCybercom\tCybercom AB\n70:B3:D5:FF:80:00/36\tDutileGl\tDutile, Glines and Higgins Corporation\n70:B3:D5:FF:90:00/36\tInoutCom\tInOut Communication Systems\n70:B3:D5:FF:C0:00/36\tSymetric\tSymetrics Industries d.b.a. Extant Aerospace\n70:B3:D5:FF:E0:00/36\tPrivate\t\n70:B3:D5:FF:F0:00/36\tPrivate\t\n70:B5:99\tEmbedded\tEmbedded Technologies s.r.o.\n70:B7:AA\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n70:B7:E2\tJiangsuM\tJiangsu Miter Technology Co.,Ltd.\n70:B9:21\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n70:BA:EF\tHangzhou\tHangzhou H3C Technologies Co., Limited\n70:BF:3E\tCharlesR\tCharles River Laboratories\n70:C6:AC\tBoschAut\tBosch Automotive Aftermarket\n70:C7:6F\tInnoS\tInno S\n70:C8:33\tWirepasO\tWirepas Oy\n70:C9:4E\tLiteonTe\tLiteon Technology Corporation\n70:CA:4D\tShenzhen\tShenzhen lnovance Technology Co.,Ltd.\n70:CA:9B\tCisco\tCisco Systems, Inc\n70:CD:60\tApple\tApple, Inc.\n70:D0:81\tBeijingN\tBeijing Netpower Technologies Inc.\n70:D3:13\tHuaweiTe\tHuawei Technologies Co.,Ltd\n70:D3:79\tCisco\tCisco Systems, Inc\n70:D4:F2\tRim\t\n70:D5:7E\tScalar\tScalar Corporation\n70:D5:E7\tWellcore\tWellcore Corporation\n70:D6:B6\tMetrumTe\tMetrum Technologies\n70:D8:80\tUposSyst\tUpos System sp. z o.o.\n70:D9:23\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n70:D9:31\tCambridg\tCambridge Industries(Group) Co.,Ltd.\n70:DA:9C\tTecsen\t\n70:DB:98\tCisco\tCisco Systems, Inc\n70:DD:A1\tTellabs\t\n70:DE:E2\tApple\tApple, Inc.\n70:DE:F9\tFaiWahIn\tFAI WAH INTERNATIONAL (HONG KONG) LIMITED\n70:DF:2F\tCisco\tCisco Systems, Inc\n70:E0:27\tHongyuCo\tHongyu Communication Technology Limited\n70:E1:39\t3view\t3view Ltd\n70:E1:FD\tFlextron\tFlextronics\n70:E2:4C\tSaeIt-Sy\tSAE IT-systems GmbH & Co. KG\n70:E2:84\tWistronI\tWistron Infocomm (Zhongshan) Corporation\n70:E4:22\tCisco\tCisco Systems, Inc\n70:E5:6E\tTexasIns\tTexas Instruments\n70:E7:2C\tApple\tApple, Inc.\n70:E8:43\tBeijingC\tBeijing C&W Optical Communication Technology Co.,Ltd.\n70:EC:E4\tApple\tApple, Inc.\n70:EE:50\tNetatmo\t\n70:EE:A3\tEoptolin\tEoptolink Technology Inc. Ltd,\n70:EF:00\tApple\tApple, Inc.\n70:F0:87\tApple\tApple, Inc.\n70:F1:1C\tShenzhen\tShenzhen Ogemray Technology Co.,Ltd\n70:F1:76\tDataModu\tData Modul AG\n70:F1:96\tActionte\tActiontec Electronics, Inc\n70:F1:A1\tLiteonTe\tLiteon Technology Corporation\n70:F1:E5\tXetawave\tXetawave LLC\n70:F2:20\tActionte\tActiontec Electronics, Inc\n70:F3:5A\tCisco\tCisco Systems, Inc\n70:F3:95\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\n70:F8:E7\tIeeeRegi\tIEEE Registration Authority\n70:F8:E7:00:00:00/28\tShenzhen\tSHENZHEN Xin JiuNing Electronics Co Ltd\n70:F8:E7:10:00:00/28\tSystemLe\tSystem Level Solutions (India) Pvt.\n70:F8:E7:20:00:00/28\tVoxxInte\tVOXX International\n70:F8:E7:30:00:00/28\tDrSimonC\tDr. Simon Consulting GmbH\n70:F8:E7:40:00:00/28\tClip\tCLIP Inc.\n70:F8:E7:50:00:00/28\tBeijingE\tBeijing Eehuu Technology Co.,Ltd.\n70:F8:E7:60:00:00/28\tFleximSe\tFlexim Security Oy\n70:F8:E7:70:00:00/28\tNstTechn\tNST Technology Limited Co.,Ltd.\n70:F8:E7:80:00:00/28\tEclipseS\tEclipse Security\n70:F8:E7:90:00:00/28\tKontechE\tKontech Electronics Co., Ltd\n70:F8:E7:A0:00:00/28\tTivaciPt\tTiVACI CORPORATION PTE LTD\n70:F8:E7:B0:00:00/28\tPhotonfo\tPhotonfocus AG\n70:F8:E7:C0:00:00/28\tFixstars\tFixstars Corporation\n70:F8:E7:D0:00:00/28\tSystem-O\tSystem-on-Chip engineering\n70:F8:E7:E0:00:00/28\tCuav\t\n70:F9:27\tSamsungE\tSamsung Electronics Co.,Ltd\n70:F9:6D\tHangzhou\tHangzhou H3C Technologies Co., Limited\n70:FC:8C\tOneacces\tOneAccess SA\n70:FD:46\tSamsungE\tSamsung Electronics Co.,Ltd\n70:FF:5C\tCheerzin\tCheerzing Communication(Xiamen)Technology Co.,Ltd\n70:FF:76\tTexasIns\tTexas Instruments\n74:03:BD\tBuffalo\tBuffalo.Inc\n74:04:2B\tLenovoMo\tLenovo Mobile Communication (Wuhan) Company Limited\n74:05:A5\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n74:0A:BC\tLightwav\tLightwaveRF Technology Ltd\n74:0E:DB\tOptowiz\tOptowiz Co., Ltd\n74:12:BB\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n74:14:89\tSrtWirel\tSRT Wireless\n74:15:E2\tTri-Sen\tTri-Sen Systems Corporation\n74:18:65\tShanghai\tShanghai DareGlobal Technologies Co.,Ltd\n74:19:F8\tIeeeRegi\tIEEE Registration Authority\n74:19:F8:00:00:00/28\tMarmitek\t\n74:19:F8:10:00:00/28\tTrend-Te\tTrend-tech Technology Co., Limited\n74:19:F8:20:00:00/28\tSymtopIn\tSymtop Instrument Co.\n74:19:F8:30:00:00/28\tEssentia\tEssential Trading Systems Corp\n74:19:F8:40:00:00/28\tCloudvue\tCloudvue Technologies Corporation\n74:19:F8:50:00:00/28\tStarcorB\tStarcor Beijing Co.,Limited\n74:19:F8:60:00:00/28\tBaudisch\tBaudisch Electronic GmbH\n74:19:F8:70:00:00/28\tHeptagon\tHeptagon Systems PTY. LTD.\n74:19:F8:80:00:00/28\tQuestPay\tQuest Payment Systems\n74:19:F8:90:00:00/28\tPrincipA\tPrincip a.s.\n74:19:F8:A0:00:00/28\tTanjarin\tTanjarine\n74:19:F8:B0:00:00/28\tIdexxLab\tIDEXX Laboratories, Inc\n74:19:F8:C0:00:00/28\tBachIcon\tBach Icon ApS\n74:19:F8:D0:00:00/28\tAnsjerEl\tAnsjer Electronics Co., Ltd.\n74:19:F8:E0:00:00/28\tVolacomm\tVolacomm Co., Ltd\n74:19:F8:F0:00:00/28\tPrivate\t\n74:1A:E0\tIeeeRegi\tIEEE Registration Authority\n74:1A:E0:00:00:00/28\tHuanoInt\tHuano International Technology Limited\n74:1A:E0:10:00:00/28\tSocionex\tSocionext Inc.\n74:1A:E0:20:00:00/28\tNuraHold\tNura Holdings Pty Ltd\n74:1A:E0:30:00:00/28\tPhilipsP\tPhilips Personal Health Solutions\n74:1A:E0:40:00:00/28\tRevl\tRevl Inc.\n74:1A:E0:50:00:00/28\tFujianTa\tFujian Taili Communication Technology Co.,Ltd\n74:1A:E0:60:00:00/28\tBlocksWe\tBlocks Wearables Inc.\n74:1A:E0:70:00:00/28\tBärBahns\tBÄR Bahnsicherung AG\n74:1A:E0:80:00:00/28\tBroadcas\tBroadcast Wireless Systems Ltd\n74:1A:E0:90:00:00/28\tPrivate\t\n74:1A:E0:A0:00:00/28\tSaiercom\tSaiercom Corporation\n74:1A:E0:B0:00:00/28\tShenZhen\tShen Zhen Yingjiachuang Electronics Technology Co.,Ltd.\n74:1A:E0:C0:00:00/28\tBistos\tbistos.co.ltd\n74:1A:E0:D0:00:00/28\tVoltawar\tVoltaware Services Limited\n74:1A:E0:E0:00:00/28\tItsPartn\tITS Partner (O.B.S) S.L.\n74:1B:B2\tApple\tApple, Inc.\n74:1C:27\tItelMobi\tItel Mobile Limited\n74:1E:93\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n74:1F:4A\tHangzhou\tHangzhou H3C Technologies Co., Limited\n74:1F:79\tYoungkoo\tYoungkook Electronics Co.,Ltd\n74:23:44\tXiaomiCo\tXiaomi Communications Co Ltd\n74:25:8A\tHangzhou\tHangzhou H3C Technologies Co., Limited\n74:26:AC\tCisco\tCisco Systems, Inc\n74:27:3C\tChangyan\tChangYang Technology (Nanjing) Co., LTD\n74:27:EA\tElitegro\tElitegroup Computer Systems Co.,Ltd.\n74:28:57\tMayfield\tMayfield Robotics\n74:29:AF\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n74:2B:0F\tInfinida\tInfinidat Ltd.\n74:2B:62\tFujitsu\tFujitsu Limited\n74:2D:0A\tNorfolkE\tNorfolk Elektronik AG\n74:2E:FC\tDirectpa\tDirectPacket Research, Inc,\n74:2F:68\tAzurewav\tAzureWave Technology Inc.\n74:31:70\tArcadyan\tArcadyan Technology Corporation\n74:32:56\tNt-WareS\tNT-ware Systemprg GmbH\n74:34:00\tMtg\tMTG Co., Ltd.\n74:37:2F\tTongfang\tTongfang Shenzhen Cloudcomputing Technology Co.,Ltd\n74:37:3B\tUninet\tUNINET Co.,Ltd.\n74:38:89\tAnnaxAnz\tANNAX Anzeigesysteme GmbH\n74:3A:65\tNec\tNEC Corporation\n74:3E:2B\tRuckusWi\tRuckus Wireless\n74:3E:CB\tGentrice\tGentrice tech\n74:40:BB\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n74:44:01\tNetgear\t\n74:45:8A\tSamsungE\tSamsung Electronics Co.,Ltd\n74:46:A0\tHewlettP\tHewlett Packard\n74:4A:A4\tZte\tzte corporation\n74:4B:E9\tExplorer\tExplorer Hypertech Co.,Ltd\n74:4D:79\tArrive\tArrive Systems Inc.\n74:51:BA\tXiaomiCo\tXiaomi Communications Co Ltd\n74:53:27\tCommsen\tCommsen Co., Limited\n74:54:27\tShenzhen\tShenzhen Fast Technologies Co.,Ltd\n74:54:7D\tCiscoSpv\tCisco SPVTG\n74:56:12\tArrisGro\tARRIS Group, Inc.\n74:57:98\tTrumpfLa\tTRUMPF Laser GmbH + Co. KG\n74:59:33\tDanalEnt\tDanal Entertainment\n74:5A:AA\tHuaweiTe\tHuawei Technologies Co.,Ltd\n74:5C:4B\tGnAudio\tGN Audio A/S\n74:5C:9F\tTctMobil\tTCT mobile ltd\n74:5E:1C\tPioneer\tPioneer Corporation\n74:5F:00\tSamsungS\tSamsung Semiconductor Inc.\n74:5F:AE\tTslPpl\tTsl Ppl\n74:61:4B\tChongqin\tChongqing Huijiatong Information Technology Co., Ltd.\n74:63:DF\tVts\tVTS GmbH\n74:65:D1\tAtlinks\t\n74:66:30\tT:MiYtti\tT:mi Ytti\n74:67:F7\tExtremeN\tExtreme Networks, Inc.\n74:6A:3A\tAperi\tAperi Corporation\n74:6A:89\tRezolt\tRezolt Corporation\n74:6A:8F\tVsVision\tVS Vision Systems GmbH\n74:6B:82\tMovek\t\n74:6B:AB\tGuangdon\tGuangdong Enok Communication Co., Ltd\n74:6E:E4\tAsiaVita\tAsia Vital Components Co.,Ltd.\n74:6F:19\tIcarvisi\tICARVISIONS (SHENZHEN) TECHNOLOGY CO., LTD.\n74:6F:3D\tContec\tContec GmbH\n74:6F:F7\tWistronN\tWistron Neweb Corporation\n74:70:FD\tIntelCor\tIntel Corporate\n74:72:1E\tEdisonLa\tEdison Labs Inc.\n74:72:B0\tGuangzho\tGuangzhou Shiyuan Electronics Co., Ltd.\n74:72:F2\tChipsipT\tChipsip Technology Co., Ltd.\n74:73:36\tMicrodig\tMICRODIGTAL Inc\n74:75:48\tAmazonTe\tAmazon Technologies Inc.\n74:78:18\tJurumani\tJurumani Solutions\n74:7B:7A\tEth\tETH Inc.\n74:7D:24\tPhicommS\tPhicomm (Shanghai) Co., Ltd.\n74:7D:B6\tAliweiCo\tAliwei Communications, Inc\n74:7E:1A\tRedEmbed\tRed Embedded Design Limited\n74:7E:2D\tBeijingT\tBeijing Thomson CITIC Digital Technology Co. LTD.\n74:81:14\tApple\tApple, Inc.\n74:81:9A\tPtHarton\tPT. Hartono Istana Teknologi\n74:83:C2\tUbiquiti\tUbiquiti Networks Inc.\n74:83:EF\tAristaNe\tArista Networks\n74:85:2A\tPegatron\tPegatron Corporation\n74:86:0B\tCisco\tCisco Systems, Inc\n74:86:7A\tDell\tDell Inc.\n74:87:A9\tOctTechn\tOCT Technology Co., Ltd.\n74:87:BB\tCiena\tCiena Corporation\n74:88:2A\tHuaweiTe\tHuawei Technologies Co.,Ltd\n74:88:8B\tAdbBroad\tADB Broadband Italia\n74:8A:69\tKoreaIma\tKorea Image Technology Co., Ltd\n74:8D:08\tApple\tApple, Inc.\n74:8E:08\tBestek\tBestek Corp.\n74:8E:F8\tBrocadeC\tBrocade Communications Systems, Inc.\n74:8F:1B\tMasterim\tMasterImage 3D\n74:8F:4D\tMenMikro\tMEN Mikro Elektronik GmbH\n74:90:50\tRenesasE\tRenesas Electronics Corporation\n74:91:1A\tRuckusWi\tRuckus Wireless\n74:91:BD\tFour\tFour systems Co.,Ltd.\n74:93:A4\tZebraTec\tZebra Technologies Corp.\n74:94:3D\tAgjuncti\tAgJunction\n74:95:EC\tAlpsElec\tAlps Electric Co.,Ltd.\n74:96:37\tTodaairE\tTodaair Electronic Co., Ltd\n74:97:81\tZte\tzte corporation\n74:99:75\tIbm\tIBM Corporation\n74:9C:52\tHuizhouD\tHuizhou Desay SV Automotive Co., Ltd.\n74:9C:E3\tKodaclou\tKodaCloud Canada, Inc\n74:9D:79\tSercomm\tSercomm Corporation.\n74:9D:8F\tHuaweiTe\tHuawei Technologies Co.,Ltd\n74:9D:DC\t2wire\t2Wire Inc\n74:9E:AF\tApple\tApple, Inc.\n74:A0:2F\tCisco\tCisco Systems, Inc\n74:A0:63\tHuaweiTe\tHuawei Technologies Co.,Ltd\n74:A2:E6\tCisco\tCisco Systems, Inc\n74:A3:4A\tZimi\tZimi Corporation\n74:A4:A7\tQrsMusic\tQRS Music Technologies, Inc.\n74:A4:B5\tPowerlea\tPowerleader Science and Technology Co. Ltd.\n74:A5:28\tHuaweiTe\tHuawei Technologies Co.,Ltd\n74:A7:22\tLgElectr\tLG Electronics (Mobile Communications)\n74:A7:8E\tZte\tzte corporation\n74:AC:5F\tQikuInte\tQiku Internet Network Scientific (Shenzhen) Co., Ltd.\n74:AD:B7\tChinaMob\tChina Mobile Group Device Co.,Ltd.\n74:AE:76\tInovoBro\tiNovo Broadband, Inc.\n74:B0:0C\tNetworkV\tNetwork Video Technologies, Inc\n74:B4:72\tCiesse\t\n74:B5:7E\tZte\tzte corporation\n74:B5:87\tApple\tApple, Inc.\n74:B9:1E\tNanjingB\tNanjing Bestway Automation System Co., Ltd\n74:B9:EB\tJinqianm\tJinQianMao Technology Co.,Ltd.\n74:BA:DB\tLongconn\tLongconn Electornics(shenzhen)Co.,Ltd\n74:BB:D3\tShenzhen\tShenzhen xeme Communication Co., Ltd.\n74:BE:08\tAtekProd\tATEK Products, LLC\n74:BF:A1\tHyunteck\t\n74:BF:B7\tNusoft\tNusoft Corporation\n74:BF:C0\tCanon\tCanon Inc.\n74:C1:4F\tHuaweiTe\tHuawei Technologies Co.,Ltd\n74:C2:46\tAmazonTe\tAmazon Technologies Inc.\n74:C3:30\tShenzhen\tShenzhen Fast Technologies Co.,Ltd\n74:C6:21\tZhejiang\tZhejiang Hite Renewable Energy Co.,LTD\n74:C6:3B\tAzurewav\tAzureWave Technology Inc.\n74:C9:9A\tEricsson\tEricsson AB\n74:C9:A3\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n74:CA:25\tCalxeda\tCalxeda, Inc.\n74:CC:39\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n74:CD:0C\tSmithMye\tSmith Myers Communications Ltd.\n74:CE:56\tPacketFo\tPacket Force Technology Limited Company\n74:D0:2B\tAsustekC\tASUSTek COMPUTER INC.\n74:D0:DC\tEricsson\tEricsson AB\n74:D2:1D\tHuaweiTe\tHuawei Technologies Co.,Ltd\n74:D4:35\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\n74:D6:75\tWymaTecn\tWYMA Tecnologia\n74:D6:EA\tTexasIns\tTexas Instruments\n74:D7:CA\tPanasoni\tPanasonic Corporation Automotive\n74:D8:50\tEvrisko\tEvrisko Systems\n74:DA:38\tEdimaxTe\tEdimax Technology Co. Ltd.\n74:DA:DA\tD-LinkIn\tD-Link International\n74:DA:EA\tTexasIns\tTexas Instruments\n74:DB:D1\tEbay\tEbay Inc\n74:DE:2B\tLiteonTe\tLiteon Technology Corporation\n74:DF:BF\tLiteonTe\tLiteon Technology Corporation\n74:E0:6E\tErgophon\tErgophone GmbH\n74:E1:4A\tIeeeRegi\tIEEE Registration Authority\n74:E1:4A:00:00:00/28\tAltenbur\tAltenburger Electronic GmbH\n74:E1:4A:10:00:00/28\tCerevo\tCerevo Inc.\n74:E1:4A:20:00:00/28\tKlimatSo\tKLIMAT SOLEC Sp. z o.o.\n74:E1:4A:30:00:00/28\tEmz-Hana\temz-Hanauer GmbH & Co. KGaA\n74:E1:4A:40:00:00/28\tOpenJoin\topen joint stock company YUG-SISTEMA plus\n74:E1:4A:50:00:00/28\tUtuOy\tUTU Oy\n74:E1:4A:60:00:00/28\tEmerging\tEmerging Technology (Holdings) Ltd.\n74:E1:4A:70:00:00/28\tApmTechn\tAPM Technologies (DongGuan) Ltd\n74:E1:4A:80:00:00/28\tAritec\taritec gmbh\n74:E1:4A:90:00:00/28\tKantoAir\tKanto Aircraft Instrument Co., Ltd.\n74:E1:4A:A0:00:00/28\tAstarDes\tAStar Design Service Technologies Co., Ltd.\n74:E1:4A:B0:00:00/28\tLoctekVi\tLoctek Visual Technology Corp.\n74:E1:4A:C0:00:00/28\tWuhanShe\tWuhan Shenghong Laser Projection Technology Co.,LTD\n74:E1:4A:D0:00:00/28\tKnogPty\tKnog Pty Ltd\n74:E1:4A:E0:00:00/28\tDiamondK\tDiamond Kinetics\n74:E1:4A:F0:00:00/28\tPrivate\t\n74:E1:82\tTexasIns\tTexas Instruments\n74:E1:9A\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n74:E1:B6\tApple\tApple, Inc.\n74:E2:77\tVizmonet\tVizmonet Pte Ltd\n74:E2:8C\tMicrosof\tMicrosoft Corporation\n74:E2:F5\tApple\tApple, Inc.\n74:E4:24\tApiste\tApiste Corporation\n74:E5:0B\tIntelCor\tIntel Corporate\n74:E5:37\tRadspin\t\n74:E5:43\tLiteonTe\tLiteon Technology Corporation\n74:E5:F9\tIntelCor\tIntel Corporate\n74:E6:0F\tTecnoMob\tTecno Mobile Limited\n74:E6:E2\tDell\tDell Inc.\n74:E7:C6\tArrisGro\tARRIS Group, Inc.\n74:EA:3A\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n74:EA:C8\tNewH3cTe\tNew H3C Technologies Co., Ltd\n74:EA:CB\tNewH3cTe\tNew H3C Technologies Co., Ltd\n74:EA:E8\tArrisGro\tARRIS Group, Inc.\n74:EB:80\tSamsungE\tSamsung Electronics Co.,Ltd\n74:EC:42\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n74:EC:F1\tAcumen\t\n74:F0:6D\tAzurewav\tAzureWave Technology Inc.\n74:F0:7D\tBncom\tBnCOM Co.,Ltd\n74:F1:02\tBeijingH\tBeijing HCHCOM Technology Co., Ltd\n74:F4:13\tMaxwellF\tMaxwell Forest\n74:F6:12\tArrisGro\tARRIS Group, Inc.\n74:F6:1C\tHtc\tHTC Corporation\n74:F6:61\tSchneide\tSchneider Electric Fire & Security Oy\n74:F7:26\tNeuronRo\tNeuron Robotics\n74:F8:5D\tBerkeley\tBerkeley Nucleonics Corp\n74:F8:DB\tIeeeRegi\tIEEE Registration Authority\n74:F8:DB:00:00:00/28\tEnerconT\tEnercon Technologies\n74:F8:DB:10:00:00/28\tGhlAdvan\tGHL Advanced Technology GmbH & Co. KG\n74:F8:DB:20:00:00/28\tShenzhen\tShenzhen Ruishi Information Technology Co.,Ltd.\n74:F8:DB:30:00:00/28\tInnotran\tInnoTrans Communications\n74:F8:DB:40:00:00/28\tWifiHots\tWiFi Hotspots, SL\n74:F8:DB:50:00:00/28\tProvisio\tProvision-ISR\n74:F8:DB:60:00:00/28\tShenzhen\tShenzhen Melon Electronics Co.,Ltd\n74:F8:DB:70:00:00/28\tWuhanTia\tWuhan Tianyu Information Industry Co., Ltd.\n74:F8:DB:80:00:00/28\tSongamSy\tSongam Syscom Co. LTD.\n74:F8:DB:90:00:00/28\tAvantree\tAvantree Corporation\n74:F8:DB:A0:00:00/28\tBallardT\tBallard Technology, Inc,\n74:F8:DB:B0:00:00/28\tCapwaveT\tCapwave Technologies Inc\n74:F8:DB:C0:00:00/28\tTbm\tTbm Co., Ltd.\n74:F8:DB:D0:00:00/28\tSimonEle\tSimon Electric (China) Co.,ltd\n74:F8:DB:E0:00:00/28\tBernardK\tBernard Krone Holding GmbH & Co. KG\n74:F8:DB:F0:00:00/28\tPrivate\t\n74:F9:1A\tOnface\t\n74:FD:A0\tCompupal\tCompupal (Group) Corporation\n74:FE:48\tAdvantec\tAdvantech Co., Ltd.\n74:FF:4C\tSkyworth\tSkyworth Digital Technology(Shenzhen) Co.,Ltd\n74:FF:7D\tWrenSoun\tWren Sound Systems, LLC\n78:00:9E\tSamsungE\tSamsung Electronics Co.,Ltd\n78:02:8F\tAdaptive\tAdaptive Spectrum and Signal Alignment (ASSIA), Inc.\n78:02:B1\tCisco\tCisco Systems, Inc\n78:02:B7\tShenzhen\tShenZhen Ultra Easy Technology CO.,LTD\n78:02:F8\tXiaomiCo\tXiaomi Communications Co Ltd\n78:04:73\tTexasIns\tTexas Instruments\n78:05:41\tQueclink\tQueclink Wireless Solutions Co., Ltd\n78:05:5F\tShenzhen\tShenzhen WYC Technology Co., Ltd.\n78:07:38\tZUKElzab\tZ.U.K. Elzab S.A.\n78:0A:C7\tBaofengT\tBaofeng TV Co., Ltd.\n78:0C:B8\tIntelCor\tIntel Corporate\n78:0C:F0\tCisco\tCisco Systems, Inc\n78:0F:77\tHangzhou\tHangZhou Gubei Electronics Technology Co.,Ltd\n78:11:85\tNbsPayme\tNBS Payment Solutions Inc.\n78:11:DC\tXiaomiEl\tXIAOMI Electronics,CO.,LTD\n78:12:B8\tOrantek\tOrantek Limited\n78:18:81\tAzurewav\tAzureWave Technology Inc.\n78:19:2E\tNascentT\tNASCENT Technology\n78:19:F7\tJuniperN\tJuniper Networks\n78:1C:5A\tSharp\tSHARP Corporation\n78:1D:4A\tZte\tzte corporation\n78:1D:BA\tHuaweiTe\tHuawei Technologies Co.,Ltd\n78:1D:FD\tJabil\tJabil Inc\n78:1F:DB\tSamsungE\tSamsung Electronics Co.,Ltd\n78:20:79\tIdTech\tID Tech\n78:22:3D\tAffirmed\tAffirmed Networks\n78:23:27\tSamsungE\tSamsung Electronics Co.,Ltd\n78:23:AE\tArrisGro\tARRIS Group, Inc.\n78:24:AF\tAsustekC\tASUSTek COMPUTER INC.\n78:25:44\tOmnima\tOmnima Limited\n78:25:7A\tLeoInnov\tLEO Innovation Lab\n78:25:AD\tSamsungE\tSamsung Electronics Co.,Ltd\n78:28:CA\tSonos\tSonos, Inc.\n78:29:ED\tAskeyCom\tAskey Computer Corp\n78:2B:CB\tDell\tDell Inc.\n78:2D:7E\tTrendnet\tTRENDnet, Inc.\n78:2E:EF\tNokia\tNokia Corporation\n78:2F:17\tXlab\tXlab Co.,Ltd\n78:30:3B\tStephenT\tStephen Technologies Co.,Limited\n78:30:E1\tUltracle\tUltraClenz, LLC\n78:31:2B\tZte\tzte corporation\n78:31:C1\tApple\tApple, Inc.\n78:32:1B\tD-LinkIn\tD-Link International\n78:32:4F\tMillenni\tMillennium Group, Inc.\n78:35:A0\tZurnIndu\tZurn Industries LLC\n78:36:90\tYulongCo\tYulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd\n78:36:CC\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n78:3A:84\tApple\tApple, Inc.\n78:3C:E3\tKai-Ee\t\n78:3D:5B\tTelnetRe\tTELNET Redes Inteligentes S.A.\n78:3E:53\tBskyb\tBSkyB Ltd\n78:3F:15\tEasysync\tEasySYNC Ltd.\n78:40:E4\tSamsungE\tSamsung Electronics Co.,Ltd\n78:44:05\tFujituHo\tFUJITU(HONG KONG) ELECTRONIC Co.,LTD.\n78:44:76\tZioncomE\tZioncom Electronics (Shenzhen) Ltd.\n78:44:FD\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n78:45:01\tBiamp\tBiamp Systems\n78:45:61\tCybertan\tCyberTAN Technology Inc.\n78:45:C4\tDell\tDell Inc.\n78:46:C4\tDaehapHy\tDAEHAP HYPER-TECH\n78:47:1D\tSamsungE\tSamsung Electronics Co.,Ltd\n78:47:E3\tSichuanT\tSichuan Tianyi Comheart Telecom Co.,Ltd\n78:48:59\tHewlettP\tHewlett Packard\n78:49:1D\tWill-Bur\tThe Will-Burt Company\n78:4B:08\tFRobotic\tf.robotics acquisitions ltd\n78:4B:87\tMurataMa\tMurata Manufacturing Co., Ltd.\n78:4F:43\tApple\tApple, Inc.\n78:51:0C\tLiveu\tLiveU Ltd.\n78:52:1A\tSamsungE\tSamsung Electronics Co.,Ltd\n78:52:4A\tEnsenso\tEnsenso GmbH\n78:52:62\tShenzhen\tShenzhen Hojy Software Co., Ltd.\n78:53:64\tShift\tSHIFT GmbH\n78:53:F2\tRoxton\tROXTON Ltd.\n78:54:2E\tD-LinkIn\tD-Link International\n78:55:17\tSankyuel\tSankyuElectronics\n78:57:12\tMobileIn\tMobile Integration Workgroup\n78:58:60\tHuaweiTe\tHuawei Technologies Co.,Ltd\n78:58:F3\tVachen\tVachen Co.,Ltd\n78:59:3E\tRafi\tRAFI GmbH & Co.KG\n78:59:5E\tSamsungE\tSamsung Electronics Co.,Ltd\n78:59:68\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n78:5C:28\tPrimeMot\tPrime Motion Inc.\n78:5C:72\tHiosoTec\tHioso Technology Co., Ltd.\n78:5D:C8\tLgElectr\tLG Electronics\n78:5F:4C\tArgoxInf\tArgox Information Co., Ltd.\n78:61:7C\tMitsumiE\tMitsumi Electric Co.,Ltd.\n78:62:56\tHuaweiTe\tHuawei Technologies Co.,Ltd\n78:64:E6\tGreenMot\tGreen Motive Technology Limited\n78:66:AE\tZtecInst\tZTEC Instruments, Inc.\n78:67:D7\tApple\tApple, Inc.\n78:68:F7\tYstenTec\tYSTen Technology Co.,Ltd\n78:6A:89\tHuaweiTe\tHuawei Technologies Co.,Ltd\n78:6C:1C\tApple\tApple, Inc.\n78:6D:94\tPaloAlto\tPalo Alto Networks\n78:71:9C\tArrisGro\tARRIS Group, Inc.\n78:72:5D\tCisco\tCisco Systems, Inc\n78:7B:8A\tApple\tApple, Inc.\n78:7D:48\tItelMobi\tItel Mobile Limited\n78:7D:53\tAerohive\tAerohive Networks Inc.\n78:7E:61\tApple\tApple, Inc.\n78:7F:62\tGikMbh\tGiK mbH\n78:80:38\tFunaiEle\tFunai Electric Co., Ltd.\n78:81:02\tSercomm\tSercomm Corporation.\n78:81:8F\tServerRa\tServer Racks Australia Pty Ltd\n78:84:3C\tSony\tSony Corporation\n78:84:EE\tIndraEsp\tIndra Espacio S.A.\n78:87:0D\tUnifiedg\tUnifiedgateways India Private Limited\n78:88:6D\tApple\tApple, Inc.\n78:88:8A\tCdrSpZOO\tCDR Sp. z o.o. Sp. k.\n78:89:73\tCmc\t\n78:8A:20\tUbiquiti\tUbiquiti Networks Inc.\n78:8B:77\tStandarT\tStandar Telecom\n78:8C:4D\tIndymeSo\tIndyme Solutions, LLC\n78:8C:54\tPingComm\tPing Communication\n78:8D:F7\tHitronTe\tHitron Technologies. Inc\n78:8E:33\tJiangsuS\tJiangsu SEUIC Technology Co.,Ltd\n78:92:3E\tNokia\tNokia Corporation\n78:92:9C\tIntelCor\tIntel Corporate\n78:94:B4\tSercomm\tSercomm Corporation.\n78:96:82\tZte\tzte corporation\n78:96:84\tArrisGro\tARRIS Group, Inc.\n78:98:FD\tQ9Networ\tQ9 Networks Inc.\n78:99:5C\tNationzT\tNationz Technologies Inc\n78:99:66\tMusilabE\tMusilab Electronics (DongGuan)Co.,Ltd.\n78:99:8F\tMediline\tMediline Italia Srl\n78:9C:85\tAugustHo\tAugust Home, Inc.\n78:9C:E7\tShenzhen\tShenzhen Aikede Technology Co., Ltd\n78:9E:D0\tSamsungE\tSamsung Electronics Co.,Ltd\n78:9F:4C\tHoerbige\tHOERBIGER Elektronik GmbH\n78:9F:70\tApple\tApple, Inc.\n78:9F:87\tSiemensI\tSiemens AG I IA PP PRM\n78:A0:51\tIinetLab\tiiNet Labs Pty Ltd\n78:A1:06\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n78:A1:83\tAdvidia\t\n78:A2:A0\tNintendo\tNintendo Co., Ltd.\n78:A3:51\tShenzhen\tShenzhen Zhibotong Electronics Co.,Ltd\n78:A3:E4\tApple\tApple, Inc.\n78:A5:04\tTexasIns\tTexas Instruments\n78:A5:DD\tShenzhen\tShenzhen Smarteye Digital Electronics Co., Ltd\n78:A6:83\tPrecidat\tPrecidata\n78:A6:BD\tDaeyeonC\tDAEYEON Control&Instrument Co,.Ltd\n78:A6:E1\tBrocadeC\tBrocade Communications Systems, Inc.\n78:A7:14\tAmphenol\t\n78:A8:73\tSamsungE\tSamsung Electronics Co.,Ltd\n78:AB:60\tAbbAustr\tABB Australia\n78:AB:BB\tSamsungE\tSamsung Electronics Co.,Ltd\n78:AC:BF\tIgneous\tIgneous Systems\n78:AC:C0\tHewlettP\tHewlett Packard\n78:AE:0C\tFarSouth\tFar South Networks\n78:AF:58\tGimasiSa\tGimasi Sa\n78:AF:E4\tComauSPA\tComau S.p.A\n78:B2:8D\tBeijingT\tBeijing Tengling Technology CO.Ltd\n78:B3:B9\tShanghai\tShangHai sunup lighting CO.,LTD\n78:B3:CE\tEloTouch\tElo touch solutions\n78:B5:D2\tEverTrea\tEver Treasure Industrial Limited\n78:B6:C1\tAoboTele\tAOBO Telecom Co.,Ltd\n78:B6:EC\tScufGami\tScuf Gaming International LLC\n78:B8:1A\tInterSal\tINTER SALES A/S\n78:B8:4B\tSichuanT\tSichuan Tianyi Comheart Telecomco.,Ltd\n78:BA:D0\tShinybow\tShinybow Technology Co. Ltd.\n78:BA:F9\tCisco\tCisco Systems, Inc\n78:BC:1A\tCisco\tCisco Systems, Inc\n78:BD:BC\tSamsungE\tSamsung Electronics Co.,Ltd\n78:BE:B6\tEnhanced\tEnhanced Vision\n78:BE:BD\tStulz\tSTULZ GmbH\n78:C1:A7\tZte\tzte corporation\n78:C2:C0\tIeeeRegi\tIEEE Registration Authority\n78:C2:C0:00:00:00/28\tShenzhen\tShenzhen ELI Technology co.,ltd\n78:C2:C0:10:00:00/28\tXronos-I\tXRONOS-INC\n78:C2:C0:20:00:00/28\tRonix\tRONIX incorporated\n78:C2:C0:30:00:00/28\tNingboSa\tNingbo Sanxing Electric Co., Ltd.\n78:C2:C0:40:00:00/28\tOryLabor\tOry Laboratory Co., Ltd.\n78:C2:C0:50:00:00/28\tShenzhen\tShenZhen TuLing Robot CO.,LTD\n78:C2:C0:60:00:00/28\tSichuanT\tSichuan Tianyi Comheart Telecomco.,Ltd\n78:C2:C0:70:00:00/28\tGuangzho\tGuangzhou Hongcai Stage Equipment co.,ltd\n78:C2:C0:80:00:00/28\tBeijingC\tBeijing Coilabs technology co.,ltd\n78:C2:C0:90:00:00/28\tSes\t\n78:C2:C0:A0:00:00/28\tOmbitron\tOmbitron, Inc.\n78:C2:C0:B0:00:00/28\tWanChaoA\tWan Chao An (Beijing) Technology Co., Ltd.\n78:C2:C0:C0:00:00/28\tShanghai\tShanghai Hanyi Technologies Co,.Ltd.\n78:C2:C0:D0:00:00/28\tKorf\tKORF Inc.\n78:C2:C0:E0:00:00/28\tHuwomobi\tHuwomobility\n78:C2:C0:F0:00:00/28\tPrivate\t\n78:C3:E9\tSamsungE\tSamsung Electronics Co.,Ltd\n78:C4:0E\tH&DWirel\tH&D Wireless\n78:C4:AB\tShenzhen\tShenzhen Runsil Technology Co.,Ltd\n78:C5:E5\tTexasIns\tTexas Instruments\n78:C6:BB\tInnovasi\tInnovasic, Inc.\n78:CA:04\tNokia\tNokia Corporation\n78:CA:39\tApple\tApple, Inc.\n78:CA:5E\tElno\t\n78:CA:83\tIeeeRegi\tIEEE Registration Authority\n78:CA:83:00:00:00/28\tDaincube\t\n78:CA:83:10:00:00/28\tExceloci\tExcelocity Inc.\n78:CA:83:20:00:00/28\tApc\t\n78:CA:83:30:00:00/28\tNeofon\tNeofon GmbH\n78:CA:83:40:00:00/28\tPinholeB\tPinhole (Beijing) Technology Co., Ltd.\n78:CA:83:50:00:00/28\tHuatuneT\tHuatune Technology (Shanghai) Co., Ltd.\n78:CA:83:60:00:00/28\tNomiku\t\n78:CA:83:70:00:00/28\tBeijingC\tBeijing CarePulse Electronic Technology\n78:CA:83:80:00:00/28\tIhm\t\n78:CA:83:90:00:00/28\tLouroeEl\tLouroe Electronics\n78:CA:83:A0:00:00/28\tEksagate\tEksagate Elektronik Mühendislik ve Bilgisayar San. Tic. A.Ş.\n78:CA:83:B0:00:00/28\tZhejiang\tZhejiang Science Electronic Tech Co., Ltd\n78:CA:83:C0:00:00/28\tElanview\tElanview Technology Co.,Ltd\n78:CA:83:D0:00:00/28\tHubeiBoy\tHubei Boyuan Zhijia Network Media Co. Ltd.\n78:CA:83:E0:00:00/28\tKonecran\tKonecranes\n78:CB:33\tDhcSoftw\tDHC Software Co.,Ltd\n78:CB:68\tDaehapHy\tDAEHAP HYPER-TECH\n78:CD:8E\tSmcNetwo\tSMC Networks Inc\n78:D0:04\tNeousysT\tNeousys Technology Inc.\n78:D1:29\tVicos\t\n78:D2:94\tNetgear\t\n78:D3:4F\tPace-O-M\tPace-O-Matic, Inc.\n78:D3:8D\tHongkong\tHongkong Yunlink Technology Limited\n78:D5:B5\tNavielek\tNavielektro Ky\n78:D6:6F\tAristocr\tAristocrat Technologies Australia Pty. Ltd.\n78:D6:B2\tToshiba\t\n78:D6:F0\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\n78:D7:52\tHuaweiTe\tHuawei Technologies Co.,Ltd\n78:D7:5F\tApple\tApple, Inc.\n78:D8:00\tIeeeRegi\tIEEE Registration Authority\n78:D8:00:00:00:00/28\tKvernela\tKverneland Group Mechatronics\n78:D8:00:10:00:00/28\tShenzhen\tShenzhen Envicool Information Technology Co., Ltd\n78:D8:00:20:00:00/28\tShanghai\tShanghai Espacetime Technology Co.,Ltd.\n78:D8:00:30:00:00/28\tShenzhen\tShenzhen Scodeno Technology Co,. Ltd.\n78:D8:00:40:00:00/28\tCsInstru\tCS Instruments GmbH\n78:D8:00:50:00:00/28\tBjörkvik\tBjörkviks Consulting AB\n78:D8:00:60:00:00/28\tAlangoTe\tAlango Technologies Ltd\n78:D8:00:70:00:00/28\tNimbelin\tNimbeLink Corp\n78:D8:00:80:00:00/28\tSalunda\tSalunda Ltd\n78:D8:00:90:00:00/28\tSightlin\tSightLine Applications\n78:D8:00:A0:00:00/28\tInsignal\tInsignal Co., Ltd.\n78:D8:00:B0:00:00/28\tMaddalen\tMaddalena S.p.A.\n78:D8:00:C0:00:00/28\tShenzhen\tShenzhen Chenzhuo Technology Co., Ltd.\n78:D8:00:D0:00:00/28\tKoreaMic\tKorea Micro Wireless Co.,Ltd.\n78:D8:00:E0:00:00/28\tClIntern\tCL International\n78:D9:9F\tNucomHk\tNuCom HK Ltd.\n78:DA:07\tZhejiang\tZhejiang Tmall Technology Co., Ltd.\n78:DA:6E\tCisco\tCisco Systems, Inc\n78:DA:B3\tGboTechn\tGBO Technology\n78:DD:08\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n78:DD:D6\tC-Scape\t\n78:DD:D9\tGuangzho\tGuangzhou Shiyuan Electronics Co., Ltd.\n78:DE:E4\tTexasIns\tTexas Instruments\n78:E1:03\tAmazonTe\tAmazon Technologies Inc.\n78:E3:B5\tHewlettP\tHewlett Packard\n78:E4:00\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n78:E7:D1\tHewlettP\tHewlett Packard\n78:E8:B6\tZte\tzte corporation\n78:E9:80\tRainus\tRainUs Co.,Ltd\n78:EB:14\tShenzhen\tShenzhen Fast Technologies Co.,Ltd\n78:EB:39\tInstitut\tInstituto Nacional de Tecnología Industrial\n78:EC:22\tShanghai\tShanghai Qihui Telecom Technology Co., LTD\n78:EC:74\tKyland-U\tKyland-USA\n78:EF:4C\tUnetconv\tUnetconvergence Co., Ltd.\n78:F2:9E\tPegatron\tPegatron Corporation\n78:F5:57\tHuaweiTe\tHuawei Technologies Co.,Ltd\n78:F5:E5\tBegaGant\tBEGA Gantenbrink-Leuchten KG\n78:F5:FD\tHuaweiTe\tHuawei Technologies Co.,Ltd\n78:F7:BE\tSamsungE\tSamsung Electronics Co.,Ltd\n78:F7:D0\tSilverbr\tSilverbrook Research\n78:F8:82\tLgElectr\tLG Electronics (Mobile Communications)\n78:F9:44\tPrivate\t\n78:F9:B4\tNokia\t\n78:FC:14\tFamilyZo\tFamily Zone Cyber Safety Ltd\n78:FD:94\tApple\tApple, Inc.\n78:FE:3D\tJuniperN\tJuniper Networks\n78:FE:41\tSocusNet\tSocus networks\n78:FE:E2\tShanghai\tShanghai Diveo Technology Co., Ltd\n78:FF:57\tIntelCor\tIntel Corporate\n78:FF:CA\tTecnoMob\tTecno Mobile Limited\n7A:4B:A4\tInnostor\tInnostor Technology Corporation\n7A:AB:77\tOrange\t\n7A:FD:44\tRosenber\tRosenberger Hochfrequenztechnik GmbH & Co. KG\n7C:01:0A\tTexasIns\tTexas Instruments\n7C:01:87\tCurtisIn\tCurtis Instruments, Inc.\n7C:01:91\tApple\tApple, Inc.\n7C:02:BC\tHansungE\tHansung Electronics Co. LTD\n7C:03:4C\tSagemcom\tSagemcom Broadband SAS\n7C:03:AB\tXiaomiCo\tXiaomi Communications Co Ltd\n7C:03:C9\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\n7C:03:D8\tSagemcom\tSagemcom Broadband SAS\n7C:04:D0\tApple\tApple, Inc.\n7C:05:07\tPegatron\tPegatron Corporation\n7C:05:1E\tRafael\tRafael Ltd.\n7C:06:23\tUltraEle\tUltra Electronics Sonar System Division\n7C:08:D9\tShanghai\tShanghai B-Star Technology Co\n7C:09:2B\tBekey\tBekey A/S\n7C:0A:50\tJ-Mex\tJ-MEX Inc.\n7C:0B:C6\tSamsungE\tSamsung Electronics Co.,Ltd\n7C:0C:F6\tGuangdon\tGuangdong Huiwei High-tech Co., Ltd.\n7C:0E:CE\tCisco\tCisco Systems, Inc\n7C:10:15\tBrillian\tBrilliant Home Technology, Inc.\n7C:11:BE\tApple\tApple, Inc.\n7C:11:CB\tHuaweiTe\tHuawei Technologies Co.,Ltd\n7C:11:CD\tQiantang\tQianTang Technology\n7C:14:76\tDamallTe\tDamall Technologies SAS\n7C:16:0D\tSaia-Bur\tSaia-Burgess Controls AG\n7C:18:CD\tE-Tron\tE-TRON Co.,Ltd.\n7C:1A:03\t8locatio\t8Locations Co., Ltd.\n7C:1A:FC\tDalianCo\tDalian Co-Edifice Video Technology Co., Ltd\n7C:1C:4E\tLgInnote\tLG Innotek\n7C:1C:68\tSamsungE\tSamsung Electronics Co.,Ltd\n7C:1C:F1\tHuaweiTe\tHuawei Technologies Co.,Ltd\n7C:1D:D9\tXiaomiCo\tXiaomi Communications Co Ltd\n7C:1E:52\tMicrosof\tMicrosoft\n7C:1E:B3\t2nTeleko\t2N TELEKOMUNIKACE a.s.\n7C:20:48\tKoamtac\t\n7C:20:64\tAlcatel-\tAlcatel-Lucent IPD\n7C:24:0C\tTelechip\tTelechips, Inc.\n7C:25:86\tJuniperN\tJuniper Networks\n7C:25:87\tChaowifi\tchaowifi.com\n7C:26:34\tArrisGro\tARRIS Group, Inc.\n7C:26:64\tSagemcom\tSagemcom Broadband SAS\n7C:2A:31\tIntelCor\tIntel Corporate\n7C:2B:E1\tShenzhen\tShenzhen Ferex Electrical Co.,Ltd\n7C:2C:F3\tSecureEl\tSecure Electrans Ltd\n7C:2E:0D\tBlackmag\tBlackmagic Design\n7C:2E:BD\tGoogle\tGoogle, Inc.\n7C:2E:DD\tSamsungE\tSamsung Electronics Co.,Ltd\n7C:2F:80\tGigasetC\tGigaset Communications GmbH\n7C:33:6E\tMegElect\tMEG Electronics Inc.\n7C:35:48\tTranscen\tTranscend Information\n7C:38:66\tTexasIns\tTexas Instruments\n7C:38:6C\tRealTime\tReal Time Logic\n7C:39:20\tSsomaSec\tSsoma Security\n7C:39:53\tZte\tzte corporation\n7C:3B:D5\tImagoGro\tImago Group\n7C:3C:B6\tShenzhen\tShenzhen Homecare Technology Co.,Ltd.\n7C:3E:9D\tPatech\t\n7C:41:A2\tNokia\t\n7C:43:8F\tE-BandCo\tE-Band Communications Corp.\n7C:44:4C\tEntertai\tEntertainment Solutions, S.L.\n7C:46:85\tMotorola\tMotorola (Wuhan) Mobility Technologies Communication Co., Ltd.\n7C:47:7C\tIeeeRegi\tIEEE Registration Authority\n7C:47:7C:00:00:00/28\tBungbung\tBungBungame Inc\n7C:47:7C:10:00:00/28\tPhotosyn\tPhotosynth Inc.\n7C:47:7C:20:00:00/28\tPowerlan\tPowerland Limited\n7C:47:7C:30:00:00/28\tEyelockL\tEyeLock LLC\n7C:47:7C:40:00:00/28\tRlcElect\tRLC Electronics Systems\n7C:47:7C:50:00:00/28\tMidwestM\tMidwest Microwave Solutions\n7C:47:7C:60:00:00/28\tZerosyst\tZerosystem LTD.Co\n7C:47:7C:70:00:00/28\tBluesmar\tBlueSmart Technology Corporation\n7C:47:7C:80:00:00/28\tShenzhen\tShenzhen Eunicum Electric Co.,Ltd.\n7C:47:7C:90:00:00/28\tDalianCh\tDaLian Cheering Tech Co.,Ltd\n7C:47:7C:A0:00:00/28\tDspreadT\tDspread Technology (Beijing) Inc.\n7C:47:7C:B0:00:00/28\tHangzhou\tHangzhou Yiyitaidi Information Technology Co., Ltd.\n7C:47:7C:C0:00:00/28\tAnnapurn\tannapurnalabs\n7C:47:7C:D0:00:00/28\tSpeedifi\tSpeedifi Inc\n7C:47:7C:E0:00:00/28\tI-Conver\tI-Convergence.com\n7C:49:B9\tPlexusMa\tPlexus Manufacturing Sdn Bhd\n7C:49:EB\tXiaomiEl\tXIAOMI Electronics,CO.,LTD\n7C:4A:82\tPortsmit\tPortsmith LLC\n7C:4A:A8\tMindtree\tMindTree Wireless PVT Ltd\n7C:4B:78\tRedSunSy\tRed Sun Synthesis Pte Ltd\n7C:4C:58\tScaleCom\tScale Computing, Inc.\n7C:4C:A5\tBskyb\tBSkyB Ltd\n7C:4F:7D\tSawwave\t\n7C:4F:B5\tArcadyan\tArcadyan Technology Corporation\n7C:50:49\tApple\tApple, Inc.\n7C:53:4A\tMetamako\t\n7C:55:E7\tYsi\tYSI, Inc.\n7C:57:4E\tCobi\tCOBI GmbH\n7C:5A:1C\tSophos\tSophos Ltd\n7C:5A:67\tJnc\tJNC Systems, Inc.\n7C:5C:F8\tIntelCor\tIntel Corporate\n7C:60:97\tHuaweiTe\tHuawei Technologies Co.,Ltd\n7C:61:93\tHtc\tHTC Corporation\n7C:64:56\tSamsungE\tSamsung Electronics Co.,Ltd\n7C:66:9D\tTexasIns\tTexas Instruments\n7C:67:A2\tIntelCor\tIntel Corporate\n7C:69:6B\tAtmosicT\tAtmosic Technologies\n7C:69:F6\tCisco\tCisco Systems, Inc\n7C:6A:B3\tIbcTechn\tIbc Technologies Inc.\n7C:6A:C3\tGatesair\tGatesAir, Inc\n7C:6A:DB\tSafetone\tSafeTone Technology Co.,Ltd\n7C:6A:F3\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n7C:6B:33\tTenyuTec\tTenyu Tech Co. Ltd.\n7C:6B:52\tTigaroWi\tTigaro Wireless\n7C:6B:9C\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n7C:6B:F7\tNti\tNTI co., ltd.\n7C:6C:39\tPixsysSr\tPixsys Srl\n7C:6C:8F\tAmsNeve\tAms Neve Ltd\n7C:6D:62\tApple\tApple, Inc.\n7C:6D:A6\tSuperwav\tSuperwave Group LLC\n7C:6D:F8\tApple\tApple, Inc.\n7C:6F:06\tCaterpil\tCaterpillar Trimble Control Technologies\n7C:6F:F8\tShenzhen\tShenZhen ACTO Digital Video Technology Co.,Ltd.\n7C:70:BC\tIeeeRegi\tIEEE Registration Authority\n7C:70:BC:00:00:00/28\tShanghai\tShanghai magcomm communication technology co ltd\n7C:70:BC:10:00:00/28\tXd-GeAut\tXD-GE Automation CO.,LTD\n7C:70:BC:20:00:00/28\tDigitalL\tDigital Lumens\n7C:70:BC:30:00:00/28\tFlexim\tFLEXIM GmbH\n7C:70:BC:40:00:00/28\tK-Vision\tK-Vision Technology (Shanghai), Ltd\n7C:70:BC:50:00:00/28\tCanaryCo\tCanary Connect, Inc.\n7C:70:BC:60:00:00/28\tBidgely\t\n7C:70:BC:70:00:00/28\tNomadDig\tNomad Digital Ltd.\n7C:70:BC:80:00:00/28\tMennekes\tMennekes Elektrotechnik GmbH & Co. KG\n7C:70:BC:90:00:00/28\tDogtra\t\n7C:70:BC:A0:00:00/28\tAmetekVi\tAmetek VIS\n7C:70:BC:B0:00:00/28\tTohanEng\tTohan　Engineering　Corporation\n7C:70:BC:C0:00:00/28\tLukupMed\tLukup Media\n7C:70:BC:D0:00:00/28\tMk-Messt\tmk-messtechnik GmbH\n7C:70:BC:E0:00:00/28\tHoperunM\tHoperun Mmax Digital Pte. Ltd.\n7C:70:BC:F0:00:00/28\tPrivate\t\n7C:71:76\tWuxiIdat\tWuxi iData Technology Company Ltd.\n7C:72:E4\tUnikeyTe\tUnikey Technologies\n7C:73:8B\tCocoonAl\tCocoon Alarm Ltd\n7C:76:30\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\n7C:76:35\tIntelCor\tIntel Corporate\n7C:76:68\tHuaweiTe\tHuawei Technologies Co.,Ltd\n7C:76:73\tEnmas\tENMAS GmbH\n7C:78:7E\tSamsungE\tSamsung Electronics Co.,Ltd\n7C:79:E8\tPayrange\tPayRange Inc.\n7C:7A:53\tPhytrexT\tPhytrex Technology Corp.\n7C:7A:91\tIntelCor\tIntel Corporate\n7C:7B:8B\tControlC\tControl Concepts, Inc.\n7C:7B:E4\tZSedaiKe\tZ'SEDAI KENKYUSHO CORPORATION\n7C:7D:3D\tHuaweiTe\tHuawei Technologies Co.,Ltd\n7C:7D:41\tJinmuyuE\tJinmuyu Electronics Co., Ltd.\n7C:82:2D\tNortec\t\n7C:82:74\tShenzhen\tShenzhen Hikeen Technology CO.,LTD\n7C:83:06\tGlenDimp\tGlen Dimplex Nordic as\n7C:8B:B5\tSamsungE\tSamsung Electronics Co.,Ltd\n7C:8B:CA\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n7C:8D:91\tShanghai\tShanghai Hongzhuo Information Technology co.,LTD\n7C:8E:E4\tTexasIns\tTexas Instruments\n7C:91:22\tSamsungE\tSamsung Electronics Co.,Ltd\n7C:94:B2\tPhilipsH\tPhilips Healthcare PCCI\n7C:95:B1\tAerohive\tAerohive Networks Inc.\n7C:95:F3\tCisco\tCisco Systems, Inc\n7C:96:D2\tFihonest\tFihonest communication co.,Ltd\n7C:97:63\tOpenmati\tOpenmatics s.r.o.\n7C:9A:54\tTechnico\tTechnicolor CH USA Inc.\n7C:9A:9B\tVseValen\tVSE valencia smart energy\n7C:A1:5D\tGnResoun\tGN ReSound A/S\n7C:A1:77\tHuaweiTe\tHuawei Technologies Co.,Ltd\n7C:A2:37\tKingSlid\tKing Slide Technology CO., LTD.\n7C:A2:3E\tHuaweiTe\tHuawei Technologies Co.,Ltd\n7C:A2:9B\tDSignt\tD.SignT GmbH & Co. KG\n7C:A6:1D\tMhlLlc\tMhl, Llc\n7C:A9:7D\tObjeniou\tObjenious\n7C:AB:25\tMesmoTec\tMesmo Technology Inc.\n7C:AC:B2\tBoschSof\tBosch Software Innovations GmbH\n7C:AD:74\tCisco\tCisco Systems, Inc\n7C:B0:3E\tOsram\tOSRAM GmbH\n7C:B0:C2\tIntelCor\tIntel Corporate\n7C:B1:5D\tHuaweiTe\tHuawei Technologies Co.,Ltd\n7C:B1:77\tSatelco\tSatelco AG\n7C:B2:1B\tCiscoSpv\tCisco SPVTG\n7C:B2:32\tHuiZhouG\tHui Zhou Gaoshengda Technology Co.,LTD\n7C:B2:5C\tAcaciaCo\tAcacia Communications\n7C:B5:42\tAcesTech\tACES Technology\n7C:B7:33\tAskeyCom\tAskey Computer Corp\n7C:B7:7B\tParadigm\tParadigm Electronics Inc\n7C:B9:60\tShanghai\tShanghai X-Cheng telecom LTD\n7C:BA:CC\tIeeeRegi\tIEEE Registration Authority\n7C:BA:CC:00:00:00/28\tTgt\tTGT Limited\n7C:BA:CC:10:00:00/28\tChangsha\tChangsha SUNYE Electric Co., Ltd.\n7C:BA:CC:20:00:00/28\tMacoLigh\tMaco Lighting Pty. Ltd.\n7C:BA:CC:30:00:00/28\tIzkare\t\n7C:BA:CC:40:00:00/28\tSunAsiaT\tSun Asia Trade Co.\n7C:BA:CC:50:00:00/28\tFortemTe\tFortem Technologies, Inc.\n7C:BA:CC:60:00:00/28\tFossilPo\tFossil Power Systems Inc\n7C:BA:CC:70:00:00/28\tVirginOr\tVirgin Orbit\n7C:BA:CC:80:00:00/28\tCollinea\tCollinear Networks Inc.\n7C:BA:CC:90:00:00/28\tYongguan\tYongguan Electronic Technology (D.G)LTD\n7C:BA:CC:A0:00:00/28\tAnnapurn\tannapurnalabs\n7C:BA:CC:B0:00:00/28\tBriowire\tBriowireless Inc.\n7C:BA:CC:C0:00:00/28\tFlyingLo\tFlying Loft Inc.\n7C:BA:CC:D0:00:00/28\tSigma-El\tSIGMA-ELEKTRO GmbH\n7C:BA:CC:E0:00:00/28\tAlphaTec\tAlpha Technologies, Llc\n7C:BB:6F\tCoscoEle\tCosco Electronics Co., Ltd.\n7C:BB:8A\tNintendo\tNintendo Co., Ltd.\n7C:BD:06\tAeRefuso\tAE REFUsol\n7C:BF:88\tMobilico\tMobilicom LTD\n7C:BF:B1\tArrisGro\tARRIS Group, Inc.\n7C:C3:85\tHuaweiTe\tHuawei Technologies Co.,Ltd\n7C:C3:A1\tApple\tApple, Inc.\n7C:C4:EF\tDevialet\t\n7C:C5:37\tApple\tApple, Inc.\n7C:C6:C4\tKolffCom\tKolff Computer Supplies b.v.\n7C:C7:09\tShenzhen\tSHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\n7C:C8:AB\tAcroAsso\tAcro Associates, Inc.\n7C:C8:D0\tTianjinY\tTianjin Yaan Technology Co., Ltd.\n7C:C8:D7\tDamalisk\t\n7C:C9:5A\tDellEmc\tDell EMC\n7C:CB:0D\tAntairaT\tAntaira Technologies, LLC\n7C:CB:E2\tIeeeRegi\tIEEE Registration Authority\n7C:CB:E2:00:00:00/28\tHeyuanYo\tHeyuan Yongyida Technology Holdings Co.,Ltd.\n7C:CB:E2:10:00:00/28\tCeotroni\tCeoTronics AG\n7C:CB:E2:20:00:00/28\t1000eyes\t1000eyes GmbH\n7C:CB:E2:30:00:00/28\tAstrumTe\tAstrum Technologies CC\n7C:CB:E2:40:00:00/28\tNingboBi\tNingbo bird sales co.,LTD\n7C:CB:E2:50:00:00/28\tDtechLab\tDTECH Labs, Inc.\n7C:CB:E2:60:00:00/28\tSyElectr\tSY Electronics Limited\n7C:CB:E2:70:00:00/28\tHangzhou\tHangzhou Kaicom Communication Co.,Ltd\n7C:CB:E2:80:00:00/28\tPolartek\tPolarteknik Oy\n7C:CB:E2:90:00:00/28\tHangzhou\tHangzhou Haohaokaiche Technology Co.,Ltd.\n7C:CB:E2:A0:00:00/28\tShanghai\tShanghai Institute of Applied Physics, Chinese Academy of Sciences\n7C:CB:E2:B0:00:00/28\tEasyBroa\tEasy Broadband Technology Co., Ltd.\n7C:CB:E2:C0:00:00/28\tMirakont\tmirakonta s.l.\n7C:CB:E2:D0:00:00/28\tOptilink\toptilink networks pvt ltd\n7C:CB:E2:E0:00:00/28\tAplexTec\tAplex Technology Inc.\n7C:CC:1F\tSichuanT\tSichuan Tianyi Comheart Telecomco.,Ltd\n7C:CC:B8\tIntelCor\tIntel Corporate\n7C:CD:11\tMs-Magne\tMS-Magnet\n7C:CD:3C\tGuangzho\tGuangzhou Juzing Technology Co., Ltd\n7C:CF:CF\tShanghai\tShanghai SEARI Intelligent System Co., Ltd\n7C:D1:C3\tApple\tApple, Inc.\n7C:D3:0A\tInventec\tInventec Corporation\n7C:D7:62\tFreestyl\tFreestyle Technology Pty Ltd\n7C:D8:44\tEnmotus\tEnmotus Inc\n7C:D9:FE\tNewCosmo\tNew Cosmos Electric Co., Ltd.\n7C:DA:84\tDongnian\tDongnian Networks Inc.\n7C:DD:11\tChongqin\tChongqing MAS SCI&TECH.Co.,Ltd\n7C:DD:20\tIoxosTec\tIOXOS Technologies S.A.\n7C:DD:76\tSuzhouHa\tSuzhou Hanming Technologies Co., Ltd.\n7C:DD:90\tShenzhen\tShenzhen Ogemray Technology Co., Ltd.\n7C:E0:44\tNeon\tNEON Inc\n7C:E1:FF\tComputer\tComputer Performance, Inc. DBA Digital Loggers, Inc.\n7C:E2:CA\tJuniperN\tJuniper Networks\n7C:E4:AA\tPrivate\t\n7C:E5:24\tQuirky\tQuirky, Inc.\n7C:E5:6B\tEsenOpto\tESEN Optoelectronics Technology Co.,Ltd.\n7C:E9:7C\tItelMobi\tItel Mobile Limited\n7C:E9:D3\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n7C:EB:7F\tDmetProd\tDmet Products Corp.\n7C:EB:AE\tRidgelin\tRidgeline Instruments\n7C:EB:EA\tAsct\t\n7C:EC:79\tTexasIns\tTexas Instruments\n7C:ED:8D\tMicrosof\tMicrosoft\n7C:EF:18\tCreative\tCreative Product Design Pty. Ltd.\n7C:EF:8A\tInhonInt\tInhon International Ltd.\n7C:F0:5F\tApple\tApple, Inc.\n7C:F0:98\tBeeBeans\tBee Beans Technologies, Inc.\n7C:F0:BA\tLinkwell\tLinkwell Telesystems Pvt Ltd\n7C:F4:29\tNuuo\tNUUO Inc.\n7C:F8:54\tSamsungE\tSamsung Electronics Co.,Ltd\n7C:F9:0E\tSamsungE\tSamsung Electronics Co.,Ltd\n7C:F9:5C\tUILapp\tU.I. Lapp GmbH\n7C:FA:DF\tApple\tApple, Inc.\n7C:FC:3C\tVisteon\tVisteon Corporation\n7C:FE:28\tSalutron\tSalutron Inc.\n7C:FE:4E\tShenzhen\tShenzhen Safe vision Technology Co.,LTD\n7C:FE:90\tMellanox\tMellanox Technologies, Inc.\n7C:FF:4D\tAvmAudio\tAVM Audiovisuelles Marketing und Computersysteme GmbH\n7C:FF:62\tHuizhouS\tHuizhou Super Electron Technology Co.,Ltd.\n80:00:0B\tIntelCor\tIntel Corporate\n80:00:10\tAt&T[Mis\tAT&T [misrepresented as 080010? One source claims this is correct]\n80:00:6E\tApple\tApple, Inc.\n80:01:84\tHtc\tHTC Corporation\n80:02:9C\tGemtekTe\tGemtek Technology Co., Ltd.\n80:02:DF\tOra\tORA Inc.\n80:05:88\tRuijieNe\tRuijie Networks Co.,LTD\n80:05:DF\tMontageT\tMontage Technology Group Limited\n80:07:A2\tEssonTec\tEsson Technology Inc.\n80:09:02\tKeysight\tKeysight Technologies, Inc.\n80:0A:06\tComtec\tCOMTEC co.,ltd\n80:0A:80\tIeeeRegi\tIEEE Registration Authority\n80:0A:80:00:00:00/28\tGolanaTe\tGolana Technology (Shenzhen) Co., Ltd.\n80:0A:80:10:00:00/28\tDongguan\tDongguan I-Chime electrinics Co.,Ltd\n80:0A:80:20:00:00/28\tSumitomo\tSumitomo Wiring Systems, Ltd.\n80:0A:80:30:00:00/28\tBeijingV\tBeijing VControl Technology Co., Ltd.\n80:0A:80:40:00:00/28\tLlvision\tLlvision Technology Co.,Ltd\n80:0A:80:50:00:00/28\tShenzhen\tShenzhen Zidoo Technology Co., Ltd.\n80:0A:80:60:00:00/28\tBeijingG\tBeijing Gooagoo Technical Service Co.,Ltd.\n80:0A:80:F0:00:00/28\tPrivate\t\n80:0B:51\tChengduX\tChengdu XGimi Technology Co.,Ltd\n80:0D:D7\tLatticew\tLatticework, Inc\n80:0E:24\tForgetbo\tForgetBox\n80:13:82\tHuaweiTe\tHuawei Technologies Co.,Ltd\n80:14:40\tSunlitSy\tSunlit System Technology Corp\n80:14:A8\tGuangzho\tGuangzhou V-SOLUTION Electronic Technology Co., Ltd.\n80:16:B7\tBrunelUn\tBrunel University\n80:17:7D\tNortelNe\tNortel Networks\n80:18:44\tDell\tDell Inc.\n80:18:A7\tSamsungE\tSamsung Electronics Co.,Ltd\n80:19:34\tIntelCor\tIntel Corporate\n80:19:67\tShanghai\tShanghai Reallytek Information Technology  Co.,Ltd\n80:19:FE\tJianling\tJianLing Technology CO., LTD\n80:1D:AA\tAvaya\tAvaya Inc\n80:1F:02\tEdimaxTe\tEdimax Technology Co. Ltd.\n80:1F:12\tMicrochi\tMicrochip Technology Inc.\n80:20:AF\tTradeFid\tTrade FIDES, a.s.\n80:22:75\tBeijingB\tBeijing Beny Wave Technology Co Ltd\n80:26:89\tD-LinkIn\tD-Link International\n80:29:94\tTechnico\tTechnicolor CH USA Inc.\n80:2A:A8\tUbiquiti\tUbiquiti Networks Inc.\n80:2A:FA\tGermanee\tGermaneers GmbH\n80:2B:F9\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n80:2D:E1\tSolarbri\tSolarbridge Technologies\n80:2E:14\tAzetiNet\tazeti Networks AG\n80:2F:DE\tZurichIn\tZurich Instruments AG\n80:30:DC\tTexasIns\tTexas Instruments\n80:30:E0\tHewlettP\tHewlett Packard Enterprise\n80:34:57\tOt\tOT Systems Limited\n80:35:C1\tXiaomiCo\tXiaomi Communications Co Ltd\n80:37:73\tNetgear\t\n80:38:96\tSharp\tSHARP Corporation\n80:38:BC\tHuaweiTe\tHuawei Technologies Co.,Ltd\n80:38:FD\tLeapfrog\tLeapFrog Enterprises, Inc.\n80:39:E5\tPatlite\tPatlite Corporation\n80:3A:0A\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n80:3A:59\tAt&T\t\n80:3A:F4\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n80:3B:2A\tAbbXiame\tABB Xiamen Low Voltage Equipment Co.,Ltd.\n80:3B:9A\tGhe-CesE\tghe-ces electronic ag\n80:3B:F6\tLookEasy\tLook Easy International Limited\n80:3F:5D\tWinstars\tWinstars Technology Ltd\n80:3F:D6\tBytesAtW\tbytes at work AG\n80:41:26\tHuaweiTe\tHuawei Technologies Co.,Ltd\n80:41:4E\tBbkEduca\tBbk Educational Electronics Corp.,Ltd.\n80:42:7C\tAdolfTed\tAdolf Tedsen GmbH & Co. KG\n80:47:31\tPacketDe\tPacket Design, Inc.\n80:48:A5\tSichuanT\tSichuan Tianyi Comheart Telecomco.,Ltd\n80:49:71\tApple\tApple, Inc.\n80:4B:20\tVentilat\tVentilation Control\n80:4E:70\tSamsungE\tSamsung Electronics Co.,Ltd\n80:4E:81\tSamsungE\tSamsung Electronics Co.,Ltd\n80:4F:58\tThinkeco\tThinkEco, Inc.\n80:50:1B\tNokia\tNokia Corporation\n80:50:67\tWDTechno\tW & D TECHNOLOGY CORPORATION\n80:50:F6\tItelMobi\tItel Mobile Limited\n80:56:F2\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n80:57:19\tSamsungE\tSamsung Electronics Co.,Ltd\n80:58:C5\tNovatecK\tNovaTec Kommunikationstechnik GmbH\n80:58:F8\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n80:59:FD\tNoviga\t\n80:5A:04\tLgElectr\tLG Electronics (Mobile Communications)\n80:5E:0C\tYealinkX\tYEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.\n80:5E:4F\tFn-LinkT\tFN-LINK TECHNOLOGY LIMITED\n80:5E:C0\tYealinkX\tYEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.\n80:60:07\tRim\t\n80:61:5F\tBeijingS\tBeijing Sinead Technology Co., Ltd.\n80:61:8F\tShenzhen\tShenzhen sangfei consumer communications co.,ltd\n80:64:59\tNimbus\tNimbus Inc.\n80:65:6D\tSamsungE\tSamsung Electronics Co.,Ltd\n80:65:E9\tBenq\tBenQ Corporation\n80:66:29\tPrescope\tPrescope Technologies CO.,LTD.\n80:69:33\tHuaweiTe\tHuawei Technologies Co.,Ltd\n80:6A:B0\tShenzhen\tShenzhen TINNO Mobile Technology Corp.\n80:6C:1B\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n80:6C:8B\tKaeserKo\tKaeser Kompressoren Ag\n80:6C:BC\tNetNewEl\tNET New Electronic Technology GmbH\n80:6F:B0\tTexasIns\tTexas Instruments\n80:71:1F\tJuniperN\tJuniper Networks\n80:71:7A\tHuaweiTe\tHuawei Technologies Co.,Ltd\n80:73:9F\tKyocera\tKyocera Corporation\n80:74:59\tKS\tK's Co.,Ltd.\n80:76:93\tNewagSa\tNewag SA\n80:79:AE\tShandong\tShanDong Tecsunrise  Co.,Ltd\n80:7A:7F\tAbbGenwa\tABB Genway Xiamen Electrical Equipment CO., LTD\n80:7A:BF\tHtc\tHTC Corporation\n80:7B:1E\tCorsairC\tCorsair Components\n80:7B:85\tIeeeRegi\tIEEE Registration Authority\n80:7B:85:00:00:00/28\tShiroshi\tShiroshita Industrial Co., Ltd.\n80:7B:85:10:00:00/28\tHangzhou\tHangzhou Synway Information Engineering Co., Ltd\n80:7B:85:20:00:00/28\tPhoenix\tPhoenix Co.,Ltd.\n80:7B:85:30:00:00/28\tZhuhaiTo\tZhuhai TOP Intelligence Electric Co., Ltd.\n80:7B:85:40:00:00/28\tQuantelU\tQuantel USA, Inc.\n80:7B:85:50:00:00/28\tEfco\t\n80:7B:85:60:00:00/28\tQuickteT\tQuickte Technology Co.,Ltd\n80:7B:85:70:00:00/28\tChenduNi\tChendu Ningshui Technology Co.,Ltd\n80:7B:85:80:00:00/28\tIdairLlc\tIDair, LLC\n80:7B:85:90:00:00/28\tSmartEle\tSmart Electronics Nz Limited\n80:7B:85:A0:00:00/28\tInterpla\tInterplan Co., Ltd.\n80:7B:85:B0:00:00/28\tOliotalo\tOliotalo Oy\n80:7B:85:C0:00:00/28\tNingboPl\tNingbo Plus and Popscreens electronic Technology Co.,LTD\n80:7B:85:D0:00:00/28\tKaynesTe\tKaynes Technology India Pvt Ltd\n80:7B:85:E0:00:00/28\tMersen\t\n80:7B:85:F0:00:00/28\tPrivate\t\n80:7D:14\tHuaweiTe\tHuawei Technologies Co.,Ltd\n80:7D:1B\tNeosyste\tNeosystem Co. Ltd.\n80:7D:E3\tChongqin\tChongqing Sichuan Instrument Microcircuit Co.LTD.\n80:81:A5\tTongqing\tTONGQING COMMUNICATION EQUIPMENT (SHENZHEN) Co.,Ltd\n80:82:23\tApple\tApple, Inc.\n80:82:87\tAtcomTec\tATCOM Technology Co.Ltd.\n80:86:98\tNetronic\tNetronics Technologies Inc.\n80:86:F2\tIntelCor\tIntel Corporate\n80:89:17\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n80:8B:5C\tShenzhen\tShenzhen Runhuicheng Technology Co., Ltd\n80:8C:97\tKaonmedi\tKaonmedia CO., LTD.\n80:8D:B7\tHewlettP\tHewlett Packard Enterprise\n80:91:2A\tLihRongE\tLih Rong electronic Enterprise Co., Ltd.\n80:91:C0\tAgilemes\tAgileMesh, Inc.\n80:92:9F\tApple\tApple, Inc.\n80:93:93\tXapt\tXapt GmbH\n80:94:6C\tTokyoRad\tTokyo Radar Corporation\n80:96:21\tLenovo\t\n80:96:B1\tArrisGro\tARRIS Group, Inc.\n80:96:CA\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n80:97:1B\tAltenerg\tAltenergy Power System,Inc.\n80:9B:20\tIntelCor\tIntel Corporate\n80:9F:AB\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n80:A0:36\tShanghai\tShanghai MXCHIP Information Technology Co., Ltd.\n80:A1:AB\tIntellis\tIntellisis\n80:A1:D7\tShanghai\tShanghai DareGlobal Technologies Co.,Ltd\n80:A5:89\tAzurewav\tAzureWave Technology Inc.\n80:A7:96\tNeurotek\tNeurotek LLC\n80:A8:5D\tOsterhou\tOsterhout Design Group\n80:AA:A4\tUsag\t\n80:AC:AC\tJuniperN\tJuniper Networks\n80:AD:00\tCnetTech\tCNET Technology Inc. (Probably an error, see instead 0080AD)\n80:AD:16\tXiaomiCo\tXiaomi Communications Co Ltd\n80:AD:67\tKasdaNet\tKasda Networks Inc\n80:B0:3D\tApple\tApple, Inc.\n80:B2:19\tElektron\tElektron Technology Uk Limited\n80:B2:34\tTechnico\tTechnicolor CH USA Inc.\n80:B2:89\tForworld\tForworld Electronics Ltd.\n80:B3:2A\tUkGridSo\tUK Grid Solutions Ltd\n80:B5:75\tHuaweiTe\tHuawei Technologies Co.,Ltd\n80:B6:24\tIvs\t\n80:B6:86\tHuaweiTe\tHuawei Technologies Co.,Ltd\n80:B7:08\tBlueDanu\tBlue Danube Systems, Inc\n80:B7:09\tViptela\tViptela, Inc\n80:B9:5C\tElftech\tELFTECH Co., Ltd.\n80:BA:AC\tTeleadap\tTeleAdapt Ltd\n80:BA:E6\tNeets\t\n80:BB:EB\tSatmap\tSatmap Systems Ltd\n80:BE:05\tApple\tApple, Inc.\n80:C1:6E\tHewlettP\tHewlett Packard\n80:C5:48\tShenzhen\tShenzhen Zowee Technology Co.,Ltd\n80:C5:E6\tMicrosof\tMicrosoft Corporation\n80:C5:F2\tAzurewav\tAzureWave Technology Inc.\n80:C6:3F\tRemecBro\tRemec Broadband Wireless , LLC\n80:C6:AB\tTechnico\tTechnicolor CH USA Inc.\n80:C6:CA\tEndianSR\tEndian s.r.l.\n80:C7:55\tPanasoni\tPanasonic Appliances Company\n80:C7:C5\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n80:C8:62\tOpenpeak\tOpenpeak, Inc\n80:CE:62\tHewlettP\tHewlett Packard\n80:CE:B1\tTheissen\tTheissen Training Systems GmbH\n80:CE:B9\tSamsungE\tSamsung Electronics Co.,Ltd\n80:CF:41\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\n80:D0:19\tEmbed\tEmbed, Inc\n80:D0:65\tCks\tCKS Corporation\n80:D0:9B\tHuaweiTe\tHuawei Technologies Co.,Ltd\n80:D1:60\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n80:D1:8B\tHangzhou\tHangzhou I'converge Technology Co.,Ltd\n80:D2:1D\tAzurewav\tAzureWave Technology Inc.\n80:D4:33\tLzlabs\tLzLabs GmbH\n80:D4:A5\tHuaweiTe\tHuawei Technologies Co.,Ltd\n80:D6:05\tApple\tApple, Inc.\n80:D7:33\tQsrAutom\tQSR Automations, Inc.\n80:DB:31\tPowerQuo\tPower Quotient International Co., Ltd.\n80:E0:1D\tCisco\tCisco Systems, Inc\n80:E4:DA\tIeeeRegi\tIEEE Registration Authority\n80:E4:DA:00:00:00/28\tWheatsto\tWheatstone Corporation\n80:E4:DA:10:00:00/28\tGuangzho\tGuangzhou Pinzhong Electronic Technology CO., LTD\n80:E4:DA:20:00:00/28\tThurlbyT\tThurlby Thandar Instruments LTD\n80:E4:DA:30:00:00/28\tBeijingG\tBeijing Gaokezhongtian Technology Co Ltd\n80:E4:DA:40:00:00/28\tBeijingY\tBeijing Yuantel Technolgy Co.,Ltd-Shenzhen Branch\n80:E4:DA:50:00:00/28\tCavalryS\tCavalry Storage Inc\n80:E4:DA:60:00:00/28\tBroadmed\tBroadMedia Co., Ltd.\n80:E4:DA:70:00:00/28\tShortcut\tShortcut Labs\n80:E4:DA:80:00:00/28\tKrizerIn\tKrizer international Co,. Ltd.\n80:E4:DA:90:00:00/28\tElcus\t\n80:E4:DA:A0:00:00/28\tNeutroni\tNeutronics\n80:E4:DA:B0:00:00/28\tNanjingL\tNanjing LILO Technology Co. Ltd.\n80:E4:DA:C0:00:00/28\tEverSpZO\tEVER Sp. z o.o.\n80:E4:DA:D0:00:00/28\tDalianRo\tDalian Roiland Technology Co.,Ltd\n80:E4:DA:E0:00:00/28\tAkenoriP\tAkenori PTE LTD\n80:E4:DA:F0:00:00/28\tPrivate\t\n80:E6:50\tApple\tApple, Inc.\n80:E8:6F\tCisco\tCisco Systems, Inc\n80:EA:23\tWistronN\tWistron Neweb Corporation\n80:EA:96\tApple\tApple, Inc.\n80:EA:CA\tDialogSe\tDialog Semiconductor Hellas SA\n80:EB:77\tWistron\tWistron Corporation\n80:ED:2C\tApple\tApple, Inc.\n80:EE:73\tShuttle\tShuttle Inc.\n80:F2:5E\tKyynel\t\n80:F5:03\tArrisGro\tARRIS Group, Inc.\n80:F5:93\tIrcoSist\tIRCO Sistemas de Telecomunicación S.A.\n80:F6:2E\tHangzhou\tHangzhou H3C Technologies Co., Limited\n80:F8:EB\tRaytight\t\n80:FA:5B\tClevo\tClevo Co.\n80:FB:06\tHuaweiTe\tHuawei Technologies Co.,Ltd\n80:FB:F0\tQuectelW\tQuectel Wireless Solutions Co., Ltd.\n80:FF:A8\tUnidis\t\n84:00:2D\tPegatron\tPegatron Corporation\n84:00:D2\tSonyMobi\tSony Mobile Communications Inc\n84:01:A7\tGreyware\tGreyware Automation Products, Inc\n84:04:D2\tKiraleTe\tKirale Technologies SL\n84:0B:2D\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\n84:0D:8E\tEspressi\tEspressif Inc.\n84:0F:45\tShanghai\tShanghai GMT Digital Technologies Co., Ltd\n84:10:0D\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n84:11:9E\tSamsungE\tSamsung Electronics Co.,Ltd\n84:16:F9\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n84:17:15\tGpElectr\tGP Electronics (HK) Ltd.\n84:17:66\tWeifangG\tWeifang Goertek Electronics Co.,Ltd\n84:17:EF\tTechnico\tTechnicolor CH USA Inc.\n84:18:26\tOsram\tOsram GmbH\n84:18:3A\tRuckusWi\tRuckus Wireless\n84:18:88\tJuniperN\tJuniper Networks\n84:1B:38\tShenzhen\tShenzhen Excelsecu Data Technology Co.,Ltd\n84:1B:5E\tNetgear\t\n84:1E:26\tKernel-I\tKERNEL-I Co.,LTD\n84:20:96\tShenzhen\tSHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\n84:21:41\tShenzhen\tShenzhen Ginwave Technologies Ltd.\n84:21:F1\tHuaweiTe\tHuawei Technologies Co.,Ltd\n84:24:8D\tZebraTec\tZebra Technologies Inc\n84:25:19\tSamsungE\tSamsung Electronics\n84:25:3F\tSilexTec\tsilex technology, Inc.\n84:25:A4\tTariox\tTariox Limited\n84:25:DB\tSamsungE\tSamsung Electronics Co.,Ltd\n84:26:15\tAdbBroad\tADB Broadband Italia\n84:26:2B\tNokia\t\n84:26:90\tBeijingT\tBeijing Thought Science Co.,Ltd.\n84:27:CE\tOfPresid\tCorporation of the Presiding Bishop of The Church of Jesus Christ of Latter-day Saints\n84:28:5A\tSaffronS\tSaffron Solutions Inc\n84:29:14\tEmporiaT\tEMPORIA TELECOM Produktions- und VertriebsgesmbH & Co KG\n84:29:99\tApple\tApple, Inc.\n84:2B:2B\tDell\tDell Inc.\n84:2B:50\tHuria\tHuria Co.,Ltd.\n84:2B:BC\tModellei\tModelleisenbahn GmbH\n84:2C:80\tSichuanC\tSichuan Changhong Electric Ltd.\n84:2E:27\tSamsungE\tSamsung Electronics Co.,Ltd\n84:2F:75\tInnokasG\tInnokas Group\n84:30:E5\tSkyhawke\tSkyHawke Technologies, LLC\n84:32:6F\tGuangzho\tGuangzhou Ava Electronics Technology Co.,Ltd\n84:32:EA\tAnhuiWan\tANHUI WANZTEN P&T CO., LTD\n84:34:97\tHewlettP\tHewlett Packard\n84:36:11\tHyungseu\thyungseul publishing networks\n84:38:35\tApple\tApple, Inc.\n84:38:38\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\n84:39:BE:00:00:00/28\tHinoEngi\tHino Engineering, Inc\n84:39:BE:10:00:00/28\tGuangzho\tGuangzhou Heygears Technology Ltd\n84:39:BE:20:00:00/28\tChengDuV\tCheng Du virtual world Technology Limited.\n84:39:BE:30:00:00/28\tShenzhen\tShenZhen Fudeyu Technology co.,Ltd\n84:39:BE:40:00:00/28\tShenzhen\tShenzhen Ramos Digital Technology Co,.Ltd.\n84:39:BE:50:00:00/28\tNeatSRL\tNeat S.r.l.\n84:39:BE:60:00:00/28\tShenzhen\tShenzhen IP3 Century Intelligent Technology Co., Ltd\n84:39:BE:80:00:00/28\tDiamondP\tDiamond Products LLC\n84:39:BE:90:00:00/28\tGuangdon\tGuangdong SunMeng Information Technology Co. Ltd.\n84:39:BE:A0:00:00/28\tEmotiqSR\tEmotiq s.r.l.\n84:39:BE:B0:00:00/28\tShenzhen\tShenzhen Horn Audio Co.,Ltd.\n84:39:BE:C0:00:00/28\tEdcElect\tEDC Electronic Design Chemnitz GmbH\n84:39:BE:D0:00:00/28\tShenzhen\tShenzhen Lidaxun Digital Technology Co.,Ltd\n84:3A:4B\tIntelCor\tIntel Corporate\n84:3D:C6\tCisco\tCisco Systems, Inc\n84:3F:4E\tTri-Tech\tTri-Tech Manufacturing, Inc.\n84:40:76\tDrivenet\tDrivenets\n84:41:67\tApple\tApple, Inc.\n84:44:64\tServeru\tServerU Inc\n84:47:65\tHuaweiTe\tHuawei Technologies Co.,Ltd\n84:48:23\tWoxterTe\tWOXTER TECHNOLOGY Co. Ltd\n84:49:15\tVarmourN\tvArmour Networks, Inc.\n84:4B:B7\tBeijingS\tBeijing Sankuai Online Technology Co.,Ltd\n84:4B:F5\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n84:4F:03\tAblelink\tAblelink Electronics Ltd\n84:50:9A\tEasySoft\tEasy Soft TV Co., Ltd\n84:51:81\tSamsungE\tSamsung Electronics Co.,Ltd\n84:55:A5\tSamsungE\tSamsung Electronics Co.,Ltd\n84:56:9C\tCohoData\tCoho Data, Inc.,\n84:57:87\tDvrC&C\tDVR C&C Co., Ltd.\n84:5A:81\tFfly4u\t\n84:5B:12\tHuaweiTe\tHuawei Technologies Co.,Ltd\n84:5C:93\tChabrier\tChabrier Services\n84:5D:D7\tShenzhen\tShenzhen Netcom Electronics Co.,Ltd\n84:61:A0\tArrisGro\tARRIS Group, Inc.\n84:62:23\tShenzhen\tShenzhen Coship Electronics Co., Ltd.\n84:62:A6\tEurocbPh\tEuroCB (Phils), Inc.\n84:63:D6\tMicrosof\tMicrosoft Corporation\n84:68:3E\tIntelCor\tIntel Corporate\n84:68:78\tApple\tApple, Inc.\n84:6A:66\tSumitomo\tSumitomo Kizai  Co.,Ltd.\n84:6A:ED\tWireless\tWireless Tsukamoto.,co.LTD\n84:6E:B1\tParkAssi\tPark Assist LLC\n84:72:07\tI&CTechn\tI&C Technology\n84:73:03\tLetvMobi\tLetv Mobile and Intelligent Information Technology (Beijing) Corporation Ltd.\n84:74:2A\tZte\tzte corporation\n84:74:60\tZte\tzte corporation\n84:76:16\tAddatSRO\tAddat s.r.o.\n84:77:78\tCochlear\tCochlear Limited\n84:78:8B\tApple\tApple, Inc.\n84:78:AC\tCisco\tCisco Systems, Inc\n84:79:33\tProfichi\tprofichip GmbH\n84:79:73\tShanghai\tShanghai Baud Data Communication Co.,Ltd.\n84:7A:88\tHtc\tHTC Corporation\n84:7B:EB\tDell\tDell Inc.\n84:7D:50\tHolleyMe\tHolley Metering Limited\n84:7E:40\tTexasIns\tTexas Instruments\n84:7F:3D\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n84:80:2D\tCisco\tCisco Systems, Inc\n84:82:F4\tBeijingH\tBeijing Huasun Unicreate Technology Co., Ltd\n84:83:19\tHangzhou\tHangzhou Zero Zero Technology Co., Ltd.\n84:83:36\tNewrun\t\n84:83:71\tAvaya\tAvaya Inc\n84:84:33\tParadoxE\tParadox Engineering SA\n84:85:06\tApple\tApple, Inc.\n84:85:0A\tHellaSon\tHella Sonnen- und Wetterschutztechnik GmbH\n84:86:F3\tGreenvit\tGreenvity Communications\n84:89:AD\tApple\tApple, Inc.\n84:89:EC\tIeeeRegi\tIEEE Registration Authority\n84:89:EC:00:00:00/28\tSmartgia\tSmartGiant Technology\n84:89:EC:10:00:00/28\tResearch\tResearch Electronics International, LLC.\n84:89:EC:20:00:00/28\tThousand\tthousand star tech LTD.\n84:89:EC:30:00:00/28\tAerionic\tAerionics Inc.\n84:89:EC:40:00:00/28\tVayyarIm\tVayyar Imaging Ltd.\n84:89:EC:50:00:00/28\tZephyrEn\tZephyr Engineering, Inc.\n84:89:EC:60:00:00/28\tPoctBiot\tPOCT biotechnology\n84:89:EC:70:00:00/28\tByda\tBYDA Co. Ltd.,\n84:89:EC:80:00:00/28\tArtsDigi\tArts Digital Technology (HK) Ltd.\n84:89:EC:90:00:00/28\tShenzhen\tShenzhen Xtooltech Co., Ltd\n84:89:EC:A0:00:00/28\tNewellBr\tNewell Brands\n84:89:EC:B0:00:00/28\tEpsaElek\tEPSa Elektronik & Präzisionsbau Saalfeld GmbH\n84:89:EC:C0:00:00/28\tShinkawa\tShinkawa Ltd.\n84:89:EC:D0:00:00/28\tPriceInd\tPrice Industries Limited\n84:89:EC:E0:00:00/28\tShenzhen\tShenzhen Intellifusion Technologies Co., Ltd.\n84:8A:8D\tCisco\tCisco Systems, Inc\n84:8D:84\tRajant\tRajant Corporation\n84:8D:C7\tCiscoSpv\tCisco SPVTG\n84:8E:0C\tApple\tApple, Inc.\n84:8E:96\tEmbertec\tEmbertec Pty Ltd\n84:8E:DF\tSonyMobi\tSony Mobile Communications Inc\n84:8F:69\tDell\tDell Inc.\n84:90:00\tArnoldRi\tArnold & Richter Cine Technik\n84:93:0C\tIncoaxNe\tInCoax Networks Europe AB\n84:94:8C\tHitronTe\tHitron Technologies. Inc\n84:96:81\tCathayCo\tCathay Communication Co.,Ltd\n84:96:D8\tArrisGro\tARRIS Group, Inc.\n84:97:B8\tMemjet\tMemjet Inc.\n84:98:66\tSamsungE\tSamsung Electronics Co.,Ltd\n84:9C:A6\tArcadyan\tArcadyan Technology Corporation\n84:9D:64\tSmc\tSMC Corporation\n84:9D:C5\tCenteraP\tCentera Photonics Inc.\n84:9F:B5\tHuaweiTe\tHuawei Technologies Co.,Ltd\n84:A1:34\tApple\tApple, Inc.\n84:A1:D1\tSagemcom\tSagemcom Broadband SAS\n84:A2:4D\tBirdsEye\tBirds Eye Systems Private Limited\n84:A4:23\tSagemcom\tSagemcom Broadband SAS\n84:A4:66\tSamsungE\tSamsung Electronics Co.,Ltd\n84:A6:C8\tIntelCor\tIntel Corporate\n84:A7:83\tAlcatelL\tAlcatel Lucent\n84:A7:88\tPerples\t\n84:A8:E4\tHuaweiTe\tHuawei Technologies Co.,Ltd\n84:A9:91\tCyberTra\tCyber Trans Japan Co.,Ltd.\n84:A9:C4\tHuaweiTe\tHuawei Technologies Co.,Ltd\n84:AA:9C\tMitrasta\tMitraStar Technology Corp.\n84:AC:A4\tBeijingN\tBeijing Novel Super Digital TV Technology Co., Ltd\n84:AC:FB\tCrouzetA\tCrouzet Automatismes\n84:AD:58\tHuaweiTe\tHuawei Technologies Co.,Ltd\n84:AF:1F\tBeatSyst\tBeat System Service Co,. Ltd.\n84:AF:EC\tBuffalo\tBuffalo.Inc\n84:B1:53\tApple\tApple, Inc.\n84:B2:61\tCisco\tCisco Systems, Inc\n84:B3:1B\tKinexon\tKinexon GmbH\n84:B5:17\tCisco\tCisco Systems, Inc\n84:B5:41\tSamsungE\tSamsung Electronics Co.,Ltd\n84:B5:9C\tJuniperN\tJuniper Networks\n84:B8:02\tCisco\tCisco Systems, Inc\n84:BA:3B\tCanon\tCanon Inc.\n84:BE:52\tHuaweiTe\tHuawei Technologies Co.,Ltd\n84:C0:EF\tSamsungE\tSamsung Electronics Co.,Ltd\n84:C1:C1\tJuniperN\tJuniper Networks\n84:C2:E4\tJiangsuQ\tJiangsu Qinheng Co., Ltd.\n84:C3:E8\tVaillant\tVaillant GmbH\n84:C7:27\tGnodal\tGnodal Ltd\n84:C7:A9\tC3poSA\tC3PO S.A.\n84:C7:EA\tSonyMobi\tSony Mobile Communications Inc\n84:C8:B1\tIncognit\tIncognito Software Systems Inc.\n84:C9:B2\tD-LinkIn\tD-Link International\n84:C9:C6\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\n84:CD:62\tShenzhen\tShenZhen IDWELL Technology CO.,Ltd\n84:CF:BF\tFairphon\tFairphone\n84:D3:2A\tIeee1905\tIEEE 1905.1\n84:D4:7E\tArubaNet\tAruba Networks\n84:D4:C8\tWidex\tWidex A/S\n84:D6:D0\tAmazonTe\tAmazon Technologies Inc.\n84:D9:31\tHangzhou\tHangzhou H3C Technologies Co., Limited\n84:D9:C8\tUnipatte\tUnipattern Co.,\n84:DB:2F\tSierraWi\tSierra Wireless Inc\n84:DB:9E\tAifloo\tAifloo AB\n84:DB:AC\tHuaweiTe\tHuawei Technologies Co.,Ltd\n84:DB:FC\tNokia\t\n84:DD:20\tTexasIns\tTexas Instruments\n84:DD:B7\tCilagInt\tCilag GmbH International\n84:DE:3D\tCrystalV\tCrystal Vision Ltd\n84:DF:0C\tNet2grid\tNET2GRID BV\n84:DF:19\tChuangoS\tChuango Security Technology Corporation\n84:E0:58\tArrisGro\tARRIS Group, Inc.\n84:E0:F4\tIeeeRegi\tIEEE Registration Authority\n84:E0:F4:00:00:00/28\tShenzhen\tShenZhen Panrich Technology Limited\n84:E0:F4:10:00:00/28\tMedicust\tMedicusTek Inc.\n84:E0:F4:20:00:00/28\tHangzhou\tHangzhou Uni-Ubi Co.,Ltd.\n84:E0:F4:30:00:00/28\tAslInter\tASL Intercom B.V.\n84:E0:F4:40:00:00/28\tPetroint\tPetroInTrade\n84:E0:F4:50:00:00/28\tHangzhou\tHangzhou Nationalchip Science & Technology Co.,Ltd.\n84:E0:F4:60:00:00/28\tLiaoning\tLiaoning IK'SONYA Science and Technology Co., Ltd.\n84:E0:F4:70:00:00/28\tDantherm\t\n84:E0:F4:80:00:00/28\tRay\tRAY Co.,LTD\n84:E0:F4:90:00:00/28\tShenzhen\tShenzhen Hcn.Electronics Co.,Ltd.\n84:E0:F4:A0:00:00/28\tIsolutio\tiSolution Technologies Co.,Ltd.\n84:E0:F4:B0:00:00/28\tOrchardE\tOrchard Electronics Co., Ltd.\n84:E0:F4:C0:00:00/28\tAimtron\tAimtron Corporation\n84:E0:F4:D0:00:00/28\tLogos01S\tLogos01 Srl\n84:E0:F4:E0:00:00/28\tScale-Te\tScale-Tec Ltd.\n84:E3:23\tGreenWav\tGreen Wave Telecommunication SDN BHD\n84:E3:27\tTailynTe\tTailyn Technologies Inc\n84:E4:D9\tShenzhen\tShenzhen NEED technology Ltd.\n84:E5:D8\tGuangdon\tGuangdong UNIPOE IoT Technology Co.,Ltd.\n84:E6:29\tBluwanSa\tBluwan SA\n84:E7:14\tLiangHer\tLiang Herng Enterprise,Co.Ltd.\n84:EA:99\tVieworks\t\n84:EB:18\tTexasIns\tTexas Instruments\n84:ED:33\tBbmc\tBBMC Co.,Ltd\n84:EF:18\tIntelCor\tIntel Corporate\n84:F1:29\tMetrasca\tMetrascale Inc.\n84:F3:EB\tEspressi\tEspressif Inc.\n84:F4:93\tOmsSpolS\tOMS spol. s.r.o.\n84:F6:4C\tCrossPoi\tCross Point BV\n84:F6:FA\tMiovisio\tMiovision Technologies Incorporated\n84:FC:AC\tApple\tApple, Inc.\n84:FC:FE\tApple\tApple, Inc.\n84:FE:9E\tRtcIndus\tRTC Industries, Inc.\n84:FE:DC\tBorqsBei\tBorqs Beijing Ltd.\n88:01:18\tBlt\tBLT Co\n88:01:F2\tVitecSys\tVitec System Engineering Inc.\n88:03:55\tArcadyan\tArcadyan Technology Corporation\n88:07:4B\tLgElectr\tLG Electronics (Mobile Communications)\n88:09:05\tMtmcommu\tMTMCommunications\n88:09:07\tMktSyste\tMKT Systemtechnik GmbH & Co. KG\n88:09:AF\tMasimo\tMasimo Corporation\n88:0F:10\tHuamiInf\tHuami Information Technology Co.,Ltd.\n88:0F:B6\tJabilCir\tJabil Circuits India Pvt Ltd,-EHTP unit\n88:10:36\tPanodicS\tPanodic(ShenZhen) Electronics Limted\n88:10:8F\tHuaweiTe\tHuawei Technologies Co.,Ltd\n88:11:96\tHuaweiTe\tHuawei Technologies Co.,Ltd\n88:12:4E\tQualcomm\tQualcomm Inc.\n88:14:2B\tProtonic\tProtonic Holland\n88:15:44\tCiscoMer\tCisco Meraki\n88:17:A3\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n88:18:AE\tTamron\tTamron Co., Ltd\n88:19:08\tApple\tApple, Inc.\n88:1B:99\tShenzhen\tShenzhen Xin Fei Jia Electronic Co. Ltd.\n88:1D:FC\tCisco\tCisco Systems, Inc\n88:1F:A1\tApple\tApple, Inc.\n88:20:12\tLmiTechn\tLMI Technologies\n88:21:E3\tNebusens\tNebusens, S.L.\n88:23:64\tWatchnet\tWatchnet DVR Inc\n88:23:FE\tTttechCo\tTTTech Computertechnik AG\n88:25:2C\tArcadyan\tArcadyan Technology Corporation\n88:25:93\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n88:28:B3\tHuaweiTe\tHuawei Technologies Co.,Ltd\n88:29:50\tNetmoonT\tNetmoon Technology Co., Ltd\n88:2B:D7\tAddénerg\tADDÉNERGIE  TECHNOLOGIES\n88:2D:53\tBaiduOnl\tBaidu Online Network Technology (Beijing) Co., Ltd.\n88:2E:5A\tStorone\t\n88:30:8A\tMurataMa\tMurata Manufacturing Co., Ltd.\n88:32:9B\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\n88:33:14\tTexasIns\tTexas Instruments\n88:33:BE\tIvenix\tIvenix, Inc.\n88:34:FE\tBoschAut\tBosch Automotive Products (Suzhou) Co. Ltd\n88:35:4C\tTransics\t\n88:35:C1\tOiElectr\tOi Electric Co.,Ltd\n88:36:12\tSrcCompu\tSRC Computers, LLC\n88:36:5F\tLgElectr\tLG Electronics (Mobile Communications)\n88:36:6C\tEfmNetwo\tEFM Networks\n88:3B:8B\tCheering\tCheering Connection Co. Ltd.\n88:3C:1C\tMercury\tMercury Corporation\n88:3D:24\tGoogle\tGoogle, Inc.\n88:3F:4A\tTexasIns\tTexas Instruments\n88:3F:99\tSiemens\tSiemens AG\n88:3F:D3\tHuaweiTe\tHuawei Technologies Co.,Ltd\n88:41:57\tShenzhen\tShenzhen Atsmart Technology Co.,Ltd.\n88:41:C1\tOrbisatD\tOrbisat Da Amazonia Ind E Aerol Sa\n88:41:FC\tAirtiesW\tAirTies Wireless Networks\n88:43:E1\tCisco\tCisco Systems, Inc\n88:44:77\tHuaweiTe\tHuawei Technologies Co.,Ltd\n88:44:F6\tNokia\tNokia Corporation\n88:46:2A\tTelechip\tTelechips Inc.\n88:4A:EA\tTexasIns\tTexas Instruments\n88:4B:39\tSiemensH\tSiemens AG, Healthcare Sector\n88:4C:CF\tPulzze\tPulzze Systems, Inc\n88:50:DD\tInfiniba\tInfiniband Trade Association\n88:51:FB\tHewlettP\tHewlett Packard\n88:53:2E\tIntelCor\tIntel Corporate\n88:53:95\tApple\tApple, Inc.\n88:53:D4\tHuaweiTe\tHuawei Technologies Co.,Ltd\n88:57:6D\tXtaElect\tXTA Electronics Ltd\n88:57:EE\tBuffalo\tBuffalo.Inc\n88:5A:92\tCisco\tCisco Systems, Inc\n88:5B:DD\tAerohive\tAerohive Networks Inc.\n88:5C:47\tAlcatelL\tAlcatel Lucent\n88:5D:90\tIeeeRegi\tIEEE Registration Authority\n88:5D:90:00:00:00/28\tFoshanHu\tFoshan Huaguo Optical Co.,Ltd\n88:5D:90:10:00:00/28\tShenzhen\tShenZhen Yuyangsheng technology company LTD\n88:5D:90:20:00:00/28\tDaidongI\tDAIDONG Industrial System Co., Ltd.\n88:5D:90:30:00:00/28\tCpac\tCPAC Systems\n88:5D:90:40:00:00/28\tWuhanStr\tWuhan Strong Electronics Co., Ltd\n88:5D:90:50:00:00/28\tShenzhen\tShenzhen JingHanDa Electronics Co.Ltd\n88:5D:90:60:00:00/28\tHi-Profi\tHi-Profile Achievement (M) Sdn Bhd\n88:5D:90:70:00:00/28\tSchmidtH\tSchmidt & Co.,(H.K.)Ltd.\n88:5D:90:80:00:00/28\tCreative\tCreative Sensor Inc.\n88:5D:90:90:00:00/28\tGigatech\tGigatech R&D Corp.\n88:5D:90:A0:00:00/28\tShenzhen\tShenzhen Speedrun Technologies Co.,Ltd.\n88:5D:90:B0:00:00/28\tPremierM\tPremier Merchandises Limited\n88:5D:90:C0:00:00/28\tIroom\tiRoom GmbH\n88:5D:90:D0:00:00/28\tHexaglob\tHexaglobe\n88:5D:90:E0:00:00/28\tUnitacTe\tUnitac Technology Limited\n88:5D:90:F0:00:00/28\tPrivate\t\n88:5D:FB\tZte\tzte corporation\n88:5F:E8\tIeeeRegi\tIEEE Registration Authority\n88:5F:E8:00:00:00/28\tJunghein\tJungheinrich Norderstedt AG & Co. KG\n88:5F:E8:10:00:00/28\tApoideaT\tApoidea Technology Co., Ltd.\n88:5F:E8:20:00:00/28\tOptoEngi\tOpto Engineering\n88:5F:E8:30:00:00/28\tSonnetLa\tSonnet Labs Inc.\n88:5F:E8:40:00:00/28\tBeijingL\tBeijing laiwei Technology  Co.,Ltd\n88:5F:E8:50:00:00/28\tHauchBac\tHauch & Bach ApS\n88:5F:E8:60:00:00/28\tShenzhen\tShenzhen Xin Kingbrand Enterprises Co.,Ltd\n88:5F:E8:70:00:00/28\tRedTechn\tRed Technologies, LLC.\n88:5F:E8:80:00:00/28\tChangsha\tChangsha Xiangji-Haidun Technology Co., Ltd\n88:5F:E8:90:00:00/28\tSowee\t\n88:5F:E8:A0:00:00/28\tLisleDes\tLisle Design Ltd\n88:5F:E8:B0:00:00/28\tShenzhen\tShenzhen ORVIBO Technology Co., Ltd\n88:5F:E8:C0:00:00/28\tInorProc\tInor Process AB\n88:5F:E8:D0:00:00/28\tZhejiang\tzhejiang yuanwang communication technolgy co.,ltd\n88:5F:E8:E0:00:00/28\tUnicomGl\tUnicom Global, Inc.\n88:61:5A\tSianoMob\tSiano Mobile Silicon Ltd.\n88:63:DF\tApple\tApple, Inc.\n88:66:39\tHuaweiTe\tHuawei Technologies Co.,Ltd\n88:66:A5\tApple\tApple, Inc.\n88:68:5C\tShenzhen\tShenzhen ChuangDao & Perpetual Eternal Technology Co.,Ltd\n88:6A:B1\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n88:6A:E3\tAlphaNet\tAlpha Networks Inc.\n88:6B:0F\tBluegiga\tBluegiga Technologies OY\n88:6B:44\tSunnovoI\tSunnovo International Limited\n88:6B:6E\tApple\tApple, Inc.\n88:6B:76\tChinaHop\tChina Hopeful Group Hopeful Electric Co.,Ltd\n88:70:33\tHangzhou\tHangzhou Silan Microelectronic Inc\n88:70:8C\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\n88:70:EF\tScProfes\tSC Professional Trading Co., Ltd.\n88:71:E5\tAmazonTe\tAmazon Technologies Inc.\n88:73:84\tToshiba\t\n88:73:98\tK2eTekpo\tK2E Tekpoint\n88:75:56\tCisco\tCisco Systems, Inc\n88:75:98\tSamsungE\tSamsung Electronics Co.,Ltd\n88:78:73\tIntelCor\tIntel Corporate\n88:78:9C\tGameTech\tGame Technologies SA\n88:79:5B\tKonkaGro\tKonka Group Co., Ltd.\n88:79:7E\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n88:7A:31\tVelankan\tVelankani Electronics Pvt. Ltd.\n88:7F:03\tComperTe\tComper Technology Investment Limited\n88:82:79\tShenzhen\tShenzhen RB-LINK Intelligent Technology Co.Ltd\n88:83:22\tSamsungE\tSamsung Electronics Co.,Ltd\n88:83:5D\tFn-LinkT\tFN-LINK TECHNOLOGY LIMITED\n88:86:03\tHuaweiTe\tHuawei Technologies Co.,Ltd\n88:86:A0\tSimtonTe\tSimton Technologies, Ltd.\n88:86:C2\tStabiloI\tSTABILO International GmbH\n88:87:17\tCanon\tCanon Inc.\n88:87:DD\tDarbeevi\tDarbeeVision Inc.\n88:89:14\tAllCompo\tAll Components Incorporated\n88:89:64\tGsiElect\tGSI Electronics Inc.\n88:8B:5D\tStorageA\tStorage Appliance Corporation\n88:8C:19\tBradyAsi\tBrady Corp Asia Pacific Ltd\n88:90:8D\tCisco\tCisco Systems, Inc\n88:91:66\tViewcoop\tViewcooper Corp.\n88:91:DD\tRacktivi\tRacktivity\n88:94:71\tBrocadeC\tBrocade Communications Systems, Inc.\n88:94:7E\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n88:94:F9\tGemicomT\tGemicom Technology, Inc.\n88:95:B9\tUnifiedP\tUnified Packet Systems Crop\n88:96:4E\tArrisGro\tARRIS Group, Inc.\n88:96:76\tTtcMarco\tTTC MARCONI s.r.o.\n88:96:B6\tGlobalFi\tGlobal Fire Equipment S.A.\n88:96:F2\tValeoSch\tValeo Schalter und Sensoren GmbH\n88:97:65\tExands\t\n88:97:DF\tEntrypas\tEntrypass Corporation Sdn. Bhd.\n88:98:21\tTeraon\t\n88:9B:39\tSamsungE\tSamsung Electronics Co.,Ltd\n88:9C:A6\tBtbKorea\tBTB Korea INC\n88:9F:6F\tSamsungE\tSamsung Electronics Co.,Ltd\n88:9F:FA\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n88:A0:84\tFormatio\tFormation Data Systems\n88:A2:5E\tJuniperN\tJuniper Networks\n88:A2:D7\tHuaweiTe\tHuawei Technologies Co.,Ltd\n88:A3:CC\tAmatisCo\tAmatis Controls\n88:A5:BD\tQpcom\tQpcom Inc.\n88:A6:C6\tSagemcom\tSagemcom Broadband SAS\n88:A7:3C\tRagentek\tRagentek Technology Group\n88:A9:A7\tIeeeRegi\tIEEE Registration Authority\n88:A9:A7:00:00:00/28\tShenzhen\tShenzhenshi kechuangzhixian technology Co.LTD\n88:A9:A7:10:00:00/28\tSolaredg\tSolaredge LTD.\n88:A9:A7:20:00:00/28\tHoneywel\tHoneywell spol. s.r.o. HTS CZ o.z.\n88:A9:A7:30:00:00/28\tMikroele\tMikroelektronika\n88:A9:A7:40:00:00/28\tThomasDa\tThomas & Darden, Inc\n88:A9:A7:50:00:00/28\tVolterma\tVolterman Inc.\n88:A9:A7:60:00:00/28\tSieperLü\tSieper Lüdenscheid GmbH & Co. KG\n88:A9:A7:70:00:00/28\tKimuraGi\tkimura giken corporation\n88:A9:A7:80:00:00/28\tPsbIntra\tpsb intralogistics GmbH\n88:A9:A7:90:00:00/28\tFlashfor\tFlashForge Corporation\n88:A9:A7:A0:00:00/28\tZhejiang\tZhejiang Haoteng Electronic Technology Co.,Ltd.\n88:A9:A7:B0:00:00/28\tTwk-Elek\tTWK-ELEKTRONIK\n88:A9:A7:C0:00:00/28\tAndrovid\tAndroVideo Inc.\n88:A9:A7:D0:00:00/28\tAvlinkIn\tAvlink Industrial Co., Ltd\n88:A9:A7:E0:00:00/28\tImpactDi\tImpact Distribution\n88:AC:C1\tGenerito\tGeneriton Co., Ltd.\n88:AD:43\tPegatron\tPegatron Corporation\n88:AD:D2\tSamsungE\tSamsung Electronics Co.,Ltd\n88:AE:07\tApple\tApple, Inc.\n88:AE:1D\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\n88:B1:11\tIntelCor\tIntel Corporate\n88:B1:68\tDeltaCon\tDelta Control GmbH\n88:B1:E1\tMojoNetw\tMojo Networks, Inc.\n88:B3:62\tNokiaSha\tNokia Shanghai Bell Co. Ltd.）\n88:B4:A6\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n88:B6:27\tGembirdE\tGembird Europe BV\n88:B6:6B\tEasynetw\teasynetworks\n88:B6:EE\tDishTech\tDish Technologies Corp\n88:B8:D0\tDongguan\tDongguan Koppo Electronic Co.,Ltd\n88:BA:7F\tQfiednet\tQfiednet Co., Ltd.\n88:BD:45\tSamsungE\tSamsung Electronics Co.,Ltd\n88:BD:78\tFlaircom\tFlaircomm Microelectronics,Inc.\n88:BF:D5\tSimpleAu\tSimple Audio Ltd\n88:BF:E4\tHuaweiTe\tHuawei Technologies Co.,Ltd\n88:C2:42\tPoynt\tPoynt Co.\n88:C2:55\tTexasIns\tTexas Instruments\n88:C3:6E\tBeijingE\tBeijing Ereneben lnformation Technology Limited\n88:C3:B3\tSovico\t\n88:C6:26\tLogitech\tLogitech, Inc\n88:C6:63\tApple\tApple, Inc.\n88:C9:D0\tLgElectr\tLG Electronics (Mobile Communications)\n88:CB:87\tApple\tApple, Inc.\n88:CB:A5\tSuzhouTo\tSuzhou Torchstar Intelligent Technology Co.,Ltd\n88:CC:45\tSkyworth\tSkyworth Digital Technology(Shenzhen) Co.,Ltd\n88:CE:FA\tHuaweiTe\tHuawei Technologies Co.,Ltd\n88:CF:98\tHuaweiTe\tHuawei Technologies Co.,Ltd\n88:D0:39\tTclTechn\tTCL Technoly Electronics(Huizhou).,Ltd\n88:D1:71\tBeghelli\tBeghelli S.P.A\n88:D2:74\tZte\tzte corporation\n88:D2:BF\tGermanAu\tGerman Autolabs\n88:D3:7B\tFirmtekL\tFirmTek, LLC\n88:D5:0C\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n88:D6:52\tAmergint\tAMERGINT Technologies\n88:D7:BC\tDep\tDEP Company\n88:D7:F6\tAsustekC\tASUSTek COMPUTER INC.\n88:D9:62\tCanopusU\tCanopus Systems US LLC\n88:DA:1A\tRedpineS\tRedpine Signals, Inc.\n88:DC:96\tSenaoNet\tSENAO Networks, Inc.\n88:DD:79\tVoltaire\t\n88:DE:7C\tAskeyCom\tAskey Computer Corp.\n88:DE:A9\tRoku\tRoku, Inc.\n88:DF:9E\tNewH3cTe\tNew H3C Technologies Co., Ltd\n88:E0:A0\tShenzhen\tShenzhen VisionSTOR Technologies Co., Ltd\n88:E0:F3\tJuniperN\tJuniper Networks\n88:E1:61\tArtBeiji\tArt Beijing Science and Technology Development Co., Ltd.\n88:E3:AB\tHuaweiTe\tHuawei Technologies Co.,Ltd\n88:E6:03\tAvotek\tAvotek corporation\n88:E6:28\tShenzhen\tShenzhen Kezhonglong Optoelectronic Technology Co.,Ltd\n88:E7:12\tWhirlpoo\tWhirlpool Corporation\n88:E7:A6\tIknowled\tiKnowledge Integration Corp.\n88:E8:7F\tApple\tApple, Inc.\n88:E8:F8\tYongTaiE\tYONG TAI ELECTRONIC (DONGGUAN) LTD.\n88:E9:0F\tInnomdle\tinnomdlelab\n88:E9:17\tTamaggo\t\n88:E9:FE\tApple\tApple, Inc.\n88:ED:1C\tCudoComm\tCudo Communication Co., Ltd.\n88:F0:31\tCisco\tCisco Systems, Inc\n88:F0:77\tCisco\tCisco Systems, Inc\n88:F4:88\tCellonCo\tcellon communications technology(shenzhen)Co.,Ltd.\n88:F4:90\tJetmobil\tJetmobile Pte Ltd\n88:F7:BF\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n88:F7:C7\tTechnico\tTechnicolor CH USA Inc.\n88:FD:15\tLineeye\tLineeye Co., Ltd\n88:FE:D6\tShanghai\tShangHai WangYong Software Co., Ltd.\n8A:00:B0\tEoptolin\tEoptolink Technology Inc. Ltd,\n8A:34:BC\tFiberwor\tFiberworks AS\n8A:A5:C1\tRanovusU\tRanovus USA\n8A:B3:DA\tHomeplug\tHomePlug Powerline Alliance, Inc.\n8A:C7:2E\tRoku\tRoku, Inc.\n8A:CB:A4\tResideo\t\n8A:DA:26\tEleven\tEleven Inc.\n8C:00:6D\tApple\tApple, Inc.\n8C:04:FF\tTechnico\tTechnicolor CH USA Inc.\n8C:05:51\tKoubachi\tKoubachi AG\n8C:07:8C\tFlowData\tFlow Data Inc\n8C:08:8B\tRemoteSo\tRemote Solution\n8C:09:F4\tArrisGro\tARRIS Group, Inc.\n8C:0C:90\tRuckusWi\tRuckus Wireless\n8C:0C:A3\tAmper\t\n8C:0D:76\tHuaweiTe\tHuawei Technologies Co.,Ltd\n8C:0E:E3\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n8C:0F:6F\tPegatron\tPegatron Corporation\n8C:0F:83\tAngieHos\tAngie Hospitality LLC\n8C:10:D4\tSagemcom\tSagemcom Broadband SAS\n8C:11:CB\tAbusSecu\tABUS Security-Center GmbH & Co. KG\n8C:14:7D\tIeeeRegi\tIEEE Registration Authority\n8C:14:7D:00:00:00/28\tNio\t\n8C:14:7D:10:00:00/28\tPrivate\t\n8C:14:7D:20:00:00/28\tAgilentS\tAgilent S.p.A\n8C:14:7D:30:00:00/28\tRemotecT\tRemotec Technology Limited\n8C:14:7D:40:00:00/28\tNanjingB\tNanjing bilian information Technology Co.,Ltd.\n8C:14:7D:50:00:00/28\tUnwiredN\tUnwired Networks\n8C:14:7D:60:00:00/28\tShenzhen\tShenzhen Meidou Technology Co, Ltd.\n8C:14:7D:70:00:00/28\tUrbanhel\tUrbanHello\n8C:14:7D:80:00:00/28\tV2SPA\tV2 S.p.A.\n8C:14:7D:90:00:00/28\tAnywareS\tAnyware Solutions ApS\n8C:14:7D:A0:00:00/28\tBluemega\tBluemega Document & Print Services\n8C:14:7D:B0:00:00/28\tBauschDa\tBausch Datacom NV/SA\n8C:14:7D:C0:00:00/28\tReynaers\tReynaers Aluminium\n8C:14:7D:D0:00:00/28\tShenzhen\tShenzhen  Lanxus  technology Co. Ltd.\n8C:14:7D:E0:00:00/28\tElectric\tElectrical & Automation Larsen & Toubro Limited\n8C:14:B4\tZte\tzte corporation\n8C:15:C7\tHuaweiTe\tHuawei Technologies Co.,Ltd\n8C:16:45\tLcfcHefe\tLCFC(HeFei) Electronics Technology co., ltd\n8C:18:D9\tShenzhen\tShenzhen RF Technology Co., Ltd\n8C:19:2D\tIeeeRegi\tIEEE Registration Authority\n8C:19:2D:00:00:00/28\tNoritsuP\tNoritsu Precision Co., Ltd.\n8C:19:2D:10:00:00/28\tShenzhen\tShenzhen Huanuo Internet Technology Co.,Ltd\n8C:19:2D:20:00:00/28\tDataremo\tDataRemote Inc.\n8C:19:2D:30:00:00/28\tGreenfie\tGreenfield Technology\n8C:19:2D:40:00:00/28\tCharmlin\tCharmlink Tech(HK) Co.,Limited\n8C:19:2D:50:00:00/28\tElcoTian\tELCO(TIANJIN)ELECTRONICS CO.,LTD.\n8C:19:2D:60:00:00/28\tSmarthom\tsmartHome Partner GmbH\n8C:19:2D:70:00:00/28\tSrett\t\n8C:19:2D:80:00:00/28\tShenzhen\tShenzhen Cylan Technology Co.,Ltd\n8C:19:2D:90:00:00/28\tViawear\tViaWear, Inc.\n8C:19:2D:A0:00:00/28\tTelealar\tTeleAlarm SA\n8C:19:2D:B0:00:00/28\tAbsideNe\tAbside Networks, Inc.\n8C:19:2D:C0:00:00/28\tYouZheng\tYou Zhengcheng co.,ltd\n8C:19:2D:D0:00:00/28\tPyrasTec\tPyras Technology Inc.\n8C:19:2D:E0:00:00/28\tElcon\tElcon AB\n8C:1A:BF\tSamsungE\tSamsung Electronics Co.,Ltd\n8C:1C:DA\tIeeeRegi\tIEEE Registration Authority\n8C:1C:DA:00:00:00/28\tCeosPty\tCEOS Pty Ltd\n8C:1C:DA:10:00:00/28\tGesas\tGESAS GmbH\n8C:1C:DA:20:00:00/28\tGeomc\t\n8C:1C:DA:30:00:00/28\tStructur\tStructura Technology & Innovation\n8C:1C:DA:40:00:00/28\tAnntec（B\tAnntec （Beijing） Technology Co.,Ltd.\n8C:1C:DA:50:00:00/28\tSeptentr\tSeptentrio NV\n8C:1C:DA:60:00:00/28\tLocolabs\tLocoLabs LLC\n8C:1C:DA:70:00:00/28\tKTechnol\tK Technology Corporation\n8C:1C:DA:80:00:00/28\tAtolLlc\tAtol Llc\n8C:1C:DA:90:00:00/28\tRaychemR\tRaychem RPG PVT. LTD.\n8C:1C:DA:A0:00:00/28\tChinaPot\tChina Potevio Co., Ltd\n8C:1C:DA:B0:00:00/28\tT+AElekt\tT+A elektroakustik GmbH & Co.KG\n8C:1C:DA:C0:00:00/28\tAlcidae\tAlcidae Inc\n8C:1C:DA:D0:00:00/28\tRieglLas\tRiegl Laser Measurement Systems GmbH\n8C:1C:DA:E0:00:00/28\tElectron\tElectronic Controlled Systems, Inc.\n8C:1F:94\tRfSurgic\tRF Surgical System Inc.\n8C:21:0A\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n8C:25:05\tHuaweiTe\tHuawei Technologies Co.,Ltd\n8C:27:1D\tQuanthou\tQuantHouse\n8C:27:8A\tVocollec\tVocollect Inc\n8C:29:37\tApple\tApple, Inc.\n8C:2D:AA\tApple\tApple, Inc.\n8C:2F:39\tIbaDosim\tIBA Dosimetry GmbH\n8C:2F:A6\tSolidOpt\tSolid Optics B.V.\n8C:33:30\tEmfirst\tEmFirst Co., Ltd.\n8C:33:57\tHitevisi\tHiteVision Digital Media Technology Co.,Ltd.\n8C:34:FD\tHuaweiTe\tHuawei Technologies Co.,Ltd\n8C:35:79\tQdiqoSpZ\tQDIQO Sp. z o.o.\n8C:39:5C\tBit4idSr\tBit4id Srl\n8C:3A:E3\tLgElectr\tLG Electronics (Mobile Communications)\n8C:3B:AD\tNetgear\t\n8C:3C:07\tSkivaTec\tSkiva Technologies, Inc.\n8C:3C:4A\tNakayo\tNAKAYO Inc\n8C:41:F2\tRdaTechn\tRDA Technologies Ltd.\n8C:41:F4\tIpmotion\tIPmotion GmbH\n8C:44:35\tShanghai\tShanghai BroadMobi Communication Technology Co., Ltd.\n8C:45:00\tMurataMa\tMurata Manufacturing Co., Ltd.\n8C:4A:EE\tGigaTms\tGiga Tms Inc\n8C:4B:59\t3dImagin\t3D Imaging & Simulations Corp\n8C:4C:AD\tEvoluzn\tEvoluzn Inc.\n8C:4C:DC\tPlanexCo\tPlanex Communications Inc.\n8C:4D:B9\tUnmonday\tUnmonday Ltd\n8C:4D:EA\tCerio\tCerio Corporation\n8C:51:05\tShenzhen\tShenzhen ireadygo Information Technology CO.,LTD.\n8C:53:F7\tA&DEngin\tA&D ENGINEERING CO., LTD.\n8C:54:1D\tLge\t\n8C:56:9D\tImagingS\tImaging Solutions Group\n8C:56:C5\tNintendo\tNintendo Co., Ltd.\n8C:57:9B\tWistronN\tWistron Neweb Corporation\n8C:57:FD\tLvxWeste\tLVX Western\n8C:58:77\tApple\tApple, Inc.\n8C:59:73\tZyxelCom\tZyxel Communications Corporation\n8C:59:8B\tCTechnol\tC Technologies AB\n8C:59:C3\tAdbItali\tADB Italia\n8C:5A:F0\tExeltech\tExeltech Solar Products\n8C:5B:F0\tArrisGro\tARRIS Group, Inc.\n8C:5C:A1\tD-Broad\td-broad,INC\n8C:5D:60\tUci\tUCI Corporation Co.,Ltd.\n8C:5F:48\tContinen\tContinental Intelligent Transportation Systems LLC\n8C:5F:DF\tBeijingR\tBeijing Railway Signal Factory\n8C:60:4F\tCisco\tCisco Systems, Inc\n8C:60:E7\tMpgio\tMpgio Co.,Ltd\n8C:61:02\tBeijingB\tBeijing Baofengmojing Technologies Co., Ltd\n8C:61:A3\tArrisGro\tARRIS Group, Inc.\n8C:64:0B\tBeyondDe\tBeyond Devices d.o.o.\n8C:64:22\tSonyMobi\tSony Mobile Communications Inc\n8C:68:78\tNortek-A\tNortek-AS\n8C:6A:E4\tViogem\tViogem Limited\n8C:6D:50\tShenzhen\tShenzhen Mtc Co Ltd\n8C:6D:77\tHuaweiTe\tHuawei Technologies Co.,Ltd\n8C:70:5A\tIntelCor\tIntel Corporate\n8C:71:F8\tSamsungE\tSamsung Electronics Co.,Ltd\n8C:73:6E\tFujitsu\tFujitsu Limited\n8C:76:C1\tGodenTec\tGoden Tech Limited\n8C:77:12\tSamsungE\tSamsung Electronics Co.,Ltd\n8C:77:16\tLongchee\tLongcheer Telecommunication Limited\n8C:78:D7\tShenzhen\tShenzhen Fast Technologies Co.,Ltd\n8C:79:67\tZte\tzte corporation\n8C:7B:9D\tApple\tApple, Inc.\n8C:7C:92\tApple\tApple, Inc.\n8C:7C:B5\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n8C:7C:FF\tBrocadeC\tBrocade Communications Systems, Inc.\n8C:7E:B3\tLytro\tLytro, Inc.\n8C:7F:3B\tArrisGro\tARRIS Group, Inc.\n8C:81:26\tArcom\t\n8C:82:A8\tInsigmaT\tInsigma Technology Co.,Ltd\n8C:83:9D\tShenzhen\tShenzhen Xinyupeng Electronic Technology Co., Ltd\n8C:83:E1\tSamsungE\tSamsung Electronics Co.,Ltd\n8C:84:01\tPrivate\t\n8C:85:80\tSmartInn\tSmart Innovation LLC\n8C:85:90\tApple\tApple, Inc.\n8C:85:E6\tCleondri\tCleondris GmbH\n8C:87:3B\tLeicaCam\tLeica Camera AG\n8C:89:7A\tAugtek\t\n8C:89:A5\tMicro-St\tMicro-Star INT'L CO., LTD\n8C:8A:6E\tEstunAut\tEstun Automation Technoloy Co., Ltd\n8C:8A:BB\tBeijingO\tBeijing Orient View Technology Co., Ltd.\n8C:8B:83\tTexasIns\tTexas Instruments\n8C:8E:76\tTaskit\ttaskit GmbH\n8C:8E:F2\tApple\tApple, Inc.\n8C:8F:8B\tChinaMob\tChina Mobile Chongqing branch\n8C:8F:E9\tApple\tApple, Inc.\n8C:90:D3\tNokia\t\n8C:91:09\tToyoshim\tToyoshima Electric Technoeogy(Suzhou) Co.,Ltd.\n8C:92:36\tAusLinxT\tAus.Linx Technology Co., Ltd.\n8C:92:46\tOerlikon\tOerlikon Textile Gmbh&Co.KG\n8C:93:51\tJigowatt\tJigowatts Inc.\n8C:94:CF\tEncellTe\tEncell Technology, Inc.\n8C:99:E6\tTctMobil\tTCT mobile ltd\n8C:9F:3B\tQingdaoH\tQingdao Hisense Communications Co.,Ltd.\n8C:A0:48\tBeijingN\tBeijing NeTopChip Technology Co.,LTD\n8C:A2:FD\tStarry\tStarry, Inc.\n8C:A5:A1\tOregano-\tOregano Systems - Design & Consulting GmbH\n8C:A6:DF\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n8C:A9:82\tIntelCor\tIntel Corporate\n8C:AB:8E\tShanghai\tShanghai Feixun Communication Co.,Ltd.\n8C:AE:4C\tPlugable\tPlugable Technologies\n8C:AE:89\tY-CamSol\tY-cam Solutions Ltd\n8C:B0:94\tAirtechI\tAirtech I&C Co., Ltd\n8C:B0:E9\tSamsungE\tSamsung Electronics.,LTD\n8C:B6:4F\tCisco\tCisco Systems, Inc\n8C:B7:F7\tShenzhen\tShenzhen UniStrong Science & Technology Co., Ltd\n8C:B8:2C\tIpitomyC\tIPitomy Communications\n8C:B8:64\tAcsipTec\tAcSiP Technology Corp.\n8C:BE:BE\tXiaomiCo\tXiaomi Communications Co Ltd\n8C:BF:9D\tShanghai\tShanghai Xinyou Information Technology Ltd. Co.\n8C:BF:A6\tSamsungE\tSamsung Electronics Co.,Ltd\n8C:C1:21\tPanasoni\tPanasonic Corporation AVC Networks Company\n8C:C5:E1\tShenzhen\tShenZhen Konka Telecommunication Technology Co.,Ltd\n8C:C6:61\tCurrentP\tCurrent, powered by GE\n8C:C7:AA\tRadinetC\tRadinet Communications Inc.\n8C:C7:D0\tZhejiang\tzhejiang ebang communication co.,ltd\n8C:C8:CD\tSamsungE\tSamsung Electronics Co.,Ltd\n8C:C8:F4\tIeeeRegi\tIEEE Registration Authority\n8C:C8:F4:00:00:00/28\tGuardtec\tGuardtec,Inc\n8C:C8:F4:10:00:00/28\tLanhomex\tLanhomex Technology(Shen Zhen)Co.,Ltd.\n8C:C8:F4:20:00:00/28\tDarkHors\tDark Horse Connect LLC\n8C:C8:F4:30:00:00/28\tTohoDenk\tToho Denki Ind.Co.,Ltd\n8C:C8:F4:40:00:00/28\tItechEle\tITECH Electronic Co.,ltd.\n8C:C8:F4:50:00:00/28\tBeijingK\tBeijing KXWELL Technology CO., LTD\n8C:C8:F4:60:00:00/28\tShenzhen\tSHENZHEN D-light Technolgy Limited\n8C:C8:F4:70:00:00/28\tPrivate\t\n8C:C8:F4:80:00:00/28\tStrongby\tStrongbyte Solutions Limited\n8C:C8:F4:90:00:00/28\tSwiftNav\tSwift Navigation Inc\n8C:C8:F4:A0:00:00/28\tTriluxGr\tTrilux Group Management GmbH\n8C:C8:F4:B0:00:00/28\tPtype\tPTYPE Co., LTD.\n8C:C8:F4:C0:00:00/28\tShenzhen\tShenzhen KSTAR Science and Technology Co., Ltd\n8C:C8:F4:D0:00:00/28\tBeijingX\tBeijing Xinxunxintong Eletronics Co.,Ltd\n8C:C8:F4:E0:00:00/28\tEvaporco\tEvaporcool Solutions\n8C:CD:A2\tActp\tACTP, Inc.\n8C:CD:E8\tNintendo\tNintendo Co., Ltd.\n8C:CF:09\tDellEmc\tDell EMC\n8C:CF:5C\tBefega\tBEFEGA GmbH\n8C:D1:7B\tCgMobile\tCG Mobile\n8C:D2:E9\tYokoteSe\tYokote Seiko Co., Ltd.\n8C:D3:A2\tVissimAs\tVisSim AS\n8C:D4:8E\tItelMobi\tItel Mobile Limited\n8C:D6:28\tIkorMete\tIkor Metering\n8C:DB:25\tEsgSolut\tESG Solutions\n8C:DC:D4\tHewlettP\tHewlett Packard\n8C:DD:8D\tWifly-Ci\tWifly-City System Inc.\n8C:DE:52\tIsscTech\tISSC Technologies Corp.\n8C:DE:99\tComlab\tComlab Inc.\n8C:DF:9D\tNec\tNEC Corporation\n8C:E0:81\tZte\tzte corporation\n8C:E1:17\tZte\tzte corporation\n8C:E2:DA\tCircleMe\tCircle Media Inc\n8C:E3:8E\tToshibaM\tToshiba Memory Corporation\n8C:E7:48\tPrivate\t\n8C:E7:8C\tDkNetwor\tDK Networks\n8C:E7:B3\tSonardyn\tSonardyne International Ltd\n8C:EA:1B\tEdgecore\tEdgecore Networks Corporation\n8C:EB:C6\tHuaweiTe\tHuawei Technologies Co.,Ltd\n8C:EC:4B\tDell\tDell Inc.\n8C:EE:C6\tPrecepsc\tPrecepscion Pty. Ltd.\n8C:F2:28\tMercuryC\tMercury Communication Technologies Co.,Ltd.\n8C:F5:A3\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\n8C:F7:10\tAmpakTec\tAMPAK Technology, Inc.\n8C:F7:73\tNokia\t\n8C:F8:13\tOrangePo\tOrange Polska\n8C:F9:45\tPowerAut\tPower Automation pte Ltd\n8C:F9:57\tRuixingh\tRuiXingHengFang Network (Shenzhen) Co.,Ltd\n8C:F9:C9\tMesadaTe\tMESADA Technology Co.,Ltd.\n8C:FA:BA\tApple\tApple, Inc.\n8C:FC:A0\tShenzhen\tShenzhen Smart Device Technology Co., LTD.\n8C:FD:F0\tQualcomm\tQualcomm Inc.\n8C:FE:57\tApple\tApple, Inc.\n8C:FE:74\tRuckusWi\tRuckus Wireless\n8C:FE:B4\tVsoontec\tVsoontech Electronics Co., Limited\n90:00:4E\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n90:00:DB\tSamsungE\tSamsung Electronics Co.,Ltd\n90:01:3B\tSagemcom\tSagemcom Broadband SAS\n90:02:8A\tShenzhen\tShenzhen Shidean Legrand Electronic Products Co.,Ltd\n90:02:A9\tZhejiang\tZhejiang Dahua Technology Co., Ltd.\n90:03:25\tHuaweiTe\tHuawei Technologies Co.,Ltd\n90:03:72\tLongnanJ\tLongnan Junya Digital Technology Co. Ltd.\n90:03:B7\tParrotSa\tParrot Sa\n90:06:28\tSamsungE\tSamsung Electronics Co.,Ltd\n90:09:17\tFar-Sigh\tFar-sighted mobile\n90:0A:1A\tTaicangT\tTaicang T&W Electronics\n90:0A:39\tWiio\tWiio, Inc.\n90:0A:3A\tPsgPlast\tPSG Plastic Service GmbH\n90:0B:C1\tSprocomm\tSprocomm Technologies CO.,Ltd\n90:0C:B4\tAlinketE\tAlinket Electronic Technology Co., Ltd\n90:0D:66\tDigimore\tDigimore Electronics Co., Ltd\n90:0D:CB\tArrisGro\tARRIS Group, Inc.\n90:0E:83\tMonicoMo\tMonico Monitoring, Inc.\n90:0E:B3\tShenzhen\tShenzhen Amediatech Technology Co., Ltd.\n90:17:11\tHagenukM\tHagenuk Marinekommunikation GmbH\n90:17:9B\tNanomega\tNanomegas\n90:17:AC\tHuaweiTe\tHuawei Technologies Co.,Ltd\n90:18:5E\tApexTool\tApex Tool Group GmbH & Co OHG\n90:18:7C\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\n90:18:AE\tShanghai\tShanghai Meridian Technologies, Co. Ltd.\n90:19:00\tScsSa\tScs Sa\n90:1A:CA\tArrisGro\tARRIS Group, Inc.\n90:1B:0E\tFujitsuT\tFujitsu Technology Solutions GmbH\n90:1D:27\tZte\tzte corporation\n90:1E:DD\tGreatCom\tGreat Computer Corporation\n90:20:3A\tBydPreci\tBYD Precision Manufacture Co.,Ltd\n90:20:83\tGeneralE\tGeneral Engine Management Systems Ltd.\n90:21:06\tBskyb\tBSkyB Ltd\n90:21:55\tHtc\tHTC Corporation\n90:21:81\tShanghai\tShanghai Huaqin Telecom Technology Co.,Ltd\n90:23:EC\tAvailink\tAvailink, Inc.\n90:27:E4\tApple\tApple, Inc.\n90:2B:34\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\n90:2B:D2\tHuaweiTe\tHuawei Technologies Co.,Ltd\n90:2C:C7\tC-MaxAsi\tC-MAX Asia Limited\n90:2E:1C\tIntelCor\tIntel Corporate\n90:2E:87\tLabjack\t\n90:31:CD\tOnyxHeal\tOnyx Healthcare Inc.\n90:32:4B\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n90:34:2B\tGatekeep\tGatekeeper Systems, Inc.\n90:34:FC\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n90:35:6E\tVodafone\tVodafone Omnitel N.V.\n90:38:09\tEricsson\tEricsson AB\n90:38:DF\tChangzho\tChangzhou Tiannengbo System Co. Ltd.\n90:3A:72\tRuckusWi\tRuckus Wireless\n90:3A:A0\tNokia\t\n90:3A:E6\tParrotSa\tParrot Sa\n90:3C:92\tApple\tApple, Inc.\n90:3C:AE\tYunnanKs\tYunnan KSEC Digital Technology Co.,Ltd.\n90:3D:5A\tShenzhen\tShenzhen Wision Technology Holding Limited\n90:3D:68\tG-Printe\tG-Printec, Inc.\n90:3D:6B\tZiconTec\tZicon Technology Corp.\n90:3D:BD\tSecureMe\tSecure Meters Limited\n90:3E:AB\tArrisGro\tARRIS Group, Inc.\n90:45:06\tTokyoBoe\tTokyo Boeki Medisys Inc.\n90:46:A2\tTedipayU\tTedipay UK Ltd\n90:46:B7\tVadaroPt\tVadaro Pte Ltd\n90:47:16\tRorze\tRorze Corporation\n90:48:9A\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n90:49:FA\tIntelCor\tIntel Corporate\n90:4C:81\tHewlettP\tHewlett Packard Enterprise\n90:4C:E5\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n90:4D:4A\tSagemcom\tSagemcom Broadband SAS\n90:4E:2B\tHuaweiTe\tHuawei Technologies Co.,Ltd\n90:4E:91\tIeeeRegi\tIEEE Registration Authority\n90:4E:91:00:00:00/28\tSpirtech\t\n90:4E:91:10:00:00/28\tApolloVi\tApollo Video Technology\n90:4E:91:20:00:00/28\tNorthPol\tNorth Pole Engineering, Inc.\n90:4E:91:30:00:00/28\tTeleepoc\tTeleepoch Ltd\n90:4E:91:40:00:00/28\tWrtnodeT\tWrtnode technology Inc.\n90:4E:91:50:00:00/28\tMcf88Srl\tmcf88 SRL\n90:4E:91:60:00:00/28\tNuwaRobo\tNuwa Robotics (HK) Limited Taiwan Branch\n90:4E:91:70:00:00/28\tIbm\t\n90:4E:91:80:00:00/28\tCommands\tCommandScape, Inc.\n90:4E:91:90:00:00/28\tCutterSp\tCUTTER Systems spol. s r.o.\n90:4E:91:A0:00:00/28\tKaertech\tKaertech Limited\n90:4E:91:B0:00:00/28\tShanghai\tShanghai JaWay Information Technology Co., Ltd.\n90:4E:91:C0:00:00/28\tShowtacl\tShowtacle s.r.o.\n90:4E:91:D0:00:00/28\tSkodaEle\tSKODA ELECTRIC a.s.\n90:4E:91:E0:00:00/28\tShenzhen\tShenzhen Cloudynamo Internet Technologies Co.,LTD.\n90:50:5A\tUnglue\tunGlue, Inc\n90:50:7B\tAdvanced\tAdvanced PANMOBIL Systems GmbH & Co. KG\n90:50:CA\tHitronTe\tHitron Technologies. Inc\n90:51:3F\tElettron\tElettronica Santerno SpA\n90:54:46\tTesElect\tTes Electronic Solutions\n90:55:AE\tEricsson\tEricsson, EAB/RWI/K\n90:56:82\tLenbrook\tLenbrook Industries Limited\n90:56:92\tAutotalk\tAutotalks Ltd.\n90:59:AF\tTexasIns\tTexas Instruments\n90:5C:44\tCompalBr\tCompal Broadband Networks, Inc.\n90:5F:2E\tTctMobil\tTCT mobile ltd\n90:5F:8D\tModas\tmodas GmbH\n90:60:F1\tApple\tApple, Inc.\n90:61:0C\tFidaInte\tFida International (S) Pte Ltd\n90:61:AE\tIntelCor\tIntel Corporate\n90:63:3B\tSamsungE\tSamsung Electronics Co.,Ltd\n90:67:17\tAlphionI\tAlphion India Private Limited\n90:67:1C\tHuaweiTe\tHuawei Technologies Co.,Ltd\n90:67:B5\tAlcatel-\tAlcatel-Lucent\n90:67:F3\tAlcatelL\tAlcatel Lucent\n90:68:C3\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n90:6C:AC\tFortinet\tFortinet, Inc.\n90:6D:C8\tDlgAutom\tDLG Automação Industrial Ltda\n90:6E:BB\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n90:6F:18\tPrivate\t\n90:6F:A9\tNanjingP\tNanjing Putian Telecommunications Technology Co.,Ltd.\n90:70:25\tGareaMic\tGarea Microsys Co.,Ltd.\n90:70:65\tTexasIns\tTexas Instruments\n90:72:40\tApple\tApple, Inc.\n90:72:82\tSagemcom\tSagemcom Broadband SAS\n90:79:10\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\n90:79:90\tBenchmar\tBenchmark Electronics Romania SRL\n90:7A:0A\tGebrBode\tGebr. Bode GmbH & Co KG\n90:7A:28\tBeijingM\tBeijing Morncloud Information And Technology Co. Ltd.\n90:7A:F1\tWally\t\n90:7E:BA\tUtekTech\tUTEK TECHNOLOGY (SHENZHEN) CO.,LTD\n90:7F:61\tChiconyE\tChicony Electronics Co., Ltd.\n90:82:60\tIeee1904\tIEEE 1904.1 Working Group\n90:83:4B\tBeijingY\tBeijing Yunyi Times Technology Co,.Ltd\n90:83:7A\tGeneralE\tGeneral Electric Water & Process Technologies\n90:84:0D\tApple\tApple, Inc.\n90:84:2B\tLegoSyst\tLEGO System A/S\n90:84:8B\tHdr10+Te\tHDR10+ Technologies, LLC\n90:86:74\tSichuanT\tSichuan Tianyi Comheart Telecomco., Ltd\n90:88:A2\tIonicsTe\tIonics Technology Me Ltda\n90:8C:09\tTotalPha\tTotal Phase\n90:8C:44\tHKZongmu\tH.K Zongmu Technology Co., Ltd.\n90:8C:63\tGzWeedon\tGZ Weedong Networks Technology Co. , Ltd\n90:8D:1D\tGhTechno\tGH Technologies\n90:8D:6C\tApple\tApple, Inc.\n90:8D:78\tD-LinkIn\tD-Link International\n90:8F:CF\tUnoSyste\tUNO System Co., Ltd\n90:90:3C\tTrisonTe\tTrison Technology Corporation\n90:90:60\tRsiVideo\tRsi Video Technologies\n90:92:B4\tDiehlBgt\tDiehl BGT Defence GmbH & Co. KG\n90:94:97\tHuaweiTe\tHuawei Technologies Co.,Ltd\n90:94:E4\tD-LinkIn\tD-Link International\n90:97:D5\tEspressi\tEspressif Inc.\n90:97:F3\tSamsungE\tSamsung Electronics Co.,Ltd\n90:98:64\tImpex-Sa\tImpex-Sat GmbH&amp;Co KG\n90:99:16\tElveesNe\tELVEES NeoTek OJSC\n90:9D:7D\tArrisGro\tARRIS Group, Inc.\n90:9D:E0\tNewlandD\tNewland Design + Assoc. Inc.\n90:9F:33\tEfmNetwo\tEFM Networks\n90:9F:43\tAccutron\tAccutron Instruments Inc.\n90:A1:37\tBeijingS\tBeijing Splendidtel Communication Technology Co,. Ltd\n90:A2:10\tUnitedTe\tUnited Telecoms Ltd\n90:A2:DA\tGheoSa\tGheo Sa\n90:A3:65\tHmdGloba\tHMD Global Oy\n90:A4:6A\tSisnet\tSisnet Co., Ltd\n90:A4:DE\tWistronN\tWistron Neweb Corporation\n90:A6:2F\tNaver\t\n90:A7:83\tJswPacif\tJsw Pacific Corporation\n90:A7:C1\tPakedgeD\tPakedge Device and Software Inc.\n90:AC:3F\tBrightsi\tBrightSign LLC\n90:AD:F7\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n90:AE:1B\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n90:B0:ED\tApple\tApple, Inc.\n90:B1:1C\tDell\tDell Inc.\n90:B1:34\tArrisGro\tARRIS Group, Inc.\n90:B1:E0\tBeijingN\tBeijing Nebula Link Technology Co., Ltd\n90:B2:1F\tApple\tApple, Inc.\n90:B6:86\tMurataMa\tMurata Manufacturing Co., Ltd.\n90:B8:D0\tJoyent\tJoyent, Inc.\n90:B9:31\tApple\tApple, Inc.\n90:B9:7D\tJohnsonO\tJohnson Outdoors Marine Electronics d/b/a Minnkota\n90:C1:15\tSonyMobi\tSony Mobile Communications Inc\n90:C1:C6\tApple\tApple, Inc.\n90:C3:5F\tNanjingJ\tNanjing Jiahao Technology Co., Ltd.\n90:C5:4A\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n90:C6:82\tIeeeRegi\tIEEE Registration Authority\n90:C6:82:00:00:00/28\tShenzhen\tShenzhen Lencotion Technology Co.,Ltd\n90:C6:82:10:00:00/28\tShenzhen\tShenzhen Photon Broadband Technology CO., LTD\n90:C6:82:20:00:00/28\tEkeyBiom\tekey biometric systems gmbh\n90:C6:82:30:00:00/28\tInnovati\tInnovative Electronic Technology\n90:C6:82:40:00:00/28\tNeone\tNeone, Inc.\n90:C6:82:50:00:00/28\tSAETSRL\tS.A.E.T. S.R.L.\n90:C6:82:60:00:00/28\tNanjingJ\tNanjing Jiexi Technologies Co., Ltd.\n90:C6:82:70:00:00/28\tCinet\tCinet Inc\n90:C6:82:80:00:00/28\tTeletekE\tTeletek Electronics\n90:C6:82:90:00:00/28\tAct\t\n90:C6:82:A0:00:00/28\tBeijingA\tBeijing Acorn Networks Corporation\n90:C6:82:B0:00:00/28\tLachmann\tLachmann & Rink GmbH\n90:C6:82:C0:00:00/28\tLiSengTe\tLi Seng Technology Ltd.\n90:C6:82:D0:00:00/28\tPowershi\tPowerShield Limited\n90:C6:82:E0:00:00/28\tShanghai\tShanghai HuRong Communication Technology Development Co., Ltd.\n90:C6:82:F0:00:00/28\tPrivate\t\n90:C7:92\tArrisGro\tARRIS Group, Inc.\n90:C7:D8\tZte\tzte corporation\n90:C9:9B\tTesorion\tTesorion Nederland B.V.\n90:CC:24\tSynaptic\tSynaptics, Inc\n90:CD:B6\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n90:CF:15\tNokia\tNokia Corporation\n90:CF:6F\tDlogixs\tDlogixs Co Ltd\n90:CF:7D\tQingdaoH\tQingdao Hisense Communications Co.,Ltd.\n90:D1:1B\tPalomarM\tPalomar Medical Technologies\n90:D7:4F\tBookeen\t\n90:D7:BE\tWavelabG\tWavelab Global Inc.\n90:D7:EB\tTexasIns\tTexas Instruments\n90:D8:52\tComtec\tComtec Co., Ltd.\n90:D8:F3\tZte\tzte corporation\n90:D9:2C\tHug-Wits\tHUG-WITSCHI AG\n90:DA:4E\tAvanu\t\n90:DA:6A\tFocusH&S\tFOCUS H&S Co., Ltd.\n90:DB:46\tE-LeadEl\tE-LEAD ELECTRONIC CO., LTD\n90:DD:5D\tApple\tApple, Inc.\n90:DF:B7\tSMSSmart\ts.m.s smart microwave sensors GmbH\n90:DF:FB\tHomeride\tHomerider Systems\n90:E0:F0\tIeee1722\tIEEE 1722a Working Group\n90:E1:7B\tApple\tApple, Inc.\n90:E2:BA\tIntelCor\tIntel Corporate\n90:E6:BA\tAsustekC\tASUSTek COMPUTER INC.\n90:E7:10\tNewH3cTe\tNew H3C Technologies Co., Ltd\n90:E7:C4\tHtc\tHTC Corporation\n90:EA:60\tSpiLaser\tSPI Lasers Ltd\n90:EC:50\tCOBO\tC.O.B.O. Spa\n90:EE:D9\tUniversa\tUNIVERSAL DE DESARROLLOS ELECTRÓNICOS, SA\n90:EF:68\tZyxelCom\tZyxel Communications Corporation\n90:F0:52\tMeizuTec\tMEIZU Technology Co., Ltd.\n90:F1:AA\tSamsungE\tSamsung Electronics Co.,Ltd\n90:F1:B0\tHangzhou\tHangzhou Anheng Info&Tech CO.,LTD\n90:F2:78\tRadiusGa\tRadius Gateway\n90:F3:05\tHumax\tHUMAX Co., Ltd.\n90:F3:B7\tKirisunC\tKirisun Communications Co., Ltd.\n90:F4:C1\tRandMcna\tRand McNally\n90:F6:52\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n90:F7:2F\tPhillips\tPhillips Machine & Welding Co., Inc.\n90:FB:5B\tAvaya\tAvaya Inc\n90:FB:A6\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n90:FD:61\tApple\tApple, Inc.\n90:FD:9F\tSiliconL\tSilicon Laboratories\n90:FF:79\tMetroEth\tMetro Ethernet Forum\n94:00:06\tJinyoung\t\n94:00:70\tNokia\tNokia Corporation\n94:01:49\tAutohotb\tAutoHotBox\n94:01:C2\tSamsungE\tSamsung Electronics Co.,Ltd\n94:04:9C\tHuaweiTe\tHuawei Technologies Co.,Ltd\n94:05:B6\tLilingFu\tLiling FullRiver Electronics & Technology Ltd\n94:09:37\tHumax\tHUMAX Co., Ltd.\n94:0B:2D\tNetviewT\tNetView Technologies(Shenzhen) Co., Ltd\n94:0B:D5\tHimaxTec\tHimax Technologies, Inc\n94:0C:6D\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n94:0E:6B\tHuaweiTe\tHuawei Technologies Co.,Ltd\n94:10:3E\tBelkinIn\tBelkin International Inc.\n94:11:DA\tItfFrösc\tITF Fröschl GmbH\n94:14:7A\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n94:16:73\tPointCor\tPoint Core SARL\n94:18:82\tHewlettP\tHewlett Packard Enterprise\n94:19:3A\tElvaco\tElvaco AB\n94:1D:1C\tTlabWest\tTLab West Systems AB\n94:20:53\tNokia\tNokia Corporation\n94:21:97\tStalmart\tStalmart Technology Limited\n94:23:6E\tShenzhen\tShenzhen Junlan Electronic Ltd\n94:28:2E\tNewH3cTe\tNew H3C Technologies Co., Ltd\n94:29:0C\tShenyang\tShenyang wisdom Foundation Technology Development Co., Ltd.\n94:29:8D\tShanghai\tShanghai AdaptComm Technology Co., Ltd.\n94:2A:3F\tDiversey\tDiversey Inc\n94:2C:B3\tHumax\tHUMAX Co., Ltd.\n94:2E:17\tSchneide\tSchneider Electric Canada Inc\n94:2E:63\tFinsécur\t\n94:31:9B\tAlphatro\tAlphatronics BV\n94:33:DD\tTaco\tTaco Inc\n94:35:0A\tSamsungE\tSamsung Electronics Co.,Ltd\n94:36:E0\tSichuanB\tSichuan Bihong Broadcast &amp; Television New Technologies Co.,Ltd\n94:39:E5\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n94:3A:F0\tNokia\tNokia Corporation\n94:3B:B1\tKaonmedi\tKaonmedia CO., LTD.\n94:3D:C9\tAsahiNet\tAsahi Net, Inc.\n94:3F:C2\tHewlettP\tHewlett Packard Enterprise\n94:40:A2\tAnywaveC\tAnywave Communication Technologies, Inc.\n94:41:C1\tMini-Cam\tMini-Cam Limited\n94:44:44\tLgInnote\tLG Innotek\n94:44:52\tBelkinIn\tBelkin International Inc.\n94:46:96\tBaudtec\tBaudTec Corporation\n94:49:96\tWisilica\tWiSilica Inc\n94:4A:09\tBitwiseC\tBitWise Controls\n94:4A:0C\tSercomm\tSercomm Corporation.\n94:4F:4C\tSoundUni\tSound United LLC\n94:50:47\tRechnerb\tRechnerbetriebsgruppe\n94:50:89\tSimonsvo\tSimonsVoss Technologies GmbH\n94:51:03\tSamsungE\tSamsung Electronics Co.,Ltd\n94:51:3D\tIsmartAl\tiSmart Alarm, Inc.\n94:51:BF\tHyundaiE\tHyundai ESG\n94:53:30\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n94:54:93\tRigadoLl\tRigado, LLC\n94:57:A5\tHewlettP\tHewlett Packard\n94:59:07\tShanghai\tShanghai HITE-BELDEN Network Technology Co., Ltd.\n94:59:2D\tEkeBuild\tEKE Building Technology Systems Ltd\n94:5B:7E\tTrilobit\tTrilobit Ltda.\n94:61:1E\tWataElec\tWata Electronics Co.,Ltd.\n94:61:24\tPason\tPason Systems\n94:62:69\tArrisGro\tARRIS Group, Inc.\n94:63:72\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n94:63:D1\tSamsungE\tSamsung Electronics Co.,Ltd\n94:65:2D\tOneplusT\tOnePlus Technology (Shenzhen) Co., Ltd\n94:65:9C\tIntelCor\tIntel Corporate\n94:66:E7\tWomEngin\tWOM Engineering\n94:6A:B0\tArcadyan\tArcadyan Corporation\n94:70:D2\tWinfirmT\tWinfirm Technology\n94:71:AC\tTctMobil\tTCT mobile ltd\n94:75:6E\tQinetiqN\tQinetiQ North America\n94:76:B7\tSamsungE\tSamsung Electronics Co.,Ltd\n94:77:2B\tHuaweiTe\tHuawei Technologies Co.,Ltd\n94:7B:BE\tUbicquia\t\n94:7B:E7\tSamsungE\tSamsung Electronics Co.,Ltd\n94:7C:3E\tPolewall\tPolewall Norge AS\n94:7E:B9\tNational\tNational Narrowband Network Communications Pty Ltd\n94:81:A4\tAzurayTe\tAzuray Technologies\n94:85:7A\tEvantage\tEvantage Industries Corp\n94:86:CD\tSeoulEle\tSEOUL ELECTRONICS&TELECOM\n94:86:D4\tSurveill\tSurveillance Pro Corporation\n94:87:7C\tArrisGro\tARRIS Group, Inc.\n94:87:E0\tXiaomiCo\tXiaomi Communications Co Ltd\n94:88:15\tInfiniqu\tInfinique Worldwide Inc\n94:88:54\tTexasIns\tTexas Instruments\n94:88:5E\tSurfilte\tSurfilter Network Technology Co., Ltd.\n94:8B:03\tEagetInn\tEAGET Innovation and Technology Co., Ltd.\n94:8B:C1\tSamsungE\tSamsung Electronics Co.,Ltd\n94:8D:50\tBeamexOy\tBeamex Oy Ab\n94:8D:EF\tOetikerS\tOetiker Schweiz AG\n94:8E:89\tIndustri\tIndustrias Unidas Sa De Cv\n94:8F:EE\tVerizonT\tVerizon Telematics\n94:91:7F\tAskeyCom\tAskey Computer Corp\n94:92:BC\tSyntechH\tSYNTECH(HK) TECHNOLOGY LIMITED\n94:94:26\tApple\tApple, Inc.\n94:95:A0\tGoogle\tGoogle, Inc.\n94:98:A2\tShanghai\tShanghai LISTEN TECH.LTD\n94:99:01\tShenzhen\tShenzhen YITOA Digital Appliance CO.,LTD\n94:99:90\tVtcTelec\tVTC Telecommunications\n94:9A:A9\tMicrosof\tMicrosoft Corporation\n94:9B:2C\tExtremeN\tExtreme Networks, Inc.\n94:9B:FD\tTransNew\tTrans New Technology, Inc.\n94:9C:55\tAltaData\tAlta Data Technologies\n94:9D:57\tPanasoni\tPanasonic do Brasil Limitada\n94:9F:3E\tSonos\tSonos, Inc.\n94:9F:3F\tOptekDig\tOptek Digital Technology company limited\n94:9F:B4\tChengduJ\tChengDu JiaFaAnTai Technology Co.,Ltd\n94:A0:4E\tBostexTe\tBostex Technology Co., LTD\n94:A1:A2\tAmpakTec\tAMPAK Technology, Inc.\n94:A3:CA\tKonnecto\tKonnectONE, LLC\n94:A7:B7\tZte\tzte corporation\n94:A7:BC\tBodymedi\tBodyMedia, Inc.\n94:AA:B8\tJoviewBe\tJoview(Beijing) Technology Co. Ltd.\n94:AB:DE\tOmxTechn\tOMX Technology - FZE\n94:AC:CA\tTrivumTe\ttrivum technologies GmbH\n94:AE:61\tAlcatelL\tAlcatel Lucent\n94:AE:E3\tBeldenHi\tBelden Hirschmann Industries (Suzhou) Ltd.\n94:B1:0A\tSamsungE\tSamsung Electronics Co.,Ltd\n94:B2:CC\tPioneer\tPioneer Corporation\n94:B4:0F\tArubaNet\tAruba Networks\n94:B8:19\tNokia\t\n94:B8:6D\tIntelCor\tIntel Corporate\n94:B8:C5\tRuggedco\tRuggedCom Inc.\n94:B9:B4\tAptosTec\tAptos Technology\n94:BA:31\tVisionte\tVisiontec da Amazônia Ltda.\n94:BA:56\tShenzhen\tShenzhen Coship Electronics Co., Ltd.\n94:BB:AE\tHusqvarn\tHusqvarna AB\n94:BF:1E\tEflow/Sm\teflow Inc. / Smart Device Planning and Development Division\n94:BF:2D\tApple\tApple, Inc.\n94:BF:95\tShenzhen\tShenzhen Coship Electronics Co., Ltd\n94:C0:14\tSorterSp\tSorter Sp. j. Konrad Grzeszczyk MichaA, Ziomek\n94:C0:38\tTallacNe\tTallac Networks\n94:C1:50\t2wire\t2Wire Inc\n94:C3:E4\tAtlasCop\tAtlas Copco IAS GmbH\n94:C4:E9\tPowerlay\tPowerLayer Microsystems HongKong Limited\n94:C6:91\tElitegro\tEliteGroup Computer Systems Co., LTD\n94:C6:EB\tNovaElec\tNOVA electronics, Inc.\n94:C7:AF\tRayliosT\tRaylios Technology\n94:C9:60\tZhongsha\tZhongshan B&T technology.co.,ltd\n94:C9:62\tTeseq\tTeseq AG\n94:CA:0F\tHoneywel\tHoneywell Analytics\n94:CC:B9\tArrisGro\tARRIS Group, Inc.\n94:CD:AC\tCreowave\tCreowave Oy\n94:CE:2C\tSonyMobi\tSony Mobile Communications Inc\n94:CE:31\tCts\tCTS Limited\n94:D0:19\tCydle\tCydle Corp.\n94:D0:29\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n94:D4:17\tGpiKorea\tGpi Korea Inc.\n94:D4:69\tCisco\tCisco Systems, Inc\n94:D6:0E\tShenzhen\tshenzhen yunmao information technologies co., ltd\n94:D7:23\tShanghai\tShanghai DareGlobal Technologies Co.,Ltd\n94:D7:71\tSamsungE\tSamsung Electronics Co.,Ltd\n94:D8:59\tTctMobil\tTCT mobile ltd\n94:D9:3C\tEnelps\t\n94:D9:B3\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n94:DB:49\tSitcorp\t\n94:DB:C9\tAzurewav\tAzureWave Technology Inc.\n94:DB:DA\tHuaweiTe\tHuawei Technologies Co.,Ltd\n94:DD:3F\tA+VLinkT\tA+V Link Technologies, Corp.\n94:DE:0E\tSmartopt\tSmartOptics AS\n94:DE:80\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\n94:DF:4E\tWistronI\tWistron InfoComm(Kunshan)Co.,Ltd.\n94:DF:58\tIjElectr\tIJ Electron CO.,Ltd.\n94:E0:D0\tHealthst\tHealthStream Taiwan Inc.\n94:E1:AC\tHangzhou\tHangzhou Hikvision Digital Technology Co.,Ltd.\n94:E2:26\tDOrtizCo\tD. ORtiz Consulting, LLC\n94:E2:FD\tBogeKomp\tBoge Kompressoren OTTO Boge GmbH & Co. KG\n94:E3:6D\tTexasIns\tTexas Instruments\n94:E7:11\tXirkaDam\tXirka Dama Persada PT\n94:E8:48\tFyldeMic\tFylde Micro Ltd\n94:E8:C5\tArrisGro\tARRIS Group, Inc.\n94:E9:6A\tApple\tApple, Inc.\n94:E9:79\tLiteonTe\tLiteon Technology Corporation\n94:E9:8C\tNokia\t\n94:EA:EA\tTellesco\tTellescom Industria E Comercio Em Telecomunicacao\n94:EB:2C\tGoogle\tGoogle, Inc.\n94:EB:CD\tBlackber\tBlackBerry RTS\n94:F1:28\tHewlettP\tHewlett Packard Enterprise\n94:F1:9E\tHuizhouM\tHuizhou Maorong Intelligent Technology Co.,Ltd\n94:F2:78\tElmaElec\tElma Electronic\n94:F5:51\tCadiScie\tCadi Scientific Pte Ltd\n94:F6:65\tRuckusWi\tRuckus Wireless\n94:F6:92\tGeminico\tGeminico co.,Ltd.\n94:F6:A3\tApple\tApple, Inc.\n94:F7:20\tTianjinD\tTianjin Deviser Electronics Instrument Co., Ltd\n94:FA:E8\tShenzhen\tShenzhen Eycom Technology Co., Ltd\n94:FB:29\tZebraTec\tZebra Technologies Inc.\n94:FB:B2\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\n94:FD:1D\tWherewhe\tWhereWhen Corp\n94:FD:2E\tShanghai\tShanghai Uniscope Technologies Co.,Ltd\n94:FE:22\tHuaweiTe\tHuawei Technologies Co.,Ltd\n94:FE:9D\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\n94:FE:F4\tSagemcom\tSagemcom Broadband SAS\n98:00:74\tRaisecom\tRaisecom Technology CO., LTD\n98:00:C1\tGuangzho\tGuangZhou CREATOR Technology Co.,Ltd.(CHINA)\n98:00:C6\tApple\tApple, Inc.\n98:01:A7\tApple\tApple, Inc.\n98:02:84\tTheobrom\tTheobroma Systems GmbH\n98:02:D8\tIeeeRegi\tIEEE Registration Authority\n98:02:D8:00:00:00/28\tStoerk-T\tStoerk-Tronic, Stoerk GmbH & Co.KG\n98:02:D8:10:00:00/28\tShenzhen\tShenzhen Ateko Photoelectricity Co Ltd\n98:02:D8:20:00:00/28\tUnitedPo\tUnited Power Research Technology Corp.\n98:02:D8:30:00:00/28\tGrammerE\tGrammer EiA Electronics nv\n98:02:D8:40:00:00/28\tZedi\tZedi, Inc.\n98:02:D8:50:00:00/28\tEbi\tEBI  Ltd.\n98:02:D8:60:00:00/28\tFritzKue\tFritz Kuebler GmbH\n98:02:D8:70:00:00/28\tOrmazaba\tOrmazabal Protection&Automation\n98:02:D8:80:00:00/28\tSimploTe\tSimplo Technology Co.,LTD\n98:02:D8:90:00:00/28\tNavroomB\tNavroom Beijing, China\n98:02:D8:A0:00:00/28\tHysecuri\tHySecurity\n98:02:D8:B0:00:00/28\tHanshinM\tHanshin Medical Co., Ltd.\n98:02:D8:C0:00:00/28\tAgv\tAGV spa\n98:02:D8:D0:00:00/28\tPromicon\tPromicon Elektronik GmbH + Co.KG\n98:02:D8:E0:00:00/28\tPrivate\t\n98:02:D8:F0:00:00/28\tPrivate\t\n98:03:9B\tMellanox\tMellanox Technologies, Inc.\n98:03:A0\tAbbNVPow\tABB n.v. Power Quality Products\n98:03:D8\tApple\tApple, Inc.\n98:07:2D\tTexasIns\tTexas Instruments\n98:0C:82\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\n98:0C:A5\tMotorola\tMotorola (Wuhan) Mobility Technologies Communication Co., Ltd.\n98:0D:2E\tHtc\tHTC Corporation\n98:0E:E4\tPrivate\t\n98:10:94\tShenzhen\tShenzhen Vsun communication technology Co.,ltd\n98:10:E8\tApple\tApple, Inc.\n98:13:33\tZte\tzte corporation\n98:14:D2\tAvonic\t\n98:16:EC\tIcIntrac\tIC Intracom\n98:18:88\tCiscoMer\tCisco Meraki\n98:1D:FA\tSamsungE\tSamsung Electronics Co.,Ltd\n98:1E:0F\tJeelanSh\tJeelan (Shanghai Jeelan Technology Information Inc\n98:1F:B1\tShenzhen\tShenzhen Lemon Network Technology Co.,Ltd\n98:20:8E\tDefinium\tDefinium Technologies\n98:22:EF\tLiteonTe\tLiteon Technology Corporation\n98:23:4E\tMicromed\tMicromedia AG\n98:26:2A\tAppliedR\tApplied Research Associates, Inc\n98:28:A6\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\n98:29:1D\tJaguarDe\tJaguar de Mexico, SA de CV\n98:29:3F\tFujianSt\tFujian Start Computer Equipment Co.,Ltd\n98:29:A6\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\n98:2C:BE\t2wire\t2Wire Inc\n98:2D:56\tResoluti\tResolution Audio\n98:2D:68\tSamsungE\tSamsung Electronics Co., Ltd\n98:2D:BA\tFibergat\tFibergate Inc.\n98:2F:3C\tSichuanC\tSichuan Changhong Electric Ltd.\n98:30:00\tBeijingK\tBeijing KEMACOM Technologies Co., Ltd.\n98:30:71\tDaikyung\tDaikyung Vascom\n98:34:9D\tKraussMa\tKrauss Maffei Technologies GmbH\n98:35:71\tSub10\tSub10 Systems Ltd\n98:35:B8\tAssemble\tAssembled Products Corporation\n98:37:13\tPtNavico\tPT.Navicom Indonesia\n98:39:8E\tSamsungE\tSamsung Electronics Co.,Ltd\n98:3B:16\tAmpakTec\tAMPAK Technology, Inc.\n98:3B:8F\tIntelCor\tIntel Corporate\n98:3F:9F\tChinaSsj\tChina SSJ (Suzhou) Network Technology Inc.\n98:40:BB\tDell\tDell Inc.\n98:42:46\tSolIndus\tSol Industry Pte., Ltd\n98:43:DA\tIntertec\tIntertech\n98:45:62\tShanghai\tShanghai Baud Data Communication Co.,Ltd.\n98:47:3C\tShanghai\tShanghai Sunmon Communication Technogy Co.,Ltd\n98:4A:47\tChgHospi\tCHG Hospital Beds\n98:4B:4A\tArrisGro\tARRIS Group, Inc.\n98:4B:E1\tHewlettP\tHewlett Packard\n98:4C:04\tZhangzho\tZhangzhou Keneng Electrical Equipment Co Ltd\n98:4C:D3\tMantisDe\tMantis Deposition\n98:4E:97\tStarligh\tStarlight Marketing (H. K.) Ltd.\n98:4F:EE\tIntelCor\tIntel Corporate\n98:52:B1\tSamsungE\tSamsung Electronics Co.,Ltd\n98:54:1B\tIntelCor\tIntel Corporate\n98:57:D3\tHonHai-C\tHON HAI-CCPBG  PRECISION IND.CO.,LTD.\n98:58:8A\tSysgrati\tSYSGRATION Ltd.\n98:59:45\tTexasIns\tTexas Instruments\n98:5A:EB\tApple\tApple, Inc.\n98:5B:B0\tKmdata\tKmdata Inc.\n98:5C:93\tSbgSas\tSBG Systems SAS\n98:5D:46\tPeoplene\tPeopleNet Communication\n98:5D:AD\tTexasIns\tTexas Instruments\n98:5E:1B\tConversd\tConversDigital Co., Ltd.\n98:5F:D3\tMicrosof\tMicrosoft Corporation\n98:60:22\tEmw\tEMW Co., Ltd.\n98:66:EA\tIndustri\tIndustrial Control Communications, Inc.\n98:6B:3D\tArrisGro\tARRIS Group, Inc.\n98:6C:5C\tJiangxiG\tJiangxi Gosun Guard Security Co.,Ltd\n98:6C:F5\tZte\tzte corporation\n98:6D:35\tIeeeRegi\tIEEE Registration Authority\n98:6D:35:00:00:00/28\tShenzhen\tShenzhen MALATA Mobile Communication Co.,LTD\n98:6D:35:10:00:00/28\tShenzhen\tShenzhen cositea electronics technology co.,LTD\n98:6D:35:20:00:00/28\tShenzhen\tShenzhen Fise Technology Holding Co.,Ltd.\n98:6D:35:30:00:00/28\tDhMechat\tDH Mechatronic AG\n98:6D:35:40:00:00/28\tBlossomC\tblossom communications corp.\n98:6D:35:50:00:00/28\tPdahl\t\n98:6D:35:60:00:00/28\tVitronic\tVitronic Dr.-Ing. Stein Bildverarbeitungssysteme GmbH\n98:6D:35:70:00:00/28\tZhejiang\tZhejiang Hanshow Technology Co., Ltd.\n98:6D:35:80:00:00/28\tBeijing3\tBeijing 3CAVI Tech Co.,Ltd\n98:6D:35:90:00:00/28\tPrivate\t\n98:6D:35:A0:00:00/28\tIwaveJap\tiWave Japan, Inc.\n98:6D:35:B0:00:00/28\tIntech\t\n98:6D:35:C0:00:00/28\tMy-Pv\tmy-PV GmbH\n98:6D:35:D0:00:00/28\tPraeside\tPraesideo B.V.\n98:6D:35:E0:00:00/28\tBaycomOp\tBAYCOM OPTO-ELECTRONICS TECHNOLGY CO., LTD.\n98:6D:C8\tToshibaM\tTOSHIBA MITSUBISHI-ELECTRIC INDUSTRIAL SYSTEMS CORPORATION\n98:6F:60\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n98:70:E8\tInnatech\tInnatech Sdn Bhd\n98:73:C4\tSageElec\tSage Electronic Engineering LLC\n98:74:3D\tShenzhen\tShenzhen Jun Kai Hengye Technology Co. Ltd\n98:74:DA\tInfinixM\tInfinix mobility limited\n98:76:B6\tAdafruit\t\n98:77:70\tPepDigit\tPep Digital Technology (Guangzhou) Co., Ltd\n98:7B:F3\tTexasIns\tTexas Instruments\n98:7E:46\tEmizonNe\tEmizon Networks Limited\n98:82:17\tDisrupti\tDisruptive Ltd\n98:83:89\tSamsungE\tSamsung Electronics Co.,Ltd\n98:84:E3\tTexasIns\tTexas Instruments\n98:86:B1\tFlyaudio\tFlyaudio corporation (China)\n98:87:44\tWuxiHong\tWuxi Hongda Science and Technology Co.,LTD\n98:89:ED\tAnademIn\tAnadem Information Inc.\n98:8B:5D\tSagemcom\tSagemcom Broadband SAS\n98:8B:AD\tCorintec\tCorintech Ltd.\n98:8E:34\tZhejiang\tZhejiang Boxsam Electronic Co.,Ltd\n98:8E:4A\tNoxusBei\tNOXUS(BEIJING) TECHNOLOGY CO.,LTD\n98:8E:D4\tItelMobi\tItel Mobile Limited\n98:8E:DD\tTeConnec\tTE Connectivity Limerick\n98:90:80\tLinkpowe\tLinkpower Network System Inc Ltd.\n98:90:96\tDell\tDell Inc.\n98:93:CC\tLgElectr\tLg Electronics Inc\n98:94:49\tSkyworth\tSkyworth Wireless Technology Ltd.\n98:97:D1\tMitrasta\tMitraStar Technology Corp.\n98:9C:57\tHuaweiTe\tHuawei Technologies Co.,Ltd\n98:9E:63\tApple\tApple, Inc.\n98:A4:04\tEricsson\tEricsson AB\n98:A4:0E\tSnap\tSnap, Inc.\n98:A7:B0\tMcstZao\tMcst Zao\n98:AA:3C\tWillI-Te\tWill i-tech Co., Ltd.\n98:AA:D7\tBlueWave\tBlue Wave Networking Co Ltd\n98:AA:FC\tIeeeRegi\tIEEE Registration Authority\n98:AA:FC:00:00:00/28\tDalianEa\tDalian Eastern Display Co., Ltd.\n98:AA:FC:10:00:00/28\tSurtec\t\n98:AA:FC:20:00:00/28\tShenzhen\tShenzhen UniStrong Science & Technology Co., Ltd\n98:AA:FC:30:00:00/28\tNexusEle\tNexus Electrical(Jiaxing) Limited\n98:AA:FC:40:00:00/28\tRpeRadic\tRpe Radico\n98:AA:FC:50:00:00/28\tSpmInstr\tSPM Instrument AB\n98:AA:FC:60:00:00/28\tMekotron\tMekotronics Co., Ltd\n98:AA:FC:70:00:00/28\tShenzhen\tShenzhen Hubsan Technology Co.，LTD.\n98:AA:FC:80:00:00/28\tBeijingT\tBeijing Tiandi-Marco Electro-Hydraulic Control System Company Ltd.\n98:AA:FC:90:00:00/28\tBeamAuth\tBEAM Authentic\n98:AA:FC:A0:00:00/28\tSenko\tSENKO Co.,Ltd.\n98:AA:FC:B0:00:00/28\tResonant\tResonant Systems Inc.\n98:AA:FC:C0:00:00/28\tDots\tdots Inc.\n98:AA:FC:D0:00:00/28\tMcsMicro\tMCS Micronic Computer Systeme GmbH\n98:AA:FC:E0:00:00/28\tComarchS\tComarch S.A.\n98:AE:71\tVvdnTech\tVVDN Technologies Pvt Ltd\n98:B0:39\tNokia\t\n98:B6:E9\tNintendo\tNintendo Co.,Ltd\n98:B8:E3\tApple\tApple, Inc.\n98:BB:1E\tBydPreci\tBYD Precision Manufacture Company Ltd.\n98:BB:99\tPhicommS\tPhicomm (Sichuan) Co.,Ltd.\n98:BC:57\tSvaTechn\tSva Technologies Co.Ltd\n98:BC:99\tEdeltech\tEdeltech Co.,Ltd.\n98:BE:94\tIbm\t\n98:C0:EB\tGlobalRe\tGlobal Regency Ltd\n98:C5:DB\tEricsson\tEricsson AB\n98:C8:45\tPacketac\tPacketAccess\n98:CA:33\tApple\tApple, Inc.\n98:CB:27\tGaloreNe\tGalore Networks Pvt. Ltd.\n98:CD:B4\tVirident\tVirident Systems, Inc.\n98:CF:53\tBbkEduca\tBbk Educational Electronics Corp.,Ltd.\n98:D2:93\tGoogle\tGoogle, Inc.\n98:D3:31\tShenzhen\tShenzhen Bolutek Technology Co.,Ltd.\n98:D3:D2\tMekraLan\tMEKRA Lang GmbH & Co. KG\n98:D3:E7\tNetafimL\tNetafim L\n98:D6:86\tChyiLeeI\tChyi Lee industry Co., ltd.\n98:D6:BB\tApple\tApple, Inc.\n98:D6:F7\tLgElectr\tLG Electronics (Mobile Communications)\n98:D8:63\tShanghai\tShanghai High-Flying Electronics Technology Co., Ltd\n98:D8:8C\tNortelNe\tNortel Networks\n98:DA:92\tVuzix\tVuzix Corporation\n98:DC:D9\tUnitec\tUNITEC Co., Ltd.\n98:DD:EA\tInfinixM\tInfinix mobility limited\n98:DE:D0\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n98:E0:D9\tApple\tApple, Inc.\n98:E1:65\tAccutome\t\n98:E4:76\tZentan\t\n98:E7:9A\tFoxconnN\tFoxconn(NanJing) Communication Co.,Ltd.\n98:E7:F4\tHewlettP\tHewlett Packard\n98:E7:F5\tHuaweiTe\tHuawei Technologies Co.,Ltd\n98:E8:48\tAxiim\t\n98:EC:65\tCosesyAp\tCosesy ApS\n98:ED:5C\tTeslaMot\tTesla Motors, Inc\n98:EE:CB\tWistronI\tWistron Infocomm (Zhongshan) Corporation\n98:EF:9B\tOhsung\t\n98:F0:58\tLynxspri\tLynxspring, Incl.\n98:F0:AB\tApple\tApple, Inc.\n98:F1:70\tMurataMa\tMurata Manufacturing Co., Ltd.\n98:F1:99\tNecPlatf\tNEC Platforms, Ltd.\n98:F2:B3\tHewlettP\tHewlett Packard Enterprise\n98:F4:28\tZte\tzte corporation\n98:F5:37\tZte\tzte corporation\n98:F5:A9\tOhsung\t\n98:F7:D7\tArrisGro\tARRIS Group, Inc.\n98:F8:C1\tIdtTechn\tIDT Technology Limited\n98:F8:DB\tMariniIm\tMarini Impianti Industriali s.r.l.\n98:FA:E3\tXiaomiCo\tXiaomi Communications Co Ltd\n98:FB:12\tGrandEle\tGrand Electronics (HK) Ltd\n98:FC:11\tCisco-Li\tCisco-Linksys, LLC\n98:FD:74\tAct\tAct.Co.Ltd\n98:FD:B4\tPrimaxEl\tPrimax Electronics Ltd.\n98:FE:03\tEricsson\tEricsson - North America\n98:FE:94\tApple\tApple, Inc.\n98:FF:6A\tOtecShan\tOTEC(Shanghai)Technology Co.,Ltd.\n98:FF:D0\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\n9A:1B:22\tInfocore\tInfoCore Co.,Ltd.\n9A:56:4B\tCubix\tCubix Corporation\n9A:AD:CA\tCredo\t\n9A:B2:F8\tSffCommi\tSFF Committee\n9A:D2:63\tFirmtekL\tFirmTek, LLC\n9C:01:11\tShenzhen\tShenzhen Newabel Electronic Co., Ltd.\n9C:02:98\tSamsungE\tSamsung Electronics Co.,Ltd\n9C:03:9E\tBeijingW\tBeijing Winchannel Software Technology Co., Ltd\n9C:04:73\tTecmobil\tTecmobile (International) Ltd.\n9C:04:EB\tApple\tApple, Inc.\n9C:06:1B\tHangzhou\tHangzhou H3C Technologies Co., Limited\n9C:06:6E\tHyteraCo\tHytera Communications Corporation Limited\n9C:0C:DF\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\n9C:0D:AC\tTymphany\tTymphany HK Limited\n9C:0E:4A\tShenzhen\tShenzhen Vastking Electronic Co.,Ltd.\n9C:13:AB\tChansonW\tChanson Water Co., Ltd.\n9C:14:65\tEdataEle\tEdata Elektronik San. ve Tic. A.Ş.\n9C:18:74\tNokiaDan\tNokia Danmark A/S\n9C:1C:12\tArubaNet\tAruba Networks\n9C:1D:36\tHuaweiTe\tHuawei Technologies Co.,Ltd\n9C:1D:58\tTexasIns\tTexas Instruments\n9C:1E:95\tActionte\tActiontec Electronics, Inc\n9C:1F:DD\tAccupix\tAccupix Inc.\n9C:20:7B\tApple\tApple, Inc.\n9C:21:6A\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n9C:22:0E\tTascan\tTASCAN Systems GmbH\n9C:28:40\tDiscover\tDiscovery Technology,LTD..\n9C:28:BF\tContinen\tContinental Automotive Czech Republic s.r.o.\n9C:28:EF\tHuaweiTe\tHuawei Technologies Co.,Ltd\n9C:29:3F\tApple\tApple, Inc.\n9C:2A:70\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n9C:2A:83\tSamsungE\tSamsung Electronics Co.,Ltd\n9C:2E:A1\tXiaomiCo\tXiaomi Communications Co Ltd\n9C:2F:73\tUniversa\tUniversal Tiancheng Technology (Beijing) Co., Ltd.\n9C:30:5B\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n9C:30:66\tRweEffiz\tRWE Effizienz GmbH\n9C:31:78\tFoshanHu\tFoshan Huadian Intelligent Communications Teachnologies Co.,Ltd\n9C:31:B6\tKuliteSe\tKulite Semiconductor Products Inc\n9C:32:A9\tSichuanT\tSichuan Tianyi Comheart Telecomco., Ltd\n9C:32:CE\tCanon\tCanon Inc.\n9C:34:26\tArrisGro\tARRIS Group, Inc.\n9C:35:83\tNiproDia\tNipro Diagnostics, Inc\n9C:35:EB\tApple\tApple, Inc.\n9C:37:F4\tHuaweiTe\tHuawei Technologies Co.,Ltd\n9C:3A:AF\tSamsungE\tSamsung Electronics Co.,Ltd\n9C:3D:CF\tNetgear\t\n9C:3E:AA\tEnvylogi\tEnvyLogic Co.,Ltd.\n9C:41:7C\tHameTech\tHame  Technology Co.,  Limited\n9C:43:1E\tIeeeRegi\tIEEE Registration Authority\n9C:43:1E:00:00:00/28\tAntailiy\tAntailiye Technology Co.,Ltd\n9C:43:1E:10:00:00/28\tSymfunTe\tSymfun Telecom Ltd\n9C:43:1E:20:00:00/28\tHaesungD\tHaesung Ds\n9C:43:1E:30:00:00/28\tAdvanced\tAdvanced Logic Technology (ALT) sa\n9C:43:1E:40:00:00/28\tWireless\tWireless Environment, LLC\n9C:43:1E:50:00:00/28\tPromosTe\tProMOS Technologies Inc.\n9C:43:1E:60:00:00/28\tR-S-IEle\tR-S-I Elektrotechnik GmbH  CO KG\n9C:43:1E:70:00:00/28\tOptris\tOptris GmbH\n9C:43:1E:80:00:00/28\tWundaGro\tWunda Group plc\n9C:43:1E:90:00:00/28\tContinen\tCONTINENT Co. Ltd\n9C:43:1E:A0:00:00/28\tStAccess\tST Access Control System Corp.\n9C:43:1E:B0:00:00/28\tJnlTechn\tJNL Technologies Inc\n9C:43:1E:C0:00:00/28\tSuzhouJi\tSuZhou Jinruiyang Information Technology CO.,LTD\n9C:43:1E:D0:00:00/28\tHkElepho\tHK ELEPHONE Communication Tech Co.,Limited\n9C:43:1E:E0:00:00/28\tMidasTec\tMidas Technology DBA Phoenix Audio Technologies\n9C:44:3D\tChengduX\tChengdu Xuguang Technology Co, Ltd\n9C:44:A6\tSwifttes\tSwiftTest, Inc.\n9C:45:63\tDimepSis\tDIMEP Sistemas\n9C:4A:7B\tNokia\tNokia Corporation\n9C:4C:AE\tMesaLabs\tMesa Labs\n9C:4E:20\tCisco\tCisco Systems, Inc\n9C:4E:36\tIntelCor\tIntel Corporate\n9C:4E:8E\tAlt\tALT Systems Ltd\n9C:4E:BF\tBoxcast\t\n9C:4F:CF\tTctMobil\tTCT mobile ltd\n9C:4F:DA\tApple\tApple, Inc.\n9C:50:EE\tCambridg\tCambridge Industries(Group) Co.,Ltd.\n9C:52:F8\tHuaweiTe\tHuawei Technologies Co.,Ltd\n9C:53:CD\tEngicamS\tENGICAM s.r.l.\n9C:54:1C\tShenzhen\tShenzhen My-power Technology Co.,Ltd\n9C:54:CA\tZhengzho\tZhengzhou VCOM Science and Technology Co.,Ltd\n9C:55:B4\tISESRL\tI.S.E. S.r.l.\n9C:57:11\tFeitianX\tFeitian Xunda(Beijing) Aeronautical Information Technology Co., Ltd.\n9C:57:AD\tCisco\tCisco Systems, Inc\n9C:5A:44\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\n9C:5B:96\tNmr\tNMR Corporation\n9C:5C:8D\tFiremaxI\tFIREMAX INDÚSTRIA E COMÉRCIO DE PRODUTOS ELETRÔNICOS  LTDA\n9C:5C:8E\tAsustekC\tASUSTek COMPUTER INC.\n9C:5C:F9\tSonyMobi\tSony Mobile Communications Inc\n9C:5D:12\tAerohive\tAerohive Networks Inc.\n9C:5D:95\tVtcElect\tVTC Electronics Corp.\n9C:5E:73\tCalibreU\tCalibre UK LTD\n9C:61:1D\tOmni-IdU\tOmni-ID USA, Inc.\n9C:61:21\tSichuanT\tSichuan Tianyi Comheart Telecomco.,Ltd\n9C:62:AB\tSumavisi\tSumavision Technologies Co.,Ltd\n9C:63:ED\tZte\tzte corporation\n9C:64:5E\tHarmanCo\tHarman Consumer Group\n9C:65:B0\tSamsungE\tSamsung Electronics Co.,Ltd\n9C:65:EE\tDasanNet\tDASAN Network Solutions\n9C:65:F9\tAcsipTec\tAcSiP Technology Corp.\n9C:66:50\tGlodioTe\tGlodio Technolies Co.,Ltd Tianjin Branch\n9C:68:5B\tOctonion\tOctonion SA\n9C:6A:BE\tQeesAps\tQEES ApS.\n9C:6C:15\tMicrosof\tMicrosoft Corporation\n9C:6F:52\tZte\tzte corporation\n9C:71:3A\tHuaweiTe\tHuawei Technologies Co.,Ltd\n9C:74:1A\tHuaweiTe\tHuawei Technologies Co.,Ltd\n9C:75:14\tWildixSr\tWildix srl\n9C:77:AA\tNadasnv\t\n9C:79:AC\tSuntecSo\tSuntec Software(Shanghai) Co., Ltd.\n9C:7A:03\tCiena\tCiena Corporation\n9C:7B:D2\tNeolabCo\tNEOLAB Convergence\n9C:7D:A3\tHuaweiTe\tHuawei Technologies Co.,Ltd\n9C:7F:57\tUnicMemo\tUNIC Memory Technology Co Ltd\n9C:80:7D\tSyscable\tSYSCABLE Korea Inc.\n9C:80:DF\tArcadyan\tArcadyan Technology Corporation\n9C:83:BF\tPro-Visi\tPRO-VISION, Inc.\n9C:84:BF\tApple\tApple, Inc.\n9C:86:DA\tPhoenixG\tPhoenix Geophysics Ltd.\n9C:88:88\tSimacTec\tSimac Techniek NV\n9C:88:AD\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n9C:8B:A0\tApple\tApple, Inc.\n9C:8B:F1\tWarehous\tThe Warehouse Limited\n9C:8C:6E\tSamsungE\tSamsung Electronics Co.,Ltd\n9C:8D:1A\tIntegPro\tINTEG process group inc\n9C:8D:7C\tAlpsElec\tAlps Electric Co.,Ltd.\n9C:8D:D3\tLeontonT\tLeonton Technologies\n9C:8E:99\tHewlettP\tHewlett Packard\n9C:8E:CD\tAmcrestT\tAmcrest Technologies\n9C:8E:DC\tTeracom\tTeracom Limited\n9C:93:4E\tXerox\tXerox Corporation\n9C:93:E4\tPrivate\t\n9C:95:F8\tSmartdoo\tSmartDoor Systems, LLC\n9C:97:26\tTechnico\tTechnicolor\n9C:98:11\tGuangzho\tGuangzhou Sunrise Electronics Development Co., Ltd\n9C:99:A0\tXiaomiCo\tXiaomi Communications Co Ltd\n9C:9C:1D\tStarkeyL\tStarkey Labs Inc.\n9C:9C:40\tSichuanT\tSichuan Tianyi Comheart Telecomco., Ltd\n9C:9D:5D\tRaden\tRaden Inc\n9C:A1:0A\tScleSfe\tScle Sfe\n9C:A1:34\tNike\tNike, Inc.\n9C:A3:A9\tGuangzho\tGuangzhou Juan Optical and Electronical Tech Joint Stock Co., Ltd\n9C:A3:BA\tSakuraIn\tSAKURA Internet Inc.\n9C:A5:25\tShandong\tShandong USR IOT Technology Limited\n9C:A5:77\tOsornoEn\tOsorno Enterprises Inc.\n9C:A5:C0\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n9C:A6:15\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\n9C:A6:9D\tWhaleyTe\tWhaley Technology Co.Ltd\n9C:A9:E4\tZte\tzte corporation\n9C:AA:1B\tMicrosof\tMicrosoft Corporation\n9C:AC:6D\tUniversa\tUniversal Electronics, Inc.\n9C:AD:97\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n9C:AD:EF\tObihaiTe\tObihai Technology, Inc.\n9C:AE:D3\tSeikoEps\tSeiko Epson Corporation\n9C:AF:6F\tItelMobi\tItel Mobile Limited\n9C:AF:CA\tCisco\tCisco Systems, Inc\n9C:B0:08\tUbiquito\tUbiquitous Computing Technology Corporation\n9C:B2:06\tProcente\tProcentec\n9C:B2:B2\tHuaweiTe\tHuawei Technologies Co.,Ltd\n9C:B6:54\tHewlettP\tHewlett Packard\n9C:B6:D0\tRivetNet\tRivet Networks\n9C:B7:0D\tLiteonTe\tLiteon Technology Corporation\n9C:B7:93\tCreatcom\tCreatcomm Technology Inc.\n9C:BB:98\tShenZhen\tShen Zhen RND Electronic Co.,LTD\n9C:BD:9D\tSkydisk\tSkyDisk, Inc.\n9C:BE:E0\tBiosound\tBiosoundlab Co., Ltd.\n9C:C0:77\tPrintcou\tPrintCounts, LLC\n9C:C0:D2\tConducti\tConductix-Wampfler GmbH\n9C:C1:72\tHuaweiTe\tHuawei Technologies Co.,Ltd\n9C:C7:A6\tAvm\tAVM GmbH\n9C:C7:D1\tSharp\tSHARP Corporation\n9C:C8:AE\tBectonDi\tBecton, Dickinson  and Company\n9C:C9:50\tBaumer\tBaumer Holding\n9C:CA:D9\tNokia\tNokia Corporation\n9C:CC:83\tJuniperN\tJuniper Networks\n9C:CD:82\tChengUei\tCheng Uei Precision Industry Co.,Ltd\n9C:D2:1E\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\n9C:D2:4B\tZte\tzte corporation\n9C:D3:32\tTechnolo\tPLC Technology Ltd\n9C:D3:5B\tSamsungE\tSamsung Electronics Co.,Ltd\n9C:D3:6D\tNetgear\t\n9C:D4:8B\tInnoluxT\tInnolux Technology Europe BV\n9C:D6:43\tD-LinkIn\tD-Link International\n9C:D9:17\tMotorola\tMotorola Mobility LLC, a Lenovo Company\n9C:D9:CB\tLesiraMa\tLesira Manufacturing Pty Ltd\n9C:DA:3E\tIntelCor\tIntel Corporate\n9C:DC:71\tHewlettP\tHewlett Packard Enterprise\n9C:DD:1F\tIntellig\tIntelligent Steward Co.,Ltd\n9C:DF:03\tHarman/B\tHarman/Becker Automotive Systems GmbH\n9C:DF:B1\tShenzhen\tShenzhen Crave Communication Co., LTD\n9C:E0:63\tSamsungE\tSamsung Electronics Co.,Ltd\n9C:E1:0E\tNctech\tNCTech Ltd\n9C:E1:D6\tJungerAu\tJunger Audio-Studiotechnik GmbH\n9C:E2:30\tJulong\tJulong Co,.Ltd.\n9C:E3:3F\tApple\tApple, Inc.\n9C:E3:74\tHuaweiTe\tHuawei Technologies Co.,Ltd\n9C:E6:35\tNintendo\tNintendo Co., Ltd.\n9C:E6:5E\tApple\tApple, Inc.\n9C:E6:E7\tSamsungE\tSamsung Electronics Co.,Ltd\n9C:E7:BD\tWindusko\tWinduskorea co., Ltd\n9C:E8:2B\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n9C:E8:95\tNewH3cTe\tNew H3C Technologies Co., Ltd\n9C:E9:51\tShenzhen\tShenzhen Sang Fei Consumer Communications Ltd., Co.\n9C:EB:E8\tBizlinkK\tBizLink (Kunshan) Co.,Ltd\n9C:EF:D5\tPandaWir\tPanda Wireless, Inc.\n9C:F3:87\tApple\tApple, Inc.\n9C:F4:8E\tApple\tApple, Inc.\n9C:F6:1A\tUtcFireA\tUTC Fire and Security\n9C:F6:7D\tRicardoP\tRicardo Prague, s.r.o.\n9C:F6:DD\tIeeeRegi\tIEEE Registration Authority\n9C:F6:DD:00:00:00/28\tAnnapurn\tannapurnalabs\n9C:F6:DD:10:00:00/28\tIthorIt\tIthor IT Co.,Ltd.\n9C:F6:DD:20:00:00/28\tBeijingS\tBeijing Sifang Automation Co., Ltd.\n9C:F6:DD:30:00:00/28\tRyeexTec\tRYEEX Technology Co.,Ltd.\n9C:F6:DD:40:00:00/28\tCapitalE\tCapital Engineering & Research Incorporation Ltd.\n9C:F6:DD:50:00:00/28\tB8ta\tb8ta Inc.\n9C:F6:DD:60:00:00/28\tShenzhen\tShenzhen Xtooltech Co., Ltd\n9C:F6:DD:70:00:00/28\tKxtTechn\tKXT Technology Co., Ltd.\n9C:F6:DD:80:00:00/28\tSavari\tSavari Inc\n9C:F6:DD:90:00:00/28\tCama（Luo\tCAMA（Luoyang）Electronics Co.，Ltd\n9C:F6:DD:A0:00:00/28\tAviPty\tAVI Pty Ltd\n9C:F6:DD:B0:00:00/28\tGuangzho\tGuangzhou LANGO Electronics Technology Co., Ltd.\n9C:F6:DD:C0:00:00/28\tLighting\tLighting New Energy Technology Co., Ltd.\n9C:F6:DD:D0:00:00/28\tFoshanSy\tFoshan Synwit Technology Co.,Ltd.\n9C:F6:DD:E0:00:00/28\tShanxiZh\tShanxi ZhuoZhi fei High Electronic Technology Co. Ltd.\n9C:F8:DB\tShenzhen\tshenzhen eyunmei technology co,.ltd\n9C:F9:38\tArevaNp\tAREVA NP GmbH\n9C:FB:D5\tVivoMobi\tvivo Mobile Communication Co., Ltd.\n9C:FB:F1\tMesomati\tMESOMATIC GmbH & Co.KG\n9C:FC:01\tApple\tApple, Inc.\n9C:FC:D1\tAetheris\tAetheris Technology (Shanghai) Co., Ltd.\n9C:FE:A1\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\n9C:FF:BE\tOtsl\tOTSL Inc.\nA0:02:DC\tAmazonTe\tAmazon Technologies Inc.\nA0:03:63\tRobertBo\tRobert Bosch Healthcare GmbH\nA0:04:3E\tParkerHa\tParker Hannifin Manufacturing Germany GmbH & Co. KG\nA0:04:60\tNetgear\t\nA0:06:27\tNexpaSys\tNEXPA System\nA0:07:98\tSamsungE\tSamsung Electronics Co.,Ltd\nA0:07:B6\tAdvanced\tAdvanced Technical Support, Inc.\nA0:08:6F\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA0:09:4C\tCenturyl\tCenturyLink\nA0:09:ED\tAvaya\tAvaya Inc\nA0:0A:BF\tWiesonTe\tWieson Technologies Co., Ltd.\nA0:0B:BA\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\nA0:0C:A1\tSktbSkit\tSKTB SKiT\nA0:10:81\tSamsungE\tSamsung Electronics Co.,Ltd\nA0:12:90\tAvaya\tAvaya Inc\nA0:12:DB\tTabuchiE\tTabuchi Electric Co.,Ltd\nA0:13:3B\tHitiDigi\tHiTi Digital, Inc.\nA0:13:CB\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nA0:14:3D\tParrotSa\tParrot Sa\nA0:16:5C\tTriteka\tTriteka LTD\nA0:18:28\tApple\tApple, Inc.\nA0:18:59\tShenzhen\tShenzhen Yidashi Electronics Co Ltd\nA0:19:17\tBertelSP\tBertel S.p.a.\nA0:19:B2\tIeeeRegi\tIEEE Registration Authority\nA0:19:B2:00:00:00/28\tVastProd\tVast Production Services\nA0:19:B2:10:00:00/28\tElSewedy\tEl Sewedy Electrometer Egypt S.A.E.\nA0:19:B2:20:00:00/28\tBeijingD\tBeijing Deephi Intelligent Technology Co., Ltd\nA0:19:B2:30:00:00/28\tPowerDia\tPower Diagnostic Service Co., LTD.\nA0:19:B2:40:00:00/28\tOsatec\t\nA0:19:B2:50:00:00/28\tSzbroadT\tSZBROAD   TECHNOLOGY (HK) CO.,LTMITED\nA0:19:B2:60:00:00/28\tGfgMbh\tGfG mbH\nA0:19:B2:70:00:00/28\tArimaCom\tARIMA Communications Corp.\nA0:19:B2:80:00:00/28\tMisIndus\tMIS Industrie Systeme GmbH & Co. KG\nA0:19:B2:90:00:00/28\tLonMicro\tLon Microsystems Inc.\nA0:19:B2:A0:00:00/28\tAdomi\t\nA0:19:B2:B0:00:00/28\tHangzhou\tHangZhou iMagic Technology Co., Ltd\nA0:19:B2:C0:00:00/28\tLdaTechn\tLDA Technologies\nA0:19:B2:D0:00:00/28\tRydElect\tRYD Electronic Technology Co.,Ltd.\nA0:19:B2:E0:00:00/28\tAhgoraSi\tAhgora Sistemas SA\nA0:1B:29\tSagemcom\tSagemcom Broadband SAS\nA0:1C:05\tNimaxTel\tNimax Telecom Co.,Ltd.\nA0:1D:48\tHewlettP\tHewlett Packard\nA0:1E:0B\tMinixTec\tMINIX Technology Limited\nA0:20:A6\tEspressi\tEspressif Inc.\nA0:21:95\tSamsungE\tSamsung Electronics Co.,Ltd\nA0:21:B7\tNetgear\t\nA0:23:1B\tTelecomp\tTeleComp R&D Corp.\nA0:23:9F\tCisco\tCisco Systems, Inc\nA0:28:33\tIeeeRegi\tIEEE Registration Authority\nA0:28:33:00:00:00/28\tGersys\tGERSYS GmbH\nA0:28:33:10:00:00/28\tOrdercub\tOrdercube GmbH\nA0:28:33:20:00:00/28\tShanghai\tShanghai Nohmi Secom Fire Protection  Equipment Co.,Ltd.\nA0:28:33:30:00:00/28\tShanghai\tShanghai Xuntai Information Technology Co.,Ltd.\nA0:28:33:40:00:00/28\tFirmInfo\tFirm INFORMTEST Ltd.\nA0:28:33:50:00:00/28\tJgrOptic\tJGR Optics Inc\nA0:28:33:60:00:00/28\tXiamenCa\tXiamen Caimore Communication Technology Co.,Ltd.\nA0:28:33:70:00:00/28\tKryptusI\tKryptus Information Security S/A\nA0:28:33:80:00:00/28\tHzhyTech\tHzhy Technology\nA0:28:33:90:00:00/28\tImeshx\tImeshx Corporation Limited\nA0:28:33:A0:00:00/28\tMedicalE\tMedical Evolution Kft\nA0:28:33:B0:00:00/28\tFlexlink\tFlexLink AB\nA0:28:33:C0:00:00/28\tKalraySA\tKalray S.A.\nA0:28:33:D0:00:00/28\tAudix\t\nA0:28:33:E0:00:00/28\tPrecisio\tPrecision Planting, LLC.\nA0:2B:B8\tHewlettP\tHewlett Packard\nA0:2C:36\tFn-LinkT\tFN-LINK TECHNOLOGY LIMITED\nA0:2E:F3\tUnitedIn\tUnited Integrated Services Co., Led.\nA0:32:99\tLenovoBe\tLenovo (Beijing) Co., Ltd.\nA0:34:1B\tTrackr\tTrackR, Inc\nA0:36:9F\tIntelCor\tIntel Corporate\nA0:36:F0\tComprehe\tComprehensive Power\nA0:36:FA\tEttusRes\tEttus Research LLC\nA0:38:F8\tOuraHeal\tOURA Health Oy\nA0:39:EE\tSagemcom\tSagemcom Broadband SAS\nA0:39:F7\tLgElectr\tLG Electronics (Mobile Communications)\nA0:3A:75\tPssBelgi\tPSS Belgium N.V.\nA0:3B:1B\tInspireT\tInspire Tech\nA0:3B:E3\tApple\tApple, Inc.\nA0:3D:6F\tCisco\tCisco Systems, Inc\nA0:3E:6B\tIeeeRegi\tIEEE Registration Authority\nA0:3E:6B:00:00:00/28\tS&TEmbed\ts&t embedded GmbH\nA0:3E:6B:10:00:00/28\tBusiness\tBusiness Support Consultant Co.,Ltd\nA0:3E:6B:20:00:00/28\tVidexEle\tVidex Electronics S.p.A.\nA0:3E:6B:30:00:00/28\tIlodaSol\tiLoda Solutions Limited\nA0:3E:6B:40:00:00/28\tShenzhen\tShenzhen Nufilo Inc.\nA0:3E:6B:50:00:00/28\tFridayLa\tFriday Lab, UAB\nA0:3E:6B:60:00:00/28\tWuhanRui\tWuhan Rui Ying Tong Network Technology Co., Ltd(China)\nA0:3E:6B:70:00:00/28\tSinogrid\tSinoGrid Software Systems Inc.\nA0:3E:6B:80:00:00/28\t718thRes\t718th  Research  Institute  of  CSIC\nA0:3E:6B:90:00:00/28\tIncognit\tIncogniteam Ltd.\nA0:3E:6B:A0:00:00/28\tShenzhen\tShenzhen Neostra Technology Co.Ltd\nA0:3E:6B:B0:00:00/28\tKocosMes\tKoCoS Messtechnik AG\nA0:3E:6B:C0:00:00/28\tQunarCom\tQunar.com\nA0:3E:6B:D0:00:00/28\tJiningSm\tJining SmartCity Infotech Co.Ltd.\nA0:3E:6B:E0:00:00/28\tNanjingZ\tNanjing zhanyi software technology co., LTD\nA0:3E:6B:F0:00:00/28\tPrivate\t\nA0:40:25\tActionca\tActioncable, Inc.\nA0:40:41\tSamwonfa\tSAMWONFA Co.,Ltd.\nA0:40:A0\tNetgear\t\nA0:41:5E\tOpsensSo\tOpsens Solution Inc.\nA0:41:A7\tNlMinist\tNL Ministry of Defense\nA0:42:3F\tTyanComp\tTyan Computer Corp\nA0:43:DB\tSitaelSP\tSitael S.p.A.\nA0:48:1C\tHewlettP\tHewlett Packard\nA0:4C:5B\tShenzhen\tShenzhen TINNO Mobile Technology Corp.\nA0:4C:C1\tHelixtec\tHelixtech Corp.\nA0:4E:01\tCentralE\tCENTRAL ENGINEERING co.,ltd.\nA0:4E:04\tNokia\tNokia Corporation\nA0:4E:A7\tApple\tApple, Inc.\nA0:4F:D4\tAdbBroad\tADB Broadband Italia\nA0:51:C6\tAvaya\tAvaya Inc\nA0:55:4F\tCisco\tCisco Systems, Inc\nA0:55:DE\tArrisGro\tARRIS Group, Inc.\nA0:56:B2\tHarman/B\tHarman/Becker Automotive Systems GmbH\nA0:56:F3\tApple\tApple, Inc.\nA0:57:E3\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA0:59:3A\tVDSVideo\tV.D.S. Video Display Systems srl\nA0:5A:A4\tGrandPro\tGrand Products Nevada, Inc.\nA0:5B:21\tEnvinet\tENVINET GmbH\nA0:5D:C1\tTmct\tTMCT Co., LTD.\nA0:5D:E7\tDirectv\tDIRECTV, Inc.\nA0:5E:6B\tMelper\tMELPER Co., Ltd.\nA0:60:90\tSamsungE\tSamsung Electronics Co.,Ltd\nA0:63:91\tNetgear\t\nA0:64:8F\tAskeyCom\tAskey Computer Corp\nA0:65:18\tVnptTech\tVnpt Technology\nA0:66:10\tFujitsu\tFujitsu Limited\nA0:67:BE\tSiconSrl\tSicon srl\nA0:69:86\tWellavTe\tWellav Technologies Ltd\nA0:6A:00\tVerilink\tVerilink Corporation\nA0:6A:44\tVizio\tVizio, Inc\nA0:6C:EC\tRim\t\nA0:6D:09\tIntelcan\tIntelcan Technosystems Inc.\nA0:6E:50\tNanotekE\tNanotek Elektronik Sistemler Ltd. Sti.\nA0:6F:AA\tLgInnote\tLG Innotek\nA0:70:99\tBeijingH\tBeijing Huacan Electronics Co., Ltd\nA0:71:A9\tNokia\tNokia Corporation\nA0:72:2C\tHumax\tHUMAX Co., Ltd.\nA0:72:E4\tNjSystem\tNj System Co.,Ltd\nA0:73:32\tCashmast\tCashmaster International Limited\nA0:73:FC\tRancoreT\tRancore Technologies Private Limited\nA0:75:91\tSamsungE\tSamsung Electronics Co.,Ltd\nA0:75:EA\tBoxlock\tBoxLock, Inc.\nA0:77:71\tVialisBv\tVialis BV\nA0:78:BA\tPantech\tPantech Co., Ltd.\nA0:82:1F\tSamsungE\tSamsung Electronics Co.,Ltd\nA0:82:AC\tLinearDm\tLinear DMS Solutions Sdn. Bhd.\nA0:82:C7\tPTI\tP.T.I Co.,LTD\nA0:84:CB\tSonicsen\tSonicSensory,Inc.\nA0:86:1D\tChengduF\tChengdu Fuhuaxin Technology co.,Ltd\nA0:86:C6\tXiaomiCo\tXiaomi Communications Co Ltd\nA0:86:EC\tSaehanHi\tSAEHAN HITEC Co., Ltd\nA0:88:69\tIntelCor\tIntel Corporate\nA0:88:B4\tIntelCor\tIntel Corporate\nA0:89:E4\tSkyworth\tSkyworth Digital Technology(Shenzhen) Co.,Ltd\nA0:8A:87\tHuizhouK\tHuiZhou KaiYue Electronic Co.,Ltd\nA0:8C:15\tGerhardD\tGerhard D. Wempe KG\nA0:8C:9B\tXtremeTe\tXtreme Technologies Corp\nA0:8C:F8\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA0:8C:FD\tHewlettP\tHewlett Packard\nA0:8D:16\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA0:8E:78\tSagemcom\tSagemcom Broadband SAS\nA0:90:DE\tVeedimsL\tVeedims,Llc\nA0:91:69\tLgElectr\tLG Electronics (Mobile Communications)\nA0:91:C8\tZte\tzte corporation\nA0:93:47\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nA0:93:51\tCisco\tCisco Systems, Inc\nA0:95:0C\tChinaMob\tChina Mobile IOT Company Limited\nA0:98:05\tOpenvoxC\tOpenVox Communication Co Ltd\nA0:98:ED\tShandong\tShandong Intelligent Optical Communication Development Co., Ltd.\nA0:99:9B\tApple\tApple, Inc.\nA0:9A:5A\tTimeDoma\tTime Domain\nA0:9B:BD\tTotalAvi\tTotal Aviation Solutions Pty Ltd\nA0:9D:86\tAlcatel-\tAlcatel-Lucent Shanghai Bell Co., Ltd\nA0:9D:91\tSoundbri\tSoundBridge\nA0:9D:C1\tChinaDra\tChina Dragon Technology Limited\nA0:9E:1A\tPolarEle\tPolar Electro Oy\nA0:A1:30\tDliTaiwa\tDLI Taiwan Branch office\nA0:A2:3C\tGpms\t\nA0:A3:3B\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA0:A3:E2\tActionte\tActiontec Electronics, Inc\nA0:A4:C5\tIntelCor\tIntel Corporate\nA0:A6:5C\tSupercom\tSupercomputing Systems AG\nA0:A7:63\tPolytron\tPolytron Vertrieb GmbH\nA0:A8:CD\tIntelCor\tIntel Corporate\nA0:AA:FD\tErathink\tEraThink Technologies Corp.\nA0:AB:1B\tD-LinkIn\tD-Link International\nA0:AD:A1\tJmrElect\tJMR Electronics, Inc\nA0:AF:BD\tIntelCor\tIntel Corporate\nA0:B0:45\tHalongMi\tHalong Mining\nA0:B1:00\tShenzhen\tShenZhen Cando Electronics Co.,Ltd\nA0:B3:CC\tHewlettP\tHewlett Packard\nA0:B4:37\tGdMissio\tGD Mission Systems\nA0:B4:A5\tSamsungE\tSamsung Electronics Co.,Ltd\nA0:B5:DA\tHongkong\tHongKong THTF Co., Ltd\nA0:B6:62\tAcutvist\tAcutvista Innovation Co., Ltd.\nA0:B8:F8\tAmgenUSA\tAmgen U.S.A. Inc.\nA0:B9:ED\tSkytap\t\nA0:BA:B8\tPixonIma\tPixon Imaging\nA0:BB:3E\tIeeeRegi\tIEEE Registration Authority\nA0:BB:3E:00:00:00/28\tLinkLabs\tLink Labs\nA0:BB:3E:10:00:00/28\tIvisionE\tIVision Electronics Co.,Ltd\nA0:BB:3E:20:00:00/28\tDirectou\tDirectOut GmbH\nA0:BB:3E:30:00:00/28\tWiterive\tWiteRiver Technology LLC\nA0:BB:3E:40:00:00/28\tComsysCo\tCOMSYS Communications Systems Service GmbH\nA0:BB:3E:50:00:00/28\tMantechI\tManTech International Corporation\nA0:BB:3E:60:00:00/28\tXiamenKe\tXiamen Kehua Hengsheng Co.,Ltd\nA0:BB:3E:70:00:00/28\tSimtecEl\tSIMTEC Elektronik GmbH\nA0:BB:3E:80:00:00/28\tAutarcte\tAutarcTech GmbH\nA0:BB:3E:90:00:00/28\tSandal\tSandal Plc\nA0:BB:3E:A0:00:00/28\tFiloSrl\tFilo SRL\nA0:BB:3E:B0:00:00/28\tBeijingT\tBeijing Techshino Technology Co., Ltd.\nA0:BB:3E:C0:00:00/28\tEwigIndu\tEwig Industries Macao Commercial Offshore Ltd\nA0:BB:3E:D0:00:00/28\tShenzhen\tShenzhen Talent Technology company limited\nA0:BB:3E:E0:00:00/28\tMesstech\tMesstechnik Sachs GmbH\nA0:BB:3E:F0:00:00/28\tPrivate\t\nA0:BD:CD\tBskyb\tBSkyB Ltd\nA0:BF:50\tSCAdd-Pr\tS.C. ADD-PRODUCTION S.R.L.\nA0:BF:A5\tCoresys\t\nA0:C2:DE\tCostarVi\tCostar Video Systems\nA0:C3:DE\tTritonEl\tTriton Electronic Systems Ltd.\nA0:C4:A5\tSygnHous\tSygn House Co.,Ltd\nA0:C5:62\tArrisGro\tARRIS Group, Inc.\nA0:C5:89\tIntelCor\tIntel Corporate\nA0:C5:F2\tIeeeRegi\tIEEE Registration Authority\nA0:C5:F2:00:00:00/28\tQuantlab\tQuantlab Financial, LLC\nA0:C5:F2:10:00:00/28\tKnsGroup\tKNS Group LLC (YADRO Company)\nA0:C5:F2:20:00:00/28\tSpeedgoa\tSpeedgoat GmbH\nA0:C5:F2:30:00:00/28\tShenzhen\tShenzhen Feima Robotics Technology Co.,Ltd\nA0:C5:F2:40:00:00/28\tAicare\tAiCare Corp.\nA0:C5:F2:50:00:00/28\tTangoWav\tTango Wave\nA0:C5:F2:60:00:00/28\tShenzhen\tShenZhen JuWangShi Tech\nA0:C5:F2:70:00:00/28\tViettron\tViettronimex JSC\nA0:C5:F2:80:00:00/28\tCoolrGro\tCoolR Group Inc\nA0:C5:F2:90:00:00/28\tImpulseN\tImpulse Networks Pte Ltd\nA0:C5:F2:A0:00:00/28\tSeriousI\tSerious Integrated, Inc.\nA0:C5:F2:B0:00:00/28\tOrayCom\tOray.com co., LTD.\nA0:C5:F2:C0:00:00/28\tGlooko\tGlooko inc\nA0:C5:F2:D0:00:00/28\tUnaliwea\tUnaliWear, Inc.\nA0:C5:F2:E0:00:00/28\tSynapsys\tSynapsys Solutions Ltd.\nA0:C6:EC\tShenzhen\tShenZhen ANYK Technology Co.,LTD\nA0:C9:A0\tMurataMa\tMurata Manufacturing Co., Ltd.\nA0:CB:FD\tSamsungE\tSamsung Electronics Co.,Ltd\nA0:CC:2B\tMurataMa\tMurata Manufacturing Co., Ltd.\nA0:CE:C8\tCeLink\tCe Link Limited\nA0:CF:5B\tCisco\tCisco Systems, Inc\nA0:D1:2A\tAxproTec\tAXPRO Technology Inc.\nA0:D3:7A\tIntelCor\tIntel Corporate\nA0:D3:85\tAumaRies\tAUMA Riester GmbH & Co. KG\nA0:D3:C1\tHewlettP\tHewlett Packard\nA0:D6:35\tWbsTechn\tWBS Technology\nA0:D7:95\tApple\tApple, Inc.\nA0:D8:6F\tPrivate\t\nA0:DA:92\tNanjingG\tNanjing Glarun Atten Technology Co. Ltd.\nA0:DC:04\tBecker-A\tBecker-Antriebe GmbH\nA0:DD:97\tPolarlin\tPolarLink Technologies, Ltd\nA0:DD:E5\tSharp\tSHARP Corporation\nA0:DE:05\tJscIrbis\tJSC Irbis-T\nA0:E0:AF\tCisco\tCisco Systems, Inc\nA0:E2:01\tAvtraceC\tAVTrace Ltd.(China)\nA0:E2:5A\tAmicusSk\tAmicus SK, s.r.o.\nA0:E2:95\tDatSyste\tDAT System Co.,Ltd\nA0:E4:53\tSonyMobi\tSony Mobile Communications Inc\nA0:E4:CB\tZyxelCom\tZyxel Communications Corporation\nA0:E5:34\tStratecB\tStratec Biomedical AG\nA0:E5:E9\tEnimai\tenimai Inc\nA0:E6:17\tMatis\t\nA0:E6:F8\tTexasIns\tTexas Instruments\nA0:E9:DB\tNingboFr\tNingbo FreeWings Technologies Co.,Ltd\nA0:EB:76\tAircuve\tAirCUVE Inc.\nA0:EC:80\tZte\tzte corporation\nA0:EC:F9\tCisco\tCisco Systems, Inc\nA0:ED:CD\tApple\tApple, Inc.\nA0:EF:84\tSeineIma\tSeine Image Int'l Co., Ltd\nA0:F2:17\tGeMedica\tGE Medical System(China) Co., Ltd.\nA0:F3:C1\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nA0:F3:E4\tAlcatel-\tAlcatel-Lucent IPD\nA0:F4:19\tNokia\tNokia Corporation\nA0:F4:50\tHtc\tHTC Corporation\nA0:F4:59\tFn-LinkT\tFN-LINK TECHNOLOGY LIMITED\nA0:F4:79\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA0:F6:FD\tTexasIns\tTexas Instruments\nA0:F8:49\tCisco\tCisco Systems, Inc\nA0:F8:95\tShenzhen\tShenzhen TINNO Mobile Technology Corp.\nA0:F9:E0\tVivatel\tVivatel Company Limited\nA0:FC:6E\tTelegraf\tTelegrafia a.s.\nA0:FE:61\tVivintWi\tVivint Wireless Inc.\nA0:FE:91\tAvatAuto\tAVAT Automation GmbH\nA4:01:30\tAbisyste\tABIsystems Co., LTD\nA4:02:B9\tIntelCor\tIntel Corporate\nA4:04:50\tNforeTec\tnFore Technology Inc.\nA4:05:9E\tStaInfin\tSTA Infinity LLP\nA4:07:B6\tSamsungE\tSamsung Electronics Co.,Ltd\nA4:08:EA\tMurataMa\tMurata Manufacturing Co., Ltd.\nA4:08:F5\tSagemcom\tSagemcom Broadband SAS\nA4:09:CB\tAlfredKa\tAlfred Kaercher GmbH &amp; Co KG\nA4:0B:ED\tCarryTec\tCarry Technology Co.,Ltd\nA4:0C:C3\tCisco\tCisco Systems, Inc\nA4:0D:BC\tXiamenIn\tXiamen Intretech Inc.\nA4:0E:2B\tFacebook\tFacebook Inc\nA4:11:15\tRobertBo\tRobert Bosch Engineering and Business Solutions pvt. Ltd.\nA4:11:63\tIeeeRegi\tIEEE Registration Authority\nA4:11:63:00:00:00/28\tAdetelEq\tAdetel Equipment\nA4:11:63:10:00:00/28\tInterCon\tINTER CONTROL Hermann Köhler Elektrik GmbH & Co.KG\nA4:11:63:20:00:00/28\tAllgoTec\tAllgo Tech. (Beijing) Co.,Ltd\nA4:11:63:30:00:00/28\tPax\t\nA4:11:63:40:00:00/28\tAlterg\tAlterG, Inc.\nA4:11:63:50:00:00/28\tCarbon\tCarbon, Inc.\nA4:11:63:60:00:00/28\tBeijingX\tBeijing XiaoRui Technology Co., Ltd\nA4:11:63:70:00:00/28\tShenzhen\tShenzhen Yiwanjia Information Technology Co.,Ltd\nA4:11:63:80:00:00/28\tDspreadT\tDspread Technology (Beijing) Inc.\nA4:11:63:90:00:00/28\tAccessoT\taccesso Technology Group\nA4:11:63:A0:00:00/28\tIse\tISE GmbH\nA4:11:63:B0:00:00/28\tMoogMusi\tMoog Music Inc.\nA4:11:63:C0:00:00/28\tViloc\t\nA4:11:63:D0:00:00/28\tShenzhen\tShenzhen Zhishi Technology Co., Ltd.\nA4:11:63:E0:00:00/28\tTinylogi\ttinylogics\nA4:11:94\tLenovo\t\nA4:12:42\tNecPlatf\tNEC Platforms, Ltd.\nA4:13:4E\tLuxul\t\nA4:14:37\tHangzhou\tHangzhou Hikvision Digital Technology Co.,Ltd.\nA4:15:66\tWeifangG\tWeifang Goertek Electronics Co.,Ltd\nA4:15:88\tArrisGro\tARRIS Group, Inc.\nA4:17:31\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nA4:18:75\tCisco\tCisco Systems, Inc\nA4:1B:C0\tFastecIm\tFastec Imaging Corporation\nA4:1F:72\tDell\tDell Inc.\nA4:21:8A\tNortelNe\tNortel Networks\nA4:23:05\tOpenNetw\tOpen Networking Laboratory\nA4:24:B3\tFlatfrog\tFlatFrog Laboratories AB\nA4:24:DD\tCambrion\tCambrionix Ltd\nA4:25:1B\tAvaya\tAvaya Inc\nA4:26:18\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\nA4:29:40\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\nA4:29:83\tBoeingDe\tBoeing Defence Australia\nA4:29:B7\tBluesky\t\nA4:2B:8C\tNetgear\t\nA4:2B:B0\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nA4:2C:08\tMasterwo\tMasterwork Automodules\nA4:31:11\tZiv\t\nA4:31:35\tApple\tApple, Inc.\nA4:33:D1\tFibrlink\tFibrlink Communications Co.,Ltd.\nA4:33:D7\tMitrasta\tMitraStar Technology Corp.\nA4:34:12\tThalesAl\tThales Alenia Space\nA4:34:D9\tIntelCor\tIntel Corporate\nA4:34:F1\tTexasIns\tTexas Instruments\nA4:35:23\tGuangdon\tGuangdong Donyan Network Technologies Co.,Ltd.\nA4:38:31\tRfElemen\tRF elements s.r.o.\nA4:38:CC\tNintendo\tNintendo Co.,Ltd\nA4:38:FC\tPlasticL\tPlastic Logic\nA4:3A:69\tVers\tVers Inc\nA4:3B:FA\tIeeeRegi\tIEEE Registration Authority\nA4:3B:FA:00:00:00/28\tChengduT\tChengdu Territory Technology Co.,Ltd\nA4:3B:FA:10:00:00/28\tBeijingU\tBeijing Uniwill Science and Technology Co,Ltd\nA4:3B:FA:20:00:00/28\tPowellIn\tPowell Industries\nA4:3B:FA:30:00:00/28\tCircusWo\tCircus World Displays Ltd\nA4:3B:FA:40:00:00/28\tMaxonAus\tMaxon Australia\nA4:3B:FA:50:00:00/28\tBoiSolut\tBOI Solutions\nA4:3B:FA:60:00:00/28\tRecognit\tRecognition Systems LLC\nA4:3B:FA:70:00:00/28\tDeatroni\tDeatronic srl\nA4:3B:FA:80:00:00/28\tAlpwise\t\nA4:3B:FA:90:00:00/28\tShenZhen\tShen Zhen Pasun Tech Co.Ltd.\nA4:3B:FA:A0:00:00/28\tPlusOneJ\tPlus One Japan Ltd.\nA4:3B:FA:B0:00:00/28\tAlstomSt\tALSTOM Strongwish (Shenzhen) Co., Ltd\nA4:3B:FA:C0:00:00/28\tShanghai\tShanghai Xietong Technology Inc.\nA4:3B:FA:D0:00:00/28\tJsc“Comp\tJSC “Component-ASU”\nA4:3B:FA:E0:00:00/28\tMagstim\tThe Magstim Company Ltd.\nA4:3B:FA:F0:00:00/28\tPrivate\t\nA4:3D:78\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nA4:3E:51\tAnovFran\tAnov France\nA4:40:27\tZte\tzte corporation\nA4:44:D1\tWingtech\tWingtech Group (HongKong）Limited\nA4:46:6B\tEocTechn\tEOC Technology\nA4:46:FA\tAmtranVi\tAmTRAN Video Corporation\nA4:4A:D3\tStElectr\tST Electronics(Shanghai) Co.,Ltd\nA4:4B:15\tSunCupid\tSun Cupid Technology (HK) LTD\nA4:4C:11\tCisco\tCisco Systems, Inc\nA4:4C:C8\tDell\tDell Inc.\nA4:4E:2D\tAdaptive\tAdaptive Wireless Solutions, LLC\nA4:4E:31\tIntelCor\tIntel Corporate\nA4:4F:29\tIeeeRegi\tIEEE Registration Authority\nA4:4F:29:00:00:00/28\tDermalog\tDermalog Identification Systems GmbH\nA4:4F:29:10:00:00/28\tOlssenBV\tOlssen B.V.\nA4:4F:29:20:00:00/28\tLuceor\t\nA4:4F:29:30:00:00/28\tComselSy\tComsel System Ltd\nA4:4F:29:40:00:00/28\tDgcAcces\tDGC Access AB\nA4:4F:29:50:00:00/28\tShanghai\tShanghai KuanYu Industrial Network Equipment Co.,Ltd\nA4:4F:29:60:00:00/28\tSelektro\tSelektro Power Inc\nA4:4F:29:70:00:00/28\tProteanP\tProtean Payment\nA4:4F:29:80:00:00/28\tInnovati\tInnovations in Optics, Inc.\nA4:4F:29:90:00:00/28\tCertiNet\tCerti Networks Sdn Bhd\nA4:4F:29:A0:00:00/28\tHtd\t\nA4:4F:29:B0:00:00/28\tGuangdon\tGUANGDONG REAL-DESIGN INTELLIGENT TECHNOLOGY CO.,LTD\nA4:4F:29:C0:00:00/28\tShenzhen\tShenzhen Huadoo Bright Group Limitied\nA4:4F:29:D0:00:00/28\tHallibur\tHalliburton\nA4:4F:29:E0:00:00/28\tNeotechP\tNeotech Systems Pvt. Ltd.\nA4:4F:29:F0:00:00/28\tPrivate\t\nA4:50:46\tXiaomiCo\tXiaomi Communications Co Ltd\nA4:50:55\tBuswareD\tBusware.De\nA4:51:6F\tMicrosof\tMicrosoft Mobile Oy\nA4:52:6F\tAdbBroad\tADB Broadband Italia\nA4:53:85\tWeifangG\tWeifang Goertek Electronics Co.,Ltd\nA4:56:02\tFenglian\tfenglian Technology Co.,Ltd.\nA4:56:1B\tMcot\tMCOT Corporation\nA4:56:30\tCisco\tCisco Systems, Inc\nA4:56:CC\tTechnico\tTechnicolor CH USA Inc.\nA4:58:0F\tIeeeRegi\tIEEE Registration Authority\nA4:58:0F:00:00:00/28\tInnopro\t\nA4:58:0F:10:00:00/28\tStoneLoc\tStone Lock Global, Inc.\nA4:58:0F:20:00:00/28\tBloks\tBLOKS. GmbH\nA4:58:0F:30:00:00/28\tEngineer\tEngineered SA\nA4:58:0F:40:00:00/28\tShenzhen\tShenzhen City billion Leiden science and Technology Co., Ltd.\nA4:58:0F:50:00:00/28\tCoasiaMi\tCoAsia Microelectronics Corp.\nA4:58:0F:60:00:00/28\tAstro\tAstro, Inc\nA4:58:0F:70:00:00/28\tChangsha\tChangsha Tai Hui Network Technology Co.,Ltd\nA4:58:0F:80:00:00/28\tAirLiqui\tAir Liquide Medical Systems\nA4:58:0F:90:00:00/28\tKseniaSe\tKsenia Security srl\nA4:58:0F:A0:00:00/28\tGuangzho\tGuangzhou Optical Bridge Communication Equipment Co.,Ltd.\nA4:58:0F:B0:00:00/28\tAbbPghv\tAbb Ab Pghv\nA4:58:0F:C0:00:00/28\tHomebeav\tHomebeaver\nA4:58:0F:D0:00:00/28\tEyeIoLlc\tEye Io, Llc\nA4:58:0F:E0:00:00/28\tFinetree\tFinetree Communications Inc\nA4:5A:1C\tSmart-El\tsmart-electronic GmbH\nA4:5C:27\tNintendo\tNintendo Co., Ltd.\nA4:5D:36\tHewlettP\tHewlett Packard\nA4:5D:A1\tAdbBroad\tADB Broadband Italia\nA4:5E:60\tApple\tApple, Inc.\nA4:60:11\tVerifone\t\nA4:60:32\tMrvCommu\tMRV Communications (Networks) LTD\nA4:61:91\tNamjunsa\t\nA4:62:DF\tDsGlobal\tDS Global. Co., LTD\nA4:67:06\tApple\tApple, Inc.\nA4:68:BC\tPrivate\t\nA4:6C:2A\tCisco\tCisco Systems, Inc\nA4:6C:C1\tLtiReene\tLTi REEnergy GmbH\nA4:6C:F1\tSamsungE\tSamsung Electronics Co.,Ltd\nA4:6E:79\tDftSyste\tDFT System Co.Ltd\nA4:70:D6\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nA4:71:74\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA4:77:33\tGoogle\tGoogle, Inc.\nA4:77:58\tNingboFr\tNingbo Freewings Technologies Co.,Ltd\nA4:77:60\tNokia\tNokia Corporation\nA4:78:86\tAvaya\tAvaya Inc\nA4:79:E4\tKlinfo\tKLINFO Corp\nA4:7A:A4\tArrisGro\tARRIS Group, Inc.\nA4:7A:CF\tVibicomC\tVibicom Communications Inc.\nA4:7B:2C\tNokia\t\nA4:7B:85\tUltimedi\tULTIMEDIA Co Ltd,\nA4:7B:9D\tEspressi\tEspressif Inc.\nA4:7C:14\tChargest\tChargeStorm AB\nA4:7C:1F\tCobham\tCobham plc\nA4:7E:39\tZte\tzte corporation\nA4:81:EE\tNokia\tNokia Corporation\nA4:82:69\tDatrium\tDatrium, Inc.\nA4:84:31\tSamsungE\tSamsung Electronics Co.,Ltd\nA4:85:6B\tQElectro\tQ Electronics Ltd\nA4:86:AE\tQuectelW\tQuectel Wireless Solutions\nA4:89:5B\tArkInfos\tArk Infosolutions Pvt Ltd\nA4:8C:DB\tLenovo\t\nA4:8D:3B\tVizio\tVizio, Inc\nA4:8E:0A\tDelavalI\tDeLaval International AB\nA4:90:05\tChinaGre\tChina Greatwall Computer Shenzhen Co.,Ltd\nA4:91:B1\tTechnico\tTechnicolor\nA4:92:CB\tNokia\t\nA4:93:3F\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA4:93:4C\tCisco\tCisco Systems, Inc\nA4:97:BB\tHitachiI\tHitachi Industrial Equipment Systems Co.,Ltd\nA4:99:47\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA4:99:81\tFujianEl\tFuJian Elite Power Tech CO.,LTD.\nA4:9A:58\tSamsungE\tSamsung Electronics Co.,Ltd\nA4:9B:13\tDigitalC\tDigital Check\nA4:9B:4F\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA4:9B:F5\tHybridse\tHybridserver Tec GmbH\nA4:9D:49\tKetra\tKetra, Inc.\nA4:9E:DB\tAutocrib\tAutoCrib, Inc.\nA4:9F:85\tLyveMind\tLyve Minds, Inc\nA4:9F:89\tShanghai\tShanghai Rui Rui Communication Technology Co.Ltd.\nA4:A1:C2\tEricsson\tEricsson AB\nA4:A1:E4\tInnotube\tInnotube, Inc.\nA4:A2:4A\tCiscoSpv\tCisco SPVTG\nA4:A4:D3\tBluebank\tBluebank Communication Technology Co.Ltd\nA4:A6:A9\tPrivate\t\nA4:A8:0F\tShenzhen\tShenzhen Coship Electronics Co., Ltd.\nA4:AD:00\tRagsdale\tRagsdale Technology\nA4:AD:B8\tVitecGro\tVitec Group, Camera Dynamics Ltd\nA4:AE:9A\tMaestroW\tMaestro Wireless Solutions ltd.\nA4:B1:21\tArantia2\tArantia 2010 S.L.\nA4:B1:97\tApple\tApple, Inc.\nA4:B1:E9\tTechnico\tTechnicolor\nA4:B1:EE\tHZander\tH. ZANDER GmbH & Co. KG\nA4:B2:A7\tAdaxysSo\tAdaxys Solutions AG\nA4:B3:6A\tJscSdoCh\tJSC SDO Chromatec\nA4:B5:2E\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\nA4:B8:05\tApple\tApple, Inc.\nA4:B8:18\tPentaGes\tPENTA Gesellschaft für elektronische Industriedatenverarbeitung mbH\nA4:B9:80\tParkingB\tParking BOXX Inc.\nA4:BA:76\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA4:BA:DB\tDell\tDell Inc.\nA4:BB:AF\tLimeInst\tLime Instruments\nA4:BE:2B\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA4:BE:61\tEutrovis\tEutroVision System, Inc.\nA4:BF:01\tIntelCor\tIntel Corporate\nA4:C0:C7\tShenzhen\tShenZhen Hitom Communication Technology Co..LTD\nA4:C0:E1\tNintendo\tNintendo Co., Ltd.\nA4:C1:38\tTelinkSe\tTelink Semiconductor (Taipei) Co. Ltd.\nA4:C2:AB\tHangzhou\tHangzhou LEAD-IT Information & Technology Co.,Ltd\nA4:C3:61\tApple\tApple, Inc.\nA4:C4:94\tIntelCor\tIntel Corporate\nA4:C6:4F\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA4:C7:DE\tCambridg\tCambridge Industries(Group) Co.,Ltd.\nA4:CA:A0\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA4:CC:32\tInficomm\tInficomm Co., Ltd\nA4:D0:94\tErwinPet\tErwin Peters Systemtechnik GmbH\nA4:D1:8C\tApple\tApple, Inc.\nA4:D1:8F\tShenzhen\tShenzhen Skyee Optical Fiber Communication Technology Ltd.\nA4:D1:D1\tEcotalit\tECOtality North America\nA4:D1:D2\tApple\tApple, Inc.\nA4:D3:B5\tGlitelSt\tGLITEL Stropkov, s.r.o.\nA4:D4:B2\tShenzhen\tShenzhen MeiG Smart Technology Co.,Ltd\nA4:D5:78\tTexasIns\tTexas Instruments\nA4:D8:56\tGimbal\tGimbal, Inc\nA4:D8:CA\tHongKong\tHong Kong Water World Technology Co. Limited\nA4:D9:31\tApple\tApple, Inc.\nA4:D9:90\tSamsungE\tSamsung Electronics Co.,Ltd\nA4:D9:A4\tNexusIdS\tneXus ID Solutions AB\nA4:DA:22\tIeeeRegi\tIEEE Registration Authority\nA4:DA:22:00:00:00/28\tGeneralE\tGeneral Electric Company\nA4:DA:22:10:00:00/28\tT2tSyste\tT2T System\nA4:DA:22:20:00:00/28\tWyzeLabs\tWyze Labs Inc\nA4:DA:22:30:00:00/28\tDuratech\tDURATECH Enterprise,LLC\nA4:DA:22:40:00:00/28\tLoriot\tLoriot Ag\nA4:DA:22:50:00:00/28\tOriginal\tOriginal Products Pvt. Ltd.\nA4:DA:22:60:00:00/28\tAuranext\t\nA4:DA:22:70:00:00/28\tHydroEle\tHydro Electronic Devices, Inc.\nA4:DA:22:80:00:00/28\tSolidpro\tSolidPro Technology Corporation\nA4:DA:22:90:00:00/28\tMalldonT\tMalldon Technology Limited\nA4:DA:22:A0:00:00/28\tAbetechs\tAbetechs GmbH\nA4:DA:22:B0:00:00/28\tKlashwer\tKlashwerks Inc.\nA4:DA:22:C0:00:00/28\tEhoLink\tEho.Link\nA4:DA:22:D0:00:00/28\tShenZhen\tShen Zhen City YaKun Electronics Co., Ltd\nA4:DA:22:E0:00:00/28\tQuuppaOy\tQuuppa Oy\nA4:DA:32\tTexasIns\tTexas Instruments\nA4:DA:3F\tBionics\tBionics Corp.\nA4:DB:2E\tKingspan\tKingspan Environmental Ltd\nA4:DB:30\tLiteonTe\tLiteon Technology Corporation\nA4:DC:BE\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA4:DE:50\tTotalWal\tTotal Walther GmbH\nA4:DE:C9\tQloveMob\tQLove Mobile Intelligence Information Technology (W.H.) Co. Ltd.\nA4:E0:E6\tFilizola\tFilizola S.A. Pesagem E Automacao\nA4:E3:2E\tSiliconS\tSilicon & Software Systems Ltd.\nA4:E3:91\tDenyFont\tDeny Fontaine\nA4:E4:B8\tBlackber\tBlackBerry RTS\nA4:E5:97\tGessler\tGessler GmbH\nA4:E6:15\tShenzhen\tSHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\nA4:E6:B1\tShanghai\tShanghai Joindata Technology Co.,Ltd.\nA4:E7:31\tNokia\tNokia Corporation\nA4:E7:E4\tConnex\tConnex GmbH\nA4:E9:75\tApple\tApple, Inc.\nA4:E9:91\tSistemas\tSistemas Audiovisuales Itelsis S.L.\nA4:E9:A3\tHonestTe\tHonest Technology Co., Ltd\nA4:EA:8E\tExtremeN\tExtreme Networks, Inc.\nA4:EB:D3\tSamsungE\tSamsung Electronics Co.,Ltd\nA4:ED:43\tIeeeRegi\tIEEE Registration Authority\nA4:ED:43:00:00:00/28\tSweam\tSweam AB\nA4:ED:43:10:00:00/28\tIngelabs\tIngelabs S.L.\nA4:ED:43:20:00:00/28\tShanghai\tShanghai Mission Information Technologies (Group) Co.,Ltd\nA4:ED:43:30:00:00/28\tDongguan\tDongguan Mingji Electronics technology Group Co., Ltd.\nA4:ED:43:40:00:00/28\tNetasTel\tNetas Telekomunikasyon A.S.\nA4:ED:43:50:00:00/28\tBeijingI\tBeijing ICPC CO.,Ltd.\nA4:ED:43:60:00:00/28\tShanghai\tShanghai  Facom  Electronics Technology  Co, ltd.\nA4:ED:43:70:00:00/28\tWuxiJunc\tWuxi Junction Infomation Technology Incorporated Company\nA4:ED:43:80:00:00/28\tLinseisM\tLinseis Messgeraete GmbH\nA4:ED:43:90:00:00/28\tHeyuanIn\tHeyuan intelligence technology CO.,Ltd\nA4:ED:43:A0:00:00/28\tGuangzho\tGuangzhou Maxfaith Communication Technology Co.,LTD.\nA4:ED:43:B0:00:00/28\tParagonB\tParagon Business Solutions Ltd.\nA4:ED:43:C0:00:00/28\tLeaksmar\tleakSMART\nA4:ED:43:D0:00:00/28\tBrandNew\tBrand New Brand Nordic AB\nA4:ED:43:E0:00:00/28\tToecTech\tTOEC TECHNOLOGY CO.，LTD.\nA4:ED:4E\tArrisGro\tARRIS Group, Inc.\nA4:EE:57\tSeikoEps\tSeiko Epson Corporation\nA4:EF:52\tTelewave\tTelewave Co., Ltd.\nA4:F1:E8\tApple\tApple, Inc.\nA4:F3:C1\tOpenSour\tOpen Source Robotics Foundation, Inc.\nA4:F3:E7\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\nA4:F4:C2\tVnptTech\tVnpt Technology\nA4:F5:22\tChofuSei\tChofu Seisakusho Co.,Ltd\nA4:F7:D0\tLanAcces\tLAN Accessories Co., Ltd.\nA4:FB:8D\tHangzhou\tHangzhou Dunchong Technology Co.Ltd\nA4:FC:77\tMegaWell\tMega Well Limited\nA4:FC:CE\tSecurity\tSecurity Expert Ltd.\nA8:01:6D\tAiwa\tAiwa Corporation\nA8:01:80\tImagoTec\tIMAGO Technologies GmbH\nA8:06:00\tSamsungE\tSamsung Electronics Co.,Ltd\nA8:0C:0D\tCisco\tCisco Systems, Inc\nA8:0C:63\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA8:0C:CA\tShenzhen\tShenzhen Sundray Technologies Company Limited\nA8:10:87\tTexasIns\tTexas Instruments\nA8:11:FC\tArrisGro\tARRIS Group, Inc.\nA8:13:74\tPanasoni\tPanasonic Corporation AVC Networks Company\nA8:15:4D\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nA8:15:59\tBreathom\tBreathometer, Inc.\nA8:15:D6\tShenzhen\tShenzhen Meione Technology CO., LTD\nA8:16:B2\tLgElectr\tLG Electronics (Mobile Communications)\nA8:16:D0\tSamsungE\tSamsung Electronics Co.,Ltd\nA8:17:58\tElektron\tElektronik System i Umeå AB\nA8:1B:18\tXts\tXts Corp\nA8:1B:5A\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nA8:1B:5D\tFoxtelMa\tFoxtel Management Pty Ltd\nA8:1B:6A\tTexasIns\tTexas Instruments\nA8:1D:16\tAzurewav\tAzureWave Technology Inc.\nA8:1E:84\tQuantaCo\tQuanta Computer Inc.\nA8:1F:AF\tKryptonP\tKrypton Polska\nA8:20:66\tApple\tApple, Inc.\nA8:23:FE\tLgElectr\tLG Electronics\nA8:24:EB\tZaoNpoIn\tZAO NPO Introtest\nA8:25:EB\tCambridg\tCambridge Industries(Group) Co.,Ltd.\nA8:26:D9\tHtc\tHTC Corporation\nA8:29:4C\tPrecisio\tPrecision Optical Transceivers, Inc.\nA8:2B:B5\tEdgecore\tEdgecore Networks Corporation\nA8:2B:B9\tSamsungE\tSamsung Electronics Co.,Ltd\nA8:2B:D6\tShinaSys\tShina System Co., Ltd\nA8:30:AD\tWeifangG\tWeifang Goertek Electronics Co.,Ltd\nA8:32:9A\tDigicomF\tDigicom Futuristic Technologies Ltd.\nA8:36:7A\tFrogblue\tfrogblue TECHNOLOGY GmbH\nA8:39:44\tActionte\tActiontec Electronics, Inc\nA8:3E:0E\tHmdGloba\tHMD Global Oy\nA8:3F:A1\tIeeeRegi\tIEEE Registration Authority\nA8:3F:A1:00:00:00/28\tImeconEn\tImecon Engineering SrL\nA8:3F:A1:10:00:00/28\tGtdevice\tGTDevice LLC\nA8:3F:A1:20:00:00/28\tMedcapta\tMedcaptain Medical Technology Co., Ltd.\nA8:3F:A1:30:00:00/28\tGuangzho\tGuangzhou Tupu Internet Technology Co., Ltd.\nA8:3F:A1:40:00:00/28\tZhejiang\tZhejiang Wellsun Intelligent Technology Co.,Ltd.\nA8:3F:A1:50:00:00/28\tSercomm\tSercomm Corporation.\nA8:3F:A1:60:00:00/28\tBeglec\t\nA8:3F:A1:70:00:00/28\tPlejd\tPlejd AB\nA8:3F:A1:80:00:00/28\tNeosVent\tNeos Ventures Limited\nA8:3F:A1:90:00:00/28\tShenzhen\tShenzhen ITLONG Intelligent Technology Co.,Ltd\nA8:3F:A1:A0:00:00/28\tShanghai\tShanghai East China Computer Co., Ltd\nA8:3F:A1:B0:00:00/28\tExelSRLU\tExel s.r.l. unipersonale\nA8:3F:A1:C0:00:00/28\tLaonz\tLaonz Co.,Ltd\nA8:3F:A1:D0:00:00/28\tShenzhen\tShenzhen BIO I/E Co.,Ltd\nA8:3F:A1:E0:00:00/28\tGuangzho\tGuangzhou Navigateworx Technologies Co., Limited\nA8:40:41\tDraginoT\tDragino Technology Co., Limited\nA8:44:81\tNokia\tNokia Corporation\nA8:45:CD\tSiselect\tSiselectron Technology LTD.\nA8:45:E9\tFirichEn\tFirich Enterprises CO., LTD.\nA8:47:4A\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nA8:49:A5\tLisantec\tLisantech Co., Ltd.\nA8:4E:3F\tHitronTe\tHitron Technologies. Inc\nA8:51:5B\tSamsungE\tSamsung Electronics Co.,Ltd\nA8:54:B2\tWistronN\tWistron Neweb Corporation\nA8:55:6A\tPocketne\tPocketnet Technology Inc.\nA8:57:4E\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nA8:58:40\tCambridg\tCambridge Industries(Group) Co.,Ltd.\nA8:5A:F3\tShanghai\tShanghai Siflower Communication Technology Co., Ltd\nA8:5B:6C\tRobertBo\tRobert Bosch Gmbh, CM-CI2\nA8:5B:78\tApple\tApple, Inc.\nA8:5B:B0\tShenzhen\tShenzhen Dehoo Technology Co.,Ltd\nA8:5B:F3\tAudivo\tAudivo GmbH\nA8:5C:2C\tApple\tApple, Inc.\nA8:5E:E4\t12sidedT\t12Sided Technology, LLC\nA8:60:B6\tApple\tApple, Inc.\nA8:61:0A\tArduino\tArduino Ag\nA8:61:AA\tCloudvie\tCloudview Limited\nA8:62:A2\tJiwumedi\tJiwumedia Co., Ltd.\nA8:63:DF\tDisplair\tDisplaire Corporation\nA8:63:F2\tTexasIns\tTexas Instruments\nA8:64:05\tNimbus9\tnimbus 9, Inc\nA8:65:B2\tDongguan\tDongguan Yishang Electronic Technology Co., Limited\nA8:66:7F\tApple\tApple, Inc.\nA8:6A:6F\tRim\t\nA8:6A:C1\tHanbited\tHanbitEDS Co., Ltd.\nA8:6B:7C\tShenzhen\tShenzhen Fenglian Technology Co., Ltd.\nA8:6B:AD\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nA8:70:A5\tUnicomm\tUniComm Inc.\nA8:72:85\tIdt\tIdt, Inc.\nA8:74:1D\tPhoenixC\tPHOENIX CONTACT Electronics GmbH\nA8:75:D6\tFreetekI\tFreeTek International Co., Ltd.\nA8:75:E2\tAventura\tAventura Technologies, Inc.\nA8:77:6F\tZonoff\t\nA8:7B:39\tNokia\tNokia Corporation\nA8:7C:01\tSamsungE\tSamsung Electronics Co.,Ltd\nA8:7D:12\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA8:7E:33\tNokiaDan\tNokia Danmark A/S\nA8:80:38\tShenzhen\tShenZhen MovingComm Technology Co., Limited\nA8:81:95\tSamsungE\tSamsung Electronics Co.,Ltd\nA8:81:F1\tBmeyeBV\tBmeye B.V.\nA8:82:00\tHisenseE\tHisense Electric Co.,Ltd\nA8:82:7F\tCibnOrie\tCIBN Oriental Network(Beijing) CO.,Ltd\nA8:86:DD\tApple\tApple, Inc.\nA8:87:92\tBroadban\tBroadband Antenna Tracking Systems\nA8:87:B3\tSamsungE\tSamsung Electronics Co.,Ltd\nA8:87:ED\tArcWirel\tARC Wireless LLC\nA8:88:08\tApple\tApple, Inc.\nA8:8C:EE\tMicromad\tMicroMade Galka i Drozdz sp.j.\nA8:8D:7B\tSundroid\tSunDroid Global limited.\nA8:8E:24\tApple\tApple, Inc.\nA8:90:08\tBeijingY\tBeijing Yuecheng Technology Co. Ltd.\nA8:90:42\tBeijingW\tBeijing Wanwei Intelligent Technology Co., Ltd.\nA8:92:2C\tLgElectr\tLG Electronics (Mobile Communications)\nA8:93:52\tShanghai\tShanghai Zhongmi Communication Technology Co.,Ltd\nA8:93:E6\tJiangxiJ\tJiangxi Jinggangshan Cking Communication Technology Co.,Ltd\nA8:95:B0\tAkerSubs\tAker Subsea Ltd\nA8:96:75\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nA8:96:8A\tApple\tApple, Inc.\nA8:97:DC\tIbm\t\nA8:98:C6\tShinbo\tShinbo Co., Ltd.\nA8:99:5C\tAizo\taizo ag\nA8:99:69\tDell\tDell Inc.\nA8:9A:93\tSagemcom\tSagemcom Broadband SAS\nA8:9B:10\tInmotion\tinMotion Ltd.\nA8:9D:21\tCisco\tCisco Systems, Inc\nA8:9D:D2\tShanghai\tShanghai DareGlobal Technologies Co.,Ltd\nA8:9F:BA\tSamsungE\tSamsung Electronics Co.,Ltd\nA8:9F:EC\tArrisGro\tARRIS Group, Inc.\nA8:A0:89\tTactical\tTactical Communications\nA8:A1:98\tTctMobil\tTCT mobile ltd\nA8:A5:E2\tMsf-Vath\tMSF-Vathauer Antriebstechnik GmbH & Co KG\nA8:A6:48\tQingdaoH\tQingdao Hisense Communications Co.,Ltd.\nA8:A6:68\tZte\tzte corporation\nA8:A7:95\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nA8:AD:3D\tAlcatel-\tAlcatel-Lucent Shanghai Bell Co., Ltd\nA8:B0:AE\tLeoni\t\nA8:B1:D4\tCisco\tCisco Systems, Inc\nA8:B2:DA\tFujitsu\tFujitsu Limited\nA8:B8:6E\tLgElectr\tLG Electronics (Mobile Communications)\nA8:B9:B3\tEssys\t\nA8:BB:50\tWizIot\tWiZ IoT Company Limited\nA8:BB:CF\tApple\tApple, Inc.\nA8:BC:9C\tCloudLig\tCloud Light Technology Limited\nA8:BD:1A\tHoneyBee\tHoney Bee (Hong Kong) Limited\nA8:BD:27\tHewlettP\tHewlett Packard Enterprise\nA8:BD:3A\tUnionman\tUnionman Technology Co.,Ltd\nA8:BE:27\tApple\tApple, Inc.\nA8:C2:22\tTm-Resea\tTM-Research Inc.\nA8:C8:3A\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA8:C8:7F\tRoqos\tRoqos, Inc.\nA8:CA:7B\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA8:CA:B9\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\nA8:CB:95\tEastBest\tEast Best Co., Ltd.\nA8:CC:C5\tSaabPubl\tSaab AB (publ)\nA8:CE:90\tCvc\t\nA8:D0:E3\tSystechE\tSystech Electronics Ltd.\nA8:D0:E5\tJuniperN\tJuniper Networks\nA8:D2:36\tLightwar\tLightware Visual Engineering\nA8:D3:C8\tTopconEl\tTopcon Electronics GmbH & Co. KG\nA8:D3:F7\tArcadyan\tArcadyan Technology Corporation\nA8:D4:09\tUsa111\tUSA 111 Inc\nA8:D4:98\tAviraOpe\tAvira Operations GmbH & Co. KG\nA8:D5:79\tBeijingC\tBeijing Chushang Science and Technology Co.,Ltd\nA8:D8:28\tAscensia\tAscensia Diabetes Care\nA8:D8:8A\tWyconn\t\nA8:DA:01\tShenzhen\tShenzhen NUOLIJIA Digital Technology Co.,Ltd\nA8:E0:18\tNokia\tNokia Corporation\nA8:E3:EE\tSonyInte\tSony Interactive Entertainment Inc.\nA8:E5:39\tMoimston\tMoimstone Co.,Ltd\nA8:E5:52\tJuwelAqu\tJUWEL Aquarium AG & Co. KG\nA8:E7:05\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nA8:E8:24\tInimElec\tInim Electronics S.R.L.\nA8:EE:C6\tMuuselab\tMuuselabs NV/SA\nA8:EF:26\tTritonwa\tTritonwave\nA8:F0:38\tShenZhen\tShen Zhen Shi Jin Hua Tai Electronics Co.,Ltd\nA8:F2:74\tSamsungE\tSamsung Electronics Co.,Ltd\nA8:F4:70\tFujianNe\tFujian Newland Communication Science Technologies Co.,Ltd.\nA8:F5:AC\tHuaweiTe\tHuawei Technologies Co.,Ltd\nA8:F7:E0\tPlanetTe\tPLANET Technology Corporation\nA8:F9:4B\tEltexEnt\tEltex Enterprise Ltd.\nA8:FA:D8\tApple\tApple, Inc.\nA8:FB:70\tWisesecL\tWiseSec L.t.d\nA8:FC:B7\tConsolid\tConsolidated Resource Imaging\nAA:00:00\tDecObsol\tDEC\nAA:00:01\tDecObsol\tDEC\nAA:00:02\tDecObsol\tDEC\nAA:00:03\tDecGloba\tDEC\nAA:00:04\tDecLocal\tDEC\nAA:0F:85\tYamaichi\tYamaichi Electronics\nAA:38:C7\tKaloom\tKaloom inc\nAA:54:8B\tTintri\t\nAC:01:42\tUrielTec\tUriel Technologies SIA\nAC:02:CA\tHiSoluti\tHI Solutions, Inc.\nAC:02:CF\tRwTecnol\tRW Tecnologia Industria e Comercio Ltda\nAC:02:EF\tComsis\t\nAC:04:0B\tPelotonI\tPeloton Interactive, Inc\nAC:04:81\tJiangsuH\tJiangsu Huaxing Electronics Co., Ltd.\nAC:06:13\tSenselog\tSenselogix Ltd\nAC:06:C7\tServerne\tServerNet S.r.l.\nAC:07:5F\tHuaweiTe\tHuawei Technologies Co.,Ltd\nAC:0A:61\tLaborSRL\tLabor S.r.L.\nAC:0D:1B\tLgElectr\tLG Electronics (Mobile Communications)\nAC:0D:FE\tEkon-Myg\tEkon GmbH - myGEKKO\nAC:11:D3\tSuzhouHo\tSuzhou HOTEK  Video Technology Co. Ltd\nAC:14:61\tAtaw\tATAW  Co., Ltd.\nAC:14:D2\tWi-Daq\twi-daq, inc.\nAC:16:2D\tHewlettP\tHewlett Packard\nAC:17:02\tFibarGro\tFibar Group sp. z o.o.\nAC:17:C8\tCiscoMer\tCisco Meraki\nAC:18:26\tSeikoEps\tSeiko Epson Corporation\nAC:19:9F\tSungrowP\tSungrow Power Supply Co.,Ltd.\nAC:1D:DF\tIeeeRegi\tIEEE Registration Authority\nAC:1D:DF:00:00:00/28\tPioctave\tPiOctave Solutions Pvt Ltd\nAC:1D:DF:10:00:00/28\tHellasto\tHellaStorm, Inc.\nAC:1D:DF:20:00:00/28\tConectai\tConectaIP Tecnologia S.L.\nAC:1D:DF:30:00:00/28\tCrde\t\nAC:1D:DF:40:00:00/28\tMotecPty\tMotec Pty Ltd\nAC:1D:DF:50:00:00/28\tShenzhen\tShenzhen Ouzheng Electronic Tech Co,.Ltd\nAC:1D:DF:60:00:00/28\tShenzhen\tShenzheng SenseTime Technology Co. Ltd\nAC:1D:DF:70:00:00/28\tGreenItK\tGreen IT Korea Co., Ltd.\nAC:1D:DF:80:00:00/28\tSichuanO\tSichuan Odot Automation System Co.,Ltd.\nAC:1D:DF:90:00:00/28\tSolareDa\tSolare Datensysteme GmbH\nAC:1D:DF:A0:00:00/28\tWescoInt\tWesco Integrated Supply\nAC:1D:DF:B0:00:00/28\tFine\tFine Inc.\nAC:1D:DF:C0:00:00/28\tBeijingC\tBeijing Chunhong Technology Co., Ltd.\nAC:1D:DF:D0:00:00/28\tElekon\tElekon AG\nAC:1D:DF:E0:00:00/28\tDuravit\tDuravit AG\nAC:1F:6B\tSuperMic\tSuper Micro Computer, Inc.\nAC:1F:74\tApple\tApple, Inc.\nAC:1F:D7\tRealVisi\tReal Vision Technology Co.,Ltd.\nAC:20:2E\tHitronTe\tHitron Technologies. Inc\nAC:20:3E\tWuhanTia\tWuhan Tianyu Information Industry Co., Ltd.\nAC:20:AA\tDmatek\tDMATEK Co., Ltd.\nAC:22:05\tCompalBr\tCompal Broadband Networks, Inc.\nAC:22:0B\tAsustekC\tASUSTek COMPUTER INC.\nAC:23:3F\tShenzhen\tShenzhen Minew Technologies Co., Ltd.\nAC:29:3A\tApple\tApple, Inc.\nAC:2A:0C\tCsrZhuzh\tCsr Zhuzhou Institute Co.,Ltd.\nAC:2B:6E\tIntelCor\tIntel Corporate\nAC:2D:A3\tTxtr\tTXTR GmbH\nAC:2F:A8\tHumannix\tHumannix Co.,Ltd.\nAC:31:9D\tShenzhen\tShenzhen TG-NET Botone Technology Co.,Ltd.\nAC:34:CB\tShanhaiG\tShanhai GBCOM Communication Technology Co. Ltd\nAC:35:EE\tFn-LinkT\tFN-LINK TECHNOLOGY LIMITED\nAC:36:13\tSamsungE\tSamsung Electronics Co.,Ltd\nAC:37:43\tHtc\tHTC Corporation\nAC:38:70\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\nAC:3A:7A\tRoku\tRoku, Inc.\nAC:3B:77\tSagemcom\tSagemcom Broadband SAS\nAC:3C:0B\tApple\tApple, Inc.\nAC:3C:B4\tNilan\tNilan A/S\nAC:3D:05\tInstores\tInstorescreen Aisa\nAC:3D:75\tHangzhou\tHangzhou Zhiway Technologies Co.,Ltd.\nAC:3F:A4\tTaiyoYud\tTaiyo Yuden Co.,Ltd\nAC:40:EA\tC&TSolut\tC&T Solution Inc.\nAC:41:22\tEclipseE\tEclipse Electronic Systems Inc.\nAC:44:F2\tYamaha\tYamaha Corporation\nAC:47:23\tGenelec\t\nAC:48:2D\tRalinwiN\tRalinwi Nanjing Electronic Technology Co., Ltd.\nAC:4A:FE\tHisenseB\tHisense Broadband Multimedia Technology Co.,Ltd.\nAC:4B:C8\tJuniperN\tJuniper Networks\nAC:4E:2E\tShenzhen\tShenzhen JingHanDa Electronics Co.Ltd\nAC:4E:91\tHuaweiTe\tHuawei Technologies Co.,Ltd\nAC:4F:FC\tSvs-Vist\tSVS-VISTEK GmbH\nAC:50:36\tPi-Coral\tPi-Coral Inc\nAC:51:2C\tInfinixM\tInfinix mobility limited\nAC:51:35\tMpiTech\tMpi Tech\nAC:51:EE\tCambridg\tCambridge Communication Systems Ltd\nAC:54:74\tChinaMob\tChina Mobile IOT Company Limited\nAC:54:EC\tIeeeP182\tIEEE P1823 Standards Working Group\nAC:56:2C\tLavaInte\tLAVA INTERNATIONAL(H.K) LIMITED\nAC:58:3B\tHumanAss\tHuman Assembler, Inc.\nAC:58:7B\tJctHealt\tJCT Healthcare\nAC:5A:14\tSamsungE\tSamsung Electronics Co.,Ltd\nAC:5D:10\tPaceAmer\tPace Americas\nAC:5E:8C\tUtillink\t\nAC:5F:3E\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\nAC:60:B6\tEricsson\tEricsson AB\nAC:61:23\tDrivven\tDrivven, Inc.\nAC:61:75\tHuaweiTe\tHuawei Technologies Co.,Ltd\nAC:61:EA\tApple\tApple, Inc.\nAC:62:0D\tJabilCir\tJabil Circuit(Wuxi) Co.,Ltd\nAC:63:BE\tAmazonTe\tAmazon Technologies Inc.\nAC:64:17\tSiemens\tSiemens AG\nAC:64:62\tZte\tzte corporation\nAC:64:DD\tIeeeRegi\tIEEE Registration Authority\nAC:64:DD:00:00:00/28\tJia-Teng\t\nAC:64:DD:10:00:00/28\tJscInfot\tJSC InfoTeCS\nAC:64:DD:20:00:00/28\tShenzhen\tShenzhen PuHua Technology Co., Ltd\nAC:64:DD:30:00:00/28\tInfypowe\tinfypower Co., Ltd\nAC:64:DD:40:00:00/28\t8cups\t\nAC:64:DD:50:00:00/28\tShanghai\tShanghai Zte Technologies Co.,Ltd\nAC:64:DD:60:00:00/28\tKpnetwor\tKpnetworks Ltd.\nAC:64:DD:70:00:00/28\tWittmann\tWittmann Kunststoffgeräte GmbH\nAC:64:DD:80:00:00/28\tPfdcElan\tPfdc Elancyl\nAC:64:DD:90:00:00/28\tMicroCon\tMicro Connect Pty Ltd\nAC:64:DD:A0:00:00/28\tBluewave\tBluewave Global Manufacturing Limited\nAC:64:DD:B0:00:00/28\tGroupeCi\tGroupe Citypassenger Inc\nAC:64:DD:C0:00:00/28\tBeijingH\tBeijing Hamigua Technology Co., Ltd.\nAC:64:DD:D0:00:00/28\tHmicro\tHMicro Inc\nAC:64:DD:E0:00:00/28\tDigibird\tDigibird Technology Co., Ltd.\nAC:67:06\tRuckusWi\tRuckus Wireless\nAC:67:6F\tElectroc\tElectrocompaniet A.S.\nAC:6B:0F\tCadenceD\tCadence Design Systems Inc\nAC:6B:AC\tJennySci\tJenny Science AG\nAC:6E:1A\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\nAC:6F:4F\tEnspert\tEnspert Inc\nAC:6F:BB\tTatungTe\tTATUNG Technology Inc.\nAC:6F:D9\tValueplu\tValueplus Inc.\nAC:72:36\tLexkingT\tLexking Technology Co., Ltd.\nAC:72:89\tIntelCor\tIntel Corporate\nAC:74:09\tHangzhou\tHangzhou H3C Technologies Co., Limited\nAC:75:1D\tHuaweiTe\tHuawei Technologies Co.,Ltd\nAC:7A:42\tIconnect\tiConnectivity\nAC:7A:4D\tAlpsElec\tAlps Electric Co.,Ltd.\nAC:7B:A1\tIntelCor\tIntel Corporate\nAC:7E:8A\tCisco\tCisco Systems, Inc\nAC:7F:3E\tApple\tApple, Inc.\nAC:80:D6\tHexatron\tHexatronic AB\nAC:81:12\tGemtekTe\tGemtek Technology Co., Ltd.\nAC:81:F3\tNokia\tNokia Corporation\nAC:83:17\tShenzhen\tShenzhen Furtunetel Communication Co., Ltd\nAC:83:F0\tImmediat\tImmediaTV Corporation\nAC:83:F3\tAmpakTec\tAMPAK Technology, Inc.\nAC:84:C6\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nAC:84:C9\tSagemcom\tSagemcom Broadband SAS\nAC:85:3D\tHuaweiTe\tHuawei Technologies Co.,Ltd\nAC:86:74\tOpenMesh\tOpen Mesh, Inc.\nAC:86:7E\tCreateNe\tCreate New Technology (HK) Limited Company\nAC:87:A3\tApple\tApple, Inc.\nAC:89:95\tAzurewav\tAzureWave Technology Inc.\nAC:8A:CD\tRogerDWe\tROGER D.Wensker, G.Wensker sp.j.\nAC:8D:14\tSmartrov\tSmartrove Inc\nAC:92:32\tHuaweiTe\tHuawei Technologies Co.,Ltd\nAC:93:2F\tNokia\tNokia Corporation\nAC:94:03\tEnvision\tEnvision Peripherals Inc\nAC:9A:22\tNxpSemic\tNXP Semiconductors\nAC:9A:96\tLantiqDe\tLantiq Deutschland GmbH\nAC:9B:0A\tSony\tSony Corporation\nAC:9B:84\tSmakTecn\tSmak Tecnologia e Automacao\nAC:9C:E4\tAlcatel-\tAlcatel-Lucent Shanghai Bell Co., Ltd\nAC:9E:17\tAsustekC\tASUSTek COMPUTER INC.\nAC:A0:16\tCisco\tCisco Systems, Inc\nAC:A2:13\tShenzhen\tShenzhen Bilian electronic CO.,LTD\nAC:A2:2C\tBaycityT\tBaycity Technologies Ltd\nAC:A3:1E\tArubaNet\tAruba Networks\nAC:A4:30\tPeerless\tPeerless AV\nAC:A6:67\tElectron\tElectronic Systems Protection, Inc.\nAC:A9:19\tTrekstor\tTrekStor GmbH\nAC:A9:A0\tAudioeng\tAudioengine, Ltd.\nAC:AB:2E\tBeijingL\tBeijing LasNubes Technology Co., Ltd.\nAC:AB:8D\tLyngsoMa\tLyngso Marine A/S\nAC:AB:BF\tAthentek\tAthenTek Inc.\nAC:AF:B9\tSamsungE\tSamsung Electronics Co.,Ltd\nAC:B3:13\tArrisGro\tARRIS Group, Inc.\nAC:B5:7D\tLiteonTe\tLiteon Technology Corporation\nAC:B7:4F\tMetelSRO\tMETEL s.r.o.\nAC:B8:59\tUnibandE\tUniband Electronic Corp,\nAC:BC:32\tApple\tApple, Inc.\nAC:BD:0B\tImac\tImac Co.,Ltd\nAC:BE:75\tUfineTec\tUfine Technologies Co.,Ltd.\nAC:BE:B6\tVisualed\tVisualedge Technology Co., Ltd.\nAC:C1:EE\tXiaomiCo\tXiaomi Communications Co Ltd\nAC:C2:EC\tCltIntLI\tCLT INT'L IND. CORP.\nAC:C3:3A\tSamsungE\tSamsung Electronics Co.,Ltd\nAC:C5:1B\tZhuhaiPa\tZhuhai Pantum Electronics Co., Ltd.\nAC:C5:95\tGraphite\tGraphite Systems\nAC:C6:62\tMitrasta\tMitraStar Technology Corp.\nAC:C6:98\tKohzuPre\tKohzu Precision Co., Ltd.\nAC:C7:3F\tVitsmo\tVitsmo Co., Ltd.\nAC:C9:35\tNess\tNess Corporation\nAC:CA:54\tTelldusT\tTelldus Technologies AB\nAC:CA:8E\tOdaTechn\tODA Technologies\nAC:CA:AB\tVirtualE\tVirtual Electric Inc\nAC:CA:BA\tMidokura\tMidokura Co., Ltd.\nAC:CB:09\tHefcomMe\tHefcom Metering (Pty) Ltd\nAC:CC:8E\tAxisComm\tAxis Communications AB\nAC:CE:8F\tHwaYaoTe\tHwa Yao Technologies Co., Ltd\nAC:CF:23\tHi-Flyin\tHi-flying electronics technology Co.,Ltd\nAC:CF:5C\tApple\tApple, Inc.\nAC:CF:85\tHuaweiTe\tHuawei Technologies Co.,Ltd\nAC:D0:74\tEspressi\tEspressif Inc.\nAC:D1:80\tCrexendo\tCrexendo Business Solutions, Inc.\nAC:D1:B8\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nAC:D3:64\tAbbAbbSa\tAbb Spa, Abb Sace Div.\nAC:D6:57\tShaanxiG\tShaanxi GuoLian Digital TV Technology Co.,Ltd.\nAC:D9:D6\tTci\ttci GmbH\nAC:DB:DA\tShenzhen\tShenzhen Geniatech Inc, Ltd\nAC:DC:E5\tProcterG\tProcter & Gamble Company\nAC:DE:48\tPrivate\t\nAC:E0:10\tLiteonTe\tLiteon Technology Corporation\nAC:E0:69\tIsaacIns\tISAAC Instruments\nAC:E2:15\tHuaweiTe\tHuawei Technologies Co.,Ltd\nAC:E2:D3\tHewlettP\tHewlett Packard\nAC:E3:48\tMadgetec\tMadgeTech, Inc\nAC:E4:2E\tSkHynix\tSK hynix\nAC:E4:B5\tApple\tApple, Inc.\nAC:E5:F0\tDopplerL\tDoppler Labs\nAC:E6:4B\tShenzhen\tShenzhen Baojia Battery Technology Co., Ltd.\nAC:E7:7B\tSichuanT\tSichuan Tianyi Comheart Telecomco.,Ltd\nAC:E8:7B\tHuaweiTe\tHuawei Technologies Co.,Ltd\nAC:E8:7E\tBytemark\tBytemark Computer Consulting Ltd\nAC:E9:7F\tIotTech\tIoT Tech Limited\nAC:E9:AA\tHay\tHay Systems Ltd\nAC:EA:6A\tGenixInf\tGenix Infocomm Co., Ltd.\nAC:EC:80\tArrisGro\tARRIS Group, Inc.\nAC:ED:5C\tIntelCor\tIntel Corporate\nAC:EE:3B\t6harmoni\t6harmonics Inc\nAC:EE:9E\tSamsungE\tSamsung Electronics Co.,Ltd\nAC:F0:B2\tBeckerEl\tBecker Electronics Taiwan Ltd.\nAC:F1:DF\tD-LinkIn\tD-Link International\nAC:F2:C5\tCisco\tCisco Systems, Inc\nAC:F7:F3\tXiaomiCo\tXiaomi Communications Co Ltd\nAC:F8:5C\tPrivate\t\nAC:F9:70\tHuaweiTe\tHuawei Technologies Co.,Ltd\nAC:F9:7E\tElesys\tElesys Inc.\nAC:FD:93\tWeifangG\tWeifang Goertek Electronics Co.,Ltd\nAC:FD:CE\tIntelCor\tIntel Corporate\nAC:FD:EC\tApple\tApple, Inc.\nB0:00:B4\tCisco\tCisco Systems, Inc\nB0:02:7E\tMullerSe\tMuller Services\nB0:05:94\tLiteonTe\tLiteon Technology Corporation\nB0:08:BF\tVitalCon\tVital Connect, Inc.\nB0:09:D3\tAvizia\t\nB0:09:DA\tRingSolu\tRing Solutions\nB0:10:41\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nB0:12:03\tDynamics\tDynamics Hong Kong Limited\nB0:12:66\tFutaba-K\tFutaba-Kikaku\nB0:14:08\tLightspe\tLightspeed International Co.\nB0:17:43\tEdisonGl\tEdison Global Circuits Llc\nB0:18:86\tSmardtv\t\nB0:19:C6\tApple\tApple, Inc.\nB0:1B:7C\tOntrolAS\tOntrol A.S.\nB0:1B:D2\tLeShiZhi\tLe Shi Zhi Xin Electronic Technology (Tianjin) Limited\nB0:1C:91\tElim\tElim Co\nB0:1F:29\tHelvetia\tHelvetia INC.\nB0:1F:81\tIeeeRegi\tIEEE Registration Authority\nB0:1F:81:00:00:00/28\tDalianGi\tDalian GigaTec Electronics Co.,Ltd\nB0:1F:81:10:00:00/28\tUvaxConc\tUvax Concepts\nB0:1F:81:20:00:00/28\tPrivate\t\nB0:1F:81:30:00:00/28\tSoundUni\tSound United\nB0:1F:81:40:00:00/28\tShenzhen\tShenzhen Yifang Digital Technology Co.,Ltd.\nB0:1F:81:50:00:00/28\tShenzhen\tShenzhen Grid Technology Co.,Ltd\nB0:1F:81:60:00:00/28\tComota\tCOMOTA Co., Ltd.\nB0:1F:81:70:00:00/28\tAetherSe\tAether Services, Inc.\nB0:1F:81:80:00:00/28\tTechnion\tTechnion Oy\nB0:1F:81:90:00:00/28\tCideInte\tCIDE Interactive\nB0:1F:81:A0:00:00/28\tSteffens\tSteffens Systems GmbH\nB0:1F:81:B0:00:00/28\tRademach\tRademacher Geraete-Elektronik GmbH\nB0:1F:81:C0:00:00/28\tAccessDe\tAccess Device Integrated Communications Corp.\nB0:1F:81:D0:00:00/28\tTaiwanAn\tTAIWAN Anjie Electronics Co.,Ltd.\nB0:1F:81:E0:00:00/28\tAdvanced\tAdvanced & Wise Technology Corp.\nB0:1F:81:F0:00:00/28\tPrivate\t\nB0:24:F3\tProgeny\tProgeny Systems\nB0:25:AA\tPrivate\t\nB0:26:28\tBroadcom\tBroadcom Limited\nB0:26:80\tCisco\tCisco Systems, Inc\nB0:2A:43\tGoogle\tGoogle, Inc.\nB0:33:A6\tJuniperN\tJuniper Networks\nB0:34:95\tApple\tApple, Inc.\nB0:35:0B\tMobiwire\tMOBIWIRE MOBILES (NINGBO) CO.,LTD\nB0:35:8D\tNokia\tNokia Corporation\nB0:35:9F\tIntelCor\tIntel Corporate\nB0:38:29\tSiliconw\tSiliconware Precision Industries Co., Ltd.\nB0:38:50\tNanjingC\tNanjing CAS-ZDC IOT SYSTEM CO.,LTD\nB0:39:56\tNetgear\t\nB0:3D:96\tVisionVa\tVision Valley FZ LLC\nB0:3E:B0\tMicrodia\tMICRODIA Ltd.\nB0:40:89\tSenient\tSenient Systems LTD\nB0:41:1D\tIttimTec\tITTIM Technologies\nB0:41:6F\tShenzhen\tShenzhen Maxtang Computer Co.,Ltd\nB0:43:5D\tNuleds\tNuLEDs, Inc.\nB0:45:15\tMiraFitn\tmira fitness,LLC.\nB0:45:19\tTctMobil\tTCT mobile ltd\nB0:45:45\tYacoubAu\tYACOUB Automation GmbH\nB0:46:FC\tMitrasta\tMitraStar Technology Corp.\nB0:47:BF\tSamsungE\tSamsung Electronics Co.,Ltd\nB0:48:1A\tApple\tApple, Inc.\nB0:48:7A\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nB0:49:5F\tOmronHea\tOMRON HEALTHCARE Co., Ltd.\nB0:4B:BF\tPtHanSun\tPt Han Sung Electoronics Indonesia\nB0:4C:05\tFreseniu\tFresenius Medical Care Deutschland GmbH\nB0:4E:26\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nB0:50:BC\tShenzhen\tShenzhen Basicom Electronic Co.,Ltd.\nB0:51:8E\tHollTech\tHoll technology CO.Ltd.\nB0:52:16\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nB0:53:65\tChinaMob\tChina Mobile IOT Company Limited\nB0:55:08\tHuaweiTe\tHuawei Technologies Co.,Ltd\nB0:57:06\tValloxOy\tVallox Oy\nB0:58:C4\tBroadcas\tBroadcast Microwave Services, Inc\nB0:59:47\tShenzhen\tShenzhen Qihu Intelligent Technology Company Limited\nB0:5A:DA\tHewlettP\tHewlett Packard\nB0:5B:1F\tThermoFi\tThermo Fisher Scientific S.P.A.\nB0:5B:67\tHuaweiTe\tHuawei Technologies Co.,Ltd\nB0:5C:E5\tNokia\tNokia Corporation\nB0:61:C7\tEricsson\tEricsson-LG Enterprise\nB0:65:63\tShanghai\tShanghai Railway Communication Factory\nB0:65:BD\tApple\tApple, Inc.\nB0:67:2F\tBowersWi\tBowers & Wilkins\nB0:68:B6\tHangzhou\tHangzhou OYE Technology Co. Ltd\nB0:69:71\tDeiSales\tDEI Sales, Inc.\nB0:6C:BF\t3alityDi\t3ality Digital Systems GmbH\nB0:6E:BF\tAsustekC\tASUSTek COMPUTER INC.\nB0:70:2D\tApple\tApple, Inc.\nB0:72:BF\tMurataMa\tMurata Manufacturing Co., Ltd.\nB0:75:0C\tQaCafe\tQA Cafe\nB0:75:4D\tNokia\t\nB0:75:D5\tZte\tzte corporation\nB0:77:AC\tArrisGro\tARRIS Group, Inc.\nB0:78:70\tWi-Next\tWi-NEXT, Inc.\nB0:78:F0\tBeijingH\tBeijing HuaqinWorld Technology Co.,Ltd.\nB0:79:08\tCummings\tCummings Engineering\nB0:79:3C\tRevolv\tRevolv Inc\nB0:79:94\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nB0:7D:47\tCisco\tCisco Systems, Inc\nB0:7D:62\tDipl-Ing\tDipl.-Ing. H. Horstmann GmbH\nB0:7E:11\tTexasIns\tTexas Instruments\nB0:7E:70\tZadaraSt\tZadara Storage Ltd.\nB0:7F:B9\tNetgear\t\nB0:80:8C\tLaserLig\tLaser Light Engines\nB0:81:D8\tI-Sys\tI-sys Corp\nB0:83:D6\tArrisGro\tARRIS Group, Inc.\nB0:83:FE\tDell\tDell Inc.\nB0:86:9E\tChloride\tChloride S.r.L\nB0:88:07\tStrataWo\tStrata Worldwide\nB0:89:00\tHuaweiTe\tHuawei Technologies Co.,Ltd\nB0:89:91\tLge\t\nB0:89:C2\tZyptonit\tZyptonite\nB0:8B:CF\tCisco\tCisco Systems, Inc\nB0:8E:1A\tUradio\tURadio Systems Co., Ltd\nB0:90:74\tFulanEle\tFulan Electronics Limited\nB0:90:7E\tCisco\tCisco Systems, Inc\nB0:90:D4\tShenzhen\tShenzhen Hoin Internet Technology Co., Ltd\nB0:91:22\tTexasIns\tTexas Instruments\nB0:91:34\tTaleo\t\nB0:91:37\tIsisImag\tISis ImageStream Internet Solutions, Inc\nB0:93:5B\tArrisGro\tARRIS Group, Inc.\nB0:95:8E\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nB0:96:6C\tLanbowan\tLanbowan Technology Ltd.\nB0:97:3A\tE-Fuel\tE-Fuel Corporation\nB0:98:2B\tSagemcom\tSagemcom Broadband SAS\nB0:98:9F\tLgCns\tLg Cns\nB0:99:28\tFujitsu\tFujitsu Limited\nB0:9A:E2\tStemmerI\tSTEMMER IMAGING GmbH\nB0:9B:D4\tGnhSoftw\tGNH Software India Private Limited\nB0:9F:BA\tApple\tApple, Inc.\nB0:A1:0A\tPivotal\tPivotal Systems Corporation\nB0:A2:E7\tShenzhen\tShenzhen TINNO Mobile Technology Corp.\nB0:A3:7E\tQingDaoH\tQing Dao Haier Telecom Co.,Ltd.\nB0:A7:2A\tEnsemble\tEnsemble Designs, Inc.\nB0:A7:37\tRoku\tRoku, Inc.\nB0:A8:6E\tJuniperN\tJuniper Networks\nB0:AA:36\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nB0:AA:77\tCisco\tCisco Systems, Inc\nB0:AC:D2\tZte\tzte corporation\nB0:AC:FA\tFujitsu\tFujitsu Limited\nB0:AD:AA\tAvaya\tAvaya Inc\nB0:AE:25\tVarikore\tVarikorea\nB0:B2:8F\tSagemcom\tSagemcom Broadband SAS\nB0:B2:DC\tZyxelCom\tZyxel Communications Corporation\nB0:B3:2B\tSlicanSp\tSlican Sp. z o.o.\nB0:B3:AD\tHumax\tHUMAX Co., Ltd.\nB0:B4:48\tTexasIns\tTexas Instruments\nB0:B8:67\tHewlettP\tHewlett Packard Enterprise\nB0:B8:D5\tNanjingN\tNanjing Nengrui Auto Equipment CO.,Ltd\nB0:B9:8A\tNetgear\t\nB0:BD:6D\tEchostre\tEchostreams Innovative Solutions\nB0:BD:A1\tZakladEl\tZaklad Elektroniczny Sims\nB0:BE:76\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nB0:BF:99\tWizitdon\tWizitdongdo\nB0:C0:90\tChiconyE\tChicony Electronics Co., Ltd.\nB0:C1:28\tAdlerElr\tAdler ELREHA GmbH\nB0:C1:9E\tZte\tzte corporation\nB0:C2:05\tBionime\t\nB0:C2:87\tTechnico\tTechnicolor CH USA Inc.\nB0:C4:6C\tSenseit\t\nB0:C4:E7\tSamsungE\tSamsung Electronics Co.,Ltd\nB0:C5:54\tD-LinkIn\tD-Link International\nB0:C5:59\tSamsungE\tSamsung Electronics Co.,Ltd\nB0:C5:CA\tIeeeRegi\tIEEE Registration Authority\nB0:C5:CA:00:00:00/28\tEm-Tech\t\nB0:C5:CA:10:00:00/28\tIvk-Saya\tIVK-SAYANY\nB0:C5:CA:20:00:00/28\tLowotec\tLOWOTEC GmbH\nB0:C5:CA:30:00:00/28\tAbode\tabode systems, inc.\nB0:C5:CA:40:00:00/28\tShanghai\tshanghai University Ding-Tech software Corp.,ltd\nB0:C5:CA:50:00:00/28\tSystovi\t\nB0:C5:CA:60:00:00/28\tSuntechM\tSunTech Medical, Inc.\nB0:C5:CA:70:00:00/28\tShenzhen\tShenzhen Ktc Technology Group\nB0:C5:CA:80:00:00/28\tAstyx\tAstyx GmbH\nB0:C5:CA:90:00:00/28\tD&T\tD&T Inc.\nB0:C5:CA:A0:00:00/28\tTemMobil\tTEM Mobile Limited\nB0:C5:CA:B0:00:00/28\tRisecomm\tRISECOMM  (HK) TECHNOLOGY CO. LIMITED\nB0:C5:CA:C0:00:00/28\tXmetrics\t\nB0:C5:CA:D0:00:00/28\tPrivate\t\nB0:C5:CA:E0:00:00/28\tAudioEle\tAudio Elektronik İthalat İhracat San ve Tic A.Ş.\nB0:C5:CA:F0:00:00/28\tPrivate\t\nB0:C6:9A\tJuniperN\tJuniper Networks\nB0:C7:45\tBuffalo\tBuffalo.Inc\nB0:C8:3F\tJiangsuC\tJiangsu Cynray IOT Co., Ltd.\nB0:C8:AD\tPeoplePo\tPeople Power Company\nB0:C9:5B\tBeijingS\tBeijing Symtech CO.,LTD\nB0:CA:68\tApple\tApple, Inc.\nB0:CE:18\tZhejiang\tZhejiang shenghui lighting co.,Ltd\nB0:CF:4D\tMi-ZoneT\tMI-Zone Technology Ireland\nB0:D0:9C\tSamsungE\tSamsung Electronics Co.,Ltd\nB0:D2:F5\tVello\tVello Systems, Inc.\nB0:D5:9D\tShenzhen\tShenzhen Zowee Technology Co., Ltd\nB0:D5:CC\tTexasIns\tTexas Instruments\nB0:D7:C5\tLogipix\tLogipix Ltd\nB0:D7:CC\tTridonic\tTridonic GmbH & Co KG\nB0:DA:00\tCeraElec\tCera Electronique\nB0:DA:F9\tArrisGro\tARRIS Group, Inc.\nB0:DF:3A\tSamsungE\tSamsung Electronics Co.,Ltd\nB0:DF:C1\tTendaTec\tTenda Technology Co.,Ltd.Dongguan branch\nB0:E0:3C\tTctMobil\tTCT mobile ltd\nB0:E1:7E\tHuaweiTe\tHuawei Technologies Co.,Ltd\nB0:E2:35\tXiaomiCo\tXiaomi Communications Co Ltd\nB0:E2:E5\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nB0:E3:9D\tCatSyste\tCat System Co.,Ltd.\nB0:E5:0E\tNrg\tNrg Systems Inc\nB0:E5:ED\tHuaweiTe\tHuawei Technologies Co.,Ltd\nB0:E7:54\t2wire\t2Wire Inc\nB0:E8:92\tSeikoEps\tSeiko Epson Corporation\nB0:E9:7E\tAdvanced\tAdvanced Micro Peripherals\nB0:EA:BC\tAskeyCom\tAskey Computer Corp\nB0:EB:57\tHuaweiTe\tHuawei Technologies Co.,Ltd\nB0:EC:71\tSamsungE\tSamsung Electronics Co.,Ltd\nB0:EC:8F\tGmxSas\tGmx Sas\nB0:EC:E1\tPrivate\t\nB0:EE:45\tAzurewav\tAzureWave Technology Inc.\nB0:EE:7B\tRoku\tRoku, Inc\nB0:F1:A3\tFengfanB\tFengfan (BeiJing) Technology Co., Ltd.\nB0:F1:BC\tDhemaxIn\tDhemax Ingenieros Ltda\nB0:F1:EC\tAmpakTec\tAMPAK Technology, Inc.\nB0:F8:93\tShanghai\tShanghai MXCHIP Information Technology Co., Ltd.\nB0:F9:63\tHangzhou\tHangzhou H3C Technologies Co., Limited\nB0:FA:EB\tCisco\tCisco Systems, Inc\nB0:FC:0D\tAmazonTe\tAmazon Technologies Inc.\nB0:FC:36\tCybertan\tCyberTAN Technology Inc.\nB0:FE:BD\tPrivate\t\nB4:00:16\tIngenico\tIngenico Terminals Sas\nB4:00:9C\tCablewor\tCableWorld Ltd.\nB4:01:42\tGciScien\tGCI Science & Technology Co.,LTD\nB4:04:18\tSmartchi\tSmartchip Integrated Inc.\nB4:05:66\tSpBest\tSP Best Corporation Co., LTD.\nB4:07:F9\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\nB4:08:32\tTcCommun\tTC Communications\nB4:0A:C6\tDexon\tDEXON Systems Ltd.\nB4:0B:44\tSmartisa\tSmartisan Technology Co., Ltd.\nB4:0B:7A\tBrusaEle\tBrusa Elektronik AG\nB4:0C:25\tPaloAlto\tPalo Alto Networks\nB4:0E:96\tHeran\t\nB4:0E:DC\tLg-Erics\tLG-Ericsson Co.,Ltd.\nB4:0F:3B\tTendaTec\tTenda Technology Co.,Ltd.Dongguan branch\nB4:14:89\tCisco\tCisco Systems, Inc\nB4:15:13\tHuaweiTe\tHuawei Technologies Co.,Ltd\nB4:17:80\tDtiGroup\tDTI Group Ltd\nB4:18:D1\tApple\tApple, Inc.\nB4:1C:30\tZte\tzte corporation\nB4:1D:2B\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\nB4:1D:EF\tInternet\tInternet Laboratories, Inc.\nB4:21:1D\tBeijingG\tBeijing GuangXin Technology Co., Ltd\nB4:21:8A\tDogHunte\tDog Hunter LLC\nB4:24:E7\tCodetekT\tCodetek Technology Co.,Ltd\nB4:28:F1\tE-Prime\tE-Prime Co., Ltd.\nB4:29:3D\tShenzhen\tShenzhen Urovo Technology Co.,Ltd.\nB4:2A:0E\tTechnico\tTechnicolor CH USA Inc.\nB4:2A:39\tOrbitMer\tORBIT MERRET, spol. s r. o.\nB4:2C:92\tZhejiang\tZhejiang Weirong Electronic Co., Ltd\nB4:2C:BE\tDirectPa\tDirect Payment Solutions Limited\nB4:2D:56\tExtremeN\tExtreme Networks, Inc.\nB4:2E:99\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\nB4:2E:F8\tElineTec\tEline Technology co.Ltd\nB4:30:52\tHuaweiTe\tHuawei Technologies Co.,Ltd\nB4:30:C0\tYorkInst\tYork Instruments Ltd\nB4:31:B8\tAviwest\t\nB4:34:6C\tMatsunic\tMATSUNICHI DIGITAL TECHNOLOGY (HONG KONG) LIMITED\nB4:35:64\tFujianTi\tFujian Tian Cheng Electron Science & Technical Development Co.,Ltd.\nB4:35:F7\tZhejiang\tZhejiang Pearmain Electronics Co.ltd.\nB4:36:A9\tFibocomW\tFibocom Wireless Inc.\nB4:36:E3\tKbvision\tKbvision Group\nB4:37:41\tConsert\tConsert, Inc.\nB4:37:D1\tIeeeRegi\tIEEE Registration Authority\nB4:37:D1:00:00:00/28\tLezyneUs\tLezyne INC USA\nB4:37:D1:10:00:00/28\tAlturnaN\tAlturna Networks\nB4:37:D1:20:00:00/28\tFibersys\tFibersystem AB\nB4:37:D1:30:00:00/28\tDimton\tDimton Co.,Ltd.\nB4:37:D1:40:00:00/28\tKomsisEl\tKomsis Elektronik Sistemleri San. Tic. Ltd.Sti\nB4:37:D1:50:00:00/28\tStratom\tStratom, Inc.\nB4:37:D1:60:00:00/28\tYirehAut\tYireh Auto Tech Co.,Ltd.\nB4:37:D1:70:00:00/28\tGePowerM\tGE Power Management\nB4:37:D1:80:00:00/28\tEinfochi\teInfochips Limited\nB4:37:D1:90:00:00/28\tNanjingY\tNanjing yuekong Intelligent Technology\nB4:37:D1:A0:00:00/28\tAxiomati\tAxiomatic Technologies Corporation\nB4:37:D1:B0:00:00/28\tNsi\tNSI Co., Ltd.\nB4:37:D1:C0:00:00/28\tNanjingP\tNanjing Putian Telecommunications Technology Co.,Ltd.\nB4:37:D1:D0:00:00/28\tZxySport\tZXY Sport Tracking\nB4:37:D1:E0:00:00/28\tUnionTec\tUnion Tecnologica Noxium S.L.\nB4:37:D1:F0:00:00/28\tPrivate\t\nB4:39:34\tPenGener\tPen Generations, Inc.\nB4:39:D6\tProcurve\tProCurve Networking by HP\nB4:3A:28\tSamsungE\tSamsung Electronics Co.,Ltd\nB4:3D:B2\tDegreane\tDegreane Horizon\nB4:3E:3B\tViablewa\tViableware, Inc\nB4:41:7A\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\nB4:43:0D\tBroadlin\tBroadlink Pty Ltd\nB4:43:26\tHuaweiTe\tHuawei Technologies Co.,Ltd\nB4:47:5E\tAvaya\tAvaya Inc\nB4:4B:D2\tApple\tApple, Inc.\nB4:4B:D6\tIeeeRegi\tIEEE Registration Authority\nB4:4B:D6:00:00:00/28\tG4sMonit\tG4S Monitoring Technologies Ltd\nB4:4B:D6:10:00:00/28\tShenzhen\tShenzhen Tita Interactive Technology Co.,Ltd\nB4:4B:D6:20:00:00/28\tShenzhen\tShenzhen Cudy Technology Co., Ltd.\nB4:4B:D6:30:00:00/28\tHuizhouS\tHuizhou Sunoda Technology Co. Ltd\nB4:4B:D6:40:00:00/28\tShenzhen\tShenzhen Hi-Net Technology Co., Ltd.\nB4:4B:D6:50:00:00/28\tShenzhen\tShenZhen Comstar Technology Company\nB4:4B:D6:60:00:00/28\tPerspica\tPerspicace Intellegince Technology\nB4:4B:D6:70:00:00/28\tTaizhouC\tTaizhou convergence Information technology Co.,LTD\nB4:4B:D6:80:00:00/28\tArnouseD\tArnouse Digital Devices Corp\nB4:4B:D6:90:00:00/28\tQstarTec\tQstar Technology Co,Ltd\nB4:4B:D6:A0:00:00/28\tShenzhen\tShenzhen Huabai Intelligent Technology Co., Ltd.\nB4:4B:D6:B0:00:00/28\tDongyoun\tDongYoung media\nB4:4B:D6:C0:00:00/28\tImpaktSA\tImpakt S.A.\nB4:4B:D6:D0:00:00/28\tElletaSo\tElleta Solutions Ltd\nB4:4B:D6:E0:00:00/28\tChunghsi\tChunghsin International Electronics Co.,Ltd.\nB4:4C:C2\tNrElectr\tNr Electric Co., Ltd\nB4:4F:96\tZhejiang\tZhejiang Xinzailing Technology co., ltd\nB4:51:F9\tNbSoftwa\tNB Software\nB4:52:53\tSeagateT\tSeagate Technology\nB4:52:7D\tSonyMobi\tSony Mobile Communications Inc\nB4:52:7E\tSonyMobi\tSony Mobile Communications Inc\nB4:55:70\tBorea\t\nB4:56:B9\tTeraspek\tTeraspek Technologies Co.,Ltd\nB4:58:61\tCremoteL\tCRemote, LLC\nB4:5C:A4\tThing-Ta\tThing-talk Wireless Communication Technologies Corporation Limited\nB4:5D:50\tArubaNet\tAruba Networks\nB4:61:FF\tLumigon\tLumigon A/S\nB4:62:38\tExablox\t\nB4:62:93\tSamsungE\tSamsung Electronics Co.,Ltd\nB4:62:AD\tElysiaGe\tElysia Germany GmbH\nB4:66:98\tZealabsS\tZealabs srl\nB4:67:E9\tQingdaoG\tQingdao GoerTek Technology Co., Ltd.\nB4:69:21\tIntelCor\tIntel Corporate\nB4:6B:FC\tIntelCor\tIntel Corporate\nB4:6D:35\tDalianSe\tDalian Seasky Automation Co;Ltd\nB4:6D:83\tIntelCor\tIntel Corporate\nB4:73:56\tHangzhou\tHangzhou Treebear Networking Co., Ltd.\nB4:74:43\tSamsungE\tSamsung Electronics Co.,Ltd\nB4:74:47\tCoreos\t\nB4:74:9F\tAskeyCom\tAskey Computer Corp\nB4:75:0E\tBelkinIn\tBelkin International Inc.\nB4:77:48\tShenzhen\tShenzhen Neoway Technology Co.,Ltd.\nB4:79:A7\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\nB4:7C:29\tShenzhen\tShenzhen Guzidi Technology Co.,Ltd\nB4:7C:9C\tAmazonTe\tAmazon Technologies Inc.\nB4:7F:5E\tForesigh\tForesight Manufacture (S) Pte Ltd\nB4:81:BF\tMeta-Net\tMeta-Networks, LLC\nB4:82:55\tResearch\tResearch Products Corporation\nB4:82:7B\tAkgAcous\tAKG Acoustics GmbH\nB4:82:C5\tRelay2\tRelay2, Inc.\nB4:82:FE\tAskeyCom\tAskey Computer Corp\nB4:85:47\tAmptownS\tAmptown System Company GmbH\nB4:86:55\tHuaweiTe\tHuawei Technologies Co.,Ltd\nB4:89:10\tCosterTE\tCoster T.E. S.P.A.\nB4:8B:19\tApple\tApple, Inc.\nB4:94:4E\tWeteleco\tWeTelecom Co., Ltd.\nB4:96:91\tIntelCor\tIntel Corporate\nB4:98:42\tZte\tzte corporation\nB4:99:4C\tTexasIns\tTexas Instruments\nB4:99:BA\tHewlettP\tHewlett Packard\nB4:9C:DF\tApple\tApple, Inc.\nB4:9D:0B\tBq\t\nB4:9D:B4\tAxionTec\tAxion Technologies Inc.\nB4:9E:AC\tImagikIn\tImagik Int'l Corp\nB4:9E:E6\tShenzhen\tShenzhen Technology Co Ltd\nB4:A3:82\tHangzhou\tHangzhou Hikvision Digital Technology Co.,Ltd.\nB4:A4:B5\tZenEye\tZen Eye Co.,Ltd\nB4:A4:E3\tCisco\tCisco Systems, Inc\nB4:A5:A9\tModi\tMODI GmbH\nB4:A5:EF\tSercomm\tSercomm Corporation.\nB4:A8:28\tShenzhen\tShenzhen Concox Information Technology Co., Ltd\nB4:A8:2B\tHistarDi\tHistar Digital Electronics Co., Ltd.\nB4:A8:B9\tCisco\tCisco Systems, Inc\nB4:A9:4F\tMercury\tMercury Corporation\nB4:A9:5A\tAvaya\tAvaya Inc\nB4:A9:84\tSymantec\tSymantec Corporation\nB4:A9:FE\tGhiaTech\tGHIA Technology (Shenzhen) LTD\nB4:AA:4D\tEnsequen\tEnsequence, Inc.\nB4:AB:2C\tMtmTechn\tMtM Technology Corporation\nB4:AE:2B\tMicrosof\tMicrosoft\nB4:AE:6F\tCircleRe\tCircle Reliance, Inc DBA Cranberry Networks\nB4:B0:17\tAvaya\tAvaya Inc\nB4:B1:5A\tSiemensE\tSiemens AG Energy Management Division\nB4:B2:65\tDaehoI&T\tDAEHO I&T\nB4:B3:62\tZte\tzte corporation\nB4:B3:84\tShenzhen\tShenZhen Figigantic Electronic Co.,Ltd\nB4:B5:2F\tHewlettP\tHewlett Packard\nB4:B5:42\tHubbellP\tHubbell Power Systems, Inc.\nB4:B5:AF\tMinsungE\tMinsung Electronics\nB4:B6:76\tIntelCor\tIntel Corporate\nB4:B6:86\tHewlettP\tHewlett Packard\nB4:B8:59\tTexa\tTexa Spa\nB4:B8:8D\tThuh\tThuh Company\nB4:BF:F6\tSamsungE\tSamsung Electronics Co.,Ltd\nB4:C0:F5\tShenzhen\tShenzhen TINNO Mobile Technology Corp.\nB4:C1:70\tYiChipMi\tYi chip Microelectronics (Hangzhou) Co., Ltd\nB4:C4:4E\tVxlEtech\tVXL eTech Pvt Ltd\nB4:C6:F8\tAxilspot\tAxilspot Communication\nB4:C7:99\tExtremeN\tExtreme Networks, Inc.\nB4:C8:10\tUmpiElet\tUMPI Elettronica\nB4:CB:57\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nB4:CC:E9\tProsyst\t\nB4:CD:27\tHuaweiTe\tHuawei Technologies Co.,Ltd\nB4:CE:F6\tHtc\tHTC Corporation\nB4:CE:FE\tJamesCze\tJames Czekaj\nB4:CF:DB\tShenzhen\tShenzhen Jiuzhou Electric Co.,LTD\nB4:D1:35\tCloudist\tCloudistics\nB4:D5:BD\tIntelCor\tIntel Corporate\nB4:D6:4E\tCaldero\tCaldero Limited\nB4:D8:A9\tBetterbo\tBetterBots\nB4:D8:DE\tIotaComp\tiota Computing, Inc.\nB4:DD:15\tControlt\tControlThings Oy Ab\nB4:DD:D0\tContinen\tContinental Automotive Hungary Kft\nB4:DE:31\tCisco\tCisco Systems, Inc\nB4:DE:DF\tZte\tzte corporation\nB4:DF:3B\tChromlec\tChromlech\nB4:DF:FA\tLitemaxE\tLitemax Electronics Inc.\nB4:E0:1D\tConcepti\tConception Electronique\nB4:E0:CD\tFusion-I\tFusion-io, Inc\nB4:E1:0F\tDell\tDell Inc.\nB4:E1:C4\tMicrosof\tMicrosoft Mobile Oy\nB4:E1:EB\tPrivate\t\nB4:E6:2A\tLgInnote\tLG Innotek\nB4:E6:2D\tEspressi\tEspressif Inc.\nB4:E7:82\tVivalnk\t\nB4:E9:A3\tPort\tport GmbH\nB4:E9:B0\tCisco\tCisco Systems, Inc\nB4:EC:02\tAlpsElec\tAlps Electric Co.,Ltd.\nB4:ED:19\tPieDigit\tPie Digital, Inc.\nB4:ED:54\tWohlerTe\tWohler Technologies\nB4:EE:B4\tAskeyCom\tAskey Computer Corp\nB4:EE:D4\tTexasIns\tTexas Instruments\nB4:EF:04\tDaihanSc\tDAIHAN Scientific Co., Ltd.\nB4:EF:39\tSamsungE\tSamsung Electronics Co.,Ltd\nB4:EF:FA\tLemobile\tLemobile Information Technology (Beijing) Co., Ltd.\nB4:F0:AB\tApple\tApple, Inc.\nB4:F1:DA\tLgElectr\tLG Electronics (Mobile Communications)\nB4:F2:E8\tArrisGro\tARRIS Group, Inc.\nB4:F3:23\tPetatel\tPetatel Inc.\nB4:F6:1C\tApple\tApple, Inc.\nB4:F7:A1\tLgElectr\tLG Electronics (Mobile Communications)\nB4:F8:1E\tKinova\t\nB4:FB:E4\tUbiquiti\tUbiquiti Networks Inc.\nB4:FB:F9\tHuaweiTe\tHuawei Technologies Co.,Ltd\nB4:FC:75\tSemaElec\tSEMA Electronics(HK) CO.,LTD\nB4:FE:8C\tCentroSi\tCentro Sicurezza Italia SpA\nB8:00:18\tHtel\t\nB8:03:05\tIntelCor\tIntel Corporate\nB8:04:15\tBayanAud\tBayan Audio\nB8:05:AB\tZte\tzte corporation\nB8:07:16\tVivoMobi\tvivo Mobile Communication Co., Ltd.\nB8:08:CF\tIntelCor\tIntel Corporate\nB8:08:D7\tHuaweiTe\tHuawei Technologies Co.,Ltd\nB8:09:8A\tApple\tApple, Inc.\nB8:0B:9D\tRopexInd\tROPEX Industrie-Elektronik GmbH\nB8:13:E9\tTraceLiv\tTrace Live Network\nB8:14:13\tKeenHigh\tKeen High Holding(HK) Ltd.\nB8:16:19\tArrisGro\tARRIS Group, Inc.\nB8:16:DB\tChantSin\tChant Sincere Co.,Ltd\nB8:17:C2\tApple\tApple, Inc.\nB8:18:6F\tOriental\tOriental Motor Co., Ltd.\nB8:19:99\tNesys\t\nB8:1D:AA\tLgElectr\tLG Electronics (Mobile Communications)\nB8:20:E7\tGuangzho\tGuangzhou Horizontal Information & Network Integration Co. Ltd\nB8:22:4F\tSichuanT\tSichuan Tianyi Comheart Telecomco., Ltd\nB8:24:10\tMagnetiM\tMagneti Marelli Slovakia s.r.o.\nB8:24:1A\tSwedaInf\tSweda Informatica Ltda\nB8:24:F0\tSoyoTech\tSOYO Technology Development Co., Ltd.\nB8:26:6C\tAnovFran\tANOV France\nB8:26:D4\tFurukawa\tFurukawa Industrial S.A. Produtos Elétricos\nB8:27:EB\tRaspberr\tRaspberry Pi Foundation\nB8:28:8B\tParkerHa\tParker Hannifin Manufacturing (UK) Ltd\nB8:29:F7\tBlasterT\tBlaster Tech\nB8:2A:72\tDell\tDell Inc.\nB8:2A:DC\tEfrEurop\tEFR Europäische Funk-Rundsteuerung GmbH\nB8:2C:A0\tResideo\t\nB8:30:A8\tRoad-Tra\tRoad-Track Telematics Development\nB8:31:B5\tMicrosof\tMicrosoft Corporation\nB8:32:41\tWuhanTia\tWuhan Tianyu Information Industry Co., Ltd.\nB8:36:D8\tVideoswi\tVideoswitch\nB8:37:65\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nB8:38:61\tCisco\tCisco Systems, Inc\nB8:38:CA\tKyokkoTs\tKyokko Tsushin System CO.,LTD\nB8:3A:08\tTendaTec\tTenda Technology Co.,Ltd.Dongguan branch\nB8:3A:7B\tWorldpla\tWorldplay (Canada) Inc.\nB8:3A:9D\tAlarmCom\tAlarm.com\nB8:3D:4E\tShenzhen\tShenzhen Cultraview Digital Technology Co.,Ltd Shanghai Branch\nB8:3E:59\tRoku\tRoku, Inc.\nB8:41:5F\tAsp\tAsp Ag\nB8:41:A4\tApple\tApple, Inc.\nB8:43:E4\tVlatacom\t\nB8:44:D9\tApple\tApple, Inc.\nB8:47:C6\tSanjetTe\tSanJet Technology Corp.\nB8:4F:D5\tMicrosof\tMicrosoft Corporation\nB8:50:01\tExtremeN\tExtreme Networks, Inc.\nB8:53:AC\tApple\tApple, Inc.\nB8:55:10\tZioncomE\tZioncom Electronics (Shenzhen) Ltd.\nB8:56:BD\tIttLlc\tItt Llc\nB8:57:D8\tSamsungE\tSamsung Electronics Co.,Ltd\nB8:58:10\tNumera\tNumera, Inc.\nB8:5A:73\tSamsungE\tSamsung Electronics Co.,Ltd\nB8:5A:F7\tOuya\tOuya, Inc\nB8:5A:FE\tHandaerC\tHandaer Communication Technology (Beijing) Co., Ltd\nB8:5E:7B\tSamsungE\tSamsung Electronics Co.,Ltd\nB8:60:91\tOnnetTec\tOnnet Technologies and Innovations LLC\nB8:61:6F\tAcctonTe\tAccton Technology Corp\nB8:62:1F\tCisco\tCisco Systems, Inc\nB8:63:4D\tApple\tApple, Inc.\nB8:63:BC\tRobotis\tROBOTIS, Co, Ltd\nB8:64:91\tCkTeleco\tCK Telecom Ltd\nB8:65:3B\tBolymin\tBolymin, Inc.\nB8:69:C2\tSunitecE\tSunitec Enterprise Co., Ltd.\nB8:69:F4\tRouterbo\tRouterboard.com\nB8:6A:97\tEdgecore\tEdgecore Networks Corporation\nB8:6B:23\tToshiba\t\nB8:6C:E8\tSamsungE\tSamsung Electronics Co.,Ltd\nB8:70:F4\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\nB8:74:24\tViessman\tViessmann Elektronik GmbH\nB8:74:47\tConverge\tConvergence Technologies\nB8:75:C0\tPaypal\tPayPal, Inc.\nB8:76:3F\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nB8:77:C3\tMeterGro\tMETER Group\nB8:78:26\tNintendo\tNintendo Co.,Ltd\nB8:78:2E\tApple\tApple, Inc.\nB8:78:79\tRocheDia\tRoche Diagnostics GmbH\nB8:79:7E\tSecureMe\tSecure Meters (UK) Limited\nB8:7A:C9\tSiemens\tSiemens Ltd.\nB8:7C:6F\tNxpChina\tNXP (China) Management Ltd.\nB8:7C:F2\tAerohive\tAerohive Networks Inc.\nB8:81:98\tIntelCor\tIntel Corporate\nB8:83:03\tHewlettP\tHewlett Packard Enterprise\nB8:85:84\tDell\tDell Inc.\nB8:86:87\tLiteonTe\tLiteon Technology Corporation\nB8:87:1E\tGoodMind\tGood Mind Industries Co., Ltd.\nB8:87:A8\tStepAhea\tStep Ahead Innovations Inc.\nB8:88:E3\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\nB8:89:81\tChengduI\tChengdu InnoThings Technology Co., Ltd.\nB8:89:CA\tIljinEle\tILJIN ELECTRIC Co., Ltd.\nB8:8A:60\tIntelCor\tIntel Corporate\nB8:8A:EC\tNintendo\tNintendo Co.,Ltd\nB8:8D:12\tApple\tApple, Inc.\nB8:8E:3A\tInfinite\tInfinite Technologies JLT\nB8:8E:C6\tStateles\tStateless Networks\nB8:8E:DF\tZencheer\tZencheer Communication Technology Co., Ltd.\nB8:8F:14\tAnalytic\tAnalytica GmbH\nB8:92:1D\tBgT&A\tBG T&A\nB8:94:36\tHuaweiTe\tHuawei Technologies Co.,Ltd\nB8:94:D2\tRetailIn\tRetail Innovation HTT AB\nB8:96:74\tAlldsp\tAllDSP GmbH & Co. KG\nB8:97:5A\tBiostarM\tBIOSTAR Microtech Int'l Corp.\nB8:98:B0\tAtlona\tAtlona Inc.\nB8:98:F7\tGioneeCo\tGionee Communication Equipment Co,Ltd.ShenZhen\nB8:99:19\t7signalS\t7signal Solutions, Inc\nB8:99:B0\tCohereTe\tCohere Technologies\nB8:9A:CD\tEliteOpt\tELITE OPTOELECTRONIC(ASIA)CO.,LTD\nB8:9A:ED\tOceanser\tOceanServer Technology, Inc\nB8:9B:C9\tSmcNetwo\tSMC Networks Inc\nB8:9B:E4\tAbbPower\tABB Power Systems Power Generation\nB8:9F:09\tWistronN\tWistron Neweb Corporation\nB8:A1:75\tRoku\tRoku, Inc.\nB8:A3:86\tD-LinkIn\tD-Link International\nB8:A3:E0\tBenruiTe\tBenRui Technology Co.,Ltd\nB8:A8:AF\tLogicSPA\tLogic S.p.A.\nB8:AC:6F\tDell\tDell Inc.\nB8:AD:3E\tBluecom\t\nB8:AE:6E\tNintendo\tNintendo Co., Ltd.\nB8:AE:ED\tElitegro\tElitegroup Computer Systems Co.,Ltd.\nB8:AF:67\tHewlettP\tHewlett Packard\nB8:B1:C7\tBt&Com\tBT&COM CO.,LTD\nB8:B2:EB\tGoogolTe\tGoogol Technology (HK) Limited\nB8:B3:DC\tDerekSha\tDEREK (SHAOGUAN) LIMITED\nB8:B4:2E\tGioneeCo\tGionee Communication Equipment Co,Ltd.ShenZhen\nB8:B7:D7\t2gigTech\t2GIG Technologies\nB8:B7:F1\tWistronN\tWistron Neweb Corporation\nB8:B8:1E\tIntelCor\tIntel Corporate\nB8:B9:4E\tShenzhen\tShenzhen iBaby Labs, Inc.\nB8:BA:68\tXiAnJizh\tXi'an Jizhong Digital Communication Co.,Ltd\nB8:BA:72\tCynove\t\nB8:BB:23\tGuangdon\tGuangdong Nufront CSC Co., Ltd\nB8:BB:6D\tEneres\tENERES Co.,Ltd.\nB8:BB:AF\tSamsungE\tSamsung Electronics Co.,Ltd\nB8:BC:1B\tHuaweiTe\tHuawei Technologies Co.,Ltd\nB8:BD:79\tTrendpoi\tTrendPoint Systems\nB8:BE:BF\tCisco\tCisco Systems, Inc\nB8:BE:F4\tDevolo\tdevolo AG\nB8:BF:83\tIntelCor\tIntel Corporate\nB8:C1:11\tApple\tApple, Inc.\nB8:C1:A2\tDragonPa\tDragon Path Technologies Co., Limited\nB8:C3:BF\tHenanChe\tHenan Chengshi NetWork Technology Co.，Ltd\nB8:C4:6F\tPrimmcon\tPrimmcon Industries Inc\nB8:C6:8E\tSamsungE\tSamsung Electronics Co.,Ltd\nB8:C7:16\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nB8:C7:5D\tApple\tApple, Inc.\nB8:C8:55\tShanghai\tShanghai GBCOM Communication Technology Co.,Ltd.\nB8:C8:EB\tItelMobi\tItel Mobile Limited\nB8:CA:04\tHoltekSe\tHoltek Semiconductor Inc.\nB8:CA:3A\tDell\tDell Inc.\nB8:CD:93\tPenetek\tPenetek, Inc\nB8:CD:A7\tMaxelerT\tMaxeler Technologies Ltd.\nB8:D0:6F\tGuangzho\tGuangzhou Hkust Fok Ying Tung Research Institute\nB8:D4:9D\tMSevenSy\tM Seven System Ltd.\nB8:D5:0B\tSunitecE\tSunitec Enterprise Co.,Ltd\nB8:D7:AF\tMurataMa\tMurata Manufacturing Co., Ltd.\nB8:D8:12\tIeeeRegi\tIEEE Registration Authority\nB8:D8:12:00:00:00/28\tGlamo\tGlamo Inc.\nB8:D8:12:10:00:00/28\tVotem\t\nB8:D8:12:20:00:00/28\tIpmSales\tIPM Sales and service Co.,Ltd.\nB8:D8:12:30:00:00/28\tImodesty\tiModesty Technology Corp.\nB8:D8:12:40:00:00/28\tV5Techno\tV5 Technology Corporation\nB8:D8:12:50:00:00/28\tXiamenXi\tXiamen Xindeco Ltd.\nB8:D8:12:60:00:00/28\tVongerEl\tVonger Electronic Technology Co.,Ltd.\nB8:D8:12:70:00:00/28\tNeuropac\tNeuropace Inc.\nB8:D8:12:80:00:00/28\tVisualPr\tVisual Productions BV\nB8:D8:12:90:00:00/28\tEntotem\tEntotem LTD\nB8:D8:12:A0:00:00/28\tKiwigrid\tKiwigrid GmbH\nB8:D8:12:B0:00:00/28\tDocobo\tDocobo Limited\nB8:D8:12:C0:00:00/28\tYuweiInf\tYuwei Info&Tech Development Co.,Ltd\nB8:D8:12:D0:00:00/28\tLamResea\tLam Research\nB8:D8:12:E0:00:00/28\tZhejiang\tZheJiang FangTai Electirc Co., Ltd\nB8:D8:12:F0:00:00/28\tPrivate\t\nB8:D9:4D\tSagemcom\tSagemcom Broadband SAS\nB8:D9:CE\tSamsungE\tSamsung Electronics Co.,Ltd\nB8:DA:F1\tStrahlen\tStrahlenschutz- Entwicklungs- und Ausruestungsgesellschaft mbH\nB8:DA:F7\tAdvanced\tAdvanced Photonics, Inc.\nB8:DB:1C\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\nB8:DC:87\tIai\tIAI Corporation\nB8:DE:5E\tLongchee\tLongcheer Telecommunication Limited\nB8:DF:6B\tSpotcam\tSpotCam Co., Ltd.\nB8:E5:89\tPayterBv\tPayter BV\nB8:E6:25\t2wire\t2Wire Inc\nB8:E7:79\t9solutio\t9Solutions Oy\nB8:E8:56\tApple\tApple, Inc.\nB8:E9:37\tSonos\tSonos, Inc.\nB8:EA:AA\tIcgNetwo\tICG NETWORKS CO.,ltd\nB8:EC:A3\tZyxelCom\tZyxel Communications Corporation\nB8:EE:0E\tSagemcom\tSagemcom Broadband SAS\nB8:EE:65\tLiteonTe\tLiteon Technology Corporation\nB8:EE:79\tYwireTec\tYWire Technologies, Inc.\nB8:F0:80\tSps\tSps, Inc.\nB8:F3:17\tIsunSmas\tiSun Smasher Communications Private Limited\nB8:F4:D0\tHerrmann\tHerrmann Ultraschalltechnik GmbH & Co. Kg\nB8:F5:E7\tWaytools\tWayTools, LLC\nB8:F6:B1\tApple\tApple, Inc.\nB8:F7:32\tAryakaNe\tAryaka Networks Inc\nB8:F7:4A\tRcntec\t\nB8:F8:28\tChangshu\tChangshu Gaoshida Optoelectronic Technology Co. Ltd.\nB8:F8:83\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nB8:F8:BE\tBluecom\t\nB8:F9:34\tSonyMobi\tSony Mobile Communications Inc\nB8:FC:9A\tLeShiZhi\tLe Shi Zhi Xin Electronic Technology (Tianjin) Limited\nB8:FD:32\tZhejiang\tZhejiang ROICX Microelectronics\nB8:FF:61\tApple\tApple, Inc.\nB8:FF:6F\tShanghai\tShanghai Typrotech Technology Co.Ltd\nB8:FF:B3\tMitrasta\tMitraStar Technology Corp.\nB8:FF:FE\tTexasIns\tTexas Instruments\nBA:30:54\tGeorgeWi\tGeorge Wilson Industries Ltd\nBA:55:EC\tIeee8021\tIEEE 802.15\nBC:02:00\tStewartA\tStewart Audio\nBC:02:4A\tHmdGloba\tHMD Global Oy\nBC:05:43\tAvm\tAVM GmbH\nBC:0D:A5\tTexasIns\tTexas Instruments\nBC:0F:2B\tFortuneT\tFortune Techgroup Co.,Ltd\nBC:0F:64\tIntelCor\tIntel Corporate\nBC:0F:A7\tOuster\t\nBC:12:5E\tBeijingW\tBeijing  WisVideo  INC.\nBC:14:01\tHitronTe\tHitron Technologies. Inc\nBC:14:85\tSamsungE\tSamsung Electronics Co.,Ltd\nBC:14:EF\tItonTech\tITON Technology Limited\nBC:15:A6\tTaiwanJa\tTaiwan Jantek Electronics,Ltd.\nBC:15:AC\tVodafone\tVodafone Italia S.p.A.\nBC:16:65\tCisco\tCisco Systems, Inc\nBC:16:F5\tCisco\tCisco Systems, Inc\nBC:1A:67\tYfTechno\tYF Technology Co., Ltd\nBC:1C:81\tSichuanI\tSichuan iLink Technology Co., Ltd.\nBC:20:A4\tSamsungE\tSamsung Electronics Co.,Ltd\nBC:20:BA\tInspurSh\tInspur (Shandong) Electronic Information Co., Ltd\nBC:22:FB\tRfIndust\tRF Industries\nBC:25:E0\tHuaweiTe\tHuawei Technologies Co.,Ltd\nBC:25:F0\t3dDispla\t3D Display Technologies Co., Ltd.\nBC:26:1D\tHongKong\tHong Kong Tecon Technology\nBC:26:43\tElprotro\tElprotronic Inc.\nBC:26:C7\tCisco\tCisco Systems, Inc\nBC:28:2C\tE-SmartP\te-Smart Systems Pvt. Ltd\nBC:28:46\tNextbitC\tNextBIT Computing Pvt. Ltd.\nBC:28:D6\tRowleyAs\tRowley Associates Limited\nBC:2B:6B\tBeijingH\tBeijing Haier IC Design Co.,Ltd\nBC:2B:D7\tRevogiIn\tRevogi Innovation Co., Ltd.\nBC:2C:55\tBearFlag\tBear Flag Design, Inc.\nBC:2D:98\tThinglob\tThinGlobal LLC\nBC:2E:48\tArrisGro\tARRIS Group, Inc.\nBC:2F:3D\tVivoMobi\tvivo Mobile Communication Co., Ltd.\nBC:30:5B\tDell\tDell Inc.\nBC:30:7D\tWistronN\tWistron Neweb Corporation\nBC:30:7E\tWistronN\tWistron Neweb Corporation\nBC:30:D9\tArcadyan\tArcadyan Corporation\nBC:32:5F\tZhejiang\tZhejiang Dahua Technology Co., Ltd.\nBC:34:00\tIeeeRegi\tIEEE Registration Authority\nBC:34:00:00:00:00/28\tRedvisio\tRedvision CCTV\nBC:34:00:10:00:00/28\tIplinkTe\tIPLINK Technology Corp\nBC:34:00:20:00:00/28\tLifesmar\tLifeSmart\nBC:34:00:30:00:00/28\tAltronix\tAltronix Corporation\nBC:34:00:40:00:00/28\tDexcelDe\tDexcel Design Pvt Ltd\nBC:34:00:50:00:00/28\tNdsl\tNDSL, Inc.\nBC:34:00:60:00:00/28\tCameron\t\nBC:34:00:70:00:00/28\tQ-Produc\tQ-PRODUCTS a. s.\nBC:34:00:80:00:00/28\tMaticaTe\tMatica Technologies Ag\nBC:34:00:90:00:00/28\tShenzhen\tShenzhen PHilorise Technical Limited\nBC:34:00:A0:00:00/28\tAuralic\tAuralic Limited\nBC:34:00:B0:00:00/28\tFaroTech\tFaro Technologies, Inc.\nBC:34:00:C0:00:00/28\tParlayLa\tParlay Labs dba Highfive\nBC:34:00:D0:00:00/28\tHangzhou\tHangzhou Linker Digital Technology Co., Ltd\nBC:34:00:E0:00:00/28\tLldTechn\tLLD Technology Ltd.\nBC:34:00:F0:00:00/28\tPrivate\t\nBC:35:E5\tHydro\tHydro Systems Company\nBC:38:65\tJwcnetwo\tJwcnetworks\nBC:38:D2\tPandachi\tPandachip Limited\nBC:39:A6\tCsunSyst\tCSUN System Technology Co.,LTD\nBC:39:D9\tZ-Tec\t\nBC:3A:EA\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nBC:3B:AF\tApple\tApple, Inc.\nBC:3D:85\tHuaweiTe\tHuawei Technologies Co.,Ltd\nBC:3E:13\tAccordan\tAccordance Systems Inc.\nBC:3F:4E\tTeleepoc\tTeleepoch Ltd\nBC:3F:8F\tHuaweiTe\tHuawei Technologies Co.,Ltd\nBC:41:00\tCodacoEl\tCODACO ELECTRONIC s.r.o.\nBC:41:01\tShenzhen\tShenzhen TINNO Mobile Technology Corp.\nBC:43:77\tHangZhou\tHang Zhou Huite Technology Co.,ltd.\nBC:44:34\tShenzhen\tShenzhen TINNO Mobile Technology Corp.\nBC:44:86\tSamsungE\tSamsung Electronics Co.,Ltd\nBC:44:B0\tElastifi\tElastifile\nBC:45:2E\tKnowledg\tKnowledge Development for POF S.L.\nBC:46:99\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nBC:47:60\tSamsungE\tSamsung Electronics Co.,Ltd\nBC:4B:79\tSensingt\tSensingTek\nBC:4C:C4\tApple\tApple, Inc.\nBC:4D:FB\tHitronTe\tHitron Technologies. Inc\nBC:4E:3C\tCoreStaf\tCore Staff Co., Ltd.\nBC:4E:5D\tZhongmia\tZhongMiao Technology Co., Ltd.\nBC:51:FE\tSwannCom\tSwann communications Pty Ltd\nBC:52:B4\tNokia\t\nBC:52:B7\tApple\tApple, Inc.\nBC:54:36\tApple\tApple, Inc.\nBC:54:51\tSamsungE\tSamsung Electronics Co.,Ltd\nBC:54:F9\tDrogooTe\tDrogoo Technology Co., Ltd.\nBC:54:FC\tShenzhen\tShenzhen Mercury Communication Technologies Co.,Ltd.\nBC:5C:4C\tElecom\tElecom Co.,Ltd.\nBC:5E:A1\tPsikick\tPsiKick, Inc.\nBC:5F:F4\tAsrockIn\tASRock Incorporation\nBC:5F:F6\tMercuryC\tMercury Communication Technologies Co.,Ltd.\nBC:60:10\tQingdaoH\tQingdao Hisense Communications Co.,Ltd.\nBC:60:A7\tSonyInte\tSony Interactive Entertainment Inc.\nBC:62:0E\tHuaweiTe\tHuawei Technologies Co.,Ltd\nBC:62:9F\tTelenetP\tTelenet Systems P. Ltd.\nBC:64:4B\tArrisGro\tARRIS Group, Inc.\nBC:66:41\tIeeeRegi\tIEEE Registration Authority\nBC:66:41:00:00:00/28\tInsyncTe\tInSync Technology Ltd\nBC:66:41:10:00:00/28\tGlobalCh\tGlobal China Technology Limited\nBC:66:41:20:00:00/28\tProcess-\tProcess-Electronic Sp. z o.o.\nBC:66:41:30:00:00/28\tSolectri\tSolectria Renewables, LLC\nBC:66:41:40:00:00/28\tArgus-Sp\tARGUS-SPECTRUM\nBC:66:41:50:00:00/28\tScientif\tScientific Games\nBC:66:41:60:00:00/28\tIntuitiv\tIntuitive Surgical, Inc\nBC:66:41:70:00:00/28\tVsnMobil\tVSN Mobil\nBC:66:41:80:00:00/28\tShenzhen\tShenzhen Yaguang communication CO.,LTD\nBC:66:41:90:00:00/28\tShenzhen\tShenzhen General Measure Technology Co., Ltd\nBC:66:41:A0:00:00/28\tEblink\t\nBC:66:41:B0:00:00/28\tSidusNov\tSidus Novum Sp. z o. o.\nBC:66:41:C0:00:00/28\tShenzhen\tShenzhen Crave Communication Co.,ltd\nBC:66:41:D0:00:00/28\tUtilligh\tUtilLighting Co.,Ltd.\nBC:66:41:E0:00:00/28\tLucentTr\tLucent Trans Electronics Co., Ltd\nBC:66:41:F0:00:00/28\tPrivate\t\nBC:66:DE\tShadowCr\tShadow Creator Information Technology Co.,Ltd.\nBC:67:1C\tCisco\tCisco Systems, Inc\nBC:67:78\tApple\tApple, Inc.\nBC:67:84\tEnvironi\tEnvironics Oy\nBC:6A:16\tTdvine\t\nBC:6A:29\tTexasIns\tTexas Instruments\nBC:6A:2F\tHengeDoc\tHenge Docks LLC\nBC:6A:44\tCommendI\tCommend International GmbH\nBC:6B:4D\tNokia\t\nBC:6C:21\tApple\tApple, Inc.\nBC:6E:64\tSonyMobi\tSony Mobile Communications Inc\nBC:6E:76\tGreenEne\tGreen Energy Options Ltd\nBC:71:C1\tXtrillio\tXTrillion, Inc.\nBC:72:B1\tSamsungE\tSamsung Electronics Co.,Ltd\nBC:74:D7\tHangzhou\tHangZhou JuRu Technology CO.,LTD\nBC:75:74\tHuaweiTe\tHuawei Technologies Co.,Ltd\nBC:75:96\tBeijingB\tBeijing Broadwit Technology Co., Ltd.\nBC:76:4E\tRackspac\tRackspace US, Inc.\nBC:76:5E\tSamsungE\tSamsung Electronics Co.,Ltd\nBC:76:70\tHuaweiTe\tHuawei Technologies Co.,Ltd\nBC:77:37\tIntelCor\tIntel Corporate\nBC:77:9F\tSbm\tSBM Co., Ltd.\nBC:79:AD\tSamsungE\tSamsung Electronics Co.,Ltd\nBC:7D:D1\tRadioDat\tRadio Data Comms\nBC:81:1F\tIngate\tIngate Systems\nBC:81:99\tBasic\tBASIC Co.,Ltd.\nBC:82:5D\tMitsumiE\tMitsumi Electric Co.,Ltd.\nBC:83:85\tMicrosof\tMicrosoft Corporation\nBC:83:A7\tShenzhen\tSHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\nBC:85:1F\tSamsungE\tSamsung Electronics Co.,Ltd\nBC:85:56\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nBC:88:93\tVillbau\tVILLBAU Ltd.\nBC:88:C3\tNingboDo\tNingbo Dooya Mechanic & Electronic Technology Co., Ltd\nBC:8A:A3\tNhnEnter\tNHN Entertainment\nBC:8A:E8\tQingDaoH\tQing Dao Haier Telecom Co.,Ltd.\nBC:8B:55\tNppEliks\tNPP ELIKS America Inc. DBA T&M Atlantic\nBC:8C:CD\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\nBC:8D:0E\tNokia\t\nBC:90:3A\tRobertBo\tRobert Bosch GmbH\nBC:91:B5\tInfinixM\tInfinix mobility limited\nBC:92:6B\tApple\tApple, Inc.\nBC:93:25\tNingboJo\tNingbo Joyson Preh Car Connect Co.,Ltd.\nBC:96:80\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\nBC:98:89\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nBC:99:11\tZyxelCom\tZyxel Communications Corporation\nBC:99:BC\tFonseeTe\tFonSee Technology Inc.\nBC:9B:68\tTechnico\tTechnicolor CH USA Inc.\nBC:9C:31\tHuaweiTe\tHuawei Technologies Co.,Ltd\nBC:9C:C5\tBeijingH\tBeijing Huafei Technology Co., Ltd.\nBC:9D:A5\tDascomEu\tDASCOM Europe GmbH\nBC:9F:EF\tApple\tApple, Inc.\nBC:A0:42\tShanghai\tShanghai Flyco Electrical Appliance Co.,Ltd\nBC:A4:E1\tNabto\t\nBC:A5:8B\tSamsungE\tSamsung Electronics Co.,Ltd\nBC:A8:A6\tIntelCor\tIntel Corporate\nBC:A9:20\tApple\tApple, Inc.\nBC:A9:D6\tCyber-Ra\tCyber-Rain, Inc.\nBC:AB:7C\tTrnpKore\tTRnP KOREA Co Ltd\nBC:AD:28\tHangzhou\tHangzhou Hikvision Digital Technology Co.,Ltd.\nBC:AD:AB\tAvaya\tAvaya Inc\nBC:AE:C5\tAsustekC\tASUSTek COMPUTER INC.\nBC:AF:91\tTeConnec\tTE Connectivity Sensor Solutions\nBC:B1:81\tSharp\tSharp Corporation\nBC:B1:F3\tSamsungE\tSamsung Electronics Co.,Ltd\nBC:B2:2B\tEm-Tech\t\nBC:B3:08\tHongkong\tHongkong Ragentek Communication Technology Co.,Limited\nBC:B8:52\tCybera\tCybera, Inc.\nBC:BA:E1\tArec\tAREC Inc.\nBC:BB:C9\tKellendo\tKellendonk Elektronik GmbH\nBC:BC:46\tSksWeldi\tSKS Welding Systems GmbH\nBC:C0:0F\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nBC:C1:68\tDinboxSv\tDinBox Sverige AB\nBC:C2:3A\tThomsonV\tThomson Video Networks\nBC:C3:1B\tKygoLife\tKygo Life AS\nBC:C3:42\tPanasoni\tPanasonic Communications Co., Ltd.\nBC:C4:93\tCisco\tCisco Systems, Inc\nBC:C6:1A\tSpectraE\tSpectra Embedded Systems\nBC:C6:DB\tNokia\tNokia Corporation\nBC:C8:10\tCiscoSpv\tCisco SPVTG\nBC:CA:B5\tArrisGro\tARRIS Group, Inc.\nBC:CD:45\tVoismart\t\nBC:CF:CC\tHtc\tHTC Corporation\nBC:D1:1F\tSamsungE\tSamsung Electronics Co.,Ltd\nBC:D1:65\tCiscoSpv\tCisco SPVTG\nBC:D1:77\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nBC:D1:D3\tShenzhen\tShenzhen TINNO Mobile Technology Corp.\nBC:D5:B6\tD2dTechn\td2d technologies\nBC:D7:13\tOwlLabs\tOwl Labs\nBC:D9:40\tAsr\tASR Co,.Ltd.\nBC:DD:C2\tEspressi\tEspressif Inc.\nBC:E0:9D\tEoslink\t\nBC:E1:43\tApple\tApple, Inc.\nBC:E2:65\tHuaweiTe\tHuawei Technologies Co.,Ltd\nBC:E5:9F\tWaterwor\tWATERWORLD Technology Co.,LTD\nBC:E6:3F\tSamsungE\tSamsung Electronics Co.,Ltd\nBC:E7:67\tQuanzhou\tQuanzhou  TDX Electronics Co., Ltd\nBC:EA:2B\tCitycom\tCityCom GmbH\nBC:EA:FA\tHewlettP\tHewlett Packard\nBC:EB:5F\tFujianBe\tFujian Beifeng Telecom Technology Co., Ltd.\nBC:EC:23\tShenzhen\tSHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\nBC:EC:5D\tApple\tApple, Inc.\nBC:EE:7B\tAsustekC\tASUSTek COMPUTER INC.\nBC:F1:F2\tCisco\tCisco Systems, Inc\nBC:F2:92\tPlantron\tPlantronics, Inc.\nBC:F2:AF\tDevolo\tdevolo AG\nBC:F3:10\tAerohive\tAerohive Networks Inc.\nBC:F5:AC\tLgElectr\tLG Electronics (Mobile Communications)\nBC:F6:1C\tGeomodel\tGeomodeling Wuxi Technology Co. Ltd.\nBC:F6:85\tD-LinkIn\tD-Link International\nBC:F8:11\tXiamenDn\tXiamen DNAKE Technology Co.,Ltd\nBC:FE:8C\tAltronic\tAltronic, LLC\nBC:FE:D9\tApple\tApple, Inc.\nBC:FF:AC\tTopcon\tTopcon Corporation\nBC:FF:EB\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nC0:00:00\tWesternD\tWestern Digital (may be reversed 00 00 C0?)\nC0:02:8D\tWinstarD\tWINSTAR Display CO.,Ltd\nC0:03:80\tJuniperN\tJuniper Networks\nC0:05:C2\tArrisGro\tARRIS Group, Inc.\nC0:0D:7E\tAdditech\tAdditech, Inc.\nC0:11:73\tSamsungE\tSamsung Electronics Co.,Ltd\nC0:11:A6\tFort-Tel\tFort-Telecom ltd.\nC0:12:42\tAlphaSec\tAlpha Security Products\nC0:13:2B\tSichuanC\tSichuan Changhong Electric Ltd.\nC0:14:3D\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nC0:17:4D\tSamsungE\tSamsung Electronics Co.,Ltd\nC0:18:85\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nC0:1A:DA\tApple\tApple, Inc.\nC0:1E:9B\tPixaviAs\tPixavi AS\nC0:21:0D\tShenzhen\tSHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\nC0:22:50\tPrivate\t\nC0:25:06\tAvm\tAVM GmbH\nC0:25:5C\tCisco\tCisco Systems, Inc\nC0:25:67\tNexxtSol\tNexxt Solutions\nC0:25:A2\tNecPlatf\tNEC Platforms, Ltd.\nC0:25:E9\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nC0:27:B9\tBeijingN\tBeijing National Railway Research & Design Institute  of Signal & Communication Co., Ltd.\nC0:28:8D\tLogitech\tLogitech, Inc\nC0:29:73\tAudyssey\tAudyssey Laboratories Inc.\nC0:29:F3\tXysystem\t\nC0:2B:FC\tInesAppl\tiNES. applied informatics GmbH\nC0:2C:7A\tShenzhen\tShenzhen Horn Audio Co.,Ltd.\nC0:2D:EE\tCuff\t\nC0:2F:F1\tVoltaNet\tVolta Networks\nC0:33:5E\tMicrosof\tMicrosoft\nC0:34:B4\tGigaston\tGigastone Corporation\nC0:35:80\tA&RTech\tA&R TECH\nC0:35:BD\tVelocyte\tVelocytech Aps\nC0:35:C5\tProsoft\tProsoft Systems LTD\nC0:38:96\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nC0:38:F9\tNokiaDan\tNokia Danmark A/S\nC0:3B:8F\tMinicomD\tMinicom Digital Signage\nC0:3D:46\tShanghai\tShanghai Sango Network Technology Co.,Ltd\nC0:3E:0F\tBskyb\tBSkyB Ltd\nC0:3F:0E\tNetgear\t\nC0:3F:2A\tBiscotti\tBiscotti, Inc.\nC0:3F:D5\tElitegro\tElitegroup Computer Systems Co.,Ltd.\nC0:40:04\tMedicaro\tMedicaroid Corporation\nC0:41:F6\tLgElectr\tLg Electronics Inc\nC0:42:D0\tJuniperN\tJuniper Networks\nC0:43:01\tEpecOy\tEpec Oy\nC0:44:E3\tShenzhen\tShenzhen Sinkna Electronics Co., LTD\nC0:48:E6\tSamsungE\tSamsung Electronics Co.,Ltd\nC0:48:FB\tShenzhen\tShenzhen JingHanDa Electronics Co.Ltd\nC0:49:3D\tMaitrise\tMaitrise Technologique\nC0:4A:00\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nC0:4A:09\tZhejiang\tZhejiang Everbright Communication Equip. Co,. Ltd\nC0:4D:F7\tSerelec\t\nC0:56:27\tBelkinIn\tBelkin International Inc.\nC0:56:E3\tHangzhou\tHangzhou Hikvision Digital Technology Co.,Ltd.\nC0:57:BC\tAvaya\tAvaya Inc\nC0:58:A7\tPico\tPico Systems Co., Ltd.\nC0:5E:6F\tVStonkau\tV. Stonkaus firma Kodinis Raktas\nC0:5E:79\tShenzhen\tShenzhen Huaxun Ark Technologies Co.,Ltd\nC0:61:18\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nC0:62:6B\tCisco\tCisco Systems, Inc\nC0:63:94\tApple\tApple, Inc.\nC0:64:C6\tNokia\tNokia Corporation\nC0:65:99\tSamsungE\tSamsung Electronics Co.,Ltd\nC0:67:AF\tCisco\tCisco Systems, Inc\nC0:6C:0F\tDobbsSta\tDobbs Stanford\nC0:6C:6D\tMagnemot\tMagneMotion, Inc.\nC0:6D:1A\tTianjinH\tTianjin Henxinhuifeng Technology Co.,Ltd.\nC0:70:09\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC0:74:2B\tShenzhen\tShenzhen Xunlong Software Co.,Limited\nC0:74:AD\tGrandstr\tGrandstream Networks, Inc.\nC0:78:78\tFlextron\tFLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.\nC0:7B:BC\tCisco\tCisco Systems, Inc\nC0:7C:D1\tPegatron\tPegatron Corporation\nC0:7E:40\tShenzhen\tShenzhen Xdk Communication Equipment Co.,Ltd\nC0:81:35\tNingboFo\tNingbo Forfan technology Co., LTD\nC0:81:70\tEffigisG\tEffigis GeoSolutions\nC0:83:0A\t2wire\t2Wire Inc\nC0:83:59\tIeeeRegi\tIEEE Registration Authority\nC0:83:59:00:00:00/28\tChongqin\tChongqing Jiuyu Smart Technology Co.Ltd.\nC0:83:59:10:00:00/28\tGemvaxTe\tGemvax Technology ,. Co.Ltd\nC0:83:59:20:00:00/28\tHuaxinSm\tHuaxin SM Optics Co. LTD.\nC0:83:59:30:00:00/28\tPchEngin\tPCH Engineering A/S\nC0:83:59:40:00:00/28\tAnts\t\nC0:83:59:50:00:00/28\tViperDes\tViper Design, LLC\nC0:83:59:60:00:00/28\tBeijingC\tBeijing Cloud Fly Technology Development Co.Ltd\nC0:83:59:70:00:00/28\tFuzhouFd\tFuzhou Fdlinker Technology Co.,LTD\nC0:83:59:80:00:00/28\tIstaInte\tista International GmbH\nC0:83:59:90:00:00/28\tShenzhen\tShenzhen Pay Device Technology Co., Ltd.\nC0:83:59:A0:00:00/28\tShanghai\tShanghai Charmhope Information Technology Co.,Ltd.\nC0:83:59:B0:00:00/28\tSuzhouSi\tSuzhou Siheng Science and Technology Ltd.\nC0:83:59:C0:00:00/28\tPrivate\t\nC0:83:59:D0:00:00/28\tGardnerD\tGardner Denver Thomas GmbH\nC0:83:59:E0:00:00/28\tCyberSci\tCyber Sciences, Inc.\nC0:84:7A\tApple\tApple, Inc.\nC0:84:7D\tAmpakTec\tAMPAK Technology, Inc.\nC0:84:88\tFinis\tFinis Inc\nC0:85:4C\tRagentek\tRagentek Technology Group\nC0:87:EB\tSamsungE\tSamsung Electronics Co.,Ltd\nC0:88:5B\tSndTech\tSnD Tech Co., Ltd.\nC0:89:97\tSamsungE\tSamsung Electronics Co.,Ltd\nC0:8A:DE\tRuckusWi\tRuckus Wireless\nC0:8B:6F\tSISistem\tS I Sistemas Inteligentes Eletrônicos Ltda\nC0:8C:60\tCisco\tCisco Systems, Inc\nC0:91:32\tPatriotM\tPatriot Memory\nC0:91:34\tProcurve\tProCurve Networking by HP\nC0:97:27\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\nC0:98:79\tAcer\tAcer Inc.\nC0:98:DA\tChinaMob\tChina Mobile IOT Company Limited\nC0:98:E5\tUniversi\tUniversity of Michigan\nC0:9A:71\tXiamenMe\tXiamen Meitu Mobile Technology Co.Ltd\nC0:9C:04\tShaanxiG\tShaanxi GuoLian Digital TV Technology Co.,Ltd.\nC0:9C:92\tCoby\t\nC0:9D:26\tTopiconH\tTopicon HK Lmd.\nC0:9F:05\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nC0:9F:42\tApple\tApple, Inc.\nC0:A0:0D\tArrisGro\tARRIS Group, Inc.\nC0:A0:BB\tD-LinkIn\tD-Link International\nC0:A0:C7\tFairfiel\tFairfield Industries\nC0:A0:DE\tMultiTou\tMulti Touch Oy\nC0:A0:E2\tEdenInno\tEden Innovations\nC0:A1:A2\tMarqmetr\tMarqMetrix\nC0:A2:6D\tAbbottPo\tAbbott Point of Care\nC0:A3:64\t3dMassac\t3D Systems Massachusetts\nC0:A3:9E\tEarthcam\tEarthCam, Inc.\nC0:A5:3E\tApple\tApple, Inc.\nC0:A5:DD\tShenzhen\tShenzhen Mercury Communication Technologies Co.,Ltd.\nC0:A6:00\tApple\tApple, Inc.\nC0:A8:F0\tAdamsonE\tAdamson Systems Engineering\nC0:AA:68\tOsasiTec\tOSASI Technos Inc.\nC0:AC:54\tSagemcom\tSagemcom Broadband SAS\nC0:B3:39\tComigo\tComigo Ltd.\nC0:B3:57\tYoshikiE\tYoshiki Electronics Industry Ltd.\nC0:B6:58\tApple\tApple, Inc.\nC0:B6:F9\tIntelCor\tIntel Corporate\nC0:B7:13\tBeijingX\tBeijing Xiaoyuer Technology Co. Ltd.\nC0:B8:B1\tBitbox\tBitBox Ltd\nC0:BA:E6\tApplicat\tApplication Solutions (Electronics and Vision) Ltd\nC0:BD:42\tZpaSmart\tZPA Smart Energy a.s.\nC0:BD:C8\tSamsungE\tSamsung Electronics Co.,Ltd\nC0:BD:D1\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\nC0:BF:A7\tJuniperN\tJuniper Networks\nC0:BF:C0\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC0:C1:C0\tCisco-Li\tCisco-Linksys, LLC\nC0:C3:B6\tAutomati\tAutomatic Systems\nC0:C5:20\tRuckusWi\tRuckus Wireless\nC0:C5:22\tArrisGro\tARRIS Group, Inc.\nC0:C5:69\tShanghai\tShanghai Lynuc Cnc Technology Co.,Ltd\nC0:C6:87\tCiscoSpv\tCisco SPVTG\nC0:C9:46\tMitsuyaL\tMitsuya Laboratories Inc.\nC0:C9:76\tShenzhen\tShenzhen TINNO Mobile Technology Corp.\nC0:CB:38\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nC0:CC:F8\tApple\tApple, Inc.\nC0:CE:CD\tApple\tApple, Inc.\nC0:CF:A3\tCreative\tCreative Electronics & Software, Inc.\nC0:D0:12\tApple\tApple, Inc.\nC0:D0:44\tSagemcom\tSagemcom Broadband SAS\nC0:D0:FF\tChinaMob\tChina Mobile IOT Company Limited\nC0:D2:F3\tHuiZhouG\tHui Zhou Gaoshengda Technology Co.,LTD\nC0:D3:91\tIeeeRegi\tIEEE Registration Authority\nC0:D3:91:00:00:00/28\tFuzhouJi\tFuzhou Jinshi Technology Co.,Ltd.\nC0:D3:91:10:00:00/28\tB9creati\tB9Creations\nC0:D3:91:20:00:00/28\tHofonAut\tHofon Automation Co.,Ltd\nC0:D3:91:30:00:00/28\tIxonBV\tIxon B.V.\nC0:D3:91:40:00:00/28\tVernierS\tVernier Software & Technology\nC0:D3:91:50:00:00/28\tWitagg\tWiTagg, Inc\nC0:D3:91:60:00:00/28\tErnitec\t\nC0:D3:91:70:00:00/28\tAlnetz\tALNETz Co.,LTD\nC0:D3:91:80:00:00/28\tXenaSecu\tXena Security Limited\nC0:D3:91:90:00:00/28\tXxterBv\txxter bv\nC0:D3:91:A0:00:00/28\tAlphaAud\tAlpha Audiotronics, Inc.\nC0:D3:91:B0:00:00/28\tPrivate\t\nC0:D3:91:C0:00:00/28\tZhinengg\tZhinengguo technology company limited\nC0:D3:91:D0:00:00/28\tRegulus\tRegulus Co.,Ltd.\nC0:D3:91:E0:00:00/28\tSamsaraN\tSamsara Networks Inc\nC0:D3:C0\tSamsungE\tSamsung Electronics Co.,Ltd\nC0:D9:62\tAskeyCom\tAskey Computer Corp\nC0:D9:F7\tShandong\tShanDong Domor Intelligent S&T CO.,Ltd\nC0:DA:74\tHangzhou\tHangzhou Sunyard Technology Co., Ltd.\nC0:DC:6A\tQingdaoE\tQingdao Eastsoft Communication Technology Co.,LTD\nC0:DF:77\tConradEl\tConrad Electronic SE\nC0:E4:22\tTexasIns\tTexas Instruments\nC0:E4:2D\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nC0:E5:4E\tAriesEmb\tARIES Embedded GmbH\nC0:EA:E4\tSonicwal\tSonicwall\nC0:EE:40\tLairdTec\tLaird Technologies\nC0:EE:B5\tEniceNet\tEnice Network.\nC0:EE:FB\tOneplusT\tOnePlus Tech (Shenzhen) Ltd\nC0:F1:C4\tPacidal\tPacidal Corporation Ltd.\nC0:F2:FB\tApple\tApple, Inc.\nC0:F4:E6\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC0:F6:36\tHangzhou\tHangzhou Kuaiyue Technologies, Ltd.\nC0:F7:9D\tPowercod\tPowercode\nC0:F8:DA\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nC0:F9:45\tToshibaT\tToshiba Toko Meter Systems Co., LTD.\nC0:F9:91\tGmeStand\tGME Standard Communications P/L\nC0:FF:D4\tNetgear\t\nC4:00:06\tLipiData\tLipi Data Systems Ltd.\nC4:00:49\tKamama\t\nC4:00:AD\tAdvantec\tAdvantech Technology (CHINA) Co., Ltd.\nC4:01:42\tMaxmedia\tMaxMedia Technology Limited\nC4:01:7C\tRuckusWi\tRuckus Wireless\nC4:01:B1\tSeektech\tSeekTech INC\nC4:01:CE\tPresitio\tPRESITION (2000) CO., LTD.\nC4:04:15\tNetgear\t\nC4:04:7B\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\nC4:05:28\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC4:07:2F\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC4:08:4A\tNokia\t\nC4:08:80\tShenzhen\tShenzhen UTEPO Tech Co., Ltd.\nC4:09:38\tFujianSt\tFUJIAN STAR-NET COMMUNICATION CO.,LTD\nC4:0A:CB\tCisco\tCisco Systems, Inc\nC4:0B:CB\tXiaomiCo\tXiaomi Communications Co Ltd\nC4:0E:45\tAckNetwo\tACK Networks,Inc.\nC4:0F:09\tHermesEl\tHermes electronic GmbH\nC4:10:8A\tRuckusWi\tRuckus Wireless\nC4:11:E0\tBullGrou\tBull Group Co., Ltd\nC4:12:F5\tD-LinkIn\tD-Link International\nC4:13:E2\tAerohive\tAerohive Networks Inc.\nC4:14:3C\tCisco\tCisco Systems, Inc\nC4:16:FA\tPrysm\tPrysm Inc\nC4:17:FE\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nC4:19:8B\tDominion\tDominion Voting Systems Corporation\nC4:19:EC\tQualisys\tQualisys AB\nC4:1C:FF\tVizio\tVizio, Inc\nC4:1E:CE\tHmiSourc\tHMI Sources Ltd.\nC4:21:C8\tKyocera\tKyocera Corporation\nC4:23:7A\tWhiznets\tWhizNets Inc.\nC4:23:A2\tPtEmsoni\tPT. Emsonic Indonesia\nC4:24:2E\tGalvanic\tGalvanic Applied Sciences Inc\nC4:24:56\tPaloAlto\tPalo Alto Networks\nC4:26:28\tAiroWire\tAiro Wireless\nC4:27:95\tTechnico\tTechnicolor CH USA Inc.\nC4:28:2D\tEmbedded\tEmbedded Intellect Pty Ltd\nC4:29:1D\tKlemsanE\tKlemsan Elektrik Elektronik San.Ve Tic.As.\nC4:2C:03\tApple\tApple, Inc.\nC4:2C:4F\tQingdaoH\tQingdao Hisense Mobile Communication Technology Co,Ltd\nC4:2F:90\tHangzhou\tHangzhou Hikvision Digital Technology Co.,Ltd.\nC4:30:18\tMcsLogic\tMCS Logic Inc.\nC4:33:06\tChinaMob\tChina Mobile Group Device Co.,Ltd.\nC4:34:6B\tHewlettP\tHewlett Packard\nC4:36:55\tShenzhen\tShenzhen Fenglian Technology Co., Ltd.\nC4:36:6C\tLgInnote\tLG Innotek\nC4:36:DA\tRustelet\tRusteletech Ltd.\nC4:38:D3\tTagatec\tTagatec Co.,Ltd\nC4:39:3A\tSmcNetwo\tSMC Networks Inc\nC4:3A:9F\tSiconix\tSiconix Inc.\nC4:3A:BE\tSonyMobi\tSony Mobile Communications Inc\nC4:3C:3C\tCybelecS\tCybelec Sa\nC4:3D:C7\tNetgear\t\nC4:40:44\tRacktop\tRackTop Systems Inc.\nC4:42:02\tSamsungE\tSamsung Electronics Co.,Ltd\nC4:43:8F\tLgElectr\tLG Electronics (Mobile Communications)\nC4:44:A0\tCisco\tCisco Systems, Inc\nC4:45:67\tSambonPr\tSAMBON PRECISON and ELECTRONICS\nC4:45:EC\tShanghai\tShanghai Yali Electron Co.,LTD\nC4:46:19\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nC4:47:3F\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC4:48:38\tSatcomDi\tSatcom Direct, Inc.\nC4:49:BB\tMitsumiE\tMitsumi Electric Co.,Ltd.\nC4:4A:D0\tFireflie\tFireflies Systems\nC4:4B:44\tOmniprin\tOmniprint Inc.\nC4:4B:D1\tWallysCo\tWallys Communications  Teachnologies Co.,Ltd.\nC4:4E:1F\tBluen\t\nC4:4E:AC\tShenzhen\tShenzhen Shiningworth Technology Co., Ltd.\nC4:4F:33\tEspressi\tEspressif Inc.\nC4:50:06\tSamsungE\tSamsung Electronics Co.,Ltd\nC4:51:8D\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\nC4:54:44\tQuantaCo\tQuanta Computer Inc.\nC4:55:A6\tCadacHol\tCadac Holdings Ltd\nC4:55:C2\tBach-Sim\tBach-Simpson\nC4:56:00\tGalleonE\tGalleon Embedded Computing\nC4:56:FE\tLavaInte\tLava International Ltd.\nC4:57:1F\tJuneLife\tJune Life Inc\nC4:57:6E\tSamsungE\tSamsung Electronics Co.,Ltd\nC4:58:C2\tShenzhen\tShenzhen TATFOOK Technology Co., Ltd.\nC4:59:76\tFugooCoo\tFugoo Coorporation\nC4:5D:D8\tHdmiForu\tHDMI Forum\nC4:60:44\tEverexEl\tEverex Electronics Limited\nC4:61:8B\tApple\tApple, Inc.\nC4:62:6B\tZptVigan\tZPT Vigantice\nC4:62:EA\tSamsungE\tSamsung Electronics Co.,Ltd\nC4:63:54\tU-Raku\tU-Raku, Inc.\nC4:64:13\tCisco\tCisco Systems, Inc\nC4:64:E3\tTexasIns\tTexas Instruments\nC4:66:99\tVivoMobi\tvivo Mobile Communication Co., Ltd.\nC4:67:B5\tLibraton\tLibratone A/S\nC4:68:D0\tVtechTel\tVTech Telecommunications Ltd.\nC4:69:3E\tTurbulen\tTurbulence Design Inc.\nC4:6A:B7\tXiaomiCo\tXiaomi Communications Co Ltd\nC4:6B:B4\tMyidkey\t\nC4:6D:F1\tDatagrav\tDataGravity\nC4:6E:1F\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nC4:6E:7B\tShenzhen\tSHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\nC4:70:0B\tGuangzho\tGuangzhou Chip Technologies Co.,Ltd\nC4:71:30\tFonTechn\tFon Technology S.L.\nC4:71:54\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nC4:71:FE\tCisco\tCisco Systems, Inc\nC4:72:95\tCisco\tCisco Systems, Inc\nC4:73:1E\tSamsungE\tSamsung Electronics Co.,Ltd\nC4:74:F8\tHotPeppe\tHot Pepper, Inc.\nC4:77:AB\tBeijingA\tBeijing ASU Tech Co.,Ltd\nC4:77:AF\tAdvanced\tAdvanced Digital Broadcast SA\nC4:7B:2F\tBeijingJ\tBeijing JoinHope Image Technology Ltd.\nC4:7B:A3\tNavis\tNAVIS Inc.\nC4:7C:8D\tIeeeRegi\tIEEE Registration Authority\nC4:7C:8D:00:00:00/28\tAti\t\nC4:7C:8D:10:00:00/28\tLynxInno\tLynx Innovation Litimed\nC4:7C:8D:20:00:00/28\tStar2sta\tStar2Star Communications, LLC\nC4:7C:8D:30:00:00/28\tWatec\tWatec Co., Ltd.\nC4:7C:8D:40:00:00/28\tRobostar\t\nC4:7C:8D:50:00:00/28\tPascal\tPASCAL Co., Ltd.\nC4:7C:8D:60:00:00/28\tHhccPlan\tHHCC Plant Technology Co.,Ltd.\nC4:7C:8D:70:00:00/28\tAwiselin\tAwiselink Co., Ltd.\nC4:7C:8D:80:00:00/28\tGetemedM\tGETEMED Medizin- und Informationstechnik AG\nC4:7C:8D:90:00:00/28\tAirbusDs\tAirbus DS - SLC\nC4:7C:8D:A0:00:00/28\tSilvusTe\tSilvus technologies inc\nC4:7C:8D:B0:00:00/28\tGcAutoma\tGc Automation Co,Ltd\nC4:7C:8D:C0:00:00/28\tInotecSi\tINOTEC Sicherheitstechnik GmbH\nC4:7C:8D:D0:00:00/28\tAnhuiGua\tAnhui GuangXing Linked-Video Communication Technology Co, Ltd.\nC4:7C:8D:E0:00:00/28\tLaborStr\tLabor Strauss Sicherungsanlagenbau GmbH\nC4:7D:46\tFujitsu\tFujitsu Limited\nC4:7D:4F\tCisco\tCisco Systems, Inc\nC4:7D:CC\tZebraTec\tZebra Technologies Inc\nC4:7D:FE\tANSoluti\tA.N. Solutions GmbH\nC4:7F:51\tInventek\tInventek Systems\nC4:82:3F\tFujianNe\tFujian Newland Auto-ID Tech. Co,.Ltd.\nC4:82:4E\tChangzho\tChangzhou Uchip Electronics Co., LTD.\nC4:83:6F\tCiena\tCiena Corporation\nC4:84:66\tApple\tApple, Inc.\nC4:85:08\tIntelCor\tIntel Corporate\nC4:86:E9\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC4:88:E5\tSamsungE\tSamsung Electronics Co.,Ltd\nC4:8E:8F\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nC4:8F:07\tShenzhen\tShenzhen Yihao Hulian Science and Technology Co., Ltd.\nC4:91:3A\tShenzhen\tShenzhen Sanland Electronic Co., ltd.\nC4:92:4C\tKeisokuk\tKeisokuki Center Co.,Ltd.\nC4:93:00\t8devices\t\nC4:93:13\t100fioNe\t100fio networks technology llc\nC4:93:80\tSpeedyte\tSpeedytel technology\nC4:93:D9\tSamsungE\tSamsung Electronics Co.,Ltd\nC4:95:00\tAmazonTe\tAmazon Technologies Inc.\nC4:95:A2\tShenzhen\tShenzhen Weijiu Industry And Trade Development Co., Ltd\nC4:98:05\tMinieumN\tMinieum Networks, Inc\nC4:98:5C\tHuiZhouG\tHui Zhou Gaoshengda Technology Co.,LTD\nC4:98:80\tApple\tApple, Inc.\nC4:9A:02\tLgElectr\tLG Electronics (Mobile Communications)\nC4:9D:ED\tMicrosof\tMicrosoft Corporation\nC4:9E:41\tG24Power\tG24 Power Limited\nC4:9F:4C\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC4:9F:F3\tMciaoTec\tMciao Technologies, Inc.\nC4:A3:66\tZte\tzte corporation\nC4:A8:1D\tD-LinkIn\tD-Link International\nC4:AA:A1\tSummitDe\tSUMMIT DEVELOPMENT, spol.s r.o.\nC4:AB:B2\tVivoMobi\tvivo Mobile Communication Co., Ltd.\nC4:AD:21\tMediaedg\tMEDIAEDGE Corporation\nC4:AD:F1\tGopeace\tGOPEACE Inc.\nC4:AE:12\tSamsungE\tSamsung Electronics Co.,Ltd\nC4:B3:01\tApple\tApple, Inc.\nC4:B5:12\tGeneralE\tGeneral Electric Digital Energy\nC4:B8:B4\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC4:B9:CD\tCisco\tCisco Systems, Inc\nC4:BA:99\tI+MeActi\tI+ME Actia Informatik und Mikro-Elektronik GmbH\nC4:BA:A3\tBeijingW\tBeijing Winicssec Technologies Co., Ltd.\nC4:BB:4C\tZebraInf\tZebra Information Tech Co. Ltd\nC4:BB:EA\tPakedgeD\tPakedge Device and Software Inc\nC4:BD:6A\tSkf\tSKF GmbH\nC4:BE:84\tTexasIns\tTexas Instruments\nC4:BE:D4\tAvaya\tAvaya Inc\nC4:C0:AE\tMidoriEl\tMidori Electronic Co., Ltd.\nC4:C1:9F\tNational\tNational Oilwell Varco Instrumentation, Monitoring, and Optimization (NOV IMO)\nC4:C5:63\tTecnoMob\tTecno Mobile Limited\nC4:C7:55\tBeijingH\tBeijing HuaqinWorld Technology Co.,Ltd\nC4:C9:19\tEnergyIm\tEnergy Imports Ltd\nC4:C9:EC\tGugaooHk\tGugaoo   HK Limited\nC4:CA:D9\tHangzhou\tHangzhou H3C Technologies Co., Limited\nC4:CB:6B\tAiristaF\tAirista Flow, Inc.\nC4:CD:45\tBeijingB\tBeijing Boomsense Technology CO.,LTD.\nC4:CD:82\tHangzhou\tHangzhou Lowan Information Technology Co., Ltd.\nC4:D1:97\tVentiaUt\tVentia Utility Services\nC4:D4:89\tJiangsuJ\tJiangSu Joyque Information Industry Co.,Ltd\nC4:D6:55\tTercelTe\tTercel technology co.,ltd\nC4:D9:87\tIntelCor\tIntel Corporate\nC4:DA:26\tNoblexSa\tNoblex Sa\nC4:DA:7D\tIviumTec\tIvium Technologies B.V.\nC4:E0:32\tIeee1904\tIEEE 1904.1 Working Group\nC4:E1:7C\tU2s\tU2S co.\nC4:E5:10\tMechatro\tMechatro, Inc.\nC4:E7:BE\tScspro\tSCSpro Co.,Ltd\nC4:E9:2F\tSciex\tAB Sciex\nC4:E9:84\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nC4:EA:1D\tTechnico\tTechnicolor\nC4:EB:E3\tRrcnSas\tRrcn Sas\nC4:ED:BA\tTexasIns\tTexas Instruments\nC4:EE:AE\tVssMonit\tVSS Monitoring\nC4:EE:F5\tIi-Vi\tII-VI Incorporated\nC4:EF:70\tHomeSkin\tHome Skinovations\nC4:F0:81\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC4:F1:D1\tBeijingS\tBeijing Sogou Technology Development Co., Ltd.\nC4:F3:12\tTexasIns\tTexas Instruments\nC4:F4:64\tSpicaInt\tSpica international\nC4:F5:7C\tBrocadeC\tBrocade Communications Systems, Inc.\nC4:F5:A5\tKumalift\tKumalift Co., Ltd.\nC4:FC:E4\tDishtvNz\tDishTV NZ Ltd\nC4:FD:E6\tDrtech\t\nC4:FE:E2\tAmiccomE\tAMICCOM Electronics Corporation\nC4:FF:1F\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC4:FF:BC\tIeeeRegi\tIEEE Registration Authority\nC4:FF:BC:00:00:00/28\tDanegoBv\tDanego BV\nC4:FF:BC:10:00:00/28\tVisatech\tVISATECH C0., LTD.\nC4:FF:BC:20:00:00/28\tMobiletr\tMobiletron Electronics Co., Ltd\nC4:FF:BC:30:00:00/28\tShenzhen\tShenzhen Kalif Electronics Co.,Ltd\nC4:FF:BC:40:00:00/28\tImagetec\tiMageTech CO.,LTD.\nC4:FF:BC:50:00:00/28\tComtime\tcomtime GmbH\nC4:FF:BC:60:00:00/28\tShenzhen\tShenzhen C & D Electronics Co., Ltd.\nC4:FF:BC:70:00:00/28\tCritical\tCritical Link\nC4:FF:BC:80:00:00/28\tShenzhen\tShenZhen ZYT Technology co., Ltd\nC4:FF:BC:90:00:00/28\tGsmInnov\tGSM Innovations Pty Ltd\nC4:FF:BC:A0:00:00/28\tAdvanced\tAdvanced Navigation\nC4:FF:BC:B0:00:00/28\tKagaElec\tKaga Electronics Co.,Ltd.\nC4:FF:BC:C0:00:00/28\tKyongboE\tKyongBo Electric Co., Ltd.\nC4:FF:BC:D0:00:00/28\tBeijingK\tBeijing  KDF information technology co. LTD.\nC4:FF:BC:E0:00:00/28\tViratec\tviRaTec GmbH\nC8:00:84\tCisco\tCisco Systems, Inc\nC8:02:10\tLgInnote\tLG Innotek\nC8:02:58\tItwGseAp\tITW GSE ApS\nC8:02:8F\tNovaElec\tNova Electronics (Shanghai) Co., Ltd.\nC8:02:A6\tBeijingN\tBeijing Newmine Technology\nC8:07:18\tTdsi\t\nC8:08:E9\tLgElectr\tLG Electronics\nC8:0A:A9\tQuantaCo\tQuanta Computer Inc.\nC8:0C:C8\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC8:0E:14\tAvmAudio\tAVM Audiovisuelles Marketing und Computersysteme GmbH\nC8:0E:77\tLeShiZhi\tLe Shi Zhi Xin Electronic Technology (Tianjin) Limited\nC8:0E:95\tOmnilync\tOmniLync Inc.\nC8:10:73\tCenturyO\tCentury Opticomm Co.,Ltd\nC8:14:51\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC8:14:79\tSamsungE\tSamsung Electronics Co.,Ltd\nC8:16:A5\tMasimo\tMasimo Corporation\nC8:16:BD\tQingdaoH\tQingdao Hisense Communications Co.,Ltd.\nC8:19:F7\tSamsungE\tSamsung Electronics Co.,Ltd\nC8:1A:FE\tDlogic\tDLOGIC GmbH\nC8:1B:5C\tBctech\t\nC8:1B:6B\tInnovaSe\tInnova Security\nC8:1E:8E\tAdvSecur\tADV Security (S) Pte Ltd\nC8:1E:E7\tApple\tApple, Inc.\nC8:1F:66\tDell\tDell Inc.\nC8:1F:BE\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC8:1F:EA\tAvaya\tAvaya Inc\nC8:20:8E\tStoraged\tStoragedata\nC8:21:58\tIntelCor\tIntel Corporate\nC8:25:E1\tLemobile\tLemobile Information Technology (Beijing) Co., Ltd\nC8:29:2A\tBarunEle\tBarun Electronics\nC8:2A:14\tApple\tApple, Inc.\nC8:2E:94\tHalfaEnt\tHalfa Enterprise Co., Ltd.\nC8:31:68\tEzex\teZEX corporation\nC8:32:32\tHuntingI\tHunting Innova\nC8:33:4B\tApple\tApple, Inc.\nC8:34:8E\tIntelCor\tIntel Corporate\nC8:35:B8\tEricsson\tEricsson, EAB/RWI/K\nC8:38:70\tSamsungE\tSamsung Electronics Co.,Ltd\nC8:3A:35\tTendaTec\tTenda Technology Co., Ltd.\nC8:3A:6B\tRoku\tRoku, Inc\nC8:3B:45\tJri\t\nC8:3C:85\tApple\tApple, Inc.\nC8:3D:97\tNokia\tNokia Corporation\nC8:3D:D4\tCybertan\tCyberTAN Technology Inc.\nC8:3D:FC\tPioneerD\tPioneer DJ Corporation\nC8:3E:99\tTexasIns\tTexas Instruments\nC8:3E:A7\tKunbus\tKUNBUS GmbH\nC8:3F:26\tMicrosof\tMicrosoft Corporation\nC8:3F:B4\tArrisGro\tARRIS Group, Inc.\nC8:40:29\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nC8:45:29\tImkNetwo\tIMK Networks Co.,Ltd\nC8:45:44\tAsiaPaci\tAsia Pacific CIS (Wuxi) Co, Ltd\nC8:45:8F\tWyler\tWyler AG\nC8:47:82\tAresonTe\tAreson Technology Corp.\nC8:47:8C\tBeken\tBeken Corporation\nC8:48:F5\tMedisonX\tMEDISON Xray Co., Ltd\nC8:4C:75\tCisco\tCisco Systems, Inc\nC8:50:E9\tRaisecom\tRaisecom Technology CO., LTD\nC8:51:95\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC8:54:4B\tZyxelCom\tZyxel Communications Corporation\nC8:56:45\tIntermas\tIntermas France\nC8:56:63\tSunflexE\tSunflex Europe GmbH\nC8:5B:76\tLcfcHefe\tLCFC(HeFei) Electronics Technology co., ltd\nC8:60:00\tAsustekC\tASUSTek COMPUTER INC.\nC8:63:F1\tSonyInte\tSony Interactive Entertainment Inc.\nC8:64:C7\tZte\tzte corporation\nC8:66:2C\tBeijingH\tBeijing Haitai Fangyuan High Technology Co,.Ltd.\nC8:66:5D\tAerohive\tAerohive Networks Inc.\nC8:67:5E\tAerohive\tAerohive Networks Inc.\nC8:69:CD\tApple\tApple, Inc.\nC8:6C:1E\tDisplay\tDisplay Systems Ltd\nC8:6C:87\tZyxelCom\tZyxel Communications Corporation\nC8:6C:B6\tOptcom\tOptcom Co., Ltd.\nC8:6F:1D\tApple\tApple, Inc.\nC8:72:48\tAplicomO\tAplicom Oy\nC8:73:24\tSowCheng\tSow Cheng Technology Co. Ltd.\nC8:75:5B\tQuantify\tQuantify Technology Pty. Ltd.\nC8:77:65\tTiesse\tTiesse SpA\nC8:77:8B\tMercury–\tMercury Systems – Trusted Mission Solutions, Inc.\nC8:7B:5B\tZte\tzte corporation\nC8:7C:BC\tValink\tValink Co., Ltd.\nC8:7D:77\tShenzhen\tShenzhen Kingtech Communication Equipment Co.,Ltd\nC8:7E:75\tSamsungE\tSamsung Electronics Co.,Ltd\nC8:84:39\tSunriseT\tSunrise Technologies\nC8:84:47\tBeautifu\tBeautiful Enterprise Co., Ltd\nC8:85:50\tApple\tApple, Inc.\nC8:86:29\tShenzhen\tShenzhen Duubee Intelligent Technologies Co.,LTD.\nC8:87:22\tLumenpul\tLumenpulse\nC8:87:3B\tNetOptic\tNet Optics\nC8:8A:83\tDongguan\tDongguan HuaHong Electronics Co.,Ltd\nC8:8B:47\tNolangro\tNolangroup S.P.A con Socio Unico\nC8:8D:83\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC8:8E:D1\tIeeeRegi\tIEEE Registration Authority\nC8:8E:D1:00:00:00/28\tAisworld\tAisworld Private Limited\nC8:8E:D1:10:00:00/28\tGermanPi\tGerman Pipe GmbH\nC8:8E:D1:20:00:00/28\tRotronic\tRotronic Ag\nC8:8E:D1:30:00:00/28\tLinxTech\tLinx Technologies\nC8:8E:D1:40:00:00/28\tComlab\tComlab AG\nC8:8E:D1:50:00:00/28\tFibergat\tFibergate.Inc\nC8:8E:D1:60:00:00/28\tShenyang\tShenyang Machine Tool(Group) Research & Design Institute Co., Ltd, Shanghai Branch\nC8:8E:D1:70:00:00/28\tUbeDbaPl\tUbe, Inc. (dba Plum)\nC8:8E:D1:80:00:00/28\tElectron\tElectronic Controls Design, Inc.\nC8:8E:D1:90:00:00/28\tFocalcre\tFocalcrest, Ltd.\nC8:8E:D1:A0:00:00/28\tApSensin\tAP Sensing GmbH\nC8:8E:D1:B0:00:00/28\tAdvanced\tAdvanced Micro Controls Inc.\nC8:8E:D1:C0:00:00/28\tShanghai\tShanghai Bwave Technology Co.,Ltd\nC8:8E:D1:D0:00:00/28\tPhoenixE\tPhoenix Engineering Corp.\nC8:8E:D1:E0:00:00/28\tAventics\tAventics GmbH\nC8:8E:D1:F0:00:00/28\tPrivate\t\nC8:8F:26\tSkyworth\tSkyworth Digital Technology(Shenzhen) Co.,Ltd\nC8:90:3E\tPaktonTe\tPakton Technologies\nC8:91:F9\tSagemcom\tSagemcom Broadband SAS\nC8:93:46\tMxchip\tMXCHIP Company Limited\nC8:93:83\tEmbedded\tEmbedded Automation, Inc.\nC8:94:BB\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC8:94:D2\tJiangsuD\tJiangsu Datang  Electronic Products Co., Ltd\nC8:97:9F\tNokia\tNokia Corporation\nC8:9C:13\tInspirem\tInspiremobile\nC8:9C:1D\tCisco\tCisco Systems, Inc\nC8:9C:DC\tElitegro\tElitegroup Computer Systems Co.,Ltd.\nC8:9F:1D\tShenzhen\tShenzhen Communication Technologies Co.,Ltd\nC8:9F:42\tVdiiInno\tVDII Innovation AB\nC8:A0:30\tTexasIns\tTexas Instruments\nC8:A1:B6\tShenzhen\tShenzhen Longway Technologies Co., Ltd\nC8:A1:BA\tNeul\tNeul Ltd\nC8:A2:CE\tOasisMed\tOasis Media Systems LLC\nC8:A6:20\tNebula\tNebula, Inc\nC8:A7:0A\tVerizonB\tVerizon Business\nC8:A7:29\tSystroni\tSYStronics Co., Ltd.\nC8:A8:23\tSamsungE\tSamsung Electronics Co.,Ltd\nC8:A9:FC\tGoyooNet\tGoyoo Networks Inc.\nC8:AA:21\tArrisGro\tARRIS Group, Inc.\nC8:AA:55\tHunanCom\tHunan Comtom Electronic Incorporated Co.,Ltd\nC8:AA:CC\tPrivate\t\nC8:AE:9C\tShanghai\tShanghai TYD Elecronic Technology Co. Ltd\nC8:AF:40\tMarcoSys\tmarco Systemanalyse und Entwicklung GmbH\nC8:AF:E3\tHefeiRad\tHefei Radio Communication Technology Co., Ltd\nC8:B1:EE\tQorvo\t\nC8:B2:1E\tChipseaT\tCHIPSEA TECHNOLOGIES (SHENZHEN) CORP.\nC8:B3:73\tCisco-Li\tCisco-Linksys, LLC\nC8:B5:AD\tHewlettP\tHewlett Packard Enterprise\nC8:B5:B7\tApple\tApple, Inc.\nC8:BA:94\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\nC8:BA:E9\tQdis\t\nC8:BB:D3\tEmbrane\t\nC8:BC:C8\tApple\tApple, Inc.\nC8:BE:19\tD-LinkIn\tD-Link International\nC8:C1:26\tZpmIndus\tZPM Industria e Comercio Ltda\nC8:C1:3C\tRuggedte\tRuggedTek Hangzhou Co., Ltd\nC8:C2:C6\tShanghai\tShanghai Airm2m Communication Technology Co., Ltd\nC8:C2:F5\tFlextron\tFLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.\nC8:C5:0E\tShenzhen\tShenzhen Primestone Network Technologies.Co., Ltd.\nC8:C7:91\tZero1Tv\tZero1.tv GmbH\nC8:CB:B8\tHewlettP\tHewlett Packard\nC8:CD:72\tSagemcom\tSagemcom Broadband SAS\nC8:D0:19\tShanghai\tShanghai Tigercel Communication Technology Co.,Ltd\nC8:D0:83\tApple\tApple, Inc.\nC8:D1:0B\tNokia\tNokia Corporation\nC8:D1:2A\tComtrend\tComtrend Corporation\nC8:D1:5E\tHuaweiTe\tHuawei Technologies Co.,Ltd\nC8:D1:D1\tAgaitTec\tAGAiT Technology Corporation\nC8:D2:C1\tJetlunSh\tJetlun (Shenzhen) Corporation\nC8:D3:A3\tD-LinkIn\tD-Link International\nC8:D3:FF\tHewlettP\tHewlett Packard\nC8:D4:29\tMuehlbau\tMuehlbauer AG\nC8:D5:90\tFlightDa\tFlight Data Systems\nC8:D5:FE\tShenzhen\tShenzhen Zowee Technology Co., Ltd\nC8:D7:19\tCisco-Li\tCisco-Linksys, LLC\nC8:D7:79\tQingDaoH\tQing Dao Haier Telecom Co.,Ltd.\nC8:D7:B0\tSamsungE\tSamsung Electronics Co.,Ltd\nC8:D9:D2\tHewlettP\tHewlett Packard\nC8:DB:26\tLogitech\t\nC8:DD:C9\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\nC8:DE:51\tIntegrao\tIntegraOptics\nC8:DE:C9\tCoriant\t\nC8:DF:7C\tNokia\tNokia Corporation\nC8:DF:84\tTexasIns\tTexas Instruments\nC8:E0:EB\tApple\tApple, Inc.\nC8:E1:30\tMilkyway\tMilkyway Group Ltd\nC8:E1:A7\tVertu\tVertu Corporation Limited\nC8:E4:2F\tTechnica\tTechnical Research Design and Development\nC8:E7:76\tPtcomTec\tPTCOM Technology\nC8:E7:D8\tMercuryC\tMercury Communication Technologies Co.,Ltd.\nC8:E7:F0\tJuniperN\tJuniper Networks\nC8:EE:08\tTangtopT\tTangtop Technology Co.,Ltd\nC8:EE:75\tPishionI\tPishion International Co. Ltd\nC8:EE:A6\tShenzhen\tShenzhen SHX Technology Co., Ltd\nC8:EF:2E\tBeijingG\tBeijing Gefei Tech. Co., Ltd\nC8:F2:30\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nC8:F3:6B\tYamatoSc\tYamato Scale Co.,Ltd.\nC8:F3:86\tShenzhen\tShenzhen Xiaoniao Technology Co.,Ltd\nC8:F4:06\tAvaya\tAvaya Inc\nC8:F6:50\tApple\tApple, Inc.\nC8:F6:8D\tSETechno\tS.E.Technologies Limited\nC8:F7:04\tBuilding\tBuilding Block Video\nC8:F7:33\tIntelCor\tIntel Corporate\nC8:F8:6D\tAlcatel-\tAlcatel-Lucent Shanghai Bell Co., Ltd\nC8:F9:46\tLocosysT\tLOCOSYS Technology Inc.\nC8:F9:81\tSenecaSR\tSeneca s.r.l.\nC8:F9:C8\tNewsharp\tNewSharp Technology(SuZhou)Co,Ltd\nC8:F9:F9\tCisco\tCisco Systems, Inc\nC8:FA:E1\tArqDigit\tARQ Digital LLC\nC8:FB:26\tCiscoSpv\tCisco SPVTG\nC8:FD:19\tTexasIns\tTexas Instruments\nC8:FE:30\tBejingDa\tBejing DAYO Mobile Communication Technology Ltd.\nC8:FF:28\tLiteonTe\tLiteon Technology Corporation\nC8:FF:77\tDyson\tDyson Limited\nCA:12:5C\tMicrosof\tMicrosoft Corporation\nCA:30:BF\tIeee8021\tIEEE 802.1 Working Group\nCA:44:6C\tCypressC\tCypress Computer Systems, Inc.\nCA:8F:A5\tAdvanced\tAdvanced TS Migrations, Co\nCA:C8:7E\tAllenOrg\tAllen Organ Company\nCA:E5:05\tMobiliti\tMobilitie\nCC:00:80\tBettiniS\tBettini Srl\nCC:03:D9\tCiscoMer\tCisco Meraki\nCC:03:FA\tTechnico\tTechnicolor CH USA Inc.\nCC:04:7C\tG-WayMic\tG-WAY Microwave\nCC:04:B4\tSelectCo\tSelect Comfort\nCC:05:1B\tSamsungE\tSamsung Electronics Co.,Ltd\nCC:06:77\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nCC:07:AB\tSamsungE\tSamsung Electronics Co.,Ltd\nCC:07:E4\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\nCC:08:8D\tApple\tApple, Inc.\nCC:08:E0\tApple\tApple, Inc.\nCC:08:FB\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nCC:09:C8\tImaqliq\tImaqliq Ltd\nCC:0C:DA\tMiljovak\tMiljovakt AS\nCC:0D:EC\tCiscoSpv\tCisco SPVTG\nCC:10:A3\tBeijingN\tBeijing Nan Bao Technology Co., Ltd.\nCC:14:A6\tYichunMy\tYichun MyEnergy Domain, Inc\nCC:16:7E\tCisco\tCisco Systems, Inc\nCC:18:7B\tManzanit\tManzanita Systems, Inc.\nCC:19:A8\tPtInovaç\tPT Inovação e Sistemas SA\nCC:1A:FA\tZte\tzte corporation\nCC:1B:E0\tIeeeRegi\tIEEE Registration Authority\nCC:1B:E0:00:00:00/28\tMicrotec\tMicrotech System,Inc\nCC:1B:E0:10:00:00/28\tBeijingD\tBeijing Daotongtianxia Co.Ltd.\nCC:1B:E0:20:00:00/28\tI-Trinet\ti-Trinetech Co.,Ltd.\nCC:1B:E0:30:00:00/28\tShenzhen\tShenzhen Vanstor Technology Co.,Ltd\nCC:1B:E0:40:00:00/28\tLaserwor\tLaserworld (Switzerland) AG\nCC:1B:E0:50:00:00/28\tEarphone\tEarphone Connection, Ubc.\nCC:1B:E0:60:00:00/28\tIcRealte\tIC RealTech\nCC:1B:E0:70:00:00/28\tSichuanD\tSichuan Dianjia network technology Co.Ltd.\nCC:1B:E0:80:00:00/28\tMdtTechn\tMDT technologies GmbH\nCC:1B:E0:90:00:00/28\tMobistor\tMobiStor Technology Inc.\nCC:1B:E0:A0:00:00/28\tMatterLa\tMatter Labs Pty Ltd\nCC:1B:E0:B0:00:00/28\tArt&Core\tART&CORE Inc\nCC:1B:E0:C0:00:00/28\tGuangzho\tGuangzhou Southelectric Power Science Technology Development Co.,Ltd.\nCC:1B:E0:D0:00:00/28\tNewstarH\tNEWSTAR (HK) ELECTRONIC DEVELOPMENT LIMITED\nCC:1B:E0:E0:00:00/28\tCassiaNe\tCassia Networks\nCC:1B:E0:F0:00:00/28\tPrivate\t\nCC:1E:FF\tMetrolog\tMetrological Group BV\nCC:1F:C4\tInvue\t\nCC:20:E8\tApple\tApple, Inc.\nCC:21:19\tSamsungE\tSamsung Electronics Co.,Ltd\nCC:22:18\tInnodigi\tInnoDigital Co., Ltd.\nCC:22:37\tIeeeRegi\tIEEE Registration Authority\nCC:22:37:00:00:00/28\tMedcomSp\tMEDCOM sp. z o.o.\nCC:22:37:10:00:00/28\tTermaSpZ\tTerma Sp. z o.o.\nCC:22:37:20:00:00/28\tApeironD\tApeiron Data Systems\nCC:22:37:30:00:00/28\tXconnect\tXConnect Professional Services\nCC:22:37:40:00:00/28\tShanghai\tSHANGHAI CARGOA M.&E.EQUIPMENT CO.LTD\nCC:22:37:50:00:00/28\tBeijingS\tBeijing Safesoft Greatmaker Co.,ltd\nCC:22:37:60:00:00/28\tSiemensA\tSiemens AG Austria\nCC:22:37:70:00:00/28\tShanghai\tShanghai Doit IOT Technology Co.,Ltd.\nCC:22:37:80:00:00/28\tSafiloSP\tSafilo S.p.A.\nCC:22:37:90:00:00/28\tEInk\tE Ink Corp\nCC:22:37:A0:00:00/28\tShenzhen\tshenzhen zonglian network technology limited\nCC:22:37:B0:00:00/28\tTolomati\tTolomatic, Inc.\nCC:22:37:C0:00:00/28\tHebeiZhs\tHebei ZHSF Technology Co.,Ltd.\nCC:22:37:D0:00:00/28\tShenzhen\tShenzhen Hooenergy Technology Co.,Ltd\nCC:22:37:E0:00:00/28\tManufact\tManufacturas Y Transformados Ab, S.L.\nCC:25:EF\tApple\tApple, Inc.\nCC:26:2D\tVerifiLl\tVerifi, LLC\nCC:29:F5\tApple\tApple, Inc.\nCC:2A:80\tMicro-Bi\tMicro-Biz intelligence solutions Co.,Ltd\nCC:2D:21\tTendaTec\tTenda Technology Co.,Ltd.Dongguan branch\nCC:2D:83\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nCC:2D:8C\tLgElectr\tLg Electronics Inc\nCC:2D:B7\tApple\tApple, Inc.\nCC:2D:E0\tRouterbo\tRouterboard.com\nCC:2F:71\tIntelCor\tIntel Corporate\nCC:30:80\tVaio\tVAIO Corporation\nCC:33:BB\tSagemcom\tSagemcom Broadband SAS\nCC:34:29\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nCC:34:D7\tGewissSP\tGewiss S.P.A.\nCC:35:40\tTechnico\tTechnicolor CH USA Inc.\nCC:37:AB\tEdgecore\tEdgecore Networks Corportation\nCC:39:8C\tShiningt\tShiningtek\nCC:3A:61\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\nCC:3A:DF\tPrivate\t\nCC:3B:3E\tLesterEl\tLester Electrical\nCC:3B:58\tCuriouse\tCuriouser Products Inc\nCC:3C:3F\tSaSSDate\tSA.S.S. Datentechnik AG\nCC:3D:82\tIntelCor\tIntel Corporate\nCC:3E:5F\tHewlettP\tHewlett Packard\nCC:3F:1D\tIntesisS\tIntesis Software SL\nCC:40:D0\tNetgear\t\nCC:43:E3\tTrumpSA\tTrump s.a.\nCC:44:63\tApple\tApple, Inc.\nCC:46:39\tWaav\tWAAV, Inc.\nCC:46:D6\tCisco\tCisco Systems, Inc\nCC:47:03\tIntercon\tIntercon Systems Co., Ltd.\nCC:4A:E1\tFourtec-\tfourtec -Fourier Technologies\nCC:4B:73\tAmpakTec\tAMPAK Technology, Inc.\nCC:4B:FB\tHellberg\tHellberg Safety AB\nCC:4D:38\tCarnegie\tCarnegie Technologies\nCC:4E:24\tBrocadeC\tBrocade Communications Systems, Inc.\nCC:4E:EC\tHumax\tHUMAX Co., Ltd.\nCC:50:0A\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nCC:50:1C\tKvhIndus\tKVH Industries, Inc.\nCC:50:76\tOcomComm\tOcom Communications, Inc.\nCC:50:E3\tEspressi\tEspressif Inc.\nCC:51:B4\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\nCC:52:AF\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\nCC:53:B5\tHuaweiTe\tHuawei Technologies Co.,Ltd\nCC:54:59\tOntimeNe\tOnTime Networks AS\nCC:55:AD\tRim\t\nCC:59:3E\tToumaz\tToumaz Ltd\nCC:5A:53\tCisco\tCisco Systems, Inc\nCC:5C:75\tWeightec\tWeightech Com. Imp. Exp. Equip. Pesagem Ltda\nCC:5D:4E\tZyxelCom\tZyxel Communications Corporation\nCC:5D:57\tInformat\tInformation  System Research Institute,Inc.\nCC:5F:BF\tTopwise3\tTopwise 3G Communication Co., Ltd.\nCC:60:BB\tEmpowerR\tEmpower RF Systems\nCC:61:E5\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nCC:65:AD\tArrisGro\tARRIS Group, Inc.\nCC:66:B2\tNokia\t\nCC:69:B0\tGlobalTr\tGlobal Traffic Technologies, LLC\nCC:6B:98\tMinetecW\tMinetec Wireless Technologies\nCC:6B:F1\tSoundMas\tSound Masking Inc.\nCC:6D:A0\tRoku\tRoku, Inc.\nCC:6D:EF\tTjkTieto\tTJK Tietolaite Oy\nCC:6E:A4\tSamsungE\tSamsung Electronics Co.,Ltd\nCC:72:0F\tViscount\tViscount Systems Inc.\nCC:72:86\tXiAnFeng\tXi'an Fengyu Information Technology Co., Ltd.\nCC:73:14\tHongKong\tHong Kong Wheatek Technology Limited\nCC:74:98\tFilmetri\tFilmetrics Inc.\nCC:76:69\tSeetech\t\nCC:78:5F\tApple\tApple, Inc.\nCC:78:AB\tTexasIns\tTexas Instruments\nCC:79:4A\tBluProdu\tBLU Products Inc.\nCC:79:CF\tShenzhen\tSHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\nCC:7A:30\tCmaxWire\tCMAX Wireless Co., Ltd.\nCC:7B:35\tZte\tzte corporation\nCC:7B:61\tNikkiso\tNikkiso Co., Ltd.\nCC:7D:37\tArrisGro\tARRIS Group, Inc.\nCC:7E:E7\tPanasoni\tPanasonic Corporation AVC Networks Company\nCC:81:DA\tPhicommS\tPhicomm (Shanghai) Co., Ltd.\nCC:82:EB\tKyocera\tKyocera Corporation\nCC:85:6C\tShenzhen\tShenzhen Mdk Digital Technology Co.,Ltd\nCC:89:FD\tNokia\tNokia Corporation\nCC:8C:DA\tShenzhen\tShenzhen Wei Da Intelligent Technology Go.,Ltd\nCC:8C:E3\tTexasIns\tTexas Instruments\nCC:8E:71\tCisco\tCisco Systems, Inc\nCC:90:93\tHansongT\tHansong Tehnologies\nCC:90:E8\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\nCC:91:2B\tTeConnec\tTE Connectivity Touch Solutions\nCC:93:4A\tSierraWi\tSierra Wireless\nCC:94:4A\tPfeiffer\tPfeiffer Vacuum GmbH\nCC:94:70\tKinestra\tKinestral Technologies, Inc.\nCC:95:D7\tVizio\tVizio, Inc\nCC:96:35\tLvs\tLVS Co.,Ltd.\nCC:96:A0\tHuaweiTe\tHuawei Technologies Co.,Ltd\nCC:98:8B\tSonyVisu\tSONY Visual Products Inc.\nCC:98:91\tCisco\tCisco Systems, Inc\nCC:99:16\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\nCC:9E:00\tNintendo\tNintendo Co., Ltd.\nCC:9F:35\tTransbit\tTransbit Sp. z o.o.\nCC:9F:7A\tChiunMai\tChiun Mai Communication Systems, Inc\nCC:A0:E5\tDzgMeter\tDZG Metering GmbH\nCC:A2:19\tShenzhen\tShenzhen Along Investment Co.,Ltd\nCC:A2:23\tHuaweiTe\tHuawei Technologies Co.,Ltd\nCC:A2:60\tSichuanT\tSichuan Tianyi Comheart Telecomco.,Ltd\nCC:A3:74\tGuangdon\tGuangdong Guanglian Electronic Technology Co.Ltd\nCC:A4:62\tArrisGro\tARRIS Group, Inc.\nCC:A4:AF\tShenzhen\tShenzhen Sowell Technology Co., LTD\nCC:A6:14\tAifaTech\tAifa Technology Corp.\nCC:AF:78\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nCC:B0:DA\tLiteonTe\tLiteon Technology Corporation\nCC:B1:1A\tSamsungE\tSamsung Electronics Co.,Ltd\nCC:B2:55\tD-LinkIn\tD-Link International\nCC:B3:AB\tShenzhen\tshenzhen Biocare Bio-Medical Equipment Co.,Ltd.\nCC:B3:F8\tFujitsuI\tFujitsu Isotec Limited\nCC:B5:5A\tFraunhof\tFraunhofer ITWM\nCC:B6:91\tNecmagnu\tNECMagnusCommunications\nCC:B8:88\tAnbSecur\tAnB Securite s.a.\nCC:B8:A8\tAmpakTec\tAMPAK Technology, Inc.\nCC:B8:F1\tEagleKin\tEagle Kingdom Technologies Limited\nCC:BB:FE\tHuaweiTe\tHuawei Technologies Co.,Ltd\nCC:BD:35\tSteinel\tSteinel GmbH\nCC:BD:D3\tUltimake\tUltimaker B.V.\nCC:BE:59\tCalix\tCalix Inc.\nCC:BE:71\tOptilogi\tOptiLogix BV\nCC:C0:79\tMurataMa\tMurata Manufacturing Co., Ltd.\nCC:C1:04\tAppliedT\tApplied Technical Systems\nCC:C2:E0\tRaisecom\tRaisecom Technology CO., LTD\nCC:C3:EA\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nCC:C5:0A\tShenzhen\tShenzhen Dajiahao Technology Co.,Ltd\nCC:C5:E5\tDell\tDell Inc.\nCC:C5:EF\tCo-CommS\tCo-Comm Servicios Telecomunicaciones S.L.\nCC:C6:2B\tTri-Syst\tTri-Systems Corporation\nCC:C7:60\tApple\tApple, Inc.\nCC:C8:D7\tCiasElet\tCIAS Elettronica srl\nCC:C9:2C\tSchindle\tSchindler - PORT Technology\nCC:CC:4E\tSunFount\tSun Fountainhead USA. Corp\nCC:CC:81\tHuaweiTe\tHuawei Technologies Co.,Ltd\nCC:CD:64\tSm-Elect\tSM-Electronic GmbH\nCC:CE:1E\tAvmAudio\tAVM Audiovisuelles Marketing und Computersysteme GmbH\nCC:CE:40\tJanteq\tJanteq Corp\nCC:D2:9B\tShenzhen\tShenzhen Bopengfa Elec&Technology CO.,Ltd\nCC:D3:1E\tIeeeRegi\tIEEE Registration Authority\nCC:D3:1E:00:00:00/28\tSamim\tSAMIM Co\nCC:D3:1E:10:00:00/28\tRondoBur\tRondo Burgdorf AG\nCC:D3:1E:20:00:00/28\tNeptune\tNeptune Systems\nCC:D3:1E:30:00:00/28\tKen\tKEN A/S\nCC:D3:1E:40:00:00/28\tPjgSyste\tPJG Systementwicklung GmbH\nCC:D3:1E:50:00:00/28\tNtmore\tNTmore.Co.,Ltd\nCC:D3:1E:60:00:00/28\tBbposInt\tBBPOS International Limited\nCC:D3:1E:70:00:00/28\tShenzhen\tShenzhen Decnta Technology Co.,LTD.\nCC:D3:1E:80:00:00/28\tInoage\tinoage GmbH\nCC:D3:1E:90:00:00/28\tSiemensM\tSiemens AG, MO MLT BG\nCC:D3:1E:A0:00:00/28\tHaishuTe\tHaishu Technology LIMITED\nCC:D3:1E:B0:00:00/28\tElkProdu\tElk Products\nCC:D3:1E:C0:00:00/28\tNantener\tNantEnergy\nCC:D3:1E:D0:00:00/28\tCujoLlc\tCujo Llc\nCC:D3:1E:E0:00:00/28\tShenzhen\tShenZhenBoryNet Co.,LTD.\nCC:D3:E2\tJiangsuY\tJiangsu Yinhe  Electronics Co.,Ltd.\nCC:D4:A1\tMitrasta\tMitraStar Technology Corp.\nCC:D5:39\tCisco\tCisco Systems, Inc\nCC:D8:11\tAiconnTe\tAiconn Technology Corporation\nCC:D8:C1\tCisco\tCisco Systems, Inc\nCC:D9:E9\tScrEngin\tSCR Engineers Ltd.\nCC:E0:C3\tMangstor\tMangstor, Inc.\nCC:E1:7F\tJuniperN\tJuniper Networks\nCC:E1:D5\tBuffalo\tBuffalo.Inc\nCC:E7:98\tMySocial\tMy Social Stuff\nCC:E7:DF\tAmerican\tAmerican Magnetics, Inc.\nCC:E8:AC\tSoyeaTec\tSOYEA Technology Co.,Ltd.\nCC:EA:1C\tDconwork\tDCONWORKS  Co., Ltd\nCC:EE:D9\tVahleAut\tVAHLE Automation GmbH\nCC:EF:48\tCisco\tCisco Systems, Inc\nCC:F0:FD\tChinaMob\tChina Mobile (Hangzhou) Information Technology Co., Ltd.\nCC:F3:A5\tChiMeiCo\tChi Mei Communication Systems, Inc\nCC:F4:07\tEukreaEl\tEukrea Electromatique Sarl\nCC:F5:38\t3isysnet\t3isysnetworks\nCC:F6:7A\tAyeckaCo\tAyecka Communication Systems LTD\nCC:F8:41\tLumewave\t\nCC:F8:F0\tXiAnHisu\tXi'an HISU Multimedia Technology Co.,Ltd.\nCC:F9:54\tAvaya\tAvaya Inc\nCC:F9:57\tU-Blox\tu-blox AG\nCC:F9:E8\tSamsungE\tSamsung Electronics Co.,Ltd\nCC:FA:00\tLgElectr\tLG Electronics (Mobile Communications)\nCC:FB:65\tNintendo\tNintendo Co., Ltd.\nCC:FC:6D\tRizTrans\tRiz Transmitters\nCC:FC:B1\tWireless\tWireless Technology, Inc.\nCC:FD:17\tTctMobil\tTCT mobile ltd\nCC:FE:3C\tSamsungE\tSamsung Electronics Co.,Ltd\nD0:03:4B\tApple\tApple, Inc.\nD0:03:DF\tSamsungE\tSamsung Electronics Co.,Ltd\nD0:04:01\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nD0:04:92\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nD0:05:2A\tArcadyan\tArcadyan Corporation\nD0:07:90\tTexasIns\tTexas Instruments\nD0:07:CA\tJuniperN\tJuniper Networks\nD0:0A:AB\tYokogawa\tYokogawa Digital Computer Corporation\nD0:0E:A4\tPorscheC\tPorsche Cars North America\nD0:0E:D9\tTaicangT\tTaicang T&W Electronics\nD0:0F:6D\tT&WElect\tT&W Electronics Company\nD0:12:42\tBios\tBIOS Corporation\nD0:13:1E\tSunrexTe\tSunrex Technology Corp\nD0:13:FD\tLgElectr\tLG Electronics (Mobile Communications)\nD0:15:4A\tZte\tzte corporation\nD0:16:B4\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD0:17:6A\tSamsungE\tSamsung Electronics Co.,Ltd\nD0:17:C2\tAsustekC\tASUSTek COMPUTER INC.\nD0:1A:A7\tUniprint\t\nD0:1C:BB\tBeijingC\tBeijing Ctimes Digital Technology Co., Ltd.\nD0:22:12\tIeeeRegi\tIEEE Registration Authority\nD0:22:12:00:00:00/28\tSpiritIt\tSpirit IT B.V.\nD0:22:12:10:00:00/28\tAim\t\nD0:22:12:20:00:00/28\tRhenac\tRHENAC Systems GmbH\nD0:22:12:40:00:00/28\tViatron\tViatron GmbH\nD0:22:12:50:00:00/28\tShanghai\tShanghai Routech Co., Ltd\nD0:22:12:60:00:00/28\tUranoInd\tUrano Industria De Balancas E Equipamentos Ltda\nD0:22:12:70:00:00/28\tCliptech\tCliptech Industria e Comercio Ltda\nD0:22:12:80:00:00/28\tShenzhen\tShenzhen SIC Technology. Co., Ltd.\nD0:22:12:90:00:00/28\tUab&Quot\tUAB &quot;SALDA&quot;\nD0:22:12:A0:00:00/28\tGns-Gmbh\t\nD0:22:12:B0:00:00/28\tSchleife\tSchleifenbauer Holding BV\nD0:22:12:C0:00:00/28\tXperioLa\tXperio Labs Ltd.\nD0:22:12:D0:00:00/28\tShenzhen\tShenzhen Zhongxi Security Co.,Ltd\nD0:22:12:E0:00:00/28\tU::Lux\tu::Lux GmbH\nD0:22:12:F0:00:00/28\tPrivate\t\nD0:22:BE\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\nD0:23:DB\tApple\tApple, Inc.\nD0:25:16\tMercuryC\tMercury Communication Technologies Co.,Ltd.\nD0:25:44\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\nD0:25:98\tApple\tApple, Inc.\nD0:27:88\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nD0:2B:20\tApple\tApple, Inc.\nD0:2C:45\tLittlebi\tlittleBits Electronics, Inc.\nD0:2D:B3\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD0:31:10\tIngenicS\tIngenic Semiconductor Co.,Ltd\nD0:31:69\tSamsungE\tSamsung Electronics Co.,Ltd\nD0:33:11\tApple\tApple, Inc.\nD0:37:42\tYulongCo\tYulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd\nD0:37:61\tTexasIns\tTexas Instruments\nD0:39:72\tTexasIns\tTexas Instruments\nD0:39:B3\tArrisGro\tARRIS Group, Inc.\nD0:3D:C3\tAq\tAQ Corporation\nD0:3E:5C\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD0:43:1E\tDell\tDell Inc.\nD0:46:DC\tSouthwes\tSouthwest Research Institute\nD0:48:F3\tDattus\tDATTUS Inc\nD0:49:8B\tZoomServ\tZoom Server\nD0:4C:C1\tSintrone\tSINTRONES Technology Corp.\nD0:4D:2C\tRoku\tRoku, Inc.\nD0:4F:7E\tApple\tApple, Inc.\nD0:50:99\tAsrockIn\tASRock Incorporation\nD0:51:62\tSonyMobi\tSony Mobile Communications Inc\nD0:52:A8\tPhysical\tPhysical Graph Corporation\nD0:53:49\tLiteonTe\tLiteon Technology Corporation\nD0:54:2D\tCambridg\tCambridge Industries(Group) Co.,Ltd.\nD0:55:B2\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\nD0:57:4C\tCisco\tCisco Systems, Inc\nD0:57:7B\tIntelCor\tIntel Corporate\nD0:57:85\tPantech\tPantech Co., Ltd.\nD0:57:A1\tWermaSig\tWerma Signaltechnik GmbH & Co. KG\nD0:58:75\tActiveCo\tActive Control Technology Inc.\nD0:58:A8\tZte\tzte corporation\nD0:58:FC\tBskyb\tBSkyB Ltd\nD0:59:95\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nD0:59:C3\tCeramicr\tCeraMicro Technology Corporation\nD0:59:E4\tSamsungE\tSamsung Electronics Co.,Ltd\nD0:5A:00\tTechnico\tTechnicolor CH USA Inc.\nD0:5A:0F\tI-BtDigi\tI-BT DIGITAL CO.,LTD\nD0:5A:F1\tShenzhen\tShenzhen Pulier Tech CO.,Ltd\nD0:5B:A8\tZte\tzte corporation\nD0:5C:7A\tSarturaD\tSartura d.o.o.\nD0:5F:B8\tTexasIns\tTexas Instruments\nD0:5F:CE\tHitachiD\tHitachi Data Systems\nD0:60:8C\tZte\tzte corporation\nD0:62:A0\tChinaEss\tChina Essence Technology (Zhumadian) Co., Ltd.\nD0:63:4D\tMeikoMas\tMeiko Maschinenbau GmbH &amp; Co. KG\nD0:63:B4\tSolidrun\tSolidRun Ltd.\nD0:65:CA\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD0:66:6D\tShenzhen\tShenzhen Bus-Lan Technology Co., Ltd.\nD0:66:7B\tSamsungE\tSamsung Electronics Co.,Ltd\nD0:67:26\tHewlettP\tHewlett Packard Enterprise\nD0:67:E5\tDell\tDell Inc.\nD0:69:9E\tLuminexL\tLUMINEX Lighting Control Equipment\nD0:69:D0\tVertoMed\tVerto Medical Solutions, LLC\nD0:6A:1F\tBse\tBse Co.,Ltd.\nD0:6F:4A\tTopwellI\tTopwell International Holdings Limited\nD0:6F:82\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD0:71:C4\tZte\tzte corporation\nD0:72:DC\tCisco\tCisco Systems, Inc\nD0:73:7F\tMini-Cir\tMini-Circuits\nD0:73:8E\tDongOhPr\tDong Oh Precision Co., Ltd.\nD0:73:D5\tLifiLabs\tLifi Labs Management Pty Ltd\nD0:75:BE\tRenoA&E\tReno A&E\nD0:76:50\tIeeeRegi\tIEEE Registration Authority\nD0:76:50:00:00:00/28\tCentrale\tCentrAlert, Inc.\nD0:76:50:10:00:00/28\tDaikenAu\tDaiken Automacao Ltda\nD0:76:50:20:00:00/28\tHappoSol\tHappo Solutions Oy\nD0:76:50:30:00:00/28\tTapkoTec\tTAPKO Technologies GmbH\nD0:76:50:40:00:00/28\tPrivate\t\nD0:76:50:50:00:00/28\tAnnapurn\tAnnapurna Labs\nD0:76:50:60:00:00/28\tPicobrew\tPicobrew LLC\nD0:76:50:70:00:00/28\tEncoredT\tENCORED Technologies, Inc.\nD0:76:50:80:00:00/28\tAccumula\tAccumulate AB\nD0:76:50:90:00:00/28\tGreenwav\tGreenwave Scientific\nD0:76:50:A0:00:00/28\tInventde\tInventDesign\nD0:76:50:B0:00:00/28\tPelkorea\t\nD0:76:50:C0:00:00/28\tElectro-\tElectro-Motive Diesel\nD0:76:50:D0:00:00/28\tTecnotro\ttecnotron elekronik gmbh\nD0:76:50:E0:00:00/28\tRevox\tRevox Inc.\nD0:76:50:F0:00:00/28\tPrivate\t\nD0:76:E7\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nD0:77:14\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nD0:7A:B5\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD0:7C:2D\tLeieIotT\tLeie IOT technology Co., Ltd\nD0:7D:E5\tForwardP\tForward Pay Systems, Inc.\nD0:7E:28\tHewlettP\tHewlett Packard\nD0:7E:35\tIntelCor\tIntel Corporate\nD0:7F:A0\tSamsungE\tSamsung Electronics Co.,Ltd\nD0:7F:C4\tOuWeiTec\tOu Wei Technology Co.，Ltd. of Shenzhen City\nD0:81:7A\tApple\tApple, Inc.\nD0:83:D4\tXtelWire\tXtel Wireless ApS\nD0:84:B0\tSagemcom\tSagemcom Broadband SAS\nD0:87:E2\tSamsungE\tSamsung Electronics Co.,Ltd\nD0:89:99\tApcon\tAPCON, Inc.\nD0:8A:55\tSkullcan\tSkullcandy\nD0:8A:91\tTechnico\tTechnicolor CH USA Inc.\nD0:8B:7E\tPassifSe\tPassif Semiconductor\nD0:8C:B5\tTexasIns\tTexas Instruments\nD0:8C:FF\tUpwis\tUpwis Ab\nD0:92:9E\tMicrosof\tMicrosoft Corporation\nD0:92:FA\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nD0:93:80\tDucereTe\tDucere Technologies Pvt. Ltd.\nD0:93:F8\tStonestr\tStonestreet One LLC\nD0:94:66\tDell\tDell Inc.\nD0:95:C7\tPantech\tPantech Co., Ltd.\nD0:96:FB\tDasanNet\tDASAN Network Solutions\nD0:99:D5\tAlcatel-\tAlcatel-Lucent\nD0:9B:05\tEmtronix\t\nD0:9C:30\tFosterEl\tFoster Electric Company, Limited\nD0:9D:0A\tLinkcom\t\nD0:9D:AB\tTctMobil\tTCT mobile ltd\nD0:A0:D6\tChengduT\tChengdu TD Tech Ltd.\nD0:A3:11\tNeuberge\tNeuberger Gebäudeautomation GmbH\nD0:A4:B1\tSonifex\tSonifex Ltd.\nD0:A5:A6\tCisco\tCisco Systems, Inc\nD0:A6:37\tApple\tApple, Inc.\nD0:AE:EC\tAlphaNet\tAlpha Networks Inc.\nD0:AF:B6\tLinktopT\tLinktop Technology Co., LTD\nD0:B0:CD\tMoen\t\nD0:B1:28\tSamsungE\tSamsung Electronics Co.,Ltd\nD0:B2:14\tPoewit\tPoeWit Inc\nD0:B2:C4\tTechnico\tTechnicolor CH USA Inc.\nD0:B3:3F\tShenzhen\tShenzhen TINNO Mobile Technology Corp.\nD0:B4:98\tRobertBo\tRobert Bosch LLC Automotive Electronics\nD0:B5:23\tBestcare\tBestcare Cloucal Corp.\nD0:B5:3D\tSeproRob\tSepro Robotique\nD0:B5:C2\tTexasIns\tTexas Instruments\nD0:B6:0A\tXingluoT\tXingluo Technology Company  Limited\nD0:BA:E4\tShanghai\tShanghai MXCHIP Information Technology Co., Ltd.\nD0:BB:80\tShlTelem\tSHL Telemedicine International Ltd.\nD0:BD:01\tDsIntern\tDS International\nD0:BE:2C\tCnslink\tCNSLink Co., Ltd.\nD0:BF:9C\tHewlettP\tHewlett Packard\nD0:C0:BF\tActionsM\tActions Microelectronics Co., Ltd\nD0:C1:93\tSkybell\tSkybell, Inc\nD0:C1:B1\tSamsungE\tSamsung Electronics Co.,Ltd\nD0:C2:82\tCisco\tCisco Systems, Inc\nD0:C4:2F\tTamagawa\tTamagawa Seiki Co.,Ltd.\nD0:C5:D3\tAzurewav\tAzureWave Technology Inc.\nD0:C5:D8\tLatecoer\tLatecoere\nD0:C5:F3\tApple\tApple, Inc.\nD0:C7:89\tCisco\tCisco Systems, Inc\nD0:C7:C0\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nD0:CD:E1\tScientec\tScientech Electronics\nD0:CF:5E\tEnergyMi\tEnergy Micro AS\nD0:D0:4B\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD0:D0:FD\tCisco\tCisco Systems, Inc\nD0:D2:12\tK2net\tK2NET Co.,Ltd.\nD0:D2:86\tBeckmanC\tBeckman Coulter K.K.\nD0:D2:B0\tApple\tApple, Inc.\nD0:D3:FC\tMios\tMios, Ltd.\nD0:D4:12\tAdbBroad\tADB Broadband Italia\nD0:D4:71\tMvtech\tMVTECH co., Ltd\nD0:D6:CC\tWintop\t\nD0:D7:83\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD0:D9:4F\tIeeeRegi\tIEEE Registration Authority\nD0:D9:4F:00:00:00/28\tPerfantT\tPerfant Technology Co., Ltd\nD0:D9:4F:10:00:00/28\tMycable\tmycable GmbH\nD0:D9:4F:20:00:00/28\tTecoImag\tTeco Image Systems Co., Ltd.\nD0:D9:4F:30:00:00/28\tBeijingY\tBeijing Yiwangxuntong Technology\nD0:D9:4F:40:00:00/28\tPeikerCe\tpeiker CEE\nD0:D9:4F:50:00:00/28\tOptigoNe\tOptigo Networks\nD0:D9:4F:60:00:00/28\tHyundaiA\tHyundai Autohow\nD0:D9:4F:70:00:00/28\tPrivate\t\nD0:D9:4F:80:00:00/28\tApptionL\tApption Labs Limited\nD0:D9:4F:90:00:00/28\tHangzhou\tHangzhou xiaoben technology co.,Ltd\nD0:D9:4F:A0:00:00/28\tShenzhen\tShenzhen FDC Electuonic Co.,Ltd.\nD0:D9:4F:B0:00:00/28\tMaxSmart\tMAX Smart Home, LLC\nD0:D9:4F:C0:00:00/28\tArrowave\tArrowave Technologies Limited\nD0:D9:4F:D0:00:00/28\tDuksanme\tDuksanmecasys Co., Ltd.\nD0:D9:4F:E0:00:00/28\tAppotron\tAppotronics Co., Ltd\nD0:DB:32\tNokia\tNokia Corporation\nD0:DF:9A\tLiteonTe\tLiteon Technology Corporation\nD0:DF:B2\tGenieNet\tGenie Networks Limited\nD0:DF:C7\tSamsungE\tSamsung Electronics Co.,Ltd\nD0:E1:40\tApple\tApple, Inc.\nD0:E3:47\tYoga\t\nD0:E4:0B\tWearable\tWearable Inc.\nD0:E4:4A\tMurataMa\tMurata Manufacturing Co., Ltd.\nD0:E5:4D\tArrisGro\tARRIS Group, Inc.\nD0:E7:82\tAzurewav\tAzureWave Technology Inc.\nD0:EB:03\tZhehuaTe\tZhehua technology limited\nD0:EB:9E\tSeowoo\tSeowoo Inc.\nD0:EF:C1\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD0:F0:DB\tEricsson\t\nD0:F2:7F\tSteadyse\tSteadyServ Technoligies, LLC\nD0:F7:3B\tHelmutMa\tHelmut Mauell GmbH Werk Weida\nD0:F8:8C\tMotorola\tMotorola (Wuhan) Mobility Technologies Communication Co., Ltd.\nD0:FA:1D\tQihoo360\tQihoo  360  Technology Co.,Ltd\nD0:FC:CC\tSamsungE\tSamsung Electronics Co.,Ltd\nD0:FF:50\tTexasIns\tTexas Instruments\nD0:FF:98\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD4:00:0D\tPhoenixB\tPhoenix Broadband Technologies, LLC.\nD4:00:57\tMcTechno\tMC Technologies GmbH\nD4:01:29\tBroadcom\t\nD4:01:6D\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nD4:02:4A\tDelphian\tDelphian Systems LLC\nD4:04:CD\tArrisGro\tARRIS Group, Inc.\nD4:04:FF\tJuniperN\tJuniper Networks\nD4:05:98\tArrisGro\tARRIS Group, Inc.\nD4:0A:A9\tArrisGro\tARRIS Group, Inc.\nD4:0B:1A\tHtc\tHTC Corporation\nD4:0B:B9\tSolidSem\tSolid Semecs bv.\nD4:0F:B2\tAppliedM\tApplied Micro Electronics AME bv\nD4:10:90\tInform\tiNFORM Systems AG\nD4:10:CF\tHuanshun\tHuanshun Network Science and Technology Co., Ltd.\nD4:11:D6\tShotspot\tShotSpotter, Inc.\nD4:12:43\tAmpakTec\tAMPAK Technology, Inc.\nD4:12:96\tAnobitTe\tAnobit Technologies Ltd.\nD4:12:BB\tQuadrant\tQuadrant Components Inc. Ltd\nD4:13:6F\tAsiaPaci\tAsia Pacific Brands\nD4:1A:3F\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nD4:1C:1C\tRcfSPA\tRcf S.P.A.\nD4:1D:71\tPaloAlto\tPalo Alto Networks\nD4:1E:35\tTohoElec\tTOHO Electronics INC.\nD4:1F:0C\tJaiOy\tJAI Oy\nD4:20:6D\tHtc\tHTC Corporation\nD4:21:22\tSercomm\tSercomm Corporation.\nD4:22:3F\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\nD4:22:4E\tAlcatelL\tAlcatel Lucent\nD4:25:8B\tIntelCor\tIntel Corporate\nD4:27:51\tInfopia\tInfopia Co., Ltd\nD4:28:B2\tIobridge\tioBridge, Inc.\nD4:28:D5\tTctMobil\tTCT mobile ltd\nD4:29:EA\tZimory\tZimory GmbH\nD4:2C:0F\tArrisGro\tARRIS Group, Inc.\nD4:2C:3D\tSkyLight\tSky Light Digital Limited\nD4:2C:44\tCisco\tCisco Systems, Inc\nD4:2F:23\tAkenoriP\tAkenori PTE Ltd\nD4:31:9D\tSinwatec\t\nD4:32:60\tGopro\t\nD4:32:66\tFike\tFike Corporation\nD4:36:39\tTexasIns\tTexas Instruments\nD4:36:DB\tJiangsuT\tJiangsu Toppower Automotive Electronics Co., Ltd\nD4:37:D7\tZte\tzte corporation\nD4:38:9C\tSonyMobi\tSony Mobile Communications Inc\nD4:3A:65\tIgrsEngi\tIGRS Engineering Lab Ltd.\nD4:3A:E9\tDongguan\tDONGGUAN ipt INDUSTRIAL CO., LTD\nD4:3D:67\tCarmaInd\tCarma Industries Inc.\nD4:3D:7E\tMicro-St\tMicro-Star Int'l Co, Ltd\nD4:40:F0\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD4:41:65\tSichuanT\tSichuan Tianyi Comheart Telecomco.,Ltd\nD4:43:A8\tChangzho\tChangzhou Haojie Electric Co., Ltd.\nD4:45:E8\tJiangxiH\tJiangxi Hongpai Technology Co., Ltd.\nD4:4B:5E\tTaiyoYud\tTaiyo Yuden Co., Ltd.\nD4:4C:24\tVuppalam\tVuppalamritha Magnetic Components LTD\nD4:4C:9C\tShenzhen\tShenzhen YOOBAO Technology Co.Ltd\nD4:4C:A7\tInformte\tInformtekhnika & Communication, LLC\nD4:4F:80\tKemperDi\tKemper Digital GmbH\nD4:50:3F\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nD4:50:7A\tCeivaLog\tCEIVA Logic, Inc\nD4:52:2A\tTangowif\tTangoWiFi.com\nD4:52:51\tIbtIngen\tIBT Ingenieurbureau Broennimann Thun\nD4:52:97\tNstreams\tnSTREAMS Technologies, Inc.\nD4:53:AF\tVigoSyst\tVIGO System S.A.\nD4:55:56\tFiberMou\tFiber Mountain Inc.\nD4:55:BE\tShenzhen\tShenzhen Fast Technologies Co.,Ltd\nD4:5A:B2\tGalleon\tGalleon Systems\nD4:5C:70\tWi-FiAll\tWi-Fi Alliance\nD4:5D:42\tNokia\tNokia Corporation\nD4:5D:DF\tPegatron\tPegatron Corporation\nD4:5F:25\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\nD4:60:E3\tSercomm\tSercomm Corporation.\nD4:61:2E\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD4:61:32\tProConce\tPro Concept Manufacturer Co.,Ltd.\nD4:61:9D\tApple\tApple, Inc.\nD4:61:DA\tApple\tApple, Inc.\nD4:61:FE\tHangzhou\tHangzhou H3C Technologies Co., Limited\nD4:63:C6\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nD4:63:FE\tArcadyan\tArcadyan Corporation\nD4:64:F7\tChengduU\tChengdu Usee Digital Technology Co., Ltd\nD4:66:A8\tRiedoNet\tRiedo Networks Ltd\nD4:67:61\tUnitedGu\tUnited Gulf Gate Co.\nD4:67:E7\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nD4:68:4D\tRuckusWi\tRuckus Wireless\nD4:68:67\tNeoventu\tNeoventus Design Group\nD4:68:BA\tShenzhen\tShenzhen Sundray Technologies Company Limited\nD4:69:A5\tMiura\tMiura Systems Ltd.\nD4:6A:6A\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nD4:6A:91\tSnapAv\tSnap AV\nD4:6A:A8\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD4:6C:BF\tGoodrich\tGoodrich ISR\nD4:6C:DA\tCsm\tCSM GmbH\nD4:6D:50\tCisco\tCisco Systems, Inc\nD4:6D:6D\tIntelCor\tIntel Corporate\nD4:6E:0E\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nD4:6E:5C\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD4:6F:42\tWaxessUs\tWAXESS USA Inc\nD4:72:08\tBragi\tBragi GmbH\nD4:72:26\tZte\tzte corporation\nD4:74:1B\tBeijingH\tBeijing HuaDa ZhiBao Electronic System Co.,Ltd.\nD4:76:EA\tZte\tzte corporation\nD4:78:56\tAvaya\tAvaya Inc\nD4:79:C3\tCamerone\tCameronet GmbH & Co. KG\nD4:7A:E2\tSamsungE\tSamsung Electronics Co.,Ltd\nD4:7B:35\tNeoMonit\tNEO Monitors AS\nD4:7B:75\tHartingE\tHARTING Electronics GmbH\nD4:7B:B0\tAskeyCom\tAskey Computer Corp\nD4:7C:44\tIeeeRegi\tIEEE Registration Authority\nD4:7C:44:00:00:00/28\tExaforeO\tExafore Oy\nD4:7C:44:10:00:00/28\tInnovizT\tInnoviz Technologies LTD\nD4:7C:44:20:00:00/28\tYundingN\tYunDing Network Technology (Beijing) Co., Ltd\nD4:7C:44:30:00:00/28\tOmronSen\tOmron Sentech Co., Ltd.\nD4:7C:44:40:00:00/28\tSammiOnf\tSammi Onformation Systems\nD4:7C:44:50:00:00/28\tLsCommun\tLS Communication Co.,Ltd.\nD4:7C:44:60:00:00/28\tAsdaIct\tASDA ICT Co., Ltd.\nD4:7C:44:70:00:00/28\tPongeeIn\tPongee Industries Co., Ltd.\nD4:7C:44:80:00:00/28\tBeijingM\tBeijing Maystar Information Technology Co., Ltd.\nD4:7C:44:90:00:00/28\tSuzhouWa\tSuzhou Wan Dian Zhang Network Technology Co., Ltd\nD4:7C:44:A0:00:00/28\tTendzone\tTendzone International Pte Ltd\nD4:7C:44:B0:00:00/28\tOptim\tOPTiM Corporation\nD4:7C:44:C0:00:00/28\tStriveOr\tStrive Orthopedics Inc\nD4:7C:44:D0:00:00/28\tHuaqinTe\tHuaqin Telecom Technology Co.,Ltd.\nD4:7C:44:E0:00:00/28\tShenzhen\tShenzhen Anysec Technology Co. Ltd\nD4:7D:FC\tTecnoMob\tTecno Mobile Limited\nD4:81:CA\tIdevices\tiDevices, LLC\nD4:81:D7\tDell\tDell Inc.\nD4:82:3E\tArgosyTe\tArgosy Technologies, Ltd.\nD4:83:04\tShenzhen\tShenzhen Fast Technologies Co.,Ltd\nD4:85:64\tHewlettP\tHewlett Packard\nD4:87:D8\tSamsungE\tSamsung Electronics Co.,Ltd\nD4:88:3F\tHdpro\tHdpro Co., Ltd.\nD4:88:90\tSamsungE\tSamsung Electronics Co.,Ltd\nD4:8C:B5\tCisco\tCisco Systems, Inc\nD4:8D:D9\tMeldTech\tMeld Technology, Inc\nD4:8F:33\tMicrosof\tMicrosoft Corporation\nD4:8F:AA\tSogecamI\tSogecam Industrial, S.A.\nD4:90:9C\tApple\tApple, Inc.\nD4:90:E0\tTopconEl\tTopcon Electronics GmbH & Co. KG\nD4:91:AF\tElectroa\tElectroacustica General Iberica, S.A.\nD4:93:98\tNokia\tNokia Corporation\nD4:93:A0\tFidelixO\tFidelix Oy\nD4:94:5A\tCosmo\tCosmo Co., Ltd\nD4:94:A1\tTexasIns\tTexas Instruments\nD4:94:E8\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD4:95:24\tCloverNe\tClover Network, Inc.\nD4:96:DF\tSungjinC\tSUNGJIN C&T CO.,LTD\nD4:97:0B\tXiaomiCo\tXiaomi Communications Co Ltd\nD4:9A:20\tApple\tApple, Inc.\nD4:9B:5C\tChongqin\tChongqing Miedu Technology Co., Ltd.\nD4:9C:28\tJaybirdL\tJayBird LLC\nD4:9C:8E\tUniversi\tUniversity of FUKUI\nD4:9C:F4\tPaloAlto\tPalo Alto Networks\nD4:9E:05\tZte\tzte corporation\nD4:9E:6D\tWuhanZho\tWuhan Zhongyuan Huadian Science & Technology Co.,\nD4:A0:2A\tCisco\tCisco Systems, Inc\nD4:A1:48\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD4:A3:3D\tApple\tApple, Inc.\nD4:A4:25\tSmaxTech\tSMAX Technology Co., Ltd.\nD4:A4:99\tInviewTe\tInView Technology Corporation\nD4:A9:28\tGreenwav\tGreenWave Reality Inc\nD4:AA:FF\tMicroWor\tMicro World\nD4:AB:82\tArrisGro\tARRIS Group, Inc.\nD4:AC:4E\tBodiRsLl\tBODi rS, LLC\nD4:AD:2D\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nD4:AE:05\tSamsungE\tSamsung Electronics Co.,Ltd\nD4:AE:52\tDell\tDell Inc.\nD4:B1:10\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD4:B1:69\tLeShiZhi\tLe Shi Zhi Xin Electronic Technology (Tianjin) Limited\nD4:B2:7A\tArrisGro\tARRIS Group, Inc.\nD4:B4:3E\tMesscomp\tMesscomp Datentechnik GmbH\nD4:B8:FF\tHomeCont\tHome Control Singapore Pte Ltd\nD4:BD:1E\t5vtTechn\t5VT Technologies,Taiwan LTd.\nD4:BE:D9\tDell\tDell Inc.\nD4:BF:2D\tSeContro\tSE Controls Asia Pacific Ltd\nD4:BF:7F\tUpvel\t\nD4:C1:9E\tRuckusWi\tRuckus Wireless\nD4:C1:C8\tZte\tzte corporation\nD4:C1:FC\tNokia\tNokia Corporation\nD4:C7:66\tAcentic\tAcentic GmbH\nD4:C8:B0\tPrimeEle\tPrime Electronics & Satellitics Inc.\nD4:C9:B2\tQuanergy\tQuanergy Systems Inc\nD4:C9:EF\tHewlettP\tHewlett Packard\nD4:CA:6D\tRouterbo\tRouterboard.com\nD4:CA:6E\tU-Blox\tu-blox AG\nD4:CB:AF\tNokia\tNokia Corporation\nD4:CE:B8\tEnatel\tEnatel LTD\nD4:CF:37\tSymbolic\tSymbolic IO\nD4:CF:F9\tShenzhen\tShenzhen Sen5 Technology Co., Ltd.\nD4:D1:84\tAdbBroad\tADB Broadband Italia\nD4:D2:49\tPowerEth\tPower Ethernet\nD4:D2:E5\tBkav\tBKAV Corporation\nD4:D5:0D\tSouthwes\tSouthwest Microwave, Inc\nD4:D7:48\tCisco\tCisco Systems, Inc\nD4:D7:A9\tShanghai\tShanghai Kaixiang Info Tech LTD\nD4:D8:98\tKoreaCno\tKorea CNO Tech Co., Ltd\nD4:D9:19\tGopro\t\nD4:DC:CD\tApple\tApple, Inc.\nD4:DF:57\tAlpinion\tAlpinion Medical Systems\nD4:E0:8E\tValuehd\tValueHD Corporation\nD4:E3:2C\tSSiedleS\tS. Siedle & Sohne\nD4:E3:3F\tNokia\t\nD4:E6:B7\tSamsungE\tSamsung Electronics Co.,Ltd\nD4:E8:B2\tSamsungE\tSamsung Electronics Co.,Ltd\nD4:E9:0B\tCvt\tCvt Co.,Ltd\nD4:EA:0E\tAvaya\tAvaya Inc\nD4:EC:0C\tHarley-D\tHarley-Davidson Motor Company\nD4:EC:86\tLinkedho\tLinkedHope Intelligent Technologies Co., Ltd\nD4:EE:07\tHiwifi\tHIWIFI Co., Ltd.\nD4:F0:27\tNavetasE\tNavetas Energy Management\nD4:F0:B4\tNapcoSec\tNapco Security Technologies\nD4:F1:43\tIproad\tIPROAD.,Inc\nD4:F2:07\tDiaodiao\tDIAODIAO(Beijing)Technology CO.,Ltd\nD4:F4:6F\tApple\tApple, Inc.\nD4:F4:BE\tPaloAlto\tPalo Alto Networks\nD4:F5:13\tTexasIns\tTexas Instruments\nD4:F6:3F\tIeaSRL\tIea S.R.L.\nD4:F7:86\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nD4:F9:A1\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD4:FC:13\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nD8:00:4D\tApple\tApple, Inc.\nD8:05:2E\tSkyviia\tSkyviia Corporation\nD8:06:D1\tHoneywel\tHoneywell Fire System (Shanghai) Co,. Ltd.\nD8:08:31\tSamsungE\tSamsung Electronics Co.,Ltd\nD8:08:F5\tArcadiaN\tArcadia Networks Co. Ltd.\nD8:09:C3\tCercacor\tCercacor Labs\nD8:0C:CF\tCGVSAS\tC.G.V. S.A.S.\nD8:0D:17\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nD8:0D:E3\tFxiTechn\tFxi Technologies As\nD8:0F:99\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nD8:14:D6\tSureSyst\tSURE SYSTEM Co Ltd\nD8:15:0D\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nD8:16:0A\tNipponEl\tNippon Electro-Sensory Devices\nD8:16:C1\tDewavHkE\tDEWAV (HK) ELECTRONICS LIMITED\nD8:18:2B\tContiTem\tConti Temic Microelectronic GmbH\nD8:18:D3\tJuniperN\tJuniper Networks\nD8:19:7A\tNuheara\tNuheara Ltd\nD8:19:CE\tTelesqua\tTelesquare\nD8:1B:FE\tTwinlinx\tTwinlinx Corporation\nD8:1C:14\tCompacta\tCompacta International, Ltd.\nD8:1C:79\tApple\tApple, Inc.\nD8:1D:72\tApple\tApple, Inc.\nD8:1E:DE\tB&WGroup\tB&W Group Ltd\nD8:1F:CC\tBrocadeC\tBrocade Communications Systems, Inc.\nD8:20:9F\tCubroAcr\tCubro Acronet GesmbH\nD8:22:F4\tAvnetSil\tAvnet Silica\nD8:24:77\tUniversa\tUniversal Electric Corporation\nD8:24:BD\tCisco\tCisco Systems, Inc\nD8:25:22\tArrisGro\tARRIS Group, Inc.\nD8:25:B0\tRockeete\tRockeetech Systems Co.,Ltd.\nD8:26:B9\tGuangdon\tGuangdong Coagent Electronics S&amp;T Co.,Ltd.\nD8:27:0C\tMaxtroni\tMaxTronic International Co., Ltd.\nD8:28:C9\tGeneralE\tGeneral Electric Consumer and Industrial\nD8:29:16\tAscentCo\tAscent Communication Technology\nD8:29:86\tBestWish\tBest Wish Technology LTD\nD8:2A:15\tLeitner\tLeitner SpA\nD8:2A:7E\tNokia\tNokia Corporation\nD8:2D:9B\tShenzhen\tShenzhen G.Credit Communication Technology Co., Ltd\nD8:2D:E1\tTricasca\tTricascade Inc.\nD8:30:62\tApple\tApple, Inc.\nD8:31:CF\tSamsungE\tSamsung Electronics Co.,Ltd\nD8:32:14\tTendaTec\tTenda Technology Co.,Ltd.Dongguan branch\nD8:32:5A\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\nD8:32:E3\tXiaomiCo\tXiaomi Communications Co Ltd\nD8:33:7F\tOfficeFa\tOffice FA.com Co.,Ltd.\nD8:37:BE\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\nD8:38:0D\tShenzhen\tSHENZHEN IP-COM Network Co.,Ltd\nD8:38:FC\tRuckusWi\tRuckus Wireless\nD8:3C:69\tShenzhen\tShenzhen TINNO Mobile Technology Corp.\nD8:42:AC\tShanghai\tShanghai Feixun Communication Co.,Ltd.\nD8:42:E2\tCanaryCo\tCanary Connect, Inc.\nD8:43:ED\tSuzuken\t\nD8:44:5C\tDevTecno\tDEV Tecnologia Ind Com Man Eq LTDA\nD8:45:2B\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\nD8:46:06\tSiliconV\tSilicon Valley Global Marketing\nD8:47:10\tSichuanC\tSichuan Changhong Electric Ltd.\nD8:48:EE\tHangzhou\tHangzhou Xueji Technology Co., Ltd.\nD8:49:0B\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD8:49:2F\tCanon\tCanon Inc.\nD8:4A:87\tOiElectr\tOi Electric Co.,Ltd\nD8:4B:2A\tCognitas\tCognitas Technologies, Inc.\nD8:4F:B8\tLgElectr\tLg Electronics\nD8:50:E6\tAsustekC\tASUSTek COMPUTER INC.\nD8:54:3A\tTexasIns\tTexas Instruments\nD8:54:A2\tAerohive\tAerohive Networks Inc.\nD8:55:A3\tZte\tzte corporation\nD8:57:EF\tSamsungE\tSamsung Electronics Co.,Ltd\nD8:58:D7\tCzNicZSP\tCZ.NIC, z.s.p.o.\nD8:5B:2A\tSamsungE\tSamsung Electronics Co.,Ltd\nD8:5D:4C\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nD8:5D:84\tCaxSoft\tCAx soft GmbH\nD8:5D:E2\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nD8:5D:EF\tBusch-Ja\tBusch-Jaeger Elektro GmbH\nD8:5D:FB\tPrivate\t\nD8:60:B0\tBiomérie\tbioMérieux Italia S.p.A.\nD8:60:B3\tGuangdon\tGuangdong Global Electronic Technology CO.，LTD\nD8:61:62\tWistronN\tWistron Neweb Corporation\nD8:61:94\tObjetivo\tObjetivos y Sevicios de Valor Añadido\nD8:62:DB\tEno\tEno Inc.\nD8:63:75\tXiaomiCo\tXiaomi Communications Co Ltd\nD8:65:95\tToySMyth\tToy's Myth Inc.\nD8:66:C6\tShenzhen\tShenzhen Daystar Technology Co.,ltd\nD8:66:EE\tBoxinCom\tBoxin Communication Co.,Ltd.\nD8:67:D9\tCisco\tCisco Systems, Inc\nD8:68:C3\tSamsungE\tSamsung Electronics Co.,Ltd\nD8:69:60\tSteinsvi\tSteinsvik\nD8:6B:F7\tNintendo\tNintendo Co., Ltd.\nD8:6C:02\tHuaqinTe\tHuaqin Telecom Technology Co.,Ltd\nD8:6C:63\tGoogle\tGoogle, Inc.\nD8:6C:E9\tSagemcom\tSagemcom Broadband SAS\nD8:71:57\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\nD8:74:95\tZte\tzte corporation\nD8:75:33\tNokia\tNokia Corporation\nD8:76:0A\tEscort\tEscort, Inc.\nD8:78:E5\tKuhnSa\tKuhn Sa\nD8:79:88\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nD8:7C:DD\tSanix\tSanix Incorporated\nD8:7D:7F\tSagemcom\tSagemcom Broadband SAS\nD8:7E:B1\tXOWare\tx.o.ware, inc.\nD8:80:39\tMicrochi\tMicrochip Technology Inc.\nD8:80:3C\tAnhuiHua\tAnhui Huami Information Technology Company Limited\nD8:81:CE\tAhn\tAhn Inc.\nD8:84:66\tExtremeN\tExtreme Networks, Inc.\nD8:87:D5\tLeadcore\tLeadcore Technology CO.,LTD\nD8:88:CE\tRfTechno\tRF Technology Pty Ltd\nD8:8A:3B\tUnit-Em\t\nD8:8B:4C\tKingting\tKingTing Tech.\nD8:8D:5C\tElentec\t\nD8:8F:76\tApple\tApple, Inc.\nD8:90:E8\tSamsungE\tSamsung Electronics Co.,Ltd\nD8:91:2A\tZyxelCom\tZyxel Communications Corporation\nD8:93:41\tGeneralE\tGeneral Electric Global Research\nD8:94:03\tHewlettP\tHewlett Packard Enterprise\nD8:95:2F\tTexasIns\tTexas Instruments\nD8:96:85\tGopro\t\nD8:96:95\tApple\tApple, Inc.\nD8:96:E0\tAlibabaC\tAlibaba Cloud Computing Ltd.\nD8:97:3B\tArtesynE\tArtesyn Embedded Technologies\nD8:97:60\tC2Develo\tC2 Development, Inc.\nD8:97:7C\tGreyInno\tGrey Innovation\nD8:97:BA\tPegatron\tPegatron Corporation\nD8:9A:34\tBeijingS\tBeijing SHENQI Technology Co., Ltd.\nD8:9C:67\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nD8:9D:67\tHewlettP\tHewlett Packard\nD8:9D:B9\tEmegatec\teMegatech International Corp.\nD8:9E:3F\tApple\tApple, Inc.\nD8:9E:F3\tDell\tDell Inc.\nD8:A0:1D\tEspressi\tEspressif Inc.\nD8:A1:05\tSyslane\tSyslane, Co., Ltd.\nD8:A2:5E\tApple\tApple, Inc.\nD8:A5:34\tSpectron\tSpectronix Corporation\nD8:A9:8B\tTexasIns\tTexas Instruments\nD8:AD:DD\tSonavati\tSonavation, Inc.\nD8:AE:90\tItibiaTe\tItibia Technologies\nD8:AF:3B\tHangzhou\tHangzhou Bigbright Integrated communications system Co.,Ltd\nD8:AF:F1\tPanasoni\tPanasonic Appliances Company\nD8:B0:2E\tGuangzho\tGuangzhou Zonerich Business Machine Co., LTD.\nD8:B0:4C\tJinanUsr\tJinan USR IOT Technology Co., Ltd.\nD8:B1:22\tJuniperN\tJuniper Networks\nD8:B1:2A\tPanasoni\tPanasonic Mobile Communications Co.,Ltd.\nD8:B1:90\tCisco\tCisco Systems, Inc\nD8:B3:77\tHtc\tHTC Corporation\nD8:B6:B7\tComtrend\tComtrend Corporation\nD8:B6:C1\tNetworka\tNetworkAccountant, Inc.\nD8:B6:D6\tBluTethe\tBlu Tether Limited\nD8:B8:F6\tNantwork\tNantworks\nD8:B9:0E\tTripleDo\tTriple Domain Vision Co.,Ltd.\nD8:BB:2C\tApple\tApple, Inc.\nD8:BF:4C\tVictoryC\tVictory Concept Electronics Limited\nD8:C0:68\tNetgenet\tNetgenetech.co.,ltd.\nD8:C0:6A\tHunantvC\tHunantv.com Interactive Entertainment Media Co.,Ltd.\nD8:C3:FB\tDetracom\t\nD8:C4:6A\tMurataMa\tMurata Manufacturing Co., Ltd.\nD8:C4:97\tQuantaCo\tQuanta Computer Inc.\nD8:C4:E9\tSamsungE\tSamsung Electronics Co.,Ltd\nD8:C6:91\tHichanTe\tHichan Technology Corp.\nD8:C7:71\tHuaweiTe\tHuawei Technologies Co.,Ltd\nD8:C7:C8\tArubaNet\tAruba Networks\nD8:C8:E9\tPhicommS\tPhicomm (Shanghai) Co., Ltd.\nD8:C9:9D\tEaDispla\tEa Display Limited\nD8:CB:8A\tMicro-St\tMicro-Star INTL CO., LTD.\nD8:CF:9C\tApple\tApple, Inc.\nD8:D1:CB\tApple\tApple, Inc.\nD8:D2:7C\tJemaEner\tJema Energy, Sa\nD8:D3:85\tHewlettP\tHewlett Packard\nD8:D4:3C\tSony\tSony Corporation\nD8:D5:B9\tRainfore\tRainforest Automation, Inc.\nD8:D6:7E\tGskCncEq\tGsk Cnc Equipment Co.,Ltd\nD8:D7:23\tIds\tIDS, Inc\nD8:D7:75\tSagemcom\tSagemcom Broadband SAS\nD8:D8:66\tShenzhen\tShenzhen Tozed Technologies Co.,Ltd.\nD8:DA:52\tApatorSA\tApator S.A.\nD8:DC:E9\tKunshanE\tKunshan Erlab ductless filtration system Co.,Ltd\nD8:DD:5F\tBalmuda\tBALMUDA Inc.\nD8:DD:FD\tTexasIns\tTexas Instruments\nD8:DE:CE\tIsung\tIsung Co.,Ltd\nD8:DF:0D\tBeronet\tberoNet GmbH\nD8:DF:7A\tQuestSof\tQuest Software, Inc.\nD8:E0:04\tVodiaNet\tVodia Networks Inc\nD8:E0:B8\tBulatLlc\tBulat Llc\nD8:E0:E1\tSamsungE\tSamsung Electronics Co.,Ltd\nD8:E3:AE\tCirtecMe\tCirtec Medical Systems\nD8:E5:6D\tTctMobil\tTCT mobile ltd\nD8:E7:2B\tNetscout\tNetScout Systems, Inc.\nD8:E7:43\tWush\tWush, Inc\nD8:E9:52\tKeopsys\t\nD8:EB:97\tTrendnet\tTRENDnet, Inc.\nD8:ED:1C\tMagnaTec\tMagna Technology SL\nD8:EE:78\tMoogProt\tMoog Protokraft\nD8:EF:CD\tNokia\t\nD8:F0:F2\tZeebo\tZeebo Inc\nD8:F1:F0\tPepximIn\tPepxim International Limited\nD8:F3:DB\tPostCh\tPost CH AG\nD8:F7:10\tLibreWir\tLibre Wireless Technologies Inc.\nD8:FB:11\tAxacore\t\nD8:FB:5E\tAskeyCom\tAskey Computer Corp\nD8:FB:68\tCloudCor\tCloud Corner Ltd.\nD8:FC:38\tGiantecS\tGiantec Semiconductor Inc\nD8:FC:93\tIntelCor\tIntel Corporate\nD8:FE:8F\tIdfone\tIDFone Co., Ltd.\nD8:FE:E3\tD-LinkIn\tD-Link International\nDA:1C:21\tSesam\tSesam GmbH\nDA:28:EC\tHgGenuin\tHG Genuine\nDA:2B:DD\tAt&T\tAT&T, Inc.\nDA:A1:19\tGoogle\tGoogle, Inc.\nDA:FF:6B\tTeamPrec\tTeam Precision Public Company Limited\nDC:00:77\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nDC:02:65\tMeditech\tMeditech Kft\nDC:02:8E\tZte\tzte corporation\nDC:05:2F\tNational\tNational Products Inc.\nDC:05:75\tSiemensE\tSiemens Energy Automation\nDC:05:ED\tNabtesco\tNabtesco  Corporation\nDC:07:C1\tHangzhou\tHangZhou QiYang Technology Co.,Ltd.\nDC:08:56\tAlcatel-\tAlcatel-Lucent Enterprise\nDC:09:14\tTalk-A-P\tTalk-A-Phone Co.\nDC:09:4C\tHuaweiTe\tHuawei Technologies Co.,Ltd\nDC:0B:1A\tAdbBroad\tADB Broadband Italia\nDC:0B:34\tLgElectr\tLG Electronics (Mobile Communications)\nDC:0C:2D\tWeifangG\tWeifang Goertek Electronics Co.,Ltd\nDC:0C:5C\tApple\tApple, Inc.\nDC:0D:30\tShenzhen\tShenzhen Feasycom Technology Co., Ltd.\nDC:0E:A1\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\nDC:15:DB\tGeRuiliI\tGe Ruili Intelligent Technology ( Beijing ) Co., Ltd.\nDC:16:A2\tMedtroni\tMedtronic Diabetes\nDC:16:B2\tHuaweiTe\tHuawei Technologies Co.,Ltd\nDC:17:5A\tHitachiH\tHitachi High-Technologies Corporation\nDC:17:92\tCaptivat\tCaptivate Network\nDC:1A:01\tEcolivTe\tEcoliv Technology ( Shenzhen ) Ltd.\nDC:1A:C5\tVivoMobi\tvivo Mobile Communication Co., Ltd.\nDC:1D:9F\tUBTech\tU & B tech\nDC:1D:D4\tMicroste\tMicrostep-MIS spol. s r.o.\nDC:1E:A3\tAccensus\tAccensus LLC\nDC:20:08\tAsdElect\tASD Electronics Ltd\nDC:28:34\tHakko\tHAKKO Corporation\nDC:29:19\tAltobeam\tAltoBeam (Xiamen) Technology Ltd, Co.\nDC:29:3A\tShenzhen\tShenzhen Nuoshi Technology Co., LTD.\nDC:2A:14\tShanghai\tShanghai Longjing Technology Co.\nDC:2B:2A\tApple\tApple, Inc.\nDC:2B:61\tApple\tApple, Inc.\nDC:2B:66\tInfobloc\tInfoBLOCK S.A. de C.V.\nDC:2B:CA\tZera\tZera GmbH\nDC:2C:26\tItonTech\tIton Technology Limited\nDC:2D:CB\tBeijingU\tBeijing Unis HengYue Technology Co., Ltd.\nDC:2E:6A\tHct\tHCT. Co., Ltd.\nDC:2F:03\tStepForw\tStep forward Group Co., Ltd.\nDC:30:9C\tHeyrex\tHeyrex Limited\nDC:33:0D\tQingDaoH\tQing Dao Haier Telecom Co.,Ltd.\nDC:33:50\tTechsat\tTechSAT GmbH\nDC:35:F1\tPositivo\tPositivo Informática SA.\nDC:37:14\tApple\tApple, Inc.\nDC:37:52\tGe\t\nDC:37:57\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\nDC:37:D2\tHunanHkt\tHunan HKT Electronic Technology Co., Ltd\nDC:38:E1\tJuniperN\tJuniper Networks\nDC:39:79\tCisco\tCisco Systems, Inc\nDC:3A:5E\tRoku\tRoku, Inc.\nDC:3C:2E\tManufact\tManufacturing System Insights, Inc.\nDC:3C:84\tTicomGeo\tTicom Geomatics, Inc.\nDC:3C:F6\tAtomicRu\tAtomic Rules LLC\nDC:3E:51\tSolbergA\tSolberg & Andersen AS\nDC:3E:F8\tNokia\tNokia Corporation\nDC:41:5F\tApple\tApple, Inc.\nDC:41:E5\tShenzhen\tShenzhen Zhixin Data Service Co., Ltd.\nDC:44:27\tIeeeRegi\tIEEE Registration Authority\nDC:44:27:00:00:00/28\tSuritel\t\nDC:44:27:10:00:00/28\tTeslaMot\tTesla Motors, Inc\nDC:44:27:20:00:00/28\tSkywaveT\tSkywave Technology Co,.Ltd.\nDC:44:27:30:00:00/28\tGeneralM\tGeneral Microsystems Sdn Bhd\nDC:44:27:40:00:00/28\tNexTechn\tNex Technologies PTY LTD\nDC:44:27:50:00:00/28\tCenturyA\tCentury Audio, Inc.\nDC:44:27:60:00:00/28\tEk-TeamE\tEK-TEAM Elektronik- u. Kunststoff-Technik GmbH\nDC:44:27:70:00:00/28\tEcoguard\tEcoGuard AB\nDC:44:27:80:00:00/28\tWhartonE\tWharton Electronics Ltd\nDC:44:27:90:00:00/28\tNeusoft\tNeusoft Corporation\nDC:44:27:A0:00:00/28\tShanghai\tShanghai Huahong Integrated Circuit Co.,Ltd\nDC:44:27:B0:00:00/28\tNautilus\tNautilus Infotech CO., Ltd.\nDC:44:27:C0:00:00/28\tPyrexxTe\tPyrexx Technologies GmbH\nDC:44:27:D0:00:00/28\tRohde&Sc\tRohde&Schwarz Topex SA\nDC:44:27:E0:00:00/28\tVerifeye\tVerifEye Technologies\nDC:44:27:F0:00:00/28\tPrivate\t\nDC:44:6D\tAllwinne\tAllwinner Technology Co., Ltd\nDC:44:B6\tSamsungE\tSamsung Electronics Co.,Ltd\nDC:45:17\tArrisGro\tARRIS Group, Inc.\nDC:48:B2\tBarajaPt\tBaraja Pty. Ltd.\nDC:49:C9\tCascoSig\tCasco Signal Ltd\nDC:4A:3E\tHewlettP\tHewlett Packard\nDC:4D:23\tMrvComun\tMRV Comunications\nDC:4E:DE\tShinyeiT\tShinyei Technology Co., Ltd.\nDC:4E:F4\tShenzhen\tShenzhen MTN Electronics CO., Ltd\nDC:4F:22\tEspressi\tEspressif Inc.\nDC:53:60\tIntelCor\tIntel Corporate\nDC:53:7C\tCompalBr\tCompal Broadband Networks, Inc.\nDC:55:83\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nDC:56:E6\tShenzhen\tShenzhen Bococom Technology Co.,LTD\nDC:56:E7\tApple\tApple, Inc.\nDC:57:26\tPower-On\tPower-One\nDC:5E:36\tPaterson\tPaterson Technology\nDC:60:A1\tTeledyne\tTeledyne DALSA Professional Imaging\nDC:64:7C\tCRSIimot\tC.R.S. iiMotion GmbH\nDC:64:B8\tShenzhen\tShenzhen JingHanDa Electronics Co.Ltd\nDC:66:3A\tApacerTe\tApacer Technology Inc.\nDC:66:72\tSamsungE\tSamsung Electronics Co.,Ltd\nDC:68:EB\tNintendo\tNintendo Co.,Ltd\nDC:6A:EA\tInfinixM\tInfinix mobility limited\nDC:6D:CD\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nDC:6F:00\tLivescri\tLivescribe, Inc.\nDC:6F:08\tBayStora\tBay Storage Technology\nDC:70:14\tPrivate\t\nDC:71:44\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\nDC:72:9B\tHuaweiTe\tHuawei Technologies Co.,Ltd\nDC:74:A8\tSamsungE\tSamsung Electronics Co.,Ltd\nDC:78:34\tLogicomS\tLogicom Sa\nDC:7B:94\tCisco\tCisco Systems, Inc\nDC:7F:A4\t2wire\t2Wire Inc\nDC:82:5B\tJanusSpo\tJANUS, spol. s r.o.\nDC:82:F6\tIport\t\nDC:85:DE\tAzurewav\tAzureWave Technology Inc.\nDC:86:D8\tApple\tApple, Inc.\nDC:8B:28\tIntelCor\tIntel Corporate\nDC:90:88\tHuaweiTe\tHuawei Technologies Co.,Ltd\nDC:99:14\tHuaweiTe\tHuawei Technologies Co.,Ltd\nDC:9A:8E\tNanjingC\tNanjing Cocomm electronics co., LTD\nDC:9B:1E\tIntercom\tIntercom, Inc.\nDC:9B:9C\tApple\tApple, Inc.\nDC:9C:52\tSapphire\tSapphire Technology Limited.\nDC:9C:9F\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\nDC:9F:A4\tNokia\tNokia Corporation\nDC:9F:DB\tUbiquiti\tUbiquiti Networks Inc.\nDC:A2:66\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nDC:A3:33\tShenzhen\tShenzhen YOUHUA Technology Co., Ltd\nDC:A3:AC\tRbcloudt\tRBcloudtech\nDC:A4:CA\tApple\tApple, Inc.\nDC:A5:F4\tCisco\tCisco Systems, Inc\nDC:A6:BD\tBeijingL\tBeijing Lanbo Technology Co., Ltd.\nDC:A7:D9\tCompress\tCompressor Controls Corp\nDC:A8:CF\tNewSpinG\tNew Spin Golf, LLC.\nDC:A9:04\tApple\tApple, Inc.\nDC:A9:71\tIntelCor\tIntel Corporate\nDC:A9:89\tMacandc\t\nDC:AD:9E\tGreenpri\tGreenPriz\nDC:AE:04\tCeloxica\tCELOXICA Ltd\nDC:AF:68\tWeifangG\tWeifang Goertek Electronics Co.,Ltd\nDC:B0:58\tBürkertW\tBürkert Werke GmbH\nDC:B3:B4\tHoneywel\tHoneywell Environmental & Combustion Controls (Tianjin) Co., Ltd.\nDC:B4:AC\tFlextron\tFLEXTRONICS MANUFACTURING(ZHUHAI)CO.,LTD.\nDC:B4:C4\tMicrosof\tMicrosoft XCG\nDC:BE:7A\tZhejiang\tZhejiang Nurotron Biotechnology Co.\nDC:BF:90\tHuizhouQ\tHuizhou Qiaoxing Telecommunication Industry Co.,Ltd.\nDC:BF:E9\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nDC:C0:DB\tShenzhen\tShenzhen Kaiboer Technology Co., Ltd.\nDC:C0:EB\tAssaAblo\tASSA ABLOY CÔTE PICARDE\nDC:C1:01\tSolidTec\tSOLiD Technologies, Inc.\nDC:C4:22\tSystemba\tSystembase Limited\nDC:C6:22\tBuheungS\tBuheung System\nDC:C6:4B\tHuaweiTe\tHuawei Technologies Co.,Ltd\nDC:C7:93\tNokia\tNokia Corporation\nDC:C8:F5\tShanghai\tShanghai UMEinfo CO.,LTD.\nDC:CB:A8\tExploraT\tExplora Technologies Inc\nDC:CE:41\tFeGlobal\tFe Global Hong Kong Limited\nDC:CE:BC\tShenzhen\tShenzhen JSR Technology Co.,Ltd.\nDC:CE:C1\tCisco\tCisco Systems, Inc\nDC:CF:94\tBeijingR\tBeijing Rongcheng Hutong Technology Co., Ltd.\nDC:CF:96\tSamsungE\tSamsung Electronics Co.,Ltd\nDC:D0:F7\tBentek\tBentek Systems Ltd.\nDC:D2:55\tKinpoEle\tKinpo Electronics, Inc.\nDC:D2:FC\tHuaweiTe\tHuawei Technologies Co.,Ltd\nDC:D3:21\tHumax\tHUMAX Co., Ltd.\nDC:D3:A2\tApple\tApple, Inc.\nDC:D5:2A\tSunnyHea\tSunny Heart Limited\nDC:D8:7C\tBeijingJ\tBeijing Jingdong Century Trading Co., LTD.\nDC:D8:7F\tShenzhen\tShenzhen JoinCyber Telecom Equipment Ltd\nDC:D9:16\tHuaweiTe\tHuawei Technologies Co.,Ltd\nDC:DA:4F\tGetckTec\tGetck Technology, Inc\nDC:DB:70\tTonfunkS\tTonfunk Systementwicklung und Service GmbH\nDC:DC:07\tTrpBv\tTRP Systems BV\nDC:DD:24\tEnergica\tEnergica Motor Company SpA\nDC:DE:4F\tGioneeCo\tGionee Communication Equipment Co Ltd\nDC:DE:CA\tAkyllor\t\nDC:E0:26\tPatrolTa\tPatrol Tag, Inc\nDC:E0:EB\tNanjingA\tNanjing Aozheng Information Technology Co.Ltd\nDC:E1:AD\tShenzhen\tShenzhen Wintop Photoelectric Technology Co., Ltd\nDC:E2:AC\tLumensDi\tLumens Digital Optics Inc.\nDC:E3:05\tZaoNpkRo\tZAO NPK Rotek\nDC:E5:33\tIeeeRegi\tIEEE Registration Authority\nDC:E5:33:00:00:00/28\tFlyhtAer\tFLYHT Aerospace\nDC:E5:33:10:00:00/28\tAmbiLabs\tAmbi Labs Limited\nDC:E5:33:20:00:00/28\tRemko\tRemko GmbH & Co. KG\nDC:E5:33:30:00:00/28\tShenzhen\tShenZhen C&D Electronics CO.Ltd.\nDC:E5:33:40:00:00/28\tShenzhen\tshenzhen bangying electronics co,.ltd\nDC:E5:33:50:00:00/28\tControls\tControls Inc\nDC:E5:33:60:00:00/28\tWecanSol\tWECAN Solution Inc.\nDC:E5:33:70:00:00/28\tSanEngin\tSAN Engineering\nDC:E5:33:80:00:00/28\tJb-Light\tJB-Lighting Lichtanlagen GmbH\nDC:E5:33:90:00:00/28\tTiertime\tTiertime Corporation\nDC:E5:33:A0:00:00/28\tPrivate\t\nDC:E5:33:B0:00:00/28\tTintelHo\tTintel Hongkong Co.Ltd\nDC:E5:33:C0:00:00/28\tBrck\t\nDC:E5:33:D0:00:00/28\tSuzhouAt\tSuzhou ATES electronic technology co.LTD\nDC:E5:33:E0:00:00/28\tGiantPow\tGiant Power Technology Biomedical Corporation\nDC:E5:78\tExperime\tExperimental Factory of Scientific Engineering and Special Design Department\nDC:E7:1C\tAugElekt\tAUG Elektronik GmbH\nDC:E8:38\tCkTeleco\tCK Telecom (Shenzhen) Limited\nDC:EB:53\tWuhanQia\tWuhan QianXiao Elecronic Technology CO.,LTD\nDC:EB:94\tCisco\tCisco Systems, Inc\nDC:EC:06\tHeimiNet\tHeimi Network Technology Co., Ltd.\nDC:EE:06\tHuaweiTe\tHuawei Technologies Co.,Ltd\nDC:EF:09\tNetgear\t\nDC:EF:CA\tMurataMa\tMurata Manufacturing Co., Ltd.\nDC:F0:5D\tLettaTek\tLetta Teknoloji\nDC:F0:90\tNubiaTec\tNubia Technology Co.,Ltd.\nDC:F1:10\tNokia\tNokia Corporation\nDC:F4:01\tDell\tDell Inc.\nDC:F5:05\tAzurewav\tAzureWave Technology Inc.\nDC:F7:19\tCisco\tCisco Systems, Inc\nDC:F7:55\tSitronik\t\nDC:F7:56\tSamsungE\tSamsung Electronics Co.,Ltd\nDC:F8:58\tLorentNe\tLorent Networks, Inc.\nDC:FA:D5\tStrongGe\tSTRONG Ges.m.b.H.\nDC:FB:02\tBuffalo\tBuffalo.Inc\nDC:FE:07\tPegatron\tPegatron Corporation\nDC:FE:18\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nE0:03:70\tShenzhen\tShenZhen Continental Wireless Technology Co., Ltd.\nE0:05:C5\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nE0:06:E6\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nE0:07:1B\tHewlettP\tHewlett Packard Enterprise\nE0:0B:28\tInovonic\tInovonics\nE0:0C:7F\tNintendo\tNintendo Co., Ltd.\nE0:0D:B9\tCree\tCree, Inc.\nE0:0E:DA\tCisco\tCisco Systems, Inc\nE0:0E:E1\tWe\tWe Corporation Inc.\nE0:10:7F\tRuckusWi\tRuckus Wireless\nE0:12:83\tShenzhen\tShenzhen Fanzhuo Communication Technology Co., Lt\nE0:13:B5\tVivoMobi\tvivo Mobile Communication Co., Ltd.\nE0:14:3E\tModoosis\tModoosis Inc.\nE0:18:77\tFujitsu\tFujitsu Limited\nE0:19:1D\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE0:19:D8\tBhTechno\tBh Technologies\nE0:1A:EA\tAlliedTe\tAllied Telesis, Inc.\nE0:1C:41\tAerohive\tAerohive Networks Inc.\nE0:1C:EE\tBravoTec\tBravo Tech, Inc.\nE0:1D:38\tBeijingH\tBeijing HuaqinWorld Technology Co.,Ltd\nE0:1D:3B\tCambridg\tCambridge Industries(Group) Co.,Ltd.\nE0:1E:07\tAniteTel\tAnite Telecoms  US. Inc\nE0:1F:0A\tXslentEn\tXslent Energy Technologies. LLC\nE0:22:02\tArrisGro\tARRIS Group, Inc.\nE0:24:7F\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE0:25:38\tTitanPet\tTitan Pet Products\nE0:26:30\tIntrigue\tIntrigue Technologies, Inc.\nE0:26:36\tNortelNe\tNortel Networks\nE0:27:1A\tTtcNext-\tTTC Next-generation Home Network System WG\nE0:28:61\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE0:28:6D\tAvmAudio\tAVM Audiovisuelles Marketing und Computersysteme GmbH\nE0:2A:82\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\nE0:2C:B2\tLenovoMo\tLenovo Mobile Communication (Wuhan) Company Limited\nE0:2C:F3\tMrsElect\tMRS Electronic GmbH\nE0:2F:6D\tCisco\tCisco Systems, Inc\nE0:30:05\tAlcatel-\tAlcatel-Lucent Shanghai Bell Co., Ltd\nE0:31:9E\tValve\tValve Corporation\nE0:31:D0\tSzTelsta\tSZ Telstar CO., LTD\nE0:33:8E\tApple\tApple, Inc.\nE0:34:E4\tFeitElec\tFeit Electric Company, Inc.\nE0:35:60\tChalleng\tChallenger Supply Holdings, LLC\nE0:36:76\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE0:36:E3\tStageOne\tStage One International Co., Ltd.\nE0:37:BF\tWistronN\tWistron Neweb Corporation\nE0:38:3F\tZte\tzte corporation\nE0:39:D7\tPlexxi\tPlexxi, Inc.\nE0:3C:5B\tShenzhen\tShenzhen Jiaxinjie Electron Co.,Ltd\nE0:3E:44\tBroadcom\t\nE0:3E:4A\tCavanagh\tCavanagh Group International\nE0:3E:7D\tData-Com\tdata-complex GmbH\nE0:3F:49\tAsustekC\tASUSTek COMPUTER INC.\nE0:41:36\tMitrasta\tMitraStar Technology Corp.\nE0:43:DB\tShenzhen\tShenzhen ViewAt Technology Co.,Ltd.\nE0:45:6D\tChinaMob\tChina Mobile Group Device Co.,Ltd.\nE0:46:9A\tNetgear\t\nE0:46:E5\tGosuncnT\tGosuncn Technology Group Co., Ltd.\nE0:48:AF\tPremiete\tPremietech Limited\nE0:48:D3\tMobiwire\tMOBIWIRE MOBILES (NINGBO) CO.,LTD\nE0:49:ED\tAudezeLl\tAudeze LLC\nE0:4B:45\tHi-PElec\tHi-P Electronics Pte Ltd\nE0:4F:43\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\nE0:4F:BD\tSichuanT\tSichuan Tianyi Comheart Telecomco.,Ltd\nE0:50:8B\tZhejiang\tZhejiang Dahua Technology Co., Ltd.\nE0:51:24\tNxpSemic\tNXP Semiconductors\nE0:51:63\tArcadyan\tArcadyan Corporation\nE0:55:3D\tCiscoMer\tCisco Meraki\nE0:55:97\tEmergent\tEmergent Vision Technologies Inc.\nE0:56:F4\tAxesnetw\tAxesNetwork Solutions inc.\nE0:58:9E\tLaerdalM\tLaerdal Medical\nE0:5B:70\tInnovid\tInnovid, Co., Ltd.\nE0:5D:5C\tOyEveron\tOy Everon Ab\nE0:5D:A6\tDetlefFi\tDetlef Fink Elektronik & Softwareentwicklung\nE0:5F:45\tApple\tApple, Inc.\nE0:5F:B9\tCisco\tCisco Systems, Inc\nE0:60:66\tSercomm\tSercomm Corporation.\nE0:60:89\tCloudlea\tCloudleaf, Inc.\nE0:61:B2\tHangzhou\tHangzhou Zenointel Technology Co., Ltd\nE0:62:67\tXiaomiCo\tXiaomi Communications Co Ltd\nE0:62:90\tJinanJov\tJinan Jovision Science & Technology Co., Ltd.\nE0:63:DA\tUbiquiti\tUbiquiti Networks Inc.\nE0:63:E5\tSonyMobi\tSony Mobile Communications Inc\nE0:64:BB\tDigiview\tDigiView S.r.l.\nE0:66:78\tApple\tApple, Inc.\nE0:67:B3\tC-DataTe\tC-Data Technology Co., Ltd\nE0:68:6D\tRaybased\tRaybased AB\nE0:69:95\tPegatron\tPegatron Corporation\nE0:73:5F\tNucom\t\nE0:75:0A\tAlpsElec\tAlps Electric Co.,Ltd.\nE0:75:7D\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nE0:76:D0\tAmpakTec\tAMPAK Technology, Inc.\nE0:78:A3\tShanghai\tShanghai Winner Information Technology Co.,Inc\nE0:79:5E\tWuxiXiao\tWuxi Xiaohu Technology Co.,Ltd.\nE0:7C:13\tZte\tzte corporation\nE0:7C:62\tWhistleL\tWhistle Labs, Inc.\nE0:7D:EA\tTexasIns\tTexas Instruments\nE0:7F:53\tTechboar\tTechboard Srl\nE0:7F:88\tEvidence\tEVIDENCE Network SIA\nE0:81:77\tGreenbyt\tGreenBytes, Inc.\nE0:84:F3\tHighGrad\tHigh Grade Controls Corporation\nE0:87:B1\tNata-Inf\tNata-Info Ltd.\nE0:88:5D\tTechnico\tTechnicolor CH USA Inc.\nE0:89:9D\tCisco\tCisco Systems, Inc\nE0:8A:7E\tExponent\t\nE0:8E:3C\tAztechEl\tAztech Electronics Pte Ltd\nE0:8F:EC\tRepotec\tRepotec Co., Ltd.\nE0:91:53\tXaviTech\tXAVi Technologies Corp.\nE0:91:F5\tNetgear\t\nE0:94:67\tIntelCor\tIntel Corporate\nE0:95:79\tOrthosof\tORTHOsoft inc, d/b/a Zimmer CAS\nE0:97:96\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE0:97:F2\tAtomax\tAtomax Inc.\nE0:98:61\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nE0:99:71\tSamsungE\tSamsung Electronics Co.,Ltd\nE0:9D:31\tIntelCor\tIntel Corporate\nE0:9D:B8\tPlanexCo\tPlanex Communications Inc.\nE0:9D:FA\tWananHon\tWanan Hongsheng Electronic Co.Ltd\nE0:A1:98\tNojaPowe\tNOJA Power Switchgear Pty Ltd\nE0:A1:D7\tSfr\t\nE0:A3:0F\tPevco\t\nE0:A3:AC\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE0:A6:70\tNokia\tNokia Corporation\nE0:A7:00\tVerkada\tVerkada Inc\nE0:A8:B8\tLeShiZhi\tLe Shi Zhi Xin Electronic Technology (Tianjin) Limited\nE0:AA:96\tSamsungE\tSamsung Electronics Co.,Ltd\nE0:AA:B0\tGeneralV\tGeneral Vision Electronics Co. Ltd.\nE0:AA:DB\tNanjingP\tNanjing PANENG Technology Development Co.,Ltd\nE0:AB:FE\tOrbNetwo\tOrb Networks, Inc.\nE0:AC:CB\tApple\tApple, Inc.\nE0:AC:F1\tCisco\tCisco Systems, Inc\nE0:AE:5E\tAlpsElec\tAlps Electric Co.,Ltd.\nE0:AE:B2\tBender&A\tBender GmbH &amp; Co.KG\nE0:AE:ED\tLoenk\t\nE0:AF:4B\tPluribus\tPluribus Networks, Inc.\nE0:AF:4F\tDeutsche\tDeutsche Telekom AG\nE0:B2:F1\tFn-LinkT\tFN-LINK TECHNOLOGY LIMITED\nE0:B5:2D\tApple\tApple, Inc.\nE0:B6:F5\tIeeeRegi\tIEEE Registration Authority\nE0:B6:F5:00:00:00/28\tBestar\tBeSTAR Corporation\nE0:B6:F5:10:00:00/28\tStartTod\tStart Today Co.,Ltd.\nE0:B6:F5:20:00:00/28\tShanghai\tShanghai- British Information Technology Co., Ltd\nE0:B6:F5:30:00:00/28\tHuizhouG\tHuizhou GISUN Industrial CO. LTD\nE0:B6:F5:40:00:00/28\tAgora\t\nE0:B6:F5:50:00:00/28\tShenzhen\tShenzhen Civicom Technology Co.,Limited\nE0:B6:F5:60:00:00/28\tPomcube\tPOMCube Inc.\nE0:B6:F5:70:00:00/28\tShenzhen\tShenzhen Xrinda Technology Ltd\nE0:B6:F5:80:00:00/28\tYuneecIn\tYuneec International（China）Co.，Ltd\nE0:B6:F5:90:00:00/28\tMotivepr\tMotiveprime Consumer Electronics Pvt Ltd\nE0:B6:F5:A0:00:00/28\tFolksam\tFolksam AB\nE0:B6:F5:B0:00:00/28\tMoogCros\tMoog Crossbow\nE0:B6:F5:C0:00:00/28\tFunktel\tfunktel GmbH\nE0:B6:F5:D0:00:00/28\tItelMobi\tItel Mobile Limited\nE0:B6:F5:E0:00:00/28\tAdvatekL\tAdvatek Lighting Pty Ltd\nE0:B7:0A\tArrisGro\tARRIS Group, Inc.\nE0:B7:B1\tArrisGro\tARRIS Group, Inc.\nE0:B9:4D\tShenzhen\tSHENZHEN BILIAN ELECTRONIC CO.，LTD\nE0:B9:A5\tAzurewav\tAzureWave Technology Inc.\nE0:B9:BA\tApple\tApple, Inc.\nE0:B9:E5\tTechnico\tTechnicolor\nE0:BA:B4\tArrcus\tArrcus, Inc\nE0:BC:43\tC2Micros\tC2 Microsystems, Inc.\nE0:C0:D1\tCkTeleco\tCK Telecom (Shenzhen) Limited\nE0:C2:86\tAisaiCom\tAisai Communication Technology Co., Ltd.\nE0:C2:B7\tMasimo\tMasimo Corporation\nE0:C3:F3\tZte\tzte corporation\nE0:C6:B3\tMildef\tMilDef AB\nE0:C7:67\tApple\tApple, Inc.\nE0:C7:9D\tTexasIns\tTexas Instruments\nE0:C8:6A\tShenzhen\tSHENZHEN TW-SCIE Co., Ltd\nE0:C9:22\tJirehEne\tJireh Energy Tech., Ltd.\nE0:C9:7A\tApple\tApple, Inc.\nE0:CA:4D\tShenzhen\tShenzhen Unistar Communication Co.,LTD\nE0:CA:94\tAskeyCom\tAskey Computer Corp\nE0:CB:1D\tPrivate\t\nE0:CB:4E\tAsustekC\tASUSTek COMPUTER INC.\nE0:CB:BC\tCiscoMer\tCisco Meraki\nE0:CB:EE\tSamsungE\tSamsung Electronics Co.,Ltd\nE0:CD:FD\tBeijingE\tBeijing E3Control Technology Co, LTD\nE0:CE:C3\tAskeyCom\tAskey Computer Corp\nE0:CF:2D\tGemintek\tGemintek Corporation\nE0:D1:0A\tKatouden\tKatoudenkikougyousyo co ltd\nE0:D1:73\tCisco\tCisco Systems, Inc\nE0:D1:E6\tAliphDba\tAliph dba Jawbone\nE0:D3:1A\tEquesTec\tEQUES Technology Co., Limited\nE0:D5:5E\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\nE0:D7:BA\tTexasIns\tTexas Instruments\nE0:D8:48\tDell\tDell Inc.\nE0:D9:A2\tHippihAp\tHippih aps\nE0:D9:E3\tEltexEnt\tEltex Enterprise Ltd.\nE0:DA:DC\tJvcKenwo\tJVC KENWOOD Corporation\nE0:DB:10\tSamsungE\tSamsung Electronics Co.,Ltd\nE0:DB:55\tDell\tDell Inc.\nE0:DB:88\tOpenStan\tOpen Standard Digital-IF Interface for SATCOM Systems\nE0:DC:A0\tSiemensI\tSiemens Industrial Automation Products Ltd Chengdu\nE0:DD:C0\tVivoMobi\tvivo Mobile Communication Co., Ltd.\nE0:E5:CF\tTexasIns\tTexas Instruments\nE0:E6:2E\tTctMobil\tTCT mobile ltd\nE0:E6:31\tSnbTechn\tSnb Technologies Limited\nE0:E7:51\tNintendo\tNintendo Co., Ltd.\nE0:E7:BB\tNureva\tNureva, Inc.\nE0:E8:E8\tOliveTel\tOlive Telecommunication Pvt. Ltd\nE0:ED:1A\tVastrive\tvastriver Technology Co., Ltd\nE0:ED:C7\tShenzhen\tShenzhen Friendcom Technology Development Co., Ltd\nE0:EE:1B\tPanasoni\tPanasonic Automotive Systems Company of America\nE0:EF:25\tLintesTe\tLintes Technology Co., Ltd.\nE0:F2:11\tDigitalw\tDigitalwatt\nE0:F3:79\tVaddio\t\nE0:F5:C6\tApple\tApple, Inc.\nE0:F5:CA\tChengUei\tCheng Uei Precision Industry Co.,Ltd.\nE0:F8:47\tApple\tApple, Inc.\nE0:F9:BE\tCloudena\tCloudena Corp.\nE0:FA:EC\tPlatanSp\tPlatan sp. z o.o. sp. k.\nE0:FF:F7\tSoftiron\tSoftiron Inc.\nE2:0C:0F\tKingston\tKingston Technologies\nE4:02:9B\tIntelCor\tIntel Corporate\nE4:04:39\tTomtomSo\tTomTom Software Ltd\nE4:0E:EE\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE4:11:5B\tHewlettP\tHewlett Packard\nE4:12:18\tShenzhen\tShenZhen Rapoo Technology Co., Ltd.\nE4:12:1D\tSamsungE\tSamsung Electronics Co.,Ltd\nE4:12:89\tTopsyste\ttopsystem Systemhaus GmbH\nE4:17:D8\t8bitdoTe\t8BITDO TECHNOLOGY HK LIMITED\nE4:18:6B\tZyxelCom\tZyxel Communications Corporation\nE4:1A:2C\tZpe\tZPE Systems, Inc.\nE4:1C:4B\tV2Techno\tV2 TECHNOLOGY, INC.\nE4:1D:2D\tMellanox\tMellanox Technologies, Inc.\nE4:1F:13\tIbm\tIBM Corp\nE4:1F:E9\tDunkermo\tDunkermotoren GmbH\nE4:22:A5\tPlantron\tPlantronics, Inc.\nE4:23:54\tShenzhen\tShenzhen Fuzhi Software Technology Co.,Ltd\nE4:25:E7\tApple\tApple, Inc.\nE4:25:E9\tColor-Ch\tColor-Chip\nE4:27:71\tSmartlab\tSmartlabs\nE4:2A:D3\tMagnetiM\tMagneti Marelli S.p.A. Powertrain\nE4:2B:34\tApple\tApple, Inc.\nE4:2C:56\tLilee\tLilee Systems, Ltd.\nE4:2D:02\tTctMobil\tTCT mobile ltd\nE4:2D:7B\tChinaMob\tChina Mobile IOT Company Limited\nE4:2F:26\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nE4:2F:56\tOptomet\tOptoMET GmbH\nE4:2F:F6\tUnicoreC\tUnicore communication Inc.\nE4:30:22\tHanwhaTe\tHanwha Techwin Security Vietnam\nE4:32:CB\tSamsungE\tSamsung Electronics Co.,Ltd\nE4:34:93\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE4:35:93\tHangzhou\tHangzhou GoTo technology Co.Ltd\nE4:35:C8\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE4:35:FB\tSabreTec\tSabre Technology (Hull) Ltd\nE4:37:D7\tHenriDep\tHenri Depaepe S.A.S.\nE4:38:F2\tAdvantag\tAdvantage Controls\nE4:3A:6E\tShenzhen\tShenzhen Zeroone Technology CO.,LTD\nE4:3C:80\tUniversi\tUniversity of Oklahoma\nE4:3E:D7\tArcadyan\tArcadyan Corporation\nE4:3F:A2\tWuxiDspT\tWuxi DSP Technologies Inc.\nE4:40:E2\tSamsungE\tSamsung Electronics Co.,Ltd\nE4:41:E6\tOttecTec\tOttec Technology GmbH\nE4:42:A6\tIntelCor\tIntel Corporate\nE4:43:4B\tDell\tDell Inc.\nE4:46:BD\tC&CTechn\tC&C TECHNIC TAIWAN CO., LTD.\nE4:46:DA\tXiaomiCo\tXiaomi Communications Co Ltd\nE4:47:90\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nE4:48:C7\tCiscoSpv\tCisco SPVTG\nE4:4C:6C\tShenzhen\tShenzhen Guo Wei Electronic Co,. Ltd.\nE4:4E:18\tGardasof\tGardasoft VisionLimited\nE4:4E:76\tChampion\tCHAMPIONTECH  ENTERPRISE (SHENZHEN) INC\nE4:4F:29\tMaLighti\tMA Lighting Technology GmbH\nE4:4F:5F\tEdsElekt\tEDS Elektronik Destek San.Tic.Ltd.Sti\nE4:50:9A\tHwCommun\tHW Communications Ltd\nE4:55:EA\tDedicate\tDedicated Computing\nE4:56:14\tSuttleAp\tSuttle Apparatus\nE4:57:40\tArrisGro\tARRIS Group, Inc.\nE4:57:A8\tStuartMa\tStuart Manufacturing, Inc.\nE4:58:B8\tSamsungE\tSamsung Electronics Co.,Ltd\nE4:58:E7\tSamsungE\tSamsung Electronics Co.,Ltd\nE4:5A:A2\tVivoMobi\tvivo Mobile Communication Co., Ltd.\nE4:5D:51\tSfr\t\nE4:5D:52\tAvaya\tAvaya Inc\nE4:5D:75\tSamsungE\tSamsung Electronics Co.,Ltd\nE4:60:59\tPingtek\tPingtek Co., Ltd.\nE4:62:51\tHaoCheng\tHao Cheng Group Limited\nE4:64:49\tArrisGro\tARRIS Group, Inc.\nE4:67:BA\tDanishIn\tDanish Interpretation Systems A/S\nE4:68:A3\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE4:69:5A\tDictumHe\tDictum Health, Inc.\nE4:6C:21\tMessma\tmessMa GmbH\nE4:6F:13\tD-LinkIn\tD-Link International\nE4:70:B8\tIntelCor\tIntel Corporate\nE4:71:85\tSecurifi\tSecurifi Ltd\nE4:72:E2\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE4:75:1E\tGetingeS\tGetinge Sterilization AB\nE4:77:23\tZte\tzte corporation\nE4:77:6B\tAartesys\tAartesys Ag\nE4:77:D4\tMinrrayI\tMinrray Industry Co.,Ltd\nE4:7B:3F\tBeijingC\tBEIJING CO-CLOUD TECHNOLOGY LTD.\nE4:7C:F9\tSamsungE\tSamsung Electronics Co.,Ltd\nE4:7D:5A\tBeijingH\tBeijing Hanbang Technology Corp.\nE4:7D:BD\tSamsungE\tSamsung Electronics Co.,Ltd\nE4:7D:EB\tShanghai\tShanghai Notion Information Technology CO.,LTD.\nE4:7E:66\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE4:7F:B2\tFujitsu\tFujitsu Limited\nE4:81:84\tNokia\t\nE4:81:B3\tShenzhen\tShenzhen ACT Industrial Co.,Ltd.\nE4:82:CC\tJumptron\tJumptronic GmbH\nE4:83:99\tArrisGro\tARRIS Group, Inc.\nE4:85:01\tGeberitI\tGeberit International AG\nE4:8A:D5\tRfWindow\tRf Window Co., Ltd.\nE4:8B:7F\tApple\tApple, Inc.\nE4:8C:0F\tDiscover\tDiscovery Insure\nE4:8D:8C\tRouterbo\tRouterboard.com\nE4:8F:34\tVodafone\tVodafone Italia S.p.A.\nE4:8F:65\tYelatmaI\tYelatma Instrument Making Enterprise, JSC\nE4:90:69\tRockwell\tRockwell Automation\nE4:90:7E\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nE4:92:E7\tGridlink\tGridlink Tech. Co.,Ltd.\nE4:92:FB\tSamsungE\tSamsung Electronics Co.,Ltd\nE4:95:6E\tIeeeRegi\tIEEE Registration Authority\nE4:95:6E:00:00:00/28\tSmcNetwo\tSMC Networks, Inc\nE4:95:6E:10:00:00/28\tTbandSrl\tTband srl\nE4:95:6E:20:00:00/28\tShanghai\tShanghai Hoping Technology Co., Ltd.\nE4:95:6E:30:00:00/28\tShanghai\tShanghai DGE Co., Ltd\nE4:95:6E:40:00:00/28\tGuangLia\tGuang Lian Zhi Tong Technology Limited\nE4:95:6E:50:00:00/28\tElan\tElan Systems\nE4:95:6E:60:00:00/28\tShenzhen\tShenzhen Joyetech Electronics Co., Ltd.\nE4:95:6E:70:00:00/28\tNational\tNationalchipKorea\nE4:95:6E:80:00:00/28\tPtMlwtel\tPT.MLWTelecom\nE4:95:6E:90:00:00/28\tEzelinkL\teZeLink LLC\nE4:95:6E:A0:00:00/28\tRedPoint\tRed Point Positioning, Corp.\nE4:95:6E:B0:00:00/28\tIconserv\tiConservo Inc\nE4:95:6E:C0:00:00/28\tShenzhen\tShenzhen Arronna Telecom Co.,Ltd\nE4:95:6E:D0:00:00/28\tShanghai\tShanghai Tieda Telecommunications Equipment Co.,LTD.\nE4:95:6E:E0:00:00/28\tTacomPro\tTacom Projetos Bilhetagem Inteligente ltda\nE4:95:6E:F0:00:00/28\tPrivate\t\nE4:96:AE\tAltograp\tALTOGRAPHICS Inc.\nE4:97:F0\tShanghai\tShanghai VLC Technologies Ltd. Co.\nE4:98:D1\tMicrosof\tMicrosoft Mobile Oy\nE4:98:D6\tApple\tApple, Inc.\nE4:9A:79\tApple\tApple, Inc.\nE4:9A:DC\tApple\tApple, Inc.\nE4:9E:12\tFreeboxS\tFreebox Sas\nE4:A1:E6\tAlcatel-\tAlcatel-Lucent Shanghai Bell Co., Ltd\nE4:A3:2F\tShanghai\tShanghai Artimen Technology Co., Ltd.\nE4:A3:87\tControlS\tControl Solutions LLC\nE4:A4:71\tIntelCor\tIntel Corporate\nE4:A5:EF\tTronLink\tTron Link Electronics Co., Ltd.\nE4:A7:49\tPaloAlto\tPalo Alto Networks\nE4:A7:A0\tIntelCor\tIntel Corporate\nE4:A7:C5\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE4:A7:FD\tCellcoPa\tCellco Partnership\nE4:A8:B6\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE4:AA:5D\tCisco\tCisco Systems, Inc\nE4:AB:46\tUabSelte\tUAB Selteka\nE4:AD:7D\tSclEleme\tSCL Elements\nE4:AF:A1\tHes-So\t\nE4:B0:05\tBeijingI\tBeijing IQIYI Science & Technology Co., Ltd.\nE4:B0:21\tSamsungE\tSamsung Electronics Co.,Ltd\nE4:B2:FB\tApple\tApple, Inc.\nE4:B3:18\tIntelCor\tIntel Corporate\nE4:B9:7A\tDell\tDell Inc.\nE4:BA:D9\t360Fly\t360 Fly Inc.\nE4:BD:4B\tZte\tzte corporation\nE4:BE:ED\tNetcoreT\tNetcore Technology Inc.\nE4:C1:46\tObjetivo\tObjetivos y Servicios de Valor A\nE4:C1:F1\tShenzhen\tSHENZHEN SPOTMAU INFORMATION TECHNOLIGY CO., Ltd\nE4:C2:D1\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE4:C4:83\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nE4:C6:2B\tAirware\t\nE4:C6:3D\tApple\tApple, Inc.\nE4:C6:E6\tMophieLl\tMophie, LLC\nE4:C7:22\tCisco\tCisco Systems, Inc\nE4:C8:01\tBluProdu\tBLU Products Inc\nE4:C8:06\tCeiecEle\tCeiec Electric Technology Inc.\nE4:CA:12\tZte\tzte corporation\nE4:CB:59\tBeijingL\tBeijing Loveair Science and Technology Co. Ltd.\nE4:CE:02\tWyrestor\tWyreStorm Technologies Ltd\nE4:CE:70\tHealthLi\tHealth & Life co., Ltd.\nE4:CE:8F\tApple\tApple, Inc.\nE4:D1:24\tMojoNetw\tMojo Networks, Inc.\nE4:D3:32\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nE4:D3:F1\tCisco\tCisco Systems, Inc\nE4:D5:3D\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nE4:D7:1D\tOrayaThe\tOraya Therapeutics\nE4:DB:6D\tBeijingX\tBeijing Xiaomi Electronics Co., Ltd.\nE4:DD:79\tEn-Visio\tEn-Vision America, Inc.\nE4:E0:A6\tApple\tApple, Inc.\nE4:E0:C5\tSamsungE\tSamsung Electronics Co.,Ltd\nE4:E1:30\tTctMobil\tTCT mobile ltd\nE4:E4:09\tLeifheit\tLeifheit Ag\nE4:E4:AB\tApple\tApple, Inc.\nE4:EA:83\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\nE4:EC:10\tNokia\tNokia Corporation\nE4:EE:FD\tMr&DManu\tMR&D Manufacturing\nE4:F0:04\tDell\tDell Inc.\nE4:F0:42\tGoogle\tGoogle, Inc.\nE4:F1:4C\tPrivate\t\nE4:F3:65\tTime-O-M\tTime-O-Matic, Inc.\nE4:F3:E3\tShanghai\tShanghai iComhome Co.,Ltd.\nE4:F3:F5\tShenzhen\tShenzhen Mercury Communication Technologies Co.,Ltd.\nE4:F4:C6\tNetgear\t\nE4:F7:A1\tDatafox\tDatafox GmbH\nE4:F8:9C\tIntelCor\tIntel Corporate\nE4:F8:EF\tSamsungE\tSamsung Electronics Co.,Ltd\nE4:F9:39\tMinxonHo\tMinxon Hotel Technology INC.\nE4:FA:1D\tPadPerip\tPAD Peripheral Advanced Design Inc.\nE4:FA:ED\tSamsungE\tSamsung Electronics Co.,Ltd\nE4:FA:FD\tIntelCor\tIntel Corporate\nE4:FB:5D\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE4:FB:8F\tMobiwire\tMOBIWIRE MOBILES (NINGBO) CO.,LTD\nE4:FC:82\tJuniperN\tJuniper Networks\nE4:FE:D9\tEdmiEuro\tEDMI Europe Ltd\nE4:FF:DD\tElectron\tElectron India\nE8:00:36\tBefs\tBefs co,. ltd\nE8:03:9A\tSamsungE\tSamsung Electronics Co.,Ltd\nE8:04:0B\tApple\tApple, Inc.\nE8:04:10\tPrivate\t\nE8:04:62\tCisco\tCisco Systems, Inc\nE8:04:F3\tThrought\tThroughtek Co., Ltd.\nE8:05:6D\tNortelNe\tNortel Networks\nE8:06:88\tApple\tApple, Inc.\nE8:07:34\tChampion\tChampion Optical Network Engineering, LLC\nE8:07:BF\tShenzhen\tShenzhen Boomtech Industry Co.,Ltd\nE8:08:8B\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE8:09:45\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\nE8:09:59\tGuoguang\tGuoguang Electric Co.,Ltd\nE8:0B:13\tAkibTaiw\tAkib Systems Taiwan, INC\nE8:0C:38\tDaeyoung\tDaeyoung Information System Co., Ltd\nE8:0C:75\tSyncbak\tSyncbak, Inc.\nE8:10:2E\tReallySi\tReally Simple Software, Inc\nE8:11:32\tSamsungE\tSamsung Electronics Co.,Ltd\nE8:11:CA\tShandong\tShandong Kaer Electric.Co.,Ltd\nE8:13:24\tGuangzho\tGuangZhou Bonsoninfo System CO.,LTD\nE8:13:63\tComstock\tComstock RD, Inc.\nE8:13:67\tAirsound\tAIRSOUND Inc.\nE8:15:0E\tNokia\tNokia Corporation\nE8:16:2B\tIdeoSecu\tIDEO Security Co., Ltd.\nE8:17:FC\tFujitsuC\tFujitsu Cloud Technologies Limited\nE8:18:63\tIeeeRegi\tIEEE Registration Authority\nE8:18:63:00:00:00/28\tDigimagu\tDigiMagus Technology (Shenzhen) Co., Ltd\nE8:18:63:10:00:00/28\tClabsys\t\nE8:18:63:20:00:00/28\tAvconInf\tAVCON Information Technology Co.,Ltd\nE8:18:63:30:00:00/28\tDongguan\tDongGuan Pengxun Electronics Technology Co., Ltd.\nE8:18:63:40:00:00/28\tGuangzho\tGuangzhou Tianyi Electronics Co., Ltd\nE8:18:63:50:00:00/28\tWetekEle\tWetek Electronics Limited\nE8:18:63:60:00:00/28\tArtechSo\tArtech Solution Co.,Ltd\nE8:18:63:70:00:00/28\tSiliconc\tSiliconcube\nE8:18:63:90:00:00/28\tBsmWirel\tBSM Wireless Inc.\nE8:18:63:A0:00:00/28\tJdmMobil\tJDM Mobile Internet Solution(Shanghai) Co., Ltd.\nE8:18:63:B0:00:00/28\tProtekEl\tProtek Electronics Group Co.,LTD\nE8:18:63:C0:00:00/28\tShenzhen\tShenzhen Hipad Telecommunication Technology Co.,Ltd\nE8:18:63:D0:00:00/28\tDigitalD\tDigital Dynamics, Inc.\nE8:18:63:E0:00:00/28\tAcopianT\tAcopian Technical Company\nE8:18:63:F0:00:00/28\tPrivate\t\nE8:1A:58\tTechnolo\tTechnologic Systems\nE8:1A:AC\tOrfeoSou\tORFEO SOUNDWORKS Inc.\nE8:1C:BA\tFortinet\tFortinet, Inc.\nE8:1D:A8\tRuckusWi\tRuckus Wireless\nE8:20:E2\tHumax\tHUMAX Co., Ltd.\nE8:28:77\tTmy\tTMY Co., Ltd.\nE8:28:D5\tCotsTech\tCots Technology\nE8:2A:44\tLiteonTe\tLiteon Technology Corporation\nE8:2A:EA\tIntelCor\tIntel Corporate\nE8:2E:24\tOutOfFog\tOut of the Fog Research LLC\nE8:33:0D\tXaptec\tXaptec GmbH\nE8:33:81\tArrisGro\tARRIS Group, Inc.\nE8:34:3E\tBeijingI\tBeijing Infosec Technologies Co., LTD.\nE8:36:1D\tSenseLab\tSense Labs, Inc.\nE8:37:7A\tZyxelCom\tZyxel Communications Corporation\nE8:39:35\tHewlettP\tHewlett Packard\nE8:39:DF\tAskeyCom\tAskey Computer Corp\nE8:3A:12\tSamsungE\tSamsung Electronics Co.,Ltd\nE8:3A:97\tToshiba\tToshiba Corporation\nE8:3E:B6\tRim\t\nE8:3E:FB\tGeodesic\tGeodesic Ltd.\nE8:3E:FC\tArrisGro\tARRIS Group, Inc.\nE8:40:40\tCisco\tCisco Systems, Inc\nE8:40:F2\tPegatron\tPegatron Corporation\nE8:43:B6\tQnap\tQNAP Systems, Inc.\nE8:44:7E\tBitdefen\tBitdefender SRL\nE8:48:1F\tAdvanced\tAdvanced Automotive Antennas\nE8:4D:D0\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE8:4E:06\tEdupInte\tEDUP INTERNATIONAL (HK) CO., LTD\nE8:4E:84\tSamsungE\tSamsung Electronics Co.,Ltd\nE8:4E:CE\tNintendo\tNintendo Co., Ltd.\nE8:50:8B\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\nE8:51:6E\tTsmart\tTSMART Inc.\nE8:51:9D\tYeonhabP\tYeonhab Precision Co.,LTD\nE8:54:84\tNeoInfor\tNEO Information Systems Co., Ltd.\nE8:55:B4\tSaiTechn\tSAI Technology Inc.\nE8:56:59\tAdvanced\tAdvanced-Connectek Inc.\nE8:56:D6\tNctech\tNCTech Ltd\nE8:5A:A7\tLlcEmzio\tLLC Emzior\nE8:5A:D1\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nE8:5B:5B\tLgElectr\tLg Electronics Inc\nE8:5B:F0\tImagingD\tImaging Diagnostics\nE8:5D:6B\tLuminate\tLuminate Wireless\nE8:5D:86\tChangYow\tChang Yow Technologies International Co.,Ltd.\nE8:5E:53\tInfratec\tInfratec Datentechnik GmbH\nE8:61:1F\tDawningI\tDawning Information Industry Co.,Ltd\nE8:61:7E\tLiteonTe\tLiteon Technology Corporation\nE8:61:83\tBlackDia\tBlack Diamond Advanced Technology, LLC\nE8:61:BE\tMelec\tMelec Inc.\nE8:65:49\tCisco\tCisco Systems, Inc\nE8:65:D4\tTendaTec\tTenda Technology Co.,Ltd.Dongguan branch\nE8:66:C4\tDiamanti\t\nE8:68:19\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE8:6A:64\tLcfcHefe\tLCFC(HeFei) Electronics Technology co., ltd\nE8:6C:DA\tSupercom\tSupercomputers and Neurocomputers Research Center\nE8:6D:52\tArrisGro\tARRIS Group, Inc.\nE8:6D:54\tDigitMob\tDigit Mobile Inc\nE8:6D:65\tAudioMob\tAUDIO MOBIL Elektronik GmbH\nE8:6D:6E\tVoestalp\tvoestalpine SIGNALING Fareham Ltd.\nE8:6F:F2\tActionte\tActiontec Electronics, Inc\nE8:71:8D\tElsysEqu\tElsys Equipamentos Eletronicos Ltda\nE8:74:E6\tAdbBroad\tADB Broadband Italia\nE8:75:7F\tFirsTech\tFIRS Technologies(Shenzhen) Co., Ltd\nE8:78:A1\tBeoviewI\tBeoview Intercom Doo\nE8:7A:F3\tS5TechSR\tS5 Tech S.r.l.\nE8:80:2E\tApple\tApple, Inc.\nE8:80:D8\tGntekEle\tGNTEK Electronics Co.,Ltd.\nE8:82:5B\tArrisGro\tARRIS Group, Inc.\nE8:87:A3\tLoxleyPu\tLoxley Public Company Limited\nE8:88:6C\tShenzhen\tShenzhen SC Technologies Co.,LTD\nE8:89:2C\tArrisGro\tARRIS Group, Inc.\nE8:8D:28\tApple\tApple, Inc.\nE8:8D:F5\tZnyxNetw\tZNYX Networks, Inc.\nE8:8E:60\tNsd\tNSD Corporation\nE8:91:20\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nE8:92:18\tArcontia\tArcontia International AB\nE8:92:A4\tLgElectr\tLG Electronics (Mobile Communications)\nE8:93:09\tSamsungE\tSamsung Electronics Co.,Ltd\nE8:93:63\tNokia\t\nE8:94:4C\tCogentHe\tCogent Healthcare Systems Ltd\nE8:94:F6\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nE8:96:06\tTestoIns\ttesto Instruments (Shenzhen) Co., Ltd.\nE8:98:6D\tPaloAlto\tPalo Alto Networks\nE8:99:5A\tPiigabPr\tPiiGAB, Processinformation i Goteborg AB\nE8:99:C4\tHtc\tHTC Corporation\nE8:9A:8F\tQuantaCo\tQuanta Computer Inc.\nE8:9A:FF\tFujianLa\tFujian LANDI Commercial Equipment Co.,Ltd\nE8:9D:87\tToshiba\t\nE8:9E:0C\tPrivate\t\nE8:9E:B4\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nE8:9F:EC\tChengduK\tCHENGDU KT ELECTRONIC HI-TECH CO.,LTD\nE8:A3:64\tSignalPa\tSignal Path International / Peachtree Audio\nE8:A4:C1\tDeepSeaE\tDeep Sea Electronics PLC\nE8:A7:88\tXiamenLe\tXiamen Leelen Technology Co., Ltd\nE8:A7:F2\tStraffic\t\nE8:AB:F3\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE8:AB:FA\tShenzhen\tShenzhen Reecam Tech.Ltd.\nE8:AD:A6\tSagemcom\tSagemcom Broadband SAS\nE8:B1:FC\tIntelCor\tIntel Corporate\nE8:B2:AC\tApple\tApple, Inc.\nE8:B4:AE\tShenzhen\tShenzhen C&D Electronics Co.,Ltd\nE8:B4:C8\tSamsungE\tSamsung Electronics Co.,Ltd\nE8:B5:41\tZte\tzte corporation\nE8:B6:C2\tJuniperN\tJuniper Networks\nE8:B7:48\tCisco\tCisco Systems, Inc\nE8:BA:70\tCisco\tCisco Systems, Inc\nE8:BB:3D\tSinoPrim\tSino Prime-Tech Limited\nE8:BB:A8\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nE8:BD:D1\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE8:BE:81\tSagemcom\tSagemcom Broadband SAS\nE8:C1:B8\tNanjingB\tNanjing Bangzhong Electronic Commerce Limited\nE8:C1:D7\tPhilips\t\nE8:C2:29\tH-Displa\tH-Displays (MSC) Bhd\nE8:C3:20\tAustcoCo\tAustco Communication Systems Pty Ltd\nE8:C5:7A\tUfispace\tUfispace Co., LTD.\nE8:C7:4F\tLiteonTe\tLiteon Technology Corporation\nE8:CB:A1\tNokia\tNokia Corporation\nE8:CC:18\tD-LinkIn\tD-Link International\nE8:CC:32\tMicronet\tMicronet  LTD\nE8:CD:2D\tHuaweiTe\tHuawei Technologies Co.,Ltd\nE8:CE:06\tSkyhawke\tSkyHawke Technologies, LLC.\nE8:D0:99\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nE8:D0:FA\tMksInstr\tMKS Instruments Deutschland GmbH\nE8:D1:1B\tAskeyCom\tAskey Computer Corp\nE8:D4:83\tUltimate\tULTIMATE Europe Transportation Equipment GmbH\nE8:D4:E0\tBeijingB\tBeijing BenyWave Technology Co., Ltd.\nE8:D8:19\tAzurewav\tAzureWave Technology Inc.\nE8:DA:96\tZhuhaiTi\tZhuhai Tianrui Electrical Power Tech. Co., Ltd.\nE8:DA:AA\tVideohom\tVideoHome Technology Corp.\nE8:DE:00\tChongqin\tChongQing GuanFang Technology Co.,LTD\nE8:DE:27\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nE8:DE:8E\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\nE8:DE:D6\tIntrisin\tIntrising Networks, Inc.\nE8:DE:FB\tMesoticS\tMesotic Sas\nE8:DF:70\tAvmAudio\tAVM Audiovisuelles Marketing und Computersysteme GmbH\nE8:DF:F2\tPrf\tPRF Co., Ltd.\nE8:E0:8F\tGravotec\tGravotech Marking Sas\nE8:E0:B7\tToshiba\t\nE8:E1:E1\tGemtekTe\tGemtek Technology Co., Ltd.\nE8:E1:E2\tEnergote\tEnergotest\nE8:E5:D6\tSamsungE\tSamsung Electronics Co.,Ltd\nE8:E7:32\tAlcatel-\tAlcatel-Lucent Enterprise\nE8:E7:70\tWarp9Tec\tWarp9 Tech Design, Inc.\nE8:E7:76\tShenzhen\tShenzhen Kootion Technology Co., Ltd\nE8:E8:75\tIs5Commu\tiS5 Communications Inc.\nE8:EA:6A\tStartech\tStarTech.com\nE8:EA:DA\tDenkoviA\tDenkovi Assembly Electronics LTD\nE8:EB:11\tTexasIns\tTexas Instruments\nE8:ED:05\tArrisGro\tARRIS Group, Inc.\nE8:ED:F3\tCisco\tCisco Systems, Inc\nE8:EF:89\tOpmexTec\tOPMEX Tech.\nE8:F1:B0\tSagemcom\tSagemcom Broadband SAS\nE8:F2:26\tMillsonC\tMillson Custom Solutions Inc.\nE8:F2:E2\tLgInnote\tLG Innotek\nE8:F2:E3\tStarcorB\tStarcor Beijing Co.,Limited\nE8:F7:24\tHewlettP\tHewlett Packard Enterprise\nE8:F9:28\tRftechSr\tRftech Srl\nE8:FA:F7\tGuangdon\tGuangdong Uniteddata Holding Group Co., Ltd.\nE8:FC:60\tElcomInn\tELCOM Innovations Private Limited\nE8:FC:AF\tNetgear\t\nE8:FD:72\tShanghai\tShanghai Linguo Technology Co., Ltd.\nE8:FD:90\tTurbosto\tTurbostor\nE8:FD:E8\tCelaLink\tCeLa Link Corporation\nEA:34:B4\tThinkrf\tThinkRF Inc.\nEA:60:76\tCloudsim\tCloudSimple, Inc.\nEA:9F:B1\tPhilipsI\tPhilips International B.V.\nEA:BE:A7\tPrivate\t\nEA:DD:88\tIeeePes-\tIEEE PES-PSRC Working Group H3, PC37.237\nEA:E0:D9\tBerk-Tek\tBerk-tek LLC\nEC:01:33\tTrinus\tTrinus Systems Inc.\nEC:01:E2\tFoxconnI\tFoxconn Interconnect Technology\nEC:01:EE\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nEC:04:41\tShenzhen\tShenZhen TIGO Semiconductor Co., Ltd.\nEC:08:6B\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nEC:0D:9A\tMellanox\tMellanox Technologies, Inc.\nEC:0E:C4\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nEC:0E:D6\tItechIns\tItech Instruments Sas\nEC:10:00\tEnanceSo\tEnance Source Co., Ltd.\nEC:10:7B\tSamsungE\tSamsung Electronics Co.,Ltd\nEC:11:20\tFlodesig\tFloDesign Wind Turbine Corporation\nEC:11:27\tTexasIns\tTexas Instruments\nEC:13:B2\tNetonix\t\nEC:13:DB\tJuniperN\tJuniper Networks\nEC:14:F6\tBiocontr\tBioControl AS\nEC:17:2F\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nEC:17:66\tResearch\tResearch Centre Module\nEC:1A:59\tBelkinIn\tBelkin International Inc.\nEC:1D:7F\tZte\tzte corporation\nEC:1D:8B\tCisco\tCisco Systems, Inc\nEC:1F:72\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\nEC:21:9F\tVidaboxL\tVidaBox LLC\nEC:21:E5\tToshiba\t\nEC:22:57\tJiangsuN\tJiangSu NanJing University Electronic Information Technology Co.,Ltd\nEC:22:80\tD-LinkIn\tD-Link International\nEC:23:3D\tHuaweiTe\tHuawei Technologies Co.,Ltd\nEC:23:68\tIntelliv\tIntelliVoice Co.,Ltd.\nEC:23:7B\tZte\tzte corporation\nEC:24:B8\tTexasIns\tTexas Instruments\nEC:26:CA\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nEC:26:FB\tTecc\tTecc Co.,Ltd.\nEC:2A:F0\tYpsomed\tYpsomed AG\nEC:2C:49\tUniversi\tUniversity of Tokyo\nEC:2E:4E\tHitachi-\tHITACHI-LG DATA STORAGE INC\nEC:30:91\tCisco\tCisco Systems, Inc\nEC:35:86\tApple\tApple, Inc.\nEC:36:3F\tMarkov\tMarkov Corporation\nEC:38:73\tJuniperN\tJuniper Networks\nEC:38:8F\tHuaweiTe\tHuawei Technologies Co.,Ltd\nEC:3B:F0\tNovelsat\t\nEC:3C:5A\tShenZhen\tShen Zhen Heng Sheng Hui Digital Technology Co.,Ltd\nEC:3C:88\tMcnex\tMCNEX Co.,Ltd.\nEC:3D:FD\tShenzhen\tSHENZHEN BILIAN ELECTRONIC CO.，LTD\nEC:3E:09\tPerforma\tPerformance Designed Products, Llc\nEC:3E:F7\tJuniperN\tJuniper Networks\nEC:3F:05\tInstitut\tInstitute 706, The Second Academy China Aerospace Science & Industry Corp\nEC:42:B4\tAdc\tADC Corporation\nEC:42:F0\tAdlEmbed\tADL Embedded Solutions, Inc.\nEC:43:8B\tYaptv\t\nEC:43:E6\tAwcer\tAWCER Ltd.\nEC:43:F6\tZyxelCom\tZyxel Communications Corporation\nEC:44:76\tCisco\tCisco Systems, Inc\nEC:46:44\tTtkSas\tTtk Sas\nEC:46:70\tMeinberg\tMeinberg Funkuhren GmbH & Co. KG\nEC:47:3C\tRedwireL\tRedwire, LLC\nEC:49:93\tQihanTec\tQihan Technology Co., Ltd\nEC:4C:4D\tZaoNpkRo\tZAO NPK RoTeK\nEC:4D:47\tHuaweiTe\tHuawei Technologies Co.,Ltd\nEC:4F:82\tCalix\tCalix Inc.\nEC:51:BC\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nEC:52:DC\tWorldMed\tWORLD MEDIA AND TECHNOLOGY Corp.\nEC:54:2E\tShanghai\tShanghai XiMei Electronic Technology Co. Ltd\nEC:55:F9\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nEC:58:EA\tRuckusWi\tRuckus Wireless\nEC:59:E7\tMicrosof\tMicrosoft Corporation\nEC:5A:86\tYulongCo\tYulong Computer Telecommunication Scientific (Shenzhen) Co.,Ltd\nEC:5C:69\tMitsubis\tMitsubishi Heavy Industries Mechatronics Systems,Ltd.\nEC:5F:23\tQinghaiK\tQinghai Kimascend Electronics Technology Co. Ltd.\nEC:60:E0\tAvi-OnLa\tAVI-ON LABS\nEC:62:64\tGlobal41\tGlobal411 Internet Services, LLC\nEC:63:E5\tEpboardD\tePBoard Design LLC\nEC:64:E7\tMocacare\tMOCACARE Corporation\nEC:65:CC\tPanasoni\tPanasonic Automotive Systems Company of America\nEC:66:D1\tB&WGroup\tB&W Group LTD\nEC:68:81\tPaloAlto\tPalo Alto Networks\nEC:6C:9F\tChengduV\tChengdu Volans Technology CO.,LTD\nEC:6F:0B\tFadu\tFADU, Inc.\nEC:70:97\tArrisGro\tARRIS Group, Inc.\nEC:71:DB\tShenzhen\tShenzhen Baichuan Digital Technology Co., Ltd.\nEC:74:BA\tHirschma\tHirschmann Automation and Control GmbH\nEC:79:F2\tStartel\t\nEC:7C:74\tJustoneT\tJustone Technologies Co., Ltd.\nEC:7D:11\tVivoMobi\tvivo Mobile Communication Co., Ltd.\nEC:7D:9D\tMei\t\nEC:7F:C6\tEccelSas\tEccel Corporation Sas\nEC:80:09\tNovaspar\tNovaSparks\nEC:81:93\tLogitech\tLogitech, Inc\nEC:83:50\tMicrosof\tMicrosoft Corporation\nEC:83:6C\tRmTech\tRM Tech Co., Ltd.\nEC:83:D5\tGird\tGIRD Systems Inc\nEC:84:B4\tCigShang\tCig Shanghai Co Ltd\nEC:85:2F\tApple\tApple, Inc.\nEC:88:8F\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nEC:88:92\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nEC:89:14\tHuaweiTe\tHuawei Technologies Co.,Ltd\nEC:89:F5\tLenovoMo\tLenovo Mobile Communication Technology Ltd.\nEC:8A:4C\tZte\tzte corporation\nEC:8A:C7\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nEC:8C:9A\tHuaweiTe\tHuawei Technologies Co.,Ltd\nEC:8C:A2\tRuckusWi\tRuckus Wireless\nEC:8E:AD\tDlx\t\nEC:8E:AE\tNagravis\tNagravision SA\nEC:8E:B5\tHewlettP\tHewlett Packard\nEC:92:33\tEddyfiNd\tEddyfi NDT Inc\nEC:93:27\tMemmert+\tMEMMERT GmbH + Co. KG\nEC:93:65\tMapperAi\tMapper.ai, Inc.\nEC:93:ED\tDdos-Gua\tDDoS-Guard LTD\nEC:96:81\t2276427O\t2276427 Ontario Inc\nEC:98:6C\tLufftMes\tLufft Mess- und Regeltechnik GmbH\nEC:98:C1\tBeijingR\tBeijing Risbo Network Technology Co.,Ltd\nEC:9A:74\tHewlettP\tHewlett Packard\nEC:9B:5B\tNokia\tNokia Corporation\nEC:9B:8B\tHewlettP\tHewlett Packard Enterprise\nEC:9B:F3\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\nEC:9E:CD\tArtesynE\tArtesyn Embedded Technologies\nEC:9F:0D\tIeeeRegi\tIEEE Registration Authority\nEC:9F:0D:00:00:00/28\tHesaiPho\tHesai Photonics Technology Co., Ltd\nEC:9F:0D:10:00:00/28\tSimulaTe\tSimula Technology Inc.\nEC:9F:0D:20:00:00/28\tDrb\tDRB Systems\nEC:9F:0D:30:00:00/28\tWaverlyL\tWaverly Labs Inc.\nEC:9F:0D:40:00:00/28\tWisioe\t\nEC:9F:0D:50:00:00/28\tPaw-Taw-\tPaw-Taw-John Services, Inc.\nEC:9F:0D:60:00:00/28\tShenzhen\tShenzhen Compare Electronics Co., Ltd\nEC:9F:0D:70:00:00/28\tBeiJingL\tBei jing Lian Shan times Techonology Co.Ltd\nEC:9F:0D:80:00:00/28\tZhejiang\tZhejiang HEJU Communication Technology Co., Ltd\nEC:9F:0D:90:00:00/28\tFci\t\nEC:9F:0D:A0:00:00/28\tFlexlog\tflexlog GmbH\nEC:9F:0D:B0:00:00/28\tCrrcQing\tCrrc Qingdao Sifang Rolling Stock Research Institute Co.,Ltd\nEC:9F:0D:C0:00:00/28\tSarcos\tSarcos Corp\nEC:9F:0D:D0:00:00/28\tSksContr\tSKS Control Oy\nEC:9F:0D:E0:00:00/28\tMaxTechn\tMAX Technologies\nEC:A2:9B\tKemppiOy\tKemppi Oy\nEC:A8:6B\tElitegro\tElitegroup Computer Systems Co.,Ltd.\nEC:A9:FA\tGuangdon\tGuangdong Genius Technology Co.,Ltd.\nEC:AA:A0\tPegatron\tPegatron Corporation\nEC:AD:B8\tApple\tApple, Inc.\nEC:AF:97\tGit\t\nEC:B0:E1\tCiena\tCiena Corporation\nEC:B1:06\tAcuroNet\tAcuro Networks, Inc\nEC:B1:D7\tHewlettP\tHewlett Packard\nEC:B3:13\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\nEC:B5:41\tShinanoE\tSHINANO E and E Co.Ltd.\nEC:B5:FA\tPhilipsL\tPhilips Lighting BV\nEC:B8:70\tBeijingH\tBeijing Heweinet Technology Co.,Ltd.\nEC:B9:07\tCloudgen\tCloudGenix Inc\nEC:BA:FE\tGiroptic\t\nEC:BB:AE\tDigivoic\tDigivoice Tecnologia em Eletronica Ltda\nEC:BD:09\tFusionEl\tFUSION Electronics Ltd\nEC:BD:1D\tCisco\tCisco Systems, Inc\nEC:C0:6A\tPowercho\tPowerChord Group Limited\nEC:C3:8A\tAccuener\tAccuenergy (CANADA) Inc\nEC:C4:0D\tNintendo\tNintendo Co.,Ltd\nEC:C8:82\tCisco\tCisco Systems, Inc\nEC:CB:30\tHuaweiTe\tHuawei Technologies Co.,Ltd\nEC:CD:6D\tAlliedTe\tAllied Telesis, Inc.\nEC:D0:0E\tMiraerec\tMiraeRecognition Co., Ltd.\nEC:D0:40\tGeaFarmT\tGEA Farm Technologies GmbH\nEC:D0:9F\tXiaomiCo\tXiaomi Communications Co Ltd\nEC:D1:9A\tZhuhaiLi\tZhuhai Liming Industries Co., Ltd\nEC:D6:8A\tShenzhen\tShenzhen JMicron Intelligent Technology Developmen\nEC:D9:25\tRami\t\nEC:D9:50\tIrtSa\tIrt Sa\nEC:D9:D1\tShenzhen\tShenzhen TG-NET Botone Technology Co.,Ltd.\nEC:DE:3D\tLampreyN\tLamprey Networks, Inc.\nEC:DF:3A\tVivoMobi\tvivo Mobile Communication Co., Ltd.\nEC:E0:9B\tSamsungE\tSamsung Electronics Co.,Ltd\nEC:E1:54\tBeijingU\tBeijing Unisound Information Technology Co.,Ltd.\nEC:E1:A9\tCisco\tCisco Systems, Inc\nEC:E2:FD\tSkgElect\tSKG Electric Group(Thailand) Co., Ltd.\nEC:E5:12\tTado\ttado GmbH\nEC:E5:55\tHirschma\tHirschmann Automation\nEC:E7:44\tOmntecMf\tOmntec mfg. inc\nEC:E9:0B\tSistemaS\tSISTEMA SOLUCOES ELETRONICAS LTDA - EASYTECH\nEC:E9:15\tSti\tSTI Ltd\nEC:E9:F8\tGuangZho\tGuang Zhou TRI-SUN Electronics Technology  Co., Ltd\nEC:EA:03\tDarfonLi\tDarfon Lighting Corp\nEC:EB:B8\tHewlettP\tHewlett Packard Enterprise\nEC:EE:D8\tZtlxNetw\tZTLX Network Technology Co.,Ltd\nEC:F0:0E\tAbocom\t\nEC:F2:36\tNeomonta\tNeomontana Electronics\nEC:F3:42\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nEC:F3:5B\tNokia\tNokia Corporation\nEC:F4:51\tArcadyan\tArcadyan Corporation\nEC:F4:BB\tDell\tDell Inc.\nEC:F6:BD\tSncfMobi\tSNCF MOBILITÉS\nEC:F7:2B\tHdDigita\tHd Digital Tech Co., Ltd.\nEC:F8:EB\tSichuanT\tSichuan Tianyi Comheart Telecomco., Ltd\nEC:FA:03\tFca\t\nEC:FA:AA\tIms\tThe IMS Company\nEC:FA:BC\tEspressi\tEspressif Inc.\nEC:FA:F4\tSenraTec\tSenRa Tech Pvt. Ltd\nEC:FC:55\tAEberle\tA. Eberle GmbH & Co. KG\nEC:FE:7E\tBlueradi\tBlueRadios, Inc.\nF0:00:7F\tJanz-Con\tJanz - Contadores de Energia, SA\nF0:02:2B\tChrontel\t\nF0:02:48\tSmartebu\tSmarteBuilding\nF0:03:8C\tAzurewav\tAzureWave Technology Inc.\nF0:07:86\tShandong\tShandong Bittel Electronics Co., Ltd\nF0:08:F1\tSamsungE\tSamsung Electronics Co.,Ltd\nF0:0D:5C\tJinqianm\tJinQianMao  Technology Co.,Ltd.\nF0:0E:1D\tMegafone\tMegafone Limited\nF0:0F:EC\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF0:13:C3\tShenzhen\tShenzhen Fenda Technology Co., Ltd\nF0:15:A0\tKyungdon\tKyungDong One Co., Ltd.\nF0:15:B9\tPlayfusi\tPlayFusion Limited\nF0:18:2B\tLgChem\tLG Chem\nF0:18:98\tApple\tApple, Inc.\nF0:1B:6C\tVivoMobi\tvivo Mobile Communication Co., Ltd.\nF0:1C:13\tLgElectr\tLG Electronics (Mobile Communications)\nF0:1C:2D\tJuniperN\tJuniper Networks\nF0:1D:BC\tMicrosof\tMicrosoft Corporation\nF0:1E:34\tOricoTec\tORICO Technologies Co., Ltd\nF0:1F:AF\tDell\tDell Inc.\nF0:21:9D\tCal-Comp\tCal-Comp Electronics & Communications Company Ltd.\nF0:22:4E\tEsanElec\tEsan electronic co.\nF0:23:29\tShowaDen\tShowa Denki Co.,Ltd.\nF0:23:B9\tIeeeRegi\tIEEE Registration Authority\nF0:23:B9:00:00:00/28\tAquametr\tAquametro AG\nF0:23:B9:10:00:00/28\tUbiant\t\nF0:23:B9:20:00:00/28\tRaysgemE\tRaysgem Electronics and Technology Co.Ltd\nF0:23:B9:30:00:00/28\tBspRus\tBSP RUS Ltd.\nF0:23:B9:40:00:00/28\tEzvis\tEzvis Limited\nF0:23:B9:50:00:00/28\tAudearaP\tAudeara Pty. Ltd.\nF0:23:B9:60:00:00/28\tXiamenJi\tXiamen Jinhaode Electronic Co.,Ltd\nF0:23:B9:70:00:00/28\tTranscen\tTranscend Building Automation control network corporation\nF0:23:B9:80:00:00/28\tG3Techno\tG3 TECHNOLOGIES< INC\nF0:23:B9:90:00:00/28\tEmuTechn\tEmu Technology\nF0:23:B9:A0:00:00/28\tAnnapurn\tannapurnalabs\nF0:23:B9:B0:00:00/28\tQCoreMed\tQ Core Medical Ltd\nF0:23:B9:C0:00:00/28\tShenzhen\tShenzhen Lachesis Mhealth Co., Ltd.\nF0:23:B9:D0:00:00/28\tPrivate\t\nF0:23:B9:E0:00:00/28\tDomotz\tDomotz Ltd\nF0:24:05\tOpusHigh\tOPUS High Technology Corporation\nF0:24:08\tTalarisS\tTalaris (Sweden) AB\nF0:24:75\tApple\tApple, Inc.\nF0:25:72\tCisco\tCisco Systems, Inc\nF0:25:B7\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\nF0:26:24\tWafaTech\tWafa Technologies Co., Ltd.\nF0:26:4C\tDrSigris\tDr. Sigrist AG\nF0:27:2D\tAmazonTe\tAmazon Technologies Inc.\nF0:27:45\tF-Secure\tF-Secure Corporation\nF0:27:65\tMurataMa\tMurata Manufacturing Co., Ltd.\nF0:29:29\tCisco\tCisco Systems, Inc\nF0:2A:23\tCreative\tCreative Next Design\nF0:2A:61\tWaldoNet\tWaldo Networks, Inc.\nF0:2F:A7\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF0:2F:D8\tBi2-Visi\tBi2-Vision\nF0:32:1A\tMita-Tek\tMita-Teknik A/S\nF0:34:04\tTctMobil\tTCT mobile ltd\nF0:37:A1\tHuikeEle\tHuike Electronics (SHENZHEN) CO., LTD.\nF0:3A:4B\tBloombas\tBloombase, Inc.\nF0:3A:55\tOmegaEle\tOmega Elektronik AS\nF0:3D:03\tTecnoMob\tTecno Mobile Limited\nF0:3D:29\tActility\t\nF0:3E:90\tRuckusWi\tRuckus Wireless\nF0:3E:BF\tGogoroTa\tGogoro Taiwan Limited\nF0:3F:F8\tRLDrake\tR L Drake\nF0:40:7B\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nF0:41:C8\tIeeeRegi\tIEEE Registration Authority\nF0:41:C8:00:00:00/28\tLinpaAco\tLinpa Acoustic Technology Co.,Ltd\nF0:41:C8:10:00:00/28\tDongguan\tDongGuan Siyoto Electronics Co., Ltd\nF0:41:C8:20:00:00/28\tShenzhen\tShenzhen Medica Technology Development Co., Ltd.\nF0:41:C8:30:00:00/28\tShenzhen\tShenzhen Wisewing Internet Technology Co.,Ltd\nF0:41:C8:40:00:00/28\tCandelic\tCandelic Limited\nF0:41:C8:50:00:00/28\tXiAnMeiS\tXI'AN MEI SHANG MEI WIRELESS TECHNOLOGY.Co., Ltd.\nF0:41:C8:60:00:00/28\tAedEngin\tAED Engineering GmbH\nF0:41:C8:70:00:00/28\tNanchang\tNanchang BlackShark Co.,Ltd.\nF0:41:C8:80:00:00/28\tPostiumK\tPostium Korea Co., Ltd.\nF0:41:C8:90:00:00/28\tShenzhen\tShenzhen  Nufilo Electronic Technology Co., Ltd.\nF0:41:C8:A0:00:00/28\tTelstra\t\nF0:41:C8:B0:00:00/28\tPowervau\tPowervault Ltd\nF0:41:C8:C0:00:00/28\tShanghai\tShanghai Think-Force Electronic Technology Co. Ltd\nF0:41:C8:D0:00:00/28\tAtnMedia\tATN Media Group FZ LLC\nF0:41:C8:E0:00:00/28\tShenzhen\tShenzhen Umind Technology Co., Ltd.\nF0:42:1C\tIntelCor\tIntel Corporate\nF0:43:35\tDvnShang\tDVN(Shanghai)Ltd.\nF0:43:47\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF0:45:DA\tTexasIns\tTexas Instruments\nF0:4A:2B\tPyramidC\tPYRAMID Computer GmbH\nF0:4B:3A\tJuniperN\tJuniper Networks\nF0:4B:6A\tScientif\tScientific Production Association Siberian Arsenal, Ltd.\nF0:4B:F2\tJtechCom\tJTECH Communications, Inc.\nF0:4C:D5\tMaxlinea\tMaxlinear, Inc\nF0:4D:A2\tDell\tDell Inc.\nF0:4F:7C\tPrivate\t\nF0:54:94\tHoneywel\tHoneywell Connected Building\nF0:58:49\tCareview\tCareView Communications\nF0:5A:09\tSamsungE\tSamsung Electronics Co.,Ltd\nF0:5B:7B\tSamsungE\tSamsung Electronics Co.,Ltd\nF0:5C:19\tArubaNet\tAruba Networks\nF0:5D:89\tDycon\tDycon Limited\nF0:5D:C8\tDuracell\tDuracell Powermat\nF0:5F:5A\tGetriebe\tGetriebebau NORD GmbH and Co. KG\nF0:61:30\tAdvantag\tAdvantage Pharmacy Services, LLC\nF0:62:0D\tShenzhen\tShenzhen Egreat Tech Corp.,Ltd\nF0:62:81\tProcurve\tProCurve Networking by HP\nF0:63:F9\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF0:65:C2\tYanfengV\tYanfeng Visteon Electronics Technology (Shanghai) Co.,Ltd.\nF0:65:DD\tPrimaxEl\tPrimax Electronics Ltd.\nF0:68:53\tIntegrat\tIntegrated Corporation\nF0:6B:CA\tSamsungE\tSamsung Electronics Co.,Ltd\nF0:6D:78\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nF0:6E:0B\tMicrosof\tMicrosoft Corporation\nF0:6E:32\tMicrotel\tMicrotel Innovation S.R.L.\nF0:72:8C\tSamsungE\tSamsung Electronics Co.,Ltd\nF0:73:AE\tPeak-Sys\tPEAK-System Technik\nF0:74:85\tNgd\tNGD Systems, Inc.\nF0:74:E4\tThunderc\tThundercomm Technology Co., Ltd\nF0:76:1C\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\nF0:76:6F\tApple\tApple, Inc.\nF0:77:65\tSourcefi\tSourcefire, Inc\nF0:77:D0\tXcellen\t\nF0:78:16\tCisco\tCisco Systems, Inc\nF0:79:59\tAsustekC\tASUSTek COMPUTER INC.\nF0:79:60\tApple\tApple, Inc.\nF0:79:E8\tGuangdon\tGuangdong Oppo Mobile Telecommunications Corp.,Ltd\nF0:7B:CB\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nF0:7D:68\tD-Link\tD-Link Corporation\nF0:7F:06\tCisco\tCisco Systems, Inc\nF0:7F:0C\tLeopoldK\tLeopold Kostal GmbH &Co. KG\nF0:81:73\tAmazonTe\tAmazon Technologies Inc.\nF0:81:AF\tIrzAutom\tIrz Automation Technologies Ltd\nF0:82:61\tSagemcom\tSagemcom Broadband SAS\nF0:84:2F\tAdbBroad\tADB Broadband Italia\nF0:84:C9\tZte\tzte corporation\nF0:85:C1\tShenzhen\tSHENZHEN RF-LINK TECHNOLOGY CO.,LTD.\nF0:8A:28\tJiangsuH\tJIANGSU HENGSION ELECTRONIC S and T CO.,LTD\nF0:8B:FE\tCostel\tCostel.,Co.Ltd\nF0:8C:FB\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nF0:8E:DB\tVeloclou\tVeloCloud Networks\nF0:92:1C\tHewlettP\tHewlett Packard\nF0:92:B4\tSichuanT\tSichuan Tianyi Comheart Telecomco., Ltd\nF0:93:3A\tNxtconec\tNxtConect\nF0:93:C5\tGarlandT\tGarland Technology\nF0:95:F1\tCarlZeis\tCarl Zeiss AG\nF0:97:E5\tTamio\tTamio, Inc\nF0:98:38\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF0:98:9D\tApple\tApple, Inc.\nF0:99:B6\tApple\tApple, Inc.\nF0:99:BF\tApple\tApple, Inc.\nF0:9A:51\tShanghai\tShanghai Viroyal Electronic Technology Company Limited\nF0:9C:BB\tRaonthin\tRaonThink Inc.\nF0:9C:D7\tGuangzho\tGuangzhou Blue Cheetah Intelligent Technology Co., Ltd.\nF0:9C:E9\tAerohive\tAerohive Networks Inc.\nF0:9E:63\tCisco\tCisco Systems, Inc\nF0:9F:C2\tUbiquiti\tUbiquiti Networks Inc.\nF0:9F:FC\tSharp\tSHARP Corporation\nF0:A2:25\tPrivate\t\nF0:A7:64\tGst\tGST Co., Ltd.\nF0:AB:54\tMitsumiE\tMitsumi Electric Co.,Ltd.\nF0:AC:A4\tHbc-Radi\tHBC-radiomatic\nF0:AC:D7\tIeeeRegi\tIEEE Registration Authority\nF0:AC:D7:00:00:00/28\tGuilinGl\tGuilin glsun Science and Tech Co.,LTD\nF0:AC:D7:10:00:00/28\tIntenta\tIntenta GmbH\nF0:AC:D7:20:00:00/28\tQuantumP\tQuantum Power Systems\nF0:AC:D7:30:00:00/28\tMed-Pat/\tMed-Pat/Inn-Phone\nF0:AC:D7:40:00:00/28\tSercomm\tSercomm Corporation.\nF0:AC:D7:50:00:00/28\tPavoTasa\tPavo Tasarim Uretim Ticaret A.S.\nF0:AC:D7:60:00:00/28\tSuzhouPa\tSuzhou Pairlink Network Technology\nF0:AC:D7:70:00:00/28\tHanjuNet\tHanju Network Technologies Co.\nF0:AC:D7:80:00:00/28\tTelefoni\tTelefonix Incorporated\nF0:AC:D7:90:00:00/28\tU3storag\tU3storage Technologies Co., Ltd\nF0:AC:D7:A0:00:00/28\tGroupeer\tGroupeer Technologies\nF0:AC:D7:B0:00:00/28\tZhejiang\tZhejiang Makepower Electronics,Inc.\nF0:AC:D7:C0:00:00/28\tSimprint\tSimprints Technology Ltd\nF0:AC:D7:D0:00:00/28\tSmartPow\tSmart Power Technology Co., Ltd.\nF0:AC:D7:E0:00:00/28\tFiziico\tFiziico Co., Ltd.\nF0:AD:4E\tGlobalsc\tGlobalscale Technologies, Inc.\nF0:AE:51\tXi3\tXi3 Corp\nF0:AF:50\tPhantomI\tPhantom Intelligence\nF0:B0:14\tAvmAudio\tAVM Audiovisuelles Marketing und Computersysteme GmbH\nF0:B0:52\tRuckusWi\tRuckus Wireless\nF0:B0:E7\tApple\tApple, Inc.\nF0:B2:E5\tCisco\tCisco Systems, Inc\nF0:B4:29\tXiaomiCo\tXiaomi Communications Co Ltd\nF0:B4:79\tApple\tApple, Inc.\nF0:B5:B7\tDisrupti\tDisruptive Technologies Research AS\nF0:B5:D1\tTexasIns\tTexas Instruments\nF0:B6:EB\tPoslabTe\tPoslab Technology Co., Ltd.\nF0:BC:C8\tMaxidPty\tMaxID (Pty) Ltd\nF0:BC:C9\tPfu\tPfu Limited\nF0:BD:2E\tH+SPolat\tH+S Polatis Ltd\nF0:BD:F1\tSipod\tSipod Inc.\nF0:BF:97\tSony\tSony Corporation\nF0:C1:F1\tApple\tApple, Inc.\nF0:C2:4C\tZhejiang\tZhejiang FeiYue Digital Technology Co., Ltd\nF0:C2:7C\tMianyang\tMianyang Netop Telecom Equipment Co.,Ltd.\nF0:C7:7F\tTexasIns\tTexas Instruments\nF0:C8:50\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF0:C8:8C\tLeddarte\tLeddarTech Inc.\nF0:C9:D1\tGdMideaA\tGD Midea Air-Conditioning Equipment Co.,Ltd.\nF0:CB:A1\tApple\tApple, Inc.\nF0:D1:4F\tLinearLl\tLinear Llc\nF0:D1:A9\tApple\tApple, Inc.\nF0:D1:B8\tLedvance\t\nF0:D2:F1\tAmazonTe\tAmazon Technologies Inc.\nF0:D3:A7\tCobaltra\tCobaltRay Co., Ltd\nF0:D3:E7\tSensomet\tSensometrix SA\nF0:D4:F6\tLarsThra\tLars Thrane A/S\nF0:D5:BF\tIntelCor\tIntel Corporate\nF0:D6:57\tEchosens\t\nF0:D7:67\tAxemaPas\tAxema Passagekontroll AB\nF0:D7:AA\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nF0:D7:DC\tWesineWu\tWesine (Wuhan) Technology Co., Ltd.\nF0:D9:B2\tExoSA\tExo S.A.\nF0:DA:7C\tRlhIndus\tRlh Industries,Inc.\nF0:DB:30\tYottabyt\tYottabyte\nF0:DB:E2\tApple\tApple, Inc.\nF0:DB:F8\tApple\tApple, Inc.\nF0:DC:E2\tApple\tApple, Inc.\nF0:DE:71\tShanghai\tShanghai EDO Technologies Co.,Ltd.\nF0:DE:B9\tShanghai\tShangHai Y&Y Electronics Co., Ltd\nF0:DE:F1\tWistronI\tWistron Infocomm (Zhongshan) Corporation\nF0:E3:DC\tTeconMtL\tTecon MT, LLC\nF0:E5:C3\tDrägerwe\tDrägerwerk AG & Co. KG aA\nF0:E7:7E\tSamsungE\tSamsung Electronics Co.,Ltd\nF0:EB:D0\tShanghai\tShanghai Feixun Communication Co.,Ltd.\nF0:EC:39\tEssec\t\nF0:ED:1E\tBilkonBi\tBilkon Bilgisayar Kontrollu Cih. Im.Ltd.\nF0:EE:10\tSamsungE\tSamsung Electronics Co.,Ltd\nF0:EE:58\tPaceTele\tPACE Telematics GmbH\nF0:EE:BB\tVipar\tVIPAR GmbH\nF0:EF:D2\tTfPaymen\tTf Payment Service Co., Ltd\nF0:F0:02\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nF0:F0:8F\tNextekSo\tNextek Solutions Pte Ltd\nF0:F2:49\tHitronTe\tHitron Technologies. Inc\nF0:F2:60\tMobitec\tMobitec AB\nF0:F3:36\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nF0:F5:AE\tAdaptrum\tAdaptrum Inc.\nF0:F6:1C\tApple\tApple, Inc.\nF0:F6:44\tWhitesky\tWhitesky Science & Technology Co.,Ltd.\nF0:F6:69\tMotionAn\tMotion Analysis Corporation\nF0:F7:55\tCisco\tCisco Systems, Inc\nF0:F7:B3\tPhorm\t\nF0:F8:42\tKeebox\tKEEBOX, Inc.\nF0:F8:F2\tTexasIns\tTexas Instruments\nF0:F9:F7\tIes\tIES GmbH & Co. KG\nF0:FC:C8\tArrisGro\tARRIS Group, Inc.\nF0:FD:A0\tAcurixNe\tAcurix Networks Pty Ltd\nF0:FE:6B\tShanghai\tShanghai High-Flying Electronics Technology Co., Ltd\nF4:03:04\tGoogle\tGoogle, Inc.\nF4:03:21\tBenextBV\tBeNeXt B.V.\nF4:03:2F\tReduxio\tReduxio Systems\nF4:03:43\tHewlettP\tHewlett Packard Enterprise\nF4:04:4C\tValencet\tValenceTech Limited\nF4:06:69\tIntelCor\tIntel Corporate\nF4:06:8D\tDevolo\tdevolo AG\nF4:06:A5\tHangzhou\tHangzhou Bianfeng Networking Technology Co., Ltd.\nF4:09:D8\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\nF4:0A:4A\tIndusnet\tINDUSNET Communication Technology Co.,LTD\nF4:0B:93\tBlackber\tBlackBerry RTS\nF4:0E:11\tIeeeRegi\tIEEE Registration Authority\nF4:0E:11:00:00:00/28\tRealphon\trealphone technology co.,ltd\nF4:0E:11:10:00:00/28\tBeijingD\tBEIJING DONGJIN AERO-TECH CO., LTD\nF4:0E:11:20:00:00/28\tAxelSrl\tAxel srl\nF4:0E:11:30:00:00/28\tShenzhen\tShenzhen headsun technology\nF4:0E:11:40:00:00/28\tDayangTe\tDayang Technology Development Inc.\nF4:0E:11:50:00:00/28\tE-Song\t\nF4:0E:11:60:00:00/28\tAlphaDes\tAlpha Design Technologies Pvt Ltd\nF4:0E:11:70:00:00/28\tShenzhen\tShenzhen Grandsun Electronic Co.,Ltd.\nF4:0E:11:80:00:00/28\tZeepro\tZeepro Inc.\nF4:0E:11:90:00:00/28\tSternaSe\tSterna Security\nF4:0E:11:A0:00:00/28\tKodpro\tKodpro Ltd.\nF4:0E:11:B0:00:00/28\tBradarIn\tBradar Industria Sa\nF4:0E:11:C0:00:00/28\tNihonMeg\tNihon Mega Logic Co.,Ltd.\nF4:0E:11:D0:00:00/28\tDxgTechn\tDXG Technology Corp.\nF4:0E:11:E0:00:00/28\tElektron\tElektronika Naglic d.o.o.\nF4:0E:11:F0:00:00/28\tPrivate\t\nF4:0E:22\tSamsungE\tSamsung Electronics Co.,Ltd\nF4:0E:83\tArrisGro\tARRIS Group, Inc.\nF4:0F:1B\tCisco\tCisco Systems, Inc\nF4:0F:24\tApple\tApple, Inc.\nF4:0F:9B\tWavelink\t\nF4:15:35\tSponComm\tSPON Communication Technology Co.,Ltd\nF4:15:63\tF5Networ\tF5 Networks, Inc.\nF4:15:FD\tShanghai\tShanghai Pateo Electronic Equipment Manufacturing Co., Ltd.\nF4:17:B8\tAirtiesW\tAirTies Wireless Networks\nF4:1B:A1\tApple\tApple, Inc.\nF4:1E:26\tSimon-Ka\tSimon-Kaloi Engineering\nF4:1E:5E\tRtbrick\tRtBrick Inc.\nF4:1F:0B\tYamabish\tYAMABISHI Corporation\nF4:1F:88\tZte\tzte corporation\nF4:1F:C2\tCisco\tCisco Systems, Inc\nF4:20:12\tCucinial\tCuciniale GmbH\nF4:28:33\tMmpc\tMMPC Inc.\nF4:28:53\tZioncomE\tZioncom Electronics (Shenzhen) Ltd.\nF4:28:96\tSpectoPa\tSpecto Paineis Eletronicos Ltda\nF4:29:81\tVivoMobi\tvivo Mobile Communication Co., Ltd.\nF4:2B:48\tUbiqam\t\nF4:2C:56\tSenorTec\tSenor Tech Co Ltd\nF4:30:B9\tHewlettP\tHewlett Packard\nF4:31:C3\tApple\tApple, Inc.\nF4:36:E1\tAbilisSa\tAbilis Systems SARL\nF4:37:B7\tApple\tApple, Inc.\nF4:38:14\tShanghai\tShanghai Howell Electronic Co.,Ltd\nF4:39:09\tHewlettP\tHewlett Packard\nF4:3D:80\tFagIndus\tFAG Industrial Services GmbH\nF4:3E:61\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\nF4:3E:9D\tBenuNetw\tBenu Networks, Inc.\nF4:41:56\tArrikto\tArrikto Inc.\nF4:42:27\tSSResear\tS & S Research Inc.\nF4:42:8F\tSamsungE\tSamsung Electronics Co.,Ltd\nF4:44:50\tBnd\tBND Co., Ltd.\nF4:45:ED\tPortable\tPortable Innovation Technology Ltd.\nF4:47:13\tLeadingP\tLeading Public Performance Co., Ltd.\nF4:47:2A\tNanjingR\tNanjing Rousing Sci. and Tech. Industrial Co., Ltd\nF4:48:48\tAmscreen\tAmscreen Group Ltd\nF4:49:EF\tEmstone\t\nF4:4B:2A\tCiscoSpv\tCisco SPVTG\nF4:4C:70\tSkyworth\tSkyworth Digital Technology(Shenzhen) Co.,Ltd\nF4:4C:7F\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF4:4D:17\tGoldcard\tGOLDCARD HIGH-TECH CO.,LTD.\nF4:4D:30\tElitegro\tElitegroup Computer Systems Co.,Ltd.\nF4:4E:05\tCisco\tCisco Systems, Inc\nF4:4E:FD\tActionsS\tActions Semiconductor Co.,Ltd.(Cayman Islands)\nF4:50:EB\tTelechip\tTelechips Inc\nF4:52:14\tMellanox\tMellanox Technologies, Inc.\nF4:54:33\tRockwell\tRockwell Automation\nF4:55:95\tHengbao\tHENGBAO Corporation LTD.\nF4:55:9C\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF4:55:E0\tNicewayC\tNiceway CNC Technology Co.,Ltd.Hunan Province\nF4:57:3E\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nF4:58:42\tBoxxTv\tBoxx TV Ltd\nF4:5B:73\tWanjiaan\tWanjiaan Interconnected Technology Co., Ltd\nF4:5C:89\tApple\tApple, Inc.\nF4:5E:AB\tTexasIns\tTexas Instruments\nF4:5F:69\tMatsufuE\tMatsufu Electronics distribution Company\nF4:5F:D4\tCiscoSpv\tCisco SPVTG\nF4:5F:F7\tDqTechno\tDQ Technology Inc.\nF4:60:0D\tPanoptic\tPanoptic Technology, Inc\nF4:60:E2\tXiaomiCo\tXiaomi Communications Co Ltd\nF4:62:D0\tNotForRa\tNot for Radio, LLC\nF4:63:1F\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF4:63:49\tDiffon\tDiffon Corporation\nF4:64:5D\tToshiba\t\nF4:67:2D\tShenzhen\tShenZhen Topstar Technology Company\nF4:6A:92\tShenzhen\tShenzhen Fast Technologies Co.,Ltd\nF4:6A:BC\tAdonit\tAdonit Corp. Ltd.\nF4:6B:EF\tSagemcom\tSagemcom Broadband SAS\nF4:6D:04\tAsustekC\tASUSTek COMPUTER INC.\nF4:6D:E2\tZte\tzte corporation\nF4:6E:24\tNecPerso\tNEC Personal Computers, Ltd.\nF4:70:AB\tVivoMobi\tvivo Mobile Communication Co., Ltd.\nF4:71:90\tSamsungE\tSamsung Electronics Co.,Ltd\nF4:73:CA\tConversi\tConversion Sound Inc.\nF4:76:26\tViltechm\tViltechmeda UAB\nF4:7A:4E\tWoojeon&\tWoojeon&Handan\nF4:7A:CC\tSolidfir\tSolidFire, Inc.\nF4:7B:5E\tSamsungE\tSamsung Electronics Co.,Ltd\nF4:7D:EF\tSamsungE\tSamsung Electronics Co.,Ltd\nF4:7F:35\tCisco\tCisco Systems, Inc\nF4:81:39\tCanon\tCanon Inc.\nF4:83:CD\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nF4:83:E1\tShanghai\tShanghai Clouder Semiconductor Co.,Ltd\nF4:84:4C\tTexasIns\tTexas Instruments\nF4:85:C6\tFdtTechn\tFDT Technologies\nF4:87:71\tInfoblox\t\nF4:8B:32\tXiaomiCo\tXiaomi Communications Co Ltd\nF4:8C:50\tIntelCor\tIntel Corporate\nF4:8E:09\tNokia\tNokia Corporation\nF4:8E:38\tDell\tDell Inc.\nF4:8E:92\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF4:90:CA\tTensorco\tTensorcom\nF4:90:EA\tDecisoBV\tDeciso B.V.\nF4:91:1E\tZhuhaiEw\tZhuhai Ewpe Information Technology Inc\nF4:93:9F\tHonHaiPr\tHon Hai Precision Ind. Co., Ltd.\nF4:94:61\tNexgenSt\tNexGen Storage\nF4:94:66\tCountmax\tCountMax,  ltd\nF4:95:1B\tHefeiRad\tHefei Radio Communication Technology Co., Ltd\nF4:96:34\tIntelCor\tIntel Corporate\nF4:96:51\tNakayo\tNAKAYO Inc\nF4:99:AC\tWeberSch\tWEBER Schraubautomaten GmbH\nF4:9E:EF\tTaicangT\tTaicang T&W Electronics\nF4:9F:54\tSamsungE\tSamsung Electronics Co.,Ltd\nF4:9F:F3\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF4:A2:94\tEagleWor\tEagle World Development Co., Limited\nF4:A5:2A\tHawaTech\tHawa Technologies Inc\nF4:A7:39\tJuniperN\tJuniper Networks\nF4:A9:97\tCanon\tCanon Inc.\nF4:AC:C1\tCisco\tCisco Systems, Inc\nF4:B1:64\tLightnin\tLightning Telecommunications Technology Co. Ltd\nF4:B3:81\tWindowma\tWindowMaster A/S\nF4:B5:20\tBiostarM\tBiostar Microtech international corp.\nF4:B5:2F\tJuniperN\tJuniper Networks\nF4:B5:49\tXiamenYe\tXiamen Yeastar Information Technology Co., Ltd.\nF4:B6:E5\tTerrasem\tTerraSem Co.,Ltd\nF4:B7:2A\tTimeInte\tTime Interconnect Ltd\nF4:B7:B3\tVivoMobi\tvivo Mobile Communication Co., Ltd.\nF4:B7:E2\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nF4:B8:5E\tTexasIns\tTexas Instruments\nF4:B8:A7\tZte\tzte corporation\nF4:BC:97\tShenzhen\tShenzhen Crave Communication Co., LTD\nF4:BD:7C\tChengduJ\tChengdu jinshi communication Co., LTD\nF4:BF:80\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF4:C2:48\tSamsungE\tSamsung Electronics Co.,Ltd\nF4:C4:47\tCoagentI\tCoagent International Enterprise Limited\nF4:C4:D6\tShenzhen\tShenzhen Xinfa Electronic Co.,ltd\nF4:C6:13\tAlcatel-\tAlcatel-Lucent Shanghai Bell Co., Ltd\nF4:C6:D7\tBlackned\tblackned GmbH\nF4:C7:14\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF4:C7:95\tWeyElekt\tWEY Elektronik AG\nF4:CA:24\tFreebit\tFreeBit Co., Ltd.\nF4:CA:E5\tFreeboxS\tFreebox Sas\nF4:CB:52\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF4:CC:55\tJuniperN\tJuniper Networks\nF4:CD:90\tVispiron\tVispiron Rotec GmbH\nF4:CE:46\tHewlettP\tHewlett Packard\nF4:CF:E2\tCisco\tCisco Systems, Inc\nF4:D0:32\tYunnanId\tYunnan Ideal Information&Technology.,Ltd\nF4:D1:08\tIntelCor\tIntel Corporate\nF4:D2:61\tSemocon\tSEMOCON Co., Ltd\nF4:D7:B2\tLgsInnov\tLGS Innovations, LLC\nF4:D9:FB\tSamsungE\tSamsung Electronics Co.,Ltd\nF4:DB:E6\tCisco\tCisco Systems, Inc\nF4:DC:41\tYoungzon\tYOUNGZONE CULTURE (SHANGHAI) CORP\nF4:DC:4D\tBeijingC\tBeijing CCD Digital Technology Co., Ltd\nF4:DC:A5\tDawonDns\tDawon Dns\nF4:DC:DA\tZhuhaiJi\tZhuhai Jiahe Communication Technology Co., limited\nF4:DC:F9\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF4:DD:9E\tGopro\t\nF4:DE:0C\tEspod\tESPOD Ltd.\nF4:E1:1E\tTexasIns\tTexas Instruments\nF4:E1:42\tDeltaEle\tDelta Elektronika BV\nF4:E2:04\tTraqueur\t\nF4:E3:FB\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF4:E4:AD\tZte\tzte corporation\nF4:E6:D7\tSolarPow\tSolar Power Technologies, Inc.\nF4:E9:26\tTianjinZ\tTianjin Zanpu Technology Inc.\nF4:E9:D4\tQlogic\tQLogic Corporation\nF4:EA:67\tCisco\tCisco Systems, Inc\nF4:EA:B5\tAerohive\tAerohive Networks Inc.\nF4:EB:38\tSagemcom\tSagemcom Broadband SAS\nF4:EC:38\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nF4:ED:5F\tShenzhen\tShenzhen Ktc Technology Group\nF4:EE:14\tMercuryC\tMercury Communication Technologies Co.,Ltd.\nF4:EF:9E\tSgsgScie\tSGSG SCIENCE & TECHNOLOGY CO. LTD\nF4:F1:5A\tApple\tApple, Inc.\nF4:F1:97\tEmtake\tEMTAKE Inc\nF4:F1:E1\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nF4:F2:6D\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nF4:F3:AA\tJbl\tJBL GmbH & Co. KG\nF4:F5:24\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nF4:F5:A5\tNokia\tNokia Corporation\nF4:F5:D8\tGoogle\tGoogle, Inc.\nF4:F5:DB\tXiaomiCo\tXiaomi Communications Co Ltd\nF4:F5:E8\tGoogle\tGoogle, Inc.\nF4:F6:46\tDediprog\tDediprog Technology Co. Ltd.\nF4:F9:51\tApple\tApple, Inc.\nF4:FC:32\tTexasIns\tTexas Instruments\nF4:FC:B1\tJj\tJJ Corp\nF4:FD:2B\tZoyi\tZOYI Company\nF8:01:13\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF8:02:78\tIeeeRegi\tIEEE Registration Authority\nF8:02:78:00:00:00/28\tDigatron\tDigatron Power Electronics GmbH\nF8:02:78:10:00:00/28\tReasonTe\tReason Tecnologia SA\nF8:02:78:20:00:00/28\tInnodisk\t\nF8:02:78:30:00:00/28\t3shape\t3Shape Holding A/S\nF8:02:78:40:00:00/28\tClarusKo\tCLARUS Korea Co., Ltd\nF8:02:78:50:00:00/28\tElectric\tElectric Objects\nF8:02:78:60:00:00/28\tWitium\tWitium Co., Ltd\nF8:02:78:70:00:00/28\tBettiniS\tBettini Srl\nF8:02:78:80:00:00/28\tEmbuxTec\tEMBUX Technology Co., Ltd.\nF8:02:78:90:00:00/28\tBeijingR\tBeijing Redcdn Technology, Co., Ltd\nF8:02:78:A0:00:00/28\tLuxulTec\tLuxul Technology Inc\nF8:02:78:B0:00:00/28\tRosemoun\tRosemount Analytical\nF8:02:78:C0:00:00/28\tTechnolo\tTechnology Research, LLC\nF8:02:78:D0:00:00/28\tDuetonSR\tDueton Systems s.r.o.\nF8:02:78:E0:00:00/28\tLitTechn\tLit Technologies\nF8:02:78:F0:00:00/28\tPrivate\t\nF8:03:32\tKhomp\t\nF8:03:77\tApple\tApple, Inc.\nF8:04:2E\tSamsungE\tSAMSUNG ELECTRO-MECHANICS(THAILAND)\nF8:05:1C\tDrsImagi\tDRS Imaging and Targeting Solutions\nF8:0B:BE\tArrisGro\tARRIS Group, Inc.\nF8:0B:CB\tCisco\tCisco Systems, Inc\nF8:0B:D0\tDatangTe\tDatang Telecom communication terminal (Tianjin) Co., Ltd.\nF8:0C:F3\tLgElectr\tLG Electronics (Mobile Communications)\nF8:0D:43\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nF8:0D:60\tCanon\tCanon Inc.\nF8:0D:EA\tZycastTe\tZyCast Technology Inc.\nF8:0F:41\tWistronI\tWistron Infocomm (Zhongshan) Corporation\nF8:0F:84\tNaturalS\tNatural Security SAS\nF8:10:37\tAtopiaLp\tAtopia Systems, LP\nF8:15:47\tAvaya\tAvaya Inc\nF8:16:54\tIntelCor\tIntel Corporate\nF8:18:97\t2wire\t2Wire Inc\nF8:1A:67\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nF8:1C:E5\tTelefonb\tTelefonbau Behnke GmbH\nF8:1D:0F\tHitronTe\tHitron Technologies. Inc\nF8:1D:78\tIeeeRegi\tIEEE Registration Authority\nF8:1D:78:00:00:00/28\tDongguan\tDongguan Shun Hing Plastics Limited\nF8:1D:78:10:00:00/28\tAdtechno\tADTECHNO Inc.\nF8:1D:78:20:00:00/28\tXperioLa\tXperio Labs Limited\nF8:1D:78:30:00:00/28\tShanghai\tShanghai Sun Telecommunication Co., Ltd.\nF8:1D:78:40:00:00/28\tDigitalI\tDigital Imaging Technology\nF8:1D:78:50:00:00/28\tDacons\t\nF8:1D:78:60:00:00/28\tZengge\tZengge Co., Limited\nF8:1D:78:70:00:00/28\tWuhanGui\tWuhan Guide Infrared Co.,Ltd\nF8:1D:78:80:00:00/28\tTeleofis\t\nF8:1D:78:90:00:00/28\tOphrysSy\tOphrys Systèmes\nF8:1D:78:A0:00:00/28\tAvproGlo\tAVPro Global Holdings LLC\nF8:1D:78:B0:00:00/28\tSigmacon\tSigmaConnectivityAB\nF8:1D:78:C0:00:00/28\tShenzhuo\tShenzhuoyue Technology.,Ltd\nF8:1D:78:D0:00:00/28\tTofino\t\nF8:1D:78:E0:00:00/28\tGuangdon\tGuangdong Enok Communication Co., Ltd.\nF8:1D:90\tSolidwin\tSolidwintech\nF8:1D:93\tLongdhua\tLongdhua(Beijing) Controls Technology Co.,Ltd\nF8:1E:DF\tApple\tApple, Inc.\nF8:20:55\tGreenInf\tGreen Information System\nF8:22:85\tCypressT\tCypress Technology CO., LTD.\nF8:23:B2\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF8:24:41\tYeelink\t\nF8:27:2E\tMercku\t\nF8:27:93\tApple\tApple, Inc.\nF8:28:19\tLiteonTe\tLiteon Technology Corporation\nF8:2B:C8\tJiangsuS\tJiangsu Switter Co., Ltd\nF8:2C:18\t2wire\t2Wire Inc\nF8:2D:C0\tArrisGro\tARRIS Group, Inc.\nF8:2E:DB\tRtw\tRTW GmbH & Co. KG\nF8:2F:08\tMolex\t\nF8:2F:5B\tEgaugeLl\teGauge Systems LLC\nF8:2F:A8\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nF8:30:94\tAlcatel-\tAlcatel-Lucent Telecom Limited\nF8:31:3E\tEndeavou\tendeavour GmbH\nF8:32:E4\tAsustekC\tASUSTek COMPUTER INC.\nF8:33:76\tGoodMind\tGood Mind Innovation Co., Ltd.\nF8:34:41\tIntelCor\tIntel Corporate\nF8:35:53\tMagentaR\tMagenta Research Ltd.\nF8:35:DD\tGemtekTe\tGemtek Technology Co., Ltd.\nF8:36:9B\tTexasIns\tTexas Instruments\nF8:38:80\tApple\tApple, Inc.\nF8:3D:4E\tSoftlink\tSoftlink Automation System Co., Ltd\nF8:3D:FF\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF8:3F:51\tSamsungE\tSamsung Electronics Co.,Ltd\nF8:42:FB\tYasudaJo\tYasuda Joho Co.,ltd.\nF8:44:E3\tTaicangT\tTaicang T&W Electronics\nF8:45:AD\tKonkaGro\tKonka Group Co., Ltd.\nF8:46:1C\tSonyInte\tSony Interactive Entertainment Inc.\nF8:46:2D\tSyntecIn\tSYNTEC Incorporation\nF8:47:2D\tX2genDig\tX2gen Digital Corp. Ltd\nF8:48:97\tHitachi\tHitachi, Ltd.\nF8:4A:73\tEumtech\tEumtech Co., Ltd\nF8:4A:7F\tInnometr\tInnometriks Inc\nF8:4A:BF\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF8:4F:57\tCisco\tCisco Systems, Inc\nF8:50:1C\tTianjinG\tTianjin Geneuo Technology Co.,Ltd\nF8:50:63\tVerathon\t\nF8:51:6D\tDenwaTec\tDenwa Technology Corp.\nF8:52:DF\tVnlEurop\tVNL Europe AB\nF8:54:AF\tEciTelec\tECI Telecom Ltd.\nF8:57:2E\tCoreBran\tCore Brands, LLC\nF8:59:71\tIntelCor\tIntel Corporate\nF8:5A:00\tSanfordL\tSanford LP\nF8:5B:9C\tSb\tSB SYSTEMS Co.,Ltd\nF8:5B:C9\tM-Cube\tM-Cube Spa\nF8:5C:45\tIcNexus\tIC Nexus Co. Ltd.\nF8:5C:4D\tNokia\t\nF8:5E:3C\tShenzhen\tShenzhen Zhibotong Electronics Co.,Ltd\nF8:5F:2A\tNokia\tNokia Corporation\nF8:62:14\tApple\tApple, Inc.\nF8:62:AA\tXn\txn systems\nF8:63:3F\tIntelCor\tIntel Corporate\nF8:64:65\tAnovaApp\tAnova Applied Electronics, Inc.\nF8:66:01\tSuzhouCh\tSuzhou Chi-tek information technology Co., Ltd\nF8:66:D1\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nF8:66:F2\tCisco\tCisco Systems, Inc\nF8:69:71\tSeibuEle\tSeibu Electric Co.,\nF8:6C:E1\tTaicangT\tTaicang T&W Electronics\nF8:6E:CF\tArcx\tArcx Inc\nF8:6E:EE\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF8:6F:C1\tApple\tApple, Inc.\nF8:71:FE\tGoldmanS\tThe Goldman Sachs Group, Inc.\nF8:72:EA\tCisco\tCisco Systems, Inc\nF8:73:94\tNetgear\t\nF8:73:A2\tAvaya\tAvaya Inc\nF8:75:88\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF8:76:9B\tNeopis\tNeopis Co., Ltd.\nF8:77:B8\tSamsungE\tSamsung Electronics Co.,Ltd\nF8:7A:EF\tRosonixT\tRosonix Technology, Inc.\nF8:7B:20\tCisco\tCisco Systems, Inc\nF8:7B:62\tFastwelI\tFASTWEL INTERNATIONAL CO., LTD. Taiwan Branch\nF8:7B:7A\tArrisGro\tARRIS Group, Inc.\nF8:7B:8C\tAmpedWir\tAmped Wireless\nF8:80:96\tElsysEqu\tElsys Equipamentos Eletrônicos Ltda\nF8:81:1A\tOverkiz\t\nF8:84:79\tYaojinTe\tYaojin Technology(Shenzhen)Co.,Ltd\nF8:84:F2\tSamsungE\tSamsung Electronics Co.,Ltd\nF8:8A:3C\tIeeeRegi\tIEEE Registration Authority\nF8:8A:3C:00:00:00/28\tArt\tArt Spa\nF8:8A:3C:10:00:00/28\tCarefree\tCarefree of Colorado\nF8:8A:3C:20:00:00/28\tKlatuNet\tKLATU Networks Inc\nF8:8A:3C:30:00:00/28\tShenzhen\tShenzhen Shengyuan Tech Ltd.\nF8:8A:3C:40:00:00/28\tGo-LinkT\tGO-LINK TECHNOLOGY CO., LTD.\nF8:8A:3C:50:00:00/28\tKokkia\tKokkia Inc\nF8:8A:3C:60:00:00/28\tBeijingZ\tBeijing Zhong Chuang Communication Technology Ltd.\nF8:8A:3C:70:00:00/28\tJoshAi\tJosh.ai\nF8:8A:3C:80:00:00/28\tCadmusEl\tCadmus Electronic Co.,Ltd.\nF8:8A:3C:90:00:00/28\tWithus\t\nF8:8A:3C:A0:00:00/28\tProtos\tProtos GmbH\nF8:8A:3C:B0:00:00/28\tFaraAs\tFara As\nF8:8A:3C:C0:00:00/28\tExcetopT\tEXCETOP TECHNOLOGY (BEIJING) CO., LTD.\nF8:8A:3C:D0:00:00/28\tThk\tTHK Co.,LTD.\nF8:8A:3C:E0:00:00/28\tAvateq\tAvateq Corp.\nF8:8B:37\tArrisGro\tARRIS Group, Inc.\nF8:8C:1C\tKaishunE\tKaishun Electronic Technology Co., Ltd. Beijing\nF8:8D:EF\tTenebrae\tTenebraex\nF8:8E:85\tComtrend\tComtrend Corporation\nF8:8F:CA\tGoogle\tGoogle, Inc.\nF8:90:66\tNain\tNain Inc.\nF8:91:2A\tGlpGerma\tGLP German Light Products GmbH\nF8:93:F3\tVolans\t\nF8:94:C2\tIntelCor\tIntel Corporate\nF8:95:50\tProtonPr\tProton Products Chengdu Ltd\nF8:95:C7\tLgElectr\tLG Electronics (Mobile Communications)\nF8:95:EA\tApple\tApple, Inc.\nF8:97:CF\tDaeshin-\tDAESHIN-INFORMATION TECHNOLOGY CO., LTD.\nF8:98:3A\tLeemanIn\tLeeman International (HongKong) Limited\nF8:98:B9\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF8:98:EF\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF8:99:10\tIntegrat\tIntegrated Device Technology (Malaysia) Sdn. Bhd.\nF8:99:55\tFortress\tFortress Technology Inc\nF8:9D:0D\tControlT\tControl Technology Inc.\nF8:9D:BB\tTintri\t\nF8:9F:B8\tYazakiEn\tYAZAKI Energy System Corporation\nF8:A0:3D\tDinstarT\tDinstar Technologies Co., Ltd.\nF8:A0:97\tArrisGro\tARRIS Group, Inc.\nF8:A1:88\tLedRoadw\tLED Roadway Lighting\nF8:A2:B4\tRhewa-Wa\tRHEWA-WAAGENFABRIK August Freudewald GmbH &amp;Co. KG\nF8:A3:4F\tZte\tzte corporation\nF8:A4:5F\tXiaomiCo\tXiaomi Communications Co Ltd\nF8:A5:C5\tCisco\tCisco Systems, Inc\nF8:A9:63\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\nF8:A9:D0\tLgElectr\tLG Electronics (Mobile Communications)\nF8:A9:DE\tPuissanc\tPuissance Plus\nF8:AA:8A\tAxviewTe\tAxview Technology (Shenzhen) Co.,Ltd\nF8:AB:05\tSagemcom\tSagemcom Broadband SAS\nF8:AC:6D\tDeltenna\tDeltenna Ltd\nF8:B1:56\tDell\tDell Inc.\nF8:B2:F3\tGuangzho\tGuangzhou Bosma Technology Co.,Ltd\nF8:B5:68\tIeeeRegi\tIEEE Registration Authority\nF8:B5:68:00:00:00/28\tLifeprin\tLifePrint Products, Inc.\nF8:B5:68:10:00:00/28\tPtEyroDi\tPT. Eyro Digital Teknologi\nF8:B5:68:20:00:00/28\tShenzhen\tShenzhen New-Bund Technology Co., Ltd.\nF8:B5:68:30:00:00/28\tDongwooE\tDongwoo Engineering Co.,Ltd\nF8:B5:68:40:00:00/28\tCombiwin\tCombiwins Technology Co.,Limited\nF8:B5:68:50:00:00/28\tEtectrx\t\nF8:B5:68:60:00:00/28\tPackageG\tPackage Guard, Inc\nF8:B5:68:70:00:00/28\tCloudmin\tCloudMinds (Shenzhen) Holdings Co., Ltd\nF8:B5:68:80:00:00/28\tMavenWir\tMaven Wireless AB\nF8:B5:68:90:00:00/28\tBeijingW\tBeijing Wanji Techonology Co., Ltd.\nF8:B5:68:A0:00:00/28\tSinepuls\tSinePulse GmbH\nF8:B5:68:B0:00:00/28\tWhizpace\tWhizpace Pte. Ltd.\nF8:B5:68:C0:00:00/28\t3siSecur\t3SI Security Systems, Inc\nF8:B5:68:D0:00:00/28\tSolarius\t\nF8:B5:68:E0:00:00/28\tZao&Quot\tZAO &quot;RADIUS Avtomatika&quot;\nF8:B5:99\tGuangzho\tGuangzhou CHNAVS Digital Technology Co.,Ltd\nF8:B7:E2\tCisco\tCisco Systems, Inc\nF8:BB:BF\tEero\teero inc.\nF8:BC:12\tDell\tDell Inc.\nF8:BC:41\tRosslare\tRosslare Enterprises Limited\nF8:BE:0D\tA2uict\tA2UICT Co.,Ltd.\nF8:BF:09\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF8:C0:01\tJuniperN\tJuniper Networks\nF8:C0:91\tHighgate\tHighgates Technology\nF8:C1:20\tXiAnLink\tXi'an Link-Science Technology Co.,Ltd\nF8:C2:49\tPrivate\t\nF8:C2:88\tCisco\tCisco Systems, Inc\nF8:C3:72\tTsuzukiD\tTsuzuki Denki\nF8:C3:97\tNzxt\tNZXT Corp. Ltd.\nF8:C3:9E\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF8:C6:78\tCarefusi\tCarefusion\nF8:C9:6C\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nF8:CA:B8\tDell\tDell Inc.\nF8:CC:6E\tDepoElec\tDEPO Electronics Ltd\nF8:CF:C5\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nF8:D0:27\tSeikoEps\tSeiko Epson Corporation\nF8:D0:AC\tSonyInte\tSony Interactive Entertainment Inc.\nF8:D0:BD\tSamsungE\tSamsung Electronics Co.,Ltd\nF8:D1:11\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nF8:D3:A9\tAxanNetw\tAXAN Networks\nF8:D4:62\tPumatron\tPumatronix Equipamentos Eletronicos Ltda.\nF8:D7:56\tSimmTron\tSimm Tronic Limited\nF8:D7:BF\tRevRitte\tREV Ritter GmbH\nF8:D9:B8\tOpenMesh\tOpen Mesh, Inc.\nF8:DA:0C\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nF8:DA:DF\tEcotech\tEcoTech, Inc.\nF8:DA:E2\tBetaLase\tBeta LaserMike\nF8:DA:F4\tTaishanO\tTaishan Online Technology Co., Ltd.\nF8:DB:4C\tPnyTechn\tPNY Technologies, INC.\nF8:DB:7F\tHtc\tHTC Corporation\nF8:DB:88\tDell\tDell Inc.\nF8:DC:7A\tVariscit\tVariscite LTD\nF8:DF:15\tSunitecE\tSunitec Enterprise Co.,Ltd\nF8:DF:A8\tZte\tzte corporation\nF8:E0:79\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nF8:E4:4E\tMcot\tMcot Inc.\nF8:E4:FB\tActionte\tActiontec Electronics, Inc\nF8:E6:1A\tSamsungE\tSamsung Electronics Co.,Ltd\nF8:E7:1E\tRuckusWi\tRuckus Wireless\nF8:E7:B5\tΜtechTec\tµTech Tecnologia LTDA\nF8:E8:11\tHuaweiTe\tHuawei Technologies Co.,Ltd\nF8:E9:03\tD-LinkIn\tD-Link International\nF8:E9:68\tEgkerKft\tEgker Kft.\nF8:EA:0A\tDipl-Mat\tDipl.-Math. Michael Rauch\nF8:ED:A5\tArrisGro\tARRIS Group, Inc.\nF8:F0:05\tNewportM\tNewport Media Inc.\nF8:F0:14\tRackware\tRackWare Inc.\nF8:F0:82\tNagLlc\tNag Llc\nF8:F1:B6\tMotorola\tMotorola Mobility LLC, a Lenovo Company\nF8:F2:1E\tIntelCor\tIntel Corporate\nF8:F2:5A\tG-Lab\tG-Lab GmbH\nF8:F4:64\tRaweElec\tRawe Electonic GmbH\nF8:F5:32\tArrisGro\tARRIS Group, Inc.\nF8:F7:D3\tInternat\tInternational Communications Corporation\nF8:F7:FF\tSyn-Tech\tSYN-TECH SYSTEMS INC\nF8:FB:2F\tSantur\tSantur Corporation\nF8:FE:5C\tReciproc\tReciprocal Labs Corp\nF8:FE:A8\tTechnico\tTechnico Japan Corporation\nF8:FF:0B\tElectron\tElectronic Technology Inc.\nF8:FF:5F\tShenzhen\tShenzhen Communication Technology Co.,Ltd\nFA:07:3E\tNbase-TA\tNBASE-T Alliance\nFA:14:66\tAllegion\tAllegion PLC\nFA:16:19\tTrendyte\ttrendytech\nFA:2E:E9\tOcaAllia\tOCA Alliance, Inc.\nFA:4C:77\tOccitali\tOccitaline\nFA:55:6F\tSymbolic\tSymbolicIO\nFA:61:0E\tLaborato\tLaboratory for Computational Sensing and Robotics, Johns Hopkins University\nFA:63:E1\tSamsungE\tSamsung Electronics (UK) Ltd\nFA:94:F1\tIeee8021\tIEEE 802.1 Working Group\nFA:BA:85\tPrivate\t\nFA:E1:90\tInWinDev\tIn Win Development Inc.\nFA:E5:1A\tRsaeLabs\tRSAE Labs Inc\nFA:EB:6E\tXranOrg\txRAN.org\nFA:F9:C0\tRaid\tRAID Incorporated\nFC:00:12\tToshibaS\tToshiba Samsung Storage Technolgoy Korea Corporation\nFC:01:7C\tHonHaiPr\tHon Hai Precision Ind. Co.,Ltd.\nFC:01:9E\tVievu\t\nFC:01:CD\tFundacio\tFundacion Tekniker\nFC:03:9F\tSamsungE\tSamsung Electronics Co.,Ltd\nFC:06:47\tCortland\tCortland Research, LLC\nFC:06:ED\tM2motive\tM2Motive Technology Inc.\nFC:07:A0\tLreMedic\tLRE Medical GmbH\nFC:08:4A\tFujitsu\tFujitsu Limited\nFC:08:77\tPrentkeR\tPrentke Romich Company\nFC:09:D8\tActeonGr\tACTEON Group\nFC:09:F6\tGuangdon\tGuangdong Tonze Electric Co.,Ltd\nFC:0A:81\tExtremeN\tExtreme Networks, Inc.\nFC:0F:4B\tTexasIns\tTexas Instruments\nFC:0F:E6\tSonyInte\tSony Interactive Entertainment Inc.\nFC:10:BD\tControlS\tControl Sistematizado S.A.\nFC:10:C6\tTaicangT\tTaicang T&W Electronics\nFC:11:86\tLogic3\tLogic3 plc\nFC:13:49\tGlobalAp\tGlobal Apps Corp.\nFC:15:B4\tHewlettP\tHewlett Packard\nFC:16:07\tTaianTec\tTaian Technology(Wuxi) Co.,Ltd.\nFC:17:94\tIntercre\tInterCreative Co., Ltd\nFC:19:10\tSamsungE\tSamsung Electronics Co.,Ltd\nFC:19:D0\tCloudVis\tCloud Vision Networks Technology Co.,Ltd.\nFC:1A:11\tVivoMobi\tvivo Mobile Communication Co., Ltd.\nFC:1B:FF\tV-Zug\tV-ZUG AG\nFC:1D:59\tISmartCi\tI Smart Cities HK Ltd\nFC:1D:84\tAutobase\t\nFC:1E:16\tIpevo\tIPEVO corp\nFC:1F:19\tSamsungE\tSamsung Electro Mechanics Co., Ltd.\nFC:1F:C0\tEurecam\t\nFC:22:9C\tHanKyung\tHan Kyung I Net Co.,Ltd.\nFC:23:25\tEostekSh\tEosTek (Shenzhen) Co., Ltd.\nFC:25:3F\tApple\tApple, Inc.\nFC:27:A2\tTransEle\tTrans Electric Co., Ltd.\nFC:2A:54\tConnecte\tConnected Data, Inc.\nFC:2A:9C\tApple\tApple, Inc.\nFC:2D:5E\tZte\tzte corporation\nFC:2E:2D\tLoromInd\tLorom Industrial Co.LTD.\nFC:2F:40\tCalxeda\tCalxeda, Inc.\nFC:2F:6B\tEverspin\tEverspin Technologies, Inc.\nFC:2F:AA\tNokia\t\nFC:2F:EF\tUttTechn\tUTT Technologies Co., Ltd.\nFC:32:88\tCelotWir\tCELOT Wireless Co., Ltd\nFC:33:5F\tPolyera\t\nFC:35:98\tFavite\tFavite Inc.\nFC:35:E6\tVisteon\tVisteon corp\nFC:37:2B\tSichuanT\tSichuan Tianyi Comheart Telecomco.,Ltd\nFC:3C:E9\tTsington\tTsingtong Technologies Co, Ltd.\nFC:3D:93\tLongchee\tLongcheer Telecommunication Limited\nFC:3F:7C\tHuaweiTe\tHuawei Technologies Co.,Ltd\nFC:3F:AB\tHenanLan\tHenan Lanxin Technology Co., Ltd\nFC:3F:DB\tHewlettP\tHewlett Packard\nFC:42:03\tSamsungE\tSamsung Electronics Co.,Ltd\nFC:44:63\tUniversa\tUniversal Audio, Inc\nFC:44:99\tSwarcoLe\tSwarco LEA d.o.o.\nFC:45:5F\tJiangxiS\tJiangxi Shanshui Optoelectronic Technology Co.,Ltd\nFC:45:96\tCompalIn\tCOMPAL INFORMATION (KUNSHAN) CO., LTD.\nFC:48:EF\tHuaweiTe\tHuawei Technologies Co.,Ltd\nFC:4A:E9\tCastlene\tCastlenet Technology Inc.\nFC:4B:1C\tIntersen\tIntersensor S.R.L.\nFC:4B:BC\tSunplusT\tSunplus Technology Co., Ltd.\nFC:4D:8C\tShenzhen\tShenzhen Pante Electronics Technology Co., Ltd\nFC:4D:D4\tUniversa\tUniversal Global Scientific Industrial Co., Ltd.\nFC:50:90\tSimexSpZ\tSIMEX Sp. z o.o.\nFC:51:A4\tArrisGro\tARRIS Group, Inc.\nFC:52:8D\tTechnico\tTechnicolor CH USA Inc.\nFC:52:CE\tControlI\tControl iD\nFC:53:9E\tShanghai\tShanghai Wind Technologies Co.,Ltd\nFC:55:DC\tBalticLa\tBaltic Latvian Universal Electronics LLC\nFC:58:FA\tShenZhen\tShen Zhen Shi Xin Zhong Xin Technology Co.,Ltd.\nFC:5A:1D\tHitronTe\tHitron Technologies. Inc\nFC:5B:24\tWeibelSc\tWeibel Scientific A/S\nFC:5B:26\tMikrobit\tMikroBits\nFC:5B:39\tCisco\tCisco Systems, Inc\nFC:60:18\tZhejiang\tZhejiang Kangtai Electric Co., Ltd.\nFC:61:98\tNecPerso\tNEC Personal Products, Ltd\nFC:61:E9\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nFC:62:6E\tBeijingM\tBeijing MDC Telecom\nFC:62:B9\tAlpsElec\tAlps Electric Co.,Ltd.\nFC:64:3A\tSamsungE\tSamsung Electronics Co.,Ltd\nFC:64:BA\tXiaomiCo\tXiaomi Communications Co Ltd\nFC:65:DE\tAmazonTe\tAmazon Technologies Inc.\nFC:68:3E\tDirected\tDirected Perception, Inc\nFC:69:47\tTexasIns\tTexas Instruments\nFC:6B:F0\tTopwellI\tTopwell International Holdinds Limited\nFC:6C:31\tLxinstru\tLXinstruments GmbH\nFC:6D:C0\tBme\tBme Corporation\nFC:6F:B7\tArrisGro\tARRIS Group, Inc.\nFC:75:16\tD-LinkIn\tD-Link International\nFC:75:E6\tHandream\tHandreamnet\nFC:79:0B\tHitachiH\tHitachi High Technologies America, Inc.\nFC:7C:02\tPhicommS\tPhicomm (Shanghai) Co., Ltd.\nFC:7C:E7\tFciUsaLl\tFci Usa Llc\nFC:7F:56\tCosystCo\tCoSyst Control Systems GmbH\nFC:83:29\tTreiTech\tTrei technics\nFC:83:99\tAvaya\tAvaya Inc\nFC:83:C6\tN-RadioT\tN-Radio Technologies Co., Ltd.\nFC:8B:97\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\nFC:8E:7E\tArrisGro\tARRIS Group, Inc.\nFC:8F:7D\tShenzhen\tShenzhen Gongjin Electronics Co.,Lt\nFC:8F:90\tSamsungE\tSamsung Electronics Co.,Ltd\nFC:8F:C4\tIntellig\tIntelligent Technology Inc.\nFC:90:FA\tIndepend\tIndependent Technologies\nFC:91:14\tTechnico\tTechnicolor CH USA Inc.\nFC:92:3B\tNokia\tNokia Corporation\nFC:94:6C\tUbivelox\t\nFC:94:E3\tTechnico\tTechnicolor CH USA Inc.\nFC:99:47\tCisco\tCisco Systems, Inc\nFC:9A:FA\tMotusGlo\tMotus Global Inc.\nFC:9B:C6\tSumavisi\tSumavision Technologies Co.,Ltd\nFC:9D:D8\tBeijingT\tBeijing TongTongYiLian Science and Technology Ltd.\nFC:9F:AE\tFidus\tFidus Systems Inc\nFC:9F:E1\tConwinTe\tCONWIN.Tech. Ltd\nFC:A1:3E\tSamsungE\tSamsung Electronics Co.,Ltd\nFC:A1:83\tAmazonTe\tAmazon Technologies Inc.\nFC:A2:2A\tPtCallys\tPT. Callysta Multi Engineering\nFC:A3:86\tShenzhen\tSHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\nFC:A6:21\tSamsungE\tSamsung Electronics Co.,Ltd\nFC:A6:67\tAmazonTe\tAmazon Technologies Inc.\nFC:A6:CD\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nFC:A8:41\tAvaya\tAvaya Inc\nFC:A8:9A\tSunitecE\tSunitec Enterprise Co.,Ltd\nFC:A9:B0\tMiartech\tMIARTECH (SHANGHAI),INC.\nFC:AA:14\tGiga-Byt\tGIGA-BYTE TECHNOLOGY CO.,LTD.\nFC:AA:B6\tSamsungE\tSamsung Electronics Co.,Ltd\nFC:AD:0F\tQtsNetwo\tQts Networks\nFC:AF:6A\tQulsar\tQulsar Inc\nFC:AF:AC\tSocionex\tSocionext Inc.\nFC:B0:C4\tShanghai\tShanghai DareGlobal Technologies Co.,Ltd\nFC:B1:0D\tShenzhen\tShenzhen Tian Kun Technology Co.,LTD.\nFC:B4:E6\tAskeyCom\tAskey Computer Corp\nFC:B5:8A\tWapice\tWapice Ltd.\nFC:B6:98\tCambridg\tCambridge Industries(Group) Co.,Ltd.\nFC:B6:D8\tApple\tApple, Inc.\nFC:B7:F0\tIdahoNat\tIdaho National Laboratory\nFC:BB:A1\tShenzhen\tShenzhen Minicreate Technology Co.,Ltd\nFC:BC:9C\tVimar\tVimar Spa\nFC:C2:33\tPrivate\t\nFC:C2:3D\tAtmel\tAtmel Corporation\nFC:C2:DE\tMurataMa\tMurata Manufacturing Co., Ltd.\nFC:C7:34\tSamsungE\tSamsung Electronics Co.,Ltd\nFC:C8:97\tZte\tzte corporation\nFC:CA:C4\tLifeheal\tLifeHealth, LLC\nFC:CC:E4\tAscon\tAscon Ltd.\nFC:CF:43\tHuizhouC\tHuizhou City Huiyang District Meisiqi Industry Development Co,.Ltd\nFC:CF:62\tIbm\tIBM Corp\nFC:D4:F2\tCocaCola\tThe Coca Cola Company\nFC:D4:F6\tMessanaA\tMessana Air.Ray Conditioning s.r.l.\nFC:D5:D9\tShenzhen\tShenzhen SDMC Technology Co., Ltd.\nFC:D6:BD\tRobertBo\tRobert Bosch GmbH\nFC:D7:33\tTp-LinkT\tTP-LINK TECHNOLOGIES CO.,LTD.\nFC:D8:17\tBeijingH\tBeijing Hesun Technologies Co.Ltd.\nFC:D8:48\tApple\tApple, Inc.\nFC:DB:96\tEnervall\tEnervalley Co., Ltd\nFC:DB:B3\tMurataMa\tMurata Manufacturing Co., Ltd.\nFC:DC:4A\tG-Wearab\tG-Wearables Corp.\nFC:DD:55\tShenzhen\tShenzhen WeWins wireless Co.,Ltd\nFC:E1:86\tA3m\tA3M Co., LTD\nFC:E1:92\tSichuanJ\tSichuan Jinwangtong Electronic Science&Technology Co,.Ltd\nFC:E1:D9\tStableIm\tStable Imaging Solutions LLC\nFC:E1:FB\tArrayNet\tArray Networks\nFC:E2:3F\tClayPaky\tClay Paky Spa\nFC:E3:3C\tHuaweiTe\tHuawei Technologies Co.,Ltd\nFC:E5:57\tNokia\tNokia Corporation\nFC:E6:6A\tIndustri\tIndustrial Software Co\nFC:E8:92\tHangzhou\tHangzhou Lancable Technology Co.,Ltd\nFC:E9:98\tApple\tApple, Inc.\nFC:EC:DA\tUbiquiti\tUbiquiti Networks Inc.\nFC:ED:B9\tArrayent\t\nFC:EE:E6\tFormikeE\tFormike Electronic Co., Ltd\nFC:F1:36\tSamsungE\tSamsung Electronics Co.,Ltd\nFC:F1:52\tSony\tSony Corporation\nFC:F1:CD\tOptex-Fa\tOPTEX-FA CO.,LTD.\nFC:F5:28\tZyxelCom\tZyxel Communications Corporation\nFC:F6:47\tFiberhom\tFiberhome Telecommunication Technologies Co.,LTD\nFC:F8:AE\tIntelCor\tIntel Corporate\nFC:F8:B7\tTronteqE\tTRONTEQ Electronic\nFC:FA:F7\tShanghai\tShanghai Baud Data Communication Co.,Ltd.\nFC:FB:FB\tCisco\tCisco Systems, Inc\nFC:FC:48\tApple\tApple, Inc.\nFC:FE:77\tHitachiR\tHitachi Reftechno, Inc.\nFC:FE:C2\tInvensys\tInvensys Controls UK Limited\nFC:FF:AA\tIeeeRegi\tIEEE Registration Authority"
  },
  {
    "path": "plugins/vtask.py",
    "content": "'Full terminal interface for TaskWarrior (task).'\n\nimport tasklib\nfrom visidata import vd, launchExternalEditorValue, Sheet, ColumnItem, date, vlen, CellColorizer, Column, run\nfrom visidata import *\n\nvd.options.disp_date_fmt = '%Y-%m-%d %H:%M'\nvd.option('color_task_changed', 'reverse yellow', 'color when vtask is changed')\n\n\ndef editTask(task):\n    taskdesc = ''\n\n    # pack \"key: value\" metadata\n    for k in 'description project status'.split():\n        taskdesc += '%s: %s\\n' % (k, task[k])\n\n    # pack annotations separated by ---\n    for note in task[\"annotations\"]:\n        taskdesc += \"\\n---\\n\"\n        taskdesc += note.description\n\n    # add final sentinel to indicate how to separate if no notes\n    taskdesc += \"\\n---\\n\"\n    ret = launchExternalEditorValue(taskdesc)\n\n    # unpack annotations separated by ---\n    newnotes = ret.split(\"\\n---\\n\")\n    task[\"annotations\"] = newnotes[1:]\n\n    # unpack \"key: value\" metadata\n    for line in newnotes[0].splitlines():\n        k, v = line.split(': ', maxsplit=1)\n        task[k] = v\n\n#    task.save()\n\n\nclass TodoSheet(Sheet):\n    rowtype = 'tasks'  # rowdef: tasklib.Task\n    columns = [\n         ColumnItem('id', type=int, width=4),\n         ColumnItem('project'),\n         ColumnItem('description'),\n         ColumnItem('status'),\n         ColumnItem('urgency', type=float, fmtstr='{:.01f}'),\n         ColumnItem('start', type=date),\n         ColumnItem('due', type=date),\n         ColumnItem('wait', type=date, width=0),\n         ColumnItem('scheduled', type=date, width=0),\n         ColumnItem('until', type=date, width=0),\n         ColumnItem('entry', type=date, width=0),\n         ColumnItem('modified', type=date, width=0),\n         ColumnItem('completed', type=date, width=0),\n#         ColumnItem('depends'),\n         Column('tags', getter=lambda c,r: ' '.join(r[\"tags\"]),\n                        setter=lambda c,r: r[\"tags\"].tags.split(' ')),\n#         ColumnItem('tags'),\n         ColumnItem('annotations', type=vlen),\n#        Column('age', width=3, getter=lambda c,r: date()-r.date_entered), # formatter=duration\n    ]\n    nKeys = 1\n    colorizers = Sheet.colorizers + [\n        CellColorizer(8, 'color_task_changed', lambda s,c,r,v: r and c and isChanged(r, c.name)),\n    ]\n    def newRow(self, **kwargs):\n        return tasklib.Task(self.tw, **kwargs)\n\n    def reload(self):\n        self.tw = tasklib.TaskWarrior(data_location=str(self.source), create=True)\n        self.rows = list(self.tw.tasks.pending())\n        self.orderBy(None, self.column('urgency'), reverse=True)\n\ndef isChanged(r, key):\n    return r._data.get(key, None) != r._original_data.get(key, None)\n\n\nclass TaskAnnotationsSheet(Sheet):\n    rowtype = 'notes'  # rowdef: TaskAnnotation\n    columns = [\n        ColumnItem('entry', type=date),\n        ColumnItem('description'),\n    ]\n    def reload(self):\n        self.rows = self.source['annotations']\n\nTodoSheet.addCommand('Ctrl+O', 'edit-notes', 'editTask(cursorRow)')\nTodoSheet.addCommand('a', 'add-task', 't=newRow(description=input(\"new task: \")); rows.insert(cursorRowIndex+1, t); t.save(); cursorDown()')\nTodoSheet.addCommand('d', 'complete-task', 'cursorRow.done(); cursorRow.refresh()')\nTodoSheet.addCommand('gd', 'complete-tasks', 'for r in selectedRows: r.done() or r.refresh()')\nTodoSheet.addCommand('zd', 'delete-task', 'cursorRow.delete(); cursorRow.refresh()')\nTodoSheet.addCommand('gzd', 'delete-tasks', 'for r in selectedRows: r.delete() or r.refresh()')\nTodoSheet.addCommand('zCtrl+R', 'refresh-tasks', 'cursorRow.refresh()')\nTodoSheet.addCommand('zCtrl+S', 'save-task', 'cursorRow.save()')\nTodoSheet.addCommand('Ctrl+S', 'save-modified-tasks', 'list(r.save() for r in rows if r.modified)')\nTodoSheet.addCommand('Space', 'start-task', 'cursorRow.stop() if cursorRow[\"start\"] else cursorRow.start()')\nTodoSheet.addCommand('Enter', '', 'vd.push(TaskAnnotationsSheet(\"cursorRow.description\", source=cursorRow))')\nTaskAnnotationsSheet.addCommand('a', 'add-task-note', 'source.add_annotation(input(\"note: \")); reload()')\nTaskAnnotationsSheet.addCommand('d', 'delete-task-note', 'source.remove_annotation(cursorRow); reload()')\n\ndef main_vtask():\n    run(TodoSheet('todos', source=Path('~/.task')))\n\n\nvd.addGlobals(globals())\n"
  },
  {
    "path": "pyrightconfig.json",
    "content": "{\n    \"reportAttributeAccessIssue\": \"none\"\n}\n"
  },
  {
    "path": "requirements.scm",
    "content": "(specifications->manifest\n '(\n   \"bash\"\n   \"coreutils\"\n   \"direnv\"\n   \"git\"\n   \"inetutils\"\n   \"nss-certs\"\n   \"python\"\n   \"python-dateutil\"\n   \"python-lxml\"\n   \"python-openpyxl\"\n   \"python-pyopenssl\"\n   \"python-pytest\"\n   \"python-requests\"\n   \"python-wrapper\"\n   \"python-xlrd\"\n   \"sed\"\n   \"which\"\n   ))\n"
  },
  {
    "path": "requirements.txt",
    "content": "python-dateutil     # date type\n\n# optional dependencies\npandas>=1.5.3; python_version >= '3.11' # dta (Stata)\npandas>=1.0.5; python_version < '3.11'  # dta (Stata)\nrequests            # http\nlxml                # html/xml\nopenpyxl>= 2.4      # xlsx\nxlrd                # xls\nxlwt                # xls\nh5py                # hdf5\npsycopg2-binary     # postgres\nboto3               # rds\npyshp               # shapefiles\nmapbox-vector-tile  # mbtiles\npypng               # png\nfonttools           # ttf/otf\nsas7bdat            # sas7bdat (SAS)\nxport>=3            # xpt (SAS)\nPyYAML>=5.1         # yaml/yml\ndpkt                # pcap\ndnslib              # pcap\nnamestand           # graphviz\ndatapackage         # frictionless .json\npdfminer.six        # pdf\ntabula              # pdf tables\nvobject             # vcf\ntabulate            # tabulate saver\nwcwidth             # tabulate saver with unicode\nzstandard           # read .zst files\nodfpy               # ods (OpenDocument)\nurllib3             # .zip over http\npyarrow>=14.0.1; python_version >= '3.8' # arrow arrows parquet (Apache Arrow)\npyarrow_hotfix; python_version <= '3.7' # pyarrow security patch\npyarrow; python_version <= '3.7'\nseaborn             # plot via seaborn\nmatplotlib          # svg saver\nsh                  # ping\npsutil              # procmgr\nnumpy               # npy pandas hdf5 arrow\ntomli; python_version < '3.11' # toml\npyconll             # conll/conllu\nbackports.zoneinfo; python_version < '3.9' #f5log\nmsgpack             # msgpack\nbrotli              # msgpackz\nfecfile             # fec Federal Election Commission\n\nrequests_cache      # scraper\nbeautifulsoup4      # scraper\n\nFaker               # fake data generation\n\npraw                # reddit API\nmatrix_client       # matrix API\nzulip               # zulip API\npyairtable          # airtable API\n\n-e git+https://github.com/saulpw/pyxlsb.git@visidata#egg=pyxlsb                 # xlsb\n-e git+https://github.com/anjakefala/savReaderWriter#egg=savReaderWriter        # sav (SPSS)\n"
  },
  {
    "path": "ruff.toml",
    "content": "# Ruff config for VisiData\n# Suppresses intentional style choices; flags real issues only.\n\n[lint]\npreview = true\nexplicit-preview-rules = true\nselect = [\"E\", \"F\", \"E302\", \"E303\"]\n\nignore = [\n    \"E501\",   # line too long — no line length limit in visidata\n    \"E701\",   # multiple statements on one line (colon) — deliberate visidata style\n    \"E702\",   # multiple statements on one line (semicolon) — deliberate visidata style\n    \"E731\",   # lambda assignment — idiomatic in visidata\n    \"E402\",   # module import not at top — some loaders need deferred imports\n    \"F401\",   # unused import — many are intentional re-exports\n    \"F403\",   # import star — core visidata pattern\n    \"F405\",   # undefined from import star — consequence of F403\n    \"F811\",   # redefined while unused — often intentional overrides\n    \"F722\",   # forward annotation syntax error — visidata uses custom annotations\n    \"E712\",   # true-false comparison — `== True` used intentionally in some places\n    \"E721\",   # type comparison — `type(x) != type(y)` used intentionally\n]\n\nexclude = [\n    \"deps/\",\n]\n"
  },
  {
    "path": "sample_data/1794685.fec",
    "content": "HDR\u001cFEC\u001c8.4\u001cCampaign Manager 360\u001c1.0\u001cFEC-1724438\u001c6\u001c\nF2A\u001cS4MI00595\u001cRogers\u001cMichael\u001cJ\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001cPO Box 132\u001c\u001cSaint Joseph\u001cMI\u001c490850132\u001cREP\u001cS\u001cMI\u001c00\u001c2024\u001cC00849810\u001cRogers for Senate \u001cPO Box 132\u001c\u001cSaint Joseph\u001cMI\u001c490850132\u001cC00851170\u001cMike Rogers Victory Committee\u001cPO Box 132\u001c\u001cSaint Joseph\u001cMI\u001c49085\u001cRogers\u001cMichael\u001cJ\u001c\u001c\u001c20240709\nF2S\u001cS4MI00595\u001cC00770180\u001cCornyn Victory Committee\u001cPO Box 13026\u001c\u001cAustin\u001cTX\u001c787113026\nF2S\u001cS4MI00595\u001cC00875542\u001c2024 Senators Classic JFC\u001c228 S. Washington St.\u001cSte. 115\u001cAlexandria\u001cVA\u001c22314\nF2S\u001cS4MI00595\u001cC00876953\u001cIntegrity Tour 2024\u001c9460 Tegner Rd\u001c\u001cHilmar\u001cCA\u001c953249320\nF2S\u001cS4MI00595\u001cC00837435\u001c2024 Thune Republican Senate Victory\u001c225 S Washington St\u001cSte 115\u001cAlexandria\u001cVA\u001c223143625\nF2S\u001cS4MI00595\u001cC00874487\u001cSenate Path to Victory 2024\u001c421 Office Park Dr\u001c\u001cMountain Brk\u001cAL\u001c352232411\nF2S\u001cS4MI00595\u001cC00870675\u001cBrown/Rogers Victory Fund\u001c3275 NORTH FORT APACHE ROAD 150\u001c\u001cLas Vegas\u001cNV\u001c89129\nF2S\u001cS4MI00595\u001cC00872101\u001cReclaim The Majority\u001c421 Office Park Dr\u001c\u001cMountain Brk\u001cAL\u001c352232411\nTEXT\u001cS4MI00595\u001c1\u001c\u001cF2A\u001c\n"
  },
  {
    "path": "sample_data/StatusPR.csv",
    "content": "Month,Day,Resource,Location,Value,Unit,Source\r\nSep,29,Electricity,Puerto Rico,5,percent,AEE\r\nSep,29,Telecomunications,Puerto Rico,30.5,percent,JRTC\r\nSep,29,People in shelters,Puerto Rico,11105,number,Vivienda\r\nSep,29,Water,Metro,48.75,percent,AAA\r\nSep,29,Water,Norte,25.47,percent,AAA\r\nSep,29,Water,Oeste,29.95,percent,AAA\r\nSep,29,Water,Sur,58.5,percent,AAA\r\nSep,29,Water,Este,38.96,percent,AAA\r\nSep,29,Hospitals,Puerto Rico,34,number,ASES\r\nOct,1,Electricity,Puerto Rico,5,percent,AEE\r\nOct,1,Cell antennas,Puerto Rico,300,number,FCC\r\nOct,2,Telecomunications,Puerto Rico,40,percent,JRTC\r\nOct,2,Cell towers,Puerto Rico,270,number,JRTC\r\nOct,2,People in shelters,Puerto Rico,8867,number,Vivienda\r\nOct,2,Hospitals,Puerto Rico,51,number,Departamento de Salud Federal y Local\r\nOct,2,Hospitals with electricity,Puerto Rico,10,number,Departamento de Salud Federal y Local\r\nOct,2,Water,Puerto Rico,47,percent,AAA\r\nOct,2,Water,Metro,57.5,percent,AAA\r\nOct,2,Water,Norte,29,percent,AAA\r\nOct,2,Water,Oeste,20.8,percent,AAA\r\nOct,2,Water,Sur,67,percent,AAA\r\nOct,2,Water,Este,50,percent,AAA\r\nOct,2,Cell antennas,Puerto Rico,312,number,FCC\r\nOct,3,Electricity,Puerto Rico,6.89,percent,AEE\r\nOct,3,Telecomunications,Puerto Rico,40,percent,JRTC\r\nOct,3,Cell towers,Puerto Rico,365,number,JRTC\r\nOct,3,People in shelters,Puerto Rico,9343,number,Vivienda\r\nOct,3,Hospitals,Puerto Rico,51,number,Departamento de Salud Federal y Local\r\nOct,3,Hospitals with electricity,Puerto Rico,17,number,Departamento de Salud Federal y Local\r\nOct,3,Water,Puerto Rico,45,percent,AAA\r\nOct,3,Water,Metro,57.6,percent,AAA\r\nOct,3,Water,Norte,13,percent,AAA\r\nOct,3,Water,Oeste,25,percent,AAA\r\nOct,3,Water,Sur,73,percent,AAA\r\nOct,3,Water,Este,45,percent,AAA\r\nOct,4,Electricity,Puerto Rico,8.6,percent,AEE\r\nOct,4,Telecomunications,Puerto Rico,43.32,percent,JRTC\r\nOct,4,People in shelters,Puerto Rico,8802,number,Vivienda\r\nOct,4,Water,Puerto Rico,48.2,percent,AAA\r\nOct,4,Water,Metro,63.33,percent,AAA\r\nOct,4,Water,Norte,14.67,percent,AAA\r\nOct,4,Water,Oeste,30.31,percent,AAA\r\nOct,4,Water,Sur,77.68,percent,AAA\r\nOct,4,Water,Este,45.2,percent,AAA\r\nOct,5,Electricity,Puerto Rico,9.2,percent,AEE\r\nOct,5,Telecomunications,Puerto Rico,45,percent,JRTC\r\nOct,5,Cell antennas,Puerto Rico,362,number,FCC\r\nOct,5,Cell towers,Puerto Rico,423,number,JRTC\r\nOct,5,People in shelters,Puerto Rico,8585,number,Vivienda\r\nOct,5,Hospitals,Puerto Rico,64,number,Departamento de Salud Federal y Local\r\nOct,5,Hospitals with electricity,Puerto Rico,25,number,Departamento de Salud Federal y Local\r\nOct,5,Water,Puerto Rico,54.2,percent,AAA\r\nOct,5,Water,Metro,63.87,percent,AAA\r\nOct,5,Water,Norte,19.93,percent,AAA\r\nOct,5,Water,Oeste,39.85,percent,AAA\r\nOct,5,Water,Sur,77.23,percent,AAA\r\nOct,5,Water,Este,62.73,percent,AAA\r\nOct,6,Electricity,Puerto Rico,10.7,percent,AEE\r\nOct,6,Telecomunications,Puerto Rico,42,percent,JRTC\r\nOct,6,Cell antennas,Puerto Rico,406,number,FCC\r\nOct,6,Cell towers,Puerto Rico,390,number,JRTC\r\nOct,6,People in shelters,Puerto Rico,8349,number,Vivienda\r\nOct,6,Hospitals,Puerto Rico,68,number,Departamento de Salud Federal y Local\r\nOct,6,Hospitals with electricity,Puerto Rico,25,number,Departamento de Salud Federal y Local\r\nOct,6,Water,Puerto Rico,55.5,percent,AAA\r\nOct,6,Water,Metro,64,percent,AAA\r\nOct,6,Water,Norte,28,percent,AAA\r\nOct,6,Water,Oeste,69,percent,AAA\r\nOct,6,Water,Sur,69,percent,AAA\r\nOct,6,Water,Este,63,percent,AAA\r\nOct,7,Electricity,Puerto Rico,11.7,percent,AEE\r\nOct,7,Telecomunications,Puerto Rico,44,percent,JRTC\r\nOct,7,Cell antennas,Puerto Rico,422,number,FCC\r\nOct,7,Cell towers,Puerto Rico,390,number,JRTC\r\nOct,7,Water,Puerto Rico,56.24,percent,AAA\r\nOct,7,People in shelters,Puerto Rico,7442,number,Vivienda\r\nOct,7,Water,Metro,65,percent,AAA\r\nOct,7,Water,Norte,20,percent,AAA\r\nOct,7,Water,Oeste,48,percent,AAA\r\nOct,7,Water,Sur,78,percent,AAA\r\nOct,7,Water,Este,64,percent,AAA\r\nOct,7,Hospitals,Puerto Rico,66,number,Departamento de Salud Federal y Local\r\nOct,7,Hospitals with electricity,Puerto Rico,25,number,Departamento de Salud Federal y Local\r\nOct,8,Electricity,Puerto Rico,11.7,percent,AEE\r\nOct,8,Telecomunications,Puerto Rico,52,percent,JRTC\r\nOct,8,Cell antennas,Puerto Rico,505,number,FCC\r\nOct,8,Cell towers,Puerto Rico,465,number,JRTC\r\nOct,8,People in shelters,Puerto Rico,6908,number,Vivienda\r\nOct,8,Hospitals,Puerto Rico,66,number,Departamento de Salud Federal y Local\r\nOct,8,Hospitals with electricity,Puerto Rico,25,number,Departamento de Salud Federal y Local\r\nOct,8,Water,Puerto Rico,56.87,percent,AAA\r\nOct,8,Water,Metro,68,percent,AAA\r\nOct,8,Water,Norte,23,percent,AAA\r\nOct,8,Water,Oeste,45,percent,AAA\r\nOct,8,Water,Sur,69,percent,AAA\r\nOct,8,Water,Este,65,percent,AAA\r\nOct,9,Electricity,Puerto Rico,15,percent,AEE\r\nOct,9,Telecomunications,Puerto Rico,51,percent,JRTC\r\nOct,9,Cell towers,Puerto Rico,459,number,JRTC\r\nOct,9,People in shelters,Puerto Rico,6452,number,Vivienda\r\nOct,9,Hospitals,Puerto Rico,67,number,Departamento de Salud Federal y Local\r\nOct,9,Hospitals with electricity,Puerto Rico,25,number,Departamento de Salud Federal y Local\r\nOct,9,Water,Puerto Rico,59.5,percent,AAA\r\nOct,9,Water,Metro,68,percent,AAA\r\nOct,9,Water,Norte,31,percent,AAA\r\nOct,9,Water,Oeste,51,percent,AAA\r\nOct,9,Water,Sur,74,percent,AAA\r\nOct,9,Water,Este,65,percent,AAA\r\nOct,10,Electricity,Puerto Rico,16,percent,AEE\r\nOct,10,Telecomunications,Puerto Rico,53,percent,JRTC\r\nOct,10,Cell towers,Puerto Rico,531,number,JRTC\r\nOct,10,People in shelters,Puerto Rico,6067,number,Vivienda\r\nOct,10,Hospitals,Puerto Rico,70,number,Departamento de Salud Federal y Local\r\nOct,10,Hospitals with electricity,Puerto Rico,25,number,Departamento de Salud Federal y Local\r\nOct,10,Water,Puerto Rico,63.75,percent,AAA\r\nOct,10,Water,Metro,84,percent,AAA\r\nOct,10,Water,Norte,30,percent,AAA\r\nOct,10,Water,Oeste,48,percent,AAA\r\nOct,10,Water,Sur,77,percent,AAA\r\nOct,10,Water,Este,64,percent,AAA\r\nOct,11,Electricity,Puerto Rico,10.6,percent,AEE\r\nOct,11,Telecomunications,Puerto Rico,53.6,percent,JRTC\r\nOct,11,Cell towers,Puerto Rico,544,number,JRTC\r\nOct,11,People in shelters,Puerto Rico,5742,number,Vivienda\r\nOct,11,Hospitals,Puerto Rico,72,number,Departamento de Salud Federal y Local\r\nOct,11,Hospitals with electricity,Puerto Rico,43,number,Departamento de Salud Federal y Local\r\nOct,11,Water,Puerto Rico,64.22,percent,AAA\r\nOct,11,Water,Metro,80,percent,AAA\r\nOct,11,Water,Norte,32,percent,AAA\r\nOct,11,Water,Oeste,45,percent,AAA\r\nOct,11,Water,Sur,84,percent,AAA\r\nOct,11,Water,Este,68,percent,AAA\r\nOct,12,Electricity,Puerto Rico,17,percent,AEE\r\nOct,12,Telecomunications,Puerto Rico,55,percent,JRTC\r\nOct,12,Water,Puerto Rico,64,percent,AAA\r\nOct,12,Water,Metro,82,percent,AAA\r\nOct,12,Water,Norte,30,percent,AAA\r\nOct,12,Water,Oeste,35,percent,AAA\r\nOct,12,Water,Sur,81,percent,AAA\r\nOct,12,Water,Este,70,percent,AAA\r\nOct,12,Cell towers,Puerto Rico,601,number,JRTC\r\nOct,12,People in shelters,Puerto Rico,5602,number,Vivienda\r\nOct,12,Hospitals,Puerto Rico,72,number,Departamento de Salud Federal y Local\r\nOct,12,Hospitals with electricity,Puerto Rico,43,number,Departamento de Salud Federal y Local\r\nOct,13,Electricity,Puerto Rico,9,percent,AEE\r\nOct,13,Telecomunications,Puerto Rico,56,percent,JRTC\r\nOct,13,Water,Puerto Rico,63.2,percent,AAA\r\nOct,13,Water,Metro,84,percent,AAA\r\nOct,13,Water,Norte,29,percent,AAA\r\nOct,13,Water,Oeste,39,percent,AAA\r\nOct,13,Water,Sur,76,percent,AAA\r\nOct,13,Water,Este,69,percent,AAA\r\nOct,13,Cell towers,Puerto Rico,586,number,JRTC\r\nOct,13,People in shelters,Puerto Rico,5414,number,Vivienda\r\nOct,13,Hospitals,Puerto Rico,72,number,Departamento de Salud Federal y Local\r\nOct,13,Hospitals with electricity,Puerto Rico,44,number,Departamento de Salud Federal y Local\r\nOct,14,Electricity,Puerto Rico,14.6,percent,AEE\r\nOct,14,Telecomunications,Puerto Rico,58,percent,JRTC\r\nOct,14,Water,Puerto Rico,64,percent,AAA\r\nOct,14,Water,Metro,81,percent,AAA\r\nOct,14,Water,Norte,27,percent,AAA\r\nOct,14,Water,Oeste,54,percent,AAA\r\nOct,14,Water,Sur,80,percent,AAA\r\nOct,14,Water,Este,67,percent,AAA\r\nOct,14,Cell antennas,Puerto Rico,647,number,FCC\r\nOct,14,Cell towers,Puerto Rico,652,number,JRTC\r\nOct,14,People in shelters,Puerto Rico,5261,number,Vivienda\r\nOct,15,Electricity,Puerto Rico,15,percent,AEE\r\nOct,15,Telecomunications,Puerto Rico,59,percent,JRTC\r\nOct,15,Water,Puerto Rico,69,percent,AAA\r\nOct,15,Water,Metro,84,percent,AAA\r\nOct,15,Water,Norte,38,percent,AAA\r\nOct,15,Water,Oeste,53,percent,AAA\r\nOct,15,Water,Sur,87,percent,AAA\r\nOct,15,Water,Este,71,percent,AAA\r\nOct,15,Cell antennas,Puerto Rico,672,number,FCC\r\nOct,15,Cell towers,Puerto Rico,690,number,JRTC\r\nOct,15,People in shelters,Puerto Rico,5141,number,Vivienda\r\nOct,15,Hospitals,Puerto Rico,69,number,Departamento de Salud Federal y Local\r\nOct,15,Hospitals with electricity,Puerto Rico,44,number,Departamento de Salud Federal y Local\r\nOct,16,Electricity,Puerto Rico,13.7,percent,AEE\r\nOct,16,Telecomunications,Puerto Rico,59,percent,JRTC\r\nOct,16,Water,Puerto Rico,72,percent,AAA\r\nOct,16,Water,Metro,84,percent,AAA\r\nOct,16,Water,Norte,45,percent,AAA\r\nOct,16,Water,Oeste,63,percent,AAA\r\nOct,16,Water,Sur,88,percent,AAA\r\nOct,16,Water,Este,70,percent,AAA\r\nOct,16,People in shelters,Puerto Rico,5037,number,Vivienda\r\nOct,16,Hospitals,Puerto Rico,70,number,Departamento de Salud Federal y Local\r\nOct,16,Hospitals with electricity,Puerto Rico,45,number,Departamento de Salud Federal y Local\r\nOct,17,Electricity,Puerto Rico,17.7,percent,AEE\r\nOct,17,Telecomunications,Puerto Rico,59,percent,JRTC\r\nOct,17,Water,Puerto Rico,65.43,percent,AAA\r\nOct,17,Water,Metro,77,percent,AAA\r\nOct,17,Water,Norte,39,percent,AAA\r\nOct,17,Water,Oeste,49,percent,AAA\r\nOct,17,Water,Sur,80,percent,AAA\r\nOct,17,Water,Este,71,percent,AAA\r\nOct,17,Cell towers,Puerto Rico,691,number,JRTC\r\nOct,17,People in shelters,Puerto Rico,4842,number,Vivienda\r\nOct,17,Hospitals,Puerto Rico,70,number,Departamento de Salud Federal y Local\r\nOct,17,Hospitals with electricity,Puerto Rico,45,number,Departamento de Salud Federal y Local\r\nOct,18,Electricity,Puerto Rico,19.1,percent,AEE\r\nOct,18,Telecomunications,Puerto Rico,61,percent,JRTC\r\nOct,18,Water,Puerto Rico,69.19,percent,AAA\r\nOct,18,Water,Metro,86,percent,AAA\r\nOct,18,Water,Norte,39,percent,AAA\r\nOct,18,Water,Oeste,61,percent,AAA\r\nOct,18,Water,Sur,75,percent,AAA\r\nOct,18,Water,Este,69,percent,AAA\r\nOct,18,Cell towers,Puerto Rico,744,number,JRTC\r\nOct,18,People in shelters,Puerto Rico,4702,number,Vivienda\r\nOct,18,Hospitals,Puerto Rico,70,number,Departamento de Salud Federal y Local\r\nOct,18,Hospitals with electricity,Puerto Rico,45,number,Departamento de Salud Federal y Local\r\nOct,19,Electricity,Puerto Rico,21.6,percent,AEE\r\nOct,19,Telecomunications,Puerto Rico,61,percent,JRTC\r\nOct,19,Water,Puerto Rico,71.58,percent,AAA\r\nOct,19,Water,Metro,90,percent,AAA\r\nOct,19,Water,Norte,37,percent,AAA\r\nOct,19,Water,Oeste,63,percent,AAA\r\nOct,19,Water,Sur,85,percent,AAA\r\nOct,19,Water,Este,69,percent,AAA\r\nOct,19,Cell towers,Puerto Rico,754,number,JRTC\r\nOct,19,People in shelters,Puerto Rico,4374,number,Vivienda\r\nOct,19,Hospitals,Puerto Rico,64,number,Departamento de Salud Federal y Local\r\nOct,19,Hospitals with electricity,Puerto Rico,45,number,Departamento de Salud Federal y Local\r\nOct,20,Electricity,Puerto Rico,12.33,percent,AEE\r\nOct,20,Telecomunications,Puerto Rico,62,percent,JRTC\r\nOct,20,Water,Puerto Rico,69.51,percent,AAA\r\nOct,20,Water,Metro,90,percent,AAA\r\nOct,20,Water,Norte,36,percent,AAA\r\nOct,20,Water,Oeste,60,percent,AAA\r\nOct,20,Water,Sur,77,percent,AAA\r\nOct,20,Water,Este,69,percent,AAA\r\nOct,20,Cell antennas,Puerto Rico,842,number,FCC\r\nOct,20,Cell towers,Puerto Rico,795,number,JRTC\r\nOct,20,People in shelters,Puerto Rico,4246,number,Vivienda\r\nOct,20,Hospitals,Puerto Rico,66,number,Departamento de Salud Federal y Local\r\nOct,20,Hospitals with electricity,Puerto Rico,45,number,Departamento de Salud Federal y Local\r\nOct,21,Electricity,Puerto Rico,16.61,percent,AEE\r\nOct,21,Telecomunications,Puerto Rico,63,percent,JRTC\r\nOct,21,Water,Puerto Rico,71.74,percent,AAA\r\nOct,21,Water,Metro,90,percent,AAA\r\nOct,21,Water,Norte,42,percent,AAA\r\nOct,21,Water,Oeste,58,percent,AAA\r\nOct,21,Water,Sur,85,percent,AAA\r\nOct,21,Water,Este,68,percent,AAA\r\nOct,21,Cell antennas,Puerto Rico,842,number,FCC\r\nOct,21,Cell towers,Puerto Rico,839,number,JRTC\r\nOct,21,People in shelters,Puerto Rico,4154,number,Vivienda\r\nOct,21,Hospitals,Puerto Rico,65,number,Departamento de Salud Federal y Local\r\nOct,21,Hospitals with electricity,Puerto Rico,45,number,Departamento de Salud Federal y Local\r\nOct,22,Electricity,Puerto Rico,20.22,percent,AEE\r\nOct,22,Telecomunications,Puerto Rico,63,percent,JRTC\r\nOct,22,Water,Puerto Rico,72.77,percent,AAA\r\nOct,22,Water,Metro,86,percent,AAA\r\nOct,22,Water,Norte,64,percent,AAA\r\nOct,22,Water,Oeste,64,percent,AAA\r\nOct,22,Water,Sur,81,percent,AAA\r\nOct,22,Water,Este,74,percent,AAA\r\nOct,22,Cell antennas,Puerto Rico,863,number,FCC\r\nOct,22,Cell towers,Puerto Rico,864,number,JRTC\r\nOct,22,People in shelters,Puerto Rico,4154,number,Vivienda\r\nOct,22,Hospitals,Puerto Rico,65,number,Departamento de Salud Federal y Local\r\nOct,22,Hospitals with electricity,Puerto Rico,49,number,Departamento de Salud Federal y Local\r\nOct,23,Electricity,Puerto Rico,23,percent,AEE\r\nOct,23,Telecomunications,Puerto Rico,63,percent,JRTC\r\nOct,23,Water,Puerto Rico,73.65,percent,AAA\r\nOct,23,Water,Metro,88,percent,AAA\r\nOct,23,Water,Norte,48,percent,AAA\r\nOct,23,Water,Oeste,64,percent,AAA\r\nOct,23,Water,Sur,81,percent,AAA\r\nOct,23,Water,Este,77,percent,AAA\r\nOct,23,Cell antennas,Puerto Rico,884,number,FCC\r\nOct,23,Cell towers,Puerto Rico,859,number,JRTC\r\nOct,23,People in shelters,Puerto Rico,3966,number,Vivienda\r\nOct,23,Hospitals,Puerto Rico,65,number,Departamento de Salud Federal y Local\r\nOct,23,Hospitals with electricity,Puerto Rico,49,number,Departamento de Salud Federal y Local\r\nOct,24,Electricity,Puerto Rico,24.4,percent,AEE\r\nOct,24,Telecomunications,Puerto Rico,65,percent,JRTC\r\nOct,24,Water,Puerto Rico,74.37,percent,AAA\r\nOct,24,Water,Metro,88,percent,AAA\r\nOct,24,Water,Norte,44,percent,AAA\r\nOct,24,Water,Oeste,65,percent,AAA\r\nOct,24,Water,Sur,87,percent,AAA\r\nOct,24,Water,Este,77,percent,AAA\r\nOct,24,Cell antennas,Puerto Rico,898,number,FCC\r\nOct,24,Cell towers,Puerto Rico,911,number,JRTC\r\nOct,24,People in shelters,Puerto Rico,3897,number,Vivienda\r\nOct,24,Hospitals,Puerto Rico,65,number,Departamento de Salud Federal y Local\r\nOct,24,Hospitals with electricity,Puerto Rico,49,number,Departamento de Salud Federal y Local\r\nOct,25,Electricity,Puerto Rico,25,percent,AEE\r\nOct,25,Telecomunications,Puerto Rico,65,percent,JRTC\r\nOct,25,Water,Puerto Rico,75,percent,AAA\r\nOct,25,Water,Metro,87,percent,AAA\r\nOct,25,Water,Norte,46,percent,AAA\r\nOct,25,Water,Oeste,68,percent,AAA\r\nOct,25,Water,Sur,88,percent,AAA\r\nOct,25,Water,Este,77,percent,AAA\r\nOct,25,Cell antennas,Puerto Rico,958,number,FCC\r\nOct,25,Cell towers,Puerto Rico,936,number,JRTC\r\nOct,25,People in shelters,Puerto Rico,3758,number,Vivienda\r\nOct,25,Hospitals,Puerto Rico,65,number,Departamento de Salud Federal y Local\r\nOct,25,Hospitals with electricity,Puerto Rico,50,number,Departamento de Salud Federal y Local\r\nOct,26,Electricity,Puerto Rico,26.2,percent,AEE\r\nOct,26,Telecomunications,Puerto Rico,66,percent,JRTC\r\nOct,26,Water,Puerto Rico,78,percent,AAA\r\nOct,26,Water,Metro,88,percent,AAA\r\nOct,26,Water,Norte,53,percent,AAA\r\nOct,26,Water,Oeste,73,percent,AAA\r\nOct,26,Water,Sur,88,percent,AAA\r\nOct,26,Water,Este,78,percent,AAA\r\nOct,26,Cell antennas,Puerto Rico,902,number,FCC\r\nOct,26,Cell towers,Puerto Rico,967,number,JRTC\r\nOct,26,People in shelters,Puerto Rico,3655,number,Vivienda\r\nOct,26,Hospitals,Puerto Rico,65,number,Departamento de Salud Federal y Local\r\nOct,26,Hospitals with electricity,Puerto Rico,50,number,Departamento de Salud Federal y Local\r\nOct,27,Electricity,Puerto Rico,27.6,percent,AEE\r\nOct,27,Telecomunications,Puerto Rico,67,percent,JRTC\r\nOct,27,Water,Puerto Rico,77,percent,AAA\r\nOct,27,Water,Metro,89,percent,AAA\r\nOct,27,Water,Norte,58,percent,AAA\r\nOct,27,Water,Oeste,67,percent,AAA\r\nOct,27,Water,Sur,89,percent,AAA\r\nOct,27,Water,Este,72,percent,AAA\r\nOct,27,Cell antennas,Puerto Rico,902,number,FCC\r\nOct,27,Cell towers,Puerto Rico,1019,number,JRTC\r\nOct,27,People in shelters,Puerto Rico,3577,number,Vivienda\r\nOct,27,Hospitals,Puerto Rico,65,number,Departamento de Salud Federal y Local\r\nOct,27,Hospitals with electricity,Puerto Rico,54,number,Departamento de Salud Federal y Local\r\nOct,28,Electricity,Puerto Rico,29.7,percent,AEE\r\nOct,28,Telecomunications,Puerto Rico,69,percent,JRTC\r\nOct,28,Water,Puerto Rico,80,percent,AAA\r\nOct,28,Water,Metro,86,percent,AAA\r\nOct,28,Water,Norte,74,percent,AAA\r\nOct,28,Water,Oeste,68,percent,AAA\r\nOct,28,Water,Sur,88,percent,AAA\r\nOct,28,Water,Este,80,percent,AAA\r\nOct,28,Cell antennas,Puerto Rico,1075,number,FCC\r\nOct,28,Cell towers,Puerto Rico,1081,number,JRTC\r\nOct,28,People in shelters,Puerto Rico,3502,number,Vivienda\r\nOct,28,Hospitals,Puerto Rico,65,number,Departamento de Salud Federal y Local\r\nOct,28,Hospitals with electricity,Puerto Rico,55,number,Departamento de Salud Federal y Local\r\nOct,29,Electricity,Puerto Rico,29.7,percent,AEE\r\nOct,29,Telecomunications,Puerto Rico,69,percent,JRTC\r\nOct,29,Water,Puerto Rico,79.52,percent,AAA\r\nOct,29,Water,Metro,84,percent,AAA\r\nOct,29,Water,Norte,68,percent,AAA\r\nOct,29,Water,Oeste,71,percent,AAA\r\nOct,29,Water,Sur,87,percent,AAA\r\nOct,29,Water,Este,84,percent,AAA\r\nOct,29,Cell antennas,Puerto Rico,1101,number,FCC\r\nOct,29,Cell towers,Puerto Rico,1092,number,JRTC\r\nOct,29,People in shelters,Puerto Rico,3403,number,Vivienda\r\nOct,29,Hospitals,Puerto Rico,65,number,Departamento de Salud Federal y Local\r\nOct,29,Hospitals with electricity,Puerto Rico,55,number,Departamento de Salud Federal y Local\r\nOct,30,Electricity,Puerto Rico,30.5,percent,AEE\r\nOct,30,Telecomunications,Puerto Rico,69,percent,JRTC\r\nOct,30,Water,Puerto Rico,81,percent,AAA\r\nOct,30,Water,Metro,87,percent,AAA\r\nOct,30,Water,Norte,69,percent,AAA\r\nOct,30,Water,Oeste,71,percent,AAA\r\nOct,30,Water,Sur,88,percent,AAA\r\nOct,30,Water,Este,84,percent,AAA\r\nOct,30,Cell antennas,Puerto Rico,1127,number,FCC\r\nOct,30,Cell towers,Puerto Rico,1109,number,JRTC\r\nOct,30,People in shelters,Puerto Rico,3348,number,Vivienda\r\nOct,30,Hospitals,Puerto Rico,65,number,Departamento de Salud Federal y Local\r\nOct,30,Hospitals with electricity,Puerto Rico,55,number,Departamento de Salud Federal y Local\r\nOct,31,Electricity,Puerto Rico,33.4,percent,AEE\r\nOct,31,Telecomunications,Puerto Rico,70,percent,JRTC\r\nOct,31,Water,Puerto Rico,82,percent,AAA\r\nOct,31,Water,Metro,91,percent,AAA\r\nOct,31,Water,Norte,67,percent,AAA\r\nOct,31,Water,Oeste,75,percent,AAA\r\nOct,31,Water,Sur,87,percent,AAA\r\nOct,31,Water,Este,85,percent,AAA\r\nOct,31,Cell antennas,Puerto Rico,1540,number,FCC\r\nOct,31,People in shelters,Puerto Rico,3304,number,Vivienda\r\nOct,31,Hospitals,Puerto Rico,65,number,Departamento de Salud Federal y Local\r\nOct,31,Hospitals with electricity,Puerto Rico,57,number,Departamento de Salud Federal y Local\r\nNov,1,Electricity,Puerto Rico,37.9,percent,AEE\r\nNov,1,Telecomunications,Puerto Rico,70,percent,JRTC\r\nNov,1,Water,Puerto Rico,82,percent,AAA\r\nNov,1,Water,Metro,91,percent,AAA\r\nNov,1,Water,Norte,68,percent,AAA\r\nNov,1,Water,Oeste,71,percent,AAA\r\nNov,1,Water,Sur,88,percent,AAA\r\nNov,1,Water,Este,85,percent,AAA\r\nNov,1,Cell towers,Puerto Rico,1164,number,JRTC\r\nNov,1,People in shelters,Puerto Rico,3243,number,Vivienda\r\nNov,1,Hospitals,Puerto Rico,65,number,Departamento de Salud Federal y Local\r\nNov,1,Hospitals with electricity,Puerto Rico,57,number,Departamento de Salud Federal y Local\r\nNov,2,Electricity,Puerto Rico,36.9,percent,AEE\r\nNov,2,Telecomunications,Puerto Rico,70,percent,JRTC\r\nNov,2,Water,Puerto Rico,83.11,percent,AAA\r\nNov,2,Water,Metro,94,percent,AAA\r\nNov,2,Water,Norte,68,percent,AAA\r\nNov,2,Water,Oeste,71,percent,AAA\r\nNov,2,Water,Sur,88,percent,AAA\r\nNov,2,Water,Este,84,percent,AAA\r\nNov,2,Cell antennas,Puerto Rico,1481,number,FCC\r\nNov,2,Cell towers,Puerto Rico,1165,number,JRTC\r\nNov,2,People in shelters,Puerto Rico,3068,number,Vivienda\r\nNov,2,Hospitals,Puerto Rico,65,number,Departamento de Salud Federal y Local\r\nNov,2,Hospitals with electricity,Puerto Rico,57,number,Departamento de Salud Federal y Local\r\nNov,3,Electricity,Puerto Rico,37.9,percent,AEE\r\nNov,3,Telecomunications,Puerto Rico,71,percent,JRTC\r\nNov,3,Water,Puerto Rico,80.38,percent,AAA\r\nNov,3,Water,Metro,92,percent,AAA\r\nNov,3,Water,Norte,56,percent,AAA\r\nNov,3,Water,Oeste,73,percent,AAA\r\nNov,3,Water,Sur,87,percent,AAA\r\nNov,3,Water,Este,83,percent,AAA\r\nNov,3,Cell antennas,Puerto Rico,1442,number,FCC\r\nNov,3,Cell towers,Puerto Rico,1233,number,JRTC\r\nNov,3,People in shelters,Puerto Rico,2942,number,Vivienda\r\nNov,3,Hospitals,Puerto Rico,67,number,Departamento de Salud Federal y Local\r\nNov,3,Hospitals with electricity,Puerto Rico,57,number,Departamento de Salud Federal y Local\r\nNov,4,Electricity,Puerto Rico,39.2,percent,AEE\r\nNov,4,Telecomunications,Puerto Rico,71,percent,JRTC\r\nNov,4,Water,Puerto Rico,80.56,percent,AAA\r\nNov,4,Water,Metro,95,percent,AAA\r\nNov,4,Water,Norte,71,percent,AAA\r\nNov,4,Water,Oeste,56,percent,AAA\r\nNov,4,Water,Sur,88,percent,AAA\r\nNov,4,Water,Este,80,percent,AAA\r\nNov,4,Cell antennas,Puerto Rico,1302,number,FCC\r\nNov,4,Cell towers,Puerto Rico,1297,number,JRTC\r\nNov,4,People in shelters,Puerto Rico,2844,number,Vivienda\r\nNov,4,Hospitals,Puerto Rico,67,number,Departamento de Salud Federal y Local\r\nNov,4,Hospitals with electricity,Puerto Rico,58,number,Departamento de Salud Federal y Local\r\nNov,5,Electricity,Puerto Rico,41.03,percent,AEE\r\nNov,5,Telecomunications,Puerto Rico,71,percent,JRTC\r\nNov,5,Water,Puerto Rico,83.09,percent,AAA\r\nNov,5,Water,Metro,93,percent,AAA\r\nNov,5,Water,Norte,72,percent,AAA\r\nNov,5,Water,Oeste,73,percent,AAA\r\nNov,5,Water,Sur,89,percent,AAA\r\nNov,5,Water,Este,80,percent,AAA\r\nNov,5,Cell antennas,Puerto Rico,1328,number,FCC\r\nNov,5,Cell towers,Puerto Rico,1261,number,JRTC\r\nNov,5,People in shelters,Puerto Rico,2844,number,Vivienda\r\nNov,5,Hospitals,Puerto Rico,67,number,Departamento de Salud Federal y Local\r\nNov,5,Hospitals with electricity,Puerto Rico,58,number,Departamento de Salud Federal y Local\r\nNov,6,Electricity,Puerto Rico,42.2,percent,AEE\r\nNov,6,Telecomunications,Puerto Rico,71.5,percent,JRTC\r\nNov,6,Water,Puerto Rico,79.46,percent,AAA\r\nNov,6,Water,Metro,91,percent,AAA\r\nNov,6,Water,Norte,62,percent,AAA\r\nNov,6,Water,Oeste,72,percent,AAA\r\nNov,6,Water,Sur,91,percent,AAA\r\nNov,6,Water,Este,79,percent,AAA\r\nNov,6,Cell antennas,Puerto Rico,1374,number,FCC\r\nNov,6,Cell towers,Puerto Rico,1337,number,JRTC\r\nNov,6,People in shelters,Puerto Rico,2844,number,Vivienda\r\nNov,6,Hospitals,Puerto Rico,67,number,Departamento de Salud Federal y Local\r\nNov,6,Hospitals with electricity,Puerto Rico,59,number,Departamento de Salud Federal y Local\r\nNov,7,Electricity,Puerto Rico,42.4,percent,AEE\r\nNov,7,Telecomunications,Puerto Rico,72,percent,JRTC\r\nNov,7,Water,Puerto Rico,83.3,percent,AAA\r\nNov,7,Water,Metro,94,percent,AAA\r\nNov,7,Water,Norte,70,percent,AAA\r\nNov,7,Water,Oeste,75,percent,AAA\r\nNov,7,Water,Sur,90,percent,AAA\r\nNov,7,Water,Este,80,percent,AAA\r\nNov,7,Cell antennas,Puerto Rico,1285,number,FCC\r\nNov,7,Cell towers,Puerto Rico,1410,number,JRTC\r\nNov,7,People in shelters,Puerto Rico,2844,number,Vivienda\r\nNov,7,Hospitals,Puerto Rico,67,number,Departamento de Salud Federal y Local\r\nNov,7,Hospitals with electricity,Puerto Rico,59,number,Departamento de Salud Federal y Local\r\nNov,8,Electricity,Puerto Rico,42.4,percent,AEE\r\nNov,8,Telecomunications,Puerto Rico,72,percent,JRTC\r\nNov,8,Water,Puerto Rico,85.38,percent,AAA\r\nNov,8,Water,Metro,95,percent,AAA\r\nNov,8,Water,Norte,67,percent,AAA\r\nNov,8,Water,Oeste,83,percent,AAA\r\nNov,8,Water,Sur,90,percent,AAA\r\nNov,8,Water,Este,84,percent,AAA\r\nNov,8,Cell antennas,Puerto Rico,1272,number,FCC\r\nNov,8,Cell towers,Puerto Rico,1418,number,JRTC\r\nNov,8,People in shelters,Puerto Rico,2460,number,Vivienda\r\nNov,8,Hospitals,Puerto Rico,67,number,Departamento de Salud Federal y Local\r\nNov,8,Hospitals with electricity,Puerto Rico,59,number,Departamento de Salud Federal y Local\r\nNov,9,Electricity,Puerto Rico,43.2,percent,AEE\r\nNov,9,Telecomunications,Puerto Rico,73,percent,JRTC\r\nNov,9,Water,Puerto Rico,87.81,percent,AAA\r\nNov,9,Water,Metro,95,percent,AAA\r\nNov,9,Water,Norte,72,percent,AAA\r\nNov,9,Water,Oeste,85,percent,AAA\r\nNov,9,Water,Sur,91,percent,AAA\r\nNov,9,Water,Este,90,percent,AAA\r\nNov,9,Cell antennas,Puerto Rico,1213,number,FCC\r\nNov,9,Cell towers,Puerto Rico,1496,number,JRTC\r\nNov,9,People in shelters,Puerto Rico,2239,number,Vivienda\r\nNov,9,Hospitals,Puerto Rico,67,number,Departamento de Salud Federal y Local\r\nNov,9,Hospitals with electricity,Puerto Rico,59,number,Departamento de Salud Federal y Local\r\nNov,10,Electricity,Puerto Rico,31.2,percent,AEE\r\nNov,10,Telecomunications,Puerto Rico,72,percent,JRTC\r\nNov,10,Water,Puerto Rico,78.09,percent,AAA\r\nNov,10,Water,Metro,67,percent,AAA\r\nNov,10,Water,Norte,64,percent,AAA\r\nNov,10,Water,Oeste,84,percent,AAA\r\nNov,10,Water,Sur,92,percent,AAA\r\nNov,10,Water,Este,91,percent,AAA\r\nNov,10,Cell antennas,Puerto Rico,1182,number,FCC\r\nNov,10,Cell towers,Puerto Rico,1474,number,JRTC\r\nNov,10,People in shelters,Puerto Rico,2219,number,Vivienda\r\nNov,10,Hospitals,Puerto Rico,67,number,Departamento de Salud Federal y Local\r\nNov,10,Hospitals with electricity,Puerto Rico,59,number,Departamento de Salud Federal y Local\r\nNov,11,Electricity,Puerto Rico,44.5,percent,AEE\r\nNov,11,Telecomunications,Puerto Rico,73,percent,JRTC\r\nNov,11,Water,Puerto Rico,87.82,percent,AAA\r\nNov,11,Water,Metro,95,percent,AAA\r\nNov,11,Water,Norte,70,percent,AAA\r\nNov,11,Water,Oeste,83,percent,AAA\r\nNov,11,Water,Sur,92,percent,AAA\r\nNov,11,Water,Este,91,percent,AAA\r\nNov,11,Cell antennas,Puerto Rico,1556,number,FCC\r\nNov,11,Cell towers,Puerto Rico,1530,number,JRTC\r\nNov,11,People in shelters,Puerto Rico,2169,number,Vivienda\r\nNov,11,Hospitals,Puerto Rico,67,number,Departamento de Salud Federal y Local\r\nNov,11,Hospitals with electricity,Puerto Rico,59,number,Departamento de Salud Federal y Local\r\nNov,12,Electricity,Puerto Rico,47.8,percent,AEE\r\nNov,12,Telecomunications,Puerto Rico,73,percent,JRTC\r\nNov,12,Water,Puerto Rico,89.61,percent,AAA\r\nNov,12,Water,Metro,95,percent,AAA\r\nNov,12,Water,Norte,79,percent,AAA\r\nNov,12,Water,Oeste,84,percent,AAA\r\nNov,12,Water,Sur,92,percent,AAA\r\nNov,12,Water,Este,92,percent,AAA\r\nNov,12,Cell antennas,Puerto Rico,1556,number,FCC\r\nNov,12,Cell towers,Puerto Rico,1554,number,JRTC\r\nNov,12,People in shelters,Puerto Rico,2143,number,Vivienda\r\nNov,12,Hospitals,Puerto Rico,67,number,Departamento de Salud Federal y Local\r\nNov,12,Hospitals with electricity,Puerto Rico,59,number,Departamento de Salud Federal y Local"
  },
  {
    "path": "sample_data/UTF-8-demo.txt",
    "content": "\nUTF-8 encoded sample plain-text file\n‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\n\nMarkus Kuhn [ˈmaʳkʊs kuːn] <http://www.cl.cam.ac.uk/~mgk25/> — 2002-07-25 CC BY\n\n\nThe ASCII compatible UTF-8 encoding used in this plain-text file\nis defined in Unicode, ISO 10646-1, and RFC 2279.\n\n\nUsing Unicode/UTF-8, you can write in emails and source code things such as\n\nMathematics and sciences:\n\n  ∮ E⋅da = Q,  n → ∞, ∑ f(i) = ∏ g(i),      ⎧⎡⎛┌─────┐⎞⎤⎫\n                                            ⎪⎢⎜│a²+b³ ⎟⎥⎪\n  ∀x∈ℝ: ⌈x⌉ = −⌊−x⌋, α ∧ ¬β = ¬(¬α ∨ β),    ⎪⎢⎜│───── ⎟⎥⎪\n                                            ⎪⎢⎜⎷ c₈   ⎟⎥⎪\n  ℕ ⊆ ℕ₀ ⊂ ℤ ⊂ ℚ ⊂ ℝ ⊂ ℂ,                   ⎨⎢⎜       ⎟⎥⎬\n                                            ⎪⎢⎜ ∞     ⎟⎥⎪\n  ⊥ < a ≠ b ≡ c ≤ d ≪ ⊤ ⇒ (⟦A⟧ ⇔ ⟪B⟫),      ⎪⎢⎜ ⎲     ⎟⎥⎪\n                                            ⎪⎢⎜ ⎳aⁱ-bⁱ⎟⎥⎪\n  2H₂ + O₂ ⇌ 2H₂O, R = 4.7 kΩ, ⌀ 200 mm     ⎩⎣⎝i=1    ⎠⎦⎭\n\nLinguistics and dictionaries:\n\n  ði ıntəˈnæʃənəl fəˈnɛtık əsoʊsiˈeıʃn\n  Y [ˈʏpsilɔn], Yen [jɛn], Yoga [ˈjoːgɑ]\n\nAPL:\n\n  ((V⍳V)=⍳⍴V)/V←,V    ⌷←⍳→⍴∆∇⊃‾⍎⍕⌈\n\nNicer typography in plain text files:\n\n  ╔══════════════════════════════════════════╗\n  ║                                          ║\n  ║   • ‘single’ and “double” quotes         ║\n  ║                                          ║\n  ║   • Curly apostrophes: “We’ve been here” ║\n  ║                                          ║\n  ║   • Latin-1 apostrophe and accents: '´`  ║\n  ║                                          ║\n  ║   • ‚deutsche‘ „Anführungszeichen“       ║\n  ║                                          ║\n  ║   • †, ‡, ‰, •, 3–4, —, −5/+5, ™, …      ║\n  ║                                          ║\n  ║   • ASCII safety test: 1lI|, 0OD, 8B     ║\n  ║                      ╭─────────╮         ║\n  ║   • the euro symbol: │ 14.95 € │         ║\n  ║                      ╰─────────╯         ║\n  ╚══════════════════════════════════════════╝\n\nCombining characters:\n\n  STARGΛ̊TE SG-1, a = v̇ = r̈, a⃑ ⊥ b⃑\n\nGreek (in Polytonic):\n\n  The Greek anthem:\n\n  Σὲ γνωρίζω ἀπὸ τὴν κόψη\n  τοῦ σπαθιοῦ τὴν τρομερή,\n  σὲ γνωρίζω ἀπὸ τὴν ὄψη\n  ποὺ μὲ βία μετράει τὴ γῆ.\n\n  ᾿Απ᾿ τὰ κόκκαλα βγαλμένη\n  τῶν ῾Ελλήνων τὰ ἱερά\n  καὶ σὰν πρῶτα ἀνδρειωμένη\n  χαῖρε, ὦ χαῖρε, ᾿Ελευθεριά!\n\n  From a speech of Demosthenes in the 4th century BC:\n\n  Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι,\n  ὅταν τ᾿ εἰς τὰ πράγματα ἀποβλέψω καὶ ὅταν πρὸς τοὺς\n  λόγους οὓς ἀκούω· τοὺς μὲν γὰρ λόγους περὶ τοῦ\n  τιμωρήσασθαι Φίλιππον ὁρῶ γιγνομένους, τὰ δὲ πράγματ᾿\n  εἰς τοῦτο προήκοντα,  ὥσθ᾿ ὅπως μὴ πεισόμεθ᾿ αὐτοὶ\n  πρότερον κακῶς σκέψασθαι δέον. οὐδέν οὖν ἄλλο μοι δοκοῦσιν\n  οἱ τὰ τοιαῦτα λέγοντες ἢ τὴν ὑπόθεσιν, περὶ ἧς βουλεύεσθαι,\n  οὐχὶ τὴν οὖσαν παριστάντες ὑμῖν ἁμαρτάνειν. ἐγὼ δέ, ὅτι μέν\n  ποτ᾿ ἐξῆν τῇ πόλει καὶ τὰ αὑτῆς ἔχειν ἀσφαλῶς καὶ Φίλιππον\n  τιμωρήσασθαι, καὶ μάλ᾿ ἀκριβῶς οἶδα· ἐπ᾿ ἐμοῦ γάρ, οὐ πάλαι\n  γέγονεν ταῦτ᾿ ἀμφότερα· νῦν μέντοι πέπεισμαι τοῦθ᾿ ἱκανὸν\n  προλαβεῖν ἡμῖν εἶναι τὴν πρώτην, ὅπως τοὺς συμμάχους\n  σώσομεν. ἐὰν γὰρ τοῦτο βεβαίως ὑπάρξῃ, τότε καὶ περὶ τοῦ\n  τίνα τιμωρήσεταί τις καὶ ὃν τρόπον ἐξέσται σκοπεῖν· πρὶν δὲ\n  τὴν ἀρχὴν ὀρθῶς ὑποθέσθαι, μάταιον ἡγοῦμαι περὶ τῆς\n  τελευτῆς ὁντινοῦν ποιεῖσθαι λόγον.\n\n  Δημοσθένους, Γ´ ᾿Ολυνθιακὸς\n\nGeorgian:\n\n  From a Unicode conference invitation:\n\n  გთხოვთ ახლავე გაიაროთ რეგისტრაცია Unicode-ის მეათე საერთაშორისო\n  კონფერენციაზე დასასწრებად, რომელიც გაიმართება 10-12 მარტს,\n  ქ. მაინცში, გერმანიაში. კონფერენცია შეჰკრებს ერთად მსოფლიოს\n  ექსპერტებს ისეთ დარგებში როგორიცაა ინტერნეტი და Unicode-ი,\n  ინტერნაციონალიზაცია და ლოკალიზაცია, Unicode-ის გამოყენება\n  ოპერაციულ სისტემებსა, და გამოყენებით პროგრამებში, შრიფტებში,\n  ტექსტების დამუშავებასა და მრავალენოვან კომპიუტერულ სისტემებში.\n\nRussian:\n\n  From a Unicode conference invitation:\n\n  Зарегистрируйтесь сейчас на Десятую Международную Конференцию по\n  Unicode, которая состоится 10-12 марта 1997 года в Майнце в Германии.\n  Конференция соберет широкий круг экспертов по  вопросам глобального\n  Интернета и Unicode, локализации и интернационализации, воплощению и\n  применению Unicode в различных операционных системах и программных\n  приложениях, шрифтах, верстке и многоязычных компьютерных системах.\n\nThai (UCS Level 2):\n\n  Excerpt from a poetry on The Romance of The Three Kingdoms (a Chinese\n  classic 'San Gua'):\n\n  [----------------------------|------------------------]\n    ๏ แผ่นดินฮั่นเสื่อมโทรมแสนสังเวช  พระปกเกศกองบู๊กู้ขึ้นใหม่\n  สิบสองกษัตริย์ก่อนหน้าแลถัดไป       สององค์ไซร้โง่เขลาเบาปัญญา\n    ทรงนับถือขันทีเป็นที่พึ่ง           บ้านเมืองจึงวิปริตเป็นนักหนา\n  โฮจิ๋นเรียกทัพทั่วหัวเมืองมา         หมายจะฆ่ามดชั่วตัวสำคัญ\n    เหมือนขับไสไล่เสือจากเคหา      รับหมาป่าเข้ามาเลยอาสัญ\n  ฝ่ายอ้องอุ้นยุแยกให้แตกกัน          ใช้สาวนั้นเป็นชนวนชื่นชวนใจ\n    พลันลิฉุยกุยกีกลับก่อเหตุ          ช่างอาเพศจริงหนาฟ้าร้องไห้\n  ต้องรบราฆ่าฟันจนบรรลัย           ฤๅหาใครค้ำชูกู้บรรลังก์ ฯ\n\n  (The above is a two-column text. If combining characters are handled\n  correctly, the lines of the second column should be aligned with the\n  | character above.)\n\nEthiopian:\n\n  Proverbs in the Amharic language:\n\n  ሰማይ አይታረስ ንጉሥ አይከሰስ።\n  ብላ ካለኝ እንደአባቴ በቆመጠኝ።\n  ጌጥ ያለቤቱ ቁምጥና ነው።\n  ደሀ በሕልሙ ቅቤ ባይጠጣ ንጣት በገደለው።\n  የአፍ ወለምታ በቅቤ አይታሽም።\n  አይጥ በበላ ዳዋ ተመታ።\n  ሲተረጉሙ ይደረግሙ።\n  ቀስ በቀስ፥ ዕንቁላል በእግሩ ይሄዳል።\n  ድር ቢያብር አንበሳ ያስር።\n  ሰው እንደቤቱ እንጅ እንደ ጉረቤቱ አይተዳደርም።\n  እግዜር የከፈተውን ጉሮሮ ሳይዘጋው አይድርም።\n  የጎረቤት ሌባ፥ ቢያዩት ይስቅ ባያዩት ያጠልቅ።\n  ሥራ ከመፍታት ልጄን ላፋታት።\n  ዓባይ ማደሪያ የለው፥ ግንድ ይዞ ይዞራል።\n  የእስላም አገሩ መካ የአሞራ አገሩ ዋርካ።\n  ተንጋሎ ቢተፉ ተመልሶ ባፉ።\n  ወዳጅህ ማር ቢሆን ጨርስህ አትላሰው።\n  እግርህን በፍራሽህ ልክ ዘርጋ።\n\nRunes:\n\n  ᚻᛖ ᚳᚹᚫᚦ ᚦᚫᛏ ᚻᛖ ᛒᚢᛞᛖ ᚩᚾ ᚦᚫᛗ ᛚᚪᚾᛞᛖ ᚾᚩᚱᚦᚹᛖᚪᚱᛞᚢᛗ ᚹᛁᚦ ᚦᚪ ᚹᛖᛥᚫ\n\n  (Old English, which transcribed into Latin reads 'He cwaeth that he\n  bude thaem lande northweardum with tha Westsae.' and means 'He said\n  that he lived in the northern land near the Western Sea.')\n\nBraille:\n\n  ⡌⠁⠧⠑ ⠼⠁⠒  ⡍⠜⠇⠑⠹⠰⠎ ⡣⠕⠌\n\n  ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠙⠑⠁⠙⠒ ⠞⠕ ⠃⠑⠛⠔ ⠺⠊⠹⠲ ⡹⠻⠑ ⠊⠎ ⠝⠕ ⠙⠳⠃⠞\n  ⠱⠁⠞⠑⠧⠻ ⠁⠃⠳⠞ ⠹⠁⠞⠲ ⡹⠑ ⠗⠑⠛⠊⠌⠻ ⠕⠋ ⠙⠊⠎ ⠃⠥⠗⠊⠁⠇ ⠺⠁⠎\n  ⠎⠊⠛⠝⠫ ⠃⠹ ⠹⠑ ⠊⠇⠻⠛⠹⠍⠁⠝⠂ ⠹⠑ ⠊⠇⠻⠅⠂ ⠹⠑ ⠥⠝⠙⠻⠞⠁⠅⠻⠂\n  ⠁⠝⠙ ⠹⠑ ⠡⠊⠑⠋ ⠍⠳⠗⠝⠻⠲ ⡎⠊⠗⠕⠕⠛⠑ ⠎⠊⠛⠝⠫ ⠊⠞⠲ ⡁⠝⠙\n  ⡎⠊⠗⠕⠕⠛⠑⠰⠎ ⠝⠁⠍⠑ ⠺⠁⠎ ⠛⠕⠕⠙ ⠥⠏⠕⠝ ⠰⡡⠁⠝⠛⠑⠂ ⠋⠕⠗ ⠁⠝⠹⠹⠔⠛ ⠙⠑\n  ⠡⠕⠎⠑ ⠞⠕ ⠏⠥⠞ ⠙⠊⠎ ⠙⠁⠝⠙ ⠞⠕⠲\n\n  ⡕⠇⠙ ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲\n\n  ⡍⠔⠙⠖ ⡊ ⠙⠕⠝⠰⠞ ⠍⠑⠁⠝ ⠞⠕ ⠎⠁⠹ ⠹⠁⠞ ⡊ ⠅⠝⠪⠂ ⠕⠋ ⠍⠹\n  ⠪⠝ ⠅⠝⠪⠇⠫⠛⠑⠂ ⠱⠁⠞ ⠹⠻⠑ ⠊⠎ ⠏⠜⠞⠊⠊⠥⠇⠜⠇⠹ ⠙⠑⠁⠙ ⠁⠃⠳⠞\n  ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲ ⡊ ⠍⠊⠣⠞ ⠙⠁⠧⠑ ⠃⠑⠲ ⠔⠊⠇⠔⠫⠂ ⠍⠹⠎⠑⠇⠋⠂ ⠞⠕\n  ⠗⠑⠛⠜⠙ ⠁ ⠊⠕⠋⠋⠔⠤⠝⠁⠊⠇ ⠁⠎ ⠹⠑ ⠙⠑⠁⠙⠑⠌ ⠏⠊⠑⠊⠑ ⠕⠋ ⠊⠗⠕⠝⠍⠕⠝⠛⠻⠹\n  ⠔ ⠹⠑ ⠞⠗⠁⠙⠑⠲ ⡃⠥⠞ ⠹⠑ ⠺⠊⠎⠙⠕⠍ ⠕⠋ ⠳⠗ ⠁⠝⠊⠑⠌⠕⠗⠎\n  ⠊⠎ ⠔ ⠹⠑ ⠎⠊⠍⠊⠇⠑⠆ ⠁⠝⠙ ⠍⠹ ⠥⠝⠙⠁⠇⠇⠪⠫ ⠙⠁⠝⠙⠎\n  ⠩⠁⠇⠇ ⠝⠕⠞ ⠙⠊⠌⠥⠗⠃ ⠊⠞⠂ ⠕⠗ ⠹⠑ ⡊⠳⠝⠞⠗⠹⠰⠎ ⠙⠕⠝⠑ ⠋⠕⠗⠲ ⡹⠳\n  ⠺⠊⠇⠇ ⠹⠻⠑⠋⠕⠗⠑ ⠏⠻⠍⠊⠞ ⠍⠑ ⠞⠕ ⠗⠑⠏⠑⠁⠞⠂ ⠑⠍⠏⠙⠁⠞⠊⠊⠁⠇⠇⠹⠂ ⠹⠁⠞\n  ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲\n\n  (The first couple of paragraphs of \"A Christmas Carol\" by Dickens)\n\nCompact font selection example text:\n\n  ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789\n  abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ\n  –—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвгд\n  ∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ ﬁ�⑀₂ἠḂӥẄɐː⍎אԱა\n\nGreetings in various languages:\n\n  Hello world, Καλημέρα κόσμε, コンニチハ\n\nBox drawing alignment tests:                                          █\n                                                                      ▉\n  ╔══╦══╗  ┌──┬──┐  ╭──┬──╮  ╭──┬──╮  ┏━━┳━━┓  ┎┒┏┑   ╷  ╻ ┏┯┓ ┌┰┐    ▊ ╱╲╱╲╳╳╳\n  ║┌─╨─┐║  │╔═╧═╗│  │╒═╪═╕│  │╓─╁─╖│  ┃┌─╂─┐┃  ┗╃╄┙  ╶┼╴╺╋╸┠┼┨ ┝╋┥    ▋ ╲╱╲╱╳╳╳\n  ║│╲ ╱│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╿ │┃  ┍╅╆┓   ╵  ╹ ┗┷┛ └┸┘    ▌ ╱╲╱╲╳╳╳\n  ╠╡ ╳ ╞╣  ├╢   ╟┤  ├┼─┼─┼┤  ├╫─╂─╫┤  ┣┿╾┼╼┿┫  ┕┛┖┚     ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳\n  ║│╱ ╲│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╽ │┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▎\n  ║└─╥─┘║  │╚═╤═╝│  │╘═╪═╛│  │╙─╀─╜│  ┃└─╂─┘┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▏\n  ╚══╩══╝  └──┴──┘  ╰──┴──╯  ╰──┴──╯  ┗━━┻━━┛  ▗▄▖▛▀▜   └╌╌┘ ╎ ┗╍╍┛ ┋  ▁▂▃▄▅▆▇█\n                                               ▝▀▘▙▄▟\n"
  },
  {
    "path": "sample_data/a.tsv",
    "content": "key\tsource_sheet\na_only\ta\nboth\ta\n"
  },
  {
    "path": "sample_data/b.tsv",
    "content": "key\tsource_sheet\nb_only\tb\nboth\tb\n"
  },
  {
    "path": "sample_data/benchmark.csv",
    "content": "Date,Customer,SKU,Item,Quantity,Unit,Paid\r\n7/3/2018 1:47p,Robert Armstrong,FOOD213,BFF Oh My Gravy! Beef & Salmon 2.8oz,4,$12.95,$51.8\r\n7/3/2018 3:32p,Kyle Kennedy,FOOD121,\"Food, Adult Cat - 3.5 oz\",1,$4.22,$4.22\r\n7/5/2018 4:15p,\"Douglas \"\"Dougie\"\" Powers\",FOOD121,\"Food, Adult Cat 3.5 oz\",1,$4.22,$4.22\r\n7/6/2018 12:15p,桜 高橋 (Sakura Takahashi),FOOD122,\"Food, Senior Wet Cat - 3 oz\",12,$1.29,157¥\r\n7/10/2018 10:28a,David Attenborough,NSCT201,\"Food, Salamander\",30,$.05,$1.5\r\n7/10/2018 5:23p,Susan Ashworth,CAT060,\"Cat, Korat (Felis catus)\",1,$720.42,$720.42\r\n7/10/2018 5:23p,Susan Ashworth,FOOD130,\"Food, Kitten 3kg\",1,$14.94,$14.94\r\n7/13/2018 10:26a,Wil Wheaton,NSCT523,\"Monster, Rust (Monstrus gygaxus)\",1,$39.95,$39.95\r\n7/13/2018 3:49p,Robert Armstrong,FOOD216,BFF Oh My Gravy! Chicken & Shrimp 2.8oz,4,$12.95,$51.8\r\n7/17/2018 9:01a,Robert Armstrong,FOOD217,BFF Oh My Gravy! Duck & Tuna 2.8oz,4,$12.95,$51.8\r\n7/17/2018 11:30a,Helen Halestorm,LAGO342,Rabbit (Oryctolagus cuniculus),2,$32.94,$65.88\r\n7/18/2018 12:16p,桜 高橋 (Sakura Takahashi),FOOD122,\"Food, Senior Wet Cat - 3 oz\",6,$1.29,157¥\r\n7/19/2018 10:28a,Rubeus Hagrid,FOOD170,\"Food, Dog - 5kg\",5,$44.95,$224.75\r\n7/20/2018 2:13p,Jon Arbuckle,FOOD167,\"Food, Premium Wet Cat - 3.5 oz\",50,$3.95,$197.5\r\n7/23/2018 1:41p,Robert Armstrong,FOOD215,BFF Oh My Gravy! Lamb & Tuna 2.8oz,4,$12.95,$51.8\r\n7/23/2018 4:23p,\"Douglas \"\"Dougie\"\" Powers\",TOY235,Laser Pointer,1,$16.12,$16.12\r\n7/24/2018 12:16p,桜 高橋 (Sakura Takahashi),FOOD122,\"Food, Senior Wet Cat - 3 oz\",3,$1.29,157¥\r\n7/26/2018 4:39p,\"Douglas \"\"Dougie\"\" Powers\",FOOD420,\"Food, Shark - 10 kg\",1,$15.70,$15.7\r\n7/27/2018 12:16p,桜 高橋 (Sakura Takahashi),FOOD122,\"Food, Senior Wet Cat - 3 oz\",3,$1.29,157¥\r\n7/30/2018 12:17p,桜 高橋 (Sakura Takahashi),RETURN,\"Food, Senior Wet Cat - 3 oz\",1,$1.29,157¥\r\n7/31/2018 5:42p,Rubeus Hagrid,CAT060,\"Food, Dragon - 50kg\",5,$720.42,$3602.1\r\n8/1/2018 2:44p,David Attenborough,FOOD360,\"Food, Rhinocerous - 50kg\",4,$5.72,$22.88\r\n8/2/2018 5:12p,Susan Ashworth,CAT110,\"Cat, Maine Coon (Felix catus)\",1,\"$1,309.68\",$1309.68\r\n8/2/2018 5:12p,Susan Ashworth,FOOD130,\"Food, Kitten 3kg\",3,$14.94,$44.82\r\n8/6/2018 10:21a,Robert Armstrong,FOOD212,BFF Oh My Gravy! Beef & Chicken 2.8oz,4,$12.95,$51.8\r\n8/7/2018 4:12p,Juan Johnson,REPT082,\"Kingsnake, California (Lampropeltis getula)\",1,$89.95,$89.95\r\n8/7/2018 4:12p,Juan Johnson,RDNT443,\"Mouse, Pinky (Mus musculus)\",1,$1.49,$1.49\r\n8/10/2018 4:31p,Robert Armstrong,FOOD211,BFF Oh My Gravy! Chicken & Turkey 2.8oz,4,$12.95,$51.8\r\n8/13/2018 2:07p,Monica Johnson,RDNT443,\"Mouse, Pinky (Mus musculus)\",1,$1.49,$1.49\r\n8/13/2018 2:08p,María Fernández,FOOD146,Forti Diet Prohealth Mouse/Rat 3lbs,2,$2.00,$4.0\r\n8/15/2018 11:57a,Mr. Praline,RETURN,\"Parrot, Norwegian Blue (Mopsitta tanta)\",1,$2300.00,-$2300.0\r\n8/15/2018 3:48p,Kyle Kennedy,FOOD121,\"Food, Adult Cat - 3.5 oz\",2,$4.22,$8.44\r\n8/16/2018 11:50a,Helen Halestorm,RETURN,Rabbit (Oryctolagus cuniculus),6,$0,$0.0\r\n8/16/2018 4:00p,Kyle Kennedy,DOG010,\"Dog, Golden Retriever (Canis lupus familiaris)\",1,\"$2,495.99\",$2495.99\r\n8/16/2018 5:15p,Michael Smith,BIRD160,\"Parakeet, Blue (Melopsittacus undulatus)\",1,29.95,$31.85\r\n8/17/2018 9:26a,Rubeus Hagrid,NSCT201,\"Food, Spider\",5,$.05,$0.25\r\n8/20/2018 9:36a,Kyle Kennedy,RETURN,\"Dog, Golden Retriever (Canis lupus familiaris)\",1,\"$1,247.99\",-$1247.99\r\n8/20/2018 1:47p,מרוסיה ניסנהולץ אבולעפיה,GOAT224,\"Goat, American Pygmy (Capra hircus)\",1,₪499,$160.51\r\n8/20/2018 3:31p,Monica Johnson,NSCT201,\"Crickets, Adult Live (Gryllus assimilis)\",30,$.05,$1.5\r\n8/20/2018 5:12p,David Attenborough,NSCT084,\"Food, Pangolin\",30,$.17,$5.10\r\n8/21/2018 12:13p,Robert Armstrong,FOOD214,BFF Oh My Gravy! Duck & Salmon 2.8oz,4,$12.95,$51.8\r\n8/22/2018 9:38a,David Attenborough,BIRD160,\"Food, Quoll\",1,29.95,$29.95\r\n8/22/2018 2:13p,Jon Arbuckle,FOOD170,\"Food, Adult Dog - 5kg\",1,$44.95,$44.95\r\n8/22/2018 5:49p,מרוסיה ניסנהולץ,SFTY052,\"Fire Extinguisher, kitchen-rated\",1,$61.70,$61.70\r\n8/24/2018 11:42a,Robert Armstrong,FOOD218,BFF Oh My Gravy! Chicken & Salmon 2.8oz,4,$12.95,$51.8\r\n8/27/2018 3:05p,Monica Johnson,NSCT443,\"Mealworms, Large (Tenebrio molitor) 100ct\",1,$1.99,$1.99\r\n8/28/2018 5:32p,Susan Ashworth,CAT020,\"Cat, Scottish Fold (Felis catus)\",1,\"$1,964.53\",$1964.53\r\n8/28/2018 5:32p,Susan Ashworth,FOOD130,\"Food, Kitten 3kg\",2,$14.94,$29.88\r\n8/29/2018 10:07a,Robert Armstrong,FOOD219,BFF Oh My Gravy! Chicken & Pumpkin 2.8oz,4,$12.95,$51.8\r\n8/31/2018 12:00a,Robert Armstrong,FOOD219,BFF Oh My Gravy! Chicken & Pumpkin 2.8oz,144,$12.95,$1864.8\r\n8/31/2018 5:57p,Juan Johnson,REPT217,\"Lizard, Spinytail (Uromastyx ornatus)\",1,$99.95,$99.95\r\n"
  },
  {
    "path": "sample_data/benchmark.fixed",
    "content": "Date             Customer                   SKU     Item                                           Quantity Unit      Paid      \n7/3/2018 1:47p   Robert Armstrong           FOOD213 BFF Oh My Gravy! Beef & Salmon 2.8oz           4        $12.95    $51.8     \n7/3/2018 3:32p   Kyle Kennedy               FOOD121 Food, Adult Cat - 3.5 oz                       1        $4.22     $4.22     \n7/5/2018 4:15p   Douglas \"Dougie\" Powers    FOOD121 Food, Adult Cat 3.5 oz                         1        $4.22     $4.22     \n7/6/2018 12:15p  桜 高橋 (Sakura Takahashi)    FOOD122 Food, Senior Wet Cat - 3 oz                    12       $1.29     157¥      \n7/10/2018 10:28a David Attenborough         NSCT201 Food, Salamander                               30       $.05      $1.5      \n7/10/2018 5:23p  Susan Ashworth             CAT060  Cat, Korat (Felis catus)                       1        $720.42   $720.42   \n7/10/2018 5:23p  Susan Ashworth             FOOD130 Food, Kitten 3kg                               1        $14.94    $14.94    \n7/13/2018 10:26a Wil Wheaton                NSCT523 Monster, Rust (Monstrus gygaxus)               1        $39.95    $39.95    \n7/13/2018 3:49p  Robert Armstrong           FOOD216 BFF Oh My Gravy! Chicken & Shrimp 2.8oz        4        $12.95    $51.8     \n7/17/2018 9:01a  Robert Armstrong           FOOD217 BFF Oh My Gravy! Duck & Tuna 2.8oz             4        $12.95    $51.8     \n7/17/2018 11:30a Helen Halestorm            LAGO342 Rabbit (Oryctolagus cuniculus)                 2        $32.94    $65.88    \n7/18/2018 12:16p 桜 高橋 (Sakura Takahashi)    FOOD122 Food, Senior Wet Cat - 3 oz                    6        $1.29     157¥      \n7/19/2018 10:28a Rubeus Hagrid              FOOD170 Food, Dog - 5kg                                5        $44.95    $224.75   \n7/20/2018 2:13p  Jon Arbuckle               FOOD167 Food, Premium Wet Cat - 3.5 oz                 50       $3.95     $197.5    \n7/23/2018 1:41p  Robert Armstrong           FOOD215 BFF Oh My Gravy! Lamb & Tuna 2.8oz             4        $12.95    $51.8     \n7/23/2018 4:23p  Douglas \"Dougie\" Powers    TOY235  Laser Pointer                                  1        $16.12    $16.12    \n7/24/2018 12:16p 桜 高橋 (Sakura Takahashi)    FOOD122 Food, Senior Wet Cat - 3 oz                    3        $1.29     157¥      \n7/26/2018 4:39p  Douglas \"Dougie\" Powers    FOOD420 Food, Shark - 10 kg                            1        $15.70    $15.7     \n7/27/2018 12:16p 桜 高橋 (Sakura Takahashi)    FOOD122 Food, Senior Wet Cat - 3 oz                    3        $1.29     157¥      \n7/30/2018 12:17p 桜 高橋 (Sakura Takahashi)    RETURN  Food, Senior Wet Cat - 3 oz                    1        $1.29     157¥      \n7/31/2018 5:42p  Rubeus Hagrid              CAT060  Food, Dragon - 50kg                            5        $720.42   $3602.1   \n8/1/2018 2:44p   David Attenborough         FOOD360 Food, Rhinocerous - 50kg                       4        $5.72     $22.88    \n8/2/2018 5:12p   Susan Ashworth             CAT110  Cat, Maine Coon (Felix catus)                  1        $1,309.68 $1309.68  \n8/2/2018 5:12p   Susan Ashworth             FOOD130 Food, Kitten 3kg                               3        $14.94    $44.82    \n8/6/2018 10:21a  Robert Armstrong           FOOD212 BFF Oh My Gravy! Beef & Chicken 2.8oz          4        $12.95    $51.8     \n8/7/2018 4:12p   Juan Johnson               REPT082 Kingsnake, California (Lampropeltis getula)    1        $89.95    $89.95    \n8/7/2018 4:12p   Juan Johnson               RDNT443 Mouse, Pinky (Mus musculus)                    1        $1.49     $1.49     \n8/10/2018 4:31p  Robert Armstrong           FOOD211 BFF Oh My Gravy! Chicken & Turkey 2.8oz        4        $12.95    $51.8     \n8/13/2018 2:07p  Monica Johnson             RDNT443 Mouse, Pinky (Mus musculus)                    1        $1.49     $1.49     \n8/13/2018 2:08p  María Fernández            FOOD146 Forti Diet Prohealth Mouse/Rat 3lbs            2        $2.00     $4.0      \n8/15/2018 11:57a Mr. Praline                RETURN  Parrot, Norwegian Blue (Mopsitta tanta)        1        $2300.00  -$2300.0  \n8/15/2018 3:48p  Kyle Kennedy               FOOD121 Food, Adult Cat - 3.5 oz                       2        $4.22     $8.44     \n8/16/2018 11:50a Helen Halestorm            RETURN  Rabbit (Oryctolagus cuniculus)                 6        $0        $0.0      \n8/16/2018 4:00p  Kyle Kennedy               DOG010  Dog, Golden Retriever (Canis lupus familiaris) 1        $2,495.99 $2495.99  \n8/16/2018 5:15p  Michael Smith              BIRD160 Parakeet, Blue (Melopsittacus undulatus)       1        29.95     $31.85    \n8/17/2018 9:26a  Rubeus Hagrid              NSCT201 Food, Spider                                   5        $.05      $0.25     \n8/20/2018 9:36a  Kyle Kennedy               RETURN  Dog, Golden Retriever (Canis lupus familiaris) 1        $1,247.99 -$1247.99 \n8/20/2018 1:47p  מרוסיה ניסנהולץ אבולעפיה   GOAT224 Goat, American Pygmy (Capra hircus)            1        ₪499      $160.51   \n8/20/2018 3:31p  Monica Johnson             NSCT201 Crickets, Adult Live (Gryllus assimilis)       30       $.05      $1.5      \n8/20/2018 5:12p  David Attenborough         NSCT084 Food, Pangolin                                 30       $.17      $5.10     \n8/21/2018 12:13p Robert Armstrong           FOOD214 BFF Oh My Gravy! Duck & Salmon 2.8oz           4        $12.95    $51.8     \n8/22/2018 9:38a  David Attenborough         BIRD160 Food, Quoll                                    1        29.95     $29.95    \n8/22/2018 2:13p  Jon Arbuckle               FOOD170 Food, Adult Dog - 5kg                          1        $44.95    $44.95    \n8/22/2018 5:49p  מרוסיה ניסנהולץ            SFTY052 Fire Extinguisher, kitchen-rated               1        $61.70    $61.70    \n8/24/2018 11:42a Robert Armstrong           FOOD218 BFF Oh My Gravy! Chicken & Salmon 2.8oz        4        $12.95    $51.8     \n8/27/2018 3:05p  Monica Johnson             NSCT443 Mealworms, Large (Tenebrio molitor) 100ct      1        $1.99     $1.99     \n8/28/2018 5:32p  Susan Ashworth             CAT020  Cat, Scottish Fold (Felis catus)               1        $1,964.53 $1964.53  \n8/28/2018 5:32p  Susan Ashworth             FOOD130 Food, Kitten 3kg                               2        $14.94    $29.88    \n8/29/2018 10:07a Robert Armstrong           FOOD219 BFF Oh My Gravy! Chicken & Pumpkin 2.8oz       4        $12.95    $51.8     \n8/31/2018 12:00a Robert Armstrong           FOOD219 BFF Oh My Gravy! Chicken & Pumpkin 2.8oz       144      $12.95    $1864.8   \n8/31/2018 5:57p  Juan Johnson               REPT217 Lizard, Spinytail (Uromastyx ornatus)          1        $99.95    $99.95    \n"
  },
  {
    "path": "sample_data/benchmark.jsonl",
    "content": "# comment\n{\"Date\": \"7/3/2018 1:47p\", \"Customer\": [\"Robert Armstrong\", \"Dee Vasquez\"], \"SKU\": \"FOOD213\", \"Item\": \"BFF Oh My Gravy! Beef & Salmon 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"7/3/2018 3:32p\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat - 3.5 oz\", \"Quantity\": \"1\", \"Unit\": \"$4.22\", \"Paid\": \"$4.22\"}\n{\"Date\": \"7/5/2018 4:15p\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat 3.5 oz\", \"Quantity\": \"1\", \"Unit\": \"$4.22\", \"Paid\": \"$4.22\"}\n{\"Date\": \"7/6/2018 12:15p\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"12\", \"Unit\": \"$1.29\", \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"7/10/2018 10:28a\", \"Customer\": \"David Attenborough\", \"SKU\": \"NSCT201\", \"Item\": \"Food, Salamander\", \"Quantity\": \"30\", \"Unit\": \"$.05\", \"Paid\": \"$1.5\"}\n{\"Date\": \"7/10/2018 5:23p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT060\", \"Item\": \"Cat, Korat (Felis catus)\", \"Quantity\": \"1\", \"Unit\": \"$720.42\", \"Paid\": \"$720.42\"}\n{\"Date\": \"7/10/2018 5:23p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": \"1\", \"Unit\": \"$14.94\", \"Paid\": \"$14.94\"}\n{\"Date\": \"7/13/2018 10:26a\", \"Customer\": \"Wil Wheaton\", \"SKU\": \"NSCT523\", \"Item\": \"Monster, Rust (Monstrus gygaxus)\", \"Quantity\": \"1\", \"Unit\": \"$39.95\", \"Paid\": \"$39.95\"}\n{\"Date\": \"7/13/2018 3:49p\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD216\", \"Item\": \"BFF Oh My Gravy! Chicken & Shrimp 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"7/17/2018 9:01a\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD217\", \"Item\": \"BFF Oh My Gravy! Duck & Tuna 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"7/17/2018 11:30a\", \"Customer\": \"Helen Halestorm\", \"SKU\": \"LAGO342\", \"Item\": \"Rabbit (Oryctolagus cuniculus)\", \"Quantity\": \"2\", \"Unit\": \"$32.94\", \"Paid\": \"$65.88\"}\n{\"Date\": \"7/18/2018 12:16p\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"6\", \"Unit\": \"$1.29\", \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"7/19/2018 10:28a\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"FOOD170\", \"Item\": \"Food, Dog - 5kg\", \"Quantity\": \"5\", \"Unit\": \"$44.95\", \"Paid\": \"$224.75\"}\n{\"Date\": \"7/20/2018 2:13p\", \"Customer\": \"Jon Arbuckle\", \"SKU\": \"FOOD167\", \"Item\": \"Food, Premium Wet Cat - 3.5 oz\", \"Quantity\": \"50\", \"Unit\": \"$3.95\", \"Paid\": \"$197.5\"}\n{\"Date\": \"7/23/2018 1:41p\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD215\", \"Item\": \"BFF Oh My Gravy! Lamb & Tuna 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"7/23/2018 4:23p\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"TOY235\", \"Item\": \"Laser Pointer\", \"Quantity\": \"1\", \"Unit\": \"$16.12\", \"Paid\": \"$16.12\"}\n{\"Date\": \"7/24/2018 12:16p\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"3\", \"Unit\": \"$1.29\", \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"7/26/2018 4:39p\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"FOOD420\", \"Item\": \"Food, Shark - 10 kg\", \"Quantity\": \"1\", \"Unit\": \"$15.70\", \"Paid\": \"$15.7\"}\n{\"Date\": \"7/27/2018 12:16p\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"3\", \"Unit\": \"$1.29\", \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"7/30/2018 12:17p\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"RETURN\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"1\", \"Unit\": \"$1.29\", \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"7/31/2018 5:42p\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"CAT060\", \"Item\": \"Food, Dragon - 50kg\", \"Quantity\": \"5\", \"Unit\": \"$720.42\", \"Paid\": \"$3602.1\"}\n{\"Date\": \"8/1/2018 2:44p\", \"Customer\": \"David Attenborough\", \"SKU\": \"FOOD360\", \"Item\": \"Food, Rhinocerous - 50kg\", \"Quantity\": \"4\", \"Unit\": \"$5.72\", \"Paid\": \"$22.88\"}\n{\"Date\": \"8/2/2018 5:12p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT110\", \"Item\": \"Cat, Maine Coon (Felix catus)\", \"Quantity\": \"1\", \"Unit\": \"$1,309.68\", \"Paid\": \"$1309.68\"}\n{\"Date\": \"8/2/2018 5:12p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": \"3\", \"Unit\": \"$14.94\", \"Paid\": \"$44.82\"}\n{\"Date\": \"8/6/2018 10:21a\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD212\", \"Item\": \"BFF Oh My Gravy! Beef & Chicken 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"8/7/2018 4:12p\", \"Customer\": \"Juan Johnson\", \"SKU\": \"REPT082\", \"Item\": \"Kingsnake, California (Lampropeltis getula)\", \"Quantity\": \"1\", \"Unit\": \"$89.95\", \"Paid\": \"$89.95\"}\n{\"Date\": \"8/7/2018 4:12p\", \"Customer\": \"Juan Johnson\", \"SKU\": \"RDNT443\", \"Item\": \"Mouse, Pinky (Mus musculus)\", \"Quantity\": \"1\", \"Unit\": \"$1.49\", \"Paid\": \"$1.49\"}\n{\"Date\": \"8/10/2018 4:31p\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD211\", \"Item\": \"BFF Oh My Gravy! Chicken & Turkey 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"8/13/2018 2:07p\", \"Customer\": \"Monica Johnson\", \"SKU\": \"RDNT443\", \"Item\": \"Mouse, Pinky (Mus musculus)\", \"Quantity\": \"1\", \"Unit\": \"$1.49\", \"Paid\": \"$1.49\"}\n{\"Date\": \"8/13/2018 2:08p\", \"Customer\": \"Mar\\u00eda Fern\\u00e1ndez\", \"SKU\": \"FOOD146\", \"Item\": \"Forti Diet Prohealth Mouse/Rat 3lbs\", \"Quantity\": \"2\", \"Unit\": \"$2.00\", \"Paid\": \"$4.0\"}\n{\"Date\": \"8/15/2018 11:57a\", \"Customer\": \"Mr. Praline\", \"SKU\": \"RETURN\", \"Item\": \"Parrot, Norwegian Blue (Mopsitta tanta)\", \"Quantity\": \"1\", \"Unit\": \"$2300.00\", \"Paid\": \"-$2300.0\"}\n{\"Date\": \"8/15/2018 3:48p\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat - 3.5 oz\", \"Quantity\": \"2\", \"Unit\": \"$4.22\", \"Paid\": \"$8.44\"}\n{\"Date\": \"8/16/2018 11:50a\", \"Customer\": \"Helen Halestorm\", \"SKU\": \"RETURN\", \"Item\": \"Rabbit (Oryctolagus cuniculus)\", \"Quantity\": \"6\", \"Unit\": \"$0\", \"Paid\": \"$0.0\"}\n{\"Date\": \"8/16/2018 4:00p\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"DOG010\", \"Item\": \"Dog, Golden Retriever (Canis lupus familiaris)\", \"Quantity\": \"1\", \"Unit\": \"$2,495.99\", \"Paid\": \"$2495.99\"}\n{\"Date\": \"8/16/2018 5:15p\", \"Customer\": \"Michael Smith\", \"SKU\": \"BIRD160\", \"Item\": \"Parakeet, Blue (Melopsittacus undulatus)\", \"Quantity\": \"1\", \"Unit\": \"29.95\", \"Paid\": \"$31.85\"}\n{\"Date\": \"8/17/2018 9:26a\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"NSCT201\", \"Item\": \"Food, Spider\", \"Quantity\": \"5\", \"Unit\": \"$.05\", \"Paid\": \"$0.25\"}\n{\"Date\": \"8/20/2018 9:36a\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"RETURN\", \"Item\": \"Dog, Golden Retriever (Canis lupus familiaris)\", \"Quantity\": \"1\", \"Unit\": \"$1,247.99\", \"Paid\": \"-$1247.99\"}\n{\"Date\": \"8/20/2018 1:47p\", \"Customer\": \"\\u05de\\u05e8\\u05d5\\u05e1\\u05d9\\u05d4 \\u05e0\\u05d9\\u05e1\\u05e0\\u05d4\\u05d5\\u05dc\\u05e5 \\u05d0\\u05d1\\u05d5\\u05dc\\u05e2\\u05e4\\u05d9\\u05d4\", \"SKU\": \"GOAT224\", \"Item\": \"Goat, American Pygmy (Capra hircus)\", \"Quantity\": \"1\", \"Unit\": \"\\u20aa499\", \"Paid\": \"$160.51\"}\n{\"Date\": \"8/20/2018 3:31p\", \"Customer\": \"Monica Johnson\", \"SKU\": \"NSCT201\", \"Item\": \"Crickets, Adult Live (Gryllus assimilis)\", \"Quantity\": \"30\", \"Unit\": \"$.05\", \"Paid\": \"$1.5\"}\n{\"Date\": \"8/20/2018 5:12p\", \"Customer\": \"David Attenborough\", \"SKU\": \"NSCT084\", \"Item\": \"Food, Pangolin\", \"Quantity\": \"30\", \"Unit\": \"$.17\", \"Paid\": \"$5.10\"}\n{\"Date\": \"8/21/2018 12:13p\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD214\", \"Item\": \"BFF Oh My Gravy! Duck & Salmon 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"8/22/2018 9:38a\", \"Customer\": \"David Attenborough\", \"SKU\": \"BIRD160\", \"Item\": \"Food, Quoll\", \"Quantity\": \"1\", \"Unit\": \"29.95\", \"Paid\": \"$29.95\"}\n{\"Date\": \"8/22/2018 2:13p\", \"Customer\": \"Jon Arbuckle\", \"SKU\": \"FOOD170\", \"Item\": \"Food, Adult Dog - 5kg\", \"Quantity\": \"1\", \"Unit\": \"$44.95\", \"Paid\": \"$44.95\"}\n{\"Date\": \"8/22/2018 5:49p\", \"Customer\": \"\\u05de\\u05e8\\u05d5\\u05e1\\u05d9\\u05d4 \\u05e0\\u05d9\\u05e1\\u05e0\\u05d4\\u05d5\\u05dc\\u05e5\", \"SKU\": \"SFTY052\", \"Item\": \"Fire Extinguisher, kitchen-rated\", \"Quantity\": \"1\", \"Unit\": \"$61.70\", \"Paid\": \"$61.70\"}\n{\"Date\": \"8/24/2018 11:42a\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD218\", \"Item\": \"BFF Oh My Gravy! Chicken & Salmon 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"8/27/2018 3:05p\", \"Customer\": \"Monica Johnson\", \"SKU\": \"NSCT443\", \"Item\": \"Mealworms, Large (Tenebrio molitor) 100ct\", \"Quantity\": \"1\", \"Unit\": \"$1.99\", \"Paid\": \"$1.99\"}\n{\"Date\": \"8/28/2018 5:32p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT020\", \"Item\": \"Cat, Scottish Fold (Felis catus)\", \"Quantity\": \"1\", \"Unit\": \"$1,964.53\", \"Paid\": \"$1964.53\"}\n{\"Date\": \"8/28/2018 5:32p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": \"2\", \"Unit\": \"$14.94\", \"Paid\": \"$29.88\"}\n{\"Date\": \"8/29/2018 10:07a\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD219\", \"Item\": \"BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"8/31/2018 12:00a\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD219\", \"Item\": \"BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\", \"Quantity\": \"144\", \"Unit\": \"$12.95\", \"Paid\": \"$1864.8\"}\n{\"Date\": \"8/31/2018 5:57p\", \"Customer\": \"Juan Johnson\", \"SKU\": \"REPT217\", \"Item\": \"Lizard, Spinytail (Uromastyx ornatus)\", \"Quantity\": \"1\", \"Unit\": \"$99.95\", \"Paid\": \"$99.95\"}\n"
  },
  {
    "path": "sample_data/benchmark.lsv",
    "content": "Date: 7/3/2018 3:32p\nCustomer: Kyle Kennedy\nSKU: FOOD121\nItem: Food, Adult Cat - 3.5 oz\nQuantity: 1\nUnit: $4.22\nPaid: $4.22\n\nDate: 7/5/2018 4:15p\nCustomer: Douglas \"Dougie\" Powers\nSKU: FOOD121\nItem: Food, Adult Cat 3.5 oz\nQuantity: 1\nUnit: $4.22\nPaid: $4.22\n\nDate: 7/6/2018 12:15p\nCustomer: 桜 高橋 (Sakura Takahashi)\nSKU: FOOD122\nItem: Food, Senior Wet Cat - 3 oz\nQuantity: 12\nUnit: $1.29\nPaid: 157¥\n\nDate: 7/10/2018 10:28a\nCustomer: David Attenborough\nSKU: NSCT201\nItem: Food, Salamander\nQuantity: 30\nUnit: $.05\nPaid: $1.5\n\nDate: 7/10/2018 5:23p\nCustomer: Susan Ashworth\nSKU: CAT060\nItem: Cat, Korat (Felis catus)\nQuantity: 1\nUnit: $720.42\nPaid: $720.42\n\nDate: 7/10/2018 5:23p\nCustomer: Susan Ashworth\nSKU: FOOD130\nItem: Food, Kitten 3kg\nQuantity: 1\nUnit: $14.94\nPaid: $14.94\n\nDate: 7/13/2018 10:26a\nCustomer: Wil Wheaton\nSKU: NSCT523\nItem: Monster, Rust (Monstrus gygaxus)\nQuantity: 1\nUnit: $39.95\nPaid: $39.95\n\nDate: 7/13/2018 3:49p\nCustomer: Robert Armstrong\nSKU: FOOD216\nItem: BFF Oh My Gravy! Chicken & Shrimp 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 7/17/2018 9:01a\nCustomer: Robert Armstrong\nSKU: FOOD217\nItem: BFF Oh My Gravy! Duck & Tuna 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 7/17/2018 11:30a\nCustomer: Helen Halestorm\nSKU: LAGO342\nItem: Rabbit (Oryctolagus cuniculus)\nQuantity: 2\nUnit: $32.94\nPaid: $65.88\n\nDate: 7/18/2018 12:16p\nCustomer: 桜 高橋 (Sakura Takahashi)\nSKU: FOOD122\nItem: Food, Senior Wet Cat - 3 oz\nQuantity: 6\nUnit: $1.29\nPaid: 157¥\n\nDate: 7/19/2018 10:28a\nCustomer: Rubeus Hagrid\nSKU: FOOD170\nItem: Food, Dog - 5kg\nQuantity: 5\nUnit: $44.95\nPaid: $224.75\n\nDate: 7/20/2018 2:13p\nCustomer: Jon Arbuckle\nSKU: FOOD167\nItem: Food, Premium Wet Cat - 3.5 oz\nQuantity: 50\nUnit: $3.95\nPaid: $197.5\n\nDate: 7/23/2018 1:41p\nCustomer: Robert Armstrong\nSKU: FOOD215\nItem: BFF Oh My Gravy! Lamb & Tuna 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 7/23/2018 4:23p\nCustomer: Douglas \"Dougie\" Powers\nSKU: TOY235\nItem: Laser Pointer\nQuantity: 1\nUnit: $16.12\nPaid: $16.12\n\nDate: 7/24/2018 12:16p\nCustomer: 桜 高橋 (Sakura Takahashi)\nSKU: FOOD122\nItem: Food, Senior Wet Cat - 3 oz\nQuantity: 3\nUnit: $1.29\nPaid: 157¥\n\nDate: 7/26/2018 4:39p\nCustomer: Douglas \"Dougie\" Powers\nSKU: FOOD420\nItem: Food, Shark - 10 kg\nQuantity: 1\nUnit: $15.70\nPaid: $15.7\n\nDate: 7/27/2018 12:16p\nCustomer: 桜 高橋 (Sakura Takahashi)\nSKU: FOOD122\nItem: Food, Senior Wet Cat - 3 oz\nQuantity: 3\nUnit: $1.29\nPaid: 157¥\n\nDate: 7/30/2018 12:17p\nCustomer: 桜 高橋 (Sakura Takahashi)\nSKU: RETURN\nItem: Food, Senior Wet Cat - 3 oz\nQuantity: 1\nUnit: $1.29\nPaid: 157¥\n\nDate: 7/31/2018 5:42p\nCustomer: Rubeus Hagrid\nSKU: CAT060\nItem: Food, Dragon - 50kg\nQuantity: 5\nUnit: $720.42\nPaid: $3602.1\n\nDate: 8/1/2018 2:44p\nCustomer: David Attenborough\nSKU: FOOD360\nItem: Food, Rhinocerous - 50kg\nQuantity: 4\nUnit: $5.72\nPaid: $22.88\n\nDate: 8/2/2018 5:12p\nCustomer: Susan Ashworth\nSKU: CAT110\nItem: Cat, Maine Coon (Felix catus)\nQuantity: 1\nUnit: $1,309.68\nPaid: $1309.68\n\nDate: 8/2/2018 5:12p\nCustomer: Susan Ashworth\nSKU: FOOD130\nItem: Food, Kitten 3kg\nQuantity: 3\nUnit: $14.94\nPaid: $44.82\n\nDate: 8/6/2018 10:21a\nCustomer: Robert Armstrong\nSKU: FOOD212\nItem: BFF Oh My Gravy! Beef & Chicken 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 8/7/2018 4:12p\nCustomer: Juan Johnson\nSKU: REPT082\nItem: Kingsnake, California (Lampropeltis getula)\nQuantity: 1\nUnit: $89.95\nPaid: $89.95\n\nDate: 8/7/2018 4:12p\nCustomer: Juan Johnson\nSKU: RDNT443\nItem: Mouse, Pinky (Mus musculus)\nQuantity: 1\nUnit: $1.49\nPaid: $1.49\n\nDate: 8/10/2018 4:31p\nCustomer: Robert Armstrong\nSKU: FOOD211\nItem: BFF Oh My Gravy! Chicken & Turkey 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 8/13/2018 2:07p\nCustomer: Monica Johnson\nSKU: RDNT443\nItem: Mouse, Pinky (Mus musculus)\nQuantity: 1\nUnit: $1.49\nPaid: $1.49\n\nDate: 8/13/2018 2:08p\nCustomer: María Fernández\nSKU: FOOD146\nItem: Forti Diet Prohealth Mouse/Rat 3lbs\nQuantity: 2\nUnit: $2.00\nPaid: $4.0\n\nDate: 8/15/2018 11:57a\nCustomer: Mr. Praline\nSKU: RETURN\nItem: Parrot, Norwegian Blue (Mopsitta tanta)\nQuantity: 1\nUnit: $2300.00\nPaid: -$2300.0\n\nDate: 8/15/2018 3:48p\nCustomer: Kyle Kennedy\nSKU: FOOD121\nItem: Food, Adult Cat - 3.5 oz\nQuantity: 2\nUnit: $4.22\nPaid: $8.44\n\nDate: 8/16/2018 11:50a\nCustomer: Helen Halestorm\nSKU: RETURN\nItem: Rabbit (Oryctolagus cuniculus)\nQuantity: 6\nUnit: $0\nPaid: $0.0\n\nDate: 8/16/2018 4:00p\nCustomer: Kyle Kennedy\nSKU: DOG010\nItem: Dog, Golden Retriever (Canis lupus familiaris)\nQuantity: 1\nUnit: $2,495.99\nPaid: $2495.99\n\nDate: 8/16/2018 5:15p\nCustomer: Michael Smith\nSKU: BIRD160\nItem: Parakeet, Blue (Melopsittacus undulatus)\nQuantity: 1\nUnit: 29.95\nPaid: $31.85\n\nDate: 8/17/2018 9:26a\nCustomer: Rubeus Hagrid\nSKU: NSCT201\nItem: Food, Spider\nQuantity: 5\nUnit: $.05\nPaid: $0.25\n\nDate: 8/20/2018 9:36a\nCustomer: Kyle Kennedy\nSKU: RETURN\nItem: Dog, Golden Retriever (Canis lupus familiaris)\nQuantity: 1\nUnit: $1,247.99\nPaid: -$1247.99\n\nDate: 8/20/2018 1:47p\nCustomer: מרוסיה ניסנהולץ אבולעפיה\nSKU: GOAT224\nItem: Goat, American Pygmy (Capra hircus)\nQuantity: 1\nUnit: ₪499\nPaid: $160.51\n\nDate: 8/20/2018 3:31p\nCustomer: Monica Johnson\nSKU: NSCT201\nItem: Crickets, Adult Live (Gryllus assimilis)\nQuantity: 30\nUnit: $.05\nPaid: $1.5\n\nDate: 8/20/2018 5:12p\nCustomer: David Attenborough\nSKU: NSCT084\nItem: Food, Pangolin\nQuantity: 30\nUnit: $.17\nPaid: $5.10\n\nDate: 8/21/2018 12:13p\nCustomer: Robert Armstrong\nSKU: FOOD214\nItem: BFF Oh My Gravy! Duck & Salmon 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 8/22/2018 9:38a\nCustomer: David Attenborough\nSKU: BIRD160\nItem: Food, Quoll\nQuantity: 1\nUnit: 29.95\nPaid: $29.95\n\nDate: 8/22/2018 2:13p\nCustomer: Jon Arbuckle\nSKU: FOOD170\nItem: Food, Adult Dog - 5kg\nQuantity: 1\nUnit: $44.95\nPaid: $44.95\n\nDate: 8/22/2018 5:49p\nCustomer: מרוסיה ניסנהולץ\nSKU: SFTY052\nItem: Fire Extinguisher, kitchen-rated\nQuantity: \nUnit: \nPaid: \n\nDate: 8/24/2018 11:42a\nCustomer: Robert Armstrong\nSKU: FOOD218\nItem: BFF Oh My Gravy! Chicken & Salmon 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 8/27/2018 3:05p\nCustomer: Monica Johnson\nSKU: NSCT443\nItem: Mealworms, Large (Tenebrio molitor) 100ct\nQuantity: 1\nUnit: $1.99\nPaid: $1.99\n\nDate: 8/28/2018 5:32p\nCustomer: Susan Ashworth\nSKU: CAT020\nItem: Cat, Scottish Fold (Felis catus)\nQuantity: 1\nUnit: $1,964.53\nPaid: $1964.53\n\nDate: 8/28/2018 5:32p\nCustomer: Susan Ashworth\nSKU: FOOD130\nItem: Food, Kitten 3kg\nQuantity: 2\nUnit: $14.94\nPaid: $29.88\n\nDate: 8/29/2018 10:07a\nCustomer: Robert Armstrong\nSKU: FOOD219\nItem: BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 8/31/2018 12:00a\nCustomer: Robert Armstrong\nSKU: FOOD219\nItem: BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\nQuantity: 144\nUnit: $12.95\nPaid: $1864.8\n\nDate: 8/31/2018 5:57p\nCustomer: Juan Johnson\nSKU: REPT217\nItem: Lizard, Spinytail (Uromastyx ornatus)\nQuantity: 1\nUnit: $99.95\nPaid: $99.95\n\n"
  },
  {
    "path": "sample_data/benchmark.psv",
    "content": "Date|Customer|SKU|Item|Quantity|Unit|Paid\n7/3/2018 1:47p|Robert Armstrong|FOOD213|BFF Oh My Gravy! Beef & Salmon 2.8oz|4|$12.95|$51.8\n7/3/2018 3:32p|Kyle Kennedy|FOOD121|Food, Adult Cat - 3.5 oz|1|$4.22|$4.22\n7/5/2018 4:15p|Douglas \"Dougie\" Powers|FOOD121|Food, Adult Cat 3.5 oz|1|$4.22|$4.22\n7/6/2018 12:15p|桜 高橋 (Sakura Takahashi)|FOOD122|Food, Senior Wet Cat - 3 oz|12|$1.29|157¥\n7/10/2018 10:28a|David Attenborough|NSCT201|Food, Salamander|30|$.05|$1.5\n7/10/2018 5:23p|Susan Ashworth|CAT060|Cat, Korat (Felis catus)|1|$720.42|$720.42\n7/10/2018 5:23p|Susan Ashworth|FOOD130|Food, Kitten 3kg|1|$14.94|$14.94\n7/13/2018 10:26a|Wil Wheaton|NSCT523|Monster, Rust (Monstrus gygaxus)|1|$39.95|$39.95\n7/13/2018 3:49p|Robert Armstrong|FOOD216|BFF Oh My Gravy! Chicken & Shrimp 2.8oz|4|$12.95|$51.8\n7/17/2018 9:01a|Robert Armstrong|FOOD217|BFF Oh My Gravy! Duck & Tuna 2.8oz|4|$12.95|$51.8\n7/17/2018 11:30a|Helen Halestorm|LAGO342|Rabbit (Oryctolagus cuniculus)|2|$32.94|$65.88\n7/18/2018 12:16p|桜 高橋 (Sakura Takahashi)|FOOD122|Food, Senior Wet Cat - 3 oz|6|$1.29|157¥\n7/19/2018 10:28a|Rubeus Hagrid|FOOD170|Food, Dog - 5kg|5|$44.95|$224.75\n7/20/2018 2:13p|Jon Arbuckle|FOOD167|Food, Premium Wet Cat - 3.5 oz|50|$3.95|$197.5\n7/23/2018 1:41p|Robert Armstrong|FOOD215|BFF Oh My Gravy! Lamb & Tuna 2.8oz|4|$12.95|$51.8\n7/23/2018 4:23p|Douglas \"Dougie\" Powers|TOY235|Laser Pointer|1|$16.12|$16.12\n7/24/2018 12:16p|桜 高橋 (Sakura Takahashi)|FOOD122|Food, Senior Wet Cat - 3 oz|3|$1.29|157¥\n7/26/2018 4:39p|Douglas \"Dougie\" Powers|FOOD420|Food, Shark - 10 kg|1|$15.70|$15.7\n7/27/2018 12:16p|桜 高橋 (Sakura Takahashi)|FOOD122|Food, Senior Wet Cat - 3 oz|3|$1.29|157¥\n7/30/2018 12:17p|桜 高橋 (Sakura Takahashi)|RETURN|Food, Senior Wet Cat - 3 oz|1|$1.29|157¥\n7/31/2018 5:42p|Rubeus Hagrid|CAT060|Food, Dragon - 50kg|5|$720.42|$3602.1\n8/1/2018 2:44p|David Attenborough|FOOD360|Food, Rhinocerous - 50kg|4|$5.72|$22.88\n8/2/2018 5:12p|Susan Ashworth|CAT110|Cat, Maine Coon (Felix catus)|1|$1,309.68|$1309.68\n8/2/2018 5:12p|Susan Ashworth|FOOD130|Food, Kitten 3kg|3|$14.94|$44.82\n8/6/2018 10:21a|Robert Armstrong|FOOD212|BFF Oh My Gravy! Beef & Chicken 2.8oz|4|$12.95|$51.8\n8/7/2018 4:12p|Juan Johnson|REPT082|Kingsnake, California (Lampropeltis getula)|1|$89.95|$89.95\n8/7/2018 4:12p|Juan Johnson|RDNT443|Mouse, Pinky (Mus musculus)|1|$1.49|$1.49\n8/10/2018 4:31p|Robert Armstrong|FOOD211|BFF Oh My Gravy! Chicken & Turkey 2.8oz|4|$12.95|$51.8\n8/13/2018 2:07p|Monica Johnson|RDNT443|Mouse, Pinky (Mus musculus)|1|$1.49|$1.49\n8/13/2018 2:08p|María Fernández|FOOD146|Forti Diet Prohealth Mouse/Rat 3lbs|2|$2.00|$4.0\n8/15/2018 11:57a|Mr. Praline|RETURN|Parrot, Norwegian Blue (Mopsitta tanta)|1|$2300.00|-$2300.0\n8/15/2018 3:48p|Kyle Kennedy|FOOD121|Food, Adult Cat - 3.5 oz|2|$4.22|$8.44\n8/16/2018 11:50a|Helen Halestorm|RETURN|Rabbit (Oryctolagus cuniculus)|6|$0|$0.0\n8/16/2018 4:00p|Kyle Kennedy|DOG010|Dog, Golden Retriever (Canis lupus familiaris)|1|$2,495.99|$2495.99\n8/16/2018 5:15p|Michael Smith|BIRD160|Parakeet, Blue (Melopsittacus undulatus)|1|29.95|$31.85\n8/17/2018 9:26a|Rubeus Hagrid|NSCT201|Food, Spider|5|$.05|$0.25\n8/20/2018 9:36a|Kyle Kennedy|RETURN|Dog, Golden Retriever (Canis lupus familiaris)|1|$1,247.99|-$1247.99\n8/20/2018 1:47p|מרוסיה ניסנהולץ אבולעפיה|GOAT224|Goat, American Pygmy (Capra hircus)|1|₪499|$160.51\n8/20/2018 3:31p|Monica Johnson|NSCT201|Crickets, Adult Live (Gryllus assimilis)|30|$.05|$1.5\n8/20/2018 5:12p|David Attenborough|NSCT084|Food, Pangolin|30|$.17|$5.10\n8/21/2018 12:13p|Robert Armstrong|FOOD214|BFF Oh My Gravy! Duck & Salmon 2.8oz|4|$12.95|$51.8\n8/22/2018 9:38a|David Attenborough|BIRD160|Food, Quoll|1|29.95|$29.95\n8/22/2018 2:13p|Jon Arbuckle|FOOD170|Food, Adult Dog - 5kg|1|$44.95|$44.95\n8/22/2018 5:49p|מרוסיה ניסנהולץ|SFTY052|Fire Extinguisher, kitchen-rated|1|$61.70|$61.70\n8/24/2018 11:42a|Robert Armstrong|FOOD218|BFF Oh My Gravy! Chicken & Salmon 2.8oz|4|$12.95|$51.8\n8/27/2018 3:05p|Monica Johnson|NSCT443|Mealworms, Large (Tenebrio molitor) 100ct|1|$1.99|$1.99\n8/28/2018 5:32p|Susan Ashworth|CAT020|Cat, Scottish Fold (Felis catus)|1|$1,964.53|$1964.53\n8/28/2018 5:32p|Susan Ashworth|FOOD130|Food, Kitten 3kg|2|$14.94|$29.88\n8/29/2018 10:07a|Robert Armstrong|FOOD219|BFF Oh My Gravy! Chicken & Pumpkin 2.8oz|4|$12.95|$51.8\n8/31/2018 12:00a|Robert Armstrong|FOOD219|BFF Oh My Gravy! Chicken & Pumpkin 2.8oz|144|$12.95|$1864.8\n8/31/2018 5:57p|Juan Johnson|REPT217|Lizard, Spinytail (Uromastyx ornatus)|1|$99.95|$99.95\n"
  },
  {
    "path": "sample_data/benchmark.xml",
    "content": "<?xml version='1.0' encoding='utf-8'?>\n<data>\n  <row>\n    <index>0</index>\n    <Date>7/3/2018 1:47p</Date>\n    <Customer>Robert Armstrong</Customer>\n    <SKU>FOOD213</SKU>\n    <Item>BFF Oh My Gravy! Beef &amp; Salmon 2.8oz</Item>\n    <Quantity>4</Quantity>\n    <Unit>$12.95</Unit>\n    <Paid>$51.8</Paid>\n  </row>\n  <row>\n    <index>1</index>\n    <Date>7/3/2018 3:32p</Date>\n    <Customer>Kyle Kennedy</Customer>\n    <SKU>FOOD121</SKU>\n    <Item>Food, Adult Cat - 3.5 oz</Item>\n    <Quantity>1</Quantity>\n    <Unit>$4.22</Unit>\n    <Paid>$4.22</Paid>\n  </row>\n  <row>\n    <index>2</index>\n    <Date>7/5/2018 4:15p</Date>\n    <Customer>Douglas \"Dougie\" Powers</Customer>\n    <SKU>FOOD121</SKU>\n    <Item>Food, Adult Cat 3.5 oz</Item>\n    <Quantity>1</Quantity>\n    <Unit>$4.22</Unit>\n    <Paid>$4.22</Paid>\n  </row>\n  <row>\n    <index>3</index>\n    <Date>7/6/2018 12:15p</Date>\n    <Customer>桜 高橋 (Sakura Takahashi)</Customer>\n    <SKU>FOOD122</SKU>\n    <Item>Food, Senior Wet Cat - 3 oz</Item>\n    <Quantity>12</Quantity>\n    <Unit>$1.29</Unit>\n    <Paid>157¥</Paid>\n  </row>\n  <row>\n    <index>4</index>\n    <Date>7/10/2018 10:28a</Date>\n    <Customer>David Attenborough</Customer>\n    <SKU>NSCT201</SKU>\n    <Item>Food, Salamander</Item>\n    <Quantity>30</Quantity>\n    <Unit>$.05</Unit>\n    <Paid>$1.5</Paid>\n  </row>\n  <row>\n    <index>5</index>\n    <Date>7/10/2018 5:23p</Date>\n    <Customer>Susan Ashworth</Customer>\n    <SKU>CAT060</SKU>\n    <Item>Cat, Korat (Felis catus)</Item>\n    <Quantity>1</Quantity>\n    <Unit>$720.42</Unit>\n    <Paid>$720.42</Paid>\n  </row>\n  <row>\n    <index>6</index>\n    <Date>7/10/2018 5:23p</Date>\n    <Customer>Susan Ashworth</Customer>\n    <SKU>FOOD130</SKU>\n    <Item>Food, Kitten 3kg</Item>\n    <Quantity>1</Quantity>\n    <Unit>$14.94</Unit>\n    <Paid>$14.94</Paid>\n  </row>\n  <row>\n    <index>7</index>\n    <Date>7/13/2018 10:26a</Date>\n    <Customer>Wil Wheaton</Customer>\n    <SKU>NSCT523</SKU>\n    <Item>Monster, Rust (Monstrus gygaxus)</Item>\n    <Quantity>1</Quantity>\n    <Unit>$39.95</Unit>\n    <Paid>$39.95</Paid>\n  </row>\n  <row>\n    <index>8</index>\n    <Date>7/13/2018 3:49p</Date>\n    <Customer>Robert Armstrong</Customer>\n    <SKU>FOOD216</SKU>\n    <Item>BFF Oh My Gravy! Chicken &amp; Shrimp 2.8oz</Item>\n    <Quantity>4</Quantity>\n    <Unit>$12.95</Unit>\n    <Paid>$51.8</Paid>\n  </row>\n  <row>\n    <index>9</index>\n    <Date>7/17/2018 9:01a</Date>\n    <Customer>Robert Armstrong</Customer>\n    <SKU>FOOD217</SKU>\n    <Item>BFF Oh My Gravy! Duck &amp; Tuna 2.8oz</Item>\n    <Quantity>4</Quantity>\n    <Unit>$12.95</Unit>\n    <Paid>$51.8</Paid>\n  </row>\n  <row>\n    <index>10</index>\n    <Date>7/17/2018 11:30a</Date>\n    <Customer>Helen Halestorm</Customer>\n    <SKU>LAGO342</SKU>\n    <Item>Rabbit (Oryctolagus cuniculus)</Item>\n    <Quantity>2</Quantity>\n    <Unit>$32.94</Unit>\n    <Paid>$65.88</Paid>\n  </row>\n  <row>\n    <index>11</index>\n    <Date>7/18/2018 12:16p</Date>\n    <Customer>桜 高橋 (Sakura Takahashi)</Customer>\n    <SKU>FOOD122</SKU>\n    <Item>Food, Senior Wet Cat - 3 oz</Item>\n    <Quantity>6</Quantity>\n    <Unit>$1.29</Unit>\n    <Paid>157¥</Paid>\n  </row>\n  <row>\n    <index>12</index>\n    <Date>7/19/2018 10:28a</Date>\n    <Customer>Rubeus Hagrid</Customer>\n    <SKU>FOOD170</SKU>\n    <Item>Food, Dog - 5kg</Item>\n    <Quantity>5</Quantity>\n    <Unit>$44.95</Unit>\n    <Paid>$224.75</Paid>\n  </row>\n  <row>\n    <index>13</index>\n    <Date>7/20/2018 2:13p</Date>\n    <Customer>Jon Arbuckle</Customer>\n    <SKU>FOOD167</SKU>\n    <Item>Food, Premium Wet Cat - 3.5 oz</Item>\n    <Quantity>50</Quantity>\n    <Unit>$3.95</Unit>\n    <Paid>$197.5</Paid>\n  </row>\n  <row>\n    <index>14</index>\n    <Date>7/23/2018 1:41p</Date>\n    <Customer>Robert Armstrong</Customer>\n    <SKU>FOOD215</SKU>\n    <Item>BFF Oh My Gravy! Lamb &amp; Tuna 2.8oz</Item>\n    <Quantity>4</Quantity>\n    <Unit>$12.95</Unit>\n    <Paid>$51.8</Paid>\n  </row>\n  <row>\n    <index>15</index>\n    <Date>7/23/2018 4:23p</Date>\n    <Customer>Douglas \"Dougie\" Powers</Customer>\n    <SKU>TOY235</SKU>\n    <Item>Laser Pointer</Item>\n    <Quantity>1</Quantity>\n    <Unit>$16.12</Unit>\n    <Paid>$16.12</Paid>\n  </row>\n  <row>\n    <index>16</index>\n    <Date>7/24/2018 12:16p</Date>\n    <Customer>桜 高橋 (Sakura Takahashi)</Customer>\n    <SKU>FOOD122</SKU>\n    <Item>Food, Senior Wet Cat - 3 oz</Item>\n    <Quantity>3</Quantity>\n    <Unit>$1.29</Unit>\n    <Paid>157¥</Paid>\n  </row>\n  <row>\n    <index>17</index>\n    <Date>7/26/2018 4:39p</Date>\n    <Customer>Douglas \"Dougie\" Powers</Customer>\n    <SKU>FOOD420</SKU>\n    <Item>Food, Shark - 10 kg</Item>\n    <Quantity>1</Quantity>\n    <Unit>$15.70</Unit>\n    <Paid>$15.7</Paid>\n  </row>\n  <row>\n    <index>18</index>\n    <Date>7/27/2018 12:16p</Date>\n    <Customer>桜 高橋 (Sakura Takahashi)</Customer>\n    <SKU>FOOD122</SKU>\n    <Item>Food, Senior Wet Cat - 3 oz</Item>\n    <Quantity>3</Quantity>\n    <Unit>$1.29</Unit>\n    <Paid>157¥</Paid>\n  </row>\n  <row>\n    <index>19</index>\n    <Date>7/30/2018 12:17p</Date>\n    <Customer>桜 高橋 (Sakura Takahashi)</Customer>\n    <SKU>RETURN</SKU>\n    <Item>Food, Senior Wet Cat - 3 oz</Item>\n    <Quantity>1</Quantity>\n    <Unit>$1.29</Unit>\n    <Paid>157¥</Paid>\n  </row>\n  <row>\n    <index>20</index>\n    <Date>7/31/2018 5:42p</Date>\n    <Customer>Rubeus Hagrid</Customer>\n    <SKU>CAT060</SKU>\n    <Item>Food, Dragon - 50kg</Item>\n    <Quantity>5</Quantity>\n    <Unit>$720.42</Unit>\n    <Paid>$3602.1</Paid>\n  </row>\n  <row>\n    <index>21</index>\n    <Date>8/1/2018 2:44p</Date>\n    <Customer>David Attenborough</Customer>\n    <SKU>FOOD360</SKU>\n    <Item>Food, Rhinocerous - 50kg</Item>\n    <Quantity>4</Quantity>\n    <Unit>$5.72</Unit>\n    <Paid>$22.88</Paid>\n  </row>\n  <row>\n    <index>22</index>\n    <Date>8/2/2018 5:12p</Date>\n    <Customer>Susan Ashworth</Customer>\n    <SKU>CAT110</SKU>\n    <Item>Cat, Maine Coon (Felix catus)</Item>\n    <Quantity>1</Quantity>\n    <Unit>$1,309.68</Unit>\n    <Paid>$1309.68</Paid>\n  </row>\n  <row>\n    <index>23</index>\n    <Date>8/2/2018 5:12p</Date>\n    <Customer>Susan Ashworth</Customer>\n    <SKU>FOOD130</SKU>\n    <Item>Food, Kitten 3kg</Item>\n    <Quantity>3</Quantity>\n    <Unit>$14.94</Unit>\n    <Paid>$44.82</Paid>\n  </row>\n  <row>\n    <index>24</index>\n    <Date>8/6/2018 10:21a</Date>\n    <Customer>Robert Armstrong</Customer>\n    <SKU>FOOD212</SKU>\n    <Item>BFF Oh My Gravy! Beef &amp; Chicken 2.8oz</Item>\n    <Quantity>4</Quantity>\n    <Unit>$12.95</Unit>\n    <Paid>$51.8</Paid>\n  </row>\n  <row>\n    <index>25</index>\n    <Date>8/7/2018 4:12p</Date>\n    <Customer>Juan Johnson</Customer>\n    <SKU>REPT082</SKU>\n    <Item>Kingsnake, California (Lampropeltis getula)</Item>\n    <Quantity>1</Quantity>\n    <Unit>$89.95</Unit>\n    <Paid>$89.95</Paid>\n  </row>\n  <row>\n    <index>26</index>\n    <Date>8/7/2018 4:12p</Date>\n    <Customer>Juan Johnson</Customer>\n    <SKU>RDNT443</SKU>\n    <Item>Mouse, Pinky (Mus musculus)</Item>\n    <Quantity>1</Quantity>\n    <Unit>$1.49</Unit>\n    <Paid>$1.49</Paid>\n  </row>\n  <row>\n    <index>27</index>\n    <Date>8/10/2018 4:31p</Date>\n    <Customer>Robert Armstrong</Customer>\n    <SKU>FOOD211</SKU>\n    <Item>BFF Oh My Gravy! Chicken &amp; Turkey 2.8oz</Item>\n    <Quantity>4</Quantity>\n    <Unit>$12.95</Unit>\n    <Paid>$51.8</Paid>\n  </row>\n  <row>\n    <index>28</index>\n    <Date>8/13/2018 2:07p</Date>\n    <Customer>Monica Johnson</Customer>\n    <SKU>RDNT443</SKU>\n    <Item>Mouse, Pinky (Mus musculus)</Item>\n    <Quantity>1</Quantity>\n    <Unit>$1.49</Unit>\n    <Paid>$1.49</Paid>\n  </row>\n  <row>\n    <index>29</index>\n    <Date>8/13/2018 2:08p</Date>\n    <Customer>María Fernández</Customer>\n    <SKU>FOOD146</SKU>\n    <Item>Forti Diet Prohealth Mouse/Rat 3lbs</Item>\n    <Quantity>2</Quantity>\n    <Unit>$2.00</Unit>\n    <Paid>$4.0</Paid>\n  </row>\n  <row>\n    <index>30</index>\n    <Date>8/15/2018 11:57a</Date>\n    <Customer>Mr. Praline</Customer>\n    <SKU>RETURN</SKU>\n    <Item>Parrot, Norwegian Blue (Mopsitta tanta)</Item>\n    <Quantity>1</Quantity>\n    <Unit>$2300.00</Unit>\n    <Paid>-$2300.0</Paid>\n  </row>\n  <row>\n    <index>31</index>\n    <Date>8/15/2018 3:48p</Date>\n    <Customer>Kyle Kennedy</Customer>\n    <SKU>FOOD121</SKU>\n    <Item>Food, Adult Cat - 3.5 oz</Item>\n    <Quantity>2</Quantity>\n    <Unit>$4.22</Unit>\n    <Paid>$8.44</Paid>\n  </row>\n  <row>\n    <index>32</index>\n    <Date>8/16/2018 11:50a</Date>\n    <Customer>Helen Halestorm</Customer>\n    <SKU>RETURN</SKU>\n    <Item>Rabbit (Oryctolagus cuniculus)</Item>\n    <Quantity>6</Quantity>\n    <Unit>$0</Unit>\n    <Paid>$0.0</Paid>\n  </row>\n  <row>\n    <index>33</index>\n    <Date>8/16/2018 4:00p</Date>\n    <Customer>Kyle Kennedy</Customer>\n    <SKU>DOG010</SKU>\n    <Item>Dog, Golden Retriever (Canis lupus familiaris)</Item>\n    <Quantity>1</Quantity>\n    <Unit>$2,495.99</Unit>\n    <Paid>$2495.99</Paid>\n  </row>\n  <row>\n    <index>34</index>\n    <Date>8/16/2018 5:15p</Date>\n    <Customer>Michael Smith</Customer>\n    <SKU>BIRD160</SKU>\n    <Item>Parakeet, Blue (Melopsittacus undulatus)</Item>\n    <Quantity>1</Quantity>\n    <Unit>29.95</Unit>\n    <Paid>$31.85</Paid>\n  </row>\n  <row>\n    <index>35</index>\n    <Date>8/17/2018 9:26a</Date>\n    <Customer>Rubeus Hagrid</Customer>\n    <SKU>NSCT201</SKU>\n    <Item>Food, Spider</Item>\n    <Quantity>5</Quantity>\n    <Unit>$.05</Unit>\n    <Paid>$0.25</Paid>\n  </row>\n  <row>\n    <index>36</index>\n    <Date>8/20/2018 9:36a</Date>\n    <Customer>Kyle Kennedy</Customer>\n    <SKU>RETURN</SKU>\n    <Item>Dog, Golden Retriever (Canis lupus familiaris)</Item>\n    <Quantity>1</Quantity>\n    <Unit>$1,247.99</Unit>\n    <Paid>-$1247.99</Paid>\n  </row>\n  <row>\n    <index>37</index>\n    <Date>8/20/2018 1:47p</Date>\n    <Customer>מרוסיה ניסנהולץ אבולעפיה</Customer>\n    <SKU>GOAT224</SKU>\n    <Item>Goat, American Pygmy (Capra hircus)</Item>\n    <Quantity>1</Quantity>\n    <Unit>₪499</Unit>\n    <Paid>$160.51</Paid>\n  </row>\n  <row>\n    <index>38</index>\n    <Date>8/20/2018 3:31p</Date>\n    <Customer>Monica Johnson</Customer>\n    <SKU>NSCT201</SKU>\n    <Item>Crickets, Adult Live (Gryllus assimilis)</Item>\n    <Quantity>30</Quantity>\n    <Unit>$.05</Unit>\n    <Paid>$1.5</Paid>\n  </row>\n  <row>\n    <index>39</index>\n    <Date>8/20/2018 5:12p</Date>\n    <Customer>David Attenborough</Customer>\n    <SKU>NSCT084</SKU>\n    <Item>Food, Pangolin</Item>\n    <Quantity>30</Quantity>\n    <Unit>$.17</Unit>\n    <Paid>$5.10</Paid>\n  </row>\n  <row>\n    <index>40</index>\n    <Date>8/21/2018 12:13p</Date>\n    <Customer>Robert Armstrong</Customer>\n    <SKU>FOOD214</SKU>\n    <Item>BFF Oh My Gravy! Duck &amp; Salmon 2.8oz</Item>\n    <Quantity>4</Quantity>\n    <Unit>$12.95</Unit>\n    <Paid>$51.8</Paid>\n  </row>\n  <row>\n    <index>41</index>\n    <Date>8/22/2018 9:38a</Date>\n    <Customer>David Attenborough</Customer>\n    <SKU>BIRD160</SKU>\n    <Item>Food, Quoll</Item>\n    <Quantity>1</Quantity>\n    <Unit>29.95</Unit>\n    <Paid>$29.95</Paid>\n  </row>\n  <row>\n    <index>42</index>\n    <Date>8/22/2018 2:13p</Date>\n    <Customer>Jon Arbuckle</Customer>\n    <SKU>FOOD170</SKU>\n    <Item>Food, Adult Dog - 5kg</Item>\n    <Quantity>1</Quantity>\n    <Unit>$44.95</Unit>\n    <Paid>$44.95</Paid>\n  </row>\n  <row>\n    <index>43</index>\n    <Date>8/22/2018 5:49p</Date>\n    <Customer>מרוסיה ניסנהולץ</Customer>\n    <SKU>SFTY052</SKU>\n    <Item>Fire Extinguisher, kitchen-rated</Item>\n    <Quantity>1</Quantity>\n    <Unit>$61.70</Unit>\n    <Paid>$61.70</Paid>\n  </row>\n  <row>\n    <index>44</index>\n    <Date>8/24/2018 11:42a</Date>\n    <Customer>Robert Armstrong</Customer>\n    <SKU>FOOD218</SKU>\n    <Item>BFF Oh My Gravy! Chicken &amp; Salmon 2.8oz</Item>\n    <Quantity>4</Quantity>\n    <Unit>$12.95</Unit>\n    <Paid>$51.8</Paid>\n  </row>\n  <row>\n    <index>45</index>\n    <Date>8/27/2018 3:05p</Date>\n    <Customer>Monica Johnson</Customer>\n    <SKU>NSCT443</SKU>\n    <Item>Mealworms, Large (Tenebrio molitor) 100ct</Item>\n    <Quantity>1</Quantity>\n    <Unit>$1.99</Unit>\n    <Paid>$1.99</Paid>\n  </row>\n  <row>\n    <index>46</index>\n    <Date>8/28/2018 5:32p</Date>\n    <Customer>Susan Ashworth</Customer>\n    <SKU>CAT020</SKU>\n    <Item>Cat, Scottish Fold (Felis catus)</Item>\n    <Quantity>1</Quantity>\n    <Unit>$1,964.53</Unit>\n    <Paid>$1964.53</Paid>\n  </row>\n  <row>\n    <index>47</index>\n    <Date>8/28/2018 5:32p</Date>\n    <Customer>Susan Ashworth</Customer>\n    <SKU>FOOD130</SKU>\n    <Item>Food, Kitten 3kg</Item>\n    <Quantity>2</Quantity>\n    <Unit>$14.94</Unit>\n    <Paid>$29.88</Paid>\n  </row>\n  <row>\n    <index>48</index>\n    <Date>8/29/2018 10:07a</Date>\n    <Customer>Robert Armstrong</Customer>\n    <SKU>FOOD219</SKU>\n    <Item>BFF Oh My Gravy! Chicken &amp; Pumpkin 2.8oz</Item>\n    <Quantity>4</Quantity>\n    <Unit>$12.95</Unit>\n    <Paid>$51.8</Paid>\n  </row>\n  <row>\n    <index>49</index>\n    <Date>8/31/2018 12:00a</Date>\n    <Customer>Robert Armstrong</Customer>\n    <SKU>FOOD219</SKU>\n    <Item>BFF Oh My Gravy! Chicken &amp; Pumpkin 2.8oz</Item>\n    <Quantity>144</Quantity>\n    <Unit>$12.95</Unit>\n    <Paid>$1864.8</Paid>\n  </row>\n  <row>\n    <index>50</index>\n    <Date>8/31/2018 5:57p</Date>\n    <Customer>Juan Johnson</Customer>\n    <SKU>REPT217</SKU>\n    <Item>Lizard, Spinytail (Uromastyx ornatus)</Item>\n    <Quantity>1</Quantity>\n    <Unit>$99.95</Unit>\n    <Paid>$99.95</Paid>\n  </row>\n</data>"
  },
  {
    "path": "sample_data/benchmark.yml",
    "content": "- customer: Robert Armstrong\n  date: 7/3/2018 1:47p\n  item: BFF Oh My Gravy! Beef & Salmon 2.8oz\n  paid: $51.8\n  quantity: '4'\n  sku: FOOD213\n  unit: $12.95\n- customer: Kyle Kennedy\n  date: 7/3/2018 3:32p\n  item: Food, Adult Cat - 3.5 oz\n  paid: $4.22\n  quantity: '1'\n  sku: FOOD121\n  unit: $4.22\n- customer: Douglas \"Dougie\" Powers\n  date: 7/5/2018 4:15p\n  item: Food, Adult Cat 3.5 oz\n  paid: $4.22\n  quantity: '1'\n  sku: FOOD121\n  unit: $4.22\n- customer: \"\\u685C \\u9AD8\\u6A4B (Sakura Takahashi)\"\n  date: 7/6/2018 12:15p\n  item: Food, Senior Wet Cat - 3 oz\n  paid: \"157\\xA5\"\n  quantity: '12'\n  sku: FOOD122\n  unit: $1.29\n- customer: David Attenborough\n  date: 7/10/2018 10:28a\n  item: Food, Salamander\n  paid: $1.5\n  quantity: '30'\n  sku: NSCT201\n  unit: $.05\n- customer: Susan Ashworth\n  date: 7/10/2018 5:23p\n  item: Cat, Korat (Felis catus)\n  paid: $720.42\n  quantity: '1'\n  sku: CAT060\n  unit: $720.42\n- customer: Susan Ashworth\n  date: 7/10/2018 5:23p\n  item: Food, Kitten 3kg\n  paid: $14.94\n  quantity: '1'\n  sku: FOOD130\n  unit: $14.94\n- customer: Wil Wheaton\n  date: 7/13/2018 10:26a\n  item: Monster, Rust (Monstrus gygaxus)\n  paid: $39.95\n  quantity: '1'\n  sku: NSCT523\n  unit: $39.95\n- customer: Robert Armstrong\n  date: 7/13/2018 3:49p\n  item: BFF Oh My Gravy! Chicken & Shrimp 2.8oz\n  paid: $51.8\n  quantity: '4'\n  sku: FOOD216\n  unit: $12.95\n- customer: Robert Armstrong\n  date: 7/17/2018 9:01a\n  item: BFF Oh My Gravy! Duck & Tuna 2.8oz\n  paid: $51.8\n  quantity: '4'\n  sku: FOOD217\n  unit: $12.95\n- customer: Helen Halestorm\n  date: 7/17/2018 11:30a\n  item: Rabbit (Oryctolagus cuniculus)\n  paid: $65.88\n  quantity: '2'\n  sku: LAGO342\n  unit: $32.94\n- customer: \"\\u685C \\u9AD8\\u6A4B (Sakura Takahashi)\"\n  date: 7/18/2018 12:16p\n  item: Food, Senior Wet Cat - 3 oz\n  paid: \"157\\xA5\"\n  quantity: '6'\n  sku: FOOD122\n  unit: $1.29\n- customer: Rubeus Hagrid\n  date: 7/19/2018 10:28a\n  item: Food, Dog - 5kg\n  paid: $224.75\n  quantity: '5'\n  sku: FOOD170\n  unit: $44.95\n- customer: Jon Arbuckle\n  date: 7/20/2018 2:13p\n  item: Food, Premium Wet Cat - 3.5 oz\n  paid: $197.5\n  quantity: '50'\n  sku: FOOD167\n  unit: $3.95\n- customer: Robert Armstrong\n  date: 7/23/2018 1:41p\n  item: BFF Oh My Gravy! Lamb & Tuna 2.8oz\n  paid: $51.8\n  quantity: '4'\n  sku: FOOD215\n  unit: $12.95\n- customer: Douglas \"Dougie\" Powers\n  date: 7/23/2018 4:23p\n  item: Laser Pointer\n  paid: $16.12\n  quantity: '1'\n  sku: TOY235\n  unit: $16.12\n- customer: \"\\u685C \\u9AD8\\u6A4B (Sakura Takahashi)\"\n  date: 7/24/2018 12:16p\n  item: Food, Senior Wet Cat - 3 oz\n  paid: \"157\\xA5\"\n  quantity: '3'\n  sku: FOOD122\n  unit: $1.29\n- customer: Douglas \"Dougie\" Powers\n  date: 7/26/2018 4:39p\n  item: Food, Shark - 10 kg\n  paid: $15.7\n  quantity: '1'\n  sku: FOOD420\n  unit: $15.70\n- customer: \"\\u685C \\u9AD8\\u6A4B (Sakura Takahashi)\"\n  date: 7/27/2018 12:16p\n  item: Food, Senior Wet Cat - 3 oz\n  paid: \"157\\xA5\"\n  quantity: '3'\n  sku: FOOD122\n  unit: $1.29\n- customer: \"\\u685C \\u9AD8\\u6A4B (Sakura Takahashi)\"\n  date: 7/30/2018 12:17p\n  item: Food, Senior Wet Cat - 3 oz\n  paid: \"157\\xA5\"\n  quantity: '1'\n  sku: RETURN\n  unit: $1.29\n- customer: Rubeus Hagrid\n  date: 7/31/2018 5:42p\n  item: Food, Dragon - 50kg\n  paid: $3602.1\n  quantity: '5'\n  sku: CAT060\n  unit: $720.42\n- customer: David Attenborough\n  date: 8/1/2018 2:44p\n  item: Food, Rhinocerous - 50kg\n  paid: $22.88\n  quantity: '4'\n  sku: FOOD360\n  unit: $5.72\n- customer: Susan Ashworth\n  date: 8/2/2018 5:12p\n  item: Cat, Maine Coon (Felix catus)\n  paid: $1309.68\n  quantity: '1'\n  sku: CAT110\n  unit: $1,309.68\n- customer: Susan Ashworth\n  date: 8/2/2018 5:12p\n  item: Food, Kitten 3kg\n  paid: $44.82\n  quantity: '3'\n  sku: FOOD130\n  unit: $14.94\n- customer: Robert Armstrong\n  date: 8/6/2018 10:21a\n  item: BFF Oh My Gravy! Beef & Chicken 2.8oz\n  paid: $51.8\n  quantity: '4'\n  sku: FOOD212\n  unit: $12.95\n- customer: Juan Johnson\n  date: 8/7/2018 4:12p\n  item: Kingsnake, California (Lampropeltis getula)\n  paid: $89.95\n  quantity: '1'\n  sku: REPT082\n  unit: $89.95\n- customer: Juan Johnson\n  date: 8/7/2018 4:12p\n  item: Mouse, Pinky (Mus musculus)\n  paid: $1.49\n  quantity: '1'\n  sku: RDNT443\n  unit: $1.49\n- customer: Robert Armstrong\n  date: 8/10/2018 4:31p\n  item: BFF Oh My Gravy! Chicken & Turkey 2.8oz\n  paid: $51.8\n  quantity: '4'\n  sku: FOOD211\n  unit: $12.95\n- customer: Monica Johnson\n  date: 8/13/2018 2:07p\n  item: Mouse, Pinky (Mus musculus)\n  paid: $1.49\n  quantity: '1'\n  sku: RDNT443\n  unit: $1.49\n- customer: \"Mar\\xEDa Fern\\xE1ndez\"\n  date: 8/13/2018 2:08p\n  item: Forti Diet Prohealth Mouse/Rat 3lbs\n  paid: $4.0\n  quantity: '2'\n  sku: FOOD146\n  unit: $2.00\n- customer: Mr. Praline\n  date: 8/15/2018 11:57a\n  item: Parrot, Norwegian Blue (Mopsitta tanta)\n  paid: -$2300.0\n  quantity: '1'\n  sku: RETURN\n  unit: $2300.00\n- customer: Kyle Kennedy\n  date: 8/15/2018 3:48p\n  item: Food, Adult Cat - 3.5 oz\n  paid: $8.44\n  quantity: '2'\n  sku: FOOD121\n  unit: $4.22\n- customer: Helen Halestorm\n  date: 8/16/2018 11:50a\n  item: Rabbit (Oryctolagus cuniculus)\n  paid: $0.0\n  quantity: '6'\n  sku: RETURN\n  unit: $0\n- customer: Kyle Kennedy\n  date: 8/16/2018 4:00p\n  item: Dog, Golden Retriever (Canis lupus familiaris)\n  paid: $2495.99\n  quantity: '1'\n  sku: DOG010\n  unit: $2,495.99\n- customer: Michael Smith\n  date: 8/16/2018 5:15p\n  item: Parakeet, Blue (Melopsittacus undulatus)\n  paid: $31.85\n  quantity: '1'\n  sku: BIRD160\n  unit: '29.95'\n- customer: Rubeus Hagrid\n  date: 8/17/2018 9:26a\n  item: Food, Spider\n  paid: $0.25\n  quantity: '5'\n  sku: NSCT201\n  unit: $.05\n- customer: Kyle Kennedy\n  date: 8/20/2018 9:36a\n  item: Dog, Golden Retriever (Canis lupus familiaris)\n  paid: -$1247.99\n  quantity: '1'\n  sku: RETURN\n  unit: $1,247.99\n- customer: \"\\u05DE\\u05E8\\u05D5\\u05E1\\u05D9\\u05D4 \\u05E0\\u05D9\\u05E1\\u05E0\\u05D4\\u05D5\\\n    \\u05DC\\u05E5 \\u05D0\\u05D1\\u05D5\\u05DC\\u05E2\\u05E4\\u05D9\\u05D4\"\n  date: 8/20/2018 1:47p\n  item: Goat, American Pygmy (Capra hircus)\n  paid: $160.51\n  quantity: '1'\n  sku: GOAT224\n  unit: \"\\u20AA499\"\n- customer: Monica Johnson\n  date: 8/20/2018 3:31p\n  item: Crickets, Adult Live (Gryllus assimilis)\n  paid: $1.5\n  quantity: '30'\n  sku: NSCT201\n  unit: $.05\n- customer: David Attenborough\n  date: 8/20/2018 5:12p\n  item: Food, Pangolin\n  paid: $5.10\n  quantity: '30'\n  sku: NSCT084\n  unit: $.17\n- customer: Robert Armstrong\n  date: 8/21/2018 12:13p\n  item: BFF Oh My Gravy! Duck & Salmon 2.8oz\n  paid: $51.8\n  quantity: '4'\n  sku: FOOD214\n  unit: $12.95\n- customer: David Attenborough\n  date: 8/22/2018 9:38a\n  item: Food, Quoll\n  paid: $29.95\n  quantity: '1'\n  sku: BIRD160\n  unit: '29.95'\n- customer: Jon Arbuckle\n  date: 8/22/2018 2:13p\n  item: Food, Adult Dog - 5kg\n  paid: $44.95\n  quantity: '1'\n  sku: FOOD170\n  unit: $44.95\n- customer: \"\\u05DE\\u05E8\\u05D5\\u05E1\\u05D9\\u05D4 \\u05E0\\u05D9\\u05E1\\u05E0\\u05D4\\u05D5\\\n    \\u05DC\\u05E5\"\n  date: 8/22/2018 5:49p\n  item: Fire Extinguisher, kitchen-rated\n  paid: $61.70\n  quantity: '1'\n  sku: SFTY052\n  unit: $61.70\n- customer: Robert Armstrong\n  date: 8/24/2018 11:42a\n  item: BFF Oh My Gravy! Chicken & Salmon 2.8oz\n  paid: $51.8\n  quantity: '4'\n  sku: FOOD218\n  unit: $12.95\n- customer: Monica Johnson\n  date: 8/27/2018 3:05p\n  item: Mealworms, Large (Tenebrio molitor) 100ct\n  paid: $1.99\n  quantity: '1'\n  sku: NSCT443\n  unit: $1.99\n- customer: Susan Ashworth\n  date: 8/28/2018 5:32p\n  item: Cat, Scottish Fold (Felis catus)\n  paid: $1964.53\n  quantity: '1'\n  sku: CAT020\n  unit: $1,964.53\n- customer: Susan Ashworth\n  date: 8/28/2018 5:32p\n  item: Food, Kitten 3kg\n  paid: $29.88\n  quantity: '2'\n  sku: FOOD130\n  unit: $14.94\n- customer: Robert Armstrong\n  date: 8/29/2018 10:07a\n  item: BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\n  paid: $51.8\n  quantity: '4'\n  sku: FOOD219\n  unit: $12.95\n- customer: Robert Armstrong\n  date: 8/31/2018 12:00a\n  item: BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\n  paid: $1864.8\n  quantity: '144'\n  sku: FOOD219\n  unit: $12.95\n- customer: Juan Johnson\n  date: 8/31/2018 5:57p\n  item: Lizard, Spinytail (Uromastyx ornatus)\n  paid: $99.95\n  quantity: '1'\n  sku: REPT217\n  unit: $99.95\n- foo: !!python/tuple\n    - 1\n    - 2\n    - 3\n\n"
  },
  {
    "path": "sample_data/countries",
    "content": "id     cc country-name-------------------------------- co keywords-------------------------------------------\r\n302672 AD Andorra                                      EU                                                    \r\n302618 AE United Arab Emirates                         AS UAE,مطارات في الإمارات العربية المتحدة             \r\n302619 AF Afghanistan                                  AS                                                    \r\n302722 AG Antigua and Barbuda                          NA                                                    \r\n302723 AI Anguilla                                     NA                                                    \r\n302673 AL Albania                                      EU                                                    \r\n302620 AM Armenia                                      AS                                                    \r\n302556 AO Angola                                       AF                                                    \r\n302615 AQ Antarctica                                   AN                                                    \r\n302789 AR Argentina                                    SA Aeropuertos de Argentina                           \r\n302763 AS American Samoa                               OC                                                    \r\n302674 AT Austria                                      EU Flughäfen in Österreich                            \r\n302764 AU Australia                                    OC                                                    \r\n302725 AW Aruba                                        NA                                                    \r\n302621 AZ Azerbaijan                                   AS                                                    \r\n302675 BA Bosnia and Herzegovina                       EU                                                    \r\n302726 BB Barbados                                     NA                                                    \r\n302622 BD Bangladesh                                   AS                                                    \r\n302676 BE Belgium                                      EU Aéroports de Belgique,Luchthavens van België       \r\n302557 BF Burkina Faso                                 AF                                                    \r\n302677 BG Bulgaria                                     EU                                                    \r\n302623 BH Bahrain                                      AS مطارات البحرين                                     \r\n302558 BI Burundi                                      AF                                                    \r\n302559 BJ Benin                                        AF                                                    \r\n302760 BL Saint Barthélemy                             NA                                                    \r\n302727 BM Bermuda                                      NA                                                    \r\n302624 BN Brunei                                       AS                                                    \r\n302790 BO Bolivia                                      SA Aeropuertos de Bolivia                             \r\n302724 BQ Caribbean Netherlands                        NA                                                    \r\n302791 BR Brazil                                       SA Brasil, Brasilian                                  \r\n302728 BS Bahamas                                      NA                                                    \r\n302625 BT Bhutan                                       AS                                                    \r\n302560 BW Botswana                                     AF                                                    \r\n302678 BY Belarus                                      EU Belarussian, Беларусь                              \r\n302729 BZ Belize                                       NA                                                    \r\n302730 CA Canada                                       NA                                                    \r\n302626 CC Cocos (Keeling) Islands                      AS                                                    \r\n302561 CD Congo (Kinshasa)                             AF                                                    \r\n302562 CF Central African Republic                     AF                                                    \r\n302563 CG Congo (Brazzaville)                          AF                                                    \r\n302679 CH Switzerland                                  EU Aéroports de la Suisse,Flughäfen der Schweiz       \r\n302564 CI Côte d'Ivoire                                AF Ivory Coast                                        \r\n302765 CK Cook Islands                                 OC                                                    \r\n302792 CL Chile                                        SA Aeropuertos de Chile                               \r\n302565 CM Cameroon                                     AF                                                    \r\n302627 CN China                                        AS 中国的机场                                              \r\n302793 CO Colombia                                     SA Aeropuertos de Colombia                            \r\n302731 CR Costa Rica                                   NA Aeropuertos de Costa Rica                          \r\n302732 CU Cuba                                         NA Aeropuertos de Cuba                                \r\n302566 CV Cape Verde                                   AF                                                    \r\n302762 CW Curaçao                                      NA                                                    \r\n302628 CX Christmas Island                             AS                                                    \r\n302629 CY Cyprus                                       AS                                                    \r\n302680 CZ Czechia                                      EU Letiště České republiky                            \r\n302681 DE Germany                                      EU Flughäfen in Deutschland                           \r\n302567 DJ Djibouti                                     AF                                                    \r\n302682 DK Denmark                                      EU Lufthavnene i Danmark                              \r\n302733 DM Dominica                                     NA                                                    \r\n302734 DO Dominican Republic                           NA                                                    \r\n302568 DZ Algeria                                      AF مطارات الجزائر                                     \r\n302794 EC Ecuador                                      SA Aeropuertos de Ecuador                             \r\n302683 EE Estonia                                      EU                                                    \r\n302569 EG Egypt                                        AF مطارات مصر                                         \r\n302570 EH Western Sahara                               AF Sahrawian, مطارات الصحراء الغربية                  \r\n302571 ER Eritrea                                      AF                                                    \r\n302684 ES Spain                                        EU Aeropuertos de España                              \r\n302572 ET Ethiopia                                     AF                                                    \r\n302685 FI Finland                                      EU Lentokentät, Suomen                                \r\n302766 FJ Fiji                                         OC                                                    \r\n302795 FK Falkland Islands                             SA                                                    \r\n302767 FM Micronesia                                   OC                                                    \r\n302686 FO Faroe Islands                                EU                                                    \r\n302687 FR France                                       EU Aéroports de France                                \r\n302573 GA Gabon                                        AF                                                    \r\n302688 GB United Kingdom                               EU Great Britain                                      \r\n302735 GD Grenada                                      NA                                                    \r\n302630 GE Georgia                                      AS                                                    \r\n302796 GF French Guiana                                SA French Guyana                                      \r\n302689 GG Guernsey                                     EU                                                    \r\n302574 GH Ghana                                        AF                                                    \r\n302690 GI Gibraltar                                    EU                                                    \r\n302736 GL Greenland                                    NA                                                    \r\n302575 GM Gambia                                       AF                                                    \r\n302576 GN Guinea                                       AF Aéroports de la Guinée                             \r\n302737 GP Guadeloupe                                   NA                                                    \r\n302577 GQ Equatorial Guinea                            AF                                                    \r\n302691 GR Greece                                       EU αεροδρόμια στην Ελλάδα                             \r\n302616 GS South Georgia and the South Sandwich Islands AN                                                    \r\n302738 GT Guatemala                                    NA Aeropuertos de Guatemala                           \r\n302768 GU Guam                                         OC                                                    \r\n302578 GW Guinea-Bissau                                AF                                                    \r\n302797 GY Guyana                                       SA                                                    \r\n302631 HK Hong Kong                                    AS                                                    \r\n302739 HN Honduras                                     NA Aeropuertos de Honduras                            \r\n302692 HR Croatia                                      EU                                                    \r\n302740 HT Haiti                                        NA Aéroports de Haïti                                 \r\n302693 HU Hungary                                      EU Repülőterek Magyarország                           \r\n302632 ID Indonesia                                    AS Bandara di Indonesia                               \r\n302694 IE Ireland                                      EU Eire                                               \r\n302633 IL Israel                                       AS שדות התעופה של ישראל                               \r\n302695 IM Isle of Man                                  EU                                                    \r\n302634 IN India                                        AS                                                    \r\n302635 IO British Indian Ocean Territory               AS                                                    \r\n302636 IQ Iraq                                         AS مطارات العراق                                      \r\n302637 IR Iran                                         AS فرودگاه های ایران                                  \r\n302696 IS Iceland                                      EU                                                    \r\n302697 IT Italy                                        EU Aeroporti d'Italia                                 \r\n302698 JE Jersey                                       EU                                                    \r\n302741 JM Jamaica                                      NA                                                    \r\n302638 JO Jordan                                       AS مطارات في الأردن                                   \r\n302639 JP Japan                                        AS Nippon, 日本の空港                                      \r\n302579 KE Kenya                                        AF                                                    \r\n302640 KG Kyrgyzstan                                   AS                                                    \r\n302641 KH Cambodia                                     AS                                                    \r\n302769 KI Kiribati                                     OC                                                    \r\n302580 KM Comoros                                      AF جزر القمر                                          \r\n302742 KN Saint Kitts and Nevis                        NA                                                    \r\n302642 KP North Korea                                  AS                                                    \r\n302643 KR South Korea                                  AS 한국의 공항                                             \r\n302644 KW Kuwait                                       AS                                                    \r\n302743 KY Cayman Islands                               NA                                                    \r\n302645 KZ Kazakhstan                                   AS Kazakh                                             \r\n302646 LA Laos                                         AS                                                    \r\n302647 LB Lebanon                                      AS المطارات في لبنان                                  \r\n302744 LC Saint Lucia                                  NA                                                    \r\n302699 LI Liechtenstein                                EU                                                    \r\n302648 LK Sri Lanka                                    AS                                                    \r\n302581 LR Liberia                                      AF                                                    \r\n302582 LS Lesotho                                      AF                                                    \r\n302700 LT Lithuania                                    EU                                                    \r\n302701 LU Luxembourg                                   EU                                                    \r\n302702 LV Latvia                                       EU                                                    \r\n302583 LY Libya                                        AF مطارات في ليبيا                                    \r\n302584 MA Morocco                                      AF مطارات المغرب                                      \r\n302703 MC Monaco                                       EU                                                    \r\n302704 MD Moldova                                      EU                                                    \r\n302705 ME Montenegro                                   EU                                                    \r\n302759 MF Saint Martin                                 NA                                                    \r\n302585 MG Madagascar                                   AF                                                    \r\n302770 MH Marshall Islands                             OC                                                    \r\n302706 MK Macedonia                                    EU                                                    \r\n302586 ML Mali                                         AF Aéroports du Mali                                  \r\n302649 MM Burma                                        AS Myanmar                                            \r\n302650 MN Mongolia                                     AS                                                    \r\n302651 MO Macau                                        AS Macao                                              \r\n302771 MP Northern Mariana Islands                     OC                                                    \r\n302745 MQ Martinique                                   NA                                                    \r\n302587 MR Mauritania                                   AF مطارات موريتانيا                                   \r\n302746 MS Montserrat                                   NA                                                    \r\n302707 MT Malta                                        EU                                                    \r\n302588 MU Mauritius                                    AF                                                    \r\n302652 MV Maldives                                     AS                                                    \r\n302589 MW Malawi                                       AF                                                    \r\n302747 MX Mexico                                       NA Aeropuertos de México                              \r\n302653 MY Malaysia                                     AS Lapangan Terbang Malaysia                          \r\n302590 MZ Mozambique                                   AF                                                    \r\n302591 NA Namibia                                      AF                                                    \r\n302772 NC New Caledonia                                OC                                                    \r\n302592 NE Niger                                        AF                                                    \r\n302773 NF Norfolk Island                               OC                                                    \r\n302593 NG Nigeria                                      AF                                                    \r\n302748 NI Nicaragua                                    NA Aeropuertos de Nicaragua                           \r\n302708 NL Netherlands                                  EU Holland,Luchthavens van Nederland                  \r\n302709 NO Norway                                       EU Flyplasser i Norge                                 \r\n302654 NP Nepal                                        AS नेपाल विमानस्थलको                                  \r\n302774 NR Nauru                                        OC                                                    \r\n302775 NU Niue                                         OC                                                    \r\n302776 NZ New Zealand                                  OC                                                    \r\n302655 OM Oman                                         AS مطارات عمان                                        \r\n302749 PA Panama                                       NA Aeropuertos de Panamá                              \r\n302798 PE Perú                                         SA Aeropuertos de Perú                                \r\n302777 PF French Polynesia                             OC                                                    \r\n302778 PG Papua New Guinea                             OC                                                    \r\n302656 PH Philippines                                  AS Mga alternatibong byahe mula sa Pilipinas          \r\n302657 PK Pakistan                                     AS پاکستان کے ہوائی اڈوں                              \r\n302710 PL Poland                                       EU Lotniska Polski                                    \r\n302750 PM Saint Pierre and Miquelon                    NA                                                    \r\n302779 PN Pitcairn                                     OC                                                    \r\n302751 PR Puerto Rico                                  NA                                                    \r\n302658 PS Palestinian Territory                        AS                                                    \r\n302711 PT Portugal                                     EU Aeroportos do Brasil                               \r\n302780 PW Palau                                        OC                                                    \r\n302799 PY Paraguay                                     SA Aeropuertos de Paraguay                            \r\n302659 QA Qatar                                        AS مطارات قطر                                         \r\n302594 RE Réunion                                      AF Île Bourbon, La Réunion                            \r\n302712 RO Romania                                      EU Aeroporturi din România                            \r\n302713 RS Serbia                                       EU Serb                                               \r\n302714 RU Russia                                       EU Soviet, Sovietskaya, Sovetskaya, Аэропорты России  \r\n302595 RW Rwanda                                       AF                                                    \r\n302660 SA Saudi Arabia                                 AS مطارات المملكة العربية السعودية,المطارات لموسم الحج\r\n302781 SB Solomon Islands                              OC                                                    \r\n302596 SC Seychelles                                   AF                                                    \r\n302597 SD Sudan                                        AF مطارات السودان                                     \r\n302715 SE Sweden                                       EU Flygplatserna i Sverige                            \r\n302661 SG Singapore                                    AS                                                    \r\n302598 SH Saint Helena                                 AF                                                    \r\n302716 SI Slovenia                                     EU                                                    \r\n302717 SK Slovakia                                     EU letisko Slovenska                                  \r\n302599 SL Sierra Leone                                 AF                                                    \r\n302718 SM San Marino                                   EU                                                    \r\n302600 SN Senegal                                      AF Aéroports du Sénégal                               \r\n302601 SO Somalia                                      AF                                                    \r\n302800 SR Suriname                                     SA                                                    \r\n302614 SS South Sudan                                  AF                                                    \r\n302602 ST São Tomé and Principe                        AF                                                    \r\n302752 SV El Salvador                                  NA Salvadorian, Salvadorean                           \r\n302761 SX Sint Maarten                                 NA                                                    \r\n302662 SY Syria                                        AS مطارات سوريا                                       \r\n302603 SZ Swaziland                                    AF                                                    \r\n302753 TC Turks and Caicos Islands                     NA                                                    \r\n302604 TD Chad                                         AF                                                    \r\n302617 TF French Southern Territories                  AN                                                    \r\n302605 TG Togo                                         AF                                                    \r\n302663 TH Thailand                                     AS Siam, Siamese                                      \r\n302664 TJ Tajikistan                                   AS Tajik                                              \r\n302782 TK Tokelau                                      OC                                                    \r\n302665 TL Timor-Leste                                  AS East Timor                                         \r\n302666 TM Turkmenistan                                 AS                                                    \r\n302606 TN Tunisia                                      AF مطارات تونس                                        \r\n302783 TO Tonga                                        OC                                                    \r\n302667 TR Turkey                                       AS Türkiye havaalanları                               \r\n302754 TT Trinidad and Tobago                          NA                                                    \r\n302784 TV Tuvalu                                       OC                                                    \r\n302668 TW Taiwan                                       AS                                                    \r\n302607 TZ Tanzania                                     AF                                                    \r\n302719 UA Ukraine                                      EU Аеропорти України                                  \r\n302608 UG Uganda                                       AF                                                    \r\n302785 UM United States Minor Outlying Islands         OC                                                    \r\n302755 US United States                                NA America                                            \r\n302801 UY Uruguay                                      SA Aeropuertos de Uruguay                             \r\n302669 UZ Uzbekistan                                   AS Uzbek                                              \r\n302721 VA Vatican City                                 EU The Holy See                                       \r\n302756 VC Saint Vincent and the Grenadines             NA                                                    \r\n302802 VE Venezuela                                    SA Aeropuertos de Venezuela                           \r\n302757 VG British Virgin Islands                       NA                                                    \r\n302758 VI U.S. Virgin Islands                          NA                                                    \r\n302670 VN Vietnam                                      AS Các sân bay của Việt Nam                           \r\n302786 VU Vanuatu                                      OC                                                    \r\n302787 WF Wallis and Futuna                            OC                                                    \r\n302788 WS Samoa                                        OC                                                    \r\n302720 XK Kosovo                                       EU Kosova                                             \r\n302671 YE Yemen                                        AS مطارات اليمن                                       \r\n302609 YT Mayotte                                      AF                                                    \r\n302610 ZA South Africa                                 AF                                                    \r\n302611 ZM Zambia                                       AF                                                    \r\n302612 ZW Zimbabwe                                     AF                                                    \r\n302613 ZZ Unknown or unassigned country                AF                                                    \r\n"
  },
  {
    "path": "sample_data/empty-table.html",
    "content": "<table class=\"test_empty\">\n</table>\n"
  },
  {
    "path": "sample_data/freshwater-mammals.toml",
    "content": "# Adapted lovingly but hackily from:\n# https://blog.nature.org/2021/04/12/beaver-otter-muskrat-a-field-guide-to-freshwater-mammals/\n\n[beaver]\ntail = \"flat\"\nweight_class = 50\ncatch_phrase = \"dam\"\n\n[muskrat]\ntail = \"rat-like\"\nweight_class = 4\nvariants = {\"round-tailed\" = {\"rare\" = true} }\n\n[nutria]\ntail = \"rat-like\"\nweight_class = 35\n\n[capybara]\nweight_class = 100\nshould_be_in_florida = false\nis_in_florida_anyway = true\n\n[[capybara.sightings]]\nwhere = \"florida\"\nwhen = 2016-08-16\n\n[[capybara.sightings]]  \nwhere = \"los angeles\"\nwhen = 2011-08-08\n\n[american-mink]\nbody = \"weasel-like\"\n"
  },
  {
    "path": "sample_data/gtm.f5log",
    "content": "Oct 28 03:06:07 gtm1.site1.company.com err gtmd[18556]: 011ae0fa:3: iqmgmt_ssl_connect: SSL error: SSL connect (5)\nOct 28 03:06:07 gtm1.site1.company.com err gtmd[18556]: 011ae114:3: iqmgmt_ssl_connect: SSL error: Success (0) from connection 172.17.2.62\nOct 28 03:06:07 gtm1.site1.company.com notice gtmd[18556]: 011ae01c:5: Connection complete to 172.17.2.62. Starting SSL handshake\nOct 28 03:06:08 gtm1.site1.company.com alert gtmd[18556]: 011a1005:1: SNMP_TRAP: Pool /Common/qfdwx4.site1.gtm.company.com-pool state change green --> red (No enabled pool members available)\nOct 28 03:06:08 gtm1.site1.company.com alert gtmd[18556]: 011a3004:1: SNMP_TRAP: Wide IP /Common/qfdwx4.site1.gtm.company.com state change green --> red (No enabled pools available)\nOct 28 03:06:08 gtm1.site1.company.com alert gtmd[18556]: 011a4003:1: SNMP_TRAP: Pool /Common/qfdwx4.site1.gtm.company.com-pool member qfdwx4.site1.gtm.company.com-proxy-22.147.39.12-80 (ip:port=22.147.39.12:80) state change green --> red ( Monitor /Common/qfdwx4.site1.gtm.company.com-22.147.39.12-80-http-monitor : state: timeout)\nOct 28 03:06:08 gtm1.site1.company.com alert gtmd[18556]: 011a6006:1: SNMP_TRAP: VS qfdwx4.site1.gtm.company.com-proxy-22.147.39.12-80 (ip:port=22.147.39.12:80) (Server /Common/server-22.147.39.12) state change green --> red ( Monitor /Common/qfdwx4.site1.gtm.company.com-22.147.39.12-80-http-monitor : state: timeout)\nOct 28 03:06:08 gtm1.site1.company.com alert gtmd[18556]: 011ae0f2:1: Monitor instance /Common/qfdwx4.site1.gtm.company.com-22.147.39.12-80-http-monitor 22.147.39.12:80 UP --> DOWN from 203.16.49.32 (state: timeout)\nOct 28 03:06:13 gtm1.site1.company.com alert gtmd[18556]: 011a4002:1: SNMP_TRAP: Pool /Common/qfvzvo.site1.gtm.company.com-pool member qfvzvo.site1.gtm.company.com-proxy-22.147.100.243-443 (ip:port=22.147.100.243:443) state change red --> green\nOct 28 03:06:13 gtm1.site1.company.com alert gtmd[18556]: 011a6005:1: SNMP_TRAP: VS qfvzvo.site1.gtm.company.com-proxy-22.147.100.243-443 (ip:port=22.147.100.243:443) (Server /Common/server-22.147.100.243) state change red --> green\nOct 28 03:06:13 gtm1.site1.company.com alert gtmd[18556]: 011ae0f2:1: Monitor instance /Common/qfvzvo.site1.gtm.company.com-22.147.100.243-443-https-monitor 22.147.100.243:443 DOWN --> UP from 2207:71ff:ee:5::6ba2:620 (state success)\nOct 28 03:06:16 gtm1.site1.company.com alert gtmd[18556]: 011a5003:1: SNMP_TRAP: Server /Common/server-22.147.150.214 (ip=22.147.150.214) state change red --> green\nOct 28 03:06:24 gtm1.site1.company.com alert gtmd[18556]: 011a1004:1: SNMP_TRAP: Pool /Common/qfdwx4.site1.gtm.company.com-pool state change red --> green\nOct 28 03:06:24 gtm1.site1.company.com alert gtmd[18556]: 011a3003:1: SNMP_TRAP: Wide IP /Common/qfdwx4.site1.gtm.company.com state change red --> green\nOct 28 03:06:29 gtm1.site1.company.com alert gtmd[18556]: 011a4003:1: SNMP_TRAP: Pool /Common/qfdwx4.site1.gtm.company.com-pool member qfdwx4.site1.gtm.company.com-proxy-22.147.39.12-80 (ip:port=22.147.39.12:80) state change green --> red ( Monitor /Common/qfdwx4.site1.gtm.company.com-22.147.39.12-80-http-monitor : state: protocol mismatch)\nOct 28 03:06:29 gtm1.site1.company.com alert gtmd[18556]: 011a6006:1: SNMP_TRAP: VS qfdwx4.site1.gtm.company.com-proxy-22.147.39.12-80 (ip:port=22.147.39.12:80) (Server /Common/server-22.147.39.12) state change green --> red ( Monitor /Common/qfdwx4.site1.gtm.company.com-22.147.39.12-80-http-monitor : state: protocol mismatch)\nOct 28 03:06:43 gtm1.site1.company.com alert gtmd[18556]: 011a5004:1: SNMP_TRAP: Server /Common/server-22.147.85.127 (ip=22.147.85.127) state change green --> red (No enabled VS available)\nOct 28 03:11:42 gtm1.site1.company.com notice gtmd[18556]: 011ae01a:5: SSL handshake complete to 2207:71ff:ee:5::6ba2:3120\nOct 28 03:34:16 gtm1.site1.company.com alert gtmd[18556]: 011a1005:1: SNMP_TRAP: Pool /Common/qfgye6.site1.gtm.company.com-pool state change blue --> red (No enabled pool members available)\nOct 28 03:34:16 gtm1.site1.company.com alert gtmd[18556]: 011a3004:1: SNMP_TRAP: Wide IP /Common/qfgye6.site1.gtm.company.com state change blue --> red (No enabled pools available)\nOct 28 03:36:30 gtm1 Saving running configuration...\nOct 28 03:36:32 gtm1.site1.company.com notice gtmd[18556]: 011a0059:5: hookOnChild: tmsh config save exited with status == 0.(success)\nOct 28 04:13:04 gtm1.site1.company.com err big3d[8854]: 012b200a:3: Failed to send xml message: Unhandled SSL Error\nOct 28 07:38:29 gtm1.site1.company.com notice gtmd[18556]: 011ae01d:5: ERROR - sendto: Success\nOct 28 08:05:52 gtm1.site1.company.com alert gtmd[18556]: 011a6005:1: SNMP_TRAP: VS qfdq9e.site1.gtm.company.com-proxy-22.147.120.192-80 (ip:port=22.147.120.192:80) (Server /Common/server-22.147.120.192) state change blue --> green\nOct 28 08:05:52 gtm1.site1.company.com alert gtmd[18556]: 011ae0f2:1: Monitor instance /Common/qfdq9e.site1.gtm.company.com-22.147.120.192-80-http-monitor 22.147.120.192:80 CHECKING --> UP from 2207:71ff:ee:5::6ba2:520 (state: success)\nOct 28 08:05:55 gtm1.site1.company.com alert gtmd[18556]: 011a5003:1: SNMP_TRAP: Server /Common/server-22.147.254.182 (ip=22.147.254.182) state change blue --> green\nOct 28 08:07:47 gtm1.site1.company.com alert gtmd[18556]: 011a4002:1: SNMP_TRAP: Pool /Common/qfdq9e.site1.gtm.company.com-pool member qfdq9e.site1.gtm.company.com-proxy-22.147.120.192-443 (ip:port=22.147.120.192:443) state change blue --> green\nOct 28 17:01:54 gtm1.site1.company.com alert gtmd[18556]: 011a3004:1: SNMP_TRAP: Wide IP /Common/qfdjgq.site1.gtm.company.com state change red --> blue (Checking)\nOct 29 09:25:07 gtm1.site1.company.com alert gtmd[18556]: 011a1005:1: SNMP_TRAP: Pool /Common/qfjzxo.site1.gtm.company.com-pool state change red --> blue (Checking)\nOct 29 09:25:09 gtm1.site1.company.com alert gtmd[18556]: 011a1004:1: SNMP_TRAP: Pool /Common/qfjzxo.site1.gtm.company.com-pool state change blue --> green\nOct 29 09:25:09 gtm1.site1.company.com alert gtmd[18556]: 011a3003:1: SNMP_TRAP: Wide IP /Common/qfjzxo.site1.gtm.company.com state change blue --> green\nOct 29 09:25:20 gtm1.site1.company.com alert gtmd[18556]: 011a4003:1: SNMP_TRAP: Pool /Common/qfjzxo.site1.gtm.company.com-pool member qfjzxo.site1.gtm.company.com-proxy-22.147.9.162-80 (ip:port=22.147.9.162:80) state change blue --> red ( Monitor /Common/qfjzxo.site1.gtm.company.com-22.147.9.162-80-http-monitor : no reply from big3d: timed out)\nOct 29 09:25:20 gtm1.site1.company.com alert gtmd[18556]: 011a6006:1: SNMP_TRAP: VS qfjzxo.site1.gtm.company.com-proxy-22.147.9.162-80 (ip:port=22.147.9.162:80) (Server /Common/server-22.147.9.162) state change blue --> red ( Monitor /Common/qfjzxo.site1.gtm.company.com-22.147.9.162-80-http-monitor : no reply from big3d: timed out)\nOct 29 09:25:20 gtm1.site1.company.com alert gtmd[18556]: 011ae0f2:1: Monitor instance /Common/qfjzxo.site1.gtm.company.com-22.147.9.162-80-http-monitor 22.147.9.162:80 CHECKING --> DOWN from /Common/gtm1.site4.company.com (no reply from big3d: timed out)\nOct 29 13:19:31 gtm1.site1.company.com err big3d[8854]: 012b3003:3: SSL error during shutdown: SSL SSL_ERROR_SSL\nNov  1 17:06:46 gtm1.site1.company.com alert gtmd[18556]: 011a5004:1: SNMP_TRAP: Server /Common/server-22.147.159.198 (ip=22.147.159.198) state change red --> blue (Checking)\nNov  1 17:13:08 gtm1.site1.company.com err gtmd[18556]: 011ae044:3: Could not find monitor object 22.147.113.92:80 on server:vs /Common/server-22.147.113.92:qf51m0.site.gtm.company.com-proxy-22.147.113.92-80\nNov  1 18:00:59 gtm1.site1.company.com alert gtmd[18556]: 011a5004:1: SNMP_TRAP: Server /Common/server-22.147.89.225 (ip=22.147.89.225) state change green --> blue (Checking)\nNov  1 20:15:23 gtm1.site1.company.com notice gtmd[18556]: 011a001c:5: SYNC bigip_gtm.conf from 2207:71ff:ee:5::6ba2:620 skipped. Reason: iqsyncer currently running from 203.16.6.32\nNov  1 20:15:23 gtm1.site1.company.com notice gtmd[18556]: 011a001d:5: SYNC loading GTM config from: 203.16.6.32\nNov  1 20:15:24 gtm1.site1.company.com notice gtmd[18556]: 011a0006:5: hookOnChild: SYNC syncer exited with status == 0.(success)\nNov  2 04:25:37 gtm1.site1.company.com notice gtmd[18556]: 011a0046:5: SYNC_ZONES attempting to sync from 2207:71ff:ee:5::6ba2:620.\nNov  2 04:25:37 gtm1.site1.company.com notice zrd[18894]: 01150a42:5: Sync Zones starting from ip '2207:71ff:ee:5::6ba2:620' with timeout '300'.\nNov  2 04:25:40 gtm1.site1.company.com notice gtmd[18556]: 011a0047:5: SYNC_ZONES completed from 2207:71ff:ee:5::6ba2:620.\nNov  2 04:25:40 gtm1.site1.company.com notice zrd[18894]: 01150a33:5: Sync Zones exited with status == 0. (success)\nNov  2 06:20:03 gtm1.site1.company.com alert gtmd[18556]: 011a6006:1: SNMP_TRAP: VS /Common/gtm_1cea_udp (ip:port=2207:71ff:ee::ffff:6ba2:8dea.53) (Server /Common/gtm1.site1.company.com) state change green --> red ( Monitor /Common/bigip : no reply from big3d: timed out)\nNov  2 06:20:03 gtm1.site1.company.com alert gtmd[18556]: 011ae0f2:1: Monitor instance /Common/bigip 2207:71ff:ee::ffff:6ba2:8dea:53 UP --> DOWN from /Common/gtm1.site1.company.com (no reply from big3d: timed out)\nNov  2 06:28:39 gtm1.site1.company.com alert gtmd[18556]: 011a5009:1: SNMP_TRAP: BIG-IP GTM /Common/gtm1.site1.company.com (203.16.49.32) left sync group syncgroup-1\nNov  2 06:28:40 gtm1.site1.company.com alert gtmd[18556]: 011ab004:1: SNMP_TRAP: Data center /Common/SITE state change green --> red (No enabled servers available)\nNov  2 06:29:47 gtm1.site1.company.com notice big3d[8854]: 012b0001:5: big3d exiting ===============================\nNov  2 06:30:02 gtm1.site1.company.com notice zrd[18894]: 0115120a:5: zrd[18894] stopping.\nNov  2 09:39:05 gtm1 alert tmm4[22559]: 011a4004:1: SNMP_TRAP: Pool (/Common/site1.gtm.company.com) member (10.17.4.88:3345) disabled\nNov  2 09:39:13 gtm1.site1.company.com notice big3d[8169]: 012b0000:5: big3d Version 16.1.0.0.47.19 started ===============================\nNov  2 09:39:13 gtm1.site1.company.com notice big3d[8169]: 012b0014:5: Current executable path is /usr/sbin/big3d. Checking for existence of /shared/bin/big3d.\nNov  2 09:39:13 gtm1.site1.company.com notice big3d[8169]: 012b0018:5: Respawning to run /shared/bin/big3d.\nNov  2 09:39:13 gtm1.site1.company.com notice big3d[8169]: 012b001f:5: Modification time(1631155098) is Thu Sep  9 02:38:18 2021 for executable '/usr/sbin/big3d'.\nNov  2 09:39:13 gtm1.site1.company.com notice big3d[8169]: 012b0020:5: Executable /shared/bin/big3d timestamp is newer than (or the same as) /usr/sbin/big3d.\nNov  2 09:39:13 gtm1.site1.company.com notice big3d[8169]: 012b0021:5: Executable /usr/sbin/big3d version 'big3d Version 16.1.0.0.47.19'.\nNov  2 09:39:13 gtm1.site1.company.com notice big3d[8169]: 012b3007:5: SSL Context created using minimum TLS version tlsv1, SSL cipher list 'AESGCM:AES:!ADH:!AECDH:!PSK:!aECDH:!DSS:!ECDSA:!AES128:-SHA1:AES256-SHA'.\nNov  2 09:39:13 gtm1.site1.company.com notice big3d[8169]: 012b3008:5: SSL Context Cipher list set to: AESGCM:AES:!ADH:!AECDH:!PSK:!aECDH:!DSS:!ECDSA:!AES128:-SHA1:AES256-SHA.\nNov  2 09:39:13 gtm1.site1.company.com notice big3d[8169]: 012b700b:5: Route Domain support detected.\nNov  2 09:39:13 gtm1.site1.company.com notice gtmd[16672]: 011a0007:5: /usr/sbin/gtmd started ===============================\nNov  2 09:39:13 gtm1.site1.company.com notice gtmd[16672]: 011ae05f:5: SSL Context created with cipher list 'AESGCM:AES:!ADH:!AECDH:!PSK:!aECDH:!DSS:!ECDSA:!AES128:-SHA1:AES256-SHA' and minimum TLS version 'TLSv1'.\nNov  2 09:39:16 gtm1.site1.company.com notice zrd[16957]: 01151209:5: zrd[16957] starting.\nNov  2 09:39:22 gtm1.site1.company.com alert gtmd[16672]: 011a1102:1: SNMP_TRAP: Prober Pool /Common/syncgroup state change blue --> red (No enabled pool members available)\nNov  2 09:41:24 gtm1.site1.company.com alert gtmd[16672]: 011a5004:1: SNMP_TRAP: Server /Common/bigigp10.site1.company.com (ip=172.17.2.61) state change blue --> red (No enabled VS available)\nNov  2 09:41:24 gtm1.site1.company.com alert gtmd[16672]: 011a6006:1: SNMP_TRAP: VS /Common/gtm_1cea_udp (ip:port=2207:71ff:ee::ffff:6ba2:8dea.53) (Server /Common/gtm1.site1.company.com) state change blue --> red ( Monitor /Common/bigip : no reply from big3d: timed out)\nNov  2 09:41:24 gtm1.site1.company.com alert gtmd[16672]: 011ae0f2:1: Monitor instance /Common/bigip 2207:71ff:ee::ffff:6ba2:8dea:53 CHECKING --> DOWN from /Common/gtm1.site1.company.com (no reply from big3d: timed out)\nNov  2 09:45:39 gtm1.site1.company.com alert gtmd[16672]: 011ab003:1: SNMP_TRAP: Data center /Common/sitey state change red --> green\nNov  2 09:48:21 gtm1.site1.company.com alert gtmd[16672]: 011a6005:1: SNMP_TRAP: VS /Common/gtm_8dea_tcp (ip:port=2207:71ff:ee::ffff:6ba2:8dea.53) (Server /Common/gtm1.site1.company.com) state change red --> green\nNov  2 09:48:21 gtm1.site1.company.com alert gtmd[16672]: 011ae0f2:1: Monitor instance /Common/bigip 2207:71ff:ee::ffff:6ba2:8dea:53 DOWN --> UP from 203.16.5.32 (UP)\nNov  5 07:07:04 gtm1.site1.company.com alert gtmd[16672]: 011a4101:1: SNMP_TRAP: Prober Pool /Common/syncgroup member /Common/gtm1.site3.company.com state change red --> green\nNov  5 07:07:04 gtm1.site1.company.com alert gtmd[16672]: 011a500b:1: SNMP_TRAP: Box 203.16.4.32 state change red --> green\nNov  5 07:07:14 gtm1.site1.company.com alert gtmd[16672]: 011a5008:1: SNMP_TRAP: BIG-IP GTM /Common/gtm1.site3.company.com (203.16.4.32) joined sync group syncgroup-1\nNov  5 08:03:09 gtm1.site1.company.com err zrd[16957]: 01150a39:3: Sync Zones pid:15513 exited with error 255\n"
  },
  {
    "path": "sample_data/hello.mnu",
    "content": "x\ty\ttext\tcolor\tcommand\tinput\tcond\tstatus\n3\t4\thello world\t217 underline\tshow-status\tHello World!\t\t\n"
  },
  {
    "path": "sample_data/issue1308.html",
    "content": "<table >\n        <tbody>\n                <tr>\n                        <td rowspan=3>1.1 </td>\n                        <td>1.2 </td>\n                        <td>1.3 </td>\n                </tr>\n                <tr>\n                        <td> 2.2 </td>\n                        <td> 2.3 </td>\n                </tr>\n                <tr>\n                        <td> 3.2 </td>\n                        <td> 3.3 </td>\n                </tr>\n        </tbody>\n</table>\n"
  },
  {
    "path": "sample_data/numeric-cols.tsv",
    "content": "5\tRegion\t\tItem\tUnits\tUnit_Cost\tTotal\n2016-01-06\tEast\tJones\tPencil\t95\t1.99\t189.05\n2016-01-23\tCentral\tKivell\tBinder\t50\t19.99\t999.50\n2016-02-09\tCentral\tJardine\tPencil\t36\t4.99\t179.64\n2016-02-26\tCentral\tGill\tPen\t27\t19.99\t539.73\n2016-03-15\tWest\tSorvino\tPencil\t56\t2.99\t167.44\n2016-04-01\tEast\tJones\tBinder\t60\t4.99\t299.40\n2016-04-18\tCentral\tAndrews\tPencil\t75\t1.99\t149.25\n2016-05-05\tCentral\tJardine\tPencil\t90\t4.99\t449.10\n2016-05-22\tWest\tThompson\tPencil\t32\t1.99\t63.68\n2016-06-08\tEast\tJones\tBinder\t60\t8.99\t539.40\n2016-06-25\tCentral\tMorgan\tPencil\t90\t4.99\t449.10\n2016-07-12\tEast\tHoward\tBinder\t29\t1.99\t57.71\n2016-07-29\tEast\tParent\tBinder\t81\t19.99\t1619.19\n2016-08-15\tEast\tJones\tPencil\t35\t4.99\t174.65\n2016-09-01\tCentral\tSmith\tDesk\t2\t125.00\t250.00\n2016-09-18\tEast\tJones\tPen Set\t16\t15.99\t255.84\n2016-10-05\tCentral\tMorgan\tBinder\t28\t8.99\t251.72\n2016-10-22\tEast\tJones\tPen\t64\t8.99\t575.36\n2016-11-08\tEast\tParent\tPen\t15\t19.99\t299.85\n2016-11-25\tCentral\tKivell\tPen Set\t96\t4.99\t479.04\n2016-12-12\tCentral\tSmith\tPencil\t67\t1.29\t86.43\n2016-12-29\tEast\tParent\tPen Set\t74\t15.99\t1183.26\n2017-01-15\tCentral\tGill\tBinder\t46\t8.99\t413.54\n2017-02-01\tCentral\tSmith\tBinder\t87\t15.00\t1305.00\n2017-02-18\tEast\tJones\tBinder\t4\t4.99\t19.96\n2017-03-07\tWest\tSorvino\tBinder\t7\t19.99\t139.93\n2017-03-24\tCentral\tJardine\tPen Set\t50\t4.99\t249.50\n2017-04-10\tCentral\tAndrews\tPencil\t66\t1.99\t131.34\n2017-04-27\tEast\tHoward\tPen\t96\t4.99\t479.04\n2017-05-14\tCentral\tGill\tPencil\t53\t1.29\t68.37\n2017-05-31\tCentral\tGill\tBinder\t80\t8.99\t719.20\n2017-06-17\tCentral\tKivell\tDesk\t5\t125.00\t625.00\n2017-07-04\tEast\tJones\tPen Set\t62\t4.99\t309.38\n2017-07-21\tCentral\tMorgan\tPen Set\t55\t12.49\t686.95\n2017-08-07\tCentral\tKivell\tPen Set\t42\t23.95\t1005.90\n2017-08-24\tWest\tSorvino\tDesk\t3\t275.00\t825.00\n2017-09-10\tCentral\tGill\tPencil\t7\t1.29\t9.03\n2017-09-27\tWest\tSorvino\tPen\t76\t1.99\t151.24\n2017-10-14\tWest\tThompson\tBinder\t57\t19.99\t1139.43\n2017-10-31\tCentral\tAndrews\tPencil\t14\t1.29\t18.06\n2017-11-17\tCentral\tJardine\tBinder\t11\t4.99\t54.89\n2017-12-04\tCentral\tJardine\tBinder\t94\t19.99\t1879.06\n2017-12-21\tCentral\tAndrews\tBinder\t28\t4.99\t139.72\n"
  },
  {
    "path": "sample_data/officials.jsonla",
    "content": "[\"Name\", \"Number\", \"Exile\"]\n[\"Daniel\", 1, true]\n[\"Hananiah\", 2, true]\n[\"Mishael\", 3, true]\n[\"Azariah\", 4, true]\n[\"Nebuchadnezzar\", 5, false]\n"
  },
  {
    "path": "sample_data/pr2815.jsonl",
    "content": "[\"description\", \"col1\", \"col2\"]\n[\"normal ASCII cell looks fine:\", \"ordinary contents\", \"\"]\n[\"but cell ending in ASCII char 0 looks empty\", \"invisible string\\u0000\", \"\"]\n[\"2 words separated by space\", \"word1 word2\", \"\"]\n[\"2 words separated by TAB: invisible final chars\", \"word1\\t\\tword2\", \"\"]\n[\"multiline value, with two lines hidden by next rows; press v\", \"\", \"first\\nsecond\\nlast\"]\n[\"ASCII chars 1-255\", \"\", \"\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\u007f\\u0080\\u0081\\u0082\\u0083\\u0084\\u0085\\u0086\\u0087\\u0088\\u0089\\u008a\\u008b\\u008c\\u008d\\u008e\\u008f\\u0090\\u0091\\u0092\\u0093\\u0094\\u0095\\u0096\\u0097\\u0098\\u0099\\u009a\\u009b\\u009c\\u009d\\u009e\\u009f\\u00a0\\u00a1\\u00a2\\u00a3\\u00a4\\u00a5\\u00a6\\u00a7\\u00a8\\u00a9\\u00aa\\u00ab\\u00ac\\u00ad\\u00ae\\u00af\\u00b0\\u00b1\\u00b2\\u00b3\\u00b4\\u00b5\\u00b6\\u00b7\\u00b8\\u00b9\\u00ba\\u00bb\\u00bc\\u00bd\\u00be\\u00bf\\u00c0\\u00c1\\u00c2\\u00c3\\u00c4\\u00c5\\u00c6\\u00c7\\u00c8\\u00c9\\u00ca\\u00cb\\u00cc\\u00cd\\u00ce\\u00cf\\u00d0\\u00d1\\u00d2\\u00d3\\u00d4\\u00d5\\u00d6\\u00d7\\u00d8\\u00d9\\u00da\\u00db\\u00dc\\u00dd\\u00de\\u00df\\u00e0\\u00e1\\u00e2\\u00e3\\u00e4\\u00e5\\u00e6\\u00e7\\u00e8\\u00e9\\u00ea\\u00eb\\u00ec\\u00ed\\u00ee\\u00ef\\u00f0\\u00f1\\u00f2\\u00f3\\u00f4\\u00f5\\u00f6\\u00f7\\u00f8\\u00f9\\u00fa\\u00fb\\u00fc\\u00fd\\u00fe\\u00ff\"]\n[\"empty row\", \"\", \"\"]\n[\"empty row\", \"\", \"\"]\n[\"empty row\", \"\", \"\"]\n[\"multiline value, lines not hidden by next rows\", \"\", \"first\\nsecond\\nlast\"]\n"
  },
  {
    "path": "sample_data/sample.conllu",
    "content": "# sent_id = dev-s1\n# text = ただし、50周年ソングに変更後は、EDも歌つきのものが使われた。\n1\tただし\tただし\tCCONJ\t接続詞\t_\t18\tcc\t_\tBunsetuPositionType=SEM_HEAD|LUWBILabel=B|LUWPOS=接続詞|SpaceAfter=No|UniDicLemma=但し\n2\t、\t、\tPUNCT\t補助記号-読点\t_\t1\tpunct\t_\tBunsetuPositionType=CONT|LUWBILabel=B|LUWPOS=補助記号-読点|SpaceAfter=No|UniDicLemma=、\n3\t50\t50\tNUM\t名詞-数詞\t_\t5\tnummod\t_\tBunsetuPositionType=CONT|LUWBILabel=B|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=五十\n4\t周年\t周年\tNOUN\t名詞-普通名詞-助数詞可能\t_\t5\tcompound\t_\tBunsetuPositionType=CONT|LUWBILabel=I|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=周年\n5\tソング\tソング\tNOUN\t名詞-普通名詞-一般\t_\t8\tobl\t_\tBunsetuPositionType=SEM_HEAD|LUWBILabel=I|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=ソング\n6\tに\tに\tADP\t助詞-格助詞\t_\t5\tcase\t_\tBunsetuPositionType=SYN_HEAD|LUWBILabel=B|LUWPOS=助詞-格助詞|SpaceAfter=No|UniDicLemma=に\n7\t変更\t変更\tNOUN\t名詞-普通名詞-サ変可能\t_\t8\tcompound\t_\tBunsetuPositionType=CONT|LUWBILabel=B|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=変更\n8\t後\t後\tNOUN\t接尾辞-名詞的-副詞可能\t_\t18\tdislocated\t_\tBunsetuPositionType=SEM_HEAD|LUWBILabel=I|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=後\n9\tは\tは\tADP\t助詞-係助詞\t_\t8\tcase\t_\tBunsetuPositionType=SYN_HEAD|LUWBILabel=B|LUWPOS=助詞-係助詞|SpaceAfter=No|UniDicLemma=は\n10\t、\t、\tPUNCT\t補助記号-読点\t_\t8\tpunct\t_\tBunsetuPositionType=CONT|LUWBILabel=B|LUWPOS=補助記号-読点|SpaceAfter=No|UniDicLemma=、\n11\tED\tED\tNOUN\t名詞-普通名詞-一般\t_\t18\tobl\t_\tBunsetuPositionType=SEM_HEAD|LUWBILabel=B|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=ＥＤ\n12\tも\tも\tADP\t助詞-係助詞\t_\t11\tcase\t_\tBunsetuPositionType=SYN_HEAD|LUWBILabel=B|LUWPOS=助詞-係助詞|SpaceAfter=No|UniDicLemma=も\n13\t歌\t歌\tNOUN\t名詞-普通名詞-一般\t_\t14\tcompound\t_\tBunsetuPositionType=CONT|LUWBILabel=B|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=歌\n14\tつき\tつき\tNOUN\t接尾辞-名詞的-一般\t_\t16\tnmod\t_\tBunsetuPositionType=SEM_HEAD|LUWBILabel=I|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=付き\n15\tの\tの\tADP\t助詞-格助詞\t_\t14\tcase\t_\tBunsetuPositionType=SYN_HEAD|LUWBILabel=B|LUWPOS=助詞-格助詞|SpaceAfter=No|UniDicLemma=の\n16\tもの\tもの\tNOUN\t名詞-普通名詞-サ変可能\t_\t18\tnsubj\t_\tBunsetuPositionType=SEM_HEAD|LUWBILabel=B|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=物\n17\tが\tが\tADP\t助詞-格助詞\t_\t16\tcase\t_\tBunsetuPositionType=SYN_HEAD|LUWBILabel=B|LUWPOS=助詞-格助詞|SpaceAfter=No|UniDicLemma=が\n18\t使わ\t使う\tVERB\t動詞-一般\t_\t0\troot\t_\tBunsetuPositionType=ROOT|LUWBILabel=B|LUWPOS=動詞-一般|SpaceAfter=No|UniDicLemma=使う\n19\tれ\tれる\tAUX\t助動詞\t_\t18\taux\t_\tBunsetuPositionType=FUNC|LUWBILabel=B|LUWPOS=助動詞|SpaceAfter=No|UniDicLemma=れる\n20\tた\tた\tAUX\t助動詞\t_\t18\taux\t_\tBunsetuPositionType=SYN_HEAD|LUWBILabel=B|LUWPOS=助動詞|SpaceAfter=No|UniDicLemma=た\n21\t。\t。\tPUNCT\t補助記号-句点\t_\t18\tpunct\t_\tBunsetuPositionType=CONT|LUWBILabel=B|LUWPOS=補助記号-句点|SpaceAfter=No|UniDicLemma=。\n\n# sent_id = dev-s2\n# text = 私は初めてだったんだけど思っていたよりも魚は新鮮でした。\n1\t私\t私\tPRON\t代名詞\t_\t3\tnsubj\t_\tBunsetuPositionType=SEM_HEAD|LUWBILabel=B|LUWPOS=代名詞|SpaceAfter=No|UniDicLemma=私\n2\tは\tは\tADP\t助詞-係助詞\t_\t1\tcase\t_\tBunsetuPositionType=SYN_HEAD|LUWBILabel=B|LUWPOS=助詞-係助詞|SpaceAfter=No|UniDicLemma=は\n3\t初めて\t初めて\tADV\t副詞\t_\t17\tadvcl\t_\tBunsetuPositionType=SEM_HEAD|LUWBILabel=B|LUWPOS=副詞|SpaceAfter=No|UniDicLemma=初めて\n4\tだっ\tだ\tAUX\t助動詞\t_\t3\taux\t_\tBunsetuPositionType=FUNC|LUWBILabel=B|LUWPOS=助動詞|SpaceAfter=No|UniDicLemma=だ\n5\tた\tた\tAUX\t助動詞\t_\t3\taux\t_\tBunsetuPositionType=FUNC|LUWBILabel=B|LUWPOS=助動詞|SpaceAfter=No|UniDicLemma=た\n6\tん\tん\tSCONJ\t助詞-準体助詞\t_\t3\tmark\t_\tBunsetuPositionType=FUNC|LUWBILabel=B|LUWPOS=助動詞|SpaceAfter=No|UniDicLemma=の\n7\tだ\tだ\tAUX\t助動詞\t_\t3\taux\t_\tBunsetuPositionType=FUNC|LUWBILabel=I|LUWPOS=助動詞|SpaceAfter=No|UniDicLemma=だ\n8\tけど\tけど\tSCONJ\t助詞-接続助詞\t_\t3\tmark\t_\tBunsetuPositionType=SYN_HEAD|LUWBILabel=B|LUWPOS=助詞-接続助詞|SpaceAfter=No|UniDicLemma=けれど\n9\t思っ\t思う\tVERB\t動詞-一般\t_\t17\tadvcl\t_\tBunsetuPositionType=SEM_HEAD|LUWBILabel=B|LUWPOS=動詞-一般|SpaceAfter=No|UniDicLemma=思う\n10\tて\tて\tSCONJ\t助詞-接続助詞\t_\t9\tmark\t_\tBunsetuPositionType=FUNC|LUWBILabel=B|LUWPOS=助動詞|SpaceAfter=No|UniDicLemma=て\n11\tい\tいる\tAUX\t動詞-非自立可能\t_\t9\taux\t_\tBunsetuPositionType=CONT|LUWBILabel=I|LUWPOS=助動詞|SpaceAfter=No|UniDicLemma=居る\n12\tた\tた\tAUX\t助動詞\t_\t9\taux\t_\tBunsetuPositionType=FUNC|LUWBILabel=B|LUWPOS=助動詞|SpaceAfter=No|UniDicLemma=た\n13\tより\tより\tADP\t助詞-格助詞\t_\t9\tcase\t_\tBunsetuPositionType=FUNC|LUWBILabel=B|LUWPOS=助詞-格助詞|SpaceAfter=No|UniDicLemma=より\n14\tも\tも\tADP\t助詞-係助詞\t_\t9\tcase\t_\tBunsetuPositionType=SYN_HEAD|LUWBILabel=B|LUWPOS=助詞-係助詞|SpaceAfter=No|UniDicLemma=も\n15\t魚\t魚\tNOUN\t名詞-普通名詞-一般\t_\t17\tnsubj\t_\tBunsetuPositionType=SEM_HEAD|LUWBILabel=B|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=魚\n16\tは\tは\tADP\t助詞-係助詞\t_\t15\tcase\t_\tBunsetuPositionType=SYN_HEAD|LUWBILabel=B|LUWPOS=助詞-係助詞|SpaceAfter=No|UniDicLemma=は\n17\t新鮮\t新鮮\tADJ\t形状詞-一般\t_\t0\troot\t_\tBunsetuPositionType=ROOT|LUWBILabel=B|LUWPOS=形状詞-一般|SpaceAfter=No|UniDicLemma=新鮮\n18\tでし\tだ\tAUX\t助動詞\t_\t17\taux\t_\tBunsetuPositionType=FUNC|LUWBILabel=B|LUWPOS=助動詞|SpaceAfter=No|UniDicLemma=です\n19\tた\tた\tAUX\t助動詞\t_\t17\taux\t_\tBunsetuPositionType=SYN_HEAD|LUWBILabel=B|LUWPOS=助動詞|SpaceAfter=No|UniDicLemma=た\n20\t。\t。\tPUNCT\t補助記号-句点\t_\t17\tpunct\t_\tBunsetuPositionType=CONT|LUWBILabel=B|LUWPOS=補助記号-句点|SpaceAfter=No|UniDicLemma=。\n\n# sent_id = dev-s4\n# text = セントラル・リーグ審判員の水落朋大は実兄。\n1\tセントラル\tセントラル\tNOUN\t名詞-普通名詞-一般\t_\t5\tcompound\t_\tBunsetuPositionType=CONT|LUWBILabel=B|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=セントラル\n2\t・\t・\tSYM\t補助記号-一般\t_\t5\tcompound\t_\tBunsetuPositionType=CONT|LUWBILabel=I|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=・\n3\tリーグ\tリーグ\tNOUN\t名詞-普通名詞-一般\t_\t5\tcompound\t_\tBunsetuPositionType=CONT|LUWBILabel=I|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=リーグ\n4\t審判\t審判\tNOUN\t名詞-普通名詞-サ変可能\t_\t5\tcompound\t_\tBunsetuPositionType=CONT|LUWBILabel=I|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=審判\n5\t員\t員\tNOUN\t接尾辞-名詞的-一般\t_\t8\tnmod\t_\tBunsetuPositionType=SEM_HEAD|LUWBILabel=I|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=員\n6\tの\tの\tADP\t助詞-格助詞\t_\t5\tcase\t_\tBunsetuPositionType=SYN_HEAD|LUWBILabel=B|LUWPOS=助詞-格助詞|SpaceAfter=No|UniDicLemma=の\n7\t水落\t水落\tPROPN\t名詞-固有名詞-人名-姓\t_\t8\tcompound\t_\tBunsetuPositionType=CONT|LUWBILabel=B|LUWPOS=名詞-固有名詞-人名-一般|SpaceAfter=No|UniDicLemma=ミズオチ\n8\t朋大\t朋大\tPROPN\t名詞-固有名詞-人名-名\t_\t10\tnsubj\t_\tBunsetuPositionType=SEM_HEAD|LUWBILabel=I|LUWPOS=名詞-固有名詞-人名-一般|SpaceAfter=No|UniDicLemma=トモヒロ\n9\tは\tは\tADP\t助詞-係助詞\t_\t8\tcase\t_\tBunsetuPositionType=SYN_HEAD|LUWBILabel=B|LUWPOS=助詞-係助詞|SpaceAfter=No|UniDicLemma=は\n10\t実兄\t実兄\tNOUN\t名詞-普通名詞-一般\t_\t0\troot\t_\tBunsetuPositionType=ROOT|LUWBILabel=B|LUWPOS=名詞-普通名詞-一般|SpaceAfter=No|UniDicLemma=実兄\n11\t。\t。\tPUNCT\t補助記号-句点\t_\t10\tpunct\t_\tBunsetuPositionType=CONT|LUWBILabel=B|LUWPOS=補助記号-句点|SpaceAfter=No|UniDicLemma=。\n"
  },
  {
    "path": "sample_data/sample.geojson",
    "content": "{\"type\": \"FeatureCollection\", \"features\": [{\"geometry\": {\"type\": \"Polygon\", \"coordinates\": [[[-117.215796, 32.72734], [-117.213956, 32.728308], [-117.20961, 32.72839], [-117.209362, 32.729376], [-117.20870099999999, 32.734341], [-117.20625799999999, 32.736549], [-117.20499, 32.736222999999995], [-117.20418699999999, 32.734874], [-117.203541, 32.738113999999996], [-117.191898, 32.734252999999995], [-117.190761, 32.738309], [-117.187513, 32.739205999999996], [-117.185795, 32.739115], [-117.184275, 32.740480999999996], [-117.183331, 32.74189], [-117.182409, 32.742553], [-117.180216, 32.741413], [-117.178514, 32.739661999999996], [-117.171347, 32.731485], [-117.170765, 32.730423], [-117.169468, 32.73083], [-117.169871, 32.731808], [-117.168173, 32.732316], [-117.16486, 32.732423], [-117.164849, 32.731365], [-117.154678, 32.731418], [-117.155981, 32.734443999999996], [-117.156007, 32.736716], [-117.152596, 32.738939], [-117.151181, 32.741129], [-117.14752899999999, 32.741169], [-117.146017, 32.73779], [-117.14534, 32.733354], [-117.14302599999999, 32.730345], [-117.142667, 32.726709], [-117.143922, 32.724736], [-117.14411, 32.728085], [-117.146952, 32.728086], [-117.149925, 32.726424], [-117.151321, 32.723954], [-117.14858100000001, 32.721526], [-117.147663, 32.718804999999996], [-117.14757399999999, 32.705251], [-117.157302, 32.705327], [-117.155767, 32.70382], [-117.15269599999999, 32.701803], [-117.148501, 32.697139], [-117.149387, 32.696948], [-117.150739, 32.697562999999995], [-117.153978, 32.697077], [-117.159871, 32.701136999999996], [-117.157732, 32.701744], [-117.15790799999999, 32.702011], [-117.157935, 32.701983], [-117.167293, 32.708408], [-117.170609, 32.708027], [-117.172067, 32.709452999999996], [-117.173361, 32.712374], [-117.17572200000001, 32.711192], [-117.17585199999999, 32.712803], [-117.173576, 32.712648], [-117.173823, 32.713989999999995], [-117.176639, 32.714024], [-117.176646, 32.714838], [-117.173445, 32.715453], [-117.176665, 32.715921], [-117.173445, 32.715899], [-117.173452, 32.716761999999996], [-117.176659, 32.716789999999996], [-117.176665, 32.717945], [-117.173458, 32.717988], [-117.173457, 32.723735], [-117.17388, 32.725207999999995], [-117.175558, 32.726803], [-117.178366, 32.727363], [-117.179891, 32.727106], [-117.180834, 32.725528], [-117.184894, 32.726886], [-117.184477, 32.728047], [-117.186065, 32.728432], [-117.188823, 32.727134], [-117.195511, 32.727222], [-117.194587, 32.725736999999995], [-117.188003, 32.724857], [-117.188192, 32.723943999999996], [-117.197202, 32.724879], [-117.20659, 32.724717999999996], [-117.213994, 32.724202999999996], [-117.21651299999999, 32.725066], [-117.215796, 32.72734]], [[-117.17312799999999, 32.712233], [-117.172803, 32.711469], [-117.17105699999999, 32.711482], [-117.171098, 32.715711999999996], [-117.173104, 32.715708], [-117.17312799999999, 32.712233]]]}, \"type\": \"Feature\", \"properties\": {\"city\": \"San Diego\", \"postal-code\": \"92101\", \"state\": \"CA\", \"county_fips\": \"073\"}}, {\"geometry\": {\"type\": \"Polygon\", \"coordinates\": [[[-117.14858100000001, 32.721526], [-117.147437, 32.720014], [-117.144229, 32.721252], [-117.142597, 32.722716], [-117.141851, 32.726181], [-117.141885, 32.7289], [-117.1387, 32.730629], [-117.137022, 32.732603], [-117.136118, 32.734950999999995], [-117.134488, 32.737175], [-117.134652, 32.740957], [-117.133634, 32.740997], [-117.133623, 32.73379], [-117.13412199999999, 32.728524], [-117.133873, 32.726555], [-117.12960000000001, 32.726524999999995], [-117.128948, 32.727036], [-117.125368, 32.727027], [-117.12275199999999, 32.726541], [-117.121783, 32.727529], [-117.121822, 32.725502999999996], [-117.121015, 32.725500000000004], [-117.120921, 32.722937], [-117.118322, 32.721463], [-117.117962, 32.72016], [-117.119139, 32.717386999999995], [-117.121262, 32.716640999999996], [-117.11782099999999, 32.717199], [-117.110507, 32.718311], [-117.107029, 32.718363], [-117.10292799999999, 32.719121], [-117.103882, 32.720582], [-117.103748, 32.725274], [-117.10315299999999, 32.725733], [-117.102443, 32.722328], [-117.102546, 32.720496], [-117.09939, 32.721801], [-117.092282, 32.728896999999996], [-117.091386, 32.73139], [-117.090593, 32.731924], [-117.088081, 32.736151], [-117.087165, 32.735008], [-117.088864, 32.731773], [-117.089741, 32.728884], [-117.085137, 32.726644], [-117.084929, 32.72412], [-117.087062, 32.724136], [-117.086154, 32.722314], [-117.084925, 32.722328], [-117.08493, 32.718046], [-117.08500000000001, 32.704100000000004], [-117.086761, 32.704749], [-117.089424, 32.704133], [-117.095186, 32.704125], [-117.097324, 32.707659], [-117.099973, 32.707656], [-117.104781, 32.709313], [-117.109125, 32.709092999999996], [-117.113689, 32.706807999999995], [-117.115971, 32.706362], [-117.120347, 32.706545], [-117.122553, 32.706728], [-117.122596, 32.705501999999996], [-117.125229, 32.705914], [-117.133867, 32.705864], [-117.135988, 32.705315999999996], [-117.142394, 32.705256], [-117.14757399999999, 32.705251], [-117.147663, 32.718804999999996], [-117.14858100000001, 32.721526]]]}, \"type\": \"Feature\", \"properties\": {\"city\": \"San Diego\", \"postal-code\": \"92102\", \"state\": \"CA\", \"county_fips\": \"073\"}}, {\"geometry\": {\"type\": \"Polygon\", \"coordinates\": [[[-117.19633, 32.759502999999995], [-117.195397, 32.760247], [-117.19326699999999, 32.760211], [-117.192158, 32.759186], [-117.187414, 32.758389], [-117.185506, 32.758755], [-117.178867, 32.75765], [-117.177058, 32.757652], [-117.168156, 32.75916], [-117.165379, 32.759316], [-117.161561, 32.758795], [-117.159066, 32.75835], [-117.15501, 32.755106], [-117.152435, 32.754518], [-117.152243, 32.757205], [-117.143776, 32.756879999999995], [-117.144384, 32.754627], [-117.144326, 32.741198], [-117.14752899999999, 32.741169], [-117.151181, 32.741129], [-117.152596, 32.738939], [-117.156007, 32.736716], [-117.155981, 32.734443999999996], [-117.154678, 32.731418], [-117.164849, 32.731365], [-117.16486, 32.732423], [-117.168173, 32.732316], [-117.169871, 32.731808], [-117.169468, 32.73083], [-117.170765, 32.730423], [-117.171347, 32.731485], [-117.178514, 32.739661999999996], [-117.180216, 32.741413], [-117.182409, 32.742553], [-117.181565, 32.743007], [-117.179618, 32.745573], [-117.178259, 32.746624], [-117.179939, 32.748529999999995], [-117.179198, 32.749451], [-117.176816, 32.750374], [-117.179828, 32.750054999999996], [-117.183505, 32.746641], [-117.184116, 32.745587], [-117.185361, 32.746344], [-117.186408, 32.746998999999995], [-117.186767, 32.746691], [-117.187772, 32.746975], [-117.188188, 32.748247], [-117.189442, 32.749269999999996], [-117.19213500000001, 32.751090999999995], [-117.19229899999999, 32.752485], [-117.192065, 32.752747], [-117.193934, 32.753906], [-117.193809, 32.755016999999995], [-117.196635, 32.759118], [-117.19633, 32.759502999999995]]]}, \"type\": \"Feature\", \"properties\": {\"city\": \"San Diego\", \"postal-code\": \"92103\", \"state\": \"CA\", \"county_fips\": \"073\"}}]}\n"
  },
  {
    "path": "sample_data/sample.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016-01-06\tEast\tJones\tPencil\t95\t1.99\t189.05\n2016-01-23\tCentral\tKivell\tBinder\t50\t19.99\t999.50\n2016-02-09\tCentral\tJardine\tPencil\t36\t4.99\t179.64\n2016-02-26\tCentral\tGill\tPen\t27\t19.99\t539.73\n2016-03-15\tWest\tSorvino\tPencil\t56\t2.99\t167.44\n2016-04-01\tEast\tJones\tBinder\t60\t4.99\t299.40\n2016-04-18\tCentral\tAndrews\tPencil\t75\t1.99\t149.25\n2016-05-05\tCentral\tJardine\tPencil\t90\t4.99\t449.10\n2016-05-22\tWest\tThompson\tPencil\t32\t1.99\t63.68\n2016-06-08\tEast\tJones\tBinder\t60\t8.99\t539.40\n2016-06-25\tCentral\tMorgan\tPencil\t90\t4.99\t449.10\n2016-07-12\tEast\tHoward\tBinder\t29\t1.99\t57.71\n2016-07-29\tEast\tParent\tBinder\t81\t19.99\t1619.19\n2016-08-15\tEast\tJones\tPencil\t35\t4.99\t174.65\n2016-09-01\tCentral\tSmith\tDesk\t2\t125.00\t250.00\n2016-09-18\tEast\tJones\tPen Set\t16\t15.99\t255.84\n2016-10-05\tCentral\tMorgan\tBinder\t28\t8.99\t251.72\n2016-10-22\tEast\tJones\tPen\t64\t8.99\t575.36\n2016-11-08\tEast\tParent\tPen\t15\t19.99\t299.85\n2016-11-25\tCentral\tKivell\tPen Set\t96\t4.99\t479.04\n2016-12-12\tCentral\tSmith\tPencil\t67\t1.29\t86.43\n2016-12-29\tEast\tParent\tPen Set\t74\t15.99\t1183.26\n2017-01-15\tCentral\tGill\tBinder\t46\t8.99\t413.54\n2017-02-01\tCentral\tSmith\tBinder\t87\t15.00\t1305.00\n2017-02-18\tEast\tJones\tBinder\t4\t4.99\t19.96\n2017-03-07\tWest\tSorvino\tBinder\t7\t19.99\t139.93\n2017-03-24\tCentral\tJardine\tPen Set\t50\t4.99\t249.50\n2017-04-10\tCentral\tAndrews\tPencil\t66\t1.99\t131.34\n2017-04-27\tEast\tHoward\tPen\t96\t4.99\t479.04\n2017-05-14\tCentral\tGill\tPencil\t53\t1.29\t68.37\n2017-05-31\tCentral\tGill\tBinder\t80\t8.99\t719.20\n2017-06-17\tCentral\tKivell\tDesk\t5\t125.00\t625.00\n2017-07-04\tEast\tJones\tPen Set\t62\t4.99\t309.38\n2017-07-21\tCentral\tMorgan\tPen Set\t55\t12.49\t686.95\n2017-08-07\tCentral\tKivell\tPen Set\t42\t23.95\t1005.90\n2017-08-24\tWest\tSorvino\tDesk\t3\t275.00\t825.00\n2017-09-10\tCentral\tGill\tPencil\t7\t1.29\t9.03\n2017-09-27\tWest\tSorvino\tPen\t76\t1.99\t151.24\n2017-10-14\tWest\tThompson\tBinder\t57\t19.99\t1139.43\n2017-10-31\tCentral\tAndrews\tPencil\t14\t1.29\t18.06\n2017-11-17\tCentral\tJardine\tBinder\t11\t4.99\t54.89\n2017-12-04\tCentral\tJardine\tBinder\t94\t19.99\t1879.06\n2017-12-21\tCentral\tAndrews\tBinder\t28\t4.99\t139.72\n"
  },
  {
    "path": "sample_data/sample.vds",
    "content": "#{\"name\": \"sample\"}\n#{\"name\": \"OrderDate\", \"width\": 18, \"height\": 1, \"expr\": \"OrderDate\", \"keycol\": 0, \"fmtstr\": \"%Y-%m-%d\", \"voffset\": 0, \"hoffset\": 0, \"aggstr\": \"\", \"type\": \"date\", \"col\": \"Column\"}\n#{\"name\": \"Region\", \"width\": 9, \"height\": 1, \"expr\": \"Region\", \"keycol\": 0, \"fmtstr\": \"\", \"voffset\": 0, \"hoffset\": 0, \"aggstr\": \"\", \"type\": \"\", \"col\": \"Column\"}\n#{\"name\": \"Rep\", \"width\": 10, \"height\": 1, \"expr\": \"Rep\", \"keycol\": 0, \"fmtstr\": \"\", \"voffset\": 0, \"hoffset\": 0, \"aggstr\": \"\", \"type\": \"\", \"col\": \"Column\"}\n#{\"name\": \"Item\", \"width\": 9, \"height\": 1, \"expr\": \"Item\", \"keycol\": 0, \"fmtstr\": \"\", \"voffset\": 0, \"hoffset\": 0, \"aggstr\": \"\", \"type\": \"\", \"col\": \"Column\"}\n#{\"name\": \"Units\", \"width\": 7, \"height\": 1, \"expr\": \"Units\", \"keycol\": 0, \"fmtstr\": \"\", \"voffset\": 0, \"hoffset\": 0, \"aggstr\": \"\", \"type\": \"int\", \"col\": \"Column\"}\n#{\"name\": \"Unit_Cost\", \"width\": 11, \"height\": 1, \"expr\": \"Unit_Cost\", \"keycol\": 0, \"fmtstr\": \"\", \"voffset\": 0, \"hoffset\": 0, \"aggstr\": \"\", \"type\": \"float\", \"col\": \"Column\"}\n#{\"name\": \"Total\", \"width\": 9, \"height\": 1, \"expr\": \"Total\", \"keycol\": 0, \"fmtstr\": \"\", \"voffset\": 0, \"hoffset\": 0, \"aggstr\": \"\", \"type\": \"float\", \"col\": \"Column\"}\n{\"OrderDate\": \"2016-01-06\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Pencil\", \"Units\": \"95\", \"Unit_Cost\": \"1.99\", \"Total\": \"189.05\"}\n{\"OrderDate\": \"2016-01-23\", \"Region\": \"Central\", \"Rep\": \"Kivell\", \"Item\": \"Binder\", \"Units\": \"50\", \"Unit_Cost\": \"19.99\", \"Total\": \"999.50\"}\n{\"OrderDate\": \"2016-02-09\", \"Region\": \"Central\", \"Rep\": \"Jardine\", \"Item\": \"Pencil\", \"Units\": \"36\", \"Unit_Cost\": \"4.99\", \"Total\": \"179.64\"}\n{\"OrderDate\": \"2016-02-26\", \"Region\": \"Central\", \"Rep\": \"Gill\", \"Item\": \"Pen\", \"Units\": \"27\", \"Unit_Cost\": \"19.99\", \"Total\": \"539.73\"}\n{\"OrderDate\": \"2016-03-15\", \"Region\": \"West\", \"Rep\": \"Sorvino\", \"Item\": \"Pencil\", \"Units\": \"56\", \"Unit_Cost\": \"2.99\", \"Total\": \"167.44\"}\n{\"OrderDate\": \"2016-04-01\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Binder\", \"Units\": \"60\", \"Unit_Cost\": \"4.99\", \"Total\": \"299.40\"}\n{\"OrderDate\": \"2016-04-18\", \"Region\": \"Central\", \"Rep\": \"Andrews\", \"Item\": \"Pencil\", \"Units\": \"75\", \"Unit_Cost\": \"1.99\", \"Total\": \"149.25\"}\n{\"OrderDate\": \"2016-05-05\", \"Region\": \"Central\", \"Rep\": \"Jardine\", \"Item\": \"Pencil\", \"Units\": \"90\", \"Unit_Cost\": \"4.99\", \"Total\": \"449.10\"}\n{\"OrderDate\": \"2016-05-22\", \"Region\": \"West\", \"Rep\": \"Thompson\", \"Item\": \"Pencil\", \"Units\": \"32\", \"Unit_Cost\": \"1.99\", \"Total\": \"63.68\"}\n{\"OrderDate\": \"2016-06-08\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Binder\", \"Units\": \"60\", \"Unit_Cost\": \"8.99\", \"Total\": \"539.40\"}\n{\"OrderDate\": \"2016-06-25\", \"Region\": \"Central\", \"Rep\": \"Morgan\", \"Item\": \"Pencil\", \"Units\": \"90\", \"Unit_Cost\": \"4.99\", \"Total\": \"449.10\"}\n{\"OrderDate\": \"2016-07-12\", \"Region\": \"East\", \"Rep\": \"Howard\", \"Item\": \"Binder\", \"Units\": \"29\", \"Unit_Cost\": \"1.99\", \"Total\": \"57.71\"}\n{\"OrderDate\": \"2016-07-29\", \"Region\": \"East\", \"Rep\": \"Parent\", \"Item\": \"Binder\", \"Units\": \"81\", \"Unit_Cost\": \"19.99\", \"Total\": \"1619.19\"}\n{\"OrderDate\": \"2016-08-15\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Pencil\", \"Units\": \"35\", \"Unit_Cost\": \"4.99\", \"Total\": \"174.65\"}\n{\"OrderDate\": \"2016-09-01\", \"Region\": \"Central\", \"Rep\": \"Smith\", \"Item\": \"Desk\", \"Units\": \"2\", \"Unit_Cost\": \"125.00\", \"Total\": \"250.00\"}\n{\"OrderDate\": \"2016-09-18\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Pen Set\", \"Units\": \"16\", \"Unit_Cost\": \"15.99\", \"Total\": \"255.84\"}\n{\"OrderDate\": \"2016-10-05\", \"Region\": \"Central\", \"Rep\": \"Morgan\", \"Item\": \"Binder\", \"Units\": \"28\", \"Unit_Cost\": \"8.99\", \"Total\": \"251.72\"}\n{\"OrderDate\": \"2016-10-22\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Pen\", \"Units\": \"64\", \"Unit_Cost\": \"8.99\", \"Total\": \"575.36\"}\n{\"OrderDate\": \"2016-11-08\", \"Region\": \"East\", \"Rep\": \"Parent\", \"Item\": \"Pen\", \"Units\": \"15\", \"Unit_Cost\": \"19.99\", \"Total\": \"299.85\"}\n{\"OrderDate\": \"2016-11-25\", \"Region\": \"Central\", \"Rep\": \"Kivell\", \"Item\": \"Pen Set\", \"Units\": \"96\", \"Unit_Cost\": \"4.99\", \"Total\": \"479.04\"}\n{\"OrderDate\": \"2016-12-12\", \"Region\": \"Central\", \"Rep\": \"Smith\", \"Item\": \"Pencil\", \"Units\": \"67\", \"Unit_Cost\": \"1.29\", \"Total\": \"86.43\"}\n{\"OrderDate\": \"2016-12-29\", \"Region\": \"East\", \"Rep\": \"Parent\", \"Item\": \"Pen Set\", \"Units\": \"74\", \"Unit_Cost\": \"15.99\", \"Total\": \"1183.26\"}\n{\"OrderDate\": \"2017-01-15\", \"Region\": \"Central\", \"Rep\": \"Gill\", \"Item\": \"Binder\", \"Units\": \"46\", \"Unit_Cost\": \"8.99\", \"Total\": \"413.54\"}\n{\"OrderDate\": \"2017-02-01\", \"Region\": \"Central\", \"Rep\": \"Smith\", \"Item\": \"Binder\", \"Units\": \"87\", \"Unit_Cost\": \"15.00\", \"Total\": \"1305.00\"}\n{\"OrderDate\": \"2017-02-18\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Binder\", \"Units\": \"4\", \"Unit_Cost\": \"4.99\", \"Total\": \"19.96\"}\n{\"OrderDate\": \"2017-03-07\", \"Region\": \"West\", \"Rep\": \"Sorvino\", \"Item\": \"Binder\", \"Units\": \"7\", \"Unit_Cost\": \"19.99\", \"Total\": \"139.93\"}\n{\"OrderDate\": \"2017-03-24\", \"Region\": \"Central\", \"Rep\": \"Jardine\", \"Item\": \"Pen Set\", \"Units\": \"50\", \"Unit_Cost\": \"4.99\", \"Total\": \"249.50\"}\n{\"OrderDate\": \"2017-04-10\", \"Region\": \"Central\", \"Rep\": \"Andrews\", \"Item\": \"Pencil\", \"Units\": \"66\", \"Unit_Cost\": \"1.99\", \"Total\": \"131.34\"}\n{\"OrderDate\": \"2017-04-27\", \"Region\": \"East\", \"Rep\": \"Howard\", \"Item\": \"Pen\", \"Units\": \"96\", \"Unit_Cost\": \"4.99\", \"Total\": \"479.04\"}\n{\"OrderDate\": \"2017-05-14\", \"Region\": \"Central\", \"Rep\": \"Gill\", \"Item\": \"Pencil\", \"Units\": \"53\", \"Unit_Cost\": \"1.29\", \"Total\": \"68.37\"}\n{\"OrderDate\": \"2017-05-31\", \"Region\": \"Central\", \"Rep\": \"Gill\", \"Item\": \"Binder\", \"Units\": \"80\", \"Unit_Cost\": \"8.99\", \"Total\": \"719.20\"}\n{\"OrderDate\": \"2017-06-17\", \"Region\": \"Central\", \"Rep\": \"Kivell\", \"Item\": \"Desk\", \"Units\": \"5\", \"Unit_Cost\": \"125.00\", \"Total\": \"625.00\"}\n{\"OrderDate\": \"2017-07-04\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Pen Set\", \"Units\": \"62\", \"Unit_Cost\": \"4.99\", \"Total\": \"309.38\"}\n{\"OrderDate\": \"2017-07-21\", \"Region\": \"Central\", \"Rep\": \"Morgan\", \"Item\": \"Pen Set\", \"Units\": \"55\", \"Unit_Cost\": \"12.49\", \"Total\": \"686.95\"}\n{\"OrderDate\": \"2017-08-07\", \"Region\": \"Central\", \"Rep\": \"Kivell\", \"Item\": \"Pen Set\", \"Units\": \"42\", \"Unit_Cost\": \"23.95\", \"Total\": \"1005.90\"}\n{\"OrderDate\": \"2017-08-24\", \"Region\": \"West\", \"Rep\": \"Sorvino\", \"Item\": \"Desk\", \"Units\": \"3\", \"Unit_Cost\": \"275.00\", \"Total\": \"825.00\"}\n{\"OrderDate\": \"2017-09-10\", \"Region\": \"Central\", \"Rep\": \"Gill\", \"Item\": \"Pencil\", \"Units\": \"7\", \"Unit_Cost\": \"1.29\", \"Total\": \"9.03\"}\n{\"OrderDate\": \"2017-09-27\", \"Region\": \"West\", \"Rep\": \"Sorvino\", \"Item\": \"Pen\", \"Units\": \"76\", \"Unit_Cost\": \"1.99\", \"Total\": \"151.24\"}\n{\"OrderDate\": \"2017-10-14\", \"Region\": \"West\", \"Rep\": \"Thompson\", \"Item\": \"Binder\", \"Units\": \"57\", \"Unit_Cost\": \"19.99\", \"Total\": \"1139.43\"}\n{\"OrderDate\": \"2017-10-31\", \"Region\": \"Central\", \"Rep\": \"Andrews\", \"Item\": \"Pencil\", \"Units\": \"14\", \"Unit_Cost\": \"1.29\", \"Total\": \"18.06\"}\n{\"OrderDate\": \"2017-11-17\", \"Region\": \"Central\", \"Rep\": \"Jardine\", \"Item\": \"Binder\", \"Units\": \"11\", \"Unit_Cost\": \"4.99\", \"Total\": \"54.89\"}\n{\"OrderDate\": \"2017-12-04\", \"Region\": \"Central\", \"Rep\": \"Jardine\", \"Item\": \"Binder\", \"Units\": \"94\", \"Unit_Cost\": \"19.99\", \"Total\": \"1879.06\"}\n{\"OrderDate\": \"2017-12-21\", \"Region\": \"Central\", \"Rep\": \"Andrews\", \"Item\": \"Binder\", \"Units\": \"28\", \"Unit_Cost\": \"4.99\", \"Total\": \"139.72\"}\n#{\"name\": \"benchmark\"}\n#{\"name\": \"Date\", \"width\": 18, \"height\": 1, \"expr\": \"Date\", \"keycol\": 0, \"fmtstr\": \"\", \"voffset\": 0, \"hoffset\": 0, \"aggstr\": \"\", \"type\": \"date\", \"col\": \"Column\"}\n#{\"name\": \"Customer\", \"width\": 20, \"height\": 1, \"expr\": \"Customer\", \"keycol\": 0, \"fmtstr\": \"\", \"voffset\": 0, \"hoffset\": 0, \"aggstr\": \"\", \"type\": \"\", \"col\": \"Column\"}\n#{\"name\": \"SKU\", \"width\": 9, \"height\": 1, \"expr\": \"SKU\", \"keycol\": 0, \"fmtstr\": \"\", \"voffset\": 0, \"hoffset\": 0, \"aggstr\": \"\", \"type\": \"\", \"col\": \"Column\"}\n#{\"name\": \"Item\", \"width\": 20, \"height\": 1, \"expr\": \"Item\", \"keycol\": 0, \"fmtstr\": \"\", \"voffset\": 0, \"hoffset\": 0, \"aggstr\": \"\", \"type\": \"\", \"col\": \"Column\"}\n#{\"name\": \"Quantity\", \"width\": 10, \"height\": 1, \"expr\": \"Quantity\", \"keycol\": 0, \"fmtstr\": \"\", \"voffset\": 0, \"hoffset\": 0, \"aggstr\": \"\", \"type\": \"int\", \"col\": \"Column\"}\n#{\"name\": \"Unit\", \"width\": 11, \"height\": 1, \"expr\": \"Unit\", \"keycol\": 0, \"fmtstr\": \"\", \"voffset\": 0, \"hoffset\": 0, \"aggstr\": \"\", \"type\": \"currency\", \"col\": \"Column\"}\n#{\"name\": \"Paid\", \"width\": 11, \"height\": 1, \"expr\": \"Paid\", \"keycol\": 0, \"fmtstr\": \"\", \"voffset\": 0, \"hoffset\": 0, \"aggstr\": \"\", \"type\": \"currency\", \"col\": \"Column\"}\n{\"Date\": \"2018-07-03 13:47\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD213\", \"Item\": \"BFF Oh My Gravy! Beef & Salmon 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"12.95\", \"Paid\": \"51.80\"}\n{\"Date\": \"2018-07-03 15:32\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat - 3.5 oz\", \"Quantity\": \"1\", \"Unit\": \"4.22\", \"Paid\": \"4.22\"}\n{\"Date\": \"2018-07-05 16:15\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat 3.5 oz\", \"Quantity\": \"1\", \"Unit\": \"4.22\", \"Paid\": \"4.22\"}\n{\"Date\": \"2018-07-06 12:15\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"12\", \"Unit\": \"1.29\", \"Paid\": \"157.00\"}\n{\"Date\": \"2018-07-10 10:28\", \"Customer\": \"David Attenborough\", \"SKU\": \"NSCT201\", \"Item\": \"Food, Salamander\", \"Quantity\": \"30\", \"Unit\": \"0.05\", \"Paid\": \"1.50\"}\n{\"Date\": \"2018-07-10 17:23\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT060\", \"Item\": \"Cat, Korat (Felis catus)\", \"Quantity\": \"1\", \"Unit\": \"720.42\", \"Paid\": \"720.42\"}\n{\"Date\": \"2018-07-10 17:23\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": \"1\", \"Unit\": \"14.94\", \"Paid\": \"14.94\"}\n{\"Date\": \"2018-07-13 10:26\", \"Customer\": \"Wil Wheaton\", \"SKU\": \"NSCT523\", \"Item\": \"Monster, Rust (Monstrus gygaxus)\", \"Quantity\": \"1\", \"Unit\": \"39.95\", \"Paid\": \"39.95\"}\n{\"Date\": \"2018-07-13 15:49\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD216\", \"Item\": \"BFF Oh My Gravy! Chicken & Shrimp 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"12.95\", \"Paid\": \"51.80\"}\n{\"Date\": \"2018-07-17 09:01\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD217\", \"Item\": \"BFF Oh My Gravy! Duck & Tuna 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"12.95\", \"Paid\": \"51.80\"}\n{\"Date\": \"2018-07-17 11:30\", \"Customer\": \"Helen Halestorm\", \"SKU\": \"LAGO342\", \"Item\": \"Rabbit (Oryctolagus cuniculus)\", \"Quantity\": \"2\", \"Unit\": \"32.94\", \"Paid\": \"65.88\"}\n{\"Date\": \"2018-07-18 12:16\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"6\", \"Unit\": \"1.29\", \"Paid\": \"157.00\"}\n{\"Date\": \"2018-07-19 10:28\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"FOOD170\", \"Item\": \"Food, Dog - 5kg\", \"Quantity\": \"5\", \"Unit\": \"44.95\", \"Paid\": \"224.75\"}\n{\"Date\": \"2018-07-20 14:13\", \"Customer\": \"Jon Arbuckle\", \"SKU\": \"FOOD167\", \"Item\": \"Food, Premium Wet Cat - 3.5 oz\", \"Quantity\": \"50\", \"Unit\": \"3.95\", \"Paid\": \"197.50\"}\n{\"Date\": \"2018-07-23 13:41\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD215\", \"Item\": \"BFF Oh My Gravy! Lamb & Tuna 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"12.95\", \"Paid\": \"51.80\"}\n{\"Date\": \"2018-07-23 16:23\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"TOY235\", \"Item\": \"Laser Pointer\", \"Quantity\": \"1\", \"Unit\": \"16.12\", \"Paid\": \"16.12\"}\n{\"Date\": \"2018-07-24 12:16\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"3\", \"Unit\": \"1.29\", \"Paid\": \"157.00\"}\n{\"Date\": \"2018-07-26 16:39\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"FOOD420\", \"Item\": \"Food, Shark - 10 kg\", \"Quantity\": \"1\", \"Unit\": \"15.70\", \"Paid\": \"15.70\"}\n{\"Date\": \"2018-07-27 12:16\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"3\", \"Unit\": \"1.29\", \"Paid\": \"157.00\"}\n{\"Date\": \"2018-07-30 12:17\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"RETURN\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"1\", \"Unit\": \"1.29\", \"Paid\": \"157.00\"}\n{\"Date\": \"2018-07-31 17:42\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"CAT060\", \"Item\": \"Food, Dragon - 50kg\", \"Quantity\": \"5\", \"Unit\": \"720.42\", \"Paid\": \"3602.10\"}\n{\"Date\": \"2018-08-01 14:44\", \"Customer\": \"David Attenborough\", \"SKU\": \"FOOD360\", \"Item\": \"Food, Rhinocerous - 50kg\", \"Quantity\": \"4\", \"Unit\": \"5.72\", \"Paid\": \"22.88\"}\n{\"Date\": \"2018-08-02 17:12\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT110\", \"Item\": \"Cat, Maine Coon (Felix catus)\", \"Quantity\": \"1\", \"Unit\": \"1309.68\", \"Paid\": \"1309.68\"}\n{\"Date\": \"2018-08-02 17:12\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": \"3\", \"Unit\": \"14.94\", \"Paid\": \"44.82\"}\n{\"Date\": \"2018-08-06 10:21\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD212\", \"Item\": \"BFF Oh My Gravy! Beef & Chicken 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"12.95\", \"Paid\": \"51.80\"}\n{\"Date\": \"2018-08-07 16:12\", \"Customer\": \"Juan Johnson\", \"SKU\": \"REPT082\", \"Item\": \"Kingsnake, California (Lampropeltis getula)\", \"Quantity\": \"1\", \"Unit\": \"89.95\", \"Paid\": \"89.95\"}\n{\"Date\": \"2018-08-07 16:12\", \"Customer\": \"Juan Johnson\", \"SKU\": \"RDNT443\", \"Item\": \"Mouse, Pinky (Mus musculus)\", \"Quantity\": \"1\", \"Unit\": \"1.49\", \"Paid\": \"1.49\"}\n{\"Date\": \"2018-08-10 16:31\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD211\", \"Item\": \"BFF Oh My Gravy! Chicken & Turkey 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"12.95\", \"Paid\": \"51.80\"}\n{\"Date\": \"2018-08-13 14:07\", \"Customer\": \"Monica Johnson\", \"SKU\": \"RDNT443\", \"Item\": \"Mouse, Pinky (Mus musculus)\", \"Quantity\": \"1\", \"Unit\": \"1.49\", \"Paid\": \"1.49\"}\n{\"Date\": \"2018-08-13 14:08\", \"Customer\": \"Mar\\u00eda Fern\\u00e1ndez\", \"SKU\": \"FOOD146\", \"Item\": \"Forti Diet Prohealth Mouse/Rat 3lbs\", \"Quantity\": \"2\", \"Unit\": \"2.00\", \"Paid\": \"4.00\"}\n{\"Date\": \"2018-08-15 11:57\", \"Customer\": \"Mr. Praline\", \"SKU\": \"RETURN\", \"Item\": \"Parrot, Norwegian Blue (Mopsitta tanta)\", \"Quantity\": \"1\", \"Unit\": \"2300.00\", \"Paid\": \"-2300.00\"}\n{\"Date\": \"2018-08-15 15:48\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat - 3.5 oz\", \"Quantity\": \"2\", \"Unit\": \"4.22\", \"Paid\": \"8.44\"}\n{\"Date\": \"2018-08-16 11:50\", \"Customer\": \"Helen Halestorm\", \"SKU\": \"RETURN\", \"Item\": \"Rabbit (Oryctolagus cuniculus)\", \"Quantity\": \"6\", \"Unit\": \"0.00\", \"Paid\": \"0.00\"}\n{\"Date\": \"2018-08-16 16:00\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"DOG010\", \"Item\": \"Dog, Golden Retriever (Canis lupus familiaris)\", \"Quantity\": \"1\", \"Unit\": \"2495.99\", \"Paid\": \"2495.99\"}\n{\"Date\": \"2018-08-16 17:15\", \"Customer\": \"Michael Smith\", \"SKU\": \"BIRD160\", \"Item\": \"Parakeet, Blue (Melopsittacus undulatus)\", \"Quantity\": \"1\", \"Unit\": \"29.95\", \"Paid\": \"31.85\"}\n{\"Date\": \"2018-08-17 09:26\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"NSCT201\", \"Item\": \"Food, Spider\", \"Quantity\": \"5\", \"Unit\": \"0.05\", \"Paid\": \"0.25\"}\n{\"Date\": \"2018-08-20 09:36\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"RETURN\", \"Item\": \"Dog, Golden Retriever (Canis lupus familiaris)\", \"Quantity\": \"1\", \"Unit\": \"1247.99\", \"Paid\": \"-1247.99\"}\n{\"Date\": \"2018-08-20 15:31\", \"Customer\": \"Monica Johnson\", \"SKU\": \"NSCT201\", \"Item\": \"Crickets, Adult Live (Gryllus assimilis)\", \"Quantity\": \"30\", \"Unit\": \"0.05\", \"Paid\": \"1.50\"}\n{\"Date\": \"2018-08-20 17:12\", \"Customer\": \"David Attenborough\", \"SKU\": \"NSCT084\", \"Item\": \"Food, Pangolin\", \"Quantity\": \"30\", \"Unit\": \"0.17\", \"Paid\": \"5.10\"}\n{\"Date\": \"2018-08-21 12:13\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD214\", \"Item\": \"BFF Oh My Gravy! Duck & Salmon 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"12.95\", \"Paid\": \"51.80\"}\n{\"Date\": \"2018-08-22 09:38\", \"Customer\": \"David Attenborough\", \"SKU\": \"BIRD160\", \"Item\": \"Food, Quoll\", \"Quantity\": \"1\", \"Unit\": \"29.95\", \"Paid\": \"29.95\"}\n{\"Date\": \"2018-08-22 14:13\", \"Customer\": \"Jon Arbuckle\", \"SKU\": \"FOOD170\", \"Item\": \"Food, Adult Dog - 5kg\", \"Quantity\": \"1\", \"Unit\": \"44.95\", \"Paid\": \"44.95\"}\n{\"Date\": \"2018-08-24 11:42\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD218\", \"Item\": \"BFF Oh My Gravy! Chicken & Salmon 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"12.95\", \"Paid\": \"51.80\"}\n{\"Date\": \"2018-08-27 15:05\", \"Customer\": \"Monica Johnson\", \"SKU\": \"NSCT443\", \"Item\": \"Mealworms, Large (Tenebrio molitor) 100ct\", \"Quantity\": \"1\", \"Unit\": \"1.99\", \"Paid\": \"1.99\"}\n{\"Date\": \"2018-08-28 17:32\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT020\", \"Item\": \"Cat, Scottish Fold (Felis catus)\", \"Quantity\": \"1\", \"Unit\": \"1964.53\", \"Paid\": \"1964.53\"}\n{\"Date\": \"2018-08-28 17:32\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": \"2\", \"Unit\": \"14.94\", \"Paid\": \"29.88\"}\n{\"Date\": \"2018-08-29 10:07\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD219\", \"Item\": \"BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"12.95\", \"Paid\": \"51.80\"}\n{\"Date\": \"2018-08-31 00:00\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD219\", \"Item\": \"BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\", \"Quantity\": \"144\", \"Unit\": \"12.95\", \"Paid\": \"1864.80\"}\n{\"Date\": \"2018-08-31 17:57\", \"Customer\": \"Juan Johnson\", \"SKU\": \"REPT217\", \"Item\": \"Lizard, Spinytail (Uromastyx ornatus)\", \"Quantity\": \"1\", \"Unit\": \"99.95\", \"Paid\": \"99.95\"}\n"
  },
  {
    "path": "sample_data/saulpw-008.xd",
    "content": "Title: \"How could you know anything of the matter?\"\nAuthor: Saul Pwanson\nDate: 2017-02-28\n\n\nBEG#PASSED#MOAT\nEDO#ALLURE#ETCH\nHID#LLAMAS#TITO\nITISMYBUSINESS#\nNOVA###PERI####\nDRAGONS#DEPRESS\n####HEAP###ETUI\nTOKNOWWHATOTHER\nARIA###OPED####\nPENPALS#RADICAL\n####PITA###NAPE\n#PEOPLEDONTKNOW\nTAXI#APOGEE#OLD\nORAL#CURLED#ELL\nYAMS#SPEEDS#SOY\n\n\nA1. \"Please, I ___ of you\" ~ BEG\nA4. What that too inevitably did ~ PASSED\nA10. Defensive ditch ~ MOAT\nA14. World's largest city in 1720 ~ EDO\nA15. Seductive quality ~ ALLURE\nA16. Permanently mark ~ ETCH\nA17. Kept secret ~ HID\nA18. \"Winamp, it really whips the ___ ass!\" ~ LLAMAS\nA19. Bandleader Puente ~ TITO\nA20. Answer from \"The Adventure of the Blue Carbuncle\", part 1 ~ ITISMYBUSINESS\nA23. Science series beginning in 1974 ~ NOVA\nA24. Roz on {/Frasier/}, to Kelsey ~ PERI\nA25. Smaug and Puff ~ DRAGONS\nA29. Activate a key ~ DEPRESS\nA34. Subject of the sorites paradox ~ HEAP\nA36. Case for needles ~ ETUI\nA37. Answer, part 2 ~ TOKNOWWHATOTHER\nA44. Verdi's \"Celeste Aida\", for example ~ ARIA\nA45. Deliberately subjective newspiece ~ OPED\nA46. Nibs and wells? ~ PENPALS\nA50. One might be jailed or free ~ RADICAL\nA55. Major frustration (abbr) ~ PITA\nA57. Kissing target ~ NAPE\nA58. Answer, part 3 ~ PEOPLEDONTKNOW\nA64. DeVito vehicle ~ TAXI\nA65. Climax ~ APOGEE\nA66. Opposite of 27-Down ~ OLD\nA67. Of the piehole ~ ORAL\nA68. Like fingers in a fist ~ CURLED\nA69. 37 Scottish inches ~ ELL\nA70. Nigeria produces most of the real ones ~ YAMS\nA71. {/c/} and {/f/}/1.4 ~ SPEEDS\nA72. Tempeh source ~ SOY\n\nD1. Tush ~ BEHIND\nD2. Notepad or Final Cut Pro ~ EDITOR\nD3. Lady who rode naked in protest ~ GODIVA\nD4. It might be read or green ~ PALM\nD5. Partner in war ~ ALLY\nD6. Unit of stone ~ SLAB\nD7. Recap ~ SUMUP\nD8. Like a palimpsest, perhaps ~ ERASED\nD9. 1988 U2 song ~ DESIRE\nD10. Measure, as in punishment ~ METE\nD11. Singer Redding ~ OTIS\nD12. Random ___ of kindness ~ ACTS\nD13. However, in textspeak ~ THO\nD21. Hollywood union, briefly ~ SAG\nD22. Short drink ~ NIP\nD26. \"I caught that!\" ~ OHO\nD27. Opposite of 66-Across ~ NEW\nD28. Superstitious aphorism ~ SAW\nD30. Finally unemployed (abbr) ~ RET\nD31. Ð in Old English ~ ETH\nD32. Author Grafton ~ SUE\nD33. Knight's address ~ SIR\nD35. Vietnamese soup ~ PHO\nD37. Activate a touchscreen ~ TAP\nD38. Resource in Catan ~ ORE\nD39. Blood relations ~ KIN\nD40. Day break ~ NAP\nD41. Loan metric (abbr) ~ APR\nD42. One might be ice or sun ~ TEA\nD43. Singular ~ ODD\nD47. Every form of transportation has one, these days ~ APP\nD48. {/Syringa/} bouquet ~ LILACS\nD49. Take on additional responsibility ~ STEPUP\nD51. Cephalopod escape tool ~ INK\nD52. Earliest boats ~ CANOES\nD53. 1 was tragic but 11 historic ~ APOLLO\nD54. In a raunchy way ~ LEWDLY\nD56. Treasure ~ ADORE\nD58. Start to mount or sail? ~ PARA\nD59. Semester finale ~ EXAM\nD60. Some might be vegetable or mineral ~ OILS\nD61. Gawk at ~ OGLE\nD62. \"I ___ To Know\" (Marc Anthony song) ~ NEED\nD63. Turner and Cruz ~ TEDS\nD64. Miniature ~ TOY\n\n\n\"No; but one of them was mine all the same,\" whined the little man.\n\n\"Well, then, ask Mrs. Oakshott for it.\"\n\n\"She told me to ask you.\"\n\n\"Well, you can ask the King of Proosia, for all I care. I've had enough of it. Get out of this!\" He rushed fiercely forward, and the inquirer flitted away into the darkness.\n\n\"Ha! this may save us a visit to Brixton Road,\" whispered Holmes.  \"Come with me, and we will see what is to be made of this fellow.\" Striding through the scattered knots of people who lounged round the flaring stalls, my companion speedily overtook the little man and touched him upon the shoulder. He sprang round, and I could see in the gas-light that every vestige of colour had been driven from his face.\n\n\"Who are you, then? What do you want?\" he asked in a quavering voice.\n\n\"You will excuse me,\" said Holmes blandly, \"but I could not help overhearing the questions which you put to the salesman just now. I think that I could be of assistance to you.\"\n\n\"You? Who are you?   How could you know anything of the matter?\"\n"
  },
  {
    "path": "sample_data/shapefile/WA_State_Boundary.cpg",
    "content": "UTF-8"
  },
  {
    "path": "sample_data/shapefile/WA_State_Boundary.prj",
    "content": "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]]"
  },
  {
    "path": "sample_data/shapefile/WA_State_Boundary.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><metadata>\n<idinfo>\n<citation>\n<citeinfo>\n<title>WA State Boundary</title>\n<onlink>https://fortress.wa.gov/dnr/arcgisext/weba_ext_prod4/rest/services/Cadastre/WADNR_Cadastre_OpenData/MapServer/10</onlink>\n<onlink>https://fortress.wa.gov/dnr/adminsa/gisdata/datadownload/WA_State_Bndy.zip</onlink>\n<onlink>https://fortress.wa.gov/dnr/adminsa/GisData/metadata/cadastre_jurisdiction.htm</onlink>\n</citeinfo>\n</citation>\n<descript>\n<abstract>Official Washington State boundary.WA State Boundary Metadata</abstract>\n</descript>\n<keywords>\n<theme>\n<themekt>None</themekt>\n<themekey>WA</themekey>\n<themekey>Washington</themekey>\n<themekey>boundary</themekey>\n<themekey>Cadastre</themekey>\n<themekey>public land survey</themekey>\n</theme>\n</keywords>\n<accconst>None</accconst>\n<useconst>None</useconst>\n<datacred>Washington State Department of Natural Resources</datacred>\n</idinfo>\n<metainfo>\n<metd>20170314</metd>\n<metc>\n<cntinfo>\n<!--no contact person or organization name available-->\n</cntinfo>\n</metc>\n<metstdn>FGDC Content Standard for Digital Geospatial Metadata</metstdn>\n<metstdv>FGDC-STD-001-1998</metstdv>\n<mettc>local time</mettc>\n</metainfo>\n</metadata>\n"
  },
  {
    "path": "sample_data/smiths-json.grep",
    "content": "{\"type\":\"begin\",\"data\":{\"path\":{\"text\":\"benchmark.csv\"}}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"benchmark.csv\"},\"lines\":{\"text\":\"8/16/2018 5:15p,Michael Smith,BIRD160,\\\"Parakeet, Blue (Melopsittacus undulatus)\\\",1,29.95,$31.85\\r\\n\"},\"line_number\":36,\"absolute_offset\":3080,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":24,\"end\":29}]}}\n{\"type\":\"end\",\"data\":{\"path\":{\"text\":\"benchmark.csv\"},\"binary_offset\":null,\"stats\":{\"elapsed\":{\"secs\":0,\"nanos\":13540,\"human\":\"0.000014s\"},\"searches\":1,\"searches_with_match\":1,\"bytes_searched\":4668,\"bytes_printed\":339,\"matched_lines\":1,\"matches\":1}}}\n{\"type\":\"begin\",\"data\":{\"path\":{\"text\":\"benchmark.jsonl\"}}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"benchmark.jsonl\"},\"lines\":{\"text\":\"{\\\"Date\\\": \\\"8/16/2018 5:15p\\\", \\\"Customer\\\": \\\"Michael Smith\\\", \\\"SKU\\\": \\\"BIRD160\\\", \\\"Item\\\": \\\"Parakeet, Blue (Melopsittacus undulatus)\\\", \\\"Quantity\\\": \\\"1\\\", \\\"Unit\\\": \\\"29.95\\\", \\\"Paid\\\": \\\"$31.85\\\"}\\n\"},\"line_number\":36,\"absolute_offset\":5935,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":49,\"end\":54}]}}\n{\"type\":\"end\",\"data\":{\"path\":{\"text\":\"benchmark.jsonl\"},\"binary_offset\":null,\"stats\":{\"elapsed\":{\"secs\":0,\"nanos\":10708,\"human\":\"0.000011s\"},\"searches\":1,\"searches_with_match\":1,\"bytes_searched\":9068,\"bytes_printed\":450,\"matched_lines\":1,\"matches\":1}}}\n{\"type\":\"begin\",\"data\":{\"path\":{\"text\":\"benchmark.lsv\"}}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"benchmark.lsv\"},\"lines\":{\"text\":\"Customer: Michael Smith\\n\"},\"line_number\":266,\"absolute_offset\":4519,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":18,\"end\":23}]}}\n{\"type\":\"end\",\"data\":{\"path\":{\"text\":\"benchmark.lsv\"},\"binary_offset\":null,\"stats\":{\"elapsed\":{\"secs\":0,\"nanos\":11773,\"human\":\"0.000012s\"},\"searches\":1,\"searches_with_match\":1,\"bytes_searched\":6875,\"bytes_printed\":264,\"matched_lines\":1,\"matches\":1}}}\n{\"type\":\"begin\",\"data\":{\"path\":{\"text\":\"benchmark.xml\"}}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"benchmark.xml\"},\"lines\":{\"text\":\"    <Customer>Michael Smith</Customer>\\n\"},\"line_number\":346,\"absolute_offset\":8910,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":22,\"end\":27}]}}\n{\"type\":\"end\",\"data\":{\"path\":{\"text\":\"benchmark.xml\"},\"binary_offset\":null,\"stats\":{\"elapsed\":{\"secs\":0,\"nanos\":11228,\"human\":\"0.000011s\"},\"searches\":1,\"searches_with_match\":1,\"bytes_searched\":13335,\"bytes_printed\":279,\"matched_lines\":1,\"matches\":1}}}\n{\"type\":\"begin\",\"data\":{\"path\":{\"text\":\"benchmark.yml\"}}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"benchmark.yml\"},\"lines\":{\"text\":\"- customer: Michael Smith\\n\"},\"line_number\":239,\"absolute_offset\":5230,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":20,\"end\":25}]}}\n{\"type\":\"end\",\"data\":{\"path\":{\"text\":\"benchmark.yml\"},\"binary_offset\":null,\"stats\":{\"elapsed\":{\"secs\":0,\"nanos\":8369,\"human\":\"0.000008s\"},\"searches\":1,\"searches_with_match\":1,\"bytes_searched\":8092,\"bytes_printed\":266,\"matched_lines\":1,\"matches\":1}}}\n{\"type\":\"begin\",\"data\":{\"path\":{\"text\":\"numeric-cols.tsv\"}}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"numeric-cols.tsv\"},\"lines\":{\"text\":\"2016-09-01\\tCentral\\tSmith\\tDesk\\t2\\t125.00\\t250.00\\n\"},\"line_number\":16,\"absolute_offset\":684,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":19,\"end\":24}]}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"numeric-cols.tsv\"},\"lines\":{\"text\":\"2016-12-12\\tCentral\\tSmith\\tPencil\\t67\\t1.29\\t86.43\\n\"},\"line_number\":22,\"absolute_offset\":957,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":19,\"end\":24}]}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"numeric-cols.tsv\"},\"lines\":{\"text\":\"2017-02-01\\tCentral\\tSmith\\tBinder\\t87\\t15.00\\t1305.00\\n\"},\"line_number\":25,\"absolute_offset\":1097,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":19,\"end\":24}]}}\n{\"type\":\"end\",\"data\":{\"path\":{\"text\":\"numeric-cols.tsv\"},\"binary_offset\":null,\"stats\":{\"elapsed\":{\"secs\":0,\"nanos\":12169,\"human\":\"0.000012s\"},\"searches\":1,\"searches_with_match\":1,\"bytes_searched\":2035,\"bytes_printed\":770,\"matched_lines\":3,\"matches\":3}}}\n{\"type\":\"begin\",\"data\":{\"path\":{\"text\":\"sample.tsv\"}}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"sample.tsv\"},\"lines\":{\"text\":\"2016-09-01\\tCentral\\tSmith\\tDesk\\t2\\t125.00\\t250.00\\n\"},\"line_number\":17,\"absolute_offset\":705,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":19,\"end\":24}]}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"sample.tsv\"},\"lines\":{\"text\":\"2016-12-12\\tCentral\\tSmith\\tPencil\\t67\\t1.29\\t86.43\\n\"},\"line_number\":23,\"absolute_offset\":978,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":19,\"end\":24}]}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"sample.tsv\"},\"lines\":{\"text\":\"2017-02-01\\tCentral\\tSmith\\tBinder\\t87\\t15.00\\t1305.00\\n\"},\"line_number\":26,\"absolute_offset\":1118,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":19,\"end\":24}]}}\n{\"type\":\"end\",\"data\":{\"path\":{\"text\":\"sample.tsv\"},\"binary_offset\":null,\"stats\":{\"elapsed\":{\"secs\":0,\"nanos\":11934,\"human\":\"0.000012s\"},\"searches\":1,\"searches_with_match\":1,\"bytes_searched\":2056,\"bytes_printed\":746,\"matched_lines\":3,\"matches\":3}}}\n{\"type\":\"begin\",\"data\":{\"path\":{\"text\":\"sample.vds\"}}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"sample.vds\"},\"lines\":{\"text\":\"{\\\"OrderDate\\\": \\\"2016-09-01\\\", \\\"Region\\\": \\\"Central\\\", \\\"Rep\\\": \\\"Smith\\\", \\\"Item\\\": \\\"Desk\\\", \\\"Units\\\": \\\"2\\\", \\\"Unit_Cost\\\": \\\"125.00\\\", \\\"Total\\\": \\\"250.00\\\"}\\n\"},\"line_number\":23,\"absolute_offset\":3094,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":57,\"end\":62}]}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"sample.vds\"},\"lines\":{\"text\":\"{\\\"OrderDate\\\": \\\"2016-12-12\\\", \\\"Region\\\": \\\"Central\\\", \\\"Rep\\\": \\\"Smith\\\", \\\"Item\\\": \\\"Pencil\\\", \\\"Units\\\": \\\"67\\\", \\\"Unit_Cost\\\": \\\"1.29\\\", \\\"Total\\\": \\\"86.43\\\"}\\n\"},\"line_number\":29,\"absolute_offset\":3913,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":57,\"end\":62}]}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"sample.vds\"},\"lines\":{\"text\":\"{\\\"OrderDate\\\": \\\"2017-02-01\\\", \\\"Region\\\": \\\"Central\\\", \\\"Rep\\\": \\\"Smith\\\", \\\"Item\\\": \\\"Binder\\\", \\\"Units\\\": \\\"87\\\", \\\"Unit_Cost\\\": \\\"15.00\\\", \\\"Total\\\": \\\"1305.00\\\"}\\n\"},\"line_number\":32,\"absolute_offset\":4326,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":57,\"end\":62}]}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"sample.vds\"},\"lines\":{\"text\":\"{\\\"Date\\\": \\\"2018-08-16 17:15\\\", \\\"Customer\\\": \\\"Michael Smith\\\", \\\"SKU\\\": \\\"BIRD160\\\", \\\"Item\\\": \\\"Parakeet, Blue (Melopsittacus undulatus)\\\", \\\"Quantity\\\": \\\"1\\\", \\\"Unit\\\": \\\"29.95\\\", \\\"Paid\\\": \\\"31.85\\\"}\\n\"},\"line_number\":94,\"absolute_offset\":14126,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":50,\"end\":55}]}}\n{\"type\":\"end\",\"data\":{\"path\":{\"text\":\"sample.vds\"},\"binary_offset\":null,\"stats\":{\"elapsed\":{\"secs\":0,\"nanos\":18940,\"human\":\"0.000019s\"},\"searches\":1,\"searches_with_match\":1,\"bytes_searched\":16704,\"bytes_printed\":1473,\"matched_lines\":4,\"matches\":4}}}\n{\"type\":\"begin\",\"data\":{\"path\":{\"text\":\"sunshinelist.html\"}}}\n{\"type\":\"match\",\"data\":{\"path\":{\"text\":\"sunshinelist.html\"},\"lines\":{\"text\":\"\\t\\t\\t    \\t\\t\\t<td>Kevin Smith</td>\\n\"},\"line_number\":194,\"absolute_offset\":7276,\"submatches\":[{\"match\":{\"text\":\"Smith\"},\"start\":20,\"end\":25}]}}\n{\"type\":\"end\",\"data\":{\"path\":{\"text\":\"sunshinelist.html\"},\"binary_offset\":null,\"stats\":{\"elapsed\":{\"secs\":0,\"nanos\":22646,\"human\":\"0.000023s\"},\"searches\":1,\"searches_with_match\":1,\"bytes_searched\":33309,\"bytes_printed\":285,\"matched_lines\":1,\"matches\":1}}}\n{\"data\":{\"elapsed_total\":{\"human\":\"0.007334s\",\"nanos\":7333949,\"secs\":0},\"stats\":{\"bytes_printed\":4872,\"bytes_searched\":96142,\"elapsed\":{\"human\":\"0.000121s\",\"nanos\":121307,\"secs\":0},\"matched_lines\":16,\"matches\":16,\"searches\":9,\"searches_with_match\":9}},\"type\":\"summary\"}\n"
  },
  {
    "path": "sample_data/smiths-standard.grep",
    "content": "benchmark.csv:36:8/16/2018 5:15p,Michael Smith,BIRD160,\"Parakeet, Blue (Melopsittacus undulatus)\",1,29.95,$31.85\r\nbenchmark.jsonl:36:{\"Date\": \"8/16/2018 5:15p\", \"Customer\": \"Michael Smith\", \"SKU\": \"BIRD160\", \"Item\": \"Parakeet, Blue (Melopsittacus undulatus)\", \"Quantity\": \"1\", \"Unit\": \"29.95\", \"Paid\": \"$31.85\"}\nbenchmark.lsv:266:Customer: Michael Smith\nbenchmark.xml:346:    <Customer>Michael Smith</Customer>\nbenchmark.yml:239:- customer: Michael Smith\nnumeric-cols.tsv:16:2016-09-01\tCentral\tSmith\tDesk\t2\t125.00\t250.00\nnumeric-cols.tsv:22:2016-12-12\tCentral\tSmith\tPencil\t67\t1.29\t86.43\nnumeric-cols.tsv:25:2017-02-01\tCentral\tSmith\tBinder\t87\t15.00\t1305.00\nsample.tsv:17:2016-09-01\tCentral\tSmith\tDesk\t2\t125.00\t250.00\nsample.tsv:23:2016-12-12\tCentral\tSmith\tPencil\t67\t1.29\t86.43\nsample.tsv:26:2017-02-01\tCentral\tSmith\tBinder\t87\t15.00\t1305.00\nsample.vds:23:{\"OrderDate\": \"2016-09-01\", \"Region\": \"Central\", \"Rep\": \"Smith\", \"Item\": \"Desk\", \"Units\": \"2\", \"Unit_Cost\": \"125.00\", \"Total\": \"250.00\"}\nsample.vds:29:{\"OrderDate\": \"2016-12-12\", \"Region\": \"Central\", \"Rep\": \"Smith\", \"Item\": \"Pencil\", \"Units\": \"67\", \"Unit_Cost\": \"1.29\", \"Total\": \"86.43\"}\nsample.vds:32:{\"OrderDate\": \"2017-02-01\", \"Region\": \"Central\", \"Rep\": \"Smith\", \"Item\": \"Binder\", \"Units\": \"87\", \"Unit_Cost\": \"15.00\", \"Total\": \"1305.00\"}\nsample.vds:94:{\"Date\": \"2018-08-16 17:15\", \"Customer\": \"Michael Smith\", \"SKU\": \"BIRD160\", \"Item\": \"Parakeet, Blue (Melopsittacus undulatus)\", \"Quantity\": \"1\", \"Unit\": \"29.95\", \"Paid\": \"31.85\"}\nsunshinelist.html:194:\t\t\t    \t\t\t<td>Kevin Smith</td>\n"
  },
  {
    "path": "sample_data/states.yml",
    "content": "---\n  - \n    state: \"Alabama\"\n    slug: \"alabama\"\n    code: \"AL\"\n    nickname: \"Yellowhammer State\"\n    website: \"http://www.alabama.gov\"\n    admission_date: \"1819-12-14\"\n    admission_number: 22\n    capital_city: \"Montgomery\"\n    capital_url: \"http://www.montgomeryal.gov\"\n    population: 4833722\n    population_rank: 23\n    constitution_url: \"http://alisondb.legislature.state.al.us/alison/default.aspx\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/alabama-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/alabama-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/alabama-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/alabama.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/alabama.jpg\"\n    twitter_url: \"https://twitter.com/alabamagov\"\n    facebook_url: \"https://www.facebook.com/alabamagov\"\n  - \n    state: \"Alaska\"\n    slug: \"alaska\"\n    code: \"AK\"\n    nickname: \"The Last Frontier\"\n    website: \"http://alaska.gov\"\n    admission_date: \"1959-01-03\"\n    admission_number: 49\n    capital_city: \"Juneau\"\n    capital_url: \"http://www.juneau.org\"\n    population: 735132\n    population_rank: 47\n    constitution_url: \"http://www.legis.state.ak.us/basis/folioproxy.asp?url=http://wwwjnu01.legis.state.ak.us/cgi-bin/folioisa.dll/acontxt/query=*/doc/{t1}?\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/alaska-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/alaska-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/alaska-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/alaska.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/alaska.jpg\"\n    twitter_url: \"https://twitter.com/alaska\"\n    facebook_url: \"https://www.facebook.com/AlaskaLocalGovernments\"\n  - \n    state: \"Arizona\"\n    slug: \"arizona\"\n    code: \"AZ\"\n    nickname: \"The Grand Canyon State\"\n    website: \"https://az.gov\"\n    admission_date: \"1912-02-14\"\n    admission_number: 48\n    capital_city: \"Phoenix\"\n    capital_url: \"https://www.phoenix.gov\"\n    population: 6626624\n    population_rank: 15\n    constitution_url: \"http://www.azleg.gov/Constitution.asp\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/arizona-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/arizona-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/arizona-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/arizona.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/arizona.jpg\"\n    twitter_url: null\n    facebook_url: null\n  - \n    state: \"Arkansas\"\n    slug: \"arkansas\"\n    code: \"AR\"\n    nickname: \"The Natural State\"\n    website: \"http://arkansas.gov\"\n    admission_date: \"1836-06-15\"\n    admission_number: 25\n    capital_city: \"Little Rock\"\n    capital_url: \"http://www.littlerock.org\"\n    population: 2959373\n    population_rank: 32\n    constitution_url: \"http://www.arkleg.state.ar.us/assembly/Summary/ArkansasConstitution1874.pdf\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/arkansas-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/arkansas-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/arkansas-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/arkansas.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/arkansas.jpg\"\n    twitter_url: \"https://twitter.com/arkansasgov\"\n    facebook_url: \"https://www.facebook.com/Arkansas.gov\"\n  - \n    state: \"California\"\n    slug: \"california\"\n    code: \"CA\"\n    nickname: \"Golden State\"\n    website: \"http://www.ca.gov\"\n    admission_date: \"1850-09-09\"\n    admission_number: 31\n    capital_city: \"Sacramento\"\n    capital_url: \"http://www.cityofsacramento.org\"\n    population: 38332521\n    population_rank: 1\n    constitution_url: \"http://www.leginfo.ca.gov/const-toc.html\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/california-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/california-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/california-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/california.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/california.jpg\"\n    twitter_url: \"https://twitter.com/cagovernment\"\n    facebook_url: null\n  - \n    state: \"Colorado\"\n    slug: \"colorado\"\n    code: \"CO\"\n    nickname: \"The Centennial State\"\n    website: \"https://www.colorado.gov\"\n    admission_date: \"1876-08-01\"\n    admission_number: 38\n    capital_city: \"Denver\"\n    capital_url: \"http://www.denvergov.org\"\n    population: 5268367\n    population_rank: 22\n    constitution_url: \"https://www.colorado.gov/pacific/archives/government\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/colorado-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/colorado-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/colorado-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/colorado.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/colorado.jpg\"\n    twitter_url: \"https://twitter.com/coloradogov\"\n    facebook_url: \"https://www.facebook.com/Colorado.gov\"\n  - \n    state: \"Connecticut\"\n    slug: \"connecticut\"\n    code: \"CT\"\n    nickname: \"Constitution State\"\n    website: \"http://www.ct.gov\"\n    admission_date: \"1788-01-09\"\n    admission_number: 5\n    capital_city: \"Hartford\"\n    capital_url: \"http://www.hartford.gov\"\n    population: 3596080\n    population_rank: 29\n    constitution_url: \"http://www.ct.gov/sots/cwp/view.asp?a=3188&q=392288\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/connecticut-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/connecticut-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/connecticut-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/connecticut.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/connecticut.jpg\"\n    twitter_url: null\n    facebook_url: null\n  - \n    state: \"Delaware\"\n    slug: \"delaware\"\n    code: \"DE\"\n    nickname: \"The First State / The Diamond State\"\n    website: \"http://delaware.gov\"\n    admission_date: \"1787-12-07\"\n    admission_number: 1\n    capital_city: \"Dover\"\n    capital_url: \"http://www.cityofdover.com\"\n    population: 925749\n    population_rank: 45\n    constitution_url: \"http://www.state.de.us/facts/constit/welcome.htm\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/delaware-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/delaware-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/delaware-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/delaware.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/delaware.jpg\"\n    twitter_url: \"https://twitter.com/delaware_gov\"\n    facebook_url: \"https://www.facebook.com/delaware.gov\"\n  - \n    state: \"Florida\"\n    slug: \"florida\"\n    code: \"FL\"\n    nickname: \"Sunshine State\"\n    website: \"http://www.myflorida.com\"\n    admission_date: \"1845-03-03\"\n    admission_number: 27\n    capital_city: \"Tallahassee\"\n    capital_url: \"https://www.talgov.com/Main/Home.aspx\"\n    population: 19552860\n    population_rank: 4\n    constitution_url: \"http://www.leg.state.fl.us/Statutes/index.cfm\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/florida-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/florida-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/florida-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/florida.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/florida.jpg\"\n    twitter_url: null\n    facebook_url: null\n  - \n    state: \"Georgia\"\n    slug: \"georgia\"\n    code: \"GA\"\n    nickname: \"Peach State\"\n    website: \"http://georgia.gov\"\n    admission_date: \"1788-01-02\"\n    admission_number: 4\n    capital_city: \"Atlanta\"\n    capital_url: \"http://www.atlantaga.gov\"\n    population: 9992167\n    population_rank: 8\n    constitution_url: \"http://sos.ga.gov/admin/files/Constitution_2013_Final_Printed.pdf\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/georgia-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/georgia-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/georgia-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/georgia.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/georgia.jpg\"\n    twitter_url: \"http://twitter.com/georgiagov\"\n    facebook_url: \"http://www.facebook.com/pages/georgiagov/29760668054\"\n  - \n    state: \"Hawaii\"\n    slug: \"hawaii\"\n    code: \"HI\"\n    nickname: \"Aloha State\"\n    website: \"https://www.ehawaii.gov\"\n    admission_date: \"1959-08-21\"\n    admission_number: 50\n    capital_city: \"Honolulu\"\n    capital_url: \"http://www.co.honolulu.hi.us\"\n    population: 1404054\n    population_rank: 40\n    constitution_url: \"http://lrbhawaii.org/con\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/hawaii-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/hawaii-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/hawaii-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/hawaii.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/hawaii.jpg\"\n    twitter_url: \"https://twitter.com/ehawaiigov\"\n    facebook_url: \"https://www.facebook.com/ehawaii.gov\"\n  - \n    state: \"Idaho\"\n    slug: \"idaho\"\n    code: \"ID\"\n    nickname: \"Gem State\"\n    website: \"https://www.idaho.gov\"\n    admission_date: \"1890-07-03\"\n    admission_number: 43\n    capital_city: \"Boise\"\n    capital_url: \"http://www.cityofboise.org\"\n    population: 1612136\n    population_rank: 39\n    constitution_url: \"http://www.legislature.idaho.gov/idstat/IC/Title003.htm\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/idaho-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/idaho-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/idaho-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/idaho.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/idaho.jpg\"\n    twitter_url: \"https://twitter.com/IDAHOgov\"\n    facebook_url: null\n  - \n    state: \"Illinois\"\n    slug: \"illinois\"\n    code: \"IL\"\n    nickname: \"Prairie State\"\n    website: \"https://www.illinois.gov\"\n    admission_date: \"1818-12-03\"\n    admission_number: 21\n    capital_city: \"Springfield\"\n    capital_url: \"http://www.springfield.il.us\"\n    population: 12882135\n    population_rank: 5\n    constitution_url: \"http://www.ilga.gov/commission/lrb/conmain.htm\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/illinois-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/illinois-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/illinois-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/illinois.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/illinois.jpg\"\n    twitter_url: null\n    facebook_url: null\n  - \n    state: \"Indiana\"\n    slug: \"indiana\"\n    code: \"IN\"\n    nickname: \"Hoosier State\"\n    website: \"http://www.in.gov\"\n    admission_date: \"1816-12-11\"\n    admission_number: 19\n    capital_city: \"Indianapolis\"\n    capital_url: \"http://www.indy.gov/Pages/Home.aspx\"\n    population: 6570902\n    population_rank: 16\n    constitution_url: \"http://www.law.indiana.edu/uslawdocs/inconst.html\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/indiana-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/indiana-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/indiana-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/indiana.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/indiana.jpg\"\n    twitter_url: \"https://twitter.com/in_gov\"\n    facebook_url: \"https://www.facebook.com/IndianaGovernment\"\n  - \n    state: \"Iowa\"\n    slug: \"iowa\"\n    code: \"IA\"\n    nickname: \"Hawkeye State\"\n    website: \"https://www.iowa.gov\"\n    admission_date: \"1846-12-28\"\n    admission_number: 29\n    capital_city: \"Des Moines\"\n    capital_url: \"http://www.ci.des-moines.ia.us\"\n    population: 3090416\n    population_rank: 30\n    constitution_url: \"http://publications.iowa.gov/135/1/history/7-7.html\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/iowa-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/iowa-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/iowa-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/iowa.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/iowa.jpg\"\n    twitter_url: \"https://twitter.com/IAGOVTWEETS\"\n    facebook_url: null\n  - \n    state: \"Kansas\"\n    slug: \"kansas\"\n    code: \"KS\"\n    nickname: \"Sunflower State\"\n    website: \"https://www.kansas.gov\"\n    admission_date: \"1861-01-29\"\n    admission_number: 34\n    capital_city: \"Topeka\"\n    capital_url: \"http://www.topeka.org\"\n    population: 2893957\n    population_rank: 34\n    constitution_url: \"https://kslib.info/405/Kansas-Constitution\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/kansas-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/kansas-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/kansas-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/kansas.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/kansas.jpg\"\n    twitter_url: \"http://www.twitter.com/ksgovernment\"\n    facebook_url: \"http://www.facebook.com/pages/Topeka-KS/Kansasgov-Kansas-Government-Online/52068474220\"\n  - \n    state: \"Kentucky\"\n    slug: \"kentucky\"\n    code: \"KY\"\n    nickname: \"Bluegrass State\"\n    website: \"http://kentucky.gov\"\n    admission_date: \"1792-06-01\"\n    admission_number: 15\n    capital_city: \"Frankfort\"\n    capital_url: \"http://frankfort.ky.gov\"\n    population: 4395295\n    population_rank: 26\n    constitution_url: \"http://www.lrc.state.ky.us/Legresou/Constitu/intro.htm\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/kentucky-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/kentucky-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/kentucky-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/kentucky.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/kentucky.jpg\"\n    twitter_url: \"https://twitter.com/kygov\"\n    facebook_url: \"https://www.facebook.com/kygov\"\n  - \n    state: \"Louisiana\"\n    slug: \"louisiana\"\n    code: \"LA\"\n    nickname: \"Pelican State\"\n    website: \"http://louisiana.gov\"\n    admission_date: \"1812-04-30\"\n    admission_number: 18\n    capital_city: \"Baton Rouge\"\n    capital_url: \"http://brgov.com\"\n    population: 4625470\n    population_rank: 25\n    constitution_url: \"http://senate.legis.state.la.us/Documents/Constitution\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/louisiana-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/louisiana-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/louisiana-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/louisiana.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/louisiana.jpg\"\n    twitter_url: null\n    facebook_url: null\n  - \n    state: \"Maine\"\n    slug: \"maine\"\n    code: \"ME\"\n    nickname: \"Pine Tree State\"\n    website: \"http://www.maine.gov\"\n    admission_date: \"1820-03-15\"\n    admission_number: 23\n    capital_city: \"Augusta\"\n    capital_url: \"http://www.augustamaine.gov\"\n    population: 1328302\n    population_rank: 41\n    constitution_url: \"http://www.maine.gov/legis/const\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/maine-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/maine-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/maine-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/maine.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/maine.jpg\"\n    twitter_url: \"https://twitter.com/mainegov_news\"\n    facebook_url: \"http://www.facebook.com/pages/Augusta-ME/Mainegov/98519328240\"\n  - \n    state: \"Maryland\"\n    slug: \"maryland\"\n    code: \"MD\"\n    nickname: \"Old Line State\"\n    website: \"http://www.maryland.gov\"\n    admission_date: \"1788-04-28\"\n    admission_number: 7\n    capital_city: \"Annapolis\"\n    capital_url: \"http://www.annapolis.gov\"\n    population: 5928814\n    population_rank: 19\n    constitution_url: \"http://msa.maryland.gov/msa/mdmanual/43const/html/const.html\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/maryland-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/maryland-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/maryland-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/maryland.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/maryland.jpg\"\n    twitter_url: \"https://twitter.com/statemaryland\"\n    facebook_url: \"https://www.facebook.com/statemaryland\"\n  - \n    state: \"Massachusetts\"\n    slug: \"massachusetts\"\n    code: \"MA\"\n    nickname: \"Bay State\"\n    website: \"http://www.mass.gov\"\n    admission_date: \"1788-02-06\"\n    admission_number: 6\n    capital_city: \"Boston\"\n    capital_url: \"http://www.ci.boston.ma.us\"\n    population: 6692824\n    population_rank: 14\n    constitution_url: \"http://www.state.ma.us/legis/const.htm\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/massachusetts-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/massachusetts-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/massachusetts-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/massachusetts.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/massachusetts.jpg\"\n    twitter_url: \"http://twitter.com/massgov\"\n    facebook_url: \"https://www.facebook.com/massgov\"\n  - \n    state: \"Michigan\"\n    slug: \"michigan\"\n    code: \"MI\"\n    nickname: \"Wolverine State / Great Lakes State\"\n    website: \"http://www.michigan.gov\"\n    admission_date: \"1837-01-26\"\n    admission_number: 26\n    capital_city: \"Lansing\"\n    capital_url: \"http://cityoflansingmi.com\"\n    population: 9895622\n    population_rank: 9\n    constitution_url: \"http://www.legislature.mi.gov/(S(hrowl12tg05hemnnkidim1jb))/mileg.aspx?page=GetObject&objectname=mcl-Constitution\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/michigan-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/michigan-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/michigan-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/michigan.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/michigan.jpg\"\n    twitter_url: \"https://twitter.com/migov\"\n    facebook_url: \"https://www.facebook.com/MIgovernment\"\n  - \n    state: \"Minnesota\"\n    slug: \"minnesota\"\n    code: \"MN\"\n    nickname: \"North Star State / Land of 10,000 Lakes\"\n    website: \"https://mn.gov\"\n    admission_date: \"1858-05-11\"\n    admission_number: 32\n    capital_city: \"Saint Paul\"\n    capital_url: \"http://www.stpaul.gov\"\n    population: 5420380\n    population_rank: 21\n    constitution_url: \"http://www.house.leg.state.mn.us/cco/rules/mncon/preamble.htm\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/minnesota-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/minnesota-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/minnesota-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/minnesota.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/minnesota.jpg\"\n    twitter_url: null\n    facebook_url: null\n  - \n    state: \"Mississippi\"\n    slug: \"mississippi\"\n    code: \"MS\"\n    nickname: \"Magnolia State\"\n    website: \"http://www.ms.gov\"\n    admission_date: \"1817-12-10\"\n    admission_number: 20\n    capital_city: \"Jackson\"\n    capital_url: \"http://www.city.jackson.ms.us\"\n    population: 2991207\n    population_rank: 31\n    constitution_url: \"http://law.justia.com/constitution/mississippi\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/mississippi-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/mississippi-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/mississippi-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/mississippi.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/mississippi.jpg\"\n    twitter_url: \"https://twitter.com/msdotgov\"\n    facebook_url: \"https://www.facebook.com/msdotgov\"\n  - \n    state: \"Missouri\"\n    slug: \"missouri\"\n    code: \"MO\"\n    nickname: \"Show Me State\"\n    website: \"https://www.mo.gov\"\n    admission_date: \"1821-08-10\"\n    admission_number: 24\n    capital_city: \"Jefferson City\"\n    capital_url: \"http://www.jeffcitymo.org\"\n    population: 6044171\n    population_rank: 18\n    constitution_url: \"http://www.moga.mo.gov/mostatutes/moconstn.html\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/missouri-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/missouri-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/missouri-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/missouri.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/missouri.jpg\"\n    twitter_url: \"https://twitter.com/MoGov\"\n    facebook_url: \"https://www.facebook.com/mogov\"\n  - \n    state: \"Montana\"\n    slug: \"montana\"\n    code: \"MT\"\n    nickname: \"Treasure State\"\n    website: \"http://mt.gov\"\n    admission_date: \"1889-11-08\"\n    admission_number: 41\n    capital_city: \"Helena\"\n    capital_url: \"http://www.ci.helena.mt.us\"\n    population: 1015165\n    population_rank: 44\n    constitution_url: \"http://courts.mt.gov/content/library/docs/72constit.pdf\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/montana-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/montana-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/montana-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/montana.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/montana.jpg\"\n    twitter_url: null\n    facebook_url: null\n  - \n    state: \"Nebraska\"\n    slug: \"nebraska\"\n    code: \"NE\"\n    nickname: \"Cornhusker State\"\n    website: \"http://www.nebraska.gov\"\n    admission_date: \"1867-03-01\"\n    admission_number: 37\n    capital_city: \"Lincoln\"\n    capital_url: \"http://lincoln.ne.gov\"\n    population: 1868516\n    population_rank: 37\n    constitution_url: \"http://www.state.ne.us/legislative/statutes/C\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/nebraska-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/nebraska-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/nebraska-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/nebraska.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/nebraska.jpg\"\n    twitter_url: \"https://twitter.com/Nebraskagov\"\n    facebook_url: \"https://www.facebook.com/nebraska.gov\"\n  - \n    state: \"Nevada\"\n    slug: \"nevada\"\n    code: \"NV\"\n    nickname: \"The Silver State\"\n    website: \"http://nv.gov\"\n    admission_date: \"1864-10-31\"\n    admission_number: 36\n    capital_city: \"Carson City\"\n    capital_url: \"http://www.carson.org\"\n    population: 2790136\n    population_rank: 35\n    constitution_url: \"http://www.leg.state.nv.us/Const/NvConst.html\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/nevada-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/nevada-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/nevada-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/nevada.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/nevada.jpg\"\n    twitter_url: null\n    facebook_url: null\n  - \n    state: \"New Hampshire\"\n    slug: \"new-hampshire\"\n    code: \"NH\"\n    nickname: \"Granite State\"\n    website: \"https://www.nh.gov\"\n    admission_date: \"1788-06-21\"\n    admission_number: 9\n    capital_city: \"Concord\"\n    capital_url: \"http://www.concordnh.gov\"\n    population: 1323459\n    population_rank: 42\n    constitution_url: \"http://www.state.nh.us/constitution/constitution.html\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/new-hampshire-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/new-hampshire-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/new-hampshire-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/new-hampshire.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/new-hampshire.jpg\"\n    twitter_url: \"https://twitter.com/nhgov\"\n    facebook_url: null\n  - \n    state: \"New Jersey\"\n    slug: \"new-jersey\"\n    code: \"NJ\"\n    nickname: \"Garden State\"\n    website: \"http://www.state.nj.us\"\n    admission_date: \"1787-12-18\"\n    admission_number: 3\n    capital_city: \"Trenton\"\n    capital_url: \"http://www.trentonnj.org\"\n    population: 8899339\n    population_rank: 11\n    constitution_url: \"http://www.njleg.state.nj.us/lawsconstitution/consearch.asp\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/new-jersey-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/new-jersey-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/new-jersey-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/new-jersey.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/new-jersey.jpg\"\n    twitter_url: null\n    facebook_url: null\n  - \n    state: \"New Mexico\"\n    slug: \"new-mexico\"\n    code: \"NM\"\n    nickname: \"Land of Enchantment\"\n    website: \"http://www.newmexico.gov\"\n    admission_date: \"1912-01-06\"\n    admission_number: 47\n    capital_city: \"Santa Fe\"\n    capital_url: \"http://www.santafenm.gov\"\n    population: 2085287\n    population_rank: 36\n    constitution_url: \"http://www.loc.gov/law/guide/us-nm.html\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/new-mexico-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/new-mexico-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/new-mexico-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/new-mexico.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/new-mexico.jpg\"\n    twitter_url: null\n    facebook_url: null\n  - \n    state: \"New York\"\n    slug: \"new-york\"\n    code: \"NY\"\n    nickname: \"Empire State\"\n    website: \"http://www.ny.gov\"\n    admission_date: \"1788-07-26\"\n    admission_number: 11\n    capital_city: \"Albany\"\n    capital_url: \"http://www.albanyny.org\"\n    population: 19651127\n    population_rank: 3\n    constitution_url: \"https://www.dos.ny.gov/info/constitution.htm\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/new-york-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/new-york-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/new-york-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/new-york.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/new-york.jpg\"\n    twitter_url: \"https://twitter.com/nygov\"\n    facebook_url: null\n  - \n    state: \"North Carolina\"\n    slug: \"north-carolina\"\n    code: \"NC\"\n    nickname: \"Old North State / Tar Heel State\"\n    website: \"http://www.nc.gov\"\n    admission_date: \"1789-11-21\"\n    admission_number: 12\n    capital_city: \"Raleigh\"\n    capital_url: \"http://www.raleigh-nc.org\"\n    population: 9848060\n    population_rank: 10\n    constitution_url: \"http://statelibrary.dcr.state.nc.us/nc/stgovt/preconst.htm\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/north-carolina-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/north-carolina-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/north-carolina-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/north-carolina.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/north-carolina.jpg\"\n    twitter_url: \"https://twitter.com/NCdotGov\"\n    facebook_url: null\n  - \n    state: \"North Dakota\"\n    slug: \"north-dakota\"\n    code: \"ND\"\n    nickname: \"Peace Garden State / Flickertail State / Roughrider State\"\n    website: \"http://www.nd.gov\"\n    admission_date: \"1889-11-02\"\n    admission_number: 39\n    capital_city: \"Bismarck\"\n    capital_url: \"http://www.bismarck.org\"\n    population: 723393\n    population_rank: 48\n    constitution_url: \"http://www.legis.nd.gov/information/statutes/const-laws.html\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/north-dakota-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/north-dakota-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/north-dakota-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/north-dakota.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/north-dakota.jpg\"\n    twitter_url: \"https://twitter.com/ExperienceND\"\n    facebook_url: \"https://www.facebook.com/ExperienceND\"\n  - \n    state: \"Ohio\"\n    slug: \"ohio\"\n    code: \"OH\"\n    nickname: \"Buckeye State\"\n    website: \"https://ohio.gov\"\n    admission_date: \"1803-03-01\"\n    admission_number: 17\n    capital_city: \"Columbus\"\n    capital_url: \"http://ci.columbus.oh.us\"\n    population: 11570808\n    population_rank: 7\n    constitution_url: \"http://www.legislature.state.oh.us/constitution.cfm\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/ohio-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/ohio-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/ohio-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/ohio.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/ohio.jpg\"\n    twitter_url: \"https://twitter.com/ohgov\"\n    facebook_url: null\n  - \n    state: \"Oklahoma\"\n    slug: \"oklahoma\"\n    code: \"OK\"\n    nickname: \"Sooner State\"\n    website: \"https://www.ok.gov\"\n    admission_date: \"1907-11-16\"\n    admission_number: 46\n    capital_city: \"Oklahoma City\"\n    capital_url: \"http://www.okc.gov\"\n    population: 3850568\n    population_rank: 28\n    constitution_url: \"http://oklegal.onenet.net/okcon\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/oklahoma-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/oklahoma-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/oklahoma-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/oklahoma.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/oklahoma.jpg\"\n    twitter_url: \"https://twitter.com/okgov\"\n    facebook_url: \"https://www.facebook.com/okgov\"\n  - \n    state: \"Oregon\"\n    slug: \"oregon\"\n    code: \"OR\"\n    nickname: \"Beaver State\"\n    website: \"http://www.oregon.gov\"\n    admission_date: \"1859-02-14\"\n    admission_number: 33\n    capital_city: \"Salem\"\n    capital_url: \"http://www.cityofsalem.net/Pages/default.aspx\"\n    population: 3930065\n    population_rank: 27\n    constitution_url: \"http://bluebook.state.or.us/state/constitution/constitution.htm\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/oregon-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/oregon-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/oregon-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/oregon.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/oregon.jpg\"\n    twitter_url: null\n    facebook_url: null\n  - \n    state: \"Pennsylvania\"\n    slug: \"pennsylvania\"\n    code: \"PA\"\n    nickname: \"Keystone State\"\n    website: \"http://www.pa.gov\"\n    admission_date: \"1787-12-12\"\n    admission_number: 2\n    capital_city: \"Harrisburg\"\n    capital_url: \"http://harrisburgpa.gov\"\n    population: 12773801\n    population_rank: 6\n    constitution_url: \"http://sites.state.pa.us/PA_Constitution.html\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/pennsylvania-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/pennsylvania-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/pennsylvania-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/pennsylvania.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/pennsylvania.jpg\"\n    twitter_url: \"https://www.facebook.com/visitPA\"\n    facebook_url: \"https://twitter.com/visitPA\"\n  - \n    state: \"Rhode Island\"\n    slug: \"rhode-island\"\n    code: \"RI\"\n    nickname: \"The Ocean State\"\n    website: \"https://www.ri.gov\"\n    admission_date: \"1790-05-29\"\n    admission_number: 13\n    capital_city: \"Providence\"\n    capital_url: \"http://www.providenceri.com\"\n    population: 1051511\n    population_rank: 43\n    constitution_url: \"http://webserver.rilin.state.ri.us/RiConstitution\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/rhode-island-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/rhode-island-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/rhode-island-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/rhode-island.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/rhode-island.jpg\"\n    twitter_url: \"https://twitter.com/rigov\"\n    facebook_url: \"https://www.facebook.com/RIgov-Rhode-Island-Government-Online-24056655991\"\n  - \n    state: \"South Carolina\"\n    slug: \"south-carolina\"\n    code: \"SC\"\n    nickname: \"Palmetto State\"\n    website: \"http://www.sc.gov\"\n    admission_date: \"1788-05-23\"\n    admission_number: 8\n    capital_city: \"Columbia\"\n    capital_url: \"http://www.columbiasc.net\"\n    population: 4774839\n    population_rank: 24\n    constitution_url: \"http://www.scstatehouse.gov/scconstitution/scconst.php\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/south-carolina-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/south-carolina-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/south-carolina-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/south-carolina.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/south-carolina.jpg\"\n    twitter_url: \"https://twitter.com/scgov\"\n    facebook_url: \"http://www.facebook.com/pages/SCgov/12752057990\"\n  - \n    state: \"South Dakota\"\n    slug: \"south-dakota\"\n    code: \"SD\"\n    nickname: \"Mount Rushmore State\"\n    website: \"http://sd.gov\"\n    admission_date: \"1889-11-02\"\n    admission_number: 40\n    capital_city: \"Pierre\"\n    capital_url: \"http://ci.pierre.sd.us\"\n    population: 844877\n    population_rank: 46\n    constitution_url: \"http://legis.sd.gov/statutes/Constitution\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/south-dakota-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/south-dakota-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/south-dakota-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/south-dakota.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/south-dakota.jpg\"\n    twitter_url: null\n    facebook_url: null\n  - \n    state: \"Tennessee\"\n    slug: \"tennessee\"\n    code: \"TN\"\n    nickname: \"Volunteer State\"\n    website: \"https://www.tn.gov\"\n    admission_date: \"1796-06-01\"\n    admission_number: 16\n    capital_city: \"Nashville\"\n    capital_url: \"http://www.nashville.gov\"\n    population: 6495978\n    population_rank: 17\n    constitution_url: \"http://www.capitol.tn.gov/about/docs/TN-Constitution.pdf\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/tennessee-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/tennessee-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/tennessee-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/tennessee.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/tennessee.jpg\"\n    twitter_url: \"https://twitter.com/TNVacation\"\n    facebook_url: \"https://www.facebook.com/tnvacation\"\n  - \n    state: \"Texas\"\n    slug: \"texas\"\n    code: \"TX\"\n    nickname: \"Lone Star State\"\n    website: \"https://www.texas.gov\"\n    admission_date: \"1845-12-29\"\n    admission_number: 28\n    capital_city: \"Austin\"\n    capital_url: \"http://www.austintexas.gov\"\n    population: 26448193\n    population_rank: 2\n    constitution_url: \"http://www.constitution.legis.state.tx.us\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/texas-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/texas-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/texas-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/texas.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/texas.jpg\"\n    twitter_url: \"https://twitter.com/texasgov\"\n    facebook_url: \"http://www.facebook.com/Texas.gov\"\n  - \n    state: \"Utah\"\n    slug: \"utah\"\n    code: \"UT\"\n    nickname: \"The Beehive State\"\n    website: \"https://utah.gov\"\n    admission_date: \"1896-01-04\"\n    admission_number: 45\n    capital_city: \"Salt Lake City\"\n    capital_url: \"http://www.slcgov.com\"\n    population: 2900872\n    population_rank: 33\n    constitution_url: \"http://le.utah.gov/UtahCode/chapter.jsp?code=Constitution\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/utah-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/utah-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/utah-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/utah.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/utah.jpg\"\n    twitter_url: \"https://twitter.com/UtahGov\"\n    facebook_url: \"https://www.facebook.com/utahgov\"\n  - \n    state: \"Vermont\"\n    slug: \"vermont\"\n    code: \"VT\"\n    nickname: \"Green Mountain State\"\n    website: \"http://vermont.gov\"\n    admission_date: \"1791-03-04\"\n    admission_number: 14\n    capital_city: \"Montpelier\"\n    capital_url: \"http://www.montpelier-vt.org\"\n    population: 626630\n    population_rank: 49\n    constitution_url: \"http://www.leg.state.vt.us/statutes/const2.htm\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/vermont-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/vermont-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/vermont-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/vermont.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/vermont.jpg\"\n    twitter_url: \"https://twitter.com/vermontgov\"\n    facebook_url: \"https://www.facebook.com/MyVermont\"\n  - \n    state: \"Virginia\"\n    slug: \"virginia\"\n    code: \"VA\"\n    nickname: \"Old Dominion State\"\n    website: \"https://www.virginia.gov\"\n    admission_date: \"1788-06-25\"\n    admission_number: 10\n    capital_city: \"Richmond\"\n    capital_url: \"http://www.richmondgov.com\"\n    population: 8260405\n    population_rank: 12\n    constitution_url: \"http://hodcap.state.va.us/publications/Constitution-01-13.pdf\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/virginia-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/virginia-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/virginia-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/virginia.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/virginia.jpg\"\n    twitter_url: null\n    facebook_url: null\n  - \n    state: \"Washington\"\n    slug: \"washington\"\n    code: \"WA\"\n    nickname: \"The Evergreen State\"\n    website: \"http://www.wa.gov\"\n    admission_date: \"1889-11-11\"\n    admission_number: 42\n    capital_city: \"Olympia\"\n    capital_url: \"http://www.ci.olympia.wa.us\"\n    population: 6971406\n    population_rank: 13\n    constitution_url: \"http://www.leg.wa.gov/lawsandagencyrules/pages/constitution.aspx\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/washington-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/washington-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/washington-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/washington.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/washington.jpg\"\n    twitter_url: \"https://twitter.com/wagov\"\n    facebook_url: \"\"\n  - \n    state: \"West Virginia\"\n    slug: \"west-virginia\"\n    code: \"WV\"\n    nickname: \"Mountain State\"\n    website: \"http://www.wv.gov\"\n    admission_date: \"1863-06-20\"\n    admission_number: 35\n    capital_city: \"Charleston\"\n    capital_url: \"http://www.cityofcharleston.org\"\n    population: 1854304\n    population_rank: 38\n    constitution_url: \"http://www.legis.state.wv.us/WVCODE/WV_CON.cfm\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/west-virginia-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/west-virginia-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/west-virginia-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/west-virginia.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/west-virginia.jpg\"\n    twitter_url: \"https://twitter.com/wvgov\"\n    facebook_url: \"https://www.facebook.com/wvgov\"\n  - \n    state: \"Wisconsin\"\n    slug: \"wisconsin\"\n    code: \"WI\"\n    nickname: \"Badger State\"\n    website: \"https://www.wisconsin.gov\"\n    admission_date: \"1848-05-29\"\n    admission_number: 30\n    capital_city: \"Madison\"\n    capital_url: \"http://www.ci.madison.wi.us\"\n    population: 5742713\n    population_rank: 20\n    constitution_url: \"http://www.legis.state.wi.us/rsb/2wiscon.html\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/wisconsin-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/wisconsin-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/wisconsin-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/wisconsin.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/wisconsin.jpg\"\n    twitter_url: null\n    facebook_url: null\n  - \n    state: \"Wyoming\"\n    slug: \"wyoming\"\n    code: \"WY\"\n    nickname: \"Equality State\"\n    website: \"http://www.wyo.gov\"\n    admission_date: \"1890-07-10\"\n    admission_number: 44\n    capital_city: \"Cheyenne\"\n    capital_url: \"http://www.cheyennecity.org\"\n    population: 582658\n    population_rank: 50\n    constitution_url: \"http://legisweb.state.wy.us/statutes/constitution.aspx?file=titles/97Title97.htm\"\n    state_flag_url: \"https://cdn.civil.services/us-states/flags/wyoming-large.png\"\n    state_seal_url: \"https://cdn.civil.services/us-states/seals/wyoming-large.png\"\n    map_image_url: \"https://cdn.civil.services/us-states/maps/wyoming-large.png\"\n    landscape_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/landscape/wyoming.jpg\"\n    skyline_background_url: \"https://cdn.civil.services/us-states/backgrounds/1280x720/skyline/wyoming.jpg\"\n    twitter_url: null\n    facebook_url: null\n\n"
  },
  {
    "path": "sample_data/sunshinelist.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<title>Sunshine List - Historical Public Disclosure Data for Ontario</title>\n\t\t<meta name=\"description\" content=\"A historical viewer for Ontario's Sunshine List\">\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t\t\n\t\t<script src=\"/static/js/l1.js\" async defer></script>\n\t</head>\n\t<body>\n\t\t<div class=\"navbar navbar-default\" role=\"navigation\">\n\t<div class=\"container-fluid\">\n\t\t<div class=\"navbar-header\">\n\t\t\t<button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n\t\t\t\t<span class=\"sr-only\">Toggle navigation</span>\n\t\t\t\t<span class=\"icon-bar\"></span>\n\t\t\t\t<span class=\"icon-bar\"></span>\n\t\t\t\t<span class=\"icon-bar\"></span>\n\t\t\t</button>\n\t\t\t<a class=\"navbar-brand\" href=\"/\">SunshineList.ca</a>\n\t\t</div>\n\t\t<div class=\"navbar-collapse collapse\">\n\t\t\t<ul class=\"nav navbar-nav\">\n\t\t\t\t<li class=\"active\"><a href=\"/\"><i class=\"fa fa-home fa-fw\"></i>Home</a></li>\n\t\t\t\t<li><a href=\"/about\"><i class=\"fa fa-info-circle fa-fw\"></i>About</a></li>\n\t\t\t\t<li class=\"dropdown\">\n\t\t\t\t\t<a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\"><i class=\"fa fa-align-justify fa-fw\"></i>Articles <b class=\"caret\"></b></a>\n\t\t\t\t\t<ul class=\"dropdown-menu\">\n\t\t\t\t\t\t<li><a href=\"/opg-restraint\">Fiscal restraint at the <abbr title=\"Ontario Power Generation\">OPG</abbr></a></li>\n\t\t\t\t\t\t<li><a href=\"/chakma-furor-masks-harsh-reality\">Chakmagate masks harsh reality</a></li>\n\t\t\t\t\t\t<li><a href=\"/best-measurement\">Is it the best measurement?</a></li>\n\t\t\t\t\t\t<li><a href=\"/has-the-bubble-burst\">Has the bubble burst?</a></li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t\t<ul class=\"nav navbar-nav navbar-right\">\n\t\t\t\t<li><a class=\"twitter\" href=\"https://twitter.com/SunshineList\" target=\"_blank\"><i class=\"fa fa-twitter\"></i><span class=\"text-hide\">Twitter @SunshineList</span></a></li>\n\t\t\t</ul>\n\t\t</div>\n\t</div>\n</div>\n\t\t<section class=\"container\">\n\t\t\t\n\t\n\t<p>Ontario's 2017 sunshine list data is live.  <a href=\"#individuals\">View below</a>, or follow us on <a href=\"https://twitter.com/SunshineList\" target=\"_blank\">Twitter @SunshineList</a> for new articles and interesting statistics gleaned from the data.</p>\n\t<a class=\"co\" href=\"https://crashonomics.ca\" target=\"_blank\">A new tool to track the timeline of the Canadian housing market<span class=\"hidden-xs hidden-sm\"> brought to you by the developers of SunshineList.ca.</span></a>\n\t\n\n\t<ins class=\"adsbygoogle\" style=\"display:block\" data-ad-client=\"ca-pub-8524162276317023\" data-ad-slot=\"4503442143\" data-ad-format=\"auto\"></ins>\n\n\t<ul class=\"nav nav-tabs\">\n\t\t<li class=\"active\"><a name=\"individuals\" href=\"/#a\" data-toggle=\"tab\">Person</a></li>\n\t\t<li><a href=\"/employers#b\" data-toggle=\"tab\">Employer</a></li>\n\t\t<li><a href=\"/sectors#c\" data-toggle=\"tab\">Sector</a></li>\n\t\t<li><a href=\"/years#d\" data-toggle=\"tab\">Year</a></li>\n\t</ul>\n\t\n\t<div class=\"tab-content\">\n\t\t<div class=\"tab-pane active\" id=\"a\">\n\t\t\t<select class=\"multiselect togglecolumn disclosures\" multiple=\"multiple\" style=\"display: none;\">\n\t\t        <option value=\"datatable-disclosures_1\" selected>Employer</option>\n\t\t        <option value=\"datatable-disclosures_2\">Sector</option>\n\t\t        <option value=\"datatable-disclosures_4\">Position</option>\n\t\t        <option value=\"datatable-disclosures_5\">Salary</option>\n\t\t        <option value=\"datatable-disclosures_6\">Benefits</option>\n\t\t        <option value=\"datatable-disclosures_8\">Change</option>\n\t\t        <option value=\"datatable-disclosures_9\" selected>Change (%)</option>\n\t\t\t</select>\n\t\t\t<table class=\"table table-striped table-bordered table-hover\" id=\"datatable-disclosures\">\n\t\t\t    <thead>\n\t\t\t        <tr>\n\t\t\t            <th>Year</th>\n\t\t\t            <th>Employer</th>\n\t\t\t            <th>Sector</th>\n\t\t\t            <th>Name</th>\n\t\t\t            <th>Position</th>\n\t\t\t            <th>Salary</th>\n\t\t\t            <th>Benefits</th>\n\t\t\t            <th>Total</th>\n\t\t\t            <th>Change</th>\n\t\t\t            <th>Change (%)</th>\n\t\t\t        </tr>\n\t\t\t    </thead>\n\t\t\t    <tbody>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Ontario Power Generation</td>\n\t\t\t    \t\t\t<td>Electricity</td>\n\t\t\t    \t\t\t<td>Jeffrey Lyash</td>\n\t\t\t    \t\t\t<td>President and Chief Executive Officer</td>\n\t\t\t    \t\t\t<td>1155899.14</td>\n\t\t\t    \t\t\t<td>9802.71</td>\n\t\t\t    \t\t\t<td>1165701.85</td>\n\t\t\t    \t\t\t<td>375741.71</td>\n\t\t\t    \t\t\t<td>47.56</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>University of Toronto</td>\n\t\t\t    \t\t\t<td>University</td>\n\t\t\t    \t\t\t<td>William Moriarty</td>\n\t\t\t    \t\t\t<td>President and Chief Executive Officer, University of Toronto Asset Management Corporation</td>\n\t\t\t    \t\t\t<td>1045582.62</td>\n\t\t\t    \t\t\t<td>611.72</td>\n\t\t\t    \t\t\t<td>1046194.34</td>\n\t\t\t    \t\t\t<td>-429086.8</td>\n\t\t\t    \t\t\t<td>-29.09</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Ontario Power Generation</td>\n\t\t\t    \t\t\t<td>Electricity</td>\n\t\t\t    \t\t\t<td>Glenn Jager</td>\n\t\t\t    \t\t\t<td>Nuclear President and Chief Nuclear Officer</td>\n\t\t\t    \t\t\t<td>832750.95</td>\n\t\t\t    \t\t\t<td>4752.0</td>\n\t\t\t    \t\t\t<td>837502.95</td>\n\t\t\t    \t\t\t<td>39607.88</td>\n\t\t\t    \t\t\t<td>4.96</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Ontario Pension Board / Commission du Régime de retraite de l'Ontario</td>\n\t\t\t    \t\t\t<td>Crown</td>\n\t\t\t    \t\t\t<td>Jill Pepall</td>\n\t\t\t    \t\t\t<td>Executive Vice President and Chief Investment Officer / Vice-présidente directrice et chef des placements</td>\n\t\t\t    \t\t\t<td>835389.06</td>\n\t\t\t    \t\t\t<td>727.64</td>\n\t\t\t    \t\t\t<td>836116.7</td>\n\t\t\t    \t\t\t<td>94989.53</td>\n\t\t\t    \t\t\t<td>12.82</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>University Health Network</td>\n\t\t\t    \t\t\t<td>Hospital</td>\n\t\t\t    \t\t\t<td>Peter Pisters</td>\n\t\t\t    \t\t\t<td>President and Chief Executive Officer</td>\n\t\t\t    \t\t\t<td>753992.4</td>\n\t\t\t    \t\t\t<td>77725.0</td>\n\t\t\t    \t\t\t<td>831717.4</td>\n\t\t\t    \t\t\t<td>144417.02</td>\n\t\t\t    \t\t\t<td>21.01</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Sunnybrook Health Sciences Centre</td>\n\t\t\t    \t\t\t<td>Hospital</td>\n\t\t\t    \t\t\t<td>Barry Mclellan</td>\n\t\t\t    \t\t\t<td>President and Chief Executive Officer</td>\n\t\t\t    \t\t\t<td>715000.01</td>\n\t\t\t    \t\t\t<td>49444.78</td>\n\t\t\t    \t\t\t<td>764444.79</td>\n\t\t\t    \t\t\t<td>-860.19</td>\n\t\t\t    \t\t\t<td>-0.11</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Centre for Addiction and Mental Health</td>\n\t\t\t    \t\t\t<td>Hospital</td>\n\t\t\t    \t\t\t<td>Catherine Zahn</td>\n\t\t\t    \t\t\t<td>President and Chief Executive Officer / Présidente-directrice générale</td>\n\t\t\t    \t\t\t<td>672731.19</td>\n\t\t\t    \t\t\t<td>71284.03</td>\n\t\t\t    \t\t\t<td>744015.22</td>\n\t\t\t    \t\t\t<td>None</td>\n\t\t\t    \t\t\t<td>None</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Baycrest Centre for Geriatric Care</td>\n\t\t\t    \t\t\t<td>Hospital</td>\n\t\t\t    \t\t\t<td>William Reichman</td>\n\t\t\t    \t\t\t<td>President and Chief Executive Officer</td>\n\t\t\t    \t\t\t<td>718475.03</td>\n\t\t\t    \t\t\t<td>14804.04</td>\n\t\t\t    \t\t\t<td>733279.07</td>\n\t\t\t    \t\t\t<td>-5285.95</td>\n\t\t\t    \t\t\t<td>-0.72</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>St. Joseph's Healthcare Hamilton</td>\n\t\t\t    \t\t\t<td>Hospital</td>\n\t\t\t    \t\t\t<td>Kevin Smith</td>\n\t\t\t    \t\t\t<td>Chief Executive Officer, St. Joseph's Health System</td>\n\t\t\t    \t\t\t<td>660067.2</td>\n\t\t\t    \t\t\t<td>66247.71</td>\n\t\t\t    \t\t\t<td>726314.91</td>\n\t\t\t    \t\t\t<td>-22259.14</td>\n\t\t\t    \t\t\t<td>-2.97</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Mount Sinai Hospital</td>\n\t\t\t    \t\t\t<td>Hospital</td>\n\t\t\t    \t\t\t<td>Joseph Mapa</td>\n\t\t\t    \t\t\t<td>President and Chief Executive Officer</td>\n\t\t\t    \t\t\t<td>719724.5</td>\n\t\t\t    \t\t\t<td>1404.0</td>\n\t\t\t    \t\t\t<td>721128.5</td>\n\t\t\t    \t\t\t<td>-40428.33</td>\n\t\t\t    \t\t\t<td>-5.31</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    </tbody>\n\t\t\t    <tfoot>\n\t\t\t        <tr>\n\t\t\t            <th>\n\t\t\t\t\t\t\t<label class=\"sr-only\" for=\"individual-filter-0\">Year</label>\n\t\t\t\t\t\t\t<select class=\"form-control\" name=\"individual-filter-0\" id=\"individual-filter-0\">\n\t\t\t\t\t\t\t\t<option value=\"\" selected=\"selected\">All</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"1997\">1997</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"1998\">1998</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"1999\">1999</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2000\">2000</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2001\">2001</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2002\">2002</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2003\">2003</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2004\">2004</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2005\">2005</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2006\">2006</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2007\">2007</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2008\">2008</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2009\">2009</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2010\">2010</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2011\">2011</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2012\">2012</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2013\">2013</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2014\">2014</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2015\">2015</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2016\">2016</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2017\">2017</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</select>\n\t\t\t            </th>\n\t\t\t            <th><input type=\"text\" id=\"individual-search-1\" class=\"form-control\" placeholder=\"Search\"></th>\n\t\t\t            <th>\n\t\t\t\t\t\t\t<label class=\"sr-only\" for=\"individual-filter-2\">Sector</label>\n\t\t\t\t\t\t\t<select class=\"form-control\" name=\"individual-filter-2\" id=\"individual-filter-2\">\n\t\t\t\t\t\t\t\t<option value=\"\" selected=\"selected\">All</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Children & Youth Services\">Children & Youth Services</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"College\">College</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Community & Social Services\">Community & Social Services</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Community Safety & Correctional Services\">Community Safety & Correctional Services</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Crown\">Crown</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Education\">Education</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Electricity\">Electricity</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Energy\">Energy</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Health & Long–Term Care\">Health & Long–Term Care</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Hospital\">Hospital</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Judiciary\">Judiciary</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Labour\">Labour</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Legislative\">Legislative</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Legislative Assembly & Offices\">Legislative Assembly & Offices</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Ministry\">Ministry</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Municipality\">Municipality</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Ontario Public Service\">Ontario Public Service</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Other\">Other</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"School Board\">School Board</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Seconded\">Seconded</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"University\">University</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Unknown\">Unknown</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t</th>\n\t\t\t            <th><input type=\"text\" id=\"individual-search-3\" class=\"form-control\" placeholder=\"Search\"></th>\n\t\t\t            <th><input type=\"text\" id=\"individual-search-4\" class=\"form-control\" placeholder=\"Search\"></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t        </tr>\n\t\t\t    </tfoot>\n\t\t\t</table>\n\t\t</div>\n\t\t<div class=\"tab-pane\" id=\"b\">\n\t\t\t<select class=\"multiselect togglecolumn employers\" multiple=\"multiple\" style=\"display: none;\">\n\t\t        <option value=\"datatable-employers_1\" selected>Sector</option>\n\t\t        <option value=\"datatable-employers_3\">Disclosures</option>\n\t\t        <option value=\"datatable-employers_4\">Salary</option>\n\t\t        <option value=\"datatable-employers_5\">Benefits</option>\n\t\t        <option value=\"datatable-employers_7\">Change</option>\n\t\t        <option value=\"datatable-employers_8\" selected>Change (%)</option>\n\t\t        <option value=\"datatable-employers_9\">Internal Change</option>\n\t\t        <option value=\"datatable-employers_10\">Internal Change (%)</option>\n\t\t\t</select>\n\t\t\t<table class=\"table table-striped table-bordered table-hover\" id=\"datatable-employers\">\n\t\t\t    <thead>\n\t\t\t        <tr>\n\t\t\t            <th>Year</th>\n\t\t\t            <th>Sector</th>\n\t\t\t            <th>Employer</th>\n\t\t\t            <th>Disclosures</th>\n\t\t\t            <th>Salary</th>\n\t\t\t            <th>Benefits</th>\n\t\t\t            <th>Total</th>\n\t\t\t            <th>Change</th>\n\t\t\t            <th>Change (%)</th>\n\t\t\t            <th>Internal Change</th>\n\t\t\t            <th>Internal Change (%)</th>\n\t\t\t        </tr>\n\t\t\t    </thead>\n\t\t\t    <tbody>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Electricity</td>\n\t\t\t    \t\t\t<td>Ontario Power Generation</td>\n\t\t\t    \t\t\t<td>7740</td>\n\t\t\t    \t\t\t<td>1106762245.37</td>\n\t\t\t    \t\t\t<td>10299267.93</td>\n\t\t\t    \t\t\t<td>1117061513.3</td>\n\t\t\t    \t\t\t<td>33166459.26</td>\n\t\t\t    \t\t\t<td>3.06</td>\n\t\t\t    \t\t\t<td>30354041.31</td>\n\t\t\t    \t\t\t<td>3.06</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Ministry</td>\n\t\t\t    \t\t\t<td>Comm. Safety &amp; Corr. Services / Sécurité com. et Services corr.</td>\n\t\t\t    \t\t\t<td>6257</td>\n\t\t\t    \t\t\t<td>748297728.11</td>\n\t\t\t    \t\t\t<td>1561229.31</td>\n\t\t\t    \t\t\t<td>749858957.42</td>\n\t\t\t    \t\t\t<td>110933478.11</td>\n\t\t\t    \t\t\t<td>17.36</td>\n\t\t\t    \t\t\t<td>27584707.29</td>\n\t\t\t    \t\t\t<td>4.89</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Municipality</td>\n\t\t\t    \t\t\t<td>City of Toronto - Police Service</td>\n\t\t\t    \t\t\t<td>4767</td>\n\t\t\t    \t\t\t<td>574469287.44</td>\n\t\t\t    \t\t\t<td>5156094.71</td>\n\t\t\t    \t\t\t<td>579625382.15</td>\n\t\t\t    \t\t\t<td>11084235.21</td>\n\t\t\t    \t\t\t<td>1.95</td>\n\t\t\t    \t\t\t<td>170222.609998</td>\n\t\t\t    \t\t\t<td>0.03</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>University</td>\n\t\t\t    \t\t\t<td>University of Toronto</td>\n\t\t\t    \t\t\t<td>3558</td>\n\t\t\t    \t\t\t<td>572257420.12</td>\n\t\t\t    \t\t\t<td>3577706.88</td>\n\t\t\t    \t\t\t<td>575835127.0</td>\n\t\t\t    \t\t\t<td>61583661.99</td>\n\t\t\t    \t\t\t<td>11.98</td>\n\t\t\t    \t\t\t<td>33503899.88</td>\n\t\t\t    \t\t\t<td>6.93</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Municipality</td>\n\t\t\t    \t\t\t<td>City of Toronto</td>\n\t\t\t    \t\t\t<td>4404</td>\n\t\t\t    \t\t\t<td>524103104.1</td>\n\t\t\t    \t\t\t<td>6708991.46</td>\n\t\t\t    \t\t\t<td>530812095.56</td>\n\t\t\t    \t\t\t<td>9233567.93</td>\n\t\t\t    \t\t\t<td>1.77</td>\n\t\t\t    \t\t\t<td>9744583.48</td>\n\t\t\t    \t\t\t<td>2.15</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>School Board</td>\n\t\t\t    \t\t\t<td>Toronto District School Board</td>\n\t\t\t    \t\t\t<td>2880</td>\n\t\t\t    \t\t\t<td>330210436.25</td>\n\t\t\t    \t\t\t<td>1658330.4</td>\n\t\t\t    \t\t\t<td>331868766.65</td>\n\t\t\t    \t\t\t<td>-14058985.38</td>\n\t\t\t    \t\t\t<td>-4.06</td>\n\t\t\t    \t\t\t<td>949612.23</td>\n\t\t\t    \t\t\t<td>0.53</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Ministry</td>\n\t\t\t    \t\t\t<td>Attorney General / Procureur général</td>\n\t\t\t    \t\t\t<td>1816</td>\n\t\t\t    \t\t\t<td>314283251.21</td>\n\t\t\t    \t\t\t<td>527809.08</td>\n\t\t\t    \t\t\t<td>314811060.29</td>\n\t\t\t    \t\t\t<td>2429099.19</td>\n\t\t\t    \t\t\t<td>0.78</td>\n\t\t\t    \t\t\t<td>3018070.9</td>\n\t\t\t    \t\t\t<td>1.05</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Municipality</td>\n\t\t\t    \t\t\t<td>City of Toronto - Toronto Transit Commission</td>\n\t\t\t    \t\t\t<td>2312</td>\n\t\t\t    \t\t\t<td>267472133.81</td>\n\t\t\t    \t\t\t<td>1803268.55</td>\n\t\t\t    \t\t\t<td>269275402.36</td>\n\t\t\t    \t\t\t<td>18515923.62</td>\n\t\t\t    \t\t\t<td>7.38</td>\n\t\t\t    \t\t\t<td>1927763.47</td>\n\t\t\t    \t\t\t<td>0.92</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>University</td>\n\t\t\t    \t\t\t<td>York University</td>\n\t\t\t    \t\t\t<td>1657</td>\n\t\t\t    \t\t\t<td>256433561.95</td>\n\t\t\t    \t\t\t<td>1259450.73</td>\n\t\t\t    \t\t\t<td>257693012.68</td>\n\t\t\t    \t\t\t<td>18975887.28</td>\n\t\t\t    \t\t\t<td>7.95</td>\n\t\t\t    \t\t\t<td>9561808.57</td>\n\t\t\t    \t\t\t<td>6.67</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>University</td>\n\t\t\t    \t\t\t<td>Université d'Ottawa / University of Ottawa</td>\n\t\t\t    \t\t\t<td>1449</td>\n\t\t\t    \t\t\t<td>211066083.68</td>\n\t\t\t    \t\t\t<td>74614.5</td>\n\t\t\t    \t\t\t<td>211140698.18</td>\n\t\t\t    \t\t\t<td>10831217.92</td>\n\t\t\t    \t\t\t<td>5.41</td>\n\t\t\t    \t\t\t<td>6180489.41</td>\n\t\t\t    \t\t\t<td>3.40</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    </tbody>\n\t\t\t    <tfoot>\n\t\t\t        <tr>\n\t\t\t            <th>\n\t\t\t\t\t\t\t<label class=\"sr-only\" for=\"employers-filter-0\">Year</label>\n\t\t\t\t\t\t\t<select class=\"form-control\" name=\"employers-filter-0\" id=\"employers-filter-0\">\n\t\t\t\t\t\t\t\t<option value=\"\" selected=\"selected\">All</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"1997\">1997</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"1998\">1998</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"1999\">1999</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2000\">2000</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2001\">2001</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2002\">2002</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2003\">2003</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2004\">2004</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2005\">2005</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2006\">2006</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2007\">2007</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2008\">2008</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2009\">2009</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2010\">2010</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2011\">2011</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2012\">2012</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2013\">2013</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2014\">2014</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2015\">2015</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2016\">2016</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2017\">2017</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</select>\n\t\t\t            </th>\n\t\t\t            <th>\n\t\t\t\t\t\t\t<label class=\"sr-only\" for=\"employers-filter-1\">Sector</label>\n\t\t\t\t\t\t\t<select class=\"form-control\" name=\"employers-filter-1\" id=\"employers-filter-1\">\n\t\t\t\t\t\t\t\t<option value=\"\" selected=\"selected\">All</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Children & Youth Services\">Children & Youth Services</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"College\">College</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Community & Social Services\">Community & Social Services</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Community Safety & Correctional Services\">Community Safety & Correctional Services</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Crown\">Crown</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Education\">Education</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Electricity\">Electricity</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Energy\">Energy</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Health & Long–Term Care\">Health & Long–Term Care</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Hospital\">Hospital</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Judiciary\">Judiciary</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Labour\">Labour</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Legislative\">Legislative</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Legislative Assembly & Offices\">Legislative Assembly & Offices</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Ministry\">Ministry</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Municipality\">Municipality</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Ontario Public Service\">Ontario Public Service</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Other\">Other</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"School Board\">School Board</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Seconded\">Seconded</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"University\">University</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Unknown\">Unknown</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t</th>\n\t\t\t            <th><input type=\"text\" id=\"employers-search-2\" class=\"form-control\" placeholder=\"Search\"></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t        </tr>\n\t\t\t    </tfoot>\n\t\t\t</table>\n\t\t</div>\n\t\t<div class=\"tab-pane\" id=\"c\">\n\t\t\t<select class=\"multiselect togglecolumn sectors\" multiple=\"multiple\" style=\"display: none;\">\n\t\t        <option value=\"datatable-sectors_2\">Disclosures</option>\n\t\t        <option value=\"datatable-sectors_3\">Salary</option>\n\t\t        <option value=\"datatable-sectors_4\">Benefits</option>\n\t\t        <option value=\"datatable-sectors_6\">Change</option>\n\t\t        <option value=\"datatable-sectors_7\" selected>Change (%)</option>\n\t\t        <option value=\"datatable-sectors_8\">Internal Change</option>\n\t\t        <option value=\"datatable-sectors_9\">Internal Change (%)</option>\n\t\t\t</select>\n\t\t\t<table class=\"table table-striped table-bordered table-hover\" id=\"datatable-sectors\">\n\t\t\t    <thead>\n\t\t\t        <tr>\n\t\t\t            <th>Year</th>\n\t\t\t            <th>Sector</th>\n\t\t\t            <th>Disclosures</th>\n\t\t\t            <th>Salary</th>\n\t\t\t            <th>Benefits</th>\n\t\t\t            <th>Total</th>\n\t\t\t            <th>Change</th>\n\t\t\t            <th>Change (%)</th>\n\t\t\t            <th>Internal Change</th>\n\t\t\t            <th>Internal Change (%)</th>\n\t\t\t        </tr>\n\t\t\t    </thead>\n\t\t\t    <tbody>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Municipality</td>\n\t\t\t    \t\t\t<td>35773</td>\n\t\t\t    \t\t\t<td>4231820771.91</td>\n\t\t\t    \t\t\t<td>36840665.9</td>\n\t\t\t    \t\t\t<td>4268661437.81</td>\n\t\t\t    \t\t\t<td>177155314.02</td>\n\t\t\t    \t\t\t<td>4.33</td>\n\t\t\t    \t\t\t<td>23086683.63</td>\n\t\t\t    \t\t\t<td>0.67</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>University</td>\n\t\t\t    \t\t\t<td>18010</td>\n\t\t\t    \t\t\t<td>2703524173.61</td>\n\t\t\t    \t\t\t<td>11389114.33</td>\n\t\t\t    \t\t\t<td>2714913287.94</td>\n\t\t\t    \t\t\t<td>190573988.28</td>\n\t\t\t    \t\t\t<td>7.55</td>\n\t\t\t    \t\t\t<td>90662832.68</td>\n\t\t\t    \t\t\t<td>4.17</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>School Board</td>\n\t\t\t    \t\t\t<td>18837</td>\n\t\t\t    \t\t\t<td>2152728798.08</td>\n\t\t\t    \t\t\t<td>9479341.12</td>\n\t\t\t    \t\t\t<td>2162208139.2</td>\n\t\t\t    \t\t\t<td>431962682.25</td>\n\t\t\t    \t\t\t<td>24.97</td>\n\t\t\t    \t\t\t<td>25848959.68</td>\n\t\t\t    \t\t\t<td>2.03</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Ministry</td>\n\t\t\t    \t\t\t<td>14257</td>\n\t\t\t    \t\t\t<td>1773837519.7</td>\n\t\t\t    \t\t\t<td>3635430.84</td>\n\t\t\t    \t\t\t<td>1777472950.54</td>\n\t\t\t    \t\t\t<td>207687278.39</td>\n\t\t\t    \t\t\t<td>13.23</td>\n\t\t\t    \t\t\t<td>34878266.23</td>\n\t\t\t    \t\t\t<td>3.08</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Hospitals</td>\n\t\t\t    \t\t\t<td>13438</td>\n\t\t\t    \t\t\t<td>1722855393.49</td>\n\t\t\t    \t\t\t<td>10600097.2</td>\n\t\t\t    \t\t\t<td>1733455490.69</td>\n\t\t\t    \t\t\t<td>None</td>\n\t\t\t    \t\t\t<td>None</td>\n\t\t\t    \t\t\t<td>7166946.92</td>\n\t\t\t    \t\t\t<td>0.63</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Electricity</td>\n\t\t\t    \t\t\t<td>7740</td>\n\t\t\t    \t\t\t<td>1106762245.37</td>\n\t\t\t    \t\t\t<td>10299267.93</td>\n\t\t\t    \t\t\t<td>1117061513.3</td>\n\t\t\t    \t\t\t<td>33166459.26</td>\n\t\t\t    \t\t\t<td>3.06</td>\n\t\t\t    \t\t\t<td>30354041.31</td>\n\t\t\t    \t\t\t<td>3.06</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Other</td>\n\t\t\t    \t\t\t<td>5180</td>\n\t\t\t    \t\t\t<td>682955833.81</td>\n\t\t\t    \t\t\t<td>12404703.36</td>\n\t\t\t    \t\t\t<td>695360537.17</td>\n\t\t\t    \t\t\t<td>-30176695.74</td>\n\t\t\t    \t\t\t<td>-4.16</td>\n\t\t\t    \t\t\t<td>7590527.9</td>\n\t\t\t    \t\t\t<td>2.34</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Crown</td>\n\t\t\t    \t\t\t<td>4752</td>\n\t\t\t    \t\t\t<td>637560050.08</td>\n\t\t\t    \t\t\t<td>3474451.15</td>\n\t\t\t    \t\t\t<td>641034501.23</td>\n\t\t\t    \t\t\t<td>62488540.78</td>\n\t\t\t    \t\t\t<td>10.80</td>\n\t\t\t    \t\t\t<td>10337911.04</td>\n\t\t\t    \t\t\t<td>2.99</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>College</td>\n\t\t\t    \t\t\t<td>5509</td>\n\t\t\t    \t\t\t<td>625858401.82</td>\n\t\t\t    \t\t\t<td>1393038.36</td>\n\t\t\t    \t\t\t<td>627251440.18</td>\n\t\t\t    \t\t\t<td>69432940.74</td>\n\t\t\t    \t\t\t<td>12.45</td>\n\t\t\t    \t\t\t<td>9558066.48</td>\n\t\t\t    \t\t\t<td>2.03</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>Judiciary</td>\n\t\t\t    \t\t\t<td>613</td>\n\t\t\t    \t\t\t<td>127006420.81</td>\n\t\t\t    \t\t\t<td>946573.88</td>\n\t\t\t    \t\t\t<td>127952994.69</td>\n\t\t\t    \t\t\t<td>4263326.39</td>\n\t\t\t    \t\t\t<td>3.45</td>\n\t\t\t    \t\t\t<td>3895171.5</td>\n\t\t\t    \t\t\t<td>3.42</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    </tbody>\n\t\t\t    <tfoot>\n\t\t\t        <tr>\n\t\t\t            <th>\n\t\t\t\t\t\t\t<label class=\"sr-only\" for=\"sectors-filter-0\">Year</label>\n\t\t\t\t\t\t\t<select class=\"form-control\" name=\"sectors-filter-0\" id=\"sectors-filter-0\">\n\t\t\t\t\t\t\t\t<option value=\"\" selected=\"selected\">All</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"1997\">1997</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"1998\">1998</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"1999\">1999</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2000\">2000</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2001\">2001</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2002\">2002</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2003\">2003</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2004\">2004</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2005\">2005</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2006\">2006</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2007\">2007</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2008\">2008</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2009\">2009</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2010\">2010</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2011\">2011</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2012\">2012</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2013\">2013</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2014\">2014</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2015\">2015</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2016\">2016</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"2017\">2017</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</select>\n\t\t\t            </th>\n\t\t\t            <th>\n\t\t\t\t\t\t\t<label class=\"sr-only\" for=\"sectors-filter-1\">Sector</label>\n\t\t\t\t\t\t\t<select class=\"form-control\" name=\"sectors-filter-1\" id=\"sectors-filter-1\">\n\t\t\t\t\t\t\t\t<option value=\"\" selected=\"selected\">All</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Children & Youth Services\">Children & Youth Services</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"College\">College</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Community & Social Services\">Community & Social Services</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Community Safety & Correctional Services\">Community Safety & Correctional Services</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Crown\">Crown</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Education\">Education</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Electricity\">Electricity</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Energy\">Energy</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Health & Long–Term Care\">Health & Long–Term Care</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Hospital\">Hospital</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Judiciary\">Judiciary</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Labour\">Labour</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Legislative\">Legislative</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Legislative Assembly & Offices\">Legislative Assembly & Offices</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Ministry\">Ministry</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Municipality\">Municipality</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Ontario Public Service\">Ontario Public Service</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Other\">Other</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"School Board\">School Board</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Seconded\">Seconded</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"University\">University</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<option value=\"Unknown\">Unknown</option>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t</th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t            <th></th>\n\t\t\t        </tr>\n\t\t\t    </tfoot>\n\t\t\t</table>\n\t\t</div>\n\t\t<div class=\"tab-pane\" id=\"d\">\n\t\t\t<select class=\"multiselect togglecolumn years\" multiple=\"multiple\" style=\"display: none;\">\n\t\t        <option value=\"datatable-years_1\">Disclosures</option>\n\t\t        <option value=\"datatable-years_2\">Salary</option>\n\t\t        <option value=\"datatable-years_3\">Benefits</option>\n\t\t        <option value=\"datatable-years_5\">Change</option>\n\t\t        <option value=\"datatable-years_6\" selected>Change (%)</option>\n\t\t        <option value=\"datatable-years_7\">Internal Change</option>\n\t\t        <option value=\"datatable-years_8\" selected>Internal Change (%)</option>\n\t\t\t</select>\n\t\t\t<table class=\"table table-striped table-bordered table-hover\" id=\"datatable-years\">\n\t\t\t    <thead>\n\t\t\t        <tr>\n\t\t\t            <th>Year</th>\n\t\t\t            <th>Disclosures</th>\n\t\t\t            <th>Salary</th>\n\t\t\t            <th>Benefits</th>\n\t\t\t            <th>Total</th>\n\t\t\t            <th>Change</th>\n\t\t\t            <th>Change (%)</th>\n\t\t\t            <th>Internal Change</th>\n\t\t\t            <th>Internal Change (%)</th>\n\t\t\t        </tr>\n\t\t\t    </thead>\n\t\t\t    <tbody>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2017</td>\n\t\t\t    \t\t\t<td>124374</td>\n\t\t\t    \t\t\t<td>15800627123.9</td>\n\t\t\t    \t\t\t<td>100566219.45</td>\n\t\t\t    \t\t\t<td>15901193343.3</td>\n\t\t\t    \t\t\t<td>1137551706.16</td>\n\t\t\t    \t\t\t<td>7.71</td>\n\t\t\t    \t\t\t<td>244129402.88</td>\n\t\t\t    \t\t\t<td>2.13</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2016</td>\n\t\t\t    \t\t\t<td>115431</td>\n\t\t\t    \t\t\t<td>14669007540.5</td>\n\t\t\t    \t\t\t<td>94634096.72</td>\n\t\t\t    \t\t\t<td>14763641637.2</td>\n\t\t\t    \t\t\t<td>469358314.38</td>\n\t\t\t    \t\t\t<td>3.28</td>\n\t\t\t    \t\t\t<td>234441718.13</td>\n\t\t\t    \t\t\t<td>2.14</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2015</td>\n\t\t\t    \t\t\t<td>111640</td>\n\t\t\t    \t\t\t<td>14197274773.6</td>\n\t\t\t    \t\t\t<td>97008549.23</td>\n\t\t\t    \t\t\t<td>14294283322.8</td>\n\t\t\t    \t\t\t<td>1723519534.38</td>\n\t\t\t    \t\t\t<td>13.71</td>\n\t\t\t    \t\t\t<td>298023770.85</td>\n\t\t\t    \t\t\t<td>2.86</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2014</td>\n\t\t\t    \t\t\t<td>97955</td>\n\t\t\t    \t\t\t<td>12482686592.0</td>\n\t\t\t    \t\t\t<td>88077196.42</td>\n\t\t\t    \t\t\t<td>12570763788.4</td>\n\t\t\t    \t\t\t<td>1177214994.88</td>\n\t\t\t    \t\t\t<td>10.33</td>\n\t\t\t    \t\t\t<td>218747104.56</td>\n\t\t\t    \t\t\t<td>2.31</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2013</td>\n\t\t\t    \t\t\t<td>88688</td>\n\t\t\t    \t\t\t<td>11314351106.2</td>\n\t\t\t    \t\t\t<td>79197687.28</td>\n\t\t\t    \t\t\t<td>11393548793.5</td>\n\t\t\t    \t\t\t<td>1548705655.05</td>\n\t\t\t    \t\t\t<td>15.73</td>\n\t\t\t    \t\t\t<td>225334072.68</td>\n\t\t\t    \t\t\t<td>2.74</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2012</td>\n\t\t\t    \t\t\t<td>76840</td>\n\t\t\t    \t\t\t<td>9776468479.95</td>\n\t\t\t    \t\t\t<td>68374658.53</td>\n\t\t\t    \t\t\t<td>9844843138.48</td>\n\t\t\t    \t\t\t<td>607159491.89</td>\n\t\t\t    \t\t\t<td>6.57</td>\n\t\t\t    \t\t\t<td>178638756.83</td>\n\t\t\t    \t\t\t<td>2.56</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2011</td>\n\t\t\t    \t\t\t<td>71677</td>\n\t\t\t    \t\t\t<td>9166748375.62</td>\n\t\t\t    \t\t\t<td>70935270.97</td>\n\t\t\t    \t\t\t<td>9237683646.59</td>\n\t\t\t    \t\t\t<td>920186801.72</td>\n\t\t\t    \t\t\t<td>11.06</td>\n\t\t\t    \t\t\t<td>138745395.95</td>\n\t\t\t    \t\t\t<td>2.19</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2010</td>\n\t\t\t    \t\t\t<td>64201</td>\n\t\t\t    \t\t\t<td>8252695090.92</td>\n\t\t\t    \t\t\t<td>64801753.95</td>\n\t\t\t    \t\t\t<td>8317496844.87</td>\n\t\t\t    \t\t\t<td>1315136407.12</td>\n\t\t\t    \t\t\t<td>18.78</td>\n\t\t\t    \t\t\t<td>189051712.48</td>\n\t\t\t    \t\t\t<td>3.87</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2009</td>\n\t\t\t    \t\t\t<td>53897</td>\n\t\t\t    \t\t\t<td>6942792111.48</td>\n\t\t\t    \t\t\t<td>59568326.27</td>\n\t\t\t    \t\t\t<td>7002360437.75</td>\n\t\t\t    \t\t\t<td>1443538370.09</td>\n\t\t\t    \t\t\t<td>25.97</td>\n\t\t\t    \t\t\t<td>220149062.43</td>\n\t\t\t    \t\t\t<td>5.13</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    \t\t<tr>\n\t\t\t    \t\t\t<td>2008</td>\n\t\t\t    \t\t\t<td>42734</td>\n\t\t\t    \t\t\t<td>5508535529.98</td>\n\t\t\t    \t\t\t<td>50286537.68</td>\n\t\t\t    \t\t\t<td>5558822067.66</td>\n\t\t\t    \t\t\t<td>1045737307.82</td>\n\t\t\t    \t\t\t<td>23.17</td>\n\t\t\t    \t\t\t<td>131894583.49</td>\n\t\t\t    \t\t\t<td>4.16</td>\n\t\t\t    \t\t</tr>\n\t\t\t    \t\n\t\t\t    </tbody>\n\t\t\t</table>\n\t\t</div>\n\t</div>\n\n\t\t</section>\n\t\t\n\t\t<footer class=\"container\">\n\t\t\t<p>&copy; 2017 SunshineList.ca. All rights reserved.</p>\n\t\t</footer>\n\t\t\n\t\t<link type=\"text/css\" rel=\"stylesheet\" property=\"stylesheet\" href=\"//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css\">\n\t\t<link type=\"text/css\" rel=\"stylesheet\" property=\"stylesheet\" href=\"//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap-theme.min.css\">\n\t\t<link type=\"text/css\" rel=\"stylesheet\" property=\"stylesheet\" href=\"//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css\">\n\t\t\n\t\t\t\n\t\t<link type=\"text/css\" rel=\"stylesheet\" property=\"stylesheet\" href=\"//cdn.datatables.net/plug-ins/505bef35b56/integration/bootstrap/3/dataTables.bootstrap.css\">\n\t\t<link type=\"text/css\" rel=\"stylesheet\" property=\"stylesheet\" href=\"/static/css/bootstrap-multiselect.css\">\n\n\t\t\n\t\t<link type=\"text/css\" rel=\"stylesheet\" property=\"stylesheet\" href=\"/static/css/s13.css\">\n\t</body>\n</html>"
  },
  {
    "path": "sample_data/test-fixed-leadingspaces.txt",
    "content": "  1 aaa bbb\n 20 ccc ddd\n300 eee fff\n"
  },
  {
    "path": "sample_data/test-unicode-display.tsv",
    "content": "test\tdata\tresult\nascii\tHong Kong!\tHong Kong!\nbmp halfwidth\t❤\theart\nbmp fullwidth\t香港\t2 kanji\nright-to-left\t‏پاکستانی\tarabic\nemoji fullwidth\t🌊\twave\nemoji combining\t🇭🇰\tHong Kong flag\nemoji variant\t❤️\theart + variant\nemoji modifier\t🧒🏽\tchild + medium skin tone\nzero-width-joiner\t🕵️‍♀️\tdetective + zwj + female\nvariant+zwj\t🏳️‍🌈\tflag + variant + zwj + rainbow\n"
  },
  {
    "path": "sample_data/test.fixed",
    "content": "    a   b   c\n    d    e    f\n1   ggg hhh iiii\n 2  jjj kkk llllllll\n"
  },
  {
    "path": "sample_data/test.jsonl",
    "content": "{\"key1\": \"2016-01-01 11:00:00\", \"key2\": \"foo\", \"qty\": \"1\"}\n{\"key1\": \"2016-01-01 1:00\", \"amt\": \"3\", \"qty\": \"2\"}\n{\"key1\": null, \"key2\": \"baz\", \"amt\": \"43.2\", \"qty\": \"4\"}\n{\"key1\": \"2017-12-25 8:43\", \"foo\", \"amt\": \".03\", \"qty\": null}\n{\"key1\": \"2017-12-25 8:44\", \"key2\": \"bar\", \"amt\": \".3\", \"qty\": \"16\"}\n\n{\"key2\": \"baz\", \"amt\": \"3.3\", \"qty\": \"32\"}\n{\"key1\": \"2018-07-27 4:44\", \"key2\": null, \"amt\": \"9.1\", \"qty\": \"64\"}\n{\"key1\": \"2018-07-27 16:44\", \"key2\": \"bar\", \"amt\": null}\n{\"key1\": \"2018-07-27 18:44\", \"key2\": \"baz\", \"amt\": \".01\", \"qty\": \"256\"}\n{\"key1\": \"2018-10-20 18:44\", \"key2\": \"foo\", \"amt\": \".01\", \"qty\": \"30.0\"}\n\n# {\"key1\": \"2018-10-20 18:44\", \"key2\": \"foo\", \"amt\": \".01\", \"qty\": \"30.0\"}\n//{\"key1\": \"2018-10-20 18:44\", \"key2\": \"foo\", \"amt\": \".01\", \"qty\": \"30.0\"}"
  },
  {
    "path": "sample_data/test.msgpack",
    "content": "fallFellgeolocationtypePointcoordinates@\u0018UTu\u001aL@Ic33333id1mass21nameAachennametypeValidrecclassL5reclat50.775000reclong6.083330year1880-01-01T00:00:00.000:@computed_region_cbhk_fwbd:@computed_region_nnqa_25f4fallFellgeolocationtypePointcoordinates@$ww\u0007Y@L\u0017w[0\u0016id2mass720nameAarhusnametypeValidrecclassH6reclat56.183330reclong10.233330year1951-01-01T00:00:00.000"
  },
  {
    "path": "sample_data/test.usv",
    "content": "a␟b␟c␞d␟e␟f␞g␟h␟i␞"
  },
  {
    "path": "setup.py",
    "content": "#!/usr/bin/env python3\n\nfrom setuptools import setup\nimport os.path\nimport platform\nimport sysconfig\n\n\ndef all_requirements():\n    requirements = []\n    with open('requirements.txt', 'r', encoding='utf-8') as f:\n        requirements = []\n        for line in f:\n            line = line.strip()\n            if (line and not line.startswith('#') and not line.startswith('-e git+https')):\n\n                # inline comments\n                if '#' in line:\n                    line = line.split('#')[0].strip()\n\n                if line:\n                    requirements.append(line)\n\n        return requirements\n\n\n# tox can't actually run python3 setup.py: https://github.com/tox-dev/tox/issues/96\n# from visidata import __version__\n__version__ = \"3.4.dev0\"\ninstall_requires = [\n    \"python-dateutil\",\n    'importlib_resources; python_version<\"3.9\"',\n    'standard-mailcap; python_version>=\"3.13\"',\n]\n\nif not sysconfig.get_platform().startswith(\"mingw\"):  # 2757\n    install_requires += ['windows-curses >= 2.4.1; platform_system == \"Windows\"']   # 2119\n\nsetup(\n    name=\"visidata\",\n    version=__version__,\n    description=\"terminal interface for exploring and arranging tabular data\",\n    long_description=open(\"README.md\").read(),\n    long_description_content_type=\"text/markdown\",\n    author=\"Saul Pwanson\",\n    python_requires=\">=3.8\",\n    author_email=\"visidata@saul.pw\",\n    url=\"https://visidata.org\",\n    download_url=\"https://github.com/saulpw/visidata/tarball/\" + __version__,\n    scripts=[\"bin/vd2to3.vdx\"],\n    entry_points={\n        \"console_scripts\": [\"vd=visidata.main:vd_cli\",\n                            \"visidata=visidata.main:vd_cli\"],\n    },\n    py_modules=[\"visidata\"],\n    install_requires=install_requires,\n    packages=[\n        \"visidata\",\n        \"visidata.loaders\",\n        \"visidata.vendor\",\n        \"visidata.tests\",\n        \"visidata.guides\",\n        \"visidata.ddw\",\n        \"visidata.man\",\n        \"visidata.themes\",\n        \"visidata.features\",\n        \"visidata.experimental\",\n        \"visidata.experimental.noahs_tapestry\",\n        \"visidata.apps\",\n        \"visidata.apps.vgit\",\n        \"visidata.apps.vdsql\",\n        \"visidata.desktop\",\n    ],\n    data_files=[\n        (\"share/man/man1\", [f for f in [\"visidata/man/vd.1\", \"visidata/man/visidata.1\"] if os.path.exists(f)]),\n        (\"share/applications\", [\"visidata/desktop/visidata.desktop\"]),\n        (\"share/metainfo\", [\"visidata/desktop/org.visidata.VisiData.metainfo.xml\"]),\n        (\"share/icons/hicolor/48x48/apps\", [\"visidata/desktop/icons/48x48/visidata.png\"]),\n        (\"share/icons/hicolor/32x32/apps\", [\"visidata/desktop/icons/32x32/visidata.png\"]),\n    ],\n    extras_require={\n        \"test\": [\n            \"brotli\",\n            \"dnslib\",\n            \"dpkt\",\n            \"fecfile\",\n            \"Faker\",\n            \"h5py\",\n            \"lxml\",\n            \"msgpack\",\n            \"odfpy\",\n            \"openpyxl\",\n            \"pandas>=1.5.3\",\n            \"pyarrow\",\n            \"pyconll\",\n            \"pypng\",\n            \"pytest\",\n            \"PyYAML>=5.1\",\n            \"tabulate\",\n            \"tomli\",\n            \"wcwidth\",\n            \"xport>=3.0\",\n        ],\"windows-curses\": ['windows-curses >= 2.4.1; platform_system == \"Windows\"',  # 2119\n        ],\n        \"all\": all_requirements(),\n    },\n    package_data={\n        \"visidata.man\": [f for f in [\"vd.1\", \"vd.txt\"] if os.path.exists(os.path.join(\"visidata\", \"man\", f))],\n        \"visidata.ddw\": [\"input.ddw\", \"regex.ddw\"],\n        \"visidata\": [\"guides/*.md\"],\n        \"visidata.tests\": [\"sample.tsv\", \"benchmark.csv\"],\n        \"visidata.desktop\": [\n            \"visidata.desktop\",\n            \"org.visidata.VisiData.metainfo.xml\",\n            \"icons/48x48/visidata.png\",\n            \"icons/32x32/visidata.png\",\n        ],\n        \"visidata.experimenta.noahs_tapestry\": [\n            \"*.ddw\",\n            \"*.md\",\n            \"*.json\",\n            \"noahs.sqlite\",\n        ],\n    },\n    license=\"GPL-3.0-only\",\n    classifiers=[\n        \"Development Status :: 5 - Production/Stable\",\n        \"Environment :: Console\",\n        \"Environment :: Console :: Curses\",\n        \"Intended Audience :: Developers\",\n        \"Intended Audience :: Science/Research\",\n        \"Intended Audience :: System Administrators\",\n        \"Operating System :: OS Independent\",\n        \"Programming Language :: Python :: 3\",\n        \"Topic :: Database :: Front-Ends\",\n        \"Topic :: Scientific/Engineering\",\n        \"Topic :: Office/Business :: Financial :: Spreadsheet\",\n        \"Topic :: Scientific/Engineering :: Visualization\",\n        \"Topic :: Utilities\",\n    ],\n    keywords=(\n        \"console tabular data spreadsheet terminal viewer textpunk\"\n        \"curses csv hdf5 h5 xlsx excel tsv\"\n    ),\n)\n"
  },
  {
    "path": "snippets/gender.py",
    "content": "'''gender(first_name): return predicted gender.  Requires gender-guesser library.\n\nPossible values:\n- \"unknown\" (name not found)\n- \"andy\" (androgynous)\n- \"male\"\n- \"female\"\n- \"mostly_male\"\n- \"mostly_female\"\n'''\n\nimport functools\n\n@functools.lru_cache()\ndef gg_detect():\n    import gender_guesser.detector\n    return gender_guesser.detector.Detector()\n\ndef gender(first_name):\n    return gg_detect().get_gender(first_name.capitalize())\n"
  },
  {
    "path": "snippets/geolocate.py",
    "content": "'geolocate(ip): Fetch geolocation info by IP address from hostip.info service.'\n\nimport urllib.request\nimport functools\nimport json\n\n\n@functools.lru_cache(10240)  # should actually cache semi-permanently in visidata_dir\ndef geolocate(ip):\n    url = 'http://api.hostip.info/get_json.php?position=true&ip=' + ip\n    with urllib.request.urlopen(url) as fp:\n        contents = fp.read().decode('utf-8').strip()\n        return json.loads(contents)\n"
  },
  {
    "path": "snippets/rank.py",
    "content": "'''\nAdds `rank` command (no default binding) to add new rank column based on current column in sorted order.\nValues are cached on the column, use `cache-col` command to reset.\n\nTo enable, add `from plugins.rank import *` to .visidatarc.\n'''\n\nfrom visidata import Column, Sheet, asyncthread\n\n\nclass RankColumn(Column):\n    def __init__(self, col, **kwargs):\n        super().__init__(col.name+'_rank', type=int, **kwargs)\n        self.origCol = col\n        self.srcValues = {}\n        self.resetCache()\n\n    def calcValue(self, row):\n        return self.srcValues.get(self.sheet.rowid(row), None)\n\n    @asyncthread\n    def resetCache(self):\n        valueRows = self.origCol.getValueRows(self.origCol.sheet.rows)\n        sortedVals = sorted(valueRows, key=lambda r: r[0])\n        self.srcValues = {}\n        prevval = None\n        previ = 0\n        for i, (v, r) in enumerate(sortedVals):\n            if prevval != v:\n                prevval = v\n                previ = i+1\n\n            self.srcValues[self.origCol.sheet.rowid(r)] = previ\n\n\nSheet.addCommand(None, 'rank', 'addColumn(RankColumn(cursorCol), index=cursorVisibleColIndex+1)')\n"
  },
  {
    "path": "tests/.visidata/.gitignore",
    "content": "/cache/\n"
  },
  {
    "path": "tests/.visidatarc",
    "content": ""
  },
  {
    "path": "tests/1410a.vdj",
    "content": "#!vd -p\n{\"sheet\": \"global\", \"col\": \"\", \"row\": \"numeric_binning\", \"longname\": \"set-option\", \"input\": \"True\", \"keystrokes\": \"\", \"comment\": \"\"}\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"\", \"longname\": \"open-file\", \"input\": \"sample_data/benchmark.csv\", \"keystrokes\": \"o\", \"comment\": \"\"}\n{\"sheet\": \"benchmark\", \"col\": \"Item\", \"row\": \"12\", \"longname\": \"delete-cell\", \"input\": \"\", \"keystrokes\": \"zd\", \"comment\": \"delete current cell (set to None)\"}\n{\"sheet\": \"benchmark\", \"col\": \"Item\", \"row\": \"20\", \"longname\": \"delete-cell\", \"input\": \"\", \"keystrokes\": \"zd\", \"comment\": \"delete current cell (set to None)\"}\n{\"sheet\": \"benchmark\", \"col\": \"Item\", \"row\": \"23\", \"longname\": \"delete-cell\", \"input\": \"\", \"keystrokes\": \"zd\", \"comment\": \"delete current cell (set to None)\"}\n{\"sheet\": \"benchmark\", \"col\": \"Item\", \"row\": \"27\", \"longname\": \"delete-cell\", \"input\": \"\", \"keystrokes\": \"zd\", \"comment\": \"delete current cell (set to None)\"}\n{\"sheet\": \"benchmark\", \"col\": \"Item\", \"row\": \"\", \"longname\": \"freq-col\", \"input\": \"\", \"keystrokes\": \"Shift+F\", \"comment\": \"open Frequency Table grouped on current column, with aggregations of other columns\"}\n{\"sheet\": \"benchmark_Item_freq\", \"col\": \"Item\", \"row\": \"\", \"longname\": \"sort-asc\", \"input\": \"\", \"keystrokes\": \"[\", \"comment\": \"sort ascending by current column; replace any existing sort criteria\"}\n"
  },
  {
    "path": "tests/1410b.vdj",
    "content": "#!vd -p\n{\"sheet\": \"global\", \"col\": null, \"row\": \"numeric_binning\", \"longname\": \"set-option\", \"input\": \"True\", \"keystrokes\": \"\", \"comment\": null}\n{\"longname\": \"open-file\", \"input\": \"sample_data/test.jsonl\", \"keystrokes\": \"o\"}\n{\"sheet\": \"test\", \"col\": \"key1\", \"row\": \"\", \"longname\": \"freq-col\", \"input\": \"\", \"keystrokes\": \"Shift+F\", \"comment\": \"open Frequency Table grouped on current column, with aggregations of other columns\"}\n{\"sheet\": \"test_key1_freq\", \"col\": \"key1\", \"row\": \"\", \"longname\": \"sort-asc\", \"input\": \"\", \"keystrokes\": \"[\", \"comment\": \"sort ascending by current column; replace any existing sort criteria\"}\n"
  },
  {
    "path": "tests/1410c.vdj",
    "content": "#!vd -p\n{\"sheet\": \"global\", \"col\": null, \"row\": \"numeric_binning\", \"longname\": \"set-option\", \"input\": \"True\", \"keystrokes\": \"\", \"comment\": null}\n{\"longname\": \"open-file\", \"input\": \"sample_data/y77d-th95.json.gz\", \"keystrokes\": \"o\"}\n{\"sheet\": \"y77d-th95\", \"col\": \"geolocation\", \"row\": \"\", \"longname\": \"type-len\", \"input\": \"\", \"keystrokes\": \"z#\", \"comment\": \"set type of current column to len\"}\n{\"sheet\": \"y77d-th95\", \"col\": \"geolocation\", \"row\": \"\", \"longname\": \"freq-col\", \"input\": \"\", \"keystrokes\": \"Shift+F\", \"comment\": \"open Frequency Table grouped on current column, with aggregations of other columns\"}\n"
  },
  {
    "path": "tests/add-col-dup-attrs.vdj",
    "content": "#!vd -p\n{\"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\"}\n{\"sheet\": \"sample\", \"col\": \"Units\", \"row\": \"\", \"longname\": \"addcol-new\", \"input\": \"integers\", \"keystrokes\": \"za\", \"comment\": \"append an empty column\"}\n{\"sheet\": \"sample\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-rows\", \"input\": \"\", \"keystrokes\": \"gs\", \"comment\": \"select all rows\"}\n{\"sheet\": \"sample\", \"col\": \"integers\", \"row\": \"\", \"longname\": \"setcol-iter\", \"input\": \"range(1, 100)\", \"keystrokes\": \"gz=\", \"comment\": \"set current column for selected rows to the items in result of Python sequence expression\"}\n{\"sheet\": \"sample\", \"col\": \"integers\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\"}\n{\"sheet\": \"sample\", \"col\": \"integers\", \"row\": \"\", \"longname\": \"aggregate-col\", \"input\": \"mean\", \"keystrokes\": \"+\", \"comment\": \"Add aggregator to current column\"}\n{\"sheet\": \"sample\", \"col\": \"\", \"row\": \"\", \"longname\": \"dup-selected\", \"input\": \"\", \"keystrokes\": \"\\\"\", \"comment\": \"open duplicate sheet with only selected rows\"}\n{\"sheet\": \"sample_selectedref\", \"col\": \"\", \"row\": \"\", \"longname\": \"columns-sheet\", \"input\": \"\", \"keystrokes\": \"Shift+C\", \"comment\": \"open Columns Sheet: edit column properties for current sheet\"}\n"
  },
  {
    "path": "tests/addcol-iter.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\", \"comment\": null, \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"OrderDate\", \"row\": \"\", \"longname\": \"addcol-iter\", \"input\": \"range(1, 100)\", \"comment\": \"add column with values from a Python sequence expression, repeating it if needed to fill\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"A\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"A\", \"row\": \"\", \"longname\": \"key-col-on\", \"input\": \"\", \"comment\": \"set current column as a key column\", \"replayable\": true}\n"
  },
  {
    "path": "tests/addcol_window.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\t\nsample\tUnits\t\ttype-int\t\t#\tset type of current column to int\nsample\tUnits\t\taddcol-window\t1 1\tw\t\nsample\tUnits_window\t\taddcol-expr\tsum(Units_window)\t=\tcreate new column from Python expression, with column names as variables\n"
  },
  {
    "path": "tests/aggregators-cols.vdj",
    "content": "#!vd -p\n{\"sheet\": \"global\", \"col\": null, \"row\": \"disp_date_fmt\", \"longname\": \"set-option\", \"input\": \"%b %d, %Y\", \"keystrokes\": \"\", \"comment\": null}\n{\"longname\": \"open-file\", \"input\": \"sample_data/test.jsonl\", \"keystrokes\": \"o\"}\n{\"sheet\": \"test\", \"col\": \"key2\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"toggle current column as a key column\"}\n{\"sheet\": \"test\", \"col\": \"key2\", \"row\": \"\", \"longname\": \"addcol-aggregate\", \"input\": \"count\", \"comment\": \"add column(s) with aggregator of rows grouped by key columns\"}\n{\"sheet\": \"test\", \"col\": \"qty\", \"row\": \"\", \"longname\": \"type-float\", \"input\": \"\", \"keystrokes\": \"%\", \"comment\": \"set type of current column to float\"}\n{\"sheet\": \"test\", \"col\": \"qty\", \"row\": \"\", \"longname\": \"addcol-aggregate\", \"input\": \"rank sum\", \"comment\": \"add column(s) with aggregator of rows grouped by key columns\"}\n{\"sheet\": \"test\", \"col\": \"qty_sum\", \"row\": \"\", \"longname\": \"addcol-rank-sheet\", \"input\": \"\", \"comment\": \"add column with the rank of each row based on its key columns\"}\n"
  },
  {
    "path": "tests/aggregators-errors.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/test.jsonl\to\t\n\t\tnumeric_binning\tset-option\tTrue\t\t\ntest\tkey1\t\ttype-date\t\t@\t\ntest\tqty\t\ttype-int\t\t#\t\ntest\tamt\t\ttype-float\t\t%\t\ntest\tqty\t\taggregate-col\tsum\t+\t\ntest\tkey1\t\tkey-col\t\t!\t\ntest\t\t\tcolumns-sheet\t\tC\t\ntest_columns\t\tキqty\tselect-row\t\ts\t\ntest_columns\t\tキamt\tselect-row\t\ts\t\ntest_columns\t\t\taggregate-cols\tmin\tg+\t\ntest_columns\t\t\taggregate-cols\tmax\tg+\t\ntest_columns\t\t\tquit-sheet\t\tq\t\ntest\tkey2\t\tpivot\t\tW\t\ntest_pivot_key2\t\t\tcolumns-sheet\t\tC\t\ntest_pivot_key2_columns\tname\t\tsort-asc\t\t[\t\ntest_pivot_key2_columns\t\t\tquit-sheet\t\tq\t\ntest_pivot_key2\tkey1\t\tsort-asc\t\t[\t\n"
  },
  {
    "path": "tests/aggregators-set.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tQuantity\t\ttype-int\t\t#\t\nbenchmark\tUnit\t\ttype-currency\t\t$\t\nbenchmark\tPaid\t\ttype-currency\t\t$\t\nbenchmark\t\t\tcolumns-sheet\t\tC\t\nbenchmark_columns\t\tキQuantity\tselect-row\t\ts\t\nbenchmark_columns\t\tキUnit\tselect-row\t\ts\t\nbenchmark_columns\t\tキUnit\tunselect-row\t\tu\t\nbenchmark_columns\t\tキPaid\tselect-row\t\ts\t\nbenchmark_columns\t\t\taggregate-cols\tsum\tg+\t\nbenchmark_columns\taggregators\tキPaid\tedit-cell\tsum avg\te\t\nbenchmark_columns\t\t\tquit-sheet\t\tq\t\nbenchmark\tItem\t\tfreq-col\t\tF\t\nbenchmark_Item_freq\t\t\tcolumns-sheet\t\tC\t\nbenchmark_Item_freq_columns\tname\t\tsort-asc\t\t[\t\nbenchmark_Item_freq_columns\t\t\tquit-sheet\t\tq\t\n"
  },
  {
    "path": "tests/append.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/data1.tsv\to\topen input in VisiData\n\t\t\topen-file\ttests/data2.tsv\to\topen input in VisiData\ndata2\t\t\tsheets-stack\t\tS\topen Sheets Sheet\nsheets\t\tキdata2\tselect-row\t\ts\tselect current row\nsheets\t\tキdata1\tselect-row\t\ts\tselect current row\nsheets\t\t\tjoin-sheets\tappend\t&\tmerge the selected sheets with visible columns from all, keeping rows according to jointype\ndata2&data1\tKey\t\tkey-col\t\t!\ttoggle current column as a key column\ndata2&data1\tA\t\tslide-left\t\tH\tslide current column left\ndata2&data1\tA\t\tslide-left\t\tH\tslide current column left\ndata2&data1\tB\t\tslide-left\t\tH\tslide current column left\ndata2&data1\tB\t\tslide-left\t\tH\tslide current column left\ndata2&data1\tA\t\tkey-col\t\t!\ttoggle current column as a key column\ndata2&data1\tA\t\ttype-string\t\t~\tset type of current column to str\ndata2&data1\t\t\tsort-keys-asc\t\tg[\tsort ascending by all key columns\ndata2&data1\tA\t\tkey-col\t\t!\ttoggle current column as a key column\ndata2&data1\t\t\tcolumns-sheet\t\tC\t\ndata2&data1_columns\twidth\tキorigin_sheet\tedit-cell\t10\te\t\ndata2&data1_columns\t\tキorigin_sheet\tslide-down\t\tJ\t\ndata2&data1_columns\t\t\tquit-sheet\t\tq\t\n"
  },
  {
    "path": "tests/avg-nulls.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tItem\t\tfreq-col\t\tF\t\nbenchmark_Item_freq\t\t\tquit-sheet\t\tq\t\nbenchmark\tItem\t3\tselect-equal-cell\t\t,\t\nbenchmark\t\t3\tunselect-row\t\tu\t\nbenchmark\tQuantity\t\tdelete-cells\t\tgzd\t\nbenchmark\tQuantity\t\ttype-int\t\t#\t\nbenchmark\tQuantity\t\taggregate-col\tavg\t+\t\nbenchmark\tItem\t\tfreq-col\t\tF\t\n"
  },
  {
    "path": "tests/bulk-rename-cols.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\t\nsample\t\t\tcolumns-sheet\t\tC\topen Columns Sheet: edit column properties for current sheet\nsample_columns\t\t\tselect-rows\t\tgs\t\nsample_columns\tname\t\tsetcol-expr\tf\"feature_{name}\"\tg=\tset current column for selected rows to result of Python expression\n"
  },
  {
    "path": "tests/capture-col-named.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tDate\t0\taddcol-capture\t(?P<month>\\d{1,2})/(?P<day>\\d{1,2})/(?P<year>\\d{4}) (?P<hour>\\d{1,2}):(?P<min>\\d{2})(?P<meridiem>[ap])\t;\tadd column captured by regex\nbenchmark\tDate_re\t\texpand-col\t\t(\texpand captured column into separate columns\nbenchmark\tDate_re\t\thide-col\t\t-\thide the intermediate capture column\n"
  },
  {
    "path": "tests/column-copy.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tUnit\t\ttype-float\t\t%\t\nbenchmark\tUnit\t\ttype-currency\t\t$\t\nbenchmark\tPaid\t\ttype-currency\t\t$\t\nbenchmark\tPaid\t\taggregate-col\tsum\t+\t\nbenchmark\tCustomer\t\tfreq-col\t\tF\t\nbenchmark_Customer_freq\tPaid_sum\t\tfreeze-col\t\t'\t\nbenchmark_Customer_freq\tPaid_sum_frozen\t\trename-col\tadj_sum_Paid\t^\t\nbenchmark_Customer_freq\tadj_sum_Paid\tキRobert Armstrong\tedit-cell\t2,000.00\te\t\n"
  },
  {
    "path": "tests/column-name-__name__.csv",
    "content": "__name__,foo,bar,baz\na,1,2,3\nb,4,5,6\nc,7,8,9\n"
  },
  {
    "path": "tests/column-name-__name__.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/column-name-__name__.csv\to\t\n"
  },
  {
    "path": "tests/column-name-_fields.csv",
    "content": "_fields,foo,bar,baz\na,1,2,3\nb,4,5,6\nc,7,8,9\n"
  },
  {
    "path": "tests/column-name-_fields.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/column-name-_fields.csv\to\t\n"
  },
  {
    "path": "tests/column-name-length.csv",
    "content": "length,foo,bar,baz\na,1,2,3\nb,4,5,6\nc,7,8,9\n"
  },
  {
    "path": "tests/column-name-length.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/column-name-length.csv\to\t\n"
  },
  {
    "path": "tests/concat-origin.vdx",
    "content": "# concat join should have origin_sheet column like append  #2929\nopen-file tests/data1.tsv\nopen-file tests/data2.tsv\njoin-sheets-top2 concat\ncol origin_sheet\nresize-col-max\n"
  },
  {
    "path": "tests/curcol.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\t\nsample\tRegion\t\taddcol-expr\tcurcol.casefold()\t=\tcreate new column from Python expression, with column names as variables\nsample\tItem\t\taddcol-expr\tcurcol.casefold()\t=\tcreate new column from Python expression, with column names as variables\nsample\tcurcol.casefold()\t\trename-col\tRegion_col\t^\tedit name of current column\nsample\tcurcol.casefold()\t\trename-col\tItem_col\t^\tedit name of current column\n"
  },
  {
    "path": "tests/data1.tsv",
    "content": "Key\tA\tB\n1\ta1\tb1\n2\tc1\td1\n2\te1\tf1\n"
  },
  {
    "path": "tests/data2.tsv",
    "content": "Key\tC\tD\n2\ta2\tb2\n3\tc2\td2\n"
  },
  {
    "path": "tests/data3.tsv",
    "content": "Key\tE\tF\n1\te1\tf1\n3\te3\tf3\n"
  },
  {
    "path": "tests/date_add.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tDate\t\ttype-date\t\t@\t\nbenchmark\tDate\t\taddcol-expr\tDate+1\taddcol-expr\t\nbenchmark\tDate+1\t\ttype-date\t\t@\t\nbenchmark\tDate+1\t\taddcol-expr\t1+Date\taddcol-expr\t\nbenchmark\t1+Date\t\ttype-date\t\t@\t\nbenchmark\t1+Date\t\taddcol-expr\tDate+15*minutes\taddcol-expr\t\nbenchmark\tDate+15*minutes\t\ttype-date\t\t@\t\nbenchmark\t\t\tcolumns-sheet\t\tC\t\nbenchmark_columns\tfmtstr\tキDate+15*minutes\tedit-cell\t%Y-%m-%d %H:%M:%S\te\t\nbenchmark_columns\t\t\tquit-sheet\t\tq\t\nbenchmark\tDate\t\ttype-date\t\t@\t\n"
  },
  {
    "path": "tests/describe-error.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/test.jsonl\to\t\ntest\tkey1\t\ttype-date\t\t@\t\ntest\tqty\t\ttype-int\t\t#\t\ntest\tamt\t\ttype-float\t\t%\t\ntest\t\t\tdescribe-sheet\t\tI\t\ntest_describe\tcolumn\t\tsort-asc\t\t[\t\ntest_describe\tmode\t\thide-col\t\t-\thide current column\ntest_describe\tsum\t\ttype-float\t\t%\tset type of current column to float\n"
  },
  {
    "path": "tests/describe-through.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tCustomer\t\tselect-col-regex\tRobert\t|\t\nbenchmark\tQuantity\t\tsetcol-expr\tNone\tg=\t\nbenchmark\tQuantity\t\ttype-int\t\t#\t\nbenchmark\t\t\tdescribe-sheet\t\tI\t\nbenchmark_describe\tnulls\tキQuantity\tdive-cell\t\tz^J\t\nbenchmark_Quantity_nulls\tUnit\t\ttype-currency\t\t$\t\nbenchmark_Quantity_nulls\tPaid\t\ttype-currency\t\t$\t\n"
  },
  {
    "path": "tests/describe.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tDate\t\ttype-date\t\t@\tset type of current column to date\nbenchmark\tQuantity\t\ttype-int\t\t#\tset type of current column to int\nbenchmark\tUnit\t\ttype-currency\t\t$\tset type of current column to currency\nbenchmark\tPaid\t\ttype-currency\t\t$\tset type of current column to currency\nbenchmark\t\t\tdescribe-sheet\t\tI\topen Describe Sheet with descriptive statistics for all visible columns\nbenchmark_describe\tmode\t\thide-col\t\t-\thide current column\nbenchmark_describe\tsum\t\ttype-float\t\t%\tset type of current column to float\n"
  },
  {
    "path": "tests/diff-join.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"tests/data1.tsv\", \"keystrokes\": \"o\", \"comment\": null}\n{\"longname\": \"open-file\", \"input\": \"tests/data2.tsv\", \"keystrokes\": \"o\"}\n{\"sheet\": \"data1\", \"col\": \"\", \"row\": \"\", \"longname\": \"sheets-stack\", \"input\": \"\", \"keystrokes\": \"Shift+S\", \"comment\": \"open Sheets Stack: join or jump between the active sheets on the current stack\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\", \"longname\": \"reload-selected\", \"input\": \"\", \"keystrokes\": \"gCtrl+R\", \"comment\": \"reload all selected sheets\"}\n{\"sheet\": \"data1\", \"col\": \"\", \"row\": \"\", \"longname\": \"columns-all\", \"input\": \"\", \"keystrokes\": \"gShift+C\", \"comment\": \"open Columns Sheet: edit column properties for all visible columns from all sheets on the sheets stack\"}\n{\"sheet\": \"all_columns\", \"col\": \"\", \"row\": \"\\u30addata2,Key\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"all_columns\", \"col\": \"\", \"row\": \"\\u30addata1,Key\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"all_columns\", \"col\": \"\", \"row\": \"\", \"longname\": \"key-selected\", \"input\": \"\", \"keystrokes\": \"g!\", \"comment\": \"toggle selected rows as key columns on source sheet\"}\n{\"sheet\": \"all_columns\", \"col\": \"\", \"row\": \"\", \"longname\": \"sheets-stack\", \"input\": \"\", \"keystrokes\": \"Shift+S\", \"comment\": \"open Sheets Stack: join or jump between the active sheets on the current stack\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\\u30addata2\", \"longname\": \"slide-up\", \"input\": \"\", \"keystrokes\": \"Shift+K\", \"comment\": \"slide current row up\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\\u30addata2\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\\u30addata1\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\", \"longname\": \"join-selected\", \"input\": \"diff\", \"keystrokes\": \"&\", \"comment\": \"merge selected sheets with visible columns from all, keeping rows according to jointype\"}\n{\"sheet\": \"data2+data1\", \"col\": \"A\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"toggle current column as a key column\"}\n{\"sheet\": \"data2+data1\", \"col\": \"\", \"row\": \"\", \"longname\": \"sort-keys-asc\", \"input\": \"\", \"keystrokes\": \"g[\", \"comment\": \"sort ascending by all key columns; replace any existing sort criteria\"}\n{\"sheet\": \"data2+data1\", \"col\": \"A\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"toggle current column as a key column\"}\n"
  },
  {
    "path": "tests/dup-rows-attrs.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\t\nsample\tUnits\t\ttype-int\t\t#\tset type of current column to int\nsample\tUnits\t\taggregate-col\tsum\t+\tAdd aggregator to current column\nsample\t\t0\tselect-row\t\ts\tselect current row\nsample\t\t1\tselect-row\t\ts\tselect current row\nsample\t\t\tdup-selected\t\t\"\topen duplicate sheet with only selected rows\nsample_selectedref\t\t\tcolumns-sheet\t\tShift+C\topen Columns Sheet: edit column properties for current sheet\n"
  },
  {
    "path": "tests/edit-fixed.vdx",
    "content": "# test load and edit fixed-width file  #2265\nopen-file sample_data/benchmark.fixed\ncol Customer\nrow 1\nedit-cell EDITED NAME\n"
  },
  {
    "path": "tests/edit-joinkey-1.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/data2.tsv\to\t\n\t\t\topen-file\ttests/data1.tsv\to\t\ndata2\t\t\tsheets-stack\t\tS\t\nsheets\t\t\treload-selected\t\tg^R\t\nsheets\t\tキdata2\tselect-row\t\ts\t\nsheets\t\tキdata1\tselect-row\t\ts\t\nsheets\t\t\tcolumns-selected\t\tgC\t\nall_columns\t\tキdata2,Key\tselect-row\t\ts\t\nall_columns\t\tキdata1,Key\tselect-row\t\ts\t\nall_columns\t\t\tkey-selected\t\tg!\t\nall_columns\t\t\tsheets-stack\t\tS\t\nsheets\t\t\tjoin-sheets\tfull\t&\t\ndata2+data1\tA\t\tkey-col\t\t!\t\ndata2+data1\t\t\tsort-keys-asc\t\tg[\t\ndata2+data1\tA\t\tkey-col\t\t!\t\ndata2+data1\tKey\tキ2\tedit-cell\t4\te\t\ndata2+data1\t\t\treload-sheet\t\t^R\t\n"
  },
  {
    "path": "tests/edit-joinkey-2.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/data2.tsv\to\t\n\t\t\topen-file\ttests/data1.tsv\to\t\ndata2\t\t\tsheets-stack\t\tS\t\nsheets\t\tキdata2\tselect-row\t\ts\t\nsheets\t\tキdata1\tselect-row\t\ts\t\nsheets\t\t\treload-selected\t\tg^R\t\nsheets\t\t\tcolumns-selected\t\tgC\t\nall_columns\t\tキdata2,Key\tselect-row\t\ts\t\nall_columns\t\tキdata1,Key\tselect-row\t\ts\t\nall_columns\t\t\tkey-selected\t\tg!\t\nsheets\t\t\tjoin-sheets\tfull\t&\t\ndata2+data1\tA\t\tkey-col\t\t!\t\ndata2+data1\t\t\tsort-keys-asc\t\tg[\t\ndata2+data1\tA\t\tkey-col\t\t!\t\ndata2+data1\tKey\tキ2\tedit-cell\t4\te\t\ndata2+data1\t\t\treload-sheet\t\t^R\t\ndata2\t\t\tsheets-stack\t\tS\t\nsheets\t\tキdata1\topen-row\t\t^J\t\n"
  },
  {
    "path": "tests/edit-joinregular-1.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/data2.tsv\to\t\n\t\t\topen-file\ttests/data1.tsv\to\t\ndata2\t\t\tsheets-stack\t\tS\t\nsheets\t\tキdata2\tselect-row\t\ts\t\nsheets\t\tキdata1\tselect-row\t\ts\t\nsheets\t\t\treload-selected\t\tg^R\nsheets\t\t\tcolumns-selected\t\tgC\nall_columns\t\tキdata2,Key\tselect-row\t\ts\t\nall_columns\t\tキdata1,Key\tselect-row\t\ts\t\nall_columns\t\t\tkey-selected\t\tg!\t\nsheets\t\t\tjoin-sheets\tfull\t&\t\ndata2+data1\tA\t\tkey-col\t\t!\t\ndata2+data1\t\t\tsort-keys-asc\t\tg[\t\ndata2+data1\tA\t\tkey-col\t\t!\t\ndata2+data1\tC\tキ2\tedit-cell\ta3\te\t\n"
  },
  {
    "path": "tests/edit-joinregular-2.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/data2.tsv\to\t\n\t\t\topen-file\ttests/data1.tsv\to\t\ndata2\t\t\tsheets-stack\t\tS\t\nsheets\t\tキdata2\tselect-row\t\ts\t\nsheets\t\tキdata1\tselect-row\t\ts\t\nsheets\t\t\treload-selected\t\tg^R\t\nsheets\t\t\tcolumns-selected\t\tgC\t\nall_columns\t\tキdata2,Key\tselect-row\t\ts\t\nall_columns\t\tキdata1,Key\tselect-row\t\ts\t\nall_columns\t\t\tkey-selected\t\tg!\t\nsheets\t\t\tjoin-sheets\tfull\t&\t\ndata2+data1\tA\t\tkey-col\t\t!\t\ndata2+data1\t\t\tsort-keys-asc\t\tg[\t\ndata2+data1\tA\t\tkey-col\t\t!\t\ndata2+data1\tC\tキ2\tedit-cell\ta3\te\t\ndata2+data1\t\t\tsheets-stack\t\tS\t\nsheets\t\tキdata2\topen-row\t\t^J\t\n"
  },
  {
    "path": "tests/edit-type.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\t\t\tcolumns-sheet\t\tC\t\nbenchmark_columns\ttype\tキQuantity\tedit-cell\tint\te\t\nbenchmark_columns\t\tキUnit\tselect-row\t\ts\t\nbenchmark_columns\t\tキPaid\tselect-row\t\ts\t\nbenchmark_columns\ttype\tキPaid\tsetcol-input\tcurrency\tge\t\nbenchmark\t\t\tdescribe-sheet\t\tI\t\nbenchmark_describe\tmode\t\thide-col\t\t-\thide current column\nbenchmark_describe\tsum\t\ttype-float\t\t%\tset type of current column to float\n"
  },
  {
    "path": "tests/empty-unfurl-2.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\nglobal\t\tunfurl_empty\tset-option\tTrue\t\t\n\t\t\topen-file\tsample_data/test.jsonl\to\t\ntest\tkey2\t\taddcol-expr\tlist(key2.strip())\t=\tcreate new column from Python expression, with column names as variables\ntest\tlist(key2.strip())\t\tunfurl-col\t\t\trow-wise expand current column of lists (e.g. [2]) or dicts (e.g. {3}) within that column\n"
  },
  {
    "path": "tests/empty-unfurl.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/test.jsonl\to\t\ntest\tkey2\t\taddcol-expr\tlist(key2.strip())\t=\tcreate new column from Python expression, with column names as variables\ntest\tlist(key2.strip())\t\tunfurl-col\t\t\trow-wise expand current column of lists (e.g. [2]) or dicts (e.g. {3}) within that column\n"
  },
  {
    "path": "tests/error-passthru.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tQuantity\t1\tselect-equal-cell\t\t,\t\nbenchmark\tQuantity\t\tdelete-cells\t\tgzd\t\nbenchmark\tQuantity\t\taddcol-expr\tQuantity.foo\t=\t\nbenchmark\tQuantity.foo\t\tfreq-col\t\tF\t\nbenchmark_Quantity.foo_freq\thistogram\t\thide-col\t\t-\tHide current column\n"
  },
  {
    "path": "tests/errors-311.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\toverride\tencoding_errors\tset-option\treplace\t\t\n\toverride\tskip\tset-option\t1\t\t\n\t\t\topen-file\tsample_data/errors.csv\to\t\n"
  },
  {
    "path": "tests/exp-digits.vdj",
    "content": "#!vd -p\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"incr_base\", \"longname\": \"set-option\", \"input\": \"0\", \"keystrokes\": \"\", \"comment\": \"\"}\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"\", \"longname\": \"open-new\", \"input\": \"1\", \"keystrokes\": \"A\", \"comment\": \"open new blank sheet with number columns\"}\n{\"sheet\": \"unnamed\", \"col\": 0, \"row\": \"\", \"longname\": \"rename-col\", \"input\": \"x\", \"keystrokes\": \"^\", \"comment\": \"edit name of current column\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"add-rows\", \"input\": \"100\", \"keystrokes\": \"ga\", \"comment\": \"add N blank rows\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-rows\", \"input\": \"\", \"keystrokes\": \"gs\", \"comment\": \"\"}\n{\"sheet\": \"unnamed\", \"col\": \"x\", \"row\": \"\", \"longname\": \"setcol-incr\", \"input\": \"\", \"keystrokes\": \"gi\", \"comment\": \"set selected rows in this column to the values in the given Python sequence expression\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"unselect-rows\", \"input\": \"\", \"keystrokes\": \"gu\", \"comment\": \"\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"exec-python\", \"input\": \"import math\", \"keystrokes\": \"g^X\", \"comment\": \"execute Python statement in the global scope\"}\n{\"sheet\": \"unnamed\", \"col\": \"x\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\"}\n{\"sheet\": \"unnamed\", \"col\": \"x\", \"row\": \"\", \"longname\": \"addcol-expr\", \"input\": \"math.e**x\", \"keystrokes\": \"=\", \"comment\": \"create new column from Python expression, with column names as variables\"}\n{\"sheet\": \"unnamed\", \"col\": \"math.e**x\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\"}\n{\"sheet\": \"unnamed\", \"col\": \"math.e**x\", \"row\": \"\", \"longname\": \"rename-col\", \"input\": \"y\", \"keystrokes\": \"^\", \"comment\": \"edit name of current column\"}\n{\"sheet\": \"unnamed\", \"col\": \"y\", \"row\": \"\", \"longname\": \"addcol-expr\", \"input\": \"1\", \"keystrokes\": \"=\", \"comment\": \"create new column from Python expression, with column names as variables\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"columns-sheet\", \"input\": \"\", \"keystrokes\": \"C\", \"comment\": \"open Columns Sheet\"}\n{\"sheet\": \"unnamed_columns\", \"col\": \"\", \"row\": \"\\u30ad1\", \"longname\": \"copy-row\", \"input\": \"\", \"keystrokes\": \"y\", \"comment\": \"copy current row to clipboard\"}\n{\"sheet\": \"unnamed_columns\", \"col\": \"\", \"row\": \"\\u30ad1\", \"longname\": \"paste-after\", \"input\": \"\", \"keystrokes\": \"p\", \"comment\": \"paste clipboard rows after current row\"}\n{\"sheet\": \"unnamed_columns\", \"col\": \"\", \"row\": \"\\u30ad1\", \"longname\": \"paste-after\", \"input\": \"\", \"keystrokes\": \"p\", \"comment\": \"paste clipboard rows after current row\"}\n{\"sheet\": \"unnamed_columns\", \"col\": \"\", \"row\": \"\\u30ad1\", \"longname\": \"paste-after\", \"input\": \"\", \"keystrokes\": \"p\", \"comment\": \"paste clipboard rows after current row\"}\n{\"sheet\": \"unnamed_columns\", \"col\": \"\", \"row\": \"\\u30ad1\", \"longname\": \"paste-after\", \"input\": \"\", \"keystrokes\": \"p\", \"comment\": \"paste clipboard rows after current row\"}\n{\"sheet\": \"unnamed_columns\", \"col\": \"\", \"row\": \"\\u30ad1\", \"longname\": \"paste-after\", \"input\": \"\", \"keystrokes\": \"p\", \"comment\": \"paste clipboard rows after current row\"}\n{\"sheet\": \"unnamed_columns\", \"col\": \"\", \"row\": \"\\u30ad1\", \"longname\": \"paste-after\", \"input\": \"\", \"keystrokes\": \"p\", \"comment\": \"paste clipboard rows after current row\"}\n{\"sheet\": \"unnamed_columns\", \"col\": \"\", \"row\": \"\\u30ad1\", \"longname\": \"paste-after\", \"input\": \"\", \"keystrokes\": \"p\", \"comment\": \"paste clipboard rows after current row\"}\n{\"sheet\": \"unnamed_columns\", \"col\": \"\", \"row\": \"\\u30ad1\", \"longname\": \"paste-after\", \"input\": \"\", \"keystrokes\": \"p\", \"comment\": \"paste clipboard rows after current row\"}\n{\"sheet\": \"unnamed_columns\", \"col\": \"\", \"row\": \"\\u30ad1\", \"longname\": \"paste-after\", \"input\": \"\", \"keystrokes\": \"p\", \"comment\": \"paste clipboard rows after current row\"}\n{\"sheet\": \"unnamed_columns\", \"col\": \"name\", \"row\": \"\\u30ad1\", \"longname\": \"select-equal-cell\", \"input\": \"\", \"keystrokes\": \",\", \"comment\": \"select rows matching current cell in current column\"}\n{\"sheet\": \"unnamed_columns\", \"longname\": \"unhide-cols\", \"keystrokes\": \"gv\"}\n{\"sheet\": \"unnamed_columns\", \"col\": \"name\", \"row\": \"\", \"longname\": \"setcol-iter\", \"input\": \"('count_%s' % i for i in range(10))\", \"keystrokes\": \"gz=\", \"comment\": \"set selected rows in this column to the values in the given Python sequence expression\"}\n{\"sheet\": \"unnamed_columns\", \"col\": \"expr\", \"row\": \"\", \"longname\": \"setcol-iter\", \"input\": \"('str(y).count(\\\"%s\\\")' % i for i in range(10))\", \"keystrokes\": \"gz=\", \"comment\": \"set selected rows in this column to the values in the given Python sequence expression\"}\n{\"sheet\": \"unnamed_columns\", \"col\": \"\", \"row\": \"\", \"longname\": \"type-int-selected\", \"input\": \"\", \"keystrokes\": \"g#\", \"comment\": \"set type of selected columns to int\"}\n{\"sheet\": \"unnamed_columns\", \"col\": \"\", \"row\": \"\", \"longname\": \"quit-sheet\", \"input\": \"\", \"keystrokes\": \"q\", \"comment\": \"quit current sheet\"}\n{\"sheet\": \"unnamed\", \"col\": \"x\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"pin current column on the left as a key column\"}\n{\"sheet\": \"unnamed\", \"col\": \"y\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"pin current column on the left as a key column\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"melt\", \"input\": \"\", \"keystrokes\": \"M\", \"comment\": \"open melted sheet (unpivot)\"}\n{\"sheet\": \"unnamed_melted\", \"col\": \"Value\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\"}\n{\"sheet\": \"unnamed_melted\", \"col\": \"Value\", \"row\": \"\", \"longname\": \"addcol-expr\", \"input\": \"len(str(y))\", \"keystrokes\": \"=\", \"comment\": \"create new column from Python expression, with column names as variables\"}\n{\"sheet\": \"unnamed_melted\", \"col\": \"len(str(y))\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\"}\n{\"sheet\": \"unnamed_melted\", \"col\": \"len(str(y))\", \"row\": \"\", \"longname\": \"rename-col\", \"input\": \"ndigits\", \"keystrokes\": \"^\", \"comment\": \"edit name of current column\"}\n{\"sheet\": \"unnamed_melted\", \"col\": \"ndigits\", \"row\": \"\", \"longname\": \"addcol-expr\", \"input\": \"Value/ndigits\", \"keystrokes\": \"=\", \"comment\": \"create new column from Python expression, with column names as variables\"}\n{\"sheet\": \"unnamed_melted\", \"col\": \"Value/ndigits\", \"row\": \"\", \"longname\": \"type-float\", \"input\": \"\", \"keystrokes\": \"%\", \"comment\": \"set type of current column to float\"}\n{\"sheet\": \"unnamed_melted\", \"col\": \"Value/ndigits\", \"row\": \"\", \"longname\": \"sort-desc\", \"input\": \"\", \"keystrokes\": \"]\", \"comment\": \"sort descending by current column\"}\n{\"sheet\": \"unnamed_melted\", \"col\": \"Value\", \"row\": \"\\u30ad1,2\", \"longname\": \"select-equal-cell\", \"input\": \"\", \"keystrokes\": \",\", \"comment\": \"select rows matching current cell in current column\"}\n{\"sheet\": \"unnamed_melted\", \"col\": \"\", \"row\": \"\", \"longname\": \"delete-selected\", \"input\": \"\", \"keystrokes\": \"gd\", \"comment\": \"delete all selected rows and move them to clipboard\"}\n"
  },
  {
    "path": "tests/extend.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/data2.tsv\to\t\n\t\t\topen-file\ttests/data1.tsv\to\t\ndata2\tKey\t\tkey-col\t\t!\t\ndata1\tKey\t\tkey-col\t\t!\t\ndata1\t\t\tsheets-stack\t\tS\t\nsheets\t\tキdata2\tselect-row\t\ts\t\nsheets\t\tキdata1\tselect-row\t\ts\t\nsheets\t\t\tjoin-selected\textend\t&\t\ndata1+data2\tA\t\tfreq-col\t\tF\t\ndata1\t\t\tdup-rows\t\tg\"\t\ndata1_copy\tA\t\tkey-col\t\t!\t\ndata1_copy\tKey\t\tkey-col\t\t!\t\ndata1_copy\t\t\tsheets-all\t\tS\t\nsheets_all\t\tキdata1_copy\tselect-row\t\ts\t\nsheets_all\t\tキdata1+data2_A_freq\tselect-row\t\ts\t\nsheets_all\t\t\tjoin-selected\textend\t&\t\ndata1+data2_A_freq+data1_copy\thistogram\t\thide-col\t\t-\tHide current column\n"
  },
  {
    "path": "tests/fill-nested.vdj",
    "content": "#!vd -p\n{\"longname\": \"open-file\", \"input\": \"sample_data/benchmark.jsonl\", \"keystrokes\": \"o\"}\n{\"sheet\": \"benchmark\", \"col\": \"Customer\", \"row\": \"1\", \"longname\": \"delete-cell\", \"input\": \"\", \"keystrokes\": \"zd\", \"comment\": \"delete current cell (set to None)\"}\n{\"sheet\": \"benchmark\", \"col\": \"\", \"row\": \"1\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"benchmark\", \"col\": \"Customer\", \"row\": \"\", \"longname\": \"setcol-fill\", \"input\": \"\", \"keystrokes\": \"f\", \"comment\": \"fills null cells in selected rows of current column with contents of non-null cells up the current column\"}\n"
  },
  {
    "path": "tests/fill-zero.json",
    "content": "[\n{\"val\": 0},\n{\"val\": null},\n{\"val\": null},\n{\"val\": 1},\n{\"val\": null},\n{\"val\": null}\n]\n"
  },
  {
    "path": "tests/fill-zero.vdj",
    "content": "#!vd -p\n{\"longname\": \"open-file\", \"input\": \"tests/fill-zero.json\", \"keystrokes\": \"o\"}\n{\"sheet\": \"fill-zero\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-rows\", \"input\": \"\", \"keystrokes\": \"gs\", \"comment\": \"select all rows\"}\n{\"sheet\": \"fill-zero\", \"col\": \"val\", \"row\": \"\", \"longname\": \"setcol-fill\", \"input\": \"\", \"keystrokes\": \"f\", \"comment\": \"fills null cells in selected rows of current column with contents of non-null cells up the current column\"}\n"
  },
  {
    "path": "tests/fill.vdj",
    "content": "#!vd -p\n{\"sheet\": \"global\", \"row\": \"disp_formatter\", \"longname\": \"set-option\", \"input\": \"python\", \"keystrokes\": \"\"}\n{\"longname\": \"open-file\", \"input\": \"sample_data/benchmark.csv\", \"keystrokes\": \"o\"}\n{\"sheet\": \"benchmark\", \"col\": \"Customer\", \"row\": \"3\", \"longname\": \"delete-cell\", \"input\": \"\", \"keystrokes\": \"zd\", \"comment\": \"delete current cell (set to None)\"}\n{\"sheet\": \"benchmark\", \"col\": \"Customer\", \"row\": \"3\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"delete current cell (set to None)\"}\n{\"sheet\": \"benchmark\", \"col\": \"Customer\", \"row\": \"4\", \"longname\": \"delete-cell\", \"input\": \"\", \"keystrokes\": \"zd\", \"comment\": \"delete current cell (set to None)\"}\n{\"sheet\": \"benchmark\", \"col\": \"Customer\", \"row\": \"4\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"delete current cell (set to None)\"}\n{\"sheet\": \"benchmark\", \"col\": \"Customer\", \"row\": \"13\", \"longname\": \"delete-cell\", \"input\": \"\", \"keystrokes\": \"zd\", \"comment\": \"delete current cell (set to None)\"}\n{\"sheet\": \"benchmark\", \"col\": \"Customer\", \"row\": \"13\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"delete current cell (set to None)\"}\n{\"sheet\": \"benchmark\", \"col\": \"Customer\", \"row\": \"21\", \"longname\": \"delete-cell\", \"input\": \"\", \"keystrokes\": \"zd\", \"comment\": \"delete current cell (set to None)\"}\n{\"sheet\": \"benchmark\", \"col\": \"Customer\", \"row\": \"21\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"delete current cell (set to None)\"}\n{\"sheet\": \"benchmark\", \"col\": \"Customer\", \"row\": \"\", \"longname\": \"setcol-fill\", \"input\": \"\", \"keystrokes\": \"f\", \"comment\": \"fills null cells in selected rows of current column with contents of non-null cells up the current column\"}\n"
  },
  {
    "path": "tests/format-enum-freeze.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\t\nsample\tItem\t0\tsetcol-format-enum\tPencil=1\t\tadd secondary type translator to current column from input enum (space-separated)\nsample\tItem\t\tfreeze-col\t\t'\tadd a frozen copy of current column with all cells evaluated\n"
  },
  {
    "path": "tests/format-enum.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\t\nsample\tOrderDate\t\ttype-date\t\t@\tset type of current column to date\nsample\tUnits\t\ttype-int\t\t#\tset type of current column to int\nsample\tUnit_Cost\t\ttype-float\t\t%\tset type of current column to float\nsample\t\t\tcolumns-sheet\t\tShift+C\topen Columns Sheet: edit column properties for current sheet\nsample_columns\tfmtstr\tキOrderDate\tedit-cell\t%Y\te\tedit contents of current cell\nsample\tItem\t0\tsetcol-format-enum\tPencil=1 Binder=2 Pen=3 Desk=4\t\tadd secondary type translator to current column from input enum (space-separated)\n"
  },
  {
    "path": "tests/freeze-json.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/y77d-th95.json.gz\to\t\ny77d-th95\tgeolocation\t\thide-col\t\t-\tHide current column\ny77d-th95\t:@computed_region_nnqa_25f4\t\thide-col\t\t-\tHide current column\ny77d-th95\t:@computed_region_cbhk_fwbd\t\thide-col\t\t-\tHide current column\ny77d-th95\t\t\tselect-rows\t\tgs\tselect all rows\ny77d-th95\t\t\tfreeze-sheet\t\tg'\topen a frozen copy of current sheet with all visible columns evaluated\n"
  },
  {
    "path": "tests/freeze-sheet-attrs.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\t\nsample\tUnits\t\ttype-int\t\t#\tset type of current column to int\nsample\tUnits\t\taggregate-col\tsum\t+\tAdd aggregator to current column\nsample\t\t1\tselect-row\t\ts\tselect current row\nsample\t\t2\tselect-row\t\ts\tselect current row\nsample\t\t\tfreeze-sheet\t\tg'\topen a frozen copy of current sheet with all visible columns evaluated\nsample'\t\t\tcolumns-sheet\t\tShift+C\topen Columns Sheet: edit column properties for current sheet\n"
  },
  {
    "path": "tests/freq-dive-except.vdx",
    "content": "# zEnter on freq table opens source sheet excluding current bin  #2950\nopen-file sample_data/benchmark.csv\ncol Customer\nfreq-col\nrow 0\ndive-except\ncol SKU\nsort-asc\n"
  },
  {
    "path": "tests/freq-error.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/test.jsonl\to\t\ntest\tkey1\t\ttype-date\t\t@\t\ntest\tqty\t\ttype-int\t\t#\t\ntest\tamt\t\ttype-float\t\t%\t\ntest\tqty\t\taggregate-col\tsum\t+\t\ntest\tamt\t\taddcol-expr\tqty*amt\t=\t\ntest\tqty*amt\t\ttype-float\t\t%\t\ntest\tqty*amt\t\taggregate-col\tavg\t+\t\ntest\tkey1\t\tfreq-col\t\tF\t\ntest_key1_freq\tkey1\t\tsort-desc\t\t]\t\n"
  },
  {
    "path": "tests/freq-fmtstr.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tDate\t\ttype-date\t\t@\t\nbenchmark\t\t\tcolumns-sheet\t\tC\t\nbenchmark_columns\tfmtstr\tキDate\tedit-cell\t%Y-%m\te\t\nbenchmark\tDate\t\tfreq-col\t\tF\t\nbenchmark_Date_freq\thistogram\t\thide-col\t\t-\t\n"
  },
  {
    "path": "tests/freq-same-int.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tDate\t\ttype-date\t\t@\t\nbenchmark\tDate\t\tkey-col\t\t!\t\nbenchmark\t\t\tselect-rows\t\tgs\t\nbenchmark\tQuantity\tキ2018-07-03\tsetcol-input\t3\tge\t\nbenchmark\t\t\tunselect-rows\t\tgu\t\nbenchmark\tQuantity\t\ttype-int\t\t#\t\nbenchmark\tQuantity\t\tfreq-col\t\tF\nbenchmark_Quantity_freq\t\t\tquit-sheet\t\tq\nbenchmark\tQuantity\tキ2018-07-03\tedit-cell\t2\te\nbenchmark\tQuantity\t\tfreq-col\t\tF\nbenchmark_Quantity_freq\thistogram\t\thide-col\t\t-\tHide current column\n"
  },
  {
    "path": "tests/freq-summary.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tQuantity\t\ttype-int\t\t#\t\nbenchmark\t\t\tselect-expr\tQuantity > 4\tz|\t\nbenchmark\tQuantity\t\taggregate-col\tmean\t+\t\nbenchmark\t\t\tfreq-summary\t\tzF\t\n"
  },
  {
    "path": "tests/freqtbl-nested-dive-selected.vdx",
    "content": "# nested freq table with dive-selected should preserve source chain  #3001\nopen-file sample_data/sample.tsv\ncol OrderDate\nfreq-col\nfreq-col\nselect-row\nrow 1\nselect-row\ndive-selected\nrow 0\nopen-row\n"
  },
  {
    "path": "tests/freqtbl-openrow.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\t\nsample\tOrderDate\t\tfreq-col\t\tShift+F\topen Frequency Table grouped on current column, with aggregations of other columns\nsample_OrderDate_freq\tcount\t\tfreq-col\t\tShift+F\topen Frequency Table grouped on current column, with aggregations of other columns\nsample_OrderDate_freq_count_freq\t\tキ1\topen-row\t\tEnter\topen current row with sheet-specific dive\nsample_OrderDate_freq_1\t\tキ2016-01-06\topen-row\t\tEnter\topen current row with sheet-specific dive\n"
  },
  {
    "path": "tests/frozen-attrs.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\t\nsample\tUnits\t\taggregate-col\tsum\t+\tAdd aggregator to current column\nsample\tUnits\t\ttype-int\t\t#\tset type of current column to int\nsample\tUnits\t\tfreeze-col\t\t'\tadd a frozen copy of current column with all cells evaluated\nsample\t\t\tcolumns-sheet\t\tShift+C\topen Columns Sheet: edit column properties for current sheet\n"
  },
  {
    "path": "tests/full-join.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/data1.tsv\to\t\n\t\t\topen-file\ttests/data2.tsv\to\t\ndata1\tKey\t\tkey-col\t\t!\t\ndata2\tKey\t\tkey-col\t\t!\t\ndata2\t\t\tsheets-stack\t\tS\t\nsheets\t\tキdata2\tselect-row\t\ts\t\nsheets\t\tキdata1\tselect-row\t\ts\t\nsheets\t\t\tjoin-sheets\tfull\t&\t\ndata2+data1\tA\t\tkey-col\t\t!\t\ndata2+data1\t\t\tsort-keys-asc\t\tg[\t\ndata2+data1\tA\t\tkey-col\t\t!\t\n"
  },
  {
    "path": "tests/gMelt.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tUnit\t\taddcol-expr\t'$'\t=\t\nbenchmark\t'$'\t\trename-col\tUnit_Currency\t^\t\nbenchmark\tUnit_Currency\t\tfreeze-col\t\t'\t\nbenchmark\tUnit_Currency\t\thide-col\t\t-\t\nbenchmark\tUnit_Currency_frozen\t\trename-col\tUnit_Currency\t^\t\nbenchmark\tUnit\t0\taddcol-split\t[$₪]\t:\nbenchmark\tUnit_re\t\texpand-col\t\t(\nbenchmark\tUnit_re\t\thide-col\t\t-\nbenchmark\tUnit\t\thide-col\t\t-\nbenchmark\tUnit_re[0]\t\thide-col\t\t-\nbenchmark\tUnit_re[1]\t\trename-col\tUnit\t^\nbenchmark\tUnit_Currency\t7\tedit-cell\tAUD$\te\t\nbenchmark\tUnit_Currency\t12\tedit-cell\tEUR\te\t\nbenchmark\tUnit_Currency\t17\tedit-cell\tPES\te\t\nbenchmark\tUnit_Currency\t\taddcol-expr\t'$'\t=\t\nbenchmark\t'$'\t\trename-col\tTotal_Currency\t^\t\nbenchmark\tDate\t\tkey-col\t\t!\t\nbenchmark\tCustomer\t\tkey-col\t\t!\t\nbenchmark\tSKU\t\tkey-col\t\t!\t\nbenchmark\tPaid\t\trename-col\tTotal_Cost\t^\t\nbenchmark\tUnit\t\trename-col\tUnit_Cost\t^\t\nbenchmark\t\t\tmelt-regex\t(.*)_(.*)\tgM\t\nbenchmark_melted\t\t\tcolumns-sheet\t\tC\t\nbenchmark_melted_columns\tname\t\tsort-desc\t\t]\t\nbenchmark_melted_columns\t\t\tquit-sheet\t\tq\t\n"
  },
  {
    "path": "tests/getitem.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/y77d-th95.json.gz\to\t\ny77d-th95\t\t\tcolumns-sheet\t\tC\topen Columns Sheet: edit column properties for current sheet\ny77d-th95_columns\t\tキgeolocation\tcopy-row\t\ty\tyank (copy) current row to clipboard\ny77d-th95_columns\t\tキgeolocation\tpaste-after\t\tp\tpaste clipboard rows after current row\ny77d-th95_columns\tname\t2\tedit-cell\tgeolocation.type\te\tedit contents of current cell\ny77d-th95_columns\t\t\tunhide-cols\t\tgv\t\ny77d-th95_columns\tsheet\t\thide-col\t\t-\t\ny77d-th95_columns\texpr\tキgeolocation.type\tedit-cell\tgeolocation.type\te\t\ny77d-th95_columns\t\t1\tdelete-row\t\td\tdelete (cut) current row and move it to clipboard\ny77d-th95_columns\tname\t\tsort-asc\t\t[\tsort ascending by current column; replace any existing sort criteria\ny77d-th95_columns\t\t\tquit-sheet\t\tq\t\n"
  },
  {
    "path": "tests/golden/1410a.tsv",
    "content": "Item\tcount\tpercent\thistogram\n\t4\t7.84\t■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\nBFF Oh My Gravy! Beef & Chicken 2.8oz\t1\t1.96\t■■■■■■■\nBFF Oh My Gravy! Beef & Salmon 2.8oz\t1\t1.96\t■■■■■■■\nBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t2\t3.92\t■■■■■■■■■■■■■■■\nBFF Oh My Gravy! Chicken & Salmon 2.8oz\t1\t1.96\t■■■■■■■\nBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t1\t1.96\t■■■■■■■\nBFF Oh My Gravy! Duck & Salmon 2.8oz\t1\t1.96\t■■■■■■■\nBFF Oh My Gravy! Duck & Tuna 2.8oz\t1\t1.96\t■■■■■■■\nBFF Oh My Gravy! Lamb & Tuna 2.8oz\t1\t1.96\t■■■■■■■\nCat, Korat (Felis catus)\t1\t1.96\t■■■■■■■\nCat, Maine Coon (Felix catus)\t1\t1.96\t■■■■■■■\nCat, Scottish Fold (Felis catus)\t1\t1.96\t■■■■■■■\nCrickets, Adult Live (Gryllus assimilis)\t1\t1.96\t■■■■■■■\nDog, Golden Retriever (Canis lupus familiaris)\t2\t3.92\t■■■■■■■■■■■■■■■\nFire Extinguisher, kitchen-rated\t1\t1.96\t■■■■■■■\nFood, Adult Cat - 3.5 oz\t2\t3.92\t■■■■■■■■■■■■■■■\nFood, Adult Cat 3.5 oz\t1\t1.96\t■■■■■■■\nFood, Adult Dog - 5kg\t1\t1.96\t■■■■■■■\nFood, Kitten 3kg\t2\t3.92\t■■■■■■■■■■■■■■■\nFood, Pangolin\t1\t1.96\t■■■■■■■\nFood, Premium Wet Cat - 3.5 oz\t1\t1.96\t■■■■■■■\nFood, Quoll\t1\t1.96\t■■■■■■■\nFood, Rhinocerous - 50kg\t1\t1.96\t■■■■■■■\nFood, Salamander\t1\t1.96\t■■■■■■■\nFood, Senior Wet Cat - 3 oz\t5\t9.80\t■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\nFood, Shark - 10 kg\t1\t1.96\t■■■■■■■\nFood, Spider\t1\t1.96\t■■■■■■■\nForti Diet Prohealth Mouse/Rat 3lbs\t1\t1.96\t■■■■■■■\nGoat, American Pygmy (Capra hircus)\t1\t1.96\t■■■■■■■\nKingsnake, California (Lampropeltis getula)\t1\t1.96\t■■■■■■■\nLaser Pointer\t1\t1.96\t■■■■■■■\nLizard, Spinytail (Uromastyx ornatus)\t1\t1.96\t■■■■■■■\nMealworms, Large (Tenebrio molitor) 100ct\t1\t1.96\t■■■■■■■\nMonster, Rust (Monstrus gygaxus)\t1\t1.96\t■■■■■■■\nMouse, Pinky (Mus musculus)\t2\t3.92\t■■■■■■■■■■■■■■■\nParakeet, Blue (Melopsittacus undulatus)\t1\t1.96\t■■■■■■■\nParrot, Norwegian Blue (Mopsitta tanta)\t1\t1.96\t■■■■■■■\nRabbit (Oryctolagus cuniculus)\t2\t3.92\t■■■■■■■■■■■■■■■\n"
  },
  {
    "path": "tests/golden/1410b.tsv",
    "content": "key1\tcount\tpercent\thistogram\n#ERR\t1\t10.00\t■■■■■■■■■■■■■■■■■■■\n\t2\t20.00\t■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n2016-01-01 11:00:00\t1\t10.00\t■■■■■■■■■■■■■■■■■■■\n2016-01-01 1:00\t1\t10.00\t■■■■■■■■■■■■■■■■■■■\n2017-12-25 8:44\t1\t10.00\t■■■■■■■■■■■■■■■■■■■\n2018-07-27 16:44\t1\t10.00\t■■■■■■■■■■■■■■■■■■■\n2018-07-27 18:44\t1\t10.00\t■■■■■■■■■■■■■■■■■■■\n2018-07-27 4:44\t1\t10.00\t■■■■■■■■■■■■■■■■■■■\n2018-10-20 18:44\t1\t10.00\t■■■■■■■■■■■■■■■■■■■\n"
  },
  {
    "path": "tests/golden/1410c.tsv",
    "content": "geolocation\tcount\tpercent\thistogram\n2\t988\t98.80\t■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n\t12\t1.20\t\n"
  },
  {
    "path": "tests/golden/add-col-dup-attrs.tsv",
    "content": "name\twidth\ttype\tfmtstr\tvalue\taggregators\tsortorder\nOrderDate\t12\t\t\t2016-01-06\t\t\nRegion\t9\t\t\tEast\t\t\nRep\t10\t\t\tJones\t\t\nItem\t9\t\t\tPencil\t\t\nUnits\t7\t\t\t95\t\t\nintegers\t10\tint\t\t1\tmean\t\nUnit_Cost\t11\t\t\t1.99\t\t\nTotal\t9\t\t\t189.05\t\t\n"
  },
  {
    "path": "tests/golden/addcol-iter.tsv",
    "content": "A\tOrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n1\t2016-01-06\tEast\tJones\tPencil\t95\t1.99\t189.05\n2\t2016-01-23\tCentral\tKivell\tBinder\t50\t19.99\t999.50\n3\t2016-02-09\tCentral\tJardine\tPencil\t36\t4.99\t179.64\n4\t2016-02-26\tCentral\tGill\tPen\t27\t19.99\t539.73\n5\t2016-03-15\tWest\tSorvino\tPencil\t56\t2.99\t167.44\n6\t2016-04-01\tEast\tJones\tBinder\t60\t4.99\t299.40\n7\t2016-04-18\tCentral\tAndrews\tPencil\t75\t1.99\t149.25\n8\t2016-05-05\tCentral\tJardine\tPencil\t90\t4.99\t449.10\n9\t2016-05-22\tWest\tThompson\tPencil\t32\t1.99\t63.68\n10\t2016-06-08\tEast\tJones\tBinder\t60\t8.99\t539.40\n11\t2016-06-25\tCentral\tMorgan\tPencil\t90\t4.99\t449.10\n12\t2016-07-12\tEast\tHoward\tBinder\t29\t1.99\t57.71\n13\t2016-07-29\tEast\tParent\tBinder\t81\t19.99\t1619.19\n14\t2016-08-15\tEast\tJones\tPencil\t35\t4.99\t174.65\n15\t2016-09-01\tCentral\tSmith\tDesk\t2\t125.00\t250.00\n16\t2016-09-18\tEast\tJones\tPen Set\t16\t15.99\t255.84\n17\t2016-10-05\tCentral\tMorgan\tBinder\t28\t8.99\t251.72\n18\t2016-10-22\tEast\tJones\tPen\t64\t8.99\t575.36\n19\t2016-11-08\tEast\tParent\tPen\t15\t19.99\t299.85\n20\t2016-11-25\tCentral\tKivell\tPen Set\t96\t4.99\t479.04\n21\t2016-12-12\tCentral\tSmith\tPencil\t67\t1.29\t86.43\n22\t2016-12-29\tEast\tParent\tPen Set\t74\t15.99\t1183.26\n23\t2017-01-15\tCentral\tGill\tBinder\t46\t8.99\t413.54\n24\t2017-02-01\tCentral\tSmith\tBinder\t87\t15.00\t1305.00\n25\t2017-02-18\tEast\tJones\tBinder\t4\t4.99\t19.96\n26\t2017-03-07\tWest\tSorvino\tBinder\t7\t19.99\t139.93\n27\t2017-03-24\tCentral\tJardine\tPen Set\t50\t4.99\t249.50\n28\t2017-04-10\tCentral\tAndrews\tPencil\t66\t1.99\t131.34\n29\t2017-04-27\tEast\tHoward\tPen\t96\t4.99\t479.04\n30\t2017-05-14\tCentral\tGill\tPencil\t53\t1.29\t68.37\n31\t2017-05-31\tCentral\tGill\tBinder\t80\t8.99\t719.20\n32\t2017-06-17\tCentral\tKivell\tDesk\t5\t125.00\t625.00\n33\t2017-07-04\tEast\tJones\tPen Set\t62\t4.99\t309.38\n34\t2017-07-21\tCentral\tMorgan\tPen Set\t55\t12.49\t686.95\n35\t2017-08-07\tCentral\tKivell\tPen Set\t42\t23.95\t1005.90\n36\t2017-08-24\tWest\tSorvino\tDesk\t3\t275.00\t825.00\n37\t2017-09-10\tCentral\tGill\tPencil\t7\t1.29\t9.03\n38\t2017-09-27\tWest\tSorvino\tPen\t76\t1.99\t151.24\n39\t2017-10-14\tWest\tThompson\tBinder\t57\t19.99\t1139.43\n40\t2017-10-31\tCentral\tAndrews\tPencil\t14\t1.29\t18.06\n41\t2017-11-17\tCentral\tJardine\tBinder\t11\t4.99\t54.89\n42\t2017-12-04\tCentral\tJardine\tBinder\t94\t19.99\t1879.06\n43\t2017-12-21\tCentral\tAndrews\tBinder\t28\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/addcol_window.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnits_window\tsum(Units_window)\tUnit_Cost\tTotal\n2016-01-06\tEast\tJones\tPencil\t95\t[2] 95; 50\t145\t1.99\t189.05\n2016-01-23\tCentral\tKivell\tBinder\t50\t[3] 95; 50; 36\t181\t19.99\t999.50\n2016-02-09\tCentral\tJardine\tPencil\t36\t[3] 50; 36; 27\t113\t4.99\t179.64\n2016-02-26\tCentral\tGill\tPen\t27\t[3] 36; 27; 56\t119\t19.99\t539.73\n2016-03-15\tWest\tSorvino\tPencil\t56\t[3] 27; 56; 60\t143\t2.99\t167.44\n2016-04-01\tEast\tJones\tBinder\t60\t[3] 56; 60; 75\t191\t4.99\t299.40\n2016-04-18\tCentral\tAndrews\tPencil\t75\t[3] 60; 75; 90\t225\t1.99\t149.25\n2016-05-05\tCentral\tJardine\tPencil\t90\t[3] 75; 90; 32\t197\t4.99\t449.10\n2016-05-22\tWest\tThompson\tPencil\t32\t[3] 90; 32; 60\t182\t1.99\t63.68\n2016-06-08\tEast\tJones\tBinder\t60\t[3] 32; 60; 90\t182\t8.99\t539.40\n2016-06-25\tCentral\tMorgan\tPencil\t90\t[3] 60; 90; 29\t179\t4.99\t449.10\n2016-07-12\tEast\tHoward\tBinder\t29\t[3] 90; 29; 81\t200\t1.99\t57.71\n2016-07-29\tEast\tParent\tBinder\t81\t[3] 29; 81; 35\t145\t19.99\t1619.19\n2016-08-15\tEast\tJones\tPencil\t35\t[3] 81; 35; 2\t118\t4.99\t174.65\n2016-09-01\tCentral\tSmith\tDesk\t2\t[3] 35; 2; 16\t53\t125.00\t250.00\n2016-09-18\tEast\tJones\tPen Set\t16\t[3] 2; 16; 28\t46\t15.99\t255.84\n2016-10-05\tCentral\tMorgan\tBinder\t28\t[3] 16; 28; 64\t108\t8.99\t251.72\n2016-10-22\tEast\tJones\tPen\t64\t[3] 28; 64; 15\t107\t8.99\t575.36\n2016-11-08\tEast\tParent\tPen\t15\t[3] 64; 15; 96\t175\t19.99\t299.85\n2016-11-25\tCentral\tKivell\tPen Set\t96\t[3] 15; 96; 67\t178\t4.99\t479.04\n2016-12-12\tCentral\tSmith\tPencil\t67\t[3] 96; 67; 74\t237\t1.29\t86.43\n2016-12-29\tEast\tParent\tPen Set\t74\t[3] 67; 74; 46\t187\t15.99\t1183.26\n2017-01-15\tCentral\tGill\tBinder\t46\t[3] 74; 46; 87\t207\t8.99\t413.54\n2017-02-01\tCentral\tSmith\tBinder\t87\t[3] 46; 87; 4\t137\t15.00\t1305.00\n2017-02-18\tEast\tJones\tBinder\t4\t[3] 87; 4; 7\t98\t4.99\t19.96\n2017-03-07\tWest\tSorvino\tBinder\t7\t[3] 4; 7; 50\t61\t19.99\t139.93\n2017-03-24\tCentral\tJardine\tPen Set\t50\t[3] 7; 50; 66\t123\t4.99\t249.50\n2017-04-10\tCentral\tAndrews\tPencil\t66\t[3] 50; 66; 96\t212\t1.99\t131.34\n2017-04-27\tEast\tHoward\tPen\t96\t[3] 66; 96; 53\t215\t4.99\t479.04\n2017-05-14\tCentral\tGill\tPencil\t53\t[3] 96; 53; 80\t229\t1.29\t68.37\n2017-05-31\tCentral\tGill\tBinder\t80\t[3] 53; 80; 5\t138\t8.99\t719.20\n2017-06-17\tCentral\tKivell\tDesk\t5\t[3] 80; 5; 62\t147\t125.00\t625.00\n2017-07-04\tEast\tJones\tPen Set\t62\t[3] 5; 62; 55\t122\t4.99\t309.38\n2017-07-21\tCentral\tMorgan\tPen Set\t55\t[3] 62; 55; 42\t159\t12.49\t686.95\n2017-08-07\tCentral\tKivell\tPen Set\t42\t[3] 55; 42; 3\t100\t23.95\t1005.90\n2017-08-24\tWest\tSorvino\tDesk\t3\t[3] 42; 3; 7\t52\t275.00\t825.00\n2017-09-10\tCentral\tGill\tPencil\t7\t[3] 3; 7; 76\t86\t1.29\t9.03\n2017-09-27\tWest\tSorvino\tPen\t76\t[3] 7; 76; 57\t140\t1.99\t151.24\n2017-10-14\tWest\tThompson\tBinder\t57\t[3] 76; 57; 14\t147\t19.99\t1139.43\n2017-10-31\tCentral\tAndrews\tPencil\t14\t[3] 57; 14; 11\t82\t1.29\t18.06\n2017-11-17\tCentral\tJardine\tBinder\t11\t[3] 14; 11; 94\t119\t4.99\t54.89\n2017-12-04\tCentral\tJardine\tBinder\t94\t[3] 11; 94; 28\t133\t19.99\t1879.06\n2017-12-21\tCentral\tAndrews\tBinder\t28\t[2] 94; 28\t122\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/aggregators-cols.tsv",
    "content": "key2\tkey2_count\tkey1\tqty\tqty_rank\tqty_sum\ttest_sheetrank\tamt\t\nfoo\t2\t2016-01-01 11:00:00\t1.00\t1\t31.00\t5\t\t\n\t0\t2016-01-01 1:00\t2.00\t1\t66.00\t2\t3\t\nbaz\t3\t\t4.00\t1\t292.00\t4\t43.2\t\n#ERR\t0\t#ERR\t#ERR\t1\t0.00\t1\t#ERR\t#ERR\nbar\t2\t2017-12-25 8:44\t16.00\t2\t16.00\t3\t.3\t\nbaz\t3\t\t32.00\t2\t292.00\t4\t3.3\t\n\t0\t2018-07-27 4:44\t64.00\t2\t66.00\t2\t9.1\t\nbar\t2\t2018-07-27 16:44\t\t1\t16.00\t3\t\t\nbaz\t3\t2018-07-27 18:44\t256.00\t3\t292.00\t4\t.01\t\nfoo\t2\t2018-10-20 18:44\t30.00\t2\t31.00\t5\t.01\t\n"
  },
  {
    "path": "tests/golden/aggregators-errors.tsv",
    "content": "key1\tamt_max_bar\tamt_max_baz\tamt_max_foo\tamt_min_bar\tamt_min_baz\tamt_min_foo\tqty_max_bar\tqty_max_baz\tqty_max_foo\tqty_min_bar\tqty_min_baz\tqty_min_foo\tqty_sum_bar\tqty_sum_baz\tqty_sum_foo\n#ERR\t\t\t\t\t\t\t\t\t\t\t\t\t0\t0\t0\n\t\t43.20\t\t\t3.30\t\t\t32\t\t\t4\t\t0\t36\t0\n2016-01-01 - 2016-12-07\t\t\t\t\t\t\t\t\t1\t\t\t1\t0\t0\t1\n2016-12-07 - 2017-11-13\t\t\t\t\t\t\t\t\t\t\t\t\t0\t0\t0\n2017-11-13 - 2018-10-20\t0.30\t0.01\t0.01\t0.30\t0.01\t0.01\t16\t256\t\t16\t256\t\t16\t256\t0\n"
  },
  {
    "path": "tests/golden/aggregators-set.tsv",
    "content": "Item\tPaid_avg\tPaid_sum\tQuantity_sum\tcount\nFood, Senior Wet Cat - 3 oz\t157.00\t785.00\t25\t5\nFood, Kitten 3kg\t29.88\t89.64\t6\t3\nFood, Adult Cat - 3.5 oz\t6.33\t12.66\t3\t2\nRabbit (Oryctolagus cuniculus)\t32.94\t65.88\t8\t2\nMouse, Pinky (Mus musculus)\t1.49\t2.98\t2\t2\nDog, Golden Retriever (Canis lupus familiaris)\t624.00\t1248.00\t2\t2\nBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t958.30\t1916.60\t148\t2\nBFF Oh My Gravy! Beef & Salmon 2.8oz\t51.80\t51.80\t4\t1\nFood, Adult Cat 3.5 oz\t4.22\t4.22\t1\t1\nFood, Salamander\t1.50\t1.50\t30\t1\nCat, Korat (Felis catus)\t720.42\t720.42\t1\t1\nMonster, Rust (Monstrus gygaxus)\t39.95\t39.95\t1\t1\nBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t51.80\t51.80\t4\t1\nBFF Oh My Gravy! Duck & Tuna 2.8oz\t51.80\t51.80\t4\t1\nFood, Dog - 5kg\t224.75\t224.75\t5\t1\nFood, Premium Wet Cat - 3.5 oz\t197.50\t197.50\t50\t1\nBFF Oh My Gravy! Lamb & Tuna 2.8oz\t51.80\t51.80\t4\t1\nLaser Pointer\t16.12\t16.12\t1\t1\nFood, Shark - 10 kg\t15.70\t15.70\t1\t1\nFood, Dragon - 50kg\t3602.10\t3602.10\t5\t1\nFood, Rhinocerous - 50kg\t22.88\t22.88\t4\t1\nCat, Maine Coon (Felix catus)\t1309.68\t1309.68\t1\t1\nBFF Oh My Gravy! Beef & Chicken 2.8oz\t51.80\t51.80\t4\t1\nKingsnake, California (Lampropeltis getula)\t89.95\t89.95\t1\t1\nBFF Oh My Gravy! Chicken & Turkey 2.8oz\t51.80\t51.80\t4\t1\nForti Diet Prohealth Mouse/Rat 3lbs\t4.00\t4.00\t2\t1\nParrot, Norwegian Blue (Mopsitta tanta)\t-2300.00\t-2300.00\t1\t1\nParakeet, Blue (Melopsittacus undulatus)\t31.85\t31.85\t1\t1\nFood, Spider\t0.25\t0.25\t5\t1\nGoat, American Pygmy (Capra hircus)\t160.51\t160.51\t1\t1\nCrickets, Adult Live (Gryllus assimilis)\t1.50\t1.50\t30\t1\nFood, Pangolin\t5.10\t5.10\t30\t1\nBFF Oh My Gravy! Duck & Salmon 2.8oz\t51.80\t51.80\t4\t1\nFood, Quoll\t29.95\t29.95\t1\t1\nFood, Adult Dog - 5kg\t44.95\t44.95\t1\t1\nFire Extinguisher, kitchen-rated\t61.70\t61.70\t1\t1\nBFF Oh My Gravy! Chicken & Salmon 2.8oz\t51.80\t51.80\t4\t1\nMealworms, Large (Tenebrio molitor) 100ct\t1.99\t1.99\t1\t1\nCat, Scottish Fold (Felis catus)\t1964.53\t1964.53\t1\t1\nLizard, Spinytail (Uromastyx ornatus)\t99.95\t99.95\t1\t1\n"
  },
  {
    "path": "tests/golden/append.tsv",
    "content": "Key\torigin_sheet\tA\tB\tC\tD\n1\tdata1\ta1\tb1\t\t\n2\tdata2\t\t\ta2\tb2\n2\tdata1\tc1\td1\t\t\n2\tdata1\te1\tf1\t\t\n3\tdata2\t\t\tc2\td2\n"
  },
  {
    "path": "tests/golden/avg-nulls.tsv",
    "content": "Item\tcount\tQuantity_avg\nFood, Senior Wet Cat - 3 oz\t5\t12.00\nFood, Kitten 3kg\t3\t2.00\nFood, Adult Cat - 3.5 oz\t2\t1.50\nRabbit (Oryctolagus cuniculus)\t2\t4.00\nMouse, Pinky (Mus musculus)\t2\t1.00\nDog, Golden Retriever (Canis lupus familiaris)\t2\t1.00\nBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t2\t74.00\nBFF Oh My Gravy! Beef & Salmon 2.8oz\t1\t4.00\nFood, Adult Cat 3.5 oz\t1\t1.00\nFood, Salamander\t1\t30.00\nCat, Korat (Felis catus)\t1\t1.00\nMonster, Rust (Monstrus gygaxus)\t1\t1.00\nBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t1\t4.00\nBFF Oh My Gravy! Duck & Tuna 2.8oz\t1\t4.00\nFood, Dog - 5kg\t1\t5.00\nFood, Premium Wet Cat - 3.5 oz\t1\t50.00\nBFF Oh My Gravy! Lamb & Tuna 2.8oz\t1\t4.00\nLaser Pointer\t1\t1.00\nFood, Shark - 10 kg\t1\t1.00\nFood, Dragon - 50kg\t1\t5.00\nFood, Rhinocerous - 50kg\t1\t4.00\nCat, Maine Coon (Felix catus)\t1\t1.00\nBFF Oh My Gravy! Beef & Chicken 2.8oz\t1\t4.00\nKingsnake, California (Lampropeltis getula)\t1\t1.00\nBFF Oh My Gravy! Chicken & Turkey 2.8oz\t1\t4.00\nForti Diet Prohealth Mouse/Rat 3lbs\t1\t2.00\nParrot, Norwegian Blue (Mopsitta tanta)\t1\t1.00\nParakeet, Blue (Melopsittacus undulatus)\t1\t1.00\nFood, Spider\t1\t5.00\nGoat, American Pygmy (Capra hircus)\t1\t1.00\nCrickets, Adult Live (Gryllus assimilis)\t1\t30.00\nFood, Pangolin\t1\t30.00\nBFF Oh My Gravy! Duck & Salmon 2.8oz\t1\t4.00\nFood, Quoll\t1\t1.00\nFood, Adult Dog - 5kg\t1\t1.00\nFire Extinguisher, kitchen-rated\t1\t1.00\nBFF Oh My Gravy! Chicken & Salmon 2.8oz\t1\t4.00\nMealworms, Large (Tenebrio molitor) 100ct\t1\t1.00\nCat, Scottish Fold (Felis catus)\t1\t1.00\nLizard, Spinytail (Uromastyx ornatus)\t1\t1.00\n"
  },
  {
    "path": "tests/golden/bulk-rename-cols.tsv",
    "content": "name\twidth\ttype\tfmtstr\tvalue\taggregators\tsortorder\nfeature_OrderDate\t12\t\t\t2016-01-06\t\t\nfeature_Region\t9\t\t\tEast\t\t\nfeature_Rep\t10\t\t\tJones\t\t\nfeature_Item\t9\t\t\tPencil\t\t\nfeature_Units\t7\t\t\t95\t\t\nfeature_Unit_Cost\t11\t\t\t1.99\t\t\nfeature_Total\t9\t\t\t189.05\t\t\n"
  },
  {
    "path": "tests/golden/capture-col-named.tsv",
    "content": "Date\tDate_re.month\tDate_re.day\tDate_re.year\tDate_re.hour\tDate_re.min\tDate_re.meridiem\tCustomer\tSKU\tItem\tQuantity\tUnit\tPaid\n7/3/2018 1:47p\t7\t3\t2018\t1\t47\tp\tRobert Armstrong\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t4\t$12.95\t$51.8\n7/3/2018 3:32p\t7\t3\t2018\t3\t32\tp\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t1\t$4.22\t$4.22\n7/5/2018 4:15p\t7\t5\t2018\t4\t15\tp\tDouglas \"Dougie\" Powers\tFOOD121\tFood, Adult Cat 3.5 oz\t1\t$4.22\t$4.22\n7/6/2018 12:15p\t7\t6\t2018\t12\t15\tp\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t$1.29\t157¥\n7/10/2018 10:28a\t7\t10\t2018\t10\t28\ta\tDavid Attenborough\tNSCT201\tFood, Salamander\t30\t$.05\t$1.5\n7/10/2018 5:23p\t7\t10\t2018\t5\t23\tp\tSusan Ashworth\tCAT060\tCat, Korat (Felis catus)\t1\t$720.42\t$720.42\n7/10/2018 5:23p\t7\t10\t2018\t5\t23\tp\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t1\t$14.94\t$14.94\n7/13/2018 10:26a\t7\t13\t2018\t10\t26\ta\tWil Wheaton\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t1\t$39.95\t$39.95\n7/13/2018 3:49p\t7\t13\t2018\t3\t49\tp\tRobert Armstrong\tFOOD216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 9:01a\t7\t17\t2018\t9\t01\ta\tRobert Armstrong\tFOOD217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 11:30a\t7\t17\t2018\t11\t30\ta\tHelen Halestorm\tLAGO342\tRabbit (Oryctolagus cuniculus)\t2\t$32.94\t$65.88\n7/18/2018 12:16p\t7\t18\t2018\t12\t16\tp\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t6\t$1.29\t157¥\n7/19/2018 10:28a\t7\t19\t2018\t10\t28\ta\tRubeus Hagrid\tFOOD170\tFood, Dog - 5kg\t5\t$44.95\t$224.75\n7/20/2018 2:13p\t7\t20\t2018\t2\t13\tp\tJon Arbuckle\tFOOD167\tFood, Premium Wet Cat - 3.5 oz\t50\t$3.95\t$197.5\n7/23/2018 1:41p\t7\t23\t2018\t1\t41\tp\tRobert Armstrong\tFOOD215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/23/2018 4:23p\t7\t23\t2018\t4\t23\tp\tDouglas \"Dougie\" Powers\tTOY235\tLaser Pointer\t1\t$16.12\t$16.12\n7/24/2018 12:16p\t7\t24\t2018\t12\t16\tp\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/26/2018 4:39p\t7\t26\t2018\t4\t39\tp\tDouglas \"Dougie\" Powers\tFOOD420\tFood, Shark - 10 kg\t1\t$15.70\t$15.7\n7/27/2018 12:16p\t7\t27\t2018\t12\t16\tp\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/30/2018 12:17p\t7\t30\t2018\t12\t17\tp\t桜 高橋 (Sakura Takahashi)\tRETURN\tFood, Senior Wet Cat - 3 oz\t1\t$1.29\t157¥\n7/31/2018 5:42p\t7\t31\t2018\t5\t42\tp\tRubeus Hagrid\tCAT060\tFood, Dragon - 50kg\t5\t$720.42\t$3602.1\n8/1/2018 2:44p\t8\t1\t2018\t2\t44\tp\tDavid Attenborough\tFOOD360\tFood, Rhinocerous - 50kg\t4\t$5.72\t$22.88\n8/2/2018 5:12p\t8\t2\t2018\t5\t12\tp\tSusan Ashworth\tCAT110\tCat, Maine Coon (Felix catus)\t1\t$1,309.68\t$1309.68\n8/2/2018 5:12p\t8\t2\t2018\t5\t12\tp\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t3\t$14.94\t$44.82\n8/6/2018 10:21a\t8\t6\t2018\t10\t21\ta\tRobert Armstrong\tFOOD212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t4\t$12.95\t$51.8\n8/7/2018 4:12p\t8\t7\t2018\t4\t12\tp\tJuan Johnson\tREPT082\tKingsnake, California (Lampropeltis getula)\t1\t$89.95\t$89.95\n8/7/2018 4:12p\t8\t7\t2018\t4\t12\tp\tJuan Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/10/2018 4:31p\t8\t10\t2018\t4\t31\tp\tRobert Armstrong\tFOOD211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t4\t$12.95\t$51.8\n8/13/2018 2:07p\t8\t13\t2018\t2\t07\tp\tMonica Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/13/2018 2:08p\t8\t13\t2018\t2\t08\tp\tMaría Fernández\tFOOD146\tForti Diet Prohealth Mouse/Rat 3lbs\t2\t$2.00\t$4.0\n8/15/2018 11:57a\t8\t15\t2018\t11\t57\ta\tMr. Praline\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t1\t$2300.00\t-$2300.0\n8/15/2018 3:48p\t8\t15\t2018\t3\t48\tp\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t2\t$4.22\t$8.44\n8/16/2018 11:50a\t8\t16\t2018\t11\t50\ta\tHelen Halestorm\tRETURN\tRabbit (Oryctolagus cuniculus)\t6\t$0\t$0.0\n8/16/2018 4:00p\t8\t16\t2018\t4\t00\tp\tKyle Kennedy\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$2,495.99\t$2495.99\n8/16/2018 5:15p\t8\t16\t2018\t5\t15\tp\tMichael Smith\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t1\t29.95\t$31.85\n8/17/2018 9:26a\t8\t17\t2018\t9\t26\ta\tRubeus Hagrid\tNSCT201\tFood, Spider\t5\t$.05\t$0.25\n8/20/2018 9:36a\t8\t20\t2018\t9\t36\ta\tKyle Kennedy\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$1,247.99\t-$1247.99\n8/20/2018 1:47p\t8\t20\t2018\t1\t47\tp\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tGoat, American Pygmy (Capra hircus)\t1\t₪499\t$160.51\n8/20/2018 3:31p\t8\t20\t2018\t3\t31\tp\tMonica Johnson\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t30\t$.05\t$1.5\n8/20/2018 5:12p\t8\t20\t2018\t5\t12\tp\tDavid Attenborough\tNSCT084\tFood, Pangolin\t30\t$.17\t$5.10\n8/21/2018 12:13p\t8\t21\t2018\t12\t13\tp\tRobert Armstrong\tFOOD214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/22/2018 9:38a\t8\t22\t2018\t9\t38\ta\tDavid Attenborough\tBIRD160\tFood, Quoll\t1\t29.95\t$29.95\n8/22/2018 2:13p\t8\t22\t2018\t2\t13\tp\tJon Arbuckle\tFOOD170\tFood, Adult Dog - 5kg\t1\t$44.95\t$44.95\n8/22/2018 5:49p\t8\t22\t2018\t5\t49\tp\tמרוסיה ניסנהולץ\tSFTY052\tFire Extinguisher, kitchen-rated\t1\t$61.70\t$61.70\n8/24/2018 11:42a\t8\t24\t2018\t11\t42\ta\tRobert Armstrong\tFOOD218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/27/2018 3:05p\t8\t27\t2018\t3\t05\tp\tMonica Johnson\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t1\t$1.99\t$1.99\n8/28/2018 5:32p\t8\t28\t2018\t5\t32\tp\tSusan Ashworth\tCAT020\tCat, Scottish Fold (Felis catus)\t1\t$1,964.53\t$1964.53\n8/28/2018 5:32p\t8\t28\t2018\t5\t32\tp\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t2\t$14.94\t$29.88\n8/29/2018 10:07a\t8\t29\t2018\t10\t07\ta\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t4\t$12.95\t$51.8\n8/31/2018 12:00a\t8\t31\t2018\t12\t00\ta\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t144\t$12.95\t$1864.8\n8/31/2018 5:57p\t8\t31\t2018\t5\t57\tp\tJuan Johnson\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t1\t$99.95\t$99.95\n"
  },
  {
    "path": "tests/golden/column-copy.tsv",
    "content": "Customer\tcount\tPaid_sum\tadj_sum_Paid\nRobert Armstrong\t10\t2331.00\t2000.00\nSusan Ashworth\t6\t4084.27\t4084.27\n桜 高橋 (Sakura Takahashi)\t5\t785.00\t785.00\nKyle Kennedy\t4\t1260.66\t1260.66\nDavid Attenborough\t4\t59.43\t59.43\nDouglas \"Dougie\" Powers\t3\t36.04\t36.04\nRubeus Hagrid\t3\t3827.10\t3827.10\nJuan Johnson\t3\t191.39\t191.39\nMonica Johnson\t3\t4.98\t4.98\nHelen Halestorm\t2\t65.88\t65.88\nJon Arbuckle\t2\t242.45\t242.45\nWil Wheaton\t1\t39.95\t39.95\nMaría Fernández\t1\t4.00\t4.00\nMr. Praline\t1\t-2300.00\t-2300.00\nMichael Smith\t1\t31.85\t31.85\nמרוסיה ניסנהולץ אבולעפיה\t1\t160.51\t160.51\nמרוסיה ניסנהולץ\t1\t61.70\t61.70\n"
  },
  {
    "path": "tests/golden/column-name-__name__.csv",
    "content": "__name__,foo,bar,baz\r\na,1,2,3\r\nb,4,5,6\r\nc,7,8,9\r\n"
  },
  {
    "path": "tests/golden/column-name-_fields.csv",
    "content": "_fields,foo,bar,baz\r\na,1,2,3\r\nb,4,5,6\r\nc,7,8,9\r\n"
  },
  {
    "path": "tests/golden/column-name-length.csv",
    "content": "length,foo,bar,baz\r\na,1,2,3\r\nb,4,5,6\r\nc,7,8,9\r\n"
  },
  {
    "path": "tests/golden/concat-origin.tsv",
    "content": "origin_sheet\tKey\tC\tD\tA\tB\ndata2\t2\ta2\tb2\t\t\ndata2\t3\tc2\td2\t\t\ndata1\t1\t\t\ta1\tb1\ndata1\t2\t\t\tc1\td1\ndata1\t2\t\t\te1\tf1\n"
  },
  {
    "path": "tests/golden/curcol.tsv",
    "content": "OrderDate\tRegion\tRegion_col\tRep\tItem\tItem_col\tUnits\tUnit_Cost\tTotal\n2016-01-06\tEast\teast\tJones\tPencil\tpencil\t95\t1.99\t189.05\n2016-01-23\tCentral\tcentral\tKivell\tBinder\tbinder\t50\t19.99\t999.50\n2016-02-09\tCentral\tcentral\tJardine\tPencil\tpencil\t36\t4.99\t179.64\n2016-02-26\tCentral\tcentral\tGill\tPen\tpen\t27\t19.99\t539.73\n2016-03-15\tWest\twest\tSorvino\tPencil\tpencil\t56\t2.99\t167.44\n2016-04-01\tEast\teast\tJones\tBinder\tbinder\t60\t4.99\t299.40\n2016-04-18\tCentral\tcentral\tAndrews\tPencil\tpencil\t75\t1.99\t149.25\n2016-05-05\tCentral\tcentral\tJardine\tPencil\tpencil\t90\t4.99\t449.10\n2016-05-22\tWest\twest\tThompson\tPencil\tpencil\t32\t1.99\t63.68\n2016-06-08\tEast\teast\tJones\tBinder\tbinder\t60\t8.99\t539.40\n2016-06-25\tCentral\tcentral\tMorgan\tPencil\tpencil\t90\t4.99\t449.10\n2016-07-12\tEast\teast\tHoward\tBinder\tbinder\t29\t1.99\t57.71\n2016-07-29\tEast\teast\tParent\tBinder\tbinder\t81\t19.99\t1619.19\n2016-08-15\tEast\teast\tJones\tPencil\tpencil\t35\t4.99\t174.65\n2016-09-01\tCentral\tcentral\tSmith\tDesk\tdesk\t2\t125.00\t250.00\n2016-09-18\tEast\teast\tJones\tPen Set\tpen set\t16\t15.99\t255.84\n2016-10-05\tCentral\tcentral\tMorgan\tBinder\tbinder\t28\t8.99\t251.72\n2016-10-22\tEast\teast\tJones\tPen\tpen\t64\t8.99\t575.36\n2016-11-08\tEast\teast\tParent\tPen\tpen\t15\t19.99\t299.85\n2016-11-25\tCentral\tcentral\tKivell\tPen Set\tpen set\t96\t4.99\t479.04\n2016-12-12\tCentral\tcentral\tSmith\tPencil\tpencil\t67\t1.29\t86.43\n2016-12-29\tEast\teast\tParent\tPen Set\tpen set\t74\t15.99\t1183.26\n2017-01-15\tCentral\tcentral\tGill\tBinder\tbinder\t46\t8.99\t413.54\n2017-02-01\tCentral\tcentral\tSmith\tBinder\tbinder\t87\t15.00\t1305.00\n2017-02-18\tEast\teast\tJones\tBinder\tbinder\t4\t4.99\t19.96\n2017-03-07\tWest\twest\tSorvino\tBinder\tbinder\t7\t19.99\t139.93\n2017-03-24\tCentral\tcentral\tJardine\tPen Set\tpen set\t50\t4.99\t249.50\n2017-04-10\tCentral\tcentral\tAndrews\tPencil\tpencil\t66\t1.99\t131.34\n2017-04-27\tEast\teast\tHoward\tPen\tpen\t96\t4.99\t479.04\n2017-05-14\tCentral\tcentral\tGill\tPencil\tpencil\t53\t1.29\t68.37\n2017-05-31\tCentral\tcentral\tGill\tBinder\tbinder\t80\t8.99\t719.20\n2017-06-17\tCentral\tcentral\tKivell\tDesk\tdesk\t5\t125.00\t625.00\n2017-07-04\tEast\teast\tJones\tPen Set\tpen set\t62\t4.99\t309.38\n2017-07-21\tCentral\tcentral\tMorgan\tPen Set\tpen set\t55\t12.49\t686.95\n2017-08-07\tCentral\tcentral\tKivell\tPen Set\tpen set\t42\t23.95\t1005.90\n2017-08-24\tWest\twest\tSorvino\tDesk\tdesk\t3\t275.00\t825.00\n2017-09-10\tCentral\tcentral\tGill\tPencil\tpencil\t7\t1.29\t9.03\n2017-09-27\tWest\twest\tSorvino\tPen\tpen\t76\t1.99\t151.24\n2017-10-14\tWest\twest\tThompson\tBinder\tbinder\t57\t19.99\t1139.43\n2017-10-31\tCentral\tcentral\tAndrews\tPencil\tpencil\t14\t1.29\t18.06\n2017-11-17\tCentral\tcentral\tJardine\tBinder\tbinder\t11\t4.99\t54.89\n2017-12-04\tCentral\tcentral\tJardine\tBinder\tbinder\t94\t19.99\t1879.06\n2017-12-21\tCentral\tcentral\tAndrews\tBinder\tbinder\t28\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/date_add.tsv",
    "content": "Date\tDate+1\t1+Date\tDate+15*minutes\tCustomer\tSKU\tItem\tQuantity\tUnit\tPaid\n2018-07-03\t2018-07-04\t2018-07-04\t2018-07-03 14:02:00\tRobert Armstrong\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t4\t$12.95\t$51.8\n2018-07-03\t2018-07-04\t2018-07-04\t2018-07-03 15:47:00\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t1\t$4.22\t$4.22\n2018-07-05\t2018-07-06\t2018-07-06\t2018-07-05 16:30:00\tDouglas \"Dougie\" Powers\tFOOD121\tFood, Adult Cat 3.5 oz\t1\t$4.22\t$4.22\n2018-07-06\t2018-07-07\t2018-07-07\t2018-07-06 12:30:00\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t$1.29\t157¥\n2018-07-10\t2018-07-11\t2018-07-11\t2018-07-10 10:43:00\tDavid Attenborough\tNSCT201\tFood, Salamander\t30\t$.05\t$1.5\n2018-07-10\t2018-07-11\t2018-07-11\t2018-07-10 17:38:00\tSusan Ashworth\tCAT060\tCat, Korat (Felis catus)\t1\t$720.42\t$720.42\n2018-07-10\t2018-07-11\t2018-07-11\t2018-07-10 17:38:00\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t1\t$14.94\t$14.94\n2018-07-13\t2018-07-14\t2018-07-14\t2018-07-13 10:41:00\tWil Wheaton\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t1\t$39.95\t$39.95\n2018-07-13\t2018-07-14\t2018-07-14\t2018-07-13 16:04:00\tRobert Armstrong\tFOOD216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t4\t$12.95\t$51.8\n2018-07-17\t2018-07-18\t2018-07-18\t2018-07-17 09:16:00\tRobert Armstrong\tFOOD217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t4\t$12.95\t$51.8\n2018-07-17\t2018-07-18\t2018-07-18\t2018-07-17 11:45:00\tHelen Halestorm\tLAGO342\tRabbit (Oryctolagus cuniculus)\t2\t$32.94\t$65.88\n2018-07-18\t2018-07-19\t2018-07-19\t2018-07-18 12:31:00\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t6\t$1.29\t157¥\n2018-07-19\t2018-07-20\t2018-07-20\t2018-07-19 10:43:00\tRubeus Hagrid\tFOOD170\tFood, Dog - 5kg\t5\t$44.95\t$224.75\n2018-07-20\t2018-07-21\t2018-07-21\t2018-07-20 14:28:00\tJon Arbuckle\tFOOD167\tFood, Premium Wet Cat - 3.5 oz\t50\t$3.95\t$197.5\n2018-07-23\t2018-07-24\t2018-07-24\t2018-07-23 13:56:00\tRobert Armstrong\tFOOD215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t4\t$12.95\t$51.8\n2018-07-23\t2018-07-24\t2018-07-24\t2018-07-23 16:38:00\tDouglas \"Dougie\" Powers\tTOY235\tLaser Pointer\t1\t$16.12\t$16.12\n2018-07-24\t2018-07-25\t2018-07-25\t2018-07-24 12:31:00\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n2018-07-26\t2018-07-27\t2018-07-27\t2018-07-26 16:54:00\tDouglas \"Dougie\" Powers\tFOOD420\tFood, Shark - 10 kg\t1\t$15.70\t$15.7\n2018-07-27\t2018-07-28\t2018-07-28\t2018-07-27 12:31:00\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n2018-07-30\t2018-07-31\t2018-07-31\t2018-07-30 12:32:00\t桜 高橋 (Sakura Takahashi)\tRETURN\tFood, Senior Wet Cat - 3 oz\t1\t$1.29\t157¥\n2018-07-31\t2018-08-01\t2018-08-01\t2018-07-31 17:57:00\tRubeus Hagrid\tCAT060\tFood, Dragon - 50kg\t5\t$720.42\t$3602.1\n2018-08-01\t2018-08-02\t2018-08-02\t2018-08-01 14:59:00\tDavid Attenborough\tFOOD360\tFood, Rhinocerous - 50kg\t4\t$5.72\t$22.88\n2018-08-02\t2018-08-03\t2018-08-03\t2018-08-02 17:27:00\tSusan Ashworth\tCAT110\tCat, Maine Coon (Felix catus)\t1\t$1,309.68\t$1309.68\n2018-08-02\t2018-08-03\t2018-08-03\t2018-08-02 17:27:00\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t3\t$14.94\t$44.82\n2018-08-06\t2018-08-07\t2018-08-07\t2018-08-06 10:36:00\tRobert Armstrong\tFOOD212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t4\t$12.95\t$51.8\n2018-08-07\t2018-08-08\t2018-08-08\t2018-08-07 16:27:00\tJuan Johnson\tREPT082\tKingsnake, California (Lampropeltis getula)\t1\t$89.95\t$89.95\n2018-08-07\t2018-08-08\t2018-08-08\t2018-08-07 16:27:00\tJuan Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n2018-08-10\t2018-08-11\t2018-08-11\t2018-08-10 16:46:00\tRobert Armstrong\tFOOD211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t4\t$12.95\t$51.8\n2018-08-13\t2018-08-14\t2018-08-14\t2018-08-13 14:22:00\tMonica Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n2018-08-13\t2018-08-14\t2018-08-14\t2018-08-13 14:23:00\tMaría Fernández\tFOOD146\tForti Diet Prohealth Mouse/Rat 3lbs\t2\t$2.00\t$4.0\n2018-08-15\t2018-08-16\t2018-08-16\t2018-08-15 12:12:00\tMr. Praline\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t1\t$2300.00\t-$2300.0\n2018-08-15\t2018-08-16\t2018-08-16\t2018-08-15 16:03:00\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t2\t$4.22\t$8.44\n2018-08-16\t2018-08-17\t2018-08-17\t2018-08-16 12:05:00\tHelen Halestorm\tRETURN\tRabbit (Oryctolagus cuniculus)\t6\t$0\t$0.0\n2018-08-16\t2018-08-17\t2018-08-17\t2018-08-16 16:15:00\tKyle Kennedy\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$2,495.99\t$2495.99\n2018-08-16\t2018-08-17\t2018-08-17\t2018-08-16 17:30:00\tMichael Smith\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t1\t29.95\t$31.85\n2018-08-17\t2018-08-18\t2018-08-18\t2018-08-17 09:41:00\tRubeus Hagrid\tNSCT201\tFood, Spider\t5\t$.05\t$0.25\n2018-08-20\t2018-08-21\t2018-08-21\t2018-08-20 09:51:00\tKyle Kennedy\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$1,247.99\t-$1247.99\n2018-08-20\t2018-08-21\t2018-08-21\t2018-08-20 14:02:00\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tGoat, American Pygmy (Capra hircus)\t1\t₪499\t$160.51\n2018-08-20\t2018-08-21\t2018-08-21\t2018-08-20 15:46:00\tMonica Johnson\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t30\t$.05\t$1.5\n2018-08-20\t2018-08-21\t2018-08-21\t2018-08-20 17:27:00\tDavid Attenborough\tNSCT084\tFood, Pangolin\t30\t$.17\t$5.10\n2018-08-21\t2018-08-22\t2018-08-22\t2018-08-21 12:28:00\tRobert Armstrong\tFOOD214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t4\t$12.95\t$51.8\n2018-08-22\t2018-08-23\t2018-08-23\t2018-08-22 09:53:00\tDavid Attenborough\tBIRD160\tFood, Quoll\t1\t29.95\t$29.95\n2018-08-22\t2018-08-23\t2018-08-23\t2018-08-22 14:28:00\tJon Arbuckle\tFOOD170\tFood, Adult Dog - 5kg\t1\t$44.95\t$44.95\n2018-08-22\t2018-08-23\t2018-08-23\t2018-08-22 18:04:00\tמרוסיה ניסנהולץ\tSFTY052\tFire Extinguisher, kitchen-rated\t1\t$61.70\t$61.70\n2018-08-24\t2018-08-25\t2018-08-25\t2018-08-24 11:57:00\tRobert Armstrong\tFOOD218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t4\t$12.95\t$51.8\n2018-08-27\t2018-08-28\t2018-08-28\t2018-08-27 15:20:00\tMonica Johnson\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t1\t$1.99\t$1.99\n2018-08-28\t2018-08-29\t2018-08-29\t2018-08-28 17:47:00\tSusan Ashworth\tCAT020\tCat, Scottish Fold (Felis catus)\t1\t$1,964.53\t$1964.53\n2018-08-28\t2018-08-29\t2018-08-29\t2018-08-28 17:47:00\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t2\t$14.94\t$29.88\n2018-08-29\t2018-08-30\t2018-08-30\t2018-08-29 10:22:00\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t4\t$12.95\t$51.8\n2018-08-31\t2018-09-01\t2018-09-01\t2018-08-31 00:15:00\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t144\t$12.95\t$1864.8\n2018-08-31\t2018-09-01\t2018-09-01\t2018-08-31 18:12:00\tJuan Johnson\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t1\t$99.95\t$99.95\n"
  },
  {
    "path": "tests/golden/describe-error.tsv",
    "content": "column\terrors\tnulls\tdistinct\tmin\tmax\tsum\tmedian\tmean\tstdev\n\t0\t10\t2\t\t\t\t\t\t\namt\t0\t3\t8\t0.01\t43.2\t58.92\t3.0\t8.42\t15.67\nkey1\t0\t3\t9\t2016-01-01\t2018-10-20\t#ERR\t2018-07-27\t#ERR\t#ERR\nkey2\t0\t3\t5\t\t\t\t\t\t\nqty\t1\t2\t9\t1\t256\t375.00\t16\t53.57\t92.05\n"
  },
  {
    "path": "tests/golden/describe-through.tsv",
    "content": "Date\tCustomer\tSKU\tItem\tQuantity\tUnit\tPaid\n7/3/2018 1:47p\tRobert Armstrong\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t\t12.95\t51.80\n7/13/2018 3:49p\tRobert Armstrong\tFOOD216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t\t12.95\t51.80\n7/17/2018 9:01a\tRobert Armstrong\tFOOD217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t\t12.95\t51.80\n7/23/2018 1:41p\tRobert Armstrong\tFOOD215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t\t12.95\t51.80\n8/6/2018 10:21a\tRobert Armstrong\tFOOD212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t\t12.95\t51.80\n8/10/2018 4:31p\tRobert Armstrong\tFOOD211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t\t12.95\t51.80\n8/21/2018 12:13p\tRobert Armstrong\tFOOD214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t\t12.95\t51.80\n8/24/2018 11:42a\tRobert Armstrong\tFOOD218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t\t12.95\t51.80\n8/29/2018 10:07a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t\t12.95\t51.80\n8/31/2018 12:00a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t\t12.95\t1864.80\n"
  },
  {
    "path": "tests/golden/describe.tsv",
    "content": "column\terrors\tnulls\tdistinct\tmin\tmax\tsum\tmedian\tmean\tstdev\nDate\t0\t0\t47\t2018-07-03\t2018-08-31\t#ERR\t2018-08-07\t#ERR\t#ERR\nCustomer\t0\t0\t17\t\t\t\t\t\t\nSKU\t0\t0\t34\t\t\t\t\t\t\nItem\t0\t0\t40\t\t\t\t\t\t\nQuantity\t0\t0\t10\t1\t144\t403.00\t2\t7.90\t21.57\nUnit\t0\t0\t28\t0.0\t2495.99\t11974.53\t12.95\t234.79\t585.85\nPaid\t0\t0\t36\t-2300.0\t3602.1\t10886.21\t51.8\t213.46\t819.74\n"
  },
  {
    "path": "tests/golden/diff-join.tsv",
    "content": "Key\tC\tD\tA\tB\n1\t\t\ta1\tb1\n3\tc2\td2\t\t\n"
  },
  {
    "path": "tests/golden/dup-rows-attrs.tsv",
    "content": "name\twidth\ttype\tfmtstr\tvalue\taggregators\tsortorder\nOrderDate\t12\t\t\t2016-01-06\t\t\nRegion\t9\t\t\tEast\t\t\nRep\t10\t\t\tJones\t\t\nItem\t9\t\t\tPencil\t\t\nUnits\t7\tint\t\t95\tsum\t\nUnit_Cost\t11\t\t\t1.99\t\t\nTotal\t9\t\t\t189.05\t\t\n"
  },
  {
    "path": "tests/golden/edit-fixed.fixed",
    "content": "Date             Customer                    SKU     Item                                           Quantity Unit      Paid      \n7/3/2018 1:47p   Robert Armstrong            FOOD213 BFF Oh My Gravy! Beef & Salmon 2.8oz           4        $12.95    $51.8     \n7/3/2018 3:32p   EDITED NAME                 FOOD121 Food, Adult Cat - 3.5 oz                       1        $4.22     $4.22     \n7/5/2018 4:15p   Douglas \"Dougie\" Powers     FOOD121 Food, Adult Cat 3.5 oz                         1        $4.22     $4.22     \n7/6/2018 12:15p  桜 高橋 (Sakura Takahashi)     FOOD122 Food, Senior Wet Cat - 3 oz                    12       $1.29     157¥      \n7/10/2018 10:28a David Attenborough          NSCT201 Food, Salamander                               30       $.05      $1.5      \n7/10/2018 5:23p  Susan Ashworth              CAT060  Cat, Korat (Felis catus)                       1        $720.42   $720.42   \n7/10/2018 5:23p  Susan Ashworth              FOOD130 Food, Kitten 3kg                               1        $14.94    $14.94    \n7/13/2018 10:26a Wil Wheaton                 NSCT523 Monster, Rust (Monstrus gygaxus)               1        $39.95    $39.95    \n7/13/2018 3:49p  Robert Armstrong            FOOD216 BFF Oh My Gravy! Chicken & Shrimp 2.8oz        4        $12.95    $51.8     \n7/17/2018 9:01a  Robert Armstrong            FOOD217 BFF Oh My Gravy! Duck & Tuna 2.8oz             4        $12.95    $51.8     \n7/17/2018 11:30a Helen Halestorm             LAGO342 Rabbit (Oryctolagus cuniculus)                 2        $32.94    $65.88    \n7/18/2018 12:16p 桜 高橋 (Sakura Takahashi)     FOOD122 Food, Senior Wet Cat - 3 oz                    6        $1.29     157¥      \n7/19/2018 10:28a Rubeus Hagrid               FOOD170 Food, Dog - 5kg                                5        $44.95    $224.75   \n7/20/2018 2:13p  Jon Arbuckle                FOOD167 Food, Premium Wet Cat - 3.5 oz                 50       $3.95     $197.5    \n7/23/2018 1:41p  Robert Armstrong            FOOD215 BFF Oh My Gravy! Lamb & Tuna 2.8oz             4        $12.95    $51.8     \n7/23/2018 4:23p  Douglas \"Dougie\" Powers     TOY235  Laser Pointer                                  1        $16.12    $16.12    \n7/24/2018 12:16p 桜 高橋 (Sakura Takahashi)     FOOD122 Food, Senior Wet Cat - 3 oz                    3        $1.29     157¥      \n7/26/2018 4:39p  Douglas \"Dougie\" Powers     FOOD420 Food, Shark - 10 kg                            1        $15.70    $15.7     \n7/27/2018 12:16p 桜 高橋 (Sakura Takahashi)     FOOD122 Food, Senior Wet Cat - 3 oz                    3        $1.29     157¥      \n7/30/2018 12:17p 桜 高橋 (Sakura Takahashi)     RETURN  Food, Senior Wet Cat - 3 oz                    1        $1.29     157¥      \n7/31/2018 5:42p  Rubeus Hagrid               CAT060  Food, Dragon - 50kg                            5        $720.42   $3602.1   \n8/1/2018 2:44p   David Attenborough          FOOD360 Food, Rhinocerous - 50kg                       4        $5.72     $22.88    \n8/2/2018 5:12p   Susan Ashworth              CAT110  Cat, Maine Coon (Felix catus)                  1        $1,309.68 $1309.68  \n8/2/2018 5:12p   Susan Ashworth              FOOD130 Food, Kitten 3kg                               3        $14.94    $44.82    \n8/6/2018 10:21a  Robert Armstrong            FOOD212 BFF Oh My Gravy! Beef & Chicken 2.8oz          4        $12.95    $51.8     \n8/7/2018 4:12p   Juan Johnson                REPT082 Kingsnake, California (Lampropeltis getula)    1        $89.95    $89.95    \n8/7/2018 4:12p   Juan Johnson                RDNT443 Mouse, Pinky (Mus musculus)                    1        $1.49     $1.49     \n8/10/2018 4:31p  Robert Armstrong            FOOD211 BFF Oh My Gravy! Chicken & Turkey 2.8oz        4        $12.95    $51.8     \n8/13/2018 2:07p  Monica Johnson              RDNT443 Mouse, Pinky (Mus musculus)                    1        $1.49     $1.49     \n8/13/2018 2:08p  María Fernández             FOOD146 Forti Diet Prohealth Mouse/Rat 3lbs            2        $2.00     $4.0      \n8/15/2018 11:57a Mr. Praline                 RETURN  Parrot, Norwegian Blue (Mopsitta tanta)        1        $2300.00  -$2300.0  \n8/15/2018 3:48p  Kyle Kennedy                FOOD121 Food, Adult Cat - 3.5 oz                       2        $4.22     $8.44     \n8/16/2018 11:50a Helen Halestorm             RETURN  Rabbit (Oryctolagus cuniculus)                 6        $0        $0.0      \n8/16/2018 4:00p  Kyle Kennedy                DOG010  Dog, Golden Retriever (Canis lupus familiaris) 1        $2,495.99 $2495.99  \n8/16/2018 5:15p  Michael Smith               BIRD160 Parakeet, Blue (Melopsittacus undulatus)       1        29.95     $31.85    \n8/17/2018 9:26a  Rubeus Hagrid               NSCT201 Food, Spider                                   5        $.05      $0.25     \n8/20/2018 9:36a  Kyle Kennedy                RETURN  Dog, Golden Retriever (Canis lupus familiaris) 1        $1,247.99 -$1247.99 \n8/20/2018 1:47p  מרוסיה ניסנהולץ אבולעפיה    GOAT224 Goat, American Pygmy (Capra hircus)            1        ₪499      $160.51   \n8/20/2018 3:31p  Monica Johnson              NSCT201 Crickets, Adult Live (Gryllus assimilis)       30       $.05      $1.5      \n8/20/2018 5:12p  David Attenborough          NSCT084 Food, Pangolin                                 30       $.17      $5.10     \n8/21/2018 12:13p Robert Armstrong            FOOD214 BFF Oh My Gravy! Duck & Salmon 2.8oz           4        $12.95    $51.8     \n8/22/2018 9:38a  David Attenborough          BIRD160 Food, Quoll                                    1        29.95     $29.95    \n8/22/2018 2:13p  Jon Arbuckle                FOOD170 Food, Adult Dog - 5kg                          1        $44.95    $44.95    \n8/22/2018 5:49p  מרוסיה ניסנהולץ             SFTY052 Fire Extinguisher, kitchen-rated               1        $61.70    $61.70    \n8/24/2018 11:42a Robert Armstrong            FOOD218 BFF Oh My Gravy! Chicken & Salmon 2.8oz        4        $12.95    $51.8     \n8/27/2018 3:05p  Monica Johnson              NSCT443 Mealworms, Large (Tenebrio molitor) 100ct      1        $1.99     $1.99     \n8/28/2018 5:32p  Susan Ashworth              CAT020  Cat, Scottish Fold (Felis catus)               1        $1,964.53 $1964.53  \n8/28/2018 5:32p  Susan Ashworth              FOOD130 Food, Kitten 3kg                               2        $14.94    $29.88    \n8/29/2018 10:07a Robert Armstrong            FOOD219 BFF Oh My Gravy! Chicken & Pumpkin 2.8oz       4        $12.95    $51.8     \n8/31/2018 12:00a Robert Armstrong            FOOD219 BFF Oh My Gravy! Chicken & Pumpkin 2.8oz       144      $12.95    $1864.8   \n8/31/2018 5:57p  Juan Johnson                REPT217 Lizard, Spinytail (Uromastyx ornatus)          1        $99.95    $99.95    \n"
  },
  {
    "path": "tests/golden/edit-joinkey-1.tsv",
    "content": "Key\tC\tD\tA\tB\n1\t\t\ta1\tb1\n2\t\t\te1\tf1\n3\tc2\td2\t\t\n4\ta2\tb2\tc1\td1\n"
  },
  {
    "path": "tests/golden/edit-joinkey-2.tsv",
    "content": "Key\tA\tB\n1\ta1\tb1\n4\tc1\td1\n2\te1\tf1\n"
  },
  {
    "path": "tests/golden/edit-joinregular-1.tsv",
    "content": "Key\tC\tD\tA\tB\n1\t\t\ta1\tb1\n2\ta3\tb2\tc1\td1\n2\ta3\tb2\te1\tf1\n3\tc2\td2\t\t\n"
  },
  {
    "path": "tests/golden/edit-joinregular-2.tsv",
    "content": "Key\tC\tD\n2\ta3\tb2\n3\tc2\td2\n"
  },
  {
    "path": "tests/golden/edit-type.tsv",
    "content": "column\terrors\tnulls\tdistinct\tmin\tmax\tsum\tmedian\tmean\tstdev\nDate\t0\t0\t47\t\t\t\t\t\t\nCustomer\t0\t0\t17\t\t\t\t\t\t\nSKU\t0\t0\t34\t\t\t\t\t\t\nItem\t0\t0\t40\t\t\t\t\t\t\nQuantity\t0\t0\t10\t1\t144\t403.00\t2\t7.90\t21.57\nUnit\t0\t0\t28\t0.0\t2495.99\t11974.53\t12.95\t234.79\t585.85\nPaid\t0\t0\t36\t-2300.0\t3602.1\t10886.21\t51.8\t213.46\t819.74\n"
  },
  {
    "path": "tests/golden/empty-unfurl-2.tsv",
    "content": "key1\tkey2\tlist(key2.strip())_key\tlist(key2.strip())_value\tqty\tamt\t\n2016-01-01 11:00:00\tfoo\t0\tf\t1\t\t\n2016-01-01 11:00:00\tfoo\t1\to\t1\t\t\n2016-01-01 11:00:00\tfoo\t2\to\t1\t\t\n2016-01-01 1:00\t\t#ERR\t#ERR\t2\t3\t\n\tbaz\t0\tb\t4\t43.2\t\n\tbaz\t1\ta\t4\t43.2\t\n\tbaz\t2\tz\t4\t43.2\t\n#ERR\t#ERR\t#ERR\t#ERR\t#ERR\t#ERR\t#ERR\n2017-12-25 8:44\tbar\t0\tb\t16\t.3\t\n2017-12-25 8:44\tbar\t1\ta\t16\t.3\t\n2017-12-25 8:44\tbar\t2\tr\t16\t.3\t\n\tbaz\t0\tb\t32\t3.3\t\n\tbaz\t1\ta\t32\t3.3\t\n\tbaz\t2\tz\t32\t3.3\t\n2018-07-27 4:44\t\t#ERR\t#ERR\t64\t9.1\t\n2018-07-27 16:44\tbar\t0\tb\t\t\t\n2018-07-27 16:44\tbar\t1\ta\t\t\t\n2018-07-27 16:44\tbar\t2\tr\t\t\t\n2018-07-27 18:44\tbaz\t0\tb\t256\t.01\t\n2018-07-27 18:44\tbaz\t1\ta\t256\t.01\t\n2018-07-27 18:44\tbaz\t2\tz\t256\t.01\t\n2018-10-20 18:44\tfoo\t0\tf\t30.0\t.01\t\n2018-10-20 18:44\tfoo\t1\to\t30.0\t.01\t\n2018-10-20 18:44\tfoo\t2\to\t30.0\t.01\t\n"
  },
  {
    "path": "tests/golden/empty-unfurl.tsv",
    "content": "key1\tkey2\tlist(key2.strip())_key\tlist(key2.strip())_value\tqty\tamt\t\n2016-01-01 11:00:00\tfoo\t0\tf\t1\t\t\n2016-01-01 11:00:00\tfoo\t1\to\t1\t\t\n2016-01-01 11:00:00\tfoo\t2\to\t1\t\t\n\tbaz\t0\tb\t4\t43.2\t\n\tbaz\t1\ta\t4\t43.2\t\n\tbaz\t2\tz\t4\t43.2\t\n2017-12-25 8:44\tbar\t0\tb\t16\t.3\t\n2017-12-25 8:44\tbar\t1\ta\t16\t.3\t\n2017-12-25 8:44\tbar\t2\tr\t16\t.3\t\n\tbaz\t0\tb\t32\t3.3\t\n\tbaz\t1\ta\t32\t3.3\t\n\tbaz\t2\tz\t32\t3.3\t\n2018-07-27 16:44\tbar\t0\tb\t\t\t\n2018-07-27 16:44\tbar\t1\ta\t\t\t\n2018-07-27 16:44\tbar\t2\tr\t\t\t\n2018-07-27 18:44\tbaz\t0\tb\t256\t.01\t\n2018-07-27 18:44\tbaz\t1\ta\t256\t.01\t\n2018-07-27 18:44\tbaz\t2\tz\t256\t.01\t\n2018-10-20 18:44\tfoo\t0\tf\t30.0\t.01\t\n2018-10-20 18:44\tfoo\t1\to\t30.0\t.01\t\n2018-10-20 18:44\tfoo\t2\to\t30.0\t.01\t\n"
  },
  {
    "path": "tests/golden/error-passthru.tsv",
    "content": "Quantity.foo\tcount\tpercent\n#ERR\t51\t100.00\n"
  },
  {
    "path": "tests/golden/exp-digits.tsv",
    "content": "x\ty\tVariable\tValue\tndigits\tValue/ndigits\n10\t22026\tcount_2\t3\t5\t0.60\n13\t442413\tcount_4\t3\t6\t0.50\n16\t8886110\tcount_8\t3\t7\t0.43\n23\t9744803446\tcount_4\t4\t10\t0.40\n18\t65659969\tcount_6\t3\t8\t0.38\n18\t65659969\tcount_9\t3\t8\t0.38\n36\t4311231547115187\tcount_1\t6\t16\t0.38\n24\t26489122129\tcount_2\t4\t11\t0.36\n20\t485165195\tcount_5\t3\t9\t0.33\n56\t2091659496012989929095168\tcount_9\t8\t25\t0.32\n29\t3931334297144\tcount_3\t4\t13\t0.31\n52\t38310080007165660102656\tcount_0\t7\t23\t0.30\n21\t1318815734\tcount_1\t3\t10\t0.30\n14\t1202604\tcount_0\t2\t7\t0.29\n14\t1202604\tcount_2\t2\t7\t0.29\n16\t8886110\tcount_1\t2\t7\t0.29\n41\t639843493530053504\tcount_3\t5\t18\t0.28\n50\t5184705528587058413568\tcount_5\t6\t22\t0.27\n59\t42012104037905006873018368\tcount_0\t7\t26\t0.27\n67\t125236317084220929521527816192\tcount_2\t8\t30\t0.27\n77\t2758513454523158791974630354583552\tcount_5\t9\t34\t0.26\n62\t843835666874142634408935424\tcount_4\t7\t27\t0.26\n17\t24154952\tcount_2\t2\t8\t0.25\n17\t24154952\tcount_4\t2\t8\t0.25\n17\t24154952\tcount_5\t2\t8\t0.25\n18\t65659969\tcount_5\t2\t8\t0.25\n26\t195729609428\tcount_9\t3\t12\t0.25\n27\t532048240601\tcount_0\t3\t12\t0.25\n46\t94961194206024253440\tcount_4\t5\t20\t0.25\n57\t5685719999335914834755584\tcount_5\t6\t25\t0.24\n37\t11719142372802588\tcount_1\t4\t17\t0.24\n38\t31855931757113692\tcount_1\t4\t17\t0.24\n76\t1014800388113884566805890000224256\tcount_0\t8\t34\t0.24\n28\t1446257064291\tcount_4\t3\t13\t0.23\n29\t3931334297144\tcount_4\t3\t13\t0.23\n58\t15455389355900991937970176\tcount_9\t6\t26\t0.23\n89\t448961281917432363796644881144163074048\tcount_4\t9\t39\t0.23\n50\t5184705528587058413568\tcount_8\t5\t22\t0.23\n71\t6837671229762718251326176755712\tcount_7\t7\t31\t0.23\n19\t178482300\tcount_0\t2\t9\t0.22\n19\t178482300\tcount_8\t2\t9\t0.22\n20\t485165195\tcount_1\t2\t9\t0.22\n40\t235385266837019488\tcount_8\t4\t18\t0.22\n61\t310429793570190956680970240\tcount_0\t6\t27\t0.22\n82\t409399696212743680251000974309588992\tcount_9\t8\t36\t0.22\n52\t38310080007165660102656\tcount_6\t5\t23\t0.22\n30\t10686474581524\tcount_4\t3\t14\t0.21\n31\t29048849665247\tcount_4\t3\t14\t0.21\n32\t78962960182680\tcount_6\t3\t14\t0.21\n32\t78962960182680\tcount_8\t3\t14\t0.21\n98\t3637970947608785561809296799068987580219392\tcount_9\t9\t43\t0.21\n65\t16948892444103278429730766848\tcount_4\t6\t29\t0.21\n76\t1014800388113884566805890000224256\tcount_8\t7\t34\t0.21\n21\t1318815734\tcount_3\t2\t10\t0.20\n21\t1318815734\tcount_8\t2\t10\t0.20\n22\t3584912846\tcount_4\t2\t10\t0.20\n22\t3584912846\tcount_8\t2\t10\t0.20\n33\t214643579785915\tcount_5\t3\t15\t0.20\n34\t583461742527453\tcount_4\t3\t15\t0.20\n34\t583461742527453\tcount_5\t3\t15\t0.20\n44\t12851600114359277568\tcount_1\t4\t20\t0.20\n57\t5685719999335914834755584\tcount_9\t5\t25\t0.20\n69\t925378172558775340989157474304\tcount_7\t6\t30\t0.20\n91\t3317400098335726511200205228755185041408\tcount_0\t8\t40\t0.20\n81\t150609731458502397809460701325950976\tcount_0\t7\t36\t0.19\n70\t2515438670919157591115099537408\tcount_1\t6\t31\t0.19\n70\t2515438670919157591115099537408\tcount_5\t6\t31\t0.19\n71\t6837671229762718251326176755712\tcount_2\t6\t31\t0.19\n58\t15455389355900991937970176\tcount_5\t5\t26\t0.19\n48\t701673591209761439744\tcount_7\t4\t21\t0.19\n95\t181123908288901406377941782792712038121472\tcount_1\t8\t42\t0.19\n35\t1586013452313427\tcount_1\t3\t16\t0.19\n35\t1586013452313427\tcount_3\t3\t16\t0.19\n99\t9889030319346894261780307407472704754810880\tcount_0\t8\t43\t0.19\n61\t310429793570190956680970240\tcount_9\t5\t27\t0.19\n87\t60760302250568435723181719472224337920\tcount_2\t7\t38\t0.18\n24\t26489122129\tcount_1\t2\t11\t0.18\n24\t26489122129\tcount_9\t2\t11\t0.18\n25\t72004899337\tcount_0\t2\t11\t0.18\n25\t72004899337\tcount_3\t2\t11\t0.18\n25\t72004899337\tcount_7\t2\t11\t0.18\n25\t72004899337\tcount_9\t2\t11\t0.18\n75\t373324199679898707335485291757568\tcount_7\t6\t33\t0.18\n88\t165163625499399406518893408180982775808\tcount_8\t7\t39\t0.18\n63\t2293783159469602258179588096\tcount_9\t5\t28\t0.18\n37\t11719142372802588\tcount_2\t3\t17\t0.18\n37\t11719142372802588\tcount_8\t3\t17\t0.18\n38\t31855931757113692\tcount_3\t3\t17\t0.18\n38\t31855931757113692\tcount_5\t3\t17\t0.18\n39\t86593400423993568\tcount_3\t3\t17\t0.18\n39\t86593400423993568\tcount_9\t3\t17\t0.18\n78\t7498416996990089778130847122063360\tcount_9\t6\t34\t0.18\n92\t9017628405034254998120696153432802721792\tcount_2\t7\t40\t0.17\n51\t14093490824269348732928\tcount_2\t4\t23\t0.17\n51\t14093490824269348732928\tcount_4\t4\t23\t0.17\n51\t14093490824269348732928\tcount_9\t4\t23\t0.17\n65\t16948892444103278429730766848\tcount_8\t5\t29\t0.17\n66\t46071866343312750680672829440\tcount_6\t5\t29\t0.17\n79\t20382810665126602923413656544739328\tcount_2\t6\t35\t0.17\n79\t20382810665126602923413656544739328\tcount_6\t6\t35\t0.17\n93\t24512455429200738772392887071969804025856\tcount_2\t7\t41\t0.17\n94\t66631762164108623350807338587885324468224\tcount_6\t7\t41\t0.17\n94\t66631762164108623350807338587885324468224\tcount_8\t7\t41\t0.17\n26\t195729609428\tcount_2\t2\t12\t0.17\n27\t532048240601\tcount_2\t2\t12\t0.17\n27\t532048240601\tcount_4\t2\t12\t0.17\n40\t235385266837019488\tcount_3\t3\t18\t0.17\n41\t639843493530053504\tcount_0\t3\t18\t0.17\n41\t639843493530053504\tcount_4\t3\t18\t0.17\n41\t639843493530053504\tcount_5\t3\t18\t0.17\n53\t104137594330290583502848\tcount_0\t4\t24\t0.17\n53\t104137594330290583502848\tcount_3\t4\t24\t0.17\n54\t283075330327468589449216\tcount_3\t4\t24\t0.17\n55\t769478526514199470800896\tcount_9\t4\t24\t0.17\n67\t125236317084220929521527816192\tcount_1\t5\t30\t0.17\n68\t340427604993172809189341265920\tcount_9\t5\t30\t0.17\n69\t925378172558775340989157474304\tcount_5\t5\t30\t0.17\n82\t409399696212743680251000974309588992\tcount_0\t6\t36\t0.17\n95\t181123908288901406377941782792712038121472\tcount_2\t7\t42\t0.17\n96\t492345828601203350225572505411028107919360\tcount_0\t7\t42\t0.17\n96\t492345828601203350225572505411028107919360\tcount_2\t7\t42\t0.17\n99\t9889030319346894261780307407472704754810880\tcount_8\t7\t43\t0.16\n83\t1112863754791754570108369472638156800\tcount_1\t6\t37\t0.16\n84\t3025077322201128985430551174794182656\tcount_2\t6\t37\t0.16\n70\t2515438670919157591115099537408\tcount_9\t5\t31\t0.16\n71\t6837671229762718251326176755712\tcount_1\t5\t31\t0.16\n71\t6837671229762718251326176755712\tcount_6\t5\t31\t0.16\n42\t1739274941520497152\tcount_1\t3\t19\t0.16\n42\t1739274941520497152\tcount_2\t3\t19\t0.16\n42\t1739274941520497152\tcount_4\t3\t19\t0.16\n42\t1739274941520497152\tcount_7\t3\t19\t0.16\n42\t1739274941520497152\tcount_9\t3\t19\t0.16\n43\t4727839468229336064\tcount_2\t3\t19\t0.16\n43\t4727839468229336064\tcount_3\t3\t19\t0.16\n43\t4727839468229336064\tcount_4\t3\t19\t0.16\n43\t4727839468229336064\tcount_6\t3\t19\t0.16\n86\t22352466037347050571917696612199038976\tcount_6\t6\t38\t0.16\n72\t18586717452841209064450328363008\tcount_0\t5\t32\t0.16\n72\t18586717452841209064450328363008\tcount_8\t5\t32\t0.16\n73\t50523936302760841295957577433088\tcount_3\t5\t32\t0.16\n73\t50523936302760841295957577433088\tcount_5\t5\t32\t0.16\n28\t1446257064291\tcount_1\t2\t13\t0.15\n28\t1446257064291\tcount_2\t2\t13\t0.15\n28\t1446257064291\tcount_6\t2\t13\t0.15\n29\t3931334297144\tcount_1\t2\t13\t0.15\n29\t3931334297144\tcount_9\t2\t13\t0.15\n88\t165163625499399406518893408180982775808\tcount_9\t6\t39\t0.15\n89\t448961281917432363796644881144163074048\tcount_1\t6\t39\t0.15\n74\t137338297954017070342613212594176\tcount_1\t5\t33\t0.15\n74\t137338297954017070342613212594176\tcount_3\t5\t33\t0.15\n74\t137338297954017070342613212594176\tcount_7\t5\t33\t0.15\n75\t373324199679898707335485291757568\tcount_3\t5\t33\t0.15\n75\t373324199679898707335485291757568\tcount_9\t5\t33\t0.15\n44\t12851600114359277568\tcount_5\t3\t20\t0.15\n45\t34934271057485012992\tcount_2\t3\t20\t0.15\n45\t34934271057485012992\tcount_4\t3\t20\t0.15\n45\t34934271057485012992\tcount_9\t3\t20\t0.15\n46\t94961194206024253440\tcount_0\t3\t20\t0.15\n46\t94961194206024253440\tcount_2\t3\t20\t0.15\n46\t94961194206024253440\tcount_9\t3\t20\t0.15\n90\t1220403294317834940669523680211966623744\tcount_2\t6\t40\t0.15\n90\t1220403294317834940669523680211966623744\tcount_4\t6\t40\t0.15\n90\t1220403294317834940669523680211966623744\tcount_6\t6\t40\t0.15\n91\t3317400098335726511200205228755185041408\tcount_5\t6\t40\t0.15\n60\t114200738981568062676795392\tcount_6\t4\t27\t0.15\n62\t843835666874142634408935424\tcount_3\t4\t27\t0.15\n62\t843835666874142634408935424\tcount_6\t4\t27\t0.15\n62\t843835666874142634408935424\tcount_8\t4\t27\t0.15\n77\t2758513454523158791974630354583552\tcount_3\t5\t34\t0.15\n78\t7498416996990089778130847122063360\tcount_0\t5\t34\t0.15\n94\t66631762164108623350807338587885324468224\tcount_3\t6\t41\t0.15\n30\t10686474581524\tcount_1\t2\t14\t0.14\n30\t10686474581524\tcount_5\t2\t14\t0.14\n30\t10686474581524\tcount_6\t2\t14\t0.14\n30\t10686474581524\tcount_8\t2\t14\t0.14\n31\t29048849665247\tcount_2\t2\t14\t0.14\n31\t29048849665247\tcount_6\t2\t14\t0.14\n31\t29048849665247\tcount_8\t2\t14\t0.14\n31\t29048849665247\tcount_9\t2\t14\t0.14\n32\t78962960182680\tcount_0\t2\t14\t0.14\n32\t78962960182680\tcount_2\t2\t14\t0.14\n32\t78962960182680\tcount_9\t2\t14\t0.14\n47\t258131288619006099456\tcount_0\t3\t21\t0.14\n47\t258131288619006099456\tcount_1\t3\t21\t0.14\n47\t258131288619006099456\tcount_6\t3\t21\t0.14\n47\t258131288619006099456\tcount_8\t3\t21\t0.14\n47\t258131288619006099456\tcount_9\t3\t21\t0.14\n48\t701673591209761439744\tcount_1\t3\t21\t0.14\n48\t701673591209761439744\tcount_4\t3\t21\t0.14\n48\t701673591209761439744\tcount_9\t3\t21\t0.14\n63\t2293783159469602258179588096\tcount_2\t4\t28\t0.14\n63\t2293783159469602258179588096\tcount_8\t4\t28\t0.14\n64\t6235149080811595853190922240\tcount_0\t4\t28\t0.14\n64\t6235149080811595853190922240\tcount_1\t4\t28\t0.14\n64\t6235149080811595853190922240\tcount_2\t4\t28\t0.14\n64\t6235149080811595853190922240\tcount_5\t4\t28\t0.14\n64\t6235149080811595853190922240\tcount_9\t4\t28\t0.14\n79\t20382810665126602923413656544739328\tcount_3\t5\t35\t0.14\n80\t55406223843934867760217110265987072\tcount_2\t5\t35\t0.14\n80\t55406223843934867760217110265987072\tcount_7\t5\t35\t0.14\n95\t181123908288901406377941782792712038121472\tcount_7\t6\t42\t0.14\n95\t181123908288901406377941782792712038121472\tcount_8\t6\t42\t0.14\n96\t492345828601203350225572505411028107919360\tcount_5\t6\t42\t0.14\n97\t1338334719204262575292065754905981231300608\tcount_0\t6\t43\t0.14\n97\t1338334719204262575292065754905981231300608\tcount_2\t6\t43\t0.14\n97\t1338334719204262575292065754905981231300608\tcount_3\t6\t43\t0.14\n98\t3637970947608785561809296799068987580219392\tcount_7\t6\t43\t0.14\n98\t3637970947608785561809296799068987580219392\tcount_8\t6\t43\t0.14\n99\t9889030319346894261780307407472704754810880\tcount_4\t6\t43\t0.14\n99\t9889030319346894261780307407472704754810880\tcount_7\t6\t43\t0.14\n81\t150609731458502397809460701325950976\tcount_5\t5\t36\t0.14\n81\t150609731458502397809460701325950976\tcount_9\t5\t36\t0.14\n66\t46071866343312750680672829440\tcount_0\t4\t29\t0.14\n66\t46071866343312750680672829440\tcount_4\t4\t29\t0.14\n49\t1907346572495094808576\tcount_0\t3\t22\t0.14\n49\t1907346572495094808576\tcount_4\t3\t22\t0.14\n49\t1907346572495094808576\tcount_5\t3\t22\t0.14\n49\t1907346572495094808576\tcount_7\t3\t22\t0.14\n49\t1907346572495094808576\tcount_9\t3\t22\t0.14\n83\t1112863754791754570108369472638156800\tcount_7\t5\t37\t0.14\n84\t3025077322201128985430551174794182656\tcount_1\t5\t37\t0.14\n84\t3025077322201128985430551174794182656\tcount_5\t5\t37\t0.14\n85\t8223012714622876503655383143179878400\tcount_2\t5\t37\t0.14\n85\t8223012714622876503655383143179878400\tcount_3\t5\t37\t0.14\n85\t8223012714622876503655383143179878400\tcount_8\t5\t37\t0.14\n33\t214643579785915\tcount_1\t2\t15\t0.13\n33\t214643579785915\tcount_4\t2\t15\t0.13\n33\t214643579785915\tcount_7\t2\t15\t0.13\n33\t214643579785915\tcount_9\t2\t15\t0.13\n34\t583461742527453\tcount_2\t2\t15\t0.13\n34\t583461742527453\tcount_3\t2\t15\t0.13\n34\t583461742527453\tcount_7\t2\t15\t0.13\n68\t340427604993172809189341265920\tcount_0\t4\t30\t0.13\n68\t340427604993172809189341265920\tcount_2\t4\t30\t0.13\n68\t340427604993172809189341265920\tcount_4\t4\t30\t0.13\n69\t925378172558775340989157474304\tcount_4\t4\t30\t0.13\n86\t22352466037347050571917696612199038976\tcount_7\t5\t38\t0.13\n86\t22352466037347050571917696612199038976\tcount_9\t5\t38\t0.13\n87\t60760302250568435723181719472224337920\tcount_0\t5\t38\t0.13\n87\t60760302250568435723181719472224337920\tcount_3\t5\t38\t0.13\n87\t60760302250568435723181719472224337920\tcount_7\t5\t38\t0.13\n51\t14093490824269348732928\tcount_3\t3\t23\t0.13\n51\t14093490824269348732928\tcount_8\t3\t23\t0.13\n52\t38310080007165660102656\tcount_1\t3\t23\t0.13\n89\t448961281917432363796644881144163074048\tcount_6\t5\t39\t0.13\n89\t448961281917432363796644881144163074048\tcount_8\t5\t39\t0.13\n35\t1586013452313427\tcount_2\t2\t16\t0.12\n35\t1586013452313427\tcount_4\t2\t16\t0.12\n35\t1586013452313427\tcount_5\t2\t16\t0.12\n36\t4311231547115187\tcount_3\t2\t16\t0.12\n36\t4311231547115187\tcount_4\t2\t16\t0.12\n36\t4311231547115187\tcount_5\t2\t16\t0.12\n36\t4311231547115187\tcount_7\t2\t16\t0.12\n53\t104137594330290583502848\tcount_4\t3\t24\t0.12\n53\t104137594330290583502848\tcount_5\t3\t24\t0.12\n53\t104137594330290583502848\tcount_8\t3\t24\t0.12\n54\t283075330327468589449216\tcount_2\t3\t24\t0.12\n54\t283075330327468589449216\tcount_4\t3\t24\t0.12\n54\t283075330327468589449216\tcount_8\t3\t24\t0.12\n55\t769478526514199470800896\tcount_0\t3\t24\t0.12\n55\t769478526514199470800896\tcount_4\t3\t24\t0.12\n55\t769478526514199470800896\tcount_6\t3\t24\t0.12\n55\t769478526514199470800896\tcount_7\t3\t24\t0.12\n55\t769478526514199470800896\tcount_8\t3\t24\t0.12\n72\t18586717452841209064450328363008\tcount_4\t4\t32\t0.12\n73\t50523936302760841295957577433088\tcount_0\t4\t32\t0.12\n73\t50523936302760841295957577433088\tcount_7\t4\t32\t0.12\n90\t1220403294317834940669523680211966623744\tcount_3\t5\t40\t0.12\n91\t3317400098335726511200205228755185041408\tcount_1\t5\t40\t0.12\n91\t3317400098335726511200205228755185041408\tcount_2\t5\t40\t0.12\n92\t9017628405034254998120696153432802721792\tcount_0\t5\t40\t0.12\n92\t9017628405034254998120696153432802721792\tcount_9\t5\t40\t0.12\n93\t24512455429200738772392887071969804025856\tcount_0\t5\t41\t0.12\n93\t24512455429200738772392887071969804025856\tcount_5\t5\t41\t0.12\n93\t24512455429200738772392887071969804025856\tcount_7\t5\t41\t0.12\n93\t24512455429200738772392887071969804025856\tcount_8\t5\t41\t0.12\n94\t66631762164108623350807338587885324468224\tcount_2\t5\t41\t0.12\n74\t137338297954017070342613212594176\tcount_2\t4\t33\t0.12\n75\t373324199679898707335485291757568\tcount_5\t4\t33\t0.12\n75\t373324199679898707335485291757568\tcount_8\t4\t33\t0.12\n56\t2091659496012989929095168\tcount_0\t3\t25\t0.12\n56\t2091659496012989929095168\tcount_1\t3\t25\t0.12\n56\t2091659496012989929095168\tcount_2\t3\t25\t0.12\n56\t2091659496012989929095168\tcount_6\t3\t25\t0.12\n57\t5685719999335914834755584\tcount_3\t3\t25\t0.12\n57\t5685719999335914834755584\tcount_4\t3\t25\t0.12\n57\t5685719999335914834755584\tcount_8\t3\t25\t0.12\n96\t492345828601203350225572505411028107919360\tcount_1\t5\t42\t0.12\n37\t11719142372802588\tcount_7\t2\t17\t0.12\n38\t31855931757113692\tcount_7\t2\t17\t0.12\n38\t31855931757113692\tcount_9\t2\t17\t0.12\n39\t86593400423993568\tcount_0\t2\t17\t0.12\n39\t86593400423993568\tcount_4\t2\t17\t0.12\n39\t86593400423993568\tcount_5\t2\t17\t0.12\n39\t86593400423993568\tcount_6\t2\t17\t0.12\n39\t86593400423993568\tcount_8\t2\t17\t0.12\n76\t1014800388113884566805890000224256\tcount_1\t4\t34\t0.12\n77\t2758513454523158791974630354583552\tcount_4\t4\t34\t0.12\n78\t7498416996990089778130847122063360\tcount_6\t4\t34\t0.12\n78\t7498416996990089778130847122063360\tcount_7\t4\t34\t0.12\n78\t7498416996990089778130847122063360\tcount_8\t4\t34\t0.12\n97\t1338334719204262575292065754905981231300608\tcount_5\t5\t43\t0.12\n98\t3637970947608785561809296799068987580219392\tcount_0\t5\t43\t0.12\n98\t3637970947608785561809296799068987580219392\tcount_6\t5\t43\t0.12\n58\t15455389355900991937970176\tcount_0\t3\t26\t0.12\n58\t15455389355900991937970176\tcount_1\t3\t26\t0.12\n58\t15455389355900991937970176\tcount_3\t3\t26\t0.12\n58\t15455389355900991937970176\tcount_7\t3\t26\t0.12\n59\t42012104037905006873018368\tcount_1\t3\t26\t0.12\n59\t42012104037905006873018368\tcount_3\t3\t26\t0.12\n59\t42012104037905006873018368\tcount_8\t3\t26\t0.12\n80\t55406223843934867760217110265987072\tcount_0\t4\t35\t0.11\n80\t55406223843934867760217110265987072\tcount_6\t4\t35\t0.11\n40\t235385266837019488\tcount_2\t2\t18\t0.11\n40\t235385266837019488\tcount_5\t2\t18\t0.11\n40\t235385266837019488\tcount_6\t2\t18\t0.11\n41\t639843493530053504\tcount_9\t2\t18\t0.11\n60\t114200738981568062676795392\tcount_0\t3\t27\t0.11\n60\t114200738981568062676795392\tcount_1\t3\t27\t0.11\n60\t114200738981568062676795392\tcount_2\t3\t27\t0.11\n60\t114200738981568062676795392\tcount_7\t3\t27\t0.11\n60\t114200738981568062676795392\tcount_8\t3\t27\t0.11\n60\t114200738981568062676795392\tcount_9\t3\t27\t0.11\n61\t310429793570190956680970240\tcount_7\t3\t27\t0.11\n81\t150609731458502397809460701325950976\tcount_7\t4\t36\t0.11\n82\t409399696212743680251000974309588992\tcount_2\t4\t36\t0.11\n83\t1112863754791754570108369472638156800\tcount_0\t4\t37\t0.11\n83\t1112863754791754570108369472638156800\tcount_5\t4\t37\t0.11\n83\t1112863754791754570108369472638156800\tcount_6\t4\t37\t0.11\n83\t1112863754791754570108369472638156800\tcount_8\t4\t37\t0.11\n84\t3025077322201128985430551174794182656\tcount_0\t4\t37\t0.11\n84\t3025077322201128985430551174794182656\tcount_7\t4\t37\t0.11\n85\t8223012714622876503655383143179878400\tcount_0\t4\t37\t0.11\n85\t8223012714622876503655383143179878400\tcount_1\t4\t37\t0.11\n85\t8223012714622876503655383143179878400\tcount_7\t4\t37\t0.11\n63\t2293783159469602258179588096\tcount_5\t3\t28\t0.11\n63\t2293783159469602258179588096\tcount_6\t3\t28\t0.11\n64\t6235149080811595853190922240\tcount_8\t3\t28\t0.11\n42\t1739274941520497152\tcount_5\t2\t19\t0.11\n43\t4727839468229336064\tcount_7\t2\t19\t0.11\n43\t4727839468229336064\tcount_8\t2\t19\t0.11\n43\t4727839468229336064\tcount_9\t2\t19\t0.11\n86\t22352466037347050571917696612199038976\tcount_0\t4\t38\t0.11\n86\t22352466037347050571917696612199038976\tcount_1\t4\t38\t0.11\n86\t22352466037347050571917696612199038976\tcount_2\t4\t38\t0.11\n86\t22352466037347050571917696612199038976\tcount_3\t4\t38\t0.11\n65\t16948892444103278429730766848\tcount_2\t3\t29\t0.10\n65\t16948892444103278429730766848\tcount_6\t3\t29\t0.10\n65\t16948892444103278429730766848\tcount_7\t3\t29\t0.10\n65\t16948892444103278429730766848\tcount_9\t3\t29\t0.10\n66\t46071866343312750680672829440\tcount_2\t3\t29\t0.10\n66\t46071866343312750680672829440\tcount_3\t3\t29\t0.10\n66\t46071866343312750680672829440\tcount_7\t3\t29\t0.10\n66\t46071866343312750680672829440\tcount_8\t3\t29\t0.10\n88\t165163625499399406518893408180982775808\tcount_0\t4\t39\t0.10\n88\t165163625499399406518893408180982775808\tcount_1\t4\t39\t0.10\n88\t165163625499399406518893408180982775808\tcount_5\t4\t39\t0.10\n88\t165163625499399406518893408180982775808\tcount_6\t4\t39\t0.10\n89\t448961281917432363796644881144163074048\tcount_3\t4\t39\t0.10\n44\t12851600114359277568\tcount_0\t2\t20\t0.10\n44\t12851600114359277568\tcount_2\t2\t20\t0.10\n44\t12851600114359277568\tcount_6\t2\t20\t0.10\n44\t12851600114359277568\tcount_7\t2\t20\t0.10\n44\t12851600114359277568\tcount_8\t2\t20\t0.10\n45\t34934271057485012992\tcount_0\t2\t20\t0.10\n45\t34934271057485012992\tcount_1\t2\t20\t0.10\n45\t34934271057485012992\tcount_3\t2\t20\t0.10\n45\t34934271057485012992\tcount_5\t2\t20\t0.10\n45\t34934271057485012992\tcount_7\t2\t20\t0.10\n46\t94961194206024253440\tcount_1\t2\t20\t0.10\n46\t94961194206024253440\tcount_6\t2\t20\t0.10\n67\t125236317084220929521527816192\tcount_5\t3\t30\t0.10\n67\t125236317084220929521527816192\tcount_9\t3\t30\t0.10\n68\t340427604993172809189341265920\tcount_1\t3\t30\t0.10\n68\t340427604993172809189341265920\tcount_3\t3\t30\t0.10\n69\t925378172558775340989157474304\tcount_3\t3\t30\t0.10\n69\t925378172558775340989157474304\tcount_8\t3\t30\t0.10\n69\t925378172558775340989157474304\tcount_9\t3\t30\t0.10\n90\t1220403294317834940669523680211966623744\tcount_0\t4\t40\t0.10\n90\t1220403294317834940669523680211966623744\tcount_1\t4\t40\t0.10\n90\t1220403294317834940669523680211966623744\tcount_9\t4\t40\t0.10\n91\t3317400098335726511200205228755185041408\tcount_3\t4\t40\t0.10\n91\t3317400098335726511200205228755185041408\tcount_8\t4\t40\t0.10\n92\t9017628405034254998120696153432802721792\tcount_1\t4\t40\t0.10\n92\t9017628405034254998120696153432802721792\tcount_4\t4\t40\t0.10\n93\t24512455429200738772392887071969804025856\tcount_4\t4\t41\t0.10\n93\t24512455429200738772392887071969804025856\tcount_9\t4\t41\t0.10\n94\t66631762164108623350807338587885324468224\tcount_4\t4\t41\t0.10\n70\t2515438670919157591115099537408\tcount_0\t3\t31\t0.10\n70\t2515438670919157591115099537408\tcount_7\t3\t31\t0.10\n71\t6837671229762718251326176755712\tcount_5\t3\t31\t0.10\n47\t258131288619006099456\tcount_2\t2\t21\t0.10\n47\t258131288619006099456\tcount_5\t2\t21\t0.10\n48\t701673591209761439744\tcount_0\t2\t21\t0.10\n48\t701673591209761439744\tcount_3\t2\t21\t0.10\n48\t701673591209761439744\tcount_6\t2\t21\t0.10\n95\t181123908288901406377941782792712038121472\tcount_0\t4\t42\t0.10\n95\t181123908288901406377941782792712038121472\tcount_9\t4\t42\t0.10\n96\t492345828601203350225572505411028107919360\tcount_3\t4\t42\t0.10\n72\t18586717452841209064450328363008\tcount_1\t3\t32\t0.09\n72\t18586717452841209064450328363008\tcount_2\t3\t32\t0.09\n72\t18586717452841209064450328363008\tcount_3\t3\t32\t0.09\n72\t18586717452841209064450328363008\tcount_5\t3\t32\t0.09\n72\t18586717452841209064450328363008\tcount_6\t3\t32\t0.09\n73\t50523936302760841295957577433088\tcount_2\t3\t32\t0.09\n73\t50523936302760841295957577433088\tcount_8\t3\t32\t0.09\n73\t50523936302760841295957577433088\tcount_9\t3\t32\t0.09\n97\t1338334719204262575292065754905981231300608\tcount_1\t4\t43\t0.09\n97\t1338334719204262575292065754905981231300608\tcount_9\t4\t43\t0.09\n99\t9889030319346894261780307407472704754810880\tcount_3\t4\t43\t0.09\n99\t9889030319346894261780307407472704754810880\tcount_9\t4\t43\t0.09\n49\t1907346572495094808576\tcount_6\t2\t22\t0.09\n49\t1907346572495094808576\tcount_8\t2\t22\t0.09\n50\t5184705528587058413568\tcount_0\t2\t22\t0.09\n50\t5184705528587058413568\tcount_1\t2\t22\t0.09\n50\t5184705528587058413568\tcount_4\t2\t22\t0.09\n50\t5184705528587058413568\tcount_7\t2\t22\t0.09\n74\t137338297954017070342613212594176\tcount_0\t3\t33\t0.09\n74\t137338297954017070342613212594176\tcount_4\t3\t33\t0.09\n74\t137338297954017070342613212594176\tcount_9\t3\t33\t0.09\n76\t1014800388113884566805890000224256\tcount_2\t3\t34\t0.09\n76\t1014800388113884566805890000224256\tcount_4\t3\t34\t0.09\n76\t1014800388113884566805890000224256\tcount_5\t3\t34\t0.09\n76\t1014800388113884566805890000224256\tcount_6\t3\t34\t0.09\n77\t2758513454523158791974630354583552\tcount_1\t3\t34\t0.09\n77\t2758513454523158791974630354583552\tcount_2\t3\t34\t0.09\n77\t2758513454523158791974630354583552\tcount_7\t3\t34\t0.09\n77\t2758513454523158791974630354583552\tcount_8\t3\t34\t0.09\n78\t7498416996990089778130847122063360\tcount_1\t3\t34\t0.09\n78\t7498416996990089778130847122063360\tcount_3\t3\t34\t0.09\n78\t7498416996990089778130847122063360\tcount_4\t3\t34\t0.09\n51\t14093490824269348732928\tcount_0\t2\t23\t0.09\n52\t38310080007165660102656\tcount_3\t2\t23\t0.09\n52\t38310080007165660102656\tcount_5\t2\t23\t0.09\n52\t38310080007165660102656\tcount_8\t2\t23\t0.09\n79\t20382810665126602923413656544739328\tcount_0\t3\t35\t0.09\n79\t20382810665126602923413656544739328\tcount_1\t3\t35\t0.09\n79\t20382810665126602923413656544739328\tcount_4\t3\t35\t0.09\n79\t20382810665126602923413656544739328\tcount_5\t3\t35\t0.09\n79\t20382810665126602923413656544739328\tcount_8\t3\t35\t0.09\n80\t55406223843934867760217110265987072\tcount_1\t3\t35\t0.09\n80\t55406223843934867760217110265987072\tcount_3\t3\t35\t0.09\n80\t55406223843934867760217110265987072\tcount_4\t3\t35\t0.09\n80\t55406223843934867760217110265987072\tcount_5\t3\t35\t0.09\n80\t55406223843934867760217110265987072\tcount_8\t3\t35\t0.09\n53\t104137594330290583502848\tcount_1\t2\t24\t0.08\n53\t104137594330290583502848\tcount_2\t2\t24\t0.08\n53\t104137594330290583502848\tcount_9\t2\t24\t0.08\n54\t283075330327468589449216\tcount_0\t2\t24\t0.08\n54\t283075330327468589449216\tcount_5\t2\t24\t0.08\n54\t283075330327468589449216\tcount_6\t2\t24\t0.08\n54\t283075330327468589449216\tcount_7\t2\t24\t0.08\n54\t283075330327468589449216\tcount_9\t2\t24\t0.08\n55\t769478526514199470800896\tcount_1\t2\t24\t0.08\n55\t769478526514199470800896\tcount_5\t2\t24\t0.08\n81\t150609731458502397809460701325950976\tcount_1\t3\t36\t0.08\n81\t150609731458502397809460701325950976\tcount_3\t3\t36\t0.08\n81\t150609731458502397809460701325950976\tcount_6\t3\t36\t0.08\n82\t409399696212743680251000974309588992\tcount_3\t3\t36\t0.08\n82\t409399696212743680251000974309588992\tcount_4\t3\t36\t0.08\n82\t409399696212743680251000974309588992\tcount_6\t3\t36\t0.08\n82\t409399696212743680251000974309588992\tcount_8\t3\t36\t0.08\n83\t1112863754791754570108369472638156800\tcount_3\t3\t37\t0.08\n83\t1112863754791754570108369472638156800\tcount_4\t3\t37\t0.08\n84\t3025077322201128985430551174794182656\tcount_3\t3\t37\t0.08\n84\t3025077322201128985430551174794182656\tcount_4\t3\t37\t0.08\n84\t3025077322201128985430551174794182656\tcount_8\t3\t37\t0.08\n85\t8223012714622876503655383143179878400\tcount_4\t3\t37\t0.08\n85\t8223012714622876503655383143179878400\tcount_5\t3\t37\t0.08\n85\t8223012714622876503655383143179878400\tcount_6\t3\t37\t0.08\n56\t2091659496012989929095168\tcount_5\t2\t25\t0.08\n56\t2091659496012989929095168\tcount_8\t2\t25\t0.08\n57\t5685719999335914834755584\tcount_1\t2\t25\t0.08\n57\t5685719999335914834755584\tcount_7\t2\t25\t0.08\n86\t22352466037347050571917696612199038976\tcount_5\t3\t38\t0.08\n87\t60760302250568435723181719472224337920\tcount_1\t3\t38\t0.08\n87\t60760302250568435723181719472224337920\tcount_4\t3\t38\t0.08\n87\t60760302250568435723181719472224337920\tcount_5\t3\t38\t0.08\n87\t60760302250568435723181719472224337920\tcount_6\t3\t38\t0.08\n59\t42012104037905006873018368\tcount_2\t2\t26\t0.08\n59\t42012104037905006873018368\tcount_4\t2\t26\t0.08\n59\t42012104037905006873018368\tcount_6\t2\t26\t0.08\n59\t42012104037905006873018368\tcount_7\t2\t26\t0.08\n88\t165163625499399406518893408180982775808\tcount_3\t3\t39\t0.08\n88\t165163625499399406518893408180982775808\tcount_4\t3\t39\t0.08\n89\t448961281917432363796644881144163074048\tcount_7\t3\t39\t0.08\n89\t448961281917432363796644881144163074048\tcount_9\t3\t39\t0.08\n91\t3317400098335726511200205228755185041408\tcount_4\t3\t40\t0.07\n91\t3317400098335726511200205228755185041408\tcount_7\t3\t40\t0.07\n92\t9017628405034254998120696153432802721792\tcount_3\t3\t40\t0.07\n92\t9017628405034254998120696153432802721792\tcount_5\t3\t40\t0.07\n92\t9017628405034254998120696153432802721792\tcount_6\t3\t40\t0.07\n92\t9017628405034254998120696153432802721792\tcount_7\t3\t40\t0.07\n92\t9017628405034254998120696153432802721792\tcount_8\t3\t40\t0.07\n60\t114200738981568062676795392\tcount_3\t2\t27\t0.07\n60\t114200738981568062676795392\tcount_5\t2\t27\t0.07\n61\t310429793570190956680970240\tcount_1\t2\t27\t0.07\n61\t310429793570190956680970240\tcount_2\t2\t27\t0.07\n61\t310429793570190956680970240\tcount_3\t2\t27\t0.07\n61\t310429793570190956680970240\tcount_4\t2\t27\t0.07\n61\t310429793570190956680970240\tcount_5\t2\t27\t0.07\n61\t310429793570190956680970240\tcount_6\t2\t27\t0.07\n62\t843835666874142634408935424\tcount_2\t2\t27\t0.07\n62\t843835666874142634408935424\tcount_5\t2\t27\t0.07\n94\t66631762164108623350807338587885324468224\tcount_0\t3\t41\t0.07\n94\t66631762164108623350807338587885324468224\tcount_1\t3\t41\t0.07\n94\t66631762164108623350807338587885324468224\tcount_5\t3\t41\t0.07\n94\t66631762164108623350807338587885324468224\tcount_7\t3\t41\t0.07\n63\t2293783159469602258179588096\tcount_0\t2\t28\t0.07\n63\t2293783159469602258179588096\tcount_1\t2\t28\t0.07\n63\t2293783159469602258179588096\tcount_3\t2\t28\t0.07\n63\t2293783159469602258179588096\tcount_7\t2\t28\t0.07\n64\t6235149080811595853190922240\tcount_3\t2\t28\t0.07\n64\t6235149080811595853190922240\tcount_4\t2\t28\t0.07\n95\t181123908288901406377941782792712038121472\tcount_3\t3\t42\t0.07\n95\t181123908288901406377941782792712038121472\tcount_4\t3\t42\t0.07\n96\t492345828601203350225572505411028107919360\tcount_4\t3\t42\t0.07\n96\t492345828601203350225572505411028107919360\tcount_8\t3\t42\t0.07\n96\t492345828601203350225572505411028107919360\tcount_9\t3\t42\t0.07\n97\t1338334719204262575292065754905981231300608\tcount_4\t3\t43\t0.07\n97\t1338334719204262575292065754905981231300608\tcount_6\t3\t43\t0.07\n97\t1338334719204262575292065754905981231300608\tcount_7\t3\t43\t0.07\n97\t1338334719204262575292065754905981231300608\tcount_8\t3\t43\t0.07\n98\t3637970947608785561809296799068987580219392\tcount_2\t3\t43\t0.07\n98\t3637970947608785561809296799068987580219392\tcount_3\t3\t43\t0.07\n98\t3637970947608785561809296799068987580219392\tcount_5\t3\t43\t0.07\n99\t9889030319346894261780307407472704754810880\tcount_1\t3\t43\t0.07\n65\t16948892444103278429730766848\tcount_0\t2\t29\t0.07\n65\t16948892444103278429730766848\tcount_1\t2\t29\t0.07\n65\t16948892444103278429730766848\tcount_3\t2\t29\t0.07\n66\t46071866343312750680672829440\tcount_1\t2\t29\t0.07\n67\t125236317084220929521527816192\tcount_0\t2\t30\t0.07\n67\t125236317084220929521527816192\tcount_3\t2\t30\t0.07\n67\t125236317084220929521527816192\tcount_6\t2\t30\t0.07\n67\t125236317084220929521527816192\tcount_7\t2\t30\t0.07\n67\t125236317084220929521527816192\tcount_8\t2\t30\t0.07\n68\t340427604993172809189341265920\tcount_6\t2\t30\t0.07\n68\t340427604993172809189341265920\tcount_7\t2\t30\t0.07\n68\t340427604993172809189341265920\tcount_8\t2\t30\t0.07\n69\t925378172558775340989157474304\tcount_0\t2\t30\t0.07\n69\t925378172558775340989157474304\tcount_1\t2\t30\t0.07\n69\t925378172558775340989157474304\tcount_2\t2\t30\t0.07\n70\t2515438670919157591115099537408\tcount_3\t2\t31\t0.06\n70\t2515438670919157591115099537408\tcount_4\t2\t31\t0.06\n70\t2515438670919157591115099537408\tcount_8\t2\t31\t0.06\n71\t6837671229762718251326176755712\tcount_3\t2\t31\t0.06\n71\t6837671229762718251326176755712\tcount_8\t2\t31\t0.06\n72\t18586717452841209064450328363008\tcount_7\t2\t32\t0.06\n73\t50523936302760841295957577433088\tcount_4\t2\t32\t0.06\n73\t50523936302760841295957577433088\tcount_6\t2\t32\t0.06\n74\t137338297954017070342613212594176\tcount_5\t2\t33\t0.06\n74\t137338297954017070342613212594176\tcount_6\t2\t33\t0.06\n75\t373324199679898707335485291757568\tcount_1\t2\t33\t0.06\n75\t373324199679898707335485291757568\tcount_2\t2\t33\t0.06\n75\t373324199679898707335485291757568\tcount_4\t2\t33\t0.06\n75\t373324199679898707335485291757568\tcount_6\t2\t33\t0.06\n76\t1014800388113884566805890000224256\tcount_3\t2\t34\t0.06\n77\t2758513454523158791974630354583552\tcount_9\t2\t34\t0.06\n78\t7498416996990089778130847122063360\tcount_2\t2\t34\t0.06\n79\t20382810665126602923413656544739328\tcount_9\t2\t35\t0.06\n80\t55406223843934867760217110265987072\tcount_9\t2\t35\t0.06\n81\t150609731458502397809460701325950976\tcount_2\t2\t36\t0.06\n81\t150609731458502397809460701325950976\tcount_4\t2\t36\t0.06\n81\t150609731458502397809460701325950976\tcount_8\t2\t36\t0.06\n82\t409399696212743680251000974309588992\tcount_1\t2\t36\t0.06\n82\t409399696212743680251000974309588992\tcount_5\t2\t36\t0.06\n82\t409399696212743680251000974309588992\tcount_7\t2\t36\t0.06\n83\t1112863754791754570108369472638156800\tcount_2\t2\t37\t0.05\n83\t1112863754791754570108369472638156800\tcount_9\t2\t37\t0.05\n84\t3025077322201128985430551174794182656\tcount_6\t2\t37\t0.05\n84\t3025077322201128985430551174794182656\tcount_9\t2\t37\t0.05\n86\t22352466037347050571917696612199038976\tcount_4\t2\t38\t0.05\n87\t60760302250568435723181719472224337920\tcount_8\t2\t38\t0.05\n87\t60760302250568435723181719472224337920\tcount_9\t2\t38\t0.05\n88\t165163625499399406518893408180982775808\tcount_2\t2\t39\t0.05\n88\t165163625499399406518893408180982775808\tcount_7\t2\t39\t0.05\n89\t448961281917432363796644881144163074048\tcount_0\t2\t39\t0.05\n89\t448961281917432363796644881144163074048\tcount_2\t2\t39\t0.05\n90\t1220403294317834940669523680211966623744\tcount_7\t2\t40\t0.05\n90\t1220403294317834940669523680211966623744\tcount_8\t2\t40\t0.05\n93\t24512455429200738772392887071969804025856\tcount_1\t2\t41\t0.05\n93\t24512455429200738772392887071969804025856\tcount_3\t2\t41\t0.05\n93\t24512455429200738772392887071969804025856\tcount_6\t2\t41\t0.05\n96\t492345828601203350225572505411028107919360\tcount_6\t2\t42\t0.05\n96\t492345828601203350225572505411028107919360\tcount_7\t2\t42\t0.05\n98\t3637970947608785561809296799068987580219392\tcount_1\t2\t43\t0.05\n99\t9889030319346894261780307407472704754810880\tcount_2\t2\t43\t0.05\n99\t9889030319346894261780307407472704754810880\tcount_6\t2\t43\t0.05\n0\t1\tcount_0\t0\t1\t0.00\n0\t1\tcount_2\t0\t1\t0.00\n0\t1\tcount_3\t0\t1\t0.00\n0\t1\tcount_4\t0\t1\t0.00\n0\t1\tcount_5\t0\t1\t0.00\n0\t1\tcount_6\t0\t1\t0.00\n0\t1\tcount_7\t0\t1\t0.00\n0\t1\tcount_8\t0\t1\t0.00\n0\t1\tcount_9\t0\t1\t0.00\n1\t2\tcount_0\t0\t1\t0.00\n1\t2\tcount_1\t0\t1\t0.00\n1\t2\tcount_3\t0\t1\t0.00\n1\t2\tcount_4\t0\t1\t0.00\n1\t2\tcount_5\t0\t1\t0.00\n1\t2\tcount_6\t0\t1\t0.00\n1\t2\tcount_7\t0\t1\t0.00\n1\t2\tcount_8\t0\t1\t0.00\n1\t2\tcount_9\t0\t1\t0.00\n2\t7\tcount_0\t0\t1\t0.00\n2\t7\tcount_1\t0\t1\t0.00\n2\t7\tcount_2\t0\t1\t0.00\n2\t7\tcount_3\t0\t1\t0.00\n2\t7\tcount_4\t0\t1\t0.00\n2\t7\tcount_5\t0\t1\t0.00\n2\t7\tcount_6\t0\t1\t0.00\n2\t7\tcount_8\t0\t1\t0.00\n2\t7\tcount_9\t0\t1\t0.00\n3\t20\tcount_1\t0\t2\t0.00\n3\t20\tcount_3\t0\t2\t0.00\n3\t20\tcount_4\t0\t2\t0.00\n3\t20\tcount_5\t0\t2\t0.00\n3\t20\tcount_6\t0\t2\t0.00\n3\t20\tcount_7\t0\t2\t0.00\n3\t20\tcount_8\t0\t2\t0.00\n3\t20\tcount_9\t0\t2\t0.00\n4\t54\tcount_0\t0\t2\t0.00\n4\t54\tcount_1\t0\t2\t0.00\n4\t54\tcount_2\t0\t2\t0.00\n4\t54\tcount_3\t0\t2\t0.00\n4\t54\tcount_6\t0\t2\t0.00\n4\t54\tcount_7\t0\t2\t0.00\n4\t54\tcount_8\t0\t2\t0.00\n4\t54\tcount_9\t0\t2\t0.00\n5\t148\tcount_0\t0\t3\t0.00\n5\t148\tcount_2\t0\t3\t0.00\n5\t148\tcount_3\t0\t3\t0.00\n5\t148\tcount_5\t0\t3\t0.00\n5\t148\tcount_6\t0\t3\t0.00\n5\t148\tcount_7\t0\t3\t0.00\n5\t148\tcount_9\t0\t3\t0.00\n6\t403\tcount_1\t0\t3\t0.00\n6\t403\tcount_2\t0\t3\t0.00\n6\t403\tcount_5\t0\t3\t0.00\n6\t403\tcount_6\t0\t3\t0.00\n6\t403\tcount_7\t0\t3\t0.00\n6\t403\tcount_8\t0\t3\t0.00\n6\t403\tcount_9\t0\t3\t0.00\n7\t1096\tcount_2\t0\t4\t0.00\n7\t1096\tcount_3\t0\t4\t0.00\n7\t1096\tcount_4\t0\t4\t0.00\n7\t1096\tcount_5\t0\t4\t0.00\n7\t1096\tcount_7\t0\t4\t0.00\n7\t1096\tcount_8\t0\t4\t0.00\n8\t2980\tcount_1\t0\t4\t0.00\n8\t2980\tcount_3\t0\t4\t0.00\n8\t2980\tcount_4\t0\t4\t0.00\n8\t2980\tcount_5\t0\t4\t0.00\n8\t2980\tcount_6\t0\t4\t0.00\n8\t2980\tcount_7\t0\t4\t0.00\n9\t8103\tcount_2\t0\t4\t0.00\n9\t8103\tcount_4\t0\t4\t0.00\n9\t8103\tcount_5\t0\t4\t0.00\n9\t8103\tcount_6\t0\t4\t0.00\n9\t8103\tcount_7\t0\t4\t0.00\n9\t8103\tcount_9\t0\t4\t0.00\n10\t22026\tcount_1\t0\t5\t0.00\n10\t22026\tcount_3\t0\t5\t0.00\n10\t22026\tcount_4\t0\t5\t0.00\n10\t22026\tcount_5\t0\t5\t0.00\n10\t22026\tcount_7\t0\t5\t0.00\n10\t22026\tcount_8\t0\t5\t0.00\n10\t22026\tcount_9\t0\t5\t0.00\n11\t59874\tcount_0\t0\t5\t0.00\n11\t59874\tcount_1\t0\t5\t0.00\n11\t59874\tcount_2\t0\t5\t0.00\n11\t59874\tcount_3\t0\t5\t0.00\n11\t59874\tcount_6\t0\t5\t0.00\n12\t162754\tcount_0\t0\t6\t0.00\n12\t162754\tcount_3\t0\t6\t0.00\n12\t162754\tcount_8\t0\t6\t0.00\n12\t162754\tcount_9\t0\t6\t0.00\n13\t442413\tcount_0\t0\t6\t0.00\n13\t442413\tcount_5\t0\t6\t0.00\n13\t442413\tcount_6\t0\t6\t0.00\n13\t442413\tcount_7\t0\t6\t0.00\n13\t442413\tcount_8\t0\t6\t0.00\n13\t442413\tcount_9\t0\t6\t0.00\n14\t1202604\tcount_3\t0\t7\t0.00\n14\t1202604\tcount_5\t0\t7\t0.00\n14\t1202604\tcount_7\t0\t7\t0.00\n14\t1202604\tcount_8\t0\t7\t0.00\n14\t1202604\tcount_9\t0\t7\t0.00\n15\t3269017\tcount_4\t0\t7\t0.00\n15\t3269017\tcount_5\t0\t7\t0.00\n15\t3269017\tcount_8\t0\t7\t0.00\n16\t8886110\tcount_2\t0\t7\t0.00\n16\t8886110\tcount_3\t0\t7\t0.00\n16\t8886110\tcount_4\t0\t7\t0.00\n16\t8886110\tcount_5\t0\t7\t0.00\n16\t8886110\tcount_7\t0\t7\t0.00\n16\t8886110\tcount_9\t0\t7\t0.00\n17\t24154952\tcount_0\t0\t8\t0.00\n17\t24154952\tcount_3\t0\t8\t0.00\n17\t24154952\tcount_6\t0\t8\t0.00\n17\t24154952\tcount_7\t0\t8\t0.00\n17\t24154952\tcount_8\t0\t8\t0.00\n18\t65659969\tcount_0\t0\t8\t0.00\n18\t65659969\tcount_1\t0\t8\t0.00\n18\t65659969\tcount_2\t0\t8\t0.00\n18\t65659969\tcount_3\t0\t8\t0.00\n18\t65659969\tcount_4\t0\t8\t0.00\n18\t65659969\tcount_7\t0\t8\t0.00\n18\t65659969\tcount_8\t0\t8\t0.00\n19\t178482300\tcount_5\t0\t9\t0.00\n19\t178482300\tcount_6\t0\t9\t0.00\n19\t178482300\tcount_9\t0\t9\t0.00\n20\t485165195\tcount_0\t0\t9\t0.00\n20\t485165195\tcount_2\t0\t9\t0.00\n20\t485165195\tcount_3\t0\t9\t0.00\n20\t485165195\tcount_7\t0\t9\t0.00\n21\t1318815734\tcount_0\t0\t10\t0.00\n21\t1318815734\tcount_2\t0\t10\t0.00\n21\t1318815734\tcount_6\t0\t10\t0.00\n21\t1318815734\tcount_9\t0\t10\t0.00\n22\t3584912846\tcount_0\t0\t10\t0.00\n22\t3584912846\tcount_7\t0\t10\t0.00\n23\t9744803446\tcount_1\t0\t10\t0.00\n23\t9744803446\tcount_2\t0\t10\t0.00\n23\t9744803446\tcount_5\t0\t10\t0.00\n24\t26489122129\tcount_0\t0\t11\t0.00\n24\t26489122129\tcount_3\t0\t11\t0.00\n24\t26489122129\tcount_5\t0\t11\t0.00\n24\t26489122129\tcount_7\t0\t11\t0.00\n25\t72004899337\tcount_1\t0\t11\t0.00\n25\t72004899337\tcount_5\t0\t11\t0.00\n25\t72004899337\tcount_6\t0\t11\t0.00\n26\t195729609428\tcount_3\t0\t12\t0.00\n27\t532048240601\tcount_7\t0\t12\t0.00\n27\t532048240601\tcount_9\t0\t12\t0.00\n28\t1446257064291\tcount_3\t0\t13\t0.00\n28\t1446257064291\tcount_8\t0\t13\t0.00\n29\t3931334297144\tcount_0\t0\t13\t0.00\n29\t3931334297144\tcount_5\t0\t13\t0.00\n29\t3931334297144\tcount_6\t0\t13\t0.00\n29\t3931334297144\tcount_8\t0\t13\t0.00\n30\t10686474581524\tcount_3\t0\t14\t0.00\n30\t10686474581524\tcount_9\t0\t14\t0.00\n31\t29048849665247\tcount_1\t0\t14\t0.00\n31\t29048849665247\tcount_3\t0\t14\t0.00\n32\t78962960182680\tcount_3\t0\t14\t0.00\n32\t78962960182680\tcount_4\t0\t14\t0.00\n32\t78962960182680\tcount_5\t0\t14\t0.00\n33\t214643579785915\tcount_0\t0\t15\t0.00\n34\t583461742527453\tcount_0\t0\t15\t0.00\n34\t583461742527453\tcount_9\t0\t15\t0.00\n35\t1586013452313427\tcount_9\t0\t16\t0.00\n36\t4311231547115187\tcount_0\t0\t16\t0.00\n36\t4311231547115187\tcount_6\t0\t16\t0.00\n36\t4311231547115187\tcount_9\t0\t16\t0.00\n37\t11719142372802588\tcount_6\t0\t17\t0.00\n38\t31855931757113692\tcount_0\t0\t17\t0.00\n38\t31855931757113692\tcount_4\t0\t17\t0.00\n39\t86593400423993568\tcount_1\t0\t17\t0.00\n39\t86593400423993568\tcount_7\t0\t17\t0.00\n41\t639843493530053504\tcount_1\t0\t18\t0.00\n41\t639843493530053504\tcount_2\t0\t18\t0.00\n41\t639843493530053504\tcount_7\t0\t18\t0.00\n42\t1739274941520497152\tcount_6\t0\t19\t0.00\n42\t1739274941520497152\tcount_8\t0\t19\t0.00\n43\t4727839468229336064\tcount_1\t0\t19\t0.00\n43\t4727839468229336064\tcount_5\t0\t19\t0.00\n45\t34934271057485012992\tcount_6\t0\t20\t0.00\n46\t94961194206024253440\tcount_7\t0\t20\t0.00\n46\t94961194206024253440\tcount_8\t0\t20\t0.00\n47\t258131288619006099456\tcount_7\t0\t21\t0.00\n48\t701673591209761439744\tcount_8\t0\t21\t0.00\n50\t5184705528587058413568\tcount_9\t0\t22\t0.00\n51\t14093490824269348732928\tcount_5\t0\t23\t0.00\n52\t38310080007165660102656\tcount_4\t0\t23\t0.00\n52\t38310080007165660102656\tcount_9\t0\t23\t0.00\n53\t104137594330290583502848\tcount_6\t0\t24\t0.00\n55\t769478526514199470800896\tcount_3\t0\t24\t0.00\n56\t2091659496012989929095168\tcount_3\t0\t25\t0.00\n56\t2091659496012989929095168\tcount_7\t0\t25\t0.00\n57\t5685719999335914834755584\tcount_0\t0\t25\t0.00\n57\t5685719999335914834755584\tcount_2\t0\t25\t0.00\n58\t15455389355900991937970176\tcount_2\t0\t26\t0.00\n64\t6235149080811595853190922240\tcount_7\t0\t28\t0.00\n65\t16948892444103278429730766848\tcount_5\t0\t29\t0.00\n69\t925378172558775340989157474304\tcount_6\t0\t30\t0.00\n71\t6837671229762718251326176755712\tcount_0\t0\t31\t0.00\n71\t6837671229762718251326176755712\tcount_4\t0\t31\t0.00\n76\t1014800388113884566805890000224256\tcount_7\t0\t34\t0.00\n78\t7498416996990089778130847122063360\tcount_5\t0\t34\t0.00\n89\t448961281917432363796644881144163074048\tcount_5\t0\t39\t0.00\n94\t66631762164108623350807338587885324468224\tcount_9\t0\t41\t0.00\n95\t181123908288901406377941782792712038121472\tcount_5\t0\t42\t0.00\n"
  },
  {
    "path": "tests/golden/extend.tsv",
    "content": "A\tcount\tpercent\tdata1_copy_Key\tdata1_copy_B\na1\t1\t33.33\t1\tb1\nc1\t1\t33.33\t2\td1\ne1\t1\t33.33\t2\tf1\n"
  },
  {
    "path": "tests/golden/fill-nested.jsonl",
    "content": "{\"Date\": \"7/3/2018 1:47p\", \"Customer\": [\"Robert Armstrong\", \"Dee Vasquez\"], \"SKU\": \"FOOD213\", \"Item\": \"BFF Oh My Gravy! Beef & Salmon 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"7/3/2018 3:32p\", \"Customer\": [\"Robert Armstrong\", \"Dee Vasquez\"], \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat - 3.5 oz\", \"Quantity\": \"1\", \"Unit\": \"$4.22\", \"Paid\": \"$4.22\"}\n{\"Date\": \"7/5/2018 4:15p\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat 3.5 oz\", \"Quantity\": \"1\", \"Unit\": \"$4.22\", \"Paid\": \"$4.22\"}\n{\"Date\": \"7/6/2018 12:15p\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"12\", \"Unit\": \"$1.29\", \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"7/10/2018 10:28a\", \"Customer\": \"David Attenborough\", \"SKU\": \"NSCT201\", \"Item\": \"Food, Salamander\", \"Quantity\": \"30\", \"Unit\": \"$.05\", \"Paid\": \"$1.5\"}\n{\"Date\": \"7/10/2018 5:23p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT060\", \"Item\": \"Cat, Korat (Felis catus)\", \"Quantity\": \"1\", \"Unit\": \"$720.42\", \"Paid\": \"$720.42\"}\n{\"Date\": \"7/10/2018 5:23p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": \"1\", \"Unit\": \"$14.94\", \"Paid\": \"$14.94\"}\n{\"Date\": \"7/13/2018 10:26a\", \"Customer\": \"Wil Wheaton\", \"SKU\": \"NSCT523\", \"Item\": \"Monster, Rust (Monstrus gygaxus)\", \"Quantity\": \"1\", \"Unit\": \"$39.95\", \"Paid\": \"$39.95\"}\n{\"Date\": \"7/13/2018 3:49p\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD216\", \"Item\": \"BFF Oh My Gravy! Chicken & Shrimp 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"7/17/2018 9:01a\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD217\", \"Item\": \"BFF Oh My Gravy! Duck & Tuna 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"7/17/2018 11:30a\", \"Customer\": \"Helen Halestorm\", \"SKU\": \"LAGO342\", \"Item\": \"Rabbit (Oryctolagus cuniculus)\", \"Quantity\": \"2\", \"Unit\": \"$32.94\", \"Paid\": \"$65.88\"}\n{\"Date\": \"7/18/2018 12:16p\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"6\", \"Unit\": \"$1.29\", \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"7/19/2018 10:28a\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"FOOD170\", \"Item\": \"Food, Dog - 5kg\", \"Quantity\": \"5\", \"Unit\": \"$44.95\", \"Paid\": \"$224.75\"}\n{\"Date\": \"7/20/2018 2:13p\", \"Customer\": \"Jon Arbuckle\", \"SKU\": \"FOOD167\", \"Item\": \"Food, Premium Wet Cat - 3.5 oz\", \"Quantity\": \"50\", \"Unit\": \"$3.95\", \"Paid\": \"$197.5\"}\n{\"Date\": \"7/23/2018 1:41p\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD215\", \"Item\": \"BFF Oh My Gravy! Lamb & Tuna 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"7/23/2018 4:23p\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"TOY235\", \"Item\": \"Laser Pointer\", \"Quantity\": \"1\", \"Unit\": \"$16.12\", \"Paid\": \"$16.12\"}\n{\"Date\": \"7/24/2018 12:16p\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"3\", \"Unit\": \"$1.29\", \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"7/26/2018 4:39p\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"FOOD420\", \"Item\": \"Food, Shark - 10 kg\", \"Quantity\": \"1\", \"Unit\": \"$15.70\", \"Paid\": \"$15.7\"}\n{\"Date\": \"7/27/2018 12:16p\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"3\", \"Unit\": \"$1.29\", \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"7/30/2018 12:17p\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"RETURN\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"1\", \"Unit\": \"$1.29\", \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"7/31/2018 5:42p\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"CAT060\", \"Item\": \"Food, Dragon - 50kg\", \"Quantity\": \"5\", \"Unit\": \"$720.42\", \"Paid\": \"$3602.1\"}\n{\"Date\": \"8/1/2018 2:44p\", \"Customer\": \"David Attenborough\", \"SKU\": \"FOOD360\", \"Item\": \"Food, Rhinocerous - 50kg\", \"Quantity\": \"4\", \"Unit\": \"$5.72\", \"Paid\": \"$22.88\"}\n{\"Date\": \"8/2/2018 5:12p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT110\", \"Item\": \"Cat, Maine Coon (Felix catus)\", \"Quantity\": \"1\", \"Unit\": \"$1,309.68\", \"Paid\": \"$1309.68\"}\n{\"Date\": \"8/2/2018 5:12p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": \"3\", \"Unit\": \"$14.94\", \"Paid\": \"$44.82\"}\n{\"Date\": \"8/6/2018 10:21a\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD212\", \"Item\": \"BFF Oh My Gravy! Beef & Chicken 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"8/7/2018 4:12p\", \"Customer\": \"Juan Johnson\", \"SKU\": \"REPT082\", \"Item\": \"Kingsnake, California (Lampropeltis getula)\", \"Quantity\": \"1\", \"Unit\": \"$89.95\", \"Paid\": \"$89.95\"}\n{\"Date\": \"8/7/2018 4:12p\", \"Customer\": \"Juan Johnson\", \"SKU\": \"RDNT443\", \"Item\": \"Mouse, Pinky (Mus musculus)\", \"Quantity\": \"1\", \"Unit\": \"$1.49\", \"Paid\": \"$1.49\"}\n{\"Date\": \"8/10/2018 4:31p\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD211\", \"Item\": \"BFF Oh My Gravy! Chicken & Turkey 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"8/13/2018 2:07p\", \"Customer\": \"Monica Johnson\", \"SKU\": \"RDNT443\", \"Item\": \"Mouse, Pinky (Mus musculus)\", \"Quantity\": \"1\", \"Unit\": \"$1.49\", \"Paid\": \"$1.49\"}\n{\"Date\": \"8/13/2018 2:08p\", \"Customer\": \"Mar\\u00eda Fern\\u00e1ndez\", \"SKU\": \"FOOD146\", \"Item\": \"Forti Diet Prohealth Mouse/Rat 3lbs\", \"Quantity\": \"2\", \"Unit\": \"$2.00\", \"Paid\": \"$4.0\"}\n{\"Date\": \"8/15/2018 11:57a\", \"Customer\": \"Mr. Praline\", \"SKU\": \"RETURN\", \"Item\": \"Parrot, Norwegian Blue (Mopsitta tanta)\", \"Quantity\": \"1\", \"Unit\": \"$2300.00\", \"Paid\": \"-$2300.0\"}\n{\"Date\": \"8/15/2018 3:48p\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat - 3.5 oz\", \"Quantity\": \"2\", \"Unit\": \"$4.22\", \"Paid\": \"$8.44\"}\n{\"Date\": \"8/16/2018 11:50a\", \"Customer\": \"Helen Halestorm\", \"SKU\": \"RETURN\", \"Item\": \"Rabbit (Oryctolagus cuniculus)\", \"Quantity\": \"6\", \"Unit\": \"$0\", \"Paid\": \"$0.0\"}\n{\"Date\": \"8/16/2018 4:00p\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"DOG010\", \"Item\": \"Dog, Golden Retriever (Canis lupus familiaris)\", \"Quantity\": \"1\", \"Unit\": \"$2,495.99\", \"Paid\": \"$2495.99\"}\n{\"Date\": \"8/16/2018 5:15p\", \"Customer\": \"Michael Smith\", \"SKU\": \"BIRD160\", \"Item\": \"Parakeet, Blue (Melopsittacus undulatus)\", \"Quantity\": \"1\", \"Unit\": \"29.95\", \"Paid\": \"$31.85\"}\n{\"Date\": \"8/17/2018 9:26a\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"NSCT201\", \"Item\": \"Food, Spider\", \"Quantity\": \"5\", \"Unit\": \"$.05\", \"Paid\": \"$0.25\"}\n{\"Date\": \"8/20/2018 9:36a\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"RETURN\", \"Item\": \"Dog, Golden Retriever (Canis lupus familiaris)\", \"Quantity\": \"1\", \"Unit\": \"$1,247.99\", \"Paid\": \"-$1247.99\"}\n{\"Date\": \"8/20/2018 1:47p\", \"Customer\": \"\\u05de\\u05e8\\u05d5\\u05e1\\u05d9\\u05d4 \\u05e0\\u05d9\\u05e1\\u05e0\\u05d4\\u05d5\\u05dc\\u05e5 \\u05d0\\u05d1\\u05d5\\u05dc\\u05e2\\u05e4\\u05d9\\u05d4\", \"SKU\": \"GOAT224\", \"Item\": \"Goat, American Pygmy (Capra hircus)\", \"Quantity\": \"1\", \"Unit\": \"\\u20aa499\", \"Paid\": \"$160.51\"}\n{\"Date\": \"8/20/2018 3:31p\", \"Customer\": \"Monica Johnson\", \"SKU\": \"NSCT201\", \"Item\": \"Crickets, Adult Live (Gryllus assimilis)\", \"Quantity\": \"30\", \"Unit\": \"$.05\", \"Paid\": \"$1.5\"}\n{\"Date\": \"8/20/2018 5:12p\", \"Customer\": \"David Attenborough\", \"SKU\": \"NSCT084\", \"Item\": \"Food, Pangolin\", \"Quantity\": \"30\", \"Unit\": \"$.17\", \"Paid\": \"$5.10\"}\n{\"Date\": \"8/21/2018 12:13p\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD214\", \"Item\": \"BFF Oh My Gravy! Duck & Salmon 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"8/22/2018 9:38a\", \"Customer\": \"David Attenborough\", \"SKU\": \"BIRD160\", \"Item\": \"Food, Quoll\", \"Quantity\": \"1\", \"Unit\": \"29.95\", \"Paid\": \"$29.95\"}\n{\"Date\": \"8/22/2018 2:13p\", \"Customer\": \"Jon Arbuckle\", \"SKU\": \"FOOD170\", \"Item\": \"Food, Adult Dog - 5kg\", \"Quantity\": \"1\", \"Unit\": \"$44.95\", \"Paid\": \"$44.95\"}\n{\"Date\": \"8/22/2018 5:49p\", \"Customer\": \"\\u05de\\u05e8\\u05d5\\u05e1\\u05d9\\u05d4 \\u05e0\\u05d9\\u05e1\\u05e0\\u05d4\\u05d5\\u05dc\\u05e5\", \"SKU\": \"SFTY052\", \"Item\": \"Fire Extinguisher, kitchen-rated\", \"Quantity\": \"1\", \"Unit\": \"$61.70\", \"Paid\": \"$61.70\"}\n{\"Date\": \"8/24/2018 11:42a\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD218\", \"Item\": \"BFF Oh My Gravy! Chicken & Salmon 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"8/27/2018 3:05p\", \"Customer\": \"Monica Johnson\", \"SKU\": \"NSCT443\", \"Item\": \"Mealworms, Large (Tenebrio molitor) 100ct\", \"Quantity\": \"1\", \"Unit\": \"$1.99\", \"Paid\": \"$1.99\"}\n{\"Date\": \"8/28/2018 5:32p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT020\", \"Item\": \"Cat, Scottish Fold (Felis catus)\", \"Quantity\": \"1\", \"Unit\": \"$1,964.53\", \"Paid\": \"$1964.53\"}\n{\"Date\": \"8/28/2018 5:32p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": \"2\", \"Unit\": \"$14.94\", \"Paid\": \"$29.88\"}\n{\"Date\": \"8/29/2018 10:07a\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD219\", \"Item\": \"BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"8/31/2018 12:00a\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD219\", \"Item\": \"BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\", \"Quantity\": \"144\", \"Unit\": \"$12.95\", \"Paid\": \"$1864.8\"}\n{\"Date\": \"8/31/2018 5:57p\", \"Customer\": \"Juan Johnson\", \"SKU\": \"REPT217\", \"Item\": \"Lizard, Spinytail (Uromastyx ornatus)\", \"Quantity\": \"1\", \"Unit\": \"$99.95\", \"Paid\": \"$99.95\"}\n"
  },
  {
    "path": "tests/golden/fill-zero.json",
    "content": "[\n{\"val\": 0},\n{\"val\": 0},\n{\"val\": 0},\n{\"val\": 1},\n{\"val\": 1},\n{\"val\": 1}\n]\n"
  },
  {
    "path": "tests/golden/fill.jsonl",
    "content": "{\"Date\": \"7/3/2018 1:47p\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD213\", \"Item\": \"BFF Oh My Gravy! Beef & Salmon 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"7/3/2018 3:32p\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat - 3.5 oz\", \"Quantity\": \"1\", \"Unit\": \"$4.22\", \"Paid\": \"$4.22\"}\n{\"Date\": \"7/5/2018 4:15p\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat 3.5 oz\", \"Quantity\": \"1\", \"Unit\": \"$4.22\", \"Paid\": \"$4.22\"}\n{\"Date\": \"7/6/2018 12:15p\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"12\", \"Unit\": \"$1.29\", \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"7/10/2018 10:28a\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"NSCT201\", \"Item\": \"Food, Salamander\", \"Quantity\": \"30\", \"Unit\": \"$.05\", \"Paid\": \"$1.5\"}\n{\"Date\": \"7/10/2018 5:23p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT060\", \"Item\": \"Cat, Korat (Felis catus)\", \"Quantity\": \"1\", \"Unit\": \"$720.42\", \"Paid\": \"$720.42\"}\n{\"Date\": \"7/10/2018 5:23p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": \"1\", \"Unit\": \"$14.94\", \"Paid\": \"$14.94\"}\n{\"Date\": \"7/13/2018 10:26a\", \"Customer\": \"Wil Wheaton\", \"SKU\": \"NSCT523\", \"Item\": \"Monster, Rust (Monstrus gygaxus)\", \"Quantity\": \"1\", \"Unit\": \"$39.95\", \"Paid\": \"$39.95\"}\n{\"Date\": \"7/13/2018 3:49p\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD216\", \"Item\": \"BFF Oh My Gravy! Chicken & Shrimp 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"7/17/2018 9:01a\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD217\", \"Item\": \"BFF Oh My Gravy! Duck & Tuna 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"7/17/2018 11:30a\", \"Customer\": \"Helen Halestorm\", \"SKU\": \"LAGO342\", \"Item\": \"Rabbit (Oryctolagus cuniculus)\", \"Quantity\": \"2\", \"Unit\": \"$32.94\", \"Paid\": \"$65.88\"}\n{\"Date\": \"7/18/2018 12:16p\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"6\", \"Unit\": \"$1.29\", \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"7/19/2018 10:28a\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"FOOD170\", \"Item\": \"Food, Dog - 5kg\", \"Quantity\": \"5\", \"Unit\": \"$44.95\", \"Paid\": \"$224.75\"}\n{\"Date\": \"7/20/2018 2:13p\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"FOOD167\", \"Item\": \"Food, Premium Wet Cat - 3.5 oz\", \"Quantity\": \"50\", \"Unit\": \"$3.95\", \"Paid\": \"$197.5\"}\n{\"Date\": \"7/23/2018 1:41p\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD215\", \"Item\": \"BFF Oh My Gravy! Lamb & Tuna 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"7/23/2018 4:23p\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"TOY235\", \"Item\": \"Laser Pointer\", \"Quantity\": \"1\", \"Unit\": \"$16.12\", \"Paid\": \"$16.12\"}\n{\"Date\": \"7/24/2018 12:16p\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"3\", \"Unit\": \"$1.29\", \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"7/26/2018 4:39p\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"FOOD420\", \"Item\": \"Food, Shark - 10 kg\", \"Quantity\": \"1\", \"Unit\": \"$15.70\", \"Paid\": \"$15.7\"}\n{\"Date\": \"7/27/2018 12:16p\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"3\", \"Unit\": \"$1.29\", \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"7/30/2018 12:17p\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"RETURN\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": \"1\", \"Unit\": \"$1.29\", \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"7/31/2018 5:42p\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"CAT060\", \"Item\": \"Food, Dragon - 50kg\", \"Quantity\": \"5\", \"Unit\": \"$720.42\", \"Paid\": \"$3602.1\"}\n{\"Date\": \"8/1/2018 2:44p\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"FOOD360\", \"Item\": \"Food, Rhinocerous - 50kg\", \"Quantity\": \"4\", \"Unit\": \"$5.72\", \"Paid\": \"$22.88\"}\n{\"Date\": \"8/2/2018 5:12p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT110\", \"Item\": \"Cat, Maine Coon (Felix catus)\", \"Quantity\": \"1\", \"Unit\": \"$1,309.68\", \"Paid\": \"$1309.68\"}\n{\"Date\": \"8/2/2018 5:12p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": \"3\", \"Unit\": \"$14.94\", \"Paid\": \"$44.82\"}\n{\"Date\": \"8/6/2018 10:21a\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD212\", \"Item\": \"BFF Oh My Gravy! Beef & Chicken 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"8/7/2018 4:12p\", \"Customer\": \"Juan Johnson\", \"SKU\": \"REPT082\", \"Item\": \"Kingsnake, California (Lampropeltis getula)\", \"Quantity\": \"1\", \"Unit\": \"$89.95\", \"Paid\": \"$89.95\"}\n{\"Date\": \"8/7/2018 4:12p\", \"Customer\": \"Juan Johnson\", \"SKU\": \"RDNT443\", \"Item\": \"Mouse, Pinky (Mus musculus)\", \"Quantity\": \"1\", \"Unit\": \"$1.49\", \"Paid\": \"$1.49\"}\n{\"Date\": \"8/10/2018 4:31p\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD211\", \"Item\": \"BFF Oh My Gravy! Chicken & Turkey 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"8/13/2018 2:07p\", \"Customer\": \"Monica Johnson\", \"SKU\": \"RDNT443\", \"Item\": \"Mouse, Pinky (Mus musculus)\", \"Quantity\": \"1\", \"Unit\": \"$1.49\", \"Paid\": \"$1.49\"}\n{\"Date\": \"8/13/2018 2:08p\", \"Customer\": \"Mar\\u00eda Fern\\u00e1ndez\", \"SKU\": \"FOOD146\", \"Item\": \"Forti Diet Prohealth Mouse/Rat 3lbs\", \"Quantity\": \"2\", \"Unit\": \"$2.00\", \"Paid\": \"$4.0\"}\n{\"Date\": \"8/15/2018 11:57a\", \"Customer\": \"Mr. Praline\", \"SKU\": \"RETURN\", \"Item\": \"Parrot, Norwegian Blue (Mopsitta tanta)\", \"Quantity\": \"1\", \"Unit\": \"$2300.00\", \"Paid\": \"-$2300.0\"}\n{\"Date\": \"8/15/2018 3:48p\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat - 3.5 oz\", \"Quantity\": \"2\", \"Unit\": \"$4.22\", \"Paid\": \"$8.44\"}\n{\"Date\": \"8/16/2018 11:50a\", \"Customer\": \"Helen Halestorm\", \"SKU\": \"RETURN\", \"Item\": \"Rabbit (Oryctolagus cuniculus)\", \"Quantity\": \"6\", \"Unit\": \"$0\", \"Paid\": \"$0.0\"}\n{\"Date\": \"8/16/2018 4:00p\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"DOG010\", \"Item\": \"Dog, Golden Retriever (Canis lupus familiaris)\", \"Quantity\": \"1\", \"Unit\": \"$2,495.99\", \"Paid\": \"$2495.99\"}\n{\"Date\": \"8/16/2018 5:15p\", \"Customer\": \"Michael Smith\", \"SKU\": \"BIRD160\", \"Item\": \"Parakeet, Blue (Melopsittacus undulatus)\", \"Quantity\": \"1\", \"Unit\": \"29.95\", \"Paid\": \"$31.85\"}\n{\"Date\": \"8/17/2018 9:26a\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"NSCT201\", \"Item\": \"Food, Spider\", \"Quantity\": \"5\", \"Unit\": \"$.05\", \"Paid\": \"$0.25\"}\n{\"Date\": \"8/20/2018 9:36a\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"RETURN\", \"Item\": \"Dog, Golden Retriever (Canis lupus familiaris)\", \"Quantity\": \"1\", \"Unit\": \"$1,247.99\", \"Paid\": \"-$1247.99\"}\n{\"Date\": \"8/20/2018 1:47p\", \"Customer\": \"\\u05de\\u05e8\\u05d5\\u05e1\\u05d9\\u05d4 \\u05e0\\u05d9\\u05e1\\u05e0\\u05d4\\u05d5\\u05dc\\u05e5 \\u05d0\\u05d1\\u05d5\\u05dc\\u05e2\\u05e4\\u05d9\\u05d4\", \"SKU\": \"GOAT224\", \"Item\": \"Goat, American Pygmy (Capra hircus)\", \"Quantity\": \"1\", \"Unit\": \"\\u20aa499\", \"Paid\": \"$160.51\"}\n{\"Date\": \"8/20/2018 3:31p\", \"Customer\": \"Monica Johnson\", \"SKU\": \"NSCT201\", \"Item\": \"Crickets, Adult Live (Gryllus assimilis)\", \"Quantity\": \"30\", \"Unit\": \"$.05\", \"Paid\": \"$1.5\"}\n{\"Date\": \"8/20/2018 5:12p\", \"Customer\": \"David Attenborough\", \"SKU\": \"NSCT084\", \"Item\": \"Food, Pangolin\", \"Quantity\": \"30\", \"Unit\": \"$.17\", \"Paid\": \"$5.10\"}\n{\"Date\": \"8/21/2018 12:13p\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD214\", \"Item\": \"BFF Oh My Gravy! Duck & Salmon 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"8/22/2018 9:38a\", \"Customer\": \"David Attenborough\", \"SKU\": \"BIRD160\", \"Item\": \"Food, Quoll\", \"Quantity\": \"1\", \"Unit\": \"29.95\", \"Paid\": \"$29.95\"}\n{\"Date\": \"8/22/2018 2:13p\", \"Customer\": \"Jon Arbuckle\", \"SKU\": \"FOOD170\", \"Item\": \"Food, Adult Dog - 5kg\", \"Quantity\": \"1\", \"Unit\": \"$44.95\", \"Paid\": \"$44.95\"}\n{\"Date\": \"8/22/2018 5:49p\", \"Customer\": \"\\u05de\\u05e8\\u05d5\\u05e1\\u05d9\\u05d4 \\u05e0\\u05d9\\u05e1\\u05e0\\u05d4\\u05d5\\u05dc\\u05e5\", \"SKU\": \"SFTY052\", \"Item\": \"Fire Extinguisher, kitchen-rated\", \"Quantity\": \"1\", \"Unit\": \"$61.70\", \"Paid\": \"$61.70\"}\n{\"Date\": \"8/24/2018 11:42a\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD218\", \"Item\": \"BFF Oh My Gravy! Chicken & Salmon 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"8/27/2018 3:05p\", \"Customer\": \"Monica Johnson\", \"SKU\": \"NSCT443\", \"Item\": \"Mealworms, Large (Tenebrio molitor) 100ct\", \"Quantity\": \"1\", \"Unit\": \"$1.99\", \"Paid\": \"$1.99\"}\n{\"Date\": \"8/28/2018 5:32p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT020\", \"Item\": \"Cat, Scottish Fold (Felis catus)\", \"Quantity\": \"1\", \"Unit\": \"$1,964.53\", \"Paid\": \"$1964.53\"}\n{\"Date\": \"8/28/2018 5:32p\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": \"2\", \"Unit\": \"$14.94\", \"Paid\": \"$29.88\"}\n{\"Date\": \"8/29/2018 10:07a\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD219\", \"Item\": \"BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\", \"Quantity\": \"4\", \"Unit\": \"$12.95\", \"Paid\": \"$51.8\"}\n{\"Date\": \"8/31/2018 12:00a\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD219\", \"Item\": \"BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\", \"Quantity\": \"144\", \"Unit\": \"$12.95\", \"Paid\": \"$1864.8\"}\n{\"Date\": \"8/31/2018 5:57p\", \"Customer\": \"Juan Johnson\", \"SKU\": \"REPT217\", \"Item\": \"Lizard, Spinytail (Uromastyx ornatus)\", \"Quantity\": \"1\", \"Unit\": \"$99.95\", \"Paid\": \"$99.95\"}\n"
  },
  {
    "path": "tests/golden/format-enum-freeze.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tItem_frozen\tUnits\tUnit_Cost\tTotal\n2016-01-06\tEast\tJones\t1\t1\t95\t1.99\t189.05\n2016-01-23\tCentral\tKivell\tBinder\tBinder\t50\t19.99\t999.50\n2016-02-09\tCentral\tJardine\t1\t1\t36\t4.99\t179.64\n2016-02-26\tCentral\tGill\tPen\tPen\t27\t19.99\t539.73\n2016-03-15\tWest\tSorvino\t1\t1\t56\t2.99\t167.44\n2016-04-01\tEast\tJones\tBinder\tBinder\t60\t4.99\t299.40\n2016-04-18\tCentral\tAndrews\t1\t1\t75\t1.99\t149.25\n2016-05-05\tCentral\tJardine\t1\t1\t90\t4.99\t449.10\n2016-05-22\tWest\tThompson\t1\t1\t32\t1.99\t63.68\n2016-06-08\tEast\tJones\tBinder\tBinder\t60\t8.99\t539.40\n2016-06-25\tCentral\tMorgan\t1\t1\t90\t4.99\t449.10\n2016-07-12\tEast\tHoward\tBinder\tBinder\t29\t1.99\t57.71\n2016-07-29\tEast\tParent\tBinder\tBinder\t81\t19.99\t1619.19\n2016-08-15\tEast\tJones\t1\t1\t35\t4.99\t174.65\n2016-09-01\tCentral\tSmith\tDesk\tDesk\t2\t125.00\t250.00\n2016-09-18\tEast\tJones\tPen Set\tPen Set\t16\t15.99\t255.84\n2016-10-05\tCentral\tMorgan\tBinder\tBinder\t28\t8.99\t251.72\n2016-10-22\tEast\tJones\tPen\tPen\t64\t8.99\t575.36\n2016-11-08\tEast\tParent\tPen\tPen\t15\t19.99\t299.85\n2016-11-25\tCentral\tKivell\tPen Set\tPen Set\t96\t4.99\t479.04\n2016-12-12\tCentral\tSmith\t1\t1\t67\t1.29\t86.43\n2016-12-29\tEast\tParent\tPen Set\tPen Set\t74\t15.99\t1183.26\n2017-01-15\tCentral\tGill\tBinder\tBinder\t46\t8.99\t413.54\n2017-02-01\tCentral\tSmith\tBinder\tBinder\t87\t15.00\t1305.00\n2017-02-18\tEast\tJones\tBinder\tBinder\t4\t4.99\t19.96\n2017-03-07\tWest\tSorvino\tBinder\tBinder\t7\t19.99\t139.93\n2017-03-24\tCentral\tJardine\tPen Set\tPen Set\t50\t4.99\t249.50\n2017-04-10\tCentral\tAndrews\t1\t1\t66\t1.99\t131.34\n2017-04-27\tEast\tHoward\tPen\tPen\t96\t4.99\t479.04\n2017-05-14\tCentral\tGill\t1\t1\t53\t1.29\t68.37\n2017-05-31\tCentral\tGill\tBinder\tBinder\t80\t8.99\t719.20\n2017-06-17\tCentral\tKivell\tDesk\tDesk\t5\t125.00\t625.00\n2017-07-04\tEast\tJones\tPen Set\tPen Set\t62\t4.99\t309.38\n2017-07-21\tCentral\tMorgan\tPen Set\tPen Set\t55\t12.49\t686.95\n2017-08-07\tCentral\tKivell\tPen Set\tPen Set\t42\t23.95\t1005.90\n2017-08-24\tWest\tSorvino\tDesk\tDesk\t3\t275.00\t825.00\n2017-09-10\tCentral\tGill\t1\t1\t7\t1.29\t9.03\n2017-09-27\tWest\tSorvino\tPen\tPen\t76\t1.99\t151.24\n2017-10-14\tWest\tThompson\tBinder\tBinder\t57\t19.99\t1139.43\n2017-10-31\tCentral\tAndrews\t1\t1\t14\t1.29\t18.06\n2017-11-17\tCentral\tJardine\tBinder\tBinder\t11\t4.99\t54.89\n2017-12-04\tCentral\tJardine\tBinder\tBinder\t94\t19.99\t1879.06\n2017-12-21\tCentral\tAndrews\tBinder\tBinder\t28\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/format-enum.json",
    "content": "[\n{\"OrderDate\": \"2016\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Pencil\", \"Units\": 95, \"Unit_Cost\": 1.99, \"Total\": \"189.05\"},\n{\"OrderDate\": \"2016\", \"Region\": \"Central\", \"Rep\": \"Kivell\", \"Item\": \"Binder\", \"Units\": 50, \"Unit_Cost\": 19.99, \"Total\": \"999.50\"},\n{\"OrderDate\": \"2016\", \"Region\": \"Central\", \"Rep\": \"Jardine\", \"Item\": \"Pencil\", \"Units\": 36, \"Unit_Cost\": 4.99, \"Total\": \"179.64\"},\n{\"OrderDate\": \"2016\", \"Region\": \"Central\", \"Rep\": \"Gill\", \"Item\": \"Pen\", \"Units\": 27, \"Unit_Cost\": 19.99, \"Total\": \"539.73\"},\n{\"OrderDate\": \"2016\", \"Region\": \"West\", \"Rep\": \"Sorvino\", \"Item\": \"Pencil\", \"Units\": 56, \"Unit_Cost\": 2.99, \"Total\": \"167.44\"},\n{\"OrderDate\": \"2016\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Binder\", \"Units\": 60, \"Unit_Cost\": 4.99, \"Total\": \"299.40\"},\n{\"OrderDate\": \"2016\", \"Region\": \"Central\", \"Rep\": \"Andrews\", \"Item\": \"Pencil\", \"Units\": 75, \"Unit_Cost\": 1.99, \"Total\": \"149.25\"},\n{\"OrderDate\": \"2016\", \"Region\": \"Central\", \"Rep\": \"Jardine\", \"Item\": \"Pencil\", \"Units\": 90, \"Unit_Cost\": 4.99, \"Total\": \"449.10\"},\n{\"OrderDate\": \"2016\", \"Region\": \"West\", \"Rep\": \"Thompson\", \"Item\": \"Pencil\", \"Units\": 32, \"Unit_Cost\": 1.99, \"Total\": \"63.68\"},\n{\"OrderDate\": \"2016\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Binder\", \"Units\": 60, \"Unit_Cost\": 8.99, \"Total\": \"539.40\"},\n{\"OrderDate\": \"2016\", \"Region\": \"Central\", \"Rep\": \"Morgan\", \"Item\": \"Pencil\", \"Units\": 90, \"Unit_Cost\": 4.99, \"Total\": \"449.10\"},\n{\"OrderDate\": \"2016\", \"Region\": \"East\", \"Rep\": \"Howard\", \"Item\": \"Binder\", \"Units\": 29, \"Unit_Cost\": 1.99, \"Total\": \"57.71\"},\n{\"OrderDate\": \"2016\", \"Region\": \"East\", \"Rep\": \"Parent\", \"Item\": \"Binder\", \"Units\": 81, \"Unit_Cost\": 19.99, \"Total\": \"1619.19\"},\n{\"OrderDate\": \"2016\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Pencil\", \"Units\": 35, \"Unit_Cost\": 4.99, \"Total\": \"174.65\"},\n{\"OrderDate\": \"2016\", \"Region\": \"Central\", \"Rep\": \"Smith\", \"Item\": \"Desk\", \"Units\": 2, \"Unit_Cost\": 125.0, \"Total\": \"250.00\"},\n{\"OrderDate\": \"2016\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Pen Set\", \"Units\": 16, \"Unit_Cost\": 15.99, \"Total\": \"255.84\"},\n{\"OrderDate\": \"2016\", \"Region\": \"Central\", \"Rep\": \"Morgan\", \"Item\": \"Binder\", \"Units\": 28, \"Unit_Cost\": 8.99, \"Total\": \"251.72\"},\n{\"OrderDate\": \"2016\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Pen\", \"Units\": 64, \"Unit_Cost\": 8.99, \"Total\": \"575.36\"},\n{\"OrderDate\": \"2016\", \"Region\": \"East\", \"Rep\": \"Parent\", \"Item\": \"Pen\", \"Units\": 15, \"Unit_Cost\": 19.99, \"Total\": \"299.85\"},\n{\"OrderDate\": \"2016\", \"Region\": \"Central\", \"Rep\": \"Kivell\", \"Item\": \"Pen Set\", \"Units\": 96, \"Unit_Cost\": 4.99, \"Total\": \"479.04\"},\n{\"OrderDate\": \"2016\", \"Region\": \"Central\", \"Rep\": \"Smith\", \"Item\": \"Pencil\", \"Units\": 67, \"Unit_Cost\": 1.29, \"Total\": \"86.43\"},\n{\"OrderDate\": \"2016\", \"Region\": \"East\", \"Rep\": \"Parent\", \"Item\": \"Pen Set\", \"Units\": 74, \"Unit_Cost\": 15.99, \"Total\": \"1183.26\"},\n{\"OrderDate\": \"2017\", \"Region\": \"Central\", \"Rep\": \"Gill\", \"Item\": \"Binder\", \"Units\": 46, \"Unit_Cost\": 8.99, \"Total\": \"413.54\"},\n{\"OrderDate\": \"2017\", \"Region\": \"Central\", \"Rep\": \"Smith\", \"Item\": \"Binder\", \"Units\": 87, \"Unit_Cost\": 15.0, \"Total\": \"1305.00\"},\n{\"OrderDate\": \"2017\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Binder\", \"Units\": 4, \"Unit_Cost\": 4.99, \"Total\": \"19.96\"},\n{\"OrderDate\": \"2017\", \"Region\": \"West\", \"Rep\": \"Sorvino\", \"Item\": \"Binder\", \"Units\": 7, \"Unit_Cost\": 19.99, \"Total\": \"139.93\"},\n{\"OrderDate\": \"2017\", \"Region\": \"Central\", \"Rep\": \"Jardine\", \"Item\": \"Pen Set\", \"Units\": 50, \"Unit_Cost\": 4.99, \"Total\": \"249.50\"},\n{\"OrderDate\": \"2017\", \"Region\": \"Central\", \"Rep\": \"Andrews\", \"Item\": \"Pencil\", \"Units\": 66, \"Unit_Cost\": 1.99, \"Total\": \"131.34\"},\n{\"OrderDate\": \"2017\", \"Region\": \"East\", \"Rep\": \"Howard\", \"Item\": \"Pen\", \"Units\": 96, \"Unit_Cost\": 4.99, \"Total\": \"479.04\"},\n{\"OrderDate\": \"2017\", \"Region\": \"Central\", \"Rep\": \"Gill\", \"Item\": \"Pencil\", \"Units\": 53, \"Unit_Cost\": 1.29, \"Total\": \"68.37\"},\n{\"OrderDate\": \"2017\", \"Region\": \"Central\", \"Rep\": \"Gill\", \"Item\": \"Binder\", \"Units\": 80, \"Unit_Cost\": 8.99, \"Total\": \"719.20\"},\n{\"OrderDate\": \"2017\", \"Region\": \"Central\", \"Rep\": \"Kivell\", \"Item\": \"Desk\", \"Units\": 5, \"Unit_Cost\": 125.0, \"Total\": \"625.00\"},\n{\"OrderDate\": \"2017\", \"Region\": \"East\", \"Rep\": \"Jones\", \"Item\": \"Pen Set\", \"Units\": 62, \"Unit_Cost\": 4.99, \"Total\": \"309.38\"},\n{\"OrderDate\": \"2017\", \"Region\": \"Central\", \"Rep\": \"Morgan\", \"Item\": \"Pen Set\", \"Units\": 55, \"Unit_Cost\": 12.49, \"Total\": \"686.95\"},\n{\"OrderDate\": \"2017\", \"Region\": \"Central\", \"Rep\": \"Kivell\", \"Item\": \"Pen Set\", \"Units\": 42, \"Unit_Cost\": 23.95, \"Total\": \"1005.90\"},\n{\"OrderDate\": \"2017\", \"Region\": \"West\", \"Rep\": \"Sorvino\", \"Item\": \"Desk\", \"Units\": 3, \"Unit_Cost\": 275.0, \"Total\": \"825.00\"},\n{\"OrderDate\": \"2017\", \"Region\": \"Central\", \"Rep\": \"Gill\", \"Item\": \"Pencil\", \"Units\": 7, \"Unit_Cost\": 1.29, \"Total\": \"9.03\"},\n{\"OrderDate\": \"2017\", \"Region\": \"West\", \"Rep\": \"Sorvino\", \"Item\": \"Pen\", \"Units\": 76, \"Unit_Cost\": 1.99, \"Total\": \"151.24\"},\n{\"OrderDate\": \"2017\", \"Region\": \"West\", \"Rep\": \"Thompson\", \"Item\": \"Binder\", \"Units\": 57, \"Unit_Cost\": 19.99, \"Total\": \"1139.43\"},\n{\"OrderDate\": \"2017\", \"Region\": \"Central\", \"Rep\": \"Andrews\", \"Item\": \"Pencil\", \"Units\": 14, \"Unit_Cost\": 1.29, \"Total\": \"18.06\"},\n{\"OrderDate\": \"2017\", \"Region\": \"Central\", \"Rep\": \"Jardine\", \"Item\": \"Binder\", \"Units\": 11, \"Unit_Cost\": 4.99, \"Total\": \"54.89\"},\n{\"OrderDate\": \"2017\", \"Region\": \"Central\", \"Rep\": \"Jardine\", \"Item\": \"Binder\", \"Units\": 94, \"Unit_Cost\": 19.99, \"Total\": \"1879.06\"},\n{\"OrderDate\": \"2017\", \"Region\": \"Central\", \"Rep\": \"Andrews\", \"Item\": \"Binder\", \"Units\": 28, \"Unit_Cost\": 4.99, \"Total\": \"139.72\"}\n]\n"
  },
  {
    "path": "tests/golden/format-enum.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016\tEast\tJones\t1\t95\t1.99\t189.05\n2016\tCentral\tKivell\t2\t50\t19.99\t999.50\n2016\tCentral\tJardine\t1\t36\t4.99\t179.64\n2016\tCentral\tGill\t3\t27\t19.99\t539.73\n2016\tWest\tSorvino\t1\t56\t2.99\t167.44\n2016\tEast\tJones\t2\t60\t4.99\t299.40\n2016\tCentral\tAndrews\t1\t75\t1.99\t149.25\n2016\tCentral\tJardine\t1\t90\t4.99\t449.10\n2016\tWest\tThompson\t1\t32\t1.99\t63.68\n2016\tEast\tJones\t2\t60\t8.99\t539.40\n2016\tCentral\tMorgan\t1\t90\t4.99\t449.10\n2016\tEast\tHoward\t2\t29\t1.99\t57.71\n2016\tEast\tParent\t2\t81\t19.99\t1619.19\n2016\tEast\tJones\t1\t35\t4.99\t174.65\n2016\tCentral\tSmith\t4\t2\t125.00\t250.00\n2016\tEast\tJones\tPen Set\t16\t15.99\t255.84\n2016\tCentral\tMorgan\t2\t28\t8.99\t251.72\n2016\tEast\tJones\t3\t64\t8.99\t575.36\n2016\tEast\tParent\t3\t15\t19.99\t299.85\n2016\tCentral\tKivell\tPen Set\t96\t4.99\t479.04\n2016\tCentral\tSmith\t1\t67\t1.29\t86.43\n2016\tEast\tParent\tPen Set\t74\t15.99\t1183.26\n2017\tCentral\tGill\t2\t46\t8.99\t413.54\n2017\tCentral\tSmith\t2\t87\t15.00\t1305.00\n2017\tEast\tJones\t2\t4\t4.99\t19.96\n2017\tWest\tSorvino\t2\t7\t19.99\t139.93\n2017\tCentral\tJardine\tPen Set\t50\t4.99\t249.50\n2017\tCentral\tAndrews\t1\t66\t1.99\t131.34\n2017\tEast\tHoward\t3\t96\t4.99\t479.04\n2017\tCentral\tGill\t1\t53\t1.29\t68.37\n2017\tCentral\tGill\t2\t80\t8.99\t719.20\n2017\tCentral\tKivell\t4\t5\t125.00\t625.00\n2017\tEast\tJones\tPen Set\t62\t4.99\t309.38\n2017\tCentral\tMorgan\tPen Set\t55\t12.49\t686.95\n2017\tCentral\tKivell\tPen Set\t42\t23.95\t1005.90\n2017\tWest\tSorvino\t4\t3\t275.00\t825.00\n2017\tCentral\tGill\t1\t7\t1.29\t9.03\n2017\tWest\tSorvino\t3\t76\t1.99\t151.24\n2017\tWest\tThompson\t2\t57\t19.99\t1139.43\n2017\tCentral\tAndrews\t1\t14\t1.29\t18.06\n2017\tCentral\tJardine\t2\t11\t4.99\t54.89\n2017\tCentral\tJardine\t2\t94\t19.99\t1879.06\n2017\tCentral\tAndrews\t2\t28\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/freeze-json.tsv",
    "content": "fall\tid\tmass\tname\tnametype\trecclass\treclat\treclong\tyear\nFell\t1\t21\tAachen\tValid\tL5\t50.775000\t6.083330\t1880-01-01T00:00:00.000\nFell\t2\t720\tAarhus\tValid\tH6\t56.183330\t10.233330\t1951-01-01T00:00:00.000\nFell\t6\t107000\tAbee\tValid\tEH4\t54.216670\t-113.000000\t1952-01-01T00:00:00.000\nFell\t10\t1914\tAcapulco\tValid\tAcapulcoite\t16.883330\t-99.900000\t1976-01-01T00:00:00.000\nFell\t370\t780\tAchiras\tValid\tL6\t-33.166670\t-64.950000\t1902-01-01T00:00:00.000\nFell\t379\t4239\tAdhi Kot\tValid\tEH4\t32.100000\t71.800000\t1919-01-01T00:00:00.000\nFell\t390\t910\tAdzhi-Bogdo (stone)\tValid\tLL3-6\t44.833330\t95.166670\t1949-01-01T00:00:00.000\nFell\t392\t30000\tAgen\tValid\tH5\t44.216670\t0.616670\t1814-01-01T00:00:00.000\nFell\t398\t1620\tAguada\tValid\tL6\t-31.600000\t-65.233330\t1930-01-01T00:00:00.000\nFell\t417\t1440\tAguila Blanca\tValid\tL\t-30.866670\t-64.550000\t1920-01-01T00:00:00.000\nFell\t423\t1000\tAioun el Atrouss\tValid\tDiogenite-pm\t16.398060\t-9.570280\t1974-01-01T00:00:00.000\nFell\t424\t24000\tAïr\tValid\tL6\t19.083330\t8.383330\t1925-01-01T00:00:00.000\nFell\t425\t\tAire-sur-la-Lys\tValid\tUnknown\t50.666670\t2.333330\t1769-01-01T00:00:00.000\nFell\t426\t779\tAkaba\tValid\tL6\t29.516670\t35.050000\t1949-01-01T00:00:00.000\nFell\t427\t1800\tAkbarpur\tValid\tH4\t29.716670\t77.950000\t1838-01-01T00:00:00.000\nFell\t432\t3000\tAkwanga\tValid\tH\t8.916670\t8.433330\t1959-01-01T00:00:00.000\nFell\t433\t50000\tAkyumak\tValid\tIron, IVA\t39.916670\t42.816670\t1981-01-01T00:00:00.000\nFell\t446\t160\tAl Rais\tValid\tCR2-an\t24.416670\t39.516670\t1957-01-01T00:00:00.000\nFell\t447\t700\tAl Zarnkh\tValid\tLL5\t13.660330\t28.960000\t2001-01-01T00:00:00.000\nFell\t448\t6000\tAlais\tValid\tCI1\t44.116670\t4.083330\t1806-01-01T00:00:00.000\nFell\t453\t2000\tAlbareto\tValid\tL/LL4\t44.650000\t11.016670\t1766-01-01T00:00:00.000\nFell\t454\t625\tAlberta\tValid\tL\t2.000000\t22.666670\t1949-01-01T00:00:00.000\nFell\t458\t252\tAlby sur Chéran\tValid\tEucrite-mmict\t45.821330\t6.015330\t2002-01-01T00:00:00.000\nFell\t461\t700\tAldsworth\tValid\tLL5\t51.783330\t-1.783330\t1835-01-01T00:00:00.000\nFell\t462\t3200\tAleppo\tValid\tL6\t36.233330\t37.133330\t1873-01-01T00:00:00.000\nFell\t463\t908\tAlessandria\tValid\tH5\t44.883330\t8.750000\t1860-01-01T00:00:00.000\nFell\t465\t9251\tAlexandrovsky\tValid\tH4\t50.950000\t31.816670\t1900-01-01T00:00:00.000\nFell\t466\t228000\tAlfianello\tValid\tL6\t45.266670\t10.150000\t1883-01-01T00:00:00.000\nFell\t2276\t32000\tAllegan\tValid\tH5\t42.533330\t-85.883330\t1899-01-01T00:00:00.000\nFell\t2278\t2000000\tAllende\tValid\tCV3\t26.966670\t-105.316670\t1969-01-01T00:00:00.000\nFell\t48915\t3950\tAlmahata Sitta\tValid\tUreilite-an\t20.745750\t32.412750\t2008-01-01T00:00:00.000\nFell\t2284\t6000\tAlta'ameem\tValid\tLL5\t35.273330\t44.215560\t1977-01-01T00:00:00.000\nFell\t2290\t6400\tAmbapur Nagla\tValid\tH5\t27.666670\t78.250000\t1895-01-01T00:00:00.000\nFell\t2294\t2700\tAndhara\tValid\tStone-uncl\t26.583330\t85.566670\t1880-01-01T00:00:00.000\nFell\t2295\t3200\tAndover\tValid\tL6\t44.616670\t-70.750000\t1898-01-01T00:00:00.000\nFell\t2296\t600\tAndreevka\tValid\tL3\t48.700000\t37.500000\t1969-01-01T00:00:00.000\nFell\t2298\t17900\tAndura\tValid\tH6\t20.883330\t76.866670\t1939-01-01T00:00:00.000\nFound\t50693\t256.8\tNorthwest Africa 5815\tValid\tL5\t0.000000\t0.000000\t\nFell\t2301\t\tAngers\tValid\tL6\t47.466670\t-0.550000\t1822-01-01T00:00:00.000\nFell\t2302\t1500\tAngra dos Reis (stone)\tValid\tAngrite\t-22.966670\t-44.316670\t1869-01-01T00:00:00.000\nFell\t2304\t6500\tAnkober\tValid\tH4\t9.533330\t39.716670\t1942-01-01T00:00:00.000\nFell\t2305\t2500\tAnlong\tValid\tH5\t25.150000\t105.183330\t1971-01-01T00:00:00.000\nFell\t2313\t320\tAomori\tValid\tL6\t40.810560\t140.785560\t1984-01-01T00:00:00.000\nFell\t2318\t15000\tAppley Bridge\tValid\tLL6\t53.583330\t-2.716670\t1914-01-01T00:00:00.000\nFell\t2320\t3200\tApt\tValid\tL6\t43.866670\t5.383330\t1803-01-01T00:00:00.000\nFell\t2325\t810\tArbol Solo\tValid\tH5\t-33.000000\t-66.000000\t1954-01-01T00:00:00.000\nFell\t2329\t5070\tArchie\tValid\tH6\t38.500000\t-94.300000\t1932-01-01T00:00:00.000\nFell\t2340\t7450\tArroyo Aguiar\tValid\tH5\t-31.416670\t-60.666670\t1950-01-01T00:00:00.000\nFell\t2345\t41\tAsco\tValid\tH6\t42.450000\t9.033330\t1805-01-01T00:00:00.000\nFell\t48954\t9500\tAsh Creek\tValid\tL6\t31.805000\t-97.010000\t2009-01-01T00:00:00.000\nFell\t2346\t1300\tAshdon\tValid\tL6\t52.050000\t0.300000\t1923-01-01T00:00:00.000\nFell\t2353\t2000\tAssisi\tValid\tH5\t43.033330\t12.550000\t1886-01-01T00:00:00.000\nFell\t4883\t1280\tAtarra\tValid\tL4\t25.254170\t80.625000\t1920-01-01T00:00:00.000\nFell\t4884\t94.2\tAtemajac\tValid\tL6\t20.066670\t-103.666670\t1896-01-01T00:00:00.000\nFell\t4885\t265\tAthens\tValid\tLL6\t34.750000\t-87.000000\t1933-01-01T00:00:00.000\nFell\t4888\t1384.2\tAtoka\tValid\tL6\t34.316670\t-96.150000\t1945-01-01T00:00:00.000\nFell\t4893\t800\tAubres\tValid\tAubrite\t44.383330\t5.166670\t1836-01-01T00:00:00.000\nFell\t4899\t50000\tAumale\tValid\tL6\t36.166670\t3.666670\t1865-01-01T00:00:00.000\nFell\t4900\t2000\tAumieres\tValid\tL6\t44.333330\t3.233330\t1842-01-01T00:00:00.000\nFell\t4903\t50000\tAusson\tValid\tL5\t43.083330\t0.583330\t1858-01-01T00:00:00.000\nFell\t4905\t9330\tAvanhandava\tValid\tH4\t-21.460280\t-49.950830\t1952-01-01T00:00:00.000\nFell\t4906\t1230\tAvce\tValid\tIron, IIAB\t46.000000\t13.500000\t1908-01-01T00:00:00.000\nFell\t4907\t146\tAvilez\tValid\tH\t25.000000\t-103.500000\t1855-01-01T00:00:00.000\nFell\t4910\t134\tAwere\tValid\tL4\t2.716670\t32.833330\t1968-01-01T00:00:00.000\nFell\t4913\t2830\tAztec\tValid\tL6\t36.800000\t-108.000000\t1938-01-01T00:00:00.000\nFell\t4917\t18000\tBachmut\tValid\tL6\t48.600000\t38.000000\t1814-01-01T00:00:00.000\nFell\t4922\t10322\tBahjoi\tValid\tIron, IAB-sLL\t28.483330\t78.500000\t1934-01-01T00:00:00.000\nFell\t4925\t3700\tBald Mountain\tValid\tL4\t35.966670\t-82.483330\t1929-01-01T00:00:00.000\nFell\t4926\t345\tBaldwyn\tValid\tL6\t34.500000\t-88.666670\t1922-01-01T00:00:00.000\nFell\t4928\t1000\tBali\tValid\tCV3\t5.383330\t16.383330\t1907-01-01T00:00:00.000\nFell\t4934\t16700\tBan Rong Du\tValid\tIron, ungrouped\t16.666670\t101.183330\t1993-01-01T00:00:00.000\nFell\t4935\t11500\tBandong\tValid\tLL6\t-6.916670\t107.600000\t1871-01-01T00:00:00.000\nFell\t4936\t15000\tBansur\tValid\tL6\t27.700000\t76.333330\t1892-01-01T00:00:00.000\nFell\t4937\t14\tBanswal\tValid\tL5\t30.400000\t78.200000\t1913-01-01T00:00:00.000\nFell\t4938\t629\tBanten\tValid\tCM2\t-6.333330\t106.000000\t1933-01-01T00:00:00.000\nFell\t4942\t6400\tBarbotan\tValid\tH5\t43.950000\t-0.050000\t1790-01-01T00:00:00.000\nFell\t4944\t\tBarcelona (stone)\tValid\tOC\t41.366670\t2.166670\t1704-01-01T00:00:00.000\nFell\t4946\t3200\tBarea\tValid\tMesosiderite-A1\t42.383330\t-2.500000\t1842-01-01T00:00:00.000\nFell\t4947\t23.2\tBarnaul\tValid\tH5\t52.733330\t84.083330\t1904-01-01T00:00:00.000\nFell\t4948\t17\tBarntrup\tValid\tLL4\t52.000000\t9.100000\t1886-01-01T00:00:00.000\nFell\t4949\t4500\tBaroti\tValid\tL6\t31.616670\t76.800000\t1910-01-01T00:00:00.000\nFell\t4954\t44000\tBarwell\tValid\tL5\t52.565280\t-1.339720\t1965-01-01T00:00:00.000\nFell\t44876\t29560\tBassikounou\tValid\tH5\t15.783330\t-5.900000\t2006-01-01T00:00:00.000\nFell\t4957\t15500\tBaszkówka\tValid\tL5\t52.033330\t20.935830\t1994-01-01T00:00:00.000\nFell\t4974\t21000\tBath\tValid\tH4\t45.416670\t-98.316670\t1892-01-01T00:00:00.000\nFell\t4975\t86000\tBath Furnace\tValid\tL6\t38.250000\t-83.750000\t1902-01-01T00:00:00.000\nFell\t56133\t2900\tBattle Mountain\tValid\tL6\t40.668130\t-117.189130\t2012-01-01T00:00:00.000\nFell\t4976\t1557\tBawku\tValid\tLL5\t11.083330\t-0.183330\t1989-01-01T00:00:00.000\nFell\t4977\t611\tBaxter\tValid\tL6\t36.750000\t-93.500000\t1916-01-01T00:00:00.000\nFell\t4984\t16000\tBeardsley\tValid\tH5\t39.800000\t-101.200000\t1929-01-01T00:00:00.000\nFell\t4986\t14000\tBeaver Creek\tValid\tH5\t51.166670\t-117.333330\t1893-01-01T00:00:00.000\nFell\t4993\t794\tBeddgelert\tValid\tH5\t53.016670\t-4.100000\t1949-01-01T00:00:00.000\nFell\t5005\t375\tBells\tValid\tC2-ung\t33.600000\t-96.466670\t1961-01-01T00:00:00.000\nFell\t5009\t\tBelville\tValid\tOC\t-32.333330\t-64.866670\t1937-01-01T00:00:00.000\nFell\t5011\t3700\tBenares (a)\tValid\tLL4\t25.366670\t82.916670\t1798-01-01T00:00:00.000\nFell\t30443\t25000\tBenguerir\tValid\tLL6\t32.250000\t-8.150000\t2004-01-01T00:00:00.000\nFell\t5018\t19000\tBeni M'hira\tValid\tL6\t32.866670\t10.800000\t2001-01-01T00:00:00.000\nFell\t5021\t1770.5\tBenld\tValid\tH6\t39.083330\t-89.150000\t1938-01-01T00:00:00.000\nFell\t5023\t3880\tBenoni\tValid\tH6\t-26.166670\t28.416670\t1943-01-01T00:00:00.000\nFell\t5024\t45000\tBensour\tValid\tLL6\t30.000000\t-7.000000\t2002-01-01T00:00:00.000\nFell\t5026\t2840\tBenton\tValid\tLL6\t45.950000\t-67.550000\t1949-01-01T00:00:00.000\nFell\t48975\t270\tBerduc\tValid\tL6\t-31.910000\t-58.328330\t2008-01-01T00:00:00.000\nFell\t5028\t18000\tBéréba\tValid\tEucrite-mmict\t11.650000\t-3.650000\t1924-01-01T00:00:00.000\nFell\t5029\t1440\tBerlanguillas\tValid\tL6\t41.683330\t-3.800000\t1811-01-01T00:00:00.000\nFell\t47355\t960\tBerthoud\tValid\tEucrite-mmict\t40.305830\t-105.023250\t2004-01-01T00:00:00.000\nFell\t5032\t13.9\tBethlehem\tValid\tH\t42.533330\t-73.833330\t1859-01-01T00:00:00.000\nFell\t5034\t2000\tBeuste\tValid\tL5\t43.216670\t-0.233330\t1859-01-01T00:00:00.000\nFell\t5035\t1100\tBeyrout\tValid\tLL3.8\t33.883330\t35.500000\t1921-01-01T00:00:00.000\nFell\t5037\t18\tBhagur\tValid\tL6\t20.883330\t74.833330\t1877-01-01T00:00:00.000\nFell\t36591\t678\tBhawad\tValid\tLL6\t26.508330\t73.115280\t2002-01-01T00:00:00.000\nFell\t5039\t100\tBherai\tValid\tL6\t20.833330\t71.466670\t1893-01-01T00:00:00.000\nFell\t5040\t1047\tBhola\tValid\tLL3-6\t22.683330\t90.650000\t1940-01-01T00:00:00.000\nFell\t5041\t2500\tBholghati\tValid\tHowardite\t22.083330\t86.900000\t1905-01-01T00:00:00.000\nFell\t5042\t4000\tBialystok\tValid\tEucrite-pmict\t53.100000\t23.200000\t1827-01-01T00:00:00.000\nFell\t5043\t1900\tBielokrynitschie\tValid\tH4\t50.133330\t27.166670\t1887-01-01T00:00:00.000\nFell\t5045\t25000\tBilanga\tValid\tDiogenite\t12.450000\t-0.083330\t1999-01-01T00:00:00.000\nFell\t5051\t488.1\tBinningup\tValid\tH5\t-33.156390\t115.676390\t1984-01-01T00:00:00.000\nFell\t5056\t560\tBirni N'konni\tValid\tH4\t13.766670\t5.300000\t1923-01-01T00:00:00.000\nFell\t5059\t6000\tBishopville\tValid\tAubrite\t34.166670\t-80.283330\t1843-01-01T00:00:00.000\nFell\t5060\t1039\tBishunpur\tValid\tLL3.15\t25.383330\t82.600000\t1895-01-01T00:00:00.000\nFell\t5063\t1850\tBjelaja Zerkov\tValid\tH6\t49.783330\t30.166670\t1796-01-01T00:00:00.000\nFell\t5064\t330000\tBjurböle\tValid\tL/LL4\t60.400000\t25.800000\t1899-01-01T00:00:00.000\nFell\t5065\t705\tBlack Moshannan Park\tValid\tL5\t40.916670\t-78.083330\t1941-01-01T00:00:00.000\nFell\t5068\t2381\tBlackwell\tValid\tL5\t36.833330\t-97.333330\t1906-01-01T00:00:00.000\nFell\t5071\t5100\tBlanket\tValid\tL6\t31.833330\t-98.833330\t1909-01-01T00:00:00.000\nFell\t5072\t470\tBlansko\tValid\tH6\t49.366670\t16.633330\t1833-01-01T00:00:00.000\nFell\t5076\t67.8\tBloomington\tValid\tLL6\t40.480000\t-89.004170\t1938-01-01T00:00:00.000\nFell\t5090\t7500\tBo Xian\tValid\tLL3.9\t33.833330\t115.833330\t1977-01-01T00:00:00.000\nFell\t5093\t56\tBocas\tValid\tL6\t23.000000\t-102.000000\t1804-01-01T00:00:00.000\nFell\t5097\t8800\tBogou\tValid\tIron, IAB-MG\t12.500000\t0.700000\t1962-01-01T00:00:00.000\nFell\t5098\t256000\tBoguslavka\tValid\tIron, IIAB\t44.550000\t131.633330\t1916-01-01T00:00:00.000\nFell\t5110\t1676\tBorgo San Donino\tValid\tLL6\t44.866670\t10.050000\t1808-01-01T00:00:00.000\nFell\t5111\t8600\tBori\tValid\tL6\t21.950000\t78.033330\t1894-01-01T00:00:00.000\nFell\t5112\t1342\tBoriskino\tValid\tCM2\t54.233330\t52.483330\t1930-01-01T00:00:00.000\nFell\t5113\t7000\tBorkut\tValid\tL5\t48.150000\t24.283330\t1852-01-01T00:00:00.000\nFell\t5114\t500\tBorodino\tValid\tH5\t55.466670\t35.866670\t1812-01-01T00:00:00.000\nFell\t5117\t614\tBotschetschki\tValid\tL4\t51.333330\t33.883330\t1823-01-01T00:00:00.000\nFell\t57168\t190\tBoumdeid (2003)\tValid\tL6\t17.710670\t-11.371500\t2003-01-01T00:00:00.000\nFell\t57167\t3599\tBoumdeid (2011)\tValid\tL6\t17.174930\t-11.341330\t2011-01-01T00:00:00.000\nFell\t5121\t5460\tBovedy\tValid\tL3\t54.566670\t-6.333330\t1969-01-01T00:00:00.000\nFell\t5128\t762\tBradford Woods\tValid\tL\t40.500000\t-80.083330\t1886-01-01T00:00:00.000\nFell\t5133\t39000\tBraunau\tValid\tIron, IIAB\t50.600000\t16.300000\t1847-01-01T00:00:00.000\nFell\t5134\t1500\tBreitscheid\tValid\tH5\t50.666940\t8.183610\t1956-01-01T00:00:00.000\nFell\t5135\t7250\tBremervörde\tValid\tH/L3.9\t53.400000\t9.100000\t1855-01-01T00:00:00.000\nFell\t5140\t219\tBrient\tValid\tEucrite-pmict\t52.133330\t59.316670\t1933-01-01T00:00:00.000\nFell\t5156\t303000\tBruderheim\tValid\tL6\t53.900000\t-112.883330\t1960-01-01T00:00:00.000\nFell\t30448\t5300\tBukhara\tValid\tCV3\t39.779780\t64.600350\t2001-01-01T00:00:00.000\nFell\t5163\t2250\tBulls Run\tValid\tIron?\t\t\t1964-01-01T00:00:00.000\nFell\t48653\t324\tBunburra Rockhole\tValid\tEucrite\t-31.350000\t129.190000\t2007-01-01T00:00:00.000\nFell\t5165\t357\tBununu\tValid\tHowardite\t10.016670\t9.583330\t1942-01-01T00:00:00.000\nFell\t5169\t120000\tBur-Gheluai\tValid\tH5\t5.000000\t48.000000\t1919-01-01T00:00:00.000\nFell\t5175\t1504\tBurnwell\tValid\tH4-an\t37.621940\t-82.237220\t1990-01-01T00:00:00.000\nFell\t5177\t25000\tBursa\tValid\tL6\t40.200000\t29.233330\t1946-01-01T00:00:00.000\nFell\t5178\t5000\tBuschhof\tValid\tL6\t46.450000\t25.783330\t1863-01-01T00:00:00.000\nFell\t5181\t1500\tBustee\tValid\tAubrite\t26.783330\t82.833330\t1852-01-01T00:00:00.000\nFell\t5183\t29000\tButsura\tValid\tH6\t27.083330\t84.083330\t1861-01-01T00:00:00.000\nFell\t48654\t41000\tBuzzard Coulee\tValid\tH4\t52.996000\t-109.848170\t2008-01-01T00:00:00.000\nFell\t5185\t25000\tCabezo de Mayo\tValid\tL/LL6\t37.983330\t-1.166670\t1870-01-01T00:00:00.000\nFell\t5186\t48500\tCabin Creek\tValid\tIron, IIIAB\t35.500000\t-93.500000\t1886-01-01T00:00:00.000\nFell\t5187\t212\tCacak\tValid\tOC\t43.838890\t20.333330\t1919-01-01T00:00:00.000\nFell\t45976\t478\tCali\tValid\tH/L4\t3.405000\t-76.510000\t2007-01-01T00:00:00.000\nFell\t5200\t2400\tCalivo\tValid\tStone-uncl\t11.750000\t122.333330\t1916-01-01T00:00:00.000\nFell\t5249\t23680\tCampos Sales\tValid\tL5\t-7.033330\t-40.166670\t1991-01-01T00:00:00.000\nFell\t5250\t4000\tÇanakkale\tValid\tL6\t39.800000\t26.600000\t1964-01-01T00:00:00.000\nFell\t5251\t945\tCañellas\tValid\tH4\t41.250000\t1.666670\t1861-01-01T00:00:00.000\nFell\t5252\t34000\tCangas de Onis\tValid\tH5\t43.383330\t-5.150000\t1866-01-01T00:00:00.000\nFell\t5253\t1400\tCanon City\tValid\tH6\t38.470280\t-105.241390\t1973-01-01T00:00:00.000\nFell\t5260\t2300\tCape Girardeau\tValid\tH6\t37.266670\t-89.583330\t1846-01-01T00:00:00.000\nFell\t5264\t750\tCapilla del Monte\tValid\tH6\t-30.883330\t-64.550000\t1934-01-01T00:00:00.000\nFell\t45817\t342\tCarancas\tValid\tH4-5\t-16.664440\t-69.043890\t2007-01-01T00:00:00.000\nFell\t5265\t8\tCaratash\tValid\tLL6\t38.500000\t27.000000\t1902-01-01T00:00:00.000\nFell\t5291\t7300\tCastalia\tValid\tH5\t36.083330\t-78.066670\t1874-01-01T00:00:00.000\nFell\t5292\t\tCastel Berardenga\tValid\tStone-uncl\t43.350000\t11.500000\t1791-01-01T00:00:00.000\nFell\t5293\t94\tCastine\tValid\tL6\t44.383330\t-68.750000\t1848-01-01T00:00:00.000\nFell\t5295\t15000\tCastrovillari\tValid\tStone-uncl\t39.800000\t16.200000\t1583-01-01T00:00:00.000\nFell\t5296\t1360\tCaswell County\tValid\tOC\t36.500000\t-79.250000\t1810-01-01T00:00:00.000\nFell\t5306\t1025\tCeniceros\tValid\tL3.7\t26.466670\t-105.233330\t1988-01-01T00:00:00.000\nFell\t5307\t45.6\tCenterville\tValid\tH5\t43.200000\t-96.916670\t1956-01-01T00:00:00.000\nFell\t5308\t6460\tCereseto\tValid\tH5\t45.083330\t8.300000\t1840-01-01T00:00:00.000\nFell\t5313\t3700\tChadong\tValid\tL6\t28.533330\t109.316670\t1998-01-01T00:00:00.000\nFell\t5314\t0.5\tChail\tValid\tH6\t25.366670\t81.666670\t1814-01-01T00:00:00.000\nFell\t5315\t8200\tChainpur\tValid\tLL3.4\t25.850000\t83.483330\t1907-01-01T00:00:00.000\nFell\t5316\t18300\tChajari\tValid\tL5\t-30.783330\t-58.050000\t1933-01-01T00:00:00.000\nFell\t5320\t8800\tChandakapur\tValid\tL5\t20.266670\t76.016670\t1838-01-01T00:00:00.000\nFell\t5321\t1100\tChandpur\tValid\tL6\t27.283330\t79.050000\t1885-01-01T00:00:00.000\nFell\t5322\t1810\tChangde\tValid\tH5\t29.083330\t111.750000\t1977-01-01T00:00:00.000\nFell\t5325\t31500\tChantonnay\tValid\tL6\t46.683330\t1.050000\t1812-01-01T00:00:00.000\nFell\t5328\t4300\tCharlotte\tValid\tIron, IVA\t36.166670\t-87.333330\t1835-01-01T00:00:00.000\nFell\t5329\t27000\tCharsonville\tValid\tH6\t47.933330\t1.566670\t1810-01-01T00:00:00.000\nFell\t5330\t12000\tCharwallas\tValid\tH6\t29.483330\t75.500000\t1834-01-01T00:00:00.000\nFell\t5331\t4000\tChassigny\tValid\tMartian (chassignite)\t47.716670\t5.366670\t1815-01-01T00:00:00.000\nFell\t5332\t30000\tChâteau-Renard\tValid\tL6\t47.933330\t2.916670\t1841-01-01T00:00:00.000\nFell\t5334\t2945\tChaves\tValid\tHowardite\t41.933330\t-7.466670\t1925-01-01T00:00:00.000\nFell\t5338\t2936\tChela\tValid\tH4\t-3.666670\t32.500000\t1988-01-01T00:00:00.000\nFell\t57165\t100000\tChelyabinsk\tValid\tLL5\t54.816670\t61.116670\t2013-01-01T00:00:00.000\nFell\t47347\t100000\tChergach \tValid\tH5\t23.696390\t-5.014720\t2007-01-01T00:00:00.000\nFell\t5339\t6000\tChernyi Bor\tValid\tH4\t53.700000\t30.100000\t1964-01-01T00:00:00.000\nFell\t5340\t8400\tCherokee Springs\tValid\tLL6\t35.033330\t-81.883330\t1933-01-01T00:00:00.000\nFell\t5341\t705\tChervettaz\tValid\tL5\t46.550000\t6.816670\t1901-01-01T00:00:00.000\nFell\t5342\t1700\tChervony Kut\tValid\tEucrite-mmict\t50.833330\t34.000000\t1939-01-01T00:00:00.000\nFell\t5344\t72\tChetrinahatti\tValid\tStone-uncl\t14.500000\t76.500000\t1880-01-01T00:00:00.000\nFell\t5345\t367\tChiang Khan\tValid\tH6\t17.900000\t101.633330\t1981-01-01T00:00:00.000\nFell\t5349\t303\tChicora\tValid\tLL6\t40.933330\t-79.733330\t1938-01-01T00:00:00.000\nFell\t5355\t3920\tChisenga\tValid\tIron, IIIAB\t-10.059440\t33.395000\t1988-01-01T00:00:00.000\nFell\t5356\t\tChitado\tValid\tL6\t-17.350000\t13.966670\t1966-01-01T00:00:00.000\nFell\t5357\t4000\tChitenay\tValid\tL6\t47.470830\t0.976670\t1978-01-01T00:00:00.000\nFell\t5364\t1600\tCilimus\tValid\tL5\t-6.950000\t108.100000\t1979-01-01T00:00:00.000\nFell\t5374\t1455\tClaxton\tValid\tL6\t32.102500\t-81.872780\t1984-01-01T00:00:00.000\nFell\t5383\t48.6\tClohars\tValid\tL4\t\t\t1822-01-01T00:00:00.000\nFell\t5395\t104000\tColby (Wisconsin)\tValid\tL6\t44.900000\t-90.283330\t1917-01-01T00:00:00.000\nFell\t5397\t5200\tCold Bokkeveld\tValid\tCM2\t-33.133330\t19.383330\t1838-01-01T00:00:00.000\nFell\t5401\t469\tColeman\tValid\tL6\t43.761110\t-84.507780\t1994-01-01T00:00:00.000\nFell\t5403\t5000\tCollescipoli\tValid\tH5\t42.533330\t12.616670\t1890-01-01T00:00:00.000\nFell\t5418\t20350\tConquista\tValid\tH4\t-19.850000\t-47.550000\t1965-01-01T00:00:00.000\nFell\t5451\t1200\tCosina\tValid\tH5\t21.166670\t-100.866670\t1844-01-01T00:00:00.000\nFell\t5465\t1460\tCranganore\tValid\tL6\t10.200000\t76.266670\t1917-01-01T00:00:00.000\nFell\t5470\t78.400000000000006\tCrescent\tValid\tCM2\t35.950000\t-97.583330\t1936-01-01T00:00:00.000\nFell\t5474\t3650\tCronstad\tValid\tH5\t-27.700000\t27.300000\t1877-01-01T00:00:00.000\nFell\t5476\t167\tCross Roads\tValid\tH5\t35.633330\t-78.133330\t1892-01-01T00:00:00.000\nFell\t5477\t4255\tCrumlin\tValid\tL5\t54.616670\t-6.216670\t1902-01-01T00:00:00.000\nFell\t5496\t17000\tCumberland Falls\tValid\tAubrite\t36.833330\t-84.350000\t1919-01-01T00:00:00.000\nFell\t5500\t6000\tCynthiana\tValid\tL/LL4\t38.400000\t-84.250000\t1877-01-01T00:00:00.000\nFell\t5504\t18000\tDahmani\tValid\tLL6\t35.616670\t8.833330\t1981-01-01T00:00:00.000\nFell\t5511\t5650\tDandapur\tValid\tL6\t26.916670\t83.966670\t1878-01-01T00:00:00.000\nFell\t5513\t1064\tDaniel's Kuil\tValid\tEL6\t-28.200000\t24.566670\t1868-01-01T00:00:00.000\nFell\t5514\t2000\tDanville\tValid\tL6\t34.400000\t-87.066670\t1868-01-01T00:00:00.000\nFell\t6603\t100\tDarmstadt\tValid\tH5\t49.866670\t8.650000\t1804-01-01T00:00:00.000\nFell\t6604\t7000\tDashoguz\tValid\tH5\t41.984440\t59.685000\t1998-01-01T00:00:00.000\nFell\t51559\t6580\tDaule\tValid\tL5\t-1.870890\t-79.957560\t2008-01-01T00:00:00.000\nFell\t6621\t340\tDe Cewsville\tValid\tH6\t43.000000\t-80.000000\t1887-01-01T00:00:00.000\nFell\t6634\t28\tDeal\tValid\tL6\t40.250000\t-74.000000\t1829-01-01T00:00:00.000\nFell\t6642\t0.8\tDelhi\tValid\tL5\t28.566670\t77.250000\t1897-01-01T00:00:00.000\nFell\t6649\t16400\tDemina\tValid\tL6\t51.466670\t84.766670\t1911-01-01T00:00:00.000\nFell\t6660\t230\tDenver\tValid\tL6\t39.782500\t-104.930560\t1967-01-01T00:00:00.000\nFell\t6664\t12500\tDergaon\tValid\tH5\t26.683330\t93.866670\t2001-01-01T00:00:00.000\nFell\t6693\t25400\tDesuri\tValid\tH6\t25.733330\t73.616670\t1962-01-01T00:00:00.000\nFell\t6694\t12000\tDevgaon\tValid\tH3.8\t19.000000\t81.000000\t2001-01-01T00:00:00.000\nFell\t6696\t1140\tDevri-Khera\tValid\tL6\t24.225000\t76.525000\t1994-01-01T00:00:00.000\nFell\t6698\t45000\tDhajala\tValid\tH3.8\t22.377780\t71.427220\t1976-01-01T00:00:00.000\nFell\t6699\t1800\tDharwar\tValid\tOC\t14.883330\t75.600000\t1848-01-01T00:00:00.000\nFell\t7640\t32000\tDhurmsala\tValid\tLL6\t32.233330\t76.466670\t1860-01-01T00:00:00.000\nFell\t47350\t3396\tDidim\tValid\tH3-5\t37.351720\t27.329970\t2007-01-01T00:00:00.000\nFell\t7642\t1000\tDiep River\tValid\tL6\t-33.750000\t18.566670\t1906-01-01T00:00:00.000\nFell\t7649\t400\tDistrito Quebracho\tValid\tH4\t-31.883330\t-60.466670\t1957-01-01T00:00:00.000\nFell\t7652\t166000\tDjati-Pengilon\tValid\tH6\t-7.500000\t111.500000\t1884-01-01T00:00:00.000\nFell\t7656\t3950\tDjermaia\tValid\tH\t12.733330\t15.050000\t1961-01-01T00:00:00.000\nFell\t7657\t10000\tDjoumine\tValid\tH5-6\t36.950000\t9.550000\t1999-01-01T00:00:00.000\nFell\t7658\t3840\tDokachi\tValid\tH5\t23.500000\t90.333330\t1903-01-01T00:00:00.000\nFell\t7659\t1600\tDolgovoli\tValid\tL6\t50.750000\t25.300000\t1864-01-01T00:00:00.000\nFell\t7661\t438\tDomanitch\tValid\tL5\t40.000000\t29.000000\t1907-01-01T00:00:00.000\nFell\t7706\t128800\tDong Ujimqin Qi\tValid\tMesosiderite\t45.500000\t119.033330\t1995-01-01T00:00:00.000\nFell\t7707\t230\tDonga Kohrod\tValid\tH6\t21.866670\t82.450000\t1899-01-01T00:00:00.000\nFell\t7708\t5500\tDongtai\tValid\tLL6\t32.916670\t120.783330\t1970-01-01T00:00:00.000\nFell\t7718\t3891\tDoroninsk\tValid\tH5-7\t51.200000\t112.300000\t1805-01-01T00:00:00.000\nFell\t7722\t1250\tDosso\tValid\tL6\t13.050000\t3.166670\t1962-01-01T00:00:00.000\nFell\t7723\t1161\tDouar Mghila\tValid\tLL6\t32.333330\t-6.300000\t1932-01-01T00:00:00.000\nFell\t7725\t642\tDowa\tValid\tStone-uncl\t-13.666670\t33.916670\t1976-01-01T00:00:00.000\nFell\t7728\t5000\tDrake Creek\tValid\tL6\t36.400000\t-86.500000\t1827-01-01T00:00:00.000\nFell\t7731\t47700\tDresden (Ontario)\tValid\tH6\t42.520000\t-82.260000\t1939-01-01T00:00:00.000\nFell\t7736\t1900\tDubrovnik\tValid\tL3-6\t42.458330\t18.441670\t1951-01-01T00:00:00.000\nFell\t7743\t30\tDunbogan\tValid\tL6\t-31.666670\t152.833330\t1999-01-01T00:00:00.000\nFell\t7745\t2270\tDundrum\tValid\tH5\t52.550000\t-8.033330\t1865-01-01T00:00:00.000\nFell\t7749\t\tDunhua\tValid\tStone-uncl\t43.333330\t128.250000\t1976-01-01T00:00:00.000\nFell\t7750\t13200\tDurala\tValid\tL6\t30.300000\t76.633330\t1815-01-01T00:00:00.000\nFell\t7752\t577\tDuruma\tValid\tL6\t-4.000000\t39.500000\t1853-01-01T00:00:00.000\nFell\t7754\t2117\tDuwun\tValid\tL6\t33.433330\t127.266670\t1943-01-01T00:00:00.000\nFell\t7755\t3230\tDwaleni\tValid\tH4-6\t-27.200000\t31.316670\t1970-01-01T00:00:00.000\nFell\t7757\t300\tDyalpur\tValid\tUreilite\t26.250000\t82.000000\t1872-01-01T00:00:00.000\nFell\t7758\t188\tDyarrl Island\tValid\tMesosiderite-A1\t-3.000000\t151.000000\t1933-01-01T00:00:00.000\nFell\t7760\t10000\tEagle\tValid\tEL6\t40.781670\t-96.471670\t1947-01-01T00:00:00.000\nFell\t7774\t2400\tEhole\tValid\tH5\t-17.300000\t15.833330\t1961-01-01T00:00:00.000\nFell\t7775\t3000\tEichstädt\tValid\tH5\t48.900000\t11.216670\t1785-01-01T00:00:00.000\nFell\t7776\t3336\tEkeby\tValid\tH4\t56.033330\t13.000000\t1939-01-01T00:00:00.000\nFell\t7777\t840\tEkh Khera\tValid\tH6\t28.266670\t78.783330\t1916-01-01T00:00:00.000\nFell\t7807\t10000\tEl Idrissia\tValid\tL6\t34.416670\t3.250000\t1989-01-01T00:00:00.000\nFell\t45977\t17226\tEl Paso de Aguila\tValid\tH5\t25.370000\t-97.370000\t1977-01-01T00:00:00.000\nFell\t7819\t5000\tEl Tigre\tValid\tL6\t19.967220\t-103.051670\t1993-01-01T00:00:00.000\nFell\t7822\t680.5\tElbert\tValid\tLL6\t39.246670\t-104.588170\t1998-01-01T00:00:00.000\nFell\t7823\t107000\tElbogen\tValid\tIron, IID\t50.183330\t12.733330\t1400-01-01T00:00:00.000\nFell\t7824\t54640\tElenovka\tValid\tL5\t47.833330\t37.666670\t1951-01-01T00:00:00.000\nFell\t10019\t1470\tEllemeet\tValid\tDiogenite\t51.750000\t4.000000\t1925-01-01T00:00:00.000\nFell\t10033\t127\tEmmaville\tValid\tEucrite-mmict\t-29.466670\t151.616670\t1900-01-01T00:00:00.000\nFell\t10038\t8000\tEnshi\tValid\tH5\t30.300000\t109.500000\t1974-01-01T00:00:00.000\nFell\t10039\t127000\tEnsisheim\tValid\tLL6\t47.866670\t7.350000\t1492-01-01T00:00:00.000\nFell\t10041\t277\tÉpinal\tValid\tH5\t48.183330\t6.466670\t1822-01-01T00:00:00.000\nFell\t10042\t113\tErakot\tValid\tCM2\t19.033330\t81.891670\t1940-01-01T00:00:00.000\nFell\t10043\t107.2\tErevan\tValid\tHowardite\t40.300000\t44.500000\t1911-01-01T00:00:00.000\nFell\t10044\t20000\tErgheo\tValid\tL5\t1.166670\t44.166670\t1889-01-01T00:00:00.000\nFell\t10049\t2250\tErxleben\tValid\tH6\t52.216670\t11.250000\t1812-01-01T00:00:00.000\nFell\t10051\t1500\tEsnandes\tValid\tL6\t46.250000\t-1.100000\t1837-01-01T00:00:00.000\nFell\t10055\t500\tEssebi\tValid\tC2-ung\t2.883330\t30.833330\t1957-01-01T00:00:00.000\nFell\t10059\t320000\tEstherville\tValid\tMesosiderite-A3/4\t43.416670\t-94.833330\t1879-01-01T00:00:00.000\nFell\t10074\t89400\tFarmington\tValid\tL5\t39.750000\t-97.033330\t1890-01-01T00:00:00.000\nFell\t10075\t56000\tFarmville\tValid\tH4\t35.550000\t-77.533330\t1934-01-01T00:00:00.000\nFell\t10078\t1500\tFavars\tValid\tH5\t44.383330\t2.816670\t1844-01-01T00:00:00.000\nFell\t10079\t2360\tFayetteville\tValid\tH4\t36.050000\t-94.166670\t1934-01-01T00:00:00.000\nFell\t10080\t380\tFeid Chair\tValid\tH4\t36.883330\t8.450000\t1875-01-01T00:00:00.000\nFell\t10081\t3200\tFelix\tValid\tCO3.3\t32.533330\t-87.166670\t1900-01-01T00:00:00.000\nFell\t10086\t82\tFenghsien-Ku\tValid\tH5\t34.600000\t116.750000\t1924-01-01T00:00:00.000\nFell\t10088\t220\tFerguson\tValid\tOC\t36.100000\t-81.416670\t1889-01-01T00:00:00.000\nFell\t10091\t10200\tFermo\tValid\tH3-5\t43.181110\t13.753330\t1996-01-01T00:00:00.000\nFell\t10107\t17600\tFisher\tValid\tL6\t47.816670\t-96.850000\t1894-01-01T00:00:00.000\nFell\t10111\t3640\tFlorence\tValid\tH3\t30.833330\t-97.766670\t1922-01-01T00:00:00.000\nFell\t10119\t152000\tForest City\tValid\tH5\t43.250000\t-93.666670\t1890-01-01T00:00:00.000\nFell\t10120\t26000\tForest Vale\tValid\tH4\t-33.350000\t146.858330\t1942-01-01T00:00:00.000\nFell\t10123\t6067\tForksville\tValid\tL6\t36.783330\t-78.083330\t1924-01-01T00:00:00.000\nFell\t10163\t240\tForsbach\tValid\tH6\t50.950000\t7.316670\t1900-01-01T00:00:00.000\nFell\t10164\t16300\tForsyth\tValid\tL6\t33.016670\t-83.966670\t1829-01-01T00:00:00.000\nFell\t10166\t\tFort Flatters\tValid\tStone-uncl\t28.250000\t7.000000\t1944-01-01T00:00:00.000\nFell\t10177\t650\tFrankfort (stone)\tValid\tHowardite\t34.483330\t-87.833330\t1868-01-01T00:00:00.000\nFell\t52412\t23000\tFuhe\tValid\tL5\t31.475560\t113.566940\t1945-01-01T00:00:00.000\nFell\t10836\t11620\tFukutomi\tValid\tL5\t33.183330\t130.200000\t1882-01-01T00:00:00.000\nFell\t10838\t\tFünen\tValid\tStone-uncl\t55.333330\t10.333330\t1654-01-01T00:00:00.000\nFell\t10839\t4000\tFuttehpur\tValid\tL6\t25.950000\t80.816670\t1822-01-01T00:00:00.000\nFell\t10840\t2500\tFuyang\tValid\tStone-uncl\t32.900000\t115.900000\t1977-01-01T00:00:00.000\nFell\t10846\t132.69999999999999\tGalapian\tValid\tH6\t44.300000\t0.400000\t1826-01-01T00:00:00.000\nFell\t10848\t36.1\tGalim (a)\tValid\tLL6\t7.050000\t12.433330\t1952-01-01T00:00:00.000\nFell\t10849\t28\tGalim (b)\tValid\tEH3/4-an\t7.050000\t12.433330\t1952-01-01T00:00:00.000\nFell\t10850\t5000\tGalkiv\tValid\tH4\t51.683330\t30.783330\t1995-01-01T00:00:00.000\nFell\t10851\t6400\tGambat\tValid\tL6\t27.350000\t68.533330\t1897-01-01T00:00:00.000\nFell\t10854\t\tGao-Guenie\tValid\tH5\t11.650000\t-2.183330\t1960-01-01T00:00:00.000\nFell\t10860\t380\tGarhi Yasin\tValid\tIron, IIE\t27.883330\t68.533330\t1917-01-01T00:00:00.000\nFell\t10861\t102\tGarland\tValid\tDiogenite-pm\t41.683330\t-112.133330\t1950-01-01T00:00:00.000\nFell\t44882\t4162\tGashua\tValid\tL6\t12.850000\t11.033330\t1984-01-01T00:00:00.000\nFell\t10866\t\tGasseltepaoua\tValid\tH5\t14.150830\t-2.041670\t2000-01-01T00:00:00.000\nFell\t10870\t725\tGeidam\tValid\tH5\t12.916670\t11.916670\t1950-01-01T00:00:00.000\nFell\t10914\t14290\tGifu\tValid\tL6\t35.533330\t136.883330\t1909-01-01T00:00:00.000\nFell\t10917\t18000\tGirgenti\tValid\tL6\t37.316670\t13.566670\t1853-01-01T00:00:00.000\nFell\t10919\t480\tGit-Git\tValid\tL6\t9.600000\t9.916670\t1947-01-01T00:00:00.000\nFell\t10923\t670\tGlanerbrug\tValid\tL/LL5\t52.200000\t6.866670\t1990-01-01T00:00:00.000\nFell\t10924\t1303\tGlanggang\tValid\tH5-6\t-7.250000\t107.700000\t1939-01-01T00:00:00.000\nFell\t10926\t152000\tGlasatovo\tValid\tH4\t57.350000\t37.616670\t1918-01-01T00:00:00.000\nFell\t10930\t767\tGlatton\tValid\tL6\t52.459720\t-0.300000\t1991-01-01T00:00:00.000\nFell\t10936\t1750\tGnadenfrei\tValid\tH5\t50.666670\t16.766670\t1879-01-01T00:00:00.000\nFell\t10948\t1600\tGopalpur\tValid\tH6\t24.233330\t89.050000\t1865-01-01T00:00:00.000\nFell\t10949\t3618\tGorlovka\tValid\tH3.7\t48.283330\t38.083330\t1974-01-01T00:00:00.000\nFell\t10956\t9000\tGranes\tValid\tL6\t42.900000\t2.250000\t1964-01-01T00:00:00.000\nFell\t11196\t45.5\tGrefsheim\tValid\tL5\t60.666670\t11.000000\t1976-01-01T00:00:00.000\nFell\t50911\t215\tGrimsby\tValid\tH5\t43.200000\t-79.616670\t2009-01-01T00:00:00.000\nFell\t11206\t3500\tGrosnaja\tValid\tCV3\t43.666670\t45.383330\t1861-01-01T00:00:00.000\nFell\t11207\t10500\tGross-Divina\tValid\tH5\t49.266670\t18.716670\t1837-01-01T00:00:00.000\nFell\t11208\t8000\tGrossliebenthal\tValid\tL6\t46.350000\t30.583330\t1881-01-01T00:00:00.000\nFell\t11426\t1000\tGrüneberg\tValid\tH4\t51.933330\t15.500000\t1841-01-01T00:00:00.000\nFell\t11429\t690\tGrzempach\tValid\tH5\t52.866670\t16.633330\t1910-01-01T00:00:00.000\nFell\t11432\t22000\tGualeguaychú\tValid\tH6\t-33.000000\t-58.616670\t1932-01-01T00:00:00.000\nFell\t11435\t2910\tGuangmingshan\tValid\tH5\t39.804170\t122.763890\t1996-01-01T00:00:00.000\nFell\t11436\t\tGuangnan\tValid\tL6\t24.100000\t105.000000\t1983-01-01T00:00:00.000\nFell\t11437\t1900\tGuangrao\tValid\tL6\t37.100000\t118.400000\t1980-01-01T00:00:00.000\nFell\t11439\t39000\tGuareña\tValid\tH6\t38.733330\t-6.016670\t1892-01-01T00:00:00.000\nFell\t11440\t1915\tGuêa\tValid\tStone-uncl\t43.766670\t20.233330\t1891-01-01T00:00:00.000\nFell\t11442\t288\tGuibga\tValid\tL5\t13.500000\t-0.683330\t1972-01-01T00:00:00.000\nFell\t11443\t968\tGuidder\tValid\tLL5\t9.916670\t13.983330\t1949-01-01T00:00:00.000\nFell\t11448\t2449\tGujargaon\tValid\tH5\t22.983330\t76.050000\t1982-01-01T00:00:00.000\nFell\t11449\t100000\tGujba\tValid\tCBa\t11.491670\t11.658330\t1984-01-01T00:00:00.000\nFell\t11450\t5700\tGumoschnik\tValid\tH5\t42.900000\t24.700000\t1904-01-01T00:00:00.000\nFell\t11464\t28\tGurram Konda\tValid\tL6\t13.783330\t78.566670\t1814-01-01T00:00:00.000\nFell\t11465\t34650\tGursum\tValid\tH4/5\t9.366670\t42.416670\t1981-01-01T00:00:00.000\nFell\t11466\t1000\tGütersloh\tValid\tH3/4\t51.916670\t8.383330\t1851-01-01T00:00:00.000\nFell\t11467\t1320\tGyokukei\tValid\tOC\t35.000000\t127.500000\t1930-01-01T00:00:00.000\nFell\t11468\t0.2\tHachi-oji\tValid\tH?\t35.650000\t139.333330\t1817-01-01T00:00:00.000\nFell\t11472\t9000\tHainaut\tValid\tH3-6\t50.316670\t3.733330\t1934-01-01T00:00:00.000\nFell\t11479\t1456\tHallingeberg\tValid\tL3.4\t57.816670\t16.233330\t1944-01-01T00:00:00.000\nFell\t11485\t3710\tHamlet\tValid\tLL4\t41.383330\t-86.600000\t1959-01-01T00:00:00.000\nFell\t11824\t1000\tHaraiya\tValid\tEucrite-mmict\t26.800000\t82.533330\t1878-01-01T00:00:00.000\nFell\t11829\t315\tHaripura\tValid\tCM2\t28.383330\t75.783330\t1921-01-01T00:00:00.000\nFell\t11830\t8360\tHarleton\tValid\tL6\t32.675000\t-94.511670\t1961-01-01T00:00:00.000\nFell\t11842\t680\tHarrison County\tValid\tL6\t38.250000\t-86.166670\t1859-01-01T00:00:00.000\nFell\t11848\t1110.5999999999999\tHashima\tValid\tH4\t35.294500\t136.700330\t1910-01-01T00:00:00.000\nFell\t11852\t1250\tHassi-Jekna\tValid\tIron, IAB-sHL\t28.950000\t0.816670\t1890-01-01T00:00:00.000\nFell\t11855\t29000\tHatford\tValid\tStone-uncl\t51.650000\t-1.516670\t1628-01-01T00:00:00.000\nFell\t11859\t1544\tHaverö\tValid\tUreilite\t60.245560\t22.061940\t1971-01-01T00:00:00.000\nFell\t11869\t3500\tHedeskoga\tValid\tH5\t55.466670\t13.783330\t1922-01-01T00:00:00.000\nFell\t11870\t6100\tHedjaz\tValid\tL3.7-6\t27.333330\t35.666670\t1910-01-01T00:00:00.000\nFell\t11875\t1000\tHeredia\tValid\tH5\t10.000000\t-84.100000\t1857-01-01T00:00:00.000\nFell\t11878\t20000\tHessle\tValid\tH5\t59.850000\t17.666670\t1869-01-01T00:00:00.000\nFell\t11883\t750\tHigashi-koen\tValid\tH5\t33.600000\t130.433330\t1897-01-01T00:00:00.000\nFell\t11884\t4500\tHigh Possil\tValid\tL6\t55.900000\t-4.233330\t1804-01-01T00:00:00.000\nFell\t11889\t414\tHiroshima\tValid\tH5\t34.450000\t132.383330\t2003-01-01T00:00:00.000\nFell\t44714\t167.7\tHoima\tValid\tH6\t1.345000\t31.472780\t2003-01-01T00:00:00.000\nFell\t11893\t305.5\tHökmark\tValid\tL4\t64.433330\t21.200000\t1954-01-01T00:00:00.000\nFell\t11894\t220000\tHolbrook\tValid\tL/LL6\t34.900000\t-110.183330\t1912-01-01T00:00:00.000\nFell\t11895\t1415\tHoletta\tValid\tStone-uncl\t9.066670\t38.416670\t1923-01-01T00:00:00.000\nFell\t11901\t230000\tHomestead\tValid\tL5\t41.800000\t-91.866670\t1875-01-01T00:00:00.000\nFell\t11904\t2420\tHonolulu\tValid\tL5\t21.300000\t-157.866670\t1825-01-01T00:00:00.000\nFell\t11913\t180\tHotse\tValid\tL6\t35.666670\t115.500000\t1956-01-01T00:00:00.000\nFell\t11915\t266.10000000000002\tHoxie\tValid\tOC\t39.350000\t-100.450000\t1963-01-01T00:00:00.000\nFell\t11916\t49000\tHraschina\tValid\tIron, IID\t46.100000\t16.333330\t1751-01-01T00:00:00.000\nFell\t54719\t1600\tHuaxi\tValid\tH5\t26.464690\t106.632410\t2010-01-01T00:00:00.000\nFell\t11986\t112\tHungen\tValid\tH6\t50.300000\t8.916670\t1877-01-01T00:00:00.000\nFell\t11989\t14000\tHvittis\tValid\tEL6\t61.183330\t22.683330\t1901-01-01T00:00:00.000\nFell\t11992\t2000\tIbbenbüren\tValid\tDiogenite\t52.283330\t7.700000\t1870-01-01T00:00:00.000\nFell\t11993\t2500\tIbitira\tValid\tEucrite-mmict\t-20.000000\t-45.000000\t1957-01-01T00:00:00.000\nFell\t11994\t\tIbrisim\tValid\tOC\t38.000000\t35.000000\t1949-01-01T00:00:00.000\nFell\t11995\t3973\tIchkala\tValid\tH6\t58.200000\t82.933330\t1936-01-01T00:00:00.000\nFell\t12000\t3457\tIdutywa\tValid\tH5\t-32.100000\t28.333330\t1956-01-01T00:00:00.000\nFell\t12003\t1200\tIguaracu\tValid\tH5\t-23.200000\t-51.833330\t1977-01-01T00:00:00.000\nFell\t12004\t7330\tIjopega\tValid\tH6\t-6.033330\t145.366670\t1975-01-01T00:00:00.000\nFell\t12027\t27000\tIndarch\tValid\tEH4\t39.750000\t46.666670\t1891-01-01T00:00:00.000\nFell\t12028\t880\tIndependence\tValid\tL6\t39.083330\t-94.400000\t1917-01-01T00:00:00.000\nFell\t12037\t3000\tInner Mongolia\tValid\tL6\t41.000000\t112.000000\t1963-01-01T00:00:00.000\nFell\t12039\t4576\tInnisfree\tValid\tL5\t53.415000\t-111.337500\t1977-01-01T00:00:00.000\nFell\t12043\t7000\tIpiranga\tValid\tH6\t-25.500000\t-54.500000\t1972-01-01T00:00:00.000\nFell\t12049\t1300\tIshinga\tValid\tH\t-8.933330\t33.800000\t1954-01-01T00:00:00.000\nFell\t12053\t3050\tIsthilart\tValid\tH5\t-31.183330\t-57.950000\t1928-01-01T00:00:00.000\nFell\t12056\t2024\tItapicuru-Mirim\tValid\tH5\t-3.400000\t-44.333330\t1879-01-01T00:00:00.000\nFell\t12058\t4720\tItqiy\tValid\tEH7-an\t26.590830\t-12.952170\t1990-01-01T00:00:00.000\nFell\t12063\t704.5\tIvuna\tValid\tCI1\t-8.416670\t32.433330\t1938-01-01T00:00:00.000\nFell\t12065\t48000\tJackalsfontein\tValid\tL6\t-32.500000\t21.900000\t1903-01-01T00:00:00.000\nFell\t12067\t973\tJajh deh Kot Lalu\tValid\tEL6\t26.750000\t68.416670\t1926-01-01T00:00:00.000\nFell\t12068\t700\tJalanash\tValid\tUreilite\t\t\t1990-01-01T00:00:00.000\nFell\t12069\t1967\tJalandhar\tValid\tIron\t31.000000\t75.000000\t1621-01-01T00:00:00.000\nFell\t12072\t22\tJamkheir\tValid\tH6\t18.750000\t75.333330\t1866-01-01T00:00:00.000\nFell\t12074\t20500\tJartai\tValid\tL6\t39.700000\t105.800000\t1979-01-01T00:00:00.000\nFell\t12078\t34000\tJelica\tValid\tLL6\t43.833330\t20.441670\t1889-01-01T00:00:00.000\nFell\t12079\t450\tJemlapur\tValid\tL6\t\t\t1901-01-01T00:00:00.000\nFell\t51589\t3667\tJesenice\tValid\tL6\t46.421370\t14.052170\t2009-01-01T00:00:00.000\nFell\t12085\t5900\tJhung\tValid\tL5\t31.300000\t72.383330\t1873-01-01T00:00:00.000\nFell\t12086\t222\tJiange\tValid\tH5\t31.916670\t104.916670\t1964-01-01T00:00:00.000\nFell\t12087\t600000\tJianshi\tValid\tIron, IIIAB\t30.808330\t109.500000\t1890-01-01T00:00:00.000\nFell\t12171\t4000000\tJilin\tValid\tH5\t44.050000\t126.166670\t1976-01-01T00:00:00.000\nFell\t47362\t100\tJodiya\tValid\tL5\t22.680000\t70.313330\t2006-01-01T00:00:00.000\nFell\t12173\t30\tJodzie\tValid\tHowardite\t55.700000\t24.400000\t1877-01-01T00:00:00.000\nFell\t12198\t40300\tJohnstown\tValid\tDiogenite\t40.350000\t-104.900000\t1924-01-01T00:00:00.000\nFell\t12199\t483\tJolomba\tValid\tLL6\t-11.850000\t15.833330\t1974-01-01T00:00:00.000\nFell\t12202\t5000\tJonzac\tValid\tEucrite-mmict\t45.433330\t-0.450000\t1819-01-01T00:00:00.000\nFell\t12203\t100000\tJuancheng\tValid\tH5\t35.500000\t115.416670\t1997-01-01T00:00:00.000\nFell\t12207\t680\tJudesegeri\tValid\tH6\t12.850000\t76.800000\t1876-01-01T00:00:00.000\nFell\t12209\t32490\tJumapalo\tValid\tL6\t-7.716670\t111.200000\t1984-01-01T00:00:00.000\nFell\t12210\t950\tJunan\tValid\tL6\t35.200000\t118.800000\t1976-01-01T00:00:00.000\nFell\t12213\t25250\tJuromenha\tValid\tIron, IIIAB\t38.740280\t-7.270000\t1968-01-01T00:00:00.000\nFell\t12214\t91000\tJuvinas\tValid\tEucrite-mmict\t44.716670\t4.300000\t1821-01-01T00:00:00.000\nFell\t12218\t3000\tKaba\tValid\tCV3\t47.350000\t21.300000\t1857-01-01T00:00:00.000\nFell\t12220\t13400\tKabo\tValid\tH4\t11.850000\t8.216670\t1971-01-01T00:00:00.000\nFell\t12221\t89\tKadonah\tValid\tH6\t27.083330\t78.333330\t1822-01-01T00:00:00.000\nFell\t12222\t230\tKaee\tValid\tH5\t27.250000\t79.966670\t1838-01-01T00:00:00.000\nFell\t12227\t1900\tKagarlyk\tValid\tL6\t49.866670\t30.833330\t1908-01-01T00:00:00.000\nFell\t12228\t2000\tKaidun\tValid\tCR2\t15.000000\t48.300000\t1980-01-01T00:00:00.000\nFell\t12229\t200000\tKainsaz\tValid\tCO3.2\t55.433330\t53.250000\t1937-01-01T00:00:00.000\nFell\t12230\t350\tKakangari\tValid\tK3\t12.383330\t78.516670\t1890-01-01T00:00:00.000\nFell\t12231\t577\tKakowa\tValid\tL6\t45.133330\t21.666670\t1858-01-01T00:00:00.000\nFell\t12232\t950\tKalaba\tValid\tH4\t-6.833330\t29.500000\t1951-01-01T00:00:00.000\nFell\t12236\t4500\tKalumbi\tValid\tL6\t17.833330\t73.983330\t1879-01-01T00:00:00.000\nFell\t12238\t2770\tKamalpur\tValid\tL6\t26.033330\t81.466670\t1942-01-01T00:00:00.000\nFell\t12240\t448\tKamiomi\tValid\tH5\t36.041670\t139.956670\t1913-01-01T00:00:00.000\nFell\t12241\t1293\tKamsagar\tValid\tL6\t14.183330\t75.800000\t1902-01-01T00:00:00.000\nFell\t12243\t299\tKandahar (Afghanistan)\tValid\tL6\t31.600000\t65.783330\t1959-01-01T00:00:00.000\nFell\t12245\t1630\tKangean\tValid\tH5\t-7.000000\t115.500000\t1908-01-01T00:00:00.000\nFell\t12246\t400\tKangra Valley\tValid\tH5\t32.083330\t76.300000\t1897-01-01T00:00:00.000\nFell\t12251\t11355\tKapoeta\tValid\tHowardite\t4.700000\t33.633330\t1942-01-01T00:00:00.000\nFell\t47357\t1600\tKaprada\tValid\tL5/6\t20.339160\t73.223290\t2004-01-01T00:00:00.000\nFell\t12253\t3500\tKaptal-Aryk\tValid\tL6\t42.450000\t73.366670\t1937-01-01T00:00:00.000\nFell\t12256\t3000\tKarakol\tValid\tLL6\t47.216670\t81.016670\t1840-01-01T00:00:00.000\nFell\t12258\t2220\tKaratu\tValid\tLL6\t-3.500000\t35.583330\t1963-01-01T00:00:00.000\nFell\t12260\t180\tKarewar\tValid\tL6\t12.900000\t7.150000\t1949-01-01T00:00:00.000\nFell\t12262\t22000\tKarkh\tValid\tL6\t27.800000\t67.166670\t1905-01-01T00:00:00.000\nFell\t12263\t2950\tKarloowala\tValid\tL6\t31.583330\t71.600000\t1955-01-01T00:00:00.000\nFell\t12264\t41730\tKaroonda\tValid\tCK4\t-35.083330\t139.916670\t1930-01-01T00:00:00.000\nFell\t12266\t710\tKasamatsu\tValid\tH\t35.366670\t136.766670\t1938-01-01T00:00:00.000\nFell\t30740\t16820\tKasauli\tValid\tH4\t29.583330\t77.583330\t2003-01-01T00:00:00.000\nFell\t35465\t1500\tKatagum\tValid\tL6\t11.333330\t10.083330\t1999-01-01T00:00:00.000\nFell\t47351\t6800\tKavarpura\tValid\tIron, IIE-an\t25.143330\t75.813330\t2006-01-01T00:00:00.000\nFell\t12268\t85000\tKayakent\tValid\tIron, IIIAB\t39.263330\t31.780000\t1961-01-01T00:00:00.000\nFell\t12270\t3300\tKediri\tValid\tL4\t-7.750000\t112.016670\t1940-01-01T00:00:00.000\nFell\t53654\t5760\tKemer\tValid\tL4\t36.541940\t29.418220\t2008-01-01T00:00:00.000\nFell\t12275\t6937\tKendleton\tValid\tL4\t29.450000\t-96.000000\t1939-01-01T00:00:00.000\nFell\t12276\t6669.2\tKendrapara\tValid\tH4-5\t20.462500\t86.702780\t2003-01-01T00:00:00.000\nFell\t12282\t5000\tKerilis\tValid\tH5\t48.400000\t-3.300000\t1874-01-01T00:00:00.000\nFell\t12284\t80000\tKernouve\tValid\tH6\t48.116670\t-3.083330\t1869-01-01T00:00:00.000\nFell\t12286\t135000\tKesen\tValid\tH4\t38.983330\t141.616670\t1850-01-01T00:00:00.000\nFell\t12288\t13600\tKhairpur\tValid\tEL6\t29.533330\t72.300000\t1873-01-01T00:00:00.000\nFell\t12289\t3698\tKhanpur\tValid\tLL5\t25.550000\t83.116670\t1932-01-01T00:00:00.000\nFell\t12291\t1500\tKharkov\tValid\tL6\t50.625000\t35.075000\t1787-01-01T00:00:00.000\nFell\t12294\t450\tKheragur\tValid\tL6\t26.950000\t77.883330\t1860-01-01T00:00:00.000\nFell\t12296\t100\tKhetri\tValid\tH6\t28.016670\t75.816670\t1867-01-01T00:00:00.000\nFell\t12297\t6109\tKhmelevka\tValid\tL5\t56.750000\t75.333330\t1929-01-01T00:00:00.000\nFell\t12298\t9700\tKhohar\tValid\tL3.6\t25.100000\t81.533330\t1910-01-01T00:00:00.000\nFell\t12299\t3200\tKhor Temiki\tValid\tAubrite\t16.000000\t36.000000\t1932-01-01T00:00:00.000\nFell\t12300\t100000\tKidairat\tValid\tH6\t14.000000\t28.000000\t1983-01-01T00:00:00.000\nFell\t12301\t737.6\tKiel\tValid\tL6\t54.400000\t10.150000\t1962-01-01T00:00:00.000\nFell\t12303\t1500\tKiffa\tValid\tH5\t16.583330\t-11.333330\t1970-01-01T00:00:00.000\nFell\t12305\t331\tKijima (1906)\tValid\tStone-uncl\t36.850000\t138.383330\t1906-01-01T00:00:00.000\nFell\t12306\t195\tKikino\tValid\tH6\t55.000000\t34.000000\t1809-01-01T00:00:00.000\nFell\t12307\t19000\tKilabo\tValid\tLL6\t12.766670\t9.800000\t2002-01-01T00:00:00.000\nFell\t12308\t772\tKilbourn\tValid\tH5\t43.583330\t-89.600000\t1911-01-01T00:00:00.000\nFell\t12309\t140\tKilleter\tValid\tH6\t54.666670\t-7.666670\t1844-01-01T00:00:00.000\nFell\t12316\t67.400000000000006\tKingai\tValid\tH6\t11.633330\t24.683330\t1967-01-01T00:00:00.000\nFell\t12321\t97.7\tKirbyville\tValid\tEucrite-mmict\t30.750000\t-95.950000\t1906-01-01T00:00:00.000\nFell\t12325\t1550\tKisvarsány\tValid\tL6\t48.166670\t22.308330\t1914-01-01T00:00:00.000\nFell\t12326\t202.6\tKitchener\tValid\tL6\t43.383330\t-80.383330\t1998-01-01T00:00:00.000\nFell\t12332\t3250\tKlein-Wenden\tValid\tH6\t51.600000\t10.800000\t1843-01-01T00:00:00.000\nFell\t12335\t500000\tKnyahinya\tValid\tL/LL5\t48.900000\t22.400000\t1866-01-01T00:00:00.000\nFell\t12336\t136\tKobe\tValid\tCK4\t34.733330\t135.166670\t1999-01-01T00:00:00.000\nFell\t12342\t11510\tKokubunji\tValid\tL6\t34.300000\t133.950000\t1986-01-01T00:00:00.000\nFell\t12343\t238\tKomagome\tValid\tIron\t35.733330\t139.750000\t1926-01-01T00:00:00.000\nFell\t12344\t90\tKonovo\tValid\tLL5\t42.516670\t26.166670\t1931-01-01T00:00:00.000\nFell\t53810\t4300\tKošice\tValid\tH5\t48.763670\t21.176330\t2010-01-01T00:00:00.000\nFell\t12353\t16500\tKrähenberg\tValid\tLL5\t49.326940\t7.464720\t1869-01-01T00:00:00.000\nFell\t12355\t2440\tKrasnoi-Ugol\tValid\tL6\t54.033330\t40.900000\t1829-01-01T00:00:00.000\nFell\t12357\t4000\tKrasnyi Klyuch\tValid\tH5\t54.333330\t56.083330\t1946-01-01T00:00:00.000\nFell\t12363\t845.2\tKrutikha\tValid\tOC\t56.800000\t77.000000\t1906-01-01T00:00:00.000\nFell\t12364\t50000\tKrymka\tValid\tLL3.2\t47.833330\t30.766670\t1946-01-01T00:00:00.000\nFell\t12368\t2250\tKukschin\tValid\tL6\t51.150000\t31.700000\t1938-01-01T00:00:00.000\nFell\t12369\t453.6\tKulak\tValid\tL5\t30.731110\t66.802220\t1961-01-01T00:00:00.000\nFell\t12370\t6000\tKuleschovka\tValid\tL6\t50.750000\t33.500000\t1811-01-01T00:00:00.000\nFell\t12373\t3719\tKulp\tValid\tH6\t41.116670\t45.000000\t1906-01-01T00:00:00.000\nFell\t12377\t200000\tKunashak\tValid\tL6\t55.783330\t61.366670\t1949-01-01T00:00:00.000\nFell\t12379\t1100000\tKunya-Urgench\tValid\tH5\t42.250000\t59.200000\t1998-01-01T00:00:00.000\nFell\t12381\t4460\tKushiike\tValid\tOC\t37.050000\t138.383330\t1920-01-01T00:00:00.000\nFell\t12382\t5\tKusiali\tValid\tL6\t29.683330\t78.383330\t1860-01-01T00:00:00.000\nFell\t12383\t23\tKutais\tValid\tH5\t44.516670\t39.300000\t1977-01-01T00:00:00.000\nFell\t12384\t45000\tKuttippuram\tValid\tL6\t10.833330\t76.033330\t1914-01-01T00:00:00.000\nFell\t12385\t4047\tKuznetzovo\tValid\tL6\t55.200000\t75.333330\t1932-01-01T00:00:00.000\nFell\t12390\t45000\tKyushu\tValid\tL6\t32.033330\t130.633330\t1886-01-01T00:00:00.000\nFell\t12392\t2800\tLa Bécasse\tValid\tL6\t47.083330\t1.750000\t1879-01-01T00:00:00.000\nFell\t12394\t399\tLa Charca\tValid\tOC\t20.666670\t-101.283330\t1878-01-01T00:00:00.000\nFell\t12395\t2000\tLa Colina\tValid\tH5\t-37.333330\t-61.533330\t1924-01-01T00:00:00.000\nFell\t12396\t45000\tLa Criolla\tValid\tL6\t-31.233330\t-58.166670\t1985-01-01T00:00:00.000\nFell\t12408\t3833\tLaborel\tValid\tH5\t44.283330\t5.583330\t1871-01-01T00:00:00.000\nFell\t12433\t900\tLahrauli\tValid\tUreilite\t26.783330\t82.716670\t1955-01-01T00:00:00.000\nFell\t12434\t37000\tL'Aigle\tValid\tL6\t48.766670\t0.633330\t1803-01-01T00:00:00.000\nFound\t32531\t9.6\tCumulus Hills 04075\tValid\tPallasite\t\t\t2003-01-01T00:00:00.000\nFell\t12435\t212.5\tLakangaon\tValid\tEucrite-mmict\t21.866670\t76.033330\t1910-01-01T00:00:00.000\nFell\t12451\t372\tLalitpur\tValid\tL6\t24.450000\t78.566670\t1887-01-01T00:00:00.000\nFell\t12455\t51700\tLancé\tValid\tCO3.5\t47.700000\t1.066670\t1872-01-01T00:00:00.000\nFell\t12456\t7000\tLancon\tValid\tH6\t43.750000\t5.116670\t1897-01-01T00:00:00.000\nFell\t12461\t2300\tLånghalsen\tValid\tL6\t58.850000\t16.733330\t1947-01-01T00:00:00.000\nFell\t12464\t1282\tLanxi\tValid\tL6\t46.241670\t126.196110\t1986-01-01T00:00:00.000\nFell\t12465\t7000\tLanzenkirchen\tValid\tL4\t47.750000\t16.233330\t1925-01-01T00:00:00.000\nFell\t12466\t14250\tLaochenzhen\tValid\tH5\t33.133330\t115.166670\t1987-01-01T00:00:00.000\nFell\t12740\t1060\tLaunton\tValid\tL6\t51.900000\t-1.116670\t1830-01-01T00:00:00.000\nFell\t12743\t800\tLavrentievka\tValid\tL6\t52.450000\t51.566670\t1938-01-01T00:00:00.000\nFell\t12748\t3000\tLe Pressoir\tValid\tH5\t47.166670\t0.433330\t1845-01-01T00:00:00.000\nFell\t12749\t780\tLe Teilleul\tValid\tHowardite\t48.533330\t-0.866670\t1845-01-01T00:00:00.000\nFell\t12755\t51500\tLeedey\tValid\tL6\t35.883330\t-99.333330\t1943-01-01T00:00:00.000\nFell\t12756\t460\tLeeuwfontein\tValid\tL6\t-25.666670\t28.366670\t1912-01-01T00:00:00.000\nFell\t12759\t271.39999999999998\tLeighlinbridge\tValid\tL6\t52.666670\t-6.966670\t1999-01-01T00:00:00.000\nFell\t12760\t877\tLeighton\tValid\tH5\t34.583330\t-87.500000\t1907-01-01T00:00:00.000\nFell\t12765\t700\tLeonovka\tValid\tL6\t52.266670\t32.850000\t1900-01-01T00:00:00.000\nFell\t12769\t125\tLes Ormes\tValid\tL6\t48.350000\t3.250000\t1857-01-01T00:00:00.000\nFell\t12772\t2000\tLesves\tValid\tL6\t50.366670\t4.733330\t1896-01-01T00:00:00.000\nFell\t14646\t4000\tLichtenberg\tValid\tH6\t-26.150000\t26.183330\t1973-01-01T00:00:00.000\nFell\t14650\t6862\tLillaverke\tValid\tH5\t56.650000\t15.866670\t1930-01-01T00:00:00.000\nFell\t14652\t50000\tLimerick\tValid\tH5\t52.566670\t-8.783330\t1813-01-01T00:00:00.000\nFell\t14655\t1862\tLinum\tValid\tL6\t52.750000\t12.900000\t1854-01-01T00:00:00.000\nFell\t14659\t498\tLishui\tValid\tL5\t31.633330\t118.983330\t1978-01-01T00:00:00.000\nFell\t14661\t12800\tLissa\tValid\tL6\t50.200000\t14.850000\t1808-01-01T00:00:00.000\nFell\t14664\t491\tLittle Piney\tValid\tL5\t37.916670\t-92.083330\t1839-01-01T00:00:00.000\nFell\t14670\t5213\tLixna\tValid\tH4\t56.000000\t26.433330\t1820-01-01T00:00:00.000\nFell\t14675\t1000\tLodran\tValid\tLodranite\t29.533330\t71.800000\t1868-01-01T00:00:00.000\nFell\t14678\t40000\tLohawat\tValid\tHowardite\t26.965560\t72.626670\t1994-01-01T00:00:00.000\nFell\t52843\t329.7\tLorton\tValid\tL6\t38.700660\t-77.211630\t2010-01-01T00:00:00.000\nFell\t14708\t25\tLos Martinez\tValid\tL6\t38.000000\t-0.833330\t1894-01-01T00:00:00.000\nFell\t14711\t17000\tLost City\tValid\tH5\t36.008330\t-95.150000\t1970-01-01T00:00:00.000\nFell\t14716\t1300\tLouisville\tValid\tL6\t38.250000\t-85.750000\t1977-01-01T00:00:00.000\nFell\t14718\t59000\tŁowicz\tValid\tMesosiderite-A3\t52.000000\t19.916670\t1935-01-01T00:00:00.000\nFell\t14721\t9241\tLua\tValid\tL5\t24.950000\t75.150000\t1926-01-01T00:00:00.000\nFell\t14724\t3500\tLucé\tValid\tL6\t47.850000\t0.483330\t1768-01-01T00:00:00.000\nFell\t14753\t340\tLumpkin\tValid\tL6\t32.033330\t-84.766670\t1869-01-01T00:00:00.000\nFell\t14754\t2520\tLunan\tValid\tH6\t24.800000\t103.300000\t1980-01-01T00:00:00.000\nFell\t14755\t11000\tLundsgård\tValid\tL6\t56.216670\t13.033330\t1889-01-01T00:00:00.000\nFell\t14756\t885\tLuotolax\tValid\tHowardite\t61.200000\t27.700000\t1813-01-01T00:00:00.000\nFell\t14757\t14000\tLuponnas\tValid\tH3-5\t46.216670\t5.000000\t1753-01-01T00:00:00.000\nFell\t14759\t\tLusaka\tValid\tUnknown\t-7.216670\t29.433330\t1951-01-01T00:00:00.000\nFell\t14764\t540\tMabwe-Khoywa\tValid\tL5\t19.000000\t97.000000\t1937-01-01T00:00:00.000\nFell\t15370\t1500\tMacau\tValid\tH5\t-5.200000\t-36.666670\t1836-01-01T00:00:00.000\nFell\t15371\t93200\tMachinga\tValid\tL6\t-15.212220\t35.242220\t1981-01-01T00:00:00.000\nFell\t15372\t1995\tMacibini\tValid\tEucrite-pmict\t-28.833330\t31.950000\t1936-01-01T00:00:00.000\nFell\t15379\t1000\tMadhipura\tValid\tL\t25.916670\t86.366670\t1950-01-01T00:00:00.000\nFell\t15380\t400\tMadiun\tValid\tL6\t-7.750000\t111.533330\t1935-01-01T00:00:00.000\nFell\t15382\t400\tMadrid\tValid\tL6\t40.416670\t-3.716670\t1896-01-01T00:00:00.000\nFell\t15383\t600\tMafra\tValid\tL3-4\t-26.166670\t-49.933330\t1941-01-01T00:00:00.000\nFell\t15386\t5000\tMagnesia\tValid\tIron, IAB-sHL\t37.866670\t27.516670\t1899-01-01T00:00:00.000\nFell\t15387\t666.6\tMagombedze\tValid\tH3-5\t-19.483330\t31.650000\t1990-01-01T00:00:00.000\nFell\t47361\t70500\tMahadevpur\tValid\tH4/5\t27.666670\t95.783330\t2007-01-01T00:00:00.000\nFell\t30751\t4629\tMaigatari-Danduma\tValid\tH5/6\t12.833330\t9.383330\t2004-01-01T00:00:00.000\nFell\t15393\t150\tMalaga\tValid\tOC\t32.216670\t-104.000000\t1933-01-01T00:00:00.000\nFell\t15394\t2000\tMalakal\tValid\tL5\t9.500000\t31.750000\t1970-01-01T00:00:00.000\nFell\t15395\t470\tMalampaka\tValid\tH\t-3.133330\t33.516670\t1930-01-01T00:00:00.000\nFell\t15397\t\tMalotas\tValid\tH5\t-28.933330\t-63.233330\t1931-01-01T00:00:00.000\nFell\t15400\t807\tMalvern\tValid\tEucrite-pmict\t-29.450000\t26.766670\t1933-01-01T00:00:00.000\nFell\t15401\t1000\tMamra Springs\tValid\tL6\t45.216670\t62.083330\t1927-01-01T00:00:00.000\nFell\t15402\t1700\tManbhoom\tValid\tLL6\t23.050000\t86.700000\t1863-01-01T00:00:00.000\nFell\t15403\t50\tManegaon\tValid\tDiogenite\t20.966670\t76.100000\t1843-01-01T00:00:00.000\nFell\t15405\t22300\tMangwendi\tValid\tLL6\t-17.650000\t31.600000\t1934-01-01T00:00:00.000\nFell\t15409\t3555\tManych\tValid\tLL3.4\t45.816670\t44.633330\t1951-01-01T00:00:00.000\nFell\t15414\t4500\tMardan\tValid\tH5\t34.233330\t72.083330\t1948-01-01T00:00:00.000\nFell\t15418\t114\tMaria Linden\tValid\tL4\t\t\t1925-01-01T00:00:00.000\nFell\t15419\t340\tMariaville\tValid\tIron\t42.716670\t-99.383330\t1898-01-01T00:00:00.000\nFell\t48973\t25.81\tMaribo\tValid\tCM2\t54.761830\t11.467450\t2009-01-01T00:00:00.000\nFell\t15421\t3200\tMaridi\tValid\tH6\t4.666670\t29.250000\t1941-01-01T00:00:00.000\nFell\t15422\t2500\tMarilia\tValid\tH4\t-22.250000\t-49.933330\t1971-01-01T00:00:00.000\nFell\t15424\t28400\tMarion (Iowa)\tValid\tL6\t41.900000\t-91.600000\t1847-01-01T00:00:00.000\nFell\t15426\t45000\tMarjalahti\tValid\tPallasite, PMG\t61.500000\t30.500000\t1902-01-01T00:00:00.000\nFell\t15429\t3000\tMarmande\tValid\tL5\t44.500000\t0.150000\t1848-01-01T00:00:00.000\nFell\t15430\t6000\tMaromandia\tValid\tL6\t-14.200000\t48.100000\t2002-01-01T00:00:00.000\nFell\t15436\t1443\tMaryville\tValid\tL6\t35.800000\t-84.100000\t1983-01-01T00:00:00.000\nFell\t15438\t1000\tMascombes\tValid\tL6\t45.366670\t1.866670\t1836-01-01T00:00:00.000\nFell\t53653\t24.54\tMason Gully\tValid\tH5\t0.000000\t0.000000\t2010-01-01T00:00:00.000\nFell\t15443\t1600\tMässing\tValid\tHowardite\t48.133330\t12.616670\t1803-01-01T00:00:00.000\nFell\t15446\t19000\tMauerkirchen\tValid\tL6\t48.183330\t13.133330\t1768-01-01T00:00:00.000\nFell\t15447\t220\tMauritius\tValid\tL6\t-20.000000\t57.000000\t1801-01-01T00:00:00.000\nFell\t15451\t4850\tMayo Belwa\tValid\tAubrite\t8.966670\t12.083330\t1974-01-01T00:00:00.000\nFell\t15453\t4000\tMazapil\tValid\tIron, IAB-sLL\t24.683330\t-101.683330\t1885-01-01T00:00:00.000\nFell\t15454\t4975\tMaziba\tValid\tL6\t-1.216670\t30.000000\t1942-01-01T00:00:00.000\nFell\t15455\t150000\tMbale\tValid\tL5/6\t1.066670\t34.166670\t1992-01-01T00:00:00.000\nFell\t15467\t31\tMedanitos\tValid\tEucrite-cm\t-27.250000\t-67.500000\t1953-01-01T00:00:00.000\nFell\t15469\t22\tMeerut\tValid\tH5\t29.016670\t77.800000\t1861-01-01T00:00:00.000\nFell\t15470\t24750\tMeester-Cornelis\tValid\tH5\t-6.233330\t106.883330\t1915-01-01T00:00:00.000\nFell\t15485\t10500\tMenow\tValid\tH4\t53.183330\t13.150000\t1862-01-01T00:00:00.000\nFell\t15486\t28.9\tMenziswyl\tValid\tL5\t46.818670\t7.218170\t1903-01-01T00:00:00.000\nFell\t15489\t4000\tMern\tValid\tL6\t55.050000\t12.066670\t1878-01-01T00:00:00.000\nFell\t15491\t6000\tMeru\tValid\tLL6\t0.000000\t37.666670\t1945-01-01T00:00:00.000\nFell\t15492\t71400\tMerua\tValid\tH5\t25.483330\t81.983330\t1920-01-01T00:00:00.000\nFell\t15495\t2405\tMessina\tValid\tL5\t38.183330\t15.566670\t1955-01-01T00:00:00.000\nFell\t16626\t870\tMeuselbach\tValid\tL6\t50.583330\t11.100000\t1897-01-01T00:00:00.000\nFell\t16627\t1300\tMezel\tValid\tL6\t45.766670\t3.250000\t1949-01-01T00:00:00.000\nFell\t16628\t22700\tMezö-Madaras\tValid\tL3.7\t46.500000\t25.733330\t1852-01-01T00:00:00.000\nFell\t16629\t350\tMhow\tValid\tL6\t25.900000\t83.616670\t1827-01-01T00:00:00.000\nFell\t16631\t1100\tMianchi\tValid\tH5\t34.800000\t111.700000\t1980-01-01T00:00:00.000\nFell\t16632\t1600\tMiddlesbrough\tValid\tL6\t54.566670\t-1.166670\t1881-01-01T00:00:00.000\nFell\t52090\t3584\tMifflin\tValid\tL5\t42.907500\t-90.365560\t2010-01-01T00:00:00.000\nFell\t16634\t8000\tMighei\tValid\tCM2\t48.066670\t30.966670\t1889-01-01T00:00:00.000\nFell\t16635\t6380\tMihonoseki\tValid\tL6\t35.568330\t133.220000\t1992-01-01T00:00:00.000\nFell\t16636\t224.2\tMike\tValid\tL6\t46.233330\t17.533330\t1944-01-01T00:00:00.000\nFell\t16640\t10000\tMilena\tValid\tL6\t46.183330\t16.100000\t1842-01-01T00:00:00.000\nFell\t16643\t330000\tMillbillillie\tValid\tEucrite-mmict\t-26.450000\t120.366670\t1960-01-01T00:00:00.000\nFell\t16645\t16700\tMiller (Arkansas)\tValid\tH5\t35.400000\t-92.050000\t1930-01-01T00:00:00.000\nFell\t16692\t1040\tMinamino\tValid\tL\t35.078330\t136.933330\t1632-01-01T00:00:00.000\nFell\t16696\t42\tMineo\tValid\tPallasite\t37.283330\t14.700000\t1826-01-01T00:00:00.000\nFell\t16697\t5500\tMin-Fan-Zhun\tValid\tLL6\t32.333330\t120.666670\t1952-01-01T00:00:00.000\nFell\t16700\t550\tMinnichhof\tValid\tOC\t47.700000\t16.600000\t1905-01-01T00:00:00.000\nFell\t16701\t8510\tMirzapur\tValid\tL5\t25.683330\t83.250000\t1910-01-01T00:00:00.000\nFell\t16703\t5800\tMisshof\tValid\tH5\t56.666670\t23.000000\t1890-01-01T00:00:00.000\nFell\t16707\t100.7\tMjelleim\tValid\tH\t61.733330\t5.933330\t1898-01-01T00:00:00.000\nFell\t16709\t300000\tMocs\tValid\tL5-6\t46.800000\t24.033330\t1882-01-01T00:00:00.000\nFell\t16711\t35000\tModoc (1905)\tValid\tL6\t38.500000\t-101.100000\t1905-01-01T00:00:00.000\nFell\t16713\t4500\tMokoia\tValid\tCV3\t-39.633330\t174.400000\t1908-01-01T00:00:00.000\nFell\t16715\t144000\tMolina\tValid\tH5\t38.116670\t-1.166670\t1858-01-01T00:00:00.000\nFell\t16717\t150\tMolteno\tValid\tHowardite\t-31.250000\t26.466670\t1953-01-01T00:00:00.000\nFell\t16719\t2587\tMonahans (1998)\tValid\tH5\t31.608330\t-102.858330\t1998-01-01T00:00:00.000\nFell\t16720\t8600\tMonroe\tValid\tH4\t35.250000\t-80.500000\t1849-01-01T00:00:00.000\nFell\t16725\t4885\tMonte das Fortes\tValid\tL5\t38.016670\t-8.250000\t1950-01-01T00:00:00.000\nFell\t16726\t3130\tMonte Milone\tValid\tL5\t43.266670\t13.350000\t1846-01-01T00:00:00.000\nFell\t16727\t149000\tMontferré\tValid\tH5\t43.390560\t1.962500\t1923-01-01T00:00:00.000\nFell\t16729\t500\tMontlivault\tValid\tL6\t47.633330\t1.583330\t1838-01-01T00:00:00.000\nFell\t16733\t\tMonze\tValid\tL6\t-15.966670\t27.350000\t1950-01-01T00:00:00.000\nFell\t16736\t1880\tMoore County\tValid\tEucrite-cm\t35.416670\t-79.383330\t1913-01-01T00:00:00.000\nFell\t16737\t3520\tMooresfort\tValid\tH5\t52.450000\t-8.333330\t1810-01-01T00:00:00.000\nFell\t16738\t8887.5\tMoorleah\tValid\tL6\t-40.975000\t145.600000\t1930-01-01T00:00:00.000\nFell\t16740\t70\tMoradabad\tValid\tL6\t28.783330\t78.833330\t1808-01-01T00:00:00.000\nFell\t16742\t633\tMorávka\tValid\tH5\t49.600000\t18.533330\t2000-01-01T00:00:00.000\nFell\t16747\t1300\tMornans\tValid\tH5\t44.600000\t5.133330\t1875-01-01T00:00:00.000\nFell\t36592\t3763\tMoss\tValid\tCO3.6\t59.433330\t10.700000\t2006-01-01T00:00:00.000\nFell\t16759\t1500\tMoti-ka-nagla\tValid\tH6\t26.833330\t77.333330\t1868-01-01T00:00:00.000\nFell\t16762\t9150\tMotta di Conti\tValid\tH4\t45.200000\t8.500000\t1868-01-01T00:00:00.000\nFell\t16766\t11300\tMount Browne\tValid\tH6\t-29.800000\t141.700000\t1902-01-01T00:00:00.000\nFell\t16804\t110000\tMount Tazerzait\tValid\tL5\t18.700000\t4.800000\t1991-01-01T00:00:00.000\nFell\t16805\t17000\tMount Vaisi\tValid\tStone-uncl\t44.083330\t6.866670\t1637-01-01T00:00:00.000\nFell\t16820\t1100\tMtola\tValid\tStone-uncl\t-11.500000\t33.500000\t1944-01-01T00:00:00.000\nFell\t16841\t4400\tMuddoor\tValid\tL5\t12.633330\t77.016670\t1865-01-01T00:00:00.000\nFell\t16851\t25.5\tMulletiwu\tValid\tL\t9.333330\t80.833330\t1795-01-01T00:00:00.000\nFell\t16874\t4703\tMuraid\tValid\tL6\t24.500000\t90.216670\t1924-01-01T00:00:00.000\nFell\t16875\t100000\tMurchison\tValid\tCM2\t-36.616670\t145.200000\t1969-01-01T00:00:00.000\nFell\t16882\t12600\tMurray\tValid\tCM2\t36.600000\t-88.100000\t1950-01-01T00:00:00.000\nFell\t16885\t1245\tMuzaffarpur\tValid\tIron, IAB-sHL\t26.133330\t85.533330\t1964-01-01T00:00:00.000\nFell\t16887\t\tMyhee Caunta\tValid\tOC\t23.050000\t72.633330\t1842-01-01T00:00:00.000\nFell\t16889\t8165\tNadiabondi\tValid\tH5\t12.000000\t1.000000\t1956-01-01T00:00:00.000\nFell\t16890\t1810\tNagai\tValid\tL6\t38.121670\t140.061670\t1922-01-01T00:00:00.000\nFell\t16892\t20\tNagaria\tValid\tEucrite-cm\t26.983330\t78.216670\t1875-01-01T00:00:00.000\nFell\t16893\t6100\tNagy-Borové\tValid\tL5\t49.166670\t19.500000\t1895-01-01T00:00:00.000\nFell\t16898\t10000\tNakhla\tValid\tMartian (nakhlite)\t31.316670\t30.350000\t1911-01-01T00:00:00.000\nFell\t16899\t23200\tNakhon Pathom\tValid\tL6\t13.733330\t100.083330\t1923-01-01T00:00:00.000\nFell\t16902\t4500\tNammianthal\tValid\tH5\t12.283330\t79.200000\t1886-01-01T00:00:00.000\nFell\t16903\t52900\tNan Yang Pao\tValid\tL6\t35.666670\t103.500000\t1917-01-01T00:00:00.000\nFell\t16904\t7500\tNanjemoy\tValid\tH6\t38.416670\t-77.166670\t1825-01-01T00:00:00.000\nFell\t16907\t529\tNantong\tValid\tH6\t32.116670\t121.800000\t1984-01-01T00:00:00.000\nFell\t16908\t17000\tNaoki\tValid\tH6\t19.250000\t77.000000\t1928-01-01T00:00:00.000\nFell\t16909\t2700\tNaragh\tValid\tH6\t33.750000\t51.500000\t1974-01-01T00:00:00.000\nFell\t16912\t367.5\tNarellan\tValid\tL6\t-34.050000\t150.688890\t1928-01-01T00:00:00.000\nFell\t16914\t\tNarni\tValid\tStone-uncl\t42.516670\t12.516670\t0921-01-01T00:00:00.000\nFell\t16922\t347\tNassirah\tValid\tH4\t-21.733330\t165.900000\t1936-01-01T00:00:00.000\nFell\t16923\t1.4\tNatal\tValid\tStone-uncl\t\t\t1973-01-01T00:00:00.000\nFell\t16927\t105\tNawapali\tValid\tCM2\t21.250000\t83.666670\t1890-01-01T00:00:00.000\nFell\t16934\t420\tNeagari\tValid\tL6\t36.449170\t136.465280\t1995-01-01T00:00:00.000\nFell\t16935\t4500\tNedagolla\tValid\tIron, ungrouped\t18.683330\t83.483330\t1870-01-01T00:00:00.000\nFell\t16941\t2450\tNejo\tValid\tL6\t9.500000\t35.333330\t1970-01-01T00:00:00.000\nFell\t16945\t10250\tNerft\tValid\tL6\t56.500000\t21.500000\t1864-01-01T00:00:00.000\nFell\t16950\t6189\tNeuschwanstein\tValid\tEL6\t47.525000\t10.808330\t2002-01-01T00:00:00.000\nFell\t16953\t230000\tNew Concord\tValid\tL6\t40.000000\t-81.766670\t1860-01-01T00:00:00.000\nFell\t16954\t12000\tNew Halfa\tValid\tL4\t15.366670\t35.683330\t1994-01-01T00:00:00.000\nFell\t16960\t19256\tNew Orleans\tValid\tH5\t29.947180\t-90.109760\t2003-01-01T00:00:00.000\nFell\t16966\t1393\tNgawi\tValid\tLL3.6\t-7.450000\t111.416670\t1883-01-01T00:00:00.000\nFell\t16968\t37500\tN'Goureyma\tValid\tIron, ungrouped\t13.850000\t-4.383330\t1900-01-01T00:00:00.000\nFell\t16970\t\tNicorps\tValid\tStone-uncl\t49.033330\t-1.433330\t1750-01-01T00:00:00.000\nFell\t16974\t3.3\tNiger (L6)\tValid\tL6\t\t\t1967-01-01T00:00:00.000\nFell\t16975\t3.3\tNiger (LL6)\tValid\tLL6\t\t\t1967-01-01T00:00:00.000\nFell\t16976\t3996\tNikolaevka\tValid\tH4\t52.450000\t78.633330\t1935-01-01T00:00:00.000\nFell\t16977\t6000\tNikolskoe\tValid\tL4\t56.116670\t37.333330\t1954-01-01T00:00:00.000\nFell\t16980\t14250\tNingbo\tValid\tIron, IVA\t29.866670\t121.483330\t1975-01-01T00:00:00.000\nFell\t16981\t4610\tNingqiang\tValid\tC3-ung\t32.925000\t105.906670\t1983-01-01T00:00:00.000\nFell\t16982\t467\tNio\tValid\tH3-4\t34.200000\t131.566670\t1897-01-01T00:00:00.000\nFell\t16983\t17200\tN'Kandhla\tValid\tIron, IID\t-28.566670\t30.700000\t1912-01-01T00:00:00.000\nFell\t16984\t2300\tNobleborough\tValid\tEucrite-pmict\t44.083330\t-69.483330\t1823-01-01T00:00:00.000\nFell\t16985\t483.7\tNoblesville\tValid\tH4-6\t40.085280\t-86.055000\t1991-01-01T00:00:00.000\nFell\t16988\t472\tNogata\tValid\tL6\t33.725000\t130.750000\t0861-01-01T00:00:00.000\nFell\t16989\t4000\tNogoya\tValid\tCM2\t-32.366670\t-59.833330\t1879-01-01T00:00:00.000\nFell\t16994\t1050\tNorfork\tValid\tIron, IIIAB\t36.216670\t-92.266670\t1918-01-01T00:00:00.000\nFell\t17922\t1100000\tNorton County\tValid\tAubrite\t39.683330\t-99.866670\t1948-01-01T00:00:00.000\nFell\t17930\t177\tNoventa Vicentina\tValid\tH4\t45.291670\t11.527220\t1971-01-01T00:00:00.000\nFell\t17933\t1900\tNovo-Urei\tValid\tUreilite\t54.816670\t46.000000\t1886-01-01T00:00:00.000\nFell\t17934\t\tNovy-Ergi\tValid\tStone-uncl\t58.550000\t31.333330\t1662-01-01T00:00:00.000\nFell\t17935\t1001\tNovy-Projekt\tValid\tOC\t56.000000\t22.000000\t1908-01-01T00:00:00.000\nFell\t17936\t250\tNoyan-Bogdo\tValid\tL6\t42.916670\t102.466670\t1933-01-01T00:00:00.000\nFell\t17938\t50000\tNuevo Mercurio\tValid\tH5\t24.300000\t-102.133330\t1978-01-01T00:00:00.000\nFell\t17959\t5000\tNulles\tValid\tH6\t41.633330\t0.750000\t1851-01-01T00:00:00.000\nFell\t17960\t363\tNumakai\tValid\tH4\t43.333330\t141.866670\t1925-01-01T00:00:00.000\nFell\t17969\t737.6\tNyaung\tValid\tIron, IIIAB\t21.208330\t94.916670\t1939-01-01T00:00:00.000\nFell\t17970\t1100\tNyirábrany\tValid\tLL5\t47.550000\t22.025000\t1914-01-01T00:00:00.000\nFell\t17979\t500000\tOchansk\tValid\tH4\t57.783330\t55.266670\t1887-01-01T00:00:00.000\nFell\t17988\t1400\tOesede\tValid\tH5\t52.283330\t8.050000\t1927-01-01T00:00:00.000\nFell\t17989\t6000\tOesel\tValid\tL6\t58.500000\t23.000000\t1855-01-01T00:00:00.000\nFell\t17990\t3750\tOfehértó\tValid\tL6\t47.883330\t22.033330\t1900-01-01T00:00:00.000\nFell\t17994\t14360\tOgi\tValid\tH6\t33.283330\t130.200000\t1741-01-01T00:00:00.000\nFell\t17995\t16250\tOhaba\tValid\tH5\t46.066670\t23.583330\t1857-01-01T00:00:00.000\nFell\t17996\t7700\tOhuma\tValid\tL5\t6.750000\t8.500000\t1963-01-01T00:00:00.000\nFell\t17997\t5850\tOjuelos Altos\tValid\tL6\t38.183330\t-5.400000\t1926-01-01T00:00:00.000\nFell\t17998\t194\tOkabe\tValid\tH5\t36.183330\t139.216670\t1958-01-01T00:00:00.000\nFell\t18000\t4742\tOkano\tValid\tIron, IIAB\t35.083330\t135.200000\t1904-01-01T00:00:00.000\nFell\t18002\t12000\tOkniny\tValid\tLL6\t50.833330\t25.500000\t1834-01-01T00:00:00.000\nFell\t18009\t16570\tOldenburg (1930)\tValid\tL6\t52.950000\t8.166670\t1930-01-01T00:00:00.000\nFell\t18012\t\tOliva-Gandia\tValid\tStone-uncl\t39.000000\t-0.033330\t1520-01-01T00:00:00.000\nFell\t18013\t150000\tOlivenza\tValid\tLL5\t38.716670\t-7.066670\t1924-01-01T00:00:00.000\nFell\t18015\t40000\tOlmedilla de Alarcón\tValid\tH5\t39.566670\t-2.100000\t1929-01-01T00:00:00.000\nFell\t18019\t250000\tOmolon\tValid\tPallasite, PMG\t64.020000\t161.808330\t1981-01-01T00:00:00.000\nFell\t18026\t14000\tOrgueil\tValid\tCI1\t43.883330\t1.383330\t1864-01-01T00:00:00.000\nFell\t34489\t180\tOrlando\tValid\tEucrite\t28.547500\t-81.362220\t2004-01-01T00:00:00.000\nFell\t18030\t6000\tOrnans\tValid\tCO3.4\t47.116670\t6.150000\t1868-01-01T00:00:00.000\nFell\t18033\t4500\tOrtenau\tValid\tStone-uncl\t48.500000\t8.000000\t1671-01-01T00:00:00.000\nFell\t18034\t3400\tOrvinio\tValid\tH6\t42.133330\t12.933330\t1872-01-01T00:00:00.000\nFell\t18042\t246\tOterøy\tValid\tL6\t58.883330\t9.400000\t1928-01-01T00:00:00.000\nFell\t18045\t6510\tOtomi\tValid\tH\t38.400000\t140.350000\t1867-01-01T00:00:00.000\nFell\t18046\t840\tOttawa\tValid\tLL6\t38.600000\t-95.216670\t1896-01-01T00:00:00.000\nFell\t56729\t4440\tOuadangou\tValid\tL5\t12.900000\t0.080000\t2003-01-01T00:00:00.000\nFell\t18050\t1215.5\tOued el Hadjar\tValid\tLL6\t30.180000\t-6.577170\t1986-01-01T00:00:00.000\nFell\t31282\t17000\tOum Dreyga\tValid\tH3-5\t24.300000\t-13.100000\t2003-01-01T00:00:00.000\nFell\t18052\t20000\tOurique\tValid\tH4\t37.608330\t-8.280000\t1998-01-01T00:00:00.000\nFell\t18055\t121.5\tOvambo\tValid\tL6\t-18.000000\t16.000000\t1900-01-01T00:00:00.000\nFell\t18058\t205\tOviedo\tValid\tH5\t43.400000\t-5.866670\t1856-01-01T00:00:00.000\nFell\t18062\t\tOwrucz\tValid\tOC\t51.333330\t28.833330\t1775-01-01T00:00:00.000\nFell\t18068\t3400\tPacula\tValid\tL6\t21.050000\t-99.300000\t1881-01-01T00:00:00.000\nFell\t18069\t3858\tPadvarninkai\tValid\tEucrite-mmict\t55.666670\t25.000000\t1929-01-01T00:00:00.000\nFell\t18072\t515\tPaitan\tValid\tH6\t17.743330\t120.455830\t1910-01-01T00:00:00.000\nFell\t18073\t\tPalahatchie\tValid\tOC\t32.316670\t-89.716670\t1910-01-01T00:00:00.000\nFell\t18074\t1430\tPalca de Aparzo\tValid\tL5\t-23.116670\t-65.100000\t1988-01-01T00:00:00.000\nFell\t18077\t18000\tPalinshih\tValid\tIron\t43.483330\t118.616670\t1914-01-01T00:00:00.000\nFell\t18079\t135\tPalmyra\tValid\tL3\t39.800000\t-91.500000\t1926-01-01T00:00:00.000\nFell\t18082\t682\tPalolo Valley\tValid\tH5\t21.300000\t-157.783330\t1949-01-01T00:00:00.000\nFound\t32591\t69.5\tDominion Range 03239\tValid\tL6\t\t\t2002-01-01T00:00:00.000\nFell\t18093\t10500\tPampanga\tValid\tL5\t15.083330\t120.700000\t1859-01-01T00:00:00.000\nFell\t18098\t2130\tPantar\tValid\tH5\t8.066670\t124.283330\t1938-01-01T00:00:00.000\nFell\t18101\t408000\tParagould\tValid\tLL5\t36.066670\t-90.500000\t1930-01-01T00:00:00.000\nFell\t18102\t2000\tParambu\tValid\tLL5\t-6.233330\t-40.700000\t1967-01-01T00:00:00.000\nFell\t18103\t100000\tParanaiba\tValid\tL6\t-19.133330\t-51.666670\t1956-01-01T00:00:00.000\nFell\t18106\t18000\tPark Forest\tValid\tL5\t41.484720\t-87.679170\t2003-01-01T00:00:00.000\nFell\t18108\t77600\tParnallee\tValid\tLL3.6\t9.233330\t78.350000\t1857-01-01T00:00:00.000\nFell\t18109\t800\tParsa\tValid\tEH3\t26.200000\t85.400000\t1942-01-01T00:00:00.000\nFell\t18110\t5100\tPasamonte\tValid\tEucrite-pmict\t36.216670\t-103.400000\t1933-01-01T00:00:00.000\nFell\t18112\t4375\tPatora\tValid\tH6\t20.936940\t82.050000\t1969-01-01T00:00:00.000\nFell\t18116\t2121\tPatrimonio\tValid\tL6\t-19.533330\t-48.566670\t1950-01-01T00:00:00.000\nFell\t18118\t12\tPatti\tValid\tIron\t38.133330\t14.966670\t1922-01-01T00:00:00.000\nFell\t18171\t37350\tPatwar\tValid\tMesosiderite-A1\t23.150000\t91.183330\t1935-01-01T00:00:00.000\nFell\t18173\t2968\tPavel\tValid\tH5\t43.466670\t25.516670\t1966-01-01T00:00:00.000\nFell\t18175\t142.5\tPavlodar (stone)\tValid\tH5\t52.300000\t77.033330\t1938-01-01T00:00:00.000\nFell\t18176\t40000\tPavlograd\tValid\tL6\t48.533330\t35.983330\t1826-01-01T00:00:00.000\nFell\t18177\t2000\tPavlovka\tValid\tHowardite\t52.033330\t43.000000\t1882-01-01T00:00:00.000\nFell\t18179\t\tPê\tValid\tL6\t11.333670\t-3.542170\t1989-01-01T00:00:00.000\nFell\t18180\t45760\tPeace River\tValid\tL6\t56.133330\t-117.933330\t1963-01-01T00:00:00.000\nFell\t18181\t117.8\tPeckelsheim\tValid\tDiogenite-pm\t51.666670\t9.250000\t1953-01-01T00:00:00.000\nFell\t18782\t12570\tPeekskill\tValid\tH6\t41.283330\t-73.916670\t1992-01-01T00:00:00.000\nFell\t18786\t70000\tPeña Blanca Spring\tValid\tAubrite\t30.125000\t-103.116670\t1946-01-01T00:00:00.000\nFell\t18792\t165\tPeramiho\tValid\tEucrite-mmict\t-10.666670\t35.500000\t1899-01-01T00:00:00.000\nFell\t18793\t23474\tPerpeti\tValid\tL6\t23.325000\t91.000000\t1935-01-01T00:00:00.000\nFell\t18797\t2\tPerth\tValid\tLL5\t56.400000\t-3.433330\t1830-01-01T00:00:00.000\nFell\t18798\t66000\tPervomaisky\tValid\tL6\t56.633330\t39.433330\t1933-01-01T00:00:00.000\nFell\t18799\t3393\tPesyanoe\tValid\tAubrite\t55.500000\t66.083330\t1933-01-01T00:00:00.000\nFell\t18800\t189\tPétèlkolé\tValid\tH5\t14.052000\t0.420000\t1995-01-01T00:00:00.000\nFell\t18801\t1800\tPetersburg\tValid\tEucrite-pmict\t35.300000\t-86.633330\t1855-01-01T00:00:00.000\nFell\t18804\t\tPettiswood\tValid\tStone-uncl\t53.533330\t-7.333330\t1779-01-01T00:00:00.000\nFell\t18808\t57900\tPhillips County (stone)\tValid\tL6\t40.000000\t-99.250000\t1901-01-01T00:00:00.000\nFell\t18809\t500\tPhu Hong\tValid\tH4\t11.250000\t108.583330\t1887-01-01T00:00:00.000\nFell\t18811\t7800\tPhum Sambo\tValid\tH4\t12.000000\t105.483330\t1933-01-01T00:00:00.000\nFell\t18812\t11000\tPhuoc-Binh\tValid\tL5\t15.716670\t108.100000\t1941-01-01T00:00:00.000\nFell\t18813\t13.1\tPiancaldoli\tValid\tLL3.4\t44.244170\t11.502220\t1968-01-01T00:00:00.000\nFell\t18816\t\tPicote\tValid\tStone-uncl\t41.366670\t-6.233330\t1843-01-01T00:00:00.000\nFell\t18822\t23250\tPillistfer\tValid\tEL6\t58.666670\t25.733330\t1863-01-01T00:00:00.000\nFell\t18831\t42000\tPiplia Kalan\tValid\tEucrite-mmict\t26.034720\t73.941670\t1996-01-01T00:00:00.000\nFell\t18832\t37\tPiquetberg\tValid\tH\t-32.866670\t18.716670\t1881-01-01T00:00:00.000\nFell\t18834\t842\tPirgunje\tValid\tL6\t25.800000\t88.450000\t1882-01-01T00:00:00.000\nFell\t18835\t1161\tPirthalla\tValid\tH6\t29.583330\t76.000000\t1884-01-01T00:00:00.000\nFell\t18837\t3760\tPitts\tValid\tIron, IAB-ung\t31.950000\t-83.516670\t1921-01-01T00:00:00.000\nFell\t18846\t2085\tPlantersville\tValid\tH6\t30.700000\t-96.116670\t1930-01-01T00:00:00.000\nFell\t51706\t6913\tPleşcoi\tValid\tL5-6\t45.275000\t26.709720\t2008-01-01T00:00:00.000\nFell\t18849\t39\tPloschkovitz\tValid\tL5\t50.533330\t14.116670\t1723-01-01T00:00:00.000\nFell\t18851\t96\tPnompehn\tValid\tL6\t11.583330\t104.916670\t1868-01-01T00:00:00.000\nFound\t32592\t290.89999999999998\tDominion Range 03240\tValid\tLL5\t\t\t2002-01-01T00:00:00.000\nFell\t18853\t3000\tPohlitz\tValid\tL5\t50.933330\t12.133330\t1819-01-01T00:00:00.000\nFell\t18858\t350\tPokhra\tValid\tH5\t26.716670\t82.666670\t1866-01-01T00:00:00.000\nFell\t18860\t253.6\tPollen\tValid\tCM2\t66.348330\t14.015000\t1942-01-01T00:00:00.000\nFell\t18865\t157\tPontlyfni\tValid\tWinonaite\t53.036390\t-4.319440\t1931-01-01T00:00:00.000\nFell\t18874\t71400\tPortales Valley\tValid\tH6\t34.175000\t-103.295000\t1998-01-01T00:00:00.000\nFell\t18876\t4500\tPortugal\tValid\tStone-uncl\t38.500000\t-8.000000\t1796-01-01T00:00:00.000\nFell\t18879\t665\tPo-wang Chen\tValid\tLL\t31.416670\t118.500000\t1933-01-01T00:00:00.000\nFell\t18883\t2125\tPrambachkirchen\tValid\tL6\t48.302500\t13.940830\t1932-01-01T00:00:00.000\nFell\t18887\t5555\tPribram\tValid\tH5\t49.666670\t14.033330\t1959-01-01T00:00:00.000\nFell\t18888\t900\tPricetown\tValid\tL6\t39.116670\t-83.850000\t1893-01-01T00:00:00.000\nFell\t45984\t500\tPuerto Lápice\tValid\tEucrite-br\t39.350000\t-3.516670\t2007-01-01T00:00:00.000\nFell\t18899\t560\tPulsora\tValid\tH5\t23.366670\t75.183330\t1863-01-01T00:00:00.000\nFell\t18901\t250000\tPultusk\tValid\tH5\t52.766670\t21.266670\t1868-01-01T00:00:00.000\nFell\t18902\t100\tPunganaru\tValid\tStone-uncl\t13.333330\t78.950000\t1811-01-01T00:00:00.000\nFell\t18905\t300000\tPutinga\tValid\tL6\t-29.033330\t-53.050000\t1937-01-01T00:00:00.000\nFell\t18907\t1275\tQidong\tValid\tL/LL5\t32.083330\t121.500000\t1982-01-01T00:00:00.000\nFell\t18908\t2600\tQingzhen\tValid\tEH3\t26.533330\t106.466670\t1976-01-01T00:00:00.000\nFell\t22357\t7000\tQueen's Mercy\tValid\tH6\t-30.116670\t28.700000\t1925-01-01T00:00:00.000\nFell\t22358\t6045\tQuenggouk\tValid\tH4\t17.766670\t95.183330\t1857-01-01T00:00:00.000\nFell\t22360\t10750\tQuesa\tValid\tIron, IAB-ung\t39.000000\t-0.666670\t1898-01-01T00:00:00.000\nFell\t22361\t17450\tQuija\tValid\tH\t44.616670\t126.133330\t1990-01-01T00:00:00.000\nFell\t22363\t65\tQuincay\tValid\tL6\t46.600000\t0.250000\t1851-01-01T00:00:00.000\nFell\t22368\t5000\tRaco\tValid\tH5\t-26.666670\t-65.450000\t1957-01-01T00:00:00.000\nFell\t22371\t10200\tRaghunathpura\tValid\tIron, IIAB\t27.725280\t76.465000\t1986-01-01T00:00:00.000\nFell\t31302\t67225\tRahimyar Khan\tValid\tL5\t28.225000\t70.200000\t1983-01-01T00:00:00.000\nFell\t22376\t9000\tRakovka\tValid\tL6\t52.983330\t37.033330\t1878-01-01T00:00:00.000\nFell\t22384\t3766\tRamnagar\tValid\tL6\t26.450000\t82.900000\t1940-01-01T00:00:00.000\nFell\t22385\t100\tRampurhat\tValid\tLL\t24.166670\t87.766670\t1916-01-01T00:00:00.000\nFell\t22386\t4682\tRamsdorf\tValid\tL6\t51.883330\t6.933330\t1958-01-01T00:00:00.000\nFell\t22387\t290.39999999999998\tRanchapur\tValid\tH4\t23.983330\t87.083330\t1917-01-01T00:00:00.000\nFell\t22390\t300\tRancho de la Presa\tValid\tH5\t19.866670\t-100.816670\t1899-01-01T00:00:00.000\nFell\t22392\t3224.5\tRangala\tValid\tL6\t25.383330\t72.016670\t1937-01-01T00:00:00.000\nFell\t22394\t4910\tRaoyang\tValid\tL6\t38.200000\t115.700000\t1919-01-01T00:00:00.000\nFell\t22395\t6.1\tRas Tanura\tValid\tH6\t26.666670\t50.150000\t1961-01-01T00:00:00.000\nFell\t22396\t24700\tRasgrad\tValid\tStone-uncl\t43.500000\t26.533330\t1740-01-01T00:00:00.000\nFell\t22398\t910\tRatyn\tValid\tStone-uncl\t52.200000\t17.983330\t1880-01-01T00:00:00.000\nFell\t53502\t18.41\tRed Canyon Lake\tValid\tH5\t38.137420\t-119.758120\t2007-01-01T00:00:00.000\nFell\t22584\t17300\tReliegos\tValid\tL5\t42.475000\t-5.333330\t1947-01-01T00:00:00.000\nFell\t22585\t10000\tRembang\tValid\tIron, IVA\t-6.733330\t111.366670\t1919-01-01T00:00:00.000\nFell\t22586\t1000\tRenazzo\tValid\tCR2\t44.766670\t11.283330\t1824-01-01T00:00:00.000\nFell\t22587\t300\tRenca\tValid\tL5\t-32.750000\t-65.283330\t1925-01-01T00:00:00.000\nFell\t22589\t355\tRenqiu\tValid\tL6\t38.666670\t116.133330\t1916-01-01T00:00:00.000\nFell\t22590\t7000\tRepeev Khutor\tValid\tIron, IIF\t48.600000\t45.666670\t1933-01-01T00:00:00.000\nFell\t22592\t1\tRevelstoke\tValid\tCI1\t51.333330\t-118.950000\t1965-01-01T00:00:00.000\nFell\t22593\t3332\tRewari\tValid\tL6\t28.200000\t76.666670\t1929-01-01T00:00:00.000\nFell\t22597\t668\tRich Mountain\tValid\tL6\t35.033330\t-83.033330\t1903-01-01T00:00:00.000\nFell\t24140\t20000\tUzcudun\tValid\tL\t-44.116670\t-66.150000\t1948-01-01T00:00:00.000\nFell\t22599\t90000\tRichardton\tValid\tH5\t46.883330\t-102.316670\t1918-01-01T00:00:00.000\nFell\t22602\t1900\tRichland Springs\tValid\tOC\t31.250000\t-99.033330\t1980-01-01T00:00:00.000\nFell\t22603\t1800\tRichmond\tValid\tLL5\t37.466670\t-77.500000\t1828-01-01T00:00:00.000\nFell\t22611\t1310\tRio Negro\tValid\tL4\t-26.100000\t-49.800000\t1934-01-01T00:00:00.000\nFell\t22614\t103.3\tRivolta de Bassi\tValid\tStone-uncl\t45.483330\t9.516670\t1491-01-01T00:00:00.000\nFell\t22637\t340\tRochester\tValid\tH6\t41.083330\t-86.283330\t1876-01-01T00:00:00.000\nFell\t22640\t1641\tRockhampton\tValid\tStone-uncl\t-23.383330\t150.516670\t1895-01-01T00:00:00.000\nFell\t22641\t400\tRoda\tValid\tDiogenite\t42.300000\t0.550000\t1871-01-01T00:00:00.000\nFell\t22642\t2900\tRodach\tValid\tStone-uncl\t50.350000\t10.800000\t1775-01-01T00:00:00.000\nFell\t22766\t10600\tRose City\tValid\tH5\t44.516670\t-83.950000\t1921-01-01T00:00:00.000\nFell\t22773\t3500\tRowton\tValid\tIron, IIIAB\t52.766670\t-2.516670\t1876-01-01T00:00:00.000\nFell\t22780\t465.5\tRuhobobo\tValid\tL6\t-1.450000\t29.833330\t1976-01-01T00:00:00.000\nFell\t22782\t67\tRumuruti\tValid\tR3.8-6\t0.266670\t36.533330\t1934-01-01T00:00:00.000\nFell\t22783\t6000\tRupota\tValid\tL4-6\t-10.266670\t38.766670\t1949-01-01T00:00:00.000\nFell\t22791\t13000\tRyechki\tValid\tL5\t51.133330\t34.500000\t1914-01-01T00:00:00.000\nFell\t22792\t1250\tSabetmahet\tValid\tH5\t27.433330\t82.083330\t1855-01-01T00:00:00.000\nFell\t22793\t478\tSabrum\tValid\tLL6\t23.083330\t91.666670\t1999-01-01T00:00:00.000\nFell\t22796\t\tSagan\tValid\tStone-uncl\t51.533330\t14.883330\t1636-01-01T00:00:00.000\nFell\t23101\t14000\tSaint-Sauveur\tValid\tEH5\t43.733330\t1.383330\t1914-01-01T00:00:00.000\nFell\t23102\t271000\tSaint-Séverin\tValid\tLL6\t45.300000\t0.233330\t1966-01-01T00:00:00.000\nFell\t23103\t4180\tSakauchi\tValid\tIron\t35.666670\t136.300000\t1913-01-01T00:00:00.000\nFell\t23107\t61.4\tSalem\tValid\tL6\t44.979170\t-122.969440\t1981-01-01T00:00:00.000\nFell\t23111\t9000\tSalles\tValid\tL5\t46.050000\t4.633330\t1798-01-01T00:00:00.000\nFell\t23114\t43\tSalzwedel\tValid\tLL5\t52.750000\t11.050000\t1985-01-01T00:00:00.000\nFell\t23115\t2462\tSamelia\tValid\tIron, IIIAB\t25.666670\t74.866670\t1921-01-01T00:00:00.000\nFell\t23128\t56\tSan Juan Capistrano\tValid\tH6\t33.484720\t-117.662500\t1973-01-01T00:00:00.000\nFell\t31315\t237\tSan Michele\tValid\tL6\t43.666670\t13.000000\t2002-01-01T00:00:00.000\nFell\t23130\t282\tSan Pedro de Quiles\tValid\tL6\t-31.016670\t-71.400000\t1956-01-01T00:00:00.000\nFell\t34063\t460\tSan Pedro Jacuaro\tValid\tLL6\t19.766670\t-100.650000\t1968-01-01T00:00:00.000\nFell\t23161\t400\tSanta Barbara\tValid\tL4\t-29.200000\t-51.866670\t1873-01-01T00:00:00.000\nFell\t23164\t60\tSanta Cruz\tValid\tCM2\t24.166670\t-99.333330\t1939-01-01T00:00:00.000\nFell\t23165\t5500\tSanta Isabel\tValid\tL6\t-33.900000\t-61.700000\t1924-01-01T00:00:00.000\nFell\t50909\t4000\tSanta Lucia (2008)\tValid\tL6\t-31.535556\t-68.489444\t2008-01-01T00:00:00.000\nFell\t23171\t927\tSão Jose do Rio Preto\tValid\tH4\t-20.810000\t-49.380560\t1962-01-01T00:00:00.000\nFell\t23176\t200000\tSaratov\tValid\tL4\t52.550000\t46.550000\t1918-01-01T00:00:00.000\nFell\t23187\t695\tSasagase\tValid\tH\t34.716670\t137.783330\t1688-01-01T00:00:00.000\nFell\t23188\t4000\tSauguis\tValid\tL6\t43.150000\t-0.850000\t1868-01-01T00:00:00.000\nFell\t23190\t2500\tSavtschenskoje\tValid\tLL4\t47.216670\t29.866670\t1894-01-01T00:00:00.000\nFell\t23192\t430\tSayama\tValid\tCM2\t35.866670\t139.400000\t1986-01-01T00:00:00.000\nFell\t23455\t412\tSazovice\tValid\tL5\t49.233330\t17.566670\t1934-01-01T00:00:00.000\nFell\t23457\t7000\tSchellin\tValid\tL\t53.350000\t15.050000\t1715-01-01T00:00:00.000\nFell\t23458\t283.3\tSchenectady\tValid\tH5\t42.860830\t-73.950280\t1968-01-01T00:00:00.000\nFell\t23460\t8000\tSchönenberg\tValid\tL6\t48.116670\t10.466670\t1846-01-01T00:00:00.000\nFell\t23472\t5400\tSearsmont\tValid\tH5\t44.366670\t-69.200000\t1871-01-01T00:00:00.000\nFell\t23473\t240\tSediköy\tValid\tL6\t38.300000\t27.133330\t1917-01-01T00:00:00.000\nFell\t23476\t6930\tSegowlie\tValid\tLL6\t26.750000\t84.783330\t1853-01-01T00:00:00.000\nFell\t23481\t1590\tSelakopi\tValid\tH5\t-7.233330\t107.333330\t1939-01-01T00:00:00.000\nFell\t23483\t150\tSeldebourak\tValid\tH5\t22.833330\t4.983330\t1947-01-01T00:00:00.000\nFell\t23487\t691\tSemarkona\tValid\tLL3.00\t22.250000\t79.000000\t1940-01-01T00:00:00.000\nFell\t23495\t4000\tSena\tValid\tH4\t41.716670\t-0.050000\t1773-01-01T00:00:00.000\nFell\t23496\t866\tSenboku\tValid\tH6\t39.438330\t140.511670\t1993-01-01T00:00:00.000\nFell\t23500\t20000\tSeoni\tValid\tH6\t21.683890\t79.500830\t1966-01-01T00:00:00.000\nFell\t23501\t8500\tSeres\tValid\tH4\t41.050000\t23.566670\t1818-01-01T00:00:00.000\nFell\t23502\t1800\tSerra de Magé\tValid\tEucrite-cm\t-8.383330\t-36.766670\t1923-01-01T00:00:00.000\nFell\t23504\t350\tSete Lagoas\tValid\tH4\t-19.466670\t-44.216670\t1908-01-01T00:00:00.000\nFell\t23508\t180\tSevilla\tValid\tLL4\t37.416670\t-6.000000\t1862-01-01T00:00:00.000\nFell\t23509\t101000\tSevrukovo\tValid\tL5\t50.616670\t36.600000\t1874-01-01T00:00:00.000\nFell\t23512\t7000\tSfax\tValid\tL6\t34.750000\t10.716670\t1989-01-01T00:00:00.000\nFell\t23521\t4000\tShalka\tValid\tDiogenite\t23.100000\t87.300000\t1850-01-01T00:00:00.000\nFell\t23525\t1265\tSharps\tValid\tH3.4\t37.833330\t-76.700000\t1921-01-01T00:00:00.000\nFell\t23529\t18600\tShelburne\tValid\tL5\t44.050000\t-80.166670\t1904-01-01T00:00:00.000\nFell\t23530\t5000\tShergotty\tValid\tMartian (shergottite)\t24.550000\t84.833330\t1865-01-01T00:00:00.000\nFell\t23531\t605\tSheyang\tValid\tL6\t33.650000\t120.066670\t1976-01-01T00:00:00.000\nFell\t23534\t3679.7\tShikarpur\tValid\tL6\t25.850000\t87.577500\t1921-01-01T00:00:00.000\nFell\t23582\t3900\tShuangyang\tValid\tH5\t43.500000\t125.666670\t1971-01-01T00:00:00.000\nFell\t23583\t5000\tShupiyan\tValid\tH6\t33.716670\t74.833330\t1912-01-01T00:00:00.000\nFell\t23584\t3200\tShytal\tValid\tL6\t24.333330\t90.166670\t1863-01-01T00:00:00.000\nFell\t23586\t3700\tSiena\tValid\tLL5\t43.116670\t11.600000\t1794-01-01T00:00:00.000\nFell\t23593\t23000000\tSikhote-Alin\tValid\tIron, IIAB\t46.160000\t134.653330\t1947-01-01T00:00:00.000\nFell\t23594\t1710\tSilao\tValid\tH5\t20.933330\t-101.383330\t1995-01-01T00:00:00.000\nFell\t55584\t0.15\tSilistra\tValid\tAchondrite-ung\t44.116670\t27.266670\t1917-01-01T00:00:00.000\nFell\t23603\t1222\tSimmern\tValid\tH5\t49.983330\t7.533330\t1920-01-01T00:00:00.000\nFell\t23606\t1455\tSinai\tValid\tL6\t30.900000\t32.483330\t1916-01-01T00:00:00.000\nFell\t23611\t8400\tSindhri\tValid\tH5\t26.216670\t69.550000\t1901-01-01T00:00:00.000\nFell\t23613\t2000\tSinnai\tValid\tH6\t39.300000\t9.200000\t1956-01-01T00:00:00.000\nFell\t23614\t4100\tSioux County\tValid\tEucrite-mmict\t42.583330\t-103.666670\t1933-01-01T00:00:00.000\nFell\t23616\t1600\tSitathali\tValid\tH5\t20.916670\t82.583330\t1875-01-01T00:00:00.000\nFell\t23617\t40000\tSivas\tValid\tH6\t39.824670\t36.135830\t1989-01-01T00:00:00.000\nFell\t23619\t630\tSixiangkou\tValid\tL5\t32.433330\t119.866670\t1989-01-01T00:00:00.000\nFell\t23621\t850\tSki\tValid\tL6\t59.733330\t10.866670\t1848-01-01T00:00:00.000\nFell\t23626\t1708\tSlavetic\tValid\tH5\t45.683330\t15.600000\t1868-01-01T00:00:00.000\nFell\t23645\t2750\tSlobodka\tValid\tL4\t55.000000\t35.000000\t1818-01-01T00:00:00.000\nFell\t23660\t72.900000000000006\tSoheria\tValid\tOC\t27.133330\t84.066670\t1960-01-01T00:00:00.000\nFell\t23661\t80000\tSoko-Banja\tValid\tLL4\t43.666670\t21.866670\t1877-01-01T00:00:00.000\nFell\t23663\t54\tSologne\tValid\tH5\t47.366670\t1.733330\t1860-01-01T00:00:00.000\nFell\t53829\t1066\tSołtmany\tValid\tL6\t54.008830\t22.005000\t2011-01-01T00:00:00.000\nFell\t23667\t17100\tSone\tValid\tH5\t35.166670\t135.333330\t1866-01-01T00:00:00.000\nFell\t23668\t36900\tSongyuan\tValid\tL6\t45.250000\t125.000000\t1993-01-01T00:00:00.000\nFell\t23670\t958\tSopot\tValid\tOC\t44.416670\t23.500000\t1927-01-01T00:00:00.000\nFell\t23671\t2050\tSoroti\tValid\tIron, ungrouped\t1.700000\t33.633330\t1945-01-01T00:00:00.000\nFell\t23081\t360\tSt. Caprais-de-Quinsac\tValid\tL6\t44.750000\t0.050000\t1883-01-01T00:00:00.000\nFell\t23082\t5500\tSt. Christophe-la-Chartreuse\tValid\tL6\t46.950000\t-1.500000\t1841-01-01T00:00:00.000\nFell\t23083\t700\tSt. Denis Westrem\tValid\tL6\t51.050000\t3.750000\t1855-01-01T00:00:00.000\nFell\t23087\t4000\tSt. Germain-du-Pinel\tValid\tH6\t48.016670\t-1.150000\t1890-01-01T00:00:00.000\nFell\t23089\t1000\tSt. Louis\tValid\tH4\t38.700000\t-90.233330\t1950-01-01T00:00:00.000\nFell\t23090\t13780\tSt. Mark's\tValid\tEH5\t-32.016670\t27.416670\t1903-01-01T00:00:00.000\nFell\t23091\t24.3\tSt. Mary's County\tValid\tLL3.3\t38.166670\t-76.383330\t1919-01-01T00:00:00.000\nFell\t23092\t8300\tSt. Mesmin\tValid\tLL6\t48.450000\t3.933330\t1866-01-01T00:00:00.000\nFell\t23093\t17000\tSt. Michel\tValid\tL6\t61.650000\t27.200000\t1910-01-01T00:00:00.000\nFell\t23097\t134.30000000000001\tSt.-Chinian\tValid\tL6\t43.433330\t2.950000\t1959-01-01T00:00:00.000\nFell\t23712\t34000\tStälldalen\tValid\tH5\t59.933330\t14.950000\t1876-01-01T00:00:00.000\nFell\t23713\t52000\tStannern\tValid\tEucrite-mmict\t49.283330\t15.566670\t1808-01-01T00:00:00.000\nFell\t23717\t1500\tStavropol\tValid\tL6\t45.050000\t41.983330\t1857-01-01T00:00:00.000\nFell\t23099\t4960\tSte. Marguerite\tValid\tH4\t50.766670\t3.000000\t1962-01-01T00:00:00.000\nFell\t23724\t325000\tSterlitamak\tValid\tIron, IIIAB\t53.666670\t55.983330\t1990-01-01T00:00:00.000\nFell\t23726\t\tStolzenau\tValid\tStone-uncl\t52.533330\t9.050000\t1647-01-01T00:00:00.000\nFell\t23728\t50\tStratford\tValid\tL6\t41.200000\t-73.133330\t1974-01-01T00:00:00.000\nFell\t23729\t13400\tStrathmore\tValid\tL6\t56.583330\t-3.250000\t1917-01-01T00:00:00.000\nFell\t23732\t10400\tStretchleigh\tValid\tStone-uncl\t50.383330\t-3.950000\t1623-01-01T00:00:00.000\nFell\t23733\t25400\tSt-Robert\tValid\tH5\t45.968610\t-72.978060\t1994-01-01T00:00:00.000\nFell\t23736\t3500\tSuccess\tValid\tL6\t36.483330\t-90.666670\t1924-01-01T00:00:00.000\nFell\t23737\t815.3\tSuchy Dul\tValid\tL6\t50.538060\t16.263330\t1969-01-01T00:00:00.000\nFell\t23738\t260000\tSuizhou\tValid\tL6\t31.616670\t113.466670\t1986-01-01T00:00:00.000\nFell\t48951\t110000\tSulagiri\tValid\tLL6\t12.666670\t78.033330\t2008-01-01T00:00:00.000\nFell\t23741\t1710.5\tSultanpur\tValid\tL/LL6\t25.933330\t84.283330\t1916-01-01T00:00:00.000\nFell\t23745\t637\tSungach\tValid\tH5\t44.866670\t133.166670\t1935-01-01T00:00:00.000\nFell\t23760\t7235\tSupuhee\tValid\tH6\t26.716670\t84.216670\t1865-01-01T00:00:00.000\nFell\t55529\t992.5\tSutter's Mill\tValid\tC\t38.803890\t-120.908060\t2012-01-01T00:00:00.000\nFell\t23773\t5560\tSylacauga\tValid\tH4\t33.188360\t-86.294500\t1954-01-01T00:00:00.000\nFell\t23776\t7540\tTabor\tValid\tH5\t49.400000\t14.650000\t1753-01-01T00:00:00.000\nFell\t23778\t9000\tTadjera\tValid\tL5\t36.183330\t5.416670\t1867-01-01T00:00:00.000\nFell\t23782\t10000\tTagish Lake\tValid\tC2-ung\t59.704440\t-134.201390\t2000-01-01T00:00:00.000\nFell\t23784\t1000\tTahara\tValid\tH4/5\t34.720000\t137.305000\t1991-01-01T00:00:00.000\nFell\t23789\t720\tTakenouchi\tValid\tH5\t35.383330\t134.900000\t1880-01-01T00:00:00.000\nFell\t23791\t1421\tTalampaya\tValid\tEucrite-cm\t\t\t1995-01-01T00:00:00.000\nFell\t23795\t10500\tTambakwatu\tValid\tL6\t-7.750000\t112.766670\t1975-01-01T00:00:00.000\nFell\t48691\t100000\tTamdakht\tValid\tH5\t31.163330\t-7.015000\t2008-01-01T00:00:00.000\nFell\t23801\t905\tTané\tValid\tL5\t35.433330\t136.233330\t1918-01-01T00:00:00.000\nFell\t23873\t3850\tTaonan\tValid\tL5\t45.400000\t122.900000\t1965-01-01T00:00:00.000\nFell\t23884\t12000\tTatahouine\tValid\tDiogenite\t32.950000\t10.416670\t1931-01-01T00:00:00.000\nFell\t23885\t2500\tTathlith\tValid\tL6\t19.383330\t43.733330\t1967-01-01T00:00:00.000\nFell\t23887\t6000\tTauk\tValid\tL6\t35.133330\t44.450000\t1929-01-01T00:00:00.000\nFell\t23888\t21000\tTauti\tValid\tL6\t46.716670\t23.500000\t1937-01-01T00:00:00.000\nFell\t23897\t160000\tTenham\tValid\tL6\t-25.733330\t142.950000\t1879-01-01T00:00:00.000\nFell\t23898\t28500\tTennasilm\tValid\tL4\t58.033330\t26.950000\t1872-01-01T00:00:00.000\nFell\t23908\t342\tThal\tValid\tH6\t33.400000\t70.600000\t1950-01-01T00:00:00.000\nFell\t54493\t14200\tThika\tValid\tL6\t-1.002780\t37.150280\t2011-01-01T00:00:00.000\nFell\t23976\t45300\tThuathe\tValid\tH4/5\t-29.333330\t27.583330\t2002-01-01T00:00:00.000\nFell\t23984\t2232\tTianzhang\tValid\tH5\t32.946670\t118.990000\t1986-01-01T00:00:00.000\nFell\t23989\t28000\tTieschitz\tValid\tH/L3.6\t49.600000\t17.116670\t1878-01-01T00:00:00.000\nFell\t23998\t74800\tTilden\tValid\tL6\t38.200000\t-89.683330\t1927-01-01T00:00:00.000\nFell\t23999\t3000\tTillaberi\tValid\tL6\t14.250000\t1.533330\t1970-01-01T00:00:00.000\nFell\t24004\t65500\tTimochin\tValid\tH5\t54.500000\t35.200000\t1807-01-01T00:00:00.000\nFell\t24009\t230\tTirupati\tValid\tH6\t13.633330\t79.416670\t1934-01-01T00:00:00.000\nFell\t54823\t7000\tTissint\tValid\tMartian (shergottite)\t29.481950\t-7.611230\t2011-01-01T00:00:00.000\nFell\t24011\t20000\tTjabe\tValid\tH6\t-7.083330\t111.533330\t1869-01-01T00:00:00.000\nFell\t24012\t16500\tTjerebon\tValid\tL5\t-6.666670\t106.583330\t1922-01-01T00:00:00.000\nFell\t24019\t600\tTomakovka\tValid\tLL6\t47.850000\t34.766670\t1905-01-01T00:00:00.000\n"
  },
  {
    "path": "tests/golden/freeze-sheet-attrs.tsv",
    "content": "name\twidth\ttype\tfmtstr\tvalue\taggregators\tsortorder\nOrderDate\t12\t\t\t2016-01-06\t\t\nRegion\t9\t\t\tEast\t\t\nRep\t10\t\t\tJones\t\t\nItem\t9\t\t\tPencil\t\t\nUnits\t7\tint\t\t95\tsum\t\nUnit_Cost\t11\t\t\t1.99\t\t\nTotal\t9\t\t\t189.05\t\t\n"
  },
  {
    "path": "tests/golden/freq-dive-except.tsv",
    "content": "Date\tCustomer\tSKU\tItem\tQuantity\tUnit\tPaid\n8/22/2018 9:38a\tDavid Attenborough\tBIRD160\tFood, Quoll\t1\t29.95\t$29.95\n8/16/2018 5:15p\tMichael Smith\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t1\t29.95\t$31.85\n8/28/2018 5:32p\tSusan Ashworth\tCAT020\tCat, Scottish Fold (Felis catus)\t1\t$1,964.53\t$1964.53\n7/10/2018 5:23p\tSusan Ashworth\tCAT060\tCat, Korat (Felis catus)\t1\t$720.42\t$720.42\n7/31/2018 5:42p\tRubeus Hagrid\tCAT060\tFood, Dragon - 50kg\t5\t$720.42\t$3602.1\n8/2/2018 5:12p\tSusan Ashworth\tCAT110\tCat, Maine Coon (Felix catus)\t1\t$1,309.68\t$1309.68\n8/16/2018 4:00p\tKyle Kennedy\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$2,495.99\t$2495.99\n7/3/2018 3:32p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t1\t$4.22\t$4.22\n8/15/2018 3:48p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t2\t$4.22\t$8.44\n7/5/2018 4:15p\tDouglas \"Dougie\" Powers\tFOOD121\tFood, Adult Cat 3.5 oz\t1\t$4.22\t$4.22\n7/6/2018 12:15p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t$1.29\t157¥\n7/18/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t6\t$1.29\t157¥\n7/24/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/27/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/10/2018 5:23p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t1\t$14.94\t$14.94\n8/2/2018 5:12p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t3\t$14.94\t$44.82\n8/28/2018 5:32p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t2\t$14.94\t$29.88\n8/13/2018 2:08p\tMaría Fernández\tFOOD146\tForti Diet Prohealth Mouse/Rat 3lbs\t2\t$2.00\t$4.0\n7/20/2018 2:13p\tJon Arbuckle\tFOOD167\tFood, Premium Wet Cat - 3.5 oz\t50\t$3.95\t$197.5\n7/19/2018 10:28a\tRubeus Hagrid\tFOOD170\tFood, Dog - 5kg\t5\t$44.95\t$224.75\n8/22/2018 2:13p\tJon Arbuckle\tFOOD170\tFood, Adult Dog - 5kg\t1\t$44.95\t$44.95\n8/1/2018 2:44p\tDavid Attenborough\tFOOD360\tFood, Rhinocerous - 50kg\t4\t$5.72\t$22.88\n7/26/2018 4:39p\tDouglas \"Dougie\" Powers\tFOOD420\tFood, Shark - 10 kg\t1\t$15.70\t$15.7\n8/20/2018 1:47p\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tGoat, American Pygmy (Capra hircus)\t1\t₪499\t$160.51\n7/17/2018 11:30a\tHelen Halestorm\tLAGO342\tRabbit (Oryctolagus cuniculus)\t2\t$32.94\t$65.88\n8/20/2018 5:12p\tDavid Attenborough\tNSCT084\tFood, Pangolin\t30\t$.17\t$5.10\n7/10/2018 10:28a\tDavid Attenborough\tNSCT201\tFood, Salamander\t30\t$.05\t$1.5\n8/17/2018 9:26a\tRubeus Hagrid\tNSCT201\tFood, Spider\t5\t$.05\t$0.25\n8/20/2018 3:31p\tMonica Johnson\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t30\t$.05\t$1.5\n8/27/2018 3:05p\tMonica Johnson\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t1\t$1.99\t$1.99\n7/13/2018 10:26a\tWil Wheaton\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t1\t$39.95\t$39.95\n8/7/2018 4:12p\tJuan Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/13/2018 2:07p\tMonica Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/7/2018 4:12p\tJuan Johnson\tREPT082\tKingsnake, California (Lampropeltis getula)\t1\t$89.95\t$89.95\n8/31/2018 5:57p\tJuan Johnson\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t1\t$99.95\t$99.95\n7/30/2018 12:17p\t桜 高橋 (Sakura Takahashi)\tRETURN\tFood, Senior Wet Cat - 3 oz\t1\t$1.29\t157¥\n8/20/2018 9:36a\tKyle Kennedy\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$1,247.99\t-$1247.99\n8/16/2018 11:50a\tHelen Halestorm\tRETURN\tRabbit (Oryctolagus cuniculus)\t6\t$0\t$0.0\n8/15/2018 11:57a\tMr. Praline\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t1\t$2300.00\t-$2300.0\n8/22/2018 5:49p\tמרוסיה ניסנהולץ\tSFTY052\tFire Extinguisher, kitchen-rated\t1\t$61.70\t$61.70\n7/23/2018 4:23p\tDouglas \"Dougie\" Powers\tTOY235\tLaser Pointer\t1\t$16.12\t$16.12\n"
  },
  {
    "path": "tests/golden/freq-error.tsv",
    "content": "key1\tcount\tqty_sum\tqty*amt_avg\n2018-10-20\t1\t0\t\n2018-07-27\t3\t320\t292.48\n2017-12-25\t1\t16\t4.80\n2016-01-01\t2\t3\t6.00\n\t2\t36\t139.20\n#ERR\t1\t0\t\n"
  },
  {
    "path": "tests/golden/freq-fmtstr.tsv",
    "content": "Date\tcount\tpercent\n2018-07\t21\t41.18\n2018-08\t30\t58.82\n"
  },
  {
    "path": "tests/golden/freq-same-int.tsv",
    "content": "Quantity\tcount\tpercent\n2\t1\t1.96\n3\t50\t98.04\n"
  },
  {
    "path": "tests/golden/freq-summary.tsv",
    "content": "Total\tcount\tQuantity_mean\nTotal\t51\t7.90\nSelected\t11\t29.36\n"
  },
  {
    "path": "tests/golden/freqtbl-nested-dive-selected.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016-01-06\tEast\tJones\tPencil\t95\t1.99\t189.05\n"
  },
  {
    "path": "tests/golden/freqtbl-openrow.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016-01-06\tEast\tJones\tPencil\t95\t1.99\t189.05\n"
  },
  {
    "path": "tests/golden/frozen-attrs.tsv",
    "content": "name\twidth\ttype\tfmtstr\tvalue\taggregators\tsortorder\nOrderDate\t12\t\t\t2016-01-06\t\t\nRegion\t9\t\t\tEast\t\t\nRep\t10\t\t\tJones\t\t\nItem\t9\t\t\tPencil\t\t\nUnits\t7\tint\t\t95\tsum\t\nUnits_frozen\t7\tint\t\t95\tsum\t\nUnit_Cost\t11\t\t\t1.99\t\t\nTotal\t9\t\t\t189.05\t\t\n"
  },
  {
    "path": "tests/golden/full-join.tsv",
    "content": "Key\tC\tD\tA\tB\n1\t\t\ta1\tb1\n2\ta2\tb2\tc1\td1\n2\ta2\tb2\te1\tf1\n3\tc2\td2\t\t\n"
  },
  {
    "path": "tests/golden/gMelt.tsv",
    "content": "Date\tCustomer\tSKU\tVariable\tCurrency\tCost\n7/3/2018 1:47p\tRobert Armstrong\tFOOD213\tUnit\t$\t12.95\n7/3/2018 1:47p\tRobert Armstrong\tFOOD213\tTotal\t$\t$51.8\n7/3/2018 3:32p\tKyle Kennedy\tFOOD121\tUnit\t$\t4.22\n7/3/2018 3:32p\tKyle Kennedy\tFOOD121\tTotal\t$\t$4.22\n7/5/2018 4:15p\tDouglas \"Dougie\" Powers\tFOOD121\tUnit\t$\t4.22\n7/5/2018 4:15p\tDouglas \"Dougie\" Powers\tFOOD121\tTotal\t$\t$4.22\n7/6/2018 12:15p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tUnit\t$\t1.29\n7/6/2018 12:15p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tTotal\t$\t157¥\n7/10/2018 10:28a\tDavid Attenborough\tNSCT201\tUnit\t$\t.05\n7/10/2018 10:28a\tDavid Attenborough\tNSCT201\tTotal\t$\t$1.5\n7/10/2018 5:23p\tSusan Ashworth\tCAT060\tUnit\t$\t720.42\n7/10/2018 5:23p\tSusan Ashworth\tCAT060\tTotal\t$\t$720.42\n7/10/2018 5:23p\tSusan Ashworth\tFOOD130\tUnit\t$\t14.94\n7/10/2018 5:23p\tSusan Ashworth\tFOOD130\tTotal\t$\t$14.94\n7/13/2018 10:26a\tWil Wheaton\tNSCT523\tUnit\tAUD$\t39.95\n7/13/2018 10:26a\tWil Wheaton\tNSCT523\tTotal\t$\t$39.95\n7/13/2018 3:49p\tRobert Armstrong\tFOOD216\tUnit\t$\t12.95\n7/13/2018 3:49p\tRobert Armstrong\tFOOD216\tTotal\t$\t$51.8\n7/17/2018 9:01a\tRobert Armstrong\tFOOD217\tUnit\t$\t12.95\n7/17/2018 9:01a\tRobert Armstrong\tFOOD217\tTotal\t$\t$51.8\n7/17/2018 11:30a\tHelen Halestorm\tLAGO342\tUnit\t$\t32.94\n7/17/2018 11:30a\tHelen Halestorm\tLAGO342\tTotal\t$\t$65.88\n7/18/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tUnit\t$\t1.29\n7/18/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tTotal\t$\t157¥\n7/19/2018 10:28a\tRubeus Hagrid\tFOOD170\tUnit\tEUR\t44.95\n7/19/2018 10:28a\tRubeus Hagrid\tFOOD170\tTotal\t$\t$224.75\n7/20/2018 2:13p\tJon Arbuckle\tFOOD167\tUnit\t$\t3.95\n7/20/2018 2:13p\tJon Arbuckle\tFOOD167\tTotal\t$\t$197.5\n7/23/2018 1:41p\tRobert Armstrong\tFOOD215\tUnit\t$\t12.95\n7/23/2018 1:41p\tRobert Armstrong\tFOOD215\tTotal\t$\t$51.8\n7/23/2018 4:23p\tDouglas \"Dougie\" Powers\tTOY235\tUnit\t$\t16.12\n7/23/2018 4:23p\tDouglas \"Dougie\" Powers\tTOY235\tTotal\t$\t$16.12\n7/24/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tUnit\t$\t1.29\n7/24/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tTotal\t$\t157¥\n7/26/2018 4:39p\tDouglas \"Dougie\" Powers\tFOOD420\tUnit\tPES\t15.70\n7/26/2018 4:39p\tDouglas \"Dougie\" Powers\tFOOD420\tTotal\t$\t$15.7\n7/27/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tUnit\t$\t1.29\n7/27/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tTotal\t$\t157¥\n7/30/2018 12:17p\t桜 高橋 (Sakura Takahashi)\tRETURN\tUnit\t$\t1.29\n7/30/2018 12:17p\t桜 高橋 (Sakura Takahashi)\tRETURN\tTotal\t$\t157¥\n7/31/2018 5:42p\tRubeus Hagrid\tCAT060\tUnit\t$\t720.42\n7/31/2018 5:42p\tRubeus Hagrid\tCAT060\tTotal\t$\t$3602.1\n8/1/2018 2:44p\tDavid Attenborough\tFOOD360\tUnit\t$\t5.72\n8/1/2018 2:44p\tDavid Attenborough\tFOOD360\tTotal\t$\t$22.88\n8/2/2018 5:12p\tSusan Ashworth\tCAT110\tUnit\t$\t1,309.68\n8/2/2018 5:12p\tSusan Ashworth\tCAT110\tTotal\t$\t$1309.68\n8/2/2018 5:12p\tSusan Ashworth\tFOOD130\tUnit\t$\t14.94\n8/2/2018 5:12p\tSusan Ashworth\tFOOD130\tTotal\t$\t$44.82\n8/6/2018 10:21a\tRobert Armstrong\tFOOD212\tUnit\t$\t12.95\n8/6/2018 10:21a\tRobert Armstrong\tFOOD212\tTotal\t$\t$51.8\n8/7/2018 4:12p\tJuan Johnson\tREPT082\tUnit\t$\t89.95\n8/7/2018 4:12p\tJuan Johnson\tREPT082\tTotal\t$\t$89.95\n8/7/2018 4:12p\tJuan Johnson\tRDNT443\tUnit\t$\t1.49\n8/7/2018 4:12p\tJuan Johnson\tRDNT443\tTotal\t$\t$1.49\n8/10/2018 4:31p\tRobert Armstrong\tFOOD211\tUnit\t$\t12.95\n8/10/2018 4:31p\tRobert Armstrong\tFOOD211\tTotal\t$\t$51.8\n8/13/2018 2:07p\tMonica Johnson\tRDNT443\tUnit\t$\t1.49\n8/13/2018 2:07p\tMonica Johnson\tRDNT443\tTotal\t$\t$1.49\n8/13/2018 2:08p\tMaría Fernández\tFOOD146\tUnit\t$\t2.00\n8/13/2018 2:08p\tMaría Fernández\tFOOD146\tTotal\t$\t$4.0\n8/15/2018 11:57a\tMr. Praline\tRETURN\tUnit\t$\t2300.00\n8/15/2018 11:57a\tMr. Praline\tRETURN\tTotal\t$\t-$2300.0\n8/15/2018 3:48p\tKyle Kennedy\tFOOD121\tUnit\t$\t4.22\n8/15/2018 3:48p\tKyle Kennedy\tFOOD121\tTotal\t$\t$8.44\n8/16/2018 11:50a\tHelen Halestorm\tRETURN\tUnit\t$\t0\n8/16/2018 11:50a\tHelen Halestorm\tRETURN\tTotal\t$\t$0.0\n8/16/2018 4:00p\tKyle Kennedy\tDOG010\tUnit\t$\t2,495.99\n8/16/2018 4:00p\tKyle Kennedy\tDOG010\tTotal\t$\t$2495.99\n8/16/2018 5:15p\tMichael Smith\tBIRD160\tUnit\t$\t#ERR\n8/16/2018 5:15p\tMichael Smith\tBIRD160\tTotal\t$\t$31.85\n8/17/2018 9:26a\tRubeus Hagrid\tNSCT201\tUnit\t$\t.05\n8/17/2018 9:26a\tRubeus Hagrid\tNSCT201\tTotal\t$\t$0.25\n8/20/2018 9:36a\tKyle Kennedy\tRETURN\tUnit\t$\t1,247.99\n8/20/2018 9:36a\tKyle Kennedy\tRETURN\tTotal\t$\t-$1247.99\n8/20/2018 1:47p\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tUnit\t$\t499\n8/20/2018 1:47p\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tTotal\t$\t$160.51\n8/20/2018 3:31p\tMonica Johnson\tNSCT201\tUnit\t$\t.05\n8/20/2018 3:31p\tMonica Johnson\tNSCT201\tTotal\t$\t$1.5\n8/20/2018 5:12p\tDavid Attenborough\tNSCT084\tUnit\t$\t.17\n8/20/2018 5:12p\tDavid Attenborough\tNSCT084\tTotal\t$\t$5.10\n8/21/2018 12:13p\tRobert Armstrong\tFOOD214\tUnit\t$\t12.95\n8/21/2018 12:13p\tRobert Armstrong\tFOOD214\tTotal\t$\t$51.8\n8/22/2018 9:38a\tDavid Attenborough\tBIRD160\tUnit\t$\t#ERR\n8/22/2018 9:38a\tDavid Attenborough\tBIRD160\tTotal\t$\t$29.95\n8/22/2018 2:13p\tJon Arbuckle\tFOOD170\tUnit\t$\t44.95\n8/22/2018 2:13p\tJon Arbuckle\tFOOD170\tTotal\t$\t$44.95\n8/22/2018 5:49p\tמרוסיה ניסנהולץ\tSFTY052\tUnit\t$\t61.70\n8/22/2018 5:49p\tמרוסיה ניסנהולץ\tSFTY052\tTotal\t$\t$61.70\n8/24/2018 11:42a\tRobert Armstrong\tFOOD218\tUnit\t$\t12.95\n8/24/2018 11:42a\tRobert Armstrong\tFOOD218\tTotal\t$\t$51.8\n8/27/2018 3:05p\tMonica Johnson\tNSCT443\tUnit\t$\t1.99\n8/27/2018 3:05p\tMonica Johnson\tNSCT443\tTotal\t$\t$1.99\n8/28/2018 5:32p\tSusan Ashworth\tCAT020\tUnit\t$\t1,964.53\n8/28/2018 5:32p\tSusan Ashworth\tCAT020\tTotal\t$\t$1964.53\n8/28/2018 5:32p\tSusan Ashworth\tFOOD130\tUnit\t$\t14.94\n8/28/2018 5:32p\tSusan Ashworth\tFOOD130\tTotal\t$\t$29.88\n8/29/2018 10:07a\tRobert Armstrong\tFOOD219\tUnit\t$\t12.95\n8/29/2018 10:07a\tRobert Armstrong\tFOOD219\tTotal\t$\t$51.8\n8/31/2018 12:00a\tRobert Armstrong\tFOOD219\tUnit\t$\t12.95\n8/31/2018 12:00a\tRobert Armstrong\tFOOD219\tTotal\t$\t$1864.8\n8/31/2018 5:57p\tJuan Johnson\tREPT217\tUnit\t$\t99.95\n8/31/2018 5:57p\tJuan Johnson\tREPT217\tTotal\t$\t$99.95\n"
  },
  {
    "path": "tests/golden/getitem.tsv",
    "content": ":@computed_region_cbhk_fwbd\t:@computed_region_nnqa_25f4\tfall\tgeolocation.type\tid\tmass\tname\tnametype\trecclass\treclat\treclong\tyear\n\t\tFell\tPoint\t1\t21\tAachen\tValid\tL5\t50.775000\t6.083330\t1880-01-01T00:00:00.000\n\t\tFell\tPoint\t2\t720\tAarhus\tValid\tH6\t56.183330\t10.233330\t1951-01-01T00:00:00.000\n\t\tFell\tPoint\t6\t107000\tAbee\tValid\tEH4\t54.216670\t-113.000000\t1952-01-01T00:00:00.000\n\t\tFell\tPoint\t10\t1914\tAcapulco\tValid\tAcapulcoite\t16.883330\t-99.900000\t1976-01-01T00:00:00.000\n\t\tFell\tPoint\t370\t780\tAchiras\tValid\tL6\t-33.166670\t-64.950000\t1902-01-01T00:00:00.000\n\t\tFell\tPoint\t379\t4239\tAdhi Kot\tValid\tEH4\t32.100000\t71.800000\t1919-01-01T00:00:00.000\n\t\tFell\tPoint\t390\t910\tAdzhi-Bogdo (stone)\tValid\tLL3-6\t44.833330\t95.166670\t1949-01-01T00:00:00.000\n\t\tFell\tPoint\t392\t30000\tAgen\tValid\tH5\t44.216670\t0.616670\t1814-01-01T00:00:00.000\n\t\tFell\tPoint\t398\t1620\tAguada\tValid\tL6\t-31.600000\t-65.233330\t1930-01-01T00:00:00.000\n\t\tFell\tPoint\t417\t1440\tAguila Blanca\tValid\tL\t-30.866670\t-64.550000\t1920-01-01T00:00:00.000\n\t\tFell\tPoint\t423\t1000\tAioun el Atrouss\tValid\tDiogenite-pm\t16.398060\t-9.570280\t1974-01-01T00:00:00.000\n\t\tFell\tPoint\t424\t24000\tAïr\tValid\tL6\t19.083330\t8.383330\t1925-01-01T00:00:00.000\n\t\tFell\tPoint\t425\t\tAire-sur-la-Lys\tValid\tUnknown\t50.666670\t2.333330\t1769-01-01T00:00:00.000\n\t\tFell\tPoint\t426\t779\tAkaba\tValid\tL6\t29.516670\t35.050000\t1949-01-01T00:00:00.000\n\t\tFell\tPoint\t427\t1800\tAkbarpur\tValid\tH4\t29.716670\t77.950000\t1838-01-01T00:00:00.000\n\t\tFell\tPoint\t432\t3000\tAkwanga\tValid\tH\t8.916670\t8.433330\t1959-01-01T00:00:00.000\n\t\tFell\tPoint\t433\t50000\tAkyumak\tValid\tIron, IVA\t39.916670\t42.816670\t1981-01-01T00:00:00.000\n\t\tFell\tPoint\t446\t160\tAl Rais\tValid\tCR2-an\t24.416670\t39.516670\t1957-01-01T00:00:00.000\n\t\tFell\tPoint\t447\t700\tAl Zarnkh\tValid\tLL5\t13.660330\t28.960000\t2001-01-01T00:00:00.000\n\t\tFell\tPoint\t448\t6000\tAlais\tValid\tCI1\t44.116670\t4.083330\t1806-01-01T00:00:00.000\n\t\tFell\tPoint\t453\t2000\tAlbareto\tValid\tL/LL4\t44.650000\t11.016670\t1766-01-01T00:00:00.000\n\t\tFell\tPoint\t454\t625\tAlberta\tValid\tL\t2.000000\t22.666670\t1949-01-01T00:00:00.000\n\t\tFell\tPoint\t458\t252\tAlby sur Chéran\tValid\tEucrite-mmict\t45.821330\t6.015330\t2002-01-01T00:00:00.000\n\t\tFell\tPoint\t461\t700\tAldsworth\tValid\tLL5\t51.783330\t-1.783330\t1835-01-01T00:00:00.000\n\t\tFell\tPoint\t462\t3200\tAleppo\tValid\tL6\t36.233330\t37.133330\t1873-01-01T00:00:00.000\n\t\tFell\tPoint\t463\t908\tAlessandria\tValid\tH5\t44.883330\t8.750000\t1860-01-01T00:00:00.000\n\t\tFell\tPoint\t465\t9251\tAlexandrovsky\tValid\tH4\t50.950000\t31.816670\t1900-01-01T00:00:00.000\n\t\tFell\tPoint\t466\t228000\tAlfianello\tValid\tL6\t45.266670\t10.150000\t1883-01-01T00:00:00.000\n50\t429\tFell\tPoint\t2276\t32000\tAllegan\tValid\tH5\t42.533330\t-85.883330\t1899-01-01T00:00:00.000\n\t\tFell\tPoint\t2278\t2000000\tAllende\tValid\tCV3\t26.966670\t-105.316670\t1969-01-01T00:00:00.000\n\t\tFell\tPoint\t48915\t3950\tAlmahata Sitta\tValid\tUreilite-an\t20.745750\t32.412750\t2008-01-01T00:00:00.000\n\t\tFell\tPoint\t2284\t6000\tAlta'ameem\tValid\tLL5\t35.273330\t44.215560\t1977-01-01T00:00:00.000\n\t\tFell\tPoint\t2290\t6400\tAmbapur Nagla\tValid\tH5\t27.666670\t78.250000\t1895-01-01T00:00:00.000\n\t\tFell\tPoint\t2294\t2700\tAndhara\tValid\tStone-uncl\t26.583330\t85.566670\t1880-01-01T00:00:00.000\n49\t1723\tFell\tPoint\t2295\t3200\tAndover\tValid\tL6\t44.616670\t-70.750000\t1898-01-01T00:00:00.000\n\t\tFell\tPoint\t2296\t600\tAndreevka\tValid\tL3\t48.700000\t37.500000\t1969-01-01T00:00:00.000\n\t\tFell\tPoint\t2298\t17900\tAndura\tValid\tH6\t20.883330\t76.866670\t1939-01-01T00:00:00.000\n\t\tFound\tPoint\t50693\t256.8\tNorthwest Africa 5815\tValid\tL5\t0.000000\t0.000000\t\n\t\tFell\tPoint\t2301\t\tAngers\tValid\tL6\t47.466670\t-0.550000\t1822-01-01T00:00:00.000\n\t\tFell\tPoint\t2302\t1500\tAngra dos Reis (stone)\tValid\tAngrite\t-22.966670\t-44.316670\t1869-01-01T00:00:00.000\n\t\tFell\tPoint\t2304\t6500\tAnkober\tValid\tH4\t9.533330\t39.716670\t1942-01-01T00:00:00.000\n\t\tFell\tPoint\t2305\t2500\tAnlong\tValid\tH5\t25.150000\t105.183330\t1971-01-01T00:00:00.000\n\t\tFell\tPoint\t2313\t320\tAomori\tValid\tL6\t40.810560\t140.785560\t1984-01-01T00:00:00.000\n\t\tFell\tPoint\t2318\t15000\tAppley Bridge\tValid\tLL6\t53.583330\t-2.716670\t1914-01-01T00:00:00.000\n\t\tFell\tPoint\t2320\t3200\tApt\tValid\tL6\t43.866670\t5.383330\t1803-01-01T00:00:00.000\n\t\tFell\tPoint\t2325\t810\tArbol Solo\tValid\tH5\t-33.000000\t-66.000000\t1954-01-01T00:00:00.000\n18\t2697\tFell\tPoint\t2329\t5070\tArchie\tValid\tH6\t38.500000\t-94.300000\t1932-01-01T00:00:00.000\n\t\tFell\tPoint\t2340\t7450\tArroyo Aguiar\tValid\tH5\t-31.416670\t-60.666670\t1950-01-01T00:00:00.000\n\t\tFell\tPoint\t2345\t41\tAsco\tValid\tH6\t42.450000\t9.033330\t1805-01-01T00:00:00.000\n23\t774\tFell\tPoint\t48954\t9500\tAsh Creek\tValid\tL6\t31.805000\t-97.010000\t2009-01-01T00:00:00.000\n\t\tFell\tPoint\t2346\t1300\tAshdon\tValid\tL6\t52.050000\t0.300000\t1923-01-01T00:00:00.000\n\t\tFell\tPoint\t2353\t2000\tAssisi\tValid\tH5\t43.033330\t12.550000\t1886-01-01T00:00:00.000\n\t\tFell\tPoint\t4883\t1280\tAtarra\tValid\tL4\t25.254170\t80.625000\t1920-01-01T00:00:00.000\n\t\tFell\tPoint\t4884\t94.2\tAtemajac\tValid\tL6\t20.066670\t-103.666670\t1896-01-01T00:00:00.000\n29\t3134\tFell\tPoint\t4885\t265\tAthens\tValid\tLL6\t34.750000\t-87.000000\t1933-01-01T00:00:00.000\n20\t602\tFell\tPoint\t4888\t1384.2\tAtoka\tValid\tL6\t34.316670\t-96.150000\t1945-01-01T00:00:00.000\n\t\tFell\tPoint\t4893\t800\tAubres\tValid\tAubrite\t44.383330\t5.166670\t1836-01-01T00:00:00.000\n\t\tFell\tPoint\t4899\t50000\tAumale\tValid\tL6\t36.166670\t3.666670\t1865-01-01T00:00:00.000\n\t\tFell\tPoint\t4900\t2000\tAumieres\tValid\tL6\t44.333330\t3.233330\t1842-01-01T00:00:00.000\n\t\tFell\tPoint\t4903\t50000\tAusson\tValid\tL5\t43.083330\t0.583330\t1858-01-01T00:00:00.000\n\t\tFell\tPoint\t4905\t9330\tAvanhandava\tValid\tH4\t-21.460280\t-49.950830\t1952-01-01T00:00:00.000\n\t\tFell\tPoint\t4906\t1230\tAvce\tValid\tIron, IIAB\t46.000000\t13.500000\t1908-01-01T00:00:00.000\n\t\tFell\tPoint\t4907\t146\tAvilez\tValid\tH\t25.000000\t-103.500000\t1855-01-01T00:00:00.000\n\t\tFell\tPoint\t4910\t134\tAwere\tValid\tL4\t2.716670\t32.833330\t1968-01-01T00:00:00.000\n11\t1989\tFell\tPoint\t4913\t2830\tAztec\tValid\tL6\t36.800000\t-108.000000\t1938-01-01T00:00:00.000\n\t\tFell\tPoint\t4917\t18000\tBachmut\tValid\tL6\t48.600000\t38.000000\t1814-01-01T00:00:00.000\n\t\tFell\tPoint\t4922\t10322\tBahjoi\tValid\tIron, IAB-sLL\t28.483330\t78.500000\t1934-01-01T00:00:00.000\n37\t2373\tFell\tPoint\t4925\t3700\tBald Mountain\tValid\tL4\t35.966670\t-82.483330\t1929-01-01T00:00:00.000\n32\t495\tFell\tPoint\t4926\t345\tBaldwyn\tValid\tL6\t34.500000\t-88.666670\t1922-01-01T00:00:00.000\n\t\tFell\tPoint\t4928\t1000\tBali\tValid\tCV3\t5.383330\t16.383330\t1907-01-01T00:00:00.000\n\t\tFell\tPoint\t4934\t16700\tBan Rong Du\tValid\tIron, ungrouped\t16.666670\t101.183330\t1993-01-01T00:00:00.000\n\t\tFell\tPoint\t4935\t11500\tBandong\tValid\tLL6\t-6.916670\t107.600000\t1871-01-01T00:00:00.000\n\t\tFell\tPoint\t4936\t15000\tBansur\tValid\tL6\t27.700000\t76.333330\t1892-01-01T00:00:00.000\n\t\tFell\tPoint\t4937\t14\tBanswal\tValid\tL5\t30.400000\t78.200000\t1913-01-01T00:00:00.000\n\t\tFell\tPoint\t4938\t629\tBanten\tValid\tCM2\t-6.333330\t106.000000\t1933-01-01T00:00:00.000\n\t\tFell\tPoint\t4942\t6400\tBarbotan\tValid\tH5\t43.950000\t-0.050000\t1790-01-01T00:00:00.000\n\t\tFell\tPoint\t4944\t\tBarcelona (stone)\tValid\tOC\t41.366670\t2.166670\t1704-01-01T00:00:00.000\n\t\tFell\tPoint\t4946\t3200\tBarea\tValid\tMesosiderite-A1\t42.383330\t-2.500000\t1842-01-01T00:00:00.000\n\t\tFell\tPoint\t4947\t23.2\tBarnaul\tValid\tH5\t52.733330\t84.083330\t1904-01-01T00:00:00.000\n\t\tFell\tPoint\t4948\t17\tBarntrup\tValid\tLL4\t52.000000\t9.100000\t1886-01-01T00:00:00.000\n\t\tFell\tPoint\t4949\t4500\tBaroti\tValid\tL6\t31.616670\t76.800000\t1910-01-01T00:00:00.000\n\t\tFell\tPoint\t4954\t44000\tBarwell\tValid\tL5\t52.565280\t-1.339720\t1965-01-01T00:00:00.000\n\t\tFell\tPoint\t44876\t29560\tBassikounou\tValid\tH5\t15.783330\t-5.900000\t2006-01-01T00:00:00.000\n\t\tFell\tPoint\t4957\t15500\tBaszkówka\tValid\tL5\t52.033330\t20.935830\t1994-01-01T00:00:00.000\n21\t662\tFell\tPoint\t4974\t21000\tBath\tValid\tH4\t45.416670\t-98.316670\t1892-01-01T00:00:00.000\n36\t1921\tFell\tPoint\t4975\t86000\tBath Furnace\tValid\tL6\t38.250000\t-83.750000\t1902-01-01T00:00:00.000\n10\t2397\tFell\tPoint\t56133\t2900\tBattle Mountain\tValid\tL6\t40.668130\t-117.189130\t2012-01-01T00:00:00.000\n\t\tFell\tPoint\t4976\t1557\tBawku\tValid\tLL5\t11.083330\t-0.183330\t1989-01-01T00:00:00.000\n18\t2216\tFell\tPoint\t4977\t611\tBaxter\tValid\tL6\t36.750000\t-93.500000\t1916-01-01T00:00:00.000\n17\t1285\tFell\tPoint\t4984\t16000\tBeardsley\tValid\tH5\t39.800000\t-101.200000\t1929-01-01T00:00:00.000\n\t\tFell\tPoint\t4986\t14000\tBeaver Creek\tValid\tH5\t51.166670\t-117.333330\t1893-01-01T00:00:00.000\n\t\tFell\tPoint\t4993\t794\tBeddgelert\tValid\tH5\t53.016670\t-4.100000\t1949-01-01T00:00:00.000\n23\t1978\tFell\tPoint\t5005\t375\tBells\tValid\tC2-ung\t33.600000\t-96.466670\t1961-01-01T00:00:00.000\n\t\tFell\tPoint\t5009\t\tBelville\tValid\tOC\t-32.333330\t-64.866670\t1937-01-01T00:00:00.000\n\t\tFell\tPoint\t5011\t3700\tBenares (a)\tValid\tLL4\t25.366670\t82.916670\t1798-01-01T00:00:00.000\n\t\tFell\tPoint\t30443\t25000\tBenguerir\tValid\tLL6\t32.250000\t-8.150000\t2004-01-01T00:00:00.000\n\t\tFell\tPoint\t5018\t19000\tBeni M'hira\tValid\tL6\t32.866670\t10.800000\t2001-01-01T00:00:00.000\n34\t1869\tFell\tPoint\t5021\t1770.5\tBenld\tValid\tH6\t39.083330\t-89.150000\t1938-01-01T00:00:00.000\n\t\tFell\tPoint\t5023\t3880\tBenoni\tValid\tH6\t-26.166670\t28.416670\t1943-01-01T00:00:00.000\n\t\tFell\tPoint\t5024\t45000\tBensour\tValid\tLL6\t30.000000\t-7.000000\t2002-01-01T00:00:00.000\n\t\tFell\tPoint\t5026\t2840\tBenton\tValid\tLL6\t45.950000\t-67.550000\t1949-01-01T00:00:00.000\n\t\tFell\tPoint\t48975\t270\tBerduc\tValid\tL6\t-31.910000\t-58.328330\t2008-01-01T00:00:00.000\n\t\tFell\tPoint\t5028\t18000\tBéréba\tValid\tEucrite-mmict\t11.650000\t-3.650000\t1924-01-01T00:00:00.000\n\t\tFell\tPoint\t5029\t1440\tBerlanguillas\tValid\tL6\t41.683330\t-3.800000\t1811-01-01T00:00:00.000\n9\t1072\tFell\tPoint\t47355\t960\tBerthoud\tValid\tEucrite-mmict\t40.305830\t-105.023250\t2004-01-01T00:00:00.000\n47\t2030\tFell\tPoint\t5032\t13.9\tBethlehem\tValid\tH\t42.533330\t-73.833330\t1859-01-01T00:00:00.000\n\t\tFell\tPoint\t5034\t2000\tBeuste\tValid\tL5\t43.216670\t-0.233330\t1859-01-01T00:00:00.000\n\t\tFell\tPoint\t5035\t1100\tBeyrout\tValid\tLL3.8\t33.883330\t35.500000\t1921-01-01T00:00:00.000\n\t\tFell\tPoint\t5037\t18\tBhagur\tValid\tL6\t20.883330\t74.833330\t1877-01-01T00:00:00.000\n\t\tFell\tPoint\t36591\t678\tBhawad\tValid\tLL6\t26.508330\t73.115280\t2002-01-01T00:00:00.000\n\t\tFell\tPoint\t5039\t100\tBherai\tValid\tL6\t20.833330\t71.466670\t1893-01-01T00:00:00.000\n\t\tFell\tPoint\t5040\t1047\tBhola\tValid\tLL3-6\t22.683330\t90.650000\t1940-01-01T00:00:00.000\n\t\tFell\tPoint\t5041\t2500\tBholghati\tValid\tHowardite\t22.083330\t86.900000\t1905-01-01T00:00:00.000\n\t\tFell\tPoint\t5042\t4000\tBialystok\tValid\tEucrite-pmict\t53.100000\t23.200000\t1827-01-01T00:00:00.000\n\t\tFell\tPoint\t5043\t1900\tBielokrynitschie\tValid\tH4\t50.133330\t27.166670\t1887-01-01T00:00:00.000\n\t\tFell\tPoint\t5045\t25000\tBilanga\tValid\tDiogenite\t12.450000\t-0.083330\t1999-01-01T00:00:00.000\n\t\tFell\tPoint\t5051\t488.1\tBinningup\tValid\tH5\t-33.156390\t115.676390\t1984-01-01T00:00:00.000\n\t\tFell\tPoint\t5056\t560\tBirni N'konni\tValid\tH4\t13.766670\t5.300000\t1923-01-01T00:00:00.000\n33\t657\tFell\tPoint\t5059\t6000\tBishopville\tValid\tAubrite\t34.166670\t-80.283330\t1843-01-01T00:00:00.000\n\t\tFell\tPoint\t5060\t1039\tBishunpur\tValid\tLL3.15\t25.383330\t82.600000\t1895-01-01T00:00:00.000\n\t\tFell\tPoint\t5063\t1850\tBjelaja Zerkov\tValid\tH6\t49.783330\t30.166670\t1796-01-01T00:00:00.000\n\t\tFell\tPoint\t5064\t330000\tBjurböle\tValid\tL/LL4\t60.400000\t25.800000\t1899-01-01T00:00:00.000\n48\t2495\tFell\tPoint\t5065\t705\tBlack Moshannan Park\tValid\tL5\t40.916670\t-78.083330\t1941-01-01T00:00:00.000\n20\t2164\tFell\tPoint\t5068\t2381\tBlackwell\tValid\tL5\t36.833330\t-97.333330\t1906-01-01T00:00:00.000\n23\t3063\tFell\tPoint\t5071\t5100\tBlanket\tValid\tL6\t31.833330\t-98.833330\t1909-01-01T00:00:00.000\n\t\tFell\tPoint\t5072\t470\tBlansko\tValid\tH6\t49.366670\t16.633330\t1833-01-01T00:00:00.000\n34\t1795\tFell\tPoint\t5076\t67.8\tBloomington\tValid\tLL6\t40.480000\t-89.004170\t1938-01-01T00:00:00.000\n\t\tFell\tPoint\t5090\t7500\tBo Xian\tValid\tLL3.9\t33.833330\t115.833330\t1977-01-01T00:00:00.000\n\t\tFell\tPoint\t5093\t56\tBocas\tValid\tL6\t23.000000\t-102.000000\t1804-01-01T00:00:00.000\n\t\tFell\tPoint\t5097\t8800\tBogou\tValid\tIron, IAB-MG\t12.500000\t0.700000\t1962-01-01T00:00:00.000\n\t\tFell\tPoint\t5098\t256000\tBoguslavka\tValid\tIron, IIAB\t44.550000\t131.633330\t1916-01-01T00:00:00.000\n\t\tFell\tPoint\t5110\t1676\tBorgo San Donino\tValid\tLL6\t44.866670\t10.050000\t1808-01-01T00:00:00.000\n\t\tFell\tPoint\t5111\t8600\tBori\tValid\tL6\t21.950000\t78.033330\t1894-01-01T00:00:00.000\n\t\tFell\tPoint\t5112\t1342\tBoriskino\tValid\tCM2\t54.233330\t52.483330\t1930-01-01T00:00:00.000\n\t\tFell\tPoint\t5113\t7000\tBorkut\tValid\tL5\t48.150000\t24.283330\t1852-01-01T00:00:00.000\n\t\tFell\tPoint\t5114\t500\tBorodino\tValid\tH5\t55.466670\t35.866670\t1812-01-01T00:00:00.000\n\t\tFell\tPoint\t5117\t614\tBotschetschki\tValid\tL4\t51.333330\t33.883330\t1823-01-01T00:00:00.000\n\t\tFell\tPoint\t57168\t190\tBoumdeid (2003)\tValid\tL6\t17.710670\t-11.371500\t2003-01-01T00:00:00.000\n\t\tFell\tPoint\t57167\t3599\tBoumdeid (2011)\tValid\tL6\t17.174930\t-11.341330\t2011-01-01T00:00:00.000\n\t\tFell\tPoint\t5121\t5460\tBovedy\tValid\tL3\t54.566670\t-6.333330\t1969-01-01T00:00:00.000\n48\t2455\tFell\tPoint\t5128\t762\tBradford Woods\tValid\tL\t40.500000\t-80.083330\t1886-01-01T00:00:00.000\n\t\tFell\tPoint\t5133\t39000\tBraunau\tValid\tIron, IIAB\t50.600000\t16.300000\t1847-01-01T00:00:00.000\n\t\tFell\tPoint\t5134\t1500\tBreitscheid\tValid\tH5\t50.666940\t8.183610\t1956-01-01T00:00:00.000\n\t\tFell\tPoint\t5135\t7250\tBremervörde\tValid\tH/L3.9\t53.400000\t9.100000\t1855-01-01T00:00:00.000\n\t\tFell\tPoint\t5140\t219\tBrient\tValid\tEucrite-pmict\t52.133330\t59.316670\t1933-01-01T00:00:00.000\n\t\tFell\tPoint\t5156\t303000\tBruderheim\tValid\tL6\t53.900000\t-112.883330\t1960-01-01T00:00:00.000\n\t\tFell\tPoint\t30448\t5300\tBukhara\tValid\tCV3\t39.779780\t64.600350\t2001-01-01T00:00:00.000\n\t\tFell\t\t5163\t2250\tBulls Run\tValid\tIron?\t\t\t1964-01-01T00:00:00.000\n\t\tFell\tPoint\t48653\t324\tBunburra Rockhole\tValid\tEucrite\t-31.350000\t129.190000\t2007-01-01T00:00:00.000\n\t\tFell\tPoint\t5165\t357\tBununu\tValid\tHowardite\t10.016670\t9.583330\t1942-01-01T00:00:00.000\n\t\tFell\tPoint\t5169\t120000\tBur-Gheluai\tValid\tH5\t5.000000\t48.000000\t1919-01-01T00:00:00.000\n36\t256\tFell\tPoint\t5175\t1504\tBurnwell\tValid\tH4-an\t37.621940\t-82.237220\t1990-01-01T00:00:00.000\n\t\tFell\tPoint\t5177\t25000\tBursa\tValid\tL6\t40.200000\t29.233330\t1946-01-01T00:00:00.000\n\t\tFell\tPoint\t5178\t5000\tBuschhof\tValid\tL6\t46.450000\t25.783330\t1863-01-01T00:00:00.000\n\t\tFell\tPoint\t5181\t1500\tBustee\tValid\tAubrite\t26.783330\t82.833330\t1852-01-01T00:00:00.000\n\t\tFell\tPoint\t5183\t29000\tButsura\tValid\tH6\t27.083330\t84.083330\t1861-01-01T00:00:00.000\n\t\tFell\tPoint\t48654\t41000\tBuzzard Coulee\tValid\tH4\t52.996000\t-109.848170\t2008-01-01T00:00:00.000\n\t\tFell\tPoint\t5185\t25000\tCabezo de Mayo\tValid\tL/LL6\t37.983330\t-1.166670\t1870-01-01T00:00:00.000\n15\t1029\tFell\tPoint\t5186\t48500\tCabin Creek\tValid\tIron, IIIAB\t35.500000\t-93.500000\t1886-01-01T00:00:00.000\n\t\tFell\tPoint\t5187\t212\tCacak\tValid\tOC\t43.838890\t20.333330\t1919-01-01T00:00:00.000\n\t\tFell\tPoint\t45976\t478\tCali\tValid\tH/L4\t3.405000\t-76.510000\t2007-01-01T00:00:00.000\n\t\tFell\tPoint\t5200\t2400\tCalivo\tValid\tStone-uncl\t11.750000\t122.333330\t1916-01-01T00:00:00.000\n\t\tFell\tPoint\t5249\t23680\tCampos Sales\tValid\tL5\t-7.033330\t-40.166670\t1991-01-01T00:00:00.000\n\t\tFell\tPoint\t5250\t4000\tÇanakkale\tValid\tL6\t39.800000\t26.600000\t1964-01-01T00:00:00.000\n\t\tFell\tPoint\t5251\t945\tCañellas\tValid\tH4\t41.250000\t1.666670\t1861-01-01T00:00:00.000\n\t\tFell\tPoint\t5252\t34000\tCangas de Onis\tValid\tH5\t43.383330\t-5.150000\t1866-01-01T00:00:00.000\n9\t1448\tFell\tPoint\t5253\t1400\tCanon City\tValid\tH6\t38.470280\t-105.241390\t1973-01-01T00:00:00.000\n18\t2695\tFell\tPoint\t5260\t2300\tCape Girardeau\tValid\tH6\t37.266670\t-89.583330\t1846-01-01T00:00:00.000\n\t\tFell\tPoint\t5264\t750\tCapilla del Monte\tValid\tH6\t-30.883330\t-64.550000\t1934-01-01T00:00:00.000\n\t\tFell\tPoint\t45817\t342\tCarancas\tValid\tH4-5\t-16.664440\t-69.043890\t2007-01-01T00:00:00.000\n\t\tFell\tPoint\t5265\t8\tCaratash\tValid\tLL6\t38.500000\t27.000000\t1902-01-01T00:00:00.000\n37\t648\tFell\tPoint\t5291\t7300\tCastalia\tValid\tH5\t36.083330\t-78.066670\t1874-01-01T00:00:00.000\n\t\tFell\tPoint\t5292\t\tCastel Berardenga\tValid\tStone-uncl\t43.350000\t11.500000\t1791-01-01T00:00:00.000\n49\t414\tFell\tPoint\t5293\t94\tCastine\tValid\tL6\t44.383330\t-68.750000\t1848-01-01T00:00:00.000\n\t\tFell\tPoint\t5295\t15000\tCastrovillari\tValid\tStone-uncl\t39.800000\t16.200000\t1583-01-01T00:00:00.000\n37\t637\tFell\tPoint\t5296\t1360\tCaswell County\tValid\tOC\t36.500000\t-79.250000\t1810-01-01T00:00:00.000\n\t\tFell\tPoint\t5306\t1025\tCeniceros\tValid\tL3.7\t26.466670\t-105.233330\t1988-01-01T00:00:00.000\n21\t2684\tFell\tPoint\t5307\t45.6\tCenterville\tValid\tH5\t43.200000\t-96.916670\t1956-01-01T00:00:00.000\n\t\tFell\tPoint\t5308\t6460\tCereseto\tValid\tH5\t45.083330\t8.300000\t1840-01-01T00:00:00.000\n\t\tFell\tPoint\t5313\t3700\tChadong\tValid\tL6\t28.533330\t109.316670\t1998-01-01T00:00:00.000\n\t\tFell\tPoint\t5314\t0.5\tChail\tValid\tH6\t25.366670\t81.666670\t1814-01-01T00:00:00.000\n\t\tFell\tPoint\t5315\t8200\tChainpur\tValid\tLL3.4\t25.850000\t83.483330\t1907-01-01T00:00:00.000\n\t\tFell\tPoint\t5316\t18300\tChajari\tValid\tL5\t-30.783330\t-58.050000\t1933-01-01T00:00:00.000\n\t\tFell\tPoint\t5320\t8800\tChandakapur\tValid\tL5\t20.266670\t76.016670\t1838-01-01T00:00:00.000\n\t\tFell\tPoint\t5321\t1100\tChandpur\tValid\tL6\t27.283330\t79.050000\t1885-01-01T00:00:00.000\n\t\tFell\tPoint\t5322\t1810\tChangde\tValid\tH5\t29.083330\t111.750000\t1977-01-01T00:00:00.000\n\t\tFell\tPoint\t5325\t31500\tChantonnay\tValid\tL6\t46.683330\t1.050000\t1812-01-01T00:00:00.000\n39\t2007\tFell\tPoint\t5328\t4300\tCharlotte\tValid\tIron, IVA\t36.166670\t-87.333330\t1835-01-01T00:00:00.000\n\t\tFell\tPoint\t5329\t27000\tCharsonville\tValid\tH6\t47.933330\t1.566670\t1810-01-01T00:00:00.000\n\t\tFell\tPoint\t5330\t12000\tCharwallas\tValid\tH6\t29.483330\t75.500000\t1834-01-01T00:00:00.000\n\t\tFell\tPoint\t5331\t4000\tChassigny\tValid\tMartian (chassignite)\t47.716670\t5.366670\t1815-01-01T00:00:00.000\n\t\tFell\tPoint\t5332\t30000\tChâteau-Renard\tValid\tL6\t47.933330\t2.916670\t1841-01-01T00:00:00.000\n\t\tFell\tPoint\t5334\t2945\tChaves\tValid\tHowardite\t41.933330\t-7.466670\t1925-01-01T00:00:00.000\n\t\tFell\tPoint\t5338\t2936\tChela\tValid\tH4\t-3.666670\t32.500000\t1988-01-01T00:00:00.000\n\t\tFell\tPoint\t57165\t100000\tChelyabinsk\tValid\tLL5\t54.816670\t61.116670\t2013-01-01T00:00:00.000\n\t\tFell\tPoint\t47347\t100000\tChergach \tValid\tH5\t23.696390\t-5.014720\t2007-01-01T00:00:00.000\n\t\tFell\tPoint\t5339\t6000\tChernyi Bor\tValid\tH4\t53.700000\t30.100000\t1964-01-01T00:00:00.000\n33\t2582\tFell\tPoint\t5340\t8400\tCherokee Springs\tValid\tLL6\t35.033330\t-81.883330\t1933-01-01T00:00:00.000\n\t\tFell\tPoint\t5341\t705\tChervettaz\tValid\tL5\t46.550000\t6.816670\t1901-01-01T00:00:00.000\n\t\tFell\tPoint\t5342\t1700\tChervony Kut\tValid\tEucrite-mmict\t50.833330\t34.000000\t1939-01-01T00:00:00.000\n\t\tFell\tPoint\t5344\t72\tChetrinahatti\tValid\tStone-uncl\t14.500000\t76.500000\t1880-01-01T00:00:00.000\n\t\tFell\tPoint\t5345\t367\tChiang Khan\tValid\tH6\t17.900000\t101.633330\t1981-01-01T00:00:00.000\n48\t2459\tFell\tPoint\t5349\t303\tChicora\tValid\tLL6\t40.933330\t-79.733330\t1938-01-01T00:00:00.000\n\t\tFell\tPoint\t5355\t3920\tChisenga\tValid\tIron, IIIAB\t-10.059440\t33.395000\t1988-01-01T00:00:00.000\n\t\tFell\tPoint\t5356\t\tChitado\tValid\tL6\t-17.350000\t13.966670\t1966-01-01T00:00:00.000\n\t\tFell\tPoint\t5357\t4000\tChitenay\tValid\tL6\t47.470830\t0.976670\t1978-01-01T00:00:00.000\n\t\tFell\tPoint\t5364\t1600\tCilimus\tValid\tL5\t-6.950000\t108.100000\t1979-01-01T00:00:00.000\n31\t67\tFell\tPoint\t5374\t1455\tClaxton\tValid\tL6\t32.102500\t-81.872780\t1984-01-01T00:00:00.000\n\t\tFell\t\t5383\t48.6\tClohars\tValid\tL4\t\t\t1822-01-01T00:00:00.000\n41\t877\tFell\tPoint\t5395\t104000\tColby (Wisconsin)\tValid\tL6\t44.900000\t-90.283330\t1917-01-01T00:00:00.000\n\t\tFell\tPoint\t5397\t5200\tCold Bokkeveld\tValid\tCM2\t-33.133330\t19.383330\t1838-01-01T00:00:00.000\n50\t356\tFell\tPoint\t5401\t469\tColeman\tValid\tL6\t43.761110\t-84.507780\t1994-01-01T00:00:00.000\n\t\tFell\tPoint\t5403\t5000\tCollescipoli\tValid\tH5\t42.533330\t12.616670\t1890-01-01T00:00:00.000\n\t\tFell\tPoint\t5418\t20350\tConquista\tValid\tH4\t-19.850000\t-47.550000\t1965-01-01T00:00:00.000\n\t\tFell\tPoint\t5451\t1200\tCosina\tValid\tH5\t21.166670\t-100.866670\t1844-01-01T00:00:00.000\n\t\tFell\tPoint\t5465\t1460\tCranganore\tValid\tL6\t10.200000\t76.266670\t1917-01-01T00:00:00.000\n20\t2201\tFell\tPoint\t5470\t78.400000000000006\tCrescent\tValid\tCM2\t35.950000\t-97.583330\t1936-01-01T00:00:00.000\n\t\tFell\tPoint\t5474\t3650\tCronstad\tValid\tH5\t-27.700000\t27.300000\t1877-01-01T00:00:00.000\n37\t2332\tFell\tPoint\t5476\t167\tCross Roads\tValid\tH5\t35.633330\t-78.133330\t1892-01-01T00:00:00.000\n\t\tFell\tPoint\t5477\t4255\tCrumlin\tValid\tL5\t54.616670\t-6.216670\t1902-01-01T00:00:00.000\n36\t1426\tFell\tPoint\t5496\t17000\tCumberland Falls\tValid\tAubrite\t36.833330\t-84.350000\t1919-01-01T00:00:00.000\n36\t244\tFell\tPoint\t5500\t6000\tCynthiana\tValid\tL/LL4\t38.400000\t-84.250000\t1877-01-01T00:00:00.000\n\t\tFell\tPoint\t5504\t18000\tDahmani\tValid\tLL6\t35.616670\t8.833330\t1981-01-01T00:00:00.000\n\t\tFell\tPoint\t5511\t5650\tDandapur\tValid\tL6\t26.916670\t83.966670\t1878-01-01T00:00:00.000\n\t\tFell\tPoint\t5513\t1064\tDaniel's Kuil\tValid\tEL6\t-28.200000\t24.566670\t1868-01-01T00:00:00.000\n29\t103\tFell\tPoint\t5514\t2000\tDanville\tValid\tL6\t34.400000\t-87.066670\t1868-01-01T00:00:00.000\n\t\tFell\tPoint\t6603\t100\tDarmstadt\tValid\tH5\t49.866670\t8.650000\t1804-01-01T00:00:00.000\n\t\tFell\tPoint\t6604\t7000\tDashoguz\tValid\tH5\t41.984440\t59.685000\t1998-01-01T00:00:00.000\n\t\tFell\tPoint\t51559\t6580\tDaule\tValid\tL5\t-1.870890\t-79.957560\t2008-01-01T00:00:00.000\n\t\tFell\tPoint\t6621\t340\tDe Cewsville\tValid\tH6\t43.000000\t-80.000000\t1887-01-01T00:00:00.000\n\t2491\tFell\tPoint\t6634\t28\tDeal\tValid\tL6\t40.250000\t-74.000000\t1829-01-01T00:00:00.000\n\t\tFell\tPoint\t6642\t0.8\tDelhi\tValid\tL5\t28.566670\t77.250000\t1897-01-01T00:00:00.000\n\t\tFell\tPoint\t6649\t16400\tDemina\tValid\tL6\t51.466670\t84.766670\t1911-01-01T00:00:00.000\n9\t1444\tFell\tPoint\t6660\t230\tDenver\tValid\tL6\t39.782500\t-104.930560\t1967-01-01T00:00:00.000\n\t\tFell\tPoint\t6664\t12500\tDergaon\tValid\tH5\t26.683330\t93.866670\t2001-01-01T00:00:00.000\n\t\tFell\tPoint\t6693\t25400\tDesuri\tValid\tH6\t25.733330\t73.616670\t1962-01-01T00:00:00.000\n\t\tFell\tPoint\t6694\t12000\tDevgaon\tValid\tH3.8\t19.000000\t81.000000\t2001-01-01T00:00:00.000\n\t\tFell\tPoint\t6696\t1140\tDevri-Khera\tValid\tL6\t24.225000\t76.525000\t1994-01-01T00:00:00.000\n\t\tFell\tPoint\t6698\t45000\tDhajala\tValid\tH3.8\t22.377780\t71.427220\t1976-01-01T00:00:00.000\n\t\tFell\tPoint\t6699\t1800\tDharwar\tValid\tOC\t14.883330\t75.600000\t1848-01-01T00:00:00.000\n\t\tFell\tPoint\t7640\t32000\tDhurmsala\tValid\tLL6\t32.233330\t76.466670\t1860-01-01T00:00:00.000\n\t\tFell\tPoint\t47350\t3396\tDidim\tValid\tH3-5\t37.351720\t27.329970\t2007-01-01T00:00:00.000\n\t\tFell\tPoint\t7642\t1000\tDiep River\tValid\tL6\t-33.750000\t18.566670\t1906-01-01T00:00:00.000\n\t\tFell\tPoint\t7649\t400\tDistrito Quebracho\tValid\tH4\t-31.883330\t-60.466670\t1957-01-01T00:00:00.000\n\t\tFell\tPoint\t7652\t166000\tDjati-Pengilon\tValid\tH6\t-7.500000\t111.500000\t1884-01-01T00:00:00.000\n\t\tFell\tPoint\t7656\t3950\tDjermaia\tValid\tH\t12.733330\t15.050000\t1961-01-01T00:00:00.000\n\t\tFell\tPoint\t7657\t10000\tDjoumine\tValid\tH5-6\t36.950000\t9.550000\t1999-01-01T00:00:00.000\n\t\tFell\tPoint\t7658\t3840\tDokachi\tValid\tH5\t23.500000\t90.333330\t1903-01-01T00:00:00.000\n\t\tFell\tPoint\t7659\t1600\tDolgovoli\tValid\tL6\t50.750000\t25.300000\t1864-01-01T00:00:00.000\n\t\tFell\tPoint\t7661\t438\tDomanitch\tValid\tL5\t40.000000\t29.000000\t1907-01-01T00:00:00.000\n\t\tFell\tPoint\t7706\t128800\tDong Ujimqin Qi\tValid\tMesosiderite\t45.500000\t119.033330\t1995-01-01T00:00:00.000\n\t\tFell\tPoint\t7707\t230\tDonga Kohrod\tValid\tH6\t21.866670\t82.450000\t1899-01-01T00:00:00.000\n\t\tFell\tPoint\t7708\t5500\tDongtai\tValid\tLL6\t32.916670\t120.783330\t1970-01-01T00:00:00.000\n\t\tFell\tPoint\t7718\t3891\tDoroninsk\tValid\tH5-7\t51.200000\t112.300000\t1805-01-01T00:00:00.000\n\t\tFell\tPoint\t7722\t1250\tDosso\tValid\tL6\t13.050000\t3.166670\t1962-01-01T00:00:00.000\n\t\tFell\tPoint\t7723\t1161\tDouar Mghila\tValid\tLL6\t32.333330\t-6.300000\t1932-01-01T00:00:00.000\n\t\tFell\tPoint\t7725\t642\tDowa\tValid\tStone-uncl\t-13.666670\t33.916670\t1976-01-01T00:00:00.000\n39\t2115\tFell\tPoint\t7728\t5000\tDrake Creek\tValid\tL6\t36.400000\t-86.500000\t1827-01-01T00:00:00.000\n\t\tFell\tPoint\t7731\t47700\tDresden (Ontario)\tValid\tH6\t42.520000\t-82.260000\t1939-01-01T00:00:00.000\n\t\tFell\tPoint\t7736\t1900\tDubrovnik\tValid\tL3-6\t42.458330\t18.441670\t1951-01-01T00:00:00.000\n\t\tFell\tPoint\t7743\t30\tDunbogan\tValid\tL6\t-31.666670\t152.833330\t1999-01-01T00:00:00.000\n\t\tFell\tPoint\t7745\t2270\tDundrum\tValid\tH5\t52.550000\t-8.033330\t1865-01-01T00:00:00.000\n\t\tFell\tPoint\t7749\t\tDunhua\tValid\tStone-uncl\t43.333330\t128.250000\t1976-01-01T00:00:00.000\n\t\tFell\tPoint\t7750\t13200\tDurala\tValid\tL6\t30.300000\t76.633330\t1815-01-01T00:00:00.000\n\t\tFell\tPoint\t7752\t577\tDuruma\tValid\tL6\t-4.000000\t39.500000\t1853-01-01T00:00:00.000\n\t\tFell\tPoint\t7754\t2117\tDuwun\tValid\tL6\t33.433330\t127.266670\t1943-01-01T00:00:00.000\n\t\tFell\tPoint\t7755\t3230\tDwaleni\tValid\tH4-6\t-27.200000\t31.316670\t1970-01-01T00:00:00.000\n\t\tFell\tPoint\t7757\t300\tDyalpur\tValid\tUreilite\t26.250000\t82.000000\t1872-01-01T00:00:00.000\n\t\tFell\tPoint\t7758\t188\tDyarrl Island\tValid\tMesosiderite-A1\t-3.000000\t151.000000\t1933-01-01T00:00:00.000\n19\t462\tFell\tPoint\t7760\t10000\tEagle\tValid\tEL6\t40.781670\t-96.471670\t1947-01-01T00:00:00.000\n\t\tFell\tPoint\t7774\t2400\tEhole\tValid\tH5\t-17.300000\t15.833330\t1961-01-01T00:00:00.000\n\t\tFell\tPoint\t7775\t3000\tEichstädt\tValid\tH5\t48.900000\t11.216670\t1785-01-01T00:00:00.000\n\t\tFell\tPoint\t7776\t3336\tEkeby\tValid\tH4\t56.033330\t13.000000\t1939-01-01T00:00:00.000\n\t\tFell\tPoint\t7777\t840\tEkh Khera\tValid\tH6\t28.266670\t78.783330\t1916-01-01T00:00:00.000\n\t\tFell\tPoint\t7807\t10000\tEl Idrissia\tValid\tL6\t34.416670\t3.250000\t1989-01-01T00:00:00.000\n\t\tFell\tPoint\t45977\t17226\tEl Paso de Aguila\tValid\tH5\t25.370000\t-97.370000\t1977-01-01T00:00:00.000\n\t\tFell\tPoint\t7819\t5000\tEl Tigre\tValid\tL6\t19.967220\t-103.051670\t1993-01-01T00:00:00.000\n9\t88\tFell\tPoint\t7822\t680.5\tElbert\tValid\tLL6\t39.246670\t-104.588170\t1998-01-01T00:00:00.000\n\t\tFell\tPoint\t7823\t107000\tElbogen\tValid\tIron, IID\t50.183330\t12.733330\t1400-01-01T00:00:00.000\n\t\tFell\tPoint\t7824\t54640\tElenovka\tValid\tL5\t47.833330\t37.666670\t1951-01-01T00:00:00.000\n\t\tFell\tPoint\t10019\t1470\tEllemeet\tValid\tDiogenite\t51.750000\t4.000000\t1925-01-01T00:00:00.000\n\t\tFell\tPoint\t10033\t127\tEmmaville\tValid\tEucrite-mmict\t-29.466670\t151.616670\t1900-01-01T00:00:00.000\n\t\tFell\tPoint\t10038\t8000\tEnshi\tValid\tH5\t30.300000\t109.500000\t1974-01-01T00:00:00.000\n\t\tFell\tPoint\t10039\t127000\tEnsisheim\tValid\tLL6\t47.866670\t7.350000\t1492-01-01T00:00:00.000\n\t\tFell\tPoint\t10041\t277\tÉpinal\tValid\tH5\t48.183330\t6.466670\t1822-01-01T00:00:00.000\n\t\tFell\tPoint\t10042\t113\tErakot\tValid\tCM2\t19.033330\t81.891670\t1940-01-01T00:00:00.000\n\t\tFell\tPoint\t10043\t107.2\tErevan\tValid\tHowardite\t40.300000\t44.500000\t1911-01-01T00:00:00.000\n\t\tFell\tPoint\t10044\t20000\tErgheo\tValid\tL5\t1.166670\t44.166670\t1889-01-01T00:00:00.000\n\t\tFell\tPoint\t10049\t2250\tErxleben\tValid\tH6\t52.216670\t11.250000\t1812-01-01T00:00:00.000\n\t\tFell\tPoint\t10051\t1500\tEsnandes\tValid\tL6\t46.250000\t-1.100000\t1837-01-01T00:00:00.000\n\t\tFell\tPoint\t10055\t500\tEssebi\tValid\tC2-ung\t2.883330\t30.833330\t1957-01-01T00:00:00.000\n16\t277\tFell\tPoint\t10059\t320000\tEstherville\tValid\tMesosiderite-A3/4\t43.416670\t-94.833330\t1879-01-01T00:00:00.000\n17\t1300\tFell\tPoint\t10074\t89400\tFarmington\tValid\tL5\t39.750000\t-97.033330\t1890-01-01T00:00:00.000\n37\t2439\tFell\tPoint\t10075\t56000\tFarmville\tValid\tH4\t35.550000\t-77.533330\t1934-01-01T00:00:00.000\n\t\tFell\tPoint\t10078\t1500\tFavars\tValid\tH5\t44.383330\t2.816670\t1844-01-01T00:00:00.000\n15\t70\tFell\tPoint\t10079\t2360\tFayetteville\tValid\tH4\t36.050000\t-94.166670\t1934-01-01T00:00:00.000\n\t\tFell\tPoint\t10080\t380\tFeid Chair\tValid\tH4\t36.883330\t8.450000\t1875-01-01T00:00:00.000\n29\t1631\tFell\tPoint\t10081\t3200\tFelix\tValid\tCO3.3\t32.533330\t-87.166670\t1900-01-01T00:00:00.000\n\t\tFell\tPoint\t10086\t82\tFenghsien-Ku\tValid\tH5\t34.600000\t116.750000\t1924-01-01T00:00:00.000\n37\t2331\tFell\tPoint\t10088\t220\tFerguson\tValid\tOC\t36.100000\t-81.416670\t1889-01-01T00:00:00.000\n\t\tFell\tPoint\t10091\t10200\tFermo\tValid\tH3-5\t43.181110\t13.753330\t1996-01-01T00:00:00.000\n1\t385\tFell\tPoint\t10107\t17600\tFisher\tValid\tL6\t47.816670\t-96.850000\t1894-01-01T00:00:00.000\n23\t807\tFell\tPoint\t10111\t3640\tFlorence\tValid\tH3\t30.833330\t-97.766670\t1922-01-01T00:00:00.000\n16\t1785\tFell\tPoint\t10119\t152000\tForest City\tValid\tH5\t43.250000\t-93.666670\t1890-01-01T00:00:00.000\n\t\tFell\tPoint\t10120\t26000\tForest Vale\tValid\tH4\t-33.350000\t146.858330\t1942-01-01T00:00:00.000\n40\t2839\tFell\tPoint\t10123\t6067\tForksville\tValid\tL6\t36.783330\t-78.083330\t1924-01-01T00:00:00.000\n\t\tFell\tPoint\t10163\t240\tForsbach\tValid\tH6\t50.950000\t7.316670\t1900-01-01T00:00:00.000\n31\t1470\tFell\tPoint\t10164\t16300\tForsyth\tValid\tL6\t33.016670\t-83.966670\t1829-01-01T00:00:00.000\n\t\tFell\tPoint\t10166\t\tFort Flatters\tValid\tStone-uncl\t28.250000\t7.000000\t1944-01-01T00:00:00.000\n29\t99\tFell\tPoint\t10177\t650\tFrankfort (stone)\tValid\tHowardite\t34.483330\t-87.833330\t1868-01-01T00:00:00.000\n\t\tFell\tPoint\t52412\t23000\tFuhe\tValid\tL5\t31.475560\t113.566940\t1945-01-01T00:00:00.000\n\t\tFell\tPoint\t10836\t11620\tFukutomi\tValid\tL5\t33.183330\t130.200000\t1882-01-01T00:00:00.000\n\t\tFell\tPoint\t10838\t\tFünen\tValid\tStone-uncl\t55.333330\t10.333330\t1654-01-01T00:00:00.000\n\t\tFell\tPoint\t10839\t4000\tFuttehpur\tValid\tL6\t25.950000\t80.816670\t1822-01-01T00:00:00.000\n\t\tFell\tPoint\t10840\t2500\tFuyang\tValid\tStone-uncl\t32.900000\t115.900000\t1977-01-01T00:00:00.000\n\t\tFell\tPoint\t10846\t132.69999999999999\tGalapian\tValid\tH6\t44.300000\t0.400000\t1826-01-01T00:00:00.000\n\t\tFell\tPoint\t10848\t36.1\tGalim (a)\tValid\tLL6\t7.050000\t12.433330\t1952-01-01T00:00:00.000\n\t\tFell\tPoint\t10849\t28\tGalim (b)\tValid\tEH3/4-an\t7.050000\t12.433330\t1952-01-01T00:00:00.000\n\t\tFell\tPoint\t10850\t5000\tGalkiv\tValid\tH4\t51.683330\t30.783330\t1995-01-01T00:00:00.000\n\t\tFell\tPoint\t10851\t6400\tGambat\tValid\tL6\t27.350000\t68.533330\t1897-01-01T00:00:00.000\n\t\tFell\tPoint\t10854\t\tGao-Guenie\tValid\tH5\t11.650000\t-2.183330\t1960-01-01T00:00:00.000\n\t\tFell\tPoint\t10860\t380\tGarhi Yasin\tValid\tIron, IIE\t27.883330\t68.533330\t1917-01-01T00:00:00.000\n13\t2985\tFell\tPoint\t10861\t102\tGarland\tValid\tDiogenite-pm\t41.683330\t-112.133330\t1950-01-01T00:00:00.000\n\t\tFell\tPoint\t44882\t4162\tGashua\tValid\tL6\t12.850000\t11.033330\t1984-01-01T00:00:00.000\n\t\tFell\tPoint\t10866\t\tGasseltepaoua\tValid\tH5\t14.150830\t-2.041670\t2000-01-01T00:00:00.000\n\t\tFell\tPoint\t10870\t725\tGeidam\tValid\tH5\t12.916670\t11.916670\t1950-01-01T00:00:00.000\n\t\tFell\tPoint\t10914\t14290\tGifu\tValid\tL6\t35.533330\t136.883330\t1909-01-01T00:00:00.000\n\t\tFell\tPoint\t10917\t18000\tGirgenti\tValid\tL6\t37.316670\t13.566670\t1853-01-01T00:00:00.000\n\t\tFell\tPoint\t10919\t480\tGit-Git\tValid\tL6\t9.600000\t9.916670\t1947-01-01T00:00:00.000\n\t\tFell\tPoint\t10923\t670\tGlanerbrug\tValid\tL/LL5\t52.200000\t6.866670\t1990-01-01T00:00:00.000\n\t\tFell\tPoint\t10924\t1303\tGlanggang\tValid\tH5-6\t-7.250000\t107.700000\t1939-01-01T00:00:00.000\n\t\tFell\tPoint\t10926\t152000\tGlasatovo\tValid\tH4\t57.350000\t37.616670\t1918-01-01T00:00:00.000\n\t\tFell\tPoint\t10930\t767\tGlatton\tValid\tL6\t52.459720\t-0.300000\t1991-01-01T00:00:00.000\n\t\tFell\tPoint\t10936\t1750\tGnadenfrei\tValid\tH5\t50.666670\t16.766670\t1879-01-01T00:00:00.000\n\t\tFell\tPoint\t10948\t1600\tGopalpur\tValid\tH6\t24.233330\t89.050000\t1865-01-01T00:00:00.000\n\t\tFell\tPoint\t10949\t3618\tGorlovka\tValid\tH3.7\t48.283330\t38.083330\t1974-01-01T00:00:00.000\n\t\tFell\tPoint\t10956\t9000\tGranes\tValid\tL6\t42.900000\t2.250000\t1964-01-01T00:00:00.000\n\t\tFell\tPoint\t11196\t45.5\tGrefsheim\tValid\tL5\t60.666670\t11.000000\t1976-01-01T00:00:00.000\n\t\tFell\tPoint\t50911\t215\tGrimsby\tValid\tH5\t43.200000\t-79.616670\t2009-01-01T00:00:00.000\n\t\tFell\tPoint\t11206\t3500\tGrosnaja\tValid\tCV3\t43.666670\t45.383330\t1861-01-01T00:00:00.000\n\t\tFell\tPoint\t11207\t10500\tGross-Divina\tValid\tH5\t49.266670\t18.716670\t1837-01-01T00:00:00.000\n\t\tFell\tPoint\t11208\t8000\tGrossliebenthal\tValid\tL6\t46.350000\t30.583330\t1881-01-01T00:00:00.000\n\t\tFell\tPoint\t11426\t1000\tGrüneberg\tValid\tH4\t51.933330\t15.500000\t1841-01-01T00:00:00.000\n\t\tFell\tPoint\t11429\t690\tGrzempach\tValid\tH5\t52.866670\t16.633330\t1910-01-01T00:00:00.000\n\t\tFell\tPoint\t11432\t22000\tGualeguaychú\tValid\tH6\t-33.000000\t-58.616670\t1932-01-01T00:00:00.000\n\t\tFell\tPoint\t11435\t2910\tGuangmingshan\tValid\tH5\t39.804170\t122.763890\t1996-01-01T00:00:00.000\n\t\tFell\tPoint\t11436\t\tGuangnan\tValid\tL6\t24.100000\t105.000000\t1983-01-01T00:00:00.000\n\t\tFell\tPoint\t11437\t1900\tGuangrao\tValid\tL6\t37.100000\t118.400000\t1980-01-01T00:00:00.000\n\t\tFell\tPoint\t11439\t39000\tGuareña\tValid\tH6\t38.733330\t-6.016670\t1892-01-01T00:00:00.000\n\t\tFell\tPoint\t11440\t1915\tGuêa\tValid\tStone-uncl\t43.766670\t20.233330\t1891-01-01T00:00:00.000\n\t\tFell\tPoint\t11442\t288\tGuibga\tValid\tL5\t13.500000\t-0.683330\t1972-01-01T00:00:00.000\n\t\tFell\tPoint\t11443\t968\tGuidder\tValid\tLL5\t9.916670\t13.983330\t1949-01-01T00:00:00.000\n\t\tFell\tPoint\t11448\t2449\tGujargaon\tValid\tH5\t22.983330\t76.050000\t1982-01-01T00:00:00.000\n\t\tFell\tPoint\t11449\t100000\tGujba\tValid\tCBa\t11.491670\t11.658330\t1984-01-01T00:00:00.000\n\t\tFell\tPoint\t11450\t5700\tGumoschnik\tValid\tH5\t42.900000\t24.700000\t1904-01-01T00:00:00.000\n\t\tFell\tPoint\t11464\t28\tGurram Konda\tValid\tL6\t13.783330\t78.566670\t1814-01-01T00:00:00.000\n\t\tFell\tPoint\t11465\t34650\tGursum\tValid\tH4/5\t9.366670\t42.416670\t1981-01-01T00:00:00.000\n\t\tFell\tPoint\t11466\t1000\tGütersloh\tValid\tH3/4\t51.916670\t8.383330\t1851-01-01T00:00:00.000\n\t\tFell\tPoint\t11467\t1320\tGyokukei\tValid\tOC\t35.000000\t127.500000\t1930-01-01T00:00:00.000\n\t\tFell\tPoint\t11468\t0.2\tHachi-oji\tValid\tH?\t35.650000\t139.333330\t1817-01-01T00:00:00.000\n\t\tFell\tPoint\t11472\t9000\tHainaut\tValid\tH3-6\t50.316670\t3.733330\t1934-01-01T00:00:00.000\n\t\tFell\tPoint\t11479\t1456\tHallingeberg\tValid\tL3.4\t57.816670\t16.233330\t1944-01-01T00:00:00.000\n35\t1205\tFell\tPoint\t11485\t3710\tHamlet\tValid\tLL4\t41.383330\t-86.600000\t1959-01-01T00:00:00.000\n\t\tFell\tPoint\t11824\t1000\tHaraiya\tValid\tEucrite-mmict\t26.800000\t82.533330\t1878-01-01T00:00:00.000\n\t\tFell\tPoint\t11829\t315\tHaripura\tValid\tCM2\t28.383330\t75.783330\t1921-01-01T00:00:00.000\n23\t2025\tFell\tPoint\t11830\t8360\tHarleton\tValid\tL6\t32.675000\t-94.511670\t1961-01-01T00:00:00.000\n35\t1855\tFell\tPoint\t11842\t680\tHarrison County\tValid\tL6\t38.250000\t-86.166670\t1859-01-01T00:00:00.000\n\t\tFell\tPoint\t11848\t1110.5999999999999\tHashima\tValid\tH4\t35.294500\t136.700330\t1910-01-01T00:00:00.000\n\t\tFell\tPoint\t11852\t1250\tHassi-Jekna\tValid\tIron, IAB-sHL\t28.950000\t0.816670\t1890-01-01T00:00:00.000\n\t\tFell\tPoint\t11855\t29000\tHatford\tValid\tStone-uncl\t51.650000\t-1.516670\t1628-01-01T00:00:00.000\n\t\tFell\tPoint\t11859\t1544\tHaverö\tValid\tUreilite\t60.245560\t22.061940\t1971-01-01T00:00:00.000\n\t\tFell\tPoint\t11869\t3500\tHedeskoga\tValid\tH5\t55.466670\t13.783330\t1922-01-01T00:00:00.000\n\t\tFell\tPoint\t11870\t6100\tHedjaz\tValid\tL3.7-6\t27.333330\t35.666670\t1910-01-01T00:00:00.000\n\t\tFell\tPoint\t11875\t1000\tHeredia\tValid\tH5\t10.000000\t-84.100000\t1857-01-01T00:00:00.000\n\t\tFell\tPoint\t11878\t20000\tHessle\tValid\tH5\t59.850000\t17.666670\t1869-01-01T00:00:00.000\n\t\tFell\tPoint\t11883\t750\tHigashi-koen\tValid\tH5\t33.600000\t130.433330\t1897-01-01T00:00:00.000\n\t\tFell\tPoint\t11884\t4500\tHigh Possil\tValid\tL6\t55.900000\t-4.233330\t1804-01-01T00:00:00.000\n\t\tFell\tPoint\t11889\t414\tHiroshima\tValid\tH5\t34.450000\t132.383330\t2003-01-01T00:00:00.000\n\t\tFell\tPoint\t44714\t167.7\tHoima\tValid\tH6\t1.345000\t31.472780\t2003-01-01T00:00:00.000\n\t\tFell\tPoint\t11893\t305.5\tHökmark\tValid\tL4\t64.433330\t21.200000\t1954-01-01T00:00:00.000\n7\t990\tFell\tPoint\t11894\t220000\tHolbrook\tValid\tL/LL6\t34.900000\t-110.183330\t1912-01-01T00:00:00.000\n\t\tFell\tPoint\t11895\t1415\tHoletta\tValid\tStone-uncl\t9.066670\t38.416670\t1923-01-01T00:00:00.000\n16\t284\tFell\tPoint\t11901\t230000\tHomestead\tValid\tL5\t41.800000\t-91.866670\t1875-01-01T00:00:00.000\n4\t1657\tFell\tPoint\t11904\t2420\tHonolulu\tValid\tL5\t21.300000\t-157.866670\t1825-01-01T00:00:00.000\n\t\tFell\tPoint\t11913\t180\tHotse\tValid\tL6\t35.666670\t115.500000\t1956-01-01T00:00:00.000\n17\t1293\tFell\tPoint\t11915\t266.10000000000002\tHoxie\tValid\tOC\t39.350000\t-100.450000\t1963-01-01T00:00:00.000\n\t\tFell\tPoint\t11916\t49000\tHraschina\tValid\tIron, IID\t46.100000\t16.333330\t1751-01-01T00:00:00.000\n\t\tFell\tPoint\t54719\t1600\tHuaxi\tValid\tH5\t26.464690\t106.632410\t2010-01-01T00:00:00.000\n\t\tFell\tPoint\t11986\t112\tHungen\tValid\tH6\t50.300000\t8.916670\t1877-01-01T00:00:00.000\n\t\tFell\tPoint\t11989\t14000\tHvittis\tValid\tEL6\t61.183330\t22.683330\t1901-01-01T00:00:00.000\n\t\tFell\tPoint\t11992\t2000\tIbbenbüren\tValid\tDiogenite\t52.283330\t7.700000\t1870-01-01T00:00:00.000\n\t\tFell\tPoint\t11993\t2500\tIbitira\tValid\tEucrite-mmict\t-20.000000\t-45.000000\t1957-01-01T00:00:00.000\n\t\tFell\tPoint\t11994\t\tIbrisim\tValid\tOC\t38.000000\t35.000000\t1949-01-01T00:00:00.000\n\t\tFell\tPoint\t11995\t3973\tIchkala\tValid\tH6\t58.200000\t82.933330\t1936-01-01T00:00:00.000\n\t\tFell\tPoint\t12000\t3457\tIdutywa\tValid\tH5\t-32.100000\t28.333330\t1956-01-01T00:00:00.000\n\t\tFell\tPoint\t12003\t1200\tIguaracu\tValid\tH5\t-23.200000\t-51.833330\t1977-01-01T00:00:00.000\n\t\tFell\tPoint\t12004\t7330\tIjopega\tValid\tH6\t-6.033330\t145.366670\t1975-01-01T00:00:00.000\n\t\tFell\tPoint\t12027\t27000\tIndarch\tValid\tEH4\t39.750000\t46.666670\t1891-01-01T00:00:00.000\n18\t525\tFell\tPoint\t12028\t880\tIndependence\tValid\tL6\t39.083330\t-94.400000\t1917-01-01T00:00:00.000\n\t\tFell\tPoint\t12037\t3000\tInner Mongolia\tValid\tL6\t41.000000\t112.000000\t1963-01-01T00:00:00.000\n\t\tFell\tPoint\t12039\t4576\tInnisfree\tValid\tL5\t53.415000\t-111.337500\t1977-01-01T00:00:00.000\n\t\tFell\tPoint\t12043\t7000\tIpiranga\tValid\tH6\t-25.500000\t-54.500000\t1972-01-01T00:00:00.000\n\t\tFell\tPoint\t12049\t1300\tIshinga\tValid\tH\t-8.933330\t33.800000\t1954-01-01T00:00:00.000\n\t\tFell\tPoint\t12053\t3050\tIsthilart\tValid\tH5\t-31.183330\t-57.950000\t1928-01-01T00:00:00.000\n\t\tFell\tPoint\t12056\t2024\tItapicuru-Mirim\tValid\tH5\t-3.400000\t-44.333330\t1879-01-01T00:00:00.000\n\t\tFell\tPoint\t12058\t4720\tItqiy\tValid\tEH7-an\t26.590830\t-12.952170\t1990-01-01T00:00:00.000\n\t\tFell\tPoint\t12063\t704.5\tIvuna\tValid\tCI1\t-8.416670\t32.433330\t1938-01-01T00:00:00.000\n\t\tFell\tPoint\t12065\t48000\tJackalsfontein\tValid\tL6\t-32.500000\t21.900000\t1903-01-01T00:00:00.000\n\t\tFell\tPoint\t12067\t973\tJajh deh Kot Lalu\tValid\tEL6\t26.750000\t68.416670\t1926-01-01T00:00:00.000\n\t\tFell\t\t12068\t700\tJalanash\tValid\tUreilite\t\t\t1990-01-01T00:00:00.000\n\t\tFell\tPoint\t12069\t1967\tJalandhar\tValid\tIron\t31.000000\t75.000000\t1621-01-01T00:00:00.000\n\t\tFell\tPoint\t12072\t22\tJamkheir\tValid\tH6\t18.750000\t75.333330\t1866-01-01T00:00:00.000\n\t\tFell\tPoint\t12074\t20500\tJartai\tValid\tL6\t39.700000\t105.800000\t1979-01-01T00:00:00.000\n\t\tFell\tPoint\t12078\t34000\tJelica\tValid\tLL6\t43.833330\t20.441670\t1889-01-01T00:00:00.000\n\t\tFell\t\t12079\t450\tJemlapur\tValid\tL6\t\t\t1901-01-01T00:00:00.000\n\t\tFell\tPoint\t51589\t3667\tJesenice\tValid\tL6\t46.421370\t14.052170\t2009-01-01T00:00:00.000\n\t\tFell\tPoint\t12085\t5900\tJhung\tValid\tL5\t31.300000\t72.383330\t1873-01-01T00:00:00.000\n\t\tFell\tPoint\t12086\t222\tJiange\tValid\tH5\t31.916670\t104.916670\t1964-01-01T00:00:00.000\n\t\tFell\tPoint\t12087\t600000\tJianshi\tValid\tIron, IIIAB\t30.808330\t109.500000\t1890-01-01T00:00:00.000\n\t\tFell\tPoint\t12171\t4000000\tJilin\tValid\tH5\t44.050000\t126.166670\t1976-01-01T00:00:00.000\n\t\tFell\tPoint\t47362\t100\tJodiya\tValid\tL5\t22.680000\t70.313330\t2006-01-01T00:00:00.000\n\t\tFell\tPoint\t12173\t30\tJodzie\tValid\tHowardite\t55.700000\t24.400000\t1877-01-01T00:00:00.000\n9\t1072\tFell\tPoint\t12198\t40300\tJohnstown\tValid\tDiogenite\t40.350000\t-104.900000\t1924-01-01T00:00:00.000\n\t\tFell\tPoint\t12199\t483\tJolomba\tValid\tLL6\t-11.850000\t15.833330\t1974-01-01T00:00:00.000\n\t\tFell\tPoint\t12202\t5000\tJonzac\tValid\tEucrite-mmict\t45.433330\t-0.450000\t1819-01-01T00:00:00.000\n\t\tFell\tPoint\t12203\t100000\tJuancheng\tValid\tH5\t35.500000\t115.416670\t1997-01-01T00:00:00.000\n\t\tFell\tPoint\t12207\t680\tJudesegeri\tValid\tH6\t12.850000\t76.800000\t1876-01-01T00:00:00.000\n\t\tFell\tPoint\t12209\t32490\tJumapalo\tValid\tL6\t-7.716670\t111.200000\t1984-01-01T00:00:00.000\n\t\tFell\tPoint\t12210\t950\tJunan\tValid\tL6\t35.200000\t118.800000\t1976-01-01T00:00:00.000\n\t\tFell\tPoint\t12213\t25250\tJuromenha\tValid\tIron, IIIAB\t38.740280\t-7.270000\t1968-01-01T00:00:00.000\n\t\tFell\tPoint\t12214\t91000\tJuvinas\tValid\tEucrite-mmict\t44.716670\t4.300000\t1821-01-01T00:00:00.000\n\t\tFell\tPoint\t12218\t3000\tKaba\tValid\tCV3\t47.350000\t21.300000\t1857-01-01T00:00:00.000\n\t\tFell\tPoint\t12220\t13400\tKabo\tValid\tH4\t11.850000\t8.216670\t1971-01-01T00:00:00.000\n\t\tFell\tPoint\t12221\t89\tKadonah\tValid\tH6\t27.083330\t78.333330\t1822-01-01T00:00:00.000\n\t\tFell\tPoint\t12222\t230\tKaee\tValid\tH5\t27.250000\t79.966670\t1838-01-01T00:00:00.000\n\t\tFell\tPoint\t12227\t1900\tKagarlyk\tValid\tL6\t49.866670\t30.833330\t1908-01-01T00:00:00.000\n\t\tFell\tPoint\t12228\t2000\tKaidun\tValid\tCR2\t15.000000\t48.300000\t1980-01-01T00:00:00.000\n\t\tFell\tPoint\t12229\t200000\tKainsaz\tValid\tCO3.2\t55.433330\t53.250000\t1937-01-01T00:00:00.000\n\t\tFell\tPoint\t12230\t350\tKakangari\tValid\tK3\t12.383330\t78.516670\t1890-01-01T00:00:00.000\n\t\tFell\tPoint\t12231\t577\tKakowa\tValid\tL6\t45.133330\t21.666670\t1858-01-01T00:00:00.000\n\t\tFell\tPoint\t12232\t950\tKalaba\tValid\tH4\t-6.833330\t29.500000\t1951-01-01T00:00:00.000\n\t\tFell\tPoint\t12236\t4500\tKalumbi\tValid\tL6\t17.833330\t73.983330\t1879-01-01T00:00:00.000\n\t\tFell\tPoint\t12238\t2770\tKamalpur\tValid\tL6\t26.033330\t81.466670\t1942-01-01T00:00:00.000\n\t\tFell\tPoint\t12240\t448\tKamiomi\tValid\tH5\t36.041670\t139.956670\t1913-01-01T00:00:00.000\n\t\tFell\tPoint\t12241\t1293\tKamsagar\tValid\tL6\t14.183330\t75.800000\t1902-01-01T00:00:00.000\n\t\tFell\tPoint\t12243\t299\tKandahar (Afghanistan)\tValid\tL6\t31.600000\t65.783330\t1959-01-01T00:00:00.000\n\t\tFell\tPoint\t12245\t1630\tKangean\tValid\tH5\t-7.000000\t115.500000\t1908-01-01T00:00:00.000\n\t\tFell\tPoint\t12246\t400\tKangra Valley\tValid\tH5\t32.083330\t76.300000\t1897-01-01T00:00:00.000\n\t\tFell\tPoint\t12251\t11355\tKapoeta\tValid\tHowardite\t4.700000\t33.633330\t1942-01-01T00:00:00.000\n\t\tFell\tPoint\t47357\t1600\tKaprada\tValid\tL5/6\t20.339160\t73.223290\t2004-01-01T00:00:00.000\n\t\tFell\tPoint\t12253\t3500\tKaptal-Aryk\tValid\tL6\t42.450000\t73.366670\t1937-01-01T00:00:00.000\n\t\tFell\tPoint\t12256\t3000\tKarakol\tValid\tLL6\t47.216670\t81.016670\t1840-01-01T00:00:00.000\n\t\tFell\tPoint\t12258\t2220\tKaratu\tValid\tLL6\t-3.500000\t35.583330\t1963-01-01T00:00:00.000\n\t\tFell\tPoint\t12260\t180\tKarewar\tValid\tL6\t12.900000\t7.150000\t1949-01-01T00:00:00.000\n\t\tFell\tPoint\t12262\t22000\tKarkh\tValid\tL6\t27.800000\t67.166670\t1905-01-01T00:00:00.000\n\t\tFell\tPoint\t12263\t2950\tKarloowala\tValid\tL6\t31.583330\t71.600000\t1955-01-01T00:00:00.000\n\t\tFell\tPoint\t12264\t41730\tKaroonda\tValid\tCK4\t-35.083330\t139.916670\t1930-01-01T00:00:00.000\n\t\tFell\tPoint\t12266\t710\tKasamatsu\tValid\tH\t35.366670\t136.766670\t1938-01-01T00:00:00.000\n\t\tFell\tPoint\t30740\t16820\tKasauli\tValid\tH4\t29.583330\t77.583330\t2003-01-01T00:00:00.000\n\t\tFell\tPoint\t35465\t1500\tKatagum\tValid\tL6\t11.333330\t10.083330\t1999-01-01T00:00:00.000\n\t\tFell\tPoint\t47351\t6800\tKavarpura\tValid\tIron, IIE-an\t25.143330\t75.813330\t2006-01-01T00:00:00.000\n\t\tFell\tPoint\t12268\t85000\tKayakent\tValid\tIron, IIIAB\t39.263330\t31.780000\t1961-01-01T00:00:00.000\n\t\tFell\tPoint\t12270\t3300\tKediri\tValid\tL4\t-7.750000\t112.016670\t1940-01-01T00:00:00.000\n\t\tFell\tPoint\t53654\t5760\tKemer\tValid\tL4\t36.541940\t29.418220\t2008-01-01T00:00:00.000\n23\t3190\tFell\tPoint\t12275\t6937\tKendleton\tValid\tL4\t29.450000\t-96.000000\t1939-01-01T00:00:00.000\n\t\tFell\tPoint\t12276\t6669.2\tKendrapara\tValid\tH4-5\t20.462500\t86.702780\t2003-01-01T00:00:00.000\n\t\tFell\tPoint\t12282\t5000\tKerilis\tValid\tH5\t48.400000\t-3.300000\t1874-01-01T00:00:00.000\n\t\tFell\tPoint\t12284\t80000\tKernouve\tValid\tH6\t48.116670\t-3.083330\t1869-01-01T00:00:00.000\n\t\tFell\tPoint\t12286\t135000\tKesen\tValid\tH4\t38.983330\t141.616670\t1850-01-01T00:00:00.000\n\t\tFell\tPoint\t12288\t13600\tKhairpur\tValid\tEL6\t29.533330\t72.300000\t1873-01-01T00:00:00.000\n\t\tFell\tPoint\t12289\t3698\tKhanpur\tValid\tLL5\t25.550000\t83.116670\t1932-01-01T00:00:00.000\n\t\tFell\tPoint\t12291\t1500\tKharkov\tValid\tL6\t50.625000\t35.075000\t1787-01-01T00:00:00.000\n\t\tFell\tPoint\t12294\t450\tKheragur\tValid\tL6\t26.950000\t77.883330\t1860-01-01T00:00:00.000\n\t\tFell\tPoint\t12296\t100\tKhetri\tValid\tH6\t28.016670\t75.816670\t1867-01-01T00:00:00.000\n\t\tFell\tPoint\t12297\t6109\tKhmelevka\tValid\tL5\t56.750000\t75.333330\t1929-01-01T00:00:00.000\n\t\tFell\tPoint\t12298\t9700\tKhohar\tValid\tL3.6\t25.100000\t81.533330\t1910-01-01T00:00:00.000\n\t\tFell\tPoint\t12299\t3200\tKhor Temiki\tValid\tAubrite\t16.000000\t36.000000\t1932-01-01T00:00:00.000\n\t\tFell\tPoint\t12300\t100000\tKidairat\tValid\tH6\t14.000000\t28.000000\t1983-01-01T00:00:00.000\n\t\tFell\tPoint\t12301\t737.6\tKiel\tValid\tL6\t54.400000\t10.150000\t1962-01-01T00:00:00.000\n\t\tFell\tPoint\t12303\t1500\tKiffa\tValid\tH5\t16.583330\t-11.333330\t1970-01-01T00:00:00.000\n\t\tFell\tPoint\t12305\t331\tKijima (1906)\tValid\tStone-uncl\t36.850000\t138.383330\t1906-01-01T00:00:00.000\n\t\tFell\tPoint\t12306\t195\tKikino\tValid\tH6\t55.000000\t34.000000\t1809-01-01T00:00:00.000\n\t\tFell\tPoint\t12307\t19000\tKilabo\tValid\tLL6\t12.766670\t9.800000\t2002-01-01T00:00:00.000\n41\t2971\tFell\tPoint\t12308\t772\tKilbourn\tValid\tH5\t43.583330\t-89.600000\t1911-01-01T00:00:00.000\n\t\tFell\tPoint\t12309\t140\tKilleter\tValid\tH6\t54.666670\t-7.666670\t1844-01-01T00:00:00.000\n\t\tFell\tPoint\t12316\t67.400000000000006\tKingai\tValid\tH6\t11.633330\t24.683330\t1967-01-01T00:00:00.000\n23\t2018\tFell\tPoint\t12321\t97.7\tKirbyville\tValid\tEucrite-mmict\t30.750000\t-95.950000\t1906-01-01T00:00:00.000\n\t\tFell\tPoint\t12325\t1550\tKisvarsány\tValid\tL6\t48.166670\t22.308330\t1914-01-01T00:00:00.000\n\t\tFell\tPoint\t12326\t202.6\tKitchener\tValid\tL6\t43.383330\t-80.383330\t1998-01-01T00:00:00.000\n\t\tFell\tPoint\t12332\t3250\tKlein-Wenden\tValid\tH6\t51.600000\t10.800000\t1843-01-01T00:00:00.000\n\t\tFell\tPoint\t12335\t500000\tKnyahinya\tValid\tL/LL5\t48.900000\t22.400000\t1866-01-01T00:00:00.000\n\t\tFell\tPoint\t12336\t136\tKobe\tValid\tCK4\t34.733330\t135.166670\t1999-01-01T00:00:00.000\n\t\tFell\tPoint\t12342\t11510\tKokubunji\tValid\tL6\t34.300000\t133.950000\t1986-01-01T00:00:00.000\n\t\tFell\tPoint\t12343\t238\tKomagome\tValid\tIron\t35.733330\t139.750000\t1926-01-01T00:00:00.000\n\t\tFell\tPoint\t12344\t90\tKonovo\tValid\tLL5\t42.516670\t26.166670\t1931-01-01T00:00:00.000\n\t\tFell\tPoint\t53810\t4300\tKošice\tValid\tH5\t48.763670\t21.176330\t2010-01-01T00:00:00.000\n\t\tFell\tPoint\t12353\t16500\tKrähenberg\tValid\tLL5\t49.326940\t7.464720\t1869-01-01T00:00:00.000\n\t\tFell\tPoint\t12355\t2440\tKrasnoi-Ugol\tValid\tL6\t54.033330\t40.900000\t1829-01-01T00:00:00.000\n\t\tFell\tPoint\t12357\t4000\tKrasnyi Klyuch\tValid\tH5\t54.333330\t56.083330\t1946-01-01T00:00:00.000\n\t\tFell\tPoint\t12363\t845.2\tKrutikha\tValid\tOC\t56.800000\t77.000000\t1906-01-01T00:00:00.000\n\t\tFell\tPoint\t12364\t50000\tKrymka\tValid\tLL3.2\t47.833330\t30.766670\t1946-01-01T00:00:00.000\n\t\tFell\tPoint\t12368\t2250\tKukschin\tValid\tL6\t51.150000\t31.700000\t1938-01-01T00:00:00.000\n\t\tFell\tPoint\t12369\t453.6\tKulak\tValid\tL5\t30.731110\t66.802220\t1961-01-01T00:00:00.000\n\t\tFell\tPoint\t12370\t6000\tKuleschovka\tValid\tL6\t50.750000\t33.500000\t1811-01-01T00:00:00.000\n\t\tFell\tPoint\t12373\t3719\tKulp\tValid\tH6\t41.116670\t45.000000\t1906-01-01T00:00:00.000\n\t\tFell\tPoint\t12377\t200000\tKunashak\tValid\tL6\t55.783330\t61.366670\t1949-01-01T00:00:00.000\n\t\tFell\tPoint\t12379\t1100000\tKunya-Urgench\tValid\tH5\t42.250000\t59.200000\t1998-01-01T00:00:00.000\n\t\tFell\tPoint\t12381\t4460\tKushiike\tValid\tOC\t37.050000\t138.383330\t1920-01-01T00:00:00.000\n\t\tFell\tPoint\t12382\t5\tKusiali\tValid\tL6\t29.683330\t78.383330\t1860-01-01T00:00:00.000\n\t\tFell\tPoint\t12383\t23\tKutais\tValid\tH5\t44.516670\t39.300000\t1977-01-01T00:00:00.000\n\t\tFell\tPoint\t12384\t45000\tKuttippuram\tValid\tL6\t10.833330\t76.033330\t1914-01-01T00:00:00.000\n\t\tFell\tPoint\t12385\t4047\tKuznetzovo\tValid\tL6\t55.200000\t75.333330\t1932-01-01T00:00:00.000\n\t\tFell\tPoint\t12390\t45000\tKyushu\tValid\tL6\t32.033330\t130.633330\t1886-01-01T00:00:00.000\n\t\tFell\tPoint\t12392\t2800\tLa Bécasse\tValid\tL6\t47.083330\t1.750000\t1879-01-01T00:00:00.000\n\t\tFell\tPoint\t12394\t399\tLa Charca\tValid\tOC\t20.666670\t-101.283330\t1878-01-01T00:00:00.000\n\t\tFell\tPoint\t12395\t2000\tLa Colina\tValid\tH5\t-37.333330\t-61.533330\t1924-01-01T00:00:00.000\n\t\tFell\tPoint\t12396\t45000\tLa Criolla\tValid\tL6\t-31.233330\t-58.166670\t1985-01-01T00:00:00.000\n\t\tFell\tPoint\t12408\t3833\tLaborel\tValid\tH5\t44.283330\t5.583330\t1871-01-01T00:00:00.000\n\t\tFell\tPoint\t12433\t900\tLahrauli\tValid\tUreilite\t26.783330\t82.716670\t1955-01-01T00:00:00.000\n\t\tFell\tPoint\t12434\t37000\tL'Aigle\tValid\tL6\t48.766670\t0.633330\t1803-01-01T00:00:00.000\n\t\tFound\t\t32531\t9.6\tCumulus Hills 04075\tValid\tPallasite\t\t\t2003-01-01T00:00:00.000\n\t\tFell\tPoint\t12435\t212.5\tLakangaon\tValid\tEucrite-mmict\t21.866670\t76.033330\t1910-01-01T00:00:00.000\n\t\tFell\tPoint\t12451\t372\tLalitpur\tValid\tL6\t24.450000\t78.566670\t1887-01-01T00:00:00.000\n\t\tFell\tPoint\t12455\t51700\tLancé\tValid\tCO3.5\t47.700000\t1.066670\t1872-01-01T00:00:00.000\n\t\tFell\tPoint\t12456\t7000\tLancon\tValid\tH6\t43.750000\t5.116670\t1897-01-01T00:00:00.000\n\t\tFell\tPoint\t12461\t2300\tLånghalsen\tValid\tL6\t58.850000\t16.733330\t1947-01-01T00:00:00.000\n\t\tFell\tPoint\t12464\t1282\tLanxi\tValid\tL6\t46.241670\t126.196110\t1986-01-01T00:00:00.000\n\t\tFell\tPoint\t12465\t7000\tLanzenkirchen\tValid\tL4\t47.750000\t16.233330\t1925-01-01T00:00:00.000\n\t\tFell\tPoint\t12466\t14250\tLaochenzhen\tValid\tH5\t33.133330\t115.166670\t1987-01-01T00:00:00.000\n\t\tFell\tPoint\t12740\t1060\tLaunton\tValid\tL6\t51.900000\t-1.116670\t1830-01-01T00:00:00.000\n\t\tFell\tPoint\t12743\t800\tLavrentievka\tValid\tL6\t52.450000\t51.566670\t1938-01-01T00:00:00.000\n\t\tFell\tPoint\t12748\t3000\tLe Pressoir\tValid\tH5\t47.166670\t0.433330\t1845-01-01T00:00:00.000\n\t\tFell\tPoint\t12749\t780\tLe Teilleul\tValid\tHowardite\t48.533330\t-0.866670\t1845-01-01T00:00:00.000\n20\t608\tFell\tPoint\t12755\t51500\tLeedey\tValid\tL6\t35.883330\t-99.333330\t1943-01-01T00:00:00.000\n\t\tFell\tPoint\t12756\t460\tLeeuwfontein\tValid\tL6\t-25.666670\t28.366670\t1912-01-01T00:00:00.000\n\t\tFell\tPoint\t12759\t271.39999999999998\tLeighlinbridge\tValid\tL6\t52.666670\t-6.966670\t1999-01-01T00:00:00.000\n29\t1585\tFell\tPoint\t12760\t877\tLeighton\tValid\tH5\t34.583330\t-87.500000\t1907-01-01T00:00:00.000\n\t\tFell\tPoint\t12765\t700\tLeonovka\tValid\tL6\t52.266670\t32.850000\t1900-01-01T00:00:00.000\n\t\tFell\tPoint\t12769\t125\tLes Ormes\tValid\tL6\t48.350000\t3.250000\t1857-01-01T00:00:00.000\n\t\tFell\tPoint\t12772\t2000\tLesves\tValid\tL6\t50.366670\t4.733330\t1896-01-01T00:00:00.000\n\t\tFell\tPoint\t14646\t4000\tLichtenberg\tValid\tH6\t-26.150000\t26.183330\t1973-01-01T00:00:00.000\n\t\tFell\tPoint\t14650\t6862\tLillaverke\tValid\tH5\t56.650000\t15.866670\t1930-01-01T00:00:00.000\n\t\tFell\tPoint\t14652\t50000\tLimerick\tValid\tH5\t52.566670\t-8.783330\t1813-01-01T00:00:00.000\n\t\tFell\tPoint\t14655\t1862\tLinum\tValid\tL6\t52.750000\t12.900000\t1854-01-01T00:00:00.000\n\t\tFell\tPoint\t14659\t498\tLishui\tValid\tL5\t31.633330\t118.983330\t1978-01-01T00:00:00.000\n\t\tFell\tPoint\t14661\t12800\tLissa\tValid\tL6\t50.200000\t14.850000\t1808-01-01T00:00:00.000\n18\t2171\tFell\tPoint\t14664\t491\tLittle Piney\tValid\tL5\t37.916670\t-92.083330\t1839-01-01T00:00:00.000\n\t\tFell\tPoint\t14670\t5213\tLixna\tValid\tH4\t56.000000\t26.433330\t1820-01-01T00:00:00.000\n\t\tFell\tPoint\t14675\t1000\tLodran\tValid\tLodranite\t29.533330\t71.800000\t1868-01-01T00:00:00.000\n\t\tFell\tPoint\t14678\t40000\tLohawat\tValid\tHowardite\t26.965560\t72.626670\t1994-01-01T00:00:00.000\n40\t2770\tFell\tPoint\t52843\t329.7\tLorton\tValid\tL6\t38.700660\t-77.211630\t2010-01-01T00:00:00.000\n\t\tFell\tPoint\t14708\t25\tLos Martinez\tValid\tL6\t38.000000\t-0.833330\t1894-01-01T00:00:00.000\n20\t2711\tFell\tPoint\t14711\t17000\tLost City\tValid\tH5\t36.008330\t-95.150000\t1970-01-01T00:00:00.000\n36\t1327\tFell\tPoint\t14716\t1300\tLouisville\tValid\tL6\t38.250000\t-85.750000\t1977-01-01T00:00:00.000\n\t\tFell\tPoint\t14718\t59000\tŁowicz\tValid\tMesosiderite-A3\t52.000000\t19.916670\t1935-01-01T00:00:00.000\n\t\tFell\tPoint\t14721\t9241\tLua\tValid\tL5\t24.950000\t75.150000\t1926-01-01T00:00:00.000\n\t\tFell\tPoint\t14724\t3500\tLucé\tValid\tL6\t47.850000\t0.483330\t1768-01-01T00:00:00.000\n31\t1567\tFell\tPoint\t14753\t340\tLumpkin\tValid\tL6\t32.033330\t-84.766670\t1869-01-01T00:00:00.000\n\t\tFell\tPoint\t14754\t2520\tLunan\tValid\tH6\t24.800000\t103.300000\t1980-01-01T00:00:00.000\n\t\tFell\tPoint\t14755\t11000\tLundsgård\tValid\tL6\t56.216670\t13.033330\t1889-01-01T00:00:00.000\n\t\tFell\tPoint\t14756\t885\tLuotolax\tValid\tHowardite\t61.200000\t27.700000\t1813-01-01T00:00:00.000\n\t\tFell\tPoint\t14757\t14000\tLuponnas\tValid\tH3-5\t46.216670\t5.000000\t1753-01-01T00:00:00.000\n\t\tFell\tPoint\t14759\t\tLusaka\tValid\tUnknown\t-7.216670\t29.433330\t1951-01-01T00:00:00.000\n\t\tFell\tPoint\t14764\t540\tMabwe-Khoywa\tValid\tL5\t19.000000\t97.000000\t1937-01-01T00:00:00.000\n\t\tFell\tPoint\t15370\t1500\tMacau\tValid\tH5\t-5.200000\t-36.666670\t1836-01-01T00:00:00.000\n\t\tFell\tPoint\t15371\t93200\tMachinga\tValid\tL6\t-15.212220\t35.242220\t1981-01-01T00:00:00.000\n\t\tFell\tPoint\t15372\t1995\tMacibini\tValid\tEucrite-pmict\t-28.833330\t31.950000\t1936-01-01T00:00:00.000\n\t\tFell\tPoint\t15379\t1000\tMadhipura\tValid\tL\t25.916670\t86.366670\t1950-01-01T00:00:00.000\n\t\tFell\tPoint\t15380\t400\tMadiun\tValid\tL6\t-7.750000\t111.533330\t1935-01-01T00:00:00.000\n\t\tFell\tPoint\t15382\t400\tMadrid\tValid\tL6\t40.416670\t-3.716670\t1896-01-01T00:00:00.000\n\t\tFell\tPoint\t15383\t600\tMafra\tValid\tL3-4\t-26.166670\t-49.933330\t1941-01-01T00:00:00.000\n\t\tFell\tPoint\t15386\t5000\tMagnesia\tValid\tIron, IAB-sHL\t37.866670\t27.516670\t1899-01-01T00:00:00.000\n\t\tFell\tPoint\t15387\t666.6\tMagombedze\tValid\tH3-5\t-19.483330\t31.650000\t1990-01-01T00:00:00.000\n\t\tFell\tPoint\t47361\t70500\tMahadevpur\tValid\tH4/5\t27.666670\t95.783330\t2007-01-01T00:00:00.000\n\t\tFell\tPoint\t30751\t4629\tMaigatari-Danduma\tValid\tH5/6\t12.833330\t9.383330\t2004-01-01T00:00:00.000\n11\t611\tFell\tPoint\t15393\t150\tMalaga\tValid\tOC\t32.216670\t-104.000000\t1933-01-01T00:00:00.000\n\t\tFell\tPoint\t15394\t2000\tMalakal\tValid\tL5\t9.500000\t31.750000\t1970-01-01T00:00:00.000\n\t\tFell\tPoint\t15395\t470\tMalampaka\tValid\tH\t-3.133330\t33.516670\t1930-01-01T00:00:00.000\n\t\tFell\tPoint\t15397\t\tMalotas\tValid\tH5\t-28.933330\t-63.233330\t1931-01-01T00:00:00.000\n\t\tFell\tPoint\t15400\t807\tMalvern\tValid\tEucrite-pmict\t-29.450000\t26.766670\t1933-01-01T00:00:00.000\n\t\tFell\tPoint\t15401\t1000\tMamra Springs\tValid\tL6\t45.216670\t62.083330\t1927-01-01T00:00:00.000\n\t\tFell\tPoint\t15402\t1700\tManbhoom\tValid\tLL6\t23.050000\t86.700000\t1863-01-01T00:00:00.000\n\t\tFell\tPoint\t15403\t50\tManegaon\tValid\tDiogenite\t20.966670\t76.100000\t1843-01-01T00:00:00.000\n\t\tFell\tPoint\t15405\t22300\tMangwendi\tValid\tLL6\t-17.650000\t31.600000\t1934-01-01T00:00:00.000\n\t\tFell\tPoint\t15409\t3555\tManych\tValid\tLL3.4\t45.816670\t44.633330\t1951-01-01T00:00:00.000\n\t\tFell\tPoint\t15414\t4500\tMardan\tValid\tH5\t34.233330\t72.083330\t1948-01-01T00:00:00.000\n\t\tFell\t\t15418\t114\tMaria Linden\tValid\tL4\t\t\t1925-01-01T00:00:00.000\n19\t471\tFell\tPoint\t15419\t340\tMariaville\tValid\tIron\t42.716670\t-99.383330\t1898-01-01T00:00:00.000\n\t\tFell\tPoint\t48973\t25.81\tMaribo\tValid\tCM2\t54.761830\t11.467450\t2009-01-01T00:00:00.000\n\t\tFell\tPoint\t15421\t3200\tMaridi\tValid\tH6\t4.666670\t29.250000\t1941-01-01T00:00:00.000\n\t\tFell\tPoint\t15422\t2500\tMarilia\tValid\tH4\t-22.250000\t-49.933330\t1971-01-01T00:00:00.000\n16\t287\tFell\tPoint\t15424\t28400\tMarion (Iowa)\tValid\tL6\t41.900000\t-91.600000\t1847-01-01T00:00:00.000\n\t\tFell\tPoint\t15426\t45000\tMarjalahti\tValid\tPallasite, PMG\t61.500000\t30.500000\t1902-01-01T00:00:00.000\n\t\tFell\tPoint\t15429\t3000\tMarmande\tValid\tL5\t44.500000\t0.150000\t1848-01-01T00:00:00.000\n\t\tFell\tPoint\t15430\t6000\tMaromandia\tValid\tL6\t-14.200000\t48.100000\t2002-01-01T00:00:00.000\n39\t2740\tFell\tPoint\t15436\t1443\tMaryville\tValid\tL6\t35.800000\t-84.100000\t1983-01-01T00:00:00.000\n\t\tFell\tPoint\t15438\t1000\tMascombes\tValid\tL6\t45.366670\t1.866670\t1836-01-01T00:00:00.000\n\t\tFell\tPoint\t53653\t24.54\tMason Gully\tValid\tH5\t0.000000\t0.000000\t2010-01-01T00:00:00.000\n\t\tFell\tPoint\t15443\t1600\tMässing\tValid\tHowardite\t48.133330\t12.616670\t1803-01-01T00:00:00.000\n\t\tFell\tPoint\t15446\t19000\tMauerkirchen\tValid\tL6\t48.183330\t13.133330\t1768-01-01T00:00:00.000\n\t\tFell\tPoint\t15447\t220\tMauritius\tValid\tL6\t-20.000000\t57.000000\t1801-01-01T00:00:00.000\n\t\tFell\tPoint\t15451\t4850\tMayo Belwa\tValid\tAubrite\t8.966670\t12.083330\t1974-01-01T00:00:00.000\n\t\tFell\tPoint\t15453\t4000\tMazapil\tValid\tIron, IAB-sLL\t24.683330\t-101.683330\t1885-01-01T00:00:00.000\n\t\tFell\tPoint\t15454\t4975\tMaziba\tValid\tL6\t-1.216670\t30.000000\t1942-01-01T00:00:00.000\n\t\tFell\tPoint\t15455\t150000\tMbale\tValid\tL5/6\t1.066670\t34.166670\t1992-01-01T00:00:00.000\n\t\tFell\tPoint\t15467\t31\tMedanitos\tValid\tEucrite-cm\t-27.250000\t-67.500000\t1953-01-01T00:00:00.000\n\t\tFell\tPoint\t15469\t22\tMeerut\tValid\tH5\t29.016670\t77.800000\t1861-01-01T00:00:00.000\n\t\tFell\tPoint\t15470\t24750\tMeester-Cornelis\tValid\tH5\t-6.233330\t106.883330\t1915-01-01T00:00:00.000\n\t\tFell\tPoint\t15485\t10500\tMenow\tValid\tH4\t53.183330\t13.150000\t1862-01-01T00:00:00.000\n\t\tFell\tPoint\t15486\t28.9\tMenziswyl\tValid\tL5\t46.818670\t7.218170\t1903-01-01T00:00:00.000\n\t\tFell\tPoint\t15489\t4000\tMern\tValid\tL6\t55.050000\t12.066670\t1878-01-01T00:00:00.000\n\t\tFell\tPoint\t15491\t6000\tMeru\tValid\tLL6\t0.000000\t37.666670\t1945-01-01T00:00:00.000\n\t\tFell\tPoint\t15492\t71400\tMerua\tValid\tH5\t25.483330\t81.983330\t1920-01-01T00:00:00.000\n\t\tFell\tPoint\t15495\t2405\tMessina\tValid\tL5\t38.183330\t15.566670\t1955-01-01T00:00:00.000\n\t\tFell\tPoint\t16626\t870\tMeuselbach\tValid\tL6\t50.583330\t11.100000\t1897-01-01T00:00:00.000\n\t\tFell\tPoint\t16627\t1300\tMezel\tValid\tL6\t45.766670\t3.250000\t1949-01-01T00:00:00.000\n\t\tFell\tPoint\t16628\t22700\tMezö-Madaras\tValid\tL3.7\t46.500000\t25.733330\t1852-01-01T00:00:00.000\n\t\tFell\tPoint\t16629\t350\tMhow\tValid\tL6\t25.900000\t83.616670\t1827-01-01T00:00:00.000\n\t\tFell\tPoint\t16631\t1100\tMianchi\tValid\tH5\t34.800000\t111.700000\t1980-01-01T00:00:00.000\n\t\tFell\tPoint\t16632\t1600\tMiddlesbrough\tValid\tL6\t54.566670\t-1.166670\t1881-01-01T00:00:00.000\n41\t2996\tFell\tPoint\t52090\t3584\tMifflin\tValid\tL5\t42.907500\t-90.365560\t2010-01-01T00:00:00.000\n\t\tFell\tPoint\t16634\t8000\tMighei\tValid\tCM2\t48.066670\t30.966670\t1889-01-01T00:00:00.000\n\t\tFell\tPoint\t16635\t6380\tMihonoseki\tValid\tL6\t35.568330\t133.220000\t1992-01-01T00:00:00.000\n\t\tFell\tPoint\t16636\t224.2\tMike\tValid\tL6\t46.233330\t17.533330\t1944-01-01T00:00:00.000\n\t\tFell\tPoint\t16640\t10000\tMilena\tValid\tL6\t46.183330\t16.100000\t1842-01-01T00:00:00.000\n\t\tFell\tPoint\t16643\t330000\tMillbillillie\tValid\tEucrite-mmict\t-26.450000\t120.366670\t1960-01-01T00:00:00.000\n15\t11\tFell\tPoint\t16645\t16700\tMiller (Arkansas)\tValid\tH5\t35.400000\t-92.050000\t1930-01-01T00:00:00.000\n\t\tFell\tPoint\t16692\t1040\tMinamino\tValid\tL\t35.078330\t136.933330\t1632-01-01T00:00:00.000\n\t\tFell\tPoint\t16696\t42\tMineo\tValid\tPallasite\t37.283330\t14.700000\t1826-01-01T00:00:00.000\n\t\tFell\tPoint\t16697\t5500\tMin-Fan-Zhun\tValid\tLL6\t32.333330\t120.666670\t1952-01-01T00:00:00.000\n\t\tFell\tPoint\t16700\t550\tMinnichhof\tValid\tOC\t47.700000\t16.600000\t1905-01-01T00:00:00.000\n\t\tFell\tPoint\t16701\t8510\tMirzapur\tValid\tL5\t25.683330\t83.250000\t1910-01-01T00:00:00.000\n\t\tFell\tPoint\t16703\t5800\tMisshof\tValid\tH5\t56.666670\t23.000000\t1890-01-01T00:00:00.000\n\t\tFell\tPoint\t16707\t100.7\tMjelleim\tValid\tH\t61.733330\t5.933330\t1898-01-01T00:00:00.000\n\t\tFell\tPoint\t16709\t300000\tMocs\tValid\tL5-6\t46.800000\t24.033330\t1882-01-01T00:00:00.000\n17\t1290\tFell\tPoint\t16711\t35000\tModoc (1905)\tValid\tL6\t38.500000\t-101.100000\t1905-01-01T00:00:00.000\n\t\tFell\tPoint\t16713\t4500\tMokoia\tValid\tCV3\t-39.633330\t174.400000\t1908-01-01T00:00:00.000\n\t\tFell\tPoint\t16715\t144000\tMolina\tValid\tH5\t38.116670\t-1.166670\t1858-01-01T00:00:00.000\n\t\tFell\tPoint\t16717\t150\tMolteno\tValid\tHowardite\t-31.250000\t26.466670\t1953-01-01T00:00:00.000\n23\t2957\tFell\tPoint\t16719\t2587\tMonahans (1998)\tValid\tH5\t31.608330\t-102.858330\t1998-01-01T00:00:00.000\n37\t636\tFell\tPoint\t16720\t8600\tMonroe\tValid\tH4\t35.250000\t-80.500000\t1849-01-01T00:00:00.000\n\t\tFell\tPoint\t16725\t4885\tMonte das Fortes\tValid\tL5\t38.016670\t-8.250000\t1950-01-01T00:00:00.000\n\t\tFell\tPoint\t16726\t3130\tMonte Milone\tValid\tL5\t43.266670\t13.350000\t1846-01-01T00:00:00.000\n\t\tFell\tPoint\t16727\t149000\tMontferré\tValid\tH5\t43.390560\t1.962500\t1923-01-01T00:00:00.000\n\t\tFell\tPoint\t16729\t500\tMontlivault\tValid\tL6\t47.633330\t1.583330\t1838-01-01T00:00:00.000\n\t\tFell\tPoint\t16733\t\tMonze\tValid\tL6\t-15.966670\t27.350000\t1950-01-01T00:00:00.000\n37\t2431\tFell\tPoint\t16736\t1880\tMoore County\tValid\tEucrite-cm\t35.416670\t-79.383330\t1913-01-01T00:00:00.000\n\t\tFell\tPoint\t16737\t3520\tMooresfort\tValid\tH5\t52.450000\t-8.333330\t1810-01-01T00:00:00.000\n\t\tFell\tPoint\t16738\t8887.5\tMoorleah\tValid\tL6\t-40.975000\t145.600000\t1930-01-01T00:00:00.000\n\t\tFell\tPoint\t16740\t70\tMoradabad\tValid\tL6\t28.783330\t78.833330\t1808-01-01T00:00:00.000\n\t\tFell\tPoint\t16742\t633\tMorávka\tValid\tH5\t49.600000\t18.533330\t2000-01-01T00:00:00.000\n\t\tFell\tPoint\t16747\t1300\tMornans\tValid\tH5\t44.600000\t5.133330\t1875-01-01T00:00:00.000\n\t\tFell\tPoint\t36592\t3763\tMoss\tValid\tCO3.6\t59.433330\t10.700000\t2006-01-01T00:00:00.000\n\t\tFell\tPoint\t16759\t1500\tMoti-ka-nagla\tValid\tH6\t26.833330\t77.333330\t1868-01-01T00:00:00.000\n\t\tFell\tPoint\t16762\t9150\tMotta di Conti\tValid\tH4\t45.200000\t8.500000\t1868-01-01T00:00:00.000\n\t\tFell\tPoint\t16766\t11300\tMount Browne\tValid\tH6\t-29.800000\t141.700000\t1902-01-01T00:00:00.000\n\t\tFell\tPoint\t16804\t110000\tMount Tazerzait\tValid\tL5\t18.700000\t4.800000\t1991-01-01T00:00:00.000\n\t\tFell\tPoint\t16805\t17000\tMount Vaisi\tValid\tStone-uncl\t44.083330\t6.866670\t1637-01-01T00:00:00.000\n\t\tFell\tPoint\t16820\t1100\tMtola\tValid\tStone-uncl\t-11.500000\t33.500000\t1944-01-01T00:00:00.000\n\t\tFell\tPoint\t16841\t4400\tMuddoor\tValid\tL5\t12.633330\t77.016670\t1865-01-01T00:00:00.000\n\t\tFell\tPoint\t16851\t25.5\tMulletiwu\tValid\tL\t9.333330\t80.833330\t1795-01-01T00:00:00.000\n\t\tFell\tPoint\t16874\t4703\tMuraid\tValid\tL6\t24.500000\t90.216670\t1924-01-01T00:00:00.000\n\t\tFell\tPoint\t16875\t100000\tMurchison\tValid\tCM2\t-36.616670\t145.200000\t1969-01-01T00:00:00.000\n36\t237\tFell\tPoint\t16882\t12600\tMurray\tValid\tCM2\t36.600000\t-88.100000\t1950-01-01T00:00:00.000\n\t\tFell\tPoint\t16885\t1245\tMuzaffarpur\tValid\tIron, IAB-sHL\t26.133330\t85.533330\t1964-01-01T00:00:00.000\n\t\tFell\tPoint\t16887\t\tMyhee Caunta\tValid\tOC\t23.050000\t72.633330\t1842-01-01T00:00:00.000\n\t\tFell\tPoint\t16889\t8165\tNadiabondi\tValid\tH5\t12.000000\t1.000000\t1956-01-01T00:00:00.000\n\t\tFell\tPoint\t16890\t1810\tNagai\tValid\tL6\t38.121670\t140.061670\t1922-01-01T00:00:00.000\n\t\tFell\tPoint\t16892\t20\tNagaria\tValid\tEucrite-cm\t26.983330\t78.216670\t1875-01-01T00:00:00.000\n\t\tFell\tPoint\t16893\t6100\tNagy-Borové\tValid\tL5\t49.166670\t19.500000\t1895-01-01T00:00:00.000\n\t\tFell\tPoint\t16898\t10000\tNakhla\tValid\tMartian (nakhlite)\t31.316670\t30.350000\t1911-01-01T00:00:00.000\n\t\tFell\tPoint\t16899\t23200\tNakhon Pathom\tValid\tL6\t13.733330\t100.083330\t1923-01-01T00:00:00.000\n\t\tFell\tPoint\t16902\t4500\tNammianthal\tValid\tH5\t12.283330\t79.200000\t1886-01-01T00:00:00.000\n\t\tFell\tPoint\t16903\t52900\tNan Yang Pao\tValid\tL6\t35.666670\t103.500000\t1917-01-01T00:00:00.000\n45\t419\tFell\tPoint\t16904\t7500\tNanjemoy\tValid\tH6\t38.416670\t-77.166670\t1825-01-01T00:00:00.000\n\t\tFell\tPoint\t16907\t529\tNantong\tValid\tH6\t32.116670\t121.800000\t1984-01-01T00:00:00.000\n\t\tFell\tPoint\t16908\t17000\tNaoki\tValid\tH6\t19.250000\t77.000000\t1928-01-01T00:00:00.000\n\t\tFell\tPoint\t16909\t2700\tNaragh\tValid\tH6\t33.750000\t51.500000\t1974-01-01T00:00:00.000\n\t\tFell\tPoint\t16912\t367.5\tNarellan\tValid\tL6\t-34.050000\t150.688890\t1928-01-01T00:00:00.000\n\t\tFell\tPoint\t16914\t\tNarni\tValid\tStone-uncl\t42.516670\t12.516670\t0921-01-01T00:00:00.000\n\t\tFell\tPoint\t16922\t347\tNassirah\tValid\tH4\t-21.733330\t165.900000\t1936-01-01T00:00:00.000\n\t\tFell\t\t16923\t1.4\tNatal\tValid\tStone-uncl\t\t\t1973-01-01T00:00:00.000\n\t\tFell\tPoint\t16927\t105\tNawapali\tValid\tCM2\t21.250000\t83.666670\t1890-01-01T00:00:00.000\n\t\tFell\tPoint\t16934\t420\tNeagari\tValid\tL6\t36.449170\t136.465280\t1995-01-01T00:00:00.000\n\t\tFell\tPoint\t16935\t4500\tNedagolla\tValid\tIron, ungrouped\t18.683330\t83.483330\t1870-01-01T00:00:00.000\n\t\tFell\tPoint\t16941\t2450\tNejo\tValid\tL6\t9.500000\t35.333330\t1970-01-01T00:00:00.000\n\t\tFell\tPoint\t16945\t10250\tNerft\tValid\tL6\t56.500000\t21.500000\t1864-01-01T00:00:00.000\n\t\tFell\tPoint\t16950\t6189\tNeuschwanstein\tValid\tEL6\t47.525000\t10.808330\t2002-01-01T00:00:00.000\n38\t2615\tFell\tPoint\t16953\t230000\tNew Concord\tValid\tL6\t40.000000\t-81.766670\t1860-01-01T00:00:00.000\n\t\tFell\tPoint\t16954\t12000\tNew Halfa\tValid\tL4\t15.366670\t35.683330\t1994-01-01T00:00:00.000\n22\t1667\tFell\tPoint\t16960\t19256\tNew Orleans\tValid\tH5\t29.947180\t-90.109760\t2003-01-01T00:00:00.000\n\t\tFell\tPoint\t16966\t1393\tNgawi\tValid\tLL3.6\t-7.450000\t111.416670\t1883-01-01T00:00:00.000\n\t\tFell\tPoint\t16968\t37500\tN'Goureyma\tValid\tIron, ungrouped\t13.850000\t-4.383330\t1900-01-01T00:00:00.000\n\t\tFell\tPoint\t16970\t\tNicorps\tValid\tStone-uncl\t49.033330\t-1.433330\t1750-01-01T00:00:00.000\n\t\tFell\t\t16974\t3.3\tNiger (L6)\tValid\tL6\t\t\t1967-01-01T00:00:00.000\n\t\tFell\t\t16975\t3.3\tNiger (LL6)\tValid\tLL6\t\t\t1967-01-01T00:00:00.000\n\t\tFell\tPoint\t16976\t3996\tNikolaevka\tValid\tH4\t52.450000\t78.633330\t1935-01-01T00:00:00.000\n\t\tFell\tPoint\t16977\t6000\tNikolskoe\tValid\tL4\t56.116670\t37.333330\t1954-01-01T00:00:00.000\n\t\tFell\tPoint\t16980\t14250\tNingbo\tValid\tIron, IVA\t29.866670\t121.483330\t1975-01-01T00:00:00.000\n\t\tFell\tPoint\t16981\t4610\tNingqiang\tValid\tC3-ung\t32.925000\t105.906670\t1983-01-01T00:00:00.000\n\t\tFell\tPoint\t16982\t467\tNio\tValid\tH3-4\t34.200000\t131.566670\t1897-01-01T00:00:00.000\n\t\tFell\tPoint\t16983\t17200\tN'Kandhla\tValid\tIron, IID\t-28.566670\t30.700000\t1912-01-01T00:00:00.000\n49\t1683\tFell\tPoint\t16984\t2300\tNobleborough\tValid\tEucrite-pmict\t44.083330\t-69.483330\t1823-01-01T00:00:00.000\n35\t2238\tFell\tPoint\t16985\t483.7\tNoblesville\tValid\tH4-6\t40.085280\t-86.055000\t1991-01-01T00:00:00.000\n\t\tFell\tPoint\t16988\t472\tNogata\tValid\tL6\t33.725000\t130.750000\t0861-01-01T00:00:00.000\n\t\tFell\tPoint\t16989\t4000\tNogoya\tValid\tCM2\t-32.366670\t-59.833330\t1879-01-01T00:00:00.000\n15\t10\tFell\tPoint\t16994\t1050\tNorfork\tValid\tIron, IIIAB\t36.216670\t-92.266670\t1918-01-01T00:00:00.000\n17\t1252\tFell\tPoint\t17922\t1100000\tNorton County\tValid\tAubrite\t39.683330\t-99.866670\t1948-01-01T00:00:00.000\n\t\tFell\tPoint\t17930\t177\tNoventa Vicentina\tValid\tH4\t45.291670\t11.527220\t1971-01-01T00:00:00.000\n\t\tFell\tPoint\t17933\t1900\tNovo-Urei\tValid\tUreilite\t54.816670\t46.000000\t1886-01-01T00:00:00.000\n\t\tFell\tPoint\t17934\t\tNovy-Ergi\tValid\tStone-uncl\t58.550000\t31.333330\t1662-01-01T00:00:00.000\n\t\tFell\tPoint\t17935\t1001\tNovy-Projekt\tValid\tOC\t56.000000\t22.000000\t1908-01-01T00:00:00.000\n\t\tFell\tPoint\t17936\t250\tNoyan-Bogdo\tValid\tL6\t42.916670\t102.466670\t1933-01-01T00:00:00.000\n\t\tFell\tPoint\t17938\t50000\tNuevo Mercurio\tValid\tH5\t24.300000\t-102.133330\t1978-01-01T00:00:00.000\n\t\tFell\tPoint\t17959\t5000\tNulles\tValid\tH6\t41.633330\t0.750000\t1851-01-01T00:00:00.000\n\t\tFell\tPoint\t17960\t363\tNumakai\tValid\tH4\t43.333330\t141.866670\t1925-01-01T00:00:00.000\n\t\tFell\tPoint\t17969\t737.6\tNyaung\tValid\tIron, IIIAB\t21.208330\t94.916670\t1939-01-01T00:00:00.000\n\t\tFell\tPoint\t17970\t1100\tNyirábrany\tValid\tLL5\t47.550000\t22.025000\t1914-01-01T00:00:00.000\n\t\tFell\tPoint\t17979\t500000\tOchansk\tValid\tH4\t57.783330\t55.266670\t1887-01-01T00:00:00.000\n\t\tFell\tPoint\t17988\t1400\tOesede\tValid\tH5\t52.283330\t8.050000\t1927-01-01T00:00:00.000\n\t\tFell\tPoint\t17989\t6000\tOesel\tValid\tL6\t58.500000\t23.000000\t1855-01-01T00:00:00.000\n\t\tFell\tPoint\t17990\t3750\tOfehértó\tValid\tL6\t47.883330\t22.033330\t1900-01-01T00:00:00.000\n\t\tFell\tPoint\t17994\t14360\tOgi\tValid\tH6\t33.283330\t130.200000\t1741-01-01T00:00:00.000\n\t\tFell\tPoint\t17995\t16250\tOhaba\tValid\tH5\t46.066670\t23.583330\t1857-01-01T00:00:00.000\n\t\tFell\tPoint\t17996\t7700\tOhuma\tValid\tL5\t6.750000\t8.500000\t1963-01-01T00:00:00.000\n\t\tFell\tPoint\t17997\t5850\tOjuelos Altos\tValid\tL6\t38.183330\t-5.400000\t1926-01-01T00:00:00.000\n\t\tFell\tPoint\t17998\t194\tOkabe\tValid\tH5\t36.183330\t139.216670\t1958-01-01T00:00:00.000\n\t\tFell\tPoint\t18000\t4742\tOkano\tValid\tIron, IIAB\t35.083330\t135.200000\t1904-01-01T00:00:00.000\n\t\tFell\tPoint\t18002\t12000\tOkniny\tValid\tLL6\t50.833330\t25.500000\t1834-01-01T00:00:00.000\n\t\tFell\tPoint\t18009\t16570\tOldenburg (1930)\tValid\tL6\t52.950000\t8.166670\t1930-01-01T00:00:00.000\n\t\tFell\tPoint\t18012\t\tOliva-Gandia\tValid\tStone-uncl\t39.000000\t-0.033330\t1520-01-01T00:00:00.000\n\t\tFell\tPoint\t18013\t150000\tOlivenza\tValid\tLL5\t38.716670\t-7.066670\t1924-01-01T00:00:00.000\n\t\tFell\tPoint\t18015\t40000\tOlmedilla de Alarcón\tValid\tH5\t39.566670\t-2.100000\t1929-01-01T00:00:00.000\n\t\tFell\tPoint\t18019\t250000\tOmolon\tValid\tPallasite, PMG\t64.020000\t161.808330\t1981-01-01T00:00:00.000\n\t\tFell\tPoint\t18026\t14000\tOrgueil\tValid\tCI1\t43.883330\t1.383330\t1864-01-01T00:00:00.000\n30\t1078\tFell\tPoint\t34489\t180\tOrlando\tValid\tEucrite\t28.547500\t-81.362220\t2004-01-01T00:00:00.000\n\t\tFell\tPoint\t18030\t6000\tOrnans\tValid\tCO3.4\t47.116670\t6.150000\t1868-01-01T00:00:00.000\n\t\tFell\tPoint\t18033\t4500\tOrtenau\tValid\tStone-uncl\t48.500000\t8.000000\t1671-01-01T00:00:00.000\n\t\tFell\tPoint\t18034\t3400\tOrvinio\tValid\tH6\t42.133330\t12.933330\t1872-01-01T00:00:00.000\n\t\tFell\tPoint\t18042\t246\tOterøy\tValid\tL6\t58.883330\t9.400000\t1928-01-01T00:00:00.000\n\t\tFell\tPoint\t18045\t6510\tOtomi\tValid\tH\t38.400000\t140.350000\t1867-01-01T00:00:00.000\n17\t1947\tFell\tPoint\t18046\t840\tOttawa\tValid\tLL6\t38.600000\t-95.216670\t1896-01-01T00:00:00.000\n\t\tFell\tPoint\t56729\t4440\tOuadangou\tValid\tL5\t12.900000\t0.080000\t2003-01-01T00:00:00.000\n\t\tFell\tPoint\t18050\t1215.5\tOued el Hadjar\tValid\tLL6\t30.180000\t-6.577170\t1986-01-01T00:00:00.000\n\t\tFell\tPoint\t31282\t17000\tOum Dreyga\tValid\tH3-5\t24.300000\t-13.100000\t2003-01-01T00:00:00.000\n\t\tFell\tPoint\t18052\t20000\tOurique\tValid\tH4\t37.608330\t-8.280000\t1998-01-01T00:00:00.000\n\t\tFell\tPoint\t18055\t121.5\tOvambo\tValid\tL6\t-18.000000\t16.000000\t1900-01-01T00:00:00.000\n\t\tFell\tPoint\t18058\t205\tOviedo\tValid\tH5\t43.400000\t-5.866670\t1856-01-01T00:00:00.000\n\t\tFell\tPoint\t18062\t\tOwrucz\tValid\tOC\t51.333330\t28.833330\t1775-01-01T00:00:00.000\n\t\tFell\tPoint\t18068\t3400\tPacula\tValid\tL6\t21.050000\t-99.300000\t1881-01-01T00:00:00.000\n\t\tFell\tPoint\t18069\t3858\tPadvarninkai\tValid\tEucrite-mmict\t55.666670\t25.000000\t1929-01-01T00:00:00.000\n\t\tFell\tPoint\t18072\t515\tPaitan\tValid\tH6\t17.743330\t120.455830\t1910-01-01T00:00:00.000\n32\t503\tFell\tPoint\t18073\t\tPalahatchie\tValid\tOC\t32.316670\t-89.716670\t1910-01-01T00:00:00.000\n\t\tFell\tPoint\t18074\t1430\tPalca de Aparzo\tValid\tL5\t-23.116670\t-65.100000\t1988-01-01T00:00:00.000\n\t\tFell\tPoint\t18077\t18000\tPalinshih\tValid\tIron\t43.483330\t118.616670\t1914-01-01T00:00:00.000\n18\t2122\tFell\tPoint\t18079\t135\tPalmyra\tValid\tL3\t39.800000\t-91.500000\t1926-01-01T00:00:00.000\n4\t1657\tFell\tPoint\t18082\t682\tPalolo Valley\tValid\tH5\t21.300000\t-157.783330\t1949-01-01T00:00:00.000\n\t\tFound\t\t32591\t69.5\tDominion Range 03239\tValid\tL6\t\t\t2002-01-01T00:00:00.000\n\t\tFell\tPoint\t18093\t10500\tPampanga\tValid\tL5\t15.083330\t120.700000\t1859-01-01T00:00:00.000\n\t\tFell\tPoint\t18098\t2130\tPantar\tValid\tH5\t8.066670\t124.283330\t1938-01-01T00:00:00.000\n15\t1023\tFell\tPoint\t18101\t408000\tParagould\tValid\tLL5\t36.066670\t-90.500000\t1930-01-01T00:00:00.000\n\t\tFell\tPoint\t18102\t2000\tParambu\tValid\tLL5\t-6.233330\t-40.700000\t1967-01-01T00:00:00.000\n\t\tFell\tPoint\t18103\t100000\tParanaiba\tValid\tL6\t-19.133330\t-51.666670\t1956-01-01T00:00:00.000\n34\t1863\tFell\tPoint\t18106\t18000\tPark Forest\tValid\tL5\t41.484720\t-87.679170\t2003-01-01T00:00:00.000\n\t\tFell\tPoint\t18108\t77600\tParnallee\tValid\tLL3.6\t9.233330\t78.350000\t1857-01-01T00:00:00.000\n\t\tFell\tPoint\t18109\t800\tParsa\tValid\tEH3\t26.200000\t85.400000\t1942-01-01T00:00:00.000\n11\t1994\tFell\tPoint\t18110\t5100\tPasamonte\tValid\tEucrite-pmict\t36.216670\t-103.400000\t1933-01-01T00:00:00.000\n\t\tFell\tPoint\t18112\t4375\tPatora\tValid\tH6\t20.936940\t82.050000\t1969-01-01T00:00:00.000\n\t\tFell\tPoint\t18116\t2121\tPatrimonio\tValid\tL6\t-19.533330\t-48.566670\t1950-01-01T00:00:00.000\n\t\tFell\tPoint\t18118\t12\tPatti\tValid\tIron\t38.133330\t14.966670\t1922-01-01T00:00:00.000\n\t\tFell\tPoint\t18171\t37350\tPatwar\tValid\tMesosiderite-A1\t23.150000\t91.183330\t1935-01-01T00:00:00.000\n\t\tFell\tPoint\t18173\t2968\tPavel\tValid\tH5\t43.466670\t25.516670\t1966-01-01T00:00:00.000\n\t\tFell\tPoint\t18175\t142.5\tPavlodar (stone)\tValid\tH5\t52.300000\t77.033330\t1938-01-01T00:00:00.000\n\t\tFell\tPoint\t18176\t40000\tPavlograd\tValid\tL6\t48.533330\t35.983330\t1826-01-01T00:00:00.000\n\t\tFell\tPoint\t18177\t2000\tPavlovka\tValid\tHowardite\t52.033330\t43.000000\t1882-01-01T00:00:00.000\n\t\tFell\tPoint\t18179\t\tPê\tValid\tL6\t11.333670\t-3.542170\t1989-01-01T00:00:00.000\n\t\tFell\tPoint\t18180\t45760\tPeace River\tValid\tL6\t56.133330\t-117.933330\t1963-01-01T00:00:00.000\n\t\tFell\tPoint\t18181\t117.8\tPeckelsheim\tValid\tDiogenite-pm\t51.666670\t9.250000\t1953-01-01T00:00:00.000\n47\t2185\tFell\tPoint\t18782\t12570\tPeekskill\tValid\tH6\t41.283330\t-73.916670\t1992-01-01T00:00:00.000\n23\t3062\tFell\tPoint\t18786\t70000\tPeña Blanca Spring\tValid\tAubrite\t30.125000\t-103.116670\t1946-01-01T00:00:00.000\n\t\tFell\tPoint\t18792\t165\tPeramiho\tValid\tEucrite-mmict\t-10.666670\t35.500000\t1899-01-01T00:00:00.000\n\t\tFell\tPoint\t18793\t23474\tPerpeti\tValid\tL6\t23.325000\t91.000000\t1935-01-01T00:00:00.000\n\t\tFell\tPoint\t18797\t2\tPerth\tValid\tLL5\t56.400000\t-3.433330\t1830-01-01T00:00:00.000\n\t\tFell\tPoint\t18798\t66000\tPervomaisky\tValid\tL6\t56.633330\t39.433330\t1933-01-01T00:00:00.000\n\t\tFell\tPoint\t18799\t3393\tPesyanoe\tValid\tAubrite\t55.500000\t66.083330\t1933-01-01T00:00:00.000\n\t\tFell\tPoint\t18800\t189\tPétèlkolé\tValid\tH5\t14.052000\t0.420000\t1995-01-01T00:00:00.000\n39\t2017\tFell\tPoint\t18801\t1800\tPetersburg\tValid\tEucrite-pmict\t35.300000\t-86.633330\t1855-01-01T00:00:00.000\n\t\tFell\tPoint\t18804\t\tPettiswood\tValid\tStone-uncl\t53.533330\t-7.333330\t1779-01-01T00:00:00.000\n17\t1255\tFell\tPoint\t18808\t57900\tPhillips County (stone)\tValid\tL6\t40.000000\t-99.250000\t1901-01-01T00:00:00.000\n\t\tFell\tPoint\t18809\t500\tPhu Hong\tValid\tH4\t11.250000\t108.583330\t1887-01-01T00:00:00.000\n\t\tFell\tPoint\t18811\t7800\tPhum Sambo\tValid\tH4\t12.000000\t105.483330\t1933-01-01T00:00:00.000\n\t\tFell\tPoint\t18812\t11000\tPhuoc-Binh\tValid\tL5\t15.716670\t108.100000\t1941-01-01T00:00:00.000\n\t\tFell\tPoint\t18813\t13.1\tPiancaldoli\tValid\tLL3.4\t44.244170\t11.502220\t1968-01-01T00:00:00.000\n\t\tFell\tPoint\t18816\t\tPicote\tValid\tStone-uncl\t41.366670\t-6.233330\t1843-01-01T00:00:00.000\n\t\tFell\tPoint\t18822\t23250\tPillistfer\tValid\tEL6\t58.666670\t25.733330\t1863-01-01T00:00:00.000\n\t\tFell\tPoint\t18831\t42000\tPiplia Kalan\tValid\tEucrite-mmict\t26.034720\t73.941670\t1996-01-01T00:00:00.000\n\t\tFell\tPoint\t18832\t37\tPiquetberg\tValid\tH\t-32.866670\t18.716670\t1881-01-01T00:00:00.000\n\t\tFell\tPoint\t18834\t842\tPirgunje\tValid\tL6\t25.800000\t88.450000\t1882-01-01T00:00:00.000\n\t\tFell\tPoint\t18835\t1161\tPirthalla\tValid\tH6\t29.583330\t76.000000\t1884-01-01T00:00:00.000\n31\t207\tFell\tPoint\t18837\t3760\tPitts\tValid\tIron, IAB-ung\t31.950000\t-83.516670\t1921-01-01T00:00:00.000\n23\t2018\tFell\tPoint\t18846\t2085\tPlantersville\tValid\tH6\t30.700000\t-96.116670\t1930-01-01T00:00:00.000\n\t\tFell\tPoint\t51706\t6913\tPleşcoi\tValid\tL5-6\t45.275000\t26.709720\t2008-01-01T00:00:00.000\n\t\tFell\tPoint\t18849\t39\tPloschkovitz\tValid\tL5\t50.533330\t14.116670\t1723-01-01T00:00:00.000\n\t\tFell\tPoint\t18851\t96\tPnompehn\tValid\tL6\t11.583330\t104.916670\t1868-01-01T00:00:00.000\n\t\tFound\t\t32592\t290.89999999999998\tDominion Range 03240\tValid\tLL5\t\t\t2002-01-01T00:00:00.000\n\t\tFell\tPoint\t18853\t3000\tPohlitz\tValid\tL5\t50.933330\t12.133330\t1819-01-01T00:00:00.000\n\t\tFell\tPoint\t18858\t350\tPokhra\tValid\tH5\t26.716670\t82.666670\t1866-01-01T00:00:00.000\n\t\tFell\tPoint\t18860\t253.6\tPollen\tValid\tCM2\t66.348330\t14.015000\t1942-01-01T00:00:00.000\n\t\tFell\tPoint\t18865\t157\tPontlyfni\tValid\tWinonaite\t53.036390\t-4.319440\t1931-01-01T00:00:00.000\n11\t1987\tFell\tPoint\t18874\t71400\tPortales Valley\tValid\tH6\t34.175000\t-103.295000\t1998-01-01T00:00:00.000\n\t\tFell\tPoint\t18876\t4500\tPortugal\tValid\tStone-uncl\t38.500000\t-8.000000\t1796-01-01T00:00:00.000\n\t\tFell\tPoint\t18879\t665\tPo-wang Chen\tValid\tLL\t31.416670\t118.500000\t1933-01-01T00:00:00.000\n\t\tFell\tPoint\t18883\t2125\tPrambachkirchen\tValid\tL6\t48.302500\t13.940830\t1932-01-01T00:00:00.000\n\t\tFell\tPoint\t18887\t5555\tPribram\tValid\tH5\t49.666670\t14.033330\t1959-01-01T00:00:00.000\n38\t2566\tFell\tPoint\t18888\t900\tPricetown\tValid\tL6\t39.116670\t-83.850000\t1893-01-01T00:00:00.000\n\t\tFell\tPoint\t45984\t500\tPuerto Lápice\tValid\tEucrite-br\t39.350000\t-3.516670\t2007-01-01T00:00:00.000\n\t\tFell\tPoint\t18899\t560\tPulsora\tValid\tH5\t23.366670\t75.183330\t1863-01-01T00:00:00.000\n\t\tFell\tPoint\t18901\t250000\tPultusk\tValid\tH5\t52.766670\t21.266670\t1868-01-01T00:00:00.000\n\t\tFell\tPoint\t18902\t100\tPunganaru\tValid\tStone-uncl\t13.333330\t78.950000\t1811-01-01T00:00:00.000\n\t\tFell\tPoint\t18905\t300000\tPutinga\tValid\tL6\t-29.033330\t-53.050000\t1937-01-01T00:00:00.000\n\t\tFell\tPoint\t18907\t1275\tQidong\tValid\tL/LL5\t32.083330\t121.500000\t1982-01-01T00:00:00.000\n\t\tFell\tPoint\t18908\t2600\tQingzhen\tValid\tEH3\t26.533330\t106.466670\t1976-01-01T00:00:00.000\n\t\tFell\tPoint\t22357\t7000\tQueen's Mercy\tValid\tH6\t-30.116670\t28.700000\t1925-01-01T00:00:00.000\n\t\tFell\tPoint\t22358\t6045\tQuenggouk\tValid\tH4\t17.766670\t95.183330\t1857-01-01T00:00:00.000\n\t\tFell\tPoint\t22360\t10750\tQuesa\tValid\tIron, IAB-ung\t39.000000\t-0.666670\t1898-01-01T00:00:00.000\n\t\tFell\tPoint\t22361\t17450\tQuija\tValid\tH\t44.616670\t126.133330\t1990-01-01T00:00:00.000\n\t\tFell\tPoint\t22363\t65\tQuincay\tValid\tL6\t46.600000\t0.250000\t1851-01-01T00:00:00.000\n\t\tFell\tPoint\t22368\t5000\tRaco\tValid\tH5\t-26.666670\t-65.450000\t1957-01-01T00:00:00.000\n\t\tFell\tPoint\t22371\t10200\tRaghunathpura\tValid\tIron, IIAB\t27.725280\t76.465000\t1986-01-01T00:00:00.000\n\t\tFell\tPoint\t31302\t67225\tRahimyar Khan\tValid\tL5\t28.225000\t70.200000\t1983-01-01T00:00:00.000\n\t\tFell\tPoint\t22376\t9000\tRakovka\tValid\tL6\t52.983330\t37.033330\t1878-01-01T00:00:00.000\n\t\tFell\tPoint\t22384\t3766\tRamnagar\tValid\tL6\t26.450000\t82.900000\t1940-01-01T00:00:00.000\n\t\tFell\tPoint\t22385\t100\tRampurhat\tValid\tLL\t24.166670\t87.766670\t1916-01-01T00:00:00.000\n\t\tFell\tPoint\t22386\t4682\tRamsdorf\tValid\tL6\t51.883330\t6.933330\t1958-01-01T00:00:00.000\n\t\tFell\tPoint\t22387\t290.39999999999998\tRanchapur\tValid\tH4\t23.983330\t87.083330\t1917-01-01T00:00:00.000\n\t\tFell\tPoint\t22390\t300\tRancho de la Presa\tValid\tH5\t19.866670\t-100.816670\t1899-01-01T00:00:00.000\n\t\tFell\tPoint\t22392\t3224.5\tRangala\tValid\tL6\t25.383330\t72.016670\t1937-01-01T00:00:00.000\n\t\tFell\tPoint\t22394\t4910\tRaoyang\tValid\tL6\t38.200000\t115.700000\t1919-01-01T00:00:00.000\n\t\tFell\tPoint\t22395\t6.1\tRas Tanura\tValid\tH6\t26.666670\t50.150000\t1961-01-01T00:00:00.000\n\t\tFell\tPoint\t22396\t24700\tRasgrad\tValid\tStone-uncl\t43.500000\t26.533330\t1740-01-01T00:00:00.000\n\t\tFell\tPoint\t22398\t910\tRatyn\tValid\tStone-uncl\t52.200000\t17.983330\t1880-01-01T00:00:00.000\n8\t1391\tFell\tPoint\t53502\t18.41\tRed Canyon Lake\tValid\tH5\t38.137420\t-119.758120\t2007-01-01T00:00:00.000\n\t\tFell\tPoint\t22584\t17300\tReliegos\tValid\tL5\t42.475000\t-5.333330\t1947-01-01T00:00:00.000\n\t\tFell\tPoint\t22585\t10000\tRembang\tValid\tIron, IVA\t-6.733330\t111.366670\t1919-01-01T00:00:00.000\n\t\tFell\tPoint\t22586\t1000\tRenazzo\tValid\tCR2\t44.766670\t11.283330\t1824-01-01T00:00:00.000\n\t\tFell\tPoint\t22587\t300\tRenca\tValid\tL5\t-32.750000\t-65.283330\t1925-01-01T00:00:00.000\n\t\tFell\tPoint\t22589\t355\tRenqiu\tValid\tL6\t38.666670\t116.133330\t1916-01-01T00:00:00.000\n\t\tFell\tPoint\t22590\t7000\tRepeev Khutor\tValid\tIron, IIF\t48.600000\t45.666670\t1933-01-01T00:00:00.000\n\t\tFell\tPoint\t22592\t1\tRevelstoke\tValid\tCI1\t51.333330\t-118.950000\t1965-01-01T00:00:00.000\n\t\tFell\tPoint\t22593\t3332\tRewari\tValid\tL6\t28.200000\t76.666670\t1929-01-01T00:00:00.000\n37\t2388\tFell\tPoint\t22597\t668\tRich Mountain\tValid\tL6\t35.033330\t-83.033330\t1903-01-01T00:00:00.000\n\t\tFell\tPoint\t24140\t20000\tUzcudun\tValid\tL\t-44.116670\t-66.150000\t1948-01-01T00:00:00.000\n3\t569\tFell\tPoint\t22599\t90000\tRichardton\tValid\tH5\t46.883330\t-102.316670\t1918-01-01T00:00:00.000\n23\t2885\tFell\tPoint\t22602\t1900\tRichland Springs\tValid\tOC\t31.250000\t-99.033330\t1980-01-01T00:00:00.000\n40\t2764\tFell\tPoint\t22603\t1800\tRichmond\tValid\tLL5\t37.466670\t-77.500000\t1828-01-01T00:00:00.000\n\t\tFell\tPoint\t22611\t1310\tRio Negro\tValid\tL4\t-26.100000\t-49.800000\t1934-01-01T00:00:00.000\n\t\tFell\tPoint\t22614\t103.3\tRivolta de Bassi\tValid\tStone-uncl\t45.483330\t9.516670\t1491-01-01T00:00:00.000\n35\t150\tFell\tPoint\t22637\t340\tRochester\tValid\tH6\t41.083330\t-86.283330\t1876-01-01T00:00:00.000\n\t\tFell\tPoint\t22640\t1641\tRockhampton\tValid\tStone-uncl\t-23.383330\t150.516670\t1895-01-01T00:00:00.000\n\t\tFell\tPoint\t22641\t400\tRoda\tValid\tDiogenite\t42.300000\t0.550000\t1871-01-01T00:00:00.000\n\t\tFell\tPoint\t22642\t2900\tRodach\tValid\tStone-uncl\t50.350000\t10.800000\t1775-01-01T00:00:00.000\n50\t361\tFell\tPoint\t22766\t10600\tRose City\tValid\tH5\t44.516670\t-83.950000\t1921-01-01T00:00:00.000\n\t\tFell\tPoint\t22773\t3500\tRowton\tValid\tIron, IIIAB\t52.766670\t-2.516670\t1876-01-01T00:00:00.000\n\t\tFell\tPoint\t22780\t465.5\tRuhobobo\tValid\tL6\t-1.450000\t29.833330\t1976-01-01T00:00:00.000\n\t\tFell\tPoint\t22782\t67\tRumuruti\tValid\tR3.8-6\t0.266670\t36.533330\t1934-01-01T00:00:00.000\n\t\tFell\tPoint\t22783\t6000\tRupota\tValid\tL4-6\t-10.266670\t38.766670\t1949-01-01T00:00:00.000\n\t\tFell\tPoint\t22791\t13000\tRyechki\tValid\tL5\t51.133330\t34.500000\t1914-01-01T00:00:00.000\n\t\tFell\tPoint\t22792\t1250\tSabetmahet\tValid\tH5\t27.433330\t82.083330\t1855-01-01T00:00:00.000\n\t\tFell\tPoint\t22793\t478\tSabrum\tValid\tLL6\t23.083330\t91.666670\t1999-01-01T00:00:00.000\n\t\tFell\tPoint\t22796\t\tSagan\tValid\tStone-uncl\t51.533330\t14.883330\t1636-01-01T00:00:00.000\n\t\tFell\tPoint\t23101\t14000\tSaint-Sauveur\tValid\tEH5\t43.733330\t1.383330\t1914-01-01T00:00:00.000\n\t\tFell\tPoint\t23102\t271000\tSaint-Séverin\tValid\tLL6\t45.300000\t0.233330\t1966-01-01T00:00:00.000\n\t\tFell\tPoint\t23103\t4180\tSakauchi\tValid\tIron\t35.666670\t136.300000\t1913-01-01T00:00:00.000\n12\t2409\tFell\tPoint\t23107\t61.4\tSalem\tValid\tL6\t44.979170\t-122.969440\t1981-01-01T00:00:00.000\n\t\tFell\tPoint\t23111\t9000\tSalles\tValid\tL5\t46.050000\t4.633330\t1798-01-01T00:00:00.000\n\t\tFell\tPoint\t23114\t43\tSalzwedel\tValid\tLL5\t52.750000\t11.050000\t1985-01-01T00:00:00.000\n\t\tFell\tPoint\t23115\t2462\tSamelia\tValid\tIron, IIIAB\t25.666670\t74.866670\t1921-01-01T00:00:00.000\n8\t1174\tFell\tPoint\t23128\t56\tSan Juan Capistrano\tValid\tH6\t33.484720\t-117.662500\t1973-01-01T00:00:00.000\n\t\tFell\tPoint\t31315\t237\tSan Michele\tValid\tL6\t43.666670\t13.000000\t2002-01-01T00:00:00.000\n\t\tFell\tPoint\t23130\t282\tSan Pedro de Quiles\tValid\tL6\t-31.016670\t-71.400000\t1956-01-01T00:00:00.000\n\t\tFell\tPoint\t34063\t460\tSan Pedro Jacuaro\tValid\tLL6\t19.766670\t-100.650000\t1968-01-01T00:00:00.000\n\t\tFell\tPoint\t23161\t400\tSanta Barbara\tValid\tL4\t-29.200000\t-51.866670\t1873-01-01T00:00:00.000\n\t\tFell\tPoint\t23164\t60\tSanta Cruz\tValid\tCM2\t24.166670\t-99.333330\t1939-01-01T00:00:00.000\n\t\tFell\tPoint\t23165\t5500\tSanta Isabel\tValid\tL6\t-33.900000\t-61.700000\t1924-01-01T00:00:00.000\n\t\tFell\tPoint\t50909\t4000\tSanta Lucia (2008)\tValid\tL6\t-31.535556\t-68.489444\t2008-01-01T00:00:00.000\n\t\tFell\tPoint\t23171\t927\tSão Jose do Rio Preto\tValid\tH4\t-20.810000\t-49.380560\t1962-01-01T00:00:00.000\n\t\tFell\tPoint\t23176\t200000\tSaratov\tValid\tL4\t52.550000\t46.550000\t1918-01-01T00:00:00.000\n\t\tFell\tPoint\t23187\t695\tSasagase\tValid\tH\t34.716670\t137.783330\t1688-01-01T00:00:00.000\n\t\tFell\tPoint\t23188\t4000\tSauguis\tValid\tL6\t43.150000\t-0.850000\t1868-01-01T00:00:00.000\n\t\tFell\tPoint\t23190\t2500\tSavtschenskoje\tValid\tLL4\t47.216670\t29.866670\t1894-01-01T00:00:00.000\n\t\tFell\tPoint\t23192\t430\tSayama\tValid\tCM2\t35.866670\t139.400000\t1986-01-01T00:00:00.000\n\t\tFell\tPoint\t23455\t412\tSazovice\tValid\tL5\t49.233330\t17.566670\t1934-01-01T00:00:00.000\n\t\tFell\tPoint\t23457\t7000\tSchellin\tValid\tL\t53.350000\t15.050000\t1715-01-01T00:00:00.000\n47\t2142\tFell\tPoint\t23458\t283.3\tSchenectady\tValid\tH5\t42.860830\t-73.950280\t1968-01-01T00:00:00.000\n\t\tFell\tPoint\t23460\t8000\tSchönenberg\tValid\tL6\t48.116670\t10.466670\t1846-01-01T00:00:00.000\n49\t1727\tFell\tPoint\t23472\t5400\tSearsmont\tValid\tH5\t44.366670\t-69.200000\t1871-01-01T00:00:00.000\n\t\tFell\tPoint\t23473\t240\tSediköy\tValid\tL6\t38.300000\t27.133330\t1917-01-01T00:00:00.000\n\t\tFell\tPoint\t23476\t6930\tSegowlie\tValid\tLL6\t26.750000\t84.783330\t1853-01-01T00:00:00.000\n\t\tFell\tPoint\t23481\t1590\tSelakopi\tValid\tH5\t-7.233330\t107.333330\t1939-01-01T00:00:00.000\n\t\tFell\tPoint\t23483\t150\tSeldebourak\tValid\tH5\t22.833330\t4.983330\t1947-01-01T00:00:00.000\n\t\tFell\tPoint\t23487\t691\tSemarkona\tValid\tLL3.00\t22.250000\t79.000000\t1940-01-01T00:00:00.000\n\t\tFell\tPoint\t23495\t4000\tSena\tValid\tH4\t41.716670\t-0.050000\t1773-01-01T00:00:00.000\n\t\tFell\tPoint\t23496\t866\tSenboku\tValid\tH6\t39.438330\t140.511670\t1993-01-01T00:00:00.000\n\t\tFell\tPoint\t23500\t20000\tSeoni\tValid\tH6\t21.683890\t79.500830\t1966-01-01T00:00:00.000\n\t\tFell\tPoint\t23501\t8500\tSeres\tValid\tH4\t41.050000\t23.566670\t1818-01-01T00:00:00.000\n\t\tFell\tPoint\t23502\t1800\tSerra de Magé\tValid\tEucrite-cm\t-8.383330\t-36.766670\t1923-01-01T00:00:00.000\n\t\tFell\tPoint\t23504\t350\tSete Lagoas\tValid\tH4\t-19.466670\t-44.216670\t1908-01-01T00:00:00.000\n\t\tFell\tPoint\t23508\t180\tSevilla\tValid\tLL4\t37.416670\t-6.000000\t1862-01-01T00:00:00.000\n\t\tFell\tPoint\t23509\t101000\tSevrukovo\tValid\tL5\t50.616670\t36.600000\t1874-01-01T00:00:00.000\n\t\tFell\tPoint\t23512\t7000\tSfax\tValid\tL6\t34.750000\t10.716670\t1989-01-01T00:00:00.000\n\t\tFell\tPoint\t23521\t4000\tShalka\tValid\tDiogenite\t23.100000\t87.300000\t1850-01-01T00:00:00.000\n40\t921\tFell\tPoint\t23525\t1265\tSharps\tValid\tH3.4\t37.833330\t-76.700000\t1921-01-01T00:00:00.000\n\t\tFell\tPoint\t23529\t18600\tShelburne\tValid\tL5\t44.050000\t-80.166670\t1904-01-01T00:00:00.000\n\t\tFell\tPoint\t23530\t5000\tShergotty\tValid\tMartian (shergottite)\t24.550000\t84.833330\t1865-01-01T00:00:00.000\n\t\tFell\tPoint\t23531\t605\tSheyang\tValid\tL6\t33.650000\t120.066670\t1976-01-01T00:00:00.000\n\t\tFell\tPoint\t23534\t3679.7\tShikarpur\tValid\tL6\t25.850000\t87.577500\t1921-01-01T00:00:00.000\n\t\tFell\tPoint\t23582\t3900\tShuangyang\tValid\tH5\t43.500000\t125.666670\t1971-01-01T00:00:00.000\n\t\tFell\tPoint\t23583\t5000\tShupiyan\tValid\tH6\t33.716670\t74.833330\t1912-01-01T00:00:00.000\n\t\tFell\tPoint\t23584\t3200\tShytal\tValid\tL6\t24.333330\t90.166670\t1863-01-01T00:00:00.000\n\t\tFell\tPoint\t23586\t3700\tSiena\tValid\tLL5\t43.116670\t11.600000\t1794-01-01T00:00:00.000\n\t\tFell\tPoint\t23593\t23000000\tSikhote-Alin\tValid\tIron, IIAB\t46.160000\t134.653330\t1947-01-01T00:00:00.000\n\t\tFell\tPoint\t23594\t1710\tSilao\tValid\tH5\t20.933330\t-101.383330\t1995-01-01T00:00:00.000\n\t\tFell\tPoint\t55584\t0.15\tSilistra\tValid\tAchondrite-ung\t44.116670\t27.266670\t1917-01-01T00:00:00.000\n\t\tFell\tPoint\t23603\t1222\tSimmern\tValid\tH5\t49.983330\t7.533330\t1920-01-01T00:00:00.000\n\t\tFell\tPoint\t23606\t1455\tSinai\tValid\tL6\t30.900000\t32.483330\t1916-01-01T00:00:00.000\n\t\tFell\tPoint\t23611\t8400\tSindhri\tValid\tH5\t26.216670\t69.550000\t1901-01-01T00:00:00.000\n\t\tFell\tPoint\t23613\t2000\tSinnai\tValid\tH6\t39.300000\t9.200000\t1956-01-01T00:00:00.000\n19\t2351\tFell\tPoint\t23614\t4100\tSioux County\tValid\tEucrite-mmict\t42.583330\t-103.666670\t1933-01-01T00:00:00.000\n\t\tFell\tPoint\t23616\t1600\tSitathali\tValid\tH5\t20.916670\t82.583330\t1875-01-01T00:00:00.000\n\t\tFell\tPoint\t23617\t40000\tSivas\tValid\tH6\t39.824670\t36.135830\t1989-01-01T00:00:00.000\n\t\tFell\tPoint\t23619\t630\tSixiangkou\tValid\tL5\t32.433330\t119.866670\t1989-01-01T00:00:00.000\n\t\tFell\tPoint\t23621\t850\tSki\tValid\tL6\t59.733330\t10.866670\t1848-01-01T00:00:00.000\n\t\tFell\tPoint\t23626\t1708\tSlavetic\tValid\tH5\t45.683330\t15.600000\t1868-01-01T00:00:00.000\n\t\tFell\tPoint\t23645\t2750\tSlobodka\tValid\tL4\t55.000000\t35.000000\t1818-01-01T00:00:00.000\n\t\tFell\tPoint\t23660\t72.900000000000006\tSoheria\tValid\tOC\t27.133330\t84.066670\t1960-01-01T00:00:00.000\n\t\tFell\tPoint\t23661\t80000\tSoko-Banja\tValid\tLL4\t43.666670\t21.866670\t1877-01-01T00:00:00.000\n\t\tFell\tPoint\t23663\t54\tSologne\tValid\tH5\t47.366670\t1.733330\t1860-01-01T00:00:00.000\n\t\tFell\tPoint\t53829\t1066\tSołtmany\tValid\tL6\t54.008830\t22.005000\t2011-01-01T00:00:00.000\n\t\tFell\tPoint\t23667\t17100\tSone\tValid\tH5\t35.166670\t135.333330\t1866-01-01T00:00:00.000\n\t\tFell\tPoint\t23668\t36900\tSongyuan\tValid\tL6\t45.250000\t125.000000\t1993-01-01T00:00:00.000\n\t\tFell\tPoint\t23670\t958\tSopot\tValid\tOC\t44.416670\t23.500000\t1927-01-01T00:00:00.000\n\t\tFell\tPoint\t23671\t2050\tSoroti\tValid\tIron, ungrouped\t1.700000\t33.633330\t1945-01-01T00:00:00.000\n\t\tFell\tPoint\t23081\t360\tSt. Caprais-de-Quinsac\tValid\tL6\t44.750000\t0.050000\t1883-01-01T00:00:00.000\n\t\tFell\tPoint\t23082\t5500\tSt. Christophe-la-Chartreuse\tValid\tL6\t46.950000\t-1.500000\t1841-01-01T00:00:00.000\n\t\tFell\tPoint\t23083\t700\tSt. Denis Westrem\tValid\tL6\t51.050000\t3.750000\t1855-01-01T00:00:00.000\n\t\tFell\tPoint\t23087\t4000\tSt. Germain-du-Pinel\tValid\tH6\t48.016670\t-1.150000\t1890-01-01T00:00:00.000\n18\t2223\tFell\tPoint\t23089\t1000\tSt. Louis\tValid\tH4\t38.700000\t-90.233330\t1950-01-01T00:00:00.000\n\t\tFell\tPoint\t23090\t13780\tSt. Mark's\tValid\tEH5\t-32.016670\t27.416670\t1903-01-01T00:00:00.000\n45\t424\tFell\tPoint\t23091\t24.3\tSt. Mary's County\tValid\tLL3.3\t38.166670\t-76.383330\t1919-01-01T00:00:00.000\n\t\tFell\tPoint\t23092\t8300\tSt. Mesmin\tValid\tLL6\t48.450000\t3.933330\t1866-01-01T00:00:00.000\n\t\tFell\tPoint\t23093\t17000\tSt. Michel\tValid\tL6\t61.650000\t27.200000\t1910-01-01T00:00:00.000\n\t\tFell\tPoint\t23097\t134.30000000000001\tSt.-Chinian\tValid\tL6\t43.433330\t2.950000\t1959-01-01T00:00:00.000\n\t\tFell\tPoint\t23712\t34000\tStälldalen\tValid\tH5\t59.933330\t14.950000\t1876-01-01T00:00:00.000\n\t\tFell\tPoint\t23713\t52000\tStannern\tValid\tEucrite-mmict\t49.283330\t15.566670\t1808-01-01T00:00:00.000\n\t\tFell\tPoint\t23717\t1500\tStavropol\tValid\tL6\t45.050000\t41.983330\t1857-01-01T00:00:00.000\n\t\tFell\tPoint\t23099\t4960\tSte. Marguerite\tValid\tH4\t50.766670\t3.000000\t1962-01-01T00:00:00.000\n\t\tFell\tPoint\t23724\t325000\tSterlitamak\tValid\tIron, IIIAB\t53.666670\t55.983330\t1990-01-01T00:00:00.000\n\t\tFell\tPoint\t23726\t\tStolzenau\tValid\tStone-uncl\t52.533330\t9.050000\t1647-01-01T00:00:00.000\n24\t1040\tFell\tPoint\t23728\t50\tStratford\tValid\tL6\t41.200000\t-73.133330\t1974-01-01T00:00:00.000\n\t\tFell\tPoint\t23729\t13400\tStrathmore\tValid\tL6\t56.583330\t-3.250000\t1917-01-01T00:00:00.000\n\t\tFell\tPoint\t23732\t10400\tStretchleigh\tValid\tStone-uncl\t50.383330\t-3.950000\t1623-01-01T00:00:00.000\n\t\tFell\tPoint\t23733\t25400\tSt-Robert\tValid\tH5\t45.968610\t-72.978060\t1994-01-01T00:00:00.000\n15\t955\tFell\tPoint\t23736\t3500\tSuccess\tValid\tL6\t36.483330\t-90.666670\t1924-01-01T00:00:00.000\n\t\tFell\tPoint\t23737\t815.3\tSuchy Dul\tValid\tL6\t50.538060\t16.263330\t1969-01-01T00:00:00.000\n\t\tFell\tPoint\t23738\t260000\tSuizhou\tValid\tL6\t31.616670\t113.466670\t1986-01-01T00:00:00.000\n\t\tFell\tPoint\t48951\t110000\tSulagiri\tValid\tLL6\t12.666670\t78.033330\t2008-01-01T00:00:00.000\n\t\tFell\tPoint\t23741\t1710.5\tSultanpur\tValid\tL/LL6\t25.933330\t84.283330\t1916-01-01T00:00:00.000\n\t\tFell\tPoint\t23745\t637\tSungach\tValid\tH5\t44.866670\t133.166670\t1935-01-01T00:00:00.000\n\t\tFell\tPoint\t23760\t7235\tSupuhee\tValid\tH6\t26.716670\t84.216670\t1865-01-01T00:00:00.000\n8\t1187\tFell\tPoint\t55529\t992.5\tSutter's Mill\tValid\tC\t38.803890\t-120.908060\t2012-01-01T00:00:00.000\n29\t1637\tFell\tPoint\t23773\t5560\tSylacauga\tValid\tH4\t33.188360\t-86.294500\t1954-01-01T00:00:00.000\n\t\tFell\tPoint\t23776\t7540\tTabor\tValid\tH5\t49.400000\t14.650000\t1753-01-01T00:00:00.000\n\t\tFell\tPoint\t23778\t9000\tTadjera\tValid\tL5\t36.183330\t5.416670\t1867-01-01T00:00:00.000\n\t\tFell\tPoint\t23782\t10000\tTagish Lake\tValid\tC2-ung\t59.704440\t-134.201390\t2000-01-01T00:00:00.000\n\t\tFell\tPoint\t23784\t1000\tTahara\tValid\tH4/5\t34.720000\t137.305000\t1991-01-01T00:00:00.000\n\t\tFell\tPoint\t23789\t720\tTakenouchi\tValid\tH5\t35.383330\t134.900000\t1880-01-01T00:00:00.000\n\t\tFell\t\t23791\t1421\tTalampaya\tValid\tEucrite-cm\t\t\t1995-01-01T00:00:00.000\n\t\tFell\tPoint\t23795\t10500\tTambakwatu\tValid\tL6\t-7.750000\t112.766670\t1975-01-01T00:00:00.000\n\t\tFell\tPoint\t48691\t100000\tTamdakht\tValid\tH5\t31.163330\t-7.015000\t2008-01-01T00:00:00.000\n\t\tFell\tPoint\t23801\t905\tTané\tValid\tL5\t35.433330\t136.233330\t1918-01-01T00:00:00.000\n\t\tFell\tPoint\t23873\t3850\tTaonan\tValid\tL5\t45.400000\t122.900000\t1965-01-01T00:00:00.000\n\t\tFell\tPoint\t23884\t12000\tTatahouine\tValid\tDiogenite\t32.950000\t10.416670\t1931-01-01T00:00:00.000\n\t\tFell\tPoint\t23885\t2500\tTathlith\tValid\tL6\t19.383330\t43.733330\t1967-01-01T00:00:00.000\n\t\tFell\tPoint\t23887\t6000\tTauk\tValid\tL6\t35.133330\t44.450000\t1929-01-01T00:00:00.000\n\t\tFell\tPoint\t23888\t21000\tTauti\tValid\tL6\t46.716670\t23.500000\t1937-01-01T00:00:00.000\n\t\tFell\tPoint\t23897\t160000\tTenham\tValid\tL6\t-25.733330\t142.950000\t1879-01-01T00:00:00.000\n\t\tFell\tPoint\t23898\t28500\tTennasilm\tValid\tL4\t58.033330\t26.950000\t1872-01-01T00:00:00.000\n\t\tFell\tPoint\t23908\t342\tThal\tValid\tH6\t33.400000\t70.600000\t1950-01-01T00:00:00.000\n\t\tFell\tPoint\t54493\t14200\tThika\tValid\tL6\t-1.002780\t37.150280\t2011-01-01T00:00:00.000\n\t\tFell\tPoint\t23976\t45300\tThuathe\tValid\tH4/5\t-29.333330\t27.583330\t2002-01-01T00:00:00.000\n\t\tFell\tPoint\t23984\t2232\tTianzhang\tValid\tH5\t32.946670\t118.990000\t1986-01-01T00:00:00.000\n\t\tFell\tPoint\t23989\t28000\tTieschitz\tValid\tH/L3.6\t49.600000\t17.116670\t1878-01-01T00:00:00.000\n34\t1762\tFell\tPoint\t23998\t74800\tTilden\tValid\tL6\t38.200000\t-89.683330\t1927-01-01T00:00:00.000\n\t\tFell\tPoint\t23999\t3000\tTillaberi\tValid\tL6\t14.250000\t1.533330\t1970-01-01T00:00:00.000\n\t\tFell\tPoint\t24004\t65500\tTimochin\tValid\tH5\t54.500000\t35.200000\t1807-01-01T00:00:00.000\n\t\tFell\tPoint\t24009\t230\tTirupati\tValid\tH6\t13.633330\t79.416670\t1934-01-01T00:00:00.000\n\t\tFell\tPoint\t54823\t7000\tTissint\tValid\tMartian (shergottite)\t29.481950\t-7.611230\t2011-01-01T00:00:00.000\n\t\tFell\tPoint\t24011\t20000\tTjabe\tValid\tH6\t-7.083330\t111.533330\t1869-01-01T00:00:00.000\n\t\tFell\tPoint\t24012\t16500\tTjerebon\tValid\tL5\t-6.666670\t106.583330\t1922-01-01T00:00:00.000\n\t\tFell\tPoint\t24019\t600\tTomakovka\tValid\tLL6\t47.850000\t34.766670\t1905-01-01T00:00:00.000\n"
  },
  {
    "path": "tests/golden/hide-uniform.tsv",
    "content": "OrderDate\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016-01-06\tJones\tPencil\t95\t1.99\t189.05\n2016-01-23\tKivell\tBinder\t50\t19.99\t999.50\n2016-02-09\tJardine\tPencil\t36\t4.99\t179.64\n2016-02-26\tGill\tPen\t27\t19.99\t539.73\n2016-03-15\tSorvino\tPencil\t56\t2.99\t167.44\n2016-04-01\tJones\tBinder\t60\t4.99\t299.40\n2016-04-18\tAndrews\tPencil\t75\t1.99\t149.25\n2016-05-05\tJardine\tPencil\t90\t4.99\t449.10\n2016-05-22\tThompson\tPencil\t32\t1.99\t63.68\n2016-06-08\tJones\tBinder\t60\t8.99\t539.40\n2016-06-25\tMorgan\tPencil\t90\t4.99\t449.10\n2016-07-12\tHoward\tBinder\t29\t1.99\t57.71\n2016-07-29\tParent\tBinder\t81\t19.99\t1619.19\n2016-08-15\tJones\tPencil\t35\t4.99\t174.65\n2016-09-01\tSmith\tDesk\t2\t125.00\t250.00\n2016-09-18\tJones\tPen Set\t16\t15.99\t255.84\n2016-10-05\tMorgan\tBinder\t28\t8.99\t251.72\n2016-10-22\tJones\tPen\t64\t8.99\t575.36\n2016-11-08\tParent\tPen\t15\t19.99\t299.85\n2016-11-25\tKivell\tPen Set\t96\t4.99\t479.04\n2016-12-12\tSmith\tPencil\t67\t1.29\t86.43\n2016-12-29\tParent\tPen Set\t74\t15.99\t1183.26\n2017-01-15\tGill\tBinder\t46\t8.99\t413.54\n2017-02-01\tSmith\tBinder\t87\t15.00\t1305.00\n2017-02-18\tJones\tBinder\t4\t4.99\t19.96\n2017-03-07\tSorvino\tBinder\t7\t19.99\t139.93\n2017-03-24\tJardine\tPen Set\t50\t4.99\t249.50\n2017-04-10\tAndrews\tPencil\t66\t1.99\t131.34\n2017-04-27\tHoward\tPen\t96\t4.99\t479.04\n2017-05-14\tGill\tPencil\t53\t1.29\t68.37\n2017-05-31\tGill\tBinder\t80\t8.99\t719.20\n2017-06-17\tKivell\tDesk\t5\t125.00\t625.00\n2017-07-04\tJones\tPen Set\t62\t4.99\t309.38\n2017-07-21\tMorgan\tPen Set\t55\t12.49\t686.95\n2017-08-07\tKivell\tPen Set\t42\t23.95\t1005.90\n2017-08-24\tSorvino\tDesk\t3\t275.00\t825.00\n2017-09-10\tGill\tPencil\t7\t1.29\t9.03\n2017-09-27\tSorvino\tPen\t76\t1.99\t151.24\n2017-10-14\tThompson\tBinder\t57\t19.99\t1139.43\n2017-10-31\tAndrews\tPencil\t14\t1.29\t18.06\n2017-11-17\tJardine\tBinder\t11\t4.99\t54.89\n2017-12-04\tJardine\tBinder\t94\t19.99\t1879.06\n2017-12-21\tAndrews\tBinder\t28\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/histogram.tsv",
    "content": "Quantity\tcount\tpercent\n2.00 - 30.40\t26\t92.86\n30.40 - 58.80\t1\t3.57\n58.80 - 87.20\t0\t0.00\n87.20 - 115.60\t0\t0.00\n115.60 - 144.00\t1\t3.57\n"
  },
  {
    "path": "tests/golden/import-python.tsv",
    "content": "OrderDate\tmath.pi\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016-01-06\t3.141592653589793\tEast\tJones\tPencil\t95\t1.99\t189.05\n2016-01-23\t3.141592653589793\tCentral\tKivell\tBinder\t50\t19.99\t999.50\n2016-02-09\t3.141592653589793\tCentral\tJardine\tPencil\t36\t4.99\t179.64\n2016-02-26\t3.141592653589793\tCentral\tGill\tPen\t27\t19.99\t539.73\n2016-03-15\t3.141592653589793\tWest\tSorvino\tPencil\t56\t2.99\t167.44\n2016-04-01\t3.141592653589793\tEast\tJones\tBinder\t60\t4.99\t299.40\n2016-04-18\t3.141592653589793\tCentral\tAndrews\tPencil\t75\t1.99\t149.25\n2016-05-05\t3.141592653589793\tCentral\tJardine\tPencil\t90\t4.99\t449.10\n2016-05-22\t3.141592653589793\tWest\tThompson\tPencil\t32\t1.99\t63.68\n2016-06-08\t3.141592653589793\tEast\tJones\tBinder\t60\t8.99\t539.40\n2016-06-25\t3.141592653589793\tCentral\tMorgan\tPencil\t90\t4.99\t449.10\n2016-07-12\t3.141592653589793\tEast\tHoward\tBinder\t29\t1.99\t57.71\n2016-07-29\t3.141592653589793\tEast\tParent\tBinder\t81\t19.99\t1619.19\n2016-08-15\t3.141592653589793\tEast\tJones\tPencil\t35\t4.99\t174.65\n2016-09-01\t3.141592653589793\tCentral\tSmith\tDesk\t2\t125.00\t250.00\n2016-09-18\t3.141592653589793\tEast\tJones\tPen Set\t16\t15.99\t255.84\n2016-10-05\t3.141592653589793\tCentral\tMorgan\tBinder\t28\t8.99\t251.72\n2016-10-22\t3.141592653589793\tEast\tJones\tPen\t64\t8.99\t575.36\n2016-11-08\t3.141592653589793\tEast\tParent\tPen\t15\t19.99\t299.85\n2016-11-25\t3.141592653589793\tCentral\tKivell\tPen Set\t96\t4.99\t479.04\n2016-12-12\t3.141592653589793\tCentral\tSmith\tPencil\t67\t1.29\t86.43\n2016-12-29\t3.141592653589793\tEast\tParent\tPen Set\t74\t15.99\t1183.26\n2017-01-15\t3.141592653589793\tCentral\tGill\tBinder\t46\t8.99\t413.54\n2017-02-01\t3.141592653589793\tCentral\tSmith\tBinder\t87\t15.00\t1305.00\n2017-02-18\t3.141592653589793\tEast\tJones\tBinder\t4\t4.99\t19.96\n2017-03-07\t3.141592653589793\tWest\tSorvino\tBinder\t7\t19.99\t139.93\n2017-03-24\t3.141592653589793\tCentral\tJardine\tPen Set\t50\t4.99\t249.50\n2017-04-10\t3.141592653589793\tCentral\tAndrews\tPencil\t66\t1.99\t131.34\n2017-04-27\t3.141592653589793\tEast\tHoward\tPen\t96\t4.99\t479.04\n2017-05-14\t3.141592653589793\tCentral\tGill\tPencil\t53\t1.29\t68.37\n2017-05-31\t3.141592653589793\tCentral\tGill\tBinder\t80\t8.99\t719.20\n2017-06-17\t3.141592653589793\tCentral\tKivell\tDesk\t5\t125.00\t625.00\n2017-07-04\t3.141592653589793\tEast\tJones\tPen Set\t62\t4.99\t309.38\n2017-07-21\t3.141592653589793\tCentral\tMorgan\tPen Set\t55\t12.49\t686.95\n2017-08-07\t3.141592653589793\tCentral\tKivell\tPen Set\t42\t23.95\t1005.90\n2017-08-24\t3.141592653589793\tWest\tSorvino\tDesk\t3\t275.00\t825.00\n2017-09-10\t3.141592653589793\tCentral\tGill\tPencil\t7\t1.29\t9.03\n2017-09-27\t3.141592653589793\tWest\tSorvino\tPen\t76\t1.99\t151.24\n2017-10-14\t3.141592653589793\tWest\tThompson\tBinder\t57\t19.99\t1139.43\n2017-10-31\t3.141592653589793\tCentral\tAndrews\tPencil\t14\t1.29\t18.06\n2017-11-17\t3.141592653589793\tCentral\tJardine\tBinder\t11\t4.99\t54.89\n2017-12-04\t3.141592653589793\tCentral\tJardine\tBinder\t94\t19.99\t1879.06\n2017-12-21\t3.141592653589793\tCentral\tAndrews\tBinder\t28\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/inner-join.tsv",
    "content": "Key\tC\tD\tA\tB\n2\ta2\tb2\tc1\td1\n2\ta2\tb2\te1\tf1\n"
  },
  {
    "path": "tests/golden/invalid_unicode_sqlite.tsv",
    "content": "contents\ntest test   (\n"
  },
  {
    "path": "tests/golden/issue1308.tsv",
    "content": "1.1\t1.2\t1.3\n1.1\t2.2\t2.3\n1.1\t3.2\t3.3\n"
  },
  {
    "path": "tests/golden/issue1346.tsv",
    "content": "Name\tWidget\nWeight\t5kg\nColor\tRed\n"
  },
  {
    "path": "tests/golden/issue1377.tsv",
    "content": "A\tcustomer name\tsales rep\tsku\tcategory\tquantity\tunit price\text price\tdate\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t19\t88.49\t1681.31\t2015-11-17 05:58:34\n680916\tMueller and Sons\tLoring Predovic\tFI-01804\tShirt\t3\t78.07\t234.21\t2016-02-13 04:04:11\n530925\tPurdy and Sons\tTeagan O'Keefe\tEO-54210\tShirt\t19\t30.21\t573.99\t2015-08-11 12:44:38\n"
  },
  {
    "path": "tests/golden/issue1377b.tsv",
    "content": "A\tcustomer name\tsales rep\tsku\tcategory\tquantity\tunit price\text price\tdate\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t19\t88.49\t1681.31\t2015-11-17 05:58:34\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t19\t88.49\t1681.31\t2015-11-17 05:58:34\n680916\tMueller and Sons\tLoring Predovic\tFI-01804\tShirt\t3\t78.07\t234.21\t2016-02-13 04:04:11\n530925\tPurdy and Sons\tTeagan O'Keefe\tEO-54210\tShirt\t19\t30.21\t573.99\t2015-08-11 12:44:38\n680916\tMueller and Sons\tLoring Predovic\tFI-01804\tShirt\t3\t78.07\t234.21\t2016-02-13 04:04:11\n530925\tPurdy and Sons\tTeagan O'Keefe\tEO-54210\tShirt\t19\t30.21\t573.99\t2015-08-11 12:44:38\n"
  },
  {
    "path": "tests/golden/issue2015.tsv",
    "content": "id\tname\tcolor\n1\tandy\tyellow\n2,003\tbandy\torange\n"
  },
  {
    "path": "tests/golden/issue2190.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016-04-18\tCentral\tAndrews\tPencil\t75\t1.99\t149.25\n2017-04-10\tCentral\tAndrews\tPencil\t66\t1.99\t131.34\n2017-10-31\tCentral\tAndrews\tPencil\t14\t1.29\t18.06\n2017-12-21\tCentral\tAndrews\tBinder\t28\t4.99\t139.72\n2017-05-14\tCentral\tGill\tPencil\t53\t1.29\t68.37\n2017-09-10\tCentral\tGill\tPencil\t7\t1.29\t9.03\n2016-02-26\tCentral\tGill\tPen\t27\t19.99\t539.73\n2017-01-15\tCentral\tGill\tBinder\t46\t8.99\t413.54\n2017-05-31\tCentral\tGill\tBinder\t80\t8.99\t719.20\n2016-02-09\tCentral\tJardine\tPencil\t36\t4.99\t179.64\n2016-05-05\tCentral\tJardine\tPencil\t90\t4.99\t449.10\n2017-03-24\tCentral\tJardine\tPen Set\t50\t4.99\t249.50\n2017-11-17\tCentral\tJardine\tBinder\t11\t4.99\t54.89\n2017-12-04\tCentral\tJardine\tBinder\t94\t19.99\t1879.06\n2016-11-25\tCentral\tKivell\tPen Set\t96\t4.99\t479.04\n2017-08-07\tCentral\tKivell\tPen Set\t42\t23.95\t1005.90\n2017-06-17\tCentral\tKivell\tDesk\t5\t125.00\t625.00\n2016-01-23\tCentral\tKivell\tBinder\t50\t19.99\t999.50\n2016-06-25\tCentral\tMorgan\tPencil\t90\t4.99\t449.10\n2017-07-21\tCentral\tMorgan\tPen Set\t55\t12.49\t686.95\n2016-10-05\tCentral\tMorgan\tBinder\t28\t8.99\t251.72\n2016-12-12\tCentral\tSmith\tPencil\t67\t1.29\t86.43\n2016-09-01\tCentral\tSmith\tDesk\t2\t125.00\t250.00\n2017-02-01\tCentral\tSmith\tBinder\t87\t15.00\t1305.00\n2017-04-27\tEast\tHoward\tPen\t96\t4.99\t479.04\n2016-07-12\tEast\tHoward\tBinder\t29\t1.99\t57.71\n2016-01-06\tEast\tJones\tPencil\t95\t1.99\t189.05\n2016-08-15\tEast\tJones\tPencil\t35\t4.99\t174.65\n2016-09-18\tEast\tJones\tPen Set\t16\t15.99\t255.84\n2017-07-04\tEast\tJones\tPen Set\t62\t4.99\t309.38\n2016-10-22\tEast\tJones\tPen\t64\t8.99\t575.36\n2016-04-01\tEast\tJones\tBinder\t60\t4.99\t299.40\n2016-06-08\tEast\tJones\tBinder\t60\t8.99\t539.40\n2017-02-18\tEast\tJones\tBinder\t4\t4.99\t19.96\n2016-12-29\tEast\tParent\tPen Set\t74\t15.99\t1183.26\n2016-11-08\tEast\tParent\tPen\t15\t19.99\t299.85\n2016-07-29\tEast\tParent\tBinder\t81\t19.99\t1619.19\n2016-03-15\tWest\tSorvino\tPencil\t56\t2.99\t167.44\n2017-09-27\tWest\tSorvino\tPen\t76\t1.99\t151.24\n2017-08-24\tWest\tSorvino\tDesk\t3\t275.00\t825.00\n2017-03-07\tWest\tSorvino\tBinder\t7\t19.99\t139.93\n2016-05-22\tWest\tThompson\tPencil\t32\t1.99\t63.68\n2017-10-14\tWest\tThompson\tBinder\t57\t19.99\t1139.43\n"
  },
  {
    "path": "tests/golden/issue2227.tsv",
    "content": "url\turl_link0\n1\thttps://google.com]\n2\thttps://example.com\n"
  },
  {
    "path": "tests/golden/issue2316.tsv",
    "content": "text\nline one\nline two\nline three\n"
  },
  {
    "path": "tests/golden/issue2476.csv",
    "content": "A,None\r\n,\r\n"
  },
  {
    "path": "tests/golden/issue2524-curcol.tsv",
    "content": "Date\tCustomer\tSKU\tItem\tQuantity\tcurcol*2\tUnit\tPaid\n7/3/2018 1:47p\tRobert Armstrong\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t16\t32\t$12.95\t$51.8\n7/3/2018 3:32p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t4\t8\t$4.22\t$4.22\n7/5/2018 4:15p\tDouglas \"Dougie\" Powers\tFOOD121\tFood, Adult Cat 3.5 oz\t4\t8\t$4.22\t$4.22\n7/6/2018 12:15p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t48\t96\t$1.29\t157¥\n7/10/2018 10:28a\tDavid Attenborough\tNSCT201\tFood, Salamander\t120\t240\t$.05\t$1.5\n7/10/2018 5:23p\tSusan Ashworth\tCAT060\tCat, Korat (Felis catus)\t4\t8\t$720.42\t$720.42\n7/10/2018 5:23p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t4\t8\t$14.94\t$14.94\n7/13/2018 10:26a\tWil Wheaton\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t4\t8\t$39.95\t$39.95\n7/13/2018 3:49p\tRobert Armstrong\tFOOD216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t16\t32\t$12.95\t$51.8\n7/17/2018 9:01a\tRobert Armstrong\tFOOD217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t16\t32\t$12.95\t$51.8\n7/17/2018 11:30a\tHelen Halestorm\tLAGO342\tRabbit (Oryctolagus cuniculus)\t8\t16\t$32.94\t$65.88\n7/18/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t24\t48\t$1.29\t157¥\n7/19/2018 10:28a\tRubeus Hagrid\tFOOD170\tFood, Dog - 5kg\t20\t40\t$44.95\t$224.75\n7/20/2018 2:13p\tJon Arbuckle\tFOOD167\tFood, Premium Wet Cat - 3.5 oz\t200\t400\t$3.95\t$197.5\n7/23/2018 1:41p\tRobert Armstrong\tFOOD215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t16\t32\t$12.95\t$51.8\n7/23/2018 4:23p\tDouglas \"Dougie\" Powers\tTOY235\tLaser Pointer\t4\t8\t$16.12\t$16.12\n7/24/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t24\t$1.29\t157¥\n7/26/2018 4:39p\tDouglas \"Dougie\" Powers\tFOOD420\tFood, Shark - 10 kg\t4\t8\t$15.70\t$15.7\n7/27/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t24\t$1.29\t157¥\n7/30/2018 12:17p\t桜 高橋 (Sakura Takahashi)\tRETURN\tFood, Senior Wet Cat - 3 oz\t4\t8\t$1.29\t157¥\n7/31/2018 5:42p\tRubeus Hagrid\tCAT060\tFood, Dragon - 50kg\t20\t40\t$720.42\t$3602.1\n8/1/2018 2:44p\tDavid Attenborough\tFOOD360\tFood, Rhinocerous - 50kg\t16\t32\t$5.72\t$22.88\n8/2/2018 5:12p\tSusan Ashworth\tCAT110\tCat, Maine Coon (Felix catus)\t4\t8\t$1,309.68\t$1309.68\n8/2/2018 5:12p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t12\t24\t$14.94\t$44.82\n8/6/2018 10:21a\tRobert Armstrong\tFOOD212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t16\t32\t$12.95\t$51.8\n8/7/2018 4:12p\tJuan Johnson\tREPT082\tKingsnake, California (Lampropeltis getula)\t4\t8\t$89.95\t$89.95\n8/7/2018 4:12p\tJuan Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t4\t8\t$1.49\t$1.49\n8/10/2018 4:31p\tRobert Armstrong\tFOOD211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t16\t32\t$12.95\t$51.8\n8/13/2018 2:07p\tMonica Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t4\t8\t$1.49\t$1.49\n8/13/2018 2:08p\tMaría Fernández\tFOOD146\tForti Diet Prohealth Mouse/Rat 3lbs\t8\t16\t$2.00\t$4.0\n8/15/2018 11:57a\tMr. Praline\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t4\t8\t$2300.00\t-$2300.0\n8/15/2018 3:48p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t8\t16\t$4.22\t$8.44\n8/16/2018 11:50a\tHelen Halestorm\tRETURN\tRabbit (Oryctolagus cuniculus)\t24\t48\t$0\t$0.0\n8/16/2018 4:00p\tKyle Kennedy\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t4\t8\t$2,495.99\t$2495.99\n8/16/2018 5:15p\tMichael Smith\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t4\t8\t29.95\t$31.85\n8/17/2018 9:26a\tRubeus Hagrid\tNSCT201\tFood, Spider\t20\t40\t$.05\t$0.25\n8/20/2018 9:36a\tKyle Kennedy\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t4\t8\t$1,247.99\t-$1247.99\n8/20/2018 1:47p\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tGoat, American Pygmy (Capra hircus)\t4\t8\t₪499\t$160.51\n8/20/2018 3:31p\tMonica Johnson\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t120\t240\t$.05\t$1.5\n8/20/2018 5:12p\tDavid Attenborough\tNSCT084\tFood, Pangolin\t120\t240\t$.17\t$5.10\n8/21/2018 12:13p\tRobert Armstrong\tFOOD214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t16\t32\t$12.95\t$51.8\n8/22/2018 9:38a\tDavid Attenborough\tBIRD160\tFood, Quoll\t4\t8\t29.95\t$29.95\n8/22/2018 2:13p\tJon Arbuckle\tFOOD170\tFood, Adult Dog - 5kg\t4\t8\t$44.95\t$44.95\n8/22/2018 5:49p\tמרוסיה ניסנהולץ\tSFTY052\tFire Extinguisher, kitchen-rated\t4\t8\t$61.70\t$61.70\n8/24/2018 11:42a\tRobert Armstrong\tFOOD218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t16\t32\t$12.95\t$51.8\n8/27/2018 3:05p\tMonica Johnson\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t4\t8\t$1.99\t$1.99\n8/28/2018 5:32p\tSusan Ashworth\tCAT020\tCat, Scottish Fold (Felis catus)\t4\t8\t$1,964.53\t$1964.53\n8/28/2018 5:32p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t8\t16\t$14.94\t$29.88\n8/29/2018 10:07a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t16\t32\t$12.95\t$51.8\n8/31/2018 12:00a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t576\t1152\t$12.95\t$1864.8\n8/31/2018 5:57p\tJuan Johnson\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t4\t8\t$99.95\t$99.95\n"
  },
  {
    "path": "tests/golden/issue350.tsv",
    "content": "season\tepisode\tepisode\trating\tvotes\n1\t0\t0\t7\t1415\n1\t1\t1\t8\t3441\n1\t2\t2\t8\t2973\n1\t3\t3\t7\t2994\n"
  },
  {
    "path": "tests/golden/issue655.tsv",
    "content": "Date\tCustomer\tSKU\tItem\tQuantity\tUnit\tPaid\n7/3/2018 1:47p\tFood, Kitten 3kg\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t4\t$12.95\t$51.8\n7/3/2018 3:32p\tFood, Kitten 3kg\tFOOD121\tFood, Adult Cat - 3.5 oz\t1\t$4.22\t$4.22\n7/5/2018 4:15p\tFood, Kitten 3kg\tFOOD121\tFood, Adult Cat 3.5 oz\t1\t$4.22\t$4.22\n7/6/2018 12:15p\tFood, Kitten 3kg\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t$1.29\t157¥\n7/10/2018 10:28a\tFood, Kitten 3kg\tNSCT201\tFood, Salamander\t30\t$.05\t$1.5\n7/10/2018 5:23p\tFood, Kitten 3kg\tCAT060\tCat, Korat (Felis catus)\t1\t$720.42\t$720.42\n7/10/2018 5:23p\tFood, Kitten 3kg\tFOOD130\tFood, Kitten 3kg\t1\t$14.94\t$14.94\n7/13/2018 10:26a\tFood, Kitten 3kg\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t1\t$39.95\t$39.95\n7/13/2018 3:49p\tFood, Kitten 3kg\tFOOD216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 9:01a\tFood, Kitten 3kg\tFOOD217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 11:30a\tFood, Kitten 3kg\tLAGO342\tRabbit (Oryctolagus cuniculus)\t2\t$32.94\t$65.88\n7/18/2018 12:16p\tFood, Kitten 3kg\tFOOD122\tFood, Senior Wet Cat - 3 oz\t6\t$1.29\t157¥\n7/19/2018 10:28a\tFood, Kitten 3kg\tFOOD170\tFood, Dog - 5kg\t5\t$44.95\t$224.75\n7/20/2018 2:13p\tFood, Kitten 3kg\tFOOD167\tFood, Premium Wet Cat - 3.5 oz\t50\t$3.95\t$197.5\n7/23/2018 1:41p\tFood, Kitten 3kg\tFOOD215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/23/2018 4:23p\tFood, Kitten 3kg\tTOY235\tLaser Pointer\t1\t$16.12\t$16.12\n7/24/2018 12:16p\tFood, Kitten 3kg\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/26/2018 4:39p\tFood, Kitten 3kg\tFOOD420\tFood, Shark - 10 kg\t1\t$15.70\t$15.7\n7/27/2018 12:16p\tFood, Kitten 3kg\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/30/2018 12:17p\tFood, Kitten 3kg\tRETURN\tFood, Senior Wet Cat - 3 oz\t1\t$1.29\t157¥\n7/31/2018 5:42p\tFood, Kitten 3kg\tCAT060\tFood, Dragon - 50kg\t5\t$720.42\t$3602.1\n8/1/2018 2:44p\tFood, Kitten 3kg\tFOOD360\tFood, Rhinocerous - 50kg\t4\t$5.72\t$22.88\n8/2/2018 5:12p\tFood, Kitten 3kg\tCAT110\tCat, Maine Coon (Felix catus)\t1\t$1,309.68\t$1309.68\n8/2/2018 5:12p\tFood, Kitten 3kg\tFOOD130\tFood, Kitten 3kg\t3\t$14.94\t$44.82\n8/6/2018 10:21a\tFood, Kitten 3kg\tFOOD212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t4\t$12.95\t$51.8\n8/7/2018 4:12p\tFood, Kitten 3kg\tREPT082\tKingsnake, California (Lampropeltis getula)\t1\t$89.95\t$89.95\n8/7/2018 4:12p\tFood, Kitten 3kg\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/10/2018 4:31p\tFood, Kitten 3kg\tFOOD211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t4\t$12.95\t$51.8\n8/13/2018 2:07p\tFood, Kitten 3kg\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/13/2018 2:08p\tFood, Kitten 3kg\tFOOD146\tForti Diet Prohealth Mouse/Rat 3lbs\t2\t$2.00\t$4.0\n8/15/2018 11:57a\tFood, Kitten 3kg\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t1\t$2300.00\t-$2300.0\n8/15/2018 3:48p\tFood, Kitten 3kg\tFOOD121\tFood, Adult Cat - 3.5 oz\t2\t$4.22\t$8.44\n8/16/2018 11:50a\tFood, Kitten 3kg\tRETURN\tRabbit (Oryctolagus cuniculus)\t6\t$0\t$0.0\n8/16/2018 4:00p\tFood, Kitten 3kg\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$2,495.99\t$2495.99\n8/16/2018 5:15p\tFood, Kitten 3kg\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t1\t29.95\t$31.85\n8/17/2018 9:26a\tFood, Kitten 3kg\tNSCT201\tFood, Spider\t5\t$.05\t$0.25\n8/20/2018 9:36a\tFood, Kitten 3kg\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$1,247.99\t-$1247.99\n8/20/2018 1:47p\tFood, Kitten 3kg\tGOAT224\tGoat, American Pygmy (Capra hircus)\t1\t₪499\t$160.51\n8/20/2018 3:31p\tFood, Kitten 3kg\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t30\t$.05\t$1.5\n8/20/2018 5:12p\tFood, Kitten 3kg\tNSCT084\tFood, Pangolin\t30\t$.17\t$5.10\n8/21/2018 12:13p\tFood, Kitten 3kg\tFOOD214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/22/2018 9:38a\tFood, Kitten 3kg\tBIRD160\tFood, Quoll\t1\t29.95\t$29.95\n8/22/2018 2:13p\tFood, Kitten 3kg\tFOOD170\tFood, Adult Dog - 5kg\t1\t$44.95\t$44.95\n8/22/2018 5:49p\tFood, Kitten 3kg\tSFTY052\tFire Extinguisher, kitchen-rated\t1\t$61.70\t$61.70\n8/24/2018 11:42a\tFood, Kitten 3kg\tFOOD218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/27/2018 3:05p\tFood, Kitten 3kg\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t1\t$1.99\t$1.99\n8/28/2018 5:32p\tFood, Kitten 3kg\tCAT020\tCat, Scottish Fold (Felis catus)\t1\t$1,964.53\t$1964.53\n8/28/2018 5:32p\tFood, Kitten 3kg\tFOOD130\tFood, Kitten 3kg\t2\t$14.94\t$29.88\n8/29/2018 10:07a\tFood, Kitten 3kg\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t4\t$12.95\t$51.8\n8/31/2018 12:00a\tFood, Kitten 3kg\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t144\t$12.95\t$1864.8\n8/31/2018 5:57p\tFood, Kitten 3kg\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t1\t$99.95\t$99.95\n"
  },
  {
    "path": "tests/golden/issue733.tsv",
    "content": "Date\tCustomer\tSKU\tItem\tQuantity\tUnit\tPaid\n2018-07-03\tRobert Armstrong\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t4\t$12.95\t$51.8\n2018-07-03\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t1\t$4.22\t$4.22\n2018-07-05\tDouglas \"Dougie\" Powers\tFOOD121\tFood, Adult Cat 3.5 oz\t1\t$4.22\t$4.22\n2018-07-06\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t$1.29\t157¥\n2018-07-10\tDavid Attenborough\tNSCT201\tFood, Salamander\t30\t$.05\t$1.5\n2018-07-10\tSusan Ashworth\tCAT060\tCat, Korat (Felis catus)\t1\t$720.42\t$720.42\n2018-07-10\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t1\t$14.94\t$14.94\n2018-07-13\tWil Wheaton\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t1\t$39.95\t$39.95\n2018-07-13\tRobert Armstrong\tFOOD216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t4\t$12.95\t$51.8\n2018-07-17\tRobert Armstrong\tFOOD217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t4\t$12.95\t$51.8\n2018-07-17\tHelen Halestorm\tLAGO342\tRabbit (Oryctolagus cuniculus)\t2\t$32.94\t$65.88\n2018-07-18\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t6\t$1.29\t157¥\n2018-07-19\tRubeus Hagrid\tFOOD170\tFood, Dog - 5kg\t5\t$44.95\t$224.75\n2018-07-20\tJon Arbuckle\tFOOD167\tFood, Premium Wet Cat - 3.5 oz\t50\t$3.95\t$197.5\n2018-07-23\tRobert Armstrong\tFOOD215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t4\t$12.95\t$51.8\n2018-07-23\tDouglas \"Dougie\" Powers\tTOY235\tLaser Pointer\t1\t$16.12\t$16.12\n2018-07-24\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n2018-07-26\tDouglas \"Dougie\" Powers\tFOOD420\tFood, Shark - 10 kg\t1\t$15.70\t$15.7\n2018-07-27\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n2018-07-30\t桜 高橋 (Sakura Takahashi)\tRETURN\tFood, Senior Wet Cat - 3 oz\t1\t$1.29\t157¥\n2018-07-31\tRubeus Hagrid\tCAT060\tFood, Dragon - 50kg\t5\t$720.42\t$3602.1\n2018-08-01\tDavid Attenborough\tFOOD360\tFood, Rhinocerous - 50kg\t4\t$5.72\t$22.88\n2018-08-02\tSusan Ashworth\tCAT110\tCat, Maine Coon (Felix catus)\t1\t$1,309.68\t$1309.68\n2018-08-02\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t3\t$14.94\t$44.82\n2018-08-06\tRobert Armstrong\tFOOD212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t4\t$12.95\t$51.8\n2018-08-07\tJuan Johnson\tREPT082\tKingsnake, California (Lampropeltis getula)\t1\t$89.95\t$89.95\n2018-08-07\tJuan Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n2018-08-10\tRobert Armstrong\tFOOD211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t4\t$12.95\t$51.8\n2018-08-13\tMonica Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n2018-08-13\tMaría Fernández\tFOOD146\tForti Diet Prohealth Mouse/Rat 3lbs\t2\t$2.00\t$4.0\n2018-08-15\tMr. Praline\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t1\t$2300.00\t-$2300.0\n2018-08-15\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t2\t$4.22\t$8.44\n2018-08-16\tHelen Halestorm\tRETURN\tRabbit (Oryctolagus cuniculus)\t6\t$0\t$0.0\n2018-08-16\tKyle Kennedy\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$2,495.99\t$2495.99\n2018-08-16\tMichael Smith\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t1\t29.95\t$31.85\n2018-08-17\tRubeus Hagrid\tNSCT201\tFood, Spider\t5\t$.05\t$0.25\n2018-08-20\tKyle Kennedy\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$1,247.99\t-$1247.99\n2018-08-20\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tGoat, American Pygmy (Capra hircus)\t1\t₪499\t$160.51\n2018-08-20\tMonica Johnson\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t30\t$.05\t$1.5\n2018-08-20\tDavid Attenborough\tNSCT084\tFood, Pangolin\t30\t$.17\t$5.10\n2018-08-21\tRobert Armstrong\tFOOD214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t4\t$12.95\t$51.8\n2018-08-22\tDavid Attenborough\tBIRD160\tFood, Quoll\t1\t29.95\t$29.95\n2018-08-22\tJon Arbuckle\tFOOD170\tFood, Adult Dog - 5kg\t1\t$44.95\t$44.95\n2018-08-22\tמרוסיה ניסנהולץ\tSFTY052\tFire Extinguisher, kitchen-rated\t1\t$61.70\t$61.70\n2018-08-24\tRobert Armstrong\tFOOD218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t4\t$12.95\t$51.8\n2018-08-27\tMonica Johnson\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t1\t$1.99\t$1.99\n2018-08-28\tSusan Ashworth\tCAT020\tCat, Scottish Fold (Felis catus)\t1\t$1,964.53\t$1964.53\n2018-08-28\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t2\t$14.94\t$29.88\n2018-08-29\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t4\t$12.95\t$51.8\n2018-08-31\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t144\t$12.95\t$1864.8\n2018-08-31\tJuan Johnson\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t1\t$99.95\t$99.95\n"
  },
  {
    "path": "tests/golden/issue964-inner-join.tsv",
    "content": "domicilioCom\tsesso\tdomicilioProv\tcomune\n082053\tM\tPA\tPalermo\n082053\tM\tPA\tPalermo\n082070\tM\tPA\tTermini Imerese\n082014\tM\tPA\tCaccamo\n"
  },
  {
    "path": "tests/golden/join-cols-single-sheet.tsv",
    "content": "OrderDate\tRegion\tRep\tRegion+Rep\tItem\tUnits\tUnit_Cost\tTotal\n2016-01-06\tEast\tJones\tEast Jones\tPencil\t95\t1.99\t189.05\n2016-01-23\tCentral\tKivell\tCentral Kivell\tBinder\t50\t19.99\t999.50\n2016-02-09\tCentral\tJardine\tCentral Jardine\tPencil\t36\t4.99\t179.64\n2016-02-26\tCentral\tGill\tCentral Gill\tPen\t27\t19.99\t539.73\n2016-03-15\tWest\tSorvino\tWest Sorvino\tPencil\t56\t2.99\t167.44\n2016-04-01\tEast\tJones\tEast Jones\tBinder\t60\t4.99\t299.40\n2016-04-18\tCentral\tAndrews\tCentral Andrews\tPencil\t75\t1.99\t149.25\n2016-05-05\tCentral\tJardine\tCentral Jardine\tPencil\t90\t4.99\t449.10\n2016-05-22\tWest\tThompson\tWest Thompson\tPencil\t32\t1.99\t63.68\n2016-06-08\tEast\tJones\tEast Jones\tBinder\t60\t8.99\t539.40\n2016-06-25\tCentral\tMorgan\tCentral Morgan\tPencil\t90\t4.99\t449.10\n2016-07-12\tEast\tHoward\tEast Howard\tBinder\t29\t1.99\t57.71\n2016-07-29\tEast\tParent\tEast Parent\tBinder\t81\t19.99\t1619.19\n2016-08-15\tEast\tJones\tEast Jones\tPencil\t35\t4.99\t174.65\n2016-09-01\tCentral\tSmith\tCentral Smith\tDesk\t2\t125.00\t250.00\n2016-09-18\tEast\tJones\tEast Jones\tPen Set\t16\t15.99\t255.84\n2016-10-05\tCentral\tMorgan\tCentral Morgan\tBinder\t28\t8.99\t251.72\n2016-10-22\tEast\tJones\tEast Jones\tPen\t64\t8.99\t575.36\n2016-11-08\tEast\tParent\tEast Parent\tPen\t15\t19.99\t299.85\n2016-11-25\tCentral\tKivell\tCentral Kivell\tPen Set\t96\t4.99\t479.04\n2016-12-12\tCentral\tSmith\tCentral Smith\tPencil\t67\t1.29\t86.43\n2016-12-29\tEast\tParent\tEast Parent\tPen Set\t74\t15.99\t1183.26\n2017-01-15\tCentral\tGill\tCentral Gill\tBinder\t46\t8.99\t413.54\n2017-02-01\tCentral\tSmith\tCentral Smith\tBinder\t87\t15.00\t1305.00\n2017-02-18\tEast\tJones\tEast Jones\tBinder\t4\t4.99\t19.96\n2017-03-07\tWest\tSorvino\tWest Sorvino\tBinder\t7\t19.99\t139.93\n2017-03-24\tCentral\tJardine\tCentral Jardine\tPen Set\t50\t4.99\t249.50\n2017-04-10\tCentral\tAndrews\tCentral Andrews\tPencil\t66\t1.99\t131.34\n2017-04-27\tEast\tHoward\tEast Howard\tPen\t96\t4.99\t479.04\n2017-05-14\tCentral\tGill\tCentral Gill\tPencil\t53\t1.29\t68.37\n2017-05-31\tCentral\tGill\tCentral Gill\tBinder\t80\t8.99\t719.20\n2017-06-17\tCentral\tKivell\tCentral Kivell\tDesk\t5\t125.00\t625.00\n2017-07-04\tEast\tJones\tEast Jones\tPen Set\t62\t4.99\t309.38\n2017-07-21\tCentral\tMorgan\tCentral Morgan\tPen Set\t55\t12.49\t686.95\n2017-08-07\tCentral\tKivell\tCentral Kivell\tPen Set\t42\t23.95\t1005.90\n2017-08-24\tWest\tSorvino\tWest Sorvino\tDesk\t3\t275.00\t825.00\n2017-09-10\tCentral\tGill\tCentral Gill\tPencil\t7\t1.29\t9.03\n2017-09-27\tWest\tSorvino\tWest Sorvino\tPen\t76\t1.99\t151.24\n2017-10-14\tWest\tThompson\tWest Thompson\tBinder\t57\t19.99\t1139.43\n2017-10-31\tCentral\tAndrews\tCentral Andrews\tPencil\t14\t1.29\t18.06\n2017-11-17\tCentral\tJardine\tCentral Jardine\tBinder\t11\t4.99\t54.89\n2017-12-04\tCentral\tJardine\tCentral Jardine\tBinder\t94\t19.99\t1879.06\n2017-12-21\tCentral\tAndrews\tCentral Andrews\tBinder\t28\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/join-concat.tsv",
    "content": "Date\tDelilah\tSKU\tItem\tQuantity\tUnit\tPaid\n7/3/2018 1:47p\tRobert Armstrong\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t4\t$12.95\t$51.8\n7/3/2018 3:32p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t1\t$4.22\t$4.22\n7/5/2018 4:15p\tDouglas \"Dougie\" Powers\tFOOD121\tFood, Adult Cat 3.5 oz\t1\t$4.22\t$4.22\n7/6/2018 12:15p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t$1.29\t157¥\n7/10/2018 10:28a\tDavid Attenborough\tNSCT201\tFood, Salamander\t30\t$.05\t$1.5\n7/10/2018 5:23p\tSusan Ashworth\tCAT060\tCat, Korat (Felis catus)\t1\t$720.42\t$720.42\n7/10/2018 5:23p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t1\t$14.94\t$14.94\n7/13/2018 10:26a\tWil Wheaton\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t1\t$39.95\t$39.95\n7/13/2018 3:49p\tRobert Armstrong\tFOOD216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 9:01a\tRobert Armstrong\tFOOD217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 11:30a\tHelen Halestorm\tLAGO342\tRabbit (Oryctolagus cuniculus)\t2\t$32.94\t$65.88\n7/18/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t6\t$1.29\t157¥\n7/19/2018 10:28a\tRubeus Hagrid\tFOOD170\tFood, Dog - 5kg\t5\t$44.95\t$224.75\n7/20/2018 2:13p\tJon Arbuckle\tFOOD167\tFood, Premium Wet Cat - 3.5 oz\t50\t$3.95\t$197.5\n7/23/2018 1:41p\tRobert Armstrong\tFOOD215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/23/2018 4:23p\tDouglas \"Dougie\" Powers\tTOY235\tLaser Pointer\t1\t$16.12\t$16.12\n7/24/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/26/2018 4:39p\tDouglas \"Dougie\" Powers\tFOOD420\tFood, Shark - 10 kg\t1\t$15.70\t$15.7\n7/27/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/30/2018 12:17p\t桜 高橋 (Sakura Takahashi)\tRETURN\tFood, Senior Wet Cat - 3 oz\t1\t$1.29\t157¥\n7/31/2018 5:42p\tRubeus Hagrid\tCAT060\tFood, Dragon - 50kg\t5\t$720.42\t$3602.1\n8/1/2018 2:44p\tDavid Attenborough\tFOOD360\tFood, Rhinocerous - 50kg\t4\t$5.72\t$22.88\n8/2/2018 5:12p\tSusan Ashworth\tCAT110\tCat, Maine Coon (Felix catus)\t1\t$1,309.68\t$1309.68\n8/2/2018 5:12p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t3\t$14.94\t$44.82\n8/6/2018 10:21a\tRobert Armstrong\tFOOD212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t4\t$12.95\t$51.8\n8/7/2018 4:12p\tJuan Johnson\tREPT082\tKingsnake, California (Lampropeltis getula)\t1\t$89.95\t$89.95\n8/7/2018 4:12p\tJuan Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/10/2018 4:31p\tRobert Armstrong\tFOOD211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t4\t$12.95\t$51.8\n8/13/2018 2:07p\tMonica Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/13/2018 2:08p\tMaría Fernández\tFOOD146\tForti Diet Prohealth Mouse/Rat 3lbs\t2\t$2.00\t$4.0\n8/15/2018 11:57a\tMr. Praline\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t1\t$2300.00\t-$2300.0\n8/15/2018 3:48p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t2\t$4.22\t$8.44\n8/16/2018 11:50a\tHelen Halestorm\tRETURN\tRabbit (Oryctolagus cuniculus)\t6\t$0\t$0.0\n8/16/2018 4:00p\tKyle Kennedy\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$2,495.99\t$2495.99\n8/16/2018 5:15p\tMichael Smith\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t1\t29.95\t$31.85\n8/17/2018 9:26a\tRubeus Hagrid\tNSCT201\tFood, Spider\t5\t$.05\t$0.25\n8/20/2018 9:36a\tKyle Kennedy\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$1,247.99\t-$1247.99\n8/20/2018 1:47p\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tGoat, American Pygmy (Capra hircus)\t1\t₪499\t$160.51\n8/20/2018 3:31p\tMonica Johnson\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t30\t$.05\t$1.5\n8/20/2018 5:12p\tDavid Attenborough\tNSCT084\tFood, Pangolin\t30\t$.17\t$5.10\n8/21/2018 12:13p\tRobert Armstrong\tFOOD214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/22/2018 9:38a\tDavid Attenborough\tBIRD160\tFood, Quoll\t1\t29.95\t$29.95\n8/22/2018 2:13p\tJon Arbuckle\tFOOD170\tFood, Adult Dog - 5kg\t1\t$44.95\t$44.95\n8/22/2018 5:49p\tמרוסיה ניסנהולץ\tSFTY052\tFire Extinguisher, kitchen-rated\t1\t$61.70\t$61.70\n8/24/2018 11:42a\tRobert Armstrong\tFOOD218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/27/2018 3:05p\tMonica Johnson\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t1\t$1.99\t$1.99\n8/28/2018 5:32p\tSusan Ashworth\tCAT020\tCat, Scottish Fold (Felis catus)\t1\t$1,964.53\t$1964.53\n8/28/2018 5:32p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t2\t$14.94\t$29.88\n8/29/2018 10:07a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t4\t$12.95\t$51.8\n8/31/2018 12:00a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t144\t$12.95\t$1864.8\n8/31/2018 5:57p\tJuan Johnson\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t1\t$99.95\t$99.95\n"
  },
  {
    "path": "tests/golden/join-different-types.tsv",
    "content": "Row\tother\ta\tb\tc\n2\tsome\tthis\tis\tdata\n4\tother\tlook\tat\tthat\n5\tstuff\there\tis\tmore\n"
  },
  {
    "path": "tests/golden/join-extend-mult.tsv",
    "content": "Key\tA\tB\tdata3_E\tdata3_F\tdata2_C\tdata2_D\n1\ta1\tb1\te1\tf1\t\t\n2\tc1\td1\t\t\ta2\tb2\n2\te1\tf1\t\t\ta2\tb2\n"
  },
  {
    "path": "tests/golden/join-merge.tsv",
    "content": "colA\tcolB\tcolC\tcolD\tcolE\tcolF\n1\tnew_B1\tnew_C1\tdb_D1\tdb_E1\t\n2\t\tdb_C2\tdb_D2\tdb_E2\t\n3\tdb_B3\t\tdb_D3\t\t\n4\tdb_B4\tdb_C4\tdb_D4\tdb_E4\t\n5\tdb_B5\tdb_C5\t\tdb_E5\tnew_F5\n6\tnew_B6\tnew_C6\tdb_D6\tnew_E6\tnew_F6\n7\tnew_B7\tnew_C7\tnew_D7\tnew_E7\tnew_F7\n8\tnew_B8\tnew_C8\tnew_D8\tnew_E8\tnew_F8\n9\tnew_B9\tnew_C9\tnew_D9\tnew_E9\tnew_F9\n10\tnew_B10\tnew_C10\tnew_D10\tnew_E10\tnew_F10\n11\tnew_B11\tnew_C11\tnew_D11\tnew_E11\tnew_F11\n"
  },
  {
    "path": "tests/golden/join-non-unique-cols.tsv",
    "content": "Date\tsample_Item\tbenchmark_Item\tUnits\tUnit_Cost\tUnit\tTotal\tSKU\tRep\tRegion\tQuantity\tPaid\tCustomer\n7/3/2018 1:47p\t\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t\t\t$12.95\t\tFOOD213\t\t\t4\t$51.8\tRobert Armstrong\n7/3/2018 3:32p\t\tFood, Adult Cat - 3.5 oz\t\t\t$4.22\t\tFOOD121\t\t\t1\t$4.22\tKyle Kennedy\n7/5/2018 4:15p\t\tFood, Adult Cat 3.5 oz\t\t\t$4.22\t\tFOOD121\t\t\t1\t$4.22\tDouglas \"Dougie\" Powers\n7/6/2018 12:15p\t\tFood, Senior Wet Cat - 3 oz\t\t\t$1.29\t\tFOOD122\t\t\t12\t157¥\t桜 高橋 (Sakura Takahashi)\n7/10/2018 10:28a\t\tFood, Salamander\t\t\t$.05\t\tNSCT201\t\t\t30\t$1.5\tDavid Attenborough\n7/10/2018 5:23p\t\tCat, Korat (Felis catus)\t\t\t$720.42\t\tCAT060\t\t\t1\t$720.42\tSusan Ashworth\n7/10/2018 5:23p\t\tFood, Kitten 3kg\t\t\t$14.94\t\tFOOD130\t\t\t1\t$14.94\tSusan Ashworth\n7/13/2018 10:26a\t\tMonster, Rust (Monstrus gygaxus)\t\t\t$39.95\t\tNSCT523\t\t\t1\t$39.95\tWil Wheaton\n7/13/2018 3:49p\t\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t\t\t$12.95\t\tFOOD216\t\t\t4\t$51.8\tRobert Armstrong\n7/17/2018 9:01a\t\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t\t\t$12.95\t\tFOOD217\t\t\t4\t$51.8\tRobert Armstrong\n7/17/2018 11:30a\t\tRabbit (Oryctolagus cuniculus)\t\t\t$32.94\t\tLAGO342\t\t\t2\t$65.88\tHelen Halestorm\n7/18/2018 12:16p\t\tFood, Senior Wet Cat - 3 oz\t\t\t$1.29\t\tFOOD122\t\t\t6\t157¥\t桜 高橋 (Sakura Takahashi)\n7/19/2018 10:28a\t\tFood, Dog - 5kg\t\t\t$44.95\t\tFOOD170\t\t\t5\t$224.75\tRubeus Hagrid\n7/20/2018 2:13p\t\tFood, Premium Wet Cat - 3.5 oz\t\t\t$3.95\t\tFOOD167\t\t\t50\t$197.5\tJon Arbuckle\n7/23/2018 1:41p\t\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t\t\t$12.95\t\tFOOD215\t\t\t4\t$51.8\tRobert Armstrong\n7/23/2018 4:23p\t\tLaser Pointer\t\t\t$16.12\t\tTOY235\t\t\t1\t$16.12\tDouglas \"Dougie\" Powers\n7/24/2018 12:16p\t\tFood, Senior Wet Cat - 3 oz\t\t\t$1.29\t\tFOOD122\t\t\t3\t157¥\t桜 高橋 (Sakura Takahashi)\n7/26/2018 4:39p\t\tFood, Shark - 10 kg\t\t\t$15.70\t\tFOOD420\t\t\t1\t$15.7\tDouglas \"Dougie\" Powers\n7/27/2018 12:16p\t\tFood, Senior Wet Cat - 3 oz\t\t\t$1.29\t\tFOOD122\t\t\t3\t157¥\t桜 高橋 (Sakura Takahashi)\n7/30/2018 12:17p\t\tFood, Senior Wet Cat - 3 oz\t\t\t$1.29\t\tRETURN\t\t\t1\t157¥\t桜 高橋 (Sakura Takahashi)\n7/31/2018 5:42p\t\tFood, Dragon - 50kg\t\t\t$720.42\t\tCAT060\t\t\t5\t$3602.1\tRubeus Hagrid\n8/1/2018 2:44p\t\tFood, Rhinocerous - 50kg\t\t\t$5.72\t\tFOOD360\t\t\t4\t$22.88\tDavid Attenborough\n8/2/2018 5:12p\t\tCat, Maine Coon (Felix catus)\t\t\t$1,309.68\t\tCAT110\t\t\t1\t$1309.68\tSusan Ashworth\n8/2/2018 5:12p\t\tFood, Kitten 3kg\t\t\t$14.94\t\tFOOD130\t\t\t3\t$44.82\tSusan Ashworth\n8/6/2018 10:21a\t\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t\t\t$12.95\t\tFOOD212\t\t\t4\t$51.8\tRobert Armstrong\n8/7/2018 4:12p\t\tKingsnake, California (Lampropeltis getula)\t\t\t$89.95\t\tREPT082\t\t\t1\t$89.95\tJuan Johnson\n8/7/2018 4:12p\t\tMouse, Pinky (Mus musculus)\t\t\t$1.49\t\tRDNT443\t\t\t1\t$1.49\tJuan Johnson\n8/10/2018 4:31p\t\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t\t\t$12.95\t\tFOOD211\t\t\t4\t$51.8\tRobert Armstrong\n8/13/2018 2:07p\t\tMouse, Pinky (Mus musculus)\t\t\t$1.49\t\tRDNT443\t\t\t1\t$1.49\tMonica Johnson\n8/13/2018 2:08p\t\tForti Diet Prohealth Mouse/Rat 3lbs\t\t\t$2.00\t\tFOOD146\t\t\t2\t$4.0\tMaría Fernández\n8/15/2018 11:57a\t\tParrot, Norwegian Blue (Mopsitta tanta)\t\t\t$2300.00\t\tRETURN\t\t\t1\t-$2300.0\tMr. Praline\n8/15/2018 3:48p\t\tFood, Adult Cat - 3.5 oz\t\t\t$4.22\t\tFOOD121\t\t\t2\t$8.44\tKyle Kennedy\n8/16/2018 11:50a\t\tRabbit (Oryctolagus cuniculus)\t\t\t$0\t\tRETURN\t\t\t6\t$0.0\tHelen Halestorm\n8/16/2018 4:00p\t\tDog, Golden Retriever (Canis lupus familiaris)\t\t\t$2,495.99\t\tDOG010\t\t\t1\t$2495.99\tKyle Kennedy\n8/16/2018 5:15p\t\tParakeet, Blue (Melopsittacus undulatus)\t\t\t29.95\t\tBIRD160\t\t\t1\t$31.85\tMichael Smith\n8/17/2018 9:26a\t\tFood, Spider\t\t\t$.05\t\tNSCT201\t\t\t5\t$0.25\tRubeus Hagrid\n8/20/2018 9:36a\t\tDog, Golden Retriever (Canis lupus familiaris)\t\t\t$1,247.99\t\tRETURN\t\t\t1\t-$1247.99\tKyle Kennedy\n8/20/2018 1:47p\t\tGoat, American Pygmy (Capra hircus)\t\t\t₪499\t\tGOAT224\t\t\t1\t$160.51\tמרוסיה ניסנהולץ אבולעפיה\n8/20/2018 3:31p\t\tCrickets, Adult Live (Gryllus assimilis)\t\t\t$.05\t\tNSCT201\t\t\t30\t$1.5\tMonica Johnson\n8/20/2018 5:12p\t\tFood, Pangolin\t\t\t$.17\t\tNSCT084\t\t\t30\t$5.10\tDavid Attenborough\n8/21/2018 12:13p\t\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t\t\t$12.95\t\tFOOD214\t\t\t4\t$51.8\tRobert Armstrong\n8/22/2018 9:38a\t\tFood, Quoll\t\t\t29.95\t\tBIRD160\t\t\t1\t$29.95\tDavid Attenborough\n8/22/2018 2:13p\t\tFood, Adult Dog - 5kg\t\t\t$44.95\t\tFOOD170\t\t\t1\t$44.95\tJon Arbuckle\n8/22/2018 5:49p\t\tFire Extinguisher, kitchen-rated\t\t\t$61.70\t\tSFTY052\t\t\t1\t$61.70\tמרוסיה ניסנהולץ\n8/24/2018 11:42a\t\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t\t\t$12.95\t\tFOOD218\t\t\t4\t$51.8\tRobert Armstrong\n8/27/2018 3:05p\t\tMealworms, Large (Tenebrio molitor) 100ct\t\t\t$1.99\t\tNSCT443\t\t\t1\t$1.99\tMonica Johnson\n8/28/2018 5:32p\t\tCat, Scottish Fold (Felis catus)\t\t\t$1,964.53\t\tCAT020\t\t\t1\t$1964.53\tSusan Ashworth\n8/28/2018 5:32p\t\tFood, Kitten 3kg\t\t\t$14.94\t\tFOOD130\t\t\t2\t$29.88\tSusan Ashworth\n8/29/2018 10:07a\t\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t\t\t$12.95\t\tFOOD219\t\t\t4\t$51.8\tRobert Armstrong\n8/31/2018 12:00a\t\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t\t\t$12.95\t\tFOOD219\t\t\t144\t$1864.8\tRobert Armstrong\n8/31/2018 5:57p\t\tLizard, Spinytail (Uromastyx ornatus)\t\t\t$99.95\t\tREPT217\t\t\t1\t$99.95\tJuan Johnson\n"
  },
  {
    "path": "tests/golden/listofdictobj.tsv",
    "content": "imag\treal\n0.00\t6.08\n0.00\t50.77\n"
  },
  {
    "path": "tests/golden/load-2d-matrix.tsv",
    "content": "\t\t\n0\t5\t11\n17\t22\t28\n34\t40\t45\n51\t57\t63\n68\t74\t80\n86\t91\t97\n103\t109\t114\n120\t126\t131\n137\t143\t149\n154\t160\t166\n172\t177\t183\n189\t195\t200\n206\t212\t218\n223\t229\t235\n240\t246\t252\n"
  },
  {
    "path": "tests/golden/load-conllu.jsonl",
    "content": "{\"sent_id\": \"dev-s1\", \"token_id\": 1, \"form\": \"\\u305f\\u3060\\u3057\", \"lemma\": \"\\u305f\\u3060\\u3057\", \"upos\": \"CCONJ\", \"xpos\": \"\\u63a5\\u7d9a\\u8a5e\", \"feats\": {}, \"head\": 18, \"deprel\": \"cc\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SEM_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u63a5\\u7d9a\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u4f46\\u3057'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 2, \"form\": \"\\u3001\", \"lemma\": \"\\u3001\", \"upos\": \"PUNCT\", \"xpos\": \"\\u88dc\\u52a9\\u8a18\\u53f7-\\u8aad\\u70b9\", \"feats\": {}, \"head\": 1, \"deprel\": \"punct\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'CONT'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u88dc\\u52a9\\u8a18\\u53f7-\\u8aad\\u70b9'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u3001'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 3, \"form\": \"50\", \"lemma\": \"50\", \"upos\": \"NUM\", \"xpos\": \"\\u540d\\u8a5e-\\u6570\\u8a5e\", \"feats\": {}, \"head\": 5, \"deprel\": \"nummod\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'CONT'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u4e94\\u5341'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 4, \"form\": \"\\u5468\\u5e74\", \"lemma\": \"\\u5468\\u5e74\", \"upos\": \"NOUN\", \"xpos\": \"\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u52a9\\u6570\\u8a5e\\u53ef\\u80fd\", \"feats\": {}, \"head\": 5, \"deprel\": \"compound\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'CONT'}\", \"LUWBILabel\": \"{'I'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u5468\\u5e74'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 5, \"form\": \"\\u30bd\\u30f3\\u30b0\", \"lemma\": \"\\u30bd\\u30f3\\u30b0\", \"upos\": \"NOUN\", \"xpos\": \"\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c\", \"feats\": {}, \"head\": 8, \"deprel\": \"obl\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SEM_HEAD'}\", \"LUWBILabel\": \"{'I'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u30bd\\u30f3\\u30b0'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 6, \"form\": \"\\u306b\", \"lemma\": \"\\u306b\", \"upos\": \"ADP\", \"xpos\": \"\\u52a9\\u8a5e-\\u683c\\u52a9\\u8a5e\", \"feats\": {}, \"head\": 5, \"deprel\": \"case\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SYN_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u8a5e-\\u683c\\u52a9\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u306b'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 7, \"form\": \"\\u5909\\u66f4\", \"lemma\": \"\\u5909\\u66f4\", \"upos\": \"NOUN\", \"xpos\": \"\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u30b5\\u5909\\u53ef\\u80fd\", \"feats\": {}, \"head\": 8, \"deprel\": \"compound\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'CONT'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u5909\\u66f4'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 8, \"form\": \"\\u5f8c\", \"lemma\": \"\\u5f8c\", \"upos\": \"NOUN\", \"xpos\": \"\\u63a5\\u5c3e\\u8f9e-\\u540d\\u8a5e\\u7684-\\u526f\\u8a5e\\u53ef\\u80fd\", \"feats\": {}, \"head\": 18, \"deprel\": \"dislocated\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SEM_HEAD'}\", \"LUWBILabel\": \"{'I'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u5f8c'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 9, \"form\": \"\\u306f\", \"lemma\": \"\\u306f\", \"upos\": \"ADP\", \"xpos\": \"\\u52a9\\u8a5e-\\u4fc2\\u52a9\\u8a5e\", \"feats\": {}, \"head\": 8, \"deprel\": \"case\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SYN_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u8a5e-\\u4fc2\\u52a9\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u306f'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 10, \"form\": \"\\u3001\", \"lemma\": \"\\u3001\", \"upos\": \"PUNCT\", \"xpos\": \"\\u88dc\\u52a9\\u8a18\\u53f7-\\u8aad\\u70b9\", \"feats\": {}, \"head\": 8, \"deprel\": \"punct\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'CONT'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u88dc\\u52a9\\u8a18\\u53f7-\\u8aad\\u70b9'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u3001'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 11, \"form\": \"ED\", \"lemma\": \"ED\", \"upos\": \"NOUN\", \"xpos\": \"\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c\", \"feats\": {}, \"head\": 18, \"deprel\": \"obl\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SEM_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\uff25\\uff24'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 12, \"form\": \"\\u3082\", \"lemma\": \"\\u3082\", \"upos\": \"ADP\", \"xpos\": \"\\u52a9\\u8a5e-\\u4fc2\\u52a9\\u8a5e\", \"feats\": {}, \"head\": 11, \"deprel\": \"case\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SYN_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u8a5e-\\u4fc2\\u52a9\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u3082'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 13, \"form\": \"\\u6b4c\", \"lemma\": \"\\u6b4c\", \"upos\": \"NOUN\", \"xpos\": \"\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c\", \"feats\": {}, \"head\": 14, \"deprel\": \"compound\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'CONT'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u6b4c'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 14, \"form\": \"\\u3064\\u304d\", \"lemma\": \"\\u3064\\u304d\", \"upos\": \"NOUN\", \"xpos\": \"\\u63a5\\u5c3e\\u8f9e-\\u540d\\u8a5e\\u7684-\\u4e00\\u822c\", \"feats\": {}, \"head\": 16, \"deprel\": \"nmod\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SEM_HEAD'}\", \"LUWBILabel\": \"{'I'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u4ed8\\u304d'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 15, \"form\": \"\\u306e\", \"lemma\": \"\\u306e\", \"upos\": \"ADP\", \"xpos\": \"\\u52a9\\u8a5e-\\u683c\\u52a9\\u8a5e\", \"feats\": {}, \"head\": 14, \"deprel\": \"case\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SYN_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u8a5e-\\u683c\\u52a9\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u306e'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 16, \"form\": \"\\u3082\\u306e\", \"lemma\": \"\\u3082\\u306e\", \"upos\": \"NOUN\", \"xpos\": \"\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u30b5\\u5909\\u53ef\\u80fd\", \"feats\": {}, \"head\": 18, \"deprel\": \"nsubj\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SEM_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u7269'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 17, \"form\": \"\\u304c\", \"lemma\": \"\\u304c\", \"upos\": \"ADP\", \"xpos\": \"\\u52a9\\u8a5e-\\u683c\\u52a9\\u8a5e\", \"feats\": {}, \"head\": 16, \"deprel\": \"case\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SYN_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u8a5e-\\u683c\\u52a9\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u304c'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 18, \"form\": \"\\u4f7f\\u308f\", \"lemma\": \"\\u4f7f\\u3046\", \"upos\": \"VERB\", \"xpos\": \"\\u52d5\\u8a5e-\\u4e00\\u822c\", \"feats\": {}, \"head\": 0, \"deprel\": \"root\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'ROOT'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52d5\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u4f7f\\u3046'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 19, \"form\": \"\\u308c\", \"lemma\": \"\\u308c\\u308b\", \"upos\": \"AUX\", \"xpos\": \"\\u52a9\\u52d5\\u8a5e\", \"feats\": {}, \"head\": 18, \"deprel\": \"aux\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'FUNC'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u52d5\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u308c\\u308b'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 20, \"form\": \"\\u305f\", \"lemma\": \"\\u305f\", \"upos\": \"AUX\", \"xpos\": \"\\u52a9\\u52d5\\u8a5e\", \"feats\": {}, \"head\": 18, \"deprel\": \"aux\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SYN_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u52d5\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u305f'}\"}}\n{\"sent_id\": \"dev-s1\", \"token_id\": 21, \"form\": \"\\u3002\", \"lemma\": \"\\u3002\", \"upos\": \"PUNCT\", \"xpos\": \"\\u88dc\\u52a9\\u8a18\\u53f7-\\u53e5\\u70b9\", \"feats\": {}, \"head\": 18, \"deprel\": \"punct\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'CONT'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u88dc\\u52a9\\u8a18\\u53f7-\\u53e5\\u70b9'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u3002'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 1, \"form\": \"\\u79c1\", \"lemma\": \"\\u79c1\", \"upos\": \"PRON\", \"xpos\": \"\\u4ee3\\u540d\\u8a5e\", \"feats\": {}, \"head\": 3, \"deprel\": \"nsubj\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SEM_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u4ee3\\u540d\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u79c1'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 2, \"form\": \"\\u306f\", \"lemma\": \"\\u306f\", \"upos\": \"ADP\", \"xpos\": \"\\u52a9\\u8a5e-\\u4fc2\\u52a9\\u8a5e\", \"feats\": {}, \"head\": 1, \"deprel\": \"case\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SYN_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u8a5e-\\u4fc2\\u52a9\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u306f'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 3, \"form\": \"\\u521d\\u3081\\u3066\", \"lemma\": \"\\u521d\\u3081\\u3066\", \"upos\": \"ADV\", \"xpos\": \"\\u526f\\u8a5e\", \"feats\": {}, \"head\": 17, \"deprel\": \"advcl\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SEM_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u526f\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u521d\\u3081\\u3066'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 4, \"form\": \"\\u3060\\u3063\", \"lemma\": \"\\u3060\", \"upos\": \"AUX\", \"xpos\": \"\\u52a9\\u52d5\\u8a5e\", \"feats\": {}, \"head\": 3, \"deprel\": \"aux\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'FUNC'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u52d5\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u3060'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 5, \"form\": \"\\u305f\", \"lemma\": \"\\u305f\", \"upos\": \"AUX\", \"xpos\": \"\\u52a9\\u52d5\\u8a5e\", \"feats\": {}, \"head\": 3, \"deprel\": \"aux\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'FUNC'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u52d5\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u305f'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 6, \"form\": \"\\u3093\", \"lemma\": \"\\u3093\", \"upos\": \"SCONJ\", \"xpos\": \"\\u52a9\\u8a5e-\\u6e96\\u4f53\\u52a9\\u8a5e\", \"feats\": {}, \"head\": 3, \"deprel\": \"mark\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'FUNC'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u52d5\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u306e'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 7, \"form\": \"\\u3060\", \"lemma\": \"\\u3060\", \"upos\": \"AUX\", \"xpos\": \"\\u52a9\\u52d5\\u8a5e\", \"feats\": {}, \"head\": 3, \"deprel\": \"aux\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'FUNC'}\", \"LUWBILabel\": \"{'I'}\", \"LUWPOS\": \"{'\\u52a9\\u52d5\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u3060'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 8, \"form\": \"\\u3051\\u3069\", \"lemma\": \"\\u3051\\u3069\", \"upos\": \"SCONJ\", \"xpos\": \"\\u52a9\\u8a5e-\\u63a5\\u7d9a\\u52a9\\u8a5e\", \"feats\": {}, \"head\": 3, \"deprel\": \"mark\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SYN_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u8a5e-\\u63a5\\u7d9a\\u52a9\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u3051\\u308c\\u3069'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 9, \"form\": \"\\u601d\\u3063\", \"lemma\": \"\\u601d\\u3046\", \"upos\": \"VERB\", \"xpos\": \"\\u52d5\\u8a5e-\\u4e00\\u822c\", \"feats\": {}, \"head\": 17, \"deprel\": \"advcl\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SEM_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52d5\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u601d\\u3046'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 10, \"form\": \"\\u3066\", \"lemma\": \"\\u3066\", \"upos\": \"SCONJ\", \"xpos\": \"\\u52a9\\u8a5e-\\u63a5\\u7d9a\\u52a9\\u8a5e\", \"feats\": {}, \"head\": 9, \"deprel\": \"mark\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'FUNC'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u52d5\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u3066'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 11, \"form\": \"\\u3044\", \"lemma\": \"\\u3044\\u308b\", \"upos\": \"AUX\", \"xpos\": \"\\u52d5\\u8a5e-\\u975e\\u81ea\\u7acb\\u53ef\\u80fd\", \"feats\": {}, \"head\": 9, \"deprel\": \"aux\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'CONT'}\", \"LUWBILabel\": \"{'I'}\", \"LUWPOS\": \"{'\\u52a9\\u52d5\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u5c45\\u308b'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 12, \"form\": \"\\u305f\", \"lemma\": \"\\u305f\", \"upos\": \"AUX\", \"xpos\": \"\\u52a9\\u52d5\\u8a5e\", \"feats\": {}, \"head\": 9, \"deprel\": \"aux\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'FUNC'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u52d5\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u305f'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 13, \"form\": \"\\u3088\\u308a\", \"lemma\": \"\\u3088\\u308a\", \"upos\": \"ADP\", \"xpos\": \"\\u52a9\\u8a5e-\\u683c\\u52a9\\u8a5e\", \"feats\": {}, \"head\": 9, \"deprel\": \"case\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'FUNC'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u8a5e-\\u683c\\u52a9\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u3088\\u308a'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 14, \"form\": \"\\u3082\", \"lemma\": \"\\u3082\", \"upos\": \"ADP\", \"xpos\": \"\\u52a9\\u8a5e-\\u4fc2\\u52a9\\u8a5e\", \"feats\": {}, \"head\": 9, \"deprel\": \"case\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SYN_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u8a5e-\\u4fc2\\u52a9\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u3082'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 15, \"form\": \"\\u9b5a\", \"lemma\": \"\\u9b5a\", \"upos\": \"NOUN\", \"xpos\": \"\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c\", \"feats\": {}, \"head\": 17, \"deprel\": \"nsubj\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SEM_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u9b5a'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 16, \"form\": \"\\u306f\", \"lemma\": \"\\u306f\", \"upos\": \"ADP\", \"xpos\": \"\\u52a9\\u8a5e-\\u4fc2\\u52a9\\u8a5e\", \"feats\": {}, \"head\": 15, \"deprel\": \"case\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SYN_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u8a5e-\\u4fc2\\u52a9\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u306f'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 17, \"form\": \"\\u65b0\\u9bae\", \"lemma\": \"\\u65b0\\u9bae\", \"upos\": \"ADJ\", \"xpos\": \"\\u5f62\\u72b6\\u8a5e-\\u4e00\\u822c\", \"feats\": {}, \"head\": 0, \"deprel\": \"root\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'ROOT'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u5f62\\u72b6\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u65b0\\u9bae'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 18, \"form\": \"\\u3067\\u3057\", \"lemma\": \"\\u3060\", \"upos\": \"AUX\", \"xpos\": \"\\u52a9\\u52d5\\u8a5e\", \"feats\": {}, \"head\": 17, \"deprel\": \"aux\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'FUNC'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u52d5\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u3067\\u3059'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 19, \"form\": \"\\u305f\", \"lemma\": \"\\u305f\", \"upos\": \"AUX\", \"xpos\": \"\\u52a9\\u52d5\\u8a5e\", \"feats\": {}, \"head\": 17, \"deprel\": \"aux\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SYN_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u52d5\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u305f'}\"}}\n{\"sent_id\": \"dev-s2\", \"token_id\": 20, \"form\": \"\\u3002\", \"lemma\": \"\\u3002\", \"upos\": \"PUNCT\", \"xpos\": \"\\u88dc\\u52a9\\u8a18\\u53f7-\\u53e5\\u70b9\", \"feats\": {}, \"head\": 17, \"deprel\": \"punct\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'CONT'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u88dc\\u52a9\\u8a18\\u53f7-\\u53e5\\u70b9'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u3002'}\"}}\n{\"sent_id\": \"dev-s4\", \"token_id\": 1, \"form\": \"\\u30bb\\u30f3\\u30c8\\u30e9\\u30eb\", \"lemma\": \"\\u30bb\\u30f3\\u30c8\\u30e9\\u30eb\", \"upos\": \"NOUN\", \"xpos\": \"\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c\", \"feats\": {}, \"head\": 5, \"deprel\": \"compound\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'CONT'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u30bb\\u30f3\\u30c8\\u30e9\\u30eb'}\"}}\n{\"sent_id\": \"dev-s4\", \"token_id\": 2, \"form\": \"\\u30fb\", \"lemma\": \"\\u30fb\", \"upos\": \"SYM\", \"xpos\": \"\\u88dc\\u52a9\\u8a18\\u53f7-\\u4e00\\u822c\", \"feats\": {}, \"head\": 5, \"deprel\": \"compound\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'CONT'}\", \"LUWBILabel\": \"{'I'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u30fb'}\"}}\n{\"sent_id\": \"dev-s4\", \"token_id\": 3, \"form\": \"\\u30ea\\u30fc\\u30b0\", \"lemma\": \"\\u30ea\\u30fc\\u30b0\", \"upos\": \"NOUN\", \"xpos\": \"\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c\", \"feats\": {}, \"head\": 5, \"deprel\": \"compound\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'CONT'}\", \"LUWBILabel\": \"{'I'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u30ea\\u30fc\\u30b0'}\"}}\n{\"sent_id\": \"dev-s4\", \"token_id\": 4, \"form\": \"\\u5be9\\u5224\", \"lemma\": \"\\u5be9\\u5224\", \"upos\": \"NOUN\", \"xpos\": \"\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u30b5\\u5909\\u53ef\\u80fd\", \"feats\": {}, \"head\": 5, \"deprel\": \"compound\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'CONT'}\", \"LUWBILabel\": \"{'I'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u5be9\\u5224'}\"}}\n{\"sent_id\": \"dev-s4\", \"token_id\": 5, \"form\": \"\\u54e1\", \"lemma\": \"\\u54e1\", \"upos\": \"NOUN\", \"xpos\": \"\\u63a5\\u5c3e\\u8f9e-\\u540d\\u8a5e\\u7684-\\u4e00\\u822c\", \"feats\": {}, \"head\": 8, \"deprel\": \"nmod\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SEM_HEAD'}\", \"LUWBILabel\": \"{'I'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u54e1'}\"}}\n{\"sent_id\": \"dev-s4\", \"token_id\": 6, \"form\": \"\\u306e\", \"lemma\": \"\\u306e\", \"upos\": \"ADP\", \"xpos\": \"\\u52a9\\u8a5e-\\u683c\\u52a9\\u8a5e\", \"feats\": {}, \"head\": 5, \"deprel\": \"case\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SYN_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u8a5e-\\u683c\\u52a9\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u306e'}\"}}\n{\"sent_id\": \"dev-s4\", \"token_id\": 7, \"form\": \"\\u6c34\\u843d\", \"lemma\": \"\\u6c34\\u843d\", \"upos\": \"PROPN\", \"xpos\": \"\\u540d\\u8a5e-\\u56fa\\u6709\\u540d\\u8a5e-\\u4eba\\u540d-\\u59d3\", \"feats\": {}, \"head\": 8, \"deprel\": \"compound\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'CONT'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u56fa\\u6709\\u540d\\u8a5e-\\u4eba\\u540d-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u30df\\u30ba\\u30aa\\u30c1'}\"}}\n{\"sent_id\": \"dev-s4\", \"token_id\": 8, \"form\": \"\\u670b\\u5927\", \"lemma\": \"\\u670b\\u5927\", \"upos\": \"PROPN\", \"xpos\": \"\\u540d\\u8a5e-\\u56fa\\u6709\\u540d\\u8a5e-\\u4eba\\u540d-\\u540d\", \"feats\": {}, \"head\": 10, \"deprel\": \"nsubj\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SEM_HEAD'}\", \"LUWBILabel\": \"{'I'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u56fa\\u6709\\u540d\\u8a5e-\\u4eba\\u540d-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u30c8\\u30e2\\u30d2\\u30ed'}\"}}\n{\"sent_id\": \"dev-s4\", \"token_id\": 9, \"form\": \"\\u306f\", \"lemma\": \"\\u306f\", \"upos\": \"ADP\", \"xpos\": \"\\u52a9\\u8a5e-\\u4fc2\\u52a9\\u8a5e\", \"feats\": {}, \"head\": 8, \"deprel\": \"case\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'SYN_HEAD'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u52a9\\u8a5e-\\u4fc2\\u52a9\\u8a5e'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u306f'}\"}}\n{\"sent_id\": \"dev-s4\", \"token_id\": 10, \"form\": \"\\u5b9f\\u5144\", \"lemma\": \"\\u5b9f\\u5144\", \"upos\": \"NOUN\", \"xpos\": \"\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c\", \"feats\": {}, \"head\": 0, \"deprel\": \"root\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'ROOT'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u540d\\u8a5e-\\u666e\\u901a\\u540d\\u8a5e-\\u4e00\\u822c'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u5b9f\\u5144'}\"}}\n{\"sent_id\": \"dev-s4\", \"token_id\": 11, \"form\": \"\\u3002\", \"lemma\": \"\\u3002\", \"upos\": \"PUNCT\", \"xpos\": \"\\u88dc\\u52a9\\u8a18\\u53f7-\\u53e5\\u70b9\", \"feats\": {}, \"head\": 10, \"deprel\": \"punct\", \"deps\": {}, \"misc\": {\"BunsetuPositionType\": \"{'CONT'}\", \"LUWBILabel\": \"{'B'}\", \"LUWPOS\": \"{'\\u88dc\\u52a9\\u8a18\\u53f7-\\u53e5\\u70b9'}\", \"SpaceAfter\": \"{'No'}\", \"UniDicLemma\": \"{'\\u3002'}\"}}\n"
  },
  {
    "path": "tests/golden/load-csv.tsv",
    "content": "Year\tAge\tName\tMovie\n1928\t22\tJanet Gaynor\tSeventh Heaven, Street Angel and Sunrise: A Song of Two Humans\n1929\t37\tMary Pickford\tCoquette\n1930\t28\tNorma Shearer\tThe Divorcee\u001f\n1931\t63\tMarie Dressler\tMin and Bill\n1932\t32\tHelen Hayes\tThe Sin of Madelon Claudet\u001f\n1933\t26\tKatharine Hepburn\tMorning Glory\n1934\t31\tClaudette Colbert\tIt Happened One Night\n1935\t27\tBette Davis\tDangerous\n1936\t27\tLuise Rainer\tThe Great Ziegfeld\n1937\t28\tLuise Rainer\tThe Good Earth\n1938\t30\tBette Davis\tJezebel\n1939\t26\tVivien Leigh\tGone with the Wind\n1940\t29\tGinger Rogers\tKitty Foyle\n1941\t24\tJoan Fontaine\tSuspicion\u001f\n1942\t38\tGreer Garson\tMrs. Miniver\n1943\t25\tJennifer Jones\tThe Song of Bernadette\n1944\t29\tIngrid Bergman\tGaslight\n1945\t40\tJoan Crawford\tMildred Pierce\n1946\t30\tOlivia de Havilland\tTo Each His Own\n1947\t35\tLoretta Young\tThe Farmer's Daughter\n1948\t32\tJane Wyman\tJohnny Belinda\n1949\t33\tOlivia de Havilland\tThe Heiress\n1950\t29\tJudy Holliday\tBorn Yesterday\n1951\t38\tVivien Leigh\tA Streetcar Named Desire\n1952\t54\tShirley Booth\tCome Back, Little Sheba\n1953\t24\tAudrey Hepburn\tRoman Holiday\n1954\t25\tGrace Kelly\tThe Country Girl\n1955\t48\tAnna Magnani\tThe Rose Tattoo\n1956\t41\tIngrid Bergman\tAnastasia\n1957\t28\tJoanne Woodward\tThe Three Faces of Eve\n1958\t41\tSusan Hayward\tI Want to Live!\n1959\t39\tSimone Signoret\tRoom at the Top\n1960\t29\tElizabeth Taylor\tBUtterfield 8\n1961\t27\tSophia Loren\tTwo Women\n1962\t31\tAnne Bancroft\tThe Miracle Worker\n1963\t31\tPatricia Neal\tHud\n1964\t29\tJulie Andrews\tMary Poppins\n1965\t25\tJulie Christie\tDarling\n1966\t35\tElizabeth Taylor\tWho's Afraid of Virginia Woolf?\n1967\t60\tKatharine Hepburn\tGuess Who's Coming to Dinner\n1968\t61\tKatharine Hepburn\tThe Lion in Winter\n1969\t26\tBarbra Streisand\tFunny Girl\n1970\t35\tMaggie Smith\tThe Prime of Miss Jean Brodie\n1971\t34\tGlenda Jackson\tWomen in Love\n1972\t34\tJane Fonda\tKlute\n1973\t27\tLiza Minnelli\tCabaret\n1974\t37\tGlenda Jackson\tA Touch of Class\n1975\t42\tEllen Burstyn\tAlice Doesn't Live Here Anymore\u001f\n1976\t41\tLouise Fletcher\tOne Flew Over the Cuckoo's Nest\n1977\t36\tFaye Dunaway\tNetwork\n1978\t32\tDiane Keaton\tAnnie Hall\n1979\t41\tJane Fonda\tComing Home\n1980\t33\tSally Field\tNorma Rae\n1981\t31\tSissy Spacek\tCoal Miner's Daughter\u001f\n1982\t74\tKatharine Hepburn\tOn Golden Pond\n1983\t33\tMeryl Streep\tSophie's Choice\n1984\t49\tShirley MacLaine\tTerms of Endearment\u001f\n1985\t38\tSally Field\tPlaces in the Heart\n1986\t61\tGeraldine Page\tThe Trip to Bountiful\u001f\n1987\t21\tMarlee Matlin\tChildren of a Lesser God\n1988\t41\tCher\tMoonstruck\n1989\t26\tJodie Foster\tThe Accused\n1990\t80\tJessica Tandy\tDriving Miss Daisy\n1991\t42\tKathy Bates\tMisery\n1992\t29\tJodie Foster\tThe Silence of the Lambs\n1993\t33\tEmma Thompson\tHowards End\n1994\t36\tHolly Hunter\tThe Piano\n1995\t45\tJessica Lange\tBlue Sky\n1996\t49\tSusan Sarandon\tDead Man Walking\n1997\t39\tFrances McDormand\tFargo\n1998\t34\tHelen Hunt\tAs Good as It Gets\n1999\t26\tGwyneth Paltrow\tShakespeare in Love\n2000\t25\tHilary Swank\tBoys Don't Cry\n2001\t33\tJulia Roberts\tErin Brockovich\n2002\t35\tHalle Berry\tMonster's Ball\n2003\t35\tNicole Kidman\tThe Hours\n2004\t28\tCharlize Theron\tMonster\n2005\t30\tHilary Swank\tMillion Dollar Baby\n2006\t29\tReese Witherspoon\tWalk the Line\n2007\t61\tHelen Mirren\tThe Queen\n2008\t32\tMarion Cotillard\tLa Vie en rose\n2009\t33\tKate Winslet\tThe Reader\n2010\t45\tSandra Bullock\tThe Blind Side\n2011\t29\tNatalie Portman\tBlack Swan\n2012\t62\tMeryl Streep\tThe Iron Lady\n2013\t22\tJennifer Lawrence\tSilver Linings Playbook\n2014\t44\tCate Blanchett\tBlue Jasmine\n2015\t54\tJulianne Moore\tStill Alice\n2016\t26\tBrie Larson\tRoom\n"
  },
  {
    "path": "tests/golden/load-dir.tsv",
    "content": "directory\tfilename\text\nbin/\tfilter-doc.py\tpy\nbin/\tvd\t\nbin/\tvd2to3.vdx\tvdx\nbin/\tviewtsv.py\tpy\n"
  },
  {
    "path": "tests/golden/load-fec.tsv",
    "content": "key\tvalue\nrecord_type\tHDR\nef_type\tFEC\nfec_version\t8.4\nsoft_name\tCampaign Manager 360\nsoft_ver\t1.0\nreport_id\tFEC-1724438\nreport_number\t6\ncomment\t\n"
  },
  {
    "path": "tests/golden/load-fixed-header0.tsv",
    "content": "\t\t\t\n  \ta  \tb  \tc\n  \td  \t e \t  f\n1 \tggg\thhh\tiiii\n 2\tjjj\tkkk\tllllllll\n"
  },
  {
    "path": "tests/golden/load-fixed-leadingspaces.tsv",
    "content": "\t\t\n  1\taaa\tbbb\n 20\tccc\tddd\n300\teee\tfff\n"
  },
  {
    "path": "tests/golden/load-fixed.tsv",
    "content": "id\tcc\tcountry name\tco\tkeywords\n302672\tAD\tAndorra                                     \tEU\t                                                   \n302618\tAE\tUnited Arab Emirates                        \tAS\tUAE,مطارات في الإمارات العربية المتحدة             \n302619\tAF\tAfghanistan                                 \tAS\t                                                   \n302722\tAG\tAntigua and Barbuda                         \tNA\t                                                   \n302723\tAI\tAnguilla                                    \tNA\t                                                   \n302673\tAL\tAlbania                                     \tEU\t                                                   \n302620\tAM\tArmenia                                     \tAS\t                                                   \n302556\tAO\tAngola                                      \tAF\t                                                   \n302615\tAQ\tAntarctica                                  \tAN\t                                                   \n302789\tAR\tArgentina                                   \tSA\tAeropuertos de Argentina                           \n302763\tAS\tAmerican Samoa                              \tOC\t                                                   \n302674\tAT\tAustria                                     \tEU\tFlughäfen in Österreich                            \n302764\tAU\tAustralia                                   \tOC\t                                                   \n302725\tAW\tAruba                                       \tNA\t                                                   \n302621\tAZ\tAzerbaijan                                  \tAS\t                                                   \n302675\tBA\tBosnia and Herzegovina                      \tEU\t                                                   \n302726\tBB\tBarbados                                    \tNA\t                                                   \n302622\tBD\tBangladesh                                  \tAS\t                                                   \n302676\tBE\tBelgium                                     \tEU\tAéroports de Belgique,Luchthavens van België       \n302557\tBF\tBurkina Faso                                \tAF\t                                                   \n302677\tBG\tBulgaria                                    \tEU\t                                                   \n302623\tBH\tBahrain                                     \tAS\tمطارات البحرين                                     \n302558\tBI\tBurundi                                     \tAF\t                                                   \n302559\tBJ\tBenin                                       \tAF\t                                                   \n302760\tBL\tSaint Barthélemy                            \tNA\t                                                   \n302727\tBM\tBermuda                                     \tNA\t                                                   \n302624\tBN\tBrunei                                      \tAS\t                                                   \n302790\tBO\tBolivia                                     \tSA\tAeropuertos de Bolivia                             \n302724\tBQ\tCaribbean Netherlands                       \tNA\t                                                   \n302791\tBR\tBrazil                                      \tSA\tBrasil, Brasilian                                  \n302728\tBS\tBahamas                                     \tNA\t                                                   \n302625\tBT\tBhutan                                      \tAS\t                                                   \n302560\tBW\tBotswana                                    \tAF\t                                                   \n302678\tBY\tBelarus                                     \tEU\tBelarussian, Беларусь                              \n302729\tBZ\tBelize                                      \tNA\t                                                   \n302730\tCA\tCanada                                      \tNA\t                                                   \n302626\tCC\tCocos (Keeling) Islands                     \tAS\t                                                   \n302561\tCD\tCongo (Kinshasa)                            \tAF\t                                                   \n302562\tCF\tCentral African Republic                    \tAF\t                                                   \n302563\tCG\tCongo (Brazzaville)                         \tAF\t                                                   \n302679\tCH\tSwitzerland                                 \tEU\tAéroports de la Suisse,Flughäfen der Schweiz       \n302564\tCI\tCôte d'Ivoire                               \tAF\tIvory Coast                                        \n302765\tCK\tCook Islands                                \tOC\t                                                   \n302792\tCL\tChile                                       \tSA\tAeropuertos de Chile                               \n302565\tCM\tCameroon                                    \tAF\t                                                   \n302627\tCN\tChina                                       \tAS\t中国的机场                                              \n302793\tCO\tColombia                                    \tSA\tAeropuertos de Colombia                            \n302731\tCR\tCosta Rica                                  \tNA\tAeropuertos de Costa Rica                          \n302732\tCU\tCuba                                        \tNA\tAeropuertos de Cuba                                \n302566\tCV\tCape Verde                                  \tAF\t                                                   \n302762\tCW\tCuraçao                                     \tNA\t                                                   \n302628\tCX\tChristmas Island                            \tAS\t                                                   \n302629\tCY\tCyprus                                      \tAS\t                                                   \n302680\tCZ\tCzechia                                     \tEU\tLetiště České republiky                            \n302681\tDE\tGermany                                     \tEU\tFlughäfen in Deutschland                           \n302567\tDJ\tDjibouti                                    \tAF\t                                                   \n302682\tDK\tDenmark                                     \tEU\tLufthavnene i Danmark                              \n302733\tDM\tDominica                                    \tNA\t                                                   \n302734\tDO\tDominican Republic                          \tNA\t                                                   \n302568\tDZ\tAlgeria                                     \tAF\tمطارات الجزائر                                     \n302794\tEC\tEcuador                                     \tSA\tAeropuertos de Ecuador                             \n302683\tEE\tEstonia                                     \tEU\t                                                   \n302569\tEG\tEgypt                                       \tAF\tمطارات مصر                                         \n302570\tEH\tWestern Sahara                              \tAF\tSahrawian, مطارات الصحراء الغربية                  \n302571\tER\tEritrea                                     \tAF\t                                                   \n302684\tES\tSpain                                       \tEU\tAeropuertos de España                              \n302572\tET\tEthiopia                                    \tAF\t                                                   \n302685\tFI\tFinland                                     \tEU\tLentokentät, Suomen                                \n302766\tFJ\tFiji                                        \tOC\t                                                   \n302795\tFK\tFalkland Islands                            \tSA\t                                                   \n302767\tFM\tMicronesia                                  \tOC\t                                                   \n302686\tFO\tFaroe Islands                               \tEU\t                                                   \n302687\tFR\tFrance                                      \tEU\tAéroports de France                                \n302573\tGA\tGabon                                       \tAF\t                                                   \n302688\tGB\tUnited Kingdom                              \tEU\tGreat Britain                                      \n302735\tGD\tGrenada                                     \tNA\t                                                   \n302630\tGE\tGeorgia                                     \tAS\t                                                   \n302796\tGF\tFrench Guiana                               \tSA\tFrench Guyana                                      \n302689\tGG\tGuernsey                                    \tEU\t                                                   \n302574\tGH\tGhana                                       \tAF\t                                                   \n302690\tGI\tGibraltar                                   \tEU\t                                                   \n302736\tGL\tGreenland                                   \tNA\t                                                   \n302575\tGM\tGambia                                      \tAF\t                                                   \n302576\tGN\tGuinea                                      \tAF\tAéroports de la Guinée                             \n302737\tGP\tGuadeloupe                                  \tNA\t                                                   \n302577\tGQ\tEquatorial Guinea                           \tAF\t                                                   \n302691\tGR\tGreece                                      \tEU\tαεροδρόμια στην Ελλάδα                             \n302616\tGS\tSouth Georgia and the South Sandwich Islands\tAN\t                                                   \n302738\tGT\tGuatemala                                   \tNA\tAeropuertos de Guatemala                           \n302768\tGU\tGuam                                        \tOC\t                                                   \n302578\tGW\tGuinea-Bissau                               \tAF\t                                                   \n302797\tGY\tGuyana                                      \tSA\t                                                   \n302631\tHK\tHong Kong                                   \tAS\t                                                   \n302739\tHN\tHonduras                                    \tNA\tAeropuertos de Honduras                            \n302692\tHR\tCroatia                                     \tEU\t                                                   \n302740\tHT\tHaiti                                       \tNA\tAéroports de Haïti                                 \n302693\tHU\tHungary                                     \tEU\tRepülőterek Magyarország                           \n302632\tID\tIndonesia                                   \tAS\tBandara di Indonesia                               \n302694\tIE\tIreland                                     \tEU\tEire                                               \n302633\tIL\tIsrael                                      \tAS\tשדות התעופה של ישראל                               \n302695\tIM\tIsle of Man                                 \tEU\t                                                   \n302634\tIN\tIndia                                       \tAS\t                                                   \n302635\tIO\tBritish Indian Ocean Territory              \tAS\t                                                   \n302636\tIQ\tIraq                                        \tAS\tمطارات العراق                                      \n302637\tIR\tIran                                        \tAS\tفرودگاه های ایران                                  \n302696\tIS\tIceland                                     \tEU\t                                                   \n302697\tIT\tItaly                                       \tEU\tAeroporti d'Italia                                 \n302698\tJE\tJersey                                      \tEU\t                                                   \n302741\tJM\tJamaica                                     \tNA\t                                                   \n302638\tJO\tJordan                                      \tAS\tمطارات في الأردن                                   \n302639\tJP\tJapan                                       \tAS\tNippon, 日本の空港                                      \n302579\tKE\tKenya                                       \tAF\t                                                   \n302640\tKG\tKyrgyzstan                                  \tAS\t                                                   \n302641\tKH\tCambodia                                    \tAS\t                                                   \n302769\tKI\tKiribati                                    \tOC\t                                                   \n302580\tKM\tComoros                                     \tAF\tجزر القمر                                          \n302742\tKN\tSaint Kitts and Nevis                       \tNA\t                                                   \n302642\tKP\tNorth Korea                                 \tAS\t                                                   \n302643\tKR\tSouth Korea                                 \tAS\t한국의 공항                                             \n302644\tKW\tKuwait                                      \tAS\t                                                   \n302743\tKY\tCayman Islands                              \tNA\t                                                   \n302645\tKZ\tKazakhstan                                  \tAS\tKazakh                                             \n302646\tLA\tLaos                                        \tAS\t                                                   \n302647\tLB\tLebanon                                     \tAS\tالمطارات في لبنان                                  \n302744\tLC\tSaint Lucia                                 \tNA\t                                                   \n302699\tLI\tLiechtenstein                               \tEU\t                                                   \n302648\tLK\tSri Lanka                                   \tAS\t                                                   \n302581\tLR\tLiberia                                     \tAF\t                                                   \n302582\tLS\tLesotho                                     \tAF\t                                                   \n302700\tLT\tLithuania                                   \tEU\t                                                   \n302701\tLU\tLuxembourg                                  \tEU\t                                                   \n302702\tLV\tLatvia                                      \tEU\t                                                   \n302583\tLY\tLibya                                       \tAF\tمطارات في ليبيا                                    \n302584\tMA\tMorocco                                     \tAF\tمطارات المغرب                                      \n302703\tMC\tMonaco                                      \tEU\t                                                   \n302704\tMD\tMoldova                                     \tEU\t                                                   \n302705\tME\tMontenegro                                  \tEU\t                                                   \n302759\tMF\tSaint Martin                                \tNA\t                                                   \n302585\tMG\tMadagascar                                  \tAF\t                                                   \n302770\tMH\tMarshall Islands                            \tOC\t                                                   \n302706\tMK\tMacedonia                                   \tEU\t                                                   \n302586\tML\tMali                                        \tAF\tAéroports du Mali                                  \n302649\tMM\tBurma                                       \tAS\tMyanmar                                            \n302650\tMN\tMongolia                                    \tAS\t                                                   \n302651\tMO\tMacau                                       \tAS\tMacao                                              \n302771\tMP\tNorthern Mariana Islands                    \tOC\t                                                   \n302745\tMQ\tMartinique                                  \tNA\t                                                   \n302587\tMR\tMauritania                                  \tAF\tمطارات موريتانيا                                   \n302746\tMS\tMontserrat                                  \tNA\t                                                   \n302707\tMT\tMalta                                       \tEU\t                                                   \n302588\tMU\tMauritius                                   \tAF\t                                                   \n302652\tMV\tMaldives                                    \tAS\t                                                   \n302589\tMW\tMalawi                                      \tAF\t                                                   \n302747\tMX\tMexico                                      \tNA\tAeropuertos de México                              \n302653\tMY\tMalaysia                                    \tAS\tLapangan Terbang Malaysia                          \n302590\tMZ\tMozambique                                  \tAF\t                                                   \n302591\tNA\tNamibia                                     \tAF\t                                                   \n302772\tNC\tNew Caledonia                               \tOC\t                                                   \n302592\tNE\tNiger                                       \tAF\t                                                   \n302773\tNF\tNorfolk Island                              \tOC\t                                                   \n302593\tNG\tNigeria                                     \tAF\t                                                   \n302748\tNI\tNicaragua                                   \tNA\tAeropuertos de Nicaragua                           \n302708\tNL\tNetherlands                                 \tEU\tHolland,Luchthavens van Nederland                  \n302709\tNO\tNorway                                      \tEU\tFlyplasser i Norge                                 \n302654\tNP\tNepal                                       \tAS\tनेपाल विमानस्थलको                                  \n302774\tNR\tNauru                                       \tOC\t                                                   \n302775\tNU\tNiue                                        \tOC\t                                                   \n302776\tNZ\tNew Zealand                                 \tOC\t                                                   \n302655\tOM\tOman                                        \tAS\tمطارات عمان                                        \n302749\tPA\tPanama                                      \tNA\tAeropuertos de Panamá                              \n302798\tPE\tPerú                                        \tSA\tAeropuertos de Perú                                \n302777\tPF\tFrench Polynesia                            \tOC\t                                                   \n302778\tPG\tPapua New Guinea                            \tOC\t                                                   \n302656\tPH\tPhilippines                                 \tAS\tMga alternatibong byahe mula sa Pilipinas          \n302657\tPK\tPakistan                                    \tAS\tپاکستان کے ہوائی اڈوں                              \n302710\tPL\tPoland                                      \tEU\tLotniska Polski                                    \n302750\tPM\tSaint Pierre and Miquelon                   \tNA\t                                                   \n302779\tPN\tPitcairn                                    \tOC\t                                                   \n302751\tPR\tPuerto Rico                                 \tNA\t                                                   \n302658\tPS\tPalestinian Territory                       \tAS\t                                                   \n302711\tPT\tPortugal                                    \tEU\tAeroportos do Brasil                               \n302780\tPW\tPalau                                       \tOC\t                                                   \n302799\tPY\tParaguay                                    \tSA\tAeropuertos de Paraguay                            \n302659\tQA\tQatar                                       \tAS\tمطارات قطر                                         \n302594\tRE\tRéunion                                     \tAF\tÎle Bourbon, La Réunion                            \n302712\tRO\tRomania                                     \tEU\tAeroporturi din România                            \n302713\tRS\tSerbia                                      \tEU\tSerb                                               \n302714\tRU\tRussia                                      \tEU\tSoviet, Sovietskaya, Sovetskaya, Аэропорты России  \n302595\tRW\tRwanda                                      \tAF\t                                                   \n302660\tSA\tSaudi Arabia                                \tAS\tمطارات المملكة العربية السعودية,المطارات لموسم الحج\n302781\tSB\tSolomon Islands                             \tOC\t                                                   \n302596\tSC\tSeychelles                                  \tAF\t                                                   \n302597\tSD\tSudan                                       \tAF\tمطارات السودان                                     \n302715\tSE\tSweden                                      \tEU\tFlygplatserna i Sverige                            \n302661\tSG\tSingapore                                   \tAS\t                                                   \n302598\tSH\tSaint Helena                                \tAF\t                                                   \n302716\tSI\tSlovenia                                    \tEU\t                                                   \n302717\tSK\tSlovakia                                    \tEU\tletisko Slovenska                                  \n302599\tSL\tSierra Leone                                \tAF\t                                                   \n302718\tSM\tSan Marino                                  \tEU\t                                                   \n302600\tSN\tSenegal                                     \tAF\tAéroports du Sénégal                               \n302601\tSO\tSomalia                                     \tAF\t                                                   \n302800\tSR\tSuriname                                    \tSA\t                                                   \n302614\tSS\tSouth Sudan                                 \tAF\t                                                   \n302602\tST\tSão Tomé and Principe                       \tAF\t                                                   \n302752\tSV\tEl Salvador                                 \tNA\tSalvadorian, Salvadorean                           \n302761\tSX\tSint Maarten                                \tNA\t                                                   \n302662\tSY\tSyria                                       \tAS\tمطارات سوريا                                       \n302603\tSZ\tSwaziland                                   \tAF\t                                                   \n302753\tTC\tTurks and Caicos Islands                    \tNA\t                                                   \n302604\tTD\tChad                                        \tAF\t                                                   \n302617\tTF\tFrench Southern Territories                 \tAN\t                                                   \n302605\tTG\tTogo                                        \tAF\t                                                   \n302663\tTH\tThailand                                    \tAS\tSiam, Siamese                                      \n302664\tTJ\tTajikistan                                  \tAS\tTajik                                              \n302782\tTK\tTokelau                                     \tOC\t                                                   \n302665\tTL\tTimor-Leste                                 \tAS\tEast Timor                                         \n302666\tTM\tTurkmenistan                                \tAS\t                                                   \n302606\tTN\tTunisia                                     \tAF\tمطارات تونس                                        \n302783\tTO\tTonga                                       \tOC\t                                                   \n302667\tTR\tTurkey                                      \tAS\tTürkiye havaalanları                               \n302754\tTT\tTrinidad and Tobago                         \tNA\t                                                   \n302784\tTV\tTuvalu                                      \tOC\t                                                   \n302668\tTW\tTaiwan                                      \tAS\t                                                   \n302607\tTZ\tTanzania                                    \tAF\t                                                   \n302719\tUA\tUkraine                                     \tEU\tАеропорти України                                  \n302608\tUG\tUganda                                      \tAF\t                                                   \n302785\tUM\tUnited States Minor Outlying Islands        \tOC\t                                                   \n302755\tUS\tUnited States                               \tNA\tAmerica                                            \n302801\tUY\tUruguay                                     \tSA\tAeropuertos de Uruguay                             \n302669\tUZ\tUzbekistan                                  \tAS\tUzbek                                              \n302721\tVA\tVatican City                                \tEU\tThe Holy See                                       \n302756\tVC\tSaint Vincent and the Grenadines            \tNA\t                                                   \n302802\tVE\tVenezuela                                   \tSA\tAeropuertos de Venezuela                           \n302757\tVG\tBritish Virgin Islands                      \tNA\t                                                   \n302758\tVI\tU.S. Virgin Islands                         \tNA\t                                                   \n302670\tVN\tVietnam                                     \tAS\tCác sân bay của Việt Nam                           \n302786\tVU\tVanuatu                                     \tOC\t                                                   \n302787\tWF\tWallis and Futuna                           \tOC\t                                                   \n302788\tWS\tSamoa                                       \tOC\t                                                   \n302720\tXK\tKosovo                                      \tEU\tKosova                                             \n302671\tYE\tYemen                                       \tAS\tمطارات اليمن                                       \n302609\tYT\tMayotte                                     \tAF\t                                                   \n302610\tZA\tSouth Africa                                \tAF\t                                                   \n302611\tZM\tZambia                                      \tAF\t                                                   \n302612\tZW\tZimbabwe                                    \tAF\t                                                   \n302613\tZZ\tUnknown or unassigned country               \tAF\t                                                   \n"
  },
  {
    "path": "tests/golden/load-grep-json.grep",
    "content": "{\"file\": \"benchmark.csv\", \"line_no\": 36, \"text\": \"8/16/2018 5:15p,Michael Smith,BIRD160,\\\"Parakeet, Blue (Melopsittacus undulatus)\\\",1,29.95,$31.85\\r\"}\n{\"file\": \"benchmark.jsonl\", \"line_no\": 36, \"text\": \"{\\\"Date\\\": \\\"8/16/2018 5:15p\\\", \\\"Customer\\\": \\\"Michael Smith\\\", \\\"SKU\\\": \\\"BIRD160\\\", \\\"Item\\\": \\\"Parakeet, Blue (Melopsittacus undulatus)\\\", \\\"Quantity\\\": \\\"1\\\", \\\"Unit\\\": \\\"29.95\\\", \\\"Paid\\\": \\\"$31.85\\\"}\"}\n{\"file\": \"benchmark.lsv\", \"line_no\": 266, \"text\": \"Customer: Michael Smith\"}\n{\"file\": \"benchmark.xml\", \"line_no\": 346, \"text\": \"    <Customer>Michael Smith</Customer>\"}\n{\"file\": \"benchmark.yml\", \"line_no\": 239, \"text\": \"- customer: Michael Smith\"}\n{\"file\": \"numeric-cols.tsv\", \"line_no\": 16, \"text\": \"2016-09-01\\tCentral\\tSmith\\tDesk\\t2\\t125.00\\t250.00\"}\n{\"file\": \"numeric-cols.tsv\", \"line_no\": 22, \"text\": \"2016-12-12\\tCentral\\tSmith\\tPencil\\t67\\t1.29\\t86.43\"}\n{\"file\": \"numeric-cols.tsv\", \"line_no\": 25, \"text\": \"2017-02-01\\tCentral\\tSmith\\tBinder\\t87\\t15.00\\t1305.00\"}\n{\"file\": \"sample.tsv\", \"line_no\": 17, \"text\": \"2016-09-01\\tCentral\\tSmith\\tDesk\\t2\\t125.00\\t250.00\"}\n{\"file\": \"sample.tsv\", \"line_no\": 23, \"text\": \"2016-12-12\\tCentral\\tSmith\\tPencil\\t67\\t1.29\\t86.43\"}\n{\"file\": \"sample.tsv\", \"line_no\": 26, \"text\": \"2017-02-01\\tCentral\\tSmith\\tBinder\\t87\\t15.00\\t1305.00\"}\n{\"file\": \"sample.vds\", \"line_no\": 23, \"text\": \"{\\\"OrderDate\\\": \\\"2016-09-01\\\", \\\"Region\\\": \\\"Central\\\", \\\"Rep\\\": \\\"Smith\\\", \\\"Item\\\": \\\"Desk\\\", \\\"Units\\\": \\\"2\\\", \\\"Unit_Cost\\\": \\\"125.00\\\", \\\"Total\\\": \\\"250.00\\\"}\"}\n{\"file\": \"sample.vds\", \"line_no\": 29, \"text\": \"{\\\"OrderDate\\\": \\\"2016-12-12\\\", \\\"Region\\\": \\\"Central\\\", \\\"Rep\\\": \\\"Smith\\\", \\\"Item\\\": \\\"Pencil\\\", \\\"Units\\\": \\\"67\\\", \\\"Unit_Cost\\\": \\\"1.29\\\", \\\"Total\\\": \\\"86.43\\\"}\"}\n{\"file\": \"sample.vds\", \"line_no\": 32, \"text\": \"{\\\"OrderDate\\\": \\\"2017-02-01\\\", \\\"Region\\\": \\\"Central\\\", \\\"Rep\\\": \\\"Smith\\\", \\\"Item\\\": \\\"Binder\\\", \\\"Units\\\": \\\"87\\\", \\\"Unit_Cost\\\": \\\"15.00\\\", \\\"Total\\\": \\\"1305.00\\\"}\"}\n{\"file\": \"sample.vds\", \"line_no\": 94, \"text\": \"{\\\"Date\\\": \\\"2018-08-16 17:15\\\", \\\"Customer\\\": \\\"Michael Smith\\\", \\\"SKU\\\": \\\"BIRD160\\\", \\\"Item\\\": \\\"Parakeet, Blue (Melopsittacus undulatus)\\\", \\\"Quantity\\\": \\\"1\\\", \\\"Unit\\\": \\\"29.95\\\", \\\"Paid\\\": \\\"31.85\\\"}\"}\n{\"file\": \"sunshinelist.html\", \"line_no\": 194, \"text\": \"\\t\\t\\t    \\t\\t\\t<td>Kevin Smith</td>\"}\n"
  },
  {
    "path": "tests/golden/load-grep-standard.grep",
    "content": "{\"file\": \"benchmark.csv\", \"line_no\": 36, \"text\": \"8/16/2018 5:15p,Michael Smith,BIRD160,\\\"Parakeet, Blue (Melopsittacus undulatus)\\\",1,29.95,$31.85\"}\n{\"file\": \"benchmark.jsonl\", \"line_no\": 36, \"text\": \"{\\\"Date\\\": \\\"8/16/2018 5:15p\\\", \\\"Customer\\\": \\\"Michael Smith\\\", \\\"SKU\\\": \\\"BIRD160\\\", \\\"Item\\\": \\\"Parakeet, Blue (Melopsittacus undulatus)\\\", \\\"Quantity\\\": \\\"1\\\", \\\"Unit\\\": \\\"29.95\\\", \\\"Paid\\\": \\\"$31.85\\\"}\"}\n{\"file\": \"benchmark.lsv\", \"line_no\": 266, \"text\": \"Customer: Michael Smith\"}\n{\"file\": \"benchmark.xml\", \"line_no\": 346, \"text\": \"    <Customer>Michael Smith</Customer>\"}\n{\"file\": \"benchmark.yml\", \"line_no\": 239, \"text\": \"- customer: Michael Smith\"}\n{\"file\": \"numeric-cols.tsv\", \"line_no\": 16, \"text\": \"2016-09-01\\tCentral\\tSmith\\tDesk\\t2\\t125.00\\t250.00\"}\n{\"file\": \"numeric-cols.tsv\", \"line_no\": 22, \"text\": \"2016-12-12\\tCentral\\tSmith\\tPencil\\t67\\t1.29\\t86.43\"}\n{\"file\": \"numeric-cols.tsv\", \"line_no\": 25, \"text\": \"2017-02-01\\tCentral\\tSmith\\tBinder\\t87\\t15.00\\t1305.00\"}\n{\"file\": \"sample.tsv\", \"line_no\": 17, \"text\": \"2016-09-01\\tCentral\\tSmith\\tDesk\\t2\\t125.00\\t250.00\"}\n{\"file\": \"sample.tsv\", \"line_no\": 23, \"text\": \"2016-12-12\\tCentral\\tSmith\\tPencil\\t67\\t1.29\\t86.43\"}\n{\"file\": \"sample.tsv\", \"line_no\": 26, \"text\": \"2017-02-01\\tCentral\\tSmith\\tBinder\\t87\\t15.00\\t1305.00\"}\n{\"file\": \"sample.vds\", \"line_no\": 23, \"text\": \"{\\\"OrderDate\\\": \\\"2016-09-01\\\", \\\"Region\\\": \\\"Central\\\", \\\"Rep\\\": \\\"Smith\\\", \\\"Item\\\": \\\"Desk\\\", \\\"Units\\\": \\\"2\\\", \\\"Unit_Cost\\\": \\\"125.00\\\", \\\"Total\\\": \\\"250.00\\\"}\"}\n{\"file\": \"sample.vds\", \"line_no\": 29, \"text\": \"{\\\"OrderDate\\\": \\\"2016-12-12\\\", \\\"Region\\\": \\\"Central\\\", \\\"Rep\\\": \\\"Smith\\\", \\\"Item\\\": \\\"Pencil\\\", \\\"Units\\\": \\\"67\\\", \\\"Unit_Cost\\\": \\\"1.29\\\", \\\"Total\\\": \\\"86.43\\\"}\"}\n{\"file\": \"sample.vds\", \"line_no\": 32, \"text\": \"{\\\"OrderDate\\\": \\\"2017-02-01\\\", \\\"Region\\\": \\\"Central\\\", \\\"Rep\\\": \\\"Smith\\\", \\\"Item\\\": \\\"Binder\\\", \\\"Units\\\": \\\"87\\\", \\\"Unit_Cost\\\": \\\"15.00\\\", \\\"Total\\\": \\\"1305.00\\\"}\"}\n{\"file\": \"sample.vds\", \"line_no\": 94, \"text\": \"{\\\"Date\\\": \\\"2018-08-16 17:15\\\", \\\"Customer\\\": \\\"Michael Smith\\\", \\\"SKU\\\": \\\"BIRD160\\\", \\\"Item\\\": \\\"Parakeet, Blue (Melopsittacus undulatus)\\\", \\\"Quantity\\\": \\\"1\\\", \\\"Unit\\\": \\\"29.95\\\", \\\"Paid\\\": \\\"31.85\\\"}\"}\n{\"file\": \"sunshinelist.html\", \"line_no\": 194, \"text\": \"\\t\\t\\t    \\t\\t\\t<td>Kevin Smith</td>\"}\n"
  },
  {
    "path": "tests/golden/load-h5.tsv",
    "content": "elapsed_ms\ttimestamp\tduration\tarm\tposture\tsystolic\tdiastolic\n18000\t1454017862000\t10000\t0\t0\t120\t80\n30000\t1454017874000\t1000\t1\t0\t121\t80\n"
  },
  {
    "path": "tests/golden/load-html.tsv",
    "content": "Year\tEmployer\tSector\tName\tPosition\tSalary\tBenefits\tTotal\tChange\tChange (%)\n2017\tOntario Power Generation\tElectricity\tJeffrey Lyash\tPresident and Chief Executive Officer\t1155899.14\t9802.71\t1165701.85\t375741.71\t47.56\n2017\tUniversity of Toronto\tUniversity\tWilliam Moriarty\tPresident and Chief Executive Officer, University of Toronto Asset Management Corporation\t1045582.62\t611.72\t1046194.34\t-429086.8\t-29.09\n2017\tOntario Power Generation\tElectricity\tGlenn Jager\tNuclear President and Chief Nuclear Officer\t832750.95\t4752.0\t837502.95\t39607.88\t4.96\n2017\tOntario Pension Board / Commission du Régime de retraite de l'Ontario\tCrown\tJill Pepall\tExecutive Vice President and Chief Investment Officer / Vice-présidente directrice et chef des placements\t835389.06\t727.64\t836116.7\t94989.53\t12.82\n2017\tUniversity Health Network\tHospital\tPeter Pisters\tPresident and Chief Executive Officer\t753992.4\t77725.0\t831717.4\t144417.02\t21.01\n2017\tSunnybrook Health Sciences Centre\tHospital\tBarry Mclellan\tPresident and Chief Executive Officer\t715000.01\t49444.78\t764444.79\t-860.19\t-0.11\n2017\tCentre for Addiction and Mental Health\tHospital\tCatherine Zahn\tPresident and Chief Executive Officer / Présidente-directrice générale\t672731.19\t71284.03\t744015.22\tNone\tNone\n2017\tBaycrest Centre for Geriatric Care\tHospital\tWilliam Reichman\tPresident and Chief Executive Officer\t718475.03\t14804.04\t733279.07\t-5285.95\t-0.72\n2017\tSt. Joseph's Healthcare Hamilton\tHospital\tKevin Smith\tChief Executive Officer, St. Joseph's Health System\t660067.2\t66247.71\t726314.91\t-22259.14\t-2.97\n2017\tMount Sinai Hospital\tHospital\tJoseph Mapa\tPresident and Chief Executive Officer\t719724.5\t1404.0\t721128.5\t-40428.33\t-5.31\n"
  },
  {
    "path": "tests/golden/load-http-flaky.tsv",
    "content": "Date\tCustomer\tSKU\tItem\tQuantity\tUnit\tPaid\n7/3/2018 1:47p\tRobert Armstrong\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t4\t$12.95\t$51.8\n7/3/2018 3:32p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t1\t$4.22\t$4.22\n7/5/2018 4:15p\tDouglas \"Dougie\" Powers\tFOOD121\tFood, Adult Cat 3.5 oz\t1\t$4.22\t$4.22\n7/6/2018 12:15p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t$1.29\t157¥\n7/10/2018 10:28a\tDavid Attenborough\tNSCT201\tFood, Salamander\t30\t$.05\t$1.5\n7/10/2018 5:23p\tSusan Ashworth\tCAT060\tCat, Korat (Felis catus)\t1\t$720.42\t$720.42\n7/10/2018 5:23p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t1\t$14.94\t$14.94\n7/13/2018 10:26a\tWil Wheaton\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t1\t$39.95\t$39.95\n7/13/2018 3:49p\tRobert Armstrong\tFOOD216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 9:01a\tRobert Armstrong\tFOOD217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 11:30a\tHelen Halestorm\tLAGO342\tRabbit (Oryctolagus cuniculus)\t2\t$32.94\t$65.88\n7/18/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t6\t$1.29\t157¥\n7/19/2018 10:28a\tRubeus Hagrid\tFOOD170\tFood, Dog - 5kg\t5\t$44.95\t$224.75\n7/20/2018 2:13p\tJon Arbuckle\tFOOD167\tFood, Premium Wet Cat - 3.5 oz\t50\t$3.95\t$197.5\n7/23/2018 1:41p\tRobert Armstrong\tFOOD215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/23/2018 4:23p\tDouglas \"Dougie\" Powers\tTOY235\tLaser Pointer\t1\t$16.12\t$16.12\n7/24/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/26/2018 4:39p\tDouglas \"Dougie\" Powers\tFOOD420\tFood, Shark - 10 kg\t1\t$15.70\t$15.7\n7/27/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/30/2018 12:17p\t桜 高橋 (Sakura Takahashi)\tRETURN\tFood, Senior Wet Cat - 3 oz\t1\t$1.29\t157¥\n7/31/2018 5:42p\tRubeus Hagrid\tCAT060\tFood, Dragon - 50kg\t5\t$720.42\t$3602.1\n8/1/2018 2:44p\tDavid Attenborough\tFOOD360\tFood, Rhinocerous - 50kg\t4\t$5.72\t$22.88\n8/2/2018 5:12p\tSusan Ashworth\tCAT110\tCat, Maine Coon (Felix catus)\t1\t$1,309.68\t$1309.68\n8/2/2018 5:12p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t3\t$14.94\t$44.82\n8/6/2018 10:21a\tRobert Armstrong\tFOOD212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t4\t$12.95\t$51.8\n8/7/2018 4:12p\tJuan Johnson\tREPT082\tKingsnake, California (Lampropeltis getula)\t1\t$89.95\t$89.95\n8/7/2018 4:12p\tJuan Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/10/2018 4:31p\tRobert Armstrong\tFOOD211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t4\t$12.95\t$51.8\n8/13/2018 2:07p\tMonica Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/13/2018 2:08p\tMaría Fernández\tFOOD146\tForti Diet Prohealth Mouse/Rat 3lbs\t2\t$2.00\t$4.0\n8/15/2018 11:57a\tMr. Praline\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t1\t$2300.00\t-$2300.0\n8/15/2018 3:48p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t2\t$4.22\t$8.44\n8/16/2018 11:50a\tHelen Halestorm\tRETURN\tRabbit (Oryctolagus cuniculus)\t6\t$0\t$0.0\n8/16/2018 4:00p\tKyle Kennedy\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$2,495.99\t$2495.99\n8/16/2018 5:15p\tMichael Smith\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t1\t29.95\t$31.85\n8/17/2018 9:26a\tRubeus Hagrid\tNSCT201\tFood, Spider\t5\t$.05\t$0.25\n8/20/2018 9:36a\tKyle Kennedy\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$1,247.99\t-$1247.99\n8/20/2018 1:47p\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tGoat, American Pygmy (Capra hircus)\t1\t₪499\t$160.51\n8/20/2018 3:31p\tMonica Johnson\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t30\t$.05\t$1.5\n8/20/2018 5:12p\tDavid Attenborough\tNSCT084\tFood, Pangolin\t30\t$.17\t$5.10\n8/21/2018 12:13p\tRobert Armstrong\tFOOD214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/22/2018 9:38a\tDavid Attenborough\tBIRD160\tFood, Quoll\t1\t29.95\t$29.95\n8/22/2018 2:13p\tJon Arbuckle\tFOOD170\tFood, Adult Dog - 5kg\t1\t$44.95\t$44.95\n8/22/2018 5:49p\tמרוסיה ניסנהולץ\tSFTY052\tFire Extinguisher, kitchen-rated\t1\t$61.70\t$61.70\n8/24/2018 11:42a\tRobert Armstrong\tFOOD218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/27/2018 3:05p\tMonica Johnson\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t1\t$1.99\t$1.99\n8/28/2018 5:32p\tSusan Ashworth\tCAT020\tCat, Scottish Fold (Felis catus)\t1\t$1,964.53\t$1964.53\n8/28/2018 5:32p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t2\t$14.94\t$29.88\n8/29/2018 10:07a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t4\t$12.95\t$51.8\n8/31/2018 12:00a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t144\t$12.95\t$1864.8\n8/31/2018 5:57p\tJuan Johnson\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t1\t$99.95\t$99.95\n"
  },
  {
    "path": "tests/golden/load-json.tsv",
    "content": ":@computed_region_cbhk_fwbd\t:@computed_region_nnqa_25f4\tfall\tgeolocation.coordinates[0]\tgeolocation.coordinates[1]\tgeolocation.type\tid\tmass\tname\tnametype\trecclass\treclat\treclong\tyear\n\t\tFell\t6.08\t50.77\tPoint\t1\t21\tAachen\tValid\tL5\t50.775000\t6.083330\t1880-01-01T00:00:00.000\n\t\tFell\t10.23\t56.18\tPoint\t2\t720\tAarhus\tValid\tH6\t56.183330\t10.233330\t1951-01-01T00:00:00.000\n\t\tFell\t-113.00\t54.22\tPoint\t6\t107000\tAbee\tValid\tEH4\t54.216670\t-113.000000\t1952-01-01T00:00:00.000\n\t\tFell\t-99.90\t16.88\tPoint\t10\t1914\tAcapulco\tValid\tAcapulcoite\t16.883330\t-99.900000\t1976-01-01T00:00:00.000\n\t\tFell\t-64.95\t-33.17\tPoint\t370\t780\tAchiras\tValid\tL6\t-33.166670\t-64.950000\t1902-01-01T00:00:00.000\n\t\tFell\t71.80\t32.10\tPoint\t379\t4239\tAdhi Kot\tValid\tEH4\t32.100000\t71.800000\t1919-01-01T00:00:00.000\n\t\tFell\t95.17\t44.83\tPoint\t390\t910\tAdzhi-Bogdo (stone)\tValid\tLL3-6\t44.833330\t95.166670\t1949-01-01T00:00:00.000\n\t\tFell\t0.62\t44.22\tPoint\t392\t30000\tAgen\tValid\tH5\t44.216670\t0.616670\t1814-01-01T00:00:00.000\n\t\tFell\t-65.23\t-31.60\tPoint\t398\t1620\tAguada\tValid\tL6\t-31.600000\t-65.233330\t1930-01-01T00:00:00.000\n\t\tFell\t-64.55\t-30.87\tPoint\t417\t1440\tAguila Blanca\tValid\tL\t-30.866670\t-64.550000\t1920-01-01T00:00:00.000\n\t\tFell\t-9.57\t16.40\tPoint\t423\t1000\tAioun el Atrouss\tValid\tDiogenite-pm\t16.398060\t-9.570280\t1974-01-01T00:00:00.000\n\t\tFell\t8.38\t19.08\tPoint\t424\t24000\tAïr\tValid\tL6\t19.083330\t8.383330\t1925-01-01T00:00:00.000\n\t\tFell\t2.33\t50.67\tPoint\t425\t\tAire-sur-la-Lys\tValid\tUnknown\t50.666670\t2.333330\t1769-01-01T00:00:00.000\n\t\tFell\t35.05\t29.52\tPoint\t426\t779\tAkaba\tValid\tL6\t29.516670\t35.050000\t1949-01-01T00:00:00.000\n\t\tFell\t77.95\t29.72\tPoint\t427\t1800\tAkbarpur\tValid\tH4\t29.716670\t77.950000\t1838-01-01T00:00:00.000\n\t\tFell\t8.43\t8.92\tPoint\t432\t3000\tAkwanga\tValid\tH\t8.916670\t8.433330\t1959-01-01T00:00:00.000\n\t\tFell\t42.82\t39.92\tPoint\t433\t50000\tAkyumak\tValid\tIron, IVA\t39.916670\t42.816670\t1981-01-01T00:00:00.000\n\t\tFell\t39.52\t24.42\tPoint\t446\t160\tAl Rais\tValid\tCR2-an\t24.416670\t39.516670\t1957-01-01T00:00:00.000\n\t\tFell\t28.96\t13.66\tPoint\t447\t700\tAl Zarnkh\tValid\tLL5\t13.660330\t28.960000\t2001-01-01T00:00:00.000\n\t\tFell\t4.08\t44.12\tPoint\t448\t6000\tAlais\tValid\tCI1\t44.116670\t4.083330\t1806-01-01T00:00:00.000\n\t\tFell\t11.02\t44.65\tPoint\t453\t2000\tAlbareto\tValid\tL/LL4\t44.650000\t11.016670\t1766-01-01T00:00:00.000\n\t\tFell\t22.67\t2.00\tPoint\t454\t625\tAlberta\tValid\tL\t2.000000\t22.666670\t1949-01-01T00:00:00.000\n\t\tFell\t6.02\t45.82\tPoint\t458\t252\tAlby sur Chéran\tValid\tEucrite-mmict\t45.821330\t6.015330\t2002-01-01T00:00:00.000\n\t\tFell\t-1.78\t51.78\tPoint\t461\t700\tAldsworth\tValid\tLL5\t51.783330\t-1.783330\t1835-01-01T00:00:00.000\n\t\tFell\t37.13\t36.23\tPoint\t462\t3200\tAleppo\tValid\tL6\t36.233330\t37.133330\t1873-01-01T00:00:00.000\n\t\tFell\t8.75\t44.88\tPoint\t463\t908\tAlessandria\tValid\tH5\t44.883330\t8.750000\t1860-01-01T00:00:00.000\n\t\tFell\t31.82\t50.95\tPoint\t465\t9251\tAlexandrovsky\tValid\tH4\t50.950000\t31.816670\t1900-01-01T00:00:00.000\n\t\tFell\t10.15\t45.27\tPoint\t466\t228000\tAlfianello\tValid\tL6\t45.266670\t10.150000\t1883-01-01T00:00:00.000\n50\t429\tFell\t-85.88\t42.53\tPoint\t2276\t32000\tAllegan\tValid\tH5\t42.533330\t-85.883330\t1899-01-01T00:00:00.000\n\t\tFell\t-105.32\t26.97\tPoint\t2278\t2000000\tAllende\tValid\tCV3\t26.966670\t-105.316670\t1969-01-01T00:00:00.000\n\t\tFell\t32.41\t20.75\tPoint\t48915\t3950\tAlmahata Sitta\tValid\tUreilite-an\t20.745750\t32.412750\t2008-01-01T00:00:00.000\n\t\tFell\t44.22\t35.27\tPoint\t2284\t6000\tAlta'ameem\tValid\tLL5\t35.273330\t44.215560\t1977-01-01T00:00:00.000\n\t\tFell\t78.25\t27.67\tPoint\t2290\t6400\tAmbapur Nagla\tValid\tH5\t27.666670\t78.250000\t1895-01-01T00:00:00.000\n\t\tFell\t85.57\t26.58\tPoint\t2294\t2700\tAndhara\tValid\tStone-uncl\t26.583330\t85.566670\t1880-01-01T00:00:00.000\n49\t1723\tFell\t-70.75\t44.62\tPoint\t2295\t3200\tAndover\tValid\tL6\t44.616670\t-70.750000\t1898-01-01T00:00:00.000\n\t\tFell\t37.50\t48.70\tPoint\t2296\t600\tAndreevka\tValid\tL3\t48.700000\t37.500000\t1969-01-01T00:00:00.000\n\t\tFell\t76.87\t20.88\tPoint\t2298\t17900\tAndura\tValid\tH6\t20.883330\t76.866670\t1939-01-01T00:00:00.000\n\t\tFound\t0.00\t0.00\tPoint\t50693\t256.8\tNorthwest Africa 5815\tValid\tL5\t0.000000\t0.000000\t\n\t\tFell\t-0.55\t47.47\tPoint\t2301\t\tAngers\tValid\tL6\t47.466670\t-0.550000\t1822-01-01T00:00:00.000\n\t\tFell\t-44.32\t-22.97\tPoint\t2302\t1500\tAngra dos Reis (stone)\tValid\tAngrite\t-22.966670\t-44.316670\t1869-01-01T00:00:00.000\n\t\tFell\t39.72\t9.53\tPoint\t2304\t6500\tAnkober\tValid\tH4\t9.533330\t39.716670\t1942-01-01T00:00:00.000\n\t\tFell\t105.18\t25.15\tPoint\t2305\t2500\tAnlong\tValid\tH5\t25.150000\t105.183330\t1971-01-01T00:00:00.000\n\t\tFell\t140.79\t40.81\tPoint\t2313\t320\tAomori\tValid\tL6\t40.810560\t140.785560\t1984-01-01T00:00:00.000\n\t\tFell\t-2.72\t53.58\tPoint\t2318\t15000\tAppley Bridge\tValid\tLL6\t53.583330\t-2.716670\t1914-01-01T00:00:00.000\n\t\tFell\t5.38\t43.87\tPoint\t2320\t3200\tApt\tValid\tL6\t43.866670\t5.383330\t1803-01-01T00:00:00.000\n\t\tFell\t-66.00\t-33.00\tPoint\t2325\t810\tArbol Solo\tValid\tH5\t-33.000000\t-66.000000\t1954-01-01T00:00:00.000\n18\t2697\tFell\t-94.30\t38.50\tPoint\t2329\t5070\tArchie\tValid\tH6\t38.500000\t-94.300000\t1932-01-01T00:00:00.000\n\t\tFell\t-60.67\t-31.42\tPoint\t2340\t7450\tArroyo Aguiar\tValid\tH5\t-31.416670\t-60.666670\t1950-01-01T00:00:00.000\n\t\tFell\t9.03\t42.45\tPoint\t2345\t41\tAsco\tValid\tH6\t42.450000\t9.033330\t1805-01-01T00:00:00.000\n23\t774\tFell\t-97.01\t31.80\tPoint\t48954\t9500\tAsh Creek\tValid\tL6\t31.805000\t-97.010000\t2009-01-01T00:00:00.000\n\t\tFell\t0.30\t52.05\tPoint\t2346\t1300\tAshdon\tValid\tL6\t52.050000\t0.300000\t1923-01-01T00:00:00.000\n\t\tFell\t12.55\t43.03\tPoint\t2353\t2000\tAssisi\tValid\tH5\t43.033330\t12.550000\t1886-01-01T00:00:00.000\n\t\tFell\t80.62\t25.25\tPoint\t4883\t1280\tAtarra\tValid\tL4\t25.254170\t80.625000\t1920-01-01T00:00:00.000\n\t\tFell\t-103.67\t20.07\tPoint\t4884\t94.2\tAtemajac\tValid\tL6\t20.066670\t-103.666670\t1896-01-01T00:00:00.000\n29\t3134\tFell\t-87.00\t34.75\tPoint\t4885\t265\tAthens\tValid\tLL6\t34.750000\t-87.000000\t1933-01-01T00:00:00.000\n20\t602\tFell\t-96.15\t34.32\tPoint\t4888\t1384.2\tAtoka\tValid\tL6\t34.316670\t-96.150000\t1945-01-01T00:00:00.000\n\t\tFell\t5.17\t44.38\tPoint\t4893\t800\tAubres\tValid\tAubrite\t44.383330\t5.166670\t1836-01-01T00:00:00.000\n\t\tFell\t3.67\t36.17\tPoint\t4899\t50000\tAumale\tValid\tL6\t36.166670\t3.666670\t1865-01-01T00:00:00.000\n\t\tFell\t3.23\t44.33\tPoint\t4900\t2000\tAumieres\tValid\tL6\t44.333330\t3.233330\t1842-01-01T00:00:00.000\n\t\tFell\t0.58\t43.08\tPoint\t4903\t50000\tAusson\tValid\tL5\t43.083330\t0.583330\t1858-01-01T00:00:00.000\n\t\tFell\t-49.95\t-21.46\tPoint\t4905\t9330\tAvanhandava\tValid\tH4\t-21.460280\t-49.950830\t1952-01-01T00:00:00.000\n\t\tFell\t13.50\t46.00\tPoint\t4906\t1230\tAvce\tValid\tIron, IIAB\t46.000000\t13.500000\t1908-01-01T00:00:00.000\n\t\tFell\t-103.50\t25.00\tPoint\t4907\t146\tAvilez\tValid\tH\t25.000000\t-103.500000\t1855-01-01T00:00:00.000\n\t\tFell\t32.83\t2.72\tPoint\t4910\t134\tAwere\tValid\tL4\t2.716670\t32.833330\t1968-01-01T00:00:00.000\n11\t1989\tFell\t-108.00\t36.80\tPoint\t4913\t2830\tAztec\tValid\tL6\t36.800000\t-108.000000\t1938-01-01T00:00:00.000\n\t\tFell\t38.00\t48.60\tPoint\t4917\t18000\tBachmut\tValid\tL6\t48.600000\t38.000000\t1814-01-01T00:00:00.000\n\t\tFell\t78.50\t28.48\tPoint\t4922\t10322\tBahjoi\tValid\tIron, IAB-sLL\t28.483330\t78.500000\t1934-01-01T00:00:00.000\n37\t2373\tFell\t-82.48\t35.97\tPoint\t4925\t3700\tBald Mountain\tValid\tL4\t35.966670\t-82.483330\t1929-01-01T00:00:00.000\n32\t495\tFell\t-88.67\t34.50\tPoint\t4926\t345\tBaldwyn\tValid\tL6\t34.500000\t-88.666670\t1922-01-01T00:00:00.000\n\t\tFell\t16.38\t5.38\tPoint\t4928\t1000\tBali\tValid\tCV3\t5.383330\t16.383330\t1907-01-01T00:00:00.000\n\t\tFell\t101.18\t16.67\tPoint\t4934\t16700\tBan Rong Du\tValid\tIron, ungrouped\t16.666670\t101.183330\t1993-01-01T00:00:00.000\n\t\tFell\t107.60\t-6.92\tPoint\t4935\t11500\tBandong\tValid\tLL6\t-6.916670\t107.600000\t1871-01-01T00:00:00.000\n\t\tFell\t76.33\t27.70\tPoint\t4936\t15000\tBansur\tValid\tL6\t27.700000\t76.333330\t1892-01-01T00:00:00.000\n\t\tFell\t78.20\t30.40\tPoint\t4937\t14\tBanswal\tValid\tL5\t30.400000\t78.200000\t1913-01-01T00:00:00.000\n\t\tFell\t106.00\t-6.33\tPoint\t4938\t629\tBanten\tValid\tCM2\t-6.333330\t106.000000\t1933-01-01T00:00:00.000\n\t\tFell\t-0.05\t43.95\tPoint\t4942\t6400\tBarbotan\tValid\tH5\t43.950000\t-0.050000\t1790-01-01T00:00:00.000\n\t\tFell\t2.17\t41.37\tPoint\t4944\t\tBarcelona (stone)\tValid\tOC\t41.366670\t2.166670\t1704-01-01T00:00:00.000\n\t\tFell\t-2.50\t42.38\tPoint\t4946\t3200\tBarea\tValid\tMesosiderite-A1\t42.383330\t-2.500000\t1842-01-01T00:00:00.000\n\t\tFell\t84.08\t52.73\tPoint\t4947\t23.2\tBarnaul\tValid\tH5\t52.733330\t84.083330\t1904-01-01T00:00:00.000\n\t\tFell\t9.10\t52.00\tPoint\t4948\t17\tBarntrup\tValid\tLL4\t52.000000\t9.100000\t1886-01-01T00:00:00.000\n\t\tFell\t76.80\t31.62\tPoint\t4949\t4500\tBaroti\tValid\tL6\t31.616670\t76.800000\t1910-01-01T00:00:00.000\n\t\tFell\t-1.34\t52.57\tPoint\t4954\t44000\tBarwell\tValid\tL5\t52.565280\t-1.339720\t1965-01-01T00:00:00.000\n\t\tFell\t-5.90\t15.78\tPoint\t44876\t29560\tBassikounou\tValid\tH5\t15.783330\t-5.900000\t2006-01-01T00:00:00.000\n\t\tFell\t20.94\t52.03\tPoint\t4957\t15500\tBaszkówka\tValid\tL5\t52.033330\t20.935830\t1994-01-01T00:00:00.000\n21\t662\tFell\t-98.32\t45.42\tPoint\t4974\t21000\tBath\tValid\tH4\t45.416670\t-98.316670\t1892-01-01T00:00:00.000\n36\t1921\tFell\t-83.75\t38.25\tPoint\t4975\t86000\tBath Furnace\tValid\tL6\t38.250000\t-83.750000\t1902-01-01T00:00:00.000\n10\t2397\tFell\t-117.19\t40.67\tPoint\t56133\t2900\tBattle Mountain\tValid\tL6\t40.668130\t-117.189130\t2012-01-01T00:00:00.000\n\t\tFell\t-0.18\t11.08\tPoint\t4976\t1557\tBawku\tValid\tLL5\t11.083330\t-0.183330\t1989-01-01T00:00:00.000\n18\t2216\tFell\t-93.50\t36.75\tPoint\t4977\t611\tBaxter\tValid\tL6\t36.750000\t-93.500000\t1916-01-01T00:00:00.000\n17\t1285\tFell\t-101.20\t39.80\tPoint\t4984\t16000\tBeardsley\tValid\tH5\t39.800000\t-101.200000\t1929-01-01T00:00:00.000\n\t\tFell\t-117.33\t51.17\tPoint\t4986\t14000\tBeaver Creek\tValid\tH5\t51.166670\t-117.333330\t1893-01-01T00:00:00.000\n\t\tFell\t-4.10\t53.02\tPoint\t4993\t794\tBeddgelert\tValid\tH5\t53.016670\t-4.100000\t1949-01-01T00:00:00.000\n23\t1978\tFell\t-96.47\t33.60\tPoint\t5005\t375\tBells\tValid\tC2-ung\t33.600000\t-96.466670\t1961-01-01T00:00:00.000\n\t\tFell\t-64.87\t-32.33\tPoint\t5009\t\tBelville\tValid\tOC\t-32.333330\t-64.866670\t1937-01-01T00:00:00.000\n\t\tFell\t82.92\t25.37\tPoint\t5011\t3700\tBenares (a)\tValid\tLL4\t25.366670\t82.916670\t1798-01-01T00:00:00.000\n\t\tFell\t-8.15\t32.25\tPoint\t30443\t25000\tBenguerir\tValid\tLL6\t32.250000\t-8.150000\t2004-01-01T00:00:00.000\n\t\tFell\t10.80\t32.87\tPoint\t5018\t19000\tBeni M'hira\tValid\tL6\t32.866670\t10.800000\t2001-01-01T00:00:00.000\n34\t1869\tFell\t-89.15\t39.08\tPoint\t5021\t1770.5\tBenld\tValid\tH6\t39.083330\t-89.150000\t1938-01-01T00:00:00.000\n\t\tFell\t28.42\t-26.17\tPoint\t5023\t3880\tBenoni\tValid\tH6\t-26.166670\t28.416670\t1943-01-01T00:00:00.000\n\t\tFell\t-7.00\t30.00\tPoint\t5024\t45000\tBensour\tValid\tLL6\t30.000000\t-7.000000\t2002-01-01T00:00:00.000\n\t\tFell\t-67.55\t45.95\tPoint\t5026\t2840\tBenton\tValid\tLL6\t45.950000\t-67.550000\t1949-01-01T00:00:00.000\n\t\tFell\t-58.33\t-31.91\tPoint\t48975\t270\tBerduc\tValid\tL6\t-31.910000\t-58.328330\t2008-01-01T00:00:00.000\n\t\tFell\t-3.65\t11.65\tPoint\t5028\t18000\tBéréba\tValid\tEucrite-mmict\t11.650000\t-3.650000\t1924-01-01T00:00:00.000\n\t\tFell\t-3.80\t41.68\tPoint\t5029\t1440\tBerlanguillas\tValid\tL6\t41.683330\t-3.800000\t1811-01-01T00:00:00.000\n9\t1072\tFell\t-105.02\t40.31\tPoint\t47355\t960\tBerthoud\tValid\tEucrite-mmict\t40.305830\t-105.023250\t2004-01-01T00:00:00.000\n47\t2030\tFell\t-73.83\t42.53\tPoint\t5032\t13.9\tBethlehem\tValid\tH\t42.533330\t-73.833330\t1859-01-01T00:00:00.000\n\t\tFell\t-0.23\t43.22\tPoint\t5034\t2000\tBeuste\tValid\tL5\t43.216670\t-0.233330\t1859-01-01T00:00:00.000\n\t\tFell\t35.50\t33.88\tPoint\t5035\t1100\tBeyrout\tValid\tLL3.8\t33.883330\t35.500000\t1921-01-01T00:00:00.000\n\t\tFell\t74.83\t20.88\tPoint\t5037\t18\tBhagur\tValid\tL6\t20.883330\t74.833330\t1877-01-01T00:00:00.000\n\t\tFell\t73.12\t26.51\tPoint\t36591\t678\tBhawad\tValid\tLL6\t26.508330\t73.115280\t2002-01-01T00:00:00.000\n\t\tFell\t71.47\t20.83\tPoint\t5039\t100\tBherai\tValid\tL6\t20.833330\t71.466670\t1893-01-01T00:00:00.000\n\t\tFell\t90.65\t22.68\tPoint\t5040\t1047\tBhola\tValid\tLL3-6\t22.683330\t90.650000\t1940-01-01T00:00:00.000\n\t\tFell\t86.90\t22.08\tPoint\t5041\t2500\tBholghati\tValid\tHowardite\t22.083330\t86.900000\t1905-01-01T00:00:00.000\n\t\tFell\t23.20\t53.10\tPoint\t5042\t4000\tBialystok\tValid\tEucrite-pmict\t53.100000\t23.200000\t1827-01-01T00:00:00.000\n\t\tFell\t27.17\t50.13\tPoint\t5043\t1900\tBielokrynitschie\tValid\tH4\t50.133330\t27.166670\t1887-01-01T00:00:00.000\n\t\tFell\t-0.08\t12.45\tPoint\t5045\t25000\tBilanga\tValid\tDiogenite\t12.450000\t-0.083330\t1999-01-01T00:00:00.000\n\t\tFell\t115.68\t-33.16\tPoint\t5051\t488.1\tBinningup\tValid\tH5\t-33.156390\t115.676390\t1984-01-01T00:00:00.000\n\t\tFell\t5.30\t13.77\tPoint\t5056\t560\tBirni N'konni\tValid\tH4\t13.766670\t5.300000\t1923-01-01T00:00:00.000\n33\t657\tFell\t-80.28\t34.17\tPoint\t5059\t6000\tBishopville\tValid\tAubrite\t34.166670\t-80.283330\t1843-01-01T00:00:00.000\n\t\tFell\t82.60\t25.38\tPoint\t5060\t1039\tBishunpur\tValid\tLL3.15\t25.383330\t82.600000\t1895-01-01T00:00:00.000\n\t\tFell\t30.17\t49.78\tPoint\t5063\t1850\tBjelaja Zerkov\tValid\tH6\t49.783330\t30.166670\t1796-01-01T00:00:00.000\n\t\tFell\t25.80\t60.40\tPoint\t5064\t330000\tBjurböle\tValid\tL/LL4\t60.400000\t25.800000\t1899-01-01T00:00:00.000\n48\t2495\tFell\t-78.08\t40.92\tPoint\t5065\t705\tBlack Moshannan Park\tValid\tL5\t40.916670\t-78.083330\t1941-01-01T00:00:00.000\n20\t2164\tFell\t-97.33\t36.83\tPoint\t5068\t2381\tBlackwell\tValid\tL5\t36.833330\t-97.333330\t1906-01-01T00:00:00.000\n23\t3063\tFell\t-98.83\t31.83\tPoint\t5071\t5100\tBlanket\tValid\tL6\t31.833330\t-98.833330\t1909-01-01T00:00:00.000\n\t\tFell\t16.63\t49.37\tPoint\t5072\t470\tBlansko\tValid\tH6\t49.366670\t16.633330\t1833-01-01T00:00:00.000\n34\t1795\tFell\t-89.00\t40.48\tPoint\t5076\t67.8\tBloomington\tValid\tLL6\t40.480000\t-89.004170\t1938-01-01T00:00:00.000\n\t\tFell\t115.83\t33.83\tPoint\t5090\t7500\tBo Xian\tValid\tLL3.9\t33.833330\t115.833330\t1977-01-01T00:00:00.000\n\t\tFell\t-102.00\t23.00\tPoint\t5093\t56\tBocas\tValid\tL6\t23.000000\t-102.000000\t1804-01-01T00:00:00.000\n\t\tFell\t0.70\t12.50\tPoint\t5097\t8800\tBogou\tValid\tIron, IAB-MG\t12.500000\t0.700000\t1962-01-01T00:00:00.000\n\t\tFell\t131.63\t44.55\tPoint\t5098\t256000\tBoguslavka\tValid\tIron, IIAB\t44.550000\t131.633330\t1916-01-01T00:00:00.000\n\t\tFell\t10.05\t44.87\tPoint\t5110\t1676\tBorgo San Donino\tValid\tLL6\t44.866670\t10.050000\t1808-01-01T00:00:00.000\n\t\tFell\t78.03\t21.95\tPoint\t5111\t8600\tBori\tValid\tL6\t21.950000\t78.033330\t1894-01-01T00:00:00.000\n\t\tFell\t52.48\t54.23\tPoint\t5112\t1342\tBoriskino\tValid\tCM2\t54.233330\t52.483330\t1930-01-01T00:00:00.000\n\t\tFell\t24.28\t48.15\tPoint\t5113\t7000\tBorkut\tValid\tL5\t48.150000\t24.283330\t1852-01-01T00:00:00.000\n\t\tFell\t35.87\t55.47\tPoint\t5114\t500\tBorodino\tValid\tH5\t55.466670\t35.866670\t1812-01-01T00:00:00.000\n\t\tFell\t33.88\t51.33\tPoint\t5117\t614\tBotschetschki\tValid\tL4\t51.333330\t33.883330\t1823-01-01T00:00:00.000\n\t\tFell\t-11.37\t17.71\tPoint\t57168\t190\tBoumdeid (2003)\tValid\tL6\t17.710670\t-11.371500\t2003-01-01T00:00:00.000\n\t\tFell\t-11.34\t17.17\tPoint\t57167\t3599\tBoumdeid (2011)\tValid\tL6\t17.174930\t-11.341330\t2011-01-01T00:00:00.000\n\t\tFell\t-6.33\t54.57\tPoint\t5121\t5460\tBovedy\tValid\tL3\t54.566670\t-6.333330\t1969-01-01T00:00:00.000\n48\t2455\tFell\t-80.08\t40.50\tPoint\t5128\t762\tBradford Woods\tValid\tL\t40.500000\t-80.083330\t1886-01-01T00:00:00.000\n\t\tFell\t16.30\t50.60\tPoint\t5133\t39000\tBraunau\tValid\tIron, IIAB\t50.600000\t16.300000\t1847-01-01T00:00:00.000\n\t\tFell\t8.18\t50.67\tPoint\t5134\t1500\tBreitscheid\tValid\tH5\t50.666940\t8.183610\t1956-01-01T00:00:00.000\n\t\tFell\t9.10\t53.40\tPoint\t5135\t7250\tBremervörde\tValid\tH/L3.9\t53.400000\t9.100000\t1855-01-01T00:00:00.000\n\t\tFell\t59.32\t52.13\tPoint\t5140\t219\tBrient\tValid\tEucrite-pmict\t52.133330\t59.316670\t1933-01-01T00:00:00.000\n\t\tFell\t-112.88\t53.90\tPoint\t5156\t303000\tBruderheim\tValid\tL6\t53.900000\t-112.883330\t1960-01-01T00:00:00.000\n\t\tFell\t64.60\t39.78\tPoint\t30448\t5300\tBukhara\tValid\tCV3\t39.779780\t64.600350\t2001-01-01T00:00:00.000\n\t\tFell\t\t\t\t5163\t2250\tBulls Run\tValid\tIron?\t\t\t1964-01-01T00:00:00.000\n\t\tFell\t129.19\t-31.35\tPoint\t48653\t324\tBunburra Rockhole\tValid\tEucrite\t-31.350000\t129.190000\t2007-01-01T00:00:00.000\n\t\tFell\t9.58\t10.02\tPoint\t5165\t357\tBununu\tValid\tHowardite\t10.016670\t9.583330\t1942-01-01T00:00:00.000\n\t\tFell\t48.00\t5.00\tPoint\t5169\t120000\tBur-Gheluai\tValid\tH5\t5.000000\t48.000000\t1919-01-01T00:00:00.000\n36\t256\tFell\t-82.24\t37.62\tPoint\t5175\t1504\tBurnwell\tValid\tH4-an\t37.621940\t-82.237220\t1990-01-01T00:00:00.000\n\t\tFell\t29.23\t40.20\tPoint\t5177\t25000\tBursa\tValid\tL6\t40.200000\t29.233330\t1946-01-01T00:00:00.000\n\t\tFell\t25.78\t46.45\tPoint\t5178\t5000\tBuschhof\tValid\tL6\t46.450000\t25.783330\t1863-01-01T00:00:00.000\n\t\tFell\t82.83\t26.78\tPoint\t5181\t1500\tBustee\tValid\tAubrite\t26.783330\t82.833330\t1852-01-01T00:00:00.000\n\t\tFell\t84.08\t27.08\tPoint\t5183\t29000\tButsura\tValid\tH6\t27.083330\t84.083330\t1861-01-01T00:00:00.000\n\t\tFell\t-109.85\t53.00\tPoint\t48654\t41000\tBuzzard Coulee\tValid\tH4\t52.996000\t-109.848170\t2008-01-01T00:00:00.000\n\t\tFell\t-1.17\t37.98\tPoint\t5185\t25000\tCabezo de Mayo\tValid\tL/LL6\t37.983330\t-1.166670\t1870-01-01T00:00:00.000\n15\t1029\tFell\t-93.50\t35.50\tPoint\t5186\t48500\tCabin Creek\tValid\tIron, IIIAB\t35.500000\t-93.500000\t1886-01-01T00:00:00.000\n\t\tFell\t20.33\t43.84\tPoint\t5187\t212\tCacak\tValid\tOC\t43.838890\t20.333330\t1919-01-01T00:00:00.000\n\t\tFell\t-76.51\t3.40\tPoint\t45976\t478\tCali\tValid\tH/L4\t3.405000\t-76.510000\t2007-01-01T00:00:00.000\n\t\tFell\t122.33\t11.75\tPoint\t5200\t2400\tCalivo\tValid\tStone-uncl\t11.750000\t122.333330\t1916-01-01T00:00:00.000\n\t\tFell\t-40.17\t-7.03\tPoint\t5249\t23680\tCampos Sales\tValid\tL5\t-7.033330\t-40.166670\t1991-01-01T00:00:00.000\n\t\tFell\t26.60\t39.80\tPoint\t5250\t4000\tÇanakkale\tValid\tL6\t39.800000\t26.600000\t1964-01-01T00:00:00.000\n\t\tFell\t1.67\t41.25\tPoint\t5251\t945\tCañellas\tValid\tH4\t41.250000\t1.666670\t1861-01-01T00:00:00.000\n\t\tFell\t-5.15\t43.38\tPoint\t5252\t34000\tCangas de Onis\tValid\tH5\t43.383330\t-5.150000\t1866-01-01T00:00:00.000\n9\t1448\tFell\t-105.24\t38.47\tPoint\t5253\t1400\tCanon City\tValid\tH6\t38.470280\t-105.241390\t1973-01-01T00:00:00.000\n18\t2695\tFell\t-89.58\t37.27\tPoint\t5260\t2300\tCape Girardeau\tValid\tH6\t37.266670\t-89.583330\t1846-01-01T00:00:00.000\n\t\tFell\t-64.55\t-30.88\tPoint\t5264\t750\tCapilla del Monte\tValid\tH6\t-30.883330\t-64.550000\t1934-01-01T00:00:00.000\n\t\tFell\t-69.04\t-16.66\tPoint\t45817\t342\tCarancas\tValid\tH4-5\t-16.664440\t-69.043890\t2007-01-01T00:00:00.000\n\t\tFell\t27.00\t38.50\tPoint\t5265\t8\tCaratash\tValid\tLL6\t38.500000\t27.000000\t1902-01-01T00:00:00.000\n37\t648\tFell\t-78.07\t36.08\tPoint\t5291\t7300\tCastalia\tValid\tH5\t36.083330\t-78.066670\t1874-01-01T00:00:00.000\n\t\tFell\t11.50\t43.35\tPoint\t5292\t\tCastel Berardenga\tValid\tStone-uncl\t43.350000\t11.500000\t1791-01-01T00:00:00.000\n49\t414\tFell\t-68.75\t44.38\tPoint\t5293\t94\tCastine\tValid\tL6\t44.383330\t-68.750000\t1848-01-01T00:00:00.000\n\t\tFell\t16.20\t39.80\tPoint\t5295\t15000\tCastrovillari\tValid\tStone-uncl\t39.800000\t16.200000\t1583-01-01T00:00:00.000\n37\t637\tFell\t-79.25\t36.50\tPoint\t5296\t1360\tCaswell County\tValid\tOC\t36.500000\t-79.250000\t1810-01-01T00:00:00.000\n\t\tFell\t-105.23\t26.47\tPoint\t5306\t1025\tCeniceros\tValid\tL3.7\t26.466670\t-105.233330\t1988-01-01T00:00:00.000\n21\t2684\tFell\t-96.92\t43.20\tPoint\t5307\t45.6\tCenterville\tValid\tH5\t43.200000\t-96.916670\t1956-01-01T00:00:00.000\n\t\tFell\t8.30\t45.08\tPoint\t5308\t6460\tCereseto\tValid\tH5\t45.083330\t8.300000\t1840-01-01T00:00:00.000\n\t\tFell\t109.32\t28.53\tPoint\t5313\t3700\tChadong\tValid\tL6\t28.533330\t109.316670\t1998-01-01T00:00:00.000\n\t\tFell\t81.67\t25.37\tPoint\t5314\t0.5\tChail\tValid\tH6\t25.366670\t81.666670\t1814-01-01T00:00:00.000\n\t\tFell\t83.48\t25.85\tPoint\t5315\t8200\tChainpur\tValid\tLL3.4\t25.850000\t83.483330\t1907-01-01T00:00:00.000\n\t\tFell\t-58.05\t-30.78\tPoint\t5316\t18300\tChajari\tValid\tL5\t-30.783330\t-58.050000\t1933-01-01T00:00:00.000\n\t\tFell\t76.02\t20.27\tPoint\t5320\t8800\tChandakapur\tValid\tL5\t20.266670\t76.016670\t1838-01-01T00:00:00.000\n\t\tFell\t79.05\t27.28\tPoint\t5321\t1100\tChandpur\tValid\tL6\t27.283330\t79.050000\t1885-01-01T00:00:00.000\n\t\tFell\t111.75\t29.08\tPoint\t5322\t1810\tChangde\tValid\tH5\t29.083330\t111.750000\t1977-01-01T00:00:00.000\n\t\tFell\t1.05\t46.68\tPoint\t5325\t31500\tChantonnay\tValid\tL6\t46.683330\t1.050000\t1812-01-01T00:00:00.000\n39\t2007\tFell\t-87.33\t36.17\tPoint\t5328\t4300\tCharlotte\tValid\tIron, IVA\t36.166670\t-87.333330\t1835-01-01T00:00:00.000\n\t\tFell\t1.57\t47.93\tPoint\t5329\t27000\tCharsonville\tValid\tH6\t47.933330\t1.566670\t1810-01-01T00:00:00.000\n\t\tFell\t75.50\t29.48\tPoint\t5330\t12000\tCharwallas\tValid\tH6\t29.483330\t75.500000\t1834-01-01T00:00:00.000\n\t\tFell\t5.37\t47.72\tPoint\t5331\t4000\tChassigny\tValid\tMartian (chassignite)\t47.716670\t5.366670\t1815-01-01T00:00:00.000\n\t\tFell\t2.92\t47.93\tPoint\t5332\t30000\tChâteau-Renard\tValid\tL6\t47.933330\t2.916670\t1841-01-01T00:00:00.000\n\t\tFell\t-7.47\t41.93\tPoint\t5334\t2945\tChaves\tValid\tHowardite\t41.933330\t-7.466670\t1925-01-01T00:00:00.000\n\t\tFell\t32.50\t-3.67\tPoint\t5338\t2936\tChela\tValid\tH4\t-3.666670\t32.500000\t1988-01-01T00:00:00.000\n\t\tFell\t61.12\t54.82\tPoint\t57165\t100000\tChelyabinsk\tValid\tLL5\t54.816670\t61.116670\t2013-01-01T00:00:00.000\n\t\tFell\t-5.01\t23.70\tPoint\t47347\t100000\tChergach \tValid\tH5\t23.696390\t-5.014720\t2007-01-01T00:00:00.000\n\t\tFell\t30.10\t53.70\tPoint\t5339\t6000\tChernyi Bor\tValid\tH4\t53.700000\t30.100000\t1964-01-01T00:00:00.000\n33\t2582\tFell\t-81.88\t35.03\tPoint\t5340\t8400\tCherokee Springs\tValid\tLL6\t35.033330\t-81.883330\t1933-01-01T00:00:00.000\n\t\tFell\t6.82\t46.55\tPoint\t5341\t705\tChervettaz\tValid\tL5\t46.550000\t6.816670\t1901-01-01T00:00:00.000\n\t\tFell\t34.00\t50.83\tPoint\t5342\t1700\tChervony Kut\tValid\tEucrite-mmict\t50.833330\t34.000000\t1939-01-01T00:00:00.000\n\t\tFell\t76.50\t14.50\tPoint\t5344\t72\tChetrinahatti\tValid\tStone-uncl\t14.500000\t76.500000\t1880-01-01T00:00:00.000\n\t\tFell\t101.63\t17.90\tPoint\t5345\t367\tChiang Khan\tValid\tH6\t17.900000\t101.633330\t1981-01-01T00:00:00.000\n48\t2459\tFell\t-79.73\t40.93\tPoint\t5349\t303\tChicora\tValid\tLL6\t40.933330\t-79.733330\t1938-01-01T00:00:00.000\n\t\tFell\t33.40\t-10.06\tPoint\t5355\t3920\tChisenga\tValid\tIron, IIIAB\t-10.059440\t33.395000\t1988-01-01T00:00:00.000\n\t\tFell\t13.97\t-17.35\tPoint\t5356\t\tChitado\tValid\tL6\t-17.350000\t13.966670\t1966-01-01T00:00:00.000\n\t\tFell\t0.98\t47.47\tPoint\t5357\t4000\tChitenay\tValid\tL6\t47.470830\t0.976670\t1978-01-01T00:00:00.000\n\t\tFell\t108.10\t-6.95\tPoint\t5364\t1600\tCilimus\tValid\tL5\t-6.950000\t108.100000\t1979-01-01T00:00:00.000\n31\t67\tFell\t-81.87\t32.10\tPoint\t5374\t1455\tClaxton\tValid\tL6\t32.102500\t-81.872780\t1984-01-01T00:00:00.000\n\t\tFell\t\t\t\t5383\t48.6\tClohars\tValid\tL4\t\t\t1822-01-01T00:00:00.000\n41\t877\tFell\t-90.28\t44.90\tPoint\t5395\t104000\tColby (Wisconsin)\tValid\tL6\t44.900000\t-90.283330\t1917-01-01T00:00:00.000\n\t\tFell\t19.38\t-33.13\tPoint\t5397\t5200\tCold Bokkeveld\tValid\tCM2\t-33.133330\t19.383330\t1838-01-01T00:00:00.000\n50\t356\tFell\t-84.51\t43.76\tPoint\t5401\t469\tColeman\tValid\tL6\t43.761110\t-84.507780\t1994-01-01T00:00:00.000\n\t\tFell\t12.62\t42.53\tPoint\t5403\t5000\tCollescipoli\tValid\tH5\t42.533330\t12.616670\t1890-01-01T00:00:00.000\n\t\tFell\t-47.55\t-19.85\tPoint\t5418\t20350\tConquista\tValid\tH4\t-19.850000\t-47.550000\t1965-01-01T00:00:00.000\n\t\tFell\t-100.87\t21.17\tPoint\t5451\t1200\tCosina\tValid\tH5\t21.166670\t-100.866670\t1844-01-01T00:00:00.000\n\t\tFell\t76.27\t10.20\tPoint\t5465\t1460\tCranganore\tValid\tL6\t10.200000\t76.266670\t1917-01-01T00:00:00.000\n20\t2201\tFell\t-97.58\t35.95\tPoint\t5470\t78.400000000000006\tCrescent\tValid\tCM2\t35.950000\t-97.583330\t1936-01-01T00:00:00.000\n\t\tFell\t27.30\t-27.70\tPoint\t5474\t3650\tCronstad\tValid\tH5\t-27.700000\t27.300000\t1877-01-01T00:00:00.000\n37\t2332\tFell\t-78.13\t35.63\tPoint\t5476\t167\tCross Roads\tValid\tH5\t35.633330\t-78.133330\t1892-01-01T00:00:00.000\n\t\tFell\t-6.22\t54.62\tPoint\t5477\t4255\tCrumlin\tValid\tL5\t54.616670\t-6.216670\t1902-01-01T00:00:00.000\n36\t1426\tFell\t-84.35\t36.83\tPoint\t5496\t17000\tCumberland Falls\tValid\tAubrite\t36.833330\t-84.350000\t1919-01-01T00:00:00.000\n36\t244\tFell\t-84.25\t38.40\tPoint\t5500\t6000\tCynthiana\tValid\tL/LL4\t38.400000\t-84.250000\t1877-01-01T00:00:00.000\n\t\tFell\t8.83\t35.62\tPoint\t5504\t18000\tDahmani\tValid\tLL6\t35.616670\t8.833330\t1981-01-01T00:00:00.000\n\t\tFell\t83.97\t26.92\tPoint\t5511\t5650\tDandapur\tValid\tL6\t26.916670\t83.966670\t1878-01-01T00:00:00.000\n\t\tFell\t24.57\t-28.20\tPoint\t5513\t1064\tDaniel's Kuil\tValid\tEL6\t-28.200000\t24.566670\t1868-01-01T00:00:00.000\n29\t103\tFell\t-87.07\t34.40\tPoint\t5514\t2000\tDanville\tValid\tL6\t34.400000\t-87.066670\t1868-01-01T00:00:00.000\n\t\tFell\t8.65\t49.87\tPoint\t6603\t100\tDarmstadt\tValid\tH5\t49.866670\t8.650000\t1804-01-01T00:00:00.000\n\t\tFell\t59.69\t41.98\tPoint\t6604\t7000\tDashoguz\tValid\tH5\t41.984440\t59.685000\t1998-01-01T00:00:00.000\n\t\tFell\t-79.96\t-1.87\tPoint\t51559\t6580\tDaule\tValid\tL5\t-1.870890\t-79.957560\t2008-01-01T00:00:00.000\n\t\tFell\t-80.00\t43.00\tPoint\t6621\t340\tDe Cewsville\tValid\tH6\t43.000000\t-80.000000\t1887-01-01T00:00:00.000\n\t2491\tFell\t-74.00\t40.25\tPoint\t6634\t28\tDeal\tValid\tL6\t40.250000\t-74.000000\t1829-01-01T00:00:00.000\n\t\tFell\t77.25\t28.57\tPoint\t6642\t0.8\tDelhi\tValid\tL5\t28.566670\t77.250000\t1897-01-01T00:00:00.000\n\t\tFell\t84.77\t51.47\tPoint\t6649\t16400\tDemina\tValid\tL6\t51.466670\t84.766670\t1911-01-01T00:00:00.000\n9\t1444\tFell\t-104.93\t39.78\tPoint\t6660\t230\tDenver\tValid\tL6\t39.782500\t-104.930560\t1967-01-01T00:00:00.000\n\t\tFell\t93.87\t26.68\tPoint\t6664\t12500\tDergaon\tValid\tH5\t26.683330\t93.866670\t2001-01-01T00:00:00.000\n\t\tFell\t73.62\t25.73\tPoint\t6693\t25400\tDesuri\tValid\tH6\t25.733330\t73.616670\t1962-01-01T00:00:00.000\n\t\tFell\t81.00\t19.00\tPoint\t6694\t12000\tDevgaon\tValid\tH3.8\t19.000000\t81.000000\t2001-01-01T00:00:00.000\n\t\tFell\t76.53\t24.23\tPoint\t6696\t1140\tDevri-Khera\tValid\tL6\t24.225000\t76.525000\t1994-01-01T00:00:00.000\n\t\tFell\t71.43\t22.38\tPoint\t6698\t45000\tDhajala\tValid\tH3.8\t22.377780\t71.427220\t1976-01-01T00:00:00.000\n\t\tFell\t75.60\t14.88\tPoint\t6699\t1800\tDharwar\tValid\tOC\t14.883330\t75.600000\t1848-01-01T00:00:00.000\n\t\tFell\t76.47\t32.23\tPoint\t7640\t32000\tDhurmsala\tValid\tLL6\t32.233330\t76.466670\t1860-01-01T00:00:00.000\n\t\tFell\t27.33\t37.35\tPoint\t47350\t3396\tDidim\tValid\tH3-5\t37.351720\t27.329970\t2007-01-01T00:00:00.000\n\t\tFell\t18.57\t-33.75\tPoint\t7642\t1000\tDiep River\tValid\tL6\t-33.750000\t18.566670\t1906-01-01T00:00:00.000\n\t\tFell\t-60.47\t-31.88\tPoint\t7649\t400\tDistrito Quebracho\tValid\tH4\t-31.883330\t-60.466670\t1957-01-01T00:00:00.000\n\t\tFell\t111.50\t-7.50\tPoint\t7652\t166000\tDjati-Pengilon\tValid\tH6\t-7.500000\t111.500000\t1884-01-01T00:00:00.000\n\t\tFell\t15.05\t12.73\tPoint\t7656\t3950\tDjermaia\tValid\tH\t12.733330\t15.050000\t1961-01-01T00:00:00.000\n\t\tFell\t9.55\t36.95\tPoint\t7657\t10000\tDjoumine\tValid\tH5-6\t36.950000\t9.550000\t1999-01-01T00:00:00.000\n\t\tFell\t90.33\t23.50\tPoint\t7658\t3840\tDokachi\tValid\tH5\t23.500000\t90.333330\t1903-01-01T00:00:00.000\n\t\tFell\t25.30\t50.75\tPoint\t7659\t1600\tDolgovoli\tValid\tL6\t50.750000\t25.300000\t1864-01-01T00:00:00.000\n\t\tFell\t29.00\t40.00\tPoint\t7661\t438\tDomanitch\tValid\tL5\t40.000000\t29.000000\t1907-01-01T00:00:00.000\n\t\tFell\t119.03\t45.50\tPoint\t7706\t128800\tDong Ujimqin Qi\tValid\tMesosiderite\t45.500000\t119.033330\t1995-01-01T00:00:00.000\n\t\tFell\t82.45\t21.87\tPoint\t7707\t230\tDonga Kohrod\tValid\tH6\t21.866670\t82.450000\t1899-01-01T00:00:00.000\n\t\tFell\t120.78\t32.92\tPoint\t7708\t5500\tDongtai\tValid\tLL6\t32.916670\t120.783330\t1970-01-01T00:00:00.000\n\t\tFell\t112.30\t51.20\tPoint\t7718\t3891\tDoroninsk\tValid\tH5-7\t51.200000\t112.300000\t1805-01-01T00:00:00.000\n\t\tFell\t3.17\t13.05\tPoint\t7722\t1250\tDosso\tValid\tL6\t13.050000\t3.166670\t1962-01-01T00:00:00.000\n\t\tFell\t-6.30\t32.33\tPoint\t7723\t1161\tDouar Mghila\tValid\tLL6\t32.333330\t-6.300000\t1932-01-01T00:00:00.000\n\t\tFell\t33.92\t-13.67\tPoint\t7725\t642\tDowa\tValid\tStone-uncl\t-13.666670\t33.916670\t1976-01-01T00:00:00.000\n39\t2115\tFell\t-86.50\t36.40\tPoint\t7728\t5000\tDrake Creek\tValid\tL6\t36.400000\t-86.500000\t1827-01-01T00:00:00.000\n\t\tFell\t-82.26\t42.52\tPoint\t7731\t47700\tDresden (Ontario)\tValid\tH6\t42.520000\t-82.260000\t1939-01-01T00:00:00.000\n\t\tFell\t18.44\t42.46\tPoint\t7736\t1900\tDubrovnik\tValid\tL3-6\t42.458330\t18.441670\t1951-01-01T00:00:00.000\n\t\tFell\t152.83\t-31.67\tPoint\t7743\t30\tDunbogan\tValid\tL6\t-31.666670\t152.833330\t1999-01-01T00:00:00.000\n\t\tFell\t-8.03\t52.55\tPoint\t7745\t2270\tDundrum\tValid\tH5\t52.550000\t-8.033330\t1865-01-01T00:00:00.000\n\t\tFell\t128.25\t43.33\tPoint\t7749\t\tDunhua\tValid\tStone-uncl\t43.333330\t128.250000\t1976-01-01T00:00:00.000\n\t\tFell\t76.63\t30.30\tPoint\t7750\t13200\tDurala\tValid\tL6\t30.300000\t76.633330\t1815-01-01T00:00:00.000\n\t\tFell\t39.50\t-4.00\tPoint\t7752\t577\tDuruma\tValid\tL6\t-4.000000\t39.500000\t1853-01-01T00:00:00.000\n\t\tFell\t127.27\t33.43\tPoint\t7754\t2117\tDuwun\tValid\tL6\t33.433330\t127.266670\t1943-01-01T00:00:00.000\n\t\tFell\t31.32\t-27.20\tPoint\t7755\t3230\tDwaleni\tValid\tH4-6\t-27.200000\t31.316670\t1970-01-01T00:00:00.000\n\t\tFell\t82.00\t26.25\tPoint\t7757\t300\tDyalpur\tValid\tUreilite\t26.250000\t82.000000\t1872-01-01T00:00:00.000\n\t\tFell\t151.00\t-3.00\tPoint\t7758\t188\tDyarrl Island\tValid\tMesosiderite-A1\t-3.000000\t151.000000\t1933-01-01T00:00:00.000\n19\t462\tFell\t-96.47\t40.78\tPoint\t7760\t10000\tEagle\tValid\tEL6\t40.781670\t-96.471670\t1947-01-01T00:00:00.000\n\t\tFell\t15.83\t-17.30\tPoint\t7774\t2400\tEhole\tValid\tH5\t-17.300000\t15.833330\t1961-01-01T00:00:00.000\n\t\tFell\t11.22\t48.90\tPoint\t7775\t3000\tEichstädt\tValid\tH5\t48.900000\t11.216670\t1785-01-01T00:00:00.000\n\t\tFell\t13.00\t56.03\tPoint\t7776\t3336\tEkeby\tValid\tH4\t56.033330\t13.000000\t1939-01-01T00:00:00.000\n\t\tFell\t78.78\t28.27\tPoint\t7777\t840\tEkh Khera\tValid\tH6\t28.266670\t78.783330\t1916-01-01T00:00:00.000\n\t\tFell\t3.25\t34.42\tPoint\t7807\t10000\tEl Idrissia\tValid\tL6\t34.416670\t3.250000\t1989-01-01T00:00:00.000\n\t\tFell\t-97.37\t25.37\tPoint\t45977\t17226\tEl Paso de Aguila\tValid\tH5\t25.370000\t-97.370000\t1977-01-01T00:00:00.000\n\t\tFell\t-103.05\t19.97\tPoint\t7819\t5000\tEl Tigre\tValid\tL6\t19.967220\t-103.051670\t1993-01-01T00:00:00.000\n9\t88\tFell\t-104.59\t39.25\tPoint\t7822\t680.5\tElbert\tValid\tLL6\t39.246670\t-104.588170\t1998-01-01T00:00:00.000\n\t\tFell\t12.73\t50.18\tPoint\t7823\t107000\tElbogen\tValid\tIron, IID\t50.183330\t12.733330\t1400-01-01T00:00:00.000\n\t\tFell\t37.67\t47.83\tPoint\t7824\t54640\tElenovka\tValid\tL5\t47.833330\t37.666670\t1951-01-01T00:00:00.000\n\t\tFell\t4.00\t51.75\tPoint\t10019\t1470\tEllemeet\tValid\tDiogenite\t51.750000\t4.000000\t1925-01-01T00:00:00.000\n\t\tFell\t151.62\t-29.47\tPoint\t10033\t127\tEmmaville\tValid\tEucrite-mmict\t-29.466670\t151.616670\t1900-01-01T00:00:00.000\n\t\tFell\t109.50\t30.30\tPoint\t10038\t8000\tEnshi\tValid\tH5\t30.300000\t109.500000\t1974-01-01T00:00:00.000\n\t\tFell\t7.35\t47.87\tPoint\t10039\t127000\tEnsisheim\tValid\tLL6\t47.866670\t7.350000\t1492-01-01T00:00:00.000\n\t\tFell\t6.47\t48.18\tPoint\t10041\t277\tÉpinal\tValid\tH5\t48.183330\t6.466670\t1822-01-01T00:00:00.000\n\t\tFell\t81.89\t19.03\tPoint\t10042\t113\tErakot\tValid\tCM2\t19.033330\t81.891670\t1940-01-01T00:00:00.000\n\t\tFell\t44.50\t40.30\tPoint\t10043\t107.2\tErevan\tValid\tHowardite\t40.300000\t44.500000\t1911-01-01T00:00:00.000\n\t\tFell\t44.17\t1.17\tPoint\t10044\t20000\tErgheo\tValid\tL5\t1.166670\t44.166670\t1889-01-01T00:00:00.000\n\t\tFell\t11.25\t52.22\tPoint\t10049\t2250\tErxleben\tValid\tH6\t52.216670\t11.250000\t1812-01-01T00:00:00.000\n\t\tFell\t-1.10\t46.25\tPoint\t10051\t1500\tEsnandes\tValid\tL6\t46.250000\t-1.100000\t1837-01-01T00:00:00.000\n\t\tFell\t30.83\t2.88\tPoint\t10055\t500\tEssebi\tValid\tC2-ung\t2.883330\t30.833330\t1957-01-01T00:00:00.000\n16\t277\tFell\t-94.83\t43.42\tPoint\t10059\t320000\tEstherville\tValid\tMesosiderite-A3/4\t43.416670\t-94.833330\t1879-01-01T00:00:00.000\n17\t1300\tFell\t-97.03\t39.75\tPoint\t10074\t89400\tFarmington\tValid\tL5\t39.750000\t-97.033330\t1890-01-01T00:00:00.000\n37\t2439\tFell\t-77.53\t35.55\tPoint\t10075\t56000\tFarmville\tValid\tH4\t35.550000\t-77.533330\t1934-01-01T00:00:00.000\n\t\tFell\t2.82\t44.38\tPoint\t10078\t1500\tFavars\tValid\tH5\t44.383330\t2.816670\t1844-01-01T00:00:00.000\n15\t70\tFell\t-94.17\t36.05\tPoint\t10079\t2360\tFayetteville\tValid\tH4\t36.050000\t-94.166670\t1934-01-01T00:00:00.000\n\t\tFell\t8.45\t36.88\tPoint\t10080\t380\tFeid Chair\tValid\tH4\t36.883330\t8.450000\t1875-01-01T00:00:00.000\n29\t1631\tFell\t-87.17\t32.53\tPoint\t10081\t3200\tFelix\tValid\tCO3.3\t32.533330\t-87.166670\t1900-01-01T00:00:00.000\n\t\tFell\t116.75\t34.60\tPoint\t10086\t82\tFenghsien-Ku\tValid\tH5\t34.600000\t116.750000\t1924-01-01T00:00:00.000\n37\t2331\tFell\t-81.42\t36.10\tPoint\t10088\t220\tFerguson\tValid\tOC\t36.100000\t-81.416670\t1889-01-01T00:00:00.000\n\t\tFell\t13.75\t43.18\tPoint\t10091\t10200\tFermo\tValid\tH3-5\t43.181110\t13.753330\t1996-01-01T00:00:00.000\n1\t385\tFell\t-96.85\t47.82\tPoint\t10107\t17600\tFisher\tValid\tL6\t47.816670\t-96.850000\t1894-01-01T00:00:00.000\n23\t807\tFell\t-97.77\t30.83\tPoint\t10111\t3640\tFlorence\tValid\tH3\t30.833330\t-97.766670\t1922-01-01T00:00:00.000\n16\t1785\tFell\t-93.67\t43.25\tPoint\t10119\t152000\tForest City\tValid\tH5\t43.250000\t-93.666670\t1890-01-01T00:00:00.000\n\t\tFell\t146.86\t-33.35\tPoint\t10120\t26000\tForest Vale\tValid\tH4\t-33.350000\t146.858330\t1942-01-01T00:00:00.000\n40\t2839\tFell\t-78.08\t36.78\tPoint\t10123\t6067\tForksville\tValid\tL6\t36.783330\t-78.083330\t1924-01-01T00:00:00.000\n\t\tFell\t7.32\t50.95\tPoint\t10163\t240\tForsbach\tValid\tH6\t50.950000\t7.316670\t1900-01-01T00:00:00.000\n31\t1470\tFell\t-83.97\t33.02\tPoint\t10164\t16300\tForsyth\tValid\tL6\t33.016670\t-83.966670\t1829-01-01T00:00:00.000\n\t\tFell\t7.00\t28.25\tPoint\t10166\t\tFort Flatters\tValid\tStone-uncl\t28.250000\t7.000000\t1944-01-01T00:00:00.000\n29\t99\tFell\t-87.83\t34.48\tPoint\t10177\t650\tFrankfort (stone)\tValid\tHowardite\t34.483330\t-87.833330\t1868-01-01T00:00:00.000\n\t\tFell\t113.57\t31.48\tPoint\t52412\t23000\tFuhe\tValid\tL5\t31.475560\t113.566940\t1945-01-01T00:00:00.000\n\t\tFell\t130.20\t33.18\tPoint\t10836\t11620\tFukutomi\tValid\tL5\t33.183330\t130.200000\t1882-01-01T00:00:00.000\n\t\tFell\t10.33\t55.33\tPoint\t10838\t\tFünen\tValid\tStone-uncl\t55.333330\t10.333330\t1654-01-01T00:00:00.000\n\t\tFell\t80.82\t25.95\tPoint\t10839\t4000\tFuttehpur\tValid\tL6\t25.950000\t80.816670\t1822-01-01T00:00:00.000\n\t\tFell\t115.90\t32.90\tPoint\t10840\t2500\tFuyang\tValid\tStone-uncl\t32.900000\t115.900000\t1977-01-01T00:00:00.000\n\t\tFell\t0.40\t44.30\tPoint\t10846\t132.69999999999999\tGalapian\tValid\tH6\t44.300000\t0.400000\t1826-01-01T00:00:00.000\n\t\tFell\t12.43\t7.05\tPoint\t10848\t36.1\tGalim (a)\tValid\tLL6\t7.050000\t12.433330\t1952-01-01T00:00:00.000\n\t\tFell\t12.43\t7.05\tPoint\t10849\t28\tGalim (b)\tValid\tEH3/4-an\t7.050000\t12.433330\t1952-01-01T00:00:00.000\n\t\tFell\t30.78\t51.68\tPoint\t10850\t5000\tGalkiv\tValid\tH4\t51.683330\t30.783330\t1995-01-01T00:00:00.000\n\t\tFell\t68.53\t27.35\tPoint\t10851\t6400\tGambat\tValid\tL6\t27.350000\t68.533330\t1897-01-01T00:00:00.000\n\t\tFell\t-2.18\t11.65\tPoint\t10854\t\tGao-Guenie\tValid\tH5\t11.650000\t-2.183330\t1960-01-01T00:00:00.000\n\t\tFell\t68.53\t27.88\tPoint\t10860\t380\tGarhi Yasin\tValid\tIron, IIE\t27.883330\t68.533330\t1917-01-01T00:00:00.000\n13\t2985\tFell\t-112.13\t41.68\tPoint\t10861\t102\tGarland\tValid\tDiogenite-pm\t41.683330\t-112.133330\t1950-01-01T00:00:00.000\n\t\tFell\t11.03\t12.85\tPoint\t44882\t4162\tGashua\tValid\tL6\t12.850000\t11.033330\t1984-01-01T00:00:00.000\n\t\tFell\t-2.04\t14.15\tPoint\t10866\t\tGasseltepaoua\tValid\tH5\t14.150830\t-2.041670\t2000-01-01T00:00:00.000\n\t\tFell\t11.92\t12.92\tPoint\t10870\t725\tGeidam\tValid\tH5\t12.916670\t11.916670\t1950-01-01T00:00:00.000\n\t\tFell\t136.88\t35.53\tPoint\t10914\t14290\tGifu\tValid\tL6\t35.533330\t136.883330\t1909-01-01T00:00:00.000\n\t\tFell\t13.57\t37.32\tPoint\t10917\t18000\tGirgenti\tValid\tL6\t37.316670\t13.566670\t1853-01-01T00:00:00.000\n\t\tFell\t9.92\t9.60\tPoint\t10919\t480\tGit-Git\tValid\tL6\t9.600000\t9.916670\t1947-01-01T00:00:00.000\n\t\tFell\t6.87\t52.20\tPoint\t10923\t670\tGlanerbrug\tValid\tL/LL5\t52.200000\t6.866670\t1990-01-01T00:00:00.000\n\t\tFell\t107.70\t-7.25\tPoint\t10924\t1303\tGlanggang\tValid\tH5-6\t-7.250000\t107.700000\t1939-01-01T00:00:00.000\n\t\tFell\t37.62\t57.35\tPoint\t10926\t152000\tGlasatovo\tValid\tH4\t57.350000\t37.616670\t1918-01-01T00:00:00.000\n\t\tFell\t-0.30\t52.46\tPoint\t10930\t767\tGlatton\tValid\tL6\t52.459720\t-0.300000\t1991-01-01T00:00:00.000\n\t\tFell\t16.77\t50.67\tPoint\t10936\t1750\tGnadenfrei\tValid\tH5\t50.666670\t16.766670\t1879-01-01T00:00:00.000\n\t\tFell\t89.05\t24.23\tPoint\t10948\t1600\tGopalpur\tValid\tH6\t24.233330\t89.050000\t1865-01-01T00:00:00.000\n\t\tFell\t38.08\t48.28\tPoint\t10949\t3618\tGorlovka\tValid\tH3.7\t48.283330\t38.083330\t1974-01-01T00:00:00.000\n\t\tFell\t2.25\t42.90\tPoint\t10956\t9000\tGranes\tValid\tL6\t42.900000\t2.250000\t1964-01-01T00:00:00.000\n\t\tFell\t11.00\t60.67\tPoint\t11196\t45.5\tGrefsheim\tValid\tL5\t60.666670\t11.000000\t1976-01-01T00:00:00.000\n\t\tFell\t-79.62\t43.20\tPoint\t50911\t215\tGrimsby\tValid\tH5\t43.200000\t-79.616670\t2009-01-01T00:00:00.000\n\t\tFell\t45.38\t43.67\tPoint\t11206\t3500\tGrosnaja\tValid\tCV3\t43.666670\t45.383330\t1861-01-01T00:00:00.000\n\t\tFell\t18.72\t49.27\tPoint\t11207\t10500\tGross-Divina\tValid\tH5\t49.266670\t18.716670\t1837-01-01T00:00:00.000\n\t\tFell\t30.58\t46.35\tPoint\t11208\t8000\tGrossliebenthal\tValid\tL6\t46.350000\t30.583330\t1881-01-01T00:00:00.000\n\t\tFell\t15.50\t51.93\tPoint\t11426\t1000\tGrüneberg\tValid\tH4\t51.933330\t15.500000\t1841-01-01T00:00:00.000\n\t\tFell\t16.63\t52.87\tPoint\t11429\t690\tGrzempach\tValid\tH5\t52.866670\t16.633330\t1910-01-01T00:00:00.000\n\t\tFell\t-58.62\t-33.00\tPoint\t11432\t22000\tGualeguaychú\tValid\tH6\t-33.000000\t-58.616670\t1932-01-01T00:00:00.000\n\t\tFell\t122.76\t39.80\tPoint\t11435\t2910\tGuangmingshan\tValid\tH5\t39.804170\t122.763890\t1996-01-01T00:00:00.000\n\t\tFell\t105.00\t24.10\tPoint\t11436\t\tGuangnan\tValid\tL6\t24.100000\t105.000000\t1983-01-01T00:00:00.000\n\t\tFell\t118.40\t37.10\tPoint\t11437\t1900\tGuangrao\tValid\tL6\t37.100000\t118.400000\t1980-01-01T00:00:00.000\n\t\tFell\t-6.02\t38.73\tPoint\t11439\t39000\tGuareña\tValid\tH6\t38.733330\t-6.016670\t1892-01-01T00:00:00.000\n\t\tFell\t20.23\t43.77\tPoint\t11440\t1915\tGuêa\tValid\tStone-uncl\t43.766670\t20.233330\t1891-01-01T00:00:00.000\n\t\tFell\t-0.68\t13.50\tPoint\t11442\t288\tGuibga\tValid\tL5\t13.500000\t-0.683330\t1972-01-01T00:00:00.000\n\t\tFell\t13.98\t9.92\tPoint\t11443\t968\tGuidder\tValid\tLL5\t9.916670\t13.983330\t1949-01-01T00:00:00.000\n\t\tFell\t76.05\t22.98\tPoint\t11448\t2449\tGujargaon\tValid\tH5\t22.983330\t76.050000\t1982-01-01T00:00:00.000\n\t\tFell\t11.66\t11.49\tPoint\t11449\t100000\tGujba\tValid\tCBa\t11.491670\t11.658330\t1984-01-01T00:00:00.000\n\t\tFell\t24.70\t42.90\tPoint\t11450\t5700\tGumoschnik\tValid\tH5\t42.900000\t24.700000\t1904-01-01T00:00:00.000\n\t\tFell\t78.57\t13.78\tPoint\t11464\t28\tGurram Konda\tValid\tL6\t13.783330\t78.566670\t1814-01-01T00:00:00.000\n\t\tFell\t42.42\t9.37\tPoint\t11465\t34650\tGursum\tValid\tH4/5\t9.366670\t42.416670\t1981-01-01T00:00:00.000\n\t\tFell\t8.38\t51.92\tPoint\t11466\t1000\tGütersloh\tValid\tH3/4\t51.916670\t8.383330\t1851-01-01T00:00:00.000\n\t\tFell\t127.50\t35.00\tPoint\t11467\t1320\tGyokukei\tValid\tOC\t35.000000\t127.500000\t1930-01-01T00:00:00.000\n\t\tFell\t139.33\t35.65\tPoint\t11468\t0.2\tHachi-oji\tValid\tH?\t35.650000\t139.333330\t1817-01-01T00:00:00.000\n\t\tFell\t3.73\t50.32\tPoint\t11472\t9000\tHainaut\tValid\tH3-6\t50.316670\t3.733330\t1934-01-01T00:00:00.000\n\t\tFell\t16.23\t57.82\tPoint\t11479\t1456\tHallingeberg\tValid\tL3.4\t57.816670\t16.233330\t1944-01-01T00:00:00.000\n35\t1205\tFell\t-86.60\t41.38\tPoint\t11485\t3710\tHamlet\tValid\tLL4\t41.383330\t-86.600000\t1959-01-01T00:00:00.000\n\t\tFell\t82.53\t26.80\tPoint\t11824\t1000\tHaraiya\tValid\tEucrite-mmict\t26.800000\t82.533330\t1878-01-01T00:00:00.000\n\t\tFell\t75.78\t28.38\tPoint\t11829\t315\tHaripura\tValid\tCM2\t28.383330\t75.783330\t1921-01-01T00:00:00.000\n23\t2025\tFell\t-94.51\t32.67\tPoint\t11830\t8360\tHarleton\tValid\tL6\t32.675000\t-94.511670\t1961-01-01T00:00:00.000\n35\t1855\tFell\t-86.17\t38.25\tPoint\t11842\t680\tHarrison County\tValid\tL6\t38.250000\t-86.166670\t1859-01-01T00:00:00.000\n\t\tFell\t136.70\t35.29\tPoint\t11848\t1110.5999999999999\tHashima\tValid\tH4\t35.294500\t136.700330\t1910-01-01T00:00:00.000\n\t\tFell\t0.82\t28.95\tPoint\t11852\t1250\tHassi-Jekna\tValid\tIron, IAB-sHL\t28.950000\t0.816670\t1890-01-01T00:00:00.000\n\t\tFell\t-1.52\t51.65\tPoint\t11855\t29000\tHatford\tValid\tStone-uncl\t51.650000\t-1.516670\t1628-01-01T00:00:00.000\n\t\tFell\t22.06\t60.25\tPoint\t11859\t1544\tHaverö\tValid\tUreilite\t60.245560\t22.061940\t1971-01-01T00:00:00.000\n\t\tFell\t13.78\t55.47\tPoint\t11869\t3500\tHedeskoga\tValid\tH5\t55.466670\t13.783330\t1922-01-01T00:00:00.000\n\t\tFell\t35.67\t27.33\tPoint\t11870\t6100\tHedjaz\tValid\tL3.7-6\t27.333330\t35.666670\t1910-01-01T00:00:00.000\n\t\tFell\t-84.10\t10.00\tPoint\t11875\t1000\tHeredia\tValid\tH5\t10.000000\t-84.100000\t1857-01-01T00:00:00.000\n\t\tFell\t17.67\t59.85\tPoint\t11878\t20000\tHessle\tValid\tH5\t59.850000\t17.666670\t1869-01-01T00:00:00.000\n\t\tFell\t130.43\t33.60\tPoint\t11883\t750\tHigashi-koen\tValid\tH5\t33.600000\t130.433330\t1897-01-01T00:00:00.000\n\t\tFell\t-4.23\t55.90\tPoint\t11884\t4500\tHigh Possil\tValid\tL6\t55.900000\t-4.233330\t1804-01-01T00:00:00.000\n\t\tFell\t132.38\t34.45\tPoint\t11889\t414\tHiroshima\tValid\tH5\t34.450000\t132.383330\t2003-01-01T00:00:00.000\n\t\tFell\t31.47\t1.34\tPoint\t44714\t167.7\tHoima\tValid\tH6\t1.345000\t31.472780\t2003-01-01T00:00:00.000\n\t\tFell\t21.20\t64.43\tPoint\t11893\t305.5\tHökmark\tValid\tL4\t64.433330\t21.200000\t1954-01-01T00:00:00.000\n7\t990\tFell\t-110.18\t34.90\tPoint\t11894\t220000\tHolbrook\tValid\tL/LL6\t34.900000\t-110.183330\t1912-01-01T00:00:00.000\n\t\tFell\t38.42\t9.07\tPoint\t11895\t1415\tHoletta\tValid\tStone-uncl\t9.066670\t38.416670\t1923-01-01T00:00:00.000\n16\t284\tFell\t-91.87\t41.80\tPoint\t11901\t230000\tHomestead\tValid\tL5\t41.800000\t-91.866670\t1875-01-01T00:00:00.000\n4\t1657\tFell\t-157.87\t21.30\tPoint\t11904\t2420\tHonolulu\tValid\tL5\t21.300000\t-157.866670\t1825-01-01T00:00:00.000\n\t\tFell\t115.50\t35.67\tPoint\t11913\t180\tHotse\tValid\tL6\t35.666670\t115.500000\t1956-01-01T00:00:00.000\n17\t1293\tFell\t-100.45\t39.35\tPoint\t11915\t266.10000000000002\tHoxie\tValid\tOC\t39.350000\t-100.450000\t1963-01-01T00:00:00.000\n\t\tFell\t16.33\t46.10\tPoint\t11916\t49000\tHraschina\tValid\tIron, IID\t46.100000\t16.333330\t1751-01-01T00:00:00.000\n\t\tFell\t106.63\t26.46\tPoint\t54719\t1600\tHuaxi\tValid\tH5\t26.464690\t106.632410\t2010-01-01T00:00:00.000\n\t\tFell\t8.92\t50.30\tPoint\t11986\t112\tHungen\tValid\tH6\t50.300000\t8.916670\t1877-01-01T00:00:00.000\n\t\tFell\t22.68\t61.18\tPoint\t11989\t14000\tHvittis\tValid\tEL6\t61.183330\t22.683330\t1901-01-01T00:00:00.000\n\t\tFell\t7.70\t52.28\tPoint\t11992\t2000\tIbbenbüren\tValid\tDiogenite\t52.283330\t7.700000\t1870-01-01T00:00:00.000\n\t\tFell\t-45.00\t-20.00\tPoint\t11993\t2500\tIbitira\tValid\tEucrite-mmict\t-20.000000\t-45.000000\t1957-01-01T00:00:00.000\n\t\tFell\t35.00\t38.00\tPoint\t11994\t\tIbrisim\tValid\tOC\t38.000000\t35.000000\t1949-01-01T00:00:00.000\n\t\tFell\t82.93\t58.20\tPoint\t11995\t3973\tIchkala\tValid\tH6\t58.200000\t82.933330\t1936-01-01T00:00:00.000\n\t\tFell\t28.33\t-32.10\tPoint\t12000\t3457\tIdutywa\tValid\tH5\t-32.100000\t28.333330\t1956-01-01T00:00:00.000\n\t\tFell\t-51.83\t-23.20\tPoint\t12003\t1200\tIguaracu\tValid\tH5\t-23.200000\t-51.833330\t1977-01-01T00:00:00.000\n\t\tFell\t145.37\t-6.03\tPoint\t12004\t7330\tIjopega\tValid\tH6\t-6.033330\t145.366670\t1975-01-01T00:00:00.000\n\t\tFell\t46.67\t39.75\tPoint\t12027\t27000\tIndarch\tValid\tEH4\t39.750000\t46.666670\t1891-01-01T00:00:00.000\n18\t525\tFell\t-94.40\t39.08\tPoint\t12028\t880\tIndependence\tValid\tL6\t39.083330\t-94.400000\t1917-01-01T00:00:00.000\n\t\tFell\t112.00\t41.00\tPoint\t12037\t3000\tInner Mongolia\tValid\tL6\t41.000000\t112.000000\t1963-01-01T00:00:00.000\n\t\tFell\t-111.34\t53.41\tPoint\t12039\t4576\tInnisfree\tValid\tL5\t53.415000\t-111.337500\t1977-01-01T00:00:00.000\n\t\tFell\t-54.50\t-25.50\tPoint\t12043\t7000\tIpiranga\tValid\tH6\t-25.500000\t-54.500000\t1972-01-01T00:00:00.000\n\t\tFell\t33.80\t-8.93\tPoint\t12049\t1300\tIshinga\tValid\tH\t-8.933330\t33.800000\t1954-01-01T00:00:00.000\n\t\tFell\t-57.95\t-31.18\tPoint\t12053\t3050\tIsthilart\tValid\tH5\t-31.183330\t-57.950000\t1928-01-01T00:00:00.000\n\t\tFell\t-44.33\t-3.40\tPoint\t12056\t2024\tItapicuru-Mirim\tValid\tH5\t-3.400000\t-44.333330\t1879-01-01T00:00:00.000\n\t\tFell\t-12.95\t26.59\tPoint\t12058\t4720\tItqiy\tValid\tEH7-an\t26.590830\t-12.952170\t1990-01-01T00:00:00.000\n\t\tFell\t32.43\t-8.42\tPoint\t12063\t704.5\tIvuna\tValid\tCI1\t-8.416670\t32.433330\t1938-01-01T00:00:00.000\n\t\tFell\t21.90\t-32.50\tPoint\t12065\t48000\tJackalsfontein\tValid\tL6\t-32.500000\t21.900000\t1903-01-01T00:00:00.000\n\t\tFell\t68.42\t26.75\tPoint\t12067\t973\tJajh deh Kot Lalu\tValid\tEL6\t26.750000\t68.416670\t1926-01-01T00:00:00.000\n\t\tFell\t\t\t\t12068\t700\tJalanash\tValid\tUreilite\t\t\t1990-01-01T00:00:00.000\n\t\tFell\t75.00\t31.00\tPoint\t12069\t1967\tJalandhar\tValid\tIron\t31.000000\t75.000000\t1621-01-01T00:00:00.000\n\t\tFell\t75.33\t18.75\tPoint\t12072\t22\tJamkheir\tValid\tH6\t18.750000\t75.333330\t1866-01-01T00:00:00.000\n\t\tFell\t105.80\t39.70\tPoint\t12074\t20500\tJartai\tValid\tL6\t39.700000\t105.800000\t1979-01-01T00:00:00.000\n\t\tFell\t20.44\t43.83\tPoint\t12078\t34000\tJelica\tValid\tLL6\t43.833330\t20.441670\t1889-01-01T00:00:00.000\n\t\tFell\t\t\t\t12079\t450\tJemlapur\tValid\tL6\t\t\t1901-01-01T00:00:00.000\n\t\tFell\t14.05\t46.42\tPoint\t51589\t3667\tJesenice\tValid\tL6\t46.421370\t14.052170\t2009-01-01T00:00:00.000\n\t\tFell\t72.38\t31.30\tPoint\t12085\t5900\tJhung\tValid\tL5\t31.300000\t72.383330\t1873-01-01T00:00:00.000\n\t\tFell\t104.92\t31.92\tPoint\t12086\t222\tJiange\tValid\tH5\t31.916670\t104.916670\t1964-01-01T00:00:00.000\n\t\tFell\t109.50\t30.81\tPoint\t12087\t600000\tJianshi\tValid\tIron, IIIAB\t30.808330\t109.500000\t1890-01-01T00:00:00.000\n\t\tFell\t126.17\t44.05\tPoint\t12171\t4000000\tJilin\tValid\tH5\t44.050000\t126.166670\t1976-01-01T00:00:00.000\n\t\tFell\t70.31\t22.68\tPoint\t47362\t100\tJodiya\tValid\tL5\t22.680000\t70.313330\t2006-01-01T00:00:00.000\n\t\tFell\t24.40\t55.70\tPoint\t12173\t30\tJodzie\tValid\tHowardite\t55.700000\t24.400000\t1877-01-01T00:00:00.000\n9\t1072\tFell\t-104.90\t40.35\tPoint\t12198\t40300\tJohnstown\tValid\tDiogenite\t40.350000\t-104.900000\t1924-01-01T00:00:00.000\n\t\tFell\t15.83\t-11.85\tPoint\t12199\t483\tJolomba\tValid\tLL6\t-11.850000\t15.833330\t1974-01-01T00:00:00.000\n\t\tFell\t-0.45\t45.43\tPoint\t12202\t5000\tJonzac\tValid\tEucrite-mmict\t45.433330\t-0.450000\t1819-01-01T00:00:00.000\n\t\tFell\t115.42\t35.50\tPoint\t12203\t100000\tJuancheng\tValid\tH5\t35.500000\t115.416670\t1997-01-01T00:00:00.000\n\t\tFell\t76.80\t12.85\tPoint\t12207\t680\tJudesegeri\tValid\tH6\t12.850000\t76.800000\t1876-01-01T00:00:00.000\n\t\tFell\t111.20\t-7.72\tPoint\t12209\t32490\tJumapalo\tValid\tL6\t-7.716670\t111.200000\t1984-01-01T00:00:00.000\n\t\tFell\t118.80\t35.20\tPoint\t12210\t950\tJunan\tValid\tL6\t35.200000\t118.800000\t1976-01-01T00:00:00.000\n\t\tFell\t-7.27\t38.74\tPoint\t12213\t25250\tJuromenha\tValid\tIron, IIIAB\t38.740280\t-7.270000\t1968-01-01T00:00:00.000\n\t\tFell\t4.30\t44.72\tPoint\t12214\t91000\tJuvinas\tValid\tEucrite-mmict\t44.716670\t4.300000\t1821-01-01T00:00:00.000\n\t\tFell\t21.30\t47.35\tPoint\t12218\t3000\tKaba\tValid\tCV3\t47.350000\t21.300000\t1857-01-01T00:00:00.000\n\t\tFell\t8.22\t11.85\tPoint\t12220\t13400\tKabo\tValid\tH4\t11.850000\t8.216670\t1971-01-01T00:00:00.000\n\t\tFell\t78.33\t27.08\tPoint\t12221\t89\tKadonah\tValid\tH6\t27.083330\t78.333330\t1822-01-01T00:00:00.000\n\t\tFell\t79.97\t27.25\tPoint\t12222\t230\tKaee\tValid\tH5\t27.250000\t79.966670\t1838-01-01T00:00:00.000\n\t\tFell\t30.83\t49.87\tPoint\t12227\t1900\tKagarlyk\tValid\tL6\t49.866670\t30.833330\t1908-01-01T00:00:00.000\n\t\tFell\t48.30\t15.00\tPoint\t12228\t2000\tKaidun\tValid\tCR2\t15.000000\t48.300000\t1980-01-01T00:00:00.000\n\t\tFell\t53.25\t55.43\tPoint\t12229\t200000\tKainsaz\tValid\tCO3.2\t55.433330\t53.250000\t1937-01-01T00:00:00.000\n\t\tFell\t78.52\t12.38\tPoint\t12230\t350\tKakangari\tValid\tK3\t12.383330\t78.516670\t1890-01-01T00:00:00.000\n\t\tFell\t21.67\t45.13\tPoint\t12231\t577\tKakowa\tValid\tL6\t45.133330\t21.666670\t1858-01-01T00:00:00.000\n\t\tFell\t29.50\t-6.83\tPoint\t12232\t950\tKalaba\tValid\tH4\t-6.833330\t29.500000\t1951-01-01T00:00:00.000\n\t\tFell\t73.98\t17.83\tPoint\t12236\t4500\tKalumbi\tValid\tL6\t17.833330\t73.983330\t1879-01-01T00:00:00.000\n\t\tFell\t81.47\t26.03\tPoint\t12238\t2770\tKamalpur\tValid\tL6\t26.033330\t81.466670\t1942-01-01T00:00:00.000\n\t\tFell\t139.96\t36.04\tPoint\t12240\t448\tKamiomi\tValid\tH5\t36.041670\t139.956670\t1913-01-01T00:00:00.000\n\t\tFell\t75.80\t14.18\tPoint\t12241\t1293\tKamsagar\tValid\tL6\t14.183330\t75.800000\t1902-01-01T00:00:00.000\n\t\tFell\t65.78\t31.60\tPoint\t12243\t299\tKandahar (Afghanistan)\tValid\tL6\t31.600000\t65.783330\t1959-01-01T00:00:00.000\n\t\tFell\t115.50\t-7.00\tPoint\t12245\t1630\tKangean\tValid\tH5\t-7.000000\t115.500000\t1908-01-01T00:00:00.000\n\t\tFell\t76.30\t32.08\tPoint\t12246\t400\tKangra Valley\tValid\tH5\t32.083330\t76.300000\t1897-01-01T00:00:00.000\n\t\tFell\t33.63\t4.70\tPoint\t12251\t11355\tKapoeta\tValid\tHowardite\t4.700000\t33.633330\t1942-01-01T00:00:00.000\n\t\tFell\t73.22\t20.34\tPoint\t47357\t1600\tKaprada\tValid\tL5/6\t20.339160\t73.223290\t2004-01-01T00:00:00.000\n\t\tFell\t73.37\t42.45\tPoint\t12253\t3500\tKaptal-Aryk\tValid\tL6\t42.450000\t73.366670\t1937-01-01T00:00:00.000\n\t\tFell\t81.02\t47.22\tPoint\t12256\t3000\tKarakol\tValid\tLL6\t47.216670\t81.016670\t1840-01-01T00:00:00.000\n\t\tFell\t35.58\t-3.50\tPoint\t12258\t2220\tKaratu\tValid\tLL6\t-3.500000\t35.583330\t1963-01-01T00:00:00.000\n\t\tFell\t7.15\t12.90\tPoint\t12260\t180\tKarewar\tValid\tL6\t12.900000\t7.150000\t1949-01-01T00:00:00.000\n\t\tFell\t67.17\t27.80\tPoint\t12262\t22000\tKarkh\tValid\tL6\t27.800000\t67.166670\t1905-01-01T00:00:00.000\n\t\tFell\t71.60\t31.58\tPoint\t12263\t2950\tKarloowala\tValid\tL6\t31.583330\t71.600000\t1955-01-01T00:00:00.000\n\t\tFell\t139.92\t-35.08\tPoint\t12264\t41730\tKaroonda\tValid\tCK4\t-35.083330\t139.916670\t1930-01-01T00:00:00.000\n\t\tFell\t136.77\t35.37\tPoint\t12266\t710\tKasamatsu\tValid\tH\t35.366670\t136.766670\t1938-01-01T00:00:00.000\n\t\tFell\t77.58\t29.58\tPoint\t30740\t16820\tKasauli\tValid\tH4\t29.583330\t77.583330\t2003-01-01T00:00:00.000\n\t\tFell\t10.08\t11.33\tPoint\t35465\t1500\tKatagum\tValid\tL6\t11.333330\t10.083330\t1999-01-01T00:00:00.000\n\t\tFell\t75.81\t25.14\tPoint\t47351\t6800\tKavarpura\tValid\tIron, IIE-an\t25.143330\t75.813330\t2006-01-01T00:00:00.000\n\t\tFell\t31.78\t39.26\tPoint\t12268\t85000\tKayakent\tValid\tIron, IIIAB\t39.263330\t31.780000\t1961-01-01T00:00:00.000\n\t\tFell\t112.02\t-7.75\tPoint\t12270\t3300\tKediri\tValid\tL4\t-7.750000\t112.016670\t1940-01-01T00:00:00.000\n\t\tFell\t29.42\t36.54\tPoint\t53654\t5760\tKemer\tValid\tL4\t36.541940\t29.418220\t2008-01-01T00:00:00.000\n23\t3190\tFell\t-96.00\t29.45\tPoint\t12275\t6937\tKendleton\tValid\tL4\t29.450000\t-96.000000\t1939-01-01T00:00:00.000\n\t\tFell\t86.70\t20.46\tPoint\t12276\t6669.2\tKendrapara\tValid\tH4-5\t20.462500\t86.702780\t2003-01-01T00:00:00.000\n\t\tFell\t-3.30\t48.40\tPoint\t12282\t5000\tKerilis\tValid\tH5\t48.400000\t-3.300000\t1874-01-01T00:00:00.000\n\t\tFell\t-3.08\t48.12\tPoint\t12284\t80000\tKernouve\tValid\tH6\t48.116670\t-3.083330\t1869-01-01T00:00:00.000\n\t\tFell\t141.62\t38.98\tPoint\t12286\t135000\tKesen\tValid\tH4\t38.983330\t141.616670\t1850-01-01T00:00:00.000\n\t\tFell\t72.30\t29.53\tPoint\t12288\t13600\tKhairpur\tValid\tEL6\t29.533330\t72.300000\t1873-01-01T00:00:00.000\n\t\tFell\t83.12\t25.55\tPoint\t12289\t3698\tKhanpur\tValid\tLL5\t25.550000\t83.116670\t1932-01-01T00:00:00.000\n\t\tFell\t35.08\t50.62\tPoint\t12291\t1500\tKharkov\tValid\tL6\t50.625000\t35.075000\t1787-01-01T00:00:00.000\n\t\tFell\t77.88\t26.95\tPoint\t12294\t450\tKheragur\tValid\tL6\t26.950000\t77.883330\t1860-01-01T00:00:00.000\n\t\tFell\t75.82\t28.02\tPoint\t12296\t100\tKhetri\tValid\tH6\t28.016670\t75.816670\t1867-01-01T00:00:00.000\n\t\tFell\t75.33\t56.75\tPoint\t12297\t6109\tKhmelevka\tValid\tL5\t56.750000\t75.333330\t1929-01-01T00:00:00.000\n\t\tFell\t81.53\t25.10\tPoint\t12298\t9700\tKhohar\tValid\tL3.6\t25.100000\t81.533330\t1910-01-01T00:00:00.000\n\t\tFell\t36.00\t16.00\tPoint\t12299\t3200\tKhor Temiki\tValid\tAubrite\t16.000000\t36.000000\t1932-01-01T00:00:00.000\n\t\tFell\t28.00\t14.00\tPoint\t12300\t100000\tKidairat\tValid\tH6\t14.000000\t28.000000\t1983-01-01T00:00:00.000\n\t\tFell\t10.15\t54.40\tPoint\t12301\t737.6\tKiel\tValid\tL6\t54.400000\t10.150000\t1962-01-01T00:00:00.000\n\t\tFell\t-11.33\t16.58\tPoint\t12303\t1500\tKiffa\tValid\tH5\t16.583330\t-11.333330\t1970-01-01T00:00:00.000\n\t\tFell\t138.38\t36.85\tPoint\t12305\t331\tKijima (1906)\tValid\tStone-uncl\t36.850000\t138.383330\t1906-01-01T00:00:00.000\n\t\tFell\t34.00\t55.00\tPoint\t12306\t195\tKikino\tValid\tH6\t55.000000\t34.000000\t1809-01-01T00:00:00.000\n\t\tFell\t9.80\t12.77\tPoint\t12307\t19000\tKilabo\tValid\tLL6\t12.766670\t9.800000\t2002-01-01T00:00:00.000\n41\t2971\tFell\t-89.60\t43.58\tPoint\t12308\t772\tKilbourn\tValid\tH5\t43.583330\t-89.600000\t1911-01-01T00:00:00.000\n\t\tFell\t-7.67\t54.67\tPoint\t12309\t140\tKilleter\tValid\tH6\t54.666670\t-7.666670\t1844-01-01T00:00:00.000\n\t\tFell\t24.68\t11.63\tPoint\t12316\t67.400000000000006\tKingai\tValid\tH6\t11.633330\t24.683330\t1967-01-01T00:00:00.000\n23\t2018\tFell\t-95.95\t30.75\tPoint\t12321\t97.7\tKirbyville\tValid\tEucrite-mmict\t30.750000\t-95.950000\t1906-01-01T00:00:00.000\n\t\tFell\t22.31\t48.17\tPoint\t12325\t1550\tKisvarsány\tValid\tL6\t48.166670\t22.308330\t1914-01-01T00:00:00.000\n\t\tFell\t-80.38\t43.38\tPoint\t12326\t202.6\tKitchener\tValid\tL6\t43.383330\t-80.383330\t1998-01-01T00:00:00.000\n\t\tFell\t10.80\t51.60\tPoint\t12332\t3250\tKlein-Wenden\tValid\tH6\t51.600000\t10.800000\t1843-01-01T00:00:00.000\n\t\tFell\t22.40\t48.90\tPoint\t12335\t500000\tKnyahinya\tValid\tL/LL5\t48.900000\t22.400000\t1866-01-01T00:00:00.000\n\t\tFell\t135.17\t34.73\tPoint\t12336\t136\tKobe\tValid\tCK4\t34.733330\t135.166670\t1999-01-01T00:00:00.000\n\t\tFell\t133.95\t34.30\tPoint\t12342\t11510\tKokubunji\tValid\tL6\t34.300000\t133.950000\t1986-01-01T00:00:00.000\n\t\tFell\t139.75\t35.73\tPoint\t12343\t238\tKomagome\tValid\tIron\t35.733330\t139.750000\t1926-01-01T00:00:00.000\n\t\tFell\t26.17\t42.52\tPoint\t12344\t90\tKonovo\tValid\tLL5\t42.516670\t26.166670\t1931-01-01T00:00:00.000\n\t\tFell\t21.18\t48.76\tPoint\t53810\t4300\tKošice\tValid\tH5\t48.763670\t21.176330\t2010-01-01T00:00:00.000\n\t\tFell\t7.46\t49.33\tPoint\t12353\t16500\tKrähenberg\tValid\tLL5\t49.326940\t7.464720\t1869-01-01T00:00:00.000\n\t\tFell\t40.90\t54.03\tPoint\t12355\t2440\tKrasnoi-Ugol\tValid\tL6\t54.033330\t40.900000\t1829-01-01T00:00:00.000\n\t\tFell\t56.08\t54.33\tPoint\t12357\t4000\tKrasnyi Klyuch\tValid\tH5\t54.333330\t56.083330\t1946-01-01T00:00:00.000\n\t\tFell\t77.00\t56.80\tPoint\t12363\t845.2\tKrutikha\tValid\tOC\t56.800000\t77.000000\t1906-01-01T00:00:00.000\n\t\tFell\t30.77\t47.83\tPoint\t12364\t50000\tKrymka\tValid\tLL3.2\t47.833330\t30.766670\t1946-01-01T00:00:00.000\n\t\tFell\t31.70\t51.15\tPoint\t12368\t2250\tKukschin\tValid\tL6\t51.150000\t31.700000\t1938-01-01T00:00:00.000\n\t\tFell\t66.80\t30.73\tPoint\t12369\t453.6\tKulak\tValid\tL5\t30.731110\t66.802220\t1961-01-01T00:00:00.000\n\t\tFell\t33.50\t50.75\tPoint\t12370\t6000\tKuleschovka\tValid\tL6\t50.750000\t33.500000\t1811-01-01T00:00:00.000\n\t\tFell\t45.00\t41.12\tPoint\t12373\t3719\tKulp\tValid\tH6\t41.116670\t45.000000\t1906-01-01T00:00:00.000\n\t\tFell\t61.37\t55.78\tPoint\t12377\t200000\tKunashak\tValid\tL6\t55.783330\t61.366670\t1949-01-01T00:00:00.000\n\t\tFell\t59.20\t42.25\tPoint\t12379\t1100000\tKunya-Urgench\tValid\tH5\t42.250000\t59.200000\t1998-01-01T00:00:00.000\n\t\tFell\t138.38\t37.05\tPoint\t12381\t4460\tKushiike\tValid\tOC\t37.050000\t138.383330\t1920-01-01T00:00:00.000\n\t\tFell\t78.38\t29.68\tPoint\t12382\t5\tKusiali\tValid\tL6\t29.683330\t78.383330\t1860-01-01T00:00:00.000\n\t\tFell\t39.30\t44.52\tPoint\t12383\t23\tKutais\tValid\tH5\t44.516670\t39.300000\t1977-01-01T00:00:00.000\n\t\tFell\t76.03\t10.83\tPoint\t12384\t45000\tKuttippuram\tValid\tL6\t10.833330\t76.033330\t1914-01-01T00:00:00.000\n\t\tFell\t75.33\t55.20\tPoint\t12385\t4047\tKuznetzovo\tValid\tL6\t55.200000\t75.333330\t1932-01-01T00:00:00.000\n\t\tFell\t130.63\t32.03\tPoint\t12390\t45000\tKyushu\tValid\tL6\t32.033330\t130.633330\t1886-01-01T00:00:00.000\n\t\tFell\t1.75\t47.08\tPoint\t12392\t2800\tLa Bécasse\tValid\tL6\t47.083330\t1.750000\t1879-01-01T00:00:00.000\n\t\tFell\t-101.28\t20.67\tPoint\t12394\t399\tLa Charca\tValid\tOC\t20.666670\t-101.283330\t1878-01-01T00:00:00.000\n\t\tFell\t-61.53\t-37.33\tPoint\t12395\t2000\tLa Colina\tValid\tH5\t-37.333330\t-61.533330\t1924-01-01T00:00:00.000\n\t\tFell\t-58.17\t-31.23\tPoint\t12396\t45000\tLa Criolla\tValid\tL6\t-31.233330\t-58.166670\t1985-01-01T00:00:00.000\n\t\tFell\t5.58\t44.28\tPoint\t12408\t3833\tLaborel\tValid\tH5\t44.283330\t5.583330\t1871-01-01T00:00:00.000\n\t\tFell\t82.72\t26.78\tPoint\t12433\t900\tLahrauli\tValid\tUreilite\t26.783330\t82.716670\t1955-01-01T00:00:00.000\n\t\tFell\t0.63\t48.77\tPoint\t12434\t37000\tL'Aigle\tValid\tL6\t48.766670\t0.633330\t1803-01-01T00:00:00.000\n\t\tFound\t\t\t\t32531\t9.6\tCumulus Hills 04075\tValid\tPallasite\t\t\t2003-01-01T00:00:00.000\n\t\tFell\t76.03\t21.87\tPoint\t12435\t212.5\tLakangaon\tValid\tEucrite-mmict\t21.866670\t76.033330\t1910-01-01T00:00:00.000\n\t\tFell\t78.57\t24.45\tPoint\t12451\t372\tLalitpur\tValid\tL6\t24.450000\t78.566670\t1887-01-01T00:00:00.000\n\t\tFell\t1.07\t47.70\tPoint\t12455\t51700\tLancé\tValid\tCO3.5\t47.700000\t1.066670\t1872-01-01T00:00:00.000\n\t\tFell\t5.12\t43.75\tPoint\t12456\t7000\tLancon\tValid\tH6\t43.750000\t5.116670\t1897-01-01T00:00:00.000\n\t\tFell\t16.73\t58.85\tPoint\t12461\t2300\tLånghalsen\tValid\tL6\t58.850000\t16.733330\t1947-01-01T00:00:00.000\n\t\tFell\t126.20\t46.24\tPoint\t12464\t1282\tLanxi\tValid\tL6\t46.241670\t126.196110\t1986-01-01T00:00:00.000\n\t\tFell\t16.23\t47.75\tPoint\t12465\t7000\tLanzenkirchen\tValid\tL4\t47.750000\t16.233330\t1925-01-01T00:00:00.000\n\t\tFell\t115.17\t33.13\tPoint\t12466\t14250\tLaochenzhen\tValid\tH5\t33.133330\t115.166670\t1987-01-01T00:00:00.000\n\t\tFell\t-1.12\t51.90\tPoint\t12740\t1060\tLaunton\tValid\tL6\t51.900000\t-1.116670\t1830-01-01T00:00:00.000\n\t\tFell\t51.57\t52.45\tPoint\t12743\t800\tLavrentievka\tValid\tL6\t52.450000\t51.566670\t1938-01-01T00:00:00.000\n\t\tFell\t0.43\t47.17\tPoint\t12748\t3000\tLe Pressoir\tValid\tH5\t47.166670\t0.433330\t1845-01-01T00:00:00.000\n\t\tFell\t-0.87\t48.53\tPoint\t12749\t780\tLe Teilleul\tValid\tHowardite\t48.533330\t-0.866670\t1845-01-01T00:00:00.000\n20\t608\tFell\t-99.33\t35.88\tPoint\t12755\t51500\tLeedey\tValid\tL6\t35.883330\t-99.333330\t1943-01-01T00:00:00.000\n\t\tFell\t28.37\t-25.67\tPoint\t12756\t460\tLeeuwfontein\tValid\tL6\t-25.666670\t28.366670\t1912-01-01T00:00:00.000\n\t\tFell\t-6.97\t52.67\tPoint\t12759\t271.39999999999998\tLeighlinbridge\tValid\tL6\t52.666670\t-6.966670\t1999-01-01T00:00:00.000\n29\t1585\tFell\t-87.50\t34.58\tPoint\t12760\t877\tLeighton\tValid\tH5\t34.583330\t-87.500000\t1907-01-01T00:00:00.000\n\t\tFell\t32.85\t52.27\tPoint\t12765\t700\tLeonovka\tValid\tL6\t52.266670\t32.850000\t1900-01-01T00:00:00.000\n\t\tFell\t3.25\t48.35\tPoint\t12769\t125\tLes Ormes\tValid\tL6\t48.350000\t3.250000\t1857-01-01T00:00:00.000\n\t\tFell\t4.73\t50.37\tPoint\t12772\t2000\tLesves\tValid\tL6\t50.366670\t4.733330\t1896-01-01T00:00:00.000\n\t\tFell\t26.18\t-26.15\tPoint\t14646\t4000\tLichtenberg\tValid\tH6\t-26.150000\t26.183330\t1973-01-01T00:00:00.000\n\t\tFell\t15.87\t56.65\tPoint\t14650\t6862\tLillaverke\tValid\tH5\t56.650000\t15.866670\t1930-01-01T00:00:00.000\n\t\tFell\t-8.78\t52.57\tPoint\t14652\t50000\tLimerick\tValid\tH5\t52.566670\t-8.783330\t1813-01-01T00:00:00.000\n\t\tFell\t12.90\t52.75\tPoint\t14655\t1862\tLinum\tValid\tL6\t52.750000\t12.900000\t1854-01-01T00:00:00.000\n\t\tFell\t118.98\t31.63\tPoint\t14659\t498\tLishui\tValid\tL5\t31.633330\t118.983330\t1978-01-01T00:00:00.000\n\t\tFell\t14.85\t50.20\tPoint\t14661\t12800\tLissa\tValid\tL6\t50.200000\t14.850000\t1808-01-01T00:00:00.000\n18\t2171\tFell\t-92.08\t37.92\tPoint\t14664\t491\tLittle Piney\tValid\tL5\t37.916670\t-92.083330\t1839-01-01T00:00:00.000\n\t\tFell\t26.43\t56.00\tPoint\t14670\t5213\tLixna\tValid\tH4\t56.000000\t26.433330\t1820-01-01T00:00:00.000\n\t\tFell\t71.80\t29.53\tPoint\t14675\t1000\tLodran\tValid\tLodranite\t29.533330\t71.800000\t1868-01-01T00:00:00.000\n\t\tFell\t72.63\t26.97\tPoint\t14678\t40000\tLohawat\tValid\tHowardite\t26.965560\t72.626670\t1994-01-01T00:00:00.000\n40\t2770\tFell\t-77.21\t38.70\tPoint\t52843\t329.7\tLorton\tValid\tL6\t38.700660\t-77.211630\t2010-01-01T00:00:00.000\n\t\tFell\t-0.83\t38.00\tPoint\t14708\t25\tLos Martinez\tValid\tL6\t38.000000\t-0.833330\t1894-01-01T00:00:00.000\n20\t2711\tFell\t-95.15\t36.01\tPoint\t14711\t17000\tLost City\tValid\tH5\t36.008330\t-95.150000\t1970-01-01T00:00:00.000\n36\t1327\tFell\t-85.75\t38.25\tPoint\t14716\t1300\tLouisville\tValid\tL6\t38.250000\t-85.750000\t1977-01-01T00:00:00.000\n\t\tFell\t19.92\t52.00\tPoint\t14718\t59000\tŁowicz\tValid\tMesosiderite-A3\t52.000000\t19.916670\t1935-01-01T00:00:00.000\n\t\tFell\t75.15\t24.95\tPoint\t14721\t9241\tLua\tValid\tL5\t24.950000\t75.150000\t1926-01-01T00:00:00.000\n\t\tFell\t0.48\t47.85\tPoint\t14724\t3500\tLucé\tValid\tL6\t47.850000\t0.483330\t1768-01-01T00:00:00.000\n31\t1567\tFell\t-84.77\t32.03\tPoint\t14753\t340\tLumpkin\tValid\tL6\t32.033330\t-84.766670\t1869-01-01T00:00:00.000\n\t\tFell\t103.30\t24.80\tPoint\t14754\t2520\tLunan\tValid\tH6\t24.800000\t103.300000\t1980-01-01T00:00:00.000\n\t\tFell\t13.03\t56.22\tPoint\t14755\t11000\tLundsgård\tValid\tL6\t56.216670\t13.033330\t1889-01-01T00:00:00.000\n\t\tFell\t27.70\t61.20\tPoint\t14756\t885\tLuotolax\tValid\tHowardite\t61.200000\t27.700000\t1813-01-01T00:00:00.000\n\t\tFell\t5.00\t46.22\tPoint\t14757\t14000\tLuponnas\tValid\tH3-5\t46.216670\t5.000000\t1753-01-01T00:00:00.000\n\t\tFell\t29.43\t-7.22\tPoint\t14759\t\tLusaka\tValid\tUnknown\t-7.216670\t29.433330\t1951-01-01T00:00:00.000\n\t\tFell\t97.00\t19.00\tPoint\t14764\t540\tMabwe-Khoywa\tValid\tL5\t19.000000\t97.000000\t1937-01-01T00:00:00.000\n\t\tFell\t-36.67\t-5.20\tPoint\t15370\t1500\tMacau\tValid\tH5\t-5.200000\t-36.666670\t1836-01-01T00:00:00.000\n\t\tFell\t35.24\t-15.21\tPoint\t15371\t93200\tMachinga\tValid\tL6\t-15.212220\t35.242220\t1981-01-01T00:00:00.000\n\t\tFell\t31.95\t-28.83\tPoint\t15372\t1995\tMacibini\tValid\tEucrite-pmict\t-28.833330\t31.950000\t1936-01-01T00:00:00.000\n\t\tFell\t86.37\t25.92\tPoint\t15379\t1000\tMadhipura\tValid\tL\t25.916670\t86.366670\t1950-01-01T00:00:00.000\n\t\tFell\t111.53\t-7.75\tPoint\t15380\t400\tMadiun\tValid\tL6\t-7.750000\t111.533330\t1935-01-01T00:00:00.000\n\t\tFell\t-3.72\t40.42\tPoint\t15382\t400\tMadrid\tValid\tL6\t40.416670\t-3.716670\t1896-01-01T00:00:00.000\n\t\tFell\t-49.93\t-26.17\tPoint\t15383\t600\tMafra\tValid\tL3-4\t-26.166670\t-49.933330\t1941-01-01T00:00:00.000\n\t\tFell\t27.52\t37.87\tPoint\t15386\t5000\tMagnesia\tValid\tIron, IAB-sHL\t37.866670\t27.516670\t1899-01-01T00:00:00.000\n\t\tFell\t31.65\t-19.48\tPoint\t15387\t666.6\tMagombedze\tValid\tH3-5\t-19.483330\t31.650000\t1990-01-01T00:00:00.000\n\t\tFell\t95.78\t27.67\tPoint\t47361\t70500\tMahadevpur\tValid\tH4/5\t27.666670\t95.783330\t2007-01-01T00:00:00.000\n\t\tFell\t9.38\t12.83\tPoint\t30751\t4629\tMaigatari-Danduma\tValid\tH5/6\t12.833330\t9.383330\t2004-01-01T00:00:00.000\n11\t611\tFell\t-104.00\t32.22\tPoint\t15393\t150\tMalaga\tValid\tOC\t32.216670\t-104.000000\t1933-01-01T00:00:00.000\n\t\tFell\t31.75\t9.50\tPoint\t15394\t2000\tMalakal\tValid\tL5\t9.500000\t31.750000\t1970-01-01T00:00:00.000\n\t\tFell\t33.52\t-3.13\tPoint\t15395\t470\tMalampaka\tValid\tH\t-3.133330\t33.516670\t1930-01-01T00:00:00.000\n\t\tFell\t-63.23\t-28.93\tPoint\t15397\t\tMalotas\tValid\tH5\t-28.933330\t-63.233330\t1931-01-01T00:00:00.000\n\t\tFell\t26.77\t-29.45\tPoint\t15400\t807\tMalvern\tValid\tEucrite-pmict\t-29.450000\t26.766670\t1933-01-01T00:00:00.000\n\t\tFell\t62.08\t45.22\tPoint\t15401\t1000\tMamra Springs\tValid\tL6\t45.216670\t62.083330\t1927-01-01T00:00:00.000\n\t\tFell\t86.70\t23.05\tPoint\t15402\t1700\tManbhoom\tValid\tLL6\t23.050000\t86.700000\t1863-01-01T00:00:00.000\n\t\tFell\t76.10\t20.97\tPoint\t15403\t50\tManegaon\tValid\tDiogenite\t20.966670\t76.100000\t1843-01-01T00:00:00.000\n\t\tFell\t31.60\t-17.65\tPoint\t15405\t22300\tMangwendi\tValid\tLL6\t-17.650000\t31.600000\t1934-01-01T00:00:00.000\n\t\tFell\t44.63\t45.82\tPoint\t15409\t3555\tManych\tValid\tLL3.4\t45.816670\t44.633330\t1951-01-01T00:00:00.000\n\t\tFell\t72.08\t34.23\tPoint\t15414\t4500\tMardan\tValid\tH5\t34.233330\t72.083330\t1948-01-01T00:00:00.000\n\t\tFell\t\t\t\t15418\t114\tMaria Linden\tValid\tL4\t\t\t1925-01-01T00:00:00.000\n19\t471\tFell\t-99.38\t42.72\tPoint\t15419\t340\tMariaville\tValid\tIron\t42.716670\t-99.383330\t1898-01-01T00:00:00.000\n\t\tFell\t11.47\t54.76\tPoint\t48973\t25.81\tMaribo\tValid\tCM2\t54.761830\t11.467450\t2009-01-01T00:00:00.000\n\t\tFell\t29.25\t4.67\tPoint\t15421\t3200\tMaridi\tValid\tH6\t4.666670\t29.250000\t1941-01-01T00:00:00.000\n\t\tFell\t-49.93\t-22.25\tPoint\t15422\t2500\tMarilia\tValid\tH4\t-22.250000\t-49.933330\t1971-01-01T00:00:00.000\n16\t287\tFell\t-91.60\t41.90\tPoint\t15424\t28400\tMarion (Iowa)\tValid\tL6\t41.900000\t-91.600000\t1847-01-01T00:00:00.000\n\t\tFell\t30.50\t61.50\tPoint\t15426\t45000\tMarjalahti\tValid\tPallasite, PMG\t61.500000\t30.500000\t1902-01-01T00:00:00.000\n\t\tFell\t0.15\t44.50\tPoint\t15429\t3000\tMarmande\tValid\tL5\t44.500000\t0.150000\t1848-01-01T00:00:00.000\n\t\tFell\t48.10\t-14.20\tPoint\t15430\t6000\tMaromandia\tValid\tL6\t-14.200000\t48.100000\t2002-01-01T00:00:00.000\n39\t2740\tFell\t-84.10\t35.80\tPoint\t15436\t1443\tMaryville\tValid\tL6\t35.800000\t-84.100000\t1983-01-01T00:00:00.000\n\t\tFell\t1.87\t45.37\tPoint\t15438\t1000\tMascombes\tValid\tL6\t45.366670\t1.866670\t1836-01-01T00:00:00.000\n\t\tFell\t0.00\t0.00\tPoint\t53653\t24.54\tMason Gully\tValid\tH5\t0.000000\t0.000000\t2010-01-01T00:00:00.000\n\t\tFell\t12.62\t48.13\tPoint\t15443\t1600\tMässing\tValid\tHowardite\t48.133330\t12.616670\t1803-01-01T00:00:00.000\n\t\tFell\t13.13\t48.18\tPoint\t15446\t19000\tMauerkirchen\tValid\tL6\t48.183330\t13.133330\t1768-01-01T00:00:00.000\n\t\tFell\t57.00\t-20.00\tPoint\t15447\t220\tMauritius\tValid\tL6\t-20.000000\t57.000000\t1801-01-01T00:00:00.000\n\t\tFell\t12.08\t8.97\tPoint\t15451\t4850\tMayo Belwa\tValid\tAubrite\t8.966670\t12.083330\t1974-01-01T00:00:00.000\n\t\tFell\t-101.68\t24.68\tPoint\t15453\t4000\tMazapil\tValid\tIron, IAB-sLL\t24.683330\t-101.683330\t1885-01-01T00:00:00.000\n\t\tFell\t30.00\t-1.22\tPoint\t15454\t4975\tMaziba\tValid\tL6\t-1.216670\t30.000000\t1942-01-01T00:00:00.000\n\t\tFell\t34.17\t1.07\tPoint\t15455\t150000\tMbale\tValid\tL5/6\t1.066670\t34.166670\t1992-01-01T00:00:00.000\n\t\tFell\t-67.50\t-27.25\tPoint\t15467\t31\tMedanitos\tValid\tEucrite-cm\t-27.250000\t-67.500000\t1953-01-01T00:00:00.000\n\t\tFell\t77.80\t29.02\tPoint\t15469\t22\tMeerut\tValid\tH5\t29.016670\t77.800000\t1861-01-01T00:00:00.000\n\t\tFell\t106.88\t-6.23\tPoint\t15470\t24750\tMeester-Cornelis\tValid\tH5\t-6.233330\t106.883330\t1915-01-01T00:00:00.000\n\t\tFell\t13.15\t53.18\tPoint\t15485\t10500\tMenow\tValid\tH4\t53.183330\t13.150000\t1862-01-01T00:00:00.000\n\t\tFell\t7.22\t46.82\tPoint\t15486\t28.9\tMenziswyl\tValid\tL5\t46.818670\t7.218170\t1903-01-01T00:00:00.000\n\t\tFell\t12.07\t55.05\tPoint\t15489\t4000\tMern\tValid\tL6\t55.050000\t12.066670\t1878-01-01T00:00:00.000\n\t\tFell\t37.67\t0.00\tPoint\t15491\t6000\tMeru\tValid\tLL6\t0.000000\t37.666670\t1945-01-01T00:00:00.000\n\t\tFell\t81.98\t25.48\tPoint\t15492\t71400\tMerua\tValid\tH5\t25.483330\t81.983330\t1920-01-01T00:00:00.000\n\t\tFell\t15.57\t38.18\tPoint\t15495\t2405\tMessina\tValid\tL5\t38.183330\t15.566670\t1955-01-01T00:00:00.000\n\t\tFell\t11.10\t50.58\tPoint\t16626\t870\tMeuselbach\tValid\tL6\t50.583330\t11.100000\t1897-01-01T00:00:00.000\n\t\tFell\t3.25\t45.77\tPoint\t16627\t1300\tMezel\tValid\tL6\t45.766670\t3.250000\t1949-01-01T00:00:00.000\n\t\tFell\t25.73\t46.50\tPoint\t16628\t22700\tMezö-Madaras\tValid\tL3.7\t46.500000\t25.733330\t1852-01-01T00:00:00.000\n\t\tFell\t83.62\t25.90\tPoint\t16629\t350\tMhow\tValid\tL6\t25.900000\t83.616670\t1827-01-01T00:00:00.000\n\t\tFell\t111.70\t34.80\tPoint\t16631\t1100\tMianchi\tValid\tH5\t34.800000\t111.700000\t1980-01-01T00:00:00.000\n\t\tFell\t-1.17\t54.57\tPoint\t16632\t1600\tMiddlesbrough\tValid\tL6\t54.566670\t-1.166670\t1881-01-01T00:00:00.000\n41\t2996\tFell\t-90.37\t42.91\tPoint\t52090\t3584\tMifflin\tValid\tL5\t42.907500\t-90.365560\t2010-01-01T00:00:00.000\n\t\tFell\t30.97\t48.07\tPoint\t16634\t8000\tMighei\tValid\tCM2\t48.066670\t30.966670\t1889-01-01T00:00:00.000\n\t\tFell\t133.22\t35.57\tPoint\t16635\t6380\tMihonoseki\tValid\tL6\t35.568330\t133.220000\t1992-01-01T00:00:00.000\n\t\tFell\t17.53\t46.23\tPoint\t16636\t224.2\tMike\tValid\tL6\t46.233330\t17.533330\t1944-01-01T00:00:00.000\n\t\tFell\t16.10\t46.18\tPoint\t16640\t10000\tMilena\tValid\tL6\t46.183330\t16.100000\t1842-01-01T00:00:00.000\n\t\tFell\t120.37\t-26.45\tPoint\t16643\t330000\tMillbillillie\tValid\tEucrite-mmict\t-26.450000\t120.366670\t1960-01-01T00:00:00.000\n15\t11\tFell\t-92.05\t35.40\tPoint\t16645\t16700\tMiller (Arkansas)\tValid\tH5\t35.400000\t-92.050000\t1930-01-01T00:00:00.000\n\t\tFell\t136.93\t35.08\tPoint\t16692\t1040\tMinamino\tValid\tL\t35.078330\t136.933330\t1632-01-01T00:00:00.000\n\t\tFell\t14.70\t37.28\tPoint\t16696\t42\tMineo\tValid\tPallasite\t37.283330\t14.700000\t1826-01-01T00:00:00.000\n\t\tFell\t120.67\t32.33\tPoint\t16697\t5500\tMin-Fan-Zhun\tValid\tLL6\t32.333330\t120.666670\t1952-01-01T00:00:00.000\n\t\tFell\t16.60\t47.70\tPoint\t16700\t550\tMinnichhof\tValid\tOC\t47.700000\t16.600000\t1905-01-01T00:00:00.000\n\t\tFell\t83.25\t25.68\tPoint\t16701\t8510\tMirzapur\tValid\tL5\t25.683330\t83.250000\t1910-01-01T00:00:00.000\n\t\tFell\t23.00\t56.67\tPoint\t16703\t5800\tMisshof\tValid\tH5\t56.666670\t23.000000\t1890-01-01T00:00:00.000\n\t\tFell\t5.93\t61.73\tPoint\t16707\t100.7\tMjelleim\tValid\tH\t61.733330\t5.933330\t1898-01-01T00:00:00.000\n\t\tFell\t24.03\t46.80\tPoint\t16709\t300000\tMocs\tValid\tL5-6\t46.800000\t24.033330\t1882-01-01T00:00:00.000\n17\t1290\tFell\t-101.10\t38.50\tPoint\t16711\t35000\tModoc (1905)\tValid\tL6\t38.500000\t-101.100000\t1905-01-01T00:00:00.000\n\t\tFell\t174.40\t-39.63\tPoint\t16713\t4500\tMokoia\tValid\tCV3\t-39.633330\t174.400000\t1908-01-01T00:00:00.000\n\t\tFell\t-1.17\t38.12\tPoint\t16715\t144000\tMolina\tValid\tH5\t38.116670\t-1.166670\t1858-01-01T00:00:00.000\n\t\tFell\t26.47\t-31.25\tPoint\t16717\t150\tMolteno\tValid\tHowardite\t-31.250000\t26.466670\t1953-01-01T00:00:00.000\n23\t2957\tFell\t-102.86\t31.61\tPoint\t16719\t2587\tMonahans (1998)\tValid\tH5\t31.608330\t-102.858330\t1998-01-01T00:00:00.000\n37\t636\tFell\t-80.50\t35.25\tPoint\t16720\t8600\tMonroe\tValid\tH4\t35.250000\t-80.500000\t1849-01-01T00:00:00.000\n\t\tFell\t-8.25\t38.02\tPoint\t16725\t4885\tMonte das Fortes\tValid\tL5\t38.016670\t-8.250000\t1950-01-01T00:00:00.000\n\t\tFell\t13.35\t43.27\tPoint\t16726\t3130\tMonte Milone\tValid\tL5\t43.266670\t13.350000\t1846-01-01T00:00:00.000\n\t\tFell\t1.96\t43.39\tPoint\t16727\t149000\tMontferré\tValid\tH5\t43.390560\t1.962500\t1923-01-01T00:00:00.000\n\t\tFell\t1.58\t47.63\tPoint\t16729\t500\tMontlivault\tValid\tL6\t47.633330\t1.583330\t1838-01-01T00:00:00.000\n\t\tFell\t27.35\t-15.97\tPoint\t16733\t\tMonze\tValid\tL6\t-15.966670\t27.350000\t1950-01-01T00:00:00.000\n37\t2431\tFell\t-79.38\t35.42\tPoint\t16736\t1880\tMoore County\tValid\tEucrite-cm\t35.416670\t-79.383330\t1913-01-01T00:00:00.000\n\t\tFell\t-8.33\t52.45\tPoint\t16737\t3520\tMooresfort\tValid\tH5\t52.450000\t-8.333330\t1810-01-01T00:00:00.000\n\t\tFell\t145.60\t-40.98\tPoint\t16738\t8887.5\tMoorleah\tValid\tL6\t-40.975000\t145.600000\t1930-01-01T00:00:00.000\n\t\tFell\t78.83\t28.78\tPoint\t16740\t70\tMoradabad\tValid\tL6\t28.783330\t78.833330\t1808-01-01T00:00:00.000\n\t\tFell\t18.53\t49.60\tPoint\t16742\t633\tMorávka\tValid\tH5\t49.600000\t18.533330\t2000-01-01T00:00:00.000\n\t\tFell\t5.13\t44.60\tPoint\t16747\t1300\tMornans\tValid\tH5\t44.600000\t5.133330\t1875-01-01T00:00:00.000\n\t\tFell\t10.70\t59.43\tPoint\t36592\t3763\tMoss\tValid\tCO3.6\t59.433330\t10.700000\t2006-01-01T00:00:00.000\n\t\tFell\t77.33\t26.83\tPoint\t16759\t1500\tMoti-ka-nagla\tValid\tH6\t26.833330\t77.333330\t1868-01-01T00:00:00.000\n\t\tFell\t8.50\t45.20\tPoint\t16762\t9150\tMotta di Conti\tValid\tH4\t45.200000\t8.500000\t1868-01-01T00:00:00.000\n\t\tFell\t141.70\t-29.80\tPoint\t16766\t11300\tMount Browne\tValid\tH6\t-29.800000\t141.700000\t1902-01-01T00:00:00.000\n\t\tFell\t4.80\t18.70\tPoint\t16804\t110000\tMount Tazerzait\tValid\tL5\t18.700000\t4.800000\t1991-01-01T00:00:00.000\n\t\tFell\t6.87\t44.08\tPoint\t16805\t17000\tMount Vaisi\tValid\tStone-uncl\t44.083330\t6.866670\t1637-01-01T00:00:00.000\n\t\tFell\t33.50\t-11.50\tPoint\t16820\t1100\tMtola\tValid\tStone-uncl\t-11.500000\t33.500000\t1944-01-01T00:00:00.000\n\t\tFell\t77.02\t12.63\tPoint\t16841\t4400\tMuddoor\tValid\tL5\t12.633330\t77.016670\t1865-01-01T00:00:00.000\n\t\tFell\t80.83\t9.33\tPoint\t16851\t25.5\tMulletiwu\tValid\tL\t9.333330\t80.833330\t1795-01-01T00:00:00.000\n\t\tFell\t90.22\t24.50\tPoint\t16874\t4703\tMuraid\tValid\tL6\t24.500000\t90.216670\t1924-01-01T00:00:00.000\n\t\tFell\t145.20\t-36.62\tPoint\t16875\t100000\tMurchison\tValid\tCM2\t-36.616670\t145.200000\t1969-01-01T00:00:00.000\n36\t237\tFell\t-88.10\t36.60\tPoint\t16882\t12600\tMurray\tValid\tCM2\t36.600000\t-88.100000\t1950-01-01T00:00:00.000\n\t\tFell\t85.53\t26.13\tPoint\t16885\t1245\tMuzaffarpur\tValid\tIron, IAB-sHL\t26.133330\t85.533330\t1964-01-01T00:00:00.000\n\t\tFell\t72.63\t23.05\tPoint\t16887\t\tMyhee Caunta\tValid\tOC\t23.050000\t72.633330\t1842-01-01T00:00:00.000\n\t\tFell\t1.00\t12.00\tPoint\t16889\t8165\tNadiabondi\tValid\tH5\t12.000000\t1.000000\t1956-01-01T00:00:00.000\n\t\tFell\t140.06\t38.12\tPoint\t16890\t1810\tNagai\tValid\tL6\t38.121670\t140.061670\t1922-01-01T00:00:00.000\n\t\tFell\t78.22\t26.98\tPoint\t16892\t20\tNagaria\tValid\tEucrite-cm\t26.983330\t78.216670\t1875-01-01T00:00:00.000\n\t\tFell\t19.50\t49.17\tPoint\t16893\t6100\tNagy-Borové\tValid\tL5\t49.166670\t19.500000\t1895-01-01T00:00:00.000\n\t\tFell\t30.35\t31.32\tPoint\t16898\t10000\tNakhla\tValid\tMartian (nakhlite)\t31.316670\t30.350000\t1911-01-01T00:00:00.000\n\t\tFell\t100.08\t13.73\tPoint\t16899\t23200\tNakhon Pathom\tValid\tL6\t13.733330\t100.083330\t1923-01-01T00:00:00.000\n\t\tFell\t79.20\t12.28\tPoint\t16902\t4500\tNammianthal\tValid\tH5\t12.283330\t79.200000\t1886-01-01T00:00:00.000\n\t\tFell\t103.50\t35.67\tPoint\t16903\t52900\tNan Yang Pao\tValid\tL6\t35.666670\t103.500000\t1917-01-01T00:00:00.000\n45\t419\tFell\t-77.17\t38.42\tPoint\t16904\t7500\tNanjemoy\tValid\tH6\t38.416670\t-77.166670\t1825-01-01T00:00:00.000\n\t\tFell\t121.80\t32.12\tPoint\t16907\t529\tNantong\tValid\tH6\t32.116670\t121.800000\t1984-01-01T00:00:00.000\n\t\tFell\t77.00\t19.25\tPoint\t16908\t17000\tNaoki\tValid\tH6\t19.250000\t77.000000\t1928-01-01T00:00:00.000\n\t\tFell\t51.50\t33.75\tPoint\t16909\t2700\tNaragh\tValid\tH6\t33.750000\t51.500000\t1974-01-01T00:00:00.000\n\t\tFell\t150.69\t-34.05\tPoint\t16912\t367.5\tNarellan\tValid\tL6\t-34.050000\t150.688890\t1928-01-01T00:00:00.000\n\t\tFell\t12.52\t42.52\tPoint\t16914\t\tNarni\tValid\tStone-uncl\t42.516670\t12.516670\t0921-01-01T00:00:00.000\n\t\tFell\t165.90\t-21.73\tPoint\t16922\t347\tNassirah\tValid\tH4\t-21.733330\t165.900000\t1936-01-01T00:00:00.000\n\t\tFell\t\t\t\t16923\t1.4\tNatal\tValid\tStone-uncl\t\t\t1973-01-01T00:00:00.000\n\t\tFell\t83.67\t21.25\tPoint\t16927\t105\tNawapali\tValid\tCM2\t21.250000\t83.666670\t1890-01-01T00:00:00.000\n\t\tFell\t136.47\t36.45\tPoint\t16934\t420\tNeagari\tValid\tL6\t36.449170\t136.465280\t1995-01-01T00:00:00.000\n\t\tFell\t83.48\t18.68\tPoint\t16935\t4500\tNedagolla\tValid\tIron, ungrouped\t18.683330\t83.483330\t1870-01-01T00:00:00.000\n\t\tFell\t35.33\t9.50\tPoint\t16941\t2450\tNejo\tValid\tL6\t9.500000\t35.333330\t1970-01-01T00:00:00.000\n\t\tFell\t21.50\t56.50\tPoint\t16945\t10250\tNerft\tValid\tL6\t56.500000\t21.500000\t1864-01-01T00:00:00.000\n\t\tFell\t10.81\t47.52\tPoint\t16950\t6189\tNeuschwanstein\tValid\tEL6\t47.525000\t10.808330\t2002-01-01T00:00:00.000\n38\t2615\tFell\t-81.77\t40.00\tPoint\t16953\t230000\tNew Concord\tValid\tL6\t40.000000\t-81.766670\t1860-01-01T00:00:00.000\n\t\tFell\t35.68\t15.37\tPoint\t16954\t12000\tNew Halfa\tValid\tL4\t15.366670\t35.683330\t1994-01-01T00:00:00.000\n22\t1667\tFell\t-90.11\t29.95\tPoint\t16960\t19256\tNew Orleans\tValid\tH5\t29.947180\t-90.109760\t2003-01-01T00:00:00.000\n\t\tFell\t111.42\t-7.45\tPoint\t16966\t1393\tNgawi\tValid\tLL3.6\t-7.450000\t111.416670\t1883-01-01T00:00:00.000\n\t\tFell\t-4.38\t13.85\tPoint\t16968\t37500\tN'Goureyma\tValid\tIron, ungrouped\t13.850000\t-4.383330\t1900-01-01T00:00:00.000\n\t\tFell\t-1.43\t49.03\tPoint\t16970\t\tNicorps\tValid\tStone-uncl\t49.033330\t-1.433330\t1750-01-01T00:00:00.000\n\t\tFell\t\t\t\t16974\t3.3\tNiger (L6)\tValid\tL6\t\t\t1967-01-01T00:00:00.000\n\t\tFell\t\t\t\t16975\t3.3\tNiger (LL6)\tValid\tLL6\t\t\t1967-01-01T00:00:00.000\n\t\tFell\t78.63\t52.45\tPoint\t16976\t3996\tNikolaevka\tValid\tH4\t52.450000\t78.633330\t1935-01-01T00:00:00.000\n\t\tFell\t37.33\t56.12\tPoint\t16977\t6000\tNikolskoe\tValid\tL4\t56.116670\t37.333330\t1954-01-01T00:00:00.000\n\t\tFell\t121.48\t29.87\tPoint\t16980\t14250\tNingbo\tValid\tIron, IVA\t29.866670\t121.483330\t1975-01-01T00:00:00.000\n\t\tFell\t105.91\t32.92\tPoint\t16981\t4610\tNingqiang\tValid\tC3-ung\t32.925000\t105.906670\t1983-01-01T00:00:00.000\n\t\tFell\t131.57\t34.20\tPoint\t16982\t467\tNio\tValid\tH3-4\t34.200000\t131.566670\t1897-01-01T00:00:00.000\n\t\tFell\t30.70\t-28.57\tPoint\t16983\t17200\tN'Kandhla\tValid\tIron, IID\t-28.566670\t30.700000\t1912-01-01T00:00:00.000\n49\t1683\tFell\t-69.48\t44.08\tPoint\t16984\t2300\tNobleborough\tValid\tEucrite-pmict\t44.083330\t-69.483330\t1823-01-01T00:00:00.000\n35\t2238\tFell\t-86.06\t40.09\tPoint\t16985\t483.7\tNoblesville\tValid\tH4-6\t40.085280\t-86.055000\t1991-01-01T00:00:00.000\n\t\tFell\t130.75\t33.73\tPoint\t16988\t472\tNogata\tValid\tL6\t33.725000\t130.750000\t0861-01-01T00:00:00.000\n\t\tFell\t-59.83\t-32.37\tPoint\t16989\t4000\tNogoya\tValid\tCM2\t-32.366670\t-59.833330\t1879-01-01T00:00:00.000\n15\t10\tFell\t-92.27\t36.22\tPoint\t16994\t1050\tNorfork\tValid\tIron, IIIAB\t36.216670\t-92.266670\t1918-01-01T00:00:00.000\n17\t1252\tFell\t-99.87\t39.68\tPoint\t17922\t1100000\tNorton County\tValid\tAubrite\t39.683330\t-99.866670\t1948-01-01T00:00:00.000\n\t\tFell\t11.53\t45.29\tPoint\t17930\t177\tNoventa Vicentina\tValid\tH4\t45.291670\t11.527220\t1971-01-01T00:00:00.000\n\t\tFell\t46.00\t54.82\tPoint\t17933\t1900\tNovo-Urei\tValid\tUreilite\t54.816670\t46.000000\t1886-01-01T00:00:00.000\n\t\tFell\t31.33\t58.55\tPoint\t17934\t\tNovy-Ergi\tValid\tStone-uncl\t58.550000\t31.333330\t1662-01-01T00:00:00.000\n\t\tFell\t22.00\t56.00\tPoint\t17935\t1001\tNovy-Projekt\tValid\tOC\t56.000000\t22.000000\t1908-01-01T00:00:00.000\n\t\tFell\t102.47\t42.92\tPoint\t17936\t250\tNoyan-Bogdo\tValid\tL6\t42.916670\t102.466670\t1933-01-01T00:00:00.000\n\t\tFell\t-102.13\t24.30\tPoint\t17938\t50000\tNuevo Mercurio\tValid\tH5\t24.300000\t-102.133330\t1978-01-01T00:00:00.000\n\t\tFell\t0.75\t41.63\tPoint\t17959\t5000\tNulles\tValid\tH6\t41.633330\t0.750000\t1851-01-01T00:00:00.000\n\t\tFell\t141.87\t43.33\tPoint\t17960\t363\tNumakai\tValid\tH4\t43.333330\t141.866670\t1925-01-01T00:00:00.000\n\t\tFell\t94.92\t21.21\tPoint\t17969\t737.6\tNyaung\tValid\tIron, IIIAB\t21.208330\t94.916670\t1939-01-01T00:00:00.000\n\t\tFell\t22.02\t47.55\tPoint\t17970\t1100\tNyirábrany\tValid\tLL5\t47.550000\t22.025000\t1914-01-01T00:00:00.000\n\t\tFell\t55.27\t57.78\tPoint\t17979\t500000\tOchansk\tValid\tH4\t57.783330\t55.266670\t1887-01-01T00:00:00.000\n\t\tFell\t8.05\t52.28\tPoint\t17988\t1400\tOesede\tValid\tH5\t52.283330\t8.050000\t1927-01-01T00:00:00.000\n\t\tFell\t23.00\t58.50\tPoint\t17989\t6000\tOesel\tValid\tL6\t58.500000\t23.000000\t1855-01-01T00:00:00.000\n\t\tFell\t22.03\t47.88\tPoint\t17990\t3750\tOfehértó\tValid\tL6\t47.883330\t22.033330\t1900-01-01T00:00:00.000\n\t\tFell\t130.20\t33.28\tPoint\t17994\t14360\tOgi\tValid\tH6\t33.283330\t130.200000\t1741-01-01T00:00:00.000\n\t\tFell\t23.58\t46.07\tPoint\t17995\t16250\tOhaba\tValid\tH5\t46.066670\t23.583330\t1857-01-01T00:00:00.000\n\t\tFell\t8.50\t6.75\tPoint\t17996\t7700\tOhuma\tValid\tL5\t6.750000\t8.500000\t1963-01-01T00:00:00.000\n\t\tFell\t-5.40\t38.18\tPoint\t17997\t5850\tOjuelos Altos\tValid\tL6\t38.183330\t-5.400000\t1926-01-01T00:00:00.000\n\t\tFell\t139.22\t36.18\tPoint\t17998\t194\tOkabe\tValid\tH5\t36.183330\t139.216670\t1958-01-01T00:00:00.000\n\t\tFell\t135.20\t35.08\tPoint\t18000\t4742\tOkano\tValid\tIron, IIAB\t35.083330\t135.200000\t1904-01-01T00:00:00.000\n\t\tFell\t25.50\t50.83\tPoint\t18002\t12000\tOkniny\tValid\tLL6\t50.833330\t25.500000\t1834-01-01T00:00:00.000\n\t\tFell\t8.17\t52.95\tPoint\t18009\t16570\tOldenburg (1930)\tValid\tL6\t52.950000\t8.166670\t1930-01-01T00:00:00.000\n\t\tFell\t-0.03\t39.00\tPoint\t18012\t\tOliva-Gandia\tValid\tStone-uncl\t39.000000\t-0.033330\t1520-01-01T00:00:00.000\n\t\tFell\t-7.07\t38.72\tPoint\t18013\t150000\tOlivenza\tValid\tLL5\t38.716670\t-7.066670\t1924-01-01T00:00:00.000\n\t\tFell\t-2.10\t39.57\tPoint\t18015\t40000\tOlmedilla de Alarcón\tValid\tH5\t39.566670\t-2.100000\t1929-01-01T00:00:00.000\n\t\tFell\t161.81\t64.02\tPoint\t18019\t250000\tOmolon\tValid\tPallasite, PMG\t64.020000\t161.808330\t1981-01-01T00:00:00.000\n\t\tFell\t1.38\t43.88\tPoint\t18026\t14000\tOrgueil\tValid\tCI1\t43.883330\t1.383330\t1864-01-01T00:00:00.000\n30\t1078\tFell\t-81.36\t28.55\tPoint\t34489\t180\tOrlando\tValid\tEucrite\t28.547500\t-81.362220\t2004-01-01T00:00:00.000\n\t\tFell\t6.15\t47.12\tPoint\t18030\t6000\tOrnans\tValid\tCO3.4\t47.116670\t6.150000\t1868-01-01T00:00:00.000\n\t\tFell\t8.00\t48.50\tPoint\t18033\t4500\tOrtenau\tValid\tStone-uncl\t48.500000\t8.000000\t1671-01-01T00:00:00.000\n\t\tFell\t12.93\t42.13\tPoint\t18034\t3400\tOrvinio\tValid\tH6\t42.133330\t12.933330\t1872-01-01T00:00:00.000\n\t\tFell\t9.40\t58.88\tPoint\t18042\t246\tOterøy\tValid\tL6\t58.883330\t9.400000\t1928-01-01T00:00:00.000\n\t\tFell\t140.35\t38.40\tPoint\t18045\t6510\tOtomi\tValid\tH\t38.400000\t140.350000\t1867-01-01T00:00:00.000\n17\t1947\tFell\t-95.22\t38.60\tPoint\t18046\t840\tOttawa\tValid\tLL6\t38.600000\t-95.216670\t1896-01-01T00:00:00.000\n\t\tFell\t0.08\t12.90\tPoint\t56729\t4440\tOuadangou\tValid\tL5\t12.900000\t0.080000\t2003-01-01T00:00:00.000\n\t\tFell\t-6.58\t30.18\tPoint\t18050\t1215.5\tOued el Hadjar\tValid\tLL6\t30.180000\t-6.577170\t1986-01-01T00:00:00.000\n\t\tFell\t-13.10\t24.30\tPoint\t31282\t17000\tOum Dreyga\tValid\tH3-5\t24.300000\t-13.100000\t2003-01-01T00:00:00.000\n\t\tFell\t-8.28\t37.61\tPoint\t18052\t20000\tOurique\tValid\tH4\t37.608330\t-8.280000\t1998-01-01T00:00:00.000\n\t\tFell\t16.00\t-18.00\tPoint\t18055\t121.5\tOvambo\tValid\tL6\t-18.000000\t16.000000\t1900-01-01T00:00:00.000\n\t\tFell\t-5.87\t43.40\tPoint\t18058\t205\tOviedo\tValid\tH5\t43.400000\t-5.866670\t1856-01-01T00:00:00.000\n\t\tFell\t28.83\t51.33\tPoint\t18062\t\tOwrucz\tValid\tOC\t51.333330\t28.833330\t1775-01-01T00:00:00.000\n\t\tFell\t-99.30\t21.05\tPoint\t18068\t3400\tPacula\tValid\tL6\t21.050000\t-99.300000\t1881-01-01T00:00:00.000\n\t\tFell\t25.00\t55.67\tPoint\t18069\t3858\tPadvarninkai\tValid\tEucrite-mmict\t55.666670\t25.000000\t1929-01-01T00:00:00.000\n\t\tFell\t120.46\t17.74\tPoint\t18072\t515\tPaitan\tValid\tH6\t17.743330\t120.455830\t1910-01-01T00:00:00.000\n32\t503\tFell\t-89.72\t32.32\tPoint\t18073\t\tPalahatchie\tValid\tOC\t32.316670\t-89.716670\t1910-01-01T00:00:00.000\n\t\tFell\t-65.10\t-23.12\tPoint\t18074\t1430\tPalca de Aparzo\tValid\tL5\t-23.116670\t-65.100000\t1988-01-01T00:00:00.000\n\t\tFell\t118.62\t43.48\tPoint\t18077\t18000\tPalinshih\tValid\tIron\t43.483330\t118.616670\t1914-01-01T00:00:00.000\n18\t2122\tFell\t-91.50\t39.80\tPoint\t18079\t135\tPalmyra\tValid\tL3\t39.800000\t-91.500000\t1926-01-01T00:00:00.000\n4\t1657\tFell\t-157.78\t21.30\tPoint\t18082\t682\tPalolo Valley\tValid\tH5\t21.300000\t-157.783330\t1949-01-01T00:00:00.000\n\t\tFound\t\t\t\t32591\t69.5\tDominion Range 03239\tValid\tL6\t\t\t2002-01-01T00:00:00.000\n\t\tFell\t120.70\t15.08\tPoint\t18093\t10500\tPampanga\tValid\tL5\t15.083330\t120.700000\t1859-01-01T00:00:00.000\n\t\tFell\t124.28\t8.07\tPoint\t18098\t2130\tPantar\tValid\tH5\t8.066670\t124.283330\t1938-01-01T00:00:00.000\n15\t1023\tFell\t-90.50\t36.07\tPoint\t18101\t408000\tParagould\tValid\tLL5\t36.066670\t-90.500000\t1930-01-01T00:00:00.000\n\t\tFell\t-40.70\t-6.23\tPoint\t18102\t2000\tParambu\tValid\tLL5\t-6.233330\t-40.700000\t1967-01-01T00:00:00.000\n\t\tFell\t-51.67\t-19.13\tPoint\t18103\t100000\tParanaiba\tValid\tL6\t-19.133330\t-51.666670\t1956-01-01T00:00:00.000\n34\t1863\tFell\t-87.68\t41.48\tPoint\t18106\t18000\tPark Forest\tValid\tL5\t41.484720\t-87.679170\t2003-01-01T00:00:00.000\n\t\tFell\t78.35\t9.23\tPoint\t18108\t77600\tParnallee\tValid\tLL3.6\t9.233330\t78.350000\t1857-01-01T00:00:00.000\n\t\tFell\t85.40\t26.20\tPoint\t18109\t800\tParsa\tValid\tEH3\t26.200000\t85.400000\t1942-01-01T00:00:00.000\n11\t1994\tFell\t-103.40\t36.22\tPoint\t18110\t5100\tPasamonte\tValid\tEucrite-pmict\t36.216670\t-103.400000\t1933-01-01T00:00:00.000\n\t\tFell\t82.05\t20.94\tPoint\t18112\t4375\tPatora\tValid\tH6\t20.936940\t82.050000\t1969-01-01T00:00:00.000\n\t\tFell\t-48.57\t-19.53\tPoint\t18116\t2121\tPatrimonio\tValid\tL6\t-19.533330\t-48.566670\t1950-01-01T00:00:00.000\n\t\tFell\t14.97\t38.13\tPoint\t18118\t12\tPatti\tValid\tIron\t38.133330\t14.966670\t1922-01-01T00:00:00.000\n\t\tFell\t91.18\t23.15\tPoint\t18171\t37350\tPatwar\tValid\tMesosiderite-A1\t23.150000\t91.183330\t1935-01-01T00:00:00.000\n\t\tFell\t25.52\t43.47\tPoint\t18173\t2968\tPavel\tValid\tH5\t43.466670\t25.516670\t1966-01-01T00:00:00.000\n\t\tFell\t77.03\t52.30\tPoint\t18175\t142.5\tPavlodar (stone)\tValid\tH5\t52.300000\t77.033330\t1938-01-01T00:00:00.000\n\t\tFell\t35.98\t48.53\tPoint\t18176\t40000\tPavlograd\tValid\tL6\t48.533330\t35.983330\t1826-01-01T00:00:00.000\n\t\tFell\t43.00\t52.03\tPoint\t18177\t2000\tPavlovka\tValid\tHowardite\t52.033330\t43.000000\t1882-01-01T00:00:00.000\n\t\tFell\t-3.54\t11.33\tPoint\t18179\t\tPê\tValid\tL6\t11.333670\t-3.542170\t1989-01-01T00:00:00.000\n\t\tFell\t-117.93\t56.13\tPoint\t18180\t45760\tPeace River\tValid\tL6\t56.133330\t-117.933330\t1963-01-01T00:00:00.000\n\t\tFell\t9.25\t51.67\tPoint\t18181\t117.8\tPeckelsheim\tValid\tDiogenite-pm\t51.666670\t9.250000\t1953-01-01T00:00:00.000\n47\t2185\tFell\t-73.92\t41.28\tPoint\t18782\t12570\tPeekskill\tValid\tH6\t41.283330\t-73.916670\t1992-01-01T00:00:00.000\n23\t3062\tFell\t-103.12\t30.12\tPoint\t18786\t70000\tPeña Blanca Spring\tValid\tAubrite\t30.125000\t-103.116670\t1946-01-01T00:00:00.000\n\t\tFell\t35.50\t-10.67\tPoint\t18792\t165\tPeramiho\tValid\tEucrite-mmict\t-10.666670\t35.500000\t1899-01-01T00:00:00.000\n\t\tFell\t91.00\t23.32\tPoint\t18793\t23474\tPerpeti\tValid\tL6\t23.325000\t91.000000\t1935-01-01T00:00:00.000\n\t\tFell\t-3.43\t56.40\tPoint\t18797\t2\tPerth\tValid\tLL5\t56.400000\t-3.433330\t1830-01-01T00:00:00.000\n\t\tFell\t39.43\t56.63\tPoint\t18798\t66000\tPervomaisky\tValid\tL6\t56.633330\t39.433330\t1933-01-01T00:00:00.000\n\t\tFell\t66.08\t55.50\tPoint\t18799\t3393\tPesyanoe\tValid\tAubrite\t55.500000\t66.083330\t1933-01-01T00:00:00.000\n\t\tFell\t0.42\t14.05\tPoint\t18800\t189\tPétèlkolé\tValid\tH5\t14.052000\t0.420000\t1995-01-01T00:00:00.000\n39\t2017\tFell\t-86.63\t35.30\tPoint\t18801\t1800\tPetersburg\tValid\tEucrite-pmict\t35.300000\t-86.633330\t1855-01-01T00:00:00.000\n\t\tFell\t-7.33\t53.53\tPoint\t18804\t\tPettiswood\tValid\tStone-uncl\t53.533330\t-7.333330\t1779-01-01T00:00:00.000\n17\t1255\tFell\t-99.25\t40.00\tPoint\t18808\t57900\tPhillips County (stone)\tValid\tL6\t40.000000\t-99.250000\t1901-01-01T00:00:00.000\n\t\tFell\t108.58\t11.25\tPoint\t18809\t500\tPhu Hong\tValid\tH4\t11.250000\t108.583330\t1887-01-01T00:00:00.000\n\t\tFell\t105.48\t12.00\tPoint\t18811\t7800\tPhum Sambo\tValid\tH4\t12.000000\t105.483330\t1933-01-01T00:00:00.000\n\t\tFell\t108.10\t15.72\tPoint\t18812\t11000\tPhuoc-Binh\tValid\tL5\t15.716670\t108.100000\t1941-01-01T00:00:00.000\n\t\tFell\t11.50\t44.24\tPoint\t18813\t13.1\tPiancaldoli\tValid\tLL3.4\t44.244170\t11.502220\t1968-01-01T00:00:00.000\n\t\tFell\t-6.23\t41.37\tPoint\t18816\t\tPicote\tValid\tStone-uncl\t41.366670\t-6.233330\t1843-01-01T00:00:00.000\n\t\tFell\t25.73\t58.67\tPoint\t18822\t23250\tPillistfer\tValid\tEL6\t58.666670\t25.733330\t1863-01-01T00:00:00.000\n\t\tFell\t73.94\t26.03\tPoint\t18831\t42000\tPiplia Kalan\tValid\tEucrite-mmict\t26.034720\t73.941670\t1996-01-01T00:00:00.000\n\t\tFell\t18.72\t-32.87\tPoint\t18832\t37\tPiquetberg\tValid\tH\t-32.866670\t18.716670\t1881-01-01T00:00:00.000\n\t\tFell\t88.45\t25.80\tPoint\t18834\t842\tPirgunje\tValid\tL6\t25.800000\t88.450000\t1882-01-01T00:00:00.000\n\t\tFell\t76.00\t29.58\tPoint\t18835\t1161\tPirthalla\tValid\tH6\t29.583330\t76.000000\t1884-01-01T00:00:00.000\n31\t207\tFell\t-83.52\t31.95\tPoint\t18837\t3760\tPitts\tValid\tIron, IAB-ung\t31.950000\t-83.516670\t1921-01-01T00:00:00.000\n23\t2018\tFell\t-96.12\t30.70\tPoint\t18846\t2085\tPlantersville\tValid\tH6\t30.700000\t-96.116670\t1930-01-01T00:00:00.000\n\t\tFell\t26.71\t45.27\tPoint\t51706\t6913\tPleşcoi\tValid\tL5-6\t45.275000\t26.709720\t2008-01-01T00:00:00.000\n\t\tFell\t14.12\t50.53\tPoint\t18849\t39\tPloschkovitz\tValid\tL5\t50.533330\t14.116670\t1723-01-01T00:00:00.000\n\t\tFell\t104.92\t11.58\tPoint\t18851\t96\tPnompehn\tValid\tL6\t11.583330\t104.916670\t1868-01-01T00:00:00.000\n\t\tFound\t\t\t\t32592\t290.89999999999998\tDominion Range 03240\tValid\tLL5\t\t\t2002-01-01T00:00:00.000\n\t\tFell\t12.13\t50.93\tPoint\t18853\t3000\tPohlitz\tValid\tL5\t50.933330\t12.133330\t1819-01-01T00:00:00.000\n\t\tFell\t82.67\t26.72\tPoint\t18858\t350\tPokhra\tValid\tH5\t26.716670\t82.666670\t1866-01-01T00:00:00.000\n\t\tFell\t14.02\t66.35\tPoint\t18860\t253.6\tPollen\tValid\tCM2\t66.348330\t14.015000\t1942-01-01T00:00:00.000\n\t\tFell\t-4.32\t53.04\tPoint\t18865\t157\tPontlyfni\tValid\tWinonaite\t53.036390\t-4.319440\t1931-01-01T00:00:00.000\n11\t1987\tFell\t-103.30\t34.17\tPoint\t18874\t71400\tPortales Valley\tValid\tH6\t34.175000\t-103.295000\t1998-01-01T00:00:00.000\n\t\tFell\t-8.00\t38.50\tPoint\t18876\t4500\tPortugal\tValid\tStone-uncl\t38.500000\t-8.000000\t1796-01-01T00:00:00.000\n\t\tFell\t118.50\t31.42\tPoint\t18879\t665\tPo-wang Chen\tValid\tLL\t31.416670\t118.500000\t1933-01-01T00:00:00.000\n\t\tFell\t13.94\t48.30\tPoint\t18883\t2125\tPrambachkirchen\tValid\tL6\t48.302500\t13.940830\t1932-01-01T00:00:00.000\n\t\tFell\t14.03\t49.67\tPoint\t18887\t5555\tPribram\tValid\tH5\t49.666670\t14.033330\t1959-01-01T00:00:00.000\n38\t2566\tFell\t-83.85\t39.12\tPoint\t18888\t900\tPricetown\tValid\tL6\t39.116670\t-83.850000\t1893-01-01T00:00:00.000\n\t\tFell\t-3.52\t39.35\tPoint\t45984\t500\tPuerto Lápice\tValid\tEucrite-br\t39.350000\t-3.516670\t2007-01-01T00:00:00.000\n\t\tFell\t75.18\t23.37\tPoint\t18899\t560\tPulsora\tValid\tH5\t23.366670\t75.183330\t1863-01-01T00:00:00.000\n\t\tFell\t21.27\t52.77\tPoint\t18901\t250000\tPultusk\tValid\tH5\t52.766670\t21.266670\t1868-01-01T00:00:00.000\n\t\tFell\t78.95\t13.33\tPoint\t18902\t100\tPunganaru\tValid\tStone-uncl\t13.333330\t78.950000\t1811-01-01T00:00:00.000\n\t\tFell\t-53.05\t-29.03\tPoint\t18905\t300000\tPutinga\tValid\tL6\t-29.033330\t-53.050000\t1937-01-01T00:00:00.000\n\t\tFell\t121.50\t32.08\tPoint\t18907\t1275\tQidong\tValid\tL/LL5\t32.083330\t121.500000\t1982-01-01T00:00:00.000\n\t\tFell\t106.47\t26.53\tPoint\t18908\t2600\tQingzhen\tValid\tEH3\t26.533330\t106.466670\t1976-01-01T00:00:00.000\n\t\tFell\t28.70\t-30.12\tPoint\t22357\t7000\tQueen's Mercy\tValid\tH6\t-30.116670\t28.700000\t1925-01-01T00:00:00.000\n\t\tFell\t95.18\t17.77\tPoint\t22358\t6045\tQuenggouk\tValid\tH4\t17.766670\t95.183330\t1857-01-01T00:00:00.000\n\t\tFell\t-0.67\t39.00\tPoint\t22360\t10750\tQuesa\tValid\tIron, IAB-ung\t39.000000\t-0.666670\t1898-01-01T00:00:00.000\n\t\tFell\t126.13\t44.62\tPoint\t22361\t17450\tQuija\tValid\tH\t44.616670\t126.133330\t1990-01-01T00:00:00.000\n\t\tFell\t0.25\t46.60\tPoint\t22363\t65\tQuincay\tValid\tL6\t46.600000\t0.250000\t1851-01-01T00:00:00.000\n\t\tFell\t-65.45\t-26.67\tPoint\t22368\t5000\tRaco\tValid\tH5\t-26.666670\t-65.450000\t1957-01-01T00:00:00.000\n\t\tFell\t76.47\t27.73\tPoint\t22371\t10200\tRaghunathpura\tValid\tIron, IIAB\t27.725280\t76.465000\t1986-01-01T00:00:00.000\n\t\tFell\t70.20\t28.23\tPoint\t31302\t67225\tRahimyar Khan\tValid\tL5\t28.225000\t70.200000\t1983-01-01T00:00:00.000\n\t\tFell\t37.03\t52.98\tPoint\t22376\t9000\tRakovka\tValid\tL6\t52.983330\t37.033330\t1878-01-01T00:00:00.000\n\t\tFell\t82.90\t26.45\tPoint\t22384\t3766\tRamnagar\tValid\tL6\t26.450000\t82.900000\t1940-01-01T00:00:00.000\n\t\tFell\t87.77\t24.17\tPoint\t22385\t100\tRampurhat\tValid\tLL\t24.166670\t87.766670\t1916-01-01T00:00:00.000\n\t\tFell\t6.93\t51.88\tPoint\t22386\t4682\tRamsdorf\tValid\tL6\t51.883330\t6.933330\t1958-01-01T00:00:00.000\n\t\tFell\t87.08\t23.98\tPoint\t22387\t290.39999999999998\tRanchapur\tValid\tH4\t23.983330\t87.083330\t1917-01-01T00:00:00.000\n\t\tFell\t-100.82\t19.87\tPoint\t22390\t300\tRancho de la Presa\tValid\tH5\t19.866670\t-100.816670\t1899-01-01T00:00:00.000\n\t\tFell\t72.02\t25.38\tPoint\t22392\t3224.5\tRangala\tValid\tL6\t25.383330\t72.016670\t1937-01-01T00:00:00.000\n\t\tFell\t115.70\t38.20\tPoint\t22394\t4910\tRaoyang\tValid\tL6\t38.200000\t115.700000\t1919-01-01T00:00:00.000\n\t\tFell\t50.15\t26.67\tPoint\t22395\t6.1\tRas Tanura\tValid\tH6\t26.666670\t50.150000\t1961-01-01T00:00:00.000\n\t\tFell\t26.53\t43.50\tPoint\t22396\t24700\tRasgrad\tValid\tStone-uncl\t43.500000\t26.533330\t1740-01-01T00:00:00.000\n\t\tFell\t17.98\t52.20\tPoint\t22398\t910\tRatyn\tValid\tStone-uncl\t52.200000\t17.983330\t1880-01-01T00:00:00.000\n8\t1391\tFell\t-119.76\t38.14\tPoint\t53502\t18.41\tRed Canyon Lake\tValid\tH5\t38.137420\t-119.758120\t2007-01-01T00:00:00.000\n\t\tFell\t-5.33\t42.48\tPoint\t22584\t17300\tReliegos\tValid\tL5\t42.475000\t-5.333330\t1947-01-01T00:00:00.000\n\t\tFell\t111.37\t-6.73\tPoint\t22585\t10000\tRembang\tValid\tIron, IVA\t-6.733330\t111.366670\t1919-01-01T00:00:00.000\n\t\tFell\t11.28\t44.77\tPoint\t22586\t1000\tRenazzo\tValid\tCR2\t44.766670\t11.283330\t1824-01-01T00:00:00.000\n\t\tFell\t-65.28\t-32.75\tPoint\t22587\t300\tRenca\tValid\tL5\t-32.750000\t-65.283330\t1925-01-01T00:00:00.000\n\t\tFell\t116.13\t38.67\tPoint\t22589\t355\tRenqiu\tValid\tL6\t38.666670\t116.133330\t1916-01-01T00:00:00.000\n\t\tFell\t45.67\t48.60\tPoint\t22590\t7000\tRepeev Khutor\tValid\tIron, IIF\t48.600000\t45.666670\t1933-01-01T00:00:00.000\n\t\tFell\t-118.95\t51.33\tPoint\t22592\t1\tRevelstoke\tValid\tCI1\t51.333330\t-118.950000\t1965-01-01T00:00:00.000\n\t\tFell\t76.67\t28.20\tPoint\t22593\t3332\tRewari\tValid\tL6\t28.200000\t76.666670\t1929-01-01T00:00:00.000\n37\t2388\tFell\t-83.03\t35.03\tPoint\t22597\t668\tRich Mountain\tValid\tL6\t35.033330\t-83.033330\t1903-01-01T00:00:00.000\n\t\tFell\t-66.15\t-44.12\tPoint\t24140\t20000\tUzcudun\tValid\tL\t-44.116670\t-66.150000\t1948-01-01T00:00:00.000\n3\t569\tFell\t-102.32\t46.88\tPoint\t22599\t90000\tRichardton\tValid\tH5\t46.883330\t-102.316670\t1918-01-01T00:00:00.000\n23\t2885\tFell\t-99.03\t31.25\tPoint\t22602\t1900\tRichland Springs\tValid\tOC\t31.250000\t-99.033330\t1980-01-01T00:00:00.000\n40\t2764\tFell\t-77.50\t37.47\tPoint\t22603\t1800\tRichmond\tValid\tLL5\t37.466670\t-77.500000\t1828-01-01T00:00:00.000\n\t\tFell\t-49.80\t-26.10\tPoint\t22611\t1310\tRio Negro\tValid\tL4\t-26.100000\t-49.800000\t1934-01-01T00:00:00.000\n\t\tFell\t9.52\t45.48\tPoint\t22614\t103.3\tRivolta de Bassi\tValid\tStone-uncl\t45.483330\t9.516670\t1491-01-01T00:00:00.000\n35\t150\tFell\t-86.28\t41.08\tPoint\t22637\t340\tRochester\tValid\tH6\t41.083330\t-86.283330\t1876-01-01T00:00:00.000\n\t\tFell\t150.52\t-23.38\tPoint\t22640\t1641\tRockhampton\tValid\tStone-uncl\t-23.383330\t150.516670\t1895-01-01T00:00:00.000\n\t\tFell\t0.55\t42.30\tPoint\t22641\t400\tRoda\tValid\tDiogenite\t42.300000\t0.550000\t1871-01-01T00:00:00.000\n\t\tFell\t10.80\t50.35\tPoint\t22642\t2900\tRodach\tValid\tStone-uncl\t50.350000\t10.800000\t1775-01-01T00:00:00.000\n50\t361\tFell\t-83.95\t44.52\tPoint\t22766\t10600\tRose City\tValid\tH5\t44.516670\t-83.950000\t1921-01-01T00:00:00.000\n\t\tFell\t-2.52\t52.77\tPoint\t22773\t3500\tRowton\tValid\tIron, IIIAB\t52.766670\t-2.516670\t1876-01-01T00:00:00.000\n\t\tFell\t29.83\t-1.45\tPoint\t22780\t465.5\tRuhobobo\tValid\tL6\t-1.450000\t29.833330\t1976-01-01T00:00:00.000\n\t\tFell\t36.53\t0.27\tPoint\t22782\t67\tRumuruti\tValid\tR3.8-6\t0.266670\t36.533330\t1934-01-01T00:00:00.000\n\t\tFell\t38.77\t-10.27\tPoint\t22783\t6000\tRupota\tValid\tL4-6\t-10.266670\t38.766670\t1949-01-01T00:00:00.000\n\t\tFell\t34.50\t51.13\tPoint\t22791\t13000\tRyechki\tValid\tL5\t51.133330\t34.500000\t1914-01-01T00:00:00.000\n\t\tFell\t82.08\t27.43\tPoint\t22792\t1250\tSabetmahet\tValid\tH5\t27.433330\t82.083330\t1855-01-01T00:00:00.000\n\t\tFell\t91.67\t23.08\tPoint\t22793\t478\tSabrum\tValid\tLL6\t23.083330\t91.666670\t1999-01-01T00:00:00.000\n\t\tFell\t14.88\t51.53\tPoint\t22796\t\tSagan\tValid\tStone-uncl\t51.533330\t14.883330\t1636-01-01T00:00:00.000\n\t\tFell\t1.38\t43.73\tPoint\t23101\t14000\tSaint-Sauveur\tValid\tEH5\t43.733330\t1.383330\t1914-01-01T00:00:00.000\n\t\tFell\t0.23\t45.30\tPoint\t23102\t271000\tSaint-Séverin\tValid\tLL6\t45.300000\t0.233330\t1966-01-01T00:00:00.000\n\t\tFell\t136.30\t35.67\tPoint\t23103\t4180\tSakauchi\tValid\tIron\t35.666670\t136.300000\t1913-01-01T00:00:00.000\n12\t2409\tFell\t-122.97\t44.98\tPoint\t23107\t61.4\tSalem\tValid\tL6\t44.979170\t-122.969440\t1981-01-01T00:00:00.000\n\t\tFell\t4.63\t46.05\tPoint\t23111\t9000\tSalles\tValid\tL5\t46.050000\t4.633330\t1798-01-01T00:00:00.000\n\t\tFell\t11.05\t52.75\tPoint\t23114\t43\tSalzwedel\tValid\tLL5\t52.750000\t11.050000\t1985-01-01T00:00:00.000\n\t\tFell\t74.87\t25.67\tPoint\t23115\t2462\tSamelia\tValid\tIron, IIIAB\t25.666670\t74.866670\t1921-01-01T00:00:00.000\n8\t1174\tFell\t-117.66\t33.48\tPoint\t23128\t56\tSan Juan Capistrano\tValid\tH6\t33.484720\t-117.662500\t1973-01-01T00:00:00.000\n\t\tFell\t13.00\t43.67\tPoint\t31315\t237\tSan Michele\tValid\tL6\t43.666670\t13.000000\t2002-01-01T00:00:00.000\n\t\tFell\t-71.40\t-31.02\tPoint\t23130\t282\tSan Pedro de Quiles\tValid\tL6\t-31.016670\t-71.400000\t1956-01-01T00:00:00.000\n\t\tFell\t-100.65\t19.77\tPoint\t34063\t460\tSan Pedro Jacuaro\tValid\tLL6\t19.766670\t-100.650000\t1968-01-01T00:00:00.000\n\t\tFell\t-51.87\t-29.20\tPoint\t23161\t400\tSanta Barbara\tValid\tL4\t-29.200000\t-51.866670\t1873-01-01T00:00:00.000\n\t\tFell\t-99.33\t24.17\tPoint\t23164\t60\tSanta Cruz\tValid\tCM2\t24.166670\t-99.333330\t1939-01-01T00:00:00.000\n\t\tFell\t-61.70\t-33.90\tPoint\t23165\t5500\tSanta Isabel\tValid\tL6\t-33.900000\t-61.700000\t1924-01-01T00:00:00.000\n\t\tFell\t-68.49\t-31.54\tPoint\t50909\t4000\tSanta Lucia (2008)\tValid\tL6\t-31.535556\t-68.489444\t2008-01-01T00:00:00.000\n\t\tFell\t-49.38\t-20.81\tPoint\t23171\t927\tSão Jose do Rio Preto\tValid\tH4\t-20.810000\t-49.380560\t1962-01-01T00:00:00.000\n\t\tFell\t46.55\t52.55\tPoint\t23176\t200000\tSaratov\tValid\tL4\t52.550000\t46.550000\t1918-01-01T00:00:00.000\n\t\tFell\t137.78\t34.72\tPoint\t23187\t695\tSasagase\tValid\tH\t34.716670\t137.783330\t1688-01-01T00:00:00.000\n\t\tFell\t-0.85\t43.15\tPoint\t23188\t4000\tSauguis\tValid\tL6\t43.150000\t-0.850000\t1868-01-01T00:00:00.000\n\t\tFell\t29.87\t47.22\tPoint\t23190\t2500\tSavtschenskoje\tValid\tLL4\t47.216670\t29.866670\t1894-01-01T00:00:00.000\n\t\tFell\t139.40\t35.87\tPoint\t23192\t430\tSayama\tValid\tCM2\t35.866670\t139.400000\t1986-01-01T00:00:00.000\n\t\tFell\t17.57\t49.23\tPoint\t23455\t412\tSazovice\tValid\tL5\t49.233330\t17.566670\t1934-01-01T00:00:00.000\n\t\tFell\t15.05\t53.35\tPoint\t23457\t7000\tSchellin\tValid\tL\t53.350000\t15.050000\t1715-01-01T00:00:00.000\n47\t2142\tFell\t-73.95\t42.86\tPoint\t23458\t283.3\tSchenectady\tValid\tH5\t42.860830\t-73.950280\t1968-01-01T00:00:00.000\n\t\tFell\t10.47\t48.12\tPoint\t23460\t8000\tSchönenberg\tValid\tL6\t48.116670\t10.466670\t1846-01-01T00:00:00.000\n49\t1727\tFell\t-69.20\t44.37\tPoint\t23472\t5400\tSearsmont\tValid\tH5\t44.366670\t-69.200000\t1871-01-01T00:00:00.000\n\t\tFell\t27.13\t38.30\tPoint\t23473\t240\tSediköy\tValid\tL6\t38.300000\t27.133330\t1917-01-01T00:00:00.000\n\t\tFell\t84.78\t26.75\tPoint\t23476\t6930\tSegowlie\tValid\tLL6\t26.750000\t84.783330\t1853-01-01T00:00:00.000\n\t\tFell\t107.33\t-7.23\tPoint\t23481\t1590\tSelakopi\tValid\tH5\t-7.233330\t107.333330\t1939-01-01T00:00:00.000\n\t\tFell\t4.98\t22.83\tPoint\t23483\t150\tSeldebourak\tValid\tH5\t22.833330\t4.983330\t1947-01-01T00:00:00.000\n\t\tFell\t79.00\t22.25\tPoint\t23487\t691\tSemarkona\tValid\tLL3.00\t22.250000\t79.000000\t1940-01-01T00:00:00.000\n\t\tFell\t-0.05\t41.72\tPoint\t23495\t4000\tSena\tValid\tH4\t41.716670\t-0.050000\t1773-01-01T00:00:00.000\n\t\tFell\t140.51\t39.44\tPoint\t23496\t866\tSenboku\tValid\tH6\t39.438330\t140.511670\t1993-01-01T00:00:00.000\n\t\tFell\t79.50\t21.68\tPoint\t23500\t20000\tSeoni\tValid\tH6\t21.683890\t79.500830\t1966-01-01T00:00:00.000\n\t\tFell\t23.57\t41.05\tPoint\t23501\t8500\tSeres\tValid\tH4\t41.050000\t23.566670\t1818-01-01T00:00:00.000\n\t\tFell\t-36.77\t-8.38\tPoint\t23502\t1800\tSerra de Magé\tValid\tEucrite-cm\t-8.383330\t-36.766670\t1923-01-01T00:00:00.000\n\t\tFell\t-44.22\t-19.47\tPoint\t23504\t350\tSete Lagoas\tValid\tH4\t-19.466670\t-44.216670\t1908-01-01T00:00:00.000\n\t\tFell\t-6.00\t37.42\tPoint\t23508\t180\tSevilla\tValid\tLL4\t37.416670\t-6.000000\t1862-01-01T00:00:00.000\n\t\tFell\t36.60\t50.62\tPoint\t23509\t101000\tSevrukovo\tValid\tL5\t50.616670\t36.600000\t1874-01-01T00:00:00.000\n\t\tFell\t10.72\t34.75\tPoint\t23512\t7000\tSfax\tValid\tL6\t34.750000\t10.716670\t1989-01-01T00:00:00.000\n\t\tFell\t87.30\t23.10\tPoint\t23521\t4000\tShalka\tValid\tDiogenite\t23.100000\t87.300000\t1850-01-01T00:00:00.000\n40\t921\tFell\t-76.70\t37.83\tPoint\t23525\t1265\tSharps\tValid\tH3.4\t37.833330\t-76.700000\t1921-01-01T00:00:00.000\n\t\tFell\t-80.17\t44.05\tPoint\t23529\t18600\tShelburne\tValid\tL5\t44.050000\t-80.166670\t1904-01-01T00:00:00.000\n\t\tFell\t84.83\t24.55\tPoint\t23530\t5000\tShergotty\tValid\tMartian (shergottite)\t24.550000\t84.833330\t1865-01-01T00:00:00.000\n\t\tFell\t120.07\t33.65\tPoint\t23531\t605\tSheyang\tValid\tL6\t33.650000\t120.066670\t1976-01-01T00:00:00.000\n\t\tFell\t87.58\t25.85\tPoint\t23534\t3679.7\tShikarpur\tValid\tL6\t25.850000\t87.577500\t1921-01-01T00:00:00.000\n\t\tFell\t125.67\t43.50\tPoint\t23582\t3900\tShuangyang\tValid\tH5\t43.500000\t125.666670\t1971-01-01T00:00:00.000\n\t\tFell\t74.83\t33.72\tPoint\t23583\t5000\tShupiyan\tValid\tH6\t33.716670\t74.833330\t1912-01-01T00:00:00.000\n\t\tFell\t90.17\t24.33\tPoint\t23584\t3200\tShytal\tValid\tL6\t24.333330\t90.166670\t1863-01-01T00:00:00.000\n\t\tFell\t11.60\t43.12\tPoint\t23586\t3700\tSiena\tValid\tLL5\t43.116670\t11.600000\t1794-01-01T00:00:00.000\n\t\tFell\t134.65\t46.16\tPoint\t23593\t23000000\tSikhote-Alin\tValid\tIron, IIAB\t46.160000\t134.653330\t1947-01-01T00:00:00.000\n\t\tFell\t-101.38\t20.93\tPoint\t23594\t1710\tSilao\tValid\tH5\t20.933330\t-101.383330\t1995-01-01T00:00:00.000\n\t\tFell\t27.27\t44.12\tPoint\t55584\t0.15\tSilistra\tValid\tAchondrite-ung\t44.116670\t27.266670\t1917-01-01T00:00:00.000\n\t\tFell\t7.53\t49.98\tPoint\t23603\t1222\tSimmern\tValid\tH5\t49.983330\t7.533330\t1920-01-01T00:00:00.000\n\t\tFell\t32.48\t30.90\tPoint\t23606\t1455\tSinai\tValid\tL6\t30.900000\t32.483330\t1916-01-01T00:00:00.000\n\t\tFell\t69.55\t26.22\tPoint\t23611\t8400\tSindhri\tValid\tH5\t26.216670\t69.550000\t1901-01-01T00:00:00.000\n\t\tFell\t9.20\t39.30\tPoint\t23613\t2000\tSinnai\tValid\tH6\t39.300000\t9.200000\t1956-01-01T00:00:00.000\n19\t2351\tFell\t-103.67\t42.58\tPoint\t23614\t4100\tSioux County\tValid\tEucrite-mmict\t42.583330\t-103.666670\t1933-01-01T00:00:00.000\n\t\tFell\t82.58\t20.92\tPoint\t23616\t1600\tSitathali\tValid\tH5\t20.916670\t82.583330\t1875-01-01T00:00:00.000\n\t\tFell\t36.14\t39.82\tPoint\t23617\t40000\tSivas\tValid\tH6\t39.824670\t36.135830\t1989-01-01T00:00:00.000\n\t\tFell\t119.87\t32.43\tPoint\t23619\t630\tSixiangkou\tValid\tL5\t32.433330\t119.866670\t1989-01-01T00:00:00.000\n\t\tFell\t10.87\t59.73\tPoint\t23621\t850\tSki\tValid\tL6\t59.733330\t10.866670\t1848-01-01T00:00:00.000\n\t\tFell\t15.60\t45.68\tPoint\t23626\t1708\tSlavetic\tValid\tH5\t45.683330\t15.600000\t1868-01-01T00:00:00.000\n\t\tFell\t35.00\t55.00\tPoint\t23645\t2750\tSlobodka\tValid\tL4\t55.000000\t35.000000\t1818-01-01T00:00:00.000\n\t\tFell\t84.07\t27.13\tPoint\t23660\t72.900000000000006\tSoheria\tValid\tOC\t27.133330\t84.066670\t1960-01-01T00:00:00.000\n\t\tFell\t21.87\t43.67\tPoint\t23661\t80000\tSoko-Banja\tValid\tLL4\t43.666670\t21.866670\t1877-01-01T00:00:00.000\n\t\tFell\t1.73\t47.37\tPoint\t23663\t54\tSologne\tValid\tH5\t47.366670\t1.733330\t1860-01-01T00:00:00.000\n\t\tFell\t22.00\t54.01\tPoint\t53829\t1066\tSołtmany\tValid\tL6\t54.008830\t22.005000\t2011-01-01T00:00:00.000\n\t\tFell\t135.33\t35.17\tPoint\t23667\t17100\tSone\tValid\tH5\t35.166670\t135.333330\t1866-01-01T00:00:00.000\n\t\tFell\t125.00\t45.25\tPoint\t23668\t36900\tSongyuan\tValid\tL6\t45.250000\t125.000000\t1993-01-01T00:00:00.000\n\t\tFell\t23.50\t44.42\tPoint\t23670\t958\tSopot\tValid\tOC\t44.416670\t23.500000\t1927-01-01T00:00:00.000\n\t\tFell\t33.63\t1.70\tPoint\t23671\t2050\tSoroti\tValid\tIron, ungrouped\t1.700000\t33.633330\t1945-01-01T00:00:00.000\n\t\tFell\t0.05\t44.75\tPoint\t23081\t360\tSt. Caprais-de-Quinsac\tValid\tL6\t44.750000\t0.050000\t1883-01-01T00:00:00.000\n\t\tFell\t-1.50\t46.95\tPoint\t23082\t5500\tSt. Christophe-la-Chartreuse\tValid\tL6\t46.950000\t-1.500000\t1841-01-01T00:00:00.000\n\t\tFell\t3.75\t51.05\tPoint\t23083\t700\tSt. Denis Westrem\tValid\tL6\t51.050000\t3.750000\t1855-01-01T00:00:00.000\n\t\tFell\t-1.15\t48.02\tPoint\t23087\t4000\tSt. Germain-du-Pinel\tValid\tH6\t48.016670\t-1.150000\t1890-01-01T00:00:00.000\n18\t2223\tFell\t-90.23\t38.70\tPoint\t23089\t1000\tSt. Louis\tValid\tH4\t38.700000\t-90.233330\t1950-01-01T00:00:00.000\n\t\tFell\t27.42\t-32.02\tPoint\t23090\t13780\tSt. Mark's\tValid\tEH5\t-32.016670\t27.416670\t1903-01-01T00:00:00.000\n45\t424\tFell\t-76.38\t38.17\tPoint\t23091\t24.3\tSt. Mary's County\tValid\tLL3.3\t38.166670\t-76.383330\t1919-01-01T00:00:00.000\n\t\tFell\t3.93\t48.45\tPoint\t23092\t8300\tSt. Mesmin\tValid\tLL6\t48.450000\t3.933330\t1866-01-01T00:00:00.000\n\t\tFell\t27.20\t61.65\tPoint\t23093\t17000\tSt. Michel\tValid\tL6\t61.650000\t27.200000\t1910-01-01T00:00:00.000\n\t\tFell\t2.95\t43.43\tPoint\t23097\t134.30000000000001\tSt.-Chinian\tValid\tL6\t43.433330\t2.950000\t1959-01-01T00:00:00.000\n\t\tFell\t14.95\t59.93\tPoint\t23712\t34000\tStälldalen\tValid\tH5\t59.933330\t14.950000\t1876-01-01T00:00:00.000\n\t\tFell\t15.57\t49.28\tPoint\t23713\t52000\tStannern\tValid\tEucrite-mmict\t49.283330\t15.566670\t1808-01-01T00:00:00.000\n\t\tFell\t41.98\t45.05\tPoint\t23717\t1500\tStavropol\tValid\tL6\t45.050000\t41.983330\t1857-01-01T00:00:00.000\n\t\tFell\t3.00\t50.77\tPoint\t23099\t4960\tSte. Marguerite\tValid\tH4\t50.766670\t3.000000\t1962-01-01T00:00:00.000\n\t\tFell\t55.98\t53.67\tPoint\t23724\t325000\tSterlitamak\tValid\tIron, IIIAB\t53.666670\t55.983330\t1990-01-01T00:00:00.000\n\t\tFell\t9.05\t52.53\tPoint\t23726\t\tStolzenau\tValid\tStone-uncl\t52.533330\t9.050000\t1647-01-01T00:00:00.000\n24\t1040\tFell\t-73.13\t41.20\tPoint\t23728\t50\tStratford\tValid\tL6\t41.200000\t-73.133330\t1974-01-01T00:00:00.000\n\t\tFell\t-3.25\t56.58\tPoint\t23729\t13400\tStrathmore\tValid\tL6\t56.583330\t-3.250000\t1917-01-01T00:00:00.000\n\t\tFell\t-3.95\t50.38\tPoint\t23732\t10400\tStretchleigh\tValid\tStone-uncl\t50.383330\t-3.950000\t1623-01-01T00:00:00.000\n\t\tFell\t-72.98\t45.97\tPoint\t23733\t25400\tSt-Robert\tValid\tH5\t45.968610\t-72.978060\t1994-01-01T00:00:00.000\n15\t955\tFell\t-90.67\t36.48\tPoint\t23736\t3500\tSuccess\tValid\tL6\t36.483330\t-90.666670\t1924-01-01T00:00:00.000\n\t\tFell\t16.26\t50.54\tPoint\t23737\t815.3\tSuchy Dul\tValid\tL6\t50.538060\t16.263330\t1969-01-01T00:00:00.000\n\t\tFell\t113.47\t31.62\tPoint\t23738\t260000\tSuizhou\tValid\tL6\t31.616670\t113.466670\t1986-01-01T00:00:00.000\n\t\tFell\t78.03\t12.67\tPoint\t48951\t110000\tSulagiri\tValid\tLL6\t12.666670\t78.033330\t2008-01-01T00:00:00.000\n\t\tFell\t84.28\t25.93\tPoint\t23741\t1710.5\tSultanpur\tValid\tL/LL6\t25.933330\t84.283330\t1916-01-01T00:00:00.000\n\t\tFell\t133.17\t44.87\tPoint\t23745\t637\tSungach\tValid\tH5\t44.866670\t133.166670\t1935-01-01T00:00:00.000\n\t\tFell\t84.22\t26.72\tPoint\t23760\t7235\tSupuhee\tValid\tH6\t26.716670\t84.216670\t1865-01-01T00:00:00.000\n8\t1187\tFell\t-120.91\t38.80\tPoint\t55529\t992.5\tSutter's Mill\tValid\tC\t38.803890\t-120.908060\t2012-01-01T00:00:00.000\n29\t1637\tFell\t-86.29\t33.19\tPoint\t23773\t5560\tSylacauga\tValid\tH4\t33.188360\t-86.294500\t1954-01-01T00:00:00.000\n\t\tFell\t14.65\t49.40\tPoint\t23776\t7540\tTabor\tValid\tH5\t49.400000\t14.650000\t1753-01-01T00:00:00.000\n\t\tFell\t5.42\t36.18\tPoint\t23778\t9000\tTadjera\tValid\tL5\t36.183330\t5.416670\t1867-01-01T00:00:00.000\n\t\tFell\t-134.20\t59.70\tPoint\t23782\t10000\tTagish Lake\tValid\tC2-ung\t59.704440\t-134.201390\t2000-01-01T00:00:00.000\n\t\tFell\t137.31\t34.72\tPoint\t23784\t1000\tTahara\tValid\tH4/5\t34.720000\t137.305000\t1991-01-01T00:00:00.000\n\t\tFell\t134.90\t35.38\tPoint\t23789\t720\tTakenouchi\tValid\tH5\t35.383330\t134.900000\t1880-01-01T00:00:00.000\n\t\tFell\t\t\t\t23791\t1421\tTalampaya\tValid\tEucrite-cm\t\t\t1995-01-01T00:00:00.000\n\t\tFell\t112.77\t-7.75\tPoint\t23795\t10500\tTambakwatu\tValid\tL6\t-7.750000\t112.766670\t1975-01-01T00:00:00.000\n\t\tFell\t-7.01\t31.16\tPoint\t48691\t100000\tTamdakht\tValid\tH5\t31.163330\t-7.015000\t2008-01-01T00:00:00.000\n\t\tFell\t136.23\t35.43\tPoint\t23801\t905\tTané\tValid\tL5\t35.433330\t136.233330\t1918-01-01T00:00:00.000\n\t\tFell\t122.90\t45.40\tPoint\t23873\t3850\tTaonan\tValid\tL5\t45.400000\t122.900000\t1965-01-01T00:00:00.000\n\t\tFell\t10.42\t32.95\tPoint\t23884\t12000\tTatahouine\tValid\tDiogenite\t32.950000\t10.416670\t1931-01-01T00:00:00.000\n\t\tFell\t43.73\t19.38\tPoint\t23885\t2500\tTathlith\tValid\tL6\t19.383330\t43.733330\t1967-01-01T00:00:00.000\n\t\tFell\t44.45\t35.13\tPoint\t23887\t6000\tTauk\tValid\tL6\t35.133330\t44.450000\t1929-01-01T00:00:00.000\n\t\tFell\t23.50\t46.72\tPoint\t23888\t21000\tTauti\tValid\tL6\t46.716670\t23.500000\t1937-01-01T00:00:00.000\n\t\tFell\t142.95\t-25.73\tPoint\t23897\t160000\tTenham\tValid\tL6\t-25.733330\t142.950000\t1879-01-01T00:00:00.000\n\t\tFell\t26.95\t58.03\tPoint\t23898\t28500\tTennasilm\tValid\tL4\t58.033330\t26.950000\t1872-01-01T00:00:00.000\n\t\tFell\t70.60\t33.40\tPoint\t23908\t342\tThal\tValid\tH6\t33.400000\t70.600000\t1950-01-01T00:00:00.000\n\t\tFell\t37.15\t-1.00\tPoint\t54493\t14200\tThika\tValid\tL6\t-1.002780\t37.150280\t2011-01-01T00:00:00.000\n\t\tFell\t27.58\t-29.33\tPoint\t23976\t45300\tThuathe\tValid\tH4/5\t-29.333330\t27.583330\t2002-01-01T00:00:00.000\n\t\tFell\t118.99\t32.95\tPoint\t23984\t2232\tTianzhang\tValid\tH5\t32.946670\t118.990000\t1986-01-01T00:00:00.000\n\t\tFell\t17.12\t49.60\tPoint\t23989\t28000\tTieschitz\tValid\tH/L3.6\t49.600000\t17.116670\t1878-01-01T00:00:00.000\n34\t1762\tFell\t-89.68\t38.20\tPoint\t23998\t74800\tTilden\tValid\tL6\t38.200000\t-89.683330\t1927-01-01T00:00:00.000\n\t\tFell\t1.53\t14.25\tPoint\t23999\t3000\tTillaberi\tValid\tL6\t14.250000\t1.533330\t1970-01-01T00:00:00.000\n\t\tFell\t35.20\t54.50\tPoint\t24004\t65500\tTimochin\tValid\tH5\t54.500000\t35.200000\t1807-01-01T00:00:00.000\n\t\tFell\t79.42\t13.63\tPoint\t24009\t230\tTirupati\tValid\tH6\t13.633330\t79.416670\t1934-01-01T00:00:00.000\n\t\tFell\t-7.61\t29.48\tPoint\t54823\t7000\tTissint\tValid\tMartian (shergottite)\t29.481950\t-7.611230\t2011-01-01T00:00:00.000\n\t\tFell\t111.53\t-7.08\tPoint\t24011\t20000\tTjabe\tValid\tH6\t-7.083330\t111.533330\t1869-01-01T00:00:00.000\n\t\tFell\t106.58\t-6.67\tPoint\t24012\t16500\tTjerebon\tValid\tL5\t-6.666670\t106.583330\t1922-01-01T00:00:00.000\n\t\tFell\t34.77\t47.85\tPoint\t24019\t600\tTomakovka\tValid\tLL6\t47.850000\t34.766670\t1905-01-01T00:00:00.000\n"
  },
  {
    "path": "tests/golden/load-jsonla.tsv",
    "content": "name\twidth\ttype\tfmtstr\tvalue\taggregators\tsortorder\nName\t16\t\t\tDaniel\t\t\nNumber\t8\tint\t\t1\t\t\nExile\t7\tbool\t\tTrue\t\t\n"
  },
  {
    "path": "tests/golden/load-lsv.lsv",
    "content": "Date: 7/3/2018 3:32p\nCustomer: Kyle Kennedy\nSKU: FOOD121\nItem: Food, Adult Cat - 3.5 oz\nQuantity: 1\nUnit: $4.22\nPaid: $4.22\n\nDate: 7/5/2018 4:15p\nCustomer: Douglas \"Dougie\" Powers\nSKU: FOOD121\nItem: Food, Adult Cat 3.5 oz\nQuantity: 1\nUnit: $4.22\nPaid: $4.22\n\nDate: 7/6/2018 12:15p\nCustomer: 桜 高橋 (Sakura Takahashi)\nSKU: FOOD122\nItem: Food, Senior Wet Cat - 3 oz\nQuantity: 12\nUnit: $1.29\nPaid: 157¥\n\nDate: 7/10/2018 10:28a\nCustomer: David Attenborough\nSKU: NSCT201\nItem: Food, Salamander\nQuantity: 30\nUnit: $.05\nPaid: $1.5\n\nDate: 7/10/2018 5:23p\nCustomer: Susan Ashworth\nSKU: CAT060\nItem: Cat, Korat (Felis catus)\nQuantity: 1\nUnit: $720.42\nPaid: $720.42\n\nDate: 7/10/2018 5:23p\nCustomer: Susan Ashworth\nSKU: FOOD130\nItem: Food, Kitten 3kg\nQuantity: 1\nUnit: $14.94\nPaid: $14.94\n\nDate: 7/13/2018 10:26a\nCustomer: Wil Wheaton\nSKU: NSCT523\nItem: Monster, Rust (Monstrus gygaxus)\nQuantity: 1\nUnit: $39.95\nPaid: $39.95\n\nDate: 7/13/2018 3:49p\nCustomer: Robert Armstrong\nSKU: FOOD216\nItem: BFF Oh My Gravy! Chicken & Shrimp 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 7/17/2018 9:01a\nCustomer: Robert Armstrong\nSKU: FOOD217\nItem: BFF Oh My Gravy! Duck & Tuna 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 7/17/2018 11:30a\nCustomer: Helen Halestorm\nSKU: LAGO342\nItem: Rabbit (Oryctolagus cuniculus)\nQuantity: 2\nUnit: $32.94\nPaid: $65.88\n\nDate: 7/18/2018 12:16p\nCustomer: 桜 高橋 (Sakura Takahashi)\nSKU: FOOD122\nItem: Food, Senior Wet Cat - 3 oz\nQuantity: 6\nUnit: $1.29\nPaid: 157¥\n\nDate: 7/19/2018 10:28a\nCustomer: Rubeus Hagrid\nSKU: FOOD170\nItem: Food, Dog - 5kg\nQuantity: 5\nUnit: $44.95\nPaid: $224.75\n\nDate: 7/20/2018 2:13p\nCustomer: Jon Arbuckle\nSKU: FOOD167\nItem: Food, Premium Wet Cat - 3.5 oz\nQuantity: 50\nUnit: $3.95\nPaid: $197.5\n\nDate: 7/23/2018 1:41p\nCustomer: Robert Armstrong\nSKU: FOOD215\nItem: BFF Oh My Gravy! Lamb & Tuna 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 7/23/2018 4:23p\nCustomer: Douglas \"Dougie\" Powers\nSKU: TOY235\nItem: Laser Pointer\nQuantity: 1\nUnit: $16.12\nPaid: $16.12\n\nDate: 7/24/2018 12:16p\nCustomer: 桜 高橋 (Sakura Takahashi)\nSKU: FOOD122\nItem: Food, Senior Wet Cat - 3 oz\nQuantity: 3\nUnit: $1.29\nPaid: 157¥\n\nDate: 7/26/2018 4:39p\nCustomer: Douglas \"Dougie\" Powers\nSKU: FOOD420\nItem: Food, Shark - 10 kg\nQuantity: 1\nUnit: $15.70\nPaid: $15.7\n\nDate: 7/27/2018 12:16p\nCustomer: 桜 高橋 (Sakura Takahashi)\nSKU: FOOD122\nItem: Food, Senior Wet Cat - 3 oz\nQuantity: 3\nUnit: $1.29\nPaid: 157¥\n\nDate: 7/30/2018 12:17p\nCustomer: 桜 高橋 (Sakura Takahashi)\nSKU: RETURN\nItem: Food, Senior Wet Cat - 3 oz\nQuantity: 1\nUnit: $1.29\nPaid: 157¥\n\nDate: 7/31/2018 5:42p\nCustomer: Rubeus Hagrid\nSKU: CAT060\nItem: Food, Dragon - 50kg\nQuantity: 5\nUnit: $720.42\nPaid: $3602.1\n\nDate: 8/1/2018 2:44p\nCustomer: David Attenborough\nSKU: FOOD360\nItem: Food, Rhinocerous - 50kg\nQuantity: 4\nUnit: $5.72\nPaid: $22.88\n\nDate: 8/2/2018 5:12p\nCustomer: Susan Ashworth\nSKU: CAT110\nItem: Cat, Maine Coon (Felix catus)\nQuantity: 1\nUnit: $1,309.68\nPaid: $1309.68\n\nDate: 8/2/2018 5:12p\nCustomer: Susan Ashworth\nSKU: FOOD130\nItem: Food, Kitten 3kg\nQuantity: 3\nUnit: $14.94\nPaid: $44.82\n\nDate: 8/6/2018 10:21a\nCustomer: Robert Armstrong\nSKU: FOOD212\nItem: BFF Oh My Gravy! Beef & Chicken 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 8/7/2018 4:12p\nCustomer: Juan Johnson\nSKU: REPT082\nItem: Kingsnake, California (Lampropeltis getula)\nQuantity: 1\nUnit: $89.95\nPaid: $89.95\n\nDate: 8/7/2018 4:12p\nCustomer: Juan Johnson\nSKU: RDNT443\nItem: Mouse, Pinky (Mus musculus)\nQuantity: 1\nUnit: $1.49\nPaid: $1.49\n\nDate: 8/10/2018 4:31p\nCustomer: Robert Armstrong\nSKU: FOOD211\nItem: BFF Oh My Gravy! Chicken & Turkey 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 8/13/2018 2:07p\nCustomer: Monica Johnson\nSKU: RDNT443\nItem: Mouse, Pinky (Mus musculus)\nQuantity: 1\nUnit: $1.49\nPaid: $1.49\n\nDate: 8/13/2018 2:08p\nCustomer: María Fernández\nSKU: FOOD146\nItem: Forti Diet Prohealth Mouse/Rat 3lbs\nQuantity: 2\nUnit: $2.00\nPaid: $4.0\n\nDate: 8/15/2018 11:57a\nCustomer: Mr. Praline\nSKU: RETURN\nItem: Parrot, Norwegian Blue (Mopsitta tanta)\nQuantity: 1\nUnit: $2300.00\nPaid: -$2300.0\n\nDate: 8/15/2018 3:48p\nCustomer: Kyle Kennedy\nSKU: FOOD121\nItem: Food, Adult Cat - 3.5 oz\nQuantity: 2\nUnit: $4.22\nPaid: $8.44\n\nDate: 8/16/2018 11:50a\nCustomer: Helen Halestorm\nSKU: RETURN\nItem: Rabbit (Oryctolagus cuniculus)\nQuantity: 6\nUnit: $0\nPaid: $0.0\n\nDate: 8/16/2018 4:00p\nCustomer: Kyle Kennedy\nSKU: DOG010\nItem: Dog, Golden Retriever (Canis lupus familiaris)\nQuantity: 1\nUnit: $2,495.99\nPaid: $2495.99\n\nDate: 8/16/2018 5:15p\nCustomer: Michael Smith\nSKU: BIRD160\nItem: Parakeet, Blue (Melopsittacus undulatus)\nQuantity: 1\nUnit: 29.95\nPaid: $31.85\n\nDate: 8/17/2018 9:26a\nCustomer: Rubeus Hagrid\nSKU: NSCT201\nItem: Food, Spider\nQuantity: 5\nUnit: $.05\nPaid: $0.25\n\nDate: 8/20/2018 9:36a\nCustomer: Kyle Kennedy\nSKU: RETURN\nItem: Dog, Golden Retriever (Canis lupus familiaris)\nQuantity: 1\nUnit: $1,247.99\nPaid: -$1247.99\n\nDate: 8/20/2018 1:47p\nCustomer: מרוסיה ניסנהולץ אבולעפיה\nSKU: GOAT224\nItem: Goat, American Pygmy (Capra hircus)\nQuantity: 1\nUnit: ₪499\nPaid: $160.51\n\nDate: 8/20/2018 3:31p\nCustomer: Monica Johnson\nSKU: NSCT201\nItem: Crickets, Adult Live (Gryllus assimilis)\nQuantity: 30\nUnit: $.05\nPaid: $1.5\n\nDate: 8/20/2018 5:12p\nCustomer: David Attenborough\nSKU: NSCT084\nItem: Food, Pangolin\nQuantity: 30\nUnit: $.17\nPaid: $5.10\n\nDate: 8/21/2018 12:13p\nCustomer: Robert Armstrong\nSKU: FOOD214\nItem: BFF Oh My Gravy! Duck & Salmon 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 8/22/2018 9:38a\nCustomer: David Attenborough\nSKU: BIRD160\nItem: Food, Quoll\nQuantity: 1\nUnit: 29.95\nPaid: $29.95\n\nDate: 8/22/2018 2:13p\nCustomer: Jon Arbuckle\nSKU: FOOD170\nItem: Food, Adult Dog - 5kg\nQuantity: 1\nUnit: $44.95\nPaid: $44.95\n\nDate: 8/22/2018 5:49p\nCustomer: מרוסיה ניסנהולץ\nSKU: SFTY052\nItem: Fire Extinguisher, kitchen-rated\nQuantity: \nUnit: \nPaid: \n\nDate: 8/24/2018 11:42a\nCustomer: Robert Armstrong\nSKU: FOOD218\nItem: BFF Oh My Gravy! Chicken & Salmon 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 8/27/2018 3:05p\nCustomer: Monica Johnson\nSKU: NSCT443\nItem: Mealworms, Large (Tenebrio molitor) 100ct\nQuantity: 1\nUnit: $1.99\nPaid: $1.99\n\nDate: 8/28/2018 5:32p\nCustomer: Susan Ashworth\nSKU: CAT020\nItem: Cat, Scottish Fold (Felis catus)\nQuantity: 1\nUnit: $1,964.53\nPaid: $1964.53\n\nDate: 8/28/2018 5:32p\nCustomer: Susan Ashworth\nSKU: FOOD130\nItem: Food, Kitten 3kg\nQuantity: 2\nUnit: $14.94\nPaid: $29.88\n\nDate: 8/29/2018 10:07a\nCustomer: Robert Armstrong\nSKU: FOOD219\nItem: BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\nQuantity: 4\nUnit: $12.95\nPaid: $51.8\n\nDate: 8/31/2018 12:00a\nCustomer: Robert Armstrong\nSKU: FOOD219\nItem: BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\nQuantity: 144\nUnit: $12.95\nPaid: $1864.8\n\nDate: 8/31/2018 5:57p\nCustomer: Juan Johnson\nSKU: REPT217\nItem: Lizard, Spinytail (Uromastyx ornatus)\nQuantity: 1\nUnit: $99.95\nPaid: $99.95\n\nDate: \nCustomer: \nSKU: \nItem: \nQuantity: \nUnit: \nPaid: \n\n"
  },
  {
    "path": "tests/golden/load-lsv.tsv",
    "content": "Date\tCustomer\tSKU\tItem\tQuantity\tUnit\tPaid\n7/3/2018 3:32p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t1\t$4.22\t$4.22\n7/5/2018 4:15p\tDouglas \"Dougie\" Powers\tFOOD121\tFood, Adult Cat 3.5 oz\t1\t$4.22\t$4.22\n7/6/2018 12:15p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t$1.29\t157¥\n7/10/2018 10:28a\tDavid Attenborough\tNSCT201\tFood, Salamander\t30\t$.05\t$1.5\n7/10/2018 5:23p\tSusan Ashworth\tCAT060\tCat, Korat (Felis catus)\t1\t$720.42\t$720.42\n7/10/2018 5:23p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t1\t$14.94\t$14.94\n7/13/2018 10:26a\tWil Wheaton\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t1\t$39.95\t$39.95\n7/13/2018 3:49p\tRobert Armstrong\tFOOD216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 9:01a\tRobert Armstrong\tFOOD217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 11:30a\tHelen Halestorm\tLAGO342\tRabbit (Oryctolagus cuniculus)\t2\t$32.94\t$65.88\n7/18/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t6\t$1.29\t157¥\n7/19/2018 10:28a\tRubeus Hagrid\tFOOD170\tFood, Dog - 5kg\t5\t$44.95\t$224.75\n7/20/2018 2:13p\tJon Arbuckle\tFOOD167\tFood, Premium Wet Cat - 3.5 oz\t50\t$3.95\t$197.5\n7/23/2018 1:41p\tRobert Armstrong\tFOOD215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/23/2018 4:23p\tDouglas \"Dougie\" Powers\tTOY235\tLaser Pointer\t1\t$16.12\t$16.12\n7/24/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/26/2018 4:39p\tDouglas \"Dougie\" Powers\tFOOD420\tFood, Shark - 10 kg\t1\t$15.70\t$15.7\n7/27/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/30/2018 12:17p\t桜 高橋 (Sakura Takahashi)\tRETURN\tFood, Senior Wet Cat - 3 oz\t1\t$1.29\t157¥\n7/31/2018 5:42p\tRubeus Hagrid\tCAT060\tFood, Dragon - 50kg\t5\t$720.42\t$3602.1\n8/1/2018 2:44p\tDavid Attenborough\tFOOD360\tFood, Rhinocerous - 50kg\t4\t$5.72\t$22.88\n8/2/2018 5:12p\tSusan Ashworth\tCAT110\tCat, Maine Coon (Felix catus)\t1\t$1,309.68\t$1309.68\n8/2/2018 5:12p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t3\t$14.94\t$44.82\n8/6/2018 10:21a\tRobert Armstrong\tFOOD212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t4\t$12.95\t$51.8\n8/7/2018 4:12p\tJuan Johnson\tREPT082\tKingsnake, California (Lampropeltis getula)\t1\t$89.95\t$89.95\n8/7/2018 4:12p\tJuan Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/10/2018 4:31p\tRobert Armstrong\tFOOD211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t4\t$12.95\t$51.8\n8/13/2018 2:07p\tMonica Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/13/2018 2:08p\tMaría Fernández\tFOOD146\tForti Diet Prohealth Mouse/Rat 3lbs\t2\t$2.00\t$4.0\n8/15/2018 11:57a\tMr. Praline\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t1\t$2300.00\t-$2300.0\n8/15/2018 3:48p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t2\t$4.22\t$8.44\n8/16/2018 11:50a\tHelen Halestorm\tRETURN\tRabbit (Oryctolagus cuniculus)\t6\t$0\t$0.0\n8/16/2018 4:00p\tKyle Kennedy\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$2,495.99\t$2495.99\n8/16/2018 5:15p\tMichael Smith\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t1\t29.95\t$31.85\n8/17/2018 9:26a\tRubeus Hagrid\tNSCT201\tFood, Spider\t5\t$.05\t$0.25\n8/20/2018 9:36a\tKyle Kennedy\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$1,247.99\t-$1247.99\n8/20/2018 1:47p\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tGoat, American Pygmy (Capra hircus)\t1\t₪499\t$160.51\n8/20/2018 3:31p\tMonica Johnson\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t30\t$.05\t$1.5\n8/20/2018 5:12p\tDavid Attenborough\tNSCT084\tFood, Pangolin\t30\t$.17\t$5.10\n8/21/2018 12:13p\tRobert Armstrong\tFOOD214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/22/2018 9:38a\tDavid Attenborough\tBIRD160\tFood, Quoll\t1\t29.95\t$29.95\n8/22/2018 2:13p\tJon Arbuckle\tFOOD170\tFood, Adult Dog - 5kg\t1\t$44.95\t$44.95\n8/22/2018 5:49p\tמרוסיה ניסנהולץ\tSFTY052\tFire Extinguisher, kitchen-rated\t\t\t\n8/24/2018 11:42a\tRobert Armstrong\tFOOD218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/27/2018 3:05p\tMonica Johnson\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t1\t$1.99\t$1.99\n8/28/2018 5:32p\tSusan Ashworth\tCAT020\tCat, Scottish Fold (Felis catus)\t1\t$1,964.53\t$1964.53\n8/28/2018 5:32p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t2\t$14.94\t$29.88\n8/29/2018 10:07a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t4\t$12.95\t$51.8\n8/31/2018 12:00a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t144\t$12.95\t$1864.8\n8/31/2018 5:57p\tJuan Johnson\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t1\t$99.95\t$99.95\n\t\t\t\t\t\t\n"
  },
  {
    "path": "tests/golden/load-msgpack.tsv",
    "content": ":@computed_region_cbhk_fwbd\t:@computed_region_nnqa_25f4\tfall\tgeolocation.coordinates[0]\tgeolocation.coordinates[1]\tgeolocation.type\tid\tmass\tname\tnametype\trecclass\treclat\treclong\tyear\n\t\tFell\t6.08\t50.77\tPoint\t1\t21\tAachen\tValid\tL5\t50.775000\t6.083330\t1880-01-01T00:00:00.000\n\t\tFell\t10.23\t56.18\tPoint\t2\t720\tAarhus\tValid\tH6\t56.183330\t10.233330\t1951-01-01T00:00:00.000\n"
  },
  {
    "path": "tests/golden/load-msgpackz.tsv",
    "content": ":@computed_region_cbhk_fwbd\t:@computed_region_nnqa_25f4\tfall\tgeolocation.coordinates[0]\tgeolocation.coordinates[1]\tgeolocation.type\tid\tmass\tname\tnametype\trecclass\treclat\treclong\tyear\n\t\tFell\t6.08\t50.77\tPoint\t1\t21\tAachen\tValid\tL5\t50.775000\t6.083330\t1880-01-01T00:00:00.000\n\t\tFell\t10.23\t56.18\tPoint\t2\t720\tAarhus\tValid\tH6\t56.183330\t10.233330\t1951-01-01T00:00:00.000\n"
  },
  {
    "path": "tests/golden/load-numpy.tsv",
    "content": "date\topen\thigh\tlow\tclose\tvolume\tadj_close\n2004-08-19\t100.00\t104.06\t95.96\t100.34\t22351900\t100.34\n2004-08-20\t101.01\t109.08\t100.50\t108.31\t11428600\t108.31\n2004-08-23\t110.75\t113.48\t109.05\t109.40\t9137200\t109.40\n2004-08-24\t111.24\t111.60\t103.57\t104.87\t7631300\t104.87\n2004-08-25\t104.96\t108.00\t103.88\t106.00\t4598900\t106.00\n2004-08-26\t104.95\t107.95\t104.66\t107.91\t3551000\t107.91\n2004-08-27\t108.10\t108.62\t105.69\t106.15\t3109000\t106.15\n2004-08-30\t105.28\t105.49\t102.01\t102.01\t2601000\t102.01\n2004-08-31\t102.30\t103.71\t102.16\t102.37\t2461400\t102.37\n2004-09-01\t102.70\t102.97\t99.67\t100.25\t4573700\t100.25\n2004-09-02\t99.19\t102.37\t98.94\t101.51\t7566900\t101.51\n2004-09-03\t100.95\t101.74\t99.32\t100.01\t2578800\t100.01\n2004-09-07\t101.01\t102.00\t99.61\t101.58\t2926700\t101.58\n2004-09-08\t100.74\t103.03\t100.50\t102.30\t2495300\t102.30\n2004-09-09\t102.53\t102.71\t101.00\t102.31\t2032900\t102.31\n2004-09-10\t101.60\t106.56\t101.30\t105.33\t4353800\t105.33\n2004-09-13\t106.63\t108.41\t106.46\t107.50\t3926000\t107.50\n2004-09-14\t107.45\t112.00\t106.79\t111.49\t5419900\t111.49\n2004-09-15\t110.56\t114.23\t110.20\t112.00\t5361900\t112.00\n2004-09-16\t112.34\t115.80\t111.65\t113.97\t4637800\t113.97\n2004-09-17\t114.42\t117.49\t113.55\t117.49\t4741000\t117.49\n2004-09-20\t116.95\t121.60\t116.77\t119.36\t5319700\t119.36\n2004-09-21\t119.81\t120.42\t117.51\t117.84\t3618000\t117.84\n2004-09-22\t117.40\t119.67\t116.81\t118.38\t3794400\t118.38\n2004-09-23\t118.84\t122.63\t117.02\t120.82\t4272100\t120.82\n2004-09-24\t120.94\t124.10\t119.76\t119.83\t4566300\t119.83\n2004-09-27\t119.56\t120.88\t117.80\t118.26\t3536600\t118.26\n2004-09-28\t121.30\t127.40\t120.21\t126.86\t8473000\t126.86\n2004-09-29\t126.70\t135.02\t126.23\t131.08\t15273500\t131.08\n2004-09-30\t129.90\t132.30\t129.00\t129.60\t6885900\t129.60\n2004-10-01\t130.80\t134.24\t128.90\t132.58\t7570000\t132.58\n2004-10-04\t135.25\t136.87\t134.03\t135.06\t6517900\t135.06\n2004-10-05\t134.66\t138.53\t132.24\t138.37\t7494100\t138.37\n2004-10-06\t137.55\t138.45\t136.00\t137.08\t6697400\t137.08\n2004-10-07\t136.92\t139.88\t136.55\t138.85\t7064600\t138.85\n2004-10-08\t138.72\t139.68\t137.02\t137.73\t5540300\t137.73\n2004-10-11\t137.00\t138.86\t133.85\t135.26\t5241300\t135.26\n2004-10-12\t134.44\t137.61\t133.40\t137.40\t5838600\t137.40\n2004-10-13\t143.32\t143.55\t140.08\t140.90\t9893000\t140.90\n2004-10-14\t141.01\t142.38\t138.56\t142.00\t5226300\t142.00\n2004-10-15\t144.93\t145.50\t141.95\t144.11\t6604000\t144.11\n2004-10-18\t143.20\t149.20\t141.21\t149.16\t7025200\t149.16\n2004-10-19\t150.50\t152.40\t147.35\t147.94\t9064000\t147.94\n2004-10-20\t148.03\t148.99\t139.60\t140.49\t11372700\t140.49\n2004-10-21\t144.40\t150.13\t141.62\t149.38\t14589500\t149.38\n2004-10-22\t170.54\t180.17\t164.08\t172.43\t36891900\t172.43\n2004-10-25\t176.40\t194.43\t172.55\t187.40\t32764200\t187.40\n2004-10-26\t186.34\t192.64\t180.00\t181.80\t22307100\t181.80\n2004-10-27\t182.72\t189.52\t181.77\t185.97\t13356500\t185.97\n2004-10-28\t186.68\t194.39\t185.60\t193.30\t14846800\t193.30\n2004-10-29\t198.89\t199.95\t190.60\t190.64\t21162500\t190.64\n2004-11-01\t193.55\t197.67\t191.27\t196.03\t12224900\t196.03\n2004-11-02\t198.78\t199.25\t193.34\t194.87\t11346300\t194.87\n2004-11-03\t198.18\t201.60\t190.75\t191.67\t13888700\t191.67\n2004-11-04\t188.44\t190.40\t183.35\t184.70\t14409600\t184.70\n2004-11-05\t181.98\t182.30\t168.55\t169.35\t19833100\t169.35\n2004-11-08\t170.93\t175.44\t169.40\t172.55\t11191800\t172.55\n2004-11-09\t174.10\t175.20\t165.27\t168.70\t11064200\t168.70\n2004-11-10\t170.67\t172.52\t166.33\t167.86\t10644000\t167.86\n2004-11-11\t169.13\t183.75\t167.57\t183.02\t14985500\t183.02\n2004-11-12\t185.23\t189.80\t177.40\t182.00\t16746100\t182.00\n2004-11-15\t180.45\t188.32\t178.75\t184.87\t11901500\t184.87\n2004-11-16\t177.50\t179.47\t170.83\t172.54\t20917400\t172.54\n2004-11-17\t169.02\t177.50\t169.00\t172.50\t18132900\t172.50\n2004-11-18\t170.29\t174.42\t165.73\t167.54\t16629600\t167.54\n2004-11-19\t169.10\t169.98\t166.52\t169.40\t8769300\t169.40\n2004-11-22\t164.47\t169.50\t161.31\t165.10\t12368200\t165.10\n2004-11-23\t167.97\t170.83\t166.50\t167.52\t12413300\t167.52\n2004-11-24\t174.82\t177.21\t172.51\t174.76\t15281000\t174.76\n2004-11-26\t175.80\t180.03\t175.32\t179.39\t6480100\t179.39\n2004-11-29\t180.36\t182.95\t177.51\t181.05\t10666600\t181.05\n2004-11-30\t180.71\t183.00\t180.25\t181.98\t7700000\t181.98\n2004-12-01\t181.95\t182.50\t179.55\t179.96\t7864100\t179.96\n2004-12-02\t179.90\t181.51\t178.55\t179.40\t6260900\t179.40\n2004-12-03\t179.95\t181.06\t177.60\t180.40\t5869200\t180.40\n2004-12-06\t179.13\t180.70\t176.02\t176.29\t6254000\t176.29\n2004-12-07\t176.00\t176.20\t170.55\t171.43\t6870900\t171.43\n2004-12-08\t170.35\t173.68\t168.73\t169.98\t7541800\t169.98\n2004-12-09\t170.25\t173.50\t168.47\t173.43\t7654000\t173.43\n2004-12-10\t173.43\t174.88\t171.29\t171.65\t4317200\t171.65\n2004-12-13\t172.17\t173.18\t169.45\t170.45\t4818600\t170.45\n2004-12-14\t171.00\t178.82\t169.60\t178.69\t11088400\t178.69\n2004-12-15\t177.99\t180.69\t176.66\t179.78\t11471000\t179.78\n2004-12-16\t176.95\t180.49\t175.95\t176.47\t8572800\t176.47\n2004-12-17\t176.76\t180.50\t176.55\t180.08\t7386200\t180.08\n2004-12-20\t182.00\t188.46\t181.87\t185.02\t9834500\t185.02\n2004-12-21\t186.31\t187.88\t183.40\t183.75\t5516300\t183.75\n2004-12-22\t183.90\t186.85\t183.01\t186.30\t3907000\t186.30\n2004-12-23\t187.45\t188.60\t186.00\t187.90\t3614600\t187.90\n2004-12-27\t189.15\t193.30\t189.10\t191.91\t6104100\t191.91\n2004-12-28\t192.11\t193.55\t191.01\t192.76\t4145800\t192.76\n2004-12-29\t191.78\t193.52\t191.78\t192.90\t2678100\t192.90\n2004-12-30\t192.97\t198.23\t191.85\t197.60\t5904300\t197.60\n2004-12-31\t199.23\t199.88\t192.56\t192.79\t7668500\t192.79\n2005-01-03\t197.40\t203.64\t195.46\t202.71\t15844200\t202.71\n2005-01-04\t201.40\t202.93\t193.48\t194.50\t13755900\t194.50\n2005-01-05\t193.45\t196.90\t192.23\t193.51\t8236600\t193.51\n2005-01-06\t195.08\t195.90\t187.72\t188.55\t10387100\t188.55\n2005-01-07\t190.64\t194.25\t188.78\t193.85\t9662900\t193.85\n2005-01-10\t194.50\t198.10\t191.83\t195.06\t7539600\t195.06\n2005-01-11\t195.62\t197.71\t193.18\t193.54\t6958700\t193.54\n2005-01-12\t194.33\t195.93\t190.50\t195.38\t8177800\t195.38\n2005-01-13\t195.38\t197.39\t194.05\t195.33\t6849400\t195.33\n2005-01-14\t196.00\t200.01\t194.13\t199.97\t9640300\t199.97\n2005-01-18\t200.97\t205.02\t198.66\t203.90\t13172600\t203.90\n2005-01-19\t204.65\t205.30\t196.71\t197.30\t11257700\t197.30\n2005-01-20\t192.50\t196.25\t192.00\t193.92\t9001600\t193.92\n2005-01-21\t194.54\t195.36\t188.12\t188.28\t9258400\t188.28\n2005-01-24\t188.69\t189.33\t180.32\t180.72\t14022700\t180.72\n2005-01-25\t181.94\t182.24\t176.29\t177.12\t10659200\t177.12\n2005-01-26\t179.27\t189.41\t179.15\t189.24\t12307900\t189.24\n2005-01-27\t188.76\t188.86\t185.20\t188.08\t6627400\t188.08\n2005-01-28\t190.02\t194.70\t186.34\t190.34\t12208200\t190.34\n2005-01-31\t193.69\t196.36\t191.72\t195.62\t9596700\t195.62\n2005-02-01\t194.38\t196.66\t190.63\t191.90\t18839000\t191.90\n2005-02-02\t215.55\t216.80\t203.66\t205.96\t32799300\t205.96\n2005-02-03\t205.99\t213.37\t205.81\t210.86\t12988100\t210.86\n2005-02-04\t206.47\t207.75\t202.60\t204.36\t14819300\t204.36\n2005-02-07\t205.26\t206.40\t195.51\t196.03\t12960400\t196.03\n2005-02-08\t196.96\t200.02\t194.53\t198.64\t11480000\t198.64\n2005-02-09\t200.76\t201.60\t189.46\t191.58\t17171500\t191.58\n2005-02-10\t191.97\t192.21\t185.25\t187.98\t18982700\t187.98\n2005-02-11\t186.66\t192.32\t186.07\t187.40\t13116000\t187.40\n2005-02-14\t182.85\t193.08\t181.00\t192.99\t38562200\t192.99\n2005-02-15\t193.60\t199.84\t193.08\t195.23\t25782800\t195.23\n2005-02-16\t194.70\t199.33\t194.30\t198.41\t16532300\t198.41\n2005-02-17\t197.83\t199.75\t196.81\t197.90\t10414400\t197.90\n2005-02-18\t198.51\t198.84\t196.66\t197.95\t8485900\t197.95\n2005-02-22\t196.50\t198.90\t190.39\t191.37\t13483700\t191.37\n2005-02-23\t193.30\t194.48\t188.66\t193.95\t15586000\t193.95\n2005-02-24\t183.37\t189.85\t182.23\t188.89\t25814300\t188.89\n2005-02-25\t189.15\t189.92\t185.51\t185.87\t9973500\t185.87\n2005-02-28\t186.00\t189.87\t185.85\t187.99\t7818400\t187.99\n2005-03-01\t189.29\t189.75\t182.00\t186.06\t9311200\t186.06\n2005-03-02\t185.95\t187.67\t184.36\t185.18\t7285500\t185.18\n2005-03-03\t186.13\t187.75\t184.31\t187.01\t7608600\t187.01\n2005-03-04\t186.70\t187.25\t185.07\t185.90\t6774100\t185.90\n2005-03-07\t187.78\t189.60\t187.03\t188.81\t8667400\t188.81\n2005-03-08\t189.10\t189.85\t184.97\t185.20\t8046100\t185.20\n2005-03-09\t184.21\t184.65\t180.16\t181.35\t11360400\t181.35\n2005-03-10\t181.01\t181.20\t177.40\t179.98\t10960500\t179.98\n2005-03-11\t180.44\t180.95\t177.15\t177.80\t8028300\t177.80\n2005-03-14\t178.33\t178.40\t172.57\t174.99\t11146600\t174.99\n2005-03-15\t175.30\t180.00\t174.21\t178.61\t10422100\t178.61\n2005-03-16\t176.70\t178.61\t175.01\t175.60\t7106300\t175.60\n2005-03-17\t177.13\t179.64\t175.80\t179.29\t8260600\t179.29\n2005-03-18\t178.81\t180.40\t178.31\t180.04\t7090000\t180.04\n2005-03-21\t179.27\t182.17\t177.25\t180.88\t7483700\t180.88\n2005-03-22\t181.18\t181.94\t177.85\t178.60\t5631700\t178.60\n2005-03-23\t177.97\t180.24\t177.97\t178.98\t4845000\t178.98\n2005-03-24\t180.70\t180.86\t179.20\t179.25\t3705200\t179.25\n2005-03-28\t181.68\t184.80\t180.95\t181.42\t8738000\t181.42\n2005-03-29\t181.05\t183.28\t178.07\t179.57\t6473000\t179.57\n2005-03-30\t180.64\t181.45\t179.60\t180.45\t6236100\t180.45\n2005-03-31\t177.95\t181.39\t177.64\t180.51\t6768600\t180.51\n2005-04-01\t181.76\t182.95\t179.99\t180.04\t6182000\t180.04\n2005-04-04\t179.95\t185.32\t179.84\t185.29\t8076400\t185.29\n2005-04-05\t187.73\t190.26\t187.57\t188.57\t8736700\t188.57\n2005-04-06\t189.24\t189.65\t187.58\t189.22\t5252600\t189.22\n2005-04-07\t188.78\t194.62\t188.64\t193.76\t9692200\t193.76\n2005-04-08\t193.69\t195.10\t191.45\t192.05\t5116600\t192.05\n2005-04-11\t193.09\t194.80\t192.32\t193.23\t5410500\t193.23\n2005-04-12\t193.00\t194.42\t189.41\t193.96\t7319600\t193.96\n2005-04-13\t193.47\t194.32\t189.73\t192.93\t6555800\t192.93\n2005-04-14\t193.27\t194.36\t190.10\t191.45\t6152700\t191.45\n2005-04-15\t190.10\t190.34\t184.66\t185.00\t11577400\t185.00\n2005-04-18\t184.58\t187.88\t183.49\t186.97\t6550300\t186.97\n2005-04-19\t189.33\t192.00\t188.03\t191.40\t8430000\t191.40\n2005-04-20\t198.58\t200.50\t195.91\t198.10\t15451500\t198.10\n2005-04-21\t200.42\t205.00\t199.32\t204.22\t17751900\t204.22\n2005-04-22\t222.90\t224.00\t214.26\t215.81\t33205100\t215.81\n2005-04-25\t217.82\t224.74\t217.52\t223.53\t19840000\t223.53\n2005-04-26\t220.22\t222.00\t218.29\t218.75\t17272000\t218.75\n2005-04-27\t217.99\t220.85\t216.74\t219.78\t10264800\t219.78\n2005-04-28\t219.50\t222.08\t217.71\t219.45\t8682800\t219.45\n2005-04-29\t221.91\t222.25\t217.82\t220.00\t9170200\t220.00\n2005-05-02\t222.05\t223.70\t220.21\t222.29\t9767400\t222.29\n2005-05-03\t221.85\t228.15\t221.32\t226.19\t17780200\t226.19\n2005-05-04\t227.23\t229.88\t227.00\t228.50\t12083500\t228.50\n2005-05-05\t228.62\t228.62\t225.88\t226.98\t7509600\t226.98\n2005-05-06\t228.40\t229.25\t226.47\t228.02\t6763900\t228.02\n2005-05-09\t228.00\t228.50\t225.43\t226.02\t5536800\t226.02\n2005-05-10\t225.47\t227.80\t224.72\t227.80\t6345800\t227.80\n2005-05-11\t228.97\t231.98\t227.93\t231.29\t11478800\t231.29\n2005-05-12\t230.81\t232.23\t228.20\t228.72\t8948200\t228.72\n2005-05-13\t229.18\t231.09\t227.32\t229.24\t7415500\t229.24\n2005-05-16\t229.68\t231.62\t228.57\t231.05\t5681400\t231.05\n2005-05-17\t230.56\t233.45\t230.20\t233.13\t7808900\t233.13\n2005-05-18\t233.61\t239.97\t233.52\t239.16\t12312000\t239.16\n2005-05-19\t240.34\t241.17\t238.27\t239.18\t9716500\t239.18\n2005-05-20\t241.21\t241.67\t239.65\t241.61\t8163500\t241.61\n2005-05-23\t243.16\t258.10\t242.71\t255.45\t21388300\t255.45\n2005-05-24\t256.96\t265.44\t253.50\t256.00\t29043100\t256.00\n2005-05-25\t252.73\t260.98\t250.63\t260.81\t18057900\t260.81\n2005-05-26\t260.96\t263.76\t258.30\t259.20\t13546600\t259.20\n2005-05-27\t260.46\t266.05\t259.25\t266.00\t12184100\t266.00\n2005-05-31\t269.43\t278.40\t269.37\t277.27\t22236800\t277.27\n2005-06-01\t283.20\t292.89\t282.02\t288.00\t35191700\t288.00\n2005-06-02\t288.73\t289.78\t284.60\t287.90\t17974100\t287.90\n2005-06-03\t286.79\t289.30\t277.41\t280.26\t18782300\t280.26\n2005-06-06\t282.39\t293.75\t281.83\t290.94\t22525900\t290.94\n2005-06-07\t297.10\t299.59\t290.30\t293.12\t24323000\t293.12\n2005-06-08\t292.85\t293.19\t278.00\t279.56\t25700900\t279.56\n2005-06-09\t284.72\t288.50\t280.56\t286.31\t16441100\t286.31\n2005-06-10\t286.99\t287.28\t280.02\t282.50\t12696600\t282.50\n2005-06-13\t279.82\t284.19\t276.52\t282.75\t12803200\t282.75\n2005-06-14\t278.59\t281.24\t277.75\t278.35\t10091900\t278.35\n2005-06-15\t275.00\t277.30\t267.43\t274.80\t20883100\t274.80\n2005-06-16\t274.26\t278.30\t273.07\t277.44\t12462400\t277.44\n2005-06-17\t279.00\t280.30\t275.90\t280.30\t10434400\t280.30\n2005-06-20\t276.09\t287.67\t271.73\t286.70\t21024700\t286.70\n2005-06-21\t288.07\t290.30\t284.97\t287.84\t15132300\t287.84\n2005-06-22\t289.67\t292.32\t288.67\t289.30\t10474000\t289.30\n2005-06-23\t288.00\t294.81\t286.50\t289.71\t14056400\t289.71\n2005-06-24\t290.90\t298.00\t289.58\t297.25\t17771200\t297.25\n2005-06-27\t298.90\t304.47\t293.86\t304.10\t17802900\t304.10\n2005-06-28\t306.28\t309.25\t302.00\t302.00\t19036500\t302.00\n2005-06-29\t302.50\t304.38\t292.15\t292.72\t18298700\t292.72\n2005-06-30\t294.34\t298.93\t291.04\t294.15\t15094400\t294.15\n2005-07-01\t295.04\t296.24\t289.22\t291.25\t9227600\t291.25\n2005-07-05\t292.10\t295.98\t290.23\t295.71\t7494000\t295.71\n2005-07-06\t297.30\t297.60\t291.38\t291.52\t8000300\t291.52\n2005-07-07\t289.39\t295.80\t288.51\t295.54\t10672100\t295.54\n2005-07-08\t296.25\t297.50\t294.05\t296.23\t7457600\t296.23\n2005-07-11\t296.40\t296.60\t291.02\t293.35\t8390300\t293.35\n2005-07-12\t293.39\t294.40\t290.93\t291.78\t5864900\t291.78\n2005-07-13\t292.51\t299.24\t292.10\t298.86\t11437900\t298.86\n2005-07-14\t305.34\t306.75\t300.07\t300.89\t10667700\t300.89\n2005-07-15\t301.24\t303.40\t299.78\t301.19\t8438400\t301.19\n2005-07-18\t300.00\t301.90\t297.75\t299.54\t6207800\t299.54\n2005-07-19\t302.10\t310.35\t301.80\t309.90\t12621400\t309.90\n2005-07-20\t305.57\t312.61\t301.80\t312.00\t14310400\t312.00\n2005-07-21\t314.05\t317.80\t311.21\t313.94\t19789400\t313.94\n2005-07-22\t306.37\t309.25\t296.33\t302.40\t23386800\t302.40\n2005-07-25\t302.39\t303.29\t294.96\t295.85\t9658800\t295.85\n2005-07-26\t295.01\t298.00\t292.09\t296.09\t9816900\t296.09\n2005-07-27\t297.74\t298.23\t292.40\t296.93\t7217900\t296.93\n2005-07-28\t297.41\t297.41\t293.28\t293.50\t5925600\t293.50\n2005-07-29\t292.14\t292.84\t286.99\t287.76\t8363300\t287.76\n2005-08-01\t288.12\t292.50\t288.10\t291.61\t5662400\t291.61\n2005-08-02\t291.60\t299.52\t291.12\t299.19\t7290200\t299.19\n2005-08-03\t298.00\t299.72\t295.60\t297.30\t5930600\t297.30\n2005-08-04\t295.55\t299.00\t295.25\t297.73\t5236500\t297.73\n2005-08-05\t297.50\t298.51\t291.31\t292.35\t5939700\t292.35\n2005-08-08\t293.60\t295.65\t290.49\t291.25\t4481800\t291.25\n2005-08-09\t291.96\t292.68\t288.51\t291.57\t5779300\t291.57\n2005-08-10\t291.30\t292.33\t284.88\t285.68\t6879000\t285.68\n2005-08-11\t285.89\t286.58\t280.62\t284.05\t7514900\t284.05\n2005-08-12\t283.36\t290.20\t281.64\t289.72\t6585900\t289.72\n2005-08-15\t289.80\t292.77\t283.77\t284.00\t8174700\t284.00\n2005-08-16\t284.88\t287.79\t283.34\t285.65\t7109200\t285.65\n2005-08-17\t285.51\t286.57\t284.00\t285.10\t3883300\t285.10\n2005-08-18\t275.91\t280.50\t275.00\t279.99\t11872800\t279.99\n2005-08-19\t280.99\t281.45\t279.62\t280.00\t5542900\t280.00\n2005-08-22\t281.24\t281.47\t273.35\t274.01\t6813000\t274.01\n2005-08-23\t276.16\t279.74\t274.12\t279.58\t5821700\t279.58\n2005-08-24\t277.57\t284.75\t276.45\t282.57\t8593100\t282.57\n2005-08-25\t282.55\t284.00\t279.97\t282.59\t4376600\t282.59\n2005-08-26\t283.48\t285.02\t282.66\t283.58\t3755300\t283.58\n2005-08-29\t282.24\t289.12\t282.24\t288.45\t5903000\t288.45\n2005-08-30\t287.39\t289.51\t285.88\t287.27\t4792000\t287.27\n2005-08-31\t288.23\t288.50\t284.36\t286.00\t5034000\t286.00\n2005-09-01\t285.91\t287.50\t285.00\t286.25\t2742100\t286.25\n2005-09-02\t286.51\t289.99\t286.44\t288.45\t3434500\t288.45\n2005-09-06\t289.00\t289.39\t286.80\t287.11\t4212300\t287.11\n2005-09-07\t285.89\t295.50\t285.28\t294.87\t7499500\t294.87\n2005-09-08\t294.83\t299.28\t293.36\t295.39\t6613300\t295.39\n2005-09-09\t297.28\t299.10\t296.56\t299.09\t4390500\t299.09\n2005-09-12\t301.75\t311.42\t301.00\t309.74\t10386500\t309.74\n2005-09-13\t309.00\t315.53\t306.17\t311.68\t10299900\t311.68\n2005-09-14\t308.73\t313.28\t300.30\t303.00\t11275800\t303.00\n2005-09-15\t299.52\t306.75\t297.91\t302.62\t15466200\t302.62\n2005-09-16\t304.02\t304.50\t299.87\t300.20\t7579800\t300.20\n2005-09-19\t301.00\t306.00\t300.71\t303.79\t5761900\t303.79\n2005-09-20\t306.15\t311.30\t305.23\t307.91\t9351000\t307.91\n2005-09-21\t308.41\t313.76\t305.96\t311.90\t10119700\t311.90\n2005-09-22\t311.50\t319.22\t310.17\t311.37\t13006400\t311.37\n2005-09-23\t313.00\t317.21\t312.59\t315.36\t8483800\t315.36\n2005-09-26\t319.50\t320.95\t312.56\t314.28\t9894400\t314.28\n2005-09-27\t314.95\t318.41\t313.38\t313.94\t6873100\t313.94\n2005-09-28\t314.22\t315.10\t305.60\t306.00\t7997400\t306.00\n2005-09-29\t306.68\t310.72\t306.08\t309.62\t5613800\t309.62\n2005-09-30\t314.22\t317.50\t312.29\t316.46\t9151300\t316.46\n2005-10-03\t313.63\t320.11\t312.79\t318.68\t9160300\t318.68\n2005-10-04\t319.95\t321.28\t310.74\t311.00\t9144300\t311.00\n2005-10-05\t312.69\t314.90\t308.00\t310.71\t8328400\t310.71\n2005-10-06\t314.14\t314.48\t310.09\t312.75\t7993800\t312.75\n2005-10-07\t314.79\t316.67\t310.54\t312.99\t6770300\t312.99\n2005-10-10\t313.31\t314.82\t309.15\t310.65\t5572200\t310.65\n2005-10-11\t310.61\t312.65\t304.86\t306.10\t8542600\t306.10\n2005-10-12\t305.20\t307.19\t299.00\t300.97\t9306200\t300.97\n2005-10-13\t302.00\t302.00\t290.68\t297.44\t10567700\t297.44\n2005-10-14\t299.90\t300.23\t292.54\t296.14\t8519100\t296.14\n2005-10-17\t297.50\t305.20\t294.56\t305.00\t7566700\t305.00\n2005-10-18\t304.96\t307.96\t302.74\t303.28\t7077800\t303.28\n2005-10-19\t304.00\t309.87\t303.96\t308.70\t7010700\t308.70\n2005-10-20\t309.99\t311.13\t301.21\t303.20\t13911700\t303.20\n2005-10-21\t345.80\t346.43\t333.00\t339.90\t22892400\t339.90\n2005-10-24\t343.37\t349.30\t342.19\t348.65\t9431700\t348.65\n2005-10-25\t345.78\t347.40\t342.86\t346.91\t6878300\t346.91\n2005-10-26\t346.28\t356.00\t346.19\t355.44\t8907500\t355.44\n2005-10-27\t356.60\t357.09\t351.68\t353.06\t5134400\t353.06\n2005-10-28\t355.27\t358.95\t355.02\t358.17\t5903500\t358.17\n2005-10-31\t360.24\t374.75\t359.51\t372.14\t14342900\t372.14\n2005-11-01\t371.86\t383.90\t369.01\t379.38\t16356100\t379.38\n2005-11-02\t381.70\t385.00\t377.17\t379.68\t10565400\t379.68\n2005-11-03\t382.41\t386.58\t381.38\t385.95\t7448400\t385.95\n2005-11-04\t389.98\t391.79\t385.45\t390.43\t8824900\t390.43\n2005-11-07\t395.10\t397.47\t392.15\t395.03\t9591500\t395.03\n2005-11-08\t394.25\t395.59\t388.58\t389.90\t7897500\t389.90\n2005-11-09\t386.67\t388.29\t378.03\t379.15\t10466900\t379.15\n2005-11-10\t378.36\t391.35\t377.43\t391.10\t9128700\t391.10\n2005-11-11\t395.12\t396.90\t388.85\t390.40\t7063900\t390.40\n2005-11-14\t392.12\t398.22\t391.53\t396.97\t7807900\t396.97\n2005-11-15\t394.38\t397.00\t390.95\t392.80\t8624900\t392.80\n2005-11-16\t396.20\t398.85\t394.11\t398.15\t8695200\t398.15\n2005-11-17\t401.80\t403.81\t399.53\t403.45\t9212200\t403.45\n2005-11-18\t403.49\t404.50\t399.85\t400.21\t7025700\t400.21\n2005-11-21\t399.17\t409.98\t393.49\t409.36\t10335100\t409.36\n2005-11-22\t408.65\t417.31\t406.23\t416.47\t9596000\t416.47\n2005-11-23\t417.04\t424.72\t415.78\t422.86\t10085000\t422.86\n2005-11-25\t425.78\t428.75\t425.30\t428.62\t4840100\t428.62\n2005-11-28\t429.82\t431.24\t422.44\t423.48\t11008400\t423.48\n2005-11-29\t424.46\t426.40\t402.14\t403.54\t21495800\t403.54\n2005-11-30\t404.26\t408.45\t395.56\t404.91\t15596600\t404.91\n2005-12-01\t409.20\t415.44\t408.29\t414.09\t9744900\t414.09\n2005-12-02\t416.94\t419.53\t413.86\t417.70\t7543500\t417.70\n2005-12-05\t417.00\t417.50\t404.28\t405.85\t10289400\t405.85\n2005-12-06\t408.70\t416.41\t401.70\t404.54\t15114700\t404.54\n2005-12-07\t406.16\t406.70\t399.01\t404.22\t11665900\t404.22\n2005-12-08\t405.30\t410.65\t402.64\t410.65\t8910100\t410.65\n2005-12-09\t415.00\t415.78\t408.56\t409.20\t7643400\t409.20\n2005-12-12\t414.63\t415.21\t409.95\t412.61\t6950100\t412.61\n2005-12-13\t412.50\t418.00\t411.64\t417.49\t8157000\t417.49\n2005-12-14\t417.04\t419.73\t415.49\t418.96\t6630400\t418.96\n2005-12-15\t419.11\t423.14\t416.50\t422.55\t6045800\t422.55\n2005-12-16\t425.34\t432.50\t422.75\t430.15\t16330500\t430.15\n2005-12-19\t432.20\t446.21\t420.11\t424.60\t21936800\t424.60\n2005-12-20\t427.86\t432.20\t424.67\t429.74\t10084700\t429.74\n2005-12-21\t433.55\t436.86\t420.71\t426.33\t11221900\t426.33\n2005-12-22\t431.77\t432.86\t425.93\t432.04\t7546600\t432.04\n2005-12-23\t432.15\t432.50\t428.78\t430.93\t4595100\t430.93\n2005-12-27\t431.86\t431.86\t422.76\t424.64\t6702800\t424.64\n2005-12-28\t424.34\t427.78\t421.26\t426.69\t7117900\t426.69\n2005-12-29\t427.98\t428.73\t419.17\t420.15\t6945800\t420.15\n2005-12-30\t417.27\t418.21\t413.74\t414.86\t7587100\t414.86\n2006-01-03\t422.52\t435.67\t418.22\t435.23\t13121200\t435.23\n2006-01-04\t443.90\t448.96\t439.75\t445.24\t15286400\t445.24\n2006-01-05\t446.00\t451.55\t441.50\t451.24\t10808300\t451.24\n2006-01-06\t456.87\t470.50\t453.24\t465.66\t17756900\t465.66\n2006-01-09\t466.41\t473.40\t460.94\t466.90\t12791900\t466.90\n2006-01-10\t464.42\t470.25\t462.04\t469.76\t9097100\t469.76\n2006-01-11\t471.27\t475.11\t469.18\t471.63\t9007400\t471.63\n2006-01-12\t473.72\t474.99\t461.50\t463.63\t10125300\t463.63\n2006-01-13\t464.31\t466.89\t461.61\t466.25\t7656600\t466.25\n2006-01-17\t463.06\t469.90\t462.53\t467.11\t8270300\t467.11\n2006-01-18\t447.30\t457.36\t443.25\t444.91\t20485700\t444.91\n2006-01-19\t451.17\t453.49\t433.00\t436.45\t14537300\t436.45\n2006-01-20\t438.70\t440.03\t394.74\t399.46\t41116700\t399.46\n2006-01-23\t407.38\t428.39\t405.73\t427.50\t22741400\t427.50\n2006-01-24\t436.03\t444.95\t434.48\t443.03\t15464600\t443.03\n2006-01-25\t451.26\t454.23\t429.22\t433.00\t18739800\t433.00\n2006-01-26\t439.54\t439.99\t423.56\t434.27\t12926100\t434.27\n2006-01-27\t435.00\t438.22\t428.98\t433.49\t8452200\t433.49\n2006-01-30\t429.23\t433.28\t425.00\t426.82\t8588900\t426.82\n2006-01-31\t430.57\t439.60\t423.97\t432.66\t22066000\t432.66\n2006-02-01\t389.03\t402.00\t387.52\t401.78\t27122500\t401.78\n2006-02-02\t403.82\t406.50\t395.98\t396.04\t11807700\t396.04\n2006-02-03\t393.62\t393.90\t372.57\t381.55\t18281800\t381.55\n2006-02-06\t385.31\t389.90\t379.56\t385.10\t8940400\t385.10\n2006-02-07\t382.99\t383.70\t363.35\t367.92\t16630200\t367.92\n2006-02-08\t368.48\t370.69\t354.67\t369.08\t20804100\t369.08\n2006-02-09\t371.20\t374.40\t356.11\t358.77\t11912400\t358.77\n2006-02-10\t361.95\t364.50\t353.14\t362.61\t15223500\t362.61\n2006-02-13\t346.64\t350.60\t341.89\t345.70\t19717800\t345.70\n2006-02-14\t345.33\t351.69\t342.40\t343.32\t14654000\t343.32\n2006-02-15\t341.27\t346.00\t337.83\t342.38\t12947000\t342.38\n2006-02-16\t345.67\t367.00\t344.49\t366.46\t21315500\t366.46\n2006-02-17\t369.86\t372.14\t363.62\t368.75\t14320200\t368.75\n2006-02-21\t366.44\t373.54\t365.11\t366.59\t8686000\t366.59\n2006-02-22\t367.15\t368.95\t363.86\t365.49\t6476200\t365.49\n2006-02-23\t365.61\t381.24\t365.39\t378.07\t12551600\t378.07\n2006-02-24\t377.30\t380.07\t373.49\t377.40\t6484300\t377.40\n2006-02-27\t381.27\t391.70\t380.28\t390.38\t10212200\t390.38\n2006-02-28\t393.20\t397.54\t338.51\t362.62\t39437600\t362.62\n2006-03-01\t368.56\t369.45\t361.30\t364.80\t12061200\t364.80\n2006-03-02\t364.28\t381.10\t362.20\t376.45\t18330300\t376.45\n2006-03-03\t384.30\t387.24\t375.76\t378.18\t11962000\t378.18\n2006-03-06\t380.91\t383.40\t367.14\t368.10\t8939700\t368.10\n2006-03-07\t365.02\t368.45\t358.15\t364.45\t10378800\t364.45\n2006-03-08\t353.93\t360.03\t350.54\t353.88\t11745600\t353.88\n2006-03-09\t355.39\t358.53\t341.50\t343.00\t13910400\t343.00\n2006-03-10\t343.50\t344.50\t331.55\t337.50\t19325600\t337.50\n2006-03-13\t340.93\t346.10\t335.45\t337.06\t13642400\t337.06\n2006-03-14\t337.14\t352.37\t332.62\t351.16\t18450700\t351.16\n2006-03-15\t350.77\t352.30\t340.53\t344.50\t12768800\t344.50\n2006-03-16\t348.61\t348.75\t337.90\t338.77\t10016700\t338.77\n2006-03-17\t338.80\t341.78\t334.93\t339.79\t8551700\t339.79\n2006-03-20\t342.34\t350.09\t341.54\t348.19\t10407600\t348.19\n2006-03-21\t350.01\t351.66\t339.08\t339.92\t9831100\t339.92\n2006-03-22\t339.75\t344.10\t337.50\t340.22\t7596000\t340.22\n2006-03-23\t342.35\t345.75\t340.20\t341.89\t7434700\t341.89\n2006-03-24\t368.62\t370.09\t362.51\t365.80\t15180600\t365.80\n2006-03-27\t367.09\t371.71\t365.00\t369.69\t7023700\t369.69\n2006-03-28\t371.71\t377.86\t371.17\t377.20\t8945800\t377.20\n2006-03-29\t379.94\t399.00\t379.51\t394.98\t19027500\t394.98\n2006-03-30\t389.19\t393.50\t383.61\t388.44\t14711700\t388.44\n2006-03-31\t388.74\t391.87\t384.03\t390.00\t36521400\t390.00\n2006-04-03\t389.53\t392.47\t387.93\t389.70\t8122700\t389.70\n2006-04-04\t389.90\t404.90\t388.14\t404.34\t15715700\t404.34\n2006-04-05\t408.20\t414.57\t402.82\t407.99\t13410500\t407.99\n2006-04-06\t406.49\t413.89\t405.43\t411.18\t8598500\t411.18\n2006-04-07\t412.41\t412.85\t404.02\t406.16\t7025900\t406.16\n2006-04-10\t407.08\t417.17\t405.25\t416.38\t9320100\t416.38\n2006-04-11\t416.42\t419.10\t406.22\t409.66\t11107200\t409.66\n2006-04-12\t409.00\t411.33\t405.19\t408.95\t6017000\t408.95\n2006-04-13\t408.63\t409.76\t400.50\t402.16\t6552900\t402.16\n2006-04-17\t403.45\t412.50\t400.84\t406.82\t8259500\t406.82\n2006-04-18\t407.93\t409.83\t401.50\t404.24\t8137600\t404.24\n2006-04-19\t412.57\t413.64\t406.73\t410.50\t6781700\t410.50\n2006-04-20\t411.01\t416.00\t408.20\t415.00\t12271500\t415.00\n2006-04-21\t448.90\t450.72\t436.17\t437.10\t22551300\t437.10\n2006-04-24\t439.40\t444.70\t436.52\t440.50\t8836400\t440.50\n2006-04-25\t439.63\t441.04\t426.00\t427.16\t9569000\t427.16\n2006-04-26\t427.74\t430.04\t423.53\t425.97\t7277800\t425.97\n2006-04-27\t422.91\t426.91\t419.39\t420.03\t8337900\t420.03\n2006-04-28\t418.63\t425.73\t416.30\t417.94\t7421300\t417.94\n2006-05-01\t418.47\t419.44\t398.55\t398.90\t10361200\t398.90\n2006-05-02\t401.08\t402.49\t388.40\t394.80\t13104300\t394.80\n2006-05-03\t396.35\t401.50\t390.88\t394.17\t8072200\t394.17\n2006-05-04\t395.03\t398.87\t392.21\t394.75\t4652000\t394.75\n2006-05-05\t397.60\t400.68\t391.78\t394.30\t6065000\t394.30\n2006-05-08\t395.11\t397.12\t390.05\t394.78\t5118600\t394.78\n2006-05-09\t395.70\t409.00\t393.75\t408.80\t9140600\t408.80\n2006-05-10\t408.31\t411.71\t401.86\t402.98\t6187200\t402.98\n2006-05-11\t403.42\t404.71\t384.98\t387.00\t8892800\t387.00\n2006-05-12\t383.54\t384.87\t373.55\t374.13\t10087600\t374.13\n2006-05-15\t375.93\t380.15\t368.25\t376.20\t8590100\t376.20\n2006-05-16\t375.99\t376.86\t369.89\t371.30\t6491100\t371.30\n2006-05-17\t370.61\t379.84\t370.22\t374.50\t10643800\t374.50\n2006-05-18\t378.78\t381.81\t370.71\t370.99\t5835000\t370.99\n2006-05-19\t373.28\t374.50\t360.57\t370.02\t11398200\t370.02\n2006-05-22\t367.85\t373.03\t365.25\t370.95\t8604400\t370.95\n2006-05-23\t374.21\t383.88\t373.56\t375.58\t8983000\t375.58\n2006-05-24\t377.35\t383.44\t371.61\t381.25\t9553800\t381.25\n2006-05-25\t379.08\t383.00\t372.31\t382.99\t8194600\t382.99\n2006-05-26\t384.55\t385.88\t380.03\t381.35\t3667000\t381.35\n2006-05-30\t378.28\t381.00\t371.45\t371.94\t4316000\t371.94\n2006-05-31\t373.80\t378.25\t366.78\t371.82\t7981300\t371.82\n2006-06-01\t373.54\t382.99\t371.60\t382.62\t6278000\t382.62\n2006-06-02\t386.84\t387.08\t377.45\t379.44\t6386400\t379.44\n2006-06-05\t376.18\t381.45\t374.15\t374.44\t5558500\t374.44\n2006-06-06\t376.58\t390.00\t376.30\t389.99\t10259800\t389.99\n2006-06-07\t393.24\t394.86\t386.50\t386.51\t8911300\t386.51\n2006-06-08\t387.75\t394.27\t378.59\t393.30\t10359500\t393.30\n2006-06-09\t392.19\t395.43\t385.35\t386.57\t6157500\t386.57\n2006-06-12\t388.34\t390.49\t381.00\t381.54\t5019100\t381.54\n2006-06-13\t380.90\t387.00\t378.12\t386.52\t7659100\t386.52\n2006-06-14\t389.83\t391.10\t378.52\t384.39\t7772000\t384.39\n2006-06-15\t386.62\t392.25\t383.00\t391.00\t6785700\t391.00\n2006-06-16\t389.10\t390.93\t388.00\t390.70\t5304600\t390.70\n2006-06-19\t390.85\t394.80\t386.98\t388.14\t7633100\t388.14\n2006-06-20\t388.03\t391.87\t386.51\t387.17\t4039900\t387.17\n2006-06-21\t391.06\t404.00\t389.75\t402.13\t8744400\t402.13\n2006-06-22\t401.58\t406.00\t388.00\t399.95\t5911900\t399.95\n2006-06-23\t402.76\t409.75\t400.74\t404.86\t5314800\t404.86\n2006-06-26\t406.75\t408.30\t403.25\t404.22\t3551200\t404.22\n2006-06-27\t405.71\t408.00\t401.01\t402.32\t4107100\t402.32\n2006-06-28\t404.01\t406.48\t401.13\t406.11\t3710500\t406.11\n2006-06-29\t407.99\t418.20\t405.82\t417.81\t6658200\t417.81\n2006-06-30\t415.60\t419.33\t412.33\t419.33\t6258000\t419.33\n2006-07-03\t420.04\t423.77\t419.45\t423.20\t2156700\t423.20\n2006-07-05\t421.52\t422.80\t415.64\t421.46\t4985600\t421.46\n2006-07-06\t423.38\t425.38\t421.98\t423.19\t3687100\t423.19\n2006-07-07\t426.05\t427.89\t415.88\t420.45\t6041900\t420.45\n2006-07-10\t423.44\t425.23\t416.38\t418.20\t4436400\t418.20\n2006-07-11\t418.51\t425.05\t413.03\t424.56\t5971300\t424.56\n2006-07-12\t422.09\t422.74\t416.73\t417.25\t4906700\t417.25\n2006-07-13\t414.00\t418.34\t406.83\t408.83\t6924500\t408.83\n2006-07-14\t410.33\t411.49\t398.61\t403.50\t7552100\t403.50\n2006-07-17\t404.63\t411.00\t403.72\t407.89\t5811900\t407.89\n2006-07-18\t409.75\t410.57\t397.74\t403.05\t8536800\t403.05\n2006-07-19\t395.01\t401.14\t394.66\t399.00\t8518500\t399.00\n2006-07-20\t404.28\t404.44\t385.66\t387.12\t12538700\t387.12\n2006-07-21\t386.14\t391.75\t377.69\t390.11\t11754600\t390.11\n2006-07-24\t392.82\t393.89\t381.21\t390.90\t8086100\t390.90\n2006-07-25\t385.02\t391.31\t383.80\t389.36\t5761100\t389.36\n2006-07-26\t388.20\t391.91\t383.00\t385.50\t5531900\t385.50\n2006-07-27\t387.37\t387.49\t377.95\t382.40\t5641100\t382.40\n2006-07-28\t382.00\t389.56\t381.73\t388.12\t4083600\t388.12\n2006-07-31\t388.00\t389.17\t383.31\t386.60\t4595300\t386.60\n2006-08-01\t385.11\t385.77\t375.51\t375.51\t5463200\t375.51\n2006-08-02\t375.60\t377.17\t365.20\t367.23\t7097800\t367.23\n2006-08-03\t364.98\t377.91\t363.36\t375.39\t6327000\t375.39\n2006-08-04\t379.56\t380.68\t371.75\t373.85\t5095200\t373.85\n2006-08-07\t371.50\t379.73\t371.15\t377.95\t3946900\t377.95\n2006-08-08\t382.82\t384.50\t379.09\t381.00\t5743200\t381.00\n2006-08-09\t382.80\t384.68\t376.36\t376.94\t4311000\t376.94\n2006-08-10\t373.88\t377.67\t372.46\t374.20\t4261900\t374.20\n2006-08-11\t374.40\t375.28\t368.00\t368.50\t3766500\t368.50\n2006-08-14\t371.50\t375.13\t368.67\t369.43\t4968300\t369.43\n2006-08-15\t374.11\t381.67\t372.60\t380.97\t6698200\t380.97\n2006-08-16\t383.48\t388.45\t382.12\t387.72\t5853200\t387.72\n2006-08-17\t386.39\t390.00\t383.92\t385.80\t5080200\t385.80\n2006-08-18\t386.31\t387.09\t380.75\t383.36\t4952200\t383.36\n2006-08-21\t378.10\t379.00\t375.22\t377.30\t4023300\t377.30\n2006-08-22\t377.73\t379.26\t374.84\t378.29\t4164100\t378.29\n2006-08-23\t377.64\t378.27\t372.66\t373.43\t3642300\t373.43\n2006-08-24\t374.44\t376.40\t372.26\t373.73\t3482500\t373.73\n2006-08-25\t373.08\t375.32\t372.50\t373.26\t2466700\t373.26\n2006-08-28\t375.61\t380.95\t375.00\t380.95\t4164000\t380.95\n2006-08-29\t380.78\t382.32\t377.20\t378.95\t4460000\t378.95\n2006-08-30\t379.21\t384.65\t378.51\t380.75\t4044400\t380.75\n2006-08-31\t381.49\t382.15\t378.20\t378.53\t2959900\t378.53\n2006-09-01\t380.99\t381.28\t377.19\t378.60\t2672900\t378.60\n2006-09-05\t379.87\t385.40\t377.44\t384.36\t4074300\t384.36\n2006-09-06\t382.10\t383.19\t379.66\t380.14\t3724100\t380.14\n2006-09-07\t379.39\t381.75\t377.40\t378.49\t3842000\t378.49\n2006-09-08\t376.72\t380.79\t376.72\t377.85\t3083400\t377.85\n2006-09-11\t378.26\t384.69\t377.77\t384.09\t4529200\t384.09\n2006-09-12\t385.00\t392.73\t384.88\t391.90\t5442200\t391.90\n2006-09-13\t395.15\t406.76\t395.10\t406.57\t9768200\t406.57\n2006-09-14\t404.30\t406.28\t401.93\t403.98\t5366100\t403.98\n2006-09-15\t407.48\t410.05\t406.74\t409.88\t7838200\t409.88\n2006-09-18\t410.00\t418.69\t409.47\t414.69\t7106700\t414.69\n2006-09-19\t415.46\t415.49\t392.74\t403.81\t14292900\t403.81\n2006-09-20\t407.10\t407.39\t394.62\t397.00\t9147800\t397.00\n2006-09-21\t400.30\t408.45\t399.86\t406.85\t10692100\t406.85\n2006-09-22\t404.98\t407.45\t401.36\t403.78\t4649600\t403.78\n2006-09-25\t405.58\t409.45\t402.50\t403.98\t5737300\t403.98\n2006-09-26\t405.50\t407.68\t401.77\t406.87\t5289400\t406.87\n2006-09-27\t406.30\t411.22\t402.37\t402.92\t5876700\t402.92\n2006-09-28\t404.08\t406.98\t400.54\t403.58\t5107400\t403.58\n2006-09-29\t405.13\t405.62\t401.41\t401.90\t3310900\t401.90\n2006-10-02\t401.90\t406.00\t400.80\t401.44\t3651900\t401.44\n2006-10-03\t401.29\t406.46\t398.19\t404.04\t5464700\t404.04\n2006-10-04\t404.97\t415.77\t403.05\t415.70\t6661800\t415.70\n2006-10-05\t414.70\t418.24\t410.86\t411.81\t5789800\t411.81\n2006-10-06\t410.22\t421.91\t409.75\t420.50\t7336500\t420.50\n2006-10-09\t424.80\t431.95\t423.42\t429.00\t7583300\t429.00\n2006-10-10\t431.56\t437.85\t422.39\t426.65\t9788600\t426.65\n2006-10-11\t425.02\t429.91\t423.76\t426.50\t5635400\t426.50\n2006-10-12\t428.56\t429.68\t424.00\t427.44\t4844000\t427.44\n2006-10-13\t427.76\t429.50\t425.56\t427.30\t3622500\t427.30\n2006-10-16\t427.70\t429.20\t421.34\t421.75\t4319400\t421.75\n2006-10-17\t420.30\t423.75\t416.70\t420.64\t5211000\t420.64\n2006-10-18\t422.99\t424.75\t417.50\t419.31\t6017300\t419.31\n2006-10-19\t420.23\t429.50\t419.57\t426.06\t11503500\t426.06\n2006-10-20\t458.99\t460.10\t453.59\t459.67\t11647900\t459.67\n2006-10-23\t462.28\t484.64\t460.37\t480.78\t15104500\t480.78\n2006-10-24\t476.28\t477.86\t471.41\t473.31\t8660200\t473.31\n2006-10-25\t477.49\t488.50\t475.11\t486.60\t9187500\t486.60\n2006-10-26\t487.68\t491.96\t484.20\t485.10\t7031700\t485.10\n2006-10-27\t483.90\t485.24\t472.49\t475.20\t6604000\t475.20\n2006-10-30\t474.82\t480.46\t470.01\t476.57\t6563100\t476.57\n2006-10-31\t478.06\t482.16\t473.84\t476.39\t6285400\t476.39\n2006-11-01\t478.76\t479.13\t465.26\t467.50\t5426300\t467.50\n2006-11-02\t467.50\t473.73\t466.38\t469.91\t5236700\t469.91\n2006-11-03\t472.23\t473.75\t465.06\t471.80\t4907700\t471.80\n2006-11-06\t473.77\t479.66\t472.33\t476.95\t4991500\t476.95\n2006-11-07\t476.95\t479.02\t471.77\t472.57\t4897100\t472.57\n2006-11-08\t470.35\t481.74\t468.60\t475.00\t7965000\t475.00\n2006-11-09\t476.50\t479.49\t471.86\t472.63\t4879200\t472.63\n2006-11-10\t473.78\t474.72\t470.29\t473.55\t2796700\t473.55\n2006-11-13\t474.90\t481.17\t474.14\t481.03\t4341900\t481.03\n2006-11-14\t480.70\t489.95\t480.50\t489.30\t7223400\t489.30\n2006-11-15\t493.43\t499.85\t491.93\t491.93\t8370700\t491.93\n2006-11-16\t495.00\t497.68\t492.56\t495.90\t5092600\t495.90\n2006-11-17\t493.25\t499.66\t493.00\t498.79\t5511000\t498.79\n2006-11-20\t498.40\t498.40\t492.65\t495.05\t5124500\t495.05\n2006-11-21\t496.54\t510.00\t495.83\t509.65\t8427500\t509.65\n2006-11-22\t510.97\t513.00\t505.78\t508.01\t4500700\t508.01\n2006-11-24\t504.50\t507.50\t504.00\t505.00\t1732700\t505.00\n2006-11-27\t501.37\t501.78\t484.75\t484.75\t7324700\t484.75\n2006-11-28\t481.13\t489.86\t477.03\t489.50\t7797600\t489.50\n2006-11-29\t494.24\t494.74\t482.25\t484.65\t6315300\t484.65\n2006-11-30\t484.19\t490.40\t481.55\t484.81\t5577500\t484.81\n2006-12-01\t485.98\t488.39\t478.50\t480.80\t5631400\t480.80\n2006-12-04\t483.00\t487.43\t479.35\t484.85\t4899900\t484.85\n2006-12-05\t487.40\t489.44\t484.89\t487.00\t4103000\t487.00\n2006-12-06\t486.96\t492.40\t484.52\t488.71\t4450300\t488.71\n2006-12-07\t490.23\t491.80\t482.42\t482.64\t4664300\t482.64\n2006-12-08\t481.94\t488.60\t480.00\t484.11\t3974900\t484.11\n2006-12-11\t484.92\t488.90\t483.80\t483.93\t3263400\t483.93\n2006-12-12\t483.85\t486.36\t480.28\t481.78\t4181000\t481.78\n2006-12-13\t484.69\t485.50\t477.02\t478.99\t4662100\t478.99\n2006-12-14\t480.25\t483.75\t477.26\t482.12\t4748900\t482.12\n2006-12-15\t482.64\t484.11\t479.84\t480.30\t5190800\t480.30\n2006-12-18\t482.51\t482.74\t460.72\t462.80\t8016600\t462.80\n2006-12-19\t461.72\t469.31\t458.50\t468.63\t6587000\t468.63\n2006-12-20\t470.00\t471.50\t462.33\t462.90\t4367800\t462.90\n2006-12-21\t464.18\t465.25\t452.34\t456.20\t6953300\t456.20\n2006-12-22\t457.50\t458.64\t452.73\t455.58\t3988300\t455.58\n2006-12-26\t456.52\t459.47\t454.59\t457.53\t2074300\t457.53\n2006-12-27\t460.00\t468.08\t459.10\t468.03\t4231500\t468.03\n2006-12-28\t467.12\t468.58\t462.25\t462.56\t3116200\t462.56\n2006-12-29\t462.10\t464.47\t459.86\t460.48\t2559200\t460.48\n2007-01-03\t466.00\t476.66\t461.11\t467.59\t7706500\t467.59\n2007-01-04\t469.00\t483.95\t468.35\t483.26\t7887600\t483.26\n2007-01-05\t482.50\t487.50\t478.11\t487.19\t6872100\t487.19\n2007-01-08\t487.69\t489.87\t482.20\t483.58\t4754400\t483.58\n2007-01-09\t485.45\t488.25\t481.20\t485.50\t5381400\t485.50\n2007-01-10\t484.43\t493.55\t482.04\t489.46\t5968500\t489.46\n2007-01-11\t497.20\t501.75\t496.18\t499.72\t7208200\t499.72\n2007-01-12\t501.99\t505.00\t500.00\t505.00\t4473700\t505.00\n2007-01-16\t507.55\t513.00\t503.30\t504.28\t7568900\t504.28\n2007-01-17\t503.39\t507.77\t494.38\t497.28\t6699100\t497.28\n2007-01-18\t494.52\t496.48\t487.43\t487.83\t5932000\t487.83\n2007-01-19\t487.98\t490.76\t486.74\t489.75\t4978300\t489.75\n2007-01-22\t492.50\t492.65\t478.50\t480.84\t5404300\t480.84\n2007-01-23\t480.79\t484.75\t477.29\t479.05\t4665500\t479.05\n2007-01-24\t484.45\t499.54\t483.29\t499.07\t6059300\t499.07\n2007-01-25\t501.00\t504.50\t485.66\t488.09\t6368500\t488.09\n2007-01-26\t490.93\t497.90\t487.03\t495.84\t5496500\t495.84\n2007-01-29\t498.00\t498.75\t490.50\t492.47\t4775700\t492.47\n2007-01-30\t494.00\t498.00\t491.22\t494.32\t4180500\t494.32\n2007-01-31\t496.49\t505.00\t495.51\t501.50\t12206100\t501.50\n2007-02-01\t506.00\t506.01\t481.53\t481.75\t15658700\t481.75\n2007-02-02\t482.61\t485.00\t477.81\t481.50\t6286500\t481.50\n2007-02-05\t477.50\t478.00\t466.19\t467.16\t7206900\t467.16\n2007-02-06\t468.10\t473.30\t467.26\t471.48\t5321900\t471.48\n2007-02-07\t473.82\t474.35\t468.78\t470.01\t4119800\t470.01\n2007-02-08\t468.05\t473.75\t465.15\t471.03\t4076700\t471.03\n2007-02-09\t471.65\t472.68\t461.50\t461.89\t4858600\t461.89\n2007-02-12\t460.68\t462.39\t455.02\t458.29\t5754500\t458.29\n2007-02-13\t459.15\t462.78\t457.26\t459.10\t4062600\t459.10\n2007-02-14\t460.00\t469.13\t459.22\t465.93\t5698800\t465.93\n2007-02-15\t466.00\t466.13\t460.72\t461.47\t4042400\t461.47\n2007-02-16\t462.80\t470.15\t462.06\t469.94\t6177000\t469.94\n2007-02-20\t468.47\t472.75\t464.71\t472.10\t4067600\t472.10\n2007-02-21\t469.84\t478.68\t467.74\t475.86\t5640600\t475.86\n2007-02-22\t478.69\t484.24\t474.39\t475.85\t5743900\t475.85\n2007-02-23\t475.75\t476.95\t467.80\t470.62\t3882600\t470.62\n2007-02-26\t472.83\t475.25\t463.75\t464.93\t3969900\t464.93\n2007-02-27\t455.00\t459.80\t447.17\t448.77\t9312800\t448.77\n2007-02-28\t450.41\t453.67\t443.04\t449.45\t8032300\t449.45\n2007-03-01\t442.67\t452.42\t440.00\t448.23\t8685200\t448.23\n2007-03-02\t445.11\t448.70\t438.68\t438.68\t6583600\t438.68\n2007-03-05\t437.02\t445.50\t437.00\t440.95\t6355100\t440.95\n2007-03-06\t447.47\t459.00\t447.38\t457.55\t7533700\t457.55\n2007-03-07\t462.69\t463.14\t454.29\t455.64\t6534100\t455.64\n2007-03-08\t459.22\t465.50\t454.10\t454.72\t5362800\t454.72\n2007-03-09\t458.00\t458.40\t450.10\t452.96\t4977700\t452.96\n2007-03-12\t452.57\t455.25\t451.11\t454.75\t3465400\t454.75\n2007-03-13\t450.11\t451.93\t442.83\t443.03\t6377300\t443.03\n2007-03-14\t443.23\t448.66\t439.00\t448.00\t8016900\t448.00\n2007-03-15\t447.86\t449.82\t443.94\t446.19\t3944200\t446.19\n2007-03-16\t445.65\t446.70\t439.89\t440.85\t5659100\t440.85\n2007-03-19\t443.25\t448.50\t440.63\t447.23\t5197700\t447.23\n2007-03-20\t445.79\t447.60\t443.60\t445.28\t3421500\t445.28\n2007-03-21\t445.30\t456.57\t445.21\t456.55\t5798300\t456.55\n2007-03-22\t455.61\t462.17\t452.53\t462.04\t5680700\t462.04\n2007-03-23\t461.45\t463.39\t457.08\t461.83\t4111300\t461.83\n2007-03-26\t460.55\t465.00\t455.62\t465.00\t4710300\t465.00\n2007-03-27\t463.55\t465.23\t460.34\t463.62\t3741200\t463.62\n2007-03-28\t461.87\t465.44\t460.15\t461.88\t4591600\t461.88\n2007-03-29\t464.55\t466.00\t455.00\t460.92\t3988500\t460.92\n2007-03-30\t462.10\t463.40\t456.14\t458.16\t3380200\t458.16\n2007-04-02\t457.76\t458.53\t452.12\t458.53\t3448500\t458.53\n2007-04-03\t464.05\t474.25\t464.00\t472.60\t6501800\t472.60\n2007-04-04\t472.14\t473.00\t469.58\t471.02\t3778800\t471.02\n2007-04-05\t471.30\t472.09\t469.62\t471.51\t2715800\t471.51\n2007-04-09\t472.98\t473.00\t465.59\t468.21\t3062100\t468.21\n2007-04-10\t467.09\t470.79\t465.16\t466.50\t2979300\t466.50\n2007-04-11\t466.06\t469.40\t462.61\t464.53\t3812000\t464.53\n2007-04-12\t464.00\t468.00\t462.24\t467.39\t2707900\t467.39\n2007-04-13\t468.45\t468.77\t463.36\t466.29\t2794800\t466.29\n2007-04-16\t468.46\t476.99\t468.15\t474.27\t5077900\t474.27\n2007-04-17\t473.80\t476.39\t471.60\t472.80\t3210100\t472.80\n2007-04-18\t471.26\t479.90\t469.53\t476.01\t5670500\t476.01\n2007-04-19\t474.50\t481.95\t469.59\t471.65\t11009600\t471.65\n2007-04-20\t490.52\t492.50\t482.02\t482.48\t12161500\t482.48\n2007-04-23\t480.10\t485.00\t478.26\t479.08\t5674600\t479.08\n2007-04-24\t478.61\t479.98\t475.55\t477.53\t3694700\t477.53\n2007-04-25\t480.00\t481.37\t476.11\t477.99\t3966800\t477.99\n2007-04-26\t478.10\t484.45\t477.11\t481.18\t4124900\t481.18\n2007-04-27\t480.07\t482.40\t478.33\t479.01\t2925700\t479.01\n2007-04-30\t479.15\t481.35\t471.38\t471.38\t3641200\t471.38\n2007-05-01\t472.19\t472.81\t464.17\t469.00\t3658200\t469.00\n2007-05-02\t468.65\t471.08\t465.73\t465.78\t3062700\t465.78\n2007-05-03\t466.22\t474.07\t465.29\t473.23\t3594200\t473.23\n2007-05-04\t470.12\t474.84\t465.88\t471.12\t3950000\t471.12\n2007-05-07\t472.14\t472.82\t466.47\t467.27\t3020100\t467.27\n2007-05-08\t466.13\t468.17\t464.73\t466.81\t2905100\t466.81\n2007-05-09\t466.15\t471.73\t463.88\t469.25\t3889900\t469.25\n2007-05-10\t467.04\t469.49\t461.02\t461.47\t3686300\t461.47\n2007-05-11\t461.83\t467.00\t461.00\t466.74\t2944100\t466.74\n2007-05-14\t465.48\t467.51\t460.00\t461.78\t3872700\t461.78\n2007-05-15\t461.96\t462.54\t457.41\t458.00\t4119000\t458.00\n2007-05-16\t462.00\t473.14\t459.02\t472.61\t6554200\t472.61\n2007-05-17\t472.46\t475.22\t470.81\t470.96\t4660600\t470.96\n2007-05-18\t472.03\t472.70\t469.75\t470.32\t3695900\t470.32\n2007-05-21\t469.53\t479.20\t466.72\t470.60\t6159300\t470.60\n2007-05-22\t473.00\t479.01\t473.00\t475.86\t3839000\t475.86\n2007-05-23\t480.82\t483.41\t473.75\t473.97\t5060200\t473.97\n2007-05-24\t475.15\t479.20\t471.50\t474.33\t4173600\t474.33\n2007-05-25\t479.70\t484.95\t477.27\t483.52\t5348500\t483.52\n2007-05-29\t485.00\t491.80\t484.00\t487.11\t5218000\t487.11\n2007-05-30\t484.50\t498.84\t483.00\t498.60\t7245800\t498.60\n2007-05-31\t500.56\t508.78\t497.06\t497.91\t8924300\t497.91\n2007-06-01\t501.00\t505.02\t497.93\t500.40\t4799000\t500.40\n2007-06-04\t497.91\t510.51\t497.59\t507.07\t7101000\t507.07\n2007-06-05\t509.75\t519.00\t506.61\t518.84\t10447100\t518.84\n2007-06-06\t516.75\t520.78\t515.26\t518.25\t7886700\t518.25\n2007-06-07\t519.75\t526.50\t512.51\t515.06\t10630500\t515.06\n2007-06-08\t516.20\t519.64\t509.46\t515.49\t6358200\t515.49\n2007-06-11\t514.02\t518.25\t510.00\t511.34\t4647700\t511.34\n2007-06-12\t508.71\t511.67\t503.17\t504.77\t6419500\t504.77\n2007-06-13\t507.09\t508.54\t498.69\t505.24\t7034000\t505.24\n2007-06-14\t505.38\t505.88\t501.70\t502.84\t4621200\t502.84\n2007-06-15\t508.19\t509.00\t501.23\t505.89\t6174100\t505.89\n2007-06-18\t506.18\t516.00\t504.24\t515.20\t4835900\t515.20\n2007-06-19\t514.01\t517.25\t511.54\t514.31\t4355300\t514.31\n2007-06-20\t516.96\t518.75\t509.06\t509.97\t4338200\t509.97\n2007-06-21\t510.98\t515.29\t506.28\t514.11\t4409700\t514.11\n2007-06-22\t516.42\t524.99\t516.10\t524.98\t7203700\t524.98\n2007-06-25\t528.98\t534.99\t523.38\t527.42\t7925000\t527.42\n2007-06-26\t532.73\t533.20\t526.24\t530.26\t5689500\t530.26\n2007-06-27\t525.00\t527.99\t519.56\t526.29\t6123100\t526.29\n2007-06-28\t524.88\t529.50\t523.80\t525.01\t4168400\t525.01\n2007-06-29\t526.02\t527.40\t519.46\t522.70\t3880600\t522.70\n2007-07-02\t525.49\t531.85\t524.20\t530.38\t3487600\t530.38\n2007-07-03\t531.06\t534.40\t527.50\t534.34\t1871800\t534.34\n2007-07-05\t535.56\t544.40\t532.15\t541.63\t4942900\t541.63\n2007-07-06\t541.25\t543.87\t538.73\t539.40\t2747000\t539.40\n2007-07-09\t543.00\t548.74\t540.26\t542.56\t3729800\t542.56\n2007-07-10\t543.79\t547.00\t541.65\t543.34\t3856000\t543.34\n2007-07-11\t543.61\t546.50\t540.01\t544.47\t3309300\t544.47\n2007-07-12\t545.86\t547.32\t540.22\t545.33\t3441600\t545.33\n2007-07-13\t547.91\t552.67\t547.25\t552.16\t5237100\t552.16\n2007-07-16\t550.30\t558.58\t549.31\t552.99\t6599500\t552.99\n2007-07-17\t555.04\t557.73\t552.38\t555.00\t4328600\t555.00\n2007-07-18\t553.89\t554.50\t543.81\t549.50\t6080000\t549.50\n2007-07-19\t553.46\t553.52\t542.24\t548.59\t11127200\t548.59\n2007-07-20\t511.90\t523.18\t509.50\t520.12\t17772300\t520.12\n2007-07-23\t519.01\t520.00\t512.15\t512.51\t6356700\t512.51\n2007-07-24\t509.30\t518.69\t507.11\t514.00\t5572100\t514.00\n2007-07-25\t516.98\t517.02\t505.56\t509.76\t5545000\t509.76\n2007-07-26\t508.74\t512.59\t498.88\t508.00\t6883400\t508.00\n2007-07-27\t508.53\t516.62\t505.50\t511.89\t5509100\t511.89\n2007-07-30\t512.92\t519.34\t510.50\t516.11\t3963300\t516.11\n2007-07-31\t520.23\t520.44\t510.00\t510.00\t4270500\t510.00\n2007-08-01\t510.50\t516.51\t508.14\t512.94\t4421500\t512.94\n2007-08-02\t513.72\t514.99\t509.00\t511.01\t3154900\t511.01\n2007-08-03\t510.05\t513.20\t503.00\t503.00\t3176200\t503.00\n2007-08-06\t503.00\t510.15\t502.50\t510.00\t3651500\t510.00\n2007-08-07\t509.75\t519.88\t509.04\t516.02\t4264300\t516.02\n2007-08-08\t519.34\t525.78\t517.09\t525.78\t4068800\t525.78\n2007-08-09\t520.80\t526.82\t514.63\t514.73\t4846500\t514.73\n2007-08-10\t510.18\t518.72\t505.63\t515.75\t5875200\t515.75\n2007-08-13\t519.54\t519.75\t513.03\t515.50\t3179300\t515.50\n2007-08-14\t515.72\t517.40\t508.00\t508.60\t3633700\t508.60\n2007-08-15\t509.00\t511.69\t496.71\t497.55\t5409500\t497.55\n2007-08-16\t492.02\t496.43\t480.46\t491.52\t8645600\t491.52\n2007-08-17\t497.44\t501.00\t491.65\t500.04\t5479400\t500.04\n2007-08-20\t502.46\t502.56\t496.00\t497.92\t2697300\t497.92\n2007-08-21\t498.94\t508.16\t497.77\t506.61\t3610600\t506.61\n2007-08-22\t509.96\t516.25\t509.25\t512.75\t3252700\t512.75\n2007-08-23\t516.00\t516.13\t507.00\t512.19\t3076700\t512.19\n2007-08-24\t512.61\t515.55\t508.50\t515.00\t2472700\t515.00\n2007-08-27\t514.43\t517.45\t511.40\t513.26\t2325100\t513.26\n2007-08-28\t511.53\t514.98\t505.79\t506.40\t3273900\t506.40\n2007-08-29\t507.84\t513.30\t507.23\t512.88\t2549300\t512.88\n2007-08-30\t512.36\t515.40\t510.58\t511.40\t2651700\t511.40\n2007-08-31\t513.10\t516.50\t511.47\t515.25\t2977600\t515.25\n2007-09-04\t515.02\t528.00\t514.62\t525.15\t3693700\t525.15\n2007-09-05\t523.40\t529.48\t522.25\t527.80\t3312900\t527.80\n2007-09-06\t529.36\t529.83\t518.24\t523.52\t3625900\t523.52\n2007-09-07\t517.86\t521.24\t516.80\t519.35\t3663600\t519.35\n2007-09-10\t521.28\t522.07\t510.88\t514.48\t3225800\t514.48\n2007-09-11\t516.99\t521.65\t515.73\t521.33\t2703600\t521.33\n2007-09-12\t520.53\t527.98\t519.00\t522.65\t2986000\t522.65\n2007-09-13\t524.06\t527.21\t523.22\t524.78\t1891100\t524.78\n2007-09-14\t523.20\t530.27\t522.22\t528.75\t2764900\t528.75\n2007-09-17\t526.53\t529.28\t524.07\t525.30\t2197500\t525.30\n2007-09-18\t526.52\t537.25\t524.27\t535.27\t4215700\t535.27\n2007-09-19\t539.27\t549.45\t538.86\t546.85\t5526900\t546.85\n2007-09-20\t547.00\t556.80\t546.03\t552.83\t5525000\t552.83\n2007-09-21\t556.34\t560.79\t552.83\t560.10\t8011700\t560.10\n2007-09-24\t561.00\t571.46\t560.00\t568.02\t5297000\t568.02\n2007-09-25\t564.00\t569.56\t562.86\t569.00\t2730600\t569.00\n2007-09-26\t570.40\t571.79\t563.81\t568.16\t3346100\t568.16\n2007-09-27\t571.73\t571.74\t565.78\t567.50\t2056300\t567.50\n2007-09-28\t567.00\t569.55\t564.12\t567.27\t2639500\t567.27\n2007-10-01\t569.97\t584.35\t569.61\t582.55\t4711300\t582.55\n2007-10-02\t583.38\t596.81\t580.01\t584.39\t7067500\t584.39\n2007-10-03\t586.25\t588.99\t580.36\t584.02\t3879500\t584.02\n2007-10-04\t585.09\t585.09\t577.06\t579.03\t2986700\t579.03\n2007-10-05\t587.11\t596.00\t587.01\t594.05\t5068700\t594.05\n2007-10-08\t595.00\t610.26\t593.95\t609.62\t5028000\t609.62\n2007-10-09\t615.11\t623.78\t608.39\t615.18\t8767800\t615.18\n2007-10-10\t621.36\t625.68\t616.80\t625.39\t5385600\t625.39\n2007-10-11\t633.64\t641.41\t609.00\t622.00\t11799000\t622.00\n2007-10-12\t623.98\t638.40\t618.24\t637.39\t6823700\t637.39\n2007-10-15\t638.47\t639.86\t615.55\t620.11\t6943800\t620.11\n2007-10-16\t618.49\t625.92\t611.99\t616.00\t6025300\t616.00\n2007-10-17\t630.45\t634.00\t621.59\t633.48\t6030500\t633.48\n2007-10-18\t635.41\t641.37\t628.50\t639.62\t12289200\t639.62\n2007-10-19\t654.56\t658.49\t643.23\t644.71\t15789000\t644.71\n2007-10-22\t638.67\t655.00\t636.28\t650.75\t6664400\t650.75\n2007-10-23\t661.25\t677.60\t660.00\t675.77\t6793700\t675.77\n2007-10-24\t672.71\t677.47\t659.56\t675.82\t7404200\t675.82\n2007-10-25\t678.68\t678.97\t663.55\t668.51\t5795500\t668.51\n2007-10-26\t674.03\t676.54\t668.06\t674.60\t3353900\t674.60\n2007-10-29\t677.77\t680.00\t672.09\t679.23\t3066300\t679.23\n2007-10-30\t677.51\t699.91\t677.51\t694.77\t6900600\t694.77\n2007-10-31\t700.69\t707.00\t696.04\t707.00\t6876800\t707.00\n2007-11-01\t702.79\t713.72\t701.78\t703.21\t6527200\t703.21\n2007-11-02\t710.51\t713.58\t697.34\t711.25\t5841500\t711.25\n2007-11-05\t706.99\t730.23\t706.07\t725.65\t8883700\t725.65\n2007-11-06\t737.56\t741.79\t725.00\t741.79\t8436300\t741.79\n2007-11-07\t741.13\t747.24\t723.14\t732.94\t8252900\t732.94\n2007-11-08\t734.60\t734.89\t677.18\t693.84\t16512200\t693.84\n2007-11-09\t675.78\t681.88\t661.21\t663.97\t11388100\t663.97\n2007-11-12\t657.74\t669.93\t626.21\t632.07\t10227300\t632.07\n2007-11-13\t644.99\t660.92\t632.07\t660.55\t8426100\t660.55\n2007-11-14\t673.28\t675.49\t636.27\t641.68\t8094700\t641.68\n2007-11-15\t638.57\t647.50\t624.00\t629.65\t6967700\t629.65\n2007-11-16\t633.94\t635.49\t616.02\t633.63\t9042800\t633.63\n2007-11-19\t629.59\t636.77\t618.50\t625.85\t5527400\t625.85\n2007-11-20\t636.48\t659.10\t632.87\t648.54\t9840600\t648.54\n2007-11-21\t643.77\t669.97\t642.08\t660.52\t7013500\t660.52\n2007-11-23\t670.00\t678.28\t668.11\t676.70\t2738700\t676.70\n2007-11-26\t680.20\t693.40\t665.00\t666.00\t6790100\t666.00\n2007-11-27\t674.80\t676.43\t650.26\t673.57\t8904500\t673.57\n2007-11-28\t682.11\t694.30\t672.14\t692.26\t7916500\t692.26\n2007-11-29\t690.75\t702.79\t687.77\t697.00\t6208000\t697.00\n2007-11-30\t711.00\t711.06\t682.11\t693.00\t7895500\t693.00\n2007-12-03\t691.01\t695.00\t681.14\t681.53\t4325100\t681.53\n2007-12-04\t678.31\t692.00\t677.12\t684.16\t4231800\t684.16\n2007-12-05\t692.73\t698.93\t687.50\t698.51\t4209600\t698.51\n2007-12-06\t697.80\t716.56\t697.01\t715.26\t4909000\t715.26\n2007-12-07\t714.99\t718.00\t710.50\t714.87\t3852100\t714.87\n2007-12-10\t715.99\t724.80\t714.00\t718.42\t3856200\t718.42\n2007-12-11\t719.94\t720.99\t698.78\t699.20\t6139100\t699.20\n2007-12-12\t714.00\t714.32\t688.50\t699.35\t6159100\t699.35\n2007-12-13\t696.31\t697.62\t681.21\t694.05\t5040800\t694.05\n2007-12-14\t687.51\t699.70\t687.26\t689.96\t3673500\t689.96\n2007-12-17\t688.00\t695.42\t663.67\t669.23\t5486000\t669.23\n2007-12-18\t674.16\t676.71\t652.50\t673.35\t7166700\t673.35\n2007-12-19\t674.21\t679.50\t669.00\t677.37\t4421100\t677.37\n2007-12-20\t685.83\t691.00\t680.61\t689.69\t4422200\t689.69\n2007-12-21\t697.88\t699.26\t693.24\t696.69\t5382000\t696.69\n2007-12-24\t694.99\t700.73\t693.06\t700.73\t1628400\t700.73\n2007-12-26\t698.99\t713.22\t698.21\t710.84\t2530000\t710.84\n2007-12-27\t707.07\t716.00\t700.74\t700.74\t2942500\t700.74\n2007-12-28\t704.93\t707.95\t696.54\t702.53\t2562700\t702.53\n2007-12-31\t698.57\t702.49\t690.58\t691.48\t2376200\t691.48\n2008-01-02\t692.87\t697.37\t677.73\t685.19\t4306900\t685.19\n2008-01-03\t685.26\t686.85\t676.52\t685.33\t3252500\t685.33\n2008-01-04\t679.69\t680.96\t655.00\t657.00\t5359800\t657.00\n2008-01-07\t653.94\t662.28\t637.35\t649.25\t6403400\t649.25\n2008-01-08\t653.00\t659.96\t631.00\t631.68\t5339100\t631.68\n2008-01-09\t630.04\t653.34\t622.51\t653.20\t6739700\t653.20\n2008-01-10\t645.01\t657.20\t640.11\t646.73\t6334200\t646.73\n2008-01-11\t642.70\t649.47\t630.11\t638.25\t4977000\t638.25\n2008-01-14\t651.14\t657.40\t645.25\t653.82\t4447500\t653.82\n2008-01-15\t645.90\t649.05\t635.38\t637.65\t5568200\t637.65\n2008-01-16\t628.97\t639.99\t601.93\t615.95\t10560000\t615.95\n2008-01-17\t620.76\t625.74\t598.01\t600.79\t8216800\t600.79\n2008-01-18\t608.36\t609.99\t598.45\t600.25\t8539600\t600.25\n2008-01-22\t562.03\t597.50\t561.20\t584.35\t9501500\t584.35\n2008-01-23\t560.71\t568.00\t519.00\t548.62\t16965700\t548.62\n2008-01-24\t558.80\t579.69\t554.14\t574.49\t9400900\t574.49\n2008-01-25\t591.81\t595.00\t566.18\t566.40\t6966000\t566.40\n2008-01-28\t570.97\t572.24\t548.60\t555.98\t5816700\t555.98\n2008-01-29\t560.47\t561.33\t540.67\t550.52\t6283000\t550.52\n2008-01-30\t549.19\t560.43\t543.51\t548.27\t7939600\t548.27\n2008-01-31\t539.01\t573.00\t534.29\t564.30\t14871300\t564.30\n2008-02-01\t528.67\t536.67\t510.00\t515.90\t17600500\t515.90\n2008-02-04\t509.07\t512.78\t492.55\t495.43\t13157100\t495.43\n2008-02-05\t489.43\t509.00\t488.52\t506.80\t11203300\t506.80\n2008-02-06\t511.14\t511.17\t497.93\t501.71\t7636400\t501.71\n2008-02-07\t496.86\t514.19\t494.76\t504.95\t7928900\t504.95\n2008-02-08\t509.41\t517.73\t508.70\t516.69\t6828900\t516.69\n2008-02-11\t520.52\t523.71\t513.40\t521.16\t5826000\t521.16\n2008-02-12\t523.39\t530.60\t513.03\t518.09\t6662300\t518.09\n2008-02-13\t522.50\t534.99\t518.69\t534.62\t6624700\t534.62\n2008-02-14\t538.35\t541.04\t531.00\t532.25\t6476700\t532.25\n2008-02-15\t528.31\t532.66\t524.33\t529.64\t5240100\t529.64\n2008-02-19\t534.94\t535.06\t506.50\t508.95\t6350400\t508.95\n2008-02-20\t503.51\t511.01\t498.82\t509.00\t6662200\t509.00\n2008-02-21\t512.85\t513.21\t499.50\t502.86\t5677800\t502.86\n2008-02-22\t502.06\t509.00\t497.55\t507.80\t5515900\t507.80\n2008-02-25\t505.95\t506.50\t485.74\t486.44\t8350800\t486.44\n2008-02-26\t461.20\t466.47\t446.85\t464.19\t23287300\t464.19\n2008-02-27\t460.13\t475.49\t459.64\t472.86\t10121900\t472.86\n2008-02-28\t470.50\t479.09\t467.36\t475.39\t6586900\t475.39\n2008-02-29\t471.87\t479.74\t464.65\t471.18\t9425400\t471.18\n2008-03-03\t471.51\t472.72\t450.11\t457.02\t7554500\t457.02\n2008-03-04\t450.95\t453.36\t435.78\t444.60\t13621700\t444.60\n2008-03-05\t445.25\t454.17\t444.00\t447.70\t7436600\t447.70\n2008-03-06\t447.69\t453.30\t431.18\t432.70\t7470100\t432.70\n2008-03-07\t428.88\t440.00\t426.24\t433.35\t8071800\t433.35\n2008-03-10\t428.83\t431.00\t413.04\t413.62\t7987600\t413.62\n2008-03-11\t425.26\t440.15\t424.65\t439.84\t8826900\t439.84\n2008-03-12\t440.01\t447.88\t438.07\t440.18\t6651900\t440.18\n2008-03-13\t432.67\t446.98\t428.78\t443.01\t7726600\t443.01\n2008-03-14\t442.98\t449.34\t430.62\t437.92\t6574400\t437.92\n2008-03-17\t427.99\t433.71\t412.11\t419.87\t7888200\t419.87\n2008-03-18\t428.98\t440.84\t425.53\t439.16\t7237200\t439.16\n2008-03-19\t441.11\t447.50\t431.67\t432.00\t6179000\t432.00\n2008-03-20\t427.32\t435.70\t417.50\t433.55\t9900400\t433.55\n2008-03-24\t438.43\t465.78\t437.72\t460.56\t6763500\t460.56\n2008-03-25\t457.46\t457.47\t446.00\t450.78\t5831600\t450.78\n2008-03-26\t452.59\t462.87\t449.29\t458.19\t5214200\t458.19\n2008-03-27\t446.00\t448.61\t440.49\t444.08\t5832200\t444.08\n2008-03-28\t447.46\t453.57\t434.31\t438.08\t4376200\t438.08\n2008-03-31\t435.64\t442.69\t432.01\t440.47\t4446400\t440.47\n2008-04-01\t447.74\t466.50\t446.87\t465.71\t6093100\t465.71\n2008-04-02\t469.90\t475.74\t460.39\t465.70\t5999000\t465.70\n2008-04-03\t461.73\t463.29\t448.13\t455.12\t6778400\t455.12\n2008-04-04\t457.01\t477.83\t456.20\t471.09\t5897200\t471.09\n2008-04-07\t477.03\t485.44\t473.53\t476.82\t5943500\t476.82\n2008-04-08\t473.04\t474.14\t462.01\t467.81\t4547000\t467.81\n2008-04-09\t469.13\t472.00\t457.54\t464.19\t6048100\t464.19\n2008-04-10\t464.96\t473.86\t461.85\t469.08\t5072400\t469.08\n2008-04-11\t464.07\t467.26\t455.01\t457.45\t4151500\t457.45\n2008-04-14\t457.16\t457.45\t450.15\t451.66\t3842600\t451.66\n2008-04-15\t458.13\t459.72\t443.72\t446.84\t4577600\t446.84\n2008-04-16\t444.40\t458.28\t441.00\t455.03\t7620200\t455.03\n2008-04-17\t455.63\t459.37\t446.52\t449.54\t13353000\t449.54\n2008-04-18\t535.21\t547.70\t524.77\t539.41\t18235600\t539.41\n2008-04-21\t539.39\t542.59\t530.29\t537.79\t7439700\t537.79\n2008-04-22\t537.57\t560.83\t537.56\t555.00\t7938500\t555.00\n2008-04-23\t557.94\t559.31\t540.95\t546.49\t4921500\t546.49\n2008-04-24\t551.29\t554.49\t540.02\t543.04\t4135100\t543.04\n2008-04-25\t549.02\t553.00\t542.73\t544.06\t4164400\t544.06\n2008-04-28\t545.88\t556.81\t539.00\t552.12\t4008600\t552.12\n2008-04-29\t550.83\t563.40\t550.01\t558.47\t4346000\t558.47\n2008-04-30\t562.21\t584.86\t558.47\t574.29\t7903000\t574.29\n2008-05-01\t578.31\t594.93\t576.97\t593.08\t6602800\t593.08\n2008-05-02\t598.49\t602.45\t579.30\t581.29\t6998800\t581.29\n2008-05-05\t598.86\t599.00\t587.13\t594.90\t6281000\t594.90\n2008-05-06\t591.00\t592.00\t583.00\t586.36\t4629300\t586.36\n2008-05-07\t590.27\t599.49\t576.43\t579.00\t6613000\t579.00\n2008-05-08\t586.20\t589.30\t578.91\t583.01\t5122900\t583.01\n2008-05-09\t579.00\t585.00\t571.30\t573.20\t4484900\t573.20\n2008-05-12\t574.75\t586.75\t568.91\t584.94\t4863900\t584.94\n2008-05-13\t586.23\t587.95\t578.55\t583.00\t5163500\t583.00\n2008-05-14\t586.49\t591.19\t575.25\t576.30\t4375800\t576.30\n2008-05-15\t579.00\t582.95\t575.61\t581.00\t4342700\t581.00\n2008-05-16\t581.43\t584.68\t578.32\t580.07\t4274100\t580.07\n2008-05-19\t578.55\t588.88\t573.52\t577.52\t5604500\t577.52\n2008-05-20\t574.63\t582.48\t572.91\t578.60\t3313600\t578.60\n2008-05-21\t578.52\t581.41\t547.89\t549.99\t6468100\t549.99\n2008-05-22\t551.95\t554.21\t540.25\t549.46\t5076300\t549.46\n2008-05-23\t546.96\t553.00\t537.81\t544.62\t4431500\t544.62\n2008-05-27\t544.96\t562.60\t543.85\t560.90\t3865500\t560.90\n2008-05-28\t567.94\t571.49\t561.10\t568.24\t4050400\t568.24\n2008-05-29\t574.79\t585.88\t573.20\t583.00\t4845000\t583.00\n2008-05-30\t583.47\t589.92\t581.30\t585.80\t3225200\t585.80\n2008-06-02\t582.50\t583.89\t571.27\t575.00\t3674200\t575.00\n2008-06-03\t576.50\t580.50\t560.61\t567.30\t4305300\t567.30\n2008-06-04\t565.33\t578.00\t564.55\t572.22\t3363200\t572.22\n2008-06-05\t577.08\t588.04\t576.21\t586.30\t3916700\t586.30\n2008-06-06\t579.75\t580.72\t567.00\t567.00\t4734500\t567.00\n2008-06-09\t568.06\t570.00\t545.40\t557.87\t5288300\t557.87\n2008-06-10\t549.56\t558.82\t546.78\t554.17\t3657400\t554.17\n2008-06-11\t556.24\t557.34\t544.46\t545.20\t3812900\t545.20\n2008-06-12\t548.76\t558.00\t546.88\t552.95\t5491600\t552.95\n2008-06-13\t561.49\t575.70\t561.34\t571.51\t6184400\t571.51\n2008-06-16\t566.50\t579.10\t566.50\t572.81\t3542800\t572.81\n2008-06-17\t576.35\t578.07\t568.38\t569.46\t3462900\t569.46\n2008-06-18\t564.51\t568.99\t559.16\t562.38\t3381200\t562.38\n2008-06-19\t555.35\t563.78\t550.81\t560.20\t5683100\t560.20\n2008-06-20\t556.98\t556.98\t544.51\t546.43\t5983100\t546.43\n2008-06-23\t545.36\t553.15\t542.02\t545.21\t3635900\t545.21\n2008-06-24\t545.14\t551.19\t535.10\t542.30\t4672600\t542.30\n2008-06-25\t544.97\t557.80\t543.67\t551.00\t4122200\t551.00\n2008-06-26\t544.10\t544.93\t528.26\t528.82\t5659500\t528.82\n2008-06-27\t527.68\t530.00\t515.09\t528.07\t5436900\t528.07\n2008-06-30\t532.47\t538.00\t523.06\t526.42\t3765300\t526.42\n2008-07-01\t519.58\t536.72\t517.00\t534.73\t4959900\t534.73\n2008-07-02\t536.51\t540.38\t526.06\t527.04\t4223000\t527.04\n2008-07-03\t530.88\t539.23\t527.50\t537.00\t2400500\t537.00\n2008-07-07\t542.30\t549.00\t535.60\t543.91\t4255200\t543.91\n2008-07-08\t545.99\t555.19\t540.00\t554.53\t4932400\t554.53\n2008-07-09\t550.76\t555.68\t540.73\t541.55\t4154000\t541.55\n2008-07-10\t545.00\t549.50\t530.72\t540.57\t4331700\t540.57\n2008-07-11\t536.50\t539.50\t519.43\t533.80\t4981400\t533.80\n2008-07-14\t539.00\t540.06\t515.45\t521.62\t4424800\t521.62\n2008-07-15\t516.28\t527.50\t501.10\t516.09\t6071000\t516.09\n2008-07-16\t514.04\t536.50\t510.60\t535.60\t4742200\t535.60\n2008-07-17\t534.16\t537.05\t524.50\t533.44\t8787400\t533.44\n2008-07-18\t498.35\t498.98\t478.19\t481.32\t11292400\t481.32\n2008-07-21\t480.88\t484.09\t465.70\t468.80\t5901500\t468.80\n2008-07-22\t466.72\t480.25\t465.60\t477.11\t4691500\t477.11\n2008-07-23\t481.61\t497.23\t478.10\t489.22\t4894100\t489.22\n2008-07-24\t496.70\t496.87\t475.62\t475.62\t3540900\t475.62\n2008-07-25\t486.49\t493.13\t481.50\t491.98\t3183500\t491.98\n2008-07-28\t492.09\t492.09\t475.13\t477.12\t3160000\t477.12\n2008-07-29\t479.30\t487.26\t478.00\t483.11\t2802800\t483.11\n2008-07-30\t485.50\t486.02\t472.81\t482.70\t3490700\t482.70\n2008-07-31\t474.56\t480.89\t471.44\t473.75\t2865100\t473.75\n2008-08-01\t472.51\t473.22\t462.50\t467.86\t3007900\t467.86\n2008-08-04\t468.12\t473.01\t461.90\t463.00\t2487000\t463.00\n2008-08-05\t467.59\t480.08\t466.33\t479.85\t3584500\t479.85\n2008-08-06\t478.37\t489.77\t472.51\t486.34\t3375800\t486.34\n2008-08-07\t482.00\t484.00\t476.41\t479.12\t2773800\t479.12\n2008-08-08\t480.15\t495.75\t475.69\t495.01\t3739300\t495.01\n2008-08-11\t492.47\t508.88\t491.78\t500.84\t4239300\t500.84\n2008-08-12\t502.00\t506.13\t498.00\t502.61\t2755700\t502.61\n2008-08-13\t501.60\t503.54\t493.88\t500.03\t3625500\t500.03\n2008-08-14\t497.70\t507.61\t496.29\t505.49\t2918600\t505.49\n2008-08-15\t506.99\t510.66\t505.50\t510.15\t3545700\t510.15\n2008-08-18\t509.84\t510.00\t495.51\t498.30\t3333900\t498.30\n2008-08-19\t490.43\t498.28\t486.63\t490.50\t3046500\t490.50\n2008-08-20\t494.72\t496.69\t482.57\t485.00\t3982100\t485.00\n2008-08-21\t482.92\t489.90\t479.27\t486.53\t3514100\t486.53\n2008-08-22\t491.50\t494.88\t489.48\t490.59\t2297200\t490.59\n2008-08-25\t486.11\t497.00\t481.50\t483.01\t2014300\t483.01\n2008-08-26\t483.46\t483.46\t470.59\t474.16\t3308200\t474.16\n2008-08-27\t473.73\t474.83\t464.84\t468.58\t4387100\t468.58\n2008-08-28\t472.49\t476.45\t470.33\t473.78\t3029700\t473.78\n2008-08-29\t469.75\t471.01\t462.33\t463.29\t3848200\t463.29\n2008-09-02\t476.77\t482.18\t461.42\t465.25\t6111500\t465.25\n2008-09-03\t468.73\t474.29\t459.58\t464.41\t4314600\t464.41\n2008-09-04\t460.00\t463.24\t449.40\t450.26\t4848500\t450.26\n2008-09-05\t445.49\t452.46\t440.08\t444.25\t4534300\t444.25\n2008-09-08\t452.02\t452.94\t417.55\t419.95\t9017900\t419.95\n2008-09-09\t423.17\t432.38\t415.00\t418.66\t7229600\t418.66\n2008-09-10\t424.47\t424.48\t409.68\t414.16\t6226800\t414.16\n2008-09-11\t408.35\t435.09\t406.38\t433.75\t6471400\t433.75\n2008-09-12\t430.21\t441.99\t429.00\t437.66\t6028000\t437.66\n2008-09-15\t424.00\t441.97\t423.71\t433.86\t6567400\t433.86\n2008-09-16\t425.96\t449.28\t425.49\t442.93\t6990700\t442.93\n2008-09-17\t438.48\t439.14\t413.44\t414.49\t9126900\t414.49\n2008-09-18\t422.64\t439.18\t410.50\t439.08\t8589400\t439.08\n2008-09-19\t461.00\t462.07\t443.28\t449.15\t10006000\t449.15\n2008-09-22\t454.13\t454.13\t429.00\t430.14\t4407300\t430.14\n2008-09-23\t433.25\t440.79\t425.72\t429.27\t5204200\t429.27\n2008-09-24\t430.34\t445.00\t430.11\t435.11\t4242000\t435.11\n2008-09-25\t438.84\t450.00\t435.98\t439.60\t5020300\t439.60\n2008-09-26\t428.00\t437.16\t421.03\t431.04\t5292500\t431.04\n2008-09-29\t419.51\t423.51\t380.71\t381.00\t10762900\t381.00\n2008-09-30\t395.98\t425.08\t392.32\t400.52\t3086300\t400.52\n2008-10-01\t411.15\t416.98\t403.10\t411.72\t6234800\t411.72\n2008-10-02\t409.79\t409.98\t386.00\t390.49\t5984900\t390.49\n2008-10-03\t397.35\t412.50\t383.07\t386.91\t7992900\t386.91\n2008-10-06\t373.98\t375.99\t357.16\t371.21\t11220600\t371.21\n2008-10-07\t373.33\t374.98\t345.37\t346.01\t11054400\t346.01\n2008-10-08\t330.16\t358.99\t326.11\t338.11\t11826400\t338.11\n2008-10-09\t344.52\t348.57\t321.67\t328.98\t8075000\t328.98\n2008-10-10\t313.16\t341.89\t310.30\t332.00\t10597800\t332.00\n2008-10-13\t355.79\t381.95\t345.75\t381.02\t8905500\t381.02\n2008-10-14\t393.53\t394.50\t357.00\t362.71\t7784800\t362.71\n"
  },
  {
    "path": "tests/golden/load-ods.tsv",
    "content": "Date\tCustomer\tSKU\tItem\tQuantity\tUnit\tPaid\n7/3/2018 1:47p\tRobert Armstrong\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t4\t$12.95\t$51.8\n7/3/2018 3:32p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t1\t$4.22\t$4.22\n7/5/2018 4:15p\tDouglas \"Dougie\" Powers\tFOOD121\tFood, Adult Cat 3.5 oz\t1\t$4.22\t$4.22\n7/6/2018 12:15p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t$1.29\t157¥\n7/10/2018 10:28a\tDavid Attenborough\tNSCT201\tFood, Salamander\t30\t$.05\t$1.5\n7/10/2018 5:23p\tSusan Ashworth\tCAT060\tCat, Korat (Felis catus)\t1\t$720.42\t$720.42\n7/10/2018 5:23p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t1\t$14.94\t$14.94\n7/13/2018 10:26a\tWil Wheaton\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t1\t$39.95\t$39.95\n7/13/2018 3:49p\tRobert Armstrong\tFOOD216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 9:01a\tRobert Armstrong\tFOOD217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 11:30a\tHelen Halestorm\tLAGO342\tRabbit (Oryctolagus cuniculus)\t2\t$32.94\t$65.88\n7/18/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t6\t$1.29\t157¥\n7/19/2018 10:28a\tRubeus Hagrid\tFOOD170\tFood, Dog - 5kg\t5\t$44.95\t$224.75\n7/20/2018 2:13p\tJon Arbuckle\tFOOD167\tFood, Premium Wet Cat - 3.5 oz\t50\t$3.95\t$197.5\n7/23/2018 1:41p\tRobert Armstrong\tFOOD215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/23/2018 4:23p\tDouglas \"Dougie\" Powers\tTOY235\tLaser Pointer\t1\t$16.12\t$16.12\n7/24/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/26/2018 4:39p\tDouglas \"Dougie\" Powers\tFOOD420\tFood, Shark - 10 kg\t1\t$15.70\t$15.7\n7/27/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/30/2018 12:17p\t桜 高橋 (Sakura Takahashi)\tRETURN\tFood, Senior Wet Cat - 3 oz\t1\t$1.29\t157¥\n7/31/2018 5:42p\tRubeus Hagrid\tCAT060\tFood, Dragon - 50kg\t5\t$720.42\t$3602.1\n8/1/2018 2:44p\tDavid Attenborough\tFOOD360\tFood, Rhinocerous - 50kg\t4\t$5.72\t$22.88\n8/2/2018 5:12p\tSusan Ashworth\tCAT110\tCat, Maine Coon (Felix catus)\t1\t$1,309.68\t$1309.68\n8/2/2018 5:12p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t3\t$14.94\t$44.82\n8/6/2018 10:21a\tRobert Armstrong\tFOOD212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t4\t$12.95\t$51.8\n8/7/2018 4:12p\tJuan Johnson\tREPT082\tKingsnake, California (Lampropeltis getula)\t1\t$89.95\t$89.95\n8/7/2018 4:12p\tJuan Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/10/2018 4:31p\tRobert Armstrong\tFOOD211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t4\t$12.95\t$51.8\n8/13/2018 2:07p\tMonica Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/13/2018 2:08p\tMaría Fernández\tFOOD146\tForti Diet Prohealth Mouse/Rat 3lbs\t2\t$2.00\t$4.0\n8/15/2018 11:57a\tMr. Praline\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t1\t$2300.00\t-$2300.0\n8/15/2018 3:48p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t2\t$4.22\t$8.44\n8/16/2018 11:50a\tHelen Halestorm\tRETURN\tRabbit (Oryctolagus cuniculus)\t6\t$0\t$0.0\n8/16/2018 4:00p\tKyle Kennedy\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$2,495.99\t$2495.99\n8/16/2018 5:15p\tMichael Smith\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t1\t29.95\t$31.85\n8/17/2018 9:26a\tRubeus Hagrid\tNSCT201\tFood, Spider\t5\t$.05\t$0.25\n8/20/2018 9:36a\tKyle Kennedy\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$1,247.99\t-$1247.99\n8/20/2018 3:31p\tMonica Johnson\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t30\t$.05\t$1.5\n8/20/2018 5:12p\tDavid Attenborough\tNSCT084\tFood, Pangolin\t30\t$.17\t$5.10\n8/21/2018 12:13p\tRobert Armstrong\tFOOD214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/22/2018 9:38a\tDavid Attenborough\tBIRD160\tFood, Quoll\t1\t29.95\t$29.95\n8/22/2018 2:13p\tJon Arbuckle\tFOOD170\tFood, Adult Dog - 5kg\t1\t$44.95\t$44.95\n8/24/2018 11:42a\tRobert Armstrong\tFOOD218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/27/2018 3:05p\tMonica Johnson\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t1\t$1.99\t$1.99\n8/28/2018 5:32p\tSusan Ashworth\tCAT020\tCat, Scottish Fold (Felis catus)\t1\t$1,964.53\t$1964.53\n8/28/2018 5:32p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t2\t$14.94\t$29.88\n8/29/2018 10:07a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t4\t$12.95\t$51.8\n8/31/2018 12:00a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t144\t$12.95\t$1864.8\n8/31/2018 5:57p\tJuan Johnson\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t1\t$99.95\t$99.95\n"
  },
  {
    "path": "tests/golden/load-pandas-2.csv",
    "content": "Month,Day,Resource,Location,Value,Unit,Source\r\n,,,,,,\r\n,,,,,,\r\n,,,,,,\r\n,,,,,,\r\n,,,,,,\r\n,,,,,,\r\n,,,,,,\r\nSep,29,Hospitals,Puerto Rico,34.00,number,ASES\r\nOct,1,Electricity,Puerto Rico,5.00,percent,AEE\r\nOct,1,Cell antennas,Puerto Rico,300.00,number,FCC\r\nOct,2,Telecomunications,Puerto Rico,40.00,percent,JRTC\r\nOct,2,Cell towers,Puerto Rico,270.00,number,JRTC\r\nOct,2,People in shelters,Puerto Rico,8867.00,number,Vivienda\r\nOct,2,Hospitals,Puerto Rico,51.00,number,Departamento de Salud Federal y Local\r\nOct,2,Hospitals with electricity,Puerto Rico,10.00,number,Departamento de Salud Federal y Local\r\nOct,2,Water,Puerto Rico,47.00,percent,AAA\r\nOct,2,Water,Metro,57.50,percent,AAA\r\nOct,2,Water,Norte,29.00,percent,AAA\r\nOct,2,Water,Oeste,20.80,percent,AAA\r\nOct,2,Water,Sur,67.00,percent,AAA\r\nOct,2,Water,Este,50.00,percent,AAA\r\nOct,2,Cell antennas,Puerto Rico,312.00,number,FCC\r\nOct,3,Electricity,Puerto Rico,6.89,percent,AEE\r\nOct,3,Telecomunications,Puerto Rico,40.00,percent,JRTC\r\nOct,3,Cell towers,Puerto Rico,365.00,number,JRTC\r\nOct,3,People in shelters,Puerto Rico,9343.00,number,Vivienda\r\nOct,3,Hospitals,Puerto Rico,51.00,number,Departamento de Salud Federal y Local\r\nOct,3,Hospitals with electricity,Puerto Rico,17.00,number,Departamento de Salud Federal y Local\r\nOct,3,Water,Puerto Rico,45.00,percent,AAA\r\nOct,3,Water,Metro,57.60,percent,AAA\r\nOct,3,Water,Norte,13.00,percent,AAA\r\nOct,3,Water,Oeste,25.00,percent,AAA\r\nOct,3,Water,Sur,73.00,percent,AAA\r\nOct,3,Water,Este,45.00,percent,AAA\r\nOct,4,Electricity,Puerto Rico,8.60,percent,AEE\r\nOct,4,Telecomunications,Puerto Rico,43.32,percent,JRTC\r\nOct,4,People in shelters,Puerto Rico,8802.00,number,Vivienda\r\nOct,4,Water,Puerto Rico,48.20,percent,AAA\r\nOct,4,Water,Metro,63.33,percent,AAA\r\nOct,4,Water,Norte,14.67,percent,AAA\r\nOct,4,Water,Oeste,30.31,percent,AAA\r\nOct,4,Water,Sur,77.68,percent,AAA\r\nOct,4,Water,Este,45.20,percent,AAA\r\nOct,5,Electricity,Puerto Rico,9.20,percent,AEE\r\nOct,5,Telecomunications,Puerto Rico,45.00,percent,JRTC\r\nOct,5,Cell antennas,Puerto Rico,362.00,number,FCC\r\nOct,5,Cell towers,Puerto Rico,423.00,number,JRTC\r\nOct,5,People in shelters,Puerto Rico,8585.00,number,Vivienda\r\nOct,5,Hospitals,Puerto Rico,64.00,number,Departamento de Salud Federal y Local\r\nOct,5,Hospitals with electricity,Puerto Rico,25.00,number,Departamento de Salud Federal y Local\r\nOct,5,Water,Puerto Rico,54.20,percent,AAA\r\nOct,5,Water,Metro,63.87,percent,AAA\r\nOct,5,Water,Norte,19.93,percent,AAA\r\nOct,5,Water,Oeste,39.85,percent,AAA\r\nOct,5,Water,Sur,77.23,percent,AAA\r\nOct,5,Water,Este,62.73,percent,AAA\r\nOct,6,Electricity,Puerto Rico,10.70,percent,AEE\r\nOct,6,Telecomunications,Puerto Rico,42.00,percent,JRTC\r\nOct,6,Cell antennas,Puerto Rico,406.00,number,FCC\r\nOct,6,Cell towers,Puerto Rico,390.00,number,JRTC\r\nOct,6,People in shelters,Puerto Rico,8349.00,number,Vivienda\r\nOct,6,Hospitals,Puerto Rico,68.00,number,Departamento de Salud Federal y Local\r\nOct,6,Hospitals with electricity,Puerto Rico,25.00,number,Departamento de Salud Federal y Local\r\nOct,6,Water,Puerto Rico,55.50,percent,AAA\r\nOct,6,Water,Metro,64.00,percent,AAA\r\nOct,6,Water,Norte,28.00,percent,AAA\r\nOct,6,Water,Oeste,69.00,percent,AAA\r\nOct,6,Water,Sur,69.00,percent,AAA\r\nOct,6,Water,Este,63.00,percent,AAA\r\nOct,7,Electricity,Puerto Rico,11.70,percent,AEE\r\nOct,7,Telecomunications,Puerto Rico,44.00,percent,JRTC\r\nOct,7,Cell antennas,Puerto Rico,422.00,number,FCC\r\nOct,7,Cell towers,Puerto Rico,390.00,number,JRTC\r\nOct,7,Water,Puerto Rico,56.24,percent,AAA\r\nOct,7,People in shelters,Puerto Rico,7442.00,number,Vivienda\r\nOct,7,Water,Metro,65.00,percent,AAA\r\nOct,7,Water,Norte,20.00,percent,AAA\r\nOct,7,Water,Oeste,48.00,percent,AAA\r\nOct,7,Water,Sur,78.00,percent,AAA\r\nOct,7,Water,Este,64.00,percent,AAA\r\nOct,7,Hospitals,Puerto Rico,66.00,number,Departamento de Salud Federal y Local\r\nOct,7,Hospitals with electricity,Puerto Rico,25.00,number,Departamento de Salud Federal y Local\r\nOct,8,Electricity,Puerto Rico,11.70,percent,AEE\r\nOct,8,Telecomunications,Puerto Rico,52.00,percent,JRTC\r\nOct,8,Cell antennas,Puerto Rico,505.00,number,FCC\r\nOct,8,Cell towers,Puerto Rico,465.00,number,JRTC\r\nOct,8,People in shelters,Puerto Rico,6908.00,number,Vivienda\r\nOct,8,Hospitals,Puerto Rico,66.00,number,Departamento de Salud Federal y Local\r\nOct,8,Hospitals with electricity,Puerto Rico,25.00,number,Departamento de Salud Federal y Local\r\nOct,8,Water,Puerto Rico,56.87,percent,AAA\r\nOct,8,Water,Metro,68.00,percent,AAA\r\nOct,8,Water,Norte,23.00,percent,AAA\r\nOct,8,Water,Oeste,45.00,percent,AAA\r\nOct,8,Water,Sur,69.00,percent,AAA\r\nOct,8,Water,Este,65.00,percent,AAA\r\nOct,9,Electricity,Puerto Rico,15.00,percent,AEE\r\nOct,9,Telecomunications,Puerto Rico,51.00,percent,JRTC\r\nOct,9,Cell towers,Puerto Rico,459.00,number,JRTC\r\nOct,9,People in shelters,Puerto Rico,6452.00,number,Vivienda\r\nOct,9,Hospitals,Puerto Rico,67.00,number,Departamento de Salud Federal y Local\r\nOct,9,Hospitals with electricity,Puerto Rico,25.00,number,Departamento de Salud Federal y Local\r\nOct,9,Water,Puerto Rico,59.50,percent,AAA\r\nOct,9,Water,Metro,68.00,percent,AAA\r\nOct,9,Water,Norte,31.00,percent,AAA\r\nOct,9,Water,Oeste,51.00,percent,AAA\r\nOct,9,Water,Sur,74.00,percent,AAA\r\nOct,9,Water,Este,65.00,percent,AAA\r\nOct,10,Electricity,Puerto Rico,16.00,percent,AEE\r\nOct,10,Telecomunications,Puerto Rico,53.00,percent,JRTC\r\nOct,10,Cell towers,Puerto Rico,531.00,number,JRTC\r\nOct,10,People in shelters,Puerto Rico,6067.00,number,Vivienda\r\nOct,10,Hospitals,Puerto Rico,70.00,number,Departamento de Salud Federal y Local\r\nOct,10,Hospitals with electricity,Puerto Rico,25.00,number,Departamento de Salud Federal y Local\r\nOct,10,Water,Puerto Rico,63.75,percent,AAA\r\nOct,10,Water,Metro,84.00,percent,AAA\r\nOct,10,Water,Norte,30.00,percent,AAA\r\nOct,10,Water,Oeste,48.00,percent,AAA\r\nOct,10,Water,Sur,77.00,percent,AAA\r\nOct,10,Water,Este,64.00,percent,AAA\r\nOct,11,Electricity,Puerto Rico,10.60,percent,AEE\r\nOct,11,Telecomunications,Puerto Rico,53.60,percent,JRTC\r\nOct,11,Cell towers,Puerto Rico,544.00,number,JRTC\r\nOct,11,People in shelters,Puerto Rico,5742.00,number,Vivienda\r\nOct,11,Hospitals,Puerto Rico,72.00,number,Departamento de Salud Federal y Local\r\nOct,11,Hospitals with electricity,Puerto Rico,43.00,number,Departamento de Salud Federal y Local\r\nOct,11,Water,Puerto Rico,64.22,percent,AAA\r\nOct,11,Water,Metro,80.00,percent,AAA\r\nOct,11,Water,Norte,32.00,percent,AAA\r\nOct,11,Water,Oeste,45.00,percent,AAA\r\nOct,11,Water,Sur,84.00,percent,AAA\r\nOct,11,Water,Este,68.00,percent,AAA\r\nOct,12,Electricity,Puerto Rico,17.00,percent,AEE\r\nOct,12,Telecomunications,Puerto Rico,55.00,percent,JRTC\r\nOct,12,Water,Puerto Rico,64.00,percent,AAA\r\nOct,12,Water,Metro,82.00,percent,AAA\r\nOct,12,Water,Norte,30.00,percent,AAA\r\nOct,12,Water,Oeste,35.00,percent,AAA\r\nOct,12,Water,Sur,81.00,percent,AAA\r\nOct,12,Water,Este,70.00,percent,AAA\r\nOct,12,Cell towers,Puerto Rico,601.00,number,JRTC\r\nOct,12,People in shelters,Puerto Rico,5602.00,number,Vivienda\r\nOct,12,Hospitals,Puerto Rico,72.00,number,Departamento de Salud Federal y Local\r\nOct,12,Hospitals with electricity,Puerto Rico,43.00,number,Departamento de Salud Federal y Local\r\nOct,13,Electricity,Puerto Rico,9.00,percent,AEE\r\nOct,13,Telecomunications,Puerto Rico,56.00,percent,JRTC\r\nOct,13,Water,Puerto Rico,63.20,percent,AAA\r\nOct,13,Water,Metro,84.00,percent,AAA\r\nOct,13,Water,Norte,29.00,percent,AAA\r\nOct,13,Water,Oeste,39.00,percent,AAA\r\nOct,13,Water,Sur,76.00,percent,AAA\r\nOct,13,Water,Este,69.00,percent,AAA\r\nOct,13,Cell towers,Puerto Rico,586.00,number,JRTC\r\nOct,13,People in shelters,Puerto Rico,5414.00,number,Vivienda\r\nOct,13,Hospitals,Puerto Rico,72.00,number,Departamento de Salud Federal y Local\r\nOct,13,Hospitals with electricity,Puerto Rico,44.00,number,Departamento de Salud Federal y Local\r\nOct,14,Electricity,Puerto Rico,14.60,percent,AEE\r\nOct,14,Telecomunications,Puerto Rico,58.00,percent,JRTC\r\nOct,14,Water,Puerto Rico,64.00,percent,AAA\r\nOct,14,Water,Metro,81.00,percent,AAA\r\nOct,14,Water,Norte,27.00,percent,AAA\r\nOct,14,Water,Oeste,54.00,percent,AAA\r\nOct,14,Water,Sur,80.00,percent,AAA\r\nOct,14,Water,Este,67.00,percent,AAA\r\nOct,14,Cell antennas,Puerto Rico,647.00,number,FCC\r\nOct,14,Cell towers,Puerto Rico,652.00,number,JRTC\r\nOct,14,People in shelters,Puerto Rico,5261.00,number,Vivienda\r\nOct,15,Electricity,Puerto Rico,15.00,percent,AEE\r\nOct,15,Telecomunications,Puerto Rico,59.00,percent,JRTC\r\nOct,15,Water,Puerto Rico,69.00,percent,AAA\r\nOct,15,Water,Metro,84.00,percent,AAA\r\nOct,15,Water,Norte,38.00,percent,AAA\r\nOct,15,Water,Oeste,53.00,percent,AAA\r\nOct,15,Water,Sur,87.00,percent,AAA\r\nOct,15,Water,Este,71.00,percent,AAA\r\nOct,15,Cell antennas,Puerto Rico,672.00,number,FCC\r\nOct,15,Cell towers,Puerto Rico,690.00,number,JRTC\r\nOct,15,People in shelters,Puerto Rico,5141.00,number,Vivienda\r\nOct,15,Hospitals,Puerto Rico,69.00,number,Departamento de Salud Federal y Local\r\nOct,15,Hospitals with electricity,Puerto Rico,44.00,number,Departamento de Salud Federal y Local\r\nOct,16,Electricity,Puerto Rico,13.70,percent,AEE\r\nOct,16,Telecomunications,Puerto Rico,59.00,percent,JRTC\r\nOct,16,Water,Puerto Rico,72.00,percent,AAA\r\nOct,16,Water,Metro,84.00,percent,AAA\r\nOct,16,Water,Norte,45.00,percent,AAA\r\nOct,16,Water,Oeste,63.00,percent,AAA\r\nOct,16,Water,Sur,88.00,percent,AAA\r\nOct,16,Water,Este,70.00,percent,AAA\r\nOct,16,People in shelters,Puerto Rico,5037.00,number,Vivienda\r\nOct,16,Hospitals,Puerto Rico,70.00,number,Departamento de Salud Federal y Local\r\nOct,16,Hospitals with electricity,Puerto Rico,45.00,number,Departamento de Salud Federal y Local\r\nOct,17,Electricity,Puerto Rico,17.70,percent,AEE\r\nOct,17,Telecomunications,Puerto Rico,59.00,percent,JRTC\r\nOct,17,Water,Puerto Rico,65.43,percent,AAA\r\nOct,17,Water,Metro,77.00,percent,AAA\r\nOct,17,Water,Norte,39.00,percent,AAA\r\nOct,17,Water,Oeste,49.00,percent,AAA\r\nOct,17,Water,Sur,80.00,percent,AAA\r\nOct,17,Water,Este,71.00,percent,AAA\r\nOct,17,Cell towers,Puerto Rico,691.00,number,JRTC\r\nOct,17,People in shelters,Puerto Rico,4842.00,number,Vivienda\r\nOct,17,Hospitals,Puerto Rico,70.00,number,Departamento de Salud Federal y Local\r\nOct,17,Hospitals with electricity,Puerto Rico,45.00,number,Departamento de Salud Federal y Local\r\nOct,18,Electricity,Puerto Rico,19.10,percent,AEE\r\nOct,18,Telecomunications,Puerto Rico,61.00,percent,JRTC\r\nOct,18,Water,Puerto Rico,69.19,percent,AAA\r\nOct,18,Water,Metro,86.00,percent,AAA\r\nOct,18,Water,Norte,39.00,percent,AAA\r\nOct,18,Water,Oeste,61.00,percent,AAA\r\nOct,18,Water,Sur,75.00,percent,AAA\r\nOct,18,Water,Este,69.00,percent,AAA\r\nOct,18,Cell towers,Puerto Rico,744.00,number,JRTC\r\nOct,18,People in shelters,Puerto Rico,4702.00,number,Vivienda\r\nOct,18,Hospitals,Puerto Rico,70.00,number,Departamento de Salud Federal y Local\r\nOct,18,Hospitals with electricity,Puerto Rico,45.00,number,Departamento de Salud Federal y Local\r\nOct,19,Electricity,Puerto Rico,21.60,percent,AEE\r\nOct,19,Telecomunications,Puerto Rico,61.00,percent,JRTC\r\nOct,19,Water,Puerto Rico,71.58,percent,AAA\r\nOct,19,Water,Metro,90.00,percent,AAA\r\nOct,19,Water,Norte,37.00,percent,AAA\r\nOct,19,Water,Oeste,63.00,percent,AAA\r\nOct,19,Water,Sur,85.00,percent,AAA\r\nOct,19,Water,Este,69.00,percent,AAA\r\nOct,19,Cell towers,Puerto Rico,754.00,number,JRTC\r\nOct,19,People in shelters,Puerto Rico,4374.00,number,Vivienda\r\nOct,19,Hospitals,Puerto Rico,64.00,number,Departamento de Salud Federal y Local\r\nOct,19,Hospitals with electricity,Puerto Rico,45.00,number,Departamento de Salud Federal y Local\r\nOct,20,Electricity,Puerto Rico,12.33,percent,AEE\r\nOct,20,Telecomunications,Puerto Rico,62.00,percent,JRTC\r\nOct,20,Water,Puerto Rico,69.51,percent,AAA\r\nOct,20,Water,Metro,90.00,percent,AAA\r\nOct,20,Water,Norte,36.00,percent,AAA\r\nOct,20,Water,Oeste,60.00,percent,AAA\r\nOct,20,Water,Sur,77.00,percent,AAA\r\nOct,20,Water,Este,69.00,percent,AAA\r\nOct,20,Cell antennas,Puerto Rico,842.00,number,FCC\r\nOct,20,Cell towers,Puerto Rico,795.00,number,JRTC\r\nOct,20,People in shelters,Puerto Rico,4246.00,number,Vivienda\r\nOct,20,Hospitals,Puerto Rico,66.00,number,Departamento de Salud Federal y Local\r\nOct,20,Hospitals with electricity,Puerto Rico,45.00,number,Departamento de Salud Federal y Local\r\nOct,21,Electricity,Puerto Rico,16.61,percent,AEE\r\nOct,21,Telecomunications,Puerto Rico,63.00,percent,JRTC\r\nOct,21,Water,Puerto Rico,71.74,percent,AAA\r\nOct,21,Water,Metro,90.00,percent,AAA\r\nOct,21,Water,Norte,42.00,percent,AAA\r\nOct,21,Water,Oeste,58.00,percent,AAA\r\nOct,21,Water,Sur,85.00,percent,AAA\r\nOct,21,Water,Este,68.00,percent,AAA\r\nOct,21,Cell antennas,Puerto Rico,842.00,number,FCC\r\nOct,21,Cell towers,Puerto Rico,839.00,number,JRTC\r\nOct,21,People in shelters,Puerto Rico,4154.00,number,Vivienda\r\nOct,21,Hospitals,Puerto Rico,65.00,number,Departamento de Salud Federal y Local\r\nOct,21,Hospitals with electricity,Puerto Rico,45.00,number,Departamento de Salud Federal y Local\r\nOct,22,Electricity,Puerto Rico,20.22,percent,AEE\r\nOct,22,Telecomunications,Puerto Rico,63.00,percent,JRTC\r\nOct,22,Water,Puerto Rico,72.77,percent,AAA\r\nOct,22,Water,Metro,86.00,percent,AAA\r\nOct,22,Water,Norte,64.00,percent,AAA\r\nOct,22,Water,Oeste,64.00,percent,AAA\r\nOct,22,Water,Sur,81.00,percent,AAA\r\nOct,22,Water,Este,74.00,percent,AAA\r\nOct,22,Cell antennas,Puerto Rico,863.00,number,FCC\r\nOct,22,Cell towers,Puerto Rico,864.00,number,JRTC\r\nOct,22,People in shelters,Puerto Rico,4154.00,number,Vivienda\r\nOct,22,Hospitals,Puerto Rico,65.00,number,Departamento de Salud Federal y Local\r\nOct,22,Hospitals with electricity,Puerto Rico,49.00,number,Departamento de Salud Federal y Local\r\nOct,23,Electricity,Puerto Rico,23.00,percent,AEE\r\nOct,23,Telecomunications,Puerto Rico,63.00,percent,JRTC\r\nOct,23,Water,Puerto Rico,73.65,percent,AAA\r\nOct,23,Water,Metro,88.00,percent,AAA\r\nOct,23,Water,Norte,48.00,percent,AAA\r\nOct,23,Water,Oeste,64.00,percent,AAA\r\nOct,23,Water,Sur,81.00,percent,AAA\r\nOct,23,Water,Este,77.00,percent,AAA\r\nOct,23,Cell antennas,Puerto Rico,884.00,number,FCC\r\nOct,23,Cell towers,Puerto Rico,859.00,number,JRTC\r\nOct,23,People in shelters,Puerto Rico,3966.00,number,Vivienda\r\nOct,23,Hospitals,Puerto Rico,65.00,number,Departamento de Salud Federal y Local\r\nOct,23,Hospitals with electricity,Puerto Rico,49.00,number,Departamento de Salud Federal y Local\r\nOct,24,Electricity,Puerto Rico,24.40,percent,AEE\r\nOct,24,Telecomunications,Puerto Rico,65.00,percent,JRTC\r\nOct,24,Water,Puerto Rico,74.37,percent,AAA\r\nOct,24,Water,Metro,88.00,percent,AAA\r\nOct,24,Water,Norte,44.00,percent,AAA\r\nOct,24,Water,Oeste,65.00,percent,AAA\r\nOct,24,Water,Sur,87.00,percent,AAA\r\nOct,24,Water,Este,77.00,percent,AAA\r\nOct,24,Cell antennas,Puerto Rico,898.00,number,FCC\r\nOct,24,Cell towers,Puerto Rico,911.00,number,JRTC\r\nOct,24,People in shelters,Puerto Rico,3897.00,number,Vivienda\r\nOct,24,Hospitals,Puerto Rico,65.00,number,Departamento de Salud Federal y Local\r\nOct,24,Hospitals with electricity,Puerto Rico,49.00,number,Departamento de Salud Federal y Local\r\nOct,25,Electricity,Puerto Rico,25.00,percent,AEE\r\nOct,25,Telecomunications,Puerto Rico,65.00,percent,JRTC\r\nOct,25,Water,Puerto Rico,75.00,percent,AAA\r\nOct,25,Water,Metro,87.00,percent,AAA\r\nOct,25,Water,Norte,46.00,percent,AAA\r\nOct,25,Water,Oeste,68.00,percent,AAA\r\nOct,25,Water,Sur,88.00,percent,AAA\r\nOct,25,Water,Este,77.00,percent,AAA\r\nOct,25,Cell antennas,Puerto Rico,958.00,number,FCC\r\nOct,25,Cell towers,Puerto Rico,936.00,number,JRTC\r\nOct,25,People in shelters,Puerto Rico,3758.00,number,Vivienda\r\nOct,25,Hospitals,Puerto Rico,65.00,number,Departamento de Salud Federal y Local\r\nOct,25,Hospitals with electricity,Puerto Rico,50.00,number,Departamento de Salud Federal y Local\r\nOct,26,Electricity,Puerto Rico,26.20,percent,AEE\r\nOct,26,Telecomunications,Puerto Rico,66.00,percent,JRTC\r\nOct,26,Water,Puerto Rico,78.00,percent,AAA\r\nOct,26,Water,Metro,88.00,percent,AAA\r\nOct,26,Water,Norte,53.00,percent,AAA\r\nOct,26,Water,Oeste,73.00,percent,AAA\r\nOct,26,Water,Sur,88.00,percent,AAA\r\nOct,26,Water,Este,78.00,percent,AAA\r\nOct,26,Cell antennas,Puerto Rico,902.00,number,FCC\r\nOct,26,Cell towers,Puerto Rico,967.00,number,JRTC\r\nOct,26,People in shelters,Puerto Rico,3655.00,number,Vivienda\r\nOct,26,Hospitals,Puerto Rico,65.00,number,Departamento de Salud Federal y Local\r\nOct,26,Hospitals with electricity,Puerto Rico,50.00,number,Departamento de Salud Federal y Local\r\nOct,27,Electricity,Puerto Rico,27.60,percent,AEE\r\nOct,27,Telecomunications,Puerto Rico,67.00,percent,JRTC\r\nOct,27,Water,Puerto Rico,77.00,percent,AAA\r\nOct,27,Water,Metro,89.00,percent,AAA\r\nOct,27,Water,Norte,58.00,percent,AAA\r\nOct,27,Water,Oeste,67.00,percent,AAA\r\nOct,27,Water,Sur,89.00,percent,AAA\r\nOct,27,Water,Este,72.00,percent,AAA\r\nOct,27,Cell antennas,Puerto Rico,902.00,number,FCC\r\nOct,27,Cell towers,Puerto Rico,1019.00,number,JRTC\r\nOct,27,People in shelters,Puerto Rico,3577.00,number,Vivienda\r\nOct,27,Hospitals,Puerto Rico,65.00,number,Departamento de Salud Federal y Local\r\nOct,27,Hospitals with electricity,Puerto Rico,54.00,number,Departamento de Salud Federal y Local\r\nOct,28,Electricity,Puerto Rico,29.70,percent,AEE\r\nOct,28,Telecomunications,Puerto Rico,69.00,percent,JRTC\r\nOct,28,Water,Puerto Rico,80.00,percent,AAA\r\nOct,28,Water,Metro,86.00,percent,AAA\r\nOct,28,Water,Norte,74.00,percent,AAA\r\nOct,28,Water,Oeste,68.00,percent,AAA\r\nOct,28,Water,Sur,88.00,percent,AAA\r\nOct,28,Water,Este,80.00,percent,AAA\r\nOct,28,Cell antennas,Puerto Rico,1075.00,number,FCC\r\nOct,28,Cell towers,Puerto Rico,1081.00,number,JRTC\r\nOct,28,People in shelters,Puerto Rico,3502.00,number,Vivienda\r\nOct,28,Hospitals,Puerto Rico,65.00,number,Departamento de Salud Federal y Local\r\nOct,28,Hospitals with electricity,Puerto Rico,55.00,number,Departamento de Salud Federal y Local\r\nOct,29,Electricity,Puerto Rico,29.70,percent,AEE\r\nOct,29,Telecomunications,Puerto Rico,69.00,percent,JRTC\r\nOct,29,Water,Puerto Rico,79.52,percent,AAA\r\nOct,29,Water,Metro,84.00,percent,AAA\r\nOct,29,Water,Norte,68.00,percent,AAA\r\nOct,29,Water,Oeste,71.00,percent,AAA\r\nOct,29,Water,Sur,87.00,percent,AAA\r\nOct,29,Water,Este,84.00,percent,AAA\r\nOct,29,Cell antennas,Puerto Rico,1101.00,number,FCC\r\nOct,29,Cell towers,Puerto Rico,1092.00,number,JRTC\r\nOct,29,People in shelters,Puerto Rico,3403.00,number,Vivienda\r\nOct,29,Hospitals,Puerto Rico,65.00,number,Departamento de Salud Federal y Local\r\nOct,29,Hospitals with electricity,Puerto Rico,55.00,number,Departamento de Salud Federal y Local\r\nOct,30,Electricity,Puerto Rico,30.50,percent,AEE\r\nOct,30,Telecomunications,Puerto Rico,69.00,percent,JRTC\r\nOct,30,Water,Puerto Rico,81.00,percent,AAA\r\nOct,30,Water,Metro,87.00,percent,AAA\r\nOct,30,Water,Norte,69.00,percent,AAA\r\nOct,30,Water,Oeste,71.00,percent,AAA\r\nOct,30,Water,Sur,88.00,percent,AAA\r\nOct,30,Water,Este,84.00,percent,AAA\r\nOct,30,Cell antennas,Puerto Rico,1127.00,number,FCC\r\nOct,30,Cell towers,Puerto Rico,1109.00,number,JRTC\r\nOct,30,People in shelters,Puerto Rico,3348.00,number,Vivienda\r\nOct,30,Hospitals,Puerto Rico,65.00,number,Departamento de Salud Federal y Local\r\nOct,30,Hospitals with electricity,Puerto Rico,55.00,number,Departamento de Salud Federal y Local\r\nOct,31,Electricity,Puerto Rico,33.40,percent,AEE\r\nOct,31,Telecomunications,Puerto Rico,70.00,percent,JRTC\r\nOct,31,Water,Puerto Rico,82.00,percent,AAA\r\nOct,31,Water,Metro,91.00,percent,AAA\r\nOct,31,Water,Norte,67.00,percent,AAA\r\nOct,31,Water,Oeste,75.00,percent,AAA\r\nOct,31,Water,Sur,87.00,percent,AAA\r\nOct,31,Water,Este,85.00,percent,AAA\r\nOct,31,Cell antennas,Puerto Rico,1540.00,number,FCC\r\nOct,31,People in shelters,Puerto Rico,3304.00,number,Vivienda\r\nOct,31,Hospitals,Puerto Rico,65.00,number,Departamento de Salud Federal y Local\r\nOct,31,Hospitals with electricity,Puerto Rico,57.00,number,Departamento de Salud Federal y Local\r\nNov,1,Electricity,Puerto Rico,37.90,percent,AEE\r\nNov,1,Telecomunications,Puerto Rico,70.00,percent,JRTC\r\nNov,1,Water,Puerto Rico,82.00,percent,AAA\r\nNov,1,Water,Metro,91.00,percent,AAA\r\nNov,1,Water,Norte,68.00,percent,AAA\r\nNov,1,Water,Oeste,71.00,percent,AAA\r\nNov,1,Water,Sur,88.00,percent,AAA\r\nNov,1,Water,Este,85.00,percent,AAA\r\nNov,1,Cell towers,Puerto Rico,1164.00,number,JRTC\r\nNov,1,People in shelters,Puerto Rico,3243.00,number,Vivienda\r\nNov,1,Hospitals,Puerto Rico,65.00,number,Departamento de Salud Federal y Local\r\nNov,1,Hospitals with electricity,Puerto Rico,57.00,number,Departamento de Salud Federal y Local\r\nNov,2,Electricity,Puerto Rico,36.90,percent,AEE\r\nNov,2,Telecomunications,Puerto Rico,70.00,percent,JRTC\r\nNov,2,Water,Puerto Rico,83.11,percent,AAA\r\nNov,2,Water,Metro,94.00,percent,AAA\r\nNov,2,Water,Norte,68.00,percent,AAA\r\nNov,2,Water,Oeste,71.00,percent,AAA\r\nNov,2,Water,Sur,88.00,percent,AAA\r\nNov,2,Water,Este,84.00,percent,AAA\r\nNov,2,Cell antennas,Puerto Rico,1481.00,number,FCC\r\nNov,2,Cell towers,Puerto Rico,1165.00,number,JRTC\r\nNov,2,People in shelters,Puerto Rico,3068.00,number,Vivienda\r\nNov,2,Hospitals,Puerto Rico,65.00,number,Departamento de Salud Federal y Local\r\nNov,2,Hospitals with electricity,Puerto Rico,57.00,number,Departamento de Salud Federal y Local\r\nNov,3,Electricity,Puerto Rico,37.90,percent,AEE\r\nNov,3,Telecomunications,Puerto Rico,71.00,percent,JRTC\r\nNov,3,Water,Puerto Rico,80.38,percent,AAA\r\nNov,3,Water,Metro,92.00,percent,AAA\r\nNov,3,Water,Norte,56.00,percent,AAA\r\nNov,3,Water,Oeste,73.00,percent,AAA\r\nNov,3,Water,Sur,87.00,percent,AAA\r\nNov,3,Water,Este,83.00,percent,AAA\r\nNov,3,Cell antennas,Puerto Rico,1442.00,number,FCC\r\nNov,3,Cell towers,Puerto Rico,1233.00,number,JRTC\r\nNov,3,People in shelters,Puerto Rico,2942.00,number,Vivienda\r\nNov,3,Hospitals,Puerto Rico,67.00,number,Departamento de Salud Federal y Local\r\nNov,3,Hospitals with electricity,Puerto Rico,57.00,number,Departamento de Salud Federal y Local\r\nNov,4,Electricity,Puerto Rico,39.20,percent,AEE\r\nNov,4,Telecomunications,Puerto Rico,71.00,percent,JRTC\r\nNov,4,Water,Puerto Rico,80.56,percent,AAA\r\nNov,4,Water,Metro,95.00,percent,AAA\r\nNov,4,Water,Norte,71.00,percent,AAA\r\nNov,4,Water,Oeste,56.00,percent,AAA\r\nNov,4,Water,Sur,88.00,percent,AAA\r\nNov,4,Water,Este,80.00,percent,AAA\r\nNov,4,Cell antennas,Puerto Rico,1302.00,number,FCC\r\nNov,4,Cell towers,Puerto Rico,1297.00,number,JRTC\r\nNov,4,People in shelters,Puerto Rico,2844.00,number,Vivienda\r\nNov,4,Hospitals,Puerto Rico,67.00,number,Departamento de Salud Federal y Local\r\nNov,4,Hospitals with electricity,Puerto Rico,58.00,number,Departamento de Salud Federal y Local\r\nNov,5,Electricity,Puerto Rico,41.03,percent,AEE\r\nNov,5,Telecomunications,Puerto Rico,71.00,percent,JRTC\r\nNov,5,Water,Puerto Rico,83.09,percent,AAA\r\nNov,5,Water,Metro,93.00,percent,AAA\r\nNov,5,Water,Norte,72.00,percent,AAA\r\nNov,5,Water,Oeste,73.00,percent,AAA\r\nNov,5,Water,Sur,89.00,percent,AAA\r\nNov,5,Water,Este,80.00,percent,AAA\r\nNov,5,Cell antennas,Puerto Rico,1328.00,number,FCC\r\nNov,5,Cell towers,Puerto Rico,1261.00,number,JRTC\r\nNov,5,People in shelters,Puerto Rico,2844.00,number,Vivienda\r\nNov,5,Hospitals,Puerto Rico,67.00,number,Departamento de Salud Federal y Local\r\nNov,5,Hospitals with electricity,Puerto Rico,58.00,number,Departamento de Salud Federal y Local\r\nNov,6,Electricity,Puerto Rico,42.20,percent,AEE\r\nNov,6,Telecomunications,Puerto Rico,71.50,percent,JRTC\r\nNov,6,Water,Puerto Rico,79.46,percent,AAA\r\nNov,6,Water,Metro,91.00,percent,AAA\r\nNov,6,Water,Norte,62.00,percent,AAA\r\nNov,6,Water,Oeste,72.00,percent,AAA\r\nNov,6,Water,Sur,91.00,percent,AAA\r\nNov,6,Water,Este,79.00,percent,AAA\r\nNov,6,Cell antennas,Puerto Rico,1374.00,number,FCC\r\nNov,6,Cell towers,Puerto Rico,1337.00,number,JRTC\r\nNov,6,People in shelters,Puerto Rico,2844.00,number,Vivienda\r\nNov,6,Hospitals,Puerto Rico,67.00,number,Departamento de Salud Federal y Local\r\nNov,6,Hospitals with electricity,Puerto Rico,59.00,number,Departamento de Salud Federal y Local\r\nNov,7,Electricity,Puerto Rico,42.40,percent,AEE\r\nNov,7,Telecomunications,Puerto Rico,72.00,percent,JRTC\r\nNov,7,Water,Puerto Rico,83.30,percent,AAA\r\nNov,7,Water,Metro,94.00,percent,AAA\r\nNov,7,Water,Norte,70.00,percent,AAA\r\nNov,7,Water,Oeste,75.00,percent,AAA\r\nNov,7,Water,Sur,90.00,percent,AAA\r\nNov,7,Water,Este,80.00,percent,AAA\r\nNov,7,Cell antennas,Puerto Rico,1285.00,number,FCC\r\nNov,7,Cell towers,Puerto Rico,1410.00,number,JRTC\r\nNov,7,People in shelters,Puerto Rico,2844.00,number,Vivienda\r\nNov,7,Hospitals,Puerto Rico,67.00,number,Departamento de Salud Federal y Local\r\nNov,7,Hospitals with electricity,Puerto Rico,59.00,number,Departamento de Salud Federal y Local\r\nNov,8,Electricity,Puerto Rico,42.40,percent,AEE\r\nNov,8,Telecomunications,Puerto Rico,72.00,percent,JRTC\r\nNov,8,Water,Puerto Rico,85.38,percent,AAA\r\nNov,8,Water,Metro,95.00,percent,AAA\r\nNov,8,Water,Norte,67.00,percent,AAA\r\nNov,8,Water,Oeste,83.00,percent,AAA\r\nNov,8,Water,Sur,90.00,percent,AAA\r\nNov,8,Water,Este,84.00,percent,AAA\r\nNov,8,Cell antennas,Puerto Rico,1272.00,number,FCC\r\nNov,8,Cell towers,Puerto Rico,1418.00,number,JRTC\r\nNov,8,People in shelters,Puerto Rico,2460.00,number,Vivienda\r\nNov,8,Hospitals,Puerto Rico,67.00,number,Departamento de Salud Federal y Local\r\nNov,8,Hospitals with electricity,Puerto Rico,59.00,number,Departamento de Salud Federal y Local\r\nNov,9,Electricity,Puerto Rico,43.20,percent,AEE\r\nNov,9,Telecomunications,Puerto Rico,73.00,percent,JRTC\r\nNov,9,Water,Puerto Rico,87.81,percent,AAA\r\nNov,9,Water,Metro,95.00,percent,AAA\r\nNov,9,Water,Norte,72.00,percent,AAA\r\nNov,9,Water,Oeste,85.00,percent,AAA\r\nNov,9,Water,Sur,91.00,percent,AAA\r\nNov,9,Water,Este,90.00,percent,AAA\r\nNov,9,Cell antennas,Puerto Rico,1213.00,number,FCC\r\nNov,9,Cell towers,Puerto Rico,1496.00,number,JRTC\r\nNov,9,People in shelters,Puerto Rico,2239.00,number,Vivienda\r\nNov,9,Hospitals,Puerto Rico,67.00,number,Departamento de Salud Federal y Local\r\nNov,9,Hospitals with electricity,Puerto Rico,59.00,number,Departamento de Salud Federal y Local\r\nNov,10,Electricity,Puerto Rico,31.20,percent,AEE\r\nNov,10,Telecomunications,Puerto Rico,72.00,percent,JRTC\r\nNov,10,Water,Puerto Rico,78.09,percent,AAA\r\nNov,10,Water,Metro,67.00,percent,AAA\r\nNov,10,Water,Norte,64.00,percent,AAA\r\nNov,10,Water,Oeste,84.00,percent,AAA\r\nNov,10,Water,Sur,92.00,percent,AAA\r\nNov,10,Water,Este,91.00,percent,AAA\r\nNov,10,Cell antennas,Puerto Rico,1182.00,number,FCC\r\nNov,10,Cell towers,Puerto Rico,1474.00,number,JRTC\r\nNov,10,People in shelters,Puerto Rico,2219.00,number,Vivienda\r\nNov,10,Hospitals,Puerto Rico,67.00,number,Departamento de Salud Federal y Local\r\nNov,10,Hospitals with electricity,Puerto Rico,59.00,number,Departamento de Salud Federal y Local\r\nNov,11,Electricity,Puerto Rico,44.50,percent,AEE\r\nNov,11,Telecomunications,Puerto Rico,73.00,percent,JRTC\r\nNov,11,Water,Puerto Rico,87.82,percent,AAA\r\nNov,11,Water,Metro,95.00,percent,AAA\r\nNov,11,Water,Norte,70.00,percent,AAA\r\nNov,11,Water,Oeste,83.00,percent,AAA\r\nNov,11,Water,Sur,92.00,percent,AAA\r\nNov,11,Water,Este,91.00,percent,AAA\r\nNov,11,Cell antennas,Puerto Rico,1556.00,number,FCC\r\nNov,11,Cell towers,Puerto Rico,1530.00,number,JRTC\r\nNov,11,People in shelters,Puerto Rico,2169.00,number,Vivienda\r\nNov,11,Hospitals,Puerto Rico,67.00,number,Departamento de Salud Federal y Local\r\nNov,11,Hospitals with electricity,Puerto Rico,59.00,number,Departamento de Salud Federal y Local\r\nNov,12,Electricity,Puerto Rico,47.80,percent,AEE\r\nNov,12,Telecomunications,Puerto Rico,73.00,percent,JRTC\r\nNov,12,Water,Puerto Rico,89.61,percent,AAA\r\nNov,12,Water,Metro,95.00,percent,AAA\r\nNov,12,Water,Norte,79.00,percent,AAA\r\nNov,12,Water,Oeste,84.00,percent,AAA\r\nNov,12,Water,Sur,92.00,percent,AAA\r\nNov,12,Water,Este,92.00,percent,AAA\r\nNov,12,Cell antennas,Puerto Rico,1556.00,number,FCC\r\nNov,12,Cell towers,Puerto Rico,1554.00,number,JRTC\r\nNov,12,People in shelters,Puerto Rico,2143.00,number,Vivienda\r\nNov,12,Hospitals,Puerto Rico,67.00,number,Departamento de Salud Federal y Local\r\nNov,12,Hospitals with electricity,Puerto Rico,59.00,number,Departamento de Salud Federal y Local\r\n"
  },
  {
    "path": "tests/golden/load-pandas-3.tsv",
    "content": "s\tcount\n1\t3\n2\t3\n3\t3\n4\t3\n5\t3\n6\t3\n"
  },
  {
    "path": "tests/golden/load-pandas.tsv",
    "content": "y\ts\ta\tb\n7\t1\t1\t1\n14\t1\t2\t2\n12\t1\t3\t3\n3\t2\t1\t1\n5\t2\t3\t2\n11\t2\t2\t3\n6\t3\t3\t1\n7\t3\t1\t2\n11\t3\t2\t3\n12\t4\t2\t1\n13\t4\t3\t2\n9\t4\t1\t3\n7\t5\t2\t1\n9\t5\t1\t2\n8\t5\t3\t3\n8\t6\t3\t1\n13\t6\t2\t2\n9\t6\t1\t3\n"
  },
  {
    "path": "tests/golden/load-parquet.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016-01-06\tEast\tJones\tPencil\t95\t1.99\t189.05\n2016-01-23\tCentral\tKivell\tBinder\t50\t19.99\t999.50\n2016-02-09\tCentral\tJardine\tPencil\t36\t4.99\t179.64\n2016-02-26\tCentral\tGill\tPen\t27\t19.99\t539.73\n2016-03-15\tWest\tSorvino\tPencil\t56\t2.99\t167.44\n2016-04-01\tEast\tJones\tBinder\t60\t4.99\t299.40\n2016-04-18\tCentral\tAndrews\tPencil\t75\t1.99\t149.25\n2016-05-05\tCentral\tJardine\tPencil\t90\t4.99\t449.10\n2016-05-22\tWest\tThompson\tPencil\t32\t1.99\t63.68\n2016-06-08\tEast\tJones\tBinder\t60\t8.99\t539.40\n2016-06-25\tCentral\tMorgan\tPencil\t90\t4.99\t449.10\n2016-07-12\tEast\tHoward\tBinder\t29\t1.99\t57.71\n2016-07-29\tEast\tParent\tBinder\t81\t19.99\t1619.19\n2016-08-15\tEast\tJones\tPencil\t35\t4.99\t174.65\n2016-09-01\tCentral\tSmith\tDesk\t2\t125.00\t250.00\n2016-09-18\tEast\tJones\tPen Set\t16\t15.99\t255.84\n2016-10-05\tCentral\tMorgan\tBinder\t28\t8.99\t251.72\n2016-10-22\tEast\tJones\tPen\t64\t8.99\t575.36\n2016-11-08\tEast\tParent\tPen\t15\t19.99\t299.85\n2016-11-25\tCentral\tKivell\tPen Set\t96\t4.99\t479.04\n2016-12-12\tCentral\tSmith\tPencil\t67\t1.29\t86.43\n2016-12-29\tEast\tParent\tPen Set\t74\t15.99\t1183.26\n2017-01-15\tCentral\tGill\tBinder\t46\t8.99\t413.54\n2017-02-01\tCentral\tSmith\tBinder\t87\t15.00\t1305.00\n2017-02-18\tEast\tJones\tBinder\t4\t4.99\t19.96\n2017-03-07\tWest\tSorvino\tBinder\t7\t19.99\t139.93\n2017-03-24\tCentral\tJardine\tPen Set\t50\t4.99\t249.50\n2017-04-10\tCentral\tAndrews\tPencil\t66\t1.99\t131.34\n2017-04-27\tEast\tHoward\tPen\t96\t4.99\t479.04\n2017-05-14\tCentral\tGill\tPencil\t53\t1.29\t68.37\n2017-05-31\tCentral\tGill\tBinder\t80\t8.99\t719.20\n2017-06-17\tCentral\tKivell\tDesk\t5\t125.00\t625.00\n2017-07-04\tEast\tJones\tPen Set\t62\t4.99\t309.38\n2017-07-21\tCentral\tMorgan\tPen Set\t55\t12.49\t686.95\n2017-08-07\tCentral\tKivell\tPen Set\t42\t23.95\t1005.90\n2017-08-24\tWest\tSorvino\tDesk\t3\t275.00\t825.00\n2017-09-10\tCentral\tGill\tPencil\t7\t1.29\t9.03\n2017-09-27\tWest\tSorvino\tPen\t76\t1.99\t151.24\n2017-10-14\tWest\tThompson\tBinder\t57\t19.99\t1139.43\n2017-10-31\tCentral\tAndrews\tPencil\t14\t1.29\t18.06\n2017-11-17\tCentral\tJardine\tBinder\t11\t4.99\t54.89\n2017-12-04\tCentral\tJardine\tBinder\t94\t19.99\t1879.06\n2017-12-21\tCentral\tAndrews\tBinder\t28\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/load-png.tsv",
    "content": "x\ty\tR\tG\tB\tA\tattr\n0\t0\t0\t0\t0\t243\t16\n1\t0\t0\t0\t0\t255\t16\n2\t0\t0\t0\t0\t255\t16\n3\t0\t0\t0\t0\t255\t16\n4\t0\t0\t0\t0\t255\t16\n5\t0\t0\t0\t0\t255\t16\n6\t0\t0\t0\t0\t147\t16\n7\t0\t0\t0\t0\t0\t-1\n8\t0\t0\t0\t0\t0\t-1\n9\t0\t0\t0\t0\t0\t-1\n10\t0\t0\t0\t0\t0\t-1\n11\t0\t0\t0\t0\t0\t-1\n12\t0\t0\t0\t0\t0\t-1\n13\t0\t0\t0\t0\t0\t-1\n14\t0\t0\t0\t0\t0\t-1\n15\t0\t0\t0\t0\t0\t-1\n16\t0\t0\t0\t0\t0\t-1\n17\t0\t0\t0\t0\t0\t-1\n18\t0\t0\t0\t0\t0\t-1\n19\t0\t0\t0\t0\t29\t16\n20\t0\t0\t0\t0\t240\t16\n21\t0\t0\t0\t0\t255\t16\n22\t0\t0\t0\t0\t255\t16\n23\t0\t0\t0\t0\t255\t16\n24\t0\t0\t0\t0\t255\t16\n25\t0\t0\t0\t0\t255\t16\n26\t0\t0\t0\t0\t255\t16\n27\t0\t0\t0\t0\t237\t16\n28\t0\t0\t0\t0\t26\t16\n29\t0\t0\t0\t0\t220\t16\n30\t0\t0\t0\t0\t255\t16\n31\t0\t0\t0\t0\t255\t16\n32\t0\t0\t0\t0\t255\t16\n33\t0\t0\t0\t0\t255\t16\n34\t0\t0\t0\t0\t255\t16\n35\t0\t0\t0\t0\t255\t16\n36\t0\t0\t0\t0\t71\t16\n37\t0\t0\t0\t0\t0\t-1\n38\t0\t0\t0\t0\t0\t-1\n39\t0\t0\t0\t0\t0\t-1\n40\t0\t0\t0\t0\t40\t16\n41\t0\t0\t0\t0\t180\t16\n42\t0\t0\t0\t0\t255\t16\n43\t0\t0\t0\t0\t255\t16\n44\t0\t0\t0\t0\t255\t16\n45\t0\t0\t0\t0\t255\t16\n46\t0\t0\t0\t0\t255\t16\n47\t0\t0\t0\t0\t255\t16\n48\t0\t0\t0\t0\t255\t16\n49\t0\t0\t0\t0\t255\t16\n50\t0\t0\t0\t0\t255\t16\n51\t0\t0\t0\t0\t255\t16\n52\t0\t0\t0\t0\t255\t16\n53\t0\t0\t0\t0\t255\t16\n54\t0\t0\t0\t0\t255\t16\n55\t0\t0\t0\t0\t255\t16\n56\t0\t0\t0\t0\t255\t16\n57\t0\t0\t0\t0\t255\t16\n58\t0\t0\t0\t0\t98\t16\n59\t0\t0\t0\t0\t0\t-1\n60\t0\t0\t0\t0\t26\t16\n61\t0\t0\t0\t0\t255\t16\n62\t0\t0\t0\t0\t255\t16\n63\t0\t0\t0\t0\t255\t16\n64\t0\t0\t0\t0\t255\t16\n65\t0\t0\t0\t0\t255\t16\n66\t0\t0\t0\t0\t255\t16\n67\t0\t0\t0\t0\t255\t16\n68\t0\t0\t0\t0\t149\t16\n69\t0\t0\t0\t0\t0\t-1\n70\t0\t0\t0\t0\t16\t16\n71\t0\t0\t0\t0\t250\t16\n72\t0\t0\t0\t0\t255\t16\n73\t0\t0\t0\t0\t255\t16\n74\t0\t0\t0\t0\t255\t16\n75\t0\t0\t0\t0\t255\t16\n76\t0\t0\t0\t0\t255\t16\n77\t0\t0\t0\t0\t255\t16\n78\t0\t0\t0\t0\t255\t16\n79\t0\t0\t0\t0\t255\t16\n80\t0\t0\t0\t0\t255\t16\n81\t0\t0\t0\t0\t255\t16\n82\t0\t0\t0\t0\t255\t16\n83\t0\t0\t0\t0\t255\t16\n84\t0\t0\t0\t0\t255\t16\n85\t0\t0\t0\t0\t255\t16\n86\t0\t0\t0\t0\t255\t16\n87\t0\t0\t0\t0\t255\t16\n88\t0\t0\t0\t0\t255\t16\n89\t0\t0\t0\t0\t255\t16\n90\t0\t0\t0\t0\t244\t16\n91\t0\t0\t0\t0\t53\t16\n92\t0\t0\t0\t0\t0\t-1\n93\t0\t0\t0\t0\t0\t-1\n94\t0\t0\t0\t0\t0\t-1\n95\t0\t0\t0\t0\t0\t-1\n96\t0\t0\t0\t0\t0\t-1\n97\t0\t0\t0\t0\t0\t-1\n98\t0\t0\t0\t0\t0\t-1\n99\t0\t0\t0\t0\t0\t-1\n100\t0\t0\t0\t0\t157\t16\n101\t0\t0\t0\t0\t255\t16\n102\t0\t0\t0\t0\t255\t16\n103\t0\t0\t0\t0\t255\t16\n104\t0\t0\t0\t0\t255\t16\n105\t0\t0\t0\t0\t255\t16\n106\t0\t0\t0\t0\t255\t16\n107\t0\t0\t0\t0\t255\t16\n108\t0\t0\t0\t0\t197\t16\n109\t0\t0\t0\t0\t0\t-1\n110\t0\t0\t0\t0\t0\t-1\n111\t0\t0\t0\t0\t0\t-1\n112\t0\t0\t0\t0\t0\t-1\n113\t0\t0\t0\t0\t27\t16\n114\t0\t0\t0\t0\t254\t16\n115\t0\t0\t0\t0\t255\t16\n116\t0\t0\t0\t0\t255\t16\n117\t0\t0\t0\t0\t255\t16\n118\t0\t0\t0\t0\t255\t16\n119\t0\t0\t0\t0\t255\t16\n120\t0\t0\t0\t0\t255\t16\n121\t0\t0\t0\t0\t255\t16\n122\t0\t0\t0\t0\t255\t16\n123\t0\t0\t0\t0\t255\t16\n124\t0\t0\t0\t0\t255\t16\n125\t0\t0\t0\t0\t255\t16\n126\t0\t0\t0\t0\t255\t16\n127\t0\t0\t0\t0\t255\t16\n128\t0\t0\t0\t0\t255\t16\n129\t0\t0\t0\t0\t255\t16\n130\t0\t0\t0\t0\t255\t16\n131\t0\t0\t0\t0\t255\t16\n132\t0\t0\t0\t0\t255\t16\n133\t0\t0\t0\t0\t255\t16\n134\t0\t0\t0\t0\t39\t16\n135\t0\t0\t0\t0\t0\t-1\n136\t0\t0\t0\t0\t0\t-1\n137\t0\t0\t0\t0\t0\t-1\n138\t0\t0\t0\t0\t151\t16\n139\t0\t0\t0\t0\t255\t16\n140\t0\t0\t0\t0\t255\t16\n141\t0\t0\t0\t0\t255\t16\n142\t0\t0\t0\t0\t255\t16\n143\t0\t0\t0\t0\t255\t16\n144\t0\t0\t0\t0\t255\t16\n145\t0\t0\t0\t0\t255\t16\n146\t0\t0\t0\t0\t203\t16\n147\t0\t0\t0\t0\t0\t-1\n148\t0\t0\t0\t0\t0\t-1\n149\t0\t0\t0\t0\t0\t-1\n0\t1\t0\t0\t0\t216\t16\n1\t1\t0\t0\t0\t255\t16\n2\t1\t0\t0\t0\t255\t16\n3\t1\t0\t0\t0\t255\t16\n4\t1\t0\t0\t0\t255\t16\n5\t1\t0\t0\t0\t255\t16\n6\t1\t0\t0\t0\t179\t16\n7\t1\t0\t0\t0\t0\t-1\n8\t1\t0\t0\t0\t0\t-1\n9\t1\t0\t0\t0\t0\t-1\n10\t1\t0\t0\t0\t0\t-1\n11\t1\t0\t0\t0\t0\t-1\n12\t1\t0\t0\t0\t0\t-1\n13\t1\t0\t0\t0\t0\t-1\n14\t1\t0\t0\t0\t0\t-1\n15\t1\t0\t0\t0\t0\t-1\n16\t1\t0\t0\t0\t0\t-1\n17\t1\t0\t0\t0\t0\t-1\n18\t1\t0\t0\t0\t2\t16\n19\t1\t0\t0\t0\t190\t16\n20\t1\t0\t0\t0\t255\t16\n21\t1\t0\t0\t0\t255\t16\n22\t1\t0\t0\t0\t255\t16\n23\t1\t0\t0\t0\t255\t16\n24\t1\t0\t0\t0\t255\t16\n25\t1\t0\t0\t0\t255\t16\n26\t1\t0\t0\t0\t255\t16\n27\t1\t0\t0\t0\t80\t16\n28\t1\t0\t0\t0\t46\t16\n29\t1\t0\t0\t0\t255\t16\n30\t1\t0\t0\t0\t255\t16\n31\t1\t0\t0\t0\t255\t16\n32\t1\t0\t0\t0\t255\t16\n33\t1\t0\t0\t0\t255\t16\n34\t1\t0\t0\t0\t255\t16\n35\t1\t0\t0\t0\t242\t16\n36\t1\t0\t0\t0\t6\t16\n37\t1\t0\t0\t0\t0\t-1\n38\t1\t0\t0\t0\t0\t-1\n39\t1\t0\t0\t0\t86\t16\n40\t1\t0\t0\t0\t244\t16\n41\t1\t0\t0\t0\t255\t16\n42\t1\t0\t0\t0\t255\t16\n43\t1\t0\t0\t0\t255\t16\n44\t1\t0\t0\t0\t255\t16\n45\t1\t0\t0\t0\t255\t16\n46\t1\t0\t0\t0\t255\t16\n47\t1\t0\t0\t0\t255\t16\n48\t1\t0\t0\t0\t255\t16\n49\t1\t0\t0\t0\t255\t16\n50\t1\t0\t0\t0\t255\t16\n51\t1\t0\t0\t0\t255\t16\n52\t1\t0\t0\t0\t255\t16\n53\t1\t0\t0\t0\t255\t16\n54\t1\t0\t0\t0\t255\t16\n55\t1\t0\t0\t0\t255\t16\n56\t1\t0\t0\t0\t255\t16\n57\t1\t0\t0\t0\t254\t16\n58\t1\t0\t0\t0\t26\t16\n59\t1\t0\t0\t0\t0\t-1\n60\t1\t0\t0\t0\t93\t16\n61\t1\t0\t0\t0\t255\t16\n62\t1\t0\t0\t0\t255\t16\n63\t1\t0\t0\t0\t255\t16\n64\t1\t0\t0\t0\t255\t16\n65\t1\t0\t0\t0\t255\t16\n66\t1\t0\t0\t0\t255\t16\n67\t1\t0\t0\t0\t255\t16\n68\t1\t0\t0\t0\t78\t16\n69\t1\t0\t0\t0\t0\t-1\n70\t1\t0\t0\t0\t85\t16\n71\t1\t0\t0\t0\t255\t16\n72\t1\t0\t0\t0\t255\t16\n73\t1\t0\t0\t0\t255\t16\n74\t1\t0\t0\t0\t255\t16\n75\t1\t0\t0\t0\t255\t16\n76\t1\t0\t0\t0\t255\t16\n77\t1\t0\t0\t0\t255\t16\n78\t1\t0\t0\t0\t255\t16\n79\t1\t0\t0\t0\t255\t16\n80\t1\t0\t0\t0\t255\t16\n81\t1\t0\t0\t0\t255\t16\n82\t1\t0\t0\t0\t255\t16\n83\t1\t0\t0\t0\t255\t16\n84\t1\t0\t0\t0\t255\t16\n85\t1\t0\t0\t0\t255\t16\n86\t1\t0\t0\t0\t255\t16\n87\t1\t0\t0\t0\t255\t16\n88\t1\t0\t0\t0\t255\t16\n89\t1\t0\t0\t0\t255\t16\n90\t1\t0\t0\t0\t255\t16\n91\t1\t0\t0\t0\t211\t16\n92\t1\t0\t0\t0\t1\t16\n93\t1\t0\t0\t0\t0\t-1\n94\t1\t0\t0\t0\t0\t-1\n95\t1\t0\t0\t0\t0\t-1\n96\t1\t0\t0\t0\t0\t-1\n97\t1\t0\t0\t0\t0\t-1\n98\t1\t0\t0\t0\t0\t-1\n99\t1\t0\t0\t0\t82\t16\n100\t1\t0\t0\t0\t255\t16\n101\t1\t0\t0\t0\t255\t16\n102\t1\t0\t0\t0\t255\t16\n103\t1\t0\t0\t0\t255\t16\n104\t1\t0\t0\t0\t255\t16\n105\t1\t0\t0\t0\t255\t16\n106\t1\t0\t0\t0\t255\t16\n107\t1\t0\t0\t0\t255\t16\n108\t1\t0\t0\t0\t232\t16\n109\t1\t0\t0\t0\t0\t-1\n110\t1\t0\t0\t0\t0\t-1\n111\t1\t0\t0\t0\t0\t-1\n112\t1\t0\t0\t0\t0\t-1\n113\t1\t0\t0\t0\t101\t16\n114\t1\t0\t0\t0\t255\t16\n115\t1\t0\t0\t0\t255\t16\n116\t1\t0\t0\t0\t255\t16\n117\t1\t0\t0\t0\t255\t16\n118\t1\t0\t0\t0\t255\t16\n119\t1\t0\t0\t0\t255\t16\n120\t1\t0\t0\t0\t255\t16\n121\t1\t0\t0\t0\t255\t16\n122\t1\t0\t0\t0\t255\t16\n123\t1\t0\t0\t0\t255\t16\n124\t1\t0\t0\t0\t255\t16\n125\t1\t0\t0\t0\t255\t16\n126\t1\t0\t0\t0\t255\t16\n127\t1\t0\t0\t0\t255\t16\n128\t1\t0\t0\t0\t255\t16\n129\t1\t0\t0\t0\t255\t16\n130\t1\t0\t0\t0\t255\t16\n131\t1\t0\t0\t0\t255\t16\n132\t1\t0\t0\t0\t255\t16\n133\t1\t0\t0\t0\t215\t16\n134\t1\t0\t0\t0\t0\t-1\n135\t1\t0\t0\t0\t0\t-1\n136\t1\t0\t0\t0\t0\t-1\n137\t1\t0\t0\t0\t73\t16\n138\t1\t0\t0\t0\t255\t16\n139\t1\t0\t0\t0\t255\t16\n140\t1\t0\t0\t0\t255\t16\n141\t1\t0\t0\t0\t255\t16\n142\t1\t0\t0\t0\t255\t16\n143\t1\t0\t0\t0\t255\t16\n144\t1\t0\t0\t0\t255\t16\n145\t1\t0\t0\t0\t255\t16\n146\t1\t0\t0\t0\t238\t16\n147\t1\t0\t0\t0\t0\t-1\n148\t1\t0\t0\t0\t0\t-1\n149\t1\t0\t0\t0\t0\t-1\n0\t2\t0\t0\t0\t190\t16\n1\t2\t0\t0\t0\t255\t16\n2\t2\t0\t0\t0\t255\t16\n3\t2\t0\t0\t0\t255\t16\n4\t2\t0\t0\t0\t255\t16\n5\t2\t0\t0\t0\t255\t16\n6\t2\t0\t0\t0\t209\t16\n7\t2\t0\t0\t0\t0\t-1\n8\t2\t0\t0\t0\t0\t-1\n9\t2\t0\t0\t0\t0\t-1\n10\t2\t0\t0\t0\t0\t-1\n11\t2\t0\t0\t0\t0\t-1\n12\t2\t0\t0\t0\t0\t-1\n13\t2\t0\t0\t0\t0\t-1\n14\t2\t0\t0\t0\t0\t-1\n15\t2\t0\t0\t0\t0\t-1\n16\t2\t0\t0\t0\t0\t-1\n17\t2\t0\t0\t0\t0\t-1\n18\t2\t0\t0\t0\t109\t16\n19\t2\t0\t0\t0\t255\t16\n20\t2\t0\t0\t0\t255\t16\n21\t2\t0\t0\t0\t255\t16\n22\t2\t0\t0\t0\t255\t16\n23\t2\t0\t0\t0\t255\t16\n24\t2\t0\t0\t0\t255\t16\n25\t2\t0\t0\t0\t255\t16\n26\t2\t0\t0\t0\t165\t16\n27\t2\t0\t0\t0\t0\t-1\n28\t2\t0\t0\t0\t124\t16\n29\t2\t0\t0\t0\t255\t16\n30\t2\t0\t0\t0\t255\t16\n31\t2\t0\t0\t0\t255\t16\n32\t2\t0\t0\t0\t255\t16\n33\t2\t0\t0\t0\t255\t16\n34\t2\t0\t0\t0\t255\t16\n35\t2\t0\t0\t0\t175\t16\n36\t2\t0\t0\t0\t0\t-1\n37\t2\t0\t0\t0\t0\t-1\n38\t2\t0\t0\t0\t94\t16\n39\t2\t0\t0\t0\t254\t16\n40\t2\t0\t0\t0\t255\t16\n41\t2\t0\t0\t0\t255\t16\n42\t2\t0\t0\t0\t255\t16\n43\t2\t0\t0\t0\t255\t16\n44\t2\t0\t0\t0\t255\t16\n45\t2\t0\t0\t0\t255\t16\n46\t2\t0\t0\t0\t255\t16\n47\t2\t0\t0\t0\t255\t16\n48\t2\t0\t0\t0\t255\t16\n49\t2\t0\t0\t0\t255\t16\n50\t2\t0\t0\t0\t255\t16\n51\t2\t0\t0\t0\t255\t16\n52\t2\t0\t0\t0\t255\t16\n53\t2\t0\t0\t0\t255\t16\n54\t2\t0\t0\t0\t255\t16\n55\t2\t0\t0\t0\t255\t16\n56\t2\t0\t0\t0\t255\t16\n57\t2\t0\t0\t0\t207\t16\n58\t2\t0\t0\t0\t0\t-1\n59\t2\t0\t0\t0\t0\t-1\n60\t2\t0\t0\t0\t157\t16\n61\t2\t0\t0\t0\t255\t16\n62\t2\t0\t0\t0\t255\t16\n63\t2\t0\t0\t0\t255\t16\n64\t2\t0\t0\t0\t255\t16\n65\t2\t0\t0\t0\t255\t16\n66\t2\t0\t0\t0\t255\t16\n67\t2\t0\t0\t0\t251\t16\n68\t2\t0\t0\t0\t14\t16\n69\t2\t0\t0\t0\t0\t-1\n70\t2\t0\t0\t0\t159\t16\n71\t2\t0\t0\t0\t255\t16\n72\t2\t0\t0\t0\t255\t16\n73\t2\t0\t0\t0\t255\t16\n74\t2\t0\t0\t0\t255\t16\n75\t2\t0\t0\t0\t255\t16\n76\t2\t0\t0\t0\t255\t16\n77\t2\t0\t0\t0\t255\t16\n78\t2\t0\t0\t0\t255\t16\n79\t2\t0\t0\t0\t255\t16\n80\t2\t0\t0\t0\t255\t16\n81\t2\t0\t0\t0\t255\t16\n82\t2\t0\t0\t0\t255\t16\n83\t2\t0\t0\t0\t255\t16\n84\t2\t0\t0\t0\t255\t16\n85\t2\t0\t0\t0\t255\t16\n86\t2\t0\t0\t0\t255\t16\n87\t2\t0\t0\t0\t255\t16\n88\t2\t0\t0\t0\t255\t16\n89\t2\t0\t0\t0\t255\t16\n90\t2\t0\t0\t0\t255\t16\n91\t2\t0\t0\t0\t255\t16\n92\t2\t0\t0\t0\t54\t16\n93\t2\t0\t0\t0\t0\t-1\n94\t2\t0\t0\t0\t0\t-1\n95\t2\t0\t0\t0\t0\t-1\n96\t2\t0\t0\t0\t0\t-1\n97\t2\t0\t0\t0\t0\t-1\n98\t2\t0\t0\t0\t18\t16\n99\t2\t0\t0\t0\t231\t16\n100\t2\t0\t0\t0\t255\t16\n101\t2\t0\t0\t0\t255\t16\n102\t2\t0\t0\t0\t255\t16\n103\t2\t0\t0\t0\t255\t16\n104\t2\t0\t0\t0\t255\t16\n105\t2\t0\t0\t0\t255\t16\n106\t2\t0\t0\t0\t255\t16\n107\t2\t0\t0\t0\t255\t16\n108\t2\t0\t0\t0\t254\t16\n109\t2\t0\t0\t0\t10\t16\n110\t2\t0\t0\t0\t0\t-1\n111\t2\t0\t0\t0\t0\t-1\n112\t2\t0\t0\t0\t0\t-1\n113\t2\t0\t0\t0\t172\t16\n114\t2\t0\t0\t0\t255\t16\n115\t2\t0\t0\t0\t255\t16\n116\t2\t0\t0\t0\t255\t16\n117\t2\t0\t0\t0\t255\t16\n118\t2\t0\t0\t0\t255\t16\n119\t2\t0\t0\t0\t255\t16\n120\t2\t0\t0\t0\t255\t16\n121\t2\t0\t0\t0\t255\t16\n122\t2\t0\t0\t0\t255\t16\n123\t2\t0\t0\t0\t255\t16\n124\t2\t0\t0\t0\t255\t16\n125\t2\t0\t0\t0\t255\t16\n126\t2\t0\t0\t0\t255\t16\n127\t2\t0\t0\t0\t255\t16\n128\t2\t0\t0\t0\t255\t16\n129\t2\t0\t0\t0\t255\t16\n130\t2\t0\t0\t0\t255\t16\n131\t2\t0\t0\t0\t255\t16\n132\t2\t0\t0\t0\t255\t16\n133\t2\t0\t0\t0\t139\t16\n134\t2\t0\t0\t0\t0\t-1\n135\t2\t0\t0\t0\t0\t-1\n136\t2\t0\t0\t0\t17\t16\n137\t2\t0\t0\t0\t229\t16\n138\t2\t0\t0\t0\t255\t16\n139\t2\t0\t0\t0\t255\t16\n140\t2\t0\t0\t0\t255\t16\n141\t2\t0\t0\t0\t255\t16\n142\t2\t0\t0\t0\t255\t16\n143\t2\t0\t0\t0\t255\t16\n144\t2\t0\t0\t0\t255\t16\n145\t2\t0\t0\t0\t255\t16\n146\t2\t0\t0\t0\t255\t16\n147\t2\t0\t0\t0\t16\t16\n148\t2\t0\t0\t0\t0\t-1\n149\t2\t0\t0\t0\t0\t-1\n0\t3\t0\t0\t0\t163\t16\n1\t3\t0\t0\t0\t255\t16\n2\t3\t0\t0\t0\t255\t16\n3\t3\t0\t0\t0\t255\t16\n4\t3\t0\t0\t0\t255\t16\n5\t3\t0\t0\t0\t255\t16\n6\t3\t0\t0\t0\t240\t16\n7\t3\t0\t0\t0\t0\t-1\n8\t3\t0\t0\t0\t0\t-1\n9\t3\t0\t0\t0\t0\t-1\n10\t3\t0\t0\t0\t0\t-1\n11\t3\t0\t0\t0\t0\t-1\n12\t3\t0\t0\t0\t0\t-1\n13\t3\t0\t0\t0\t0\t-1\n14\t3\t0\t0\t0\t0\t-1\n15\t3\t0\t0\t0\t0\t-1\n16\t3\t0\t0\t0\t0\t-1\n17\t3\t0\t0\t0\t38\t16\n18\t3\t0\t0\t0\t245\t16\n19\t3\t0\t0\t0\t255\t16\n20\t3\t0\t0\t0\t255\t16\n21\t3\t0\t0\t0\t255\t16\n22\t3\t0\t0\t0\t255\t16\n23\t3\t0\t0\t0\t255\t16\n24\t3\t0\t0\t0\t255\t16\n25\t3\t0\t0\t0\t226\t16\n26\t3\t0\t0\t0\t16\t16\n27\t3\t0\t0\t0\t0\t-1\n28\t3\t0\t0\t0\t201\t16\n29\t3\t0\t0\t0\t255\t16\n30\t3\t0\t0\t0\t255\t16\n31\t3\t0\t0\t0\t255\t16\n32\t3\t0\t0\t0\t255\t16\n33\t3\t0\t0\t0\t255\t16\n34\t3\t0\t0\t0\t255\t16\n35\t3\t0\t0\t0\t101\t16\n36\t3\t0\t0\t0\t0\t-1\n37\t3\t0\t0\t0\t35\t16\n38\t3\t0\t0\t0\t245\t16\n39\t3\t0\t0\t0\t255\t16\n40\t3\t0\t0\t0\t255\t16\n41\t3\t0\t0\t0\t255\t16\n42\t3\t0\t0\t0\t255\t16\n43\t3\t0\t0\t0\t255\t16\n44\t3\t0\t0\t0\t255\t16\n45\t3\t0\t0\t0\t255\t16\n46\t3\t0\t0\t0\t255\t16\n47\t3\t0\t0\t0\t255\t16\n48\t3\t0\t0\t0\t255\t16\n49\t3\t0\t0\t0\t255\t16\n50\t3\t0\t0\t0\t255\t16\n51\t3\t0\t0\t0\t255\t16\n52\t3\t0\t0\t0\t255\t16\n53\t3\t0\t0\t0\t255\t16\n54\t3\t0\t0\t0\t255\t16\n55\t3\t0\t0\t0\t255\t16\n56\t3\t0\t0\t0\t255\t16\n57\t3\t0\t0\t0\t138\t16\n58\t3\t0\t0\t0\t0\t-1\n59\t3\t0\t0\t0\t0\t-1\n60\t3\t0\t0\t0\t225\t16\n61\t3\t0\t0\t0\t255\t16\n62\t3\t0\t0\t0\t255\t16\n63\t3\t0\t0\t0\t255\t16\n64\t3\t0\t0\t0\t255\t16\n65\t3\t0\t0\t0\t255\t16\n66\t3\t0\t0\t0\t255\t16\n67\t3\t0\t0\t0\t193\t16\n68\t3\t0\t0\t0\t0\t-1\n69\t3\t0\t0\t0\t2\t16\n70\t3\t0\t0\t0\t234\t16\n71\t3\t0\t0\t0\t255\t16\n72\t3\t0\t0\t0\t255\t16\n73\t3\t0\t0\t0\t255\t16\n74\t3\t0\t0\t0\t255\t16\n75\t3\t0\t0\t0\t255\t16\n76\t3\t0\t0\t0\t255\t16\n77\t3\t0\t0\t0\t255\t16\n78\t3\t0\t0\t0\t255\t16\n79\t3\t0\t0\t0\t255\t16\n80\t3\t0\t0\t0\t255\t16\n81\t3\t0\t0\t0\t255\t16\n82\t3\t0\t0\t0\t255\t16\n83\t3\t0\t0\t0\t255\t16\n84\t3\t0\t0\t0\t255\t16\n85\t3\t0\t0\t0\t255\t16\n86\t3\t0\t0\t0\t255\t16\n87\t3\t0\t0\t0\t255\t16\n88\t3\t0\t0\t0\t255\t16\n89\t3\t0\t0\t0\t255\t16\n90\t3\t0\t0\t0\t255\t16\n91\t3\t0\t0\t0\t255\t16\n92\t3\t0\t0\t0\t100\t16\n93\t3\t0\t0\t0\t0\t-1\n94\t3\t0\t0\t0\t0\t-1\n95\t3\t0\t0\t0\t0\t-1\n96\t3\t0\t0\t0\t0\t-1\n97\t3\t0\t0\t0\t0\t-1\n98\t3\t0\t0\t0\t164\t16\n99\t3\t0\t0\t0\t255\t16\n100\t3\t0\t0\t0\t255\t16\n101\t3\t0\t0\t0\t255\t16\n102\t3\t0\t0\t0\t255\t16\n103\t3\t0\t0\t0\t255\t16\n104\t3\t0\t0\t0\t255\t16\n105\t3\t0\t0\t0\t255\t16\n106\t3\t0\t0\t0\t255\t16\n107\t3\t0\t0\t0\t255\t16\n108\t3\t0\t0\t0\t255\t16\n109\t3\t0\t0\t0\t42\t16\n110\t3\t0\t0\t0\t0\t-1\n111\t3\t0\t0\t0\t0\t-1\n112\t3\t0\t0\t0\t5\t16\n113\t3\t0\t0\t0\t241\t16\n114\t3\t0\t0\t0\t255\t16\n115\t3\t0\t0\t0\t255\t16\n116\t3\t0\t0\t0\t255\t16\n117\t3\t0\t0\t0\t255\t16\n118\t3\t0\t0\t0\t255\t16\n119\t3\t0\t0\t0\t255\t16\n120\t3\t0\t0\t0\t255\t16\n121\t3\t0\t0\t0\t255\t16\n122\t3\t0\t0\t0\t255\t16\n123\t3\t0\t0\t0\t255\t16\n124\t3\t0\t0\t0\t255\t16\n125\t3\t0\t0\t0\t255\t16\n126\t3\t0\t0\t0\t255\t16\n127\t3\t0\t0\t0\t255\t16\n128\t3\t0\t0\t0\t255\t16\n129\t3\t0\t0\t0\t255\t16\n130\t3\t0\t0\t0\t255\t16\n131\t3\t0\t0\t0\t255\t16\n132\t3\t0\t0\t0\t255\t16\n133\t3\t0\t0\t0\t63\t16\n134\t3\t0\t0\t0\t0\t-1\n135\t3\t0\t0\t0\t0\t-1\n136\t3\t0\t0\t0\t158\t16\n137\t3\t0\t0\t0\t255\t16\n138\t3\t0\t0\t0\t255\t16\n139\t3\t0\t0\t0\t255\t16\n140\t3\t0\t0\t0\t255\t16\n141\t3\t0\t0\t0\t255\t16\n142\t3\t0\t0\t0\t255\t16\n143\t3\t0\t0\t0\t255\t16\n144\t3\t0\t0\t0\t255\t16\n145\t3\t0\t0\t0\t255\t16\n146\t3\t0\t0\t0\t255\t16\n147\t3\t0\t0\t0\t48\t16\n148\t3\t0\t0\t0\t0\t-1\n149\t3\t0\t0\t0\t0\t-1\n0\t4\t0\t0\t0\t137\t16\n1\t4\t0\t0\t0\t255\t16\n2\t4\t0\t0\t0\t255\t16\n3\t4\t0\t0\t0\t255\t16\n4\t4\t0\t0\t0\t255\t16\n5\t4\t0\t0\t0\t255\t16\n6\t4\t0\t0\t0\t255\t16\n7\t4\t0\t0\t0\t15\t16\n8\t4\t0\t0\t0\t0\t-1\n9\t4\t0\t0\t0\t0\t-1\n10\t4\t0\t0\t0\t0\t-1\n11\t4\t0\t0\t0\t0\t-1\n12\t4\t0\t0\t0\t0\t-1\n13\t4\t0\t0\t0\t0\t-1\n14\t4\t0\t0\t0\t0\t-1\n15\t4\t0\t0\t0\t0\t-1\n16\t4\t0\t0\t0\t3\t16\n17\t4\t0\t0\t0\t198\t16\n18\t4\t0\t0\t0\t255\t16\n19\t4\t0\t0\t0\t255\t16\n20\t4\t0\t0\t0\t255\t16\n21\t4\t0\t0\t0\t255\t16\n22\t4\t0\t0\t0\t255\t16\n23\t4\t0\t0\t0\t255\t16\n24\t4\t0\t0\t0\t254\t16\n25\t4\t0\t0\t0\t69\t16\n26\t4\t0\t0\t0\t0\t-1\n27\t4\t0\t0\t0\t27\t16\n28\t4\t0\t0\t0\t254\t16\n29\t4\t0\t0\t0\t255\t16\n30\t4\t0\t0\t0\t255\t16\n31\t4\t0\t0\t0\t255\t16\n32\t4\t0\t0\t0\t255\t16\n33\t4\t0\t0\t0\t255\t16\n34\t4\t0\t0\t0\t254\t16\n35\t4\t0\t0\t0\t26\t16\n36\t4\t0\t0\t0\t0\t-1\n37\t4\t0\t0\t0\t183\t16\n38\t4\t0\t0\t0\t255\t16\n39\t4\t0\t0\t0\t255\t16\n40\t4\t0\t0\t0\t255\t16\n41\t4\t0\t0\t0\t255\t16\n42\t4\t0\t0\t0\t255\t16\n43\t4\t0\t0\t0\t255\t16\n44\t4\t0\t0\t0\t255\t16\n45\t4\t0\t0\t0\t255\t16\n46\t4\t0\t0\t0\t255\t16\n47\t4\t0\t0\t0\t255\t16\n48\t4\t0\t0\t0\t255\t16\n49\t4\t0\t0\t0\t255\t16\n50\t4\t0\t0\t0\t255\t16\n51\t4\t0\t0\t0\t255\t16\n52\t4\t0\t0\t0\t255\t16\n53\t4\t0\t0\t0\t255\t16\n54\t4\t0\t0\t0\t255\t16\n55\t4\t0\t0\t0\t255\t16\n56\t4\t0\t0\t0\t255\t16\n57\t4\t0\t0\t0\t67\t16\n58\t4\t0\t0\t0\t0\t-1\n59\t4\t0\t0\t0\t35\t16\n60\t4\t0\t0\t0\t255\t16\n61\t4\t0\t0\t0\t255\t16\n62\t4\t0\t0\t0\t255\t16\n63\t4\t0\t0\t0\t255\t16\n64\t4\t0\t0\t0\t255\t16\n65\t4\t0\t0\t0\t255\t16\n66\t4\t0\t0\t0\t255\t16\n67\t4\t0\t0\t0\t124\t16\n68\t4\t0\t0\t0\t0\t-1\n69\t4\t0\t0\t0\t52\t16\n70\t4\t0\t0\t0\t255\t16\n71\t4\t0\t0\t0\t255\t16\n72\t4\t0\t0\t0\t255\t16\n73\t4\t0\t0\t0\t255\t16\n74\t4\t0\t0\t0\t255\t16\n75\t4\t0\t0\t0\t255\t16\n76\t4\t0\t0\t0\t255\t16\n77\t4\t0\t0\t0\t255\t16\n78\t4\t0\t0\t0\t255\t16\n79\t4\t0\t0\t0\t255\t16\n80\t4\t0\t0\t0\t255\t16\n81\t4\t0\t0\t0\t255\t16\n82\t4\t0\t0\t0\t255\t16\n83\t4\t0\t0\t0\t255\t16\n84\t4\t0\t0\t0\t255\t16\n85\t4\t0\t0\t0\t255\t16\n86\t4\t0\t0\t0\t255\t16\n87\t4\t0\t0\t0\t255\t16\n88\t4\t0\t0\t0\t255\t16\n89\t4\t0\t0\t0\t255\t16\n90\t4\t0\t0\t0\t255\t16\n91\t4\t0\t0\t0\t255\t16\n92\t4\t0\t0\t0\t133\t16\n93\t4\t0\t0\t0\t0\t-1\n94\t4\t0\t0\t0\t0\t-1\n95\t4\t0\t0\t0\t0\t-1\n96\t4\t0\t0\t0\t0\t-1\n97\t4\t0\t0\t0\t82\t16\n98\t4\t0\t0\t0\t255\t16\n99\t4\t0\t0\t0\t255\t16\n100\t4\t0\t0\t0\t255\t16\n101\t4\t0\t0\t0\t255\t16\n102\t4\t0\t0\t0\t255\t16\n103\t4\t0\t0\t0\t255\t16\n104\t4\t0\t0\t0\t255\t16\n105\t4\t0\t0\t0\t255\t16\n106\t4\t0\t0\t0\t255\t16\n107\t4\t0\t0\t0\t255\t16\n108\t4\t0\t0\t0\t255\t16\n109\t4\t0\t0\t0\t75\t16\n110\t4\t0\t0\t0\t0\t-1\n111\t4\t0\t0\t0\t0\t-1\n112\t4\t0\t0\t0\t61\t16\n113\t4\t0\t0\t0\t255\t16\n114\t4\t0\t0\t0\t255\t16\n115\t4\t0\t0\t0\t255\t16\n116\t4\t0\t0\t0\t255\t16\n117\t4\t0\t0\t0\t255\t16\n118\t4\t0\t0\t0\t255\t16\n119\t4\t0\t0\t0\t255\t16\n120\t4\t0\t0\t0\t255\t16\n121\t4\t0\t0\t0\t255\t16\n122\t4\t0\t0\t0\t255\t16\n123\t4\t0\t0\t0\t255\t16\n124\t4\t0\t0\t0\t255\t16\n125\t4\t0\t0\t0\t255\t16\n126\t4\t0\t0\t0\t255\t16\n127\t4\t0\t0\t0\t255\t16\n128\t4\t0\t0\t0\t255\t16\n129\t4\t0\t0\t0\t255\t16\n130\t4\t0\t0\t0\t255\t16\n131\t4\t0\t0\t0\t255\t16\n132\t4\t0\t0\t0\t236\t16\n133\t4\t0\t0\t0\t3\t16\n134\t4\t0\t0\t0\t0\t-1\n135\t4\t0\t0\t0\t74\t16\n136\t4\t0\t0\t0\t255\t16\n137\t4\t0\t0\t0\t255\t16\n138\t4\t0\t0\t0\t255\t16\n139\t4\t0\t0\t0\t255\t16\n140\t4\t0\t0\t0\t255\t16\n141\t4\t0\t0\t0\t255\t16\n142\t4\t0\t0\t0\t255\t16\n143\t4\t0\t0\t0\t255\t16\n144\t4\t0\t0\t0\t255\t16\n145\t4\t0\t0\t0\t255\t16\n146\t4\t0\t0\t0\t255\t16\n147\t4\t0\t0\t0\t81\t16\n148\t4\t0\t0\t0\t0\t-1\n149\t4\t0\t0\t0\t0\t-1\n0\t5\t0\t0\t0\t111\t16\n1\t5\t0\t0\t0\t255\t16\n2\t5\t0\t0\t0\t255\t16\n3\t5\t0\t0\t0\t255\t16\n4\t5\t0\t0\t0\t255\t16\n5\t5\t0\t0\t0\t255\t16\n6\t5\t0\t0\t0\t255\t16\n7\t5\t0\t0\t0\t43\t16\n8\t5\t0\t0\t0\t0\t-1\n9\t5\t0\t0\t0\t0\t-1\n10\t5\t0\t0\t0\t0\t-1\n11\t5\t0\t0\t0\t0\t-1\n12\t5\t0\t0\t0\t0\t-1\n13\t5\t0\t0\t0\t0\t-1\n14\t5\t0\t0\t0\t0\t-1\n15\t5\t0\t0\t0\t0\t-1\n16\t5\t0\t0\t0\t110\t16\n17\t5\t0\t0\t0\t255\t16\n18\t5\t0\t0\t0\t255\t16\n19\t5\t0\t0\t0\t255\t16\n20\t5\t0\t0\t0\t255\t16\n21\t5\t0\t0\t0\t255\t16\n22\t5\t0\t0\t0\t255\t16\n23\t5\t0\t0\t0\t255\t16\n24\t5\t0\t0\t0\t159\t16\n25\t5\t0\t0\t0\t0\t-1\n26\t5\t0\t0\t0\t0\t-1\n27\t5\t0\t0\t0\t0\t-1\n28\t5\t0\t0\t0\t0\t-1\n29\t5\t0\t0\t0\t0\t-1\n30\t5\t0\t0\t0\t0\t-1\n31\t5\t0\t0\t0\t0\t-1\n32\t5\t0\t0\t0\t0\t-1\n33\t5\t0\t0\t0\t0\t-1\n34\t5\t0\t0\t0\t0\t-1\n35\t5\t0\t0\t0\t0\t-1\n36\t5\t0\t0\t0\t0\t-1\n37\t5\t0\t0\t0\t0\t-1\n38\t5\t0\t0\t0\t0\t-1\n39\t5\t0\t0\t0\t0\t-1\n40\t5\t0\t0\t0\t0\t-1\n41\t5\t0\t0\t0\t0\t-1\n42\t5\t0\t0\t0\t0\t-1\n43\t5\t0\t0\t0\t0\t-1\n44\t5\t0\t0\t0\t0\t-1\n45\t5\t0\t0\t0\t0\t-1\n46\t5\t0\t0\t0\t0\t-1\n47\t5\t0\t0\t0\t0\t-1\n48\t5\t0\t0\t0\t0\t-1\n49\t5\t0\t0\t0\t0\t-1\n50\t5\t0\t0\t0\t0\t-1\n51\t5\t0\t0\t0\t0\t-1\n52\t5\t0\t0\t0\t0\t-1\n53\t5\t0\t0\t0\t0\t-1\n54\t5\t0\t0\t0\t0\t-1\n55\t5\t0\t0\t0\t0\t-1\n56\t5\t0\t0\t0\t0\t-1\n57\t5\t0\t0\t0\t0\t-1\n58\t5\t0\t0\t0\t0\t-1\n59\t5\t0\t0\t0\t0\t-1\n60\t5\t0\t0\t0\t0\t-1\n61\t5\t0\t0\t0\t0\t-1\n62\t5\t0\t0\t0\t0\t-1\n63\t5\t0\t0\t0\t0\t-1\n64\t5\t0\t0\t0\t0\t-1\n65\t5\t0\t0\t0\t0\t-1\n66\t5\t0\t0\t0\t0\t-1\n67\t5\t0\t0\t0\t0\t-1\n68\t5\t0\t0\t0\t0\t-1\n69\t5\t0\t0\t0\t126\t16\n70\t5\t0\t0\t0\t255\t16\n71\t5\t0\t0\t0\t255\t16\n72\t5\t0\t0\t0\t255\t16\n73\t5\t0\t0\t0\t255\t16\n74\t5\t0\t0\t0\t255\t16\n75\t5\t0\t0\t0\t255\t16\n76\t5\t0\t0\t0\t242\t16\n77\t5\t0\t0\t0\t21\t16\n78\t5\t0\t0\t0\t17\t16\n79\t5\t0\t0\t0\t17\t16\n80\t5\t0\t0\t0\t17\t16\n81\t5\t0\t0\t0\t17\t16\n82\t5\t0\t0\t0\t17\t16\n83\t5\t0\t0\t0\t19\t16\n84\t5\t0\t0\t0\t188\t16\n85\t5\t0\t0\t0\t255\t16\n86\t5\t0\t0\t0\t255\t16\n87\t5\t0\t0\t0\t255\t16\n88\t5\t0\t0\t0\t255\t16\n89\t5\t0\t0\t0\t255\t16\n90\t5\t0\t0\t0\t255\t16\n91\t5\t0\t0\t0\t255\t16\n92\t5\t0\t0\t0\t137\t16\n93\t5\t0\t0\t0\t0\t-1\n94\t5\t0\t0\t0\t0\t-1\n95\t5\t0\t0\t0\t0\t-1\n96\t5\t0\t0\t0\t0\t-1\n97\t5\t0\t0\t0\t0\t-1\n98\t5\t0\t0\t0\t0\t-1\n99\t5\t0\t0\t0\t0\t-1\n100\t5\t0\t0\t0\t0\t-1\n101\t5\t0\t0\t0\t0\t-1\n102\t5\t0\t0\t0\t0\t-1\n103\t5\t0\t0\t0\t0\t-1\n104\t5\t0\t0\t0\t0\t-1\n105\t5\t0\t0\t0\t0\t-1\n106\t5\t0\t0\t0\t0\t-1\n107\t5\t0\t0\t0\t0\t-1\n108\t5\t0\t0\t0\t0\t-1\n109\t5\t0\t0\t0\t0\t-1\n110\t5\t0\t0\t0\t0\t-1\n111\t5\t0\t0\t0\t0\t-1\n112\t5\t0\t0\t0\t0\t-1\n113\t5\t0\t0\t0\t0\t-1\n114\t5\t0\t0\t0\t0\t-1\n115\t5\t0\t0\t0\t0\t-1\n116\t5\t0\t0\t0\t0\t-1\n117\t5\t0\t0\t0\t0\t-1\n118\t5\t0\t0\t0\t0\t-1\n119\t5\t0\t0\t0\t0\t-1\n120\t5\t0\t0\t0\t0\t-1\n121\t5\t0\t0\t0\t0\t-1\n122\t5\t0\t0\t0\t0\t-1\n123\t5\t0\t0\t0\t0\t-1\n124\t5\t0\t0\t0\t0\t-1\n125\t5\t0\t0\t0\t0\t-1\n126\t5\t0\t0\t0\t0\t-1\n127\t5\t0\t0\t0\t0\t-1\n128\t5\t0\t0\t0\t0\t-1\n129\t5\t0\t0\t0\t0\t-1\n130\t5\t0\t0\t0\t0\t-1\n131\t5\t0\t0\t0\t0\t-1\n132\t5\t0\t0\t0\t0\t-1\n133\t5\t0\t0\t0\t0\t-1\n134\t5\t0\t0\t0\t0\t-1\n135\t5\t0\t0\t0\t0\t-1\n136\t5\t0\t0\t0\t0\t-1\n137\t5\t0\t0\t0\t0\t-1\n138\t5\t0\t0\t0\t0\t-1\n139\t5\t0\t0\t0\t0\t-1\n140\t5\t0\t0\t0\t0\t-1\n141\t5\t0\t0\t0\t0\t-1\n142\t5\t0\t0\t0\t0\t-1\n143\t5\t0\t0\t0\t0\t-1\n144\t5\t0\t0\t0\t0\t-1\n145\t5\t0\t0\t0\t0\t-1\n146\t5\t0\t0\t0\t0\t-1\n147\t5\t0\t0\t0\t0\t-1\n148\t5\t0\t0\t0\t0\t-1\n149\t5\t0\t0\t0\t0\t-1\n0\t6\t0\t0\t0\t84\t16\n1\t6\t0\t0\t0\t255\t16\n2\t6\t0\t0\t0\t255\t16\n3\t6\t0\t0\t0\t255\t16\n4\t6\t0\t0\t0\t255\t16\n5\t6\t0\t0\t0\t255\t16\n6\t6\t0\t0\t0\t255\t16\n7\t6\t0\t0\t0\t71\t16\n8\t6\t0\t0\t0\t0\t-1\n9\t6\t0\t0\t0\t0\t-1\n10\t6\t0\t0\t0\t0\t-1\n11\t6\t0\t0\t0\t0\t-1\n12\t6\t0\t0\t0\t0\t-1\n13\t6\t0\t0\t0\t0\t-1\n14\t6\t0\t0\t0\t0\t-1\n15\t6\t0\t0\t0\t37\t16\n16\t6\t0\t0\t0\t245\t16\n17\t6\t0\t0\t0\t255\t16\n18\t6\t0\t0\t0\t255\t16\n19\t6\t0\t0\t0\t255\t16\n20\t6\t0\t0\t0\t255\t16\n21\t6\t0\t0\t0\t255\t16\n22\t6\t0\t0\t0\t255\t16\n23\t6\t0\t0\t0\t226\t16\n24\t6\t0\t0\t0\t16\t16\n25\t6\t0\t0\t0\t0\t-1\n26\t6\t0\t0\t0\t0\t-1\n27\t6\t0\t0\t0\t99\t16\n28\t6\t0\t0\t0\t170\t16\n29\t6\t0\t0\t0\t170\t16\n30\t6\t0\t0\t0\t170\t16\n31\t6\t0\t0\t0\t170\t16\n32\t6\t0\t0\t0\t170\t16\n33\t6\t0\t0\t0\t170\t16\n34\t6\t0\t0\t0\t108\t16\n35\t6\t0\t0\t0\t0\t-1\n36\t6\t0\t0\t0\t102\t16\n37\t6\t0\t0\t0\t170\t16\n38\t6\t0\t0\t0\t170\t16\n39\t6\t0\t0\t0\t170\t16\n40\t6\t0\t0\t0\t170\t16\n41\t6\t0\t0\t0\t170\t16\n42\t6\t0\t0\t0\t170\t16\n43\t6\t0\t0\t0\t53\t16\n44\t6\t0\t0\t0\t0\t-1\n45\t6\t0\t0\t0\t0\t-1\n46\t6\t0\t0\t0\t0\t-1\n47\t6\t0\t0\t0\t0\t-1\n48\t6\t0\t0\t0\t0\t-1\n49\t6\t0\t0\t0\t0\t-1\n50\t6\t0\t0\t0\t0\t-1\n51\t6\t0\t0\t0\t0\t-1\n52\t6\t0\t0\t0\t0\t-1\n53\t6\t0\t0\t0\t0\t-1\n54\t6\t0\t0\t0\t0\t-1\n55\t6\t0\t0\t0\t0\t-1\n56\t6\t0\t0\t0\t0\t-1\n57\t6\t0\t0\t0\t0\t-1\n58\t6\t0\t0\t0\t0\t-1\n59\t6\t0\t0\t0\t114\t16\n60\t6\t0\t0\t0\t170\t16\n61\t6\t0\t0\t0\t170\t16\n62\t6\t0\t0\t0\t170\t16\n63\t6\t0\t0\t0\t170\t16\n64\t6\t0\t0\t0\t170\t16\n65\t6\t0\t0\t0\t170\t16\n66\t6\t0\t0\t0\t159\t16\n67\t6\t0\t0\t0\t0\t-1\n68\t6\t0\t0\t0\t0\t-1\n69\t6\t0\t0\t0\t203\t16\n70\t6\t0\t0\t0\t255\t16\n71\t6\t0\t0\t0\t255\t16\n72\t6\t0\t0\t0\t255\t16\n73\t6\t0\t0\t0\t255\t16\n74\t6\t0\t0\t0\t255\t16\n75\t6\t0\t0\t0\t255\t16\n76\t6\t0\t0\t0\t176\t16\n77\t6\t0\t0\t0\t0\t-1\n78\t6\t0\t0\t0\t0\t-1\n79\t6\t0\t0\t0\t0\t-1\n80\t6\t0\t0\t0\t0\t-1\n81\t6\t0\t0\t0\t0\t-1\n82\t6\t0\t0\t0\t0\t-1\n83\t6\t0\t0\t0\t0\t-1\n84\t6\t0\t0\t0\t66\t16\n85\t6\t0\t0\t0\t255\t16\n86\t6\t0\t0\t0\t255\t16\n87\t6\t0\t0\t0\t255\t16\n88\t6\t0\t0\t0\t255\t16\n89\t6\t0\t0\t0\t255\t16\n90\t6\t0\t0\t0\t255\t16\n91\t6\t0\t0\t0\t255\t16\n92\t6\t0\t0\t0\t113\t16\n93\t6\t0\t0\t0\t0\t-1\n94\t6\t0\t0\t0\t0\t-1\n95\t6\t0\t0\t0\t0\t-1\n96\t6\t0\t0\t0\t118\t16\n97\t6\t0\t0\t0\t170\t16\n98\t6\t0\t0\t0\t170\t16\n99\t6\t0\t0\t0\t170\t16\n100\t6\t0\t0\t0\t170\t16\n101\t6\t0\t0\t0\t170\t16\n102\t6\t0\t0\t0\t170\t16\n103\t6\t0\t0\t0\t170\t16\n104\t6\t0\t0\t0\t170\t16\n105\t6\t0\t0\t0\t170\t16\n106\t6\t0\t0\t0\t170\t16\n107\t6\t0\t0\t0\t170\t16\n108\t6\t0\t0\t0\t170\t16\n109\t6\t0\t0\t0\t109\t16\n110\t6\t0\t0\t0\t0\t-1\n111\t6\t0\t0\t0\t0\t-1\n112\t6\t0\t0\t0\t0\t-1\n113\t6\t0\t0\t0\t0\t-1\n114\t6\t0\t0\t0\t0\t-1\n115\t6\t0\t0\t0\t0\t-1\n116\t6\t0\t0\t0\t0\t-1\n117\t6\t0\t0\t0\t0\t-1\n118\t6\t0\t0\t0\t5\t16\n119\t6\t0\t0\t0\t167\t16\n120\t6\t0\t0\t0\t170\t16\n121\t6\t0\t0\t0\t170\t16\n122\t6\t0\t0\t0\t170\t16\n123\t6\t0\t0\t0\t170\t16\n124\t6\t0\t0\t0\t170\t16\n125\t6\t0\t0\t0\t170\t16\n126\t6\t0\t0\t0\t94\t16\n127\t6\t0\t0\t0\t0\t-1\n128\t6\t0\t0\t0\t0\t-1\n129\t6\t0\t0\t0\t0\t-1\n130\t6\t0\t0\t0\t0\t-1\n131\t6\t0\t0\t0\t0\t-1\n132\t6\t0\t0\t0\t0\t-1\n133\t6\t0\t0\t0\t0\t-1\n134\t6\t0\t0\t0\t127\t16\n135\t6\t0\t0\t0\t170\t16\n136\t6\t0\t0\t0\t170\t16\n137\t6\t0\t0\t0\t170\t16\n138\t6\t0\t0\t0\t170\t16\n139\t6\t0\t0\t0\t170\t16\n140\t6\t0\t0\t0\t170\t16\n141\t6\t0\t0\t0\t170\t16\n142\t6\t0\t0\t0\t170\t16\n143\t6\t0\t0\t0\t170\t16\n144\t6\t0\t0\t0\t170\t16\n145\t6\t0\t0\t0\t170\t16\n146\t6\t0\t0\t0\t170\t16\n147\t6\t0\t0\t0\t106\t16\n148\t6\t0\t0\t0\t0\t-1\n149\t6\t0\t0\t0\t0\t-1\n0\t7\t0\t0\t0\t58\t16\n1\t7\t0\t0\t0\t255\t16\n2\t7\t0\t0\t0\t255\t16\n3\t7\t0\t0\t0\t255\t16\n4\t7\t0\t0\t0\t255\t16\n5\t7\t0\t0\t0\t255\t16\n6\t7\t0\t0\t0\t255\t16\n7\t7\t0\t0\t0\t101\t16\n8\t7\t0\t0\t0\t0\t-1\n9\t7\t0\t0\t0\t0\t-1\n10\t7\t0\t0\t0\t0\t-1\n11\t7\t0\t0\t0\t0\t-1\n12\t7\t0\t0\t0\t0\t-1\n13\t7\t0\t0\t0\t0\t-1\n14\t7\t0\t0\t0\t3\t16\n15\t7\t0\t0\t0\t200\t16\n16\t7\t0\t0\t0\t255\t16\n17\t7\t0\t0\t0\t255\t16\n18\t7\t0\t0\t0\t255\t16\n19\t7\t0\t0\t0\t255\t16\n20\t7\t0\t0\t0\t255\t16\n21\t7\t0\t0\t0\t255\t16\n22\t7\t0\t0\t0\t253\t16\n23\t7\t0\t0\t0\t60\t16\n24\t7\t0\t0\t0\t0\t-1\n25\t7\t0\t0\t0\t0\t-1\n26\t7\t0\t0\t0\t0\t-1\n27\t7\t0\t0\t0\t219\t16\n28\t7\t0\t0\t0\t255\t16\n29\t7\t0\t0\t0\t255\t16\n30\t7\t0\t0\t0\t255\t16\n31\t7\t0\t0\t0\t255\t16\n32\t7\t0\t0\t0\t255\t16\n33\t7\t0\t0\t0\t255\t16\n34\t7\t0\t0\t0\t97\t16\n35\t7\t0\t0\t0\t0\t-1\n36\t7\t0\t0\t0\t190\t16\n37\t7\t0\t0\t0\t255\t16\n38\t7\t0\t0\t0\t255\t16\n39\t7\t0\t0\t0\t255\t16\n40\t7\t0\t0\t0\t255\t16\n41\t7\t0\t0\t0\t255\t16\n42\t7\t0\t0\t0\t255\t16\n43\t7\t0\t0\t0\t71\t16\n44\t7\t0\t0\t0\t0\t-1\n45\t7\t0\t0\t0\t0\t-1\n46\t7\t0\t0\t0\t0\t-1\n47\t7\t0\t0\t0\t0\t-1\n48\t7\t0\t0\t0\t0\t-1\n49\t7\t0\t0\t0\t0\t-1\n50\t7\t0\t0\t0\t0\t-1\n51\t7\t0\t0\t0\t0\t-1\n52\t7\t0\t0\t0\t0\t-1\n53\t7\t0\t0\t0\t0\t-1\n54\t7\t0\t0\t0\t0\t-1\n55\t7\t0\t0\t0\t0\t-1\n56\t7\t0\t0\t0\t0\t-1\n57\t7\t0\t0\t0\t0\t-1\n58\t7\t0\t0\t0\t1\t16\n59\t7\t0\t0\t0\t231\t16\n60\t7\t0\t0\t0\t255\t16\n61\t7\t0\t0\t0\t255\t16\n62\t7\t0\t0\t0\t255\t16\n63\t7\t0\t0\t0\t255\t16\n64\t7\t0\t0\t0\t255\t16\n65\t7\t0\t0\t0\t255\t16\n66\t7\t0\t0\t0\t180\t16\n67\t7\t0\t0\t0\t0\t-1\n68\t7\t0\t0\t0\t26\t16\n69\t7\t0\t0\t0\t254\t16\n70\t7\t0\t0\t0\t255\t16\n71\t7\t0\t0\t0\t255\t16\n72\t7\t0\t0\t0\t255\t16\n73\t7\t0\t0\t0\t255\t16\n74\t7\t0\t0\t0\t255\t16\n75\t7\t0\t0\t0\t255\t16\n76\t7\t0\t0\t0\t101\t16\n77\t7\t0\t0\t0\t0\t-1\n78\t7\t0\t0\t0\t0\t-1\n79\t7\t0\t0\t0\t0\t-1\n80\t7\t0\t0\t0\t0\t-1\n81\t7\t0\t0\t0\t0\t-1\n82\t7\t0\t0\t0\t0\t-1\n83\t7\t0\t0\t0\t0\t-1\n84\t7\t0\t0\t0\t36\t16\n85\t7\t0\t0\t0\t255\t16\n86\t7\t0\t0\t0\t255\t16\n87\t7\t0\t0\t0\t255\t16\n88\t7\t0\t0\t0\t255\t16\n89\t7\t0\t0\t0\t255\t16\n90\t7\t0\t0\t0\t255\t16\n91\t7\t0\t0\t0\t255\t16\n92\t7\t0\t0\t0\t65\t16\n93\t7\t0\t0\t0\t0\t-1\n94\t7\t0\t0\t0\t0\t-1\n95\t7\t0\t0\t0\t66\t16\n96\t7\t0\t0\t0\t254\t16\n97\t7\t0\t0\t0\t255\t16\n98\t7\t0\t0\t0\t255\t16\n99\t7\t0\t0\t0\t255\t16\n100\t7\t0\t0\t0\t255\t16\n101\t7\t0\t0\t0\t255\t16\n102\t7\t0\t0\t0\t246\t16\n103\t7\t0\t0\t0\t188\t16\n104\t7\t0\t0\t0\t255\t16\n105\t7\t0\t0\t0\t255\t16\n106\t7\t0\t0\t0\t255\t16\n107\t7\t0\t0\t0\t255\t16\n108\t7\t0\t0\t0\t255\t16\n109\t7\t0\t0\t0\t193\t16\n110\t7\t0\t0\t0\t0\t-1\n111\t7\t0\t0\t0\t0\t-1\n112\t7\t0\t0\t0\t0\t-1\n113\t7\t0\t0\t0\t0\t-1\n114\t7\t0\t0\t0\t0\t-1\n115\t7\t0\t0\t0\t0\t-1\n116\t7\t0\t0\t0\t0\t-1\n117\t7\t0\t0\t0\t0\t-1\n118\t7\t0\t0\t0\t63\t16\n119\t7\t0\t0\t0\t255\t16\n120\t7\t0\t0\t0\t255\t16\n121\t7\t0\t0\t0\t255\t16\n122\t7\t0\t0\t0\t255\t16\n123\t7\t0\t0\t0\t255\t16\n124\t7\t0\t0\t0\t255\t16\n125\t7\t0\t0\t0\t255\t16\n126\t7\t0\t0\t0\t82\t16\n127\t7\t0\t0\t0\t0\t-1\n128\t7\t0\t0\t0\t0\t-1\n129\t7\t0\t0\t0\t0\t-1\n130\t7\t0\t0\t0\t0\t-1\n131\t7\t0\t0\t0\t0\t-1\n132\t7\t0\t0\t0\t0\t-1\n133\t7\t0\t0\t0\t78\t16\n134\t7\t0\t0\t0\t255\t16\n135\t7\t0\t0\t0\t255\t16\n136\t7\t0\t0\t0\t255\t16\n137\t7\t0\t0\t0\t255\t16\n138\t7\t0\t0\t0\t255\t16\n139\t7\t0\t0\t0\t255\t16\n140\t7\t0\t0\t0\t244\t16\n141\t7\t0\t0\t0\t189\t16\n142\t7\t0\t0\t0\t255\t16\n143\t7\t0\t0\t0\t255\t16\n144\t7\t0\t0\t0\t255\t16\n145\t7\t0\t0\t0\t255\t16\n146\t7\t0\t0\t0\t255\t16\n147\t7\t0\t0\t0\t188\t16\n148\t7\t0\t0\t0\t0\t-1\n149\t7\t0\t0\t0\t0\t-1\n0\t8\t0\t0\t0\t33\t16\n1\t8\t0\t0\t0\t255\t16\n2\t8\t0\t0\t0\t255\t16\n3\t8\t0\t0\t0\t255\t16\n4\t8\t0\t0\t0\t255\t16\n5\t8\t0\t0\t0\t255\t16\n6\t8\t0\t0\t0\t255\t16\n7\t8\t0\t0\t0\t130\t16\n8\t8\t0\t0\t0\t0\t-1\n9\t8\t0\t0\t0\t0\t-1\n10\t8\t0\t0\t0\t0\t-1\n11\t8\t0\t0\t0\t0\t-1\n12\t8\t0\t0\t0\t0\t-1\n13\t8\t0\t0\t0\t0\t-1\n14\t8\t0\t0\t0\t118\t16\n15\t8\t0\t0\t0\t255\t16\n16\t8\t0\t0\t0\t255\t16\n17\t8\t0\t0\t0\t255\t16\n18\t8\t0\t0\t0\t255\t16\n19\t8\t0\t0\t0\t255\t16\n20\t8\t0\t0\t0\t255\t16\n21\t8\t0\t0\t0\t255\t16\n22\t8\t0\t0\t0\t143\t16\n23\t8\t0\t0\t0\t0\t-1\n24\t8\t0\t0\t0\t0\t-1\n25\t8\t0\t0\t0\t0\t-1\n26\t8\t0\t0\t0\t40\t16\n27\t8\t0\t0\t0\t255\t16\n28\t8\t0\t0\t0\t255\t16\n29\t8\t0\t0\t0\t255\t16\n30\t8\t0\t0\t0\t255\t16\n31\t8\t0\t0\t0\t255\t16\n32\t8\t0\t0\t0\t255\t16\n33\t8\t0\t0\t0\t254\t16\n34\t8\t0\t0\t0\t24\t16\n35\t8\t0\t0\t0\t0\t-1\n36\t8\t0\t0\t0\t198\t16\n37\t8\t0\t0\t0\t255\t16\n38\t8\t0\t0\t0\t255\t16\n39\t8\t0\t0\t0\t255\t16\n40\t8\t0\t0\t0\t255\t16\n41\t8\t0\t0\t0\t255\t16\n42\t8\t0\t0\t0\t255\t16\n43\t8\t0\t0\t0\t176\t16\n44\t8\t0\t0\t0\t38\t16\n45\t8\t0\t0\t0\t34\t16\n46\t8\t0\t0\t0\t34\t16\n47\t8\t0\t0\t0\t34\t16\n48\t8\t0\t0\t0\t30\t16\n49\t8\t0\t0\t0\t17\t16\n50\t8\t0\t0\t0\t1\t16\n51\t8\t0\t0\t0\t0\t-1\n52\t8\t0\t0\t0\t0\t-1\n53\t8\t0\t0\t0\t0\t-1\n54\t8\t0\t0\t0\t0\t-1\n55\t8\t0\t0\t0\t0\t-1\n56\t8\t0\t0\t0\t0\t-1\n57\t8\t0\t0\t0\t0\t-1\n58\t8\t0\t0\t0\t44\t16\n59\t8\t0\t0\t0\t255\t16\n60\t8\t0\t0\t0\t255\t16\n61\t8\t0\t0\t0\t255\t16\n62\t8\t0\t0\t0\t255\t16\n63\t8\t0\t0\t0\t255\t16\n64\t8\t0\t0\t0\t255\t16\n65\t8\t0\t0\t0\t255\t16\n66\t8\t0\t0\t0\t111\t16\n67\t8\t0\t0\t0\t0\t-1\n68\t8\t0\t0\t0\t100\t16\n69\t8\t0\t0\t0\t255\t16\n70\t8\t0\t0\t0\t255\t16\n71\t8\t0\t0\t0\t255\t16\n72\t8\t0\t0\t0\t255\t16\n73\t8\t0\t0\t0\t255\t16\n74\t8\t0\t0\t0\t255\t16\n75\t8\t0\t0\t0\t254\t16\n76\t8\t0\t0\t0\t26\t16\n77\t8\t0\t0\t0\t0\t-1\n78\t8\t0\t0\t0\t0\t-1\n79\t8\t0\t0\t0\t0\t-1\n80\t8\t0\t0\t0\t0\t-1\n81\t8\t0\t0\t0\t0\t-1\n82\t8\t0\t0\t0\t0\t-1\n83\t8\t0\t0\t0\t0\t-1\n84\t8\t0\t0\t0\t59\t16\n85\t8\t0\t0\t0\t255\t16\n86\t8\t0\t0\t0\t255\t16\n87\t8\t0\t0\t0\t255\t16\n88\t8\t0\t0\t0\t255\t16\n89\t8\t0\t0\t0\t255\t16\n90\t8\t0\t0\t0\t255\t16\n91\t8\t0\t0\t0\t254\t16\n92\t8\t0\t0\t0\t16\t16\n93\t8\t0\t0\t0\t0\t-1\n94\t8\t0\t0\t0\t13\t16\n95\t8\t0\t0\t0\t223\t16\n96\t8\t0\t0\t0\t255\t16\n97\t8\t0\t0\t0\t255\t16\n98\t8\t0\t0\t0\t255\t16\n99\t8\t0\t0\t0\t255\t16\n100\t8\t0\t0\t0\t255\t16\n101\t8\t0\t0\t0\t255\t16\n102\t8\t0\t0\t0\t120\t16\n103\t8\t0\t0\t0\t125\t16\n104\t8\t0\t0\t0\t255\t16\n105\t8\t0\t0\t0\t255\t16\n106\t8\t0\t0\t0\t255\t16\n107\t8\t0\t0\t0\t255\t16\n108\t8\t0\t0\t0\t255\t16\n109\t8\t0\t0\t0\t227\t16\n110\t8\t0\t0\t0\t0\t-1\n111\t8\t0\t0\t0\t0\t-1\n112\t8\t0\t0\t0\t0\t-1\n113\t8\t0\t0\t0\t0\t-1\n114\t8\t0\t0\t0\t0\t-1\n115\t8\t0\t0\t0\t0\t-1\n116\t8\t0\t0\t0\t0\t-1\n117\t8\t0\t0\t0\t0\t-1\n118\t8\t0\t0\t0\t131\t16\n119\t8\t0\t0\t0\t255\t16\n120\t8\t0\t0\t0\t255\t16\n121\t8\t0\t0\t0\t255\t16\n122\t8\t0\t0\t0\t255\t16\n123\t8\t0\t0\t0\t255\t16\n124\t8\t0\t0\t0\t255\t16\n125\t8\t0\t0\t0\t252\t16\n126\t8\t0\t0\t0\t16\t16\n127\t8\t0\t0\t0\t0\t-1\n128\t8\t0\t0\t0\t0\t-1\n129\t8\t0\t0\t0\t0\t-1\n130\t8\t0\t0\t0\t0\t-1\n131\t8\t0\t0\t0\t0\t-1\n132\t8\t0\t0\t0\t18\t16\n133\t8\t0\t0\t0\t230\t16\n134\t8\t0\t0\t0\t255\t16\n135\t8\t0\t0\t0\t255\t16\n136\t8\t0\t0\t0\t255\t16\n137\t8\t0\t0\t0\t255\t16\n138\t8\t0\t0\t0\t255\t16\n139\t8\t0\t0\t0\t255\t16\n140\t8\t0\t0\t0\t116\t16\n141\t8\t0\t0\t0\t129\t16\n142\t8\t0\t0\t0\t255\t16\n143\t8\t0\t0\t0\t255\t16\n144\t8\t0\t0\t0\t255\t16\n145\t8\t0\t0\t0\t255\t16\n146\t8\t0\t0\t0\t255\t16\n147\t8\t0\t0\t0\t223\t16\n148\t8\t0\t0\t0\t0\t-1\n149\t8\t0\t0\t0\t0\t-1\n0\t9\t0\t0\t0\t8\t16\n1\t9\t0\t0\t0\t255\t16\n2\t9\t0\t0\t0\t255\t16\n3\t9\t0\t0\t0\t255\t16\n4\t9\t0\t0\t0\t255\t16\n5\t9\t0\t0\t0\t255\t16\n6\t9\t0\t0\t0\t255\t16\n7\t9\t0\t0\t0\t160\t16\n8\t9\t0\t0\t0\t0\t-1\n9\t9\t0\t0\t0\t0\t-1\n10\t9\t0\t0\t0\t0\t-1\n11\t9\t0\t0\t0\t0\t-1\n12\t9\t0\t0\t0\t0\t-1\n13\t9\t0\t0\t0\t43\t16\n14\t9\t0\t0\t0\t248\t16\n15\t9\t0\t0\t0\t255\t16\n16\t9\t0\t0\t0\t255\t16\n17\t9\t0\t0\t0\t255\t16\n18\t9\t0\t0\t0\t255\t16\n19\t9\t0\t0\t0\t255\t16\n20\t9\t0\t0\t0\t255\t16\n21\t9\t0\t0\t0\t212\t16\n22\t9\t0\t0\t0\t8\t16\n23\t9\t0\t0\t0\t0\t-1\n24\t9\t0\t0\t0\t0\t-1\n25\t9\t0\t0\t0\t0\t-1\n26\t9\t0\t0\t0\t119\t16\n27\t9\t0\t0\t0\t255\t16\n28\t9\t0\t0\t0\t255\t16\n29\t9\t0\t0\t0\t255\t16\n30\t9\t0\t0\t0\t255\t16\n31\t9\t0\t0\t0\t255\t16\n32\t9\t0\t0\t0\t255\t16\n33\t9\t0\t0\t0\t203\t16\n34\t9\t0\t0\t0\t0\t-1\n35\t9\t0\t0\t0\t0\t-1\n36\t9\t0\t0\t0\t174\t16\n37\t9\t0\t0\t0\t255\t16\n38\t9\t0\t0\t0\t255\t16\n39\t9\t0\t0\t0\t255\t16\n40\t9\t0\t0\t0\t255\t16\n41\t9\t0\t0\t0\t255\t16\n42\t9\t0\t0\t0\t255\t16\n43\t9\t0\t0\t0\t255\t16\n44\t9\t0\t0\t0\t255\t16\n45\t9\t0\t0\t0\t255\t16\n46\t9\t0\t0\t0\t255\t16\n47\t9\t0\t0\t0\t255\t16\n48\t9\t0\t0\t0\t255\t16\n49\t9\t0\t0\t0\t255\t16\n50\t9\t0\t0\t0\t228\t16\n51\t9\t0\t0\t0\t134\t16\n52\t9\t0\t0\t0\t17\t16\n53\t9\t0\t0\t0\t0\t-1\n54\t9\t0\t0\t0\t0\t-1\n55\t9\t0\t0\t0\t0\t-1\n56\t9\t0\t0\t0\t0\t-1\n57\t9\t0\t0\t0\t0\t-1\n58\t9\t0\t0\t0\t113\t16\n59\t9\t0\t0\t0\t255\t16\n60\t9\t0\t0\t0\t255\t16\n61\t9\t0\t0\t0\t255\t16\n62\t9\t0\t0\t0\t255\t16\n63\t9\t0\t0\t0\t255\t16\n64\t9\t0\t0\t0\t255\t16\n65\t9\t0\t0\t0\t255\t16\n66\t9\t0\t0\t0\t41\t16\n67\t9\t0\t0\t0\t0\t-1\n68\t9\t0\t0\t0\t174\t16\n69\t9\t0\t0\t0\t255\t16\n70\t9\t0\t0\t0\t255\t16\n71\t9\t0\t0\t0\t255\t16\n72\t9\t0\t0\t0\t255\t16\n73\t9\t0\t0\t0\t255\t16\n74\t9\t0\t0\t0\t255\t16\n75\t9\t0\t0\t0\t205\t16\n76\t9\t0\t0\t0\t0\t-1\n77\t9\t0\t0\t0\t0\t-1\n78\t9\t0\t0\t0\t0\t-1\n79\t9\t0\t0\t0\t0\t-1\n80\t9\t0\t0\t0\t0\t-1\n81\t9\t0\t0\t0\t0\t-1\n82\t9\t0\t0\t0\t0\t-1\n83\t9\t0\t0\t0\t0\t-1\n84\t9\t0\t0\t0\t121\t16\n85\t9\t0\t0\t0\t255\t16\n86\t9\t0\t0\t0\t255\t16\n87\t9\t0\t0\t0\t255\t16\n88\t9\t0\t0\t0\t255\t16\n89\t9\t0\t0\t0\t255\t16\n90\t9\t0\t0\t0\t255\t16\n91\t9\t0\t0\t0\t194\t16\n92\t9\t0\t0\t0\t0\t-1\n93\t9\t0\t0\t0\t0\t-1\n94\t9\t0\t0\t0\t157\t16\n95\t9\t0\t0\t0\t255\t16\n96\t9\t0\t0\t0\t255\t16\n97\t9\t0\t0\t0\t255\t16\n98\t9\t0\t0\t0\t255\t16\n99\t9\t0\t0\t0\t255\t16\n100\t9\t0\t0\t0\t255\t16\n101\t9\t0\t0\t0\t206\t16\n102\t9\t0\t0\t0\t3\t16\n103\t9\t0\t0\t0\t95\t16\n104\t9\t0\t0\t0\t255\t16\n105\t9\t0\t0\t0\t255\t16\n106\t9\t0\t0\t0\t255\t16\n107\t9\t0\t0\t0\t255\t16\n108\t9\t0\t0\t0\t255\t16\n109\t9\t0\t0\t0\t254\t16\n110\t9\t0\t0\t0\t10\t16\n111\t9\t0\t0\t0\t0\t-1\n112\t9\t0\t0\t0\t0\t-1\n113\t9\t0\t0\t0\t0\t-1\n114\t9\t0\t0\t0\t0\t-1\n115\t9\t0\t0\t0\t0\t-1\n116\t9\t0\t0\t0\t0\t-1\n117\t9\t0\t0\t0\t0\t-1\n118\t9\t0\t0\t0\t200\t16\n119\t9\t0\t0\t0\t255\t16\n120\t9\t0\t0\t0\t255\t16\n121\t9\t0\t0\t0\t255\t16\n122\t9\t0\t0\t0\t255\t16\n123\t9\t0\t0\t0\t255\t16\n124\t9\t0\t0\t0\t255\t16\n125\t9\t0\t0\t0\t200\t16\n126\t9\t0\t0\t0\t0\t-1\n127\t9\t0\t0\t0\t0\t-1\n128\t9\t0\t0\t0\t0\t-1\n129\t9\t0\t0\t0\t0\t-1\n130\t9\t0\t0\t0\t0\t-1\n131\t9\t0\t0\t0\t0\t-1\n132\t9\t0\t0\t0\t170\t16\n133\t9\t0\t0\t0\t255\t16\n134\t9\t0\t0\t0\t255\t16\n135\t9\t0\t0\t0\t255\t16\n136\t9\t0\t0\t0\t255\t16\n137\t9\t0\t0\t0\t255\t16\n138\t9\t0\t0\t0\t255\t16\n139\t9\t0\t0\t0\t200\t16\n140\t9\t0\t0\t0\t2\t16\n141\t9\t0\t0\t0\t99\t16\n142\t9\t0\t0\t0\t255\t16\n143\t9\t0\t0\t0\t255\t16\n144\t9\t0\t0\t0\t255\t16\n145\t9\t0\t0\t0\t255\t16\n146\t9\t0\t0\t0\t255\t16\n147\t9\t0\t0\t0\t252\t16\n148\t9\t0\t0\t0\t6\t16\n149\t9\t0\t0\t0\t0\t-1\n0\t10\t0\t0\t0\t0\t-1\n1\t10\t0\t0\t0\t237\t16\n2\t10\t0\t0\t0\t255\t16\n3\t10\t0\t0\t0\t255\t16\n4\t10\t0\t0\t0\t255\t16\n5\t10\t0\t0\t0\t255\t16\n6\t10\t0\t0\t0\t255\t16\n7\t10\t0\t0\t0\t189\t16\n8\t10\t0\t0\t0\t0\t-1\n9\t10\t0\t0\t0\t0\t-1\n10\t10\t0\t0\t0\t0\t-1\n11\t10\t0\t0\t0\t0\t-1\n12\t10\t0\t0\t0\t3\t16\n13\t10\t0\t0\t0\t200\t16\n14\t10\t0\t0\t0\t255\t16\n15\t10\t0\t0\t0\t255\t16\n16\t10\t0\t0\t0\t255\t16\n17\t10\t0\t0\t0\t255\t16\n18\t10\t0\t0\t0\t255\t16\n19\t10\t0\t0\t0\t255\t16\n20\t10\t0\t0\t0\t250\t16\n21\t10\t0\t0\t0\t50\t16\n22\t10\t0\t0\t0\t0\t-1\n23\t10\t0\t0\t0\t0\t-1\n24\t10\t0\t0\t0\t0\t-1\n25\t10\t0\t0\t0\t0\t-1\n26\t10\t0\t0\t0\t197\t16\n27\t10\t0\t0\t0\t255\t16\n28\t10\t0\t0\t0\t255\t16\n29\t10\t0\t0\t0\t255\t16\n30\t10\t0\t0\t0\t255\t16\n31\t10\t0\t0\t0\t255\t16\n32\t10\t0\t0\t0\t255\t16\n33\t10\t0\t0\t0\t129\t16\n34\t10\t0\t0\t0\t0\t-1\n35\t10\t0\t0\t0\t0\t-1\n36\t10\t0\t0\t0\t105\t16\n37\t10\t0\t0\t0\t255\t16\n38\t10\t0\t0\t0\t255\t16\n39\t10\t0\t0\t0\t255\t16\n40\t10\t0\t0\t0\t255\t16\n41\t10\t0\t0\t0\t255\t16\n42\t10\t0\t0\t0\t255\t16\n43\t10\t0\t0\t0\t255\t16\n44\t10\t0\t0\t0\t255\t16\n45\t10\t0\t0\t0\t255\t16\n46\t10\t0\t0\t0\t255\t16\n47\t10\t0\t0\t0\t255\t16\n48\t10\t0\t0\t0\t255\t16\n49\t10\t0\t0\t0\t255\t16\n50\t10\t0\t0\t0\t255\t16\n51\t10\t0\t0\t0\t255\t16\n52\t10\t0\t0\t0\t224\t16\n53\t10\t0\t0\t0\t44\t16\n54\t10\t0\t0\t0\t0\t-1\n55\t10\t0\t0\t0\t0\t-1\n56\t10\t0\t0\t0\t0\t-1\n57\t10\t0\t0\t0\t0\t-1\n58\t10\t0\t0\t0\t182\t16\n59\t10\t0\t0\t0\t255\t16\n60\t10\t0\t0\t0\t255\t16\n61\t10\t0\t0\t0\t255\t16\n62\t10\t0\t0\t0\t255\t16\n63\t10\t0\t0\t0\t255\t16\n64\t10\t0\t0\t0\t255\t16\n65\t10\t0\t0\t0\t226\t16\n66\t10\t0\t0\t0\t0\t-1\n67\t10\t0\t0\t0\t7\t16\n68\t10\t0\t0\t0\t243\t16\n69\t10\t0\t0\t0\t255\t16\n70\t10\t0\t0\t0\t255\t16\n71\t10\t0\t0\t0\t255\t16\n72\t10\t0\t0\t0\t255\t16\n73\t10\t0\t0\t0\t255\t16\n74\t10\t0\t0\t0\t255\t16\n75\t10\t0\t0\t0\t129\t16\n76\t10\t0\t0\t0\t0\t-1\n77\t10\t0\t0\t0\t0\t-1\n78\t10\t0\t0\t0\t0\t-1\n79\t10\t0\t0\t0\t0\t-1\n80\t10\t0\t0\t0\t0\t-1\n81\t10\t0\t0\t0\t0\t-1\n82\t10\t0\t0\t0\t0\t-1\n83\t10\t0\t0\t0\t6\t16\n84\t10\t0\t0\t0\t222\t16\n85\t10\t0\t0\t0\t255\t16\n86\t10\t0\t0\t0\t255\t16\n87\t10\t0\t0\t0\t255\t16\n88\t10\t0\t0\t0\t255\t16\n89\t10\t0\t0\t0\t255\t16\n90\t10\t0\t0\t0\t255\t16\n91\t10\t0\t0\t0\t106\t16\n92\t10\t0\t0\t0\t0\t-1\n93\t10\t0\t0\t0\t74\t16\n94\t10\t0\t0\t0\t255\t16\n95\t10\t0\t0\t0\t255\t16\n96\t10\t0\t0\t0\t255\t16\n97\t10\t0\t0\t0\t255\t16\n98\t10\t0\t0\t0\t255\t16\n99\t10\t0\t0\t0\t255\t16\n100\t10\t0\t0\t0\t253\t16\n101\t10\t0\t0\t0\t53\t16\n102\t10\t0\t0\t0\t0\t-1\n103\t10\t0\t0\t0\t66\t16\n104\t10\t0\t0\t0\t255\t16\n105\t10\t0\t0\t0\t255\t16\n106\t10\t0\t0\t0\t255\t16\n107\t10\t0\t0\t0\t255\t16\n108\t10\t0\t0\t0\t255\t16\n109\t10\t0\t0\t0\t255\t16\n110\t10\t0\t0\t0\t43\t16\n111\t10\t0\t0\t0\t0\t-1\n112\t10\t0\t0\t0\t0\t-1\n113\t10\t0\t0\t0\t0\t-1\n114\t10\t0\t0\t0\t0\t-1\n115\t10\t0\t0\t0\t0\t-1\n116\t10\t0\t0\t0\t0\t-1\n117\t10\t0\t0\t0\t17\t16\n118\t10\t0\t0\t0\t252\t16\n119\t10\t0\t0\t0\t255\t16\n120\t10\t0\t0\t0\t255\t16\n121\t10\t0\t0\t0\t255\t16\n122\t10\t0\t0\t0\t255\t16\n123\t10\t0\t0\t0\t255\t16\n124\t10\t0\t0\t0\t255\t16\n125\t10\t0\t0\t0\t131\t16\n126\t10\t0\t0\t0\t0\t-1\n127\t10\t0\t0\t0\t0\t-1\n128\t10\t0\t0\t0\t0\t-1\n129\t10\t0\t0\t0\t0\t-1\n130\t10\t0\t0\t0\t0\t-1\n131\t10\t0\t0\t0\t85\t16\n132\t10\t0\t0\t0\t255\t16\n133\t10\t0\t0\t0\t255\t16\n134\t10\t0\t0\t0\t255\t16\n135\t10\t0\t0\t0\t255\t16\n136\t10\t0\t0\t0\t255\t16\n137\t10\t0\t0\t0\t255\t16\n138\t10\t0\t0\t0\t252\t16\n139\t10\t0\t0\t0\t51\t16\n140\t10\t0\t0\t0\t0\t-1\n141\t10\t0\t0\t0\t70\t16\n142\t10\t0\t0\t0\t255\t16\n143\t10\t0\t0\t0\t255\t16\n144\t10\t0\t0\t0\t255\t16\n145\t10\t0\t0\t0\t255\t16\n146\t10\t0\t0\t0\t255\t16\n147\t10\t0\t0\t0\t255\t16\n148\t10\t0\t0\t0\t39\t16\n149\t10\t0\t0\t0\t0\t-1\n0\t11\t0\t0\t0\t0\t-1\n1\t11\t0\t0\t0\t212\t16\n2\t11\t0\t0\t0\t255\t16\n3\t11\t0\t0\t0\t255\t16\n4\t11\t0\t0\t0\t255\t16\n5\t11\t0\t0\t0\t255\t16\n6\t11\t0\t0\t0\t255\t16\n7\t11\t0\t0\t0\t218\t16\n8\t11\t0\t0\t0\t0\t-1\n9\t11\t0\t0\t0\t0\t-1\n10\t11\t0\t0\t0\t0\t-1\n11\t11\t0\t0\t0\t0\t-1\n12\t11\t0\t0\t0\t119\t16\n13\t11\t0\t0\t0\t255\t16\n14\t11\t0\t0\t0\t255\t16\n15\t11\t0\t0\t0\t255\t16\n16\t11\t0\t0\t0\t255\t16\n17\t11\t0\t0\t0\t255\t16\n18\t11\t0\t0\t0\t255\t16\n19\t11\t0\t0\t0\t255\t16\n20\t11\t0\t0\t0\t132\t16\n21\t11\t0\t0\t0\t0\t-1\n22\t11\t0\t0\t0\t0\t-1\n23\t11\t0\t0\t0\t0\t-1\n24\t11\t0\t0\t0\t0\t-1\n25\t11\t0\t0\t0\t24\t16\n26\t11\t0\t0\t0\t253\t16\n27\t11\t0\t0\t0\t255\t16\n28\t11\t0\t0\t0\t255\t16\n29\t11\t0\t0\t0\t255\t16\n30\t11\t0\t0\t0\t255\t16\n31\t11\t0\t0\t0\t255\t16\n32\t11\t0\t0\t0\t255\t16\n33\t11\t0\t0\t0\t54\t16\n34\t11\t0\t0\t0\t0\t-1\n35\t11\t0\t0\t0\t0\t-1\n36\t11\t0\t0\t0\t12\t16\n37\t11\t0\t0\t0\t233\t16\n38\t11\t0\t0\t0\t255\t16\n39\t11\t0\t0\t0\t255\t16\n40\t11\t0\t0\t0\t255\t16\n41\t11\t0\t0\t0\t255\t16\n42\t11\t0\t0\t0\t255\t16\n43\t11\t0\t0\t0\t255\t16\n44\t11\t0\t0\t0\t255\t16\n45\t11\t0\t0\t0\t255\t16\n46\t11\t0\t0\t0\t255\t16\n47\t11\t0\t0\t0\t255\t16\n48\t11\t0\t0\t0\t255\t16\n49\t11\t0\t0\t0\t255\t16\n50\t11\t0\t0\t0\t255\t16\n51\t11\t0\t0\t0\t255\t16\n52\t11\t0\t0\t0\t255\t16\n53\t11\t0\t0\t0\t231\t16\n54\t11\t0\t0\t0\t32\t16\n55\t11\t0\t0\t0\t0\t-1\n56\t11\t0\t0\t0\t0\t-1\n57\t11\t0\t0\t0\t7\t16\n58\t11\t0\t0\t0\t245\t16\n59\t11\t0\t0\t0\t255\t16\n60\t11\t0\t0\t0\t255\t16\n61\t11\t0\t0\t0\t255\t16\n62\t11\t0\t0\t0\t255\t16\n63\t11\t0\t0\t0\t255\t16\n64\t11\t0\t0\t0\t255\t16\n65\t11\t0\t0\t0\t158\t16\n66\t11\t0\t0\t0\t0\t-1\n67\t11\t0\t0\t0\t70\t16\n68\t11\t0\t0\t0\t255\t16\n69\t11\t0\t0\t0\t255\t16\n70\t11\t0\t0\t0\t255\t16\n71\t11\t0\t0\t0\t255\t16\n72\t11\t0\t0\t0\t255\t16\n73\t11\t0\t0\t0\t255\t16\n74\t11\t0\t0\t0\t255\t16\n75\t11\t0\t0\t0\t54\t16\n76\t11\t0\t0\t0\t0\t-1\n77\t11\t0\t0\t0\t0\t-1\n78\t11\t0\t0\t0\t0\t-1\n79\t11\t0\t0\t0\t0\t-1\n80\t11\t0\t0\t0\t0\t-1\n81\t11\t0\t0\t0\t0\t-1\n82\t11\t0\t0\t0\t0\t-1\n83\t11\t0\t0\t0\t115\t16\n84\t11\t0\t0\t0\t255\t16\n85\t11\t0\t0\t0\t255\t16\n86\t11\t0\t0\t0\t255\t16\n87\t11\t0\t0\t0\t255\t16\n88\t11\t0\t0\t0\t255\t16\n89\t11\t0\t0\t0\t255\t16\n90\t11\t0\t0\t0\t235\t16\n91\t11\t0\t0\t0\t13\t16\n92\t11\t0\t0\t0\t17\t16\n93\t11\t0\t0\t0\t230\t16\n94\t11\t0\t0\t0\t255\t16\n95\t11\t0\t0\t0\t255\t16\n96\t11\t0\t0\t0\t255\t16\n97\t11\t0\t0\t0\t255\t16\n98\t11\t0\t0\t0\t255\t16\n99\t11\t0\t0\t0\t255\t16\n100\t11\t0\t0\t0\t152\t16\n101\t11\t0\t0\t0\t0\t-1\n102\t11\t0\t0\t0\t0\t-1\n103\t11\t0\t0\t0\t38\t16\n104\t11\t0\t0\t0\t255\t16\n105\t11\t0\t0\t0\t255\t16\n106\t11\t0\t0\t0\t255\t16\n107\t11\t0\t0\t0\t255\t16\n108\t11\t0\t0\t0\t255\t16\n109\t11\t0\t0\t0\t255\t16\n110\t11\t0\t0\t0\t78\t16\n111\t11\t0\t0\t0\t0\t-1\n112\t11\t0\t0\t0\t0\t-1\n113\t11\t0\t0\t0\t0\t-1\n114\t11\t0\t0\t0\t0\t-1\n115\t11\t0\t0\t0\t0\t-1\n116\t11\t0\t0\t0\t0\t-1\n117\t11\t0\t0\t0\t81\t16\n118\t11\t0\t0\t0\t255\t16\n119\t11\t0\t0\t0\t255\t16\n120\t11\t0\t0\t0\t255\t16\n121\t11\t0\t0\t0\t255\t16\n122\t11\t0\t0\t0\t255\t16\n123\t11\t0\t0\t0\t255\t16\n124\t11\t0\t0\t0\t255\t16\n125\t11\t0\t0\t0\t62\t16\n126\t11\t0\t0\t0\t0\t-1\n127\t11\t0\t0\t0\t0\t-1\n128\t11\t0\t0\t0\t0\t-1\n129\t11\t0\t0\t0\t0\t-1\n130\t11\t0\t0\t0\t23\t16\n131\t11\t0\t0\t0\t235\t16\n132\t11\t0\t0\t0\t255\t16\n133\t11\t0\t0\t0\t255\t16\n134\t11\t0\t0\t0\t255\t16\n135\t11\t0\t0\t0\t255\t16\n136\t11\t0\t0\t0\t255\t16\n137\t11\t0\t0\t0\t255\t16\n138\t11\t0\t0\t0\t148\t16\n139\t11\t0\t0\t0\t0\t-1\n140\t11\t0\t0\t0\t0\t-1\n141\t11\t0\t0\t0\t42\t16\n142\t11\t0\t0\t0\t255\t16\n143\t11\t0\t0\t0\t255\t16\n144\t11\t0\t0\t0\t255\t16\n145\t11\t0\t0\t0\t255\t16\n146\t11\t0\t0\t0\t255\t16\n147\t11\t0\t0\t0\t255\t16\n148\t11\t0\t0\t0\t74\t16\n149\t11\t0\t0\t0\t0\t-1\n0\t12\t0\t0\t0\t0\t-1\n1\t12\t0\t0\t0\t186\t16\n2\t12\t0\t0\t0\t255\t16\n3\t12\t0\t0\t0\t255\t16\n4\t12\t0\t0\t0\t255\t16\n5\t12\t0\t0\t0\t255\t16\n6\t12\t0\t0\t0\t255\t16\n7\t12\t0\t0\t0\t247\t16\n8\t12\t0\t0\t0\t1\t16\n9\t12\t0\t0\t0\t0\t-1\n10\t12\t0\t0\t0\t0\t-1\n11\t12\t0\t0\t0\t44\t16\n12\t12\t0\t0\t0\t248\t16\n13\t12\t0\t0\t0\t255\t16\n14\t12\t0\t0\t0\t255\t16\n15\t12\t0\t0\t0\t255\t16\n16\t12\t0\t0\t0\t255\t16\n17\t12\t0\t0\t0\t255\t16\n18\t12\t0\t0\t0\t255\t16\n19\t12\t0\t0\t0\t204\t16\n20\t12\t0\t0\t0\t5\t16\n21\t12\t0\t0\t0\t0\t-1\n22\t12\t0\t0\t0\t0\t-1\n23\t12\t0\t0\t0\t0\t-1\n24\t12\t0\t0\t0\t0\t-1\n25\t12\t0\t0\t0\t99\t16\n26\t12\t0\t0\t0\t255\t16\n27\t12\t0\t0\t0\t255\t16\n28\t12\t0\t0\t0\t255\t16\n29\t12\t0\t0\t0\t255\t16\n30\t12\t0\t0\t0\t255\t16\n31\t12\t0\t0\t0\t255\t16\n32\t12\t0\t0\t0\t232\t16\n33\t12\t0\t0\t0\t2\t16\n34\t12\t0\t0\t0\t0\t-1\n35\t12\t0\t0\t0\t0\t-1\n36\t12\t0\t0\t0\t0\t-1\n37\t12\t0\t0\t0\t82\t16\n38\t12\t0\t0\t0\t254\t16\n39\t12\t0\t0\t0\t255\t16\n40\t12\t0\t0\t0\t255\t16\n41\t12\t0\t0\t0\t255\t16\n42\t12\t0\t0\t0\t255\t16\n43\t12\t0\t0\t0\t255\t16\n44\t12\t0\t0\t0\t255\t16\n45\t12\t0\t0\t0\t255\t16\n46\t12\t0\t0\t0\t255\t16\n47\t12\t0\t0\t0\t255\t16\n48\t12\t0\t0\t0\t255\t16\n49\t12\t0\t0\t0\t255\t16\n50\t12\t0\t0\t0\t255\t16\n51\t12\t0\t0\t0\t255\t16\n52\t12\t0\t0\t0\t255\t16\n53\t12\t0\t0\t0\t255\t16\n54\t12\t0\t0\t0\t190\t16\n55\t12\t0\t0\t0\t1\t16\n56\t12\t0\t0\t0\t0\t-1\n57\t12\t0\t0\t0\t63\t16\n58\t12\t0\t0\t0\t255\t16\n59\t12\t0\t0\t0\t255\t16\n60\t12\t0\t0\t0\t255\t16\n61\t12\t0\t0\t0\t255\t16\n62\t12\t0\t0\t0\t255\t16\n63\t12\t0\t0\t0\t255\t16\n64\t12\t0\t0\t0\t255\t16\n65\t12\t0\t0\t0\t89\t16\n66\t12\t0\t0\t0\t0\t-1\n67\t12\t0\t0\t0\t144\t16\n68\t12\t0\t0\t0\t255\t16\n69\t12\t0\t0\t0\t255\t16\n70\t12\t0\t0\t0\t255\t16\n71\t12\t0\t0\t0\t255\t16\n72\t12\t0\t0\t0\t255\t16\n73\t12\t0\t0\t0\t255\t16\n74\t12\t0\t0\t0\t232\t16\n75\t12\t0\t0\t0\t2\t16\n76\t12\t0\t0\t0\t0\t-1\n77\t12\t0\t0\t0\t0\t-1\n78\t12\t0\t0\t0\t0\t-1\n79\t12\t0\t0\t0\t0\t-1\n80\t12\t0\t0\t0\t0\t-1\n81\t12\t0\t0\t0\t0\t-1\n82\t12\t0\t0\t0\t43\t16\n83\t12\t0\t0\t0\t246\t16\n84\t12\t0\t0\t0\t255\t16\n85\t12\t0\t0\t0\t255\t16\n86\t12\t0\t0\t0\t255\t16\n87\t12\t0\t0\t0\t255\t16\n88\t12\t0\t0\t0\t255\t16\n89\t12\t0\t0\t0\t255\t16\n90\t12\t0\t0\t0\t118\t16\n91\t12\t0\t0\t0\t0\t-1\n92\t12\t0\t0\t0\t160\t16\n93\t12\t0\t0\t0\t255\t16\n94\t12\t0\t0\t0\t255\t16\n95\t12\t0\t0\t0\t255\t16\n96\t12\t0\t0\t0\t255\t16\n97\t12\t0\t0\t0\t255\t16\n98\t12\t0\t0\t0\t255\t16\n99\t12\t0\t0\t0\t233\t16\n100\t12\t0\t0\t0\t17\t16\n101\t12\t0\t0\t0\t0\t-1\n102\t12\t0\t0\t0\t0\t-1\n103\t12\t0\t0\t0\t10\t16\n104\t12\t0\t0\t0\t255\t16\n105\t12\t0\t0\t0\t255\t16\n106\t12\t0\t0\t0\t255\t16\n107\t12\t0\t0\t0\t255\t16\n108\t12\t0\t0\t0\t255\t16\n109\t12\t0\t0\t0\t255\t16\n110\t12\t0\t0\t0\t114\t16\n111\t12\t0\t0\t0\t0\t-1\n112\t12\t0\t0\t0\t0\t-1\n113\t12\t0\t0\t0\t0\t-1\n114\t12\t0\t0\t0\t0\t-1\n115\t12\t0\t0\t0\t0\t-1\n116\t12\t0\t0\t0\t0\t-1\n117\t12\t0\t0\t0\t149\t16\n118\t12\t0\t0\t0\t255\t16\n119\t12\t0\t0\t0\t255\t16\n120\t12\t0\t0\t0\t255\t16\n121\t12\t0\t0\t0\t255\t16\n122\t12\t0\t0\t0\t255\t16\n123\t12\t0\t0\t0\t255\t16\n124\t12\t0\t0\t0\t243\t16\n125\t12\t0\t0\t0\t6\t16\n126\t12\t0\t0\t0\t0\t-1\n127\t12\t0\t0\t0\t0\t-1\n128\t12\t0\t0\t0\t0\t-1\n129\t12\t0\t0\t0\t0\t-1\n130\t12\t0\t0\t0\t176\t16\n131\t12\t0\t0\t0\t255\t16\n132\t12\t0\t0\t0\t255\t16\n133\t12\t0\t0\t0\t255\t16\n134\t12\t0\t0\t0\t255\t16\n135\t12\t0\t0\t0\t255\t16\n136\t12\t0\t0\t0\t255\t16\n137\t12\t0\t0\t0\t229\t16\n138\t12\t0\t0\t0\t14\t16\n139\t12\t0\t0\t0\t0\t-1\n140\t12\t0\t0\t0\t0\t-1\n141\t12\t0\t0\t0\t13\t16\n142\t12\t0\t0\t0\t255\t16\n143\t12\t0\t0\t0\t255\t16\n144\t12\t0\t0\t0\t255\t16\n145\t12\t0\t0\t0\t255\t16\n146\t12\t0\t0\t0\t255\t16\n147\t12\t0\t0\t0\t255\t16\n148\t12\t0\t0\t0\t109\t16\n149\t12\t0\t0\t0\t0\t-1\n0\t13\t0\t0\t0\t0\t-1\n1\t13\t0\t0\t0\t161\t16\n2\t13\t0\t0\t0\t255\t16\n3\t13\t0\t0\t0\t255\t16\n4\t13\t0\t0\t0\t255\t16\n5\t13\t0\t0\t0\t255\t16\n6\t13\t0\t0\t0\t255\t16\n7\t13\t0\t0\t0\t255\t16\n8\t13\t0\t0\t0\t21\t16\n9\t13\t0\t0\t0\t0\t-1\n10\t13\t0\t0\t0\t5\t16\n11\t13\t0\t0\t0\t205\t16\n12\t13\t0\t0\t0\t255\t16\n13\t13\t0\t0\t0\t255\t16\n14\t13\t0\t0\t0\t255\t16\n15\t13\t0\t0\t0\t255\t16\n16\t13\t0\t0\t0\t255\t16\n17\t13\t0\t0\t0\t255\t16\n18\t13\t0\t0\t0\t247\t16\n19\t13\t0\t0\t0\t42\t16\n20\t13\t0\t0\t0\t0\t-1\n21\t13\t0\t0\t0\t0\t-1\n22\t13\t0\t0\t0\t0\t-1\n23\t13\t0\t0\t0\t0\t-1\n24\t13\t0\t0\t0\t0\t-1\n25\t13\t0\t0\t0\t178\t16\n26\t13\t0\t0\t0\t255\t16\n27\t13\t0\t0\t0\t255\t16\n28\t13\t0\t0\t0\t255\t16\n29\t13\t0\t0\t0\t255\t16\n30\t13\t0\t0\t0\t255\t16\n31\t13\t0\t0\t0\t255\t16\n32\t13\t0\t0\t0\t160\t16\n33\t13\t0\t0\t0\t0\t-1\n34\t13\t0\t0\t0\t0\t-1\n35\t13\t0\t0\t0\t0\t-1\n36\t13\t0\t0\t0\t0\t-1\n37\t13\t0\t0\t0\t0\t-1\n38\t13\t0\t0\t0\t111\t16\n39\t13\t0\t0\t0\t253\t16\n40\t13\t0\t0\t0\t255\t16\n41\t13\t0\t0\t0\t255\t16\n42\t13\t0\t0\t0\t255\t16\n43\t13\t0\t0\t0\t255\t16\n44\t13\t0\t0\t0\t255\t16\n45\t13\t0\t0\t0\t255\t16\n46\t13\t0\t0\t0\t255\t16\n47\t13\t0\t0\t0\t255\t16\n48\t13\t0\t0\t0\t255\t16\n49\t13\t0\t0\t0\t255\t16\n50\t13\t0\t0\t0\t255\t16\n51\t13\t0\t0\t0\t255\t16\n52\t13\t0\t0\t0\t255\t16\n53\t13\t0\t0\t0\t255\t16\n54\t13\t0\t0\t0\t255\t16\n55\t13\t0\t0\t0\t68\t16\n56\t13\t0\t0\t0\t0\t-1\n57\t13\t0\t0\t0\t132\t16\n58\t13\t0\t0\t0\t255\t16\n59\t13\t0\t0\t0\t255\t16\n60\t13\t0\t0\t0\t255\t16\n61\t13\t0\t0\t0\t255\t16\n62\t13\t0\t0\t0\t255\t16\n63\t13\t0\t0\t0\t255\t16\n64\t13\t0\t0\t0\t253\t16\n65\t13\t0\t0\t0\t20\t16\n66\t13\t0\t0\t0\t0\t-1\n67\t13\t0\t0\t0\t222\t16\n68\t13\t0\t0\t0\t255\t16\n69\t13\t0\t0\t0\t255\t16\n70\t13\t0\t0\t0\t255\t16\n71\t13\t0\t0\t0\t255\t16\n72\t13\t0\t0\t0\t255\t16\n73\t13\t0\t0\t0\t255\t16\n74\t13\t0\t0\t0\t156\t16\n75\t13\t0\t0\t0\t0\t-1\n76\t13\t0\t0\t0\t0\t-1\n77\t13\t0\t0\t0\t0\t-1\n78\t13\t0\t0\t0\t0\t-1\n79\t13\t0\t0\t0\t0\t-1\n80\t13\t0\t0\t0\t0\t-1\n81\t13\t0\t0\t0\t20\t16\n82\t13\t0\t0\t0\t223\t16\n83\t13\t0\t0\t0\t255\t16\n84\t13\t0\t0\t0\t255\t16\n85\t13\t0\t0\t0\t255\t16\n86\t13\t0\t0\t0\t255\t16\n87\t13\t0\t0\t0\t255\t16\n88\t13\t0\t0\t0\t255\t16\n89\t13\t0\t0\t0\t224\t16\n90\t13\t0\t0\t0\t8\t16\n91\t13\t0\t0\t0\t81\t16\n92\t13\t0\t0\t0\t255\t16\n93\t13\t0\t0\t0\t255\t16\n94\t13\t0\t0\t0\t255\t16\n95\t13\t0\t0\t0\t255\t16\n96\t13\t0\t0\t0\t255\t16\n97\t13\t0\t0\t0\t255\t16\n98\t13\t0\t0\t0\t255\t16\n99\t13\t0\t0\t0\t93\t16\n100\t13\t0\t0\t0\t0\t-1\n101\t13\t0\t0\t0\t0\t-1\n102\t13\t0\t0\t0\t0\t-1\n103\t13\t0\t0\t0\t0\t-1\n104\t13\t0\t0\t0\t236\t16\n105\t13\t0\t0\t0\t255\t16\n106\t13\t0\t0\t0\t255\t16\n107\t13\t0\t0\t0\t255\t16\n108\t13\t0\t0\t0\t255\t16\n109\t13\t0\t0\t0\t255\t16\n110\t13\t0\t0\t0\t149\t16\n111\t13\t0\t0\t0\t0\t-1\n112\t13\t0\t0\t0\t0\t-1\n113\t13\t0\t0\t0\t0\t-1\n114\t13\t0\t0\t0\t0\t-1\n115\t13\t0\t0\t0\t0\t-1\n116\t13\t0\t0\t0\t0\t-1\n117\t13\t0\t0\t0\t218\t16\n118\t13\t0\t0\t0\t255\t16\n119\t13\t0\t0\t0\t255\t16\n120\t13\t0\t0\t0\t255\t16\n121\t13\t0\t0\t0\t255\t16\n122\t13\t0\t0\t0\t255\t16\n123\t13\t0\t0\t0\t255\t16\n124\t13\t0\t0\t0\t181\t16\n125\t13\t0\t0\t0\t0\t-1\n126\t13\t0\t0\t0\t0\t-1\n127\t13\t0\t0\t0\t0\t-1\n128\t13\t0\t0\t0\t0\t-1\n129\t13\t0\t0\t0\t86\t16\n130\t13\t0\t0\t0\t255\t16\n131\t13\t0\t0\t0\t255\t16\n132\t13\t0\t0\t0\t255\t16\n133\t13\t0\t0\t0\t255\t16\n134\t13\t0\t0\t0\t255\t16\n135\t13\t0\t0\t0\t255\t16\n136\t13\t0\t0\t0\t255\t16\n137\t13\t0\t0\t0\t89\t16\n138\t13\t0\t0\t0\t0\t-1\n139\t13\t0\t0\t0\t0\t-1\n140\t13\t0\t0\t0\t0\t-1\n141\t13\t0\t0\t0\t0\t-1\n142\t13\t0\t0\t0\t240\t16\n143\t13\t0\t0\t0\t255\t16\n144\t13\t0\t0\t0\t255\t16\n145\t13\t0\t0\t0\t255\t16\n146\t13\t0\t0\t0\t255\t16\n147\t13\t0\t0\t0\t255\t16\n148\t13\t0\t0\t0\t144\t16\n149\t13\t0\t0\t0\t0\t-1\n0\t14\t0\t0\t0\t0\t-1\n1\t14\t0\t0\t0\t135\t16\n2\t14\t0\t0\t0\t255\t16\n3\t14\t0\t0\t0\t255\t16\n4\t14\t0\t0\t0\t255\t16\n5\t14\t0\t0\t0\t255\t16\n6\t14\t0\t0\t0\t255\t16\n7\t14\t0\t0\t0\t255\t16\n8\t14\t0\t0\t0\t51\t16\n9\t14\t0\t0\t0\t0\t-1\n10\t14\t0\t0\t0\t120\t16\n11\t14\t0\t0\t0\t255\t16\n12\t14\t0\t0\t0\t255\t16\n13\t14\t0\t0\t0\t255\t16\n14\t14\t0\t0\t0\t255\t16\n15\t14\t0\t0\t0\t255\t16\n16\t14\t0\t0\t0\t255\t16\n17\t14\t0\t0\t0\t255\t16\n18\t14\t0\t0\t0\t121\t16\n19\t14\t0\t0\t0\t0\t-1\n20\t14\t0\t0\t0\t0\t-1\n21\t14\t0\t0\t0\t0\t-1\n22\t14\t0\t0\t0\t0\t-1\n23\t14\t0\t0\t0\t0\t-1\n24\t14\t0\t0\t0\t11\t16\n25\t14\t0\t0\t0\t246\t16\n26\t14\t0\t0\t0\t255\t16\n27\t14\t0\t0\t0\t255\t16\n28\t14\t0\t0\t0\t255\t16\n29\t14\t0\t0\t0\t255\t16\n30\t14\t0\t0\t0\t255\t16\n31\t14\t0\t0\t0\t255\t16\n32\t14\t0\t0\t0\t86\t16\n33\t14\t0\t0\t0\t0\t-1\n34\t14\t0\t0\t0\t0\t-1\n35\t14\t0\t0\t0\t0\t-1\n36\t14\t0\t0\t0\t0\t-1\n37\t14\t0\t0\t0\t0\t-1\n38\t14\t0\t0\t0\t0\t-1\n39\t14\t0\t0\t0\t66\t16\n40\t14\t0\t0\t0\t214\t16\n41\t14\t0\t0\t0\t255\t16\n42\t14\t0\t0\t0\t255\t16\n43\t14\t0\t0\t0\t255\t16\n44\t14\t0\t0\t0\t255\t16\n45\t14\t0\t0\t0\t255\t16\n46\t14\t0\t0\t0\t255\t16\n47\t14\t0\t0\t0\t255\t16\n48\t14\t0\t0\t0\t255\t16\n49\t14\t0\t0\t0\t255\t16\n50\t14\t0\t0\t0\t255\t16\n51\t14\t0\t0\t0\t255\t16\n52\t14\t0\t0\t0\t255\t16\n53\t14\t0\t0\t0\t255\t16\n54\t14\t0\t0\t0\t255\t16\n55\t14\t0\t0\t0\t157\t16\n56\t14\t0\t0\t0\t0\t-1\n57\t14\t0\t0\t0\t201\t16\n58\t14\t0\t0\t0\t255\t16\n59\t14\t0\t0\t0\t255\t16\n60\t14\t0\t0\t0\t255\t16\n61\t14\t0\t0\t0\t255\t16\n62\t14\t0\t0\t0\t255\t16\n63\t14\t0\t0\t0\t255\t16\n64\t14\t0\t0\t0\t206\t16\n65\t14\t0\t0\t0\t0\t-1\n66\t14\t0\t0\t0\t40\t16\n67\t14\t0\t0\t0\t255\t16\n68\t14\t0\t0\t0\t255\t16\n69\t14\t0\t0\t0\t255\t16\n70\t14\t0\t0\t0\t255\t16\n71\t14\t0\t0\t0\t255\t16\n72\t14\t0\t0\t0\t255\t16\n73\t14\t0\t0\t0\t255\t16\n74\t14\t0\t0\t0\t84\t16\n75\t14\t0\t0\t0\t0\t-1\n76\t14\t0\t0\t0\t0\t-1\n77\t14\t0\t0\t0\t0\t-1\n78\t14\t0\t0\t0\t0\t-1\n79\t14\t0\t0\t0\t0\t-1\n80\t14\t0\t0\t0\t7\t16\n81\t14\t0\t0\t0\t184\t16\n82\t14\t0\t0\t0\t255\t16\n83\t14\t0\t0\t0\t255\t16\n84\t14\t0\t0\t0\t255\t16\n85\t14\t0\t0\t0\t255\t16\n86\t14\t0\t0\t0\t255\t16\n87\t14\t0\t0\t0\t255\t16\n88\t14\t0\t0\t0\t255\t16\n89\t14\t0\t0\t0\t98\t16\n90\t14\t0\t0\t0\t18\t16\n91\t14\t0\t0\t0\t230\t16\n92\t14\t0\t0\t0\t255\t16\n93\t14\t0\t0\t0\t255\t16\n94\t14\t0\t0\t0\t255\t16\n95\t14\t0\t0\t0\t255\t16\n96\t14\t0\t0\t0\t255\t16\n97\t14\t0\t0\t0\t255\t16\n98\t14\t0\t0\t0\t189\t16\n99\t14\t0\t0\t0\t0\t-1\n100\t14\t0\t0\t0\t0\t-1\n101\t14\t0\t0\t0\t0\t-1\n102\t14\t0\t0\t0\t0\t-1\n103\t14\t0\t0\t0\t0\t-1\n104\t14\t0\t0\t0\t207\t16\n105\t14\t0\t0\t0\t255\t16\n106\t14\t0\t0\t0\t255\t16\n107\t14\t0\t0\t0\t255\t16\n108\t14\t0\t0\t0\t255\t16\n109\t14\t0\t0\t0\t255\t16\n110\t14\t0\t0\t0\t184\t16\n111\t14\t0\t0\t0\t0\t-1\n112\t14\t0\t0\t0\t0\t-1\n113\t14\t0\t0\t0\t0\t-1\n114\t14\t0\t0\t0\t0\t-1\n115\t14\t0\t0\t0\t0\t-1\n116\t14\t0\t0\t0\t32\t16\n117\t14\t0\t0\t0\t255\t16\n118\t14\t0\t0\t0\t255\t16\n119\t14\t0\t0\t0\t255\t16\n120\t14\t0\t0\t0\t255\t16\n121\t14\t0\t0\t0\t255\t16\n122\t14\t0\t0\t0\t255\t16\n123\t14\t0\t0\t0\t255\t16\n124\t14\t0\t0\t0\t112\t16\n125\t14\t0\t0\t0\t0\t-1\n126\t14\t0\t0\t0\t0\t-1\n127\t14\t0\t0\t0\t0\t-1\n128\t14\t0\t0\t0\t23\t16\n129\t14\t0\t0\t0\t235\t16\n130\t14\t0\t0\t0\t255\t16\n131\t14\t0\t0\t0\t255\t16\n132\t14\t0\t0\t0\t255\t16\n133\t14\t0\t0\t0\t255\t16\n134\t14\t0\t0\t0\t255\t16\n135\t14\t0\t0\t0\t255\t16\n136\t14\t0\t0\t0\t181\t16\n137\t14\t0\t0\t0\t0\t-1\n138\t14\t0\t0\t0\t0\t-1\n139\t14\t0\t0\t0\t0\t-1\n140\t14\t0\t0\t0\t0\t-1\n141\t14\t0\t0\t0\t0\t-1\n142\t14\t0\t0\t0\t211\t16\n143\t14\t0\t0\t0\t255\t16\n144\t14\t0\t0\t0\t255\t16\n145\t14\t0\t0\t0\t255\t16\n146\t14\t0\t0\t0\t255\t16\n147\t14\t0\t0\t0\t255\t16\n148\t14\t0\t0\t0\t179\t16\n149\t14\t0\t0\t0\t0\t-1\n0\t15\t0\t0\t0\t0\t-1\n1\t15\t0\t0\t0\t110\t16\n2\t15\t0\t0\t0\t255\t16\n3\t15\t0\t0\t0\t255\t16\n4\t15\t0\t0\t0\t255\t16\n5\t15\t0\t0\t0\t255\t16\n6\t15\t0\t0\t0\t255\t16\n7\t15\t0\t0\t0\t255\t16\n8\t15\t0\t0\t0\t80\t16\n9\t15\t0\t0\t0\t44\t16\n10\t15\t0\t0\t0\t248\t16\n11\t15\t0\t0\t0\t255\t16\n12\t15\t0\t0\t0\t255\t16\n13\t15\t0\t0\t0\t255\t16\n14\t15\t0\t0\t0\t255\t16\n15\t15\t0\t0\t0\t255\t16\n16\t15\t0\t0\t0\t255\t16\n17\t15\t0\t0\t0\t195\t16\n18\t15\t0\t0\t0\t2\t16\n19\t15\t0\t0\t0\t0\t-1\n20\t15\t0\t0\t0\t0\t-1\n21\t15\t0\t0\t0\t0\t-1\n22\t15\t0\t0\t0\t0\t-1\n23\t15\t0\t0\t0\t0\t-1\n24\t15\t0\t0\t0\t79\t16\n25\t15\t0\t0\t0\t255\t16\n26\t15\t0\t0\t0\t255\t16\n27\t15\t0\t0\t0\t255\t16\n28\t15\t0\t0\t0\t255\t16\n29\t15\t0\t0\t0\t255\t16\n30\t15\t0\t0\t0\t255\t16\n31\t15\t0\t0\t0\t250\t16\n32\t15\t0\t0\t0\t15\t16\n33\t15\t0\t0\t0\t0\t-1\n34\t15\t0\t0\t0\t0\t-1\n35\t15\t0\t0\t0\t0\t-1\n36\t15\t0\t0\t0\t0\t-1\n37\t15\t0\t0\t0\t0\t-1\n38\t15\t0\t0\t0\t0\t-1\n39\t15\t0\t0\t0\t0\t-1\n40\t15\t0\t0\t0\t3\t16\n41\t15\t0\t0\t0\t69\t16\n42\t15\t0\t0\t0\t128\t16\n43\t15\t0\t0\t0\t136\t16\n44\t15\t0\t0\t0\t136\t16\n45\t15\t0\t0\t0\t136\t16\n46\t15\t0\t0\t0\t136\t16\n47\t15\t0\t0\t0\t147\t16\n48\t15\t0\t0\t0\t229\t16\n49\t15\t0\t0\t0\t255\t16\n50\t15\t0\t0\t0\t255\t16\n51\t15\t0\t0\t0\t255\t16\n52\t15\t0\t0\t0\t255\t16\n53\t15\t0\t0\t0\t255\t16\n54\t15\t0\t0\t0\t255\t16\n55\t15\t0\t0\t0\t204\t16\n56\t15\t0\t0\t0\t18\t16\n57\t15\t0\t0\t0\t252\t16\n58\t15\t0\t0\t0\t255\t16\n59\t15\t0\t0\t0\t255\t16\n60\t15\t0\t0\t0\t255\t16\n61\t15\t0\t0\t0\t255\t16\n62\t15\t0\t0\t0\t255\t16\n63\t15\t0\t0\t0\t255\t16\n64\t15\t0\t0\t0\t136\t16\n65\t15\t0\t0\t0\t0\t-1\n66\t15\t0\t0\t0\t115\t16\n67\t15\t0\t0\t0\t255\t16\n68\t15\t0\t0\t0\t255\t16\n69\t15\t0\t0\t0\t255\t16\n70\t15\t0\t0\t0\t255\t16\n71\t15\t0\t0\t0\t255\t16\n72\t15\t0\t0\t0\t255\t16\n73\t15\t0\t0\t0\t249\t16\n74\t15\t0\t0\t0\t14\t16\n75\t15\t0\t0\t0\t0\t-1\n76\t15\t0\t0\t0\t0\t-1\n77\t15\t0\t0\t0\t0\t-1\n78\t15\t0\t0\t0\t0\t-1\n79\t15\t0\t0\t0\t13\t16\n80\t15\t0\t0\t0\t184\t16\n81\t15\t0\t0\t0\t255\t16\n82\t15\t0\t0\t0\t255\t16\n83\t15\t0\t0\t0\t255\t16\n84\t15\t0\t0\t0\t255\t16\n85\t15\t0\t0\t0\t255\t16\n86\t15\t0\t0\t0\t255\t16\n87\t15\t0\t0\t0\t255\t16\n88\t15\t0\t0\t0\t211\t16\n89\t15\t0\t0\t0\t3\t16\n90\t15\t0\t0\t0\t163\t16\n91\t15\t0\t0\t0\t255\t16\n92\t15\t0\t0\t0\t255\t16\n93\t15\t0\t0\t0\t255\t16\n94\t15\t0\t0\t0\t255\t16\n95\t15\t0\t0\t0\t255\t16\n96\t15\t0\t0\t0\t255\t16\n97\t15\t0\t0\t0\t248\t16\n98\t15\t0\t0\t0\t38\t16\n99\t15\t0\t0\t0\t0\t-1\n100\t15\t0\t0\t0\t0\t-1\n101\t15\t0\t0\t0\t0\t-1\n102\t15\t0\t0\t0\t0\t-1\n103\t15\t0\t0\t0\t0\t-1\n104\t15\t0\t0\t0\t178\t16\n105\t15\t0\t0\t0\t255\t16\n106\t15\t0\t0\t0\t255\t16\n107\t15\t0\t0\t0\t255\t16\n108\t15\t0\t0\t0\t255\t16\n109\t15\t0\t0\t0\t255\t16\n110\t15\t0\t0\t0\t219\t16\n111\t15\t0\t0\t0\t0\t-1\n112\t15\t0\t0\t0\t0\t-1\n113\t15\t0\t0\t0\t0\t-1\n114\t15\t0\t0\t0\t0\t-1\n115\t15\t0\t0\t0\t0\t-1\n116\t15\t0\t0\t0\t99\t16\n117\t15\t0\t0\t0\t255\t16\n118\t15\t0\t0\t0\t255\t16\n119\t15\t0\t0\t0\t255\t16\n120\t15\t0\t0\t0\t255\t16\n121\t15\t0\t0\t0\t255\t16\n122\t15\t0\t0\t0\t255\t16\n123\t15\t0\t0\t0\t255\t16\n124\t15\t0\t0\t0\t43\t16\n125\t15\t0\t0\t0\t0\t-1\n126\t15\t0\t0\t0\t0\t-1\n127\t15\t0\t0\t0\t0\t-1\n128\t15\t0\t0\t0\t176\t16\n129\t15\t0\t0\t0\t255\t16\n130\t15\t0\t0\t0\t255\t16\n131\t15\t0\t0\t0\t255\t16\n132\t15\t0\t0\t0\t255\t16\n133\t15\t0\t0\t0\t255\t16\n134\t15\t0\t0\t0\t255\t16\n135\t15\t0\t0\t0\t247\t16\n136\t15\t0\t0\t0\t36\t16\n137\t15\t0\t0\t0\t0\t-1\n138\t15\t0\t0\t0\t0\t-1\n139\t15\t0\t0\t0\t0\t-1\n140\t15\t0\t0\t0\t0\t-1\n141\t15\t0\t0\t0\t0\t-1\n142\t15\t0\t0\t0\t182\t16\n143\t15\t0\t0\t0\t255\t16\n144\t15\t0\t0\t0\t255\t16\n145\t15\t0\t0\t0\t255\t16\n146\t15\t0\t0\t0\t255\t16\n147\t15\t0\t0\t0\t255\t16\n148\t15\t0\t0\t0\t214\t16\n149\t15\t0\t0\t0\t0\t-1\n0\t16\t0\t0\t0\t0\t-1\n1\t16\t0\t0\t0\t85\t16\n2\t16\t0\t0\t0\t255\t16\n3\t16\t0\t0\t0\t255\t16\n4\t16\t0\t0\t0\t255\t16\n5\t16\t0\t0\t0\t255\t16\n6\t16\t0\t0\t0\t255\t16\n7\t16\t0\t0\t0\t255\t16\n8\t16\t0\t0\t0\t111\t16\n9\t16\t0\t0\t0\t197\t16\n10\t16\t0\t0\t0\t255\t16\n11\t16\t0\t0\t0\t255\t16\n12\t16\t0\t0\t0\t255\t16\n13\t16\t0\t0\t0\t255\t16\n14\t16\t0\t0\t0\t255\t16\n15\t16\t0\t0\t0\t255\t16\n16\t16\t0\t0\t0\t247\t16\n17\t16\t0\t0\t0\t42\t16\n18\t16\t0\t0\t0\t0\t-1\n19\t16\t0\t0\t0\t0\t-1\n20\t16\t0\t0\t0\t0\t-1\n21\t16\t0\t0\t0\t0\t-1\n22\t16\t0\t0\t0\t0\t-1\n23\t16\t0\t0\t0\t0\t-1\n24\t16\t0\t0\t0\t158\t16\n25\t16\t0\t0\t0\t255\t16\n26\t16\t0\t0\t0\t255\t16\n27\t16\t0\t0\t0\t255\t16\n28\t16\t0\t0\t0\t255\t16\n29\t16\t0\t0\t0\t255\t16\n30\t16\t0\t0\t0\t255\t16\n31\t16\t0\t0\t0\t192\t16\n32\t16\t0\t0\t0\t0\t-1\n33\t16\t0\t0\t0\t0\t-1\n34\t16\t0\t0\t0\t0\t-1\n35\t16\t0\t0\t0\t0\t-1\n36\t16\t0\t0\t0\t0\t-1\n37\t16\t0\t0\t0\t0\t-1\n38\t16\t0\t0\t0\t0\t-1\n39\t16\t0\t0\t0\t0\t-1\n40\t16\t0\t0\t0\t0\t-1\n41\t16\t0\t0\t0\t0\t-1\n42\t16\t0\t0\t0\t0\t-1\n43\t16\t0\t0\t0\t0\t-1\n44\t16\t0\t0\t0\t0\t-1\n45\t16\t0\t0\t0\t0\t-1\n46\t16\t0\t0\t0\t0\t-1\n47\t16\t0\t0\t0\t0\t-1\n48\t16\t0\t0\t0\t68\t16\n49\t16\t0\t0\t0\t255\t16\n50\t16\t0\t0\t0\t255\t16\n51\t16\t0\t0\t0\t255\t16\n52\t16\t0\t0\t0\t255\t16\n53\t16\t0\t0\t0\t255\t16\n54\t16\t0\t0\t0\t255\t16\n55\t16\t0\t0\t0\t206\t16\n56\t16\t0\t0\t0\t83\t16\n57\t16\t0\t0\t0\t255\t16\n58\t16\t0\t0\t0\t255\t16\n59\t16\t0\t0\t0\t255\t16\n60\t16\t0\t0\t0\t255\t16\n61\t16\t0\t0\t0\t255\t16\n62\t16\t0\t0\t0\t255\t16\n63\t16\t0\t0\t0\t255\t16\n64\t16\t0\t0\t0\t67\t16\n65\t16\t0\t0\t0\t0\t-1\n66\t16\t0\t0\t0\t189\t16\n67\t16\t0\t0\t0\t255\t16\n68\t16\t0\t0\t0\t255\t16\n69\t16\t0\t0\t0\t255\t16\n70\t16\t0\t0\t0\t255\t16\n71\t16\t0\t0\t0\t255\t16\n72\t16\t0\t0\t0\t255\t16\n73\t16\t0\t0\t0\t188\t16\n74\t16\t0\t0\t0\t0\t-1\n75\t16\t0\t0\t0\t0\t-1\n76\t16\t0\t0\t0\t0\t-1\n77\t16\t0\t0\t0\t0\t-1\n78\t16\t0\t0\t0\t45\t16\n79\t16\t0\t0\t0\t210\t16\n80\t16\t0\t0\t0\t255\t16\n81\t16\t0\t0\t0\t255\t16\n82\t16\t0\t0\t0\t255\t16\n83\t16\t0\t0\t0\t255\t16\n84\t16\t0\t0\t0\t255\t16\n85\t16\t0\t0\t0\t255\t16\n86\t16\t0\t0\t0\t255\t16\n87\t16\t0\t0\t0\t251\t16\n88\t16\t0\t0\t0\t56\t16\n89\t16\t0\t0\t0\t82\t16\n90\t16\t0\t0\t0\t255\t16\n91\t16\t0\t0\t0\t255\t16\n92\t16\t0\t0\t0\t255\t16\n93\t16\t0\t0\t0\t255\t16\n94\t16\t0\t0\t0\t255\t16\n95\t16\t0\t0\t0\t255\t16\n96\t16\t0\t0\t0\t255\t16\n97\t16\t0\t0\t0\t131\t16\n98\t16\t0\t0\t0\t0\t-1\n99\t16\t0\t0\t0\t0\t-1\n100\t16\t0\t0\t0\t0\t-1\n101\t16\t0\t0\t0\t0\t-1\n102\t16\t0\t0\t0\t0\t-1\n103\t16\t0\t0\t0\t0\t-1\n104\t16\t0\t0\t0\t150\t16\n105\t16\t0\t0\t0\t255\t16\n106\t16\t0\t0\t0\t255\t16\n107\t16\t0\t0\t0\t255\t16\n108\t16\t0\t0\t0\t255\t16\n109\t16\t0\t0\t0\t255\t16\n110\t16\t0\t0\t0\t250\t16\n111\t16\t0\t0\t0\t4\t16\n112\t16\t0\t0\t0\t0\t-1\n113\t16\t0\t0\t0\t0\t-1\n114\t16\t0\t0\t0\t0\t-1\n115\t16\t0\t0\t0\t0\t-1\n116\t16\t0\t0\t0\t167\t16\n117\t16\t0\t0\t0\t255\t16\n118\t16\t0\t0\t0\t255\t16\n119\t16\t0\t0\t0\t255\t16\n120\t16\t0\t0\t0\t255\t16\n121\t16\t0\t0\t0\t255\t16\n122\t16\t0\t0\t0\t255\t16\n123\t16\t0\t0\t0\t227\t16\n124\t16\t0\t0\t0\t0\t-1\n125\t16\t0\t0\t0\t0\t-1\n126\t16\t0\t0\t0\t0\t-1\n127\t16\t0\t0\t0\t87\t16\n128\t16\t0\t0\t0\t255\t16\n129\t16\t0\t0\t0\t255\t16\n130\t16\t0\t0\t0\t255\t16\n131\t16\t0\t0\t0\t255\t16\n132\t16\t0\t0\t0\t255\t16\n133\t16\t0\t0\t0\t255\t16\n134\t16\t0\t0\t0\t255\t16\n135\t16\t0\t0\t0\t127\t16\n136\t16\t0\t0\t0\t0\t-1\n137\t16\t0\t0\t0\t0\t-1\n138\t16\t0\t0\t0\t0\t-1\n139\t16\t0\t0\t0\t0\t-1\n140\t16\t0\t0\t0\t0\t-1\n141\t16\t0\t0\t0\t0\t-1\n142\t16\t0\t0\t0\t154\t16\n143\t16\t0\t0\t0\t255\t16\n144\t16\t0\t0\t0\t255\t16\n145\t16\t0\t0\t0\t255\t16\n146\t16\t0\t0\t0\t255\t16\n147\t16\t0\t0\t0\t255\t16\n148\t16\t0\t0\t0\t247\t16\n149\t16\t0\t0\t0\t2\t16\n0\t17\t0\t0\t0\t0\t-1\n1\t17\t0\t0\t0\t60\t16\n2\t17\t0\t0\t0\t255\t16\n3\t17\t0\t0\t0\t255\t16\n4\t17\t0\t0\t0\t255\t16\n5\t17\t0\t0\t0\t255\t16\n6\t17\t0\t0\t0\t255\t16\n7\t17\t0\t0\t0\t255\t16\n8\t17\t0\t0\t0\t233\t16\n9\t17\t0\t0\t0\t255\t16\n10\t17\t0\t0\t0\t255\t16\n11\t17\t0\t0\t0\t255\t16\n12\t17\t0\t0\t0\t255\t16\n13\t17\t0\t0\t0\t255\t16\n14\t17\t0\t0\t0\t255\t16\n15\t17\t0\t0\t0\t255\t16\n16\t17\t0\t0\t0\t116\t16\n17\t17\t0\t0\t0\t0\t-1\n18\t17\t0\t0\t0\t0\t-1\n19\t17\t0\t0\t0\t0\t-1\n20\t17\t0\t0\t0\t0\t-1\n21\t17\t0\t0\t0\t0\t-1\n22\t17\t0\t0\t0\t0\t-1\n23\t17\t0\t0\t0\t3\t16\n24\t17\t0\t0\t0\t234\t16\n25\t17\t0\t0\t0\t255\t16\n26\t17\t0\t0\t0\t255\t16\n27\t17\t0\t0\t0\t255\t16\n28\t17\t0\t0\t0\t255\t16\n29\t17\t0\t0\t0\t255\t16\n30\t17\t0\t0\t0\t255\t16\n31\t17\t0\t0\t0\t118\t16\n32\t17\t0\t0\t0\t0\t-1\n33\t17\t0\t0\t0\t0\t-1\n34\t17\t0\t0\t0\t0\t-1\n35\t17\t0\t0\t0\t0\t-1\n36\t17\t0\t0\t0\t0\t-1\n37\t17\t0\t0\t0\t0\t-1\n38\t17\t0\t0\t0\t0\t-1\n39\t17\t0\t0\t0\t0\t-1\n40\t17\t0\t0\t0\t0\t-1\n41\t17\t0\t0\t0\t0\t-1\n42\t17\t0\t0\t0\t0\t-1\n43\t17\t0\t0\t0\t0\t-1\n44\t17\t0\t0\t0\t0\t-1\n45\t17\t0\t0\t0\t0\t-1\n46\t17\t0\t0\t0\t0\t-1\n47\t17\t0\t0\t0\t0\t-1\n48\t17\t0\t0\t0\t97\t16\n49\t17\t0\t0\t0\t255\t16\n50\t17\t0\t0\t0\t255\t16\n51\t17\t0\t0\t0\t255\t16\n52\t17\t0\t0\t0\t255\t16\n53\t17\t0\t0\t0\t255\t16\n54\t17\t0\t0\t0\t255\t16\n55\t17\t0\t0\t0\t162\t16\n56\t17\t0\t0\t0\t151\t16\n57\t17\t0\t0\t0\t255\t16\n58\t17\t0\t0\t0\t255\t16\n59\t17\t0\t0\t0\t255\t16\n60\t17\t0\t0\t0\t255\t16\n61\t17\t0\t0\t0\t255\t16\n62\t17\t0\t0\t0\t255\t16\n63\t17\t0\t0\t0\t245\t16\n64\t17\t0\t0\t0\t8\t16\n65\t17\t0\t0\t0\t15\t16\n66\t17\t0\t0\t0\t250\t16\n67\t17\t0\t0\t0\t255\t16\n68\t17\t0\t0\t0\t255\t16\n69\t17\t0\t0\t0\t255\t16\n70\t17\t0\t0\t0\t255\t16\n71\t17\t0\t0\t0\t255\t16\n72\t17\t0\t0\t0\t255\t16\n73\t17\t0\t0\t0\t113\t16\n74\t17\t0\t0\t0\t0\t-1\n75\t17\t0\t0\t0\t0\t-1\n76\t17\t0\t0\t0\t55\t16\n77\t17\t0\t0\t0\t161\t16\n78\t17\t0\t0\t0\t250\t16\n79\t17\t0\t0\t0\t255\t16\n80\t17\t0\t0\t0\t255\t16\n81\t17\t0\t0\t0\t255\t16\n82\t17\t0\t0\t0\t255\t16\n83\t17\t0\t0\t0\t255\t16\n84\t17\t0\t0\t0\t255\t16\n85\t17\t0\t0\t0\t255\t16\n86\t17\t0\t0\t0\t255\t16\n87\t17\t0\t0\t0\t131\t16\n88\t17\t0\t0\t0\t22\t16\n89\t17\t0\t0\t0\t234\t16\n90\t17\t0\t0\t0\t255\t16\n91\t17\t0\t0\t0\t255\t16\n92\t17\t0\t0\t0\t255\t16\n93\t17\t0\t0\t0\t255\t16\n94\t17\t0\t0\t0\t255\t16\n95\t17\t0\t0\t0\t255\t16\n96\t17\t0\t0\t0\t220\t16\n97\t17\t0\t0\t0\t9\t16\n98\t17\t0\t0\t0\t0\t-1\n99\t17\t0\t0\t0\t0\t-1\n100\t17\t0\t0\t0\t0\t-1\n101\t17\t0\t0\t0\t0\t-1\n102\t17\t0\t0\t0\t0\t-1\n103\t17\t0\t0\t0\t0\t-1\n104\t17\t0\t0\t0\t121\t16\n105\t17\t0\t0\t0\t255\t16\n106\t17\t0\t0\t0\t255\t16\n107\t17\t0\t0\t0\t255\t16\n108\t17\t0\t0\t0\t255\t16\n109\t17\t0\t0\t0\t255\t16\n110\t17\t0\t0\t0\t255\t16\n111\t17\t0\t0\t0\t33\t16\n112\t17\t0\t0\t0\t0\t-1\n113\t17\t0\t0\t0\t0\t-1\n114\t17\t0\t0\t0\t0\t-1\n115\t17\t0\t0\t0\t2\t16\n116\t17\t0\t0\t0\t235\t16\n117\t17\t0\t0\t0\t255\t16\n118\t17\t0\t0\t0\t255\t16\n119\t17\t0\t0\t0\t255\t16\n120\t17\t0\t0\t0\t255\t16\n121\t17\t0\t0\t0\t255\t16\n122\t17\t0\t0\t0\t255\t16\n123\t17\t0\t0\t0\t161\t16\n124\t17\t0\t0\t0\t0\t-1\n125\t17\t0\t0\t0\t0\t-1\n126\t17\t0\t0\t0\t23\t16\n127\t17\t0\t0\t0\t236\t16\n128\t17\t0\t0\t0\t255\t16\n129\t17\t0\t0\t0\t255\t16\n130\t17\t0\t0\t0\t255\t16\n131\t17\t0\t0\t0\t255\t16\n132\t17\t0\t0\t0\t255\t16\n133\t17\t0\t0\t0\t255\t16\n134\t17\t0\t0\t0\t215\t16\n135\t17\t0\t0\t0\t6\t16\n136\t17\t0\t0\t0\t0\t-1\n137\t17\t0\t0\t0\t0\t-1\n138\t17\t0\t0\t0\t0\t-1\n139\t17\t0\t0\t0\t0\t-1\n140\t17\t0\t0\t0\t0\t-1\n141\t17\t0\t0\t0\t0\t-1\n142\t17\t0\t0\t0\t125\t16\n143\t17\t0\t0\t0\t255\t16\n144\t17\t0\t0\t0\t255\t16\n145\t17\t0\t0\t0\t255\t16\n146\t17\t0\t0\t0\t255\t16\n147\t17\t0\t0\t0\t255\t16\n148\t17\t0\t0\t0\t255\t16\n149\t17\t0\t0\t0\t29\t16\n0\t18\t0\t0\t0\t0\t-1\n1\t18\t0\t0\t0\t34\t16\n2\t18\t0\t0\t0\t255\t16\n3\t18\t0\t0\t0\t255\t16\n4\t18\t0\t0\t0\t255\t16\n5\t18\t0\t0\t0\t255\t16\n6\t18\t0\t0\t0\t255\t16\n7\t18\t0\t0\t0\t255\t16\n8\t18\t0\t0\t0\t255\t16\n9\t18\t0\t0\t0\t255\t16\n10\t18\t0\t0\t0\t255\t16\n11\t18\t0\t0\t0\t255\t16\n12\t18\t0\t0\t0\t255\t16\n13\t18\t0\t0\t0\t255\t16\n14\t18\t0\t0\t0\t255\t16\n15\t18\t0\t0\t0\t185\t16\n16\t18\t0\t0\t0\t1\t16\n17\t18\t0\t0\t0\t0\t-1\n18\t18\t0\t0\t0\t0\t-1\n19\t18\t0\t0\t0\t0\t-1\n20\t18\t0\t0\t0\t0\t-1\n21\t18\t0\t0\t0\t0\t-1\n22\t18\t0\t0\t0\t0\t-1\n23\t18\t0\t0\t0\t60\t16\n24\t18\t0\t0\t0\t255\t16\n25\t18\t0\t0\t0\t255\t16\n26\t18\t0\t0\t0\t255\t16\n27\t18\t0\t0\t0\t255\t16\n28\t18\t0\t0\t0\t255\t16\n29\t18\t0\t0\t0\t255\t16\n30\t18\t0\t0\t0\t255\t16\n31\t18\t0\t0\t0\t43\t16\n32\t18\t0\t0\t0\t0\t-1\n33\t18\t0\t0\t0\t0\t-1\n34\t18\t0\t0\t0\t45\t16\n35\t18\t0\t0\t0\t184\t16\n36\t18\t0\t0\t0\t187\t16\n37\t18\t0\t0\t0\t187\t16\n38\t18\t0\t0\t0\t187\t16\n39\t18\t0\t0\t0\t187\t16\n40\t18\t0\t0\t0\t187\t16\n41\t18\t0\t0\t0\t187\t16\n42\t18\t0\t0\t0\t187\t16\n43\t18\t0\t0\t0\t187\t16\n44\t18\t0\t0\t0\t187\t16\n45\t18\t0\t0\t0\t187\t16\n46\t18\t0\t0\t0\t187\t16\n47\t18\t0\t0\t0\t213\t16\n48\t18\t0\t0\t0\t253\t16\n49\t18\t0\t0\t0\t255\t16\n50\t18\t0\t0\t0\t255\t16\n51\t18\t0\t0\t0\t255\t16\n52\t18\t0\t0\t0\t255\t16\n53\t18\t0\t0\t0\t255\t16\n54\t18\t0\t0\t0\t255\t16\n55\t18\t0\t0\t0\t76\t16\n56\t18\t0\t0\t0\t220\t16\n57\t18\t0\t0\t0\t255\t16\n58\t18\t0\t0\t0\t255\t16\n59\t18\t0\t0\t0\t255\t16\n60\t18\t0\t0\t0\t255\t16\n61\t18\t0\t0\t0\t255\t16\n62\t18\t0\t0\t0\t255\t16\n63\t18\t0\t0\t0\t184\t16\n64\t18\t0\t0\t0\t0\t-1\n65\t18\t0\t0\t0\t85\t16\n66\t18\t0\t0\t0\t255\t16\n67\t18\t0\t0\t0\t255\t16\n68\t18\t0\t0\t0\t255\t16\n69\t18\t0\t0\t0\t255\t16\n70\t18\t0\t0\t0\t255\t16\n71\t18\t0\t0\t0\t255\t16\n72\t18\t0\t0\t0\t255\t16\n73\t18\t0\t0\t0\t204\t16\n74\t18\t0\t0\t0\t189\t16\n75\t18\t0\t0\t0\t231\t16\n76\t18\t0\t0\t0\t255\t16\n77\t18\t0\t0\t0\t255\t16\n78\t18\t0\t0\t0\t255\t16\n79\t18\t0\t0\t0\t255\t16\n80\t18\t0\t0\t0\t255\t16\n81\t18\t0\t0\t0\t255\t16\n82\t18\t0\t0\t0\t255\t16\n83\t18\t0\t0\t0\t255\t16\n84\t18\t0\t0\t0\t255\t16\n85\t18\t0\t0\t0\t255\t16\n86\t18\t0\t0\t0\t193\t16\n87\t18\t0\t0\t0\t5\t16\n88\t18\t0\t0\t0\t160\t16\n89\t18\t0\t0\t0\t255\t16\n90\t18\t0\t0\t0\t255\t16\n91\t18\t0\t0\t0\t255\t16\n92\t18\t0\t0\t0\t255\t16\n93\t18\t0\t0\t0\t255\t16\n94\t18\t0\t0\t0\t255\t16\n95\t18\t0\t0\t0\t255\t16\n96\t18\t0\t0\t0\t223\t16\n97\t18\t0\t0\t0\t187\t16\n98\t18\t0\t0\t0\t187\t16\n99\t18\t0\t0\t0\t187\t16\n100\t18\t0\t0\t0\t187\t16\n101\t18\t0\t0\t0\t187\t16\n102\t18\t0\t0\t0\t187\t16\n103\t18\t0\t0\t0\t179\t16\n104\t18\t0\t0\t0\t99\t16\n105\t18\t0\t0\t0\t255\t16\n106\t18\t0\t0\t0\t255\t16\n107\t18\t0\t0\t0\t255\t16\n108\t18\t0\t0\t0\t255\t16\n109\t18\t0\t0\t0\t255\t16\n110\t18\t0\t0\t0\t255\t16\n111\t18\t0\t0\t0\t67\t16\n112\t18\t0\t0\t0\t0\t-1\n113\t18\t0\t0\t0\t0\t-1\n114\t18\t0\t0\t0\t0\t-1\n115\t18\t0\t0\t0\t49\t16\n116\t18\t0\t0\t0\t255\t16\n117\t18\t0\t0\t0\t255\t16\n118\t18\t0\t0\t0\t255\t16\n119\t18\t0\t0\t0\t255\t16\n120\t18\t0\t0\t0\t255\t16\n121\t18\t0\t0\t0\t255\t16\n122\t18\t0\t0\t0\t255\t16\n123\t18\t0\t0\t0\t93\t16\n124\t18\t0\t0\t0\t0\t-1\n125\t18\t0\t0\t0\t0\t-1\n126\t18\t0\t0\t0\t168\t16\n127\t18\t0\t0\t0\t255\t16\n128\t18\t0\t0\t0\t255\t16\n129\t18\t0\t0\t0\t255\t16\n130\t18\t0\t0\t0\t255\t16\n131\t18\t0\t0\t0\t255\t16\n132\t18\t0\t0\t0\t255\t16\n133\t18\t0\t0\t0\t255\t16\n134\t18\t0\t0\t0\t222\t16\n135\t18\t0\t0\t0\t187\t16\n136\t18\t0\t0\t0\t187\t16\n137\t18\t0\t0\t0\t187\t16\n138\t18\t0\t0\t0\t187\t16\n139\t18\t0\t0\t0\t187\t16\n140\t18\t0\t0\t0\t187\t16\n141\t18\t0\t0\t0\t178\t16\n142\t18\t0\t0\t0\t102\t16\n143\t18\t0\t0\t0\t255\t16\n144\t18\t0\t0\t0\t255\t16\n145\t18\t0\t0\t0\t255\t16\n146\t18\t0\t0\t0\t255\t16\n147\t18\t0\t0\t0\t255\t16\n148\t18\t0\t0\t0\t255\t16\n149\t18\t0\t0\t0\t63\t16\n0\t19\t0\t0\t0\t0\t-1\n1\t19\t0\t0\t0\t8\t16\n2\t19\t0\t0\t0\t255\t16\n3\t19\t0\t0\t0\t255\t16\n4\t19\t0\t0\t0\t255\t16\n5\t19\t0\t0\t0\t255\t16\n6\t19\t0\t0\t0\t255\t16\n7\t19\t0\t0\t0\t255\t16\n8\t19\t0\t0\t0\t255\t16\n9\t19\t0\t0\t0\t255\t16\n10\t19\t0\t0\t0\t255\t16\n11\t19\t0\t0\t0\t255\t16\n12\t19\t0\t0\t0\t255\t16\n13\t19\t0\t0\t0\t255\t16\n14\t19\t0\t0\t0\t241\t16\n15\t19\t0\t0\t0\t31\t16\n16\t19\t0\t0\t0\t0\t-1\n17\t19\t0\t0\t0\t0\t-1\n18\t19\t0\t0\t0\t0\t-1\n19\t19\t0\t0\t0\t0\t-1\n20\t19\t0\t0\t0\t0\t-1\n21\t19\t0\t0\t0\t0\t-1\n22\t19\t0\t0\t0\t0\t-1\n23\t19\t0\t0\t0\t138\t16\n24\t19\t0\t0\t0\t255\t16\n25\t19\t0\t0\t0\t255\t16\n26\t19\t0\t0\t0\t255\t16\n27\t19\t0\t0\t0\t255\t16\n28\t19\t0\t0\t0\t255\t16\n29\t19\t0\t0\t0\t255\t16\n30\t19\t0\t0\t0\t223\t16\n31\t19\t0\t0\t0\t0\t-1\n32\t19\t0\t0\t0\t0\t-1\n33\t19\t0\t0\t0\t0\t-1\n34\t19\t0\t0\t0\t134\t16\n35\t19\t0\t0\t0\t255\t16\n36\t19\t0\t0\t0\t255\t16\n37\t19\t0\t0\t0\t255\t16\n38\t19\t0\t0\t0\t255\t16\n39\t19\t0\t0\t0\t255\t16\n40\t19\t0\t0\t0\t255\t16\n41\t19\t0\t0\t0\t255\t16\n42\t19\t0\t0\t0\t255\t16\n43\t19\t0\t0\t0\t255\t16\n44\t19\t0\t0\t0\t255\t16\n45\t19\t0\t0\t0\t255\t16\n46\t19\t0\t0\t0\t255\t16\n47\t19\t0\t0\t0\t255\t16\n48\t19\t0\t0\t0\t255\t16\n49\t19\t0\t0\t0\t255\t16\n50\t19\t0\t0\t0\t255\t16\n51\t19\t0\t0\t0\t255\t16\n52\t19\t0\t0\t0\t255\t16\n53\t19\t0\t0\t0\t255\t16\n54\t19\t0\t0\t0\t213\t16\n55\t19\t0\t0\t0\t38\t16\n56\t19\t0\t0\t0\t255\t16\n57\t19\t0\t0\t0\t255\t16\n58\t19\t0\t0\t0\t255\t16\n59\t19\t0\t0\t0\t255\t16\n60\t19\t0\t0\t0\t255\t16\n61\t19\t0\t0\t0\t255\t16\n62\t19\t0\t0\t0\t255\t16\n63\t19\t0\t0\t0\t115\t16\n64\t19\t0\t0\t0\t0\t-1\n65\t19\t0\t0\t0\t162\t16\n66\t19\t0\t0\t0\t255\t16\n67\t19\t0\t0\t0\t255\t16\n68\t19\t0\t0\t0\t255\t16\n69\t19\t0\t0\t0\t255\t16\n70\t19\t0\t0\t0\t255\t16\n71\t19\t0\t0\t0\t255\t16\n72\t19\t0\t0\t0\t255\t16\n73\t19\t0\t0\t0\t255\t16\n74\t19\t0\t0\t0\t255\t16\n75\t19\t0\t0\t0\t255\t16\n76\t19\t0\t0\t0\t255\t16\n77\t19\t0\t0\t0\t255\t16\n78\t19\t0\t0\t0\t255\t16\n79\t19\t0\t0\t0\t255\t16\n80\t19\t0\t0\t0\t255\t16\n81\t19\t0\t0\t0\t255\t16\n82\t19\t0\t0\t0\t255\t16\n83\t19\t0\t0\t0\t255\t16\n84\t19\t0\t0\t0\t255\t16\n85\t19\t0\t0\t0\t207\t16\n86\t19\t0\t0\t0\t13\t16\n87\t19\t0\t0\t0\t84\t16\n88\t19\t0\t0\t0\t255\t16\n89\t19\t0\t0\t0\t255\t16\n90\t19\t0\t0\t0\t255\t16\n91\t19\t0\t0\t0\t255\t16\n92\t19\t0\t0\t0\t255\t16\n93\t19\t0\t0\t0\t255\t16\n94\t19\t0\t0\t0\t255\t16\n95\t19\t0\t0\t0\t255\t16\n96\t19\t0\t0\t0\t255\t16\n97\t19\t0\t0\t0\t255\t16\n98\t19\t0\t0\t0\t255\t16\n99\t19\t0\t0\t0\t255\t16\n100\t19\t0\t0\t0\t255\t16\n101\t19\t0\t0\t0\t255\t16\n102\t19\t0\t0\t0\t255\t16\n103\t19\t0\t0\t0\t162\t16\n104\t19\t0\t0\t0\t64\t16\n105\t19\t0\t0\t0\t255\t16\n106\t19\t0\t0\t0\t255\t16\n107\t19\t0\t0\t0\t255\t16\n108\t19\t0\t0\t0\t255\t16\n109\t19\t0\t0\t0\t255\t16\n110\t19\t0\t0\t0\t255\t16\n111\t19\t0\t0\t0\t103\t16\n112\t19\t0\t0\t0\t0\t-1\n113\t19\t0\t0\t0\t0\t-1\n114\t19\t0\t0\t0\t0\t-1\n115\t19\t0\t0\t0\t118\t16\n116\t19\t0\t0\t0\t255\t16\n117\t19\t0\t0\t0\t255\t16\n118\t19\t0\t0\t0\t255\t16\n119\t19\t0\t0\t0\t255\t16\n120\t19\t0\t0\t0\t255\t16\n121\t19\t0\t0\t0\t255\t16\n122\t19\t0\t0\t0\t254\t16\n123\t19\t0\t0\t0\t24\t16\n124\t19\t0\t0\t0\t0\t-1\n125\t19\t0\t0\t0\t89\t16\n126\t19\t0\t0\t0\t255\t16\n127\t19\t0\t0\t0\t255\t16\n128\t19\t0\t0\t0\t255\t16\n129\t19\t0\t0\t0\t255\t16\n130\t19\t0\t0\t0\t255\t16\n131\t19\t0\t0\t0\t255\t16\n132\t19\t0\t0\t0\t255\t16\n133\t19\t0\t0\t0\t255\t16\n134\t19\t0\t0\t0\t255\t16\n135\t19\t0\t0\t0\t255\t16\n136\t19\t0\t0\t0\t255\t16\n137\t19\t0\t0\t0\t255\t16\n138\t19\t0\t0\t0\t255\t16\n139\t19\t0\t0\t0\t255\t16\n140\t19\t0\t0\t0\t255\t16\n141\t19\t0\t0\t0\t158\t16\n142\t19\t0\t0\t0\t68\t16\n143\t19\t0\t0\t0\t255\t16\n144\t19\t0\t0\t0\t255\t16\n145\t19\t0\t0\t0\t255\t16\n146\t19\t0\t0\t0\t255\t16\n147\t19\t0\t0\t0\t255\t16\n148\t19\t0\t0\t0\t255\t16\n149\t19\t0\t0\t0\t99\t16\n0\t20\t0\t0\t0\t0\t-1\n1\t20\t0\t0\t0\t0\t-1\n2\t20\t0\t0\t0\t238\t16\n3\t20\t0\t0\t0\t255\t16\n4\t20\t0\t0\t0\t255\t16\n5\t20\t0\t0\t0\t255\t16\n6\t20\t0\t0\t0\t255\t16\n7\t20\t0\t0\t0\t255\t16\n8\t20\t0\t0\t0\t255\t16\n9\t20\t0\t0\t0\t255\t16\n10\t20\t0\t0\t0\t255\t16\n11\t20\t0\t0\t0\t255\t16\n12\t20\t0\t0\t0\t255\t16\n13\t20\t0\t0\t0\t255\t16\n14\t20\t0\t0\t0\t99\t16\n15\t20\t0\t0\t0\t0\t-1\n16\t20\t0\t0\t0\t0\t-1\n17\t20\t0\t0\t0\t0\t-1\n18\t20\t0\t0\t0\t0\t-1\n19\t20\t0\t0\t0\t0\t-1\n20\t20\t0\t0\t0\t0\t-1\n21\t20\t0\t0\t0\t0\t-1\n22\t20\t0\t0\t0\t0\t-1\n23\t20\t0\t0\t0\t219\t16\n24\t20\t0\t0\t0\t255\t16\n25\t20\t0\t0\t0\t255\t16\n26\t20\t0\t0\t0\t255\t16\n27\t20\t0\t0\t0\t255\t16\n28\t20\t0\t0\t0\t255\t16\n29\t20\t0\t0\t0\t255\t16\n30\t20\t0\t0\t0\t149\t16\n31\t20\t0\t0\t0\t0\t-1\n32\t20\t0\t0\t0\t0\t-1\n33\t20\t0\t0\t0\t0\t-1\n34\t20\t0\t0\t0\t206\t16\n35\t20\t0\t0\t0\t255\t16\n36\t20\t0\t0\t0\t255\t16\n37\t20\t0\t0\t0\t255\t16\n38\t20\t0\t0\t0\t255\t16\n39\t20\t0\t0\t0\t255\t16\n40\t20\t0\t0\t0\t255\t16\n41\t20\t0\t0\t0\t255\t16\n42\t20\t0\t0\t0\t255\t16\n43\t20\t0\t0\t0\t255\t16\n44\t20\t0\t0\t0\t255\t16\n45\t20\t0\t0\t0\t255\t16\n46\t20\t0\t0\t0\t255\t16\n47\t20\t0\t0\t0\t255\t16\n48\t20\t0\t0\t0\t255\t16\n49\t20\t0\t0\t0\t255\t16\n50\t20\t0\t0\t0\t255\t16\n51\t20\t0\t0\t0\t255\t16\n52\t20\t0\t0\t0\t255\t16\n53\t20\t0\t0\t0\t252\t16\n54\t20\t0\t0\t0\t62\t16\n55\t20\t0\t0\t0\t102\t16\n56\t20\t0\t0\t0\t255\t16\n57\t20\t0\t0\t0\t255\t16\n58\t20\t0\t0\t0\t255\t16\n59\t20\t0\t0\t0\t255\t16\n60\t20\t0\t0\t0\t255\t16\n61\t20\t0\t0\t0\t255\t16\n62\t20\t0\t0\t0\t255\t16\n63\t20\t0\t0\t0\t45\t16\n64\t20\t0\t0\t0\t2\t16\n65\t20\t0\t0\t0\t233\t16\n66\t20\t0\t0\t0\t255\t16\n67\t20\t0\t0\t0\t255\t16\n68\t20\t0\t0\t0\t255\t16\n69\t20\t0\t0\t0\t255\t16\n70\t20\t0\t0\t0\t255\t16\n71\t20\t0\t0\t0\t255\t16\n72\t20\t0\t0\t0\t255\t16\n73\t20\t0\t0\t0\t255\t16\n74\t20\t0\t0\t0\t255\t16\n75\t20\t0\t0\t0\t255\t16\n76\t20\t0\t0\t0\t255\t16\n77\t20\t0\t0\t0\t255\t16\n78\t20\t0\t0\t0\t255\t16\n79\t20\t0\t0\t0\t255\t16\n80\t20\t0\t0\t0\t255\t16\n81\t20\t0\t0\t0\t255\t16\n82\t20\t0\t0\t0\t255\t16\n83\t20\t0\t0\t0\t255\t16\n84\t20\t0\t0\t0\t212\t16\n85\t20\t0\t0\t0\t30\t16\n86\t20\t0\t0\t0\t22\t16\n87\t20\t0\t0\t0\t235\t16\n88\t20\t0\t0\t0\t255\t16\n89\t20\t0\t0\t0\t255\t16\n90\t20\t0\t0\t0\t255\t16\n91\t20\t0\t0\t0\t255\t16\n92\t20\t0\t0\t0\t255\t16\n93\t20\t0\t0\t0\t255\t16\n94\t20\t0\t0\t0\t255\t16\n95\t20\t0\t0\t0\t255\t16\n96\t20\t0\t0\t0\t255\t16\n97\t20\t0\t0\t0\t255\t16\n98\t20\t0\t0\t0\t255\t16\n99\t20\t0\t0\t0\t255\t16\n100\t20\t0\t0\t0\t255\t16\n101\t20\t0\t0\t0\t255\t16\n102\t20\t0\t0\t0\t255\t16\n103\t20\t0\t0\t0\t63\t16\n104\t20\t0\t0\t0\t35\t16\n105\t20\t0\t0\t0\t255\t16\n106\t20\t0\t0\t0\t255\t16\n107\t20\t0\t0\t0\t255\t16\n108\t20\t0\t0\t0\t255\t16\n109\t20\t0\t0\t0\t255\t16\n110\t20\t0\t0\t0\t255\t16\n111\t20\t0\t0\t0\t138\t16\n112\t20\t0\t0\t0\t0\t-1\n113\t20\t0\t0\t0\t0\t-1\n114\t20\t0\t0\t0\t0\t-1\n115\t20\t0\t0\t0\t186\t16\n116\t20\t0\t0\t0\t255\t16\n117\t20\t0\t0\t0\t255\t16\n118\t20\t0\t0\t0\t255\t16\n119\t20\t0\t0\t0\t255\t16\n120\t20\t0\t0\t0\t255\t16\n121\t20\t0\t0\t0\t255\t16\n122\t20\t0\t0\t0\t211\t16\n123\t20\t0\t0\t0\t0\t-1\n124\t20\t0\t0\t0\t24\t16\n125\t20\t0\t0\t0\t236\t16\n126\t20\t0\t0\t0\t255\t16\n127\t20\t0\t0\t0\t255\t16\n128\t20\t0\t0\t0\t255\t16\n129\t20\t0\t0\t0\t255\t16\n130\t20\t0\t0\t0\t255\t16\n131\t20\t0\t0\t0\t255\t16\n132\t20\t0\t0\t0\t255\t16\n133\t20\t0\t0\t0\t255\t16\n134\t20\t0\t0\t0\t255\t16\n135\t20\t0\t0\t0\t255\t16\n136\t20\t0\t0\t0\t255\t16\n137\t20\t0\t0\t0\t255\t16\n138\t20\t0\t0\t0\t255\t16\n139\t20\t0\t0\t0\t255\t16\n140\t20\t0\t0\t0\t255\t16\n141\t20\t0\t0\t0\t59\t16\n142\t20\t0\t0\t0\t39\t16\n143\t20\t0\t0\t0\t255\t16\n144\t20\t0\t0\t0\t255\t16\n145\t20\t0\t0\t0\t255\t16\n146\t20\t0\t0\t0\t255\t16\n147\t20\t0\t0\t0\t255\t16\n148\t20\t0\t0\t0\t255\t16\n149\t20\t0\t0\t0\t134\t16\n0\t21\t0\t0\t0\t0\t-1\n1\t21\t0\t0\t0\t0\t-1\n2\t21\t0\t0\t0\t213\t16\n3\t21\t0\t0\t0\t255\t16\n4\t21\t0\t0\t0\t255\t16\n5\t21\t0\t0\t0\t255\t16\n6\t21\t0\t0\t0\t255\t16\n7\t21\t0\t0\t0\t255\t16\n8\t21\t0\t0\t0\t255\t16\n9\t21\t0\t0\t0\t255\t16\n10\t21\t0\t0\t0\t255\t16\n11\t21\t0\t0\t0\t255\t16\n12\t21\t0\t0\t0\t255\t16\n13\t21\t0\t0\t0\t179\t16\n14\t21\t0\t0\t0\t0\t-1\n15\t21\t0\t0\t0\t0\t-1\n16\t21\t0\t0\t0\t0\t-1\n17\t21\t0\t0\t0\t0\t-1\n18\t21\t0\t0\t0\t0\t-1\n19\t21\t0\t0\t0\t0\t-1\n20\t21\t0\t0\t0\t0\t-1\n21\t21\t0\t0\t0\t0\t-1\n22\t21\t0\t0\t0\t40\t16\n23\t21\t0\t0\t0\t255\t16\n24\t21\t0\t0\t0\t255\t16\n25\t21\t0\t0\t0\t255\t16\n26\t21\t0\t0\t0\t255\t16\n27\t21\t0\t0\t0\t255\t16\n28\t21\t0\t0\t0\t255\t16\n29\t21\t0\t0\t0\t255\t16\n30\t21\t0\t0\t0\t75\t16\n31\t21\t0\t0\t0\t0\t-1\n32\t21\t0\t0\t0\t0\t-1\n33\t21\t0\t0\t0\t27\t16\n34\t21\t0\t0\t0\t254\t16\n35\t21\t0\t0\t0\t255\t16\n36\t21\t0\t0\t0\t255\t16\n37\t21\t0\t0\t0\t255\t16\n38\t21\t0\t0\t0\t255\t16\n39\t21\t0\t0\t0\t255\t16\n40\t21\t0\t0\t0\t255\t16\n41\t21\t0\t0\t0\t255\t16\n42\t21\t0\t0\t0\t255\t16\n43\t21\t0\t0\t0\t255\t16\n44\t21\t0\t0\t0\t255\t16\n45\t21\t0\t0\t0\t255\t16\n46\t21\t0\t0\t0\t255\t16\n47\t21\t0\t0\t0\t255\t16\n48\t21\t0\t0\t0\t255\t16\n49\t21\t0\t0\t0\t255\t16\n50\t21\t0\t0\t0\t255\t16\n51\t21\t0\t0\t0\t255\t16\n52\t21\t0\t0\t0\t255\t16\n53\t21\t0\t0\t0\t107\t16\n54\t21\t0\t0\t0\t0\t-1\n55\t21\t0\t0\t0\t170\t16\n56\t21\t0\t0\t0\t255\t16\n57\t21\t0\t0\t0\t255\t16\n58\t21\t0\t0\t0\t255\t16\n59\t21\t0\t0\t0\t255\t16\n60\t21\t0\t0\t0\t255\t16\n61\t21\t0\t0\t0\t255\t16\n62\t21\t0\t0\t0\t230\t16\n63\t21\t0\t0\t0\t1\t16\n64\t21\t0\t0\t0\t55\t16\n65\t21\t0\t0\t0\t255\t16\n66\t21\t0\t0\t0\t255\t16\n67\t21\t0\t0\t0\t255\t16\n68\t21\t0\t0\t0\t255\t16\n69\t21\t0\t0\t0\t255\t16\n70\t21\t0\t0\t0\t255\t16\n71\t21\t0\t0\t0\t255\t16\n72\t21\t0\t0\t0\t255\t16\n73\t21\t0\t0\t0\t255\t16\n74\t21\t0\t0\t0\t255\t16\n75\t21\t0\t0\t0\t255\t16\n76\t21\t0\t0\t0\t255\t16\n77\t21\t0\t0\t0\t255\t16\n78\t21\t0\t0\t0\t255\t16\n79\t21\t0\t0\t0\t255\t16\n80\t21\t0\t0\t0\t255\t16\n81\t21\t0\t0\t0\t255\t16\n82\t21\t0\t0\t0\t255\t16\n83\t21\t0\t0\t0\t182\t16\n84\t21\t0\t0\t0\t14\t16\n85\t21\t0\t0\t0\t0\t-1\n86\t21\t0\t0\t0\t169\t16\n87\t21\t0\t0\t0\t255\t16\n88\t21\t0\t0\t0\t255\t16\n89\t21\t0\t0\t0\t255\t16\n90\t21\t0\t0\t0\t255\t16\n91\t21\t0\t0\t0\t255\t16\n92\t21\t0\t0\t0\t255\t16\n93\t21\t0\t0\t0\t255\t16\n94\t21\t0\t0\t0\t255\t16\n95\t21\t0\t0\t0\t255\t16\n96\t21\t0\t0\t0\t255\t16\n97\t21\t0\t0\t0\t255\t16\n98\t21\t0\t0\t0\t255\t16\n99\t21\t0\t0\t0\t255\t16\n100\t21\t0\t0\t0\t255\t16\n101\t21\t0\t0\t0\t255\t16\n102\t21\t0\t0\t0\t215\t16\n103\t21\t0\t0\t0\t0\t-1\n104\t21\t0\t0\t0\t7\t16\n105\t21\t0\t0\t0\t254\t16\n106\t21\t0\t0\t0\t255\t16\n107\t21\t0\t0\t0\t255\t16\n108\t21\t0\t0\t0\t255\t16\n109\t21\t0\t0\t0\t255\t16\n110\t21\t0\t0\t0\t255\t16\n111\t21\t0\t0\t0\t174\t16\n112\t21\t0\t0\t0\t0\t-1\n113\t21\t0\t0\t0\t0\t-1\n114\t21\t0\t0\t0\t9\t16\n115\t21\t0\t0\t0\t247\t16\n116\t21\t0\t0\t0\t255\t16\n117\t21\t0\t0\t0\t255\t16\n118\t21\t0\t0\t0\t255\t16\n119\t21\t0\t0\t0\t255\t16\n120\t21\t0\t0\t0\t255\t16\n121\t21\t0\t0\t0\t255\t16\n122\t21\t0\t0\t0\t142\t16\n123\t21\t0\t0\t0\t0\t-1\n124\t21\t0\t0\t0\t178\t16\n125\t21\t0\t0\t0\t255\t16\n126\t21\t0\t0\t0\t255\t16\n127\t21\t0\t0\t0\t255\t16\n128\t21\t0\t0\t0\t255\t16\n129\t21\t0\t0\t0\t255\t16\n130\t21\t0\t0\t0\t255\t16\n131\t21\t0\t0\t0\t255\t16\n132\t21\t0\t0\t0\t255\t16\n133\t21\t0\t0\t0\t255\t16\n134\t21\t0\t0\t0\t255\t16\n135\t21\t0\t0\t0\t255\t16\n136\t21\t0\t0\t0\t255\t16\n137\t21\t0\t0\t0\t255\t16\n138\t21\t0\t0\t0\t255\t16\n139\t21\t0\t0\t0\t255\t16\n140\t21\t0\t0\t0\t213\t16\n141\t21\t0\t0\t0\t0\t-1\n142\t21\t0\t0\t0\t10\t16\n143\t21\t0\t0\t0\t255\t16\n144\t21\t0\t0\t0\t255\t16\n145\t21\t0\t0\t0\t255\t16\n146\t21\t0\t0\t0\t255\t16\n147\t21\t0\t0\t0\t255\t16\n148\t21\t0\t0\t0\t255\t16\n149\t21\t0\t0\t0\t169\t16\n0\t22\t0\t0\t0\t0\t-1\n1\t22\t0\t0\t0\t0\t-1\n2\t22\t0\t0\t0\t187\t16\n3\t22\t0\t0\t0\t255\t16\n4\t22\t0\t0\t0\t255\t16\n5\t22\t0\t0\t0\t255\t16\n6\t22\t0\t0\t0\t255\t16\n7\t22\t0\t0\t0\t255\t16\n8\t22\t0\t0\t0\t255\t16\n9\t22\t0\t0\t0\t255\t16\n10\t22\t0\t0\t0\t255\t16\n11\t22\t0\t0\t0\t255\t16\n12\t22\t0\t0\t0\t236\t16\n13\t22\t0\t0\t0\t25\t16\n14\t22\t0\t0\t0\t0\t-1\n15\t22\t0\t0\t0\t0\t-1\n16\t22\t0\t0\t0\t0\t-1\n17\t22\t0\t0\t0\t0\t-1\n18\t22\t0\t0\t0\t0\t-1\n19\t22\t0\t0\t0\t0\t-1\n20\t22\t0\t0\t0\t0\t-1\n21\t22\t0\t0\t0\t0\t-1\n22\t22\t0\t0\t0\t119\t16\n23\t22\t0\t0\t0\t255\t16\n24\t22\t0\t0\t0\t255\t16\n25\t22\t0\t0\t0\t255\t16\n26\t22\t0\t0\t0\t255\t16\n27\t22\t0\t0\t0\t255\t16\n28\t22\t0\t0\t0\t255\t16\n29\t22\t0\t0\t0\t245\t16\n30\t22\t0\t0\t0\t9\t16\n31\t22\t0\t0\t0\t0\t-1\n32\t22\t0\t0\t0\t0\t-1\n33\t22\t0\t0\t0\t96\t16\n34\t22\t0\t0\t0\t255\t16\n35\t22\t0\t0\t0\t255\t16\n36\t22\t0\t0\t0\t255\t16\n37\t22\t0\t0\t0\t255\t16\n38\t22\t0\t0\t0\t255\t16\n39\t22\t0\t0\t0\t255\t16\n40\t22\t0\t0\t0\t255\t16\n41\t22\t0\t0\t0\t255\t16\n42\t22\t0\t0\t0\t255\t16\n43\t22\t0\t0\t0\t255\t16\n44\t22\t0\t0\t0\t255\t16\n45\t22\t0\t0\t0\t255\t16\n46\t22\t0\t0\t0\t255\t16\n47\t22\t0\t0\t0\t255\t16\n48\t22\t0\t0\t0\t255\t16\n49\t22\t0\t0\t0\t255\t16\n50\t22\t0\t0\t0\t255\t16\n51\t22\t0\t0\t0\t250\t16\n52\t22\t0\t0\t0\t109\t16\n53\t22\t0\t0\t0\t0\t-1\n54\t22\t0\t0\t0\t2\t16\n55\t22\t0\t0\t0\t236\t16\n56\t22\t0\t0\t0\t255\t16\n57\t22\t0\t0\t0\t255\t16\n58\t22\t0\t0\t0\t255\t16\n59\t22\t0\t0\t0\t255\t16\n60\t22\t0\t0\t0\t255\t16\n61\t22\t0\t0\t0\t255\t16\n62\t22\t0\t0\t0\t162\t16\n63\t22\t0\t0\t0\t0\t-1\n64\t22\t0\t0\t0\t132\t16\n65\t22\t0\t0\t0\t255\t16\n66\t22\t0\t0\t0\t255\t16\n67\t22\t0\t0\t0\t255\t16\n68\t22\t0\t0\t0\t255\t16\n69\t22\t0\t0\t0\t255\t16\n70\t22\t0\t0\t0\t255\t16\n71\t22\t0\t0\t0\t255\t16\n72\t22\t0\t0\t0\t255\t16\n73\t22\t0\t0\t0\t255\t16\n74\t22\t0\t0\t0\t255\t16\n75\t22\t0\t0\t0\t255\t16\n76\t22\t0\t0\t0\t255\t16\n77\t22\t0\t0\t0\t255\t16\n78\t22\t0\t0\t0\t255\t16\n79\t22\t0\t0\t0\t255\t16\n80\t22\t0\t0\t0\t255\t16\n81\t22\t0\t0\t0\t220\t16\n82\t22\t0\t0\t0\t77\t16\n83\t22\t0\t0\t0\t0\t-1\n84\t22\t0\t0\t0\t0\t-1\n85\t22\t0\t0\t0\t85\t16\n86\t22\t0\t0\t0\t255\t16\n87\t22\t0\t0\t0\t255\t16\n88\t22\t0\t0\t0\t255\t16\n89\t22\t0\t0\t0\t255\t16\n90\t22\t0\t0\t0\t255\t16\n91\t22\t0\t0\t0\t255\t16\n92\t22\t0\t0\t0\t255\t16\n93\t22\t0\t0\t0\t255\t16\n94\t22\t0\t0\t0\t255\t16\n95\t22\t0\t0\t0\t255\t16\n96\t22\t0\t0\t0\t255\t16\n97\t22\t0\t0\t0\t255\t16\n98\t22\t0\t0\t0\t255\t16\n99\t22\t0\t0\t0\t255\t16\n100\t22\t0\t0\t0\t255\t16\n101\t22\t0\t0\t0\t255\t16\n102\t22\t0\t0\t0\t119\t16\n103\t22\t0\t0\t0\t0\t-1\n104\t22\t0\t0\t0\t0\t-1\n105\t22\t0\t0\t0\t233\t16\n106\t22\t0\t0\t0\t255\t16\n107\t22\t0\t0\t0\t255\t16\n108\t22\t0\t0\t0\t255\t16\n109\t22\t0\t0\t0\t255\t16\n110\t22\t0\t0\t0\t255\t16\n111\t22\t0\t0\t0\t209\t16\n112\t22\t0\t0\t0\t0\t-1\n113\t22\t0\t0\t0\t0\t-1\n114\t22\t0\t0\t0\t67\t16\n115\t22\t0\t0\t0\t255\t16\n116\t22\t0\t0\t0\t255\t16\n117\t22\t0\t0\t0\t255\t16\n118\t22\t0\t0\t0\t255\t16\n119\t22\t0\t0\t0\t255\t16\n120\t22\t0\t0\t0\t255\t16\n121\t22\t0\t0\t0\t255\t16\n122\t22\t0\t0\t0\t73\t16\n123\t22\t0\t0\t0\t90\t16\n124\t22\t0\t0\t0\t255\t16\n125\t22\t0\t0\t0\t255\t16\n126\t22\t0\t0\t0\t255\t16\n127\t22\t0\t0\t0\t255\t16\n128\t22\t0\t0\t0\t255\t16\n129\t22\t0\t0\t0\t255\t16\n130\t22\t0\t0\t0\t255\t16\n131\t22\t0\t0\t0\t255\t16\n132\t22\t0\t0\t0\t255\t16\n133\t22\t0\t0\t0\t255\t16\n134\t22\t0\t0\t0\t255\t16\n135\t22\t0\t0\t0\t255\t16\n136\t22\t0\t0\t0\t255\t16\n137\t22\t0\t0\t0\t255\t16\n138\t22\t0\t0\t0\t255\t16\n139\t22\t0\t0\t0\t255\t16\n140\t22\t0\t0\t0\t115\t16\n141\t22\t0\t0\t0\t0\t-1\n142\t22\t0\t0\t0\t0\t-1\n143\t22\t0\t0\t0\t237\t16\n144\t22\t0\t0\t0\t255\t16\n145\t22\t0\t0\t0\t255\t16\n146\t22\t0\t0\t0\t255\t16\n147\t22\t0\t0\t0\t255\t16\n148\t22\t0\t0\t0\t255\t16\n149\t22\t0\t0\t0\t205\t16\n0\t23\t0\t0\t0\t0\t-1\n1\t23\t0\t0\t0\t0\t-1\n2\t23\t0\t0\t0\t0\t-1\n3\t23\t0\t0\t0\t0\t-1\n4\t23\t0\t0\t0\t0\t-1\n5\t23\t0\t0\t0\t0\t-1\n6\t23\t0\t0\t0\t0\t-1\n7\t23\t0\t0\t0\t0\t-1\n8\t23\t0\t0\t0\t0\t-1\n9\t23\t0\t0\t0\t0\t-1\n10\t23\t0\t0\t0\t0\t-1\n11\t23\t0\t0\t0\t0\t-1\n12\t23\t0\t0\t0\t0\t-1\n13\t23\t0\t0\t0\t0\t-1\n14\t23\t0\t0\t0\t0\t-1\n15\t23\t0\t0\t0\t0\t-1\n16\t23\t0\t0\t0\t0\t-1\n17\t23\t0\t0\t0\t0\t-1\n18\t23\t0\t0\t0\t0\t-1\n19\t23\t0\t0\t0\t0\t-1\n20\t23\t0\t0\t0\t0\t-1\n21\t23\t0\t0\t0\t0\t-1\n22\t23\t0\t0\t0\t0\t-1\n23\t23\t0\t0\t0\t0\t-1\n24\t23\t0\t0\t0\t0\t-1\n25\t23\t0\t0\t0\t0\t-1\n26\t23\t0\t0\t0\t0\t-1\n27\t23\t0\t0\t0\t0\t-1\n28\t23\t0\t0\t0\t0\t-1\n29\t23\t0\t0\t0\t0\t-1\n30\t23\t0\t0\t0\t0\t-1\n31\t23\t0\t0\t0\t0\t-1\n32\t23\t0\t0\t0\t0\t-1\n33\t23\t0\t0\t0\t0\t-1\n34\t23\t0\t0\t0\t0\t-1\n35\t23\t0\t0\t0\t0\t-1\n36\t23\t0\t0\t0\t0\t-1\n37\t23\t0\t0\t0\t0\t-1\n38\t23\t0\t0\t0\t0\t-1\n39\t23\t0\t0\t0\t0\t-1\n40\t23\t0\t0\t0\t0\t-1\n41\t23\t0\t0\t0\t0\t-1\n42\t23\t0\t0\t0\t0\t-1\n43\t23\t0\t0\t0\t0\t-1\n44\t23\t0\t0\t0\t0\t-1\n45\t23\t0\t0\t0\t0\t-1\n46\t23\t0\t0\t0\t0\t-1\n47\t23\t0\t0\t0\t0\t-1\n48\t23\t0\t0\t0\t0\t-1\n49\t23\t0\t0\t0\t0\t-1\n50\t23\t0\t0\t0\t0\t-1\n51\t23\t0\t0\t0\t0\t-1\n52\t23\t0\t0\t0\t0\t-1\n53\t23\t0\t0\t0\t0\t-1\n54\t23\t0\t0\t0\t0\t-1\n55\t23\t0\t0\t0\t0\t-1\n56\t23\t0\t0\t0\t0\t-1\n57\t23\t0\t0\t0\t0\t-1\n58\t23\t0\t0\t0\t0\t-1\n59\t23\t0\t0\t0\t0\t-1\n60\t23\t0\t0\t0\t0\t-1\n61\t23\t0\t0\t0\t0\t-1\n62\t23\t0\t0\t0\t0\t-1\n63\t23\t0\t0\t0\t0\t-1\n64\t23\t0\t0\t0\t0\t-1\n65\t23\t0\t0\t0\t0\t-1\n66\t23\t0\t0\t0\t0\t-1\n67\t23\t0\t0\t0\t0\t-1\n68\t23\t0\t0\t0\t0\t-1\n69\t23\t0\t0\t0\t0\t-1\n70\t23\t0\t0\t0\t0\t-1\n71\t23\t0\t0\t0\t0\t-1\n72\t23\t0\t0\t0\t0\t-1\n73\t23\t0\t0\t0\t0\t-1\n74\t23\t0\t0\t0\t0\t-1\n75\t23\t0\t0\t0\t0\t-1\n76\t23\t0\t0\t0\t0\t-1\n77\t23\t0\t0\t0\t0\t-1\n78\t23\t0\t0\t0\t0\t-1\n79\t23\t0\t0\t0\t0\t-1\n80\t23\t0\t0\t0\t0\t-1\n81\t23\t0\t0\t0\t0\t-1\n82\t23\t0\t0\t0\t0\t-1\n83\t23\t0\t0\t0\t0\t-1\n84\t23\t0\t0\t0\t0\t-1\n85\t23\t0\t0\t0\t0\t-1\n86\t23\t0\t0\t0\t0\t-1\n87\t23\t0\t0\t0\t0\t-1\n88\t23\t0\t0\t0\t0\t-1\n89\t23\t0\t0\t0\t0\t-1\n90\t23\t0\t0\t0\t0\t-1\n91\t23\t0\t0\t0\t0\t-1\n92\t23\t0\t0\t0\t0\t-1\n93\t23\t0\t0\t0\t0\t-1\n94\t23\t0\t0\t0\t0\t-1\n95\t23\t0\t0\t0\t0\t-1\n96\t23\t0\t0\t0\t0\t-1\n97\t23\t0\t0\t0\t0\t-1\n98\t23\t0\t0\t0\t0\t-1\n99\t23\t0\t0\t0\t0\t-1\n100\t23\t0\t0\t0\t0\t-1\n101\t23\t0\t0\t0\t0\t-1\n102\t23\t0\t0\t0\t0\t-1\n103\t23\t0\t0\t0\t0\t-1\n104\t23\t0\t0\t0\t0\t-1\n105\t23\t0\t0\t0\t0\t-1\n106\t23\t0\t0\t0\t0\t-1\n107\t23\t0\t0\t0\t0\t-1\n108\t23\t0\t0\t0\t0\t-1\n109\t23\t0\t0\t0\t0\t-1\n110\t23\t0\t0\t0\t0\t-1\n111\t23\t0\t0\t0\t0\t-1\n112\t23\t0\t0\t0\t0\t-1\n113\t23\t0\t0\t0\t0\t-1\n114\t23\t0\t0\t0\t0\t-1\n115\t23\t0\t0\t0\t0\t-1\n116\t23\t0\t0\t0\t0\t-1\n117\t23\t0\t0\t0\t0\t-1\n118\t23\t0\t0\t0\t0\t-1\n119\t23\t0\t0\t0\t0\t-1\n120\t23\t0\t0\t0\t0\t-1\n121\t23\t0\t0\t0\t0\t-1\n122\t23\t0\t0\t0\t0\t-1\n123\t23\t0\t0\t0\t0\t-1\n124\t23\t0\t0\t0\t0\t-1\n125\t23\t0\t0\t0\t0\t-1\n126\t23\t0\t0\t0\t0\t-1\n127\t23\t0\t0\t0\t0\t-1\n128\t23\t0\t0\t0\t0\t-1\n129\t23\t0\t0\t0\t0\t-1\n130\t23\t0\t0\t0\t0\t-1\n131\t23\t0\t0\t0\t0\t-1\n132\t23\t0\t0\t0\t0\t-1\n133\t23\t0\t0\t0\t0\t-1\n134\t23\t0\t0\t0\t0\t-1\n135\t23\t0\t0\t0\t0\t-1\n136\t23\t0\t0\t0\t0\t-1\n137\t23\t0\t0\t0\t0\t-1\n138\t23\t0\t0\t0\t0\t-1\n139\t23\t0\t0\t0\t0\t-1\n140\t23\t0\t0\t0\t0\t-1\n141\t23\t0\t0\t0\t0\t-1\n142\t23\t0\t0\t0\t0\t-1\n143\t23\t0\t0\t0\t0\t-1\n144\t23\t0\t0\t0\t0\t-1\n145\t23\t0\t0\t0\t0\t-1\n146\t23\t0\t0\t0\t0\t-1\n147\t23\t0\t0\t0\t0\t-1\n148\t23\t0\t0\t0\t0\t-1\n149\t23\t0\t0\t0\t0\t-1\n"
  },
  {
    "path": "tests/golden/load-sqlite-view.tsv",
    "content": "empno\tename\tjob\tmgr\thiredate\tsal\tcomm\tdeptno\n7839\tKING\tPRESIDENT\t\t1981-11-17\t5000.00\t\t10\n7698\tBLAKE\tMANAGER\t7839\t1981-05-11\t2850.00\t\t30\n7782\tCLARK\tMANAGER\t7839\t1981-06-19\t2450.00\t\t10\n7566\tJONES\tMANAGER\t7839\t1981-04-12\t2975.00\t\t20\n7788\tSCOTT\tANALYST\t7566\t1987-07-13\t3000.00\t\t20\n7902\tFORD\tANALYST\t7566\t1981-12-03\t3000.00\t\t20\n7369\tSMITH\tCLERK\t7902\t1981-02-17\t800.00\t\t20\n7499\tALLEN\tSALESMAN\t7698\t1981-02-20\t1600.00\t300.00\t30\n7521\tWARD\tSALESMAN\t7698\t1981-02-22\t1250.00\t500.00\t30\n7654\tMARTIN\tSALESMAN\t7698\t1981-09-28\t1250.00\t1400.00\t30\n7844\tTURNER\tSALESMAN\t7698\t1981-09-18\t1500.00\t0.00\t30\n7876\tADAMS\tCLERK\t7788\t1987-07-13\t1100.00\t\t20\n7900\tJAMES\tCLERK\t7698\t1981-12-03\t950.00\t\t30\n7934\tMILLER\tCLERK\t7782\t1982-01-23\t1300.00\t\t10\n"
  },
  {
    "path": "tests/golden/load-sqlite.tsv",
    "content": "deptno\tdname\tloc\n10\tACCOUNTING\tNEW YORK\n20\tRESEARCH\tDALLAS\n30\tSALES\tCHICAGO\n40\tOPERATIONS\tBOSTON\n"
  },
  {
    "path": "tests/golden/load-stata.tsv",
    "content": "y\ts\ta\tb\n7\t1\t1\t1\n14\t1\t2\t2\n12\t1\t3\t3\n3\t2\t1\t1\n5\t2\t3\t2\n11\t2\t2\t3\n6\t3\t3\t1\n7\t3\t1\t2\n11\t3\t2\t3\n12\t4\t2\t1\n13\t4\t3\t2\n9\t4\t1\t3\n7\t5\t2\t1\n9\t5\t1\t2\n8\t5\t3\t3\n8\t6\t3\t1\n13\t6\t2\t2\n9\t6\t1\t3\n"
  },
  {
    "path": "tests/golden/load-toml.tsv",
    "content": "key\tvalue\nwhere\tflorida\nwhen\t2016-08-16\n"
  },
  {
    "path": "tests/golden/load-usv.tsv",
    "content": "a\tb\tc\nd\te\tf\ng\th\ti\n"
  },
  {
    "path": "tests/golden/load-xlsx.tsv",
    "content": "account number\tcustomer name\tsales rep\tsku\tcategory\tquantity\tunit price\text price\tdate\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t19\t88.49\t1681.31\t2015-11-17 05:58:34\n680916\tMueller and Sons\tLoring Predovic\tFI-01804\tShirt\t3\t78.07\t234.21\t2016-02-13 04:04:11\n530925\tPurdy and Sons\tTeagan O'Keefe\tEO-54210\tShirt\t19\t30.21\t573.99\t2015-08-11 12:44:38\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tNZ-99565\tShirt\t12\t90.29\t1083.48\t2016-01-23 02:15:50\n398620\tBrekke Ltd\tEsequiel Schinner\tNZ-99565\tShirt\t5\t72.64\t363.2\t2015-08-10 07:16:03\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t20\t96.62\t1932.4\t2016-03-17 10:19:05\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t10\t67.64\t676.4\t2015-11-25 22:05:36\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t11\t91.86\t1010.46\t2016-04-24 15:05:58\n398620\tBrekke Ltd\tEsequiel Schinner\tNZ-99565\tShirt\t18\t98.67\t1776.06\t2015-08-06 08:09:56\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t12\t64.48\t773.76\t2016-01-08 09:52:04\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t20\t92.87\t1857.4\t2016-05-22 06:09:58\n93583\tHegmann-Howell\tEsequiel Schinner\tHZ-54995\tBelt\t17\t40.56\t689.52\t2015-07-05 01:05:52\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t17\t42.61\t724.37\t2016-05-16 19:11:55\n453258\tRunolfsson-Bayer\tShannen Hudson\tFI-01804\tShirt\t20\t12.31\t246.2\t2015-08-24 21:32:26\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t20\t67.95\t1359\t2015-11-24 15:04:30\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t17\t23.2\t394.4\t2015-09-12 13:16:56\n453258\tRunolfsson-Bayer\tShannen Hudson\tNZ-99565\tShirt\t2\t30.23\t60.46\t2016-03-21 11:31:24\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t3\t22.64\t67.92\t2015-12-02 01:55:28\n398620\tBrekke Ltd\tEsequiel Schinner\tHZ-54995\tBelt\t1\t36.2\t36.2\t2015-12-07 18:45:54\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t9\t82.06\t738.54\t2016-02-23 17:41:41\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tDU-87462\tShirt\t5\t28.51\t142.55\t2016-03-01 19:34:33\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t15\t95.6\t1434\t2015-10-08 03:01:22\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t11\t30.8\t338.8\t2015-11-25 06:07:47\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t6\t64.98\t389.88\t2016-01-15 21:07:30\n758030\tKilback-Abernathy\tTrish Deckow\tTK-29646\tShoes\t19\t26.9\t511.1\t2015-09-28 14:33:34\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t15\t30.34\t455.1\t2016-03-29 21:19:08\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t2\t61.01\t122.02\t2016-05-19 00:05:12\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t8\t18.34\t146.72\t2015-07-24 17:48:46\n530925\tPurdy and Sons\tTeagan O'Keefe\tDU-87462\tShirt\t10\t18.4\t184\t2016-03-05 23:45:57\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGP-14407\tBelt\t15\t17.93\t268.95\t2016-03-18 07:17:35\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t15\t83.52\t1252.8\t2016-04-18 09:46:35\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t13\t80.92\t1051.96\t2015-08-05 11:37:35\n398620\tBrekke Ltd\tEsequiel Schinner\tEO-54210\tShirt\t1\t55.12\t55.12\t2016-06-14 06:59:27\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t5\t44.35\t221.75\t2016-03-22 17:17:40\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t20\t21.17\t423.4\t2016-03-28 21:14:31\n887145\tGislason LLC\tLoring Predovic\tTK-29646\tShoes\t7\t60.98\t426.86\t2016-04-05 16:48:48\n262693\tZiemann-Heidenreich\tLoring Predovic\tZY-38455\tShirt\t13\t33.08\t430.04\t2015-09-11 13:13:54\n282122\tConnelly, Abshire and Von\tBeth Skiles\tFI-01804\tShirt\t6\t31.72\t190.32\t2015-12-26 21:07:48\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t14\t71.37\t999.18\t2016-03-10 17:48:45\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t1\t31.1\t31.1\t2015-08-21 23:43:26\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t12\t84.06\t1008.72\t2015-11-24 10:21:28\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tNZ-99565\tShirt\t1\t24\t24\t2016-04-02 11:47:32\n93583\tHegmann-Howell\tEsequiel Schinner\tNZ-99565\tShirt\t13\t52.21\t678.73\t2016-05-12 13:25:51\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t14\t92.19\t1290.66\t2016-04-07 16:35:47\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t20\t18.78\t375.6\t2016-04-03 16:10:50\n759168\tSchaefer Inc\tLoring Predovic\tTK-29646\tShoes\t12\t80.03\t960.36\t2015-08-30 22:07:39\n680916\tMueller and Sons\tLoring Predovic\tFI-01804\tShirt\t19\t13.83\t262.77\t2015-06-26 23:55:04\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t3\t30.68\t92.04\t2016-04-10 06:19:52\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t9\t93.27\t839.43\t2016-03-11 15:36:42\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTK-29646\tShoes\t19\t11.68\t221.92\t2016-01-12 02:26:26\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t7\t96.38\t674.66\t2015-10-08 09:10:36\n887145\tGislason LLC\tLoring Predovic\tTL-23025\tShoes\t17\t72.36\t1230.12\t2016-02-07 19:11:15\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t1\t94.59\t94.59\t2016-05-17 04:35:50\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t14\t14.75\t206.5\t2015-09-26 09:52:13\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t1\t56.03\t56.03\t2016-01-01 16:50:06\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t16\t76.38\t1222.08\t2015-11-05 09:07:04\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t13\t95.38\t1239.94\t2015-08-16 15:49:54\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t10\t25.58\t255.8\t2016-06-01 08:03:06\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t20\t66.71\t1334.2\t2016-02-22 12:49:01\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t13\t55.47\t721.11\t2016-03-12 17:54:20\n759168\tSchaefer Inc\tLoring Predovic\tEO-54210\tShirt\t5\t93.41\t467.05\t2015-08-06 10:57:53\n398620\tBrekke Ltd\tEsequiel Schinner\tZY-38455\tShirt\t2\t24.48\t48.96\t2015-11-04 13:26:05\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t5\t63.31\t316.55\t2015-12-06 09:20:20\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t10\t97.88\t978.8\t2015-08-24 05:43:32\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t5\t37.18\t185.9\t2015-10-10 04:24:46\n398620\tBrekke Ltd\tEsequiel Schinner\tFI-01804\tShirt\t18\t92.16\t1658.88\t2015-12-10 12:13:45\n530925\tPurdy and Sons\tTeagan O'Keefe\tTK-29646\tShoes\t4\t19.76\t79.04\t2015-08-04 02:54:20\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGJ-90272\tShoes\t13\t43.19\t561.47\t2015-09-04 11:58:47\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTK-29646\tShoes\t11\t29.52\t324.72\t2016-05-28 10:34:34\n262693\tZiemann-Heidenreich\tLoring Predovic\tNZ-99565\tShirt\t19\t41.14\t781.66\t2016-03-26 06:21:18\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t1\t90.45\t90.45\t2015-11-30 20:10:20\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t1\t47.29\t47.29\t2016-02-17 08:45:05\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tDU-87462\tShirt\t15\t48.65\t729.75\t2016-06-11 11:59:35\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tZY-38455\tShirt\t11\t66.93\t736.23\t2015-11-29 00:44:46\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t11\t31.88\t350.68\t2016-01-06 05:41:19\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t5\t82.58\t412.9\t2015-11-15 22:42:05\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t20\t14.6\t292\t2015-08-11 04:48:36\n759168\tSchaefer Inc\tLoring Predovic\tGJ-90272\tShoes\t3\t95.63\t286.89\t2016-03-15 20:36:17\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t17\t47.18\t802.06\t2015-11-10 19:31:36\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t5\t90.92\t454.6\t2016-01-31 14:42:16\n262693\tZiemann-Heidenreich\tLoring Predovic\tTK-29646\tShoes\t1\t40.05\t40.05\t2015-07-30 02:37:28\n453258\tRunolfsson-Bayer\tShannen Hudson\tHZ-54995\tBelt\t6\t17.37\t104.22\t2016-01-13 18:19:05\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t12\t86.12\t1033.44\t2015-11-02 22:56:31\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t10\t28.35\t283.5\t2015-07-21 07:17:41\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t15\t94.43\t1416.45\t2015-12-22 13:40:43\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tZY-38455\tShirt\t3\t26.6\t79.8\t2015-08-16 16:49:11\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t8\t38.88\t311.04\t2015-10-04 20:49:53\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t3\t97.19\t291.57\t2016-01-18 19:48:54\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t1\t26.14\t26.14\t2015-06-30 06:53:06\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t5\t43.66\t218.3\t2016-05-13 00:42:58\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t11\t43.62\t479.82\t2015-08-25 02:25:02\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t8\t56.72\t453.76\t2016-03-20 02:03:56\n758030\tKilback-Abernathy\tTrish Deckow\tFI-01804\tShirt\t20\t54.3\t1086\t2016-02-29 15:22:44\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t10\t72.42\t724.2\t2016-05-19 14:06:38\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t9\t25.95\t233.55\t2015-07-25 10:53:10\n262693\tZiemann-Heidenreich\tLoring Predovic\tTK-29646\tShoes\t8\t51.77\t414.16\t2016-05-29 07:25:04\n282122\tConnelly, Abshire and Von\tBeth Skiles\tNZ-99565\tShirt\t8\t88.29\t706.32\t2015-11-25 04:21:37\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGJ-90272\tShoes\t11\t92.74\t1020.14\t2016-02-06 02:38:55\n758030\tKilback-Abernathy\tTrish Deckow\tGP-14407\tBelt\t12\t20.07\t240.84\t2015-09-19 03:44:57\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t18\t75.6\t1360.8\t2015-08-06 20:29:46\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t10\t75.66\t756.6\t2016-02-06 22:24:02\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t5\t55.98\t279.9\t2016-05-09 11:44:59\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t7\t54.87\t384.09\t2016-04-17 08:15:24\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTK-29646\tShoes\t20\t84.49\t1689.8\t2015-12-17 10:06:40\n93583\tHegmann-Howell\tEsequiel Schinner\tDU-87462\tShirt\t19\t81.98\t1557.62\t2015-07-18 14:12:46\n218667\tJaskolski-O'Hara\tTrish Deckow\tNZ-99565\tShirt\t16\t33.38\t534.08\t2016-02-07 22:29:37\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t13\t14.18\t184.34\t2015-11-18 03:13:45\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t13\t68.09\t885.17\t2016-05-20 21:10:53\n218667\tJaskolski-O'Hara\tTrish Deckow\tHZ-54995\tBelt\t5\t32.61\t163.05\t2016-04-16 11:51:15\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t18\t33.15\t596.7\t2015-06-20 14:16:53\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t14\t39.17\t548.38\t2016-01-09 05:48:45\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t19\t79.02\t1501.38\t2015-08-05 21:40:50\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t13\t35.12\t456.56\t2016-01-04 01:23:10\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t11\t35.75\t393.25\t2016-02-18 21:04:47\n62592\tO'Keefe-Koch\tShannen Hudson\tHZ-54995\tBelt\t12\t40.52\t486.24\t2015-08-04 05:50:33\n758030\tKilback-Abernathy\tTrish Deckow\tEO-54210\tShirt\t11\t47.15\t518.65\t2016-01-15 06:09:23\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t18\t28.68\t516.24\t2016-05-02 00:07:28\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t14\t46.86\t656.04\t2015-07-21 12:27:25\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t12\t62.1\t745.2\t2015-10-11 10:56:53\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t4\t90.57\t362.28\t2016-06-11 15:25:49\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t2\t82.68\t165.36\t2016-04-07 01:40:01\n262693\tZiemann-Heidenreich\tLoring Predovic\tGP-14407\tBelt\t3\t59.09\t177.27\t2015-09-16 12:44:04\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t9\t96.1\t864.9\t2015-07-07 23:24:18\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t4\t27.18\t108.72\t2015-12-14 00:47:32\n282122\tConnelly, Abshire and Von\tBeth Skiles\tFI-01804\tShirt\t13\t22.6\t293.8\t2016-03-24 06:02:09\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t13\t24.18\t314.34\t2015-07-20 16:33:18\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t4\t49.78\t199.12\t2015-12-11 10:55:57\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t12\t97.14\t1165.68\t2016-03-09 21:19:48\n758030\tKilback-Abernathy\tTrish Deckow\tEO-54210\tShirt\t3\t59.99\t179.97\t2015-08-19 16:21:11\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGP-14407\tBelt\t5\t63.28\t316.4\t2015-09-08 00:01:16\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t9\t42.44\t381.96\t2015-09-02 01:05:17\n759168\tSchaefer Inc\tLoring Predovic\tHZ-54995\tBelt\t13\t65.36\t849.68\t2015-08-23 13:34:26\n262693\tZiemann-Heidenreich\tLoring Predovic\tNZ-99565\tShirt\t14\t59.01\t826.14\t2016-04-26 10:14:41\n530925\tPurdy and Sons\tTeagan O'Keefe\tTL-23025\tShoes\t12\t64.17\t770.04\t2015-10-14 21:03:49\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t12\t13.99\t167.88\t2015-09-03 21:12:58\n759168\tSchaefer Inc\tLoring Predovic\tGJ-90272\tShoes\t5\t81.98\t409.9\t2015-10-27 14:56:08\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t14\t99.38\t1391.32\t2016-04-08 20:59:25\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t13\t74.1\t963.3\t2015-10-05 13:58:23\n887145\tGislason LLC\tLoring Predovic\tTK-29646\tShoes\t11\t77.23\t849.53\t2015-08-11 02:40:07\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t2\t31.09\t62.18\t2015-10-09 16:35:42\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t6\t21.32\t127.92\t2016-03-17 09:56:53\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t19\t85.57\t1625.83\t2016-02-03 11:41:59\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t9\t26.14\t235.26\t2016-04-17 11:45:31\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t7\t24.25\t169.75\t2015-09-01 23:33:00\n530925\tPurdy and Sons\tTeagan O'Keefe\tDU-87462\tShirt\t5\t98.34\t491.7\t2015-10-14 17:20:02\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t2\t74.6\t149.2\t2016-04-25 10:02:27\n453258\tRunolfsson-Bayer\tShannen Hudson\tTL-23025\tShoes\t13\t82.54\t1073.02\t2016-04-27 12:23:15\n93583\tHegmann-Howell\tEsequiel Schinner\tDU-87462\tShirt\t3\t99.13\t297.39\t2015-10-08 14:55:04\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t7\t21.3\t149.1\t2015-10-17 19:48:03\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t18\t17.56\t316.08\t2016-04-05 17:23:36\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t17\t66.97\t1138.49\t2016-06-06 02:17:34\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t20\t28.5\t570\t2016-03-04 03:33:39\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t10\t51.52\t515.2\t2016-04-17 11:16:50\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t18\t26.17\t471.06\t2015-10-23 18:38:12\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t14\t91.12\t1275.68\t2015-07-30 20:05:19\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t2\t69.38\t138.76\t2015-10-30 21:56:42\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t19\t92.85\t1764.15\t2015-10-23 07:32:22\n280749\tDouglas PLC\tTeagan O'Keefe\tEO-54210\tShirt\t4\t11.52\t46.08\t2016-02-22 06:10:14\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGP-14407\tBelt\t6\t78.39\t470.34\t2016-01-22 14:26:31\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t6\t84.56\t507.36\t2016-02-09 14:03:33\n62592\tO'Keefe-Koch\tShannen Hudson\tDU-87462\tShirt\t11\t85.65\t942.15\t2016-03-31 01:46:55\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t16\t15.33\t245.28\t2016-03-07 13:30:30\n136521\tLabadie and Sons\tEsequiel Schinner\tEO-54210\tShirt\t12\t10.95\t131.4\t2015-11-11 17:18:38\n453258\tRunolfsson-Bayer\tShannen Hudson\tGJ-90272\tShoes\t17\t40.9\t695.3\t2016-04-05 05:52:35\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t10\t10.72\t107.2\t2016-06-11 05:43:00\n93583\tHegmann-Howell\tEsequiel Schinner\tHZ-54995\tBelt\t8\t82.47\t659.76\t2016-01-30 17:37:04\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t3\t34.86\t104.58\t2015-07-18 23:46:56\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t2\t19.82\t39.64\t2015-11-18 03:36:55\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t20\t26.16\t523.2\t2016-02-25 23:53:30\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t9\t53.67\t483.03\t2015-06-23 14:42:02\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t3\t33.19\t99.57\t2015-09-06 02:17:30\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t9\t37.98\t341.82\t2015-11-29 06:52:37\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t20\t71.54\t1430.8\t2015-12-10 09:24:45\n218667\tJaskolski-O'Hara\tTrish Deckow\tEO-54210\tShirt\t13\t25.81\t335.53\t2016-05-26 08:39:22\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t5\t48.02\t240.1\t2015-08-10 09:38:46\n759168\tSchaefer Inc\tLoring Predovic\tZY-38455\tShirt\t9\t27.44\t246.96\t2015-10-16 18:59:05\n280749\tDouglas PLC\tTeagan O'Keefe\tDU-87462\tShirt\t12\t44.67\t536.04\t2015-06-28 09:10:49\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t15\t41.55\t623.25\t2015-06-24 11:00:06\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t1\t47.56\t47.56\t2015-10-23 15:30:45\n218667\tJaskolski-O'Hara\tTrish Deckow\tTK-29646\tShoes\t11\t81.01\t891.11\t2015-09-30 03:47:05\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t16\t12.24\t195.84\t2015-07-12 15:31:43\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t6\t90.41\t542.46\t2015-07-09 15:43:18\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t12\t81.93\t983.16\t2015-12-05 14:13:38\n453258\tRunolfsson-Bayer\tShannen Hudson\tGP-14407\tBelt\t18\t91.33\t1643.94\t2016-01-16 06:34:43\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t7\t12.98\t90.86\t2016-02-15 14:42:25\n530925\tPurdy and Sons\tTeagan O'Keefe\tDU-87462\tShirt\t4\t46.72\t186.88\t2015-10-15 17:00:46\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t9\t31.77\t285.93\t2016-06-07 21:16:00\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t14\t24.71\t345.94\t2015-09-10 16:35:44\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTK-29646\tShoes\t11\t97.61\t1073.71\t2016-03-22 07:05:08\n280749\tDouglas PLC\tTeagan O'Keefe\tZY-38455\tShirt\t20\t93.38\t1867.6\t2015-06-28 02:25:36\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t3\t53.56\t160.68\t2015-08-06 09:53:32\n680916\tMueller and Sons\tLoring Predovic\tTL-23025\tShoes\t4\t27.01\t108.04\t2015-06-24 01:32:43\n398620\tBrekke Ltd\tEsequiel Schinner\tTK-29646\tShoes\t11\t78.27\t860.97\t2015-07-27 07:51:57\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t13\t24.27\t315.51\t2015-11-03 06:13:59\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t5\t27.59\t137.95\t2015-07-25 23:56:50\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t8\t43.93\t351.44\t2016-06-13 01:12:12\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t20\t59.39\t1187.8\t2015-10-28 18:54:37\n453258\tRunolfsson-Bayer\tShannen Hudson\tHZ-54995\tBelt\t12\t93.13\t1117.56\t2015-07-29 10:17:23\n398620\tBrekke Ltd\tEsequiel Schinner\tEO-54210\tShirt\t9\t62.67\t564.03\t2015-10-26 13:42:21\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t12\t71.33\t855.96\t2015-10-04 19:04:54\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t17\t79.59\t1353.03\t2016-05-27 07:32:41\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t8\t41\t328\t2015-06-18 15:24:55\n398620\tBrekke Ltd\tEsequiel Schinner\tNZ-99565\tShirt\t16\t18.74\t299.84\t2016-05-23 07:20:47\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t18\t34.21\t615.78\t2015-07-01 03:43:02\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t17\t93.56\t1590.52\t2016-01-06 00:58:56\n251881\tZulauf-Grady\tTeagan O'Keefe\tGP-14407\tBelt\t17\t34.89\t593.13\t2016-01-06 11:39:29\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t19\t97.63\t1854.97\t2016-01-02 20:36:26\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t11\t82.95\t912.45\t2016-02-29 23:05:14\n752312\tWatsica-Pfannerstill\tLoring Predovic\tEO-54210\tShirt\t17\t76.26\t1296.42\t2015-08-18 07:18:31\n453258\tRunolfsson-Bayer\tShannen Hudson\tDU-87462\tShirt\t8\t74.68\t597.44\t2016-05-30 07:56:58\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t11\t22.99\t252.89\t2015-07-05 15:52:42\n530925\tPurdy and Sons\tTeagan O'Keefe\tTL-23025\tShoes\t9\t77.96\t701.64\t2015-10-06 12:40:39\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t15\t56.85\t852.75\t2016-05-02 04:40:57\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t19\t37.74\t717.06\t2016-05-26 18:14:51\n398620\tBrekke Ltd\tEsequiel Schinner\tZY-38455\tShirt\t9\t74.43\t669.87\t2016-02-29 07:47:57\n530925\tPurdy and Sons\tTeagan O'Keefe\tDU-87462\tShirt\t16\t69.81\t1116.96\t2015-09-06 16:10:29\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t3\t66.25\t198.75\t2015-12-19 04:01:01\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tZY-38455\tShirt\t2\t30.48\t60.96\t2015-10-04 22:32:39\n136521\tLabadie and Sons\tEsequiel Schinner\tGP-14407\tBelt\t13\t13.03\t169.39\t2016-05-05 13:42:14\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t8\t68.48\t547.84\t2016-03-06 09:50:26\n93583\tHegmann-Howell\tEsequiel Schinner\tFI-01804\tShirt\t3\t83.12\t249.36\t2015-08-21 22:56:27\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tFI-01804\tShirt\t7\t95.82\t670.74\t2016-01-04 11:51:16\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t14\t22.54\t315.56\t2016-01-14 22:14:01\n398620\tBrekke Ltd\tEsequiel Schinner\tFI-01804\tShirt\t1\t76.83\t76.83\t2015-12-13 17:14:46\n136521\tLabadie and Sons\tEsequiel Schinner\tNZ-99565\tShirt\t3\t49.28\t147.84\t2016-01-13 13:43:25\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t12\t99.82\t1197.84\t2016-01-04 14:58:53\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t5\t84.53\t422.65\t2016-03-19 06:16:28\n752312\tWatsica-Pfannerstill\tLoring Predovic\tFI-01804\tShirt\t11\t41.66\t458.26\t2015-08-18 12:53:26\n262693\tZiemann-Heidenreich\tLoring Predovic\tGJ-90272\tShoes\t14\t52.85\t739.9\t2015-09-16 03:49:33\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t20\t34.98\t699.6\t2016-06-12 22:05:46\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t12\t78.07\t936.84\t2015-10-21 06:42:32\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tZY-38455\tShirt\t12\t44.15\t529.8\t2016-01-06 17:31:51\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tNZ-99565\tShirt\t11\t15.62\t171.82\t2016-01-19 08:58:11\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t16\t61.25\t980\t2016-03-31 23:39:04\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t6\t47.99\t287.94\t2016-05-04 09:00:27\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t12\t40.56\t486.72\t2015-12-02 12:36:52\n262693\tZiemann-Heidenreich\tLoring Predovic\tTK-29646\tShoes\t8\t41.26\t330.08\t2015-12-25 14:57:29\n398620\tBrekke Ltd\tEsequiel Schinner\tEO-54210\tShirt\t1\t44.55\t44.55\t2016-06-07 17:20:17\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t12\t24.31\t291.72\t2016-02-03 09:28:53\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t3\t20.12\t60.36\t2015-09-18 01:08:48\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t3\t99.29\t297.87\t2016-04-12 05:24:51\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t15\t53.95\t809.25\t2016-04-09 08:00:57\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t3\t33.63\t100.89\t2016-04-04 03:15:32\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t8\t37.17\t297.36\t2015-10-02 08:23:20\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t13\t80.87\t1051.31\t2015-09-26 00:02:26\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t3\t22.91\t68.73\t2015-12-30 05:17:06\n280749\tDouglas PLC\tTeagan O'Keefe\tDU-87462\tShirt\t6\t82.99\t497.94\t2016-03-29 20:28:28\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t14\t46.14\t645.96\t2015-11-27 08:00:03\n251881\tZulauf-Grady\tTeagan O'Keefe\tGP-14407\tBelt\t15\t71.5\t1072.5\t2016-04-18 05:58:22\n680916\tMueller and Sons\tLoring Predovic\tZY-38455\tShirt\t8\t70.78\t566.24\t2016-05-24 10:11:34\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t1\t62.85\t62.85\t2015-09-07 08:46:34\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tZY-38455\tShirt\t16\t53.29\t852.64\t2015-11-10 18:50:41\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTK-29646\tShoes\t1\t26.01\t26.01\t2015-12-15 18:19:50\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t2\t57.18\t114.36\t2015-09-17 16:16:15\n280749\tDouglas PLC\tTeagan O'Keefe\tZY-38455\tShirt\t2\t86.1\t172.2\t2015-06-21 17:34:14\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t10\t63.52\t635.2\t2015-12-21 08:10:37\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t12\t66.68\t800.16\t2015-10-24 18:26:07\n262693\tZiemann-Heidenreich\tLoring Predovic\tZY-38455\tShirt\t12\t90.89\t1090.68\t2015-10-21 09:27:48\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t11\t68.6\t754.6\t2016-03-31 11:43:58\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t1\t61.82\t61.82\t2016-01-16 00:02:26\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t13\t94.83\t1232.79\t2015-11-02 03:41:40\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTL-23025\tShoes\t3\t62.35\t187.05\t2015-08-30 07:21:47\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t1\t86.28\t86.28\t2015-09-14 17:23:29\n752312\tWatsica-Pfannerstill\tLoring Predovic\tDU-87462\tShirt\t2\t90.95\t181.9\t2015-09-21 03:38:21\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t15\t84.97\t1274.55\t2015-09-29 18:59:06\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t8\t77.21\t617.68\t2016-04-23 07:43:08\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t7\t85.95\t601.65\t2016-04-13 21:53:45\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t17\t27.56\t468.52\t2016-01-13 19:02:17\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t10\t88.51\t885.1\t2015-08-07 01:57:29\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t14\t65.45\t916.3\t2016-02-09 06:25:34\n280749\tDouglas PLC\tTeagan O'Keefe\tZY-38455\tShirt\t8\t60.51\t484.08\t2016-02-06 14:27:34\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t4\t48.14\t192.56\t2015-11-22 00:05:03\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tDU-87462\tShirt\t9\t85.35\t768.15\t2015-09-07 14:57:00\n680916\tMueller and Sons\tLoring Predovic\tZY-38455\tShirt\t8\t64.67\t517.36\t2016-05-05 05:49:24\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t3\t47.65\t142.95\t2016-05-11 02:04:13\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t20\t94.15\t1883\t2016-04-05 22:55:49\n282122\tConnelly, Abshire and Von\tBeth Skiles\tDU-87462\tShirt\t1\t44.26\t44.26\t2016-02-05 22:50:44\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t6\t65.12\t390.72\t2015-08-23 18:23:53\n453258\tRunolfsson-Bayer\tShannen Hudson\tZY-38455\tShirt\t14\t66.13\t925.82\t2015-11-17 05:25:37\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t18\t71.94\t1294.92\t2015-09-11 23:20:58\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t2\t41.8\t83.6\t2016-02-19 11:00:48\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t8\t51.47\t411.76\t2015-09-03 14:59:41\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t2\t77.26\t154.52\t2015-09-05 23:07:48\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t9\t96.36\t867.24\t2015-09-30 23:17:15\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t14\t95.18\t1332.52\t2015-12-20 08:54:39\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t10\t81.47\t814.7\t2016-02-22 00:46:10\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t18\t13.65\t245.7\t2015-11-17 19:21:52\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t4\t46.88\t187.52\t2015-11-26 19:21:12\n759168\tSchaefer Inc\tLoring Predovic\tZY-38455\tShirt\t20\t98.58\t1971.6\t2015-12-10 22:45:46\n251881\tZulauf-Grady\tTeagan O'Keefe\tGP-14407\tBelt\t19\t27.22\t517.18\t2015-08-01 18:52:14\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t3\t96.14\t288.42\t2016-02-08 02:38:57\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t20\t37.25\t745\t2016-05-24 02:57:59\n136521\tLabadie and Sons\tEsequiel Schinner\tGP-14407\tBelt\t4\t73.24\t292.96\t2016-04-20 09:42:33\n759168\tSchaefer Inc\tLoring Predovic\tTK-29646\tShoes\t19\t14.87\t282.53\t2016-04-06 15:16:21\n136521\tLabadie and Sons\tEsequiel Schinner\tNZ-99565\tShirt\t1\t38.43\t38.43\t2016-02-12 07:44:35\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t16\t36.58\t585.28\t2016-05-23 18:29:31\n262693\tZiemann-Heidenreich\tLoring Predovic\tTK-29646\tShoes\t7\t46.84\t327.88\t2015-06-16 11:11:36\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t4\t82.19\t328.76\t2015-08-25 22:44:23\n530925\tPurdy and Sons\tTeagan O'Keefe\tTK-29646\tShoes\t9\t57.76\t519.84\t2015-08-13 03:47:53\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t3\t80.6\t241.8\t2015-07-14 18:22:24\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t2\t83.63\t167.26\t2016-06-02 04:32:07\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t17\t45.85\t779.45\t2015-09-22 15:19:59\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t2\t74.98\t149.96\t2015-08-28 00:31:32\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tNZ-99565\tShirt\t12\t36.05\t432.6\t2015-12-25 21:33:39\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t15\t78.11\t1171.65\t2015-10-01 05:43:46\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t19\t13.68\t259.92\t2015-08-02 13:16:07\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t10\t31.77\t317.7\t2015-10-24 09:58:26\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t18\t56.29\t1013.22\t2015-10-31 10:20:24\n680916\tMueller and Sons\tLoring Predovic\tHZ-54995\tBelt\t4\t18.84\t75.36\t2015-11-27 01:36:45\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tZY-38455\tShirt\t6\t18.45\t110.7\t2016-01-04 16:05:58\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTK-29646\tShoes\t8\t67.4\t539.2\t2015-09-29 11:58:36\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGP-14407\tBelt\t4\t29.35\t117.4\t2015-11-17 23:43:19\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t2\t28\t56\t2016-03-31 09:12:37\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t8\t82.41\t659.28\t2015-10-08 10:12:35\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t18\t21.15\t380.7\t2016-05-25 20:49:54\n887145\tGislason LLC\tLoring Predovic\tDU-87462\tShirt\t2\t89.48\t178.96\t2015-12-09 16:23:45\n887145\tGislason LLC\tLoring Predovic\tDU-87462\tShirt\t18\t90.53\t1629.54\t2015-11-14 13:02:53\n680916\tMueller and Sons\tLoring Predovic\tTL-23025\tShoes\t2\t11.94\t23.88\t2015-07-30 05:48:08\n282122\tConnelly, Abshire and Von\tBeth Skiles\tNZ-99565\tShirt\t19\t58.3\t1107.7\t2015-09-26 04:18:03\n759168\tSchaefer Inc\tLoring Predovic\tEO-54210\tShirt\t6\t16.83\t100.98\t2016-06-03 16:49:41\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t10\t20.49\t204.9\t2015-11-25 19:08:20\n398620\tBrekke Ltd\tEsequiel Schinner\tFI-01804\tShirt\t11\t89.38\t983.18\t2015-10-22 10:59:29\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t13\t38.91\t505.83\t2016-01-21 21:50:18\n282122\tConnelly, Abshire and Von\tBeth Skiles\tZY-38455\tShirt\t13\t82.81\t1076.53\t2015-11-28 17:57:20\n680916\tMueller and Sons\tLoring Predovic\tFI-01804\tShirt\t1\t35.11\t35.11\t2015-06-30 14:05:07\n758030\tKilback-Abernathy\tTrish Deckow\tNZ-99565\tShirt\t6\t17.12\t102.72\t2016-01-08 09:48:38\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t17\t45.03\t765.51\t2016-03-27 21:47:28\n453258\tRunolfsson-Bayer\tShannen Hudson\tZY-38455\tShirt\t14\t18.11\t253.54\t2016-03-12 04:35:00\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tDU-87462\tShirt\t7\t52.82\t369.74\t2016-03-28 23:28:54\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t15\t88.94\t1334.1\t2015-08-31 05:30:36\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t1\t31.04\t31.04\t2016-05-28 04:52:42\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGP-14407\tBelt\t6\t44.53\t267.18\t2015-10-01 23:14:19\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t12\t90.81\t1089.72\t2015-09-04 13:50:47\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t19\t44.26\t840.94\t2016-03-27 06:13:41\n93583\tHegmann-Howell\tEsequiel Schinner\tNZ-99565\tShirt\t8\t98.1\t784.8\t2015-11-12 17:42:00\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTL-23025\tShoes\t13\t29.93\t389.09\t2015-12-20 13:51:00\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t1\t84.69\t84.69\t2016-02-21 09:19:38\n398620\tBrekke Ltd\tEsequiel Schinner\tZY-38455\tShirt\t17\t70.29\t1194.93\t2015-10-26 10:47:56\n251881\tZulauf-Grady\tTeagan O'Keefe\tEO-54210\tShirt\t1\t67.53\t67.53\t2016-01-04 23:30:33\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t12\t80.23\t962.76\t2015-08-02 19:26:21\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tFI-01804\tShirt\t7\t19.6\t137.2\t2015-09-14 05:00:48\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTL-23025\tShoes\t1\t20.22\t20.22\t2015-08-30 05:06:42\n251881\tZulauf-Grady\tTeagan O'Keefe\tGP-14407\tBelt\t5\t47.05\t235.25\t2016-04-25 00:59:19\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t11\t28.75\t316.25\t2016-01-31 07:06:53\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t9\t65.76\t591.84\t2016-03-02 19:10:29\n530925\tPurdy and Sons\tTeagan O'Keefe\tGP-14407\tBelt\t18\t92.56\t1666.08\t2016-02-14 21:57:48\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t2\t43.6\t87.2\t2016-03-29 02:37:00\n758030\tKilback-Abernathy\tTrish Deckow\tGP-14407\tBelt\t4\t60.29\t241.16\t2015-07-31 19:14:37\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t1\t14.56\t14.56\t2015-07-23 15:43:16\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tNZ-99565\tShirt\t19\t70.12\t1332.28\t2016-04-15 11:38:26\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t11\t98.22\t1080.42\t2015-08-22 17:45:47\n759168\tSchaefer Inc\tLoring Predovic\tDU-87462\tShirt\t18\t85.23\t1534.14\t2016-03-31 22:27:46\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t17\t59.25\t1007.25\t2016-03-08 14:02:03\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t6\t73.79\t442.74\t2016-06-04 20:01:57\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t13\t88.99\t1156.87\t2016-03-06 00:27:36\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTL-23025\tShoes\t6\t29.97\t179.82\t2016-04-30 07:40:44\n759168\tSchaefer Inc\tLoring Predovic\tHZ-54995\tBelt\t2\t82.53\t165.06\t2016-03-14 22:55:55\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t2\t57.13\t114.26\t2015-08-14 16:06:02\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t6\t94.54\t567.24\t2015-07-23 21:55:07\n530925\tPurdy and Sons\tTeagan O'Keefe\tDU-87462\tShirt\t5\t83.27\t416.35\t2015-11-21 21:30:27\n282122\tConnelly, Abshire and Von\tBeth Skiles\tZY-38455\tShirt\t1\t92.16\t92.16\t2016-04-24 22:08:30\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t13\t79.96\t1039.48\t2016-05-08 05:42:02\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t18\t72.81\t1310.58\t2015-10-23 01:51:04\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t4\t57.92\t231.68\t2016-04-25 06:03:36\n680916\tMueller and Sons\tLoring Predovic\tNZ-99565\tShirt\t7\t80.35\t562.45\t2015-10-15 06:41:29\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tHZ-54995\tBelt\t18\t18.03\t324.54\t2016-01-21 17:42:01\n680916\tMueller and Sons\tLoring Predovic\tTL-23025\tShoes\t2\t28.03\t56.06\t2016-02-08 05:10:32\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t20\t66.16\t1323.2\t2015-06-17 15:25:53\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t9\t94.55\t850.95\t2015-07-18 17:26:55\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t13\t65.26\t848.38\t2016-03-19 00:27:51\n759168\tSchaefer Inc\tLoring Predovic\tHZ-54995\tBelt\t15\t10.77\t161.55\t2016-01-30 19:33:41\n759168\tSchaefer Inc\tLoring Predovic\tNZ-99565\tShirt\t14\t97.43\t1364.02\t2015-07-12 20:41:56\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tDU-87462\tShirt\t19\t40.42\t767.98\t2016-02-17 15:08:32\n680916\tMueller and Sons\tLoring Predovic\tTL-23025\tShoes\t12\t68.67\t824.04\t2016-02-21 05:23:19\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t13\t23.75\t308.75\t2015-12-26 12:48:34\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t17\t87.78\t1492.26\t2016-02-12 05:16:01\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t2\t64.36\t128.72\t2015-09-04 18:23:16\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tZY-38455\tShirt\t19\t70.06\t1331.14\t2016-03-15 05:10:02\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t20\t14.29\t285.8\t2016-05-18 22:27:01\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tDU-87462\tShirt\t5\t67.69\t338.45\t2016-04-26 19:45:50\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t4\t34.81\t139.24\t2015-12-19 20:07:56\n530925\tPurdy and Sons\tTeagan O'Keefe\tNZ-99565\tShirt\t5\t61.25\t306.25\t2016-03-12 01:06:18\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t9\t71.3\t641.7\t2015-08-30 19:35:12\n758030\tKilback-Abernathy\tTrish Deckow\tFI-01804\tShirt\t15\t82.49\t1237.35\t2015-07-16 00:45:45\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTK-29646\tShoes\t2\t96.77\t193.54\t2015-07-20 06:59:26\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t2\t10.27\t20.54\t2015-11-10 21:37:02\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t20\t23.05\t461\t2015-09-12 15:44:45\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t7\t97.32\t681.24\t2015-09-26 21:42:45\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t3\t77.86\t233.58\t2016-02-12 08:04:05\n680916\tMueller and Sons\tLoring Predovic\tNZ-99565\tShirt\t12\t87.59\t1051.08\t2016-05-12 16:35:06\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t1\t92.37\t92.37\t2016-05-23 02:10:53\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t4\t61.45\t245.8\t2016-06-11 18:41:13\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t15\t73.36\t1100.4\t2016-01-01 08:18:23\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t1\t46.44\t46.44\t2015-12-29 08:29:36\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGP-14407\tBelt\t9\t44.51\t400.59\t2015-06-25 06:08:36\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t2\t79.42\t158.84\t2016-03-07 21:51:22\n398620\tBrekke Ltd\tEsequiel Schinner\tGP-14407\tBelt\t1\t14.94\t14.94\t2015-08-29 17:55:05\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t17\t37.91\t644.47\t2016-02-10 03:57:10\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t3\t47.12\t141.36\t2016-02-11 09:46:42\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t9\t99.54\t895.86\t2016-05-09 12:07:19\n262693\tZiemann-Heidenreich\tLoring Predovic\tZY-38455\tShirt\t8\t90.52\t724.16\t2016-04-20 15:50:33\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t5\t73.73\t368.65\t2015-11-23 15:30:25\n530925\tPurdy and Sons\tTeagan O'Keefe\tGP-14407\tBelt\t4\t40.72\t162.88\t2015-07-05 00:53:06\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t2\t21.11\t42.22\t2016-05-10 19:38:40\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t16\t69.26\t1108.16\t2015-07-23 16:02:25\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t15\t59.09\t886.35\t2015-06-28 23:28:07\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t1\t89.12\t89.12\t2015-09-29 04:15:42\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tHZ-54995\tBelt\t1\t40.82\t40.82\t2015-06-22 12:30:39\n93583\tHegmann-Howell\tEsequiel Schinner\tGJ-90272\tShoes\t20\t38.15\t763\t2016-03-22 21:05:35\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t11\t74.64\t821.04\t2016-05-01 00:32:51\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t19\t22.56\t428.64\t2016-06-02 00:45:26\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t3\t32.66\t97.98\t2015-08-18 22:21:01\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t14\t57.02\t798.28\t2016-04-01 02:58:27\n398620\tBrekke Ltd\tEsequiel Schinner\tNZ-99565\tShirt\t16\t24.94\t399.04\t2015-07-01 22:16:30\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t1\t82.7\t82.7\t2015-06-28 20:36:59\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t2\t31.71\t63.42\t2015-09-28 21:40:45\n680916\tMueller and Sons\tLoring Predovic\tFI-01804\tShirt\t20\t63.57\t1271.4\t2016-01-28 07:27:11\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t16\t52.65\t842.4\t2015-10-12 07:21:44\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t12\t95.45\t1145.4\t2016-05-27 17:04:55\n680916\tMueller and Sons\tLoring Predovic\tFI-01804\tShirt\t13\t56.68\t736.84\t2015-11-03 17:04:20\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t20\t23.96\t479.2\t2015-06-21 22:34:06\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t19\t20.1\t381.9\t2015-09-17 00:49:53\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t5\t41.68\t208.4\t2016-04-20 05:01:20\n758030\tKilback-Abernathy\tTrish Deckow\tNZ-99565\tShirt\t15\t98.34\t1475.1\t2015-07-11 22:55:59\n398620\tBrekke Ltd\tEsequiel Schinner\tGP-14407\tBelt\t11\t32.35\t355.85\t2016-03-24 18:34:44\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t11\t38.21\t420.31\t2016-03-20 19:36:04\n136521\tLabadie and Sons\tEsequiel Schinner\tEO-54210\tShirt\t7\t53.32\t373.24\t2015-11-15 17:08:39\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t17\t87.04\t1479.68\t2015-06-27 03:31:16\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t15\t72.85\t1092.75\t2015-08-21 14:17:24\n262693\tZiemann-Heidenreich\tLoring Predovic\tGJ-90272\tShoes\t12\t71.21\t854.52\t2016-03-14 00:09:04\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t2\t31.38\t62.76\t2016-04-28 13:45:23\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t5\t35.36\t176.8\t2016-01-29 07:07:52\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t2\t87.9\t175.8\t2015-10-29 05:15:39\n62592\tO'Keefe-Koch\tShannen Hudson\tNZ-99565\tShirt\t1\t24.02\t24.02\t2015-06-17 05:40:06\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t4\t96.13\t384.52\t2016-02-07 06:20:32\n680916\tMueller and Sons\tLoring Predovic\tHZ-54995\tBelt\t4\t19.95\t79.8\t2016-02-28 15:54:04\n758030\tKilback-Abernathy\tTrish Deckow\tEO-54210\tShirt\t13\t23.94\t311.22\t2016-05-20 13:58:02\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t4\t35.93\t143.72\t2015-08-22 16:19:56\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t17\t57.4\t975.8\t2016-02-09 02:24:02\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t8\t45.89\t367.12\t2015-11-06 00:53:43\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t9\t71.73\t645.57\t2015-07-12 15:48:36\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t20\t42.25\t845\t2015-07-31 10:46:21\n218667\tJaskolski-O'Hara\tTrish Deckow\tEO-54210\tShirt\t5\t97.15\t485.75\t2015-11-30 07:56:00\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t18\t66.19\t1191.42\t2015-07-21 19:59:59\n262693\tZiemann-Heidenreich\tLoring Predovic\tGJ-90272\tShoes\t10\t35.17\t351.7\t2016-02-23 08:10:10\n398620\tBrekke Ltd\tEsequiel Schinner\tFI-01804\tShirt\t17\t37.57\t638.69\t2016-02-22 12:42:42\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t14\t38.43\t538.02\t2015-07-29 01:36:15\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t11\t65.58\t721.38\t2015-07-01 19:35:33\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t10\t88.66\t886.6\t2016-03-21 19:08:54\n453258\tRunolfsson-Bayer\tShannen Hudson\tTL-23025\tShoes\t19\t57.29\t1088.51\t2016-05-28 06:46:55\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t4\t15.5\t62\t2016-01-04 06:07:17\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t7\t39.75\t278.25\t2016-05-18 05:49:51\n752312\tWatsica-Pfannerstill\tLoring Predovic\tEO-54210\tShirt\t20\t13.36\t267.2\t2015-07-26 20:53:51\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t18\t30.4\t547.2\t2016-01-08 07:54:37\n262693\tZiemann-Heidenreich\tLoring Predovic\tGP-14407\tBelt\t18\t57.17\t1029.06\t2015-08-01 15:27:18\n758030\tKilback-Abernathy\tTrish Deckow\tNZ-99565\tShirt\t6\t83.56\t501.36\t2015-11-06 20:46:36\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t7\t80.34\t562.38\t2015-12-22 18:06:48\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t5\t74.51\t372.55\t2015-06-17 15:33:42\n93583\tHegmann-Howell\tEsequiel Schinner\tFI-01804\tShirt\t6\t36.07\t216.42\t2015-08-16 15:54:56\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t11\t68.02\t748.22\t2016-03-31 09:48:53\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tDU-87462\tShirt\t19\t47.84\t908.96\t2015-07-10 18:45:01\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t17\t27.56\t468.52\t2015-08-13 17:26:13\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t10\t20.36\t203.6\t2016-05-04 11:43:07\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t13\t86.75\t1127.75\t2015-12-11 22:29:56\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t10\t14.26\t142.6\t2015-07-07 00:57:18\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t17\t78.75\t1338.75\t2015-12-26 21:57:47\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t1\t11.75\t11.75\t2015-12-27 04:27:54\n453258\tRunolfsson-Bayer\tShannen Hudson\tHZ-54995\tBelt\t17\t16.72\t284.24\t2015-09-17 20:14:18\n759168\tSchaefer Inc\tLoring Predovic\tTK-29646\tShoes\t14\t62.5\t875\t2015-11-04 23:13:42\n758030\tKilback-Abernathy\tTrish Deckow\tFI-01804\tShirt\t1\t43.14\t43.14\t2016-04-30 02:00:35\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tEO-54210\tShirt\t5\t15.24\t76.2\t2016-01-25 16:38:33\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t15\t18.48\t277.2\t2016-05-14 16:57:25\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t12\t20.22\t242.64\t2015-11-27 10:10:48\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t14\t55.89\t782.46\t2015-10-14 05:44:45\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t11\t78.26\t860.86\t2016-04-17 18:42:31\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t10\t74.96\t749.6\t2015-06-18 21:07:15\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t17\t42.38\t720.46\t2016-05-04 14:15:32\n282122\tConnelly, Abshire and Von\tBeth Skiles\tDU-87462\tShirt\t16\t54.87\t877.92\t2015-06-25 07:00:40\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t20\t86.77\t1735.4\t2016-02-29 10:05:51\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t7\t55.59\t389.13\t2015-12-28 13:47:46\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t6\t25.07\t150.42\t2016-04-15 12:52:04\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t1\t89.66\t89.66\t2015-11-22 21:55:16\n453258\tRunolfsson-Bayer\tShannen Hudson\tTL-23025\tShoes\t8\t68.81\t550.48\t2015-10-10 10:14:02\n282122\tConnelly, Abshire and Von\tBeth Skiles\tFI-01804\tShirt\t20\t48.77\t975.4\t2015-11-02 10:41:05\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t6\t81.32\t487.92\t2015-10-21 01:20:46\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t15\t50.62\t759.3\t2016-02-07 14:21:57\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t16\t35.7\t571.2\t2016-05-18 21:01:24\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tHZ-54995\tBelt\t3\t78.73\t236.19\t2016-03-04 22:39:49\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t18\t42.44\t763.92\t2015-12-03 14:44:16\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t1\t39.48\t39.48\t2015-10-06 07:26:06\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t4\t75.96\t303.84\t2015-12-24 11:19:46\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t5\t89.2\t446\t2015-07-12 18:59:29\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t6\t33.13\t198.78\t2016-01-29 12:13:07\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t2\t90.49\t180.98\t2015-06-29 06:39:21\n453258\tRunolfsson-Bayer\tShannen Hudson\tDU-87462\tShirt\t9\t11.24\t101.16\t2015-08-13 13:28:50\n453258\tRunolfsson-Bayer\tShannen Hudson\tDU-87462\tShirt\t6\t87.86\t527.16\t2015-11-12 02:44:00\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t9\t77.85\t700.65\t2015-08-16 22:43:35\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t6\t37.31\t223.86\t2015-08-11 20:20:12\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t19\t88.67\t1684.73\t2015-06-21 15:48:23\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t11\t82.51\t907.61\t2016-04-04 12:30:34\n680916\tMueller and Sons\tLoring Predovic\tEO-54210\tShirt\t3\t90.13\t270.39\t2016-03-30 01:55:33\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tDU-87462\tShirt\t10\t93.39\t933.9\t2016-05-26 06:06:40\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t16\t10.52\t168.32\t2015-07-15 23:13:38\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t5\t78.54\t392.7\t2016-04-05 03:03:05\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t15\t30.82\t462.3\t2015-12-29 02:46:13\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t18\t38.31\t689.58\t2016-02-13 22:07:31\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t9\t51.44\t462.96\t2015-09-18 10:07:09\n282122\tConnelly, Abshire and Von\tBeth Skiles\tDU-87462\tShirt\t20\t48.29\t965.8\t2015-08-28 02:43:55\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t16\t66.73\t1067.68\t2016-02-27 18:00:40\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t3\t29.63\t88.89\t2016-05-17 21:31:10\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t17\t24.81\t421.77\t2015-09-18 06:27:42\n93583\tHegmann-Howell\tEsequiel Schinner\tGJ-90272\tShoes\t17\t77.87\t1323.79\t2016-01-31 04:42:23\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t5\t23.78\t118.9\t2015-10-22 16:25:26\n93583\tHegmann-Howell\tEsequiel Schinner\tFI-01804\tShirt\t20\t99.25\t1985\t2016-04-06 16:25:00\n280749\tDouglas PLC\tTeagan O'Keefe\tDU-87462\tShirt\t2\t96.51\t193.02\t2015-10-24 05:50:53\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t4\t13.11\t52.44\t2015-08-30 15:25:22\n280749\tDouglas PLC\tTeagan O'Keefe\tEO-54210\tShirt\t13\t45.85\t596.05\t2015-11-01 10:25:14\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tFI-01804\tShirt\t18\t38.88\t699.84\t2016-02-25 01:36:57\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t2\t10.78\t21.56\t2016-01-19 12:26:16\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t10\t18.87\t188.7\t2016-04-30 21:04:38\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t2\t46.45\t92.9\t2015-10-16 04:53:06\n398620\tBrekke Ltd\tEsequiel Schinner\tGP-14407\tBelt\t6\t83.4\t500.4\t2016-03-22 03:14:16\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t6\t96.15\t576.9\t2016-05-05 13:34:56\n752312\tWatsica-Pfannerstill\tLoring Predovic\tDU-87462\tShirt\t3\t38.31\t114.93\t2016-04-14 10:03:00\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t16\t81.68\t1306.88\t2016-01-01 02:51:33\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t15\t76.98\t1154.7\t2015-11-27 12:13:20\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tFI-01804\tShirt\t15\t88.49\t1327.35\t2016-02-23 11:02:48\n680916\tMueller and Sons\tLoring Predovic\tZY-38455\tShirt\t11\t86.46\t951.06\t2015-10-18 21:49:11\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t19\t12.66\t240.54\t2015-07-15 01:14:22\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGJ-90272\tShoes\t15\t17.22\t258.3\t2016-05-20 07:46:24\n887145\tGislason LLC\tLoring Predovic\tTL-23025\tShoes\t11\t61.57\t677.27\t2015-07-28 09:19:07\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t7\t72.39\t506.73\t2016-01-20 10:19:27\n93583\tHegmann-Howell\tEsequiel Schinner\tNZ-99565\tShirt\t11\t13.46\t148.06\t2016-06-03 06:36:55\n218667\tJaskolski-O'Hara\tTrish Deckow\tTK-29646\tShoes\t13\t78.53\t1020.89\t2016-03-22 11:46:03\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGJ-90272\tShoes\t14\t74.52\t1043.28\t2015-06-29 12:09:29\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t9\t39.14\t352.26\t2016-02-11 15:27:05\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGJ-90272\tShoes\t8\t21.21\t169.68\t2016-03-20 18:19:30\n680916\tMueller and Sons\tLoring Predovic\tGJ-90272\tShoes\t3\t69.14\t207.42\t2015-06-27 11:19:56\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t5\t81.92\t409.6\t2015-11-04 16:29:33\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t8\t48.18\t385.44\t2016-04-19 23:55:10\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGP-14407\tBelt\t1\t92.3\t92.3\t2015-11-18 21:31:14\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t1\t85.94\t85.94\t2016-06-08 20:12:08\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t11\t13.75\t151.25\t2015-08-10 13:06:00\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t16\t69.01\t1104.16\t2016-05-01 20:32:12\n398620\tBrekke Ltd\tEsequiel Schinner\tHZ-54995\tBelt\t1\t68.32\t68.32\t2016-04-27 05:07:20\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t9\t94.67\t852.03\t2016-01-16 07:35:33\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t16\t30.44\t487.04\t2015-12-24 09:14:03\n398620\tBrekke Ltd\tEsequiel Schinner\tGP-14407\tBelt\t15\t16.66\t249.9\t2015-12-28 00:54:17\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t10\t29.52\t295.2\t2016-03-20 04:57:32\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t13\t66.16\t860.08\t2015-07-12 17:53:46\n680916\tMueller and Sons\tLoring Predovic\tFI-01804\tShirt\t1\t83.48\t83.48\t2015-10-10 12:10:07\n93583\tHegmann-Howell\tEsequiel Schinner\tDU-87462\tShirt\t9\t53.76\t483.84\t2015-11-22 10:39:22\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t9\t98.5\t886.5\t2015-09-16 20:37:17\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t4\t90.59\t362.36\t2015-12-07 06:48:05\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t1\t89.87\t89.87\t2015-08-28 11:16:00\n680916\tMueller and Sons\tLoring Predovic\tTL-23025\tShoes\t20\t61.65\t1233\t2016-02-05 07:14:29\n398620\tBrekke Ltd\tEsequiel Schinner\tFI-01804\tShirt\t8\t84.25\t674\t2016-01-22 23:37:32\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t10\t47.1\t471\t2016-01-21 19:22:43\n218667\tJaskolski-O'Hara\tTrish Deckow\tTL-23025\tShoes\t17\t49.15\t835.55\t2016-03-22 17:56:52\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t6\t57.32\t343.92\t2016-02-10 08:22:35\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t17\t51.03\t867.51\t2016-06-10 16:03:27\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t12\t14.38\t172.56\t2015-12-10 21:08:22\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t16\t74.32\t1189.12\t2015-07-09 08:48:11\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t15\t35.34\t530.1\t2015-06-18 00:59:00\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t12\t62.48\t749.76\t2016-03-16 04:42:32\n453258\tRunolfsson-Bayer\tShannen Hudson\tHZ-54995\tBelt\t17\t88.73\t1508.41\t2015-11-21 21:00:55\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t13\t47.89\t622.57\t2015-10-17 03:08:58\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t7\t13.63\t95.41\t2016-04-14 20:30:01\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t3\t37.24\t111.72\t2015-11-05 06:36:39\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t11\t51.56\t567.16\t2016-05-18 20:33:02\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t10\t77.34\t773.4\t2016-02-12 19:11:47\n759168\tSchaefer Inc\tLoring Predovic\tZY-38455\tShirt\t4\t87.6\t350.4\t2016-05-16 11:43:56\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t18\t87.73\t1579.14\t2016-01-13 08:41:56\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tZY-38455\tShirt\t20\t89.45\t1789\t2015-10-26 16:05:25\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t14\t42.13\t589.82\t2015-10-26 08:14:20\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t5\t30.63\t153.15\t2016-03-09 19:41:16\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t15\t14.5\t217.5\t2015-08-27 21:21:05\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t9\t95.41\t858.69\t2015-11-14 17:26:28\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t5\t96.79\t483.95\t2016-04-02 02:33:30\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t20\t31.6\t632\t2015-12-24 15:15:13\n887145\tGislason LLC\tLoring Predovic\tTK-29646\tShoes\t18\t31.53\t567.54\t2015-09-29 01:53:12\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGP-14407\tBelt\t13\t67.71\t880.23\t2015-08-24 08:01:49\n758030\tKilback-Abernathy\tTrish Deckow\tEO-54210\tShirt\t7\t14.02\t98.14\t2016-01-26 13:05:29\n251881\tZulauf-Grady\tTeagan O'Keefe\tEO-54210\tShirt\t14\t13.7\t191.8\t2016-05-04 05:20:47\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tZY-38455\tShirt\t13\t42.24\t549.12\t2015-12-23 18:36:25\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t12\t73.5\t882\t2016-03-27 06:21:34\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tNZ-99565\tShirt\t14\t60.97\t853.58\t2016-03-28 15:22:30\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t20\t15.58\t311.6\t2016-01-25 23:06:19\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t8\t74.64\t597.12\t2016-01-09 16:33:01\n136521\tLabadie and Sons\tEsequiel Schinner\tDU-87462\tShirt\t17\t75.41\t1281.97\t2015-10-08 00:27:07\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t18\t57.6\t1036.8\t2015-07-22 08:51:17\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t1\t75.59\t75.59\t2015-08-08 06:45:28\n62592\tO'Keefe-Koch\tShannen Hudson\tNZ-99565\tShirt\t20\t89.66\t1793.2\t2015-11-20 01:28:49\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t7\t28.77\t201.39\t2016-02-06 21:44:08\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tFI-01804\tShirt\t15\t66.28\t994.2\t2016-05-17 18:40:02\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t2\t25.51\t51.02\t2015-12-21 14:59:20\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t18\t67.38\t1212.84\t2016-03-24 16:37:57\n453258\tRunolfsson-Bayer\tShannen Hudson\tNZ-99565\tShirt\t2\t39.99\t79.98\t2015-10-01 23:00:39\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t5\t76.57\t382.85\t2016-03-16 00:15:08\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t5\t82.79\t413.95\t2016-01-06 21:14:00\n758030\tKilback-Abernathy\tTrish Deckow\tGP-14407\tBelt\t6\t74.65\t447.9\t2016-01-15 01:07:52\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t5\t53.26\t266.3\t2015-12-10 18:11:02\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tDU-87462\tShirt\t11\t42.63\t468.93\t2016-03-27 06:30:56\n887145\tGislason LLC\tLoring Predovic\tTL-23025\tShoes\t4\t87.16\t348.64\t2015-10-03 04:35:36\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t18\t13.51\t243.18\t2016-05-29 17:54:10\n398620\tBrekke Ltd\tEsequiel Schinner\tEO-54210\tShirt\t13\t25.26\t328.38\t2016-04-30 18:03:40\n136521\tLabadie and Sons\tEsequiel Schinner\tGP-14407\tBelt\t9\t11.57\t104.13\t2015-12-21 05:39:51\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t16\t30.1\t481.6\t2016-01-15 10:08:12\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t9\t88.8\t799.2\t2016-06-06 15:12:51\n218667\tJaskolski-O'Hara\tTrish Deckow\tHZ-54995\tBelt\t17\t23.92\t406.64\t2016-03-06 13:51:04\n93583\tHegmann-Howell\tEsequiel Schinner\tHZ-54995\tBelt\t13\t33.44\t434.72\t2016-03-21 21:42:03\n282122\tConnelly, Abshire and Von\tBeth Skiles\tNZ-99565\tShirt\t6\t66.58\t399.48\t2015-12-11 21:38:53\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t20\t31.23\t624.6\t2015-09-19 18:29:29\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t12\t58.36\t700.32\t2015-09-28 02:34:08\n62592\tO'Keefe-Koch\tShannen Hudson\tDU-87462\tShirt\t17\t16.97\t288.49\t2016-01-14 02:46:54\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t15\t62.24\t933.6\t2016-04-15 02:27:31\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t7\t44.21\t309.47\t2015-12-23 14:12:04\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t14\t75.84\t1061.76\t2015-07-16 18:34:19\n218667\tJaskolski-O'Hara\tTrish Deckow\tTK-29646\tShoes\t6\t92.31\t553.86\t2015-07-27 03:18:15\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t3\t80.39\t241.17\t2016-06-14 06:59:38\n759168\tSchaefer Inc\tLoring Predovic\tNZ-99565\tShirt\t13\t89.64\t1165.32\t2016-01-09 03:54:44\n759168\tSchaefer Inc\tLoring Predovic\tTL-23025\tShoes\t16\t93.57\t1497.12\t2016-03-21 21:13:24\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t12\t70.1\t841.2\t2016-01-31 23:50:37\n218667\tJaskolski-O'Hara\tTrish Deckow\tHZ-54995\tBelt\t8\t86.67\t693.36\t2015-06-18 23:36:37\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t17\t28.87\t490.79\t2016-02-21 11:47:57\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t19\t24.8\t471.2\t2015-11-29 03:01:53\n530925\tPurdy and Sons\tTeagan O'Keefe\tNZ-99565\tShirt\t3\t96.91\t290.73\t2015-11-22 09:16:14\n251881\tZulauf-Grady\tTeagan O'Keefe\tEO-54210\tShirt\t1\t72.88\t72.88\t2015-09-13 05:15:45\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t8\t86.55\t692.4\t2015-12-08 05:11:41\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t19\t28.26\t536.94\t2015-08-10 03:48:07\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t6\t85.47\t512.82\t2015-09-05 15:50:05\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t4\t81.97\t327.88\t2015-11-05 09:50:42\n282122\tConnelly, Abshire and Von\tBeth Skiles\tZY-38455\tShirt\t17\t49.68\t844.56\t2015-08-01 11:46:08\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t14\t80.27\t1123.78\t2016-05-15 05:10:05\n136521\tLabadie and Sons\tEsequiel Schinner\tDU-87462\tShirt\t19\t59.08\t1122.52\t2015-11-13 22:50:07\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t19\t99.9\t1898.1\t2016-03-12 09:04:00\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tZY-38455\tShirt\t1\t80.39\t80.39\t2016-01-21 12:16:53\n453258\tRunolfsson-Bayer\tShannen Hudson\tTL-23025\tShoes\t1\t19.62\t19.62\t2015-12-17 09:18:10\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t1\t21.23\t21.23\t2016-03-20 18:13:44\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t8\t69.58\t556.64\t2016-04-04 01:48:48\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t11\t57.4\t631.4\t2015-07-19 01:14:00\n887145\tGislason LLC\tLoring Predovic\tTL-23025\tShoes\t14\t26.28\t367.92\t2016-03-28 20:50:14\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t7\t39.7\t277.9\t2015-07-01 05:57:09\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t3\t67.52\t202.56\t2015-12-13 20:37:01\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t8\t18.14\t145.12\t2016-02-23 05:55:21\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t3\t30.65\t91.95\t2016-05-25 15:48:53\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t1\t79.38\t79.38\t2015-09-29 22:05:16\n280749\tDouglas PLC\tTeagan O'Keefe\tEO-54210\tShirt\t19\t99.24\t1885.56\t2015-10-18 02:05:41\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t9\t67.85\t610.65\t2016-03-05 19:02:44\n282122\tConnelly, Abshire and Von\tBeth Skiles\tNZ-99565\tShirt\t9\t28.92\t260.28\t2016-05-31 15:23:54\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t9\t99.69\t897.21\t2016-05-13 17:31:58\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t15\t52.17\t782.55\t2015-09-04 10:04:49\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t1\t95.98\t95.98\t2015-08-15 02:14:49\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t3\t90.08\t270.24\t2016-01-15 16:22:49\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t7\t27.88\t195.16\t2016-01-16 10:29:41\n758030\tKilback-Abernathy\tTrish Deckow\tGP-14407\tBelt\t2\t90.81\t181.62\t2016-05-04 09:55:57\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t20\t95.51\t1910.2\t2016-02-14 11:16:54\n759168\tSchaefer Inc\tLoring Predovic\tFI-01804\tShirt\t9\t30.98\t278.82\t2015-09-07 08:02:32\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t20\t73\t1460\t2016-01-22 12:29:50\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t12\t87.85\t1054.2\t2015-07-29 22:03:25\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t1\t26.5\t26.5\t2015-07-23 16:58:05\n218667\tJaskolski-O'Hara\tTrish Deckow\tHZ-54995\tBelt\t5\t96.08\t480.4\t2015-10-15 07:00:10\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t5\t17.37\t86.85\t2015-10-26 09:29:40\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t1\t42.75\t42.75\t2015-09-05 21:27:40\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t11\t73.93\t813.23\t2016-02-13 04:30:59\n93583\tHegmann-Howell\tEsequiel Schinner\tHZ-54995\tBelt\t17\t76.22\t1295.74\t2015-10-18 09:53:00\n887145\tGislason LLC\tLoring Predovic\tGP-14407\tBelt\t7\t51.7\t361.9\t2015-10-26 00:17:23\n759168\tSchaefer Inc\tLoring Predovic\tTL-23025\tShoes\t14\t83.77\t1172.78\t2015-07-05 16:38:06\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t13\t42.31\t550.03\t2015-09-28 21:46:35\n752312\tWatsica-Pfannerstill\tLoring Predovic\tDU-87462\tShirt\t17\t85.96\t1461.32\t2015-08-14 09:00:28\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t13\t22.62\t294.06\t2016-03-18 10:59:25\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tDU-87462\tShirt\t2\t41.75\t83.5\t2015-07-23 08:09:07\n398620\tBrekke Ltd\tEsequiel Schinner\tEO-54210\tShirt\t14\t49.36\t691.04\t2016-03-31 04:59:02\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t20\t29.81\t596.2\t2015-10-01 13:58:33\n453258\tRunolfsson-Bayer\tShannen Hudson\tGP-14407\tBelt\t1\t58.71\t58.71\t2016-05-20 20:54:07\n887145\tGislason LLC\tLoring Predovic\tTL-23025\tShoes\t6\t91.98\t551.88\t2016-03-20 02:23:19\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t16\t26.8\t428.8\t2015-10-24 10:43:03\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t11\t33.09\t363.99\t2015-11-16 13:52:56\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t12\t20.12\t241.44\t2016-05-04 04:17:06\n136521\tLabadie and Sons\tEsequiel Schinner\tDU-87462\tShirt\t2\t51.4\t102.8\t2015-07-30 18:12:05\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t15\t70.6\t1059\t2015-06-23 00:24:16\n887145\tGislason LLC\tLoring Predovic\tDU-87462\tShirt\t17\t40.63\t690.71\t2015-12-21 19:13:55\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTL-23025\tShoes\t13\t11.36\t147.68\t2015-09-27 02:06:31\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t17\t29.89\t508.13\t2016-03-02 04:26:05\n453258\tRunolfsson-Bayer\tShannen Hudson\tFI-01804\tShirt\t18\t38.43\t691.74\t2015-10-03 00:53:48\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t17\t83.88\t1425.96\t2015-10-29 17:02:31\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tZY-38455\tShirt\t20\t30.7\t614\t2015-06-20 09:15:40\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tFI-01804\tShirt\t1\t58.27\t58.27\t2016-02-06 20:22:10\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t10\t58.64\t586.4\t2015-10-04 04:24:29\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t6\t90.61\t543.66\t2015-11-13 15:11:46\n758030\tKilback-Abernathy\tTrish Deckow\tGP-14407\tBelt\t15\t94.43\t1416.45\t2016-03-17 03:50:49\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t19\t21.77\t413.63\t2015-08-28 08:18:06\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t14\t45.2\t632.8\t2016-02-27 19:37:13\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t4\t22.68\t90.72\t2016-03-03 00:32:29\n758030\tKilback-Abernathy\tTrish Deckow\tTK-29646\tShoes\t2\t79.33\t158.66\t2015-07-05 07:13:45\n530925\tPurdy and Sons\tTeagan O'Keefe\tTL-23025\tShoes\t10\t88.81\t888.1\t2015-10-26 19:44:32\n453258\tRunolfsson-Bayer\tShannen Hudson\tZY-38455\tShirt\t8\t38.21\t305.68\t2015-09-17 08:02:13\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t5\t37.83\t189.15\t2015-09-12 02:30:27\n759168\tSchaefer Inc\tLoring Predovic\tEO-54210\tShirt\t17\t94.04\t1598.68\t2016-06-08 14:23:28\n280749\tDouglas PLC\tTeagan O'Keefe\tDU-87462\tShirt\t14\t35.51\t497.14\t2015-06-19 02:44:20\n62592\tO'Keefe-Koch\tShannen Hudson\tHZ-54995\tBelt\t10\t74.65\t746.5\t2015-09-20 14:08:02\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t4\t68.78\t275.12\t2015-07-13 07:54:21\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t3\t13.92\t41.76\t2016-02-02 13:43:47\n680916\tMueller and Sons\tLoring Predovic\tHZ-54995\tBelt\t19\t35.7\t678.3\t2015-11-02 06:28:15\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t3\t21.77\t65.31\t2015-12-12 17:56:02\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t1\t38.29\t38.29\t2015-12-21 17:56:11\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t2\t25.2\t50.4\t2015-08-05 06:10:20\n759168\tSchaefer Inc\tLoring Predovic\tDU-87462\tShirt\t15\t62.53\t937.95\t2015-11-28 10:44:52\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t2\t60.27\t120.54\t2015-08-10 06:27:56\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t14\t35.92\t502.88\t2015-10-09 02:08:25\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTK-29646\tShoes\t6\t88.69\t532.14\t2016-01-07 14:36:42\n680916\tMueller and Sons\tLoring Predovic\tHZ-54995\tBelt\t18\t17.61\t316.98\t2015-12-14 09:24:06\n398620\tBrekke Ltd\tEsequiel Schinner\tFI-01804\tShirt\t12\t36.39\t436.68\t2015-12-02 05:27:04\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t13\t92.17\t1198.21\t2016-02-21 01:46:10\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t15\t44.41\t666.15\t2015-07-11 18:11:37\n759168\tSchaefer Inc\tLoring Predovic\tHZ-54995\tBelt\t7\t86.04\t602.28\t2015-11-17 20:34:12\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTK-29646\tShoes\t13\t99.08\t1288.04\t2016-04-07 10:45:22\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t9\t63.09\t567.81\t2016-04-28 11:00:46\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t8\t33.49\t267.92\t2016-03-05 21:00:49\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t11\t76.83\t845.13\t2016-04-07 21:29:59\n759168\tSchaefer Inc\tLoring Predovic\tDU-87462\tShirt\t6\t52.15\t312.9\t2016-06-11 02:11:20\n398620\tBrekke Ltd\tEsequiel Schinner\tHZ-54995\tBelt\t20\t42.21\t844.2\t2016-06-12 15:35:59\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t17\t25.94\t440.98\t2016-03-21 18:10:30\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t7\t31.14\t217.98\t2016-03-11 04:35:56\n136521\tLabadie and Sons\tEsequiel Schinner\tNZ-99565\tShirt\t17\t21.78\t370.26\t2015-11-26 14:45:36\n887145\tGislason LLC\tLoring Predovic\tGP-14407\tBelt\t18\t30.04\t540.72\t2016-03-24 06:50:51\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t19\t85.18\t1618.42\t2016-03-04 14:53:59\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t16\t57.82\t925.12\t2015-10-08 02:05:32\n282122\tConnelly, Abshire and Von\tBeth Skiles\tZY-38455\tShirt\t16\t32.06\t512.96\t2015-06-25 23:04:47\n136521\tLabadie and Sons\tEsequiel Schinner\tEO-54210\tShirt\t19\t84.25\t1600.75\t2016-05-06 20:22:18\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tNZ-99565\tShirt\t17\t55.98\t951.66\t2015-10-26 18:29:32\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t16\t17.63\t282.08\t2015-06-28 10:57:58\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t3\t50.53\t151.59\t2016-02-20 02:42:24\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t17\t68.7\t1167.9\t2016-04-07 11:15:34\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t5\t79.26\t396.3\t2016-06-06 21:59:01\n758030\tKilback-Abernathy\tTrish Deckow\tNZ-99565\tShirt\t3\t67.95\t203.85\t2015-12-04 00:04:08\n218667\tJaskolski-O'Hara\tTrish Deckow\tHZ-54995\tBelt\t19\t77.63\t1474.97\t2016-02-27 18:22:26\n530925\tPurdy and Sons\tTeagan O'Keefe\tTL-23025\tShoes\t16\t49.24\t787.84\t2015-11-20 10:41:23\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t10\t33.15\t331.5\t2016-06-11 16:46:22\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t9\t66.92\t602.28\t2015-08-01 13:45:24\n530925\tPurdy and Sons\tTeagan O'Keefe\tGP-14407\tBelt\t12\t74.12\t889.44\t2016-04-23 06:51:24\n887145\tGislason LLC\tLoring Predovic\tGJ-90272\tShoes\t4\t70.61\t282.44\t2015-08-13 19:46:11\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t17\t59.11\t1004.87\t2015-06-16 00:22:29\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t17\t36.23\t615.91\t2016-02-08 14:07:38\n136521\tLabadie and Sons\tEsequiel Schinner\tEO-54210\tShirt\t10\t78.55\t785.5\t2015-10-21 04:11:07\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t15\t35.85\t537.75\t2015-09-07 19:26:46\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t6\t82.65\t495.9\t2016-05-11 21:44:59\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t7\t54.9\t384.3\t2015-09-01 17:14:02\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tFI-01804\tShirt\t5\t35.37\t176.85\t2016-05-07 21:52:57\n262693\tZiemann-Heidenreich\tLoring Predovic\tZY-38455\tShirt\t13\t49.27\t640.51\t2015-06-29 14:57:30\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t17\t54.5\t926.5\t2015-07-07 16:55:49\n282122\tConnelly, Abshire and Von\tBeth Skiles\tDU-87462\tShirt\t14\t46.71\t653.94\t2016-01-19 11:35:10\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t14\t49.86\t698.04\t2016-02-07 08:12:27\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGP-14407\tBelt\t18\t21.33\t383.94\t2015-12-10 12:18:06\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t17\t31.06\t528.02\t2015-07-01 13:50:34\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t14\t29.8\t417.2\t2015-08-10 23:13:09\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t15\t64.94\t974.1\t2015-12-31 12:41:21\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t19\t38.12\t724.28\t2015-08-25 12:50:12\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t1\t27.15\t27.15\t2015-10-25 09:58:45\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tHZ-54995\tBelt\t7\t57.6\t403.2\t2015-09-29 13:52:45\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t17\t88.9\t1511.3\t2016-01-22 00:16:33\n887145\tGislason LLC\tLoring Predovic\tTK-29646\tShoes\t10\t74.8\t748\t2015-09-15 21:23:19\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t4\t87.59\t350.36\t2015-12-10 13:22:51\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t6\t93.94\t563.64\t2016-05-20 19:46:09\n218667\tJaskolski-O'Hara\tTrish Deckow\tNZ-99565\tShirt\t8\t50.54\t404.32\t2016-03-04 11:16:38\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t15\t82.43\t1236.45\t2015-12-11 20:29:55\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTK-29646\tShoes\t18\t54.49\t980.82\t2015-12-17 13:03:57\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t20\t57.08\t1141.6\t2015-12-29 11:41:27\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t20\t22.69\t453.8\t2015-12-10 23:35:28\n62592\tO'Keefe-Koch\tShannen Hudson\tNZ-99565\tShirt\t2\t48.04\t96.08\t2016-04-10 09:47:16\n62592\tO'Keefe-Koch\tShannen Hudson\tGJ-90272\tShoes\t3\t12.97\t38.91\t2016-03-10 09:01:55\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t12\t41.23\t494.76\t2016-03-12 19:02:26\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t19\t95.97\t1823.43\t2015-07-25 07:10:58\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t20\t37.24\t744.8\t2016-04-26 13:12:51\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t17\t65.63\t1115.71\t2015-08-27 20:19:42\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t13\t88.83\t1154.79\t2016-02-25 15:25:04\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t13\t48.79\t634.27\t2015-11-27 22:23:09\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t18\t21.73\t391.14\t2016-01-10 00:07:03\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t6\t15.54\t93.24\t2015-12-26 17:28:43\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t5\t27.9\t139.5\t2016-03-12 19:44:40\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t6\t35.25\t211.5\t2015-12-16 01:37:04\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t16\t96.6\t1545.6\t2015-10-26 10:02:50\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t2\t37.94\t75.88\t2016-01-11 07:30:56\n752312\tWatsica-Pfannerstill\tLoring Predovic\tDU-87462\tShirt\t5\t99.77\t498.85\t2015-08-14 13:30:18\n453258\tRunolfsson-Bayer\tShannen Hudson\tHZ-54995\tBelt\t20\t45.9\t918\t2015-12-24 17:48:43\n752312\tWatsica-Pfannerstill\tLoring Predovic\tDU-87462\tShirt\t11\t20.19\t222.09\t2015-08-13 07:01:47\n93583\tHegmann-Howell\tEsequiel Schinner\tFI-01804\tShirt\t4\t97.05\t388.2\t2016-06-02 15:33:33\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t11\t46.35\t509.85\t2016-02-13 01:49:05\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t12\t98\t1176\t2016-04-20 22:18:13\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tNZ-99565\tShirt\t10\t32.69\t326.9\t2015-09-20 23:36:14\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t14\t64.72\t906.08\t2015-10-12 12:13:11\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t17\t77.98\t1325.66\t2016-01-25 19:10:06\n680916\tMueller and Sons\tLoring Predovic\tGJ-90272\tShoes\t5\t55.87\t279.35\t2015-08-13 12:34:51\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t9\t13.86\t124.74\t2016-02-09 06:49:16\n759168\tSchaefer Inc\tLoring Predovic\tEO-54210\tShirt\t14\t77.27\t1081.78\t2016-06-11 07:15:32\n758030\tKilback-Abernathy\tTrish Deckow\tNZ-99565\tShirt\t1\t68.6\t68.6\t2015-08-19 07:13:09\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t7\t67.47\t472.29\t2016-02-07 00:52:06\n453258\tRunolfsson-Bayer\tShannen Hudson\tNZ-99565\tShirt\t14\t69.17\t968.38\t2015-07-07 01:36:32\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t2\t31.82\t63.64\t2015-09-26 05:32:58\n759168\tSchaefer Inc\tLoring Predovic\tTL-23025\tShoes\t9\t10.33\t92.97\t2016-03-13 14:29:14\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t3\t33.7\t101.1\t2015-06-20 01:53:54\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t13\t85.14\t1106.82\t2016-05-20 04:18:19\n453258\tRunolfsson-Bayer\tShannen Hudson\tDU-87462\tShirt\t15\t60.86\t912.9\t2015-06-18 04:49:24\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t15\t42.41\t636.15\t2016-05-02 23:13:54\n530925\tPurdy and Sons\tTeagan O'Keefe\tEO-54210\tShirt\t15\t60.55\t908.25\t2015-07-30 06:30:48\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t14\t90.95\t1273.3\t2016-06-12 22:38:41\n218667\tJaskolski-O'Hara\tTrish Deckow\tEO-54210\tShirt\t1\t63.54\t63.54\t2015-12-17 07:54:32\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t18\t24.24\t436.32\t2015-07-01 08:11:11\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t13\t11.05\t143.65\t2015-12-21 09:17:00\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t1\t56.21\t56.21\t2016-05-28 01:54:20\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tDU-87462\tShirt\t6\t36.62\t219.72\t2015-08-16 08:02:30\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t12\t32.34\t388.08\t2015-08-15 15:12:14\n282122\tConnelly, Abshire and Von\tBeth Skiles\tFI-01804\tShirt\t8\t92.32\t738.56\t2015-09-04 18:49:14\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t2\t55.56\t111.12\t2016-04-17 02:57:35\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t18\t35.01\t630.18\t2015-10-30 22:03:14\n262693\tZiemann-Heidenreich\tLoring Predovic\tNZ-99565\tShirt\t7\t44.92\t314.44\t2016-04-11 10:21:47\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t12\t78.64\t943.68\t2015-08-19 04:16:09\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t19\t85.3\t1620.7\t2016-06-08 22:52:53\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t19\t45.33\t861.27\t2015-10-03 06:41:13\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t8\t54.71\t437.68\t2015-10-04 20:08:28\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t8\t11.56\t92.48\t2015-09-13 11:59:46\n218667\tJaskolski-O'Hara\tTrish Deckow\tTL-23025\tShoes\t17\t84.99\t1444.83\t2015-12-18 10:22:09\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t12\t59.9\t718.8\t2016-06-13 16:25:36\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGP-14407\tBelt\t15\t30.62\t459.3\t2015-12-24 06:02:37\n136521\tLabadie and Sons\tEsequiel Schinner\tEO-54210\tShirt\t8\t15.23\t121.84\t2015-10-17 20:16:57\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t3\t25.41\t76.23\t2015-08-31 05:52:44\n453258\tRunolfsson-Bayer\tShannen Hudson\tHZ-54995\tBelt\t4\t69.62\t278.48\t2016-03-15 05:44:08\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t17\t42.83\t728.11\t2015-08-10 21:03:07\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t6\t85.22\t511.32\t2015-12-25 08:03:32\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t12\t59.21\t710.52\t2016-04-29 14:26:51\n758030\tKilback-Abernathy\tTrish Deckow\tFI-01804\tShirt\t14\t22.04\t308.56\t2016-03-05 22:24:01\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t10\t56.21\t562.1\t2016-04-30 07:46:53\n759168\tSchaefer Inc\tLoring Predovic\tFI-01804\tShirt\t4\t15.27\t61.08\t2016-02-01 14:24:47\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t5\t22.65\t113.25\t2015-11-11 22:02:39\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t18\t91.63\t1649.34\t2015-11-12 01:09:42\n453258\tRunolfsson-Bayer\tShannen Hudson\tFI-01804\tShirt\t13\t19.85\t258.05\t2016-02-04 00:35:09\n759168\tSchaefer Inc\tLoring Predovic\tTL-23025\tShoes\t8\t31.32\t250.56\t2016-03-08 15:36:31\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t19\t55.9\t1062.1\t2015-06-30 13:23:08\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t14\t22.97\t321.58\t2016-02-21 17:28:53\n758030\tKilback-Abernathy\tTrish Deckow\tTK-29646\tShoes\t19\t12.43\t236.17\t2015-09-12 00:00:13\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t7\t79.34\t555.38\t2016-01-12 18:12:36\n759168\tSchaefer Inc\tLoring Predovic\tZY-38455\tShirt\t1\t59.62\t59.62\t2015-08-25 08:39:53\n136521\tLabadie and Sons\tEsequiel Schinner\tEO-54210\tShirt\t9\t68.86\t619.74\t2015-08-31 03:44:04\n680916\tMueller and Sons\tLoring Predovic\tNZ-99565\tShirt\t20\t96.82\t1936.4\t2016-04-10 16:44:47\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t20\t72.2\t1444\t2015-12-22 15:26:45\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t12\t23.01\t276.12\t2015-10-14 15:07:11\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t11\t11.18\t122.98\t2015-07-12 23:12:17\n887145\tGislason LLC\tLoring Predovic\tTL-23025\tShoes\t10\t64.17\t641.7\t2016-04-23 10:36:40\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t17\t72.21\t1227.57\t2016-02-19 09:09:36\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t4\t71.95\t287.8\t2016-02-03 05:50:23\n262693\tZiemann-Heidenreich\tLoring Predovic\tTK-29646\tShoes\t16\t59.85\t957.6\t2015-09-24 07:11:41\n759168\tSchaefer Inc\tLoring Predovic\tTK-29646\tShoes\t5\t87.47\t437.35\t2015-10-26 09:44:16\n453258\tRunolfsson-Bayer\tShannen Hudson\tGP-14407\tBelt\t4\t76.42\t305.68\t2015-09-07 02:21:17\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t14\t37.28\t521.92\t2015-09-20 16:02:14\n530925\tPurdy and Sons\tTeagan O'Keefe\tTK-29646\tShoes\t12\t52.48\t629.76\t2015-09-05 06:57:10\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t10\t98.75\t987.5\t2015-10-04 01:47:05\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t12\t38.77\t465.24\t2015-08-16 13:10:34\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t15\t64.23\t963.45\t2015-09-12 16:38:32\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t16\t10.21\t163.36\t2015-09-11 20:19:48\n218667\tJaskolski-O'Hara\tTrish Deckow\tEO-54210\tShirt\t14\t45.47\t636.58\t2015-10-20 23:02:00\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tZY-38455\tShirt\t2\t68.3\t136.6\t2015-11-25 03:18:34\n282122\tConnelly, Abshire and Von\tBeth Skiles\tFI-01804\tShirt\t5\t72.81\t364.05\t2015-09-15 09:12:54\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t10\t13.84\t138.4\t2015-12-27 09:14:45\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t1\t35.34\t35.34\t2015-12-08 07:45:15\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t12\t46.58\t558.96\t2016-04-26 16:34:55\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTK-29646\tShoes\t5\t51.01\t255.05\t2015-08-06 23:22:41\n887145\tGislason LLC\tLoring Predovic\tTL-23025\tShoes\t19\t82.7\t1571.3\t2015-11-23 11:32:39\n758030\tKilback-Abernathy\tTrish Deckow\tFI-01804\tShirt\t19\t77.73\t1476.87\t2015-09-13 23:36:42\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t7\t83.34\t583.38\t2015-07-11 16:04:28\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tHZ-54995\tBelt\t1\t10.01\t10.01\t2016-04-15 18:51:27\n93583\tHegmann-Howell\tEsequiel Schinner\tHZ-54995\tBelt\t11\t22.27\t244.97\t2016-02-02 04:12:40\n398620\tBrekke Ltd\tEsequiel Schinner\tTK-29646\tShoes\t19\t75.46\t1433.74\t2016-03-12 10:05:36\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t8\t51.64\t413.12\t2015-09-23 14:59:21\n680916\tMueller and Sons\tLoring Predovic\tGJ-90272\tShoes\t17\t33.65\t572.05\t2016-01-27 11:12:10\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t13\t31.1\t404.3\t2015-10-31 05:22:29\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t16\t55.86\t893.76\t2015-06-16 17:20:38\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t8\t33.21\t265.68\t2016-04-30 04:50:44\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t17\t16.3\t277.1\t2016-03-18 18:11:55\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t4\t14.37\t57.48\t2015-11-30 02:34:42\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTL-23025\tShoes\t20\t36.78\t735.6\t2015-09-05 00:01:37\n887145\tGislason LLC\tLoring Predovic\tGP-14407\tBelt\t1\t25.73\t25.73\t2016-04-26 02:03:03\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t14\t92.74\t1298.36\t2015-09-12 05:25:08\n759168\tSchaefer Inc\tLoring Predovic\tGJ-90272\tShoes\t17\t88.73\t1508.41\t2015-09-15 05:06:14\n62592\tO'Keefe-Koch\tShannen Hudson\tNZ-99565\tShirt\t5\t99.7\t498.5\t2016-05-09 17:22:40\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t2\t26.74\t53.48\t2016-05-22 07:47:44\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t11\t92.27\t1014.97\t2015-09-06 10:06:02\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t13\t12.73\t165.49\t2015-12-17 00:28:16\n282122\tConnelly, Abshire and Von\tBeth Skiles\tZY-38455\tShirt\t10\t94.57\t945.7\t2015-10-26 14:00:02\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tNZ-99565\tShirt\t5\t34.28\t171.4\t2016-02-08 18:21:51\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTL-23025\tShoes\t3\t50.58\t151.74\t2015-08-28 05:18:54\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTL-23025\tShoes\t6\t35.54\t213.24\t2016-02-04 04:09:28\n758030\tKilback-Abernathy\tTrish Deckow\tFI-01804\tShirt\t2\t77.7\t155.4\t2015-12-09 19:44:19\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t5\t35.88\t179.4\t2016-04-25 08:44:12\n453258\tRunolfsson-Bayer\tShannen Hudson\tFI-01804\tShirt\t18\t72.54\t1305.72\t2015-07-22 22:07:13\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t14\t32.39\t453.46\t2016-03-10 06:05:35\n398620\tBrekke Ltd\tEsequiel Schinner\tNZ-99565\tShirt\t10\t97.37\t973.7\t2016-04-09 05:11:19\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t8\t22.75\t182\t2016-03-30 08:23:25\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t13\t59.7\t776.1\t2016-04-30 13:37:43\n262693\tZiemann-Heidenreich\tLoring Predovic\tGJ-90272\tShoes\t9\t98.57\t887.13\t2016-02-08 18:29:37\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t18\t74.14\t1334.52\t2016-04-26 05:15:18\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t14\t39.04\t546.56\t2015-10-20 01:10:49\n136521\tLabadie and Sons\tEsequiel Schinner\tDU-87462\tShirt\t16\t98.29\t1572.64\t2015-12-23 08:18:27\n453258\tRunolfsson-Bayer\tShannen Hudson\tGP-14407\tBelt\t11\t90.83\t999.13\t2015-09-14 15:55:17\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t3\t58.45\t175.35\t2016-06-13 15:28:08\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t1\t37.51\t37.51\t2016-02-01 03:56:14\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t6\t55.89\t335.34\t2016-04-19 05:59:39\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t6\t62.83\t376.98\t2016-06-13 13:08:05\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t16\t62.11\t993.76\t2016-02-29 19:09:47\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t17\t11.86\t201.62\t2015-11-27 23:56:34\n453258\tRunolfsson-Bayer\tShannen Hudson\tNZ-99565\tShirt\t13\t29.38\t381.94\t2016-05-19 19:03:16\n887145\tGislason LLC\tLoring Predovic\tDU-87462\tShirt\t1\t52.94\t52.94\t2015-06-16 10:39:19\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t1\t29.45\t29.45\t2015-07-25 06:03:31\n680916\tMueller and Sons\tLoring Predovic\tEO-54210\tShirt\t2\t28.76\t57.52\t2016-01-27 08:32:23\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t9\t28.29\t254.61\t2015-08-20 19:00:48\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGP-14407\tBelt\t6\t29.53\t177.18\t2015-11-19 04:48:36\n759168\tSchaefer Inc\tLoring Predovic\tDU-87462\tShirt\t18\t29.7\t534.6\t2015-10-28 20:24:20\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t14\t70.47\t986.58\t2015-08-23 07:27:41\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTK-29646\tShoes\t5\t45.6\t228\t2016-03-07 11:43:00\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t2\t97.36\t194.72\t2016-03-19 10:47:22\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t5\t76.9\t384.5\t2015-09-16 18:22:57\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tZY-38455\tShirt\t1\t61.25\t61.25\t2015-06-29 08:03:51\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t19\t69.75\t1325.25\t2015-08-20 21:23:33\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t15\t77.73\t1165.95\t2016-03-03 07:11:38\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t4\t73.37\t293.48\t2015-10-07 21:17:54\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t19\t76.67\t1456.73\t2016-03-19 12:51:52\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t19\t26.26\t498.94\t2015-09-29 03:21:48\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t1\t77.8\t77.8\t2015-08-31 16:20:02\n398620\tBrekke Ltd\tEsequiel Schinner\tZY-38455\tShirt\t15\t30.3\t454.5\t2015-11-04 10:41:23\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t16\t61.13\t978.08\t2015-10-27 03:59:40\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t13\t53.28\t692.64\t2015-12-01 01:04:31\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tZY-38455\tShirt\t8\t10.57\t84.56\t2015-12-28 10:04:59\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t3\t50.87\t152.61\t2015-07-12 14:44:20\n453258\tRunolfsson-Bayer\tShannen Hudson\tGP-14407\tBelt\t15\t79.23\t1188.45\t2016-01-26 15:21:44\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t5\t79.88\t399.4\t2016-06-08 03:56:34\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t15\t61.17\t917.55\t2015-08-03 12:30:18\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t5\t91.65\t458.25\t2015-09-22 17:53:59\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t4\t29.21\t116.84\t2016-03-23 11:17:09\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t5\t60.55\t302.75\t2016-06-11 13:12:56\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tZY-38455\tShirt\t3\t85.3\t255.9\t2015-09-17 07:26:56\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t12\t63.28\t759.36\t2015-09-25 04:08:26\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t19\t46.74\t888.06\t2016-03-16 16:05:12\n62592\tO'Keefe-Koch\tShannen Hudson\tDU-87462\tShirt\t11\t94.04\t1034.44\t2016-02-25 00:35:46\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t7\t69.01\t483.07\t2016-01-24 22:28:39\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t12\t50.58\t606.96\t2015-10-07 03:38:18\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t3\t52.79\t158.37\t2015-12-17 17:20:54\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t1\t10.21\t10.21\t2016-03-17 07:07:27\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t18\t82.34\t1482.12\t2015-07-18 00:20:29\n218667\tJaskolski-O'Hara\tTrish Deckow\tNZ-99565\tShirt\t7\t62.52\t437.64\t2015-06-24 16:39:26\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t15\t11.58\t173.7\t2016-01-21 23:11:30\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t20\t27.61\t552.2\t2015-10-22 16:20:10\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t8\t85.56\t684.48\t2015-09-09 03:55:03\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t1\t59.65\t59.65\t2016-01-03 03:17:53\n62592\tO'Keefe-Koch\tShannen Hudson\tHZ-54995\tBelt\t7\t82.86\t580.02\t2015-09-13 01:48:03\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t11\t16.97\t186.67\t2016-01-27 03:59:56\n453258\tRunolfsson-Bayer\tShannen Hudson\tGJ-90272\tShoes\t19\t71.37\t1356.03\t2015-10-06 09:42:52\n759168\tSchaefer Inc\tLoring Predovic\tDU-87462\tShirt\t3\t56.42\t169.26\t2015-08-07 10:12:36\n530925\tPurdy and Sons\tTeagan O'Keefe\tTL-23025\tShoes\t10\t86.97\t869.7\t2015-08-02 18:56:42\n282122\tConnelly, Abshire and Von\tBeth Skiles\tDU-87462\tShirt\t4\t96.17\t384.68\t2016-03-02 16:46:17\n93583\tHegmann-Howell\tEsequiel Schinner\tNZ-99565\tShirt\t18\t17.41\t313.38\t2016-05-06 06:38:11\n280749\tDouglas PLC\tTeagan O'Keefe\tDU-87462\tShirt\t17\t71.27\t1211.59\t2015-09-04 15:54:34\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t3\t68.73\t206.19\t2015-09-10 03:39:56\n887145\tGislason LLC\tLoring Predovic\tGP-14407\tBelt\t4\t19.35\t77.4\t2015-07-02 05:12:52\n93583\tHegmann-Howell\tEsequiel Schinner\tFI-01804\tShirt\t4\t55.93\t223.72\t2015-06-16 17:47:09\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t19\t57.59\t1094.21\t2015-07-12 23:26:50\n62592\tO'Keefe-Koch\tShannen Hudson\tFI-01804\tShirt\t13\t45.98\t597.74\t2015-07-23 09:32:59\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t9\t96.71\t870.39\t2015-08-05 15:14:26\n887145\tGislason LLC\tLoring Predovic\tDU-87462\tShirt\t5\t28.36\t141.8\t2015-12-18 21:13:33\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t3\t61.37\t184.11\t2015-08-30 06:03:27\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGP-14407\tBelt\t12\t55.44\t665.28\t2015-07-28 04:36:44\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t6\t62.54\t375.24\t2015-08-26 04:41:14\n530925\tPurdy and Sons\tTeagan O'Keefe\tTL-23025\tShoes\t3\t87.87\t263.61\t2016-03-30 06:56:02\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tHZ-54995\tBelt\t6\t29.08\t174.48\t2015-11-17 14:10:20\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t16\t12.44\t199.04\t2015-11-28 14:52:21\n887145\tGislason LLC\tLoring Predovic\tDU-87462\tShirt\t12\t62.78\t753.36\t2016-02-01 09:45:39\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t1\t33.52\t33.52\t2015-12-07 21:52:48\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t9\t17.2\t154.8\t2015-09-23 01:11:07\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t12\t63.66\t763.92\t2015-09-26 12:10:43\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t14\t24.89\t348.46\t2016-03-27 05:51:30\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t2\t97.18\t194.36\t2015-11-17 15:15:00\n398620\tBrekke Ltd\tEsequiel Schinner\tTK-29646\tShoes\t10\t74.07\t740.7\t2016-05-30 18:52:27\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGP-14407\tBelt\t15\t14.4\t216\t2015-07-12 12:26:25\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t20\t97.26\t1945.2\t2016-02-17 23:39:23\n759168\tSchaefer Inc\tLoring Predovic\tFI-01804\tShirt\t9\t20.33\t182.97\t2016-04-12 03:25:04\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t6\t98.51\t591.06\t2016-05-06 10:00:11\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t20\t88.09\t1761.8\t2016-04-20 06:37:35\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t9\t31.2\t280.8\t2016-04-19 07:30:54\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t18\t97.83\t1760.94\t2015-09-22 21:18:37\n752312\tWatsica-Pfannerstill\tLoring Predovic\tEO-54210\tShirt\t4\t39.53\t158.12\t2016-01-23 21:18:13\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t5\t63.97\t319.85\t2015-06-26 16:33:59\n680916\tMueller and Sons\tLoring Predovic\tEO-54210\tShirt\t14\t28.79\t403.06\t2015-07-13 06:48:53\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t2\t67.68\t135.36\t2015-08-05 17:10:41\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t5\t70.5\t352.5\t2016-03-21 06:42:49\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t7\t24.96\t174.72\t2015-11-21 07:01:00\n398620\tBrekke Ltd\tEsequiel Schinner\tEO-54210\tShirt\t2\t78.94\t157.88\t2015-10-29 11:34:39\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t15\t49.31\t739.65\t2016-05-07 08:01:47\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t3\t83.84\t251.52\t2015-09-08 04:24:41\n752312\tWatsica-Pfannerstill\tLoring Predovic\tDU-87462\tShirt\t18\t73.45\t1322.1\t2016-03-07 05:05:25\n759168\tSchaefer Inc\tLoring Predovic\tDU-87462\tShirt\t2\t58.01\t116.02\t2015-12-27 14:45:56\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t20\t96.9\t1938\t2015-10-11 11:41:32\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTL-23025\tShoes\t19\t15.52\t294.88\t2016-06-13 14:29:57\n93583\tHegmann-Howell\tEsequiel Schinner\tNZ-99565\tShirt\t11\t12.96\t142.56\t2016-01-16 07:41:52\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t19\t78.44\t1490.36\t2015-08-30 02:48:44\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t11\t67.72\t744.92\t2015-10-31 16:35:11\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tFI-01804\tShirt\t10\t24.64\t246.4\t2016-04-28 10:31:43\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t8\t32.47\t259.76\t2015-09-28 04:23:01\n530925\tPurdy and Sons\tTeagan O'Keefe\tTK-29646\tShoes\t18\t51.12\t920.16\t2016-03-20 15:42:05\n93583\tHegmann-Howell\tEsequiel Schinner\tNZ-99565\tShirt\t2\t68.2\t136.4\t2015-07-16 05:21:32\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t18\t77.45\t1394.1\t2015-06-18 21:36:35\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t18\t89.41\t1609.38\t2015-08-14 02:36:05\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t17\t29.37\t499.29\t2015-09-06 06:32:02\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t20\t53.44\t1068.8\t2015-06-15 17:58:31\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t13\t75.25\t978.25\t2015-08-18 07:55:12\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t3\t65.71\t197.13\t2015-11-08 10:22:05\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t20\t93.1\t1862\t2015-09-04 08:15:17\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t14\t99.93\t1399.02\t2015-10-22 18:30:48\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t4\t31.1\t124.4\t2015-09-21 11:40:14\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t11\t53.05\t583.55\t2015-07-05 05:19:51\n262693\tZiemann-Heidenreich\tLoring Predovic\tZY-38455\tShirt\t4\t66.64\t266.56\t2016-03-06 19:54:10\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t11\t12.88\t141.68\t2015-10-12 04:07:01\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t6\t71.73\t430.38\t2015-11-25 17:31:47\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t11\t11.13\t122.43\t2016-04-29 16:25:24\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t7\t14.92\t104.44\t2016-04-04 08:29:17\n752312\tWatsica-Pfannerstill\tLoring Predovic\tEO-54210\tShirt\t9\t19.42\t174.78\t2015-10-19 11:14:35\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t9\t74.92\t674.28\t2016-02-10 19:49:54\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t8\t54.36\t434.88\t2016-04-13 04:21:15\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t4\t69.53\t278.12\t2015-11-03 16:49:18\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t3\t94.77\t284.31\t2016-04-21 14:31:05\n530925\tPurdy and Sons\tTeagan O'Keefe\tGP-14407\tBelt\t12\t45.29\t543.48\t2016-04-12 00:36:27\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t20\t40.47\t809.4\t2015-06-21 17:37:13\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t2\t52.95\t105.9\t2015-11-23 14:16:18\n251881\tZulauf-Grady\tTeagan O'Keefe\tGP-14407\tBelt\t14\t44.6\t624.4\t2015-06-25 04:18:40\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t14\t14.44\t202.16\t2015-07-23 06:08:02\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t3\t32.77\t98.31\t2016-04-27 03:08:52\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t20\t14.63\t292.6\t2015-12-17 07:03:43\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t12\t83.53\t1002.36\t2015-06-23 15:12:05\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t4\t12.67\t50.68\t2015-09-12 05:43:23\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tHZ-54995\tBelt\t10\t19.69\t196.9\t2015-11-20 09:53:57\n759168\tSchaefer Inc\tLoring Predovic\tFI-01804\tShirt\t18\t23.11\t415.98\t2016-03-27 07:08:14\n752312\tWatsica-Pfannerstill\tLoring Predovic\tFI-01804\tShirt\t13\t66.92\t869.96\t2016-03-23 20:52:56\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t5\t94.8\t474\t2015-09-29 15:36:25\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t5\t46.79\t233.95\t2016-05-09 12:28:35\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t14\t83.31\t1166.34\t2015-08-07 11:50:14\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t8\t16.45\t131.6\t2015-07-28 09:47:29\n93583\tHegmann-Howell\tEsequiel Schinner\tHZ-54995\tBelt\t12\t64.9\t778.8\t2016-03-07 02:36:13\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tHZ-54995\tBelt\t11\t12.84\t141.24\t2016-05-05 18:31:30\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t19\t42.66\t810.54\t2015-07-17 10:13:39\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tHZ-54995\tBelt\t19\t39.89\t757.91\t2015-12-04 23:07:40\n262693\tZiemann-Heidenreich\tLoring Predovic\tGP-14407\tBelt\t7\t44.76\t313.32\t2016-05-14 18:48:22\n453258\tRunolfsson-Bayer\tShannen Hudson\tHZ-54995\tBelt\t17\t84.25\t1432.25\t2016-04-12 06:38:40\n218667\tJaskolski-O'Hara\tTrish Deckow\tTK-29646\tShoes\t12\t77.8\t933.6\t2015-12-29 06:30:23\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t3\t31.77\t95.31\t2015-11-07 07:47:41\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t1\t11.7\t11.7\t2015-10-12 16:53:00\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t8\t91.37\t730.96\t2016-01-24 18:20:03\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t17\t29.9\t508.3\t2015-10-03 14:39:26\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t3\t62.16\t186.48\t2016-01-19 08:53:51\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t17\t46.43\t789.31\t2015-07-25 04:36:40\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t4\t60.65\t242.6\t2016-02-05 13:42:29\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t16\t56.94\t911.04\t2016-05-31 04:11:44\n758030\tKilback-Abernathy\tTrish Deckow\tEO-54210\tShirt\t10\t23.5\t235\t2015-10-10 20:27:25\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTK-29646\tShoes\t8\t92.47\t739.76\t2015-08-28 03:52:06\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t14\t35.97\t503.58\t2015-06-25 12:56:21\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t17\t21.94\t372.98\t2016-02-03 17:01:29\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t10\t49.67\t496.7\t2015-08-12 01:46:43\n759168\tSchaefer Inc\tLoring Predovic\tNZ-99565\tShirt\t16\t31.75\t508\t2016-06-02 03:13:35\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t11\t64.12\t705.32\t2015-11-03 16:23:28\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t9\t61.07\t549.63\t2015-10-20 22:22:40\n453258\tRunolfsson-Bayer\tShannen Hudson\tNZ-99565\tShirt\t16\t68.65\t1098.4\t2015-10-12 16:13:33\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t3\t77.67\t233.01\t2016-04-23 01:21:58\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t9\t47.19\t424.71\t2016-05-01 02:23:54\n136521\tLabadie and Sons\tEsequiel Schinner\tNZ-99565\tShirt\t8\t69.37\t554.96\t2015-08-17 17:07:53\n759168\tSchaefer Inc\tLoring Predovic\tFI-01804\tShirt\t15\t93.99\t1409.85\t2016-02-12 08:06:58\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t7\t48.06\t336.42\t2015-06-20 23:04:18\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t12\t29.72\t356.64\t2016-03-01 18:43:25\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tNZ-99565\tShirt\t12\t57.1\t685.2\t2016-03-23 10:27:28\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t6\t96.3\t577.8\t2015-11-05 18:29:42\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t1\t88.49\t88.49\t2015-10-17 19:56:53\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t19\t19.35\t367.65\t2015-06-15 15:24:05\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t4\t37.62\t150.48\t2015-07-16 08:18:01\n282122\tConnelly, Abshire and Von\tBeth Skiles\tFI-01804\tShirt\t11\t61.91\t681.01\t2015-10-19 23:58:04\n280749\tDouglas PLC\tTeagan O'Keefe\tDU-87462\tShirt\t1\t46.44\t46.44\t2015-09-11 07:14:00\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tEO-54210\tShirt\t15\t62.27\t934.05\t2016-05-24 02:07:43\n93583\tHegmann-Howell\tEsequiel Schinner\tDU-87462\tShirt\t16\t11.04\t176.64\t2015-09-22 07:24:09\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t6\t73.34\t440.04\t2015-12-08 19:46:18\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTK-29646\tShoes\t20\t78.89\t1577.8\t2015-08-19 16:10:06\n282122\tConnelly, Abshire and Von\tBeth Skiles\tNZ-99565\tShirt\t11\t37.4\t411.4\t2016-03-22 09:11:04\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t6\t17\t102\t2015-08-10 13:00:07\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t10\t20.95\t209.5\t2015-07-12 06:24:40\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t5\t96.59\t482.95\t2015-07-08 19:24:34\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t13\t57.86\t752.18\t2015-11-11 02:45:44\n453258\tRunolfsson-Bayer\tShannen Hudson\tNZ-99565\tShirt\t7\t79.35\t555.45\t2015-07-06 23:08:49\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t8\t18.41\t147.28\t2016-04-19 15:59:07\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t11\t65.69\t722.59\t2016-05-29 12:51:02\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t13\t24.02\t312.26\t2016-04-15 22:07:48\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t13\t47.75\t620.75\t2016-05-21 10:28:06\n887145\tGislason LLC\tLoring Predovic\tGJ-90272\tShoes\t19\t35.04\t665.76\t2016-02-25 18:02:18\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t14\t56.3\t788.2\t2015-11-21 19:14:13\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t1\t56.68\t56.68\t2015-07-23 15:20:34\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t5\t30.34\t151.7\t2016-04-26 14:56:52\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t19\t66.56\t1264.64\t2015-12-22 11:41:21\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t18\t78.53\t1413.54\t2015-07-22 00:20:15\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t8\t32.15\t257.2\t2015-06-23 14:54:59\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t4\t50.64\t202.56\t2015-11-07 12:18:46\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t9\t30.58\t275.22\t2016-05-14 04:16:37\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t8\t52.22\t417.76\t2016-01-23 23:47:15\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t9\t29.43\t264.87\t2016-01-13 11:00:22\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t11\t12\t132\t2015-10-12 10:39:12\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t3\t94.15\t282.45\t2015-12-15 11:30:04\n453258\tRunolfsson-Bayer\tShannen Hudson\tTL-23025\tShoes\t10\t70.72\t707.2\t2015-10-14 10:39:32\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t12\t46.8\t561.6\t2015-08-05 10:19:57\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t7\t40.78\t285.46\t2016-02-03 09:49:07\n887145\tGislason LLC\tLoring Predovic\tGJ-90272\tShoes\t20\t43.4\t868\t2015-11-23 06:26:18\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t3\t93.58\t280.74\t2016-05-25 04:08:43\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t19\t94.1\t1787.9\t2016-03-21 17:28:38\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t19\t62.09\t1179.71\t2015-07-05 04:43:57\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTK-29646\tShoes\t15\t95.91\t1438.65\t2016-06-06 01:21:53\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t17\t95.46\t1622.82\t2015-11-13 11:03:35\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t19\t47.61\t904.59\t2016-02-17 11:05:24\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t2\t85.44\t170.88\t2016-01-01 00:27:00\n262693\tZiemann-Heidenreich\tLoring Predovic\tGP-14407\tBelt\t3\t19.17\t57.51\t2015-10-17 02:55:08\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t3\t80.89\t242.67\t2015-12-30 09:37:26\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t10\t86.2\t862\t2016-05-08 14:59:01\n453258\tRunolfsson-Bayer\tShannen Hudson\tZY-38455\tShirt\t17\t29.59\t503.03\t2015-10-04 12:03:52\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t1\t51.66\t51.66\t2016-02-21 05:07:18\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t2\t99.24\t198.48\t2015-11-21 12:06:54\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t2\t50.61\t101.22\t2016-02-01 22:51:35\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t9\t83.67\t753.03\t2016-04-08 05:56:01\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t16\t24.06\t384.96\t2016-05-07 22:06:41\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t6\t12.65\t75.9\t2015-07-15 08:20:02\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t12\t91.15\t1093.8\t2015-08-12 19:27:27\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t18\t59.99\t1079.82\t2016-01-17 02:48:25\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t18\t20.1\t361.8\t2015-08-20 00:46:35\n251881\tZulauf-Grady\tTeagan O'Keefe\tGP-14407\tBelt\t20\t69.61\t1392.2\t2016-03-20 03:10:05\n136521\tLabadie and Sons\tEsequiel Schinner\tGP-14407\tBelt\t7\t83.01\t581.07\t2015-07-30 13:14:31\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t15\t38.26\t573.9\t2016-03-05 10:54:48\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t16\t96.67\t1546.72\t2015-11-13 08:59:59\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tFI-01804\tShirt\t2\t53.63\t107.26\t2016-03-09 05:03:29\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tHZ-54995\tBelt\t17\t29.93\t508.81\t2016-03-21 03:05:25\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t9\t62.45\t562.05\t2016-06-14 02:31:06\n887145\tGislason LLC\tLoring Predovic\tGJ-90272\tShoes\t8\t40.73\t325.84\t2015-08-07 09:25:06\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t17\t70.95\t1206.15\t2015-11-15 02:03:01\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t17\t55.09\t936.53\t2015-06-25 13:14:00\n62592\tO'Keefe-Koch\tShannen Hudson\tGJ-90272\tShoes\t9\t19.34\t174.06\t2015-08-14 07:37:49\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t16\t34.07\t545.12\t2015-11-25 06:52:33\n62592\tO'Keefe-Koch\tShannen Hudson\tDU-87462\tShirt\t9\t95.4\t858.6\t2015-06-15 16:13:54\n530925\tPurdy and Sons\tTeagan O'Keefe\tGP-14407\tBelt\t11\t65.51\t720.61\t2016-05-26 22:37:49\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t20\t64.87\t1297.4\t2015-11-02 02:26:07\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tNZ-99565\tShirt\t19\t47.41\t900.79\t2015-11-12 04:41:55\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t3\t66.27\t198.81\t2016-03-05 01:04:10\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t9\t25.92\t233.28\t2016-05-09 23:58:05\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t8\t70.95\t567.6\t2016-04-30 10:36:52\n453258\tRunolfsson-Bayer\tShannen Hudson\tGP-14407\tBelt\t19\t55.75\t1059.25\t2016-05-23 21:39:18\n758030\tKilback-Abernathy\tTrish Deckow\tFI-01804\tShirt\t15\t70.02\t1050.3\t2016-04-25 09:15:35\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t16\t29.57\t473.12\t2015-11-10 00:13:42\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t2\t36.25\t72.5\t2015-10-11 04:08:05\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t9\t47.83\t430.47\t2015-07-02 00:19:02\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t12\t57.35\t688.2\t2016-02-28 07:41:11\n759168\tSchaefer Inc\tLoring Predovic\tFI-01804\tShirt\t17\t77.26\t1313.42\t2015-07-31 16:28:54\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t9\t20.3\t182.7\t2015-09-14 09:27:19\n136521\tLabadie and Sons\tEsequiel Schinner\tNZ-99565\tShirt\t16\t18.27\t292.32\t2015-10-17 02:47:41\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t19\t69.87\t1327.53\t2015-06-30 07:06:17\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t2\t39.65\t79.3\t2016-01-05 18:06:00\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t11\t60.13\t661.43\t2015-10-10 13:00:55\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t13\t36.53\t474.89\t2015-08-12 20:30:08\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t13\t99.73\t1296.49\t2015-07-29 17:08:00\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t20\t76.61\t1532.2\t2015-10-29 00:43:01\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t19\t48.05\t912.95\t2015-08-13 04:45:55\n136521\tLabadie and Sons\tEsequiel Schinner\tGP-14407\tBelt\t17\t96.53\t1641.01\t2015-11-02 16:23:31\n680916\tMueller and Sons\tLoring Predovic\tZY-38455\tShirt\t13\t23.92\t310.96\t2015-07-25 09:42:53\n251881\tZulauf-Grady\tTeagan O'Keefe\tEO-54210\tShirt\t12\t38.32\t459.84\t2016-01-08 17:05:36\n282122\tConnelly, Abshire and Von\tBeth Skiles\tZY-38455\tShirt\t9\t83.62\t752.58\t2015-12-06 05:13:28\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t13\t94.31\t1226.03\t2016-02-19 08:00:23\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t2\t98.89\t197.78\t2016-04-08 17:58:31\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t20\t85.22\t1704.4\t2015-07-18 23:36:44\n218667\tJaskolski-O'Hara\tTrish Deckow\tHZ-54995\tBelt\t11\t17.48\t192.28\t2016-01-07 00:47:35\n280749\tDouglas PLC\tTeagan O'Keefe\tZY-38455\tShirt\t14\t48.82\t683.48\t2015-06-18 06:39:25\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t5\t67.48\t337.4\t2015-12-29 06:44:00\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t14\t46.65\t653.1\t2016-06-07 17:06:08\n680916\tMueller and Sons\tLoring Predovic\tZY-38455\tShirt\t9\t22.92\t206.28\t2015-06-30 14:54:36\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t4\t34.52\t138.08\t2016-03-11 12:59:52\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t2\t92.93\t185.86\t2015-11-29 09:17:39\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t10\t33.4\t334\t2015-10-17 13:50:42\n93583\tHegmann-Howell\tEsequiel Schinner\tDU-87462\tShirt\t14\t99.83\t1397.62\t2016-05-25 18:21:41\n93583\tHegmann-Howell\tEsequiel Schinner\tDU-87462\tShirt\t1\t72.58\t72.58\t2015-08-18 11:48:21\n887145\tGislason LLC\tLoring Predovic\tTK-29646\tShoes\t10\t30.56\t305.6\t2016-02-14 05:49:47\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t12\t25.31\t303.72\t2016-04-09 00:33:12\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t17\t27.23\t462.91\t2015-10-24 22:20:55\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t19\t79.14\t1503.66\t2016-05-18 18:17:53\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t19\t62.79\t1193.01\t2016-06-02 13:42:25\n280749\tDouglas PLC\tTeagan O'Keefe\tZY-38455\tShirt\t12\t95.27\t1143.24\t2015-11-22 01:48:46\n680916\tMueller and Sons\tLoring Predovic\tHZ-54995\tBelt\t1\t46.62\t46.62\t2016-01-19 13:12:44\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t13\t99.17\t1289.21\t2015-11-26 03:30:51\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t19\t99.87\t1897.53\t2015-10-10 10:49:09\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t9\t58.58\t527.22\t2016-03-04 19:14:45\n280749\tDouglas PLC\tTeagan O'Keefe\tZY-38455\tShirt\t20\t32.17\t643.4\t2016-05-02 23:46:07\n398620\tBrekke Ltd\tEsequiel Schinner\tZY-38455\tShirt\t2\t93.65\t187.3\t2015-07-19 06:40:33\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t19\t98.14\t1864.66\t2015-12-30 01:52:53\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t12\t13.65\t163.8\t2015-08-15 00:14:22\n280749\tDouglas PLC\tTeagan O'Keefe\tDU-87462\tShirt\t20\t86.47\t1729.4\t2015-07-19 22:11:06\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t3\t14.71\t44.13\t2016-06-01 10:45:04\n398620\tBrekke Ltd\tEsequiel Schinner\tFI-01804\tShirt\t1\t94.84\t94.84\t2015-12-08 11:59:46\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t15\t79.89\t1198.35\t2015-12-27 12:44:01\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t12\t34.03\t408.36\t2015-06-27 12:46:39\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t12\t31.74\t380.88\t2015-12-17 14:13:57\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t18\t84.95\t1529.1\t2016-06-14 09:41:30\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGP-14407\tBelt\t14\t44.95\t629.3\t2016-05-31 22:50:13\n218667\tJaskolski-O'Hara\tTrish Deckow\tTL-23025\tShoes\t1\t35.47\t35.47\t2015-11-15 03:26:28\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t19\t57.77\t1097.63\t2015-10-01 05:23:55\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t10\t57.4\t574\t2016-02-02 15:10:37\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t4\t76.6\t306.4\t2015-07-28 14:21:04\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t15\t15.35\t230.25\t2016-06-07 05:59:20\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t19\t56.79\t1079.01\t2016-02-20 12:42:57\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t4\t69.97\t279.88\t2015-07-07 05:23:37\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t12\t84.2\t1010.4\t2016-04-04 21:08:12\n759168\tSchaefer Inc\tLoring Predovic\tTK-29646\tShoes\t2\t33.2\t66.4\t2015-07-16 19:46:08\n251881\tZulauf-Grady\tTeagan O'Keefe\tGP-14407\tBelt\t18\t66.29\t1193.22\t2015-08-11 08:41:46\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t17\t81.93\t1392.81\t2016-03-14 08:25:26\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t18\t28.91\t520.38\t2015-12-09 07:21:52\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t9\t24.46\t220.14\t2015-09-12 04:33:24\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t4\t28.81\t115.24\t2016-06-06 09:25:28\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t5\t73.18\t365.9\t2015-12-22 02:05:33\n759168\tSchaefer Inc\tLoring Predovic\tHZ-54995\tBelt\t16\t20.59\t329.44\t2016-02-24 19:11:17\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t19\t91.91\t1746.29\t2016-01-29 11:13:03\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t14\t25.1\t351.4\t2015-12-17 05:51:15\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t19\t61.67\t1171.73\t2015-06-22 23:35:03\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t16\t63.91\t1022.56\t2016-04-11 21:30:05\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t13\t61.78\t803.14\t2016-04-22 12:50:40\n398620\tBrekke Ltd\tEsequiel Schinner\tNZ-99565\tShirt\t5\t88.95\t444.75\t2015-10-13 02:33:54\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t10\t72.48\t724.8\t2015-10-18 05:38:41\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t3\t71.89\t215.67\t2016-01-26 05:56:16\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t16\t73.01\t1168.16\t2015-12-06 12:48:43\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t12\t72\t864\t2015-11-19 22:39:27\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t5\t52.86\t264.3\t2016-02-26 12:10:45\n62592\tO'Keefe-Koch\tShannen Hudson\tHZ-54995\tBelt\t5\t89.58\t447.9\t2015-08-12 01:35:24\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t7\t11.85\t82.95\t2015-07-14 00:35:05\n262693\tZiemann-Heidenreich\tLoring Predovic\tNZ-99565\tShirt\t10\t81.84\t818.4\t2015-12-20 00:23:51\n262693\tZiemann-Heidenreich\tLoring Predovic\tTK-29646\tShoes\t14\t59.56\t833.84\t2016-04-03 06:16:34\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t17\t74.02\t1258.34\t2016-05-10 07:12:36\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t17\t37.19\t632.23\t2015-09-29 19:52:00\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t14\t97.91\t1370.74\t2016-05-06 10:34:45\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t7\t31.96\t223.72\t2016-03-29 21:32:14\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTK-29646\tShoes\t5\t16.63\t83.15\t2015-10-04 23:30:14\n136521\tLabadie and Sons\tEsequiel Schinner\tDU-87462\tShirt\t16\t52.96\t847.36\t2015-12-08 13:11:56\n453258\tRunolfsson-Bayer\tShannen Hudson\tFI-01804\tShirt\t7\t12.58\t88.06\t2016-01-28 02:06:26\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t17\t67.32\t1144.44\t2016-05-26 13:00:14\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tDU-87462\tShirt\t12\t42.7\t512.4\t2016-05-08 06:27:36\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t4\t49.51\t198.04\t2016-02-21 08:21:11\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t16\t70.63\t1130.08\t2016-03-30 14:00:03\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t10\t21.84\t218.4\t2016-03-31 21:49:31\n282122\tConnelly, Abshire and Von\tBeth Skiles\tNZ-99565\tShirt\t7\t44.56\t311.92\t2016-02-02 15:39:41\n93583\tHegmann-Howell\tEsequiel Schinner\tGJ-90272\tShoes\t6\t83.25\t499.5\t2015-11-03 09:49:54\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t8\t10.98\t87.84\t2015-10-03 22:16:08\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t9\t53.13\t478.17\t2015-08-03 22:05:32\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t18\t97.49\t1754.82\t2015-08-15 06:11:14\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t15\t23.97\t359.55\t2016-05-31 00:27:04\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t14\t29.93\t419.02\t2016-05-17 03:07:38\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tHZ-54995\tBelt\t3\t98.91\t296.73\t2016-01-19 16:06:30\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t12\t22.27\t267.24\t2015-10-20 12:04:38\n759168\tSchaefer Inc\tLoring Predovic\tTL-23025\tShoes\t1\t59.26\t59.26\t2015-07-08 23:54:04\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t1\t69.31\t69.31\t2016-06-03 21:52:57\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t4\t77.6\t310.4\t2016-04-29 02:43:57\n262693\tZiemann-Heidenreich\tLoring Predovic\tZY-38455\tShirt\t5\t66.78\t333.9\t2015-10-19 06:14:48\n680916\tMueller and Sons\tLoring Predovic\tEO-54210\tShirt\t1\t28.03\t28.03\t2016-03-31 16:58:00\n62592\tO'Keefe-Koch\tShannen Hudson\tFI-01804\tShirt\t1\t52.37\t52.37\t2016-04-11 22:57:14\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t19\t46.62\t885.78\t2016-01-18 02:57:40\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t15\t47.06\t705.9\t2015-08-14 23:39:39\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t1\t11.35\t11.35\t2015-08-10 03:09:17\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t12\t26.39\t316.68\t2015-08-27 07:38:04\n680916\tMueller and Sons\tLoring Predovic\tNZ-99565\tShirt\t6\t15.69\t94.14\t2016-06-12 19:47:43\n62592\tO'Keefe-Koch\tShannen Hudson\tGJ-90272\tShoes\t16\t69.18\t1106.88\t2016-03-13 00:51:07\n398620\tBrekke Ltd\tEsequiel Schinner\tGP-14407\tBelt\t13\t55.91\t726.83\t2015-10-16 12:59:45\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t12\t84.83\t1017.96\t2016-06-08 19:07:52\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t8\t76.19\t609.52\t2016-01-26 18:39:00\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t2\t73.12\t146.24\t2015-08-06 03:08:55\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t13\t65.42\t850.46\t2015-12-21 07:24:44\n453258\tRunolfsson-Bayer\tShannen Hudson\tZY-38455\tShirt\t3\t41.76\t125.28\t2015-06-27 12:46:27\n280749\tDouglas PLC\tTeagan O'Keefe\tEO-54210\tShirt\t12\t13.58\t162.96\t2015-08-29 07:58:08\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t18\t78.19\t1407.42\t2016-01-19 10:04:44\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t6\t55.01\t330.06\t2015-10-09 13:09:37\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t14\t36.47\t510.58\t2015-07-28 09:01:16\n759168\tSchaefer Inc\tLoring Predovic\tNZ-99565\tShirt\t7\t63.18\t442.26\t2015-09-25 18:56:53\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t19\t43\t817\t2016-03-28 02:57:09\n887145\tGislason LLC\tLoring Predovic\tGJ-90272\tShoes\t3\t67.59\t202.77\t2015-07-13 08:54:37\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t2\t28.99\t57.98\t2015-07-03 11:01:40\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t8\t65.3\t522.4\t2015-08-01 18:46:14\n62592\tO'Keefe-Koch\tShannen Hudson\tFI-01804\tShirt\t10\t79.44\t794.4\t2015-07-27 20:58:05\n262693\tZiemann-Heidenreich\tLoring Predovic\tNZ-99565\tShirt\t16\t65.48\t1047.68\t2015-07-11 10:10:34\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t2\t60.09\t120.18\t2016-03-10 13:41:05\n62592\tO'Keefe-Koch\tShannen Hudson\tGJ-90272\tShoes\t8\t87.92\t703.36\t2015-06-30 21:27:57\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t18\t80.5\t1449\t2016-01-20 04:43:57\n752312\tWatsica-Pfannerstill\tLoring Predovic\tEO-54210\tShirt\t1\t88.6\t88.6\t2015-10-21 10:05:59\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tHZ-54995\tBelt\t9\t24.72\t222.48\t2016-03-18 13:28:48\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t15\t58.91\t883.65\t2015-09-15 14:41:40\n282122\tConnelly, Abshire and Von\tBeth Skiles\tDU-87462\tShirt\t1\t80.35\t80.35\t2015-10-19 21:49:18\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t10\t92.51\t925.1\t2016-05-19 21:13:58\n759168\tSchaefer Inc\tLoring Predovic\tEO-54210\tShirt\t5\t70.3\t351.5\t2015-10-04 09:17:45\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t14\t37.05\t518.7\t2015-12-24 14:18:43\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t12\t48.35\t580.2\t2016-03-10 07:03:16\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t8\t44.48\t355.84\t2015-10-10 22:12:29\n530925\tPurdy and Sons\tTeagan O'Keefe\tNZ-99565\tShirt\t10\t83.23\t832.3\t2015-06-22 17:47:17\n453258\tRunolfsson-Bayer\tShannen Hudson\tGJ-90272\tShoes\t16\t64.55\t1032.8\t2015-08-12 07:30:32\n530925\tPurdy and Sons\tTeagan O'Keefe\tEO-54210\tShirt\t13\t76.16\t990.08\t2016-01-23 04:58:24\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t7\t81.63\t571.41\t2016-02-03 11:48:32\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t19\t76.27\t1449.13\t2015-08-23 19:32:06\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t11\t10.23\t112.53\t2015-07-02 01:12:03\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t2\t22.19\t44.38\t2015-12-15 15:01:48\n752312\tWatsica-Pfannerstill\tLoring Predovic\tFI-01804\tShirt\t2\t70.45\t140.9\t2016-04-16 19:14:06\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t15\t87.01\t1305.15\t2015-07-31 09:20:30\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t19\t58.81\t1117.39\t2016-01-08 08:12:34\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t17\t25.75\t437.75\t2016-01-31 16:45:40\n530925\tPurdy and Sons\tTeagan O'Keefe\tTL-23025\tShoes\t3\t23.86\t71.58\t2016-06-06 21:59:05\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t18\t42.51\t765.18\t2015-12-27 03:00:44\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t16\t60.56\t968.96\t2015-10-01 15:32:08\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tDU-87462\tShirt\t18\t29.35\t528.3\t2016-05-16 11:43:57\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t9\t57.66\t518.94\t2015-12-11 15:26:15\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t6\t74.03\t444.18\t2016-03-26 00:48:29\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t19\t12.42\t235.98\t2016-02-17 21:33:21\n262693\tZiemann-Heidenreich\tLoring Predovic\tNZ-99565\tShirt\t11\t98.56\t1084.16\t2015-09-27 16:34:10\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t17\t54.3\t923.1\t2015-09-11 23:10:23\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t13\t12.3\t159.9\t2015-11-13 13:50:23\n752312\tWatsica-Pfannerstill\tLoring Predovic\tEO-54210\tShirt\t8\t53.01\t424.08\t2016-04-11 10:02:27\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tHZ-54995\tBelt\t5\t83.9\t419.5\t2015-07-01 04:37:01\n136521\tLabadie and Sons\tEsequiel Schinner\tDU-87462\tShirt\t17\t70.44\t1197.48\t2015-12-05 00:59:07\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t3\t33.05\t99.15\t2015-11-18 00:43:03\n758030\tKilback-Abernathy\tTrish Deckow\tGP-14407\tBelt\t14\t21.23\t297.22\t2016-02-15 16:34:36\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t5\t88.26\t441.3\t2015-09-18 23:32:07\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t19\t94.79\t1801.01\t2015-08-05 22:16:25\n752312\tWatsica-Pfannerstill\tLoring Predovic\tEO-54210\tShirt\t5\t58.9\t294.5\t2016-05-12 05:08:06\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t8\t31.13\t249.04\t2016-05-15 02:25:47\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t11\t75.62\t831.82\t2015-06-22 11:58:37\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t5\t38.62\t193.1\t2015-11-26 08:20:58\n93583\tHegmann-Howell\tEsequiel Schinner\tDU-87462\tShirt\t16\t35.27\t564.32\t2016-04-24 05:51:38\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t15\t90.93\t1363.95\t2015-06-29 11:02:10\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t19\t81.56\t1549.64\t2015-11-25 04:06:09\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t1\t46.75\t46.75\t2016-03-24 14:00:51\n752312\tWatsica-Pfannerstill\tLoring Predovic\tFI-01804\tShirt\t8\t18.03\t144.24\t2015-06-17 13:21:25\n759168\tSchaefer Inc\tLoring Predovic\tEO-54210\tShirt\t13\t24.67\t320.71\t2015-08-11 19:17:48\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t1\t58.76\t58.76\t2015-11-20 20:19:58\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t20\t29.32\t586.4\t2015-08-14 23:14:27\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t20\t81.73\t1634.6\t2015-09-11 04:43:21\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t8\t79.6\t636.8\t2015-06-28 20:47:20\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGJ-90272\tShoes\t7\t42.89\t300.23\t2015-12-04 16:48:06\n759168\tSchaefer Inc\tLoring Predovic\tDU-87462\tShirt\t8\t59.45\t475.6\t2016-06-04 10:01:09\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t7\t54.74\t383.18\t2015-12-31 14:59:30\n218667\tJaskolski-O'Hara\tTrish Deckow\tTL-23025\tShoes\t14\t53.3\t746.2\t2015-12-17 03:07:10\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t8\t26.97\t215.76\t2016-03-28 20:38:54\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t14\t44.57\t623.98\t2015-07-18 09:11:49\n62592\tO'Keefe-Koch\tShannen Hudson\tHZ-54995\tBelt\t7\t69.31\t485.17\t2015-09-28 15:03:22\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t8\t30.35\t242.8\t2015-09-25 08:19:14\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tFI-01804\tShirt\t11\t55.66\t612.26\t2015-10-30 16:45:48\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t9\t56.4\t507.6\t2015-08-10 03:13:01\n453258\tRunolfsson-Bayer\tShannen Hudson\tGP-14407\tBelt\t10\t92.31\t923.1\t2015-09-22 13:31:48\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t9\t60.69\t546.21\t2015-07-22 02:15:29\n62592\tO'Keefe-Koch\tShannen Hudson\tFI-01804\tShirt\t8\t98.58\t788.64\t2016-04-16 03:43:49\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tZY-38455\tShirt\t19\t38.76\t736.44\t2015-06-27 12:21:52\n680916\tMueller and Sons\tLoring Predovic\tZY-38455\tShirt\t19\t42.58\t809.02\t2016-02-10 11:04:31\n887145\tGislason LLC\tLoring Predovic\tGJ-90272\tShoes\t19\t52.07\t989.33\t2015-12-22 08:11:09\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t12\t45.25\t543\t2015-08-24 19:44:22\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t20\t93.67\t1873.4\t2016-04-24 11:05:11\n93583\tHegmann-Howell\tEsequiel Schinner\tNZ-99565\tShirt\t3\t57.51\t172.53\t2016-01-03 09:43:55\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t7\t54.34\t380.38\t2016-01-22 09:37:00\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t6\t73.18\t439.08\t2015-11-26 04:33:54\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t9\t29.94\t269.46\t2015-07-29 23:34:01\n758030\tKilback-Abernathy\tTrish Deckow\tNZ-99565\tShirt\t16\t65.97\t1055.52\t2016-05-31 11:12:55\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGP-14407\tBelt\t2\t21.3\t42.6\t2016-03-06 18:33:01\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t4\t74.59\t298.36\t2016-01-08 10:44:07\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t8\t11.73\t93.84\t2016-06-12 04:31:13\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t18\t95.05\t1710.9\t2015-07-22 19:05:21\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tDU-87462\tShirt\t12\t20.12\t241.44\t2015-07-27 10:15:02\n759168\tSchaefer Inc\tLoring Predovic\tTL-23025\tShoes\t5\t24.72\t123.6\t2016-04-02 14:06:21\n62592\tO'Keefe-Koch\tShannen Hudson\tDU-87462\tShirt\t12\t61.21\t734.52\t2015-09-09 12:15:15\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTL-23025\tShoes\t18\t14.36\t258.48\t2015-12-22 19:02:00\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t20\t43.83\t876.6\t2015-09-22 16:09:18\n759168\tSchaefer Inc\tLoring Predovic\tGJ-90272\tShoes\t3\t63.75\t191.25\t2015-06-19 19:47:22\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGP-14407\tBelt\t15\t13.77\t206.55\t2015-06-19 10:54:34\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t11\t66.18\t727.98\t2016-02-01 11:46:35\n680916\tMueller and Sons\tLoring Predovic\tEO-54210\tShirt\t3\t18.49\t55.47\t2016-04-20 20:43:28\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t16\t48.13\t770.08\t2015-07-03 10:25:56\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t2\t81.71\t163.42\t2016-05-29 04:46:06\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t14\t10.9\t152.6\t2015-09-10 09:35:26\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t17\t43.15\t733.55\t2015-07-30 15:15:07\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t13\t57.05\t741.65\t2015-12-22 03:16:17\n62592\tO'Keefe-Koch\tShannen Hudson\tFI-01804\tShirt\t15\t74.01\t1110.15\t2016-04-21 00:07:39\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t16\t42.66\t682.56\t2016-05-14 22:37:23\n759168\tSchaefer Inc\tLoring Predovic\tZY-38455\tShirt\t6\t81.65\t489.9\t2016-05-31 09:30:24\n280749\tDouglas PLC\tTeagan O'Keefe\tZY-38455\tShirt\t10\t34.03\t340.3\t2016-01-19 21:09:25\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t18\t89.18\t1605.24\t2015-09-23 01:35:44\n62592\tO'Keefe-Koch\tShannen Hudson\tFI-01804\tShirt\t17\t81.97\t1393.49\t2015-09-12 16:51:39\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t12\t94.86\t1138.32\t2016-02-19 06:48:15\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t9\t83.38\t750.42\t2016-03-14 05:30:27\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t11\t25.09\t275.99\t2016-02-02 07:25:55\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t3\t90.02\t270.06\t2015-12-10 22:11:22\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t3\t92.27\t276.81\t2015-06-23 05:00:05\n62592\tO'Keefe-Koch\tShannen Hudson\tNZ-99565\tShirt\t5\t33.29\t166.45\t2015-11-29 02:54:10\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t12\t99.92\t1199.04\t2016-01-18 21:39:45\n93583\tHegmann-Howell\tEsequiel Schinner\tHZ-54995\tBelt\t8\t97.9\t783.2\t2015-08-09 03:30:43\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t4\t11.84\t47.36\t2016-06-08 11:29:06\n758030\tKilback-Abernathy\tTrish Deckow\tNZ-99565\tShirt\t2\t92.25\t184.5\t2016-04-27 05:33:43\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t15\t88.05\t1320.75\t2015-06-27 20:31:20\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t3\t72.66\t217.98\t2015-07-17 10:21:51\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTL-23025\tShoes\t1\t29.33\t29.33\t2015-09-12 01:35:23\n218667\tJaskolski-O'Hara\tTrish Deckow\tNZ-99565\tShirt\t2\t85.75\t171.5\t2016-01-29 03:09:46\n218667\tJaskolski-O'Hara\tTrish Deckow\tEO-54210\tShirt\t8\t85.19\t681.52\t2015-07-31 12:40:26\n680916\tMueller and Sons\tLoring Predovic\tHZ-54995\tBelt\t1\t84.55\t84.55\t2016-01-13 18:23:08\n759168\tSchaefer Inc\tLoring Predovic\tNZ-99565\tShirt\t19\t11.6\t220.4\t2016-02-01 02:23:24\n453258\tRunolfsson-Bayer\tShannen Hudson\tDU-87462\tShirt\t9\t89.49\t805.41\t2015-11-21 07:07:41\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t2\t88.64\t177.28\t2015-10-16 23:24:09\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t19\t49.62\t942.78\t2016-01-02 22:18:19\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tDU-87462\tShirt\t5\t66.07\t330.35\t2015-08-27 13:38:11\n136521\tLabadie and Sons\tEsequiel Schinner\tDU-87462\tShirt\t9\t10.18\t91.62\t2015-09-03 18:27:31\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGP-14407\tBelt\t12\t33.31\t399.72\t2015-08-07 12:12:11\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t17\t80.77\t1373.09\t2015-10-18 01:47:14\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t3\t96.93\t290.79\t2016-03-16 14:09:31\n218667\tJaskolski-O'Hara\tTrish Deckow\tEO-54210\tShirt\t1\t25.52\t25.52\t2016-03-21 00:40:24\n218667\tJaskolski-O'Hara\tTrish Deckow\tTK-29646\tShoes\t13\t37.61\t488.93\t2016-04-13 01:17:01\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t13\t66.82\t868.66\t2015-12-04 20:48:54\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tFI-01804\tShirt\t9\t20.85\t187.65\t2015-11-21 03:57:23\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t4\t21.85\t87.4\t2015-10-25 08:17:15\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t11\t35.41\t389.51\t2015-12-16 19:41:26\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t16\t89.22\t1427.52\t2016-04-29 10:06:43\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t3\t47.54\t142.62\t2016-05-20 22:50:19\n62592\tO'Keefe-Koch\tShannen Hudson\tDU-87462\tShirt\t11\t63.24\t695.64\t2016-05-30 05:24:41\n136521\tLabadie and Sons\tEsequiel Schinner\tNZ-99565\tShirt\t18\t50.97\t917.46\t2015-07-24 16:33:22\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t9\t27.16\t244.44\t2016-03-01 10:18:06\n530925\tPurdy and Sons\tTeagan O'Keefe\tTK-29646\tShoes\t5\t41\t205\t2016-03-29 02:55:58\n398620\tBrekke Ltd\tEsequiel Schinner\tZY-38455\tShirt\t6\t69.22\t415.32\t2016-05-29 23:02:03\n62592\tO'Keefe-Koch\tShannen Hudson\tDU-87462\tShirt\t13\t86.03\t1118.39\t2015-11-21 00:48:18\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t20\t14.71\t294.2\t2016-01-15 21:05:37\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t18\t27.83\t500.94\t2016-02-29 11:37:51\n136521\tLabadie and Sons\tEsequiel Schinner\tGP-14407\tBelt\t10\t70.39\t703.9\t2015-09-24 12:08:14\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t10\t13.96\t139.6\t2015-12-21 08:55:15\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t9\t17.17\t154.53\t2015-07-11 23:55:48\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t9\t93.05\t837.45\t2016-03-10 07:03:27\n758030\tKilback-Abernathy\tTrish Deckow\tTK-29646\tShoes\t6\t40.64\t243.84\t2015-07-14 21:52:12\n93583\tHegmann-Howell\tEsequiel Schinner\tGJ-90272\tShoes\t3\t38.07\t114.21\t2015-08-03 03:44:35\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t5\t71.26\t356.3\t2015-12-27 22:16:08\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t15\t42.57\t638.55\t2015-11-19 05:49:45\n759168\tSchaefer Inc\tLoring Predovic\tTK-29646\tShoes\t12\t39.34\t472.08\t2015-07-08 08:57:06\n680916\tMueller and Sons\tLoring Predovic\tZY-38455\tShirt\t11\t72.81\t800.91\t2015-10-28 06:20:25\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t5\t14.09\t70.45\t2016-04-09 02:52:30\n282122\tConnelly, Abshire and Von\tBeth Skiles\tZY-38455\tShirt\t19\t33.73\t640.87\t2015-10-05 20:08:50\n530925\tPurdy and Sons\tTeagan O'Keefe\tTK-29646\tShoes\t13\t75.97\t987.61\t2015-10-13 08:56:20\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t2\t18.26\t36.52\t2015-10-05 09:30:52\n93583\tHegmann-Howell\tEsequiel Schinner\tGJ-90272\tShoes\t10\t58.94\t589.4\t2016-01-31 07:11:00\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t19\t91.98\t1747.62\t2015-10-29 11:24:38\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t10\t12.63\t126.3\t2015-11-23 04:36:21\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tFI-01804\tShirt\t12\t35.28\t423.36\t2015-09-27 16:09:58\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t11\t41.52\t456.72\t2015-11-21 19:39:35\n530925\tPurdy and Sons\tTeagan O'Keefe\tEO-54210\tShirt\t18\t48.26\t868.68\t2016-02-03 07:33:06\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t5\t28.81\t144.05\t2016-03-31 11:58:09\n262693\tZiemann-Heidenreich\tLoring Predovic\tZY-38455\tShirt\t10\t55.57\t555.7\t2015-07-04 02:29:54\n136521\tLabadie and Sons\tEsequiel Schinner\tNZ-99565\tShirt\t20\t91.57\t1831.4\t2016-01-09 02:30:27\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t16\t43.17\t690.72\t2016-06-05 07:18:59\n530925\tPurdy and Sons\tTeagan O'Keefe\tNZ-99565\tShirt\t7\t42.45\t297.15\t2015-10-25 16:21:56\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t4\t23.26\t93.04\t2016-04-21 16:43:51\n398620\tBrekke Ltd\tEsequiel Schinner\tZY-38455\tShirt\t4\t74\t296\t2015-07-24 09:56:02\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t4\t47.37\t189.48\t2016-02-05 03:06:08\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t1\t37.4\t37.4\t2015-11-29 17:18:21\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t18\t91.74\t1651.32\t2015-10-17 20:35:41\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t8\t36.1\t288.8\t2015-07-19 00:03:38\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t5\t42.74\t213.7\t2015-11-14 12:55:00\n251881\tZulauf-Grady\tTeagan O'Keefe\tEO-54210\tShirt\t20\t47.05\t941\t2015-11-11 18:26:48\n759168\tSchaefer Inc\tLoring Predovic\tGJ-90272\tShoes\t1\t79.93\t79.93\t2016-05-07 13:20:15\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t10\t90.21\t902.1\t2016-04-01 01:55:48\n282122\tConnelly, Abshire and Von\tBeth Skiles\tDU-87462\tShirt\t16\t14.5\t232\t2016-06-13 09:17:02\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t15\t37.68\t565.2\t2016-05-12 03:44:39\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t2\t27.22\t54.44\t2016-02-04 21:42:35\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t9\t19.96\t179.64\t2016-05-31 13:09:59\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t18\t48.1\t865.8\t2015-07-21 05:00:37\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t3\t68.23\t204.69\t2015-11-09 11:03:57\n759168\tSchaefer Inc\tLoring Predovic\tTL-23025\tShoes\t4\t73.99\t295.96\t2015-09-21 23:28:46\n680916\tMueller and Sons\tLoring Predovic\tHZ-54995\tBelt\t18\t17.93\t322.74\t2016-04-28 01:57:00\n218667\tJaskolski-O'Hara\tTrish Deckow\tTK-29646\tShoes\t13\t57.8\t751.4\t2015-11-09 12:17:52\n887145\tGislason LLC\tLoring Predovic\tGP-14407\tBelt\t5\t51.82\t259.1\t2016-06-08 11:25:05\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t10\t86.25\t862.5\t2016-05-10 23:48:57\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t13\t10.13\t131.69\t2016-04-01 20:39:41\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t18\t23.48\t422.64\t2015-07-25 05:51:10\n758030\tKilback-Abernathy\tTrish Deckow\tTK-29646\tShoes\t7\t86.67\t606.69\t2015-08-19 15:35:31\n398620\tBrekke Ltd\tEsequiel Schinner\tGP-14407\tBelt\t7\t16.52\t115.64\t2016-04-07 10:25:42\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t6\t36.44\t218.64\t2015-11-02 20:55:11\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t5\t48.52\t242.6\t2016-05-22 12:34:35\n218667\tJaskolski-O'Hara\tTrish Deckow\tTL-23025\tShoes\t14\t88.33\t1236.62\t2015-07-12 15:59:56\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t9\t62.85\t565.65\t2015-08-12 17:07:20\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t9\t55.57\t500.13\t2016-02-27 03:20:13\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t8\t98.87\t790.96\t2016-02-10 16:51:59\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t15\t99.43\t1491.45\t2015-12-17 21:58:31\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t18\t11.05\t198.9\t2016-04-01 10:19:26\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t20\t54.67\t1093.4\t2016-02-20 10:43:41\n218667\tJaskolski-O'Hara\tTrish Deckow\tTL-23025\tShoes\t19\t45.97\t873.43\t2015-08-12 22:53:38\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTL-23025\tShoes\t1\t55.81\t55.81\t2016-02-01 17:50:13\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t10\t16.37\t163.7\t2015-10-11 22:11:45\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGP-14407\tBelt\t8\t83.37\t666.96\t2016-01-27 03:26:53\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t18\t24.92\t448.56\t2016-02-11 17:13:23\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t3\t90.33\t270.99\t2015-09-23 07:36:34\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t5\t45.93\t229.65\t2016-04-13 22:34:56\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tZY-38455\tShirt\t16\t21.6\t345.6\t2015-11-18 06:28:56\n136521\tLabadie and Sons\tEsequiel Schinner\tGP-14407\tBelt\t4\t98.57\t394.28\t2016-06-01 17:28:44\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t3\t65.16\t195.48\t2016-04-02 16:38:31\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tEO-54210\tShirt\t17\t28.1\t477.7\t2015-07-20 19:30:10\n62592\tO'Keefe-Koch\tShannen Hudson\tFI-01804\tShirt\t19\t94.96\t1804.24\t2015-10-05 15:55:01\n530925\tPurdy and Sons\tTeagan O'Keefe\tDU-87462\tShirt\t3\t22.86\t68.58\t2015-10-07 19:49:38\n"
  },
  {
    "path": "tests/golden/load-xml.tsv",
    "content": "tag\tchildren\ttext\ndata\t51\t\n  \nrow\t8\t\n    \nindex\t0\t0\nDate\t0\t7/3/2018 1:47p\nCustomer\t0\tRobert Armstrong\nSKU\t0\tFOOD213\nItem\t0\tBFF Oh My Gravy! Beef & Salmon 2.8oz\nQuantity\t0\t4\nUnit\t0\t$12.95\nPaid\t0\t$51.8\nrow\t8\t\n    \nindex\t0\t1\nDate\t0\t7/3/2018 3:32p\nCustomer\t0\tKyle Kennedy\nSKU\t0\tFOOD121\nItem\t0\tFood, Adult Cat - 3.5 oz\nQuantity\t0\t1\nUnit\t0\t$4.22\nPaid\t0\t$4.22\nrow\t8\t\n    \nindex\t0\t2\nDate\t0\t7/5/2018 4:15p\nCustomer\t0\tDouglas \"Dougie\" Powers\nSKU\t0\tFOOD121\nItem\t0\tFood, Adult Cat 3.5 oz\nQuantity\t0\t1\nUnit\t0\t$4.22\nPaid\t0\t$4.22\nrow\t8\t\n    \nindex\t0\t3\nDate\t0\t7/6/2018 12:15p\nCustomer\t0\t桜 高橋 (Sakura Takahashi)\nSKU\t0\tFOOD122\nItem\t0\tFood, Senior Wet Cat - 3 oz\nQuantity\t0\t12\nUnit\t0\t$1.29\nPaid\t0\t157¥\nrow\t8\t\n    \nindex\t0\t4\nDate\t0\t7/10/2018 10:28a\nCustomer\t0\tDavid Attenborough\nSKU\t0\tNSCT201\nItem\t0\tFood, Salamander\nQuantity\t0\t30\nUnit\t0\t$.05\nPaid\t0\t$1.5\nrow\t8\t\n    \nindex\t0\t5\nDate\t0\t7/10/2018 5:23p\nCustomer\t0\tSusan Ashworth\nSKU\t0\tCAT060\nItem\t0\tCat, Korat (Felis catus)\nQuantity\t0\t1\nUnit\t0\t$720.42\nPaid\t0\t$720.42\nrow\t8\t\n    \nindex\t0\t6\nDate\t0\t7/10/2018 5:23p\nCustomer\t0\tSusan Ashworth\nSKU\t0\tFOOD130\nItem\t0\tFood, Kitten 3kg\nQuantity\t0\t1\nUnit\t0\t$14.94\nPaid\t0\t$14.94\nrow\t8\t\n    \nindex\t0\t7\nDate\t0\t7/13/2018 10:26a\nCustomer\t0\tWil Wheaton\nSKU\t0\tNSCT523\nItem\t0\tMonster, Rust (Monstrus gygaxus)\nQuantity\t0\t1\nUnit\t0\t$39.95\nPaid\t0\t$39.95\nrow\t8\t\n    \nindex\t0\t8\nDate\t0\t7/13/2018 3:49p\nCustomer\t0\tRobert Armstrong\nSKU\t0\tFOOD216\nItem\t0\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\nQuantity\t0\t4\nUnit\t0\t$12.95\nPaid\t0\t$51.8\nrow\t8\t\n    \nindex\t0\t9\nDate\t0\t7/17/2018 9:01a\nCustomer\t0\tRobert Armstrong\nSKU\t0\tFOOD217\nItem\t0\tBFF Oh My Gravy! Duck & Tuna 2.8oz\nQuantity\t0\t4\nUnit\t0\t$12.95\nPaid\t0\t$51.8\nrow\t8\t\n    \nindex\t0\t10\nDate\t0\t7/17/2018 11:30a\nCustomer\t0\tHelen Halestorm\nSKU\t0\tLAGO342\nItem\t0\tRabbit (Oryctolagus cuniculus)\nQuantity\t0\t2\nUnit\t0\t$32.94\nPaid\t0\t$65.88\nrow\t8\t\n    \nindex\t0\t11\nDate\t0\t7/18/2018 12:16p\nCustomer\t0\t桜 高橋 (Sakura Takahashi)\nSKU\t0\tFOOD122\nItem\t0\tFood, Senior Wet Cat - 3 oz\nQuantity\t0\t6\nUnit\t0\t$1.29\nPaid\t0\t157¥\nrow\t8\t\n    \nindex\t0\t12\nDate\t0\t7/19/2018 10:28a\nCustomer\t0\tRubeus Hagrid\nSKU\t0\tFOOD170\nItem\t0\tFood, Dog - 5kg\nQuantity\t0\t5\nUnit\t0\t$44.95\nPaid\t0\t$224.75\nrow\t8\t\n    \nindex\t0\t13\nDate\t0\t7/20/2018 2:13p\nCustomer\t0\tJon Arbuckle\nSKU\t0\tFOOD167\nItem\t0\tFood, Premium Wet Cat - 3.5 oz\nQuantity\t0\t50\nUnit\t0\t$3.95\nPaid\t0\t$197.5\nrow\t8\t\n    \nindex\t0\t14\nDate\t0\t7/23/2018 1:41p\nCustomer\t0\tRobert Armstrong\nSKU\t0\tFOOD215\nItem\t0\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\nQuantity\t0\t4\nUnit\t0\t$12.95\nPaid\t0\t$51.8\nrow\t8\t\n    \nindex\t0\t15\nDate\t0\t7/23/2018 4:23p\nCustomer\t0\tDouglas \"Dougie\" Powers\nSKU\t0\tTOY235\nItem\t0\tLaser Pointer\nQuantity\t0\t1\nUnit\t0\t$16.12\nPaid\t0\t$16.12\nrow\t8\t\n    \nindex\t0\t16\nDate\t0\t7/24/2018 12:16p\nCustomer\t0\t桜 高橋 (Sakura Takahashi)\nSKU\t0\tFOOD122\nItem\t0\tFood, Senior Wet Cat - 3 oz\nQuantity\t0\t3\nUnit\t0\t$1.29\nPaid\t0\t157¥\nrow\t8\t\n    \nindex\t0\t17\nDate\t0\t7/26/2018 4:39p\nCustomer\t0\tDouglas \"Dougie\" Powers\nSKU\t0\tFOOD420\nItem\t0\tFood, Shark - 10 kg\nQuantity\t0\t1\nUnit\t0\t$15.70\nPaid\t0\t$15.7\nrow\t8\t\n    \nindex\t0\t18\nDate\t0\t7/27/2018 12:16p\nCustomer\t0\t桜 高橋 (Sakura Takahashi)\nSKU\t0\tFOOD122\nItem\t0\tFood, Senior Wet Cat - 3 oz\nQuantity\t0\t3\nUnit\t0\t$1.29\nPaid\t0\t157¥\nrow\t8\t\n    \nindex\t0\t19\nDate\t0\t7/30/2018 12:17p\nCustomer\t0\t桜 高橋 (Sakura Takahashi)\nSKU\t0\tRETURN\nItem\t0\tFood, Senior Wet Cat - 3 oz\nQuantity\t0\t1\nUnit\t0\t$1.29\nPaid\t0\t157¥\nrow\t8\t\n    \nindex\t0\t20\nDate\t0\t7/31/2018 5:42p\nCustomer\t0\tRubeus Hagrid\nSKU\t0\tCAT060\nItem\t0\tFood, Dragon - 50kg\nQuantity\t0\t5\nUnit\t0\t$720.42\nPaid\t0\t$3602.1\nrow\t8\t\n    \nindex\t0\t21\nDate\t0\t8/1/2018 2:44p\nCustomer\t0\tDavid Attenborough\nSKU\t0\tFOOD360\nItem\t0\tFood, Rhinocerous - 50kg\nQuantity\t0\t4\nUnit\t0\t$5.72\nPaid\t0\t$22.88\nrow\t8\t\n    \nindex\t0\t22\nDate\t0\t8/2/2018 5:12p\nCustomer\t0\tSusan Ashworth\nSKU\t0\tCAT110\nItem\t0\tCat, Maine Coon (Felix catus)\nQuantity\t0\t1\nUnit\t0\t$1,309.68\nPaid\t0\t$1309.68\nrow\t8\t\n    \nindex\t0\t23\nDate\t0\t8/2/2018 5:12p\nCustomer\t0\tSusan Ashworth\nSKU\t0\tFOOD130\nItem\t0\tFood, Kitten 3kg\nQuantity\t0\t3\nUnit\t0\t$14.94\nPaid\t0\t$44.82\nrow\t8\t\n    \nindex\t0\t24\nDate\t0\t8/6/2018 10:21a\nCustomer\t0\tRobert Armstrong\nSKU\t0\tFOOD212\nItem\t0\tBFF Oh My Gravy! Beef & Chicken 2.8oz\nQuantity\t0\t4\nUnit\t0\t$12.95\nPaid\t0\t$51.8\nrow\t8\t\n    \nindex\t0\t25\nDate\t0\t8/7/2018 4:12p\nCustomer\t0\tJuan Johnson\nSKU\t0\tREPT082\nItem\t0\tKingsnake, California (Lampropeltis getula)\nQuantity\t0\t1\nUnit\t0\t$89.95\nPaid\t0\t$89.95\nrow\t8\t\n    \nindex\t0\t26\nDate\t0\t8/7/2018 4:12p\nCustomer\t0\tJuan Johnson\nSKU\t0\tRDNT443\nItem\t0\tMouse, Pinky (Mus musculus)\nQuantity\t0\t1\nUnit\t0\t$1.49\nPaid\t0\t$1.49\nrow\t8\t\n    \nindex\t0\t27\nDate\t0\t8/10/2018 4:31p\nCustomer\t0\tRobert Armstrong\nSKU\t0\tFOOD211\nItem\t0\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\nQuantity\t0\t4\nUnit\t0\t$12.95\nPaid\t0\t$51.8\nrow\t8\t\n    \nindex\t0\t28\nDate\t0\t8/13/2018 2:07p\nCustomer\t0\tMonica Johnson\nSKU\t0\tRDNT443\nItem\t0\tMouse, Pinky (Mus musculus)\nQuantity\t0\t1\nUnit\t0\t$1.49\nPaid\t0\t$1.49\nrow\t8\t\n    \nindex\t0\t29\nDate\t0\t8/13/2018 2:08p\nCustomer\t0\tMaría Fernández\nSKU\t0\tFOOD146\nItem\t0\tForti Diet Prohealth Mouse/Rat 3lbs\nQuantity\t0\t2\nUnit\t0\t$2.00\nPaid\t0\t$4.0\nrow\t8\t\n    \nindex\t0\t30\nDate\t0\t8/15/2018 11:57a\nCustomer\t0\tMr. Praline\nSKU\t0\tRETURN\nItem\t0\tParrot, Norwegian Blue (Mopsitta tanta)\nQuantity\t0\t1\nUnit\t0\t$2300.00\nPaid\t0\t-$2300.0\nrow\t8\t\n    \nindex\t0\t31\nDate\t0\t8/15/2018 3:48p\nCustomer\t0\tKyle Kennedy\nSKU\t0\tFOOD121\nItem\t0\tFood, Adult Cat - 3.5 oz\nQuantity\t0\t2\nUnit\t0\t$4.22\nPaid\t0\t$8.44\nrow\t8\t\n    \nindex\t0\t32\nDate\t0\t8/16/2018 11:50a\nCustomer\t0\tHelen Halestorm\nSKU\t0\tRETURN\nItem\t0\tRabbit (Oryctolagus cuniculus)\nQuantity\t0\t6\nUnit\t0\t$0\nPaid\t0\t$0.0\nrow\t8\t\n    \nindex\t0\t33\nDate\t0\t8/16/2018 4:00p\nCustomer\t0\tKyle Kennedy\nSKU\t0\tDOG010\nItem\t0\tDog, Golden Retriever (Canis lupus familiaris)\nQuantity\t0\t1\nUnit\t0\t$2,495.99\nPaid\t0\t$2495.99\nrow\t8\t\n    \nindex\t0\t34\nDate\t0\t8/16/2018 5:15p\nCustomer\t0\tMichael Smith\nSKU\t0\tBIRD160\nItem\t0\tParakeet, Blue (Melopsittacus undulatus)\nQuantity\t0\t1\nUnit\t0\t29.95\nPaid\t0\t$31.85\nrow\t8\t\n    \nindex\t0\t35\nDate\t0\t8/17/2018 9:26a\nCustomer\t0\tRubeus Hagrid\nSKU\t0\tNSCT201\nItem\t0\tFood, Spider\nQuantity\t0\t5\nUnit\t0\t$.05\nPaid\t0\t$0.25\nrow\t8\t\n    \nindex\t0\t36\nDate\t0\t8/20/2018 9:36a\nCustomer\t0\tKyle Kennedy\nSKU\t0\tRETURN\nItem\t0\tDog, Golden Retriever (Canis lupus familiaris)\nQuantity\t0\t1\nUnit\t0\t$1,247.99\nPaid\t0\t-$1247.99\nrow\t8\t\n    \nindex\t0\t37\nDate\t0\t8/20/2018 1:47p\nCustomer\t0\tמרוסיה ניסנהולץ אבולעפיה\nSKU\t0\tGOAT224\nItem\t0\tGoat, American Pygmy (Capra hircus)\nQuantity\t0\t1\nUnit\t0\t₪499\nPaid\t0\t$160.51\nrow\t8\t\n    \nindex\t0\t38\nDate\t0\t8/20/2018 3:31p\nCustomer\t0\tMonica Johnson\nSKU\t0\tNSCT201\nItem\t0\tCrickets, Adult Live (Gryllus assimilis)\nQuantity\t0\t30\nUnit\t0\t$.05\nPaid\t0\t$1.5\nrow\t8\t\n    \nindex\t0\t39\nDate\t0\t8/20/2018 5:12p\nCustomer\t0\tDavid Attenborough\nSKU\t0\tNSCT084\nItem\t0\tFood, Pangolin\nQuantity\t0\t30\nUnit\t0\t$.17\nPaid\t0\t$5.10\nrow\t8\t\n    \nindex\t0\t40\nDate\t0\t8/21/2018 12:13p\nCustomer\t0\tRobert Armstrong\nSKU\t0\tFOOD214\nItem\t0\tBFF Oh My Gravy! Duck & Salmon 2.8oz\nQuantity\t0\t4\nUnit\t0\t$12.95\nPaid\t0\t$51.8\nrow\t8\t\n    \nindex\t0\t41\nDate\t0\t8/22/2018 9:38a\nCustomer\t0\tDavid Attenborough\nSKU\t0\tBIRD160\nItem\t0\tFood, Quoll\nQuantity\t0\t1\nUnit\t0\t29.95\nPaid\t0\t$29.95\nrow\t8\t\n    \nindex\t0\t42\nDate\t0\t8/22/2018 2:13p\nCustomer\t0\tJon Arbuckle\nSKU\t0\tFOOD170\nItem\t0\tFood, Adult Dog - 5kg\nQuantity\t0\t1\nUnit\t0\t$44.95\nPaid\t0\t$44.95\nrow\t8\t\n    \nindex\t0\t43\nDate\t0\t8/22/2018 5:49p\nCustomer\t0\tמרוסיה ניסנהולץ\nSKU\t0\tSFTY052\nItem\t0\tFire Extinguisher, kitchen-rated\nQuantity\t0\t1\nUnit\t0\t$61.70\nPaid\t0\t$61.70\nrow\t8\t\n    \nindex\t0\t44\nDate\t0\t8/24/2018 11:42a\nCustomer\t0\tRobert Armstrong\nSKU\t0\tFOOD218\nItem\t0\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\nQuantity\t0\t4\nUnit\t0\t$12.95\nPaid\t0\t$51.8\nrow\t8\t\n    \nindex\t0\t45\nDate\t0\t8/27/2018 3:05p\nCustomer\t0\tMonica Johnson\nSKU\t0\tNSCT443\nItem\t0\tMealworms, Large (Tenebrio molitor) 100ct\nQuantity\t0\t1\nUnit\t0\t$1.99\nPaid\t0\t$1.99\nrow\t8\t\n    \nindex\t0\t46\nDate\t0\t8/28/2018 5:32p\nCustomer\t0\tSusan Ashworth\nSKU\t0\tCAT020\nItem\t0\tCat, Scottish Fold (Felis catus)\nQuantity\t0\t1\nUnit\t0\t$1,964.53\nPaid\t0\t$1964.53\nrow\t8\t\n    \nindex\t0\t47\nDate\t0\t8/28/2018 5:32p\nCustomer\t0\tSusan Ashworth\nSKU\t0\tFOOD130\nItem\t0\tFood, Kitten 3kg\nQuantity\t0\t2\nUnit\t0\t$14.94\nPaid\t0\t$29.88\nrow\t8\t\n    \nindex\t0\t48\nDate\t0\t8/29/2018 10:07a\nCustomer\t0\tRobert Armstrong\nSKU\t0\tFOOD219\nItem\t0\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\nQuantity\t0\t4\nUnit\t0\t$12.95\nPaid\t0\t$51.8\nrow\t8\t\n    \nindex\t0\t49\nDate\t0\t8/31/2018 12:00a\nCustomer\t0\tRobert Armstrong\nSKU\t0\tFOOD219\nItem\t0\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\nQuantity\t0\t144\nUnit\t0\t$12.95\nPaid\t0\t$1864.8\nrow\t8\t\n    \nindex\t0\t50\nDate\t0\t8/31/2018 5:57p\nCustomer\t0\tJuan Johnson\nSKU\t0\tREPT217\nItem\t0\tLizard, Spinytail (Uromastyx ornatus)\nQuantity\t0\t1\nUnit\t0\t$99.95\nPaid\t0\t$99.95\n"
  },
  {
    "path": "tests/golden/load-xpt-n311.tsv",
    "content": "MACHINE\tBRAKE\n1.00\t322.00\n1.00\t322.00\n1.00\t322.02\n1.00\t321.99\n1.00\t322.01\n1.00\t322.00\n1.00\t322.01\n1.00\t321.98\n1.00\t322.00\n1.00\t322.00\n1.00\t321.98\n1.00\t321.98\n1.00\t322.00\n1.00\t322.00\n1.00\t322.00\n1.00\t322.00\n2.00\t322.01\n2.00\t322.03\n2.00\t322.01\n2.00\t322.03\n2.00\t322.01\n2.00\t322.03\n2.00\t322.02\n2.00\t322.01\n2.00\t322.02\n2.00\t321.99\n2.00\t322.02\n2.00\t322.02\n2.00\t322.02\n2.00\t322.01\n2.00\t322.01\n2.00\t322.00\n3.00\t321.99\n3.00\t321.99\n3.00\t322.00\n3.00\t321.98\n3.00\t322.02\n3.00\t321.98\n3.00\t322.00\n3.00\t322.00\n3.00\t322.00\n3.00\t322.02\n3.00\t322.00\n3.00\t322.01\n3.00\t321.99\n3.00\t321.99\n3.00\t321.99\n3.00\t322.00\n4.00\t321.99\n4.00\t322.00\n4.00\t322.01\n4.00\t322.00\n4.00\t321.99\n4.00\t322.00\n4.00\t322.00\n4.00\t321.99\n4.00\t322.00\n4.00\t322.00\n4.00\t321.99\n4.00\t322.00\n4.00\t321.99\n4.00\t321.99\n4.00\t321.98\n4.00\t322.00\n5.00\t321.99\n5.00\t322.00\n5.00\t322.00\n5.00\t322.01\n5.00\t322.02\n5.00\t321.99\n5.00\t322.01\n5.00\t322.02\n5.00\t322.00\n5.00\t322.01\n5.00\t322.01\n5.00\t322.00\n5.00\t322.00\n5.00\t321.99\n5.00\t322.01\n5.00\t322.00\n6.00\t322.00\n6.00\t321.98\n6.00\t322.00\n6.00\t322.00\n6.00\t322.02\n6.00\t322.00\n6.00\t322.01\n6.00\t322.01\n6.00\t322.00\n6.00\t322.01\n6.00\t322.00\n6.00\t322.01\n6.00\t322.01\n6.00\t322.00\n6.00\t322.00\n6.00\t322.00\n7.00\t322.01\n7.00\t322.02\n7.00\t322.01\n7.00\t322.00\n7.00\t322.01\n7.00\t322.02\n7.00\t322.01\n7.00\t322.00\n7.00\t322.00\n7.00\t322.01\n7.00\t322.00\n7.00\t321.99\n7.00\t322.01\n7.00\t322.01\n7.00\t322.00\n7.00\t322.01\n8.00\t321.99\n8.00\t321.99\n8.00\t321.99\n8.00\t322.01\n8.00\t321.99\n8.00\t322.00\n8.00\t322.00\n8.00\t322.00\n8.00\t322.00\n8.00\t322.00\n8.00\t321.99\n8.00\t322.00\n8.00\t322.00\n8.00\t321.98\n8.00\t321.99\n8.00\t322.00\n"
  },
  {
    "path": "tests/golden/load-yaml.tsv",
    "content": "customer\tdate\tfoo\titem\tpaid\tquantity\tsku\tunit\nRobert Armstrong\t7/3/2018 1:47p\t\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t$51.8\t4\tFOOD213\t$12.95\nKyle Kennedy\t7/3/2018 3:32p\t\tFood, Adult Cat - 3.5 oz\t$4.22\t1\tFOOD121\t$4.22\nDouglas \"Dougie\" Powers\t7/5/2018 4:15p\t\tFood, Adult Cat 3.5 oz\t$4.22\t1\tFOOD121\t$4.22\n桜 高橋 (Sakura Takahashi)\t7/6/2018 12:15p\t\tFood, Senior Wet Cat - 3 oz\t157¥\t12\tFOOD122\t$1.29\nDavid Attenborough\t7/10/2018 10:28a\t\tFood, Salamander\t$1.5\t30\tNSCT201\t$.05\nSusan Ashworth\t7/10/2018 5:23p\t\tCat, Korat (Felis catus)\t$720.42\t1\tCAT060\t$720.42\nSusan Ashworth\t7/10/2018 5:23p\t\tFood, Kitten 3kg\t$14.94\t1\tFOOD130\t$14.94\nWil Wheaton\t7/13/2018 10:26a\t\tMonster, Rust (Monstrus gygaxus)\t$39.95\t1\tNSCT523\t$39.95\nRobert Armstrong\t7/13/2018 3:49p\t\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t$51.8\t4\tFOOD216\t$12.95\nRobert Armstrong\t7/17/2018 9:01a\t\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t$51.8\t4\tFOOD217\t$12.95\nHelen Halestorm\t7/17/2018 11:30a\t\tRabbit (Oryctolagus cuniculus)\t$65.88\t2\tLAGO342\t$32.94\n桜 高橋 (Sakura Takahashi)\t7/18/2018 12:16p\t\tFood, Senior Wet Cat - 3 oz\t157¥\t6\tFOOD122\t$1.29\nRubeus Hagrid\t7/19/2018 10:28a\t\tFood, Dog - 5kg\t$224.75\t5\tFOOD170\t$44.95\nJon Arbuckle\t7/20/2018 2:13p\t\tFood, Premium Wet Cat - 3.5 oz\t$197.5\t50\tFOOD167\t$3.95\nRobert Armstrong\t7/23/2018 1:41p\t\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t$51.8\t4\tFOOD215\t$12.95\nDouglas \"Dougie\" Powers\t7/23/2018 4:23p\t\tLaser Pointer\t$16.12\t1\tTOY235\t$16.12\n桜 高橋 (Sakura Takahashi)\t7/24/2018 12:16p\t\tFood, Senior Wet Cat - 3 oz\t157¥\t3\tFOOD122\t$1.29\nDouglas \"Dougie\" Powers\t7/26/2018 4:39p\t\tFood, Shark - 10 kg\t$15.7\t1\tFOOD420\t$15.70\n桜 高橋 (Sakura Takahashi)\t7/27/2018 12:16p\t\tFood, Senior Wet Cat - 3 oz\t157¥\t3\tFOOD122\t$1.29\n桜 高橋 (Sakura Takahashi)\t7/30/2018 12:17p\t\tFood, Senior Wet Cat - 3 oz\t157¥\t1\tRETURN\t$1.29\nRubeus Hagrid\t7/31/2018 5:42p\t\tFood, Dragon - 50kg\t$3602.1\t5\tCAT060\t$720.42\nDavid Attenborough\t8/1/2018 2:44p\t\tFood, Rhinocerous - 50kg\t$22.88\t4\tFOOD360\t$5.72\nSusan Ashworth\t8/2/2018 5:12p\t\tCat, Maine Coon (Felix catus)\t$1309.68\t1\tCAT110\t$1,309.68\nSusan Ashworth\t8/2/2018 5:12p\t\tFood, Kitten 3kg\t$44.82\t3\tFOOD130\t$14.94\nRobert Armstrong\t8/6/2018 10:21a\t\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t$51.8\t4\tFOOD212\t$12.95\nJuan Johnson\t8/7/2018 4:12p\t\tKingsnake, California (Lampropeltis getula)\t$89.95\t1\tREPT082\t$89.95\nJuan Johnson\t8/7/2018 4:12p\t\tMouse, Pinky (Mus musculus)\t$1.49\t1\tRDNT443\t$1.49\nRobert Armstrong\t8/10/2018 4:31p\t\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t$51.8\t4\tFOOD211\t$12.95\nMonica Johnson\t8/13/2018 2:07p\t\tMouse, Pinky (Mus musculus)\t$1.49\t1\tRDNT443\t$1.49\nMaría Fernández\t8/13/2018 2:08p\t\tForti Diet Prohealth Mouse/Rat 3lbs\t$4.0\t2\tFOOD146\t$2.00\nMr. Praline\t8/15/2018 11:57a\t\tParrot, Norwegian Blue (Mopsitta tanta)\t-$2300.0\t1\tRETURN\t$2300.00\nKyle Kennedy\t8/15/2018 3:48p\t\tFood, Adult Cat - 3.5 oz\t$8.44\t2\tFOOD121\t$4.22\nHelen Halestorm\t8/16/2018 11:50a\t\tRabbit (Oryctolagus cuniculus)\t$0.0\t6\tRETURN\t$0\nKyle Kennedy\t8/16/2018 4:00p\t\tDog, Golden Retriever (Canis lupus familiaris)\t$2495.99\t1\tDOG010\t$2,495.99\nMichael Smith\t8/16/2018 5:15p\t\tParakeet, Blue (Melopsittacus undulatus)\t$31.85\t1\tBIRD160\t29.95\nRubeus Hagrid\t8/17/2018 9:26a\t\tFood, Spider\t$0.25\t5\tNSCT201\t$.05\nKyle Kennedy\t8/20/2018 9:36a\t\tDog, Golden Retriever (Canis lupus familiaris)\t-$1247.99\t1\tRETURN\t$1,247.99\nמרוסיה ניסנהולץ אבולעפיה\t8/20/2018 1:47p\t\tGoat, American Pygmy (Capra hircus)\t$160.51\t1\tGOAT224\t₪499\nMonica Johnson\t8/20/2018 3:31p\t\tCrickets, Adult Live (Gryllus assimilis)\t$1.5\t30\tNSCT201\t$.05\nDavid Attenborough\t8/20/2018 5:12p\t\tFood, Pangolin\t$5.10\t30\tNSCT084\t$.17\nRobert Armstrong\t8/21/2018 12:13p\t\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t$51.8\t4\tFOOD214\t$12.95\nDavid Attenborough\t8/22/2018 9:38a\t\tFood, Quoll\t$29.95\t1\tBIRD160\t29.95\nJon Arbuckle\t8/22/2018 2:13p\t\tFood, Adult Dog - 5kg\t$44.95\t1\tFOOD170\t$44.95\nמרוסיה ניסנהולץ\t8/22/2018 5:49p\t\tFire Extinguisher, kitchen-rated\t$61.70\t1\tSFTY052\t$61.70\nRobert Armstrong\t8/24/2018 11:42a\t\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t$51.8\t4\tFOOD218\t$12.95\nMonica Johnson\t8/27/2018 3:05p\t\tMealworms, Large (Tenebrio molitor) 100ct\t$1.99\t1\tNSCT443\t$1.99\nSusan Ashworth\t8/28/2018 5:32p\t\tCat, Scottish Fold (Felis catus)\t$1964.53\t1\tCAT020\t$1,964.53\nSusan Ashworth\t8/28/2018 5:32p\t\tFood, Kitten 3kg\t$29.88\t2\tFOOD130\t$14.94\nRobert Armstrong\t8/29/2018 10:07a\t\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t$51.8\t4\tFOOD219\t$12.95\nRobert Armstrong\t8/31/2018 12:00a\t\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t$1864.8\t144\tFOOD219\t$12.95\nJuan Johnson\t8/31/2018 5:57p\t\tLizard, Spinytail (Uromastyx ornatus)\t$99.95\t1\tREPT217\t$99.95\n\t\t[3] 1; 2; 3\t\t\t\t\t\n"
  },
  {
    "path": "tests/golden/load-zip.tsv",
    "content": "Date\tCustomer\tSKU\tItem\tQuantity\tUnit\tPaid\n7/3/2018 1:47p\tRobert Armstrong\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t4\t$12.95\t$51.8\n7/3/2018 3:32p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t1\t$4.22\t$4.22\n7/5/2018 4:15p\tDouglas \"Dougie\" Powers\tFOOD121\tFood, Adult Cat 3.5 oz\t1\t$4.22\t$4.22\n7/6/2018 12:15p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t$1.29\t157¥\n7/10/2018 10:28a\tDavid Attenborough\tNSCT201\tFood, Salamander\t30\t$.05\t$1.5\n7/10/2018 5:23p\tSusan Ashworth\tCAT060\tCat, Korat (Felis catus)\t1\t$720.42\t$720.42\n7/10/2018 5:23p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t1\t$14.94\t$14.94\n7/13/2018 10:26a\tWil Wheaton\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t1\t$39.95\t$39.95\n7/13/2018 3:49p\tRobert Armstrong\tFOOD216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 9:01a\tRobert Armstrong\tFOOD217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 11:30a\tHelen Halestorm\tLAGO342\tRabbit (Oryctolagus cuniculus)\t2\t$32.94\t$65.88\n7/18/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t6\t$1.29\t157¥\n7/19/2018 10:28a\tRubeus Hagrid\tFOOD170\tFood, Dog - 5kg\t5\t$44.95\t$224.75\n7/20/2018 2:13p\tJon Arbuckle\tFOOD167\tFood, Premium Wet Cat - 3.5 oz\t50\t$3.95\t$197.5\n7/23/2018 1:41p\tRobert Armstrong\tFOOD215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/23/2018 4:23p\tDouglas \"Dougie\" Powers\tTOY235\tLaser Pointer\t1\t$16.12\t$16.12\n7/24/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/26/2018 4:39p\tDouglas \"Dougie\" Powers\tFOOD420\tFood, Shark - 10 kg\t1\t$15.70\t$15.7\n7/27/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/30/2018 12:17p\t桜 高橋 (Sakura Takahashi)\tRETURN\tFood, Senior Wet Cat - 3 oz\t1\t$1.29\t157¥\n7/31/2018 5:42p\tRubeus Hagrid\tCAT060\tFood, Dragon - 50kg\t5\t$720.42\t$3602.1\n8/1/2018 2:44p\tDavid Attenborough\tFOOD360\tFood, Rhinocerous - 50kg\t4\t$5.72\t$22.88\n8/2/2018 5:12p\tSusan Ashworth\tCAT110\tCat, Maine Coon (Felix catus)\t1\t$1,309.68\t$1309.68\n8/2/2018 5:12p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t3\t$14.94\t$44.82\n8/6/2018 10:21a\tRobert Armstrong\tFOOD212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t4\t$12.95\t$51.8\n8/7/2018 4:12p\tJuan Johnson\tREPT082\tKingsnake, California (Lampropeltis getula)\t1\t$89.95\t$89.95\n8/7/2018 4:12p\tJuan Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/10/2018 4:31p\tRobert Armstrong\tFOOD211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t4\t$12.95\t$51.8\n8/13/2018 2:07p\tMonica Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/13/2018 2:08p\tMaría Fernández\tFOOD146\tForti Diet Prohealth Mouse/Rat 3lbs\t2\t$2.00\t$4.0\n8/15/2018 11:57a\tMr. Praline\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t1\t$2300.00\t-$2300.0\n8/15/2018 3:48p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t2\t$4.22\t$8.44\n8/16/2018 11:50a\tHelen Halestorm\tRETURN\tRabbit (Oryctolagus cuniculus)\t6\t$0\t$0.0\n8/16/2018 4:00p\tKyle Kennedy\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$2,495.99\t$2495.99\n8/16/2018 5:15p\tMichael Smith\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t1\t29.95\t$31.85\n8/17/2018 9:26a\tRubeus Hagrid\tNSCT201\tFood, Spider\t5\t$.05\t$0.25\n8/20/2018 9:36a\tKyle Kennedy\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$1,247.99\t-$1247.99\n8/20/2018 1:47p\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tGoat, American Pygmy (Capra hircus)\t1\t₪499\t$160.51\n8/20/2018 3:31p\tMonica Johnson\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t30\t$.05\t$1.5\n8/20/2018 5:12p\tDavid Attenborough\tNSCT084\tFood, Pangolin\t30\t$.17\t$5.10\n8/21/2018 12:13p\tRobert Armstrong\tFOOD214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/22/2018 9:38a\tDavid Attenborough\tBIRD160\tFood, Quoll\t1\t29.95\t$29.95\n8/22/2018 2:13p\tJon Arbuckle\tFOOD170\tFood, Adult Dog - 5kg\t1\t$44.95\t$44.95\n8/22/2018 5:49p\tמרוסיה ניסנהולץ\tSFTY052\tFire Extinguisher, kitchen-rated\t1\t$61.70\t$61.70\n8/24/2018 11:42a\tRobert Armstrong\tFOOD218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/27/2018 3:05p\tMonica Johnson\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t1\t$1.99\t$1.99\n8/28/2018 5:32p\tSusan Ashworth\tCAT020\tCat, Scottish Fold (Felis catus)\t1\t$1,964.53\t$1964.53\n8/28/2018 5:32p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t2\t$14.94\t$29.88\n8/29/2018 10:07a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t4\t$12.95\t$51.8\n8/31/2018 12:00a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t144\t$12.95\t$1864.8\n8/31/2018 5:57p\tJuan Johnson\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t1\t$99.95\t$99.95\n"
  },
  {
    "path": "tests/golden/load_npy.tsv",
    "content": "Date\tCustomer\tSKU\tItem\tQuantity\tUnit\tPaid\n7/3/2018 1:47p\tRobert Armstrong\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t4\t$12.95\t$51.8\n7/3/2018 3:32p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t1\t$4.22\t$4.22\n7/5/2018 4:15p\tDouglas \"Dougie\" Powers\tFOOD121\tFood, Adult Cat 3.5 oz\t1\t$4.22\t$4.22\n7/6/2018 12:15p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t$1.29\t157¥\n7/10/2018 10:28a\tDavid Attenborough\tNSCT201\tFood, Salamander\t30\t$.05\t$1.5\n7/10/2018 5:23p\tSusan Ashworth\tCAT060\tCat, Korat (Felis catus)\t1\t$720.42\t$720.42\n7/10/2018 5:23p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t1\t$14.94\t$14.94\n7/13/2018 10:26a\tWil Wheaton\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t1\t$39.95\t$39.95\n7/13/2018 3:49p\tRobert Armstrong\tFOOD216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 9:01a\tRobert Armstrong\tFOOD217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 11:30a\tHelen Halestorm\tLAGO342\tRabbit (Oryctolagus cuniculus)\t2\t$32.94\t$65.88\n7/18/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t6\t$1.29\t157¥\n7/19/2018 10:28a\tRubeus Hagrid\tFOOD170\tFood, Dog - 5kg\t5\t$44.95\t$224.75\n7/20/2018 2:13p\tJon Arbuckle\tFOOD167\tFood, Premium Wet Cat - 3.5 oz\t50\t$3.95\t$197.5\n7/23/2018 1:41p\tRobert Armstrong\tFOOD215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/23/2018 4:23p\tDouglas \"Dougie\" Powers\tTOY235\tLaser Pointer\t1\t$16.12\t$16.12\n7/24/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/26/2018 4:39p\tDouglas \"Dougie\" Powers\tFOOD420\tFood, Shark - 10 kg\t1\t$15.70\t$15.7\n7/27/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/30/2018 12:17p\t桜 高橋 (Sakura Takahashi)\tRETURN\tFood, Senior Wet Cat - 3 oz\t1\t$1.29\t157¥\n7/31/2018 5:42p\tRubeus Hagrid\tCAT060\tFood, Dragon - 50kg\t5\t$720.42\t$3602.1\n8/1/2018 2:44p\tDavid Attenborough\tFOOD360\tFood, Rhinocerous - 50kg\t4\t$5.72\t$22.88\n8/2/2018 5:12p\tSusan Ashworth\tCAT110\tCat, Maine Coon (Felix catus)\t1\t$1,309.68\t$1309.68\n8/2/2018 5:12p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t3\t$14.94\t$44.82\n8/6/2018 10:21a\tRobert Armstrong\tFOOD212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t4\t$12.95\t$51.8\n8/7/2018 4:12p\tJuan Johnson\tREPT082\tKingsnake, California (Lampropeltis getula)\t1\t$89.95\t$89.95\n8/7/2018 4:12p\tJuan Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/10/2018 4:31p\tRobert Armstrong\tFOOD211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t4\t$12.95\t$51.8\n8/13/2018 2:07p\tMonica Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/13/2018 2:08p\tMaría Fernández\tFOOD146\tForti Diet Prohealth Mouse/Rat 3lbs\t2\t$2.00\t$4.0\n8/15/2018 11:57a\tMr. Praline\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t1\t$2300.00\t-$2300.0\n8/15/2018 3:48p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t2\t$4.22\t$8.44\n8/16/2018 11:50a\tHelen Halestorm\tRETURN\tRabbit (Oryctolagus cuniculus)\t6\t$0\t$0.0\n8/16/2018 4:00p\tKyle Kennedy\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$2,495.99\t$2495.99\n8/16/2018 5:15p\tMichael Smith\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t1\t29.95\t$31.85\n8/17/2018 9:26a\tRubeus Hagrid\tNSCT201\tFood, Spider\t5\t$.05\t$0.25\n8/20/2018 9:36a\tKyle Kennedy\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$1,247.99\t-$1247.99\n8/20/2018 1:47p\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tGoat, American Pygmy (Capra hircus)\t1\t₪499\t$160.51\n8/20/2018 3:31p\tMonica Johnson\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t30\t$.05\t$1.5\n8/20/2018 5:12p\tDavid Attenborough\tNSCT084\tFood, Pangolin\t30\t$.17\t$5.10\n8/21/2018 12:13p\tRobert Armstrong\tFOOD214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/22/2018 9:38a\tDavid Attenborough\tBIRD160\tFood, Quoll\t1\t29.95\t$29.95\n8/22/2018 2:13p\tJon Arbuckle\tFOOD170\tFood, Adult Dog - 5kg\t1\t$44.95\t$44.95\n8/22/2018 5:49p\tמרוסיה ניסנהולץ\tSFTY052\tFire Extinguisher, kitchen-rated\t1\t$61.70\t$61.70\n8/24/2018 11:42a\tRobert Armstrong\tFOOD218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/27/2018 3:05p\tMonica Johnson\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t1\t$1.99\t$1.99\n8/28/2018 5:32p\tSusan Ashworth\tCAT020\tCat, Scottish Fold (Felis catus)\t1\t$1,964.53\t$1964.53\n8/28/2018 5:32p\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t2\t$14.94\t$29.88\n8/29/2018 10:07a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t4\t$12.95\t$51.8\n8/31/2018 12:00a\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t144\t$12.95\t$1864.8\n8/31/2018 5:57p\tJuan Johnson\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t1\t$99.95\t$99.95\n"
  },
  {
    "path": "tests/golden/load_xlsx.tsv",
    "content": ""
  },
  {
    "path": "tests/golden/melt-error.tsv",
    "content": "key1\tVariable\tValue\n\tamt\t43.2\n\tamt\t3.3\n\tkey2\tbaz\n\tkey2\tbaz\n\tqty\t4\n\tqty\t32\n2016-01-01\tamt\t3\n2016-01-01\tqty\t2\n2016-01-01\tkey2\tfoo\n2016-01-01\tqty\t1\n2017-12-25\tamt\t.3\n2017-12-25\tkey2\tbar\n2017-12-25\tqty\t16\n2018-07-27\tamt\t9.1\n2018-07-27\tqty\t64\n2018-07-27\tkey2\tbar\n2018-07-27\tamt\t.01\n2018-07-27\tkey2\tbaz\n2018-07-27\tqty\t256\n2018-10-20\tamt\t.01\n2018-10-20\tkey2\tfoo\n2018-10-20\tqty\t30.0\n"
  },
  {
    "path": "tests/golden/messenger-nosave.dot",
    "content": "graph { concentrate=true;\n\tUnispher_10_15_59[label=\"Unispher:10:15:59\"];\n\tIbm_7b_2d_9b[label=\"Ibm:7b:2d:9b\"];\n\tUnispher_10_15_59 -- Ibm_7b_2d_9b[label=\"2005-06-10/473.0\", color=black];\n\tUnispher_10_15_59[label=\"Unispher:10:15:59\"];\n\tIbm_7b_2d_9b[label=\"Ibm:7b:2d:9b\"];\n\tUnispher_10_15_59 -- Ibm_7b_2d_9b[label=\"2005-06-10/473.0\", color=black];\n\tUnispher_10_15_59[label=\"Unispher:10:15:59\"];\n\tIbm_7b_2d_9b[label=\"Ibm:7b:2d:9b\"];\n\tUnispher_10_15_59 -- Ibm_7b_2d_9b[label=\"2005-06-10/473.0\", color=black];\n\tUnispher_10_15_59[label=\"Unispher:10:15:59\"];\n\tIbm_7b_2d_9b[label=\"Ibm:7b:2d:9b\"];\n\tUnispher_10_15_59 -- Ibm_7b_2d_9b[label=\"2005-06-10/506.0\", color=black];\n\tUnispher_10_15_59[label=\"Unispher:10:15:59\"];\n\tIbm_7b_2d_9b[label=\"Ibm:7b:2d:9b\"];\n\tUnispher_10_15_59 -- Ibm_7b_2d_9b[label=\"2005-06-10/506.0\", color=black];\n\tUnispher_10_15_59[label=\"Unispher:10:15:59\"];\n\tIbm_7b_2d_9b[label=\"Ibm:7b:2d:9b\"];\n\tUnispher_10_15_59 -- Ibm_7b_2d_9b[label=\"2005-06-10/828.0\", color=black];\nlabel=\"messenger\"\nnode[shape=plaintext];\nsubgraph cluster_legend {\nlabel=\"Legend\";\nkey0[label=\"ether-Unispher-Ibm\", fontcolor=black];\n}\n}\n"
  },
  {
    "path": "tests/golden/monthly-revenue.tsv",
    "content": "Date\tcount\tRevenue\n7/10\t3\t736.86\n7/13\t2\t91.75\n7/17\t2\t117.68\n7/18\t1\t157.00\n7/19\t1\t224.75\n7/20\t1\t197.50\n7/23\t2\t67.92\n7/24\t1\t157.00\n7/26\t1\t15.70\n7/27\t1\t157.00\n7/3\t2\t56.02\n7/30\t1\t157.00\n7/31\t1\t3602.10\n7/5\t1\t4.22\n7/6\t1\t157.00\n8/1\t1\t22.88\n8/10\t1\t51.80\n8/13\t2\t5.49\n8/15\t2\t-2291.56\n8/16\t3\t2527.84\n8/17\t1\t0.25\n8/2\t2\t1354.50\n8/20\t4\t-1080.88\n8/21\t1\t51.80\n8/22\t3\t136.60\n8/24\t1\t51.80\n8/27\t1\t1.99\n8/28\t2\t1994.41\n8/29\t1\t51.80\n8/31\t2\t1964.75\n8/6\t1\t51.80\n8/7\t2\t91.44\n"
  },
  {
    "path": "tests/golden/numeric-cols.tsv",
    "content": "Region\tRep\tItem\tUnits\tUnit_Cost\tTotal\nEast\tJones\tPencil\t95\t1.99\t189.05\nCentral\tKivell\tBinder\t50\t19.99\t999.50\nCentral\tJardine\tPencil\t36\t4.99\t179.64\nCentral\tGill\tPen\t27\t19.99\t539.73\nWest\tSorvino\tPencil\t56\t2.99\t167.44\nEast\tJones\tBinder\t60\t4.99\t299.40\nCentral\tAndrews\tPencil\t75\t1.99\t149.25\nCentral\tJardine\tPencil\t90\t4.99\t449.10\nWest\tThompson\tPencil\t32\t1.99\t63.68\nEast\tJones\tBinder\t60\t8.99\t539.40\nCentral\tMorgan\tPencil\t90\t4.99\t449.10\nEast\tHoward\tBinder\t29\t1.99\t57.71\nEast\tParent\tBinder\t81\t19.99\t1619.19\nEast\tJones\tPencil\t35\t4.99\t174.65\nCentral\tSmith\tDesk\t2\t125.00\t250.00\nEast\tJones\tPen Set\t16\t15.99\t255.84\nCentral\tMorgan\tBinder\t28\t8.99\t251.72\nEast\tJones\tPen\t64\t8.99\t575.36\nEast\tParent\tPen\t15\t19.99\t299.85\nCentral\tKivell\tPen Set\t96\t4.99\t479.04\nCentral\tSmith\tPencil\t67\t1.29\t86.43\nEast\tParent\tPen Set\t74\t15.99\t1183.26\nCentral\tGill\tBinder\t46\t8.99\t413.54\nCentral\tSmith\tBinder\t87\t15.00\t1305.00\nEast\tJones\tBinder\t4\t4.99\t19.96\nWest\tSorvino\tBinder\t7\t19.99\t139.93\nCentral\tJardine\tPen Set\t50\t4.99\t249.50\nCentral\tAndrews\tPencil\t66\t1.99\t131.34\nEast\tHoward\tPen\t96\t4.99\t479.04\nCentral\tGill\tPencil\t53\t1.29\t68.37\nCentral\tGill\tBinder\t80\t8.99\t719.20\nCentral\tKivell\tDesk\t5\t125.00\t625.00\nEast\tJones\tPen Set\t62\t4.99\t309.38\nCentral\tMorgan\tPen Set\t55\t12.49\t686.95\nCentral\tKivell\tPen Set\t42\t23.95\t1005.90\nWest\tSorvino\tDesk\t3\t275.00\t825.00\nCentral\tGill\tPencil\t7\t1.29\t9.03\nWest\tSorvino\tPen\t76\t1.99\t151.24\nWest\tThompson\tBinder\t57\t19.99\t1139.43\nCentral\tAndrews\tPencil\t14\t1.29\t18.06\nCentral\tJardine\tBinder\t11\t4.99\t54.89\nCentral\tJardine\tBinder\t94\t19.99\t1879.06\nCentral\tAndrews\tBinder\t28\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/numeric-names.tsv",
    "content": "Region\t\tItem\tUnits\tUnit_Cost\tTotal\nEast\tJones\tPencil\t95\t1.99\t189.05\nCentral\tKivell\tBinder\t50\t19.99\t999.50\nCentral\tJardine\tPencil\t36\t4.99\t179.64\nCentral\tGill\tPen\t27\t19.99\t539.73\nWest\tSorvino\tPencil\t56\t2.99\t167.44\nEast\tJones\tBinder\t60\t4.99\t299.40\nCentral\tAndrews\tPencil\t75\t1.99\t149.25\nCentral\tJardine\tPencil\t90\t4.99\t449.10\nWest\tThompson\tPencil\t32\t1.99\t63.68\nEast\tJones\tBinder\t60\t8.99\t539.40\nCentral\tMorgan\tPencil\t90\t4.99\t449.10\nEast\tHoward\tBinder\t29\t1.99\t57.71\nEast\tParent\tBinder\t81\t19.99\t1619.19\nEast\tJones\tPencil\t35\t4.99\t174.65\nCentral\tSmith\tDesk\t2\t125.00\t250.00\nEast\tJones\tPen Set\t16\t15.99\t255.84\nCentral\tMorgan\tBinder\t28\t8.99\t251.72\nEast\tJones\tPen\t64\t8.99\t575.36\nEast\tParent\tPen\t15\t19.99\t299.85\nCentral\tKivell\tPen Set\t96\t4.99\t479.04\nCentral\tSmith\tPencil\t67\t1.29\t86.43\nEast\tParent\tPen Set\t74\t15.99\t1183.26\nCentral\tGill\tBinder\t46\t8.99\t413.54\nCentral\tSmith\tBinder\t87\t15.00\t1305.00\nEast\tJones\tBinder\t4\t4.99\t19.96\nWest\tSorvino\tBinder\t7\t19.99\t139.93\nCentral\tJardine\tPen Set\t50\t4.99\t249.50\nCentral\tAndrews\tPencil\t66\t1.99\t131.34\nEast\tHoward\tPen\t96\t4.99\t479.04\nCentral\tGill\tPencil\t53\t1.29\t68.37\nCentral\tGill\tBinder\t80\t8.99\t719.20\nCentral\tKivell\tDesk\t5\t125.00\t625.00\nEast\tJones\tPen Set\t62\t4.99\t309.38\nCentral\tMorgan\tPen Set\t55\t12.49\t686.95\nCentral\tKivell\tPen Set\t42\t23.95\t1005.90\nWest\tSorvino\tDesk\t3\t275.00\t825.00\nCentral\tGill\tPencil\t7\t1.29\t9.03\nWest\tSorvino\tPen\t76\t1.99\t151.24\nWest\tThompson\tBinder\t57\t19.99\t1139.43\nCentral\tAndrews\tPencil\t14\t1.29\t18.06\nCentral\tJardine\tBinder\t11\t4.99\t54.89\nCentral\tJardine\tBinder\t94\t19.99\t1879.06\nCentral\tAndrews\tBinder\t28\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/numeric_binning.tsv",
    "content": "Quantity\tcount\tpercent\n1.00 - 21.43\t46\t90.20\n21.43 - 41.86\t3\t5.88\n41.86 - 62.29\t1\t1.96\n123.57 - 144.00\t1\t1.96\n62.29 - 82.71\t0\t0.00\n82.71 - 103.14\t0\t0.00\n103.14 - 123.57\t0\t0.00\n"
  },
  {
    "path": "tests/golden/outer-join-1.tsv",
    "content": "Key\tA\tB\tC\tD\n1\ta1\tb1\t\t\n2\tc1\td1\ta2\tb2\n2\te1\tf1\ta2\tb2\n"
  },
  {
    "path": "tests/golden/outer-join-2.tsv",
    "content": "Key\tC\tD\tA\tB\n2\ta2\tb2\tc1\td1\n2\ta2\tb2\te1\tf1\n3\tc2\td2\t\t\n"
  },
  {
    "path": "tests/golden/pandas_loader_dup_selected.tsv",
    "content": "Date\tCustomer\tSKU\tItem\tQuantity\tUnit\tPaid\n7/3/2018 1:47p\tRobert Armstrong\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t4\t$12.95\t$51.8\n7/3/2018 3:32p\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t1\t$4.22\t$4.22\n7/5/2018 4:15p\tDouglas \"Dougie\" Powers\tFOOD121\tFood, Adult Cat 3.5 oz\t1\t$4.22\t$4.22\n"
  },
  {
    "path": "tests/golden/petsdiet.tsv",
    "content": "SKU\tcount\tQuantity_mean\nFOOD219\t2\t74\nFOOD167\t1\t50\nFOOD122\t4\t6\nFOOD213\t1\t4\nFOOD216\t1\t4\nFOOD217\t1\t4\nFOOD215\t1\t4\nFOOD360\t1\t4\nFOOD212\t1\t4\nFOOD211\t1\t4\nFOOD214\t1\t4\nFOOD218\t1\t4\nFOOD170\t2\t3\nFOOD130\t3\t2\nFOOD146\t1\t2\nFOOD121\t3\t1\nFOOD420\t1\t1\n"
  },
  {
    "path": "tests/golden/pivot-error.tsv",
    "content": "key1\tfoo\tbaz\tbar\n2018-10-20\t0\t0\t0\n2018-07-27\t0\t256\t0\n2017-12-25\t0\t0\t16\n2016-01-01\t1\t0\t0\n\t0\t36\t0\n#ERR\t0\t0\t0\n"
  },
  {
    "path": "tests/golden/pivot-noaggr.tsv",
    "content": "4\t1\t12\t30\t2\t6\t5\t50\t3\t144\n10\t23\t1\t3\t4\t2\t3\t1\t3\t1\n"
  },
  {
    "path": "tests/golden/pivot.tsv",
    "content": "Rep\tsum_Pencil\tmean_Pencil\tsum_Binder\tmean_Binder\tsum_Pen\tmean_Pen\tsum_Desk\tmean_Desk\tsum_Pen Set\tmean_Pen Set\nJones\t130\t65.00\t124\t41.33\t64\t64.00\t0\t\t78\t39.00\nKivell\t0\t\t50\t50.00\t0\t\t5\t5.00\t138\t69.00\nJardine\t126\t63.00\t105\t52.50\t0\t\t0\t\t50\t50.00\nGill\t60\t30.00\t126\t63.00\t27\t27.00\t0\t\t0\t\nSorvino\t56\t56.00\t7\t7.00\t76\t76.00\t3\t3.00\t0\t\nAndrews\t155\t51.67\t28\t28.00\t0\t\t0\t\t0\t\nThompson\t32\t32.00\t57\t57.00\t0\t\t0\t\t0\t\nMorgan\t90\t90.00\t28\t28.00\t0\t\t0\t\t55\t55.00\nHoward\t0\t\t29\t29.00\t96\t96.00\t0\t\t0\t\nParent\t0\t\t81\t81.00\t15\t15.00\t0\t\t74\t74.00\nSmith\t67\t67.00\t87\t87.00\t0\t\t2\t2.00\t0\t\n"
  },
  {
    "path": "tests/golden/pr2302.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016-01-06\tEast\tJones\tPencil\t95\t1.99\t189.05\n2016-01-23\tCentral\tKivell\tBinder\t50\t19.99\t999.50\n2016-02-09\tCentral\tJardine\tPencil\t36\t4.99\t179.64\n2016-02-26\tCentral\tGill\tPen\t27\t19.99\t539.73\n2016-03-15\tWest\tSorvino\tPencil\t56\t2.99\t167.44\n2016-04-01\tEast\tJones\tBinder\t60\t4.99\t299.40\n2016-04-18\tCentral\tAndrews\tPencil\t75\t1.99\t149.25\n2016-05-05\tCentral\tJardine\tPencil\t90\t4.99\t449.10\n2016-05-22\tWest\tThompson\tPencil\t32\t1.99\t63.68\n2016-06-08\tEast\tJones\tBinder\t60\t8.99\t539.40\n2016-06-25\tCentral\tMorgan\tPencil\t90\t4.99\t449.10\n2016-07-12\tEast\tHoward\tBinder\t29\t1.99\t57.71\n2016-07-29\tEast\tParent\tBinder\t81\t19.99\t1619.19\n2016-08-15\tEast\tJones\tPencil\t35\t4.99\t174.65\n2016-09-01\tCentral\tSmith\tDesk\t2\t125.00\t250.00\n2016-09-18\tEast\tJones\tPen Set\t16\t15.99\t255.84\n2016-10-05\tCentral\tMorgan\tBinder\t28\t8.99\t251.72\n2016-10-22\tEast\tJones\tPen\t64\t8.99\t575.36\n2016-11-08\tEast\tParent\tPen\t15\t19.99\t299.85\n2016-11-25\tCentral\tKivell\tPen Set\t96\t4.99\t479.04\n2016-12-12\tCentral\tSmith\tPencil\t67\t1.29\t86.43\n2016-12-29\tEast\tParent\tPen Set\t74\t15.99\t1183.26\n2017-01-15\tCentral\tGill\tBinder\t46\t8.99\t413.54\n2017-02-01\tCentral\tSmith\tBinder\t87\t15.00\t1305.00\n2017-02-18\tEast\tJones\tBinder\t4\t4.99\t19.96\n2017-03-07\tWest\tSorvino\tBinder\t7\t19.99\t139.93\n2017-03-24\tCentral\tJardine\tPen Set\t50\t4.99\t249.50\n2017-04-10\tCentral\tAndrews\tPencil\t66\t1.99\t131.34\n2017-04-27\tEast\tHoward\tPen\t96\t4.99\t479.04\n2017-05-14\tCentral\tGill\tPencil\t53\t1.29\t68.37\n2017-05-31\tCentral\tGill\tBinder\t80\t8.99\t719.20\n2017-06-17\tCentral\tKivell\tDesk\t5\t125.00\t625.00\n2017-07-04\tEast\tJones\tPen Set\t62\t4.99\t309.38\n2017-07-21\tCentral\tMorgan\tPen Set\t55\t12.49\t686.95\n2017-08-07\tCentral\tKivell\tPen Set\t42\t23.95\t1005.90\n2017-08-24\tWest\tSorvino\tDesk\t3\t275.00\t825.00\n2017-09-10\tCentral\tGill\tPencil\t7\t1.29\t9.03\n2017-09-27\tWest\tSorvino\tPen\t76\t1.99\t151.24\n2017-10-14\tWest\tThompson\tBinder\t57\t19.99\t1139.43\n2017-10-31\tCentral\tAndrews\tPencil\t14\t1.29\t18.06\n2017-11-17\tCentral\tJardine\tBinder\t11\t4.99\t54.89\n2017-12-04\tCentral\tJardine\tBinder\t94\t19.99\t1879.06\n2017-12-21\tCentral\tAndrews\tBinder\t28\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/pr2308.json",
    "content": "[\n{\"Total\": \"Total\", \"count\": 2, \"A_keymax\": [2.0]},\n{\"Total\": \"Selected\", \"count\": 0}\n]\n"
  },
  {
    "path": "tests/golden/pr2372.tsv",
    "content": "text\tnewcol\n1\t1\n2\t2\n3\t3\n4\t4\n5\t5\n6\t6\n7\t7\n8\t8\n9\t9\n"
  },
  {
    "path": "tests/golden/pr2400.tsv",
    "content": "a\tb\tc\tNumber\tExile\nd  \t e \t  f\t\t\nggg\thhh\tiiii\t\t\njjj\tkkk\tllllllll\t\t\nDaniel\t\t\t1\tTrue\nHananiah\t\t\t2\tTrue\nMishael\t\t\t3\tTrue\nAzariah\t\t\t4\tTrue\nNebuchadnezzar\t\t\t5\t\n"
  },
  {
    "path": "tests/golden/pr2614.tsv",
    "content": "A\n1\n2\n3\n"
  },
  {
    "path": "tests/golden/pr2647.tsv",
    "content": "key\tsource_sheet\nb_only\tc\nboth\ta\na_only\ta\n"
  },
  {
    "path": "tests/golden/pr2688a.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016-09-01\tCentral\tSmith\tDesk\t2\t125.00\t250.00\n2017-08-24\tWest\tSorvino\tDesk\t3\t275.00\t825.00\n2017-02-18\tEast\tJones\tBinder\t4\t4.99\t19.96\n2017-06-17\tCentral\tKivell\tDesk\t5\t125.00\t625.00\n2017-03-07\tWest\tSorvino\tBinder\t7\t19.99\t139.93\n2017-09-10\tCentral\tGill\tPencil\t7\t1.29\t9.03\n2017-11-17\tCentral\tJardine\tBinder\t11\t4.99\t54.89\n2017-10-31\tCentral\tAndrews\tPencil\t14\t1.29\t18.06\n2016-11-08\tEast\tParent\tPen\t15\t19.99\t299.85\n2016-09-18\tEast\tJones\tPen Set\t16\t15.99\t255.84\n2016-02-26\tCentral\tGill\tPen\t27\t19.99\t539.73\n2016-10-05\tCentral\tMorgan\tBinder\t28\t8.99\t251.72\n2017-12-21\tCentral\tAndrews\tBinder\t28\t4.99\t139.72\n2016-07-12\tEast\tHoward\tBinder\t29\t1.99\t57.71\n2016-05-22\tWest\tThompson\tPencil\t32\t1.99\t63.68\n2016-08-15\tEast\tJones\tPencil\t35\t4.99\t174.65\n2016-02-09\tCentral\tJardine\tPencil\t36\t4.99\t179.64\n2017-08-07\tCentral\tKivell\tPen Set\t42\t23.95\t1005.90\n2017-01-15\tCentral\tGill\tBinder\t46\t8.99\t413.54\n2016-01-23\tCentral\tKivell\tBinder\t50\t19.99\t999.50\n2017-03-24\tCentral\tJardine\tPen Set\t50\t4.99\t249.50\n2017-05-14\tCentral\tGill\tPencil\t53\t1.29\t68.37\n2017-07-21\tCentral\tMorgan\tPen Set\t55\t12.49\t686.95\n2016-03-15\tWest\tSorvino\tPencil\t56\t2.99\t167.44\n2017-10-14\tWest\tThompson\tBinder\t57\t19.99\t1139.43\n2016-06-08\tEast\tJones\tBinder\t60\t8.99\t539.40\n2016-04-01\tEast\tJones\tBinder\t60\t4.99\t299.40\n2017-07-04\tEast\tJones\tPen Set\t62\t4.99\t309.38\n2016-10-22\tEast\tJones\tPen\t64\t8.99\t575.36\n2017-04-10\tCentral\tAndrews\tPencil\t66\t1.99\t131.34\n2016-12-12\tCentral\tSmith\tPencil\t67\t1.29\t86.43\n2016-12-29\tEast\tParent\tPen Set\t74\t15.99\t1183.26\n2016-04-18\tCentral\tAndrews\tPencil\t75\t1.99\t149.25\n2017-09-27\tWest\tSorvino\tPen\t76\t1.99\t151.24\n2017-05-31\tCentral\tGill\tBinder\t80\t8.99\t719.20\n2016-07-29\tEast\tParent\tBinder\t81\t19.99\t1619.19\n2017-02-01\tCentral\tSmith\tBinder\t87\t15.00\t1305.00\n2016-05-05\tCentral\tJardine\tPencil\t90\t4.99\t449.10\n2016-06-25\tCentral\tMorgan\tPencil\t90\t4.99\t449.10\n2017-12-04\tCentral\tJardine\tBinder\t94\t19.99\t1879.06\n2016-01-06\tEast\tJones\tPencil\t95\t1.99\t189.05\n2016-11-25\tCentral\tKivell\tPen Set\t96\t4.99\t479.04\n2017-04-27\tEast\tHoward\tPen\t96\t4.99\t479.04\n"
  },
  {
    "path": "tests/golden/pr2688b.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016-11-25\tCentral\tKivell\tPen Set\t96\t4.99\t479.04\n2017-04-27\tEast\tHoward\tPen\t96\t4.99\t479.04\n2016-01-06\tEast\tJones\tPencil\t95\t1.99\t189.05\n2017-12-04\tCentral\tJardine\tBinder\t94\t19.99\t1879.06\n2016-05-05\tCentral\tJardine\tPencil\t90\t4.99\t449.10\n2016-06-25\tCentral\tMorgan\tPencil\t90\t4.99\t449.10\n2017-02-01\tCentral\tSmith\tBinder\t87\t15.00\t1305.00\n2016-07-29\tEast\tParent\tBinder\t81\t19.99\t1619.19\n2017-05-31\tCentral\tGill\tBinder\t80\t8.99\t719.20\n2017-09-27\tWest\tSorvino\tPen\t76\t1.99\t151.24\n2016-04-18\tCentral\tAndrews\tPencil\t75\t1.99\t149.25\n2016-12-29\tEast\tParent\tPen Set\t74\t15.99\t1183.26\n2016-12-12\tCentral\tSmith\tPencil\t67\t1.29\t86.43\n2017-04-10\tCentral\tAndrews\tPencil\t66\t1.99\t131.34\n2016-10-22\tEast\tJones\tPen\t64\t8.99\t575.36\n2017-07-04\tEast\tJones\tPen Set\t62\t4.99\t309.38\n2016-06-08\tEast\tJones\tBinder\t60\t8.99\t539.40\n2016-04-01\tEast\tJones\tBinder\t60\t4.99\t299.40\n2017-10-14\tWest\tThompson\tBinder\t57\t19.99\t1139.43\n2016-03-15\tWest\tSorvino\tPencil\t56\t2.99\t167.44\n2017-07-21\tCentral\tMorgan\tPen Set\t55\t12.49\t686.95\n2017-05-14\tCentral\tGill\tPencil\t53\t1.29\t68.37\n2016-01-23\tCentral\tKivell\tBinder\t50\t19.99\t999.50\n2017-03-24\tCentral\tJardine\tPen Set\t50\t4.99\t249.50\n2017-01-15\tCentral\tGill\tBinder\t46\t8.99\t413.54\n2017-08-07\tCentral\tKivell\tPen Set\t42\t23.95\t1005.90\n2016-02-09\tCentral\tJardine\tPencil\t36\t4.99\t179.64\n2016-08-15\tEast\tJones\tPencil\t35\t4.99\t174.65\n2016-05-22\tWest\tThompson\tPencil\t32\t1.99\t63.68\n2016-07-12\tEast\tHoward\tBinder\t29\t1.99\t57.71\n2016-10-05\tCentral\tMorgan\tBinder\t28\t8.99\t251.72\n2017-12-21\tCentral\tAndrews\tBinder\t28\t4.99\t139.72\n2016-02-26\tCentral\tGill\tPen\t27\t19.99\t539.73\n2016-09-18\tEast\tJones\tPen Set\t16\t15.99\t255.84\n2016-11-08\tEast\tParent\tPen\t15\t19.99\t299.85\n2017-10-31\tCentral\tAndrews\tPencil\t14\t1.29\t18.06\n2017-11-17\tCentral\tJardine\tBinder\t11\t4.99\t54.89\n2017-03-07\tWest\tSorvino\tBinder\t7\t19.99\t139.93\n2017-09-10\tCentral\tGill\tPencil\t7\t1.29\t9.03\n2017-06-17\tCentral\tKivell\tDesk\t5\t125.00\t625.00\n2017-02-18\tEast\tJones\tBinder\t4\t4.99\t19.96\n2017-08-24\tWest\tSorvino\tDesk\t3\t275.00\t825.00\n2016-09-01\tCentral\tSmith\tDesk\t2\t125.00\t250.00\n"
  },
  {
    "path": "tests/golden/pr2815.json",
    "content": "[\n{\"description\": \"normal ASCII cell looks fine:\", \"col1\": \"ordinary contents\", \"col2\": \"\"},\n{\"description\": \"but cell ending in ASCII char 0 looks empty\", \"col1\": \"invisible string\\u0000\", \"col2\": \"\"},\n{\"description\": \"2 words separated by space\", \"col1\": \"word1 word2\", \"col2\": \"\"},\n{\"description\": \"2 words separated by TAB: invisible final chars\", \"col1\": \"word1\\t\\tword2\", \"col2\": \"\"},\n{\"description\": \"multiline value, with two lines hidden by next rows; press v\", \"col1\": \"\", \"col2\": \"first\\nsecond\\nlast\"},\n{\"description\": \"ASCII chars 1-255\", \"col1\": \"\", \"col2\": \"\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\u007f\\u0080\\u0081\\u0082\\u0083\\u0084\\u0085\\u0086\\u0087\\u0088\\u0089\\u008a\\u008b\\u008c\\u008d\\u008e\\u008f\\u0090\\u0091\\u0092\\u0093\\u0094\\u0095\\u0096\\u0097\\u0098\\u0099\\u009a\\u009b\\u009c\\u009d\\u009e\\u009f\\u00a0\\u00a1\\u00a2\\u00a3\\u00a4\\u00a5\\u00a6\\u00a7\\u00a8\\u00a9\\u00aa\\u00ab\\u00ac\\u00ad\\u00ae\\u00af\\u00b0\\u00b1\\u00b2\\u00b3\\u00b4\\u00b5\\u00b6\\u00b7\\u00b8\\u00b9\\u00ba\\u00bb\\u00bc\\u00bd\\u00be\\u00bf\\u00c0\\u00c1\\u00c2\\u00c3\\u00c4\\u00c5\\u00c6\\u00c7\\u00c8\\u00c9\\u00ca\\u00cb\\u00cc\\u00cd\\u00ce\\u00cf\\u00d0\\u00d1\\u00d2\\u00d3\\u00d4\\u00d5\\u00d6\\u00d7\\u00d8\\u00d9\\u00da\\u00db\\u00dc\\u00dd\\u00de\\u00df\\u00e0\\u00e1\\u00e2\\u00e3\\u00e4\\u00e5\\u00e6\\u00e7\\u00e8\\u00e9\\u00ea\\u00eb\\u00ec\\u00ed\\u00ee\\u00ef\\u00f0\\u00f1\\u00f2\\u00f3\\u00f4\\u00f5\\u00f6\\u00f7\\u00f8\\u00f9\\u00fa\\u00fb\\u00fc\\u00fd\\u00fe\\u00ff\"},\n{\"description\": \"empty row\", \"col1\": \"\", \"col2\": \"\"},\n{\"description\": \"empty row\", \"col1\": \"\", \"col2\": \"\"},\n{\"description\": \"empty row\", \"col1\": \"\", \"col2\": \"\"},\n{\"description\": \"multiline value, lines not hidden by next rows\", \"col1\": \"\", \"col2\": \"first\\nsecond\\nlast\"}\n]\n"
  },
  {
    "path": "tests/golden/pr2855.tsv",
    "content": "A\tB\tC\tD\tE\tF\tG\tH\tI\n\t1\t1\t1\t1\t1\t1\t1\t1\n\t2\t2\t2\t2\t2\t2\t2\t2\n\t3\t3\t3\t3\t3\t3\t3\t3\n"
  },
  {
    "path": "tests/golden/prefer-visible-col.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnits + 1\tUnit_Cost\tTotal\n2016-01-06\tEast\tJones\tPencil\t0\t1\t1.99\t189.05\n2016-01-23\tCentral\tKivell\tBinder\t0\t1\t19.99\t999.50\n2016-02-09\tCentral\tJardine\tPencil\t0\t1\t4.99\t179.64\n2016-02-26\tCentral\tGill\tPen\t0\t1\t19.99\t539.73\n2016-03-15\tWest\tSorvino\tPencil\t0\t1\t2.99\t167.44\n2016-04-01\tEast\tJones\tBinder\t0\t1\t4.99\t299.40\n2016-04-18\tCentral\tAndrews\tPencil\t0\t1\t1.99\t149.25\n2016-05-05\tCentral\tJardine\tPencil\t0\t1\t4.99\t449.10\n2016-05-22\tWest\tThompson\tPencil\t0\t1\t1.99\t63.68\n2016-06-08\tEast\tJones\tBinder\t0\t1\t8.99\t539.40\n2016-06-25\tCentral\tMorgan\tPencil\t0\t1\t4.99\t449.10\n2016-07-12\tEast\tHoward\tBinder\t0\t1\t1.99\t57.71\n2016-07-29\tEast\tParent\tBinder\t0\t1\t19.99\t1619.19\n2016-08-15\tEast\tJones\tPencil\t0\t1\t4.99\t174.65\n2016-09-01\tCentral\tSmith\tDesk\t0\t1\t125.00\t250.00\n2016-09-18\tEast\tJones\tPen Set\t0\t1\t15.99\t255.84\n2016-10-05\tCentral\tMorgan\tBinder\t0\t1\t8.99\t251.72\n2016-10-22\tEast\tJones\tPen\t0\t1\t8.99\t575.36\n2016-11-08\tEast\tParent\tPen\t0\t1\t19.99\t299.85\n2016-11-25\tCentral\tKivell\tPen Set\t0\t1\t4.99\t479.04\n2016-12-12\tCentral\tSmith\tPencil\t0\t1\t1.29\t86.43\n2016-12-29\tEast\tParent\tPen Set\t0\t1\t15.99\t1183.26\n2017-01-15\tCentral\tGill\tBinder\t0\t1\t8.99\t413.54\n2017-02-01\tCentral\tSmith\tBinder\t0\t1\t15.00\t1305.00\n2017-02-18\tEast\tJones\tBinder\t0\t1\t4.99\t19.96\n2017-03-07\tWest\tSorvino\tBinder\t0\t1\t19.99\t139.93\n2017-03-24\tCentral\tJardine\tPen Set\t0\t1\t4.99\t249.50\n2017-04-10\tCentral\tAndrews\tPencil\t0\t1\t1.99\t131.34\n2017-04-27\tEast\tHoward\tPen\t0\t1\t4.99\t479.04\n2017-05-14\tCentral\tGill\tPencil\t0\t1\t1.29\t68.37\n2017-05-31\tCentral\tGill\tBinder\t0\t1\t8.99\t719.20\n2017-06-17\tCentral\tKivell\tDesk\t0\t1\t125.00\t625.00\n2017-07-04\tEast\tJones\tPen Set\t0\t1\t4.99\t309.38\n2017-07-21\tCentral\tMorgan\tPen Set\t0\t1\t12.49\t686.95\n2017-08-07\tCentral\tKivell\tPen Set\t0\t1\t23.95\t1005.90\n2017-08-24\tWest\tSorvino\tDesk\t0\t1\t275.00\t825.00\n2017-09-10\tCentral\tGill\tPencil\t0\t1\t1.29\t9.03\n2017-09-27\tWest\tSorvino\tPen\t0\t1\t1.99\t151.24\n2017-10-14\tWest\tThompson\tBinder\t0\t1\t19.99\t1139.43\n2017-10-31\tCentral\tAndrews\tPencil\t0\t1\t1.29\t18.06\n2017-11-17\tCentral\tJardine\tBinder\t0\t1\t4.99\t54.89\n2017-12-04\tCentral\tJardine\tBinder\t0\t1\t19.99\t1879.06\n2017-12-21\tCentral\tAndrews\tBinder\t0\t1\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/pull2140.tsv",
    "content": "name\trows\tcols\tid\tclasses\ttitle\taria_label\tcaption\tsummary\theading\ntable_0\t0\t0\t\ttest_empty\t\t\t\t\t\nlinks\t0\t5\t\t\t\t\t\t\t\n"
  },
  {
    "path": "tests/golden/rank-sheetrank-sorted-cols.tsv",
    "content": "deptno\tjob\tmgr\tsheetrank_1asc2asc3desc\tsheetrank_1asc2desc\tsheetrank_default_sort\tempno\tename\thiredate\tsal\tcomm\n10\tCLERK\t7782\t1\t3\t1\t7934\tMILLER\tJan 23, 1982\t1300.00000\t\n10\tMANAGER\t7839\t2\t2\t2\t7782\tCLARK\tJun 19, 1981\t2450.00000\t\n10\tPRESIDENT\t\t3\t1\t3\t7839\tKING\tNov 17, 1981\t5000.00000\t\n20\tANALYST\t7566\t4\t7\t4\t7788\tSCOTT\tJul 13, 1987\t3000.00000\t\n20\tANALYST\t7566\t4\t7\t4\t7902\tFORD\tDec 03, 1981\t3000.00000\t\n20\tCLERK\t7902\t5\t6\t6\t7369\tSMITH\tFeb 17, 1981\t800.00000\t\n20\tCLERK\t7788\t6\t5\t5\t7876\tADAMS\tJul 13, 1987\t1100.00000\t\n20\tMANAGER\t7839\t7\t4\t7\t7566\tJONES\tApr 12, 1981\t2975.00000\t\n30\tCLERK\t7698\t8\t10\t8\t7900\tJAMES\tDec 03, 1981\t950.00000\t\n30\tMANAGER\t7839\t9\t9\t9\t7698\tBLAKE\tMay 11, 1981\t2850.00000\t\n30\tSALESMAN\t7698\t10\t8\t10\t7499\tALLEN\tFeb 20, 1981\t1600.00000\t300.00000\n30\tSALESMAN\t7698\t10\t8\t10\t7521\tWARD\tFeb 22, 1981\t1250.00000\t500.00000\n30\tSALESMAN\t7698\t10\t8\t10\t7654\tMARTIN\tSep 28, 1981\t1250.00000\t1400.00000\n30\tSALESMAN\t7698\t10\t8\t10\t7844\tTURNER\tSep 18, 1981\t1500.00000\t0.00000\n"
  },
  {
    "path": "tests/golden/record-aggr.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnits_pct\tUnit_Cost\tTotal\n2016-01-06\tEast\tJones\tPencil\t95\t4.48\t1.99\t189.05\n2016-01-23\tCentral\tKivell\tBinder\t50\t2.36\t19.99\t999.50\n2016-02-09\tCentral\tJardine\tPencil\t36\t1.70\t4.99\t179.64\n2016-02-26\tCentral\tGill\tPen\t27\t1.27\t19.99\t539.73\n2016-03-15\tWest\tSorvino\tPencil\t56\t2.64\t2.99\t167.44\n2016-04-01\tEast\tJones\tBinder\t60\t2.83\t4.99\t299.40\n2016-04-18\tCentral\tAndrews\tPencil\t75\t3.54\t1.99\t149.25\n2016-05-05\tCentral\tJardine\tPencil\t90\t4.24\t4.99\t449.10\n2016-05-22\tWest\tThompson\tPencil\t32\t1.51\t1.99\t63.68\n2016-06-08\tEast\tJones\tBinder\t60\t2.83\t8.99\t539.40\n2016-06-25\tCentral\tMorgan\tPencil\t90\t4.24\t4.99\t449.10\n2016-07-12\tEast\tHoward\tBinder\t29\t1.37\t1.99\t57.71\n2016-07-29\tEast\tParent\tBinder\t81\t3.82\t19.99\t1619.19\n2016-08-15\tEast\tJones\tPencil\t35\t1.65\t4.99\t174.65\n2016-09-01\tCentral\tSmith\tDesk\t2\t0.09\t125.00\t250.00\n2016-09-18\tEast\tJones\tPen Set\t16\t0.75\t15.99\t255.84\n2016-10-05\tCentral\tMorgan\tBinder\t28\t1.32\t8.99\t251.72\n2016-10-22\tEast\tJones\tPen\t64\t3.02\t8.99\t575.36\n2016-11-08\tEast\tParent\tPen\t15\t0.71\t19.99\t299.85\n2016-11-25\tCentral\tKivell\tPen Set\t96\t4.53\t4.99\t479.04\n2016-12-12\tCentral\tSmith\tPencil\t67\t3.16\t1.29\t86.43\n2016-12-29\tEast\tParent\tPen Set\t74\t3.49\t15.99\t1183.26\n2017-01-15\tCentral\tGill\tBinder\t46\t2.17\t8.99\t413.54\n2017-02-01\tCentral\tSmith\tBinder\t87\t4.10\t15.00\t1305.00\n2017-02-18\tEast\tJones\tBinder\t4\t0.19\t4.99\t19.96\n2017-03-07\tWest\tSorvino\tBinder\t7\t0.33\t19.99\t139.93\n2017-03-24\tCentral\tJardine\tPen Set\t50\t2.36\t4.99\t249.50\n2017-04-10\tCentral\tAndrews\tPencil\t66\t3.11\t1.99\t131.34\n2017-04-27\tEast\tHoward\tPen\t96\t4.53\t4.99\t479.04\n2017-05-14\tCentral\tGill\tPencil\t53\t2.50\t1.29\t68.37\n2017-05-31\tCentral\tGill\tBinder\t80\t3.77\t8.99\t719.20\n2017-06-17\tCentral\tKivell\tDesk\t5\t0.24\t125.00\t625.00\n2017-07-04\tEast\tJones\tPen Set\t62\t2.92\t4.99\t309.38\n2017-07-21\tCentral\tMorgan\tPen Set\t55\t2.59\t12.49\t686.95\n2017-08-07\tCentral\tKivell\tPen Set\t42\t1.98\t23.95\t1005.90\n2017-08-24\tWest\tSorvino\tDesk\t3\t0.14\t275.00\t825.00\n2017-09-10\tCentral\tGill\tPencil\t7\t0.33\t1.29\t9.03\n2017-09-27\tWest\tSorvino\tPen\t76\t3.58\t1.99\t151.24\n2017-10-14\tWest\tThompson\tBinder\t57\t2.69\t19.99\t1139.43\n2017-10-31\tCentral\tAndrews\tPencil\t14\t0.66\t1.29\t18.06\n2017-11-17\tCentral\tJardine\tBinder\t11\t0.52\t4.99\t54.89\n2017-12-04\tCentral\tJardine\tBinder\t94\t4.43\t19.99\t1879.06\n2017-12-21\tCentral\tAndrews\tBinder\t28\t1.32\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/remove-errors.tsv",
    "content": "Date\tCustomer\tSKU\tItem\tQuantity\tUnit\tPaid\n2018-07-03\tRobert Armstrong\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t4\t$12.95\t$51.8\n2018-07-03\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t1\t$4.22\t$4.22\n2018-07-05\tDouglas \"Dougie\" Powers\tFOOD121\tFood, Adult Cat 3.5 oz\t1\t$4.22\t$4.22\n2018-07-06\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t$1.29\t157¥\n2018-07-10\tDavid Attenborough\tNSCT201\tFood, Salamander\t30\t$.05\t$1.5\n2018-07-13\tWil Wheaton\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t1\t$39.95\t$39.95\n2018-07-13\tRobert Armstrong\tFOOD216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t4\t$12.95\t$51.8\n2018-07-17\tRobert Armstrong\tFOOD217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t4\t$12.95\t$51.8\n2018-07-17\tHelen Halestorm\tLAGO342\tRabbit (Oryctolagus cuniculus)\t2\t$32.94\t$65.88\n2018-07-18\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t6\t$1.29\t157¥\n2018-07-19\tRubeus Hagrid\tFOOD170\tFood, Dog - 5kg\t5\t$44.95\t$224.75\n2018-07-20\tJon Arbuckle\tFOOD167\tFood, Premium Wet Cat - 3.5 oz\t50\t$3.95\t$197.5\n2018-07-23\tRobert Armstrong\tFOOD215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t4\t$12.95\t$51.8\n2018-07-23\tDouglas \"Dougie\" Powers\tTOY235\tLaser Pointer\t1\t$16.12\t$16.12\n2018-07-24\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n2018-07-26\tDouglas \"Dougie\" Powers\tFOOD420\tFood, Shark - 10 kg\t1\t$15.70\t$15.7\n2018-07-27\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n2018-07-30\t桜 高橋 (Sakura Takahashi)\tRETURN\tFood, Senior Wet Cat - 3 oz\t1\t$1.29\t157¥\n2018-07-31\tRubeus Hagrid\tCAT060\tFood, Dragon - 50kg\t5\t$720.42\t$3602.1\n2018-08-01\tDavid Attenborough\tFOOD360\tFood, Rhinocerous - 50kg\t4\t$5.72\t$22.88\n2018-08-06\tRobert Armstrong\tFOOD212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t4\t$12.95\t$51.8\n2018-08-07\tJuan Johnson\tREPT082\tKingsnake, California (Lampropeltis getula)\t1\t$89.95\t$89.95\n2018-08-07\tJuan Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n2018-08-10\tRobert Armstrong\tFOOD211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t4\t$12.95\t$51.8\n2018-08-13\tMonica Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n2018-08-13\tMaría Fernández\tFOOD146\tForti Diet Prohealth Mouse/Rat 3lbs\t2\t$2.00\t$4.0\n2018-08-15\tMr. Praline\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t1\t$2300.00\t-$2300.0\n2018-08-15\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t2\t$4.22\t$8.44\n2018-08-16\tHelen Halestorm\tRETURN\tRabbit (Oryctolagus cuniculus)\t6\t$0\t$0.0\n2018-08-16\tKyle Kennedy\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$2,495.99\t$2495.99\n2018-08-16\tMichael Smith\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t1\t29.95\t$31.85\n2018-08-17\tRubeus Hagrid\tNSCT201\tFood, Spider\t5\t$.05\t$0.25\n2018-08-20\tKyle Kennedy\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$1,247.99\t-$1247.99\n2018-08-20\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tGoat, American Pygmy (Capra hircus)\t1\t₪499\t$160.51\n2018-08-20\tMonica Johnson\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t30\t$.05\t$1.5\n2018-08-20\tDavid Attenborough\tNSCT084\tFood, Pangolin\t30\t$.17\t$5.10\n2018-08-21\tRobert Armstrong\tFOOD214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t4\t$12.95\t$51.8\n2018-08-22\tDavid Attenborough\tBIRD160\tFood, Quoll\t1\t29.95\t$29.95\n2018-08-22\tJon Arbuckle\tFOOD170\tFood, Adult Dog - 5kg\t1\t$44.95\t$44.95\n2018-08-22\tמרוסיה ניסנהולץ\tSFTY052\tFire Extinguisher, kitchen-rated\t1\t$61.70\t$61.70\n2018-08-24\tRobert Armstrong\tFOOD218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t4\t$12.95\t$51.8\n2018-08-27\tMonica Johnson\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t1\t$1.99\t$1.99\n2018-08-29\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t4\t$12.95\t$51.8\n2018-08-31\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t144\t$12.95\t$1864.8\n2018-08-31\tJuan Johnson\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t1\t$99.95\t$99.95\n"
  },
  {
    "path": "tests/golden/rows-select-expr.tsv",
    "content": "Month\tDay\tResource\tLocation\tValue\tUnit\tSource\nSep\t29\tElectricity\tPuerto Rico\t5\tpercent\tAEE\nSep\t29\tTelecomunications\tPuerto Rico\t30.5\tpercent\tJRTC\nOct\t1\tElectricity\tPuerto Rico\t5\tpercent\tAEE\nOct\t2\tTelecomunications\tPuerto Rico\t40\tpercent\tJRTC\nOct\t2\tWater\tPuerto Rico\t47\tpercent\tAAA\nOct\t3\tElectricity\tPuerto Rico\t6.89\tpercent\tAEE\nOct\t3\tTelecomunications\tPuerto Rico\t40\tpercent\tJRTC\nOct\t3\tWater\tPuerto Rico\t45\tpercent\tAAA\nOct\t4\tElectricity\tPuerto Rico\t8.6\tpercent\tAEE\nOct\t4\tTelecomunications\tPuerto Rico\t43.32\tpercent\tJRTC\nOct\t4\tWater\tPuerto Rico\t48.2\tpercent\tAAA\nOct\t5\tElectricity\tPuerto Rico\t9.2\tpercent\tAEE\nOct\t5\tTelecomunications\tPuerto Rico\t45\tpercent\tJRTC\nOct\t5\tWater\tPuerto Rico\t54.2\tpercent\tAAA\nOct\t6\tElectricity\tPuerto Rico\t10.7\tpercent\tAEE\nOct\t6\tTelecomunications\tPuerto Rico\t42\tpercent\tJRTC\nOct\t6\tWater\tPuerto Rico\t55.5\tpercent\tAAA\nOct\t7\tElectricity\tPuerto Rico\t11.7\tpercent\tAEE\nOct\t7\tTelecomunications\tPuerto Rico\t44\tpercent\tJRTC\nOct\t7\tWater\tPuerto Rico\t56.24\tpercent\tAAA\nOct\t8\tElectricity\tPuerto Rico\t11.7\tpercent\tAEE\nOct\t8\tTelecomunications\tPuerto Rico\t52\tpercent\tJRTC\nOct\t8\tWater\tPuerto Rico\t56.87\tpercent\tAAA\nOct\t9\tElectricity\tPuerto Rico\t15\tpercent\tAEE\nOct\t9\tTelecomunications\tPuerto Rico\t51\tpercent\tJRTC\nOct\t9\tWater\tPuerto Rico\t59.5\tpercent\tAAA\nOct\t10\tElectricity\tPuerto Rico\t16\tpercent\tAEE\nOct\t10\tTelecomunications\tPuerto Rico\t53\tpercent\tJRTC\nOct\t10\tWater\tPuerto Rico\t63.75\tpercent\tAAA\nOct\t11\tElectricity\tPuerto Rico\t10.6\tpercent\tAEE\nOct\t11\tTelecomunications\tPuerto Rico\t53.6\tpercent\tJRTC\nOct\t11\tWater\tPuerto Rico\t64.22\tpercent\tAAA\nOct\t12\tElectricity\tPuerto Rico\t17\tpercent\tAEE\nOct\t12\tTelecomunications\tPuerto Rico\t55\tpercent\tJRTC\nOct\t12\tWater\tPuerto Rico\t64\tpercent\tAAA\nOct\t13\tElectricity\tPuerto Rico\t9\tpercent\tAEE\nOct\t13\tTelecomunications\tPuerto Rico\t56\tpercent\tJRTC\nOct\t13\tWater\tPuerto Rico\t63.2\tpercent\tAAA\nOct\t14\tElectricity\tPuerto Rico\t14.6\tpercent\tAEE\nOct\t14\tTelecomunications\tPuerto Rico\t58\tpercent\tJRTC\nOct\t14\tWater\tPuerto Rico\t64\tpercent\tAAA\nOct\t15\tElectricity\tPuerto Rico\t15\tpercent\tAEE\nOct\t15\tTelecomunications\tPuerto Rico\t59\tpercent\tJRTC\nOct\t15\tWater\tPuerto Rico\t69\tpercent\tAAA\nOct\t16\tElectricity\tPuerto Rico\t13.7\tpercent\tAEE\nOct\t16\tTelecomunications\tPuerto Rico\t59\tpercent\tJRTC\nOct\t16\tWater\tPuerto Rico\t72\tpercent\tAAA\nOct\t17\tElectricity\tPuerto Rico\t17.7\tpercent\tAEE\nOct\t17\tTelecomunications\tPuerto Rico\t59\tpercent\tJRTC\nOct\t17\tWater\tPuerto Rico\t65.43\tpercent\tAAA\nOct\t18\tElectricity\tPuerto Rico\t19.1\tpercent\tAEE\nOct\t18\tTelecomunications\tPuerto Rico\t61\tpercent\tJRTC\nOct\t18\tWater\tPuerto Rico\t69.19\tpercent\tAAA\nOct\t19\tElectricity\tPuerto Rico\t21.6\tpercent\tAEE\nOct\t19\tTelecomunications\tPuerto Rico\t61\tpercent\tJRTC\nOct\t19\tWater\tPuerto Rico\t71.58\tpercent\tAAA\nOct\t20\tElectricity\tPuerto Rico\t12.33\tpercent\tAEE\nOct\t20\tTelecomunications\tPuerto Rico\t62\tpercent\tJRTC\nOct\t20\tWater\tPuerto Rico\t69.51\tpercent\tAAA\nOct\t21\tElectricity\tPuerto Rico\t16.61\tpercent\tAEE\nOct\t21\tTelecomunications\tPuerto Rico\t63\tpercent\tJRTC\nOct\t21\tWater\tPuerto Rico\t71.74\tpercent\tAAA\nOct\t22\tElectricity\tPuerto Rico\t20.22\tpercent\tAEE\nOct\t22\tTelecomunications\tPuerto Rico\t63\tpercent\tJRTC\nOct\t22\tWater\tPuerto Rico\t72.77\tpercent\tAAA\nOct\t23\tElectricity\tPuerto Rico\t23\tpercent\tAEE\nOct\t23\tTelecomunications\tPuerto Rico\t63\tpercent\tJRTC\nOct\t23\tWater\tPuerto Rico\t73.65\tpercent\tAAA\nOct\t24\tElectricity\tPuerto Rico\t24.4\tpercent\tAEE\nOct\t24\tTelecomunications\tPuerto Rico\t65\tpercent\tJRTC\nOct\t24\tWater\tPuerto Rico\t74.37\tpercent\tAAA\nOct\t25\tElectricity\tPuerto Rico\t25\tpercent\tAEE\nOct\t25\tTelecomunications\tPuerto Rico\t65\tpercent\tJRTC\nOct\t25\tWater\tPuerto Rico\t75\tpercent\tAAA\nOct\t26\tElectricity\tPuerto Rico\t26.2\tpercent\tAEE\nOct\t26\tTelecomunications\tPuerto Rico\t66\tpercent\tJRTC\nOct\t26\tWater\tPuerto Rico\t78\tpercent\tAAA\nOct\t27\tElectricity\tPuerto Rico\t27.6\tpercent\tAEE\nOct\t27\tTelecomunications\tPuerto Rico\t67\tpercent\tJRTC\nOct\t27\tWater\tPuerto Rico\t77\tpercent\tAAA\nOct\t28\tElectricity\tPuerto Rico\t29.7\tpercent\tAEE\nOct\t28\tTelecomunications\tPuerto Rico\t69\tpercent\tJRTC\nOct\t28\tWater\tPuerto Rico\t80\tpercent\tAAA\nOct\t29\tElectricity\tPuerto Rico\t29.7\tpercent\tAEE\nOct\t29\tTelecomunications\tPuerto Rico\t69\tpercent\tJRTC\nOct\t29\tWater\tPuerto Rico\t79.52\tpercent\tAAA\nOct\t30\tElectricity\tPuerto Rico\t30.5\tpercent\tAEE\nOct\t30\tTelecomunications\tPuerto Rico\t69\tpercent\tJRTC\nOct\t30\tWater\tPuerto Rico\t81\tpercent\tAAA\nOct\t31\tElectricity\tPuerto Rico\t33.4\tpercent\tAEE\nOct\t31\tTelecomunications\tPuerto Rico\t70\tpercent\tJRTC\nOct\t31\tWater\tPuerto Rico\t82\tpercent\tAAA\nNov\t1\tElectricity\tPuerto Rico\t37.9\tpercent\tAEE\nNov\t1\tTelecomunications\tPuerto Rico\t70\tpercent\tJRTC\nNov\t1\tWater\tPuerto Rico\t82\tpercent\tAAA\nNov\t2\tElectricity\tPuerto Rico\t36.9\tpercent\tAEE\nNov\t2\tTelecomunications\tPuerto Rico\t70\tpercent\tJRTC\nNov\t2\tWater\tPuerto Rico\t83.11\tpercent\tAAA\nNov\t3\tElectricity\tPuerto Rico\t37.9\tpercent\tAEE\nNov\t3\tTelecomunications\tPuerto Rico\t71\tpercent\tJRTC\nNov\t3\tWater\tPuerto Rico\t80.38\tpercent\tAAA\nNov\t4\tElectricity\tPuerto Rico\t39.2\tpercent\tAEE\nNov\t4\tTelecomunications\tPuerto Rico\t71\tpercent\tJRTC\nNov\t4\tWater\tPuerto Rico\t80.56\tpercent\tAAA\nNov\t5\tElectricity\tPuerto Rico\t41.03\tpercent\tAEE\nNov\t5\tTelecomunications\tPuerto Rico\t71\tpercent\tJRTC\nNov\t5\tWater\tPuerto Rico\t83.09\tpercent\tAAA\nNov\t6\tElectricity\tPuerto Rico\t42.2\tpercent\tAEE\nNov\t6\tTelecomunications\tPuerto Rico\t71.5\tpercent\tJRTC\nNov\t6\tWater\tPuerto Rico\t79.46\tpercent\tAAA\nNov\t7\tElectricity\tPuerto Rico\t42.4\tpercent\tAEE\nNov\t7\tTelecomunications\tPuerto Rico\t72\tpercent\tJRTC\nNov\t7\tWater\tPuerto Rico\t83.3\tpercent\tAAA\nNov\t8\tElectricity\tPuerto Rico\t42.4\tpercent\tAEE\nNov\t8\tTelecomunications\tPuerto Rico\t72\tpercent\tJRTC\nNov\t8\tWater\tPuerto Rico\t85.38\tpercent\tAAA\nNov\t9\tElectricity\tPuerto Rico\t43.2\tpercent\tAEE\nNov\t9\tTelecomunications\tPuerto Rico\t73\tpercent\tJRTC\nNov\t9\tWater\tPuerto Rico\t87.81\tpercent\tAAA\nNov\t10\tElectricity\tPuerto Rico\t31.2\tpercent\tAEE\nNov\t10\tTelecomunications\tPuerto Rico\t72\tpercent\tJRTC\nNov\t10\tWater\tPuerto Rico\t78.09\tpercent\tAAA\nNov\t11\tElectricity\tPuerto Rico\t44.5\tpercent\tAEE\nNov\t11\tTelecomunications\tPuerto Rico\t73\tpercent\tJRTC\nNov\t11\tWater\tPuerto Rico\t87.82\tpercent\tAAA\nNov\t12\tElectricity\tPuerto Rico\t47.8\tpercent\tAEE\nNov\t12\tTelecomunications\tPuerto Rico\t73\tpercent\tJRTC\nNov\t12\tWater\tPuerto Rico\t89.61\tpercent\tAAA\n"
  },
  {
    "path": "tests/golden/save-benchmarks.csv",
    "content": "Date,Customer,SKU,Item,Quantity,Unit,Paid\r\n2018-07-03,Robert Armstrong,FOOD213,BFF Oh My Gravy! Beef & Salmon 2.8oz,4,12.95,$51.8\r\n2018-07-03,Kyle Kennedy,FOOD121,\"Food, Adult Cat - 3.5 oz\",1,4.22,$4.22\r\n2018-07-05,\"Douglas \"\"Dougie\"\" Powers\",FOOD121,\"Food, Adult Cat 3.5 oz\",1,4.22,$4.22\r\n2018-07-06,桜 高橋 (Sakura Takahashi),FOOD122,\"Food, Senior Wet Cat - 3 oz\",12,1.29,157¥\r\n2018-07-10,David Attenborough,NSCT201,\"Food, Salamander\",30,0.05,$1.5\r\n2018-07-10,Susan Ashworth,CAT060,\"Cat, Korat (Felis catus)\",1,720.42,$720.42\r\n2018-07-10,Susan Ashworth,FOOD130,\"Food, Kitten 3kg\",1,14.94,$14.94\r\n2018-07-13,Wil Wheaton,NSCT523,\"Monster, Rust (Monstrus gygaxus)\",1,39.95,$39.95\r\n2018-07-13,Robert Armstrong,FOOD216,BFF Oh My Gravy! Chicken & Shrimp 2.8oz,4,12.95,$51.8\r\n2018-07-17,Robert Armstrong,FOOD217,BFF Oh My Gravy! Duck & Tuna 2.8oz,4,12.95,$51.8\r\n2018-07-17,Helen Halestorm,LAGO342,Rabbit (Oryctolagus cuniculus),2,32.94,$65.88\r\n2018-07-18,桜 高橋 (Sakura Takahashi),FOOD122,\"Food, Senior Wet Cat - 3 oz\",6,1.29,157¥\r\n2018-07-19,Rubeus Hagrid,FOOD170,\"Food, Dog - 5kg\",5,44.95,$224.75\r\n2018-07-20,Jon Arbuckle,FOOD167,\"Food, Premium Wet Cat - 3.5 oz\",50,3.95,$197.5\r\n2018-07-23,Robert Armstrong,FOOD215,BFF Oh My Gravy! Lamb & Tuna 2.8oz,4,12.95,$51.8\r\n2018-07-23,\"Douglas \"\"Dougie\"\" Powers\",TOY235,Laser Pointer,1,16.12,$16.12\r\n2018-07-24,桜 高橋 (Sakura Takahashi),FOOD122,\"Food, Senior Wet Cat - 3 oz\",3,1.29,157¥\r\n2018-07-26,\"Douglas \"\"Dougie\"\" Powers\",FOOD420,\"Food, Shark - 10 kg\",1,15.70,$15.7\r\n2018-07-27,桜 高橋 (Sakura Takahashi),FOOD122,\"Food, Senior Wet Cat - 3 oz\",3,1.29,157¥\r\n2018-07-30,桜 高橋 (Sakura Takahashi),RETURN,\"Food, Senior Wet Cat - 3 oz\",1,1.29,157¥\r\n2018-07-31,Rubeus Hagrid,CAT060,\"Food, Dragon - 50kg\",5,720.42,$3602.1\r\n2018-08-01,David Attenborough,FOOD360,\"Food, Rhinocerous - 50kg\",4,5.72,$22.88\r\n2018-08-02,Susan Ashworth,CAT110,\"Cat, Maine Coon (Felix catus)\",1,1309.68,$1309.68\r\n2018-08-02,Susan Ashworth,FOOD130,\"Food, Kitten 3kg\",3,14.94,$44.82\r\n2018-08-06,Robert Armstrong,FOOD212,BFF Oh My Gravy! Beef & Chicken 2.8oz,4,12.95,$51.8\r\n2018-08-07,Juan Johnson,REPT082,\"Kingsnake, California (Lampropeltis getula)\",1,89.95,$89.95\r\n2018-08-07,Juan Johnson,RDNT443,\"Mouse, Pinky (Mus musculus)\",1,1.49,$1.49\r\n2018-08-10,Robert Armstrong,FOOD211,BFF Oh My Gravy! Chicken & Turkey 2.8oz,4,12.95,$51.8\r\n2018-08-13,Monica Johnson,RDNT443,\"Mouse, Pinky (Mus musculus)\",1,1.49,$1.49\r\n2018-08-13,María Fernández,FOOD146,Forti Diet Prohealth Mouse/Rat 3lbs,2,2.00,$4.0\r\n2018-08-15,Mr. Praline,RETURN,\"Parrot, Norwegian Blue (Mopsitta tanta)\",1,2300.00,-$2300.0\r\n2018-08-15,Kyle Kennedy,FOOD121,\"Food, Adult Cat - 3.5 oz\",2,4.22,$8.44\r\n2018-08-16,Helen Halestorm,RETURN,Rabbit (Oryctolagus cuniculus),6,0.00,$0.0\r\n2018-08-16,Kyle Kennedy,DOG010,\"Dog, Golden Retriever (Canis lupus familiaris)\",1,2495.99,$2495.99\r\n2018-08-16,Michael Smith,BIRD160,\"Parakeet, Blue (Melopsittacus undulatus)\",1,29.95,$31.85\r\n2018-08-17,Rubeus Hagrid,NSCT201,\"Food, Spider\",5,0.05,$0.25\r\n2018-08-20,Kyle Kennedy,RETURN,\"Dog, Golden Retriever (Canis lupus familiaris)\",1,1247.99,-$1247.99\r\n2018-08-20,מרוסיה ניסנהולץ אבולעפיה,GOAT224,\"Goat, American Pygmy (Capra hircus)\",1,499.00,$160.51\r\n2018-08-20,Monica Johnson,NSCT201,\"Crickets, Adult Live (Gryllus assimilis)\",30,0.05,$1.5\r\n2018-08-20,David Attenborough,NSCT084,\"Food, Pangolin\",30,0.17,$5.10\r\n2018-08-21,Robert Armstrong,FOOD214,BFF Oh My Gravy! Duck & Salmon 2.8oz,4,12.95,$51.8\r\n2018-08-22,David Attenborough,BIRD160,\"Food, Quoll\",1,29.95,$29.95\r\n2018-08-22,Jon Arbuckle,FOOD170,\"Food, Adult Dog - 5kg\",1,44.95,$44.95\r\n2018-08-22,מרוסיה ניסנהולץ,SFTY052,\"Fire Extinguisher, kitchen-rated\",1,61.70,$61.70\r\n2018-08-24,Robert Armstrong,FOOD218,BFF Oh My Gravy! Chicken & Salmon 2.8oz,4,12.95,$51.8\r\n2018-08-27,Monica Johnson,NSCT443,\"Mealworms, Large (Tenebrio molitor) 100ct\",1,1.99,$1.99\r\n2018-08-28,Susan Ashworth,CAT020,\"Cat, Scottish Fold (Felis catus)\",1,1964.53,$1964.53\r\n2018-08-28,Susan Ashworth,FOOD130,\"Food, Kitten 3kg\",2,14.94,$29.88\r\n2018-08-29,Robert Armstrong,FOOD219,BFF Oh My Gravy! Chicken & Pumpkin 2.8oz,4,12.95,$51.8\r\n2018-08-31,Robert Armstrong,FOOD219,BFF Oh My Gravy! Chicken & Pumpkin 2.8oz,144,12.95,$1864.8\r\n2018-08-31,Juan Johnson,REPT217,\"Lizard, Spinytail (Uromastyx ornatus)\",1,99.95,$99.95\r\n"
  },
  {
    "path": "tests/golden/save-benchmarks.html",
    "content": "<h2>benchmark</h2><table id=\"benchmark\">\n<tr><th>Date</th><th>Customer</th><th>SKU</th><th>Item</th><th>Quantity</th><th>Unit</th><th>Paid</th></tr>\n<tr><td>2018-07-03</td><td>Robert Armstrong</td><td>FOOD213</td><td>BFF Oh My Gravy! Beef &amp; Salmon 2.8oz</td><td>4</td><td>12.95</td><td>$51.8</td></tr>\n<tr><td>2018-07-03</td><td>Kyle Kennedy</td><td>FOOD121</td><td>Food, Adult Cat - 3.5 oz</td><td>1</td><td>4.22</td><td>$4.22</td></tr>\n<tr><td>2018-07-05</td><td>Douglas &quot;Dougie&quot; Powers</td><td>FOOD121</td><td>Food, Adult Cat 3.5 oz</td><td>1</td><td>4.22</td><td>$4.22</td></tr>\n<tr><td>2018-07-06</td><td>&#26716; &#39640;&#27211; (Sakura Takahashi)</td><td>FOOD122</td><td>Food, Senior Wet Cat - 3 oz</td><td>12</td><td>1.29</td><td>157&#165;</td></tr>\n<tr><td>2018-07-10</td><td>David Attenborough</td><td>NSCT201</td><td>Food, Salamander</td><td>30</td><td>0.05</td><td>$1.5</td></tr>\n<tr><td>2018-07-10</td><td>Susan Ashworth</td><td>CAT060</td><td>Cat, Korat (Felis catus)</td><td>1</td><td>720.42</td><td>$720.42</td></tr>\n<tr><td>2018-07-10</td><td>Susan Ashworth</td><td>FOOD130</td><td>Food, Kitten 3kg</td><td>1</td><td>14.94</td><td>$14.94</td></tr>\n<tr><td>2018-07-13</td><td>Wil Wheaton</td><td>NSCT523</td><td>Monster, Rust (Monstrus gygaxus)</td><td>1</td><td>39.95</td><td>$39.95</td></tr>\n<tr><td>2018-07-13</td><td>Robert Armstrong</td><td>FOOD216</td><td>BFF Oh My Gravy! Chicken &amp; Shrimp 2.8oz</td><td>4</td><td>12.95</td><td>$51.8</td></tr>\n<tr><td>2018-07-17</td><td>Robert Armstrong</td><td>FOOD217</td><td>BFF Oh My Gravy! Duck &amp; Tuna 2.8oz</td><td>4</td><td>12.95</td><td>$51.8</td></tr>\n<tr><td>2018-07-17</td><td>Helen Halestorm</td><td>LAGO342</td><td>Rabbit (Oryctolagus cuniculus)</td><td>2</td><td>32.94</td><td>$65.88</td></tr>\n<tr><td>2018-07-18</td><td>&#26716; &#39640;&#27211; (Sakura Takahashi)</td><td>FOOD122</td><td>Food, Senior Wet Cat - 3 oz</td><td>6</td><td>1.29</td><td>157&#165;</td></tr>\n<tr><td>2018-07-19</td><td>Rubeus Hagrid</td><td>FOOD170</td><td>Food, Dog - 5kg</td><td>5</td><td>44.95</td><td>$224.75</td></tr>\n<tr><td>2018-07-20</td><td>Jon Arbuckle</td><td>FOOD167</td><td>Food, Premium Wet Cat - 3.5 oz</td><td>50</td><td>3.95</td><td>$197.5</td></tr>\n<tr><td>2018-07-23</td><td>Robert Armstrong</td><td>FOOD215</td><td>BFF Oh My Gravy! Lamb &amp; Tuna 2.8oz</td><td>4</td><td>12.95</td><td>$51.8</td></tr>\n<tr><td>2018-07-23</td><td>Douglas &quot;Dougie&quot; Powers</td><td>TOY235</td><td>Laser Pointer</td><td>1</td><td>16.12</td><td>$16.12</td></tr>\n<tr><td>2018-07-24</td><td>&#26716; &#39640;&#27211; (Sakura Takahashi)</td><td>FOOD122</td><td>Food, Senior Wet Cat - 3 oz</td><td>3</td><td>1.29</td><td>157&#165;</td></tr>\n<tr><td>2018-07-26</td><td>Douglas &quot;Dougie&quot; Powers</td><td>FOOD420</td><td>Food, Shark - 10 kg</td><td>1</td><td>15.70</td><td>$15.7</td></tr>\n<tr><td>2018-07-27</td><td>&#26716; &#39640;&#27211; (Sakura Takahashi)</td><td>FOOD122</td><td>Food, Senior Wet Cat - 3 oz</td><td>3</td><td>1.29</td><td>157&#165;</td></tr>\n<tr><td>2018-07-30</td><td>&#26716; &#39640;&#27211; (Sakura Takahashi)</td><td>RETURN</td><td>Food, Senior Wet Cat - 3 oz</td><td>1</td><td>1.29</td><td>157&#165;</td></tr>\n<tr><td>2018-07-31</td><td>Rubeus Hagrid</td><td>CAT060</td><td>Food, Dragon - 50kg</td><td>5</td><td>720.42</td><td>$3602.1</td></tr>\n<tr><td>2018-08-01</td><td>David Attenborough</td><td>FOOD360</td><td>Food, Rhinocerous - 50kg</td><td>4</td><td>5.72</td><td>$22.88</td></tr>\n<tr><td>2018-08-02</td><td>Susan Ashworth</td><td>CAT110</td><td>Cat, Maine Coon (Felix catus)</td><td>1</td><td>1309.68</td><td>$1309.68</td></tr>\n<tr><td>2018-08-02</td><td>Susan Ashworth</td><td>FOOD130</td><td>Food, Kitten 3kg</td><td>3</td><td>14.94</td><td>$44.82</td></tr>\n<tr><td>2018-08-06</td><td>Robert Armstrong</td><td>FOOD212</td><td>BFF Oh My Gravy! Beef &amp; Chicken 2.8oz</td><td>4</td><td>12.95</td><td>$51.8</td></tr>\n<tr><td>2018-08-07</td><td>Juan Johnson</td><td>REPT082</td><td>Kingsnake, California (Lampropeltis getula)</td><td>1</td><td>89.95</td><td>$89.95</td></tr>\n<tr><td>2018-08-07</td><td>Juan Johnson</td><td>RDNT443</td><td>Mouse, Pinky (Mus musculus)</td><td>1</td><td>1.49</td><td>$1.49</td></tr>\n<tr><td>2018-08-10</td><td>Robert Armstrong</td><td>FOOD211</td><td>BFF Oh My Gravy! Chicken &amp; Turkey 2.8oz</td><td>4</td><td>12.95</td><td>$51.8</td></tr>\n<tr><td>2018-08-13</td><td>Monica Johnson</td><td>RDNT443</td><td>Mouse, Pinky (Mus musculus)</td><td>1</td><td>1.49</td><td>$1.49</td></tr>\n<tr><td>2018-08-13</td><td>Mar&#237;a Fern&#225;ndez</td><td>FOOD146</td><td>Forti Diet Prohealth Mouse/Rat 3lbs</td><td>2</td><td>2.00</td><td>$4.0</td></tr>\n<tr><td>2018-08-15</td><td>Mr. Praline</td><td>RETURN</td><td>Parrot, Norwegian Blue (Mopsitta tanta)</td><td>1</td><td>2300.00</td><td>-$2300.0</td></tr>\n<tr><td>2018-08-15</td><td>Kyle Kennedy</td><td>FOOD121</td><td>Food, Adult Cat - 3.5 oz</td><td>2</td><td>4.22</td><td>$8.44</td></tr>\n<tr><td>2018-08-16</td><td>Helen Halestorm</td><td>RETURN</td><td>Rabbit (Oryctolagus cuniculus)</td><td>6</td><td>0.00</td><td>$0.0</td></tr>\n<tr><td>2018-08-16</td><td>Kyle Kennedy</td><td>DOG010</td><td>Dog, Golden Retriever (Canis lupus familiaris)</td><td>1</td><td>2495.99</td><td>$2495.99</td></tr>\n<tr><td>2018-08-16</td><td>Michael Smith</td><td>BIRD160</td><td>Parakeet, Blue (Melopsittacus undulatus)</td><td>1</td><td>29.95</td><td>$31.85</td></tr>\n<tr><td>2018-08-17</td><td>Rubeus Hagrid</td><td>NSCT201</td><td>Food, Spider</td><td>5</td><td>0.05</td><td>$0.25</td></tr>\n<tr><td>2018-08-20</td><td>Kyle Kennedy</td><td>RETURN</td><td>Dog, Golden Retriever (Canis lupus familiaris)</td><td>1</td><td>1247.99</td><td>-$1247.99</td></tr>\n<tr><td>2018-08-20</td><td>&#1502;&#1512;&#1493;&#1505;&#1497;&#1492; &#1504;&#1497;&#1505;&#1504;&#1492;&#1493;&#1500;&#1509; &#1488;&#1489;&#1493;&#1500;&#1506;&#1508;&#1497;&#1492;</td><td>GOAT224</td><td>Goat, American Pygmy (Capra hircus)</td><td>1</td><td>499.00</td><td>$160.51</td></tr>\n<tr><td>2018-08-20</td><td>Monica Johnson</td><td>NSCT201</td><td>Crickets, Adult Live (Gryllus assimilis)</td><td>30</td><td>0.05</td><td>$1.5</td></tr>\n<tr><td>2018-08-20</td><td>David Attenborough</td><td>NSCT084</td><td>Food, Pangolin</td><td>30</td><td>0.17</td><td>$5.10</td></tr>\n<tr><td>2018-08-21</td><td>Robert Armstrong</td><td>FOOD214</td><td>BFF Oh My Gravy! Duck &amp; Salmon 2.8oz</td><td>4</td><td>12.95</td><td>$51.8</td></tr>\n<tr><td>2018-08-22</td><td>David Attenborough</td><td>BIRD160</td><td>Food, Quoll</td><td>1</td><td>29.95</td><td>$29.95</td></tr>\n<tr><td>2018-08-22</td><td>Jon Arbuckle</td><td>FOOD170</td><td>Food, Adult Dog - 5kg</td><td>1</td><td>44.95</td><td>$44.95</td></tr>\n<tr><td>2018-08-22</td><td>&#1502;&#1512;&#1493;&#1505;&#1497;&#1492; &#1504;&#1497;&#1505;&#1504;&#1492;&#1493;&#1500;&#1509;</td><td>SFTY052</td><td>Fire Extinguisher, kitchen-rated</td><td>1</td><td>61.70</td><td>$61.70</td></tr>\n<tr><td>2018-08-24</td><td>Robert Armstrong</td><td>FOOD218</td><td>BFF Oh My Gravy! Chicken &amp; Salmon 2.8oz</td><td>4</td><td>12.95</td><td>$51.8</td></tr>\n<tr><td>2018-08-27</td><td>Monica Johnson</td><td>NSCT443</td><td>Mealworms, Large (Tenebrio molitor) 100ct</td><td>1</td><td>1.99</td><td>$1.99</td></tr>\n<tr><td>2018-08-28</td><td>Susan Ashworth</td><td>CAT020</td><td>Cat, Scottish Fold (Felis catus)</td><td>1</td><td>1964.53</td><td>$1964.53</td></tr>\n<tr><td>2018-08-28</td><td>Susan Ashworth</td><td>FOOD130</td><td>Food, Kitten 3kg</td><td>2</td><td>14.94</td><td>$29.88</td></tr>\n<tr><td>2018-08-29</td><td>Robert Armstrong</td><td>FOOD219</td><td>BFF Oh My Gravy! Chicken &amp; Pumpkin 2.8oz</td><td>4</td><td>12.95</td><td>$51.8</td></tr>\n<tr><td>2018-08-31</td><td>Robert Armstrong</td><td>FOOD219</td><td>BFF Oh My Gravy! Chicken &amp; Pumpkin 2.8oz</td><td>144</td><td>12.95</td><td>$1864.8</td></tr>\n<tr><td>2018-08-31</td><td>Juan Johnson</td><td>REPT217</td><td>Lizard, Spinytail (Uromastyx ornatus)</td><td>1</td><td>99.95</td><td>$99.95</td></tr>\n</table>"
  },
  {
    "path": "tests/golden/save-benchmarks.json",
    "content": "[\n{\"Date\": \"2018-07-03\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD213\", \"Item\": \"BFF Oh My Gravy! Beef & Salmon 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"},\n{\"Date\": \"2018-07-03\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat - 3.5 oz\", \"Quantity\": 1, \"Unit\": 4.22, \"Paid\": \"$4.22\"},\n{\"Date\": \"2018-07-05\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat 3.5 oz\", \"Quantity\": 1, \"Unit\": 4.22, \"Paid\": \"$4.22\"},\n{\"Date\": \"2018-07-06\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": 12, \"Unit\": 1.29, \"Paid\": \"157\\u00a5\"},\n{\"Date\": \"2018-07-10\", \"Customer\": \"David Attenborough\", \"SKU\": \"NSCT201\", \"Item\": \"Food, Salamander\", \"Quantity\": 30, \"Unit\": 0.05, \"Paid\": \"$1.5\"},\n{\"Date\": \"2018-07-10\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT060\", \"Item\": \"Cat, Korat (Felis catus)\", \"Quantity\": 1, \"Unit\": 720.42, \"Paid\": \"$720.42\"},\n{\"Date\": \"2018-07-10\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": 1, \"Unit\": 14.94, \"Paid\": \"$14.94\"},\n{\"Date\": \"2018-07-13\", \"Customer\": \"Wil Wheaton\", \"SKU\": \"NSCT523\", \"Item\": \"Monster, Rust (Monstrus gygaxus)\", \"Quantity\": 1, \"Unit\": 39.95, \"Paid\": \"$39.95\"},\n{\"Date\": \"2018-07-13\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD216\", \"Item\": \"BFF Oh My Gravy! Chicken & Shrimp 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"},\n{\"Date\": \"2018-07-17\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD217\", \"Item\": \"BFF Oh My Gravy! Duck & Tuna 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"},\n{\"Date\": \"2018-07-17\", \"Customer\": \"Helen Halestorm\", \"SKU\": \"LAGO342\", \"Item\": \"Rabbit (Oryctolagus cuniculus)\", \"Quantity\": 2, \"Unit\": 32.94, \"Paid\": \"$65.88\"},\n{\"Date\": \"2018-07-18\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": 6, \"Unit\": 1.29, \"Paid\": \"157\\u00a5\"},\n{\"Date\": \"2018-07-19\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"FOOD170\", \"Item\": \"Food, Dog - 5kg\", \"Quantity\": 5, \"Unit\": 44.95, \"Paid\": \"$224.75\"},\n{\"Date\": \"2018-07-20\", \"Customer\": \"Jon Arbuckle\", \"SKU\": \"FOOD167\", \"Item\": \"Food, Premium Wet Cat - 3.5 oz\", \"Quantity\": 50, \"Unit\": 3.95, \"Paid\": \"$197.5\"},\n{\"Date\": \"2018-07-23\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD215\", \"Item\": \"BFF Oh My Gravy! Lamb & Tuna 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"},\n{\"Date\": \"2018-07-23\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"TOY235\", \"Item\": \"Laser Pointer\", \"Quantity\": 1, \"Unit\": 16.12, \"Paid\": \"$16.12\"},\n{\"Date\": \"2018-07-24\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": 3, \"Unit\": 1.29, \"Paid\": \"157\\u00a5\"},\n{\"Date\": \"2018-07-26\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"FOOD420\", \"Item\": \"Food, Shark - 10 kg\", \"Quantity\": 1, \"Unit\": 15.7, \"Paid\": \"$15.7\"},\n{\"Date\": \"2018-07-27\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": 3, \"Unit\": 1.29, \"Paid\": \"157\\u00a5\"},\n{\"Date\": \"2018-07-30\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"RETURN\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": 1, \"Unit\": 1.29, \"Paid\": \"157\\u00a5\"},\n{\"Date\": \"2018-07-31\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"CAT060\", \"Item\": \"Food, Dragon - 50kg\", \"Quantity\": 5, \"Unit\": 720.42, \"Paid\": \"$3602.1\"},\n{\"Date\": \"2018-08-01\", \"Customer\": \"David Attenborough\", \"SKU\": \"FOOD360\", \"Item\": \"Food, Rhinocerous - 50kg\", \"Quantity\": 4, \"Unit\": 5.72, \"Paid\": \"$22.88\"},\n{\"Date\": \"2018-08-02\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT110\", \"Item\": \"Cat, Maine Coon (Felix catus)\", \"Quantity\": 1, \"Unit\": 1309.68, \"Paid\": \"$1309.68\"},\n{\"Date\": \"2018-08-02\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": 3, \"Unit\": 14.94, \"Paid\": \"$44.82\"},\n{\"Date\": \"2018-08-06\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD212\", \"Item\": \"BFF Oh My Gravy! Beef & Chicken 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"},\n{\"Date\": \"2018-08-07\", \"Customer\": \"Juan Johnson\", \"SKU\": \"REPT082\", \"Item\": \"Kingsnake, California (Lampropeltis getula)\", \"Quantity\": 1, \"Unit\": 89.95, \"Paid\": \"$89.95\"},\n{\"Date\": \"2018-08-07\", \"Customer\": \"Juan Johnson\", \"SKU\": \"RDNT443\", \"Item\": \"Mouse, Pinky (Mus musculus)\", \"Quantity\": 1, \"Unit\": 1.49, \"Paid\": \"$1.49\"},\n{\"Date\": \"2018-08-10\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD211\", \"Item\": \"BFF Oh My Gravy! Chicken & Turkey 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"},\n{\"Date\": \"2018-08-13\", \"Customer\": \"Monica Johnson\", \"SKU\": \"RDNT443\", \"Item\": \"Mouse, Pinky (Mus musculus)\", \"Quantity\": 1, \"Unit\": 1.49, \"Paid\": \"$1.49\"},\n{\"Date\": \"2018-08-13\", \"Customer\": \"Mar\\u00eda Fern\\u00e1ndez\", \"SKU\": \"FOOD146\", \"Item\": \"Forti Diet Prohealth Mouse/Rat 3lbs\", \"Quantity\": 2, \"Unit\": 2.0, \"Paid\": \"$4.0\"},\n{\"Date\": \"2018-08-15\", \"Customer\": \"Mr. Praline\", \"SKU\": \"RETURN\", \"Item\": \"Parrot, Norwegian Blue (Mopsitta tanta)\", \"Quantity\": 1, \"Unit\": 2300.0, \"Paid\": \"-$2300.0\"},\n{\"Date\": \"2018-08-15\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat - 3.5 oz\", \"Quantity\": 2, \"Unit\": 4.22, \"Paid\": \"$8.44\"},\n{\"Date\": \"2018-08-16\", \"Customer\": \"Helen Halestorm\", \"SKU\": \"RETURN\", \"Item\": \"Rabbit (Oryctolagus cuniculus)\", \"Quantity\": 6, \"Unit\": 0.0, \"Paid\": \"$0.0\"},\n{\"Date\": \"2018-08-16\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"DOG010\", \"Item\": \"Dog, Golden Retriever (Canis lupus familiaris)\", \"Quantity\": 1, \"Unit\": 2495.99, \"Paid\": \"$2495.99\"},\n{\"Date\": \"2018-08-16\", \"Customer\": \"Michael Smith\", \"SKU\": \"BIRD160\", \"Item\": \"Parakeet, Blue (Melopsittacus undulatus)\", \"Quantity\": 1, \"Unit\": 29.95, \"Paid\": \"$31.85\"},\n{\"Date\": \"2018-08-17\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"NSCT201\", \"Item\": \"Food, Spider\", \"Quantity\": 5, \"Unit\": 0.05, \"Paid\": \"$0.25\"},\n{\"Date\": \"2018-08-20\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"RETURN\", \"Item\": \"Dog, Golden Retriever (Canis lupus familiaris)\", \"Quantity\": 1, \"Unit\": 1247.99, \"Paid\": \"-$1247.99\"},\n{\"Date\": \"2018-08-20\", \"Customer\": \"\\u05de\\u05e8\\u05d5\\u05e1\\u05d9\\u05d4 \\u05e0\\u05d9\\u05e1\\u05e0\\u05d4\\u05d5\\u05dc\\u05e5 \\u05d0\\u05d1\\u05d5\\u05dc\\u05e2\\u05e4\\u05d9\\u05d4\", \"SKU\": \"GOAT224\", \"Item\": \"Goat, American Pygmy (Capra hircus)\", \"Quantity\": 1, \"Unit\": 499.0, \"Paid\": \"$160.51\"},\n{\"Date\": \"2018-08-20\", \"Customer\": \"Monica Johnson\", \"SKU\": \"NSCT201\", \"Item\": \"Crickets, Adult Live (Gryllus assimilis)\", \"Quantity\": 30, \"Unit\": 0.05, \"Paid\": \"$1.5\"},\n{\"Date\": \"2018-08-20\", \"Customer\": \"David Attenborough\", \"SKU\": \"NSCT084\", \"Item\": \"Food, Pangolin\", \"Quantity\": 30, \"Unit\": 0.17, \"Paid\": \"$5.10\"},\n{\"Date\": \"2018-08-21\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD214\", \"Item\": \"BFF Oh My Gravy! Duck & Salmon 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"},\n{\"Date\": \"2018-08-22\", \"Customer\": \"David Attenborough\", \"SKU\": \"BIRD160\", \"Item\": \"Food, Quoll\", \"Quantity\": 1, \"Unit\": 29.95, \"Paid\": \"$29.95\"},\n{\"Date\": \"2018-08-22\", \"Customer\": \"Jon Arbuckle\", \"SKU\": \"FOOD170\", \"Item\": \"Food, Adult Dog - 5kg\", \"Quantity\": 1, \"Unit\": 44.95, \"Paid\": \"$44.95\"},\n{\"Date\": \"2018-08-22\", \"Customer\": \"\\u05de\\u05e8\\u05d5\\u05e1\\u05d9\\u05d4 \\u05e0\\u05d9\\u05e1\\u05e0\\u05d4\\u05d5\\u05dc\\u05e5\", \"SKU\": \"SFTY052\", \"Item\": \"Fire Extinguisher, kitchen-rated\", \"Quantity\": 1, \"Unit\": 61.7, \"Paid\": \"$61.70\"},\n{\"Date\": \"2018-08-24\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD218\", \"Item\": \"BFF Oh My Gravy! Chicken & Salmon 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"},\n{\"Date\": \"2018-08-27\", \"Customer\": \"Monica Johnson\", \"SKU\": \"NSCT443\", \"Item\": \"Mealworms, Large (Tenebrio molitor) 100ct\", \"Quantity\": 1, \"Unit\": 1.99, \"Paid\": \"$1.99\"},\n{\"Date\": \"2018-08-28\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT020\", \"Item\": \"Cat, Scottish Fold (Felis catus)\", \"Quantity\": 1, \"Unit\": 1964.53, \"Paid\": \"$1964.53\"},\n{\"Date\": \"2018-08-28\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": 2, \"Unit\": 14.94, \"Paid\": \"$29.88\"},\n{\"Date\": \"2018-08-29\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD219\", \"Item\": \"BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"},\n{\"Date\": \"2018-08-31\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD219\", \"Item\": \"BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\", \"Quantity\": 144, \"Unit\": 12.95, \"Paid\": \"$1864.8\"},\n{\"Date\": \"2018-08-31\", \"Customer\": \"Juan Johnson\", \"SKU\": \"REPT217\", \"Item\": \"Lizard, Spinytail (Uromastyx ornatus)\", \"Quantity\": 1, \"Unit\": 99.95, \"Paid\": \"$99.95\"}\n]\n"
  },
  {
    "path": "tests/golden/save-benchmarks.jsonl",
    "content": "{\"Date\": \"2018-07-03\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD213\", \"Item\": \"BFF Oh My Gravy! Beef & Salmon 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"}\n{\"Date\": \"2018-07-03\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat - 3.5 oz\", \"Quantity\": 1, \"Unit\": 4.22, \"Paid\": \"$4.22\"}\n{\"Date\": \"2018-07-05\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat 3.5 oz\", \"Quantity\": 1, \"Unit\": 4.22, \"Paid\": \"$4.22\"}\n{\"Date\": \"2018-07-06\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": 12, \"Unit\": 1.29, \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"2018-07-10\", \"Customer\": \"David Attenborough\", \"SKU\": \"NSCT201\", \"Item\": \"Food, Salamander\", \"Quantity\": 30, \"Unit\": 0.05, \"Paid\": \"$1.5\"}\n{\"Date\": \"2018-07-10\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT060\", \"Item\": \"Cat, Korat (Felis catus)\", \"Quantity\": 1, \"Unit\": 720.42, \"Paid\": \"$720.42\"}\n{\"Date\": \"2018-07-10\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": 1, \"Unit\": 14.94, \"Paid\": \"$14.94\"}\n{\"Date\": \"2018-07-13\", \"Customer\": \"Wil Wheaton\", \"SKU\": \"NSCT523\", \"Item\": \"Monster, Rust (Monstrus gygaxus)\", \"Quantity\": 1, \"Unit\": 39.95, \"Paid\": \"$39.95\"}\n{\"Date\": \"2018-07-13\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD216\", \"Item\": \"BFF Oh My Gravy! Chicken & Shrimp 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"}\n{\"Date\": \"2018-07-17\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD217\", \"Item\": \"BFF Oh My Gravy! Duck & Tuna 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"}\n{\"Date\": \"2018-07-17\", \"Customer\": \"Helen Halestorm\", \"SKU\": \"LAGO342\", \"Item\": \"Rabbit (Oryctolagus cuniculus)\", \"Quantity\": 2, \"Unit\": 32.94, \"Paid\": \"$65.88\"}\n{\"Date\": \"2018-07-18\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": 6, \"Unit\": 1.29, \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"2018-07-19\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"FOOD170\", \"Item\": \"Food, Dog - 5kg\", \"Quantity\": 5, \"Unit\": 44.95, \"Paid\": \"$224.75\"}\n{\"Date\": \"2018-07-20\", \"Customer\": \"Jon Arbuckle\", \"SKU\": \"FOOD167\", \"Item\": \"Food, Premium Wet Cat - 3.5 oz\", \"Quantity\": 50, \"Unit\": 3.95, \"Paid\": \"$197.5\"}\n{\"Date\": \"2018-07-23\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD215\", \"Item\": \"BFF Oh My Gravy! Lamb & Tuna 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"}\n{\"Date\": \"2018-07-23\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"TOY235\", \"Item\": \"Laser Pointer\", \"Quantity\": 1, \"Unit\": 16.12, \"Paid\": \"$16.12\"}\n{\"Date\": \"2018-07-24\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": 3, \"Unit\": 1.29, \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"2018-07-26\", \"Customer\": \"Douglas \\\"Dougie\\\" Powers\", \"SKU\": \"FOOD420\", \"Item\": \"Food, Shark - 10 kg\", \"Quantity\": 1, \"Unit\": 15.7, \"Paid\": \"$15.7\"}\n{\"Date\": \"2018-07-27\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"FOOD122\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": 3, \"Unit\": 1.29, \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"2018-07-30\", \"Customer\": \"\\u685c \\u9ad8\\u6a4b (Sakura Takahashi)\", \"SKU\": \"RETURN\", \"Item\": \"Food, Senior Wet Cat - 3 oz\", \"Quantity\": 1, \"Unit\": 1.29, \"Paid\": \"157\\u00a5\"}\n{\"Date\": \"2018-07-31\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"CAT060\", \"Item\": \"Food, Dragon - 50kg\", \"Quantity\": 5, \"Unit\": 720.42, \"Paid\": \"$3602.1\"}\n{\"Date\": \"2018-08-01\", \"Customer\": \"David Attenborough\", \"SKU\": \"FOOD360\", \"Item\": \"Food, Rhinocerous - 50kg\", \"Quantity\": 4, \"Unit\": 5.72, \"Paid\": \"$22.88\"}\n{\"Date\": \"2018-08-02\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT110\", \"Item\": \"Cat, Maine Coon (Felix catus)\", \"Quantity\": 1, \"Unit\": 1309.68, \"Paid\": \"$1309.68\"}\n{\"Date\": \"2018-08-02\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": 3, \"Unit\": 14.94, \"Paid\": \"$44.82\"}\n{\"Date\": \"2018-08-06\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD212\", \"Item\": \"BFF Oh My Gravy! Beef & Chicken 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"}\n{\"Date\": \"2018-08-07\", \"Customer\": \"Juan Johnson\", \"SKU\": \"REPT082\", \"Item\": \"Kingsnake, California (Lampropeltis getula)\", \"Quantity\": 1, \"Unit\": 89.95, \"Paid\": \"$89.95\"}\n{\"Date\": \"2018-08-07\", \"Customer\": \"Juan Johnson\", \"SKU\": \"RDNT443\", \"Item\": \"Mouse, Pinky (Mus musculus)\", \"Quantity\": 1, \"Unit\": 1.49, \"Paid\": \"$1.49\"}\n{\"Date\": \"2018-08-10\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD211\", \"Item\": \"BFF Oh My Gravy! Chicken & Turkey 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"}\n{\"Date\": \"2018-08-13\", \"Customer\": \"Monica Johnson\", \"SKU\": \"RDNT443\", \"Item\": \"Mouse, Pinky (Mus musculus)\", \"Quantity\": 1, \"Unit\": 1.49, \"Paid\": \"$1.49\"}\n{\"Date\": \"2018-08-13\", \"Customer\": \"Mar\\u00eda Fern\\u00e1ndez\", \"SKU\": \"FOOD146\", \"Item\": \"Forti Diet Prohealth Mouse/Rat 3lbs\", \"Quantity\": 2, \"Unit\": 2.0, \"Paid\": \"$4.0\"}\n{\"Date\": \"2018-08-15\", \"Customer\": \"Mr. Praline\", \"SKU\": \"RETURN\", \"Item\": \"Parrot, Norwegian Blue (Mopsitta tanta)\", \"Quantity\": 1, \"Unit\": 2300.0, \"Paid\": \"-$2300.0\"}\n{\"Date\": \"2018-08-15\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"FOOD121\", \"Item\": \"Food, Adult Cat - 3.5 oz\", \"Quantity\": 2, \"Unit\": 4.22, \"Paid\": \"$8.44\"}\n{\"Date\": \"2018-08-16\", \"Customer\": \"Helen Halestorm\", \"SKU\": \"RETURN\", \"Item\": \"Rabbit (Oryctolagus cuniculus)\", \"Quantity\": 6, \"Unit\": 0.0, \"Paid\": \"$0.0\"}\n{\"Date\": \"2018-08-16\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"DOG010\", \"Item\": \"Dog, Golden Retriever (Canis lupus familiaris)\", \"Quantity\": 1, \"Unit\": 2495.99, \"Paid\": \"$2495.99\"}\n{\"Date\": \"2018-08-16\", \"Customer\": \"Michael Smith\", \"SKU\": \"BIRD160\", \"Item\": \"Parakeet, Blue (Melopsittacus undulatus)\", \"Quantity\": 1, \"Unit\": 29.95, \"Paid\": \"$31.85\"}\n{\"Date\": \"2018-08-17\", \"Customer\": \"Rubeus Hagrid\", \"SKU\": \"NSCT201\", \"Item\": \"Food, Spider\", \"Quantity\": 5, \"Unit\": 0.05, \"Paid\": \"$0.25\"}\n{\"Date\": \"2018-08-20\", \"Customer\": \"Kyle Kennedy\", \"SKU\": \"RETURN\", \"Item\": \"Dog, Golden Retriever (Canis lupus familiaris)\", \"Quantity\": 1, \"Unit\": 1247.99, \"Paid\": \"-$1247.99\"}\n{\"Date\": \"2018-08-20\", \"Customer\": \"\\u05de\\u05e8\\u05d5\\u05e1\\u05d9\\u05d4 \\u05e0\\u05d9\\u05e1\\u05e0\\u05d4\\u05d5\\u05dc\\u05e5 \\u05d0\\u05d1\\u05d5\\u05dc\\u05e2\\u05e4\\u05d9\\u05d4\", \"SKU\": \"GOAT224\", \"Item\": \"Goat, American Pygmy (Capra hircus)\", \"Quantity\": 1, \"Unit\": 499.0, \"Paid\": \"$160.51\"}\n{\"Date\": \"2018-08-20\", \"Customer\": \"Monica Johnson\", \"SKU\": \"NSCT201\", \"Item\": \"Crickets, Adult Live (Gryllus assimilis)\", \"Quantity\": 30, \"Unit\": 0.05, \"Paid\": \"$1.5\"}\n{\"Date\": \"2018-08-20\", \"Customer\": \"David Attenborough\", \"SKU\": \"NSCT084\", \"Item\": \"Food, Pangolin\", \"Quantity\": 30, \"Unit\": 0.17, \"Paid\": \"$5.10\"}\n{\"Date\": \"2018-08-21\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD214\", \"Item\": \"BFF Oh My Gravy! Duck & Salmon 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"}\n{\"Date\": \"2018-08-22\", \"Customer\": \"David Attenborough\", \"SKU\": \"BIRD160\", \"Item\": \"Food, Quoll\", \"Quantity\": 1, \"Unit\": 29.95, \"Paid\": \"$29.95\"}\n{\"Date\": \"2018-08-22\", \"Customer\": \"Jon Arbuckle\", \"SKU\": \"FOOD170\", \"Item\": \"Food, Adult Dog - 5kg\", \"Quantity\": 1, \"Unit\": 44.95, \"Paid\": \"$44.95\"}\n{\"Date\": \"2018-08-22\", \"Customer\": \"\\u05de\\u05e8\\u05d5\\u05e1\\u05d9\\u05d4 \\u05e0\\u05d9\\u05e1\\u05e0\\u05d4\\u05d5\\u05dc\\u05e5\", \"SKU\": \"SFTY052\", \"Item\": \"Fire Extinguisher, kitchen-rated\", \"Quantity\": 1, \"Unit\": 61.7, \"Paid\": \"$61.70\"}\n{\"Date\": \"2018-08-24\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD218\", \"Item\": \"BFF Oh My Gravy! Chicken & Salmon 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"}\n{\"Date\": \"2018-08-27\", \"Customer\": \"Monica Johnson\", \"SKU\": \"NSCT443\", \"Item\": \"Mealworms, Large (Tenebrio molitor) 100ct\", \"Quantity\": 1, \"Unit\": 1.99, \"Paid\": \"$1.99\"}\n{\"Date\": \"2018-08-28\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"CAT020\", \"Item\": \"Cat, Scottish Fold (Felis catus)\", \"Quantity\": 1, \"Unit\": 1964.53, \"Paid\": \"$1964.53\"}\n{\"Date\": \"2018-08-28\", \"Customer\": \"Susan Ashworth\", \"SKU\": \"FOOD130\", \"Item\": \"Food, Kitten 3kg\", \"Quantity\": 2, \"Unit\": 14.94, \"Paid\": \"$29.88\"}\n{\"Date\": \"2018-08-29\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD219\", \"Item\": \"BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\", \"Quantity\": 4, \"Unit\": 12.95, \"Paid\": \"$51.8\"}\n{\"Date\": \"2018-08-31\", \"Customer\": \"Robert Armstrong\", \"SKU\": \"FOOD219\", \"Item\": \"BFF Oh My Gravy! Chicken & Pumpkin 2.8oz\", \"Quantity\": 144, \"Unit\": 12.95, \"Paid\": \"$1864.8\"}\n{\"Date\": \"2018-08-31\", \"Customer\": \"Juan Johnson\", \"SKU\": \"REPT217\", \"Item\": \"Lizard, Spinytail (Uromastyx ornatus)\", \"Quantity\": 1, \"Unit\": 99.95, \"Paid\": \"$99.95\"}\n"
  },
  {
    "path": "tests/golden/save-benchmarks.md",
    "content": "|Date        |Customer            |SKU      |Item                |Quantity  |Unit       |Paid       |\n|-----------:|--------------------|---------|--------------------|---------:|----------:|-----------|\n|2018\\-07\\-03|Robert Armstrong    |FOOD213  |BFF Oh My Gravy\\! Beef & Salmon 2\\.8oz|4         |12\\.95     |$51\\.8     |\n|2018\\-07\\-03|Kyle Kennedy        |FOOD121  |Food, Adult Cat \\- 3\\.5 oz|1         |4\\.22      |$4\\.22     |\n|2018\\-07\\-05|Douglas \"Dougie\" Powers|FOOD121  |Food, Adult Cat 3\\.5 oz|1         |4\\.22      |$4\\.22     |\n|2018\\-07\\-06|桜 高橋 \\(Sakura Takahashi\\)|FOOD122  |Food, Senior Wet Cat \\- 3 oz|12        |1\\.29      |157¥       |\n|2018\\-07\\-10|David Attenborough  |NSCT201  |Food, Salamander    |30        |0\\.05      |$1\\.5      |\n|2018\\-07\\-10|Susan Ashworth      |CAT060   |Cat, Korat \\(Felis catus\\)|1         |720\\.42    |$720\\.42   |\n|2018\\-07\\-10|Susan Ashworth      |FOOD130  |Food, Kitten 3kg    |1         |14\\.94     |$14\\.94    |\n|2018\\-07\\-13|Wil Wheaton         |NSCT523  |Monster, Rust \\(Monstrus gygaxus\\)|1         |39\\.95     |$39\\.95    |\n|2018\\-07\\-13|Robert Armstrong    |FOOD216  |BFF Oh My Gravy\\! Chicken & Shrimp 2\\.8oz|4         |12\\.95     |$51\\.8     |\n|2018\\-07\\-17|Robert Armstrong    |FOOD217  |BFF Oh My Gravy\\! Duck & Tuna 2\\.8oz|4         |12\\.95     |$51\\.8     |\n|2018\\-07\\-17|Helen Halestorm     |LAGO342  |Rabbit \\(Oryctolagus cuniculus\\)|2         |32\\.94     |$65\\.88    |\n|2018\\-07\\-18|桜 高橋 \\(Sakura Takahashi\\)|FOOD122  |Food, Senior Wet Cat \\- 3 oz|6         |1\\.29      |157¥       |\n|2018\\-07\\-19|Rubeus Hagrid       |FOOD170  |Food, Dog \\- 5kg    |5         |44\\.95     |$224\\.75   |\n|2018\\-07\\-20|Jon Arbuckle        |FOOD167  |Food, Premium Wet Cat \\- 3\\.5 oz|50        |3\\.95      |$197\\.5    |\n|2018\\-07\\-23|Robert Armstrong    |FOOD215  |BFF Oh My Gravy\\! Lamb & Tuna 2\\.8oz|4         |12\\.95     |$51\\.8     |\n|2018\\-07\\-23|Douglas \"Dougie\" Powers|TOY235   |Laser Pointer       |1         |16\\.12     |$16\\.12    |\n|2018\\-07\\-24|桜 高橋 \\(Sakura Takahashi\\)|FOOD122  |Food, Senior Wet Cat \\- 3 oz|3         |1\\.29      |157¥       |\n|2018\\-07\\-26|Douglas \"Dougie\" Powers|FOOD420  |Food, Shark \\- 10 kg|1         |15\\.70     |$15\\.7     |\n|2018\\-07\\-27|桜 高橋 \\(Sakura Takahashi\\)|FOOD122  |Food, Senior Wet Cat \\- 3 oz|3         |1\\.29      |157¥       |\n|2018\\-07\\-30|桜 高橋 \\(Sakura Takahashi\\)|RETURN   |Food, Senior Wet Cat \\- 3 oz|1         |1\\.29      |157¥       |\n|2018\\-07\\-31|Rubeus Hagrid       |CAT060   |Food, Dragon \\- 50kg|5         |720\\.42    |$3602\\.1   |\n|2018\\-08\\-01|David Attenborough  |FOOD360  |Food, Rhinocerous \\- 50kg|4         |5\\.72      |$22\\.88    |\n|2018\\-08\\-02|Susan Ashworth      |CAT110   |Cat, Maine Coon \\(Felix catus\\)|1         |1309\\.68   |$1309\\.68  |\n|2018\\-08\\-02|Susan Ashworth      |FOOD130  |Food, Kitten 3kg    |3         |14\\.94     |$44\\.82    |\n|2018\\-08\\-06|Robert Armstrong    |FOOD212  |BFF Oh My Gravy\\! Beef & Chicken 2\\.8oz|4         |12\\.95     |$51\\.8     |\n|2018\\-08\\-07|Juan Johnson        |REPT082  |Kingsnake, California \\(Lampropeltis getula\\)|1         |89\\.95     |$89\\.95    |\n|2018\\-08\\-07|Juan Johnson        |RDNT443  |Mouse, Pinky \\(Mus musculus\\)|1         |1\\.49      |$1\\.49     |\n|2018\\-08\\-10|Robert Armstrong    |FOOD211  |BFF Oh My Gravy\\! Chicken & Turkey 2\\.8oz|4         |12\\.95     |$51\\.8     |\n|2018\\-08\\-13|Monica Johnson      |RDNT443  |Mouse, Pinky \\(Mus musculus\\)|1         |1\\.49      |$1\\.49     |\n|2018\\-08\\-13|María Fernández     |FOOD146  |Forti Diet Prohealth Mouse/Rat 3lbs|2         |2\\.00      |$4\\.0      |\n|2018\\-08\\-15|Mr\\. Praline        |RETURN   |Parrot, Norwegian Blue \\(Mopsitta tanta\\)|1         |2300\\.00   |\\-$2300\\.0 |\n|2018\\-08\\-15|Kyle Kennedy        |FOOD121  |Food, Adult Cat \\- 3\\.5 oz|2         |4\\.22      |$8\\.44     |\n|2018\\-08\\-16|Helen Halestorm     |RETURN   |Rabbit \\(Oryctolagus cuniculus\\)|6         |0\\.00      |$0\\.0      |\n|2018\\-08\\-16|Kyle Kennedy        |DOG010   |Dog, Golden Retriever \\(Canis lupus familiaris\\)|1         |2495\\.99   |$2495\\.99  |\n|2018\\-08\\-16|Michael Smith       |BIRD160  |Parakeet, Blue \\(Melopsittacus undulatus\\)|1         |29\\.95     |$31\\.85    |\n|2018\\-08\\-17|Rubeus Hagrid       |NSCT201  |Food, Spider        |5         |0\\.05      |$0\\.25     |\n|2018\\-08\\-20|Kyle Kennedy        |RETURN   |Dog, Golden Retriever \\(Canis lupus familiaris\\)|1         |1247\\.99   |\\-$1247\\.99|\n|2018\\-08\\-20|מרוסיה ניסנהולץ אבולעפיה|GOAT224  |Goat, American Pygmy \\(Capra hircus\\)|1         |499\\.00    |$160\\.51   |\n|2018\\-08\\-20|Monica Johnson      |NSCT201  |Crickets, Adult Live \\(Gryllus assimilis\\)|30        |0\\.05      |$1\\.5      |\n|2018\\-08\\-20|David Attenborough  |NSCT084  |Food, Pangolin      |30        |0\\.17      |$5\\.10     |\n|2018\\-08\\-21|Robert Armstrong    |FOOD214  |BFF Oh My Gravy\\! Duck & Salmon 2\\.8oz|4         |12\\.95     |$51\\.8     |\n|2018\\-08\\-22|David Attenborough  |BIRD160  |Food, Quoll         |1         |29\\.95     |$29\\.95    |\n|2018\\-08\\-22|Jon Arbuckle        |FOOD170  |Food, Adult Dog \\- 5kg|1         |44\\.95     |$44\\.95    |\n|2018\\-08\\-22|מרוסיה ניסנהולץ     |SFTY052  |Fire Extinguisher, kitchen\\-rated|1         |61\\.70     |$61\\.70    |\n|2018\\-08\\-24|Robert Armstrong    |FOOD218  |BFF Oh My Gravy\\! Chicken & Salmon 2\\.8oz|4         |12\\.95     |$51\\.8     |\n|2018\\-08\\-27|Monica Johnson      |NSCT443  |Mealworms, Large \\(Tenebrio molitor\\) 100ct|1         |1\\.99      |$1\\.99     |\n|2018\\-08\\-28|Susan Ashworth      |CAT020   |Cat, Scottish Fold \\(Felis catus\\)|1         |1964\\.53   |$1964\\.53  |\n|2018\\-08\\-28|Susan Ashworth      |FOOD130  |Food, Kitten 3kg    |2         |14\\.94     |$29\\.88    |\n|2018\\-08\\-29|Robert Armstrong    |FOOD219  |BFF Oh My Gravy\\! Chicken & Pumpkin 2\\.8oz|4         |12\\.95     |$51\\.8     |\n|2018\\-08\\-31|Robert Armstrong    |FOOD219  |BFF Oh My Gravy\\! Chicken & Pumpkin 2\\.8oz|144       |12\\.95     |$1864\\.8   |\n|2018\\-08\\-31|Juan Johnson        |REPT217  |Lizard, Spinytail \\(Uromastyx ornatus\\)|1         |99\\.95     |$99\\.95    |\n\n"
  },
  {
    "path": "tests/golden/save-benchmarks.rst",
    "content": "==========  ==========================  =======  ==============================================  ==========  =======  =========\nDate        Customer                    SKU      Item                                              Quantity     Unit  Paid\n==========  ==========================  =======  ==============================================  ==========  =======  =========\n2018-07-03  Robert Armstrong            FOOD213  BFF Oh My Gravy! Beef & Salmon 2.8oz                     4    12.95  $51.8\n2018-07-03  Kyle Kennedy                FOOD121  Food, Adult Cat - 3.5 oz                                 1     4.22  $4.22\n2018-07-05  Douglas \"Dougie\" Powers     FOOD121  Food, Adult Cat 3.5 oz                                   1     4.22  $4.22\n2018-07-06  桜 高橋 (Sakura Takahashi)  FOOD122  Food, Senior Wet Cat - 3 oz                             12     1.29  157¥\n2018-07-10  David Attenborough          NSCT201  Food, Salamander                                        30     0.05  $1.5\n2018-07-10  Susan Ashworth              CAT060   Cat, Korat (Felis catus)                                 1   720.42  $720.42\n2018-07-10  Susan Ashworth              FOOD130  Food, Kitten 3kg                                         1    14.94  $14.94\n2018-07-13  Wil Wheaton                 NSCT523  Monster, Rust (Monstrus gygaxus)                         1    39.95  $39.95\n2018-07-13  Robert Armstrong            FOOD216  BFF Oh My Gravy! Chicken & Shrimp 2.8oz                  4    12.95  $51.8\n2018-07-17  Robert Armstrong            FOOD217  BFF Oh My Gravy! Duck & Tuna 2.8oz                       4    12.95  $51.8\n2018-07-17  Helen Halestorm             LAGO342  Rabbit (Oryctolagus cuniculus)                           2    32.94  $65.88\n2018-07-18  桜 高橋 (Sakura Takahashi)  FOOD122  Food, Senior Wet Cat - 3 oz                              6     1.29  157¥\n2018-07-19  Rubeus Hagrid               FOOD170  Food, Dog - 5kg                                          5    44.95  $224.75\n2018-07-20  Jon Arbuckle                FOOD167  Food, Premium Wet Cat - 3.5 oz                          50     3.95  $197.5\n2018-07-23  Robert Armstrong            FOOD215  BFF Oh My Gravy! Lamb & Tuna 2.8oz                       4    12.95  $51.8\n2018-07-23  Douglas \"Dougie\" Powers     TOY235   Laser Pointer                                            1    16.12  $16.12\n2018-07-24  桜 高橋 (Sakura Takahashi)  FOOD122  Food, Senior Wet Cat - 3 oz                              3     1.29  157¥\n2018-07-26  Douglas \"Dougie\" Powers     FOOD420  Food, Shark - 10 kg                                      1    15.7   $15.7\n2018-07-27  桜 高橋 (Sakura Takahashi)  FOOD122  Food, Senior Wet Cat - 3 oz                              3     1.29  157¥\n2018-07-30  桜 高橋 (Sakura Takahashi)  RETURN   Food, Senior Wet Cat - 3 oz                              1     1.29  157¥\n2018-07-31  Rubeus Hagrid               CAT060   Food, Dragon - 50kg                                      5   720.42  $3602.1\n2018-08-01  David Attenborough          FOOD360  Food, Rhinocerous - 50kg                                 4     5.72  $22.88\n2018-08-02  Susan Ashworth              CAT110   Cat, Maine Coon (Felix catus)                            1  1309.68  $1309.68\n2018-08-02  Susan Ashworth              FOOD130  Food, Kitten 3kg                                         3    14.94  $44.82\n2018-08-06  Robert Armstrong            FOOD212  BFF Oh My Gravy! Beef & Chicken 2.8oz                    4    12.95  $51.8\n2018-08-07  Juan Johnson                REPT082  Kingsnake, California (Lampropeltis getula)              1    89.95  $89.95\n2018-08-07  Juan Johnson                RDNT443  Mouse, Pinky (Mus musculus)                              1     1.49  $1.49\n2018-08-10  Robert Armstrong            FOOD211  BFF Oh My Gravy! Chicken & Turkey 2.8oz                  4    12.95  $51.8\n2018-08-13  Monica Johnson              RDNT443  Mouse, Pinky (Mus musculus)                              1     1.49  $1.49\n2018-08-13  María Fernández             FOOD146  Forti Diet Prohealth Mouse/Rat 3lbs                      2     2     $4.0\n2018-08-15  Mr. Praline                 RETURN   Parrot, Norwegian Blue (Mopsitta tanta)                  1  2300     -$2300.0\n2018-08-15  Kyle Kennedy                FOOD121  Food, Adult Cat - 3.5 oz                                 2     4.22  $8.44\n2018-08-16  Helen Halestorm             RETURN   Rabbit (Oryctolagus cuniculus)                           6     0     $0.0\n2018-08-16  Kyle Kennedy                DOG010   Dog, Golden Retriever (Canis lupus familiaris)           1  2495.99  $2495.99\n2018-08-16  Michael Smith               BIRD160  Parakeet, Blue (Melopsittacus undulatus)                 1    29.95  $31.85\n2018-08-17  Rubeus Hagrid               NSCT201  Food, Spider                                             5     0.05  $0.25\n2018-08-20  Kyle Kennedy                RETURN   Dog, Golden Retriever (Canis lupus familiaris)           1  1247.99  -$1247.99\n2018-08-20  מרוסיה ניסנהולץ אבולעפיה    GOAT224  Goat, American Pygmy (Capra hircus)                      1   499     $160.51\n2018-08-20  Monica Johnson              NSCT201  Crickets, Adult Live (Gryllus assimilis)                30     0.05  $1.5\n2018-08-20  David Attenborough          NSCT084  Food, Pangolin                                          30     0.17  $5.10\n2018-08-21  Robert Armstrong            FOOD214  BFF Oh My Gravy! Duck & Salmon 2.8oz                     4    12.95  $51.8\n2018-08-22  David Attenborough          BIRD160  Food, Quoll                                              1    29.95  $29.95\n2018-08-22  Jon Arbuckle                FOOD170  Food, Adult Dog - 5kg                                    1    44.95  $44.95\n2018-08-22  מרוסיה ניסנהולץ             SFTY052  Fire Extinguisher, kitchen-rated                         1    61.7   $61.70\n2018-08-24  Robert Armstrong            FOOD218  BFF Oh My Gravy! Chicken & Salmon 2.8oz                  4    12.95  $51.8\n2018-08-27  Monica Johnson              NSCT443  Mealworms, Large (Tenebrio molitor) 100ct                1     1.99  $1.99\n2018-08-28  Susan Ashworth              CAT020   Cat, Scottish Fold (Felis catus)                         1  1964.53  $1964.53\n2018-08-28  Susan Ashworth              FOOD130  Food, Kitten 3kg                                         2    14.94  $29.88\n2018-08-29  Robert Armstrong            FOOD219  BFF Oh My Gravy! Chicken & Pumpkin 2.8oz                 4    12.95  $51.8\n2018-08-31  Robert Armstrong            FOOD219  BFF Oh My Gravy! Chicken & Pumpkin 2.8oz               144    12.95  $1864.8\n2018-08-31  Juan Johnson                REPT217  Lizard, Spinytail (Uromastyx ornatus)                    1    99.95  $99.95\n==========  ==========================  =======  ==============================================  ==========  =======  ========="
  },
  {
    "path": "tests/golden/save-benchmarks.txt",
    "content": "Date\tCustomer\tSKU\tItem\tQuantity\tUnit\tPaid\n2018-07-03\tRobert Armstrong\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t4\t12.95\t$51.8\n2018-07-03\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t1\t4.22\t$4.22\n2018-07-05\tDouglas \"Dougie\" Powers\tFOOD121\tFood, Adult Cat 3.5 oz\t1\t4.22\t$4.22\n2018-07-06\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t1.29\t157¥\n2018-07-10\tDavid Attenborough\tNSCT201\tFood, Salamander\t30\t0.05\t$1.5\n2018-07-10\tSusan Ashworth\tCAT060\tCat, Korat (Felis catus)\t1\t720.42\t$720.42\n2018-07-10\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t1\t14.94\t$14.94\n2018-07-13\tWil Wheaton\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t1\t39.95\t$39.95\n2018-07-13\tRobert Armstrong\tFOOD216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t4\t12.95\t$51.8\n2018-07-17\tRobert Armstrong\tFOOD217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t4\t12.95\t$51.8\n2018-07-17\tHelen Halestorm\tLAGO342\tRabbit (Oryctolagus cuniculus)\t2\t32.94\t$65.88\n2018-07-18\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t6\t1.29\t157¥\n2018-07-19\tRubeus Hagrid\tFOOD170\tFood, Dog - 5kg\t5\t44.95\t$224.75\n2018-07-20\tJon Arbuckle\tFOOD167\tFood, Premium Wet Cat - 3.5 oz\t50\t3.95\t$197.5\n2018-07-23\tRobert Armstrong\tFOOD215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t4\t12.95\t$51.8\n2018-07-23\tDouglas \"Dougie\" Powers\tTOY235\tLaser Pointer\t1\t16.12\t$16.12\n2018-07-24\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t1.29\t157¥\n2018-07-26\tDouglas \"Dougie\" Powers\tFOOD420\tFood, Shark - 10 kg\t1\t15.70\t$15.7\n2018-07-27\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t1.29\t157¥\n2018-07-30\t桜 高橋 (Sakura Takahashi)\tRETURN\tFood, Senior Wet Cat - 3 oz\t1\t1.29\t157¥\n2018-07-31\tRubeus Hagrid\tCAT060\tFood, Dragon - 50kg\t5\t720.42\t$3602.1\n2018-08-01\tDavid Attenborough\tFOOD360\tFood, Rhinocerous - 50kg\t4\t5.72\t$22.88\n2018-08-02\tSusan Ashworth\tCAT110\tCat, Maine Coon (Felix catus)\t1\t1309.68\t$1309.68\n2018-08-02\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t3\t14.94\t$44.82\n2018-08-06\tRobert Armstrong\tFOOD212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t4\t12.95\t$51.8\n2018-08-07\tJuan Johnson\tREPT082\tKingsnake, California (Lampropeltis getula)\t1\t89.95\t$89.95\n2018-08-07\tJuan Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t1.49\t$1.49\n2018-08-10\tRobert Armstrong\tFOOD211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t4\t12.95\t$51.8\n2018-08-13\tMonica Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t1.49\t$1.49\n2018-08-13\tMaría Fernández\tFOOD146\tForti Diet Prohealth Mouse/Rat 3lbs\t2\t2.00\t$4.0\n2018-08-15\tMr. Praline\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t1\t2300.00\t-$2300.0\n2018-08-15\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t2\t4.22\t$8.44\n2018-08-16\tHelen Halestorm\tRETURN\tRabbit (Oryctolagus cuniculus)\t6\t0.00\t$0.0\n2018-08-16\tKyle Kennedy\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t1\t2495.99\t$2495.99\n2018-08-16\tMichael Smith\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t1\t29.95\t$31.85\n2018-08-17\tRubeus Hagrid\tNSCT201\tFood, Spider\t5\t0.05\t$0.25\n2018-08-20\tKyle Kennedy\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t1\t1247.99\t-$1247.99\n2018-08-20\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tGoat, American Pygmy (Capra hircus)\t1\t499.00\t$160.51\n2018-08-20\tMonica Johnson\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t30\t0.05\t$1.5\n2018-08-20\tDavid Attenborough\tNSCT084\tFood, Pangolin\t30\t0.17\t$5.10\n2018-08-21\tRobert Armstrong\tFOOD214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t4\t12.95\t$51.8\n2018-08-22\tDavid Attenborough\tBIRD160\tFood, Quoll\t1\t29.95\t$29.95\n2018-08-22\tJon Arbuckle\tFOOD170\tFood, Adult Dog - 5kg\t1\t44.95\t$44.95\n2018-08-22\tמרוסיה ניסנהולץ\tSFTY052\tFire Extinguisher, kitchen-rated\t1\t61.70\t$61.70\n2018-08-24\tRobert Armstrong\tFOOD218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t4\t12.95\t$51.8\n2018-08-27\tMonica Johnson\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t1\t1.99\t$1.99\n2018-08-28\tSusan Ashworth\tCAT020\tCat, Scottish Fold (Felis catus)\t1\t1964.53\t$1964.53\n2018-08-28\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t2\t14.94\t$29.88\n2018-08-29\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t4\t12.95\t$51.8\n2018-08-31\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t144\t12.95\t$1864.8\n2018-08-31\tJuan Johnson\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t1\t99.95\t$99.95\n"
  },
  {
    "path": "tests/golden/save-geojson.geojson",
    "content": "{\"type\": \"FeatureCollection\", \"features\": [{\"geometry\": {\"type\": \"Polygon\", \"coordinates\": [[[-117.215796, 32.72734], [-117.213956, 32.728308], [-117.20961, 32.72839], [-117.209362, 32.729376], [-117.20870099999999, 32.734341], [-117.20625799999999, 32.736549], [-117.20499, 32.736222999999995], [-117.20418699999999, 32.734874], [-117.203541, 32.738113999999996], [-117.191898, 32.734252999999995], [-117.190761, 32.738309], [-117.187513, 32.739205999999996], [-117.185795, 32.739115], [-117.184275, 32.740480999999996], [-117.183331, 32.74189], [-117.182409, 32.742553], [-117.180216, 32.741413], [-117.178514, 32.739661999999996], [-117.171347, 32.731485], [-117.170765, 32.730423], [-117.169468, 32.73083], [-117.169871, 32.731808], [-117.168173, 32.732316], [-117.16486, 32.732423], [-117.164849, 32.731365], [-117.154678, 32.731418], [-117.155981, 32.734443999999996], [-117.156007, 32.736716], [-117.152596, 32.738939], [-117.151181, 32.741129], [-117.14752899999999, 32.741169], [-117.146017, 32.73779], [-117.14534, 32.733354], [-117.14302599999999, 32.730345], [-117.142667, 32.726709], [-117.143922, 32.724736], [-117.14411, 32.728085], [-117.146952, 32.728086], [-117.149925, 32.726424], [-117.151321, 32.723954], [-117.14858100000001, 32.721526], [-117.147663, 32.718804999999996], [-117.14757399999999, 32.705251], [-117.157302, 32.705327], [-117.155767, 32.70382], [-117.15269599999999, 32.701803], [-117.148501, 32.697139], [-117.149387, 32.696948], [-117.150739, 32.697562999999995], [-117.153978, 32.697077], [-117.159871, 32.701136999999996], [-117.157732, 32.701744], [-117.15790799999999, 32.702011], [-117.157935, 32.701983], [-117.167293, 32.708408], [-117.170609, 32.708027], [-117.172067, 32.709452999999996], [-117.173361, 32.712374], [-117.17572200000001, 32.711192], [-117.17585199999999, 32.712803], [-117.173576, 32.712648], [-117.173823, 32.713989999999995], [-117.176639, 32.714024], [-117.176646, 32.714838], [-117.173445, 32.715453], [-117.176665, 32.715921], [-117.173445, 32.715899], [-117.173452, 32.716761999999996], [-117.176659, 32.716789999999996], [-117.176665, 32.717945], [-117.173458, 32.717988], [-117.173457, 32.723735], [-117.17388, 32.725207999999995], [-117.175558, 32.726803], [-117.178366, 32.727363], [-117.179891, 32.727106], [-117.180834, 32.725528], [-117.184894, 32.726886], [-117.184477, 32.728047], [-117.186065, 32.728432], [-117.188823, 32.727134], [-117.195511, 32.727222], [-117.194587, 32.725736999999995], [-117.188003, 32.724857], [-117.188192, 32.723943999999996], [-117.197202, 32.724879], [-117.20659, 32.724717999999996], [-117.213994, 32.724202999999996], [-117.21651299999999, 32.725066], [-117.215796, 32.72734]], [[-117.17312799999999, 32.712233], [-117.172803, 32.711469], [-117.17105699999999, 32.711482], [-117.171098, 32.715711999999996], [-117.173104, 32.715708], [-117.17312799999999, 32.712233]]]}, \"type\": \"Feature\", \"properties\": {\"A\": 1, \"city\": \"San Diego\", \"postal-code\": \"92101\", \"county_fips\": \"073\", \"state_fips\": \"06\"}}, {\"geometry\": {\"type\": \"Polygon\", \"coordinates\": [[[-117.14858100000001, 32.721526], [-117.147437, 32.720014], [-117.144229, 32.721252], [-117.142597, 32.722716], [-117.141851, 32.726181], [-117.141885, 32.7289], [-117.1387, 32.730629], [-117.137022, 32.732603], [-117.136118, 32.734950999999995], [-117.134488, 32.737175], [-117.134652, 32.740957], [-117.133634, 32.740997], [-117.133623, 32.73379], [-117.13412199999999, 32.728524], [-117.133873, 32.726555], [-117.12960000000001, 32.726524999999995], [-117.128948, 32.727036], [-117.125368, 32.727027], [-117.12275199999999, 32.726541], [-117.121783, 32.727529], [-117.121822, 32.725502999999996], [-117.121015, 32.725500000000004], [-117.120921, 32.722937], [-117.118322, 32.721463], [-117.117962, 32.72016], [-117.119139, 32.717386999999995], [-117.121262, 32.716640999999996], [-117.11782099999999, 32.717199], [-117.110507, 32.718311], [-117.107029, 32.718363], [-117.10292799999999, 32.719121], [-117.103882, 32.720582], [-117.103748, 32.725274], [-117.10315299999999, 32.725733], [-117.102443, 32.722328], [-117.102546, 32.720496], [-117.09939, 32.721801], [-117.092282, 32.728896999999996], [-117.091386, 32.73139], [-117.090593, 32.731924], [-117.088081, 32.736151], [-117.087165, 32.735008], [-117.088864, 32.731773], [-117.089741, 32.728884], [-117.085137, 32.726644], [-117.084929, 32.72412], [-117.087062, 32.724136], [-117.086154, 32.722314], [-117.084925, 32.722328], [-117.08493, 32.718046], [-117.08500000000001, 32.704100000000004], [-117.086761, 32.704749], [-117.089424, 32.704133], [-117.095186, 32.704125], [-117.097324, 32.707659], [-117.099973, 32.707656], [-117.104781, 32.709313], [-117.109125, 32.709092999999996], [-117.113689, 32.706807999999995], [-117.115971, 32.706362], [-117.120347, 32.706545], [-117.122553, 32.706728], [-117.122596, 32.705501999999996], [-117.125229, 32.705914], [-117.133867, 32.705864], [-117.135988, 32.705315999999996], [-117.142394, 32.705256], [-117.14757399999999, 32.705251], [-117.147663, 32.718804999999996], [-117.14858100000001, 32.721526]]]}, \"type\": \"Feature\", \"properties\": {\"A\": 2, \"city\": \"San Diego\", \"postal-code\": \"92102\", \"county_fips\": \"073\", \"state_fips\": \"06\"}}, {\"geometry\": {\"type\": \"Polygon\", \"coordinates\": [[[-117.19633, 32.759502999999995], [-117.195397, 32.760247], [-117.19326699999999, 32.760211], [-117.192158, 32.759186], [-117.187414, 32.758389], [-117.185506, 32.758755], [-117.178867, 32.75765], [-117.177058, 32.757652], [-117.168156, 32.75916], [-117.165379, 32.759316], [-117.161561, 32.758795], [-117.159066, 32.75835], [-117.15501, 32.755106], [-117.152435, 32.754518], [-117.152243, 32.757205], [-117.143776, 32.756879999999995], [-117.144384, 32.754627], [-117.144326, 32.741198], [-117.14752899999999, 32.741169], [-117.151181, 32.741129], [-117.152596, 32.738939], [-117.156007, 32.736716], [-117.155981, 32.734443999999996], [-117.154678, 32.731418], [-117.164849, 32.731365], [-117.16486, 32.732423], [-117.168173, 32.732316], [-117.169871, 32.731808], [-117.169468, 32.73083], [-117.170765, 32.730423], [-117.171347, 32.731485], [-117.178514, 32.739661999999996], [-117.180216, 32.741413], [-117.182409, 32.742553], [-117.181565, 32.743007], [-117.179618, 32.745573], [-117.178259, 32.746624], [-117.179939, 32.748529999999995], [-117.179198, 32.749451], [-117.176816, 32.750374], [-117.179828, 32.750054999999996], [-117.183505, 32.746641], [-117.184116, 32.745587], [-117.185361, 32.746344], [-117.186408, 32.746998999999995], [-117.186767, 32.746691], [-117.187772, 32.746975], [-117.188188, 32.748247], [-117.189442, 32.749269999999996], [-117.19213500000001, 32.751090999999995], [-117.19229899999999, 32.752485], [-117.192065, 32.752747], [-117.193934, 32.753906], [-117.193809, 32.755016999999995], [-117.196635, 32.759118], [-117.19633, 32.759502999999995]]]}, \"type\": \"Feature\", \"properties\": {\"A\": 3, \"city\": \"San Diego\", \"postal-code\": \"92104\", \"county_fips\": \"073\", \"state_fips\": \"06\"}}]}"
  },
  {
    "path": "tests/golden/save-json.csv",
    "content": ",amt,key1,key2,qty\r\n#ERR,#ERR,#ERR,#ERR,#ERR\r\n,,2016-01-01 11:00:00,foo,1\r\n,,2018-07-27 16:44,bar,\r\n,.01,2018-07-27 18:44,baz,256\r\n,.01,2018-10-20 18:44,foo,30.0\r\n,.3,2017-12-25 8:44,bar,16\r\n,3,2016-01-01 1:00,,2\r\n,3.3,,baz,32\r\n,43.2,,baz,4\r\n,9.1,2018-07-27 4:44,,64\r\n"
  },
  {
    "path": "tests/golden/save-json.html",
    "content": "<h2>test</h2><table id=\"test\">\n<tr><th></th><th>amt</th><th>key1</th><th>key2</th><th>qty</th></tr>\n<tr><td>#ERR</td><td>#ERR</td><td>#ERR</td><td>#ERR</td><td>#ERR</td></tr>\n<tr><td></td><td></td><td>2016-01-01 11:00:00</td><td>foo</td><td>1</td></tr>\n<tr><td></td><td></td><td>2018-07-27 16:44</td><td>bar</td><td></td></tr>\n<tr><td></td><td>.01</td><td>2018-07-27 18:44</td><td>baz</td><td>256</td></tr>\n<tr><td></td><td>.01</td><td>2018-10-20 18:44</td><td>foo</td><td>30.0</td></tr>\n<tr><td></td><td>.3</td><td>2017-12-25 8:44</td><td>bar</td><td>16</td></tr>\n<tr><td></td><td>3</td><td>2016-01-01 1:00</td><td></td><td>2</td></tr>\n<tr><td></td><td>3.3</td><td></td><td>baz</td><td>32</td></tr>\n<tr><td></td><td>43.2</td><td></td><td>baz</td><td>4</td></tr>\n<tr><td></td><td>9.1</td><td>2018-07-27 4:44</td><td></td><td>64</td></tr>\n</table>"
  },
  {
    "path": "tests/golden/save-json.json",
    "content": "[\n{\"\": \"#ERR\", \"amt\": \"#ERR\", \"key1\": \"#ERR\", \"key2\": \"#ERR\", \"qty\": \"#ERR\"},\n{\"key1\": \"2016-01-01 11:00:00\", \"key2\": \"foo\", \"qty\": \"1\"},\n{\"key1\": \"2018-07-27 16:44\", \"key2\": \"bar\"},\n{\"amt\": \".01\", \"key1\": \"2018-07-27 18:44\", \"key2\": \"baz\", \"qty\": \"256\"},\n{\"amt\": \".01\", \"key1\": \"2018-10-20 18:44\", \"key2\": \"foo\", \"qty\": \"30.0\"},\n{\"amt\": \".3\", \"key1\": \"2017-12-25 8:44\", \"key2\": \"bar\", \"qty\": \"16\"},\n{\"amt\": \"3\", \"key1\": \"2016-01-01 1:00\", \"qty\": \"2\"},\n{\"amt\": \"3.3\", \"key2\": \"baz\", \"qty\": \"32\"},\n{\"amt\": \"43.2\", \"key2\": \"baz\", \"qty\": \"4\"},\n{\"amt\": \"9.1\", \"key1\": \"2018-07-27 4:44\", \"qty\": \"64\"}\n]\n"
  },
  {
    "path": "tests/golden/save-json.jsonl",
    "content": "{\"\": \"#ERR\", \"amt\": \"#ERR\", \"key1\": \"#ERR\", \"key2\": \"#ERR\", \"qty\": \"#ERR\"}\n{\"key1\": \"2016-01-01 11:00:00\", \"key2\": \"foo\", \"qty\": \"1\"}\n{\"key1\": \"2018-07-27 16:44\", \"key2\": \"bar\"}\n{\"amt\": \".01\", \"key1\": \"2018-07-27 18:44\", \"key2\": \"baz\", \"qty\": \"256\"}\n{\"amt\": \".01\", \"key1\": \"2018-10-20 18:44\", \"key2\": \"foo\", \"qty\": \"30.0\"}\n{\"amt\": \".3\", \"key1\": \"2017-12-25 8:44\", \"key2\": \"bar\", \"qty\": \"16\"}\n{\"amt\": \"3\", \"key1\": \"2016-01-01 1:00\", \"qty\": \"2\"}\n{\"amt\": \"3.3\", \"key2\": \"baz\", \"qty\": \"32\"}\n{\"amt\": \"43.2\", \"key2\": \"baz\", \"qty\": \"4\"}\n{\"amt\": \"9.1\", \"key1\": \"2018-07-27 4:44\", \"qty\": \"64\"}\n"
  },
  {
    "path": "tests/golden/save-json.md",
    "content": "|    |amt   |key1                |key2  |qty   |\n|----|------|--------------------|------|------|\n|\\#ERR|\\#ERR |\\#ERR               |\\#ERR |\\#ERR |\n|    |      |2016\\-01\\-01 11:00:00|foo   |1     |\n|    |      |2018\\-07\\-27 16:44  |bar   |      |\n|    |\\.01  |2018\\-07\\-27 18:44  |baz   |256   |\n|    |\\.01  |2018\\-10\\-20 18:44  |foo   |30\\.0 |\n|    |\\.3   |2017\\-12\\-25 8:44   |bar   |16    |\n|    |3     |2016\\-01\\-01 1:00   |      |2     |\n|    |3\\.3  |                    |baz   |32    |\n|    |43\\.2 |                    |baz   |4     |\n|    |9\\.1  |2018\\-07\\-27 4:44   |      |64    |\n\n"
  },
  {
    "path": "tests/golden/save-json.tsv",
    "content": "\tamt\tkey1\tkey2\tqty\n#ERR\t#ERR\t#ERR\t#ERR\t#ERR\n\t\t2016-01-01 11:00:00\tfoo\t1\n\t\t2018-07-27 16:44\tbar\t\n\t.01\t2018-07-27 18:44\tbaz\t256\n\t.01\t2018-10-20 18:44\tfoo\t30.0\n\t.3\t2017-12-25 8:44\tbar\t16\n\t3\t2016-01-01 1:00\t\t2\n\t3.3\t\tbaz\t32\n\t43.2\t\tbaz\t4\n\t9.1\t2018-07-27 4:44\t\t64\n"
  },
  {
    "path": "tests/golden/save-json.txt",
    "content": "\tamt\tkey1\tkey2\tqty\n#ERR\t#ERR\t#ERR\t#ERR\t#ERR\n\t\t2016-01-01 11:00:00\tfoo\t1\n\t\t2018-07-27 16:44\tbar\t\n\t.01\t2018-07-27 18:44\tbaz\t256\n\t.01\t2018-10-20 18:44\tfoo\t30.0\n\t.3\t2017-12-25 8:44\tbar\t16\n\t3\t2016-01-01 1:00\t\t2\n\t3.3\t\tbaz\t32\n\t43.2\t\tbaz\t4\n\t9.1\t2018-07-27 4:44\t\t64\n"
  },
  {
    "path": "tests/golden/save-jsonla.jsonla",
    "content": "[\"OrderDate\", \"Region\", \"Rep\", \"Item\", \"Units\", \"Unit_Cost\", \"Total\"]\n[\"2016-01-06\", \"East\", \"Jones\", \"Pencil\", 95, 1.99, 189.05]\n[\"2016-01-23\", \"Central\", \"Kivell\", \"Binder\", 50, 19.99, 999.5]\n[\"2016-02-09\", \"Central\", \"Jardine\", \"Pencil\", 36, 4.99, 179.64]\n[\"2016-02-26\", \"Central\", \"Gill\", \"Pen\", 27, 19.99, 539.73]\n[\"2016-03-15\", \"West\", \"Sorvino\", \"Pencil\", 56, 2.99, 167.44]\n[\"2016-04-01\", \"East\", \"Jones\", \"Binder\", 60, 4.99, 299.4]\n[\"2016-04-18\", \"Central\", \"Andrews\", \"Pencil\", 75, 1.99, 149.25]\n[\"2016-05-05\", \"Central\", \"Jardine\", \"Pencil\", 90, 4.99, 449.1]\n[\"2016-05-22\", \"West\", \"Thompson\", \"Pencil\", 32, 1.99, 63.68]\n[\"2016-06-08\", \"East\", \"Jones\", \"Binder\", 60, 8.99, 539.4]\n[\"2016-06-25\", \"Central\", \"Morgan\", \"Pencil\", 90, 4.99, 449.1]\n[\"2016-07-12\", \"East\", \"Howard\", \"Binder\", 29, 1.99, 57.71]\n[\"2016-07-29\", \"East\", \"Parent\", \"Binder\", 81, 19.99, 1619.19]\n[\"2016-08-15\", \"East\", \"Jones\", \"Pencil\", 35, 4.99, 174.65]\n[\"2016-09-01\", \"Central\", \"Smith\", \"Desk\", 2, 125.0, 250.0]\n[\"2016-09-18\", \"East\", \"Jones\", \"Pen Set\", 16, 15.99, 255.84]\n[\"2016-10-05\", \"Central\", \"Morgan\", \"Binder\", 28, 8.99, 251.72]\n[\"2016-10-22\", \"East\", \"Jones\", \"Pen\", 64, 8.99, 575.36]\n[\"2016-11-08\", \"East\", \"Parent\", \"Pen\", 15, 19.99, 299.85]\n[\"2016-11-25\", \"Central\", \"Kivell\", \"Pen Set\", 96, 4.99, 479.04]\n[\"2016-12-12\", \"Central\", \"Smith\", \"Pencil\", 67, 1.29, 86.43]\n[\"2016-12-29\", \"East\", \"Parent\", \"Pen Set\", 74, 15.99, 1183.26]\n[\"2017-01-15\", \"Central\", \"Gill\", \"Binder\", 46, 8.99, 413.54]\n[\"2017-02-01\", \"Central\", \"Smith\", \"Binder\", 87, 15.0, 1305.0]\n[\"2017-02-18\", \"East\", \"Jones\", \"Binder\", 4, 4.99, 19.96]\n[\"2017-03-07\", \"West\", \"Sorvino\", \"Binder\", 7, 19.99, 139.93]\n[\"2017-03-24\", \"Central\", \"Jardine\", \"Pen Set\", 50, 4.99, 249.5]\n[\"2017-04-10\", \"Central\", \"Andrews\", \"Pencil\", 66, 1.99, 131.34]\n[\"2017-04-27\", \"East\", \"Howard\", \"Pen\", 96, 4.99, 479.04]\n[\"2017-05-14\", \"Central\", \"Gill\", \"Pencil\", 53, 1.29, 68.37]\n[\"2017-05-31\", \"Central\", \"Gill\", \"Binder\", 80, 8.99, 719.2]\n[\"2017-06-17\", \"Central\", \"Kivell\", \"Desk\", 5, 125.0, 625.0]\n[\"2017-07-04\", \"East\", \"Jones\", \"Pen Set\", 62, 4.99, 309.38]\n[\"2017-07-21\", \"Central\", \"Morgan\", \"Pen Set\", 55, 12.49, 686.95]\n[\"2017-08-07\", \"Central\", \"Kivell\", \"Pen Set\", 42, 23.95, 1005.9]\n[\"2017-08-24\", \"West\", \"Sorvino\", \"Desk\", 3, 275.0, 825.0]\n[\"2017-09-10\", \"Central\", \"Gill\", \"Pencil\", 7, 1.29, 9.03]\n[\"2017-09-27\", \"West\", \"Sorvino\", \"Pen\", 76, 1.99, 151.24]\n[\"2017-10-14\", \"West\", \"Thompson\", \"Binder\", 57, 19.99, 1139.43]\n[\"2017-10-31\", \"Central\", \"Andrews\", \"Pencil\", 14, 1.29, 18.06]\n[\"2017-11-17\", \"Central\", \"Jardine\", \"Binder\", 11, 4.99, 54.89]\n[\"2017-12-04\", \"Central\", \"Jardine\", \"Binder\", 94, 19.99, 1879.06]\n[\"2017-12-21\", \"Central\", \"Andrews\", \"Binder\", 28, 4.99, 139.72]\n"
  },
  {
    "path": "tests/golden/save-usv.usv",
    "content": "OrderDate␟Region␟Rep␟Item␟Units␟Unit_Cost␟Total␞2016-01-06␟East␟Jones␟Pencil␟95␟1.99␟189.05␞2016-01-23␟Central␟Kivell␟Binder␟50␟19.99␟999.50␞2016-02-09␟Central␟Jardine␟Pencil␟36␟4.99␟179.64␞2016-02-26␟Central␟Gill␟Pen␟27␟19.99␟539.73␞2016-03-15␟West␟Sorvino␟Pencil␟56␟2.99␟167.44␞2016-04-01␟East␟Jones␟Binder␟60␟4.99␟299.40␞2016-04-18␟Central␟Andrews␟Pencil␟75␟1.99␟149.25␞2016-05-05␟Central␟Jardine␟Pencil␟90␟4.99␟449.10␞2016-05-22␟West␟Thompson␟Pencil␟32␟1.99␟63.68␞2016-06-08␟East␟Jones␟Binder␟60␟8.99␟539.40␞2016-06-25␟Central␟Morgan␟Pencil␟90␟4.99␟449.10␞2016-07-12␟East␟Howard␟Binder␟29␟1.99␟57.71␞2016-07-29␟East␟Parent␟Binder␟81␟19.99␟1619.19␞2016-08-15␟East␟Jones␟Pencil␟35␟4.99␟174.65␞2016-09-01␟Central␟Smith␟Desk␟2␟125.00␟250.00␞2016-09-18␟East␟Jones␟Pen Set␟16␟15.99␟255.84␞2016-10-05␟Central␟Morgan␟Binder␟28␟8.99␟251.72␞2016-10-22␟East␟Jones␟Pen␟64␟8.99␟575.36␞2016-11-08␟East␟Parent␟Pen␟15␟19.99␟299.85␞2016-11-25␟Central␟Kivell␟Pen Set␟96␟4.99␟479.04␞2016-12-12␟Central␟Smith␟Pencil␟67␟1.29␟86.43␞2016-12-29␟East␟Parent␟Pen Set␟74␟15.99␟1183.26␞2017-01-15␟Central␟Gill␟Binder␟46␟8.99␟413.54␞2017-02-01␟Central␟Smith␟Binder␟87␟15.00␟1305.00␞2017-02-18␟East␟Jones␟Binder␟4␟4.99␟19.96␞2017-03-07␟West␟Sorvino␟Binder␟7␟19.99␟139.93␞2017-03-24␟Central␟Jardine␟Pen Set␟50␟4.99␟249.50␞2017-04-10␟Central␟Andrews␟Pencil␟66␟1.99␟131.34␞2017-04-27␟East␟Howard␟Pen␟96␟4.99␟479.04␞2017-05-14␟Central␟Gill␟Pencil␟53␟1.29␟68.37␞2017-05-31␟Central␟Gill␟Binder␟80␟8.99␟719.20␞2017-06-17␟Central␟Kivell␟Desk␟5␟125.00␟625.00␞2017-07-04␟East␟Jones␟Pen Set␟62␟4.99␟309.38␞2017-07-21␟Central␟Morgan␟Pen Set␟55␟12.49␟686.95␞2017-08-07␟Central␟Kivell␟Pen Set␟42␟23.95␟1005.90␞2017-08-24␟West␟Sorvino␟Desk␟3␟275.00␟825.00␞2017-09-10␟Central␟Gill␟Pencil␟7␟1.29␟9.03␞2017-09-27␟West␟Sorvino␟Pen␟76␟1.99␟151.24␞2017-10-14␟West␟Thompson␟Binder␟57␟19.99␟1139.43␞2017-10-31␟Central␟Andrews␟Pencil␟14␟1.29␟18.06␞2017-11-17␟Central␟Jardine␟Binder␟11␟4.99␟54.89␞2017-12-04␟Central␟Jardine␟Binder␟94␟19.99␟1879.06␞2017-12-21␟Central␟Andrews␟Binder␟28␟4.99␟139.72␞"
  },
  {
    "path": "tests/golden/setcol_fake.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016-01-06\tEast\tPaula Rogers\tPencil\t95\t1.99\t189.05\n2016-01-23\tCentral\tPaul Lopez\tBinder\t50\t19.99\t999.50\n2016-02-09\tCentral\tShawn Johnson\tPencil\t36\t4.99\t179.64\n2016-02-26\tCentral\tJeffery Gutierrez\tPen\t27\t19.99\t539.73\n2016-03-15\tWest\tEduardo Rodriguez\tPencil\t56\t2.99\t167.44\n2016-04-01\tEast\tPaula Rogers\tBinder\t60\t4.99\t299.40\n2016-04-18\tCentral\tJoseph Cameron\tPencil\t75\t1.99\t149.25\n2016-05-05\tCentral\tShawn Johnson\tPencil\t90\t4.99\t449.10\n2016-05-22\tWest\tSteven Mayer\tPencil\t32\t1.99\t63.68\n2016-06-08\tEast\tPaula Rogers\tBinder\t60\t8.99\t539.40\n2016-06-25\tCentral\tCrystal Dyer\tPencil\t90\t4.99\t449.10\n2016-07-12\tEast\tKathryn Wood\tBinder\t29\t1.99\t57.71\n2016-07-29\tEast\tRobyn Massey\tBinder\t81\t19.99\t1619.19\n2016-08-15\tEast\tPaula Rogers\tPencil\t35\t4.99\t174.65\n2016-09-01\tCentral\tWilliam Beck\tDesk\t2\t125.00\t250.00\n2016-09-18\tEast\tPaula Rogers\tPen Set\t16\t15.99\t255.84\n2016-10-05\tCentral\tCrystal Dyer\tBinder\t28\t8.99\t251.72\n2016-10-22\tEast\tPaula Rogers\tPen\t64\t8.99\t575.36\n2016-11-08\tEast\tRobyn Massey\tPen\t15\t19.99\t299.85\n2016-11-25\tCentral\tPaul Lopez\tPen Set\t96\t4.99\t479.04\n2016-12-12\tCentral\tWilliam Beck\tPencil\t67\t1.29\t86.43\n2016-12-29\tEast\tRobyn Massey\tPen Set\t74\t15.99\t1183.26\n2017-01-15\tCentral\tJeffery Gutierrez\tBinder\t46\t8.99\t413.54\n2017-02-01\tCentral\tWilliam Beck\tBinder\t87\t15.00\t1305.00\n2017-02-18\tEast\tPaula Rogers\tBinder\t4\t4.99\t19.96\n2017-03-07\tWest\tEduardo Rodriguez\tBinder\t7\t19.99\t139.93\n2017-03-24\tCentral\tShawn Johnson\tPen Set\t50\t4.99\t249.50\n2017-04-10\tCentral\tJoseph Cameron\tPencil\t66\t1.99\t131.34\n2017-04-27\tEast\tKathryn Wood\tPen\t96\t4.99\t479.04\n2017-05-14\tCentral\tJeffery Gutierrez\tPencil\t53\t1.29\t68.37\n2017-05-31\tCentral\tJeffery Gutierrez\tBinder\t80\t8.99\t719.20\n2017-06-17\tCentral\tPaul Lopez\tDesk\t5\t125.00\t625.00\n2017-07-04\tEast\tPaula Rogers\tPen Set\t62\t4.99\t309.38\n2017-07-21\tCentral\tCrystal Dyer\tPen Set\t55\t12.49\t686.95\n2017-08-07\tCentral\tPaul Lopez\tPen Set\t42\t23.95\t1005.90\n2017-08-24\tWest\tEduardo Rodriguez\tDesk\t3\t275.00\t825.00\n2017-09-10\tCentral\tJeffery Gutierrez\tPencil\t7\t1.29\t9.03\n2017-09-27\tWest\tEduardo Rodriguez\tPen\t76\t1.99\t151.24\n2017-10-14\tWest\tSteven Mayer\tBinder\t57\t19.99\t1139.43\n2017-10-31\tCentral\tJoseph Cameron\tPencil\t14\t1.29\t18.06\n2017-11-17\tCentral\tShawn Johnson\tBinder\t11\t4.99\t54.89\n2017-12-04\tCentral\tShawn Johnson\tBinder\t94\t19.99\t1879.06\n2017-12-21\tCentral\tJoseph Cameron\tBinder\t28\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/setcol_precision_less.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016-01-06\tEast\tJones\tPencil\t95\t2.0\t189.05\n2016-01-23\tCentral\tKivell\tBinder\t50\t20.0\t999.50\n2016-02-09\tCentral\tJardine\tPencil\t36\t5.0\t179.64\n2016-02-26\tCentral\tGill\tPen\t27\t20.0\t539.73\n2016-03-15\tWest\tSorvino\tPencil\t56\t3.0\t167.44\n2016-04-01\tEast\tJones\tBinder\t60\t5.0\t299.40\n2016-04-18\tCentral\tAndrews\tPencil\t75\t2.0\t149.25\n2016-05-05\tCentral\tJardine\tPencil\t90\t5.0\t449.10\n2016-05-22\tWest\tThompson\tPencil\t32\t2.0\t63.68\n2016-06-08\tEast\tJones\tBinder\t60\t9.0\t539.40\n2016-06-25\tCentral\tMorgan\tPencil\t90\t5.0\t449.10\n2016-07-12\tEast\tHoward\tBinder\t29\t2.0\t57.71\n2016-07-29\tEast\tParent\tBinder\t81\t20.0\t1619.19\n2016-08-15\tEast\tJones\tPencil\t35\t5.0\t174.65\n2016-09-01\tCentral\tSmith\tDesk\t2\t125.0\t250.00\n2016-09-18\tEast\tJones\tPen Set\t16\t16.0\t255.84\n2016-10-05\tCentral\tMorgan\tBinder\t28\t9.0\t251.72\n2016-10-22\tEast\tJones\tPen\t64\t9.0\t575.36\n2016-11-08\tEast\tParent\tPen\t15\t20.0\t299.85\n2016-11-25\tCentral\tKivell\tPen Set\t96\t5.0\t479.04\n2016-12-12\tCentral\tSmith\tPencil\t67\t1.3\t86.43\n2016-12-29\tEast\tParent\tPen Set\t74\t16.0\t1183.26\n2017-01-15\tCentral\tGill\tBinder\t46\t9.0\t413.54\n2017-02-01\tCentral\tSmith\tBinder\t87\t15.0\t1305.00\n2017-02-18\tEast\tJones\tBinder\t4\t5.0\t19.96\n2017-03-07\tWest\tSorvino\tBinder\t7\t20.0\t139.93\n2017-03-24\tCentral\tJardine\tPen Set\t50\t5.0\t249.50\n2017-04-10\tCentral\tAndrews\tPencil\t66\t2.0\t131.34\n2017-04-27\tEast\tHoward\tPen\t96\t5.0\t479.04\n2017-05-14\tCentral\tGill\tPencil\t53\t1.3\t68.37\n2017-05-31\tCentral\tGill\tBinder\t80\t9.0\t719.20\n2017-06-17\tCentral\tKivell\tDesk\t5\t125.0\t625.00\n2017-07-04\tEast\tJones\tPen Set\t62\t5.0\t309.38\n2017-07-21\tCentral\tMorgan\tPen Set\t55\t12.5\t686.95\n2017-08-07\tCentral\tKivell\tPen Set\t42\t23.9\t1005.90\n2017-08-24\tWest\tSorvino\tDesk\t3\t275.0\t825.00\n2017-09-10\tCentral\tGill\tPencil\t7\t1.3\t9.03\n2017-09-27\tWest\tSorvino\tPen\t76\t2.0\t151.24\n2017-10-14\tWest\tThompson\tBinder\t57\t20.0\t1139.43\n2017-10-31\tCentral\tAndrews\tPencil\t14\t1.3\t18.06\n2017-11-17\tCentral\tJardine\tBinder\t11\t5.0\t54.89\n2017-12-04\tCentral\tJardine\tBinder\t94\t20.0\t1879.06\n2017-12-21\tCentral\tAndrews\tBinder\t28\t5.0\t139.72\n"
  },
  {
    "path": "tests/golden/setcol_precision_more.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016-01-06\tEast\tJones\tPencil\t95\t1.99\t189.050\n2016-01-23\tCentral\tKivell\tBinder\t50\t19.99\t999.500\n2016-02-09\tCentral\tJardine\tPencil\t36\t4.99\t179.640\n2016-02-26\tCentral\tGill\tPen\t27\t19.99\t539.730\n2016-03-15\tWest\tSorvino\tPencil\t56\t2.99\t167.440\n2016-04-01\tEast\tJones\tBinder\t60\t4.99\t299.400\n2016-04-18\tCentral\tAndrews\tPencil\t75\t1.99\t149.250\n2016-05-05\tCentral\tJardine\tPencil\t90\t4.99\t449.100\n2016-05-22\tWest\tThompson\tPencil\t32\t1.99\t63.680\n2016-06-08\tEast\tJones\tBinder\t60\t8.99\t539.400\n2016-06-25\tCentral\tMorgan\tPencil\t90\t4.99\t449.100\n2016-07-12\tEast\tHoward\tBinder\t29\t1.99\t57.710\n2016-07-29\tEast\tParent\tBinder\t81\t19.99\t1619.190\n2016-08-15\tEast\tJones\tPencil\t35\t4.99\t174.650\n2016-09-01\tCentral\tSmith\tDesk\t2\t125.00\t250.000\n2016-09-18\tEast\tJones\tPen Set\t16\t15.99\t255.840\n2016-10-05\tCentral\tMorgan\tBinder\t28\t8.99\t251.720\n2016-10-22\tEast\tJones\tPen\t64\t8.99\t575.360\n2016-11-08\tEast\tParent\tPen\t15\t19.99\t299.850\n2016-11-25\tCentral\tKivell\tPen Set\t96\t4.99\t479.040\n2016-12-12\tCentral\tSmith\tPencil\t67\t1.29\t86.430\n2016-12-29\tEast\tParent\tPen Set\t74\t15.99\t1183.260\n2017-01-15\tCentral\tGill\tBinder\t46\t8.99\t413.540\n2017-02-01\tCentral\tSmith\tBinder\t87\t15.00\t1305.000\n2017-02-18\tEast\tJones\tBinder\t4\t4.99\t19.960\n2017-03-07\tWest\tSorvino\tBinder\t7\t19.99\t139.930\n2017-03-24\tCentral\tJardine\tPen Set\t50\t4.99\t249.500\n2017-04-10\tCentral\tAndrews\tPencil\t66\t1.99\t131.340\n2017-04-27\tEast\tHoward\tPen\t96\t4.99\t479.040\n2017-05-14\tCentral\tGill\tPencil\t53\t1.29\t68.370\n2017-05-31\tCentral\tGill\tBinder\t80\t8.99\t719.200\n2017-06-17\tCentral\tKivell\tDesk\t5\t125.00\t625.000\n2017-07-04\tEast\tJones\tPen Set\t62\t4.99\t309.380\n2017-07-21\tCentral\tMorgan\tPen Set\t55\t12.49\t686.950\n2017-08-07\tCentral\tKivell\tPen Set\t42\t23.95\t1005.900\n2017-08-24\tWest\tSorvino\tDesk\t3\t275.00\t825.000\n2017-09-10\tCentral\tGill\tPencil\t7\t1.29\t9.030\n2017-09-27\tWest\tSorvino\tPen\t76\t1.99\t151.240\n2017-10-14\tWest\tThompson\tBinder\t57\t19.99\t1139.430\n2017-10-31\tCentral\tAndrews\tPencil\t14\t1.29\t18.060\n2017-11-17\tCentral\tJardine\tBinder\t11\t4.99\t54.890\n2017-12-04\tCentral\tJardine\tBinder\t94\t19.99\t1879.060\n2017-12-21\tCentral\tAndrews\tBinder\t28\t4.99\t139.720\n"
  },
  {
    "path": "tests/golden/sort-levels.tsv",
    "content": "primary\tsecondary\ttertiary\n1\t1\t1\n1\t1\t1\n1\t1\t1\n1\t1\t1\n1\t1\t1\n1\t1\t1\n1\t1\t1\n1\t1\t1\n1\t1\t1\n1\t1\t1\n1\t1\t1\n1\t1\t1\n1\t1\t1\n1\t3\t2\n1\t3\t2\n1\t3\t2\n1\t3\t2\n1\t3\t2\n1\t3\t2\n1\t3\t2\n1\t3\t2\n1\t3\t2\n1\t3\t2\n1\t3\t1\n1\t3\t1\n1\t3\t1\n2\t1\t3\n2\t1\t3\n2\t1\t3\n2\t1\t3\n2\t1\t3\n2\t1\t3\n2\t2\t4\n2\t2\t4\n2\t2\t4\n2\t2\t4\n2\t2\t4\n2\t2\t4\n2\t2\t4\n2\t2\t4\n2\t2\t4\n2\t2\t4\n2\t2\t3\n2\t2\t3\n2\t2\t3\n2\t2\t3\n2\t2\t3\n2\t3\t3\n2\t3\t2\n"
  },
  {
    "path": "tests/golden/sortorder.tsv",
    "content": "name\twidth\ttype\tfmtstr\tvalue\taggregators\tsortorder\nOrderDate\t12\t\t\t2017-10-31\t\t\nRegion\t9\t\t\tCentral\t\t\nRep\t10\t\t\tAndrews\t\t1\nItem\t9\t\t\tPencil\t\t-2\nUnits\t7\tint\t\t14\t\t3\nUnit_Cost\t11\t\t\t1.29\t\t\nTotal\t9\t\t\t18.06\t\t\n"
  },
  {
    "path": "tests/golden/sqlite_withoutrowid.tsv",
    "content": "id\tdatum\n1\tabc\n2\txyz\n"
  },
  {
    "path": "tests/golden/stdin-replay.tsv",
    "content": "\t\t\na\t1\t2\n"
  },
  {
    "path": "tests/golden/stdin.tsv",
    "content": "text\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150\n151\n152\n153\n154\n155\n156\n157\n158\n159\n160\n161\n162\n163\n164\n165\n166\n167\n168\n169\n170\n171\n172\n173\n174\n175\n176\n177\n178\n179\n180\n181\n182\n183\n184\n185\n186\n187\n188\n189\n190\n191\n192\n193\n194\n195\n196\n197\n198\n199\n200\n201\n202\n203\n204\n205\n206\n207\n208\n209\n210\n211\n212\n213\n214\n215\n216\n217\n218\n219\n220\n221\n222\n223\n224\n225\n226\n227\n228\n229\n230\n231\n232\n233\n234\n235\n236\n237\n238\n239\n240\n241\n242\n243\n244\n245\n246\n247\n248\n249\n250\n251\n252\n253\n254\n255\n256\n257\n258\n259\n260\n261\n262\n263\n264\n265\n266\n267\n268\n269\n270\n271\n272\n273\n274\n275\n276\n277\n278\n279\n280\n281\n282\n283\n284\n285\n286\n287\n288\n289\n290\n291\n292\n293\n294\n295\n296\n297\n298\n299\n300\n301\n302\n303\n304\n305\n306\n307\n308\n309\n310\n311\n312\n313\n314\n315\n316\n317\n318\n319\n320\n321\n322\n323\n324\n325\n326\n327\n328\n329\n330\n331\n332\n333\n334\n335\n336\n337\n338\n339\n340\n341\n342\n343\n344\n345\n346\n347\n348\n349\n350\n351\n352\n353\n354\n355\n356\n357\n358\n359\n360\n361\n362\n363\n364\n365\n366\n367\n368\n369\n370\n371\n372\n373\n374\n375\n376\n377\n378\n379\n380\n381\n382\n383\n384\n385\n386\n387\n388\n389\n390\n391\n392\n393\n394\n395\n396\n397\n398\n399\n400\n401\n402\n403\n404\n405\n406\n407\n408\n409\n410\n411\n412\n413\n414\n415\n416\n417\n418\n419\n420\n421\n422\n423\n424\n425\n426\n427\n428\n429\n430\n431\n432\n433\n434\n435\n436\n437\n438\n439\n440\n441\n442\n443\n444\n445\n446\n447\n448\n449\n450\n451\n452\n453\n454\n455\n456\n457\n458\n459\n460\n461\n462\n463\n464\n465\n466\n467\n468\n469\n470\n471\n472\n473\n474\n475\n476\n477\n478\n479\n480\n481\n482\n483\n484\n485\n486\n487\n488\n489\n490\n491\n492\n493\n494\n495\n496\n497\n498\n499\n500\n501\n502\n503\n504\n505\n506\n507\n508\n509\n510\n511\n512\n513\n514\n515\n516\n517\n518\n519\n520\n521\n522\n523\n524\n525\n526\n527\n528\n529\n530\n531\n532\n533\n534\n535\n536\n537\n538\n539\n540\n541\n542\n543\n544\n545\n546\n547\n548\n549\n550\n551\n552\n553\n554\n555\n556\n557\n558\n559\n560\n561\n562\n563\n564\n565\n566\n567\n568\n569\n570\n571\n572\n573\n574\n575\n576\n577\n578\n579\n580\n581\n582\n583\n584\n585\n586\n587\n588\n589\n590\n591\n592\n593\n594\n595\n596\n597\n598\n599\n600\n601\n602\n603\n604\n605\n606\n607\n608\n609\n610\n611\n612\n613\n614\n615\n616\n617\n618\n619\n620\n621\n622\n623\n624\n625\n626\n627\n628\n629\n630\n631\n632\n633\n634\n635\n636\n637\n638\n639\n640\n641\n642\n643\n644\n645\n646\n647\n648\n649\n650\n651\n652\n653\n654\n655\n656\n657\n658\n659\n660\n661\n662\n663\n664\n665\n666\n667\n668\n669\n670\n671\n672\n673\n674\n675\n676\n677\n678\n679\n680\n681\n682\n683\n684\n685\n686\n687\n688\n689\n690\n691\n692\n693\n694\n695\n696\n697\n698\n699\n700\n701\n702\n703\n704\n705\n706\n707\n708\n709\n710\n711\n712\n713\n714\n715\n716\n717\n718\n719\n720\n721\n722\n723\n724\n725\n726\n727\n728\n729\n730\n731\n732\n733\n734\n735\n736\n737\n738\n739\n740\n741\n742\n743\n744\n745\n746\n747\n748\n749\n750\n751\n752\n753\n754\n755\n756\n757\n758\n759\n760\n761\n762\n763\n764\n765\n766\n767\n768\n769\n770\n771\n772\n773\n774\n775\n776\n777\n778\n779\n780\n781\n782\n783\n784\n785\n786\n787\n788\n789\n790\n791\n792\n793\n794\n795\n796\n797\n798\n799\n800\n801\n802\n803\n804\n805\n806\n807\n808\n809\n810\n811\n812\n813\n814\n815\n816\n817\n818\n819\n820\n821\n822\n823\n824\n825\n826\n827\n828\n829\n830\n831\n832\n833\n834\n835\n836\n837\n838\n839\n840\n841\n842\n843\n844\n845\n846\n847\n848\n849\n850\n851\n852\n853\n854\n855\n856\n857\n858\n859\n860\n861\n862\n863\n864\n865\n866\n867\n868\n869\n870\n871\n872\n873\n874\n875\n876\n877\n878\n879\n880\n881\n882\n883\n884\n885\n886\n887\n888\n889\n890\n891\n892\n893\n894\n895\n896\n897\n898\n899\n900\n901\n902\n903\n904\n905\n906\n907\n908\n909\n910\n911\n912\n913\n914\n915\n916\n917\n918\n919\n920\n921\n922\n923\n924\n925\n926\n927\n928\n929\n930\n931\n932\n933\n934\n935\n936\n937\n938\n939\n940\n941\n942\n943\n944\n945\n946\n947\n948\n949\n950\n951\n952\n953\n954\n955\n956\n957\n958\n959\n960\n961\n962\n963\n964\n965\n966\n967\n968\n969\n970\n971\n972\n973\n974\n975\n976\n977\n978\n979\n980\n981\n982\n983\n984\n985\n986\n987\n988\n989\n990\n991\n992\n993\n994\n995\n996\n997\n998\n999\n1000\n1001\n1002\n1003\n1004\n1005\n1006\n1007\n1008\n1009\n1010\n1011\n1012\n1013\n1014\n1015\n1016\n1017\n1018\n1019\n1020\n1021\n1022\n1023\n1024\n1025\n1026\n1027\n1028\n1029\n1030\n1031\n1032\n1033\n1034\n1035\n1036\n1037\n1038\n1039\n1040\n1041\n1042\n1043\n1044\n1045\n1046\n1047\n1048\n1049\n1050\n1051\n1052\n1053\n1054\n1055\n1056\n1057\n1058\n1059\n1060\n1061\n1062\n1063\n1064\n1065\n1066\n1067\n1068\n1069\n1070\n1071\n1072\n1073\n1074\n1075\n1076\n1077\n1078\n1079\n1080\n1081\n1082\n1083\n1084\n1085\n1086\n1087\n1088\n1089\n1090\n1091\n1092\n1093\n1094\n1095\n1096\n1097\n1098\n1099\n1100\n1101\n1102\n1103\n1104\n1105\n1106\n1107\n1108\n1109\n1110\n1111\n1112\n1113\n1114\n1115\n1116\n1117\n1118\n1119\n1120\n1121\n1122\n1123\n1124\n1125\n1126\n1127\n1128\n1129\n1130\n1131\n1132\n1133\n1134\n1135\n1136\n1137\n1138\n1139\n1140\n1141\n1142\n1143\n1144\n1145\n1146\n1147\n1148\n1149\n1150\n1151\n1152\n1153\n1154\n1155\n1156\n1157\n1158\n1159\n1160\n1161\n1162\n1163\n1164\n1165\n1166\n1167\n1168\n1169\n1170\n1171\n1172\n1173\n1174\n1175\n1176\n1177\n1178\n1179\n1180\n1181\n1182\n1183\n1184\n1185\n1186\n1187\n1188\n1189\n1190\n1191\n1192\n1193\n1194\n1195\n1196\n1197\n1198\n1199\n1200\n1201\n1202\n1203\n1204\n1205\n1206\n1207\n1208\n1209\n1210\n1211\n1212\n1213\n1214\n1215\n1216\n1217\n1218\n1219\n1220\n1221\n1222\n1223\n1224\n1225\n1226\n1227\n1228\n1229\n1230\n1231\n1232\n1233\n1234\n1235\n1236\n1237\n1238\n1239\n1240\n1241\n1242\n1243\n1244\n1245\n1246\n1247\n1248\n1249\n1250\n1251\n1252\n1253\n1254\n1255\n1256\n1257\n1258\n1259\n1260\n1261\n1262\n1263\n1264\n1265\n1266\n1267\n1268\n1269\n1270\n1271\n1272\n1273\n1274\n1275\n1276\n1277\n1278\n1279\n1280\n1281\n1282\n1283\n1284\n1285\n1286\n1287\n1288\n1289\n1290\n1291\n1292\n1293\n1294\n1295\n1296\n1297\n1298\n1299\n1300\n1301\n1302\n1303\n1304\n1305\n1306\n1307\n1308\n1309\n1310\n1311\n1312\n1313\n1314\n1315\n1316\n1317\n1318\n1319\n1320\n1321\n1322\n1323\n1324\n1325\n1326\n1327\n1328\n1329\n1330\n1331\n1332\n1333\n1334\n1335\n1336\n1337\n1338\n1339\n1340\n1341\n1342\n1343\n1344\n1345\n1346\n1347\n1348\n1349\n1350\n1351\n1352\n1353\n1354\n1355\n1356\n1357\n1358\n1359\n1360\n1361\n1362\n1363\n1364\n1365\n1366\n1367\n1368\n1369\n1370\n1371\n1372\n1373\n1374\n1375\n1376\n1377\n1378\n1379\n1380\n1381\n1382\n1383\n1384\n1385\n1386\n1387\n1388\n1389\n1390\n1391\n1392\n1393\n1394\n1395\n1396\n1397\n1398\n1399\n1400\n1401\n1402\n1403\n1404\n1405\n1406\n1407\n1408\n1409\n1410\n1411\n1412\n1413\n1414\n1415\n1416\n1417\n1418\n1419\n1420\n1421\n1422\n1423\n1424\n1425\n1426\n1427\n1428\n1429\n1430\n1431\n1432\n1433\n1434\n1435\n1436\n1437\n1438\n1439\n1440\n1441\n1442\n1443\n1444\n1445\n1446\n1447\n1448\n1449\n1450\n1451\n1452\n1453\n1454\n1455\n1456\n1457\n1458\n1459\n1460\n1461\n1462\n1463\n1464\n1465\n1466\n1467\n1468\n1469\n1470\n1471\n1472\n1473\n1474\n1475\n1476\n1477\n1478\n1479\n1480\n1481\n1482\n1483\n1484\n1485\n1486\n1487\n1488\n1489\n1490\n1491\n1492\n1493\n1494\n1495\n1496\n1497\n1498\n1499\n1500\n1501\n1502\n1503\n1504\n1505\n1506\n1507\n1508\n1509\n1510\n1511\n1512\n1513\n1514\n1515\n1516\n1517\n1518\n1519\n1520\n1521\n1522\n1523\n1524\n1525\n1526\n1527\n1528\n1529\n1530\n1531\n1532\n1533\n1534\n1535\n1536\n1537\n1538\n1539\n1540\n1541\n1542\n1543\n1544\n1545\n1546\n1547\n1548\n1549\n1550\n1551\n1552\n1553\n1554\n1555\n1556\n1557\n1558\n1559\n1560\n1561\n1562\n1563\n1564\n1565\n1566\n1567\n1568\n1569\n1570\n1571\n1572\n1573\n1574\n1575\n1576\n1577\n1578\n1579\n1580\n1581\n1582\n1583\n1584\n1585\n1586\n1587\n1588\n1589\n1590\n1591\n1592\n1593\n1594\n1595\n1596\n1597\n1598\n1599\n1600\n1601\n1602\n1603\n1604\n1605\n1606\n1607\n1608\n1609\n1610\n1611\n1612\n1613\n1614\n1615\n1616\n1617\n1618\n1619\n1620\n1621\n1622\n1623\n1624\n1625\n1626\n1627\n1628\n1629\n1630\n1631\n1632\n1633\n1634\n1635\n1636\n1637\n1638\n1639\n1640\n1641\n1642\n1643\n1644\n1645\n1646\n1647\n1648\n1649\n1650\n1651\n1652\n1653\n1654\n1655\n1656\n1657\n1658\n1659\n1660\n1661\n1662\n1663\n1664\n1665\n1666\n1667\n1668\n1669\n1670\n1671\n1672\n1673\n1674\n1675\n1676\n1677\n1678\n1679\n1680\n1681\n1682\n1683\n1684\n1685\n1686\n1687\n1688\n1689\n1690\n1691\n1692\n1693\n1694\n1695\n1696\n1697\n1698\n1699\n1700\n1701\n1702\n1703\n1704\n1705\n1706\n1707\n1708\n1709\n1710\n1711\n1712\n1713\n1714\n1715\n1716\n1717\n1718\n1719\n1720\n1721\n1722\n1723\n1724\n1725\n1726\n1727\n1728\n1729\n1730\n1731\n1732\n1733\n1734\n1735\n1736\n1737\n1738\n1739\n1740\n1741\n1742\n1743\n1744\n1745\n1746\n1747\n1748\n1749\n1750\n1751\n1752\n1753\n1754\n1755\n1756\n1757\n1758\n1759\n1760\n1761\n1762\n1763\n1764\n1765\n1766\n1767\n1768\n1769\n1770\n1771\n1772\n1773\n1774\n1775\n1776\n1777\n1778\n1779\n1780\n1781\n1782\n1783\n1784\n1785\n1786\n1787\n1788\n1789\n1790\n1791\n1792\n1793\n1794\n1795\n1796\n1797\n1798\n1799\n1800\n1801\n1802\n1803\n1804\n1805\n1806\n1807\n1808\n1809\n1810\n1811\n1812\n1813\n1814\n1815\n1816\n1817\n1818\n1819\n1820\n1821\n1822\n1823\n1824\n1825\n1826\n1827\n1828\n1829\n1830\n1831\n1832\n1833\n1834\n1835\n1836\n1837\n1838\n1839\n1840\n1841\n1842\n1843\n1844\n1845\n1846\n1847\n1848\n1849\n1850\n1851\n1852\n1853\n1854\n1855\n1856\n1857\n1858\n1859\n1860\n1861\n1862\n1863\n1864\n1865\n1866\n1867\n1868\n1869\n1870\n1871\n1872\n1873\n1874\n1875\n1876\n1877\n1878\n1879\n1880\n1881\n1882\n1883\n1884\n1885\n1886\n1887\n1888\n1889\n1890\n1891\n1892\n1893\n1894\n1895\n1896\n1897\n1898\n1899\n1900\n1901\n1902\n1903\n1904\n1905\n1906\n1907\n1908\n1909\n1910\n1911\n1912\n1913\n1914\n1915\n1916\n1917\n1918\n1919\n1920\n1921\n1922\n1923\n1924\n1925\n1926\n1927\n1928\n1929\n1930\n1931\n1932\n1933\n1934\n1935\n1936\n1937\n1938\n1939\n1940\n1941\n1942\n1943\n1944\n1945\n1946\n1947\n1948\n1949\n1950\n1951\n1952\n1953\n1954\n1955\n1956\n1957\n1958\n1959\n1960\n1961\n1962\n1963\n1964\n1965\n1966\n1967\n1968\n1969\n1970\n1971\n1972\n1973\n1974\n1975\n1976\n1977\n1978\n1979\n1980\n1981\n1982\n1983\n1984\n1985\n1986\n1987\n1988\n1989\n1990\n1991\n1992\n1993\n1994\n1995\n1996\n1997\n1998\n1999\n2000\n2001\n2002\n2003\n2004\n2005\n2006\n2007\n2008\n2009\n2010\n2011\n2012\n2013\n2014\n2015\n2016\n2017\n2018\n2019\n2020\n2021\n2022\n2023\n2024\n2025\n2026\n2027\n2028\n2029\n2030\n2031\n2032\n2033\n2034\n2035\n2036\n2037\n2038\n2039\n2040\n2041\n2042\n2043\n2044\n2045\n2046\n2047\n2048\n2049\n2050\n2051\n2052\n2053\n2054\n2055\n2056\n2057\n2058\n2059\n2060\n2061\n2062\n2063\n2064\n2065\n2066\n2067\n2068\n2069\n2070\n2071\n2072\n2073\n2074\n2075\n2076\n2077\n2078\n2079\n2080\n2081\n2082\n2083\n2084\n2085\n2086\n2087\n2088\n2089\n2090\n2091\n2092\n2093\n2094\n2095\n2096\n2097\n2098\n2099\n2100\n2101\n2102\n2103\n2104\n2105\n2106\n2107\n2108\n2109\n2110\n2111\n2112\n2113\n2114\n2115\n2116\n2117\n2118\n2119\n2120\n2121\n2122\n2123\n2124\n2125\n2126\n2127\n2128\n2129\n2130\n2131\n2132\n2133\n2134\n2135\n2136\n2137\n2138\n2139\n2140\n2141\n2142\n2143\n2144\n2145\n2146\n2147\n2148\n2149\n2150\n2151\n2152\n2153\n2154\n2155\n2156\n2157\n2158\n2159\n2160\n2161\n2162\n2163\n2164\n2165\n2166\n2167\n2168\n2169\n2170\n2171\n2172\n2173\n2174\n2175\n2176\n2177\n2178\n2179\n2180\n2181\n2182\n2183\n2184\n2185\n2186\n2187\n2188\n2189\n2190\n2191\n2192\n2193\n2194\n2195\n2196\n2197\n2198\n2199\n2200\n2201\n2202\n2203\n2204\n2205\n2206\n2207\n2208\n2209\n2210\n2211\n2212\n2213\n2214\n2215\n2216\n2217\n2218\n2219\n2220\n2221\n2222\n2223\n2224\n2225\n2226\n2227\n2228\n2229\n2230\n2231\n2232\n2233\n2234\n2235\n2236\n2237\n2238\n2239\n2240\n2241\n2242\n2243\n2244\n2245\n2246\n2247\n2248\n2249\n2250\n2251\n2252\n2253\n2254\n2255\n2256\n2257\n2258\n2259\n2260\n2261\n2262\n2263\n2264\n2265\n2266\n2267\n2268\n2269\n2270\n2271\n2272\n2273\n2274\n2275\n2276\n2277\n2278\n2279\n2280\n2281\n2282\n2283\n2284\n2285\n2286\n2287\n2288\n2289\n2290\n2291\n2292\n2293\n2294\n2295\n2296\n2297\n2298\n2299\n2300\n2301\n2302\n2303\n2304\n2305\n2306\n2307\n2308\n2309\n2310\n2311\n2312\n2313\n2314\n2315\n2316\n2317\n2318\n2319\n2320\n2321\n2322\n2323\n2324\n2325\n2326\n2327\n2328\n2329\n2330\n2331\n2332\n2333\n2334\n2335\n2336\n2337\n2338\n2339\n2340\n2341\n2342\n2343\n2344\n2345\n2346\n2347\n2348\n2349\n2350\n2351\n2352\n2353\n2354\n2355\n2356\n2357\n2358\n2359\n2360\n2361\n2362\n2363\n2364\n2365\n2366\n2367\n2368\n2369\n2370\n2371\n2372\n2373\n2374\n2375\n2376\n2377\n2378\n2379\n2380\n2381\n2382\n2383\n2384\n2385\n2386\n2387\n2388\n2389\n2390\n2391\n2392\n2393\n2394\n2395\n2396\n2397\n2398\n2399\n2400\n2401\n2402\n2403\n2404\n2405\n2406\n2407\n2408\n2409\n2410\n2411\n2412\n2413\n2414\n2415\n2416\n2417\n2418\n2419\n2420\n2421\n2422\n2423\n2424\n2425\n2426\n2427\n2428\n2429\n2430\n2431\n2432\n2433\n2434\n2435\n2436\n2437\n2438\n2439\n2440\n2441\n2442\n2443\n2444\n2445\n2446\n2447\n2448\n2449\n2450\n2451\n2452\n2453\n2454\n2455\n2456\n2457\n2458\n2459\n2460\n2461\n2462\n2463\n2464\n2465\n2466\n2467\n2468\n2469\n2470\n2471\n2472\n2473\n2474\n2475\n2476\n2477\n2478\n2479\n2480\n2481\n2482\n2483\n2484\n2485\n2486\n2487\n2488\n2489\n2490\n2491\n2492\n2493\n2494\n2495\n2496\n2497\n2498\n2499\n2500\n2501\n2502\n2503\n2504\n2505\n2506\n2507\n2508\n2509\n2510\n2511\n2512\n2513\n2514\n2515\n2516\n2517\n2518\n2519\n2520\n2521\n2522\n2523\n2524\n2525\n2526\n2527\n2528\n2529\n2530\n2531\n2532\n2533\n2534\n2535\n2536\n2537\n2538\n2539\n2540\n2541\n2542\n2543\n2544\n2545\n2546\n2547\n2548\n2549\n2550\n2551\n2552\n2553\n2554\n2555\n2556\n2557\n2558\n2559\n2560\n2561\n2562\n2563\n2564\n2565\n2566\n2567\n2568\n2569\n2570\n2571\n2572\n2573\n2574\n2575\n2576\n2577\n2578\n2579\n2580\n2581\n2582\n2583\n2584\n2585\n2586\n2587\n2588\n2589\n2590\n2591\n2592\n2593\n2594\n2595\n2596\n2597\n2598\n2599\n2600\n2601\n2602\n2603\n2604\n2605\n2606\n2607\n2608\n2609\n2610\n2611\n2612\n2613\n2614\n2615\n2616\n2617\n2618\n2619\n2620\n2621\n2622\n2623\n2624\n2625\n2626\n2627\n2628\n2629\n2630\n2631\n2632\n2633\n2634\n2635\n2636\n2637\n2638\n2639\n2640\n2641\n2642\n2643\n2644\n2645\n2646\n2647\n2648\n2649\n2650\n2651\n2652\n2653\n2654\n2655\n2656\n2657\n2658\n2659\n2660\n2661\n2662\n2663\n2664\n2665\n2666\n2667\n2668\n2669\n2670\n2671\n2672\n2673\n2674\n2675\n2676\n2677\n2678\n2679\n2680\n2681\n2682\n2683\n2684\n2685\n2686\n2687\n2688\n2689\n2690\n2691\n2692\n2693\n2694\n2695\n2696\n2697\n2698\n2699\n2700\n2701\n2702\n2703\n2704\n2705\n2706\n2707\n2708\n2709\n2710\n2711\n2712\n2713\n2714\n2715\n2716\n2717\n2718\n2719\n2720\n2721\n2722\n2723\n2724\n2725\n2726\n2727\n2728\n2729\n2730\n2731\n2732\n2733\n2734\n2735\n2736\n2737\n2738\n2739\n2740\n2741\n2742\n2743\n2744\n2745\n2746\n2747\n2748\n2749\n2750\n2751\n2752\n2753\n2754\n2755\n2756\n2757\n2758\n2759\n2760\n2761\n2762\n2763\n2764\n2765\n2766\n2767\n2768\n2769\n2770\n2771\n2772\n2773\n2774\n2775\n2776\n2777\n2778\n2779\n2780\n2781\n2782\n2783\n2784\n2785\n2786\n2787\n2788\n2789\n2790\n2791\n2792\n2793\n2794\n2795\n2796\n2797\n2798\n2799\n2800\n2801\n2802\n2803\n2804\n2805\n2806\n2807\n2808\n2809\n2810\n2811\n2812\n2813\n2814\n2815\n2816\n2817\n2818\n2819\n2820\n2821\n2822\n2823\n2824\n2825\n2826\n2827\n2828\n2829\n2830\n2831\n2832\n2833\n2834\n2835\n2836\n2837\n2838\n2839\n2840\n2841\n2842\n2843\n2844\n2845\n2846\n2847\n2848\n2849\n2850\n2851\n2852\n2853\n2854\n2855\n2856\n2857\n2858\n2859\n2860\n2861\n2862\n2863\n2864\n2865\n2866\n2867\n2868\n2869\n2870\n2871\n2872\n2873\n2874\n2875\n2876\n2877\n2878\n2879\n2880\n2881\n2882\n2883\n2884\n2885\n2886\n2887\n2888\n2889\n2890\n2891\n2892\n2893\n2894\n2895\n2896\n2897\n2898\n2899\n2900\n2901\n2902\n2903\n2904\n2905\n2906\n2907\n2908\n2909\n2910\n2911\n2912\n2913\n2914\n2915\n2916\n2917\n2918\n2919\n2920\n2921\n2922\n2923\n2924\n2925\n2926\n2927\n2928\n2929\n2930\n2931\n2932\n2933\n2934\n2935\n2936\n2937\n2938\n2939\n2940\n2941\n2942\n2943\n2944\n2945\n2946\n2947\n2948\n2949\n2950\n2951\n2952\n2953\n2954\n2955\n2956\n2957\n2958\n2959\n2960\n2961\n2962\n2963\n2964\n2965\n2966\n2967\n2968\n2969\n2970\n2971\n2972\n2973\n2974\n2975\n2976\n2977\n2978\n2979\n2980\n2981\n2982\n2983\n2984\n2985\n2986\n2987\n2988\n2989\n2990\n2991\n2992\n2993\n2994\n2995\n2996\n2997\n2998\n2999\n3000\n3001\n3002\n3003\n3004\n3005\n3006\n3007\n3008\n3009\n3010\n3011\n3012\n3013\n3014\n3015\n3016\n3017\n3018\n3019\n3020\n3021\n3022\n3023\n3024\n3025\n3026\n3027\n3028\n3029\n3030\n3031\n3032\n3033\n3034\n3035\n3036\n3037\n3038\n3039\n3040\n3041\n3042\n3043\n3044\n3045\n3046\n3047\n3048\n3049\n3050\n3051\n3052\n3053\n3054\n3055\n3056\n3057\n3058\n3059\n3060\n3061\n3062\n3063\n3064\n3065\n3066\n3067\n3068\n3069\n3070\n3071\n3072\n3073\n3074\n3075\n3076\n3077\n3078\n3079\n3080\n3081\n3082\n3083\n3084\n3085\n3086\n3087\n3088\n3089\n3090\n3091\n3092\n3093\n3094\n3095\n3096\n3097\n3098\n3099\n3100\n3101\n3102\n3103\n3104\n3105\n3106\n3107\n3108\n3109\n3110\n3111\n3112\n3113\n3114\n3115\n3116\n3117\n3118\n3119\n3120\n3121\n3122\n3123\n3124\n3125\n3126\n3127\n3128\n3129\n3130\n3131\n3132\n3133\n3134\n3135\n3136\n3137\n3138\n3139\n3140\n3141\n3142\n3143\n3144\n3145\n3146\n3147\n3148\n3149\n3150\n3151\n3152\n3153\n3154\n3155\n3156\n3157\n3158\n3159\n3160\n3161\n3162\n3163\n3164\n3165\n3166\n3167\n3168\n3169\n3170\n3171\n3172\n3173\n3174\n3175\n3176\n3177\n3178\n3179\n3180\n3181\n3182\n3183\n3184\n3185\n3186\n3187\n3188\n3189\n3190\n3191\n3192\n3193\n3194\n3195\n3196\n3197\n3198\n3199\n3200\n3201\n3202\n3203\n3204\n3205\n3206\n3207\n3208\n3209\n3210\n3211\n3212\n3213\n3214\n3215\n3216\n3217\n3218\n3219\n3220\n3221\n3222\n3223\n3224\n3225\n3226\n3227\n3228\n3229\n3230\n3231\n3232\n3233\n3234\n3235\n3236\n3237\n3238\n3239\n3240\n3241\n3242\n3243\n3244\n3245\n3246\n3247\n3248\n3249\n3250\n3251\n3252\n3253\n3254\n3255\n3256\n3257\n3258\n3259\n3260\n3261\n3262\n3263\n3264\n3265\n3266\n3267\n3268\n3269\n3270\n3271\n3272\n3273\n3274\n3275\n3276\n3277\n3278\n3279\n3280\n3281\n3282\n3283\n3284\n3285\n3286\n3287\n3288\n3289\n3290\n3291\n3292\n3293\n3294\n3295\n3296\n3297\n3298\n3299\n3300\n3301\n3302\n3303\n3304\n3305\n3306\n3307\n3308\n3309\n3310\n3311\n3312\n3313\n3314\n3315\n3316\n3317\n3318\n3319\n3320\n3321\n3322\n3323\n3324\n3325\n3326\n3327\n3328\n3329\n3330\n3331\n3332\n3333\n3334\n3335\n3336\n3337\n3338\n3339\n3340\n3341\n3342\n3343\n3344\n3345\n3346\n3347\n3348\n3349\n3350\n3351\n3352\n3353\n3354\n3355\n3356\n3357\n3358\n3359\n3360\n3361\n3362\n3363\n3364\n3365\n3366\n3367\n3368\n3369\n3370\n3371\n3372\n3373\n3374\n3375\n3376\n3377\n3378\n3379\n3380\n3381\n3382\n3383\n3384\n3385\n3386\n3387\n3388\n3389\n3390\n3391\n3392\n3393\n3394\n3395\n3396\n3397\n3398\n3399\n3400\n3401\n3402\n3403\n3404\n3405\n3406\n3407\n3408\n3409\n3410\n3411\n3412\n3413\n3414\n3415\n3416\n3417\n3418\n3419\n3420\n3421\n3422\n3423\n3424\n3425\n3426\n3427\n3428\n3429\n3430\n3431\n3432\n3433\n3434\n3435\n3436\n3437\n3438\n3439\n3440\n3441\n3442\n3443\n3444\n3445\n3446\n3447\n3448\n3449\n3450\n3451\n3452\n3453\n3454\n3455\n3456\n3457\n3458\n3459\n3460\n3461\n3462\n3463\n3464\n3465\n3466\n3467\n3468\n3469\n3470\n3471\n3472\n3473\n3474\n3475\n3476\n3477\n3478\n3479\n3480\n3481\n3482\n3483\n3484\n3485\n3486\n3487\n3488\n3489\n3490\n3491\n3492\n3493\n3494\n3495\n3496\n3497\n3498\n3499\n3500\n3501\n3502\n3503\n3504\n3505\n3506\n3507\n3508\n3509\n3510\n3511\n3512\n3513\n3514\n3515\n3516\n3517\n3518\n3519\n3520\n3521\n3522\n3523\n3524\n3525\n3526\n3527\n3528\n3529\n3530\n3531\n3532\n3533\n3534\n3535\n3536\n3537\n3538\n3539\n3540\n3541\n3542\n3543\n3544\n3545\n3546\n3547\n3548\n3549\n3550\n3551\n3552\n3553\n3554\n3555\n3556\n3557\n3558\n3559\n3560\n3561\n3562\n3563\n3564\n3565\n3566\n3567\n3568\n3569\n3570\n3571\n3572\n3573\n3574\n3575\n3576\n3577\n3578\n3579\n3580\n3581\n3582\n3583\n3584\n3585\n3586\n3587\n3588\n3589\n3590\n3591\n3592\n3593\n3594\n3595\n3596\n3597\n3598\n3599\n3600\n3601\n3602\n3603\n3604\n3605\n3606\n3607\n3608\n3609\n3610\n3611\n3612\n3613\n3614\n3615\n3616\n3617\n3618\n3619\n3620\n3621\n3622\n3623\n3624\n3625\n3626\n3627\n3628\n3629\n3630\n3631\n3632\n3633\n3634\n3635\n3636\n3637\n3638\n3639\n3640\n3641\n3642\n3643\n3644\n3645\n3646\n3647\n3648\n3649\n3650\n3651\n3652\n3653\n3654\n3655\n3656\n3657\n3658\n3659\n3660\n3661\n3662\n3663\n3664\n3665\n3666\n3667\n3668\n3669\n3670\n3671\n3672\n3673\n3674\n3675\n3676\n3677\n3678\n3679\n3680\n3681\n3682\n3683\n3684\n3685\n3686\n3687\n3688\n3689\n3690\n3691\n3692\n3693\n3694\n3695\n3696\n3697\n3698\n3699\n3700\n3701\n3702\n3703\n3704\n3705\n3706\n3707\n3708\n3709\n3710\n3711\n3712\n3713\n3714\n3715\n3716\n3717\n3718\n3719\n3720\n3721\n3722\n3723\n3724\n3725\n3726\n3727\n3728\n3729\n3730\n3731\n3732\n3733\n3734\n3735\n3736\n3737\n3738\n3739\n3740\n3741\n3742\n3743\n3744\n3745\n3746\n3747\n3748\n3749\n3750\n3751\n3752\n3753\n3754\n3755\n3756\n3757\n3758\n3759\n3760\n3761\n3762\n3763\n3764\n3765\n3766\n3767\n3768\n3769\n3770\n3771\n3772\n3773\n3774\n3775\n3776\n3777\n3778\n3779\n3780\n3781\n3782\n3783\n3784\n3785\n3786\n3787\n3788\n3789\n3790\n3791\n3792\n3793\n3794\n3795\n3796\n3797\n3798\n3799\n3800\n3801\n3802\n3803\n3804\n3805\n3806\n3807\n3808\n3809\n3810\n3811\n3812\n3813\n3814\n3815\n3816\n3817\n3818\n3819\n3820\n3821\n3822\n3823\n3824\n3825\n3826\n3827\n3828\n3829\n3830\n3831\n3832\n3833\n3834\n3835\n3836\n3837\n3838\n3839\n3840\n3841\n3842\n3843\n3844\n3845\n3846\n3847\n3848\n3849\n3850\n3851\n3852\n3853\n3854\n3855\n3856\n3857\n3858\n3859\n3860\n3861\n3862\n3863\n3864\n3865\n3866\n3867\n3868\n3869\n3870\n3871\n3872\n3873\n3874\n3875\n3876\n3877\n3878\n3879\n3880\n3881\n3882\n3883\n3884\n3885\n3886\n3887\n3888\n3889\n3890\n3891\n3892\n3893\n3894\n3895\n3896\n3897\n3898\n3899\n3900\n3901\n3902\n3903\n3904\n3905\n3906\n3907\n3908\n3909\n3910\n3911\n3912\n3913\n3914\n3915\n3916\n3917\n3918\n3919\n3920\n3921\n3922\n3923\n3924\n3925\n3926\n3927\n3928\n3929\n3930\n3931\n3932\n3933\n3934\n3935\n3936\n3937\n3938\n3939\n3940\n3941\n3942\n3943\n3944\n3945\n3946\n3947\n3948\n3949\n3950\n3951\n3952\n3953\n3954\n3955\n3956\n3957\n3958\n3959\n3960\n3961\n3962\n3963\n3964\n3965\n3966\n3967\n3968\n3969\n3970\n3971\n3972\n3973\n3974\n3975\n3976\n3977\n3978\n3979\n3980\n3981\n3982\n3983\n3984\n3985\n3986\n3987\n3988\n3989\n3990\n3991\n3992\n3993\n3994\n3995\n3996\n3997\n3998\n3999\n4000\n4001\n4002\n4003\n4004\n4005\n4006\n4007\n4008\n4009\n4010\n4011\n4012\n4013\n4014\n4015\n4016\n4017\n4018\n4019\n4020\n4021\n4022\n4023\n4024\n4025\n4026\n4027\n4028\n4029\n4030\n4031\n4032\n4033\n4034\n4035\n4036\n4037\n4038\n4039\n4040\n4041\n4042\n4043\n4044\n4045\n4046\n4047\n4048\n4049\n4050\n4051\n4052\n4053\n4054\n4055\n4056\n4057\n4058\n4059\n4060\n4061\n4062\n4063\n4064\n4065\n4066\n4067\n4068\n4069\n4070\n4071\n4072\n4073\n4074\n4075\n4076\n4077\n4078\n4079\n4080\n4081\n4082\n4083\n4084\n4085\n4086\n4087\n4088\n4089\n4090\n4091\n4092\n4093\n4094\n4095\n4096\n4097\n4098\n4099\n4100\n4101\n4102\n4103\n4104\n4105\n4106\n4107\n4108\n4109\n4110\n4111\n4112\n4113\n4114\n4115\n4116\n4117\n4118\n4119\n4120\n4121\n4122\n4123\n4124\n4125\n4126\n4127\n4128\n4129\n4130\n4131\n4132\n4133\n4134\n4135\n4136\n4137\n4138\n4139\n4140\n4141\n4142\n4143\n4144\n4145\n4146\n4147\n4148\n4149\n4150\n4151\n4152\n4153\n4154\n4155\n4156\n4157\n4158\n4159\n4160\n4161\n4162\n4163\n4164\n4165\n4166\n4167\n4168\n4169\n4170\n4171\n4172\n4173\n4174\n4175\n4176\n4177\n4178\n4179\n4180\n4181\n4182\n4183\n4184\n4185\n4186\n4187\n4188\n4189\n4190\n4191\n4192\n4193\n4194\n4195\n4196\n4197\n4198\n4199\n4200\n4201\n4202\n4203\n4204\n4205\n4206\n4207\n4208\n4209\n4210\n4211\n4212\n4213\n4214\n4215\n4216\n4217\n4218\n4219\n4220\n4221\n4222\n4223\n4224\n4225\n4226\n4227\n4228\n4229\n4230\n4231\n4232\n4233\n4234\n4235\n4236\n4237\n4238\n4239\n4240\n4241\n4242\n4243\n4244\n4245\n4246\n4247\n4248\n4249\n4250\n4251\n4252\n4253\n4254\n4255\n4256\n4257\n4258\n4259\n4260\n4261\n4262\n4263\n4264\n4265\n4266\n4267\n4268\n4269\n4270\n4271\n4272\n4273\n4274\n4275\n4276\n4277\n4278\n4279\n4280\n4281\n4282\n4283\n4284\n4285\n4286\n4287\n4288\n4289\n4290\n4291\n4292\n4293\n4294\n4295\n4296\n4297\n4298\n4299\n4300\n4301\n4302\n4303\n4304\n4305\n4306\n4307\n4308\n4309\n4310\n4311\n4312\n4313\n4314\n4315\n4316\n4317\n4318\n4319\n4320\n4321\n4322\n4323\n4324\n4325\n4326\n4327\n4328\n4329\n4330\n4331\n4332\n4333\n4334\n4335\n4336\n4337\n4338\n4339\n4340\n4341\n4342\n4343\n4344\n4345\n4346\n4347\n4348\n4349\n4350\n4351\n4352\n4353\n4354\n4355\n4356\n4357\n4358\n4359\n4360\n4361\n4362\n4363\n4364\n4365\n4366\n4367\n4368\n4369\n4370\n4371\n4372\n4373\n4374\n4375\n4376\n4377\n4378\n4379\n4380\n4381\n4382\n4383\n4384\n4385\n4386\n4387\n4388\n4389\n4390\n4391\n4392\n4393\n4394\n4395\n4396\n4397\n4398\n4399\n4400\n4401\n4402\n4403\n4404\n4405\n4406\n4407\n4408\n4409\n4410\n4411\n4412\n4413\n4414\n4415\n4416\n4417\n4418\n4419\n4420\n4421\n4422\n4423\n4424\n4425\n4426\n4427\n4428\n4429\n4430\n4431\n4432\n4433\n4434\n4435\n4436\n4437\n4438\n4439\n4440\n4441\n4442\n4443\n4444\n4445\n4446\n4447\n4448\n4449\n4450\n4451\n4452\n4453\n4454\n4455\n4456\n4457\n4458\n4459\n4460\n4461\n4462\n4463\n4464\n4465\n4466\n4467\n4468\n4469\n4470\n4471\n4472\n4473\n4474\n4475\n4476\n4477\n4478\n4479\n4480\n4481\n4482\n4483\n4484\n4485\n4486\n4487\n4488\n4489\n4490\n4491\n4492\n4493\n4494\n4495\n4496\n4497\n4498\n4499\n4500\n4501\n4502\n4503\n4504\n4505\n4506\n4507\n4508\n4509\n4510\n4511\n4512\n4513\n4514\n4515\n4516\n4517\n4518\n4519\n4520\n4521\n4522\n4523\n4524\n4525\n4526\n4527\n4528\n4529\n4530\n4531\n4532\n4533\n4534\n4535\n4536\n4537\n4538\n4539\n4540\n4541\n4542\n4543\n4544\n4545\n4546\n4547\n4548\n4549\n4550\n4551\n4552\n4553\n4554\n4555\n4556\n4557\n4558\n4559\n4560\n4561\n4562\n4563\n4564\n4565\n4566\n4567\n4568\n4569\n4570\n4571\n4572\n4573\n4574\n4575\n4576\n4577\n4578\n4579\n4580\n4581\n4582\n4583\n4584\n4585\n4586\n4587\n4588\n4589\n4590\n4591\n4592\n4593\n4594\n4595\n4596\n4597\n4598\n4599\n4600\n4601\n4602\n4603\n4604\n4605\n4606\n4607\n4608\n4609\n4610\n4611\n4612\n4613\n4614\n4615\n4616\n4617\n4618\n4619\n4620\n4621\n4622\n4623\n4624\n4625\n4626\n4627\n4628\n4629\n4630\n4631\n4632\n4633\n4634\n4635\n4636\n4637\n4638\n4639\n4640\n4641\n4642\n4643\n4644\n4645\n4646\n4647\n4648\n4649\n4650\n4651\n4652\n4653\n4654\n4655\n4656\n4657\n4658\n4659\n4660\n4661\n4662\n4663\n4664\n4665\n4666\n4667\n4668\n4669\n4670\n4671\n4672\n4673\n4674\n4675\n4676\n4677\n4678\n4679\n4680\n4681\n4682\n4683\n4684\n4685\n4686\n4687\n4688\n4689\n4690\n4691\n4692\n4693\n4694\n4695\n4696\n4697\n4698\n4699\n4700\n4701\n4702\n4703\n4704\n4705\n4706\n4707\n4708\n4709\n4710\n4711\n4712\n4713\n4714\n4715\n4716\n4717\n4718\n4719\n4720\n4721\n4722\n4723\n4724\n4725\n4726\n4727\n4728\n4729\n4730\n4731\n4732\n4733\n4734\n4735\n4736\n4737\n4738\n4739\n4740\n4741\n4742\n4743\n4744\n4745\n4746\n4747\n4748\n4749\n4750\n4751\n4752\n4753\n4754\n4755\n4756\n4757\n4758\n4759\n4760\n4761\n4762\n4763\n4764\n4765\n4766\n4767\n4768\n4769\n4770\n4771\n4772\n4773\n4774\n4775\n4776\n4777\n4778\n4779\n4780\n4781\n4782\n4783\n4784\n4785\n4786\n4787\n4788\n4789\n4790\n4791\n4792\n4793\n4794\n4795\n4796\n4797\n4798\n4799\n4800\n4801\n4802\n4803\n4804\n4805\n4806\n4807\n4808\n4809\n4810\n4811\n4812\n4813\n4814\n4815\n4816\n4817\n4818\n4819\n4820\n4821\n4822\n4823\n4824\n4825\n4826\n4827\n4828\n4829\n4830\n4831\n4832\n4833\n4834\n4835\n4836\n4837\n4838\n4839\n4840\n4841\n4842\n4843\n4844\n4845\n4846\n4847\n4848\n4849\n4850\n4851\n4852\n4853\n4854\n4855\n4856\n4857\n4858\n4859\n4860\n4861\n4862\n4863\n4864\n4865\n4866\n4867\n4868\n4869\n4870\n4871\n4872\n4873\n4874\n4875\n4876\n4877\n4878\n4879\n4880\n4881\n4882\n4883\n4884\n4885\n4886\n4887\n4888\n4889\n4890\n4891\n4892\n4893\n4894\n4895\n4896\n4897\n4898\n4899\n4900\n4901\n4902\n4903\n4904\n4905\n4906\n4907\n4908\n4909\n4910\n4911\n4912\n4913\n4914\n4915\n4916\n4917\n4918\n4919\n4920\n4921\n4922\n4923\n4924\n4925\n4926\n4927\n4928\n4929\n4930\n4931\n4932\n4933\n4934\n4935\n4936\n4937\n4938\n4939\n4940\n4941\n4942\n4943\n4944\n4945\n4946\n4947\n4948\n4949\n4950\n4951\n4952\n4953\n4954\n4955\n4956\n4957\n4958\n4959\n4960\n4961\n4962\n4963\n4964\n4965\n4966\n4967\n4968\n4969\n4970\n4971\n4972\n4973\n4974\n4975\n4976\n4977\n4978\n4979\n4980\n4981\n4982\n4983\n4984\n4985\n4986\n4987\n4988\n4989\n4990\n4991\n4992\n4993\n4994\n4995\n4996\n4997\n4998\n4999\n5000\n5001\n5002\n5003\n5004\n5005\n5006\n5007\n5008\n5009\n5010\n5011\n5012\n5013\n5014\n5015\n5016\n5017\n5018\n5019\n5020\n5021\n5022\n5023\n5024\n5025\n5026\n5027\n5028\n5029\n5030\n5031\n5032\n5033\n5034\n5035\n5036\n5037\n5038\n5039\n5040\n5041\n5042\n5043\n5044\n5045\n5046\n5047\n5048\n5049\n5050\n5051\n5052\n5053\n5054\n5055\n5056\n5057\n5058\n5059\n5060\n5061\n5062\n5063\n5064\n5065\n5066\n5067\n5068\n5069\n5070\n5071\n5072\n5073\n5074\n5075\n5076\n5077\n5078\n5079\n5080\n5081\n5082\n5083\n5084\n5085\n5086\n5087\n5088\n5089\n5090\n5091\n5092\n5093\n5094\n5095\n5096\n5097\n5098\n5099\n5100\n5101\n5102\n5103\n5104\n5105\n5106\n5107\n5108\n5109\n5110\n5111\n5112\n5113\n5114\n5115\n5116\n5117\n5118\n5119\n5120\n5121\n5122\n5123\n5124\n5125\n5126\n5127\n5128\n5129\n5130\n5131\n5132\n5133\n5134\n5135\n5136\n5137\n5138\n5139\n5140\n5141\n5142\n5143\n5144\n5145\n5146\n5147\n5148\n5149\n5150\n5151\n5152\n5153\n5154\n5155\n5156\n5157\n5158\n5159\n5160\n5161\n5162\n5163\n5164\n5165\n5166\n5167\n5168\n5169\n5170\n5171\n5172\n5173\n5174\n5175\n5176\n5177\n5178\n5179\n5180\n5181\n5182\n5183\n5184\n5185\n5186\n5187\n5188\n5189\n5190\n5191\n5192\n5193\n5194\n5195\n5196\n5197\n5198\n5199\n5200\n5201\n5202\n5203\n5204\n5205\n5206\n5207\n5208\n5209\n5210\n5211\n5212\n5213\n5214\n5215\n5216\n5217\n5218\n5219\n5220\n5221\n5222\n5223\n5224\n5225\n5226\n5227\n5228\n5229\n5230\n5231\n5232\n5233\n5234\n5235\n5236\n5237\n5238\n5239\n5240\n5241\n5242\n5243\n5244\n5245\n5246\n5247\n5248\n5249\n5250\n5251\n5252\n5253\n5254\n5255\n5256\n5257\n5258\n5259\n5260\n5261\n5262\n5263\n5264\n5265\n5266\n5267\n5268\n5269\n5270\n5271\n5272\n5273\n5274\n5275\n5276\n5277\n5278\n5279\n5280\n5281\n5282\n5283\n5284\n5285\n5286\n5287\n5288\n5289\n5290\n5291\n5292\n5293\n5294\n5295\n5296\n5297\n5298\n5299\n5300\n5301\n5302\n5303\n5304\n5305\n5306\n5307\n5308\n5309\n5310\n5311\n5312\n5313\n5314\n5315\n5316\n5317\n5318\n5319\n5320\n5321\n5322\n5323\n5324\n5325\n5326\n5327\n5328\n5329\n5330\n5331\n5332\n5333\n5334\n5335\n5336\n5337\n5338\n5339\n5340\n5341\n5342\n5343\n5344\n5345\n5346\n5347\n5348\n5349\n5350\n5351\n5352\n5353\n5354\n5355\n5356\n5357\n5358\n5359\n5360\n5361\n5362\n5363\n5364\n5365\n5366\n5367\n5368\n5369\n5370\n5371\n5372\n5373\n5374\n5375\n5376\n5377\n5378\n5379\n5380\n5381\n5382\n5383\n5384\n5385\n5386\n5387\n5388\n5389\n5390\n5391\n5392\n5393\n5394\n5395\n5396\n5397\n5398\n5399\n5400\n5401\n5402\n5403\n5404\n5405\n5406\n5407\n5408\n5409\n5410\n5411\n5412\n5413\n5414\n5415\n5416\n5417\n5418\n5419\n5420\n5421\n5422\n5423\n5424\n5425\n5426\n5427\n5428\n5429\n5430\n5431\n5432\n5433\n5434\n5435\n5436\n5437\n5438\n5439\n5440\n5441\n5442\n5443\n5444\n5445\n5446\n5447\n5448\n5449\n5450\n5451\n5452\n5453\n5454\n5455\n5456\n5457\n5458\n5459\n5460\n5461\n5462\n5463\n5464\n5465\n5466\n5467\n5468\n5469\n5470\n5471\n5472\n5473\n5474\n5475\n5476\n5477\n5478\n5479\n5480\n5481\n5482\n5483\n5484\n5485\n5486\n5487\n5488\n5489\n5490\n5491\n5492\n5493\n5494\n5495\n5496\n5497\n5498\n5499\n5500\n5501\n5502\n5503\n5504\n5505\n5506\n5507\n5508\n5509\n5510\n5511\n5512\n5513\n5514\n5515\n5516\n5517\n5518\n5519\n5520\n5521\n5522\n5523\n5524\n5525\n5526\n5527\n5528\n5529\n5530\n5531\n5532\n5533\n5534\n5535\n5536\n5537\n5538\n5539\n5540\n5541\n5542\n5543\n5544\n5545\n5546\n5547\n5548\n5549\n5550\n5551\n5552\n5553\n5554\n5555\n5556\n5557\n5558\n5559\n5560\n5561\n5562\n5563\n5564\n5565\n5566\n5567\n5568\n5569\n5570\n5571\n5572\n5573\n5574\n5575\n5576\n5577\n5578\n5579\n5580\n5581\n5582\n5583\n5584\n5585\n5586\n5587\n5588\n5589\n5590\n5591\n5592\n5593\n5594\n5595\n5596\n5597\n5598\n5599\n5600\n5601\n5602\n5603\n5604\n5605\n5606\n5607\n5608\n5609\n5610\n5611\n5612\n5613\n5614\n5615\n5616\n5617\n5618\n5619\n5620\n5621\n5622\n5623\n5624\n5625\n5626\n5627\n5628\n5629\n5630\n5631\n5632\n5633\n5634\n5635\n5636\n5637\n5638\n5639\n5640\n5641\n5642\n5643\n5644\n5645\n5646\n5647\n5648\n5649\n5650\n5651\n5652\n5653\n5654\n5655\n5656\n5657\n5658\n5659\n5660\n5661\n5662\n5663\n5664\n5665\n5666\n5667\n5668\n5669\n5670\n5671\n5672\n5673\n5674\n5675\n5676\n5677\n5678\n5679\n5680\n5681\n5682\n5683\n5684\n5685\n5686\n5687\n5688\n5689\n5690\n5691\n5692\n5693\n5694\n5695\n5696\n5697\n5698\n5699\n5700\n5701\n5702\n5703\n5704\n5705\n5706\n5707\n5708\n5709\n5710\n5711\n5712\n5713\n5714\n5715\n5716\n5717\n5718\n5719\n5720\n5721\n5722\n5723\n5724\n5725\n5726\n5727\n5728\n5729\n5730\n5731\n5732\n5733\n5734\n5735\n5736\n5737\n5738\n5739\n5740\n5741\n5742\n5743\n5744\n5745\n5746\n5747\n5748\n5749\n5750\n5751\n5752\n5753\n5754\n5755\n5756\n5757\n5758\n5759\n5760\n5761\n5762\n5763\n5764\n5765\n5766\n5767\n5768\n5769\n5770\n5771\n5772\n5773\n5774\n5775\n5776\n5777\n5778\n5779\n5780\n5781\n5782\n5783\n5784\n5785\n5786\n5787\n5788\n5789\n5790\n5791\n5792\n5793\n5794\n5795\n5796\n5797\n5798\n5799\n5800\n5801\n5802\n5803\n5804\n5805\n5806\n5807\n5808\n5809\n5810\n5811\n5812\n5813\n5814\n5815\n5816\n5817\n5818\n5819\n5820\n5821\n5822\n5823\n5824\n5825\n5826\n5827\n5828\n5829\n5830\n5831\n5832\n5833\n5834\n5835\n5836\n5837\n5838\n5839\n5840\n5841\n5842\n5843\n5844\n5845\n5846\n5847\n5848\n5849\n5850\n5851\n5852\n5853\n5854\n5855\n5856\n5857\n5858\n5859\n5860\n5861\n5862\n5863\n5864\n5865\n5866\n5867\n5868\n5869\n5870\n5871\n5872\n5873\n5874\n5875\n5876\n5877\n5878\n5879\n5880\n5881\n5882\n5883\n5884\n5885\n5886\n5887\n5888\n5889\n5890\n5891\n5892\n5893\n5894\n5895\n5896\n5897\n5898\n5899\n5900\n5901\n5902\n5903\n5904\n5905\n5906\n5907\n5908\n5909\n5910\n5911\n5912\n5913\n5914\n5915\n5916\n5917\n5918\n5919\n5920\n5921\n5922\n5923\n5924\n5925\n5926\n5927\n5928\n5929\n5930\n5931\n5932\n5933\n5934\n5935\n5936\n5937\n5938\n5939\n5940\n5941\n5942\n5943\n5944\n5945\n5946\n5947\n5948\n5949\n5950\n5951\n5952\n5953\n5954\n5955\n5956\n5957\n5958\n5959\n5960\n5961\n5962\n5963\n5964\n5965\n5966\n5967\n5968\n5969\n5970\n5971\n5972\n5973\n5974\n5975\n5976\n5977\n5978\n5979\n5980\n5981\n5982\n5983\n5984\n5985\n5986\n5987\n5988\n5989\n5990\n5991\n5992\n5993\n5994\n5995\n5996\n5997\n5998\n5999\n6000\n6001\n6002\n6003\n6004\n6005\n6006\n6007\n6008\n6009\n6010\n6011\n6012\n6013\n6014\n6015\n6016\n6017\n6018\n6019\n6020\n6021\n6022\n6023\n6024\n6025\n6026\n6027\n6028\n6029\n6030\n6031\n6032\n6033\n6034\n6035\n6036\n6037\n6038\n6039\n6040\n6041\n6042\n6043\n6044\n6045\n6046\n6047\n6048\n6049\n6050\n6051\n6052\n6053\n6054\n6055\n6056\n6057\n6058\n6059\n6060\n6061\n6062\n6063\n6064\n6065\n6066\n6067\n6068\n6069\n6070\n6071\n6072\n6073\n6074\n6075\n6076\n6077\n6078\n6079\n6080\n6081\n6082\n6083\n6084\n6085\n6086\n6087\n6088\n6089\n6090\n6091\n6092\n6093\n6094\n6095\n6096\n6097\n6098\n6099\n6100\n6101\n6102\n6103\n6104\n6105\n6106\n6107\n6108\n6109\n6110\n6111\n6112\n6113\n6114\n6115\n6116\n6117\n6118\n6119\n6120\n6121\n6122\n6123\n6124\n6125\n6126\n6127\n6128\n6129\n6130\n6131\n6132\n6133\n6134\n6135\n6136\n6137\n6138\n6139\n6140\n6141\n6142\n6143\n6144\n6145\n6146\n6147\n6148\n6149\n6150\n6151\n6152\n6153\n6154\n6155\n6156\n6157\n6158\n6159\n6160\n6161\n6162\n6163\n6164\n6165\n6166\n6167\n6168\n6169\n6170\n6171\n6172\n6173\n6174\n6175\n6176\n6177\n6178\n6179\n6180\n6181\n6182\n6183\n6184\n6185\n6186\n6187\n6188\n6189\n6190\n6191\n6192\n6193\n6194\n6195\n6196\n6197\n6198\n6199\n6200\n6201\n6202\n6203\n6204\n6205\n6206\n6207\n6208\n6209\n6210\n6211\n6212\n6213\n6214\n6215\n6216\n6217\n6218\n6219\n6220\n6221\n6222\n6223\n6224\n6225\n6226\n6227\n6228\n6229\n6230\n6231\n6232\n6233\n6234\n6235\n6236\n6237\n6238\n6239\n6240\n6241\n6242\n6243\n6244\n6245\n6246\n6247\n6248\n6249\n6250\n6251\n6252\n6253\n6254\n6255\n6256\n6257\n6258\n6259\n6260\n6261\n6262\n6263\n6264\n6265\n6266\n6267\n6268\n6269\n6270\n6271\n6272\n6273\n6274\n6275\n6276\n6277\n6278\n6279\n6280\n6281\n6282\n6283\n6284\n6285\n6286\n6287\n6288\n6289\n6290\n6291\n6292\n6293\n6294\n6295\n6296\n6297\n6298\n6299\n6300\n6301\n6302\n6303\n6304\n6305\n6306\n6307\n6308\n6309\n6310\n6311\n6312\n6313\n6314\n6315\n6316\n6317\n6318\n6319\n6320\n6321\n6322\n6323\n6324\n6325\n6326\n6327\n6328\n6329\n6330\n6331\n6332\n6333\n6334\n6335\n6336\n6337\n6338\n6339\n6340\n6341\n6342\n6343\n6344\n6345\n6346\n6347\n6348\n6349\n6350\n6351\n6352\n6353\n6354\n6355\n6356\n6357\n6358\n6359\n6360\n6361\n6362\n6363\n6364\n6365\n6366\n6367\n6368\n6369\n6370\n6371\n6372\n6373\n6374\n6375\n6376\n6377\n6378\n6379\n6380\n6381\n6382\n6383\n6384\n6385\n6386\n6387\n6388\n6389\n6390\n6391\n6392\n6393\n6394\n6395\n6396\n6397\n6398\n6399\n6400\n6401\n6402\n6403\n6404\n6405\n6406\n6407\n6408\n6409\n6410\n6411\n6412\n6413\n6414\n6415\n6416\n6417\n6418\n6419\n6420\n6421\n6422\n6423\n6424\n6425\n6426\n6427\n6428\n6429\n6430\n6431\n6432\n6433\n6434\n6435\n6436\n6437\n6438\n6439\n6440\n6441\n6442\n6443\n6444\n6445\n6446\n6447\n6448\n6449\n6450\n6451\n6452\n6453\n6454\n6455\n6456\n6457\n6458\n6459\n6460\n6461\n6462\n6463\n6464\n6465\n6466\n6467\n6468\n6469\n6470\n6471\n6472\n6473\n6474\n6475\n6476\n6477\n6478\n6479\n6480\n6481\n6482\n6483\n6484\n6485\n6486\n6487\n6488\n6489\n6490\n6491\n6492\n6493\n6494\n6495\n6496\n6497\n6498\n6499\n6500\n6501\n6502\n6503\n6504\n6505\n6506\n6507\n6508\n6509\n6510\n6511\n6512\n6513\n6514\n6515\n6516\n6517\n6518\n6519\n6520\n6521\n6522\n6523\n6524\n6525\n6526\n6527\n6528\n6529\n6530\n6531\n6532\n6533\n6534\n6535\n6536\n6537\n6538\n6539\n6540\n6541\n6542\n6543\n6544\n6545\n6546\n6547\n6548\n6549\n6550\n6551\n6552\n6553\n6554\n6555\n6556\n6557\n6558\n6559\n6560\n6561\n6562\n6563\n6564\n6565\n6566\n6567\n6568\n6569\n6570\n6571\n6572\n6573\n6574\n6575\n6576\n6577\n6578\n6579\n6580\n6581\n6582\n6583\n6584\n6585\n6586\n6587\n6588\n6589\n6590\n6591\n6592\n6593\n6594\n6595\n6596\n6597\n6598\n6599\n6600\n6601\n6602\n6603\n6604\n6605\n6606\n6607\n6608\n6609\n6610\n6611\n6612\n6613\n6614\n6615\n6616\n6617\n6618\n6619\n6620\n6621\n6622\n6623\n6624\n6625\n6626\n6627\n6628\n6629\n6630\n6631\n6632\n6633\n6634\n6635\n6636\n6637\n6638\n6639\n6640\n6641\n6642\n6643\n6644\n6645\n6646\n6647\n6648\n6649\n6650\n6651\n6652\n6653\n6654\n6655\n6656\n6657\n6658\n6659\n6660\n6661\n6662\n6663\n6664\n6665\n6666\n6667\n6668\n6669\n6670\n6671\n6672\n6673\n6674\n6675\n6676\n6677\n6678\n6679\n6680\n6681\n6682\n6683\n6684\n6685\n6686\n6687\n6688\n6689\n6690\n6691\n6692\n6693\n6694\n6695\n6696\n6697\n6698\n6699\n6700\n6701\n6702\n6703\n6704\n6705\n6706\n6707\n6708\n6709\n6710\n6711\n6712\n6713\n6714\n6715\n6716\n6717\n6718\n6719\n6720\n6721\n6722\n6723\n6724\n6725\n6726\n6727\n6728\n6729\n6730\n6731\n6732\n6733\n6734\n6735\n6736\n6737\n6738\n6739\n6740\n6741\n6742\n6743\n6744\n6745\n6746\n6747\n6748\n6749\n6750\n6751\n6752\n6753\n6754\n6755\n6756\n6757\n6758\n6759\n6760\n6761\n6762\n6763\n6764\n6765\n6766\n6767\n6768\n6769\n6770\n6771\n6772\n6773\n6774\n6775\n6776\n6777\n6778\n6779\n6780\n6781\n6782\n6783\n6784\n6785\n6786\n6787\n6788\n6789\n6790\n6791\n6792\n6793\n6794\n6795\n6796\n6797\n6798\n6799\n6800\n6801\n6802\n6803\n6804\n6805\n6806\n6807\n6808\n6809\n6810\n6811\n6812\n6813\n6814\n6815\n6816\n6817\n6818\n6819\n6820\n6821\n6822\n6823\n6824\n6825\n6826\n6827\n6828\n6829\n6830\n6831\n6832\n6833\n6834\n6835\n6836\n6837\n6838\n6839\n6840\n6841\n6842\n6843\n6844\n6845\n6846\n6847\n6848\n6849\n6850\n6851\n6852\n6853\n6854\n6855\n6856\n6857\n6858\n6859\n6860\n6861\n6862\n6863\n6864\n6865\n6866\n6867\n6868\n6869\n6870\n6871\n6872\n6873\n6874\n6875\n6876\n6877\n6878\n6879\n6880\n6881\n6882\n6883\n6884\n6885\n6886\n6887\n6888\n6889\n6890\n6891\n6892\n6893\n6894\n6895\n6896\n6897\n6898\n6899\n6900\n6901\n6902\n6903\n6904\n6905\n6906\n6907\n6908\n6909\n6910\n6911\n6912\n6913\n6914\n6915\n6916\n6917\n6918\n6919\n6920\n6921\n6922\n6923\n6924\n6925\n6926\n6927\n6928\n6929\n6930\n6931\n6932\n6933\n6934\n6935\n6936\n6937\n6938\n6939\n6940\n6941\n6942\n6943\n6944\n6945\n6946\n6947\n6948\n6949\n6950\n6951\n6952\n6953\n6954\n6955\n6956\n6957\n6958\n6959\n6960\n6961\n6962\n6963\n6964\n6965\n6966\n6967\n6968\n6969\n6970\n6971\n6972\n6973\n6974\n6975\n6976\n6977\n6978\n6979\n6980\n6981\n6982\n6983\n6984\n6985\n6986\n6987\n6988\n6989\n6990\n6991\n6992\n6993\n6994\n6995\n6996\n6997\n6998\n6999\n7000\n7001\n7002\n7003\n7004\n7005\n7006\n7007\n7008\n7009\n7010\n7011\n7012\n7013\n7014\n7015\n7016\n7017\n7018\n7019\n7020\n7021\n7022\n7023\n7024\n7025\n7026\n7027\n7028\n7029\n7030\n7031\n7032\n7033\n7034\n7035\n7036\n7037\n7038\n7039\n7040\n7041\n7042\n7043\n7044\n7045\n7046\n7047\n7048\n7049\n7050\n7051\n7052\n7053\n7054\n7055\n7056\n7057\n7058\n7059\n7060\n7061\n7062\n7063\n7064\n7065\n7066\n7067\n7068\n7069\n7070\n7071\n7072\n7073\n7074\n7075\n7076\n7077\n7078\n7079\n7080\n7081\n7082\n7083\n7084\n7085\n7086\n7087\n7088\n7089\n7090\n7091\n7092\n7093\n7094\n7095\n7096\n7097\n7098\n7099\n7100\n7101\n7102\n7103\n7104\n7105\n7106\n7107\n7108\n7109\n7110\n7111\n7112\n7113\n7114\n7115\n7116\n7117\n7118\n7119\n7120\n7121\n7122\n7123\n7124\n7125\n7126\n7127\n7128\n7129\n7130\n7131\n7132\n7133\n7134\n7135\n7136\n7137\n7138\n7139\n7140\n7141\n7142\n7143\n7144\n7145\n7146\n7147\n7148\n7149\n7150\n7151\n7152\n7153\n7154\n7155\n7156\n7157\n7158\n7159\n7160\n7161\n7162\n7163\n7164\n7165\n7166\n7167\n7168\n7169\n7170\n7171\n7172\n7173\n7174\n7175\n7176\n7177\n7178\n7179\n7180\n7181\n7182\n7183\n7184\n7185\n7186\n7187\n7188\n7189\n7190\n7191\n7192\n7193\n7194\n7195\n7196\n7197\n7198\n7199\n7200\n7201\n7202\n7203\n7204\n7205\n7206\n7207\n7208\n7209\n7210\n7211\n7212\n7213\n7214\n7215\n7216\n7217\n7218\n7219\n7220\n7221\n7222\n7223\n7224\n7225\n7226\n7227\n7228\n7229\n7230\n7231\n7232\n7233\n7234\n7235\n7236\n7237\n7238\n7239\n7240\n7241\n7242\n7243\n7244\n7245\n7246\n7247\n7248\n7249\n7250\n7251\n7252\n7253\n7254\n7255\n7256\n7257\n7258\n7259\n7260\n7261\n7262\n7263\n7264\n7265\n7266\n7267\n7268\n7269\n7270\n7271\n7272\n7273\n7274\n7275\n7276\n7277\n7278\n7279\n7280\n7281\n7282\n7283\n7284\n7285\n7286\n7287\n7288\n7289\n7290\n7291\n7292\n7293\n7294\n7295\n7296\n7297\n7298\n7299\n7300\n7301\n7302\n7303\n7304\n7305\n7306\n7307\n7308\n7309\n7310\n7311\n7312\n7313\n7314\n7315\n7316\n7317\n7318\n7319\n7320\n7321\n7322\n7323\n7324\n7325\n7326\n7327\n7328\n7329\n7330\n7331\n7332\n7333\n7334\n7335\n7336\n7337\n7338\n7339\n7340\n7341\n7342\n7343\n7344\n7345\n7346\n7347\n7348\n7349\n7350\n7351\n7352\n7353\n7354\n7355\n7356\n7357\n7358\n7359\n7360\n7361\n7362\n7363\n7364\n7365\n7366\n7367\n7368\n7369\n7370\n7371\n7372\n7373\n7374\n7375\n7376\n7377\n7378\n7379\n7380\n7381\n7382\n7383\n7384\n7385\n7386\n7387\n7388\n7389\n7390\n7391\n7392\n7393\n7394\n7395\n7396\n7397\n7398\n7399\n7400\n7401\n7402\n7403\n7404\n7405\n7406\n7407\n7408\n7409\n7410\n7411\n7412\n7413\n7414\n7415\n7416\n7417\n7418\n7419\n7420\n7421\n7422\n7423\n7424\n7425\n7426\n7427\n7428\n7429\n7430\n7431\n7432\n7433\n7434\n7435\n7436\n7437\n7438\n7439\n7440\n7441\n7442\n7443\n7444\n7445\n7446\n7447\n7448\n7449\n7450\n7451\n7452\n7453\n7454\n7455\n7456\n7457\n7458\n7459\n7460\n7461\n7462\n7463\n7464\n7465\n7466\n7467\n7468\n7469\n7470\n7471\n7472\n7473\n7474\n7475\n7476\n7477\n7478\n7479\n7480\n7481\n7482\n7483\n7484\n7485\n7486\n7487\n7488\n7489\n7490\n7491\n7492\n7493\n7494\n7495\n7496\n7497\n7498\n7499\n7500\n7501\n7502\n7503\n7504\n7505\n7506\n7507\n7508\n7509\n7510\n7511\n7512\n7513\n7514\n7515\n7516\n7517\n7518\n7519\n7520\n7521\n7522\n7523\n7524\n7525\n7526\n7527\n7528\n7529\n7530\n7531\n7532\n7533\n7534\n7535\n7536\n7537\n7538\n7539\n7540\n7541\n7542\n7543\n7544\n7545\n7546\n7547\n7548\n7549\n7550\n7551\n7552\n7553\n7554\n7555\n7556\n7557\n7558\n7559\n7560\n7561\n7562\n7563\n7564\n7565\n7566\n7567\n7568\n7569\n7570\n7571\n7572\n7573\n7574\n7575\n7576\n7577\n7578\n7579\n7580\n7581\n7582\n7583\n7584\n7585\n7586\n7587\n7588\n7589\n7590\n7591\n7592\n7593\n7594\n7595\n7596\n7597\n7598\n7599\n7600\n7601\n7602\n7603\n7604\n7605\n7606\n7607\n7608\n7609\n7610\n7611\n7612\n7613\n7614\n7615\n7616\n7617\n7618\n7619\n7620\n7621\n7622\n7623\n7624\n7625\n7626\n7627\n7628\n7629\n7630\n7631\n7632\n7633\n7634\n7635\n7636\n7637\n7638\n7639\n7640\n7641\n7642\n7643\n7644\n7645\n7646\n7647\n7648\n7649\n7650\n7651\n7652\n7653\n7654\n7655\n7656\n7657\n7658\n7659\n7660\n7661\n7662\n7663\n7664\n7665\n7666\n7667\n7668\n7669\n7670\n7671\n7672\n7673\n7674\n7675\n7676\n7677\n7678\n7679\n7680\n7681\n7682\n7683\n7684\n7685\n7686\n7687\n7688\n7689\n7690\n7691\n7692\n7693\n7694\n7695\n7696\n7697\n7698\n7699\n7700\n7701\n7702\n7703\n7704\n7705\n7706\n7707\n7708\n7709\n7710\n7711\n7712\n7713\n7714\n7715\n7716\n7717\n7718\n7719\n7720\n7721\n7722\n7723\n7724\n7725\n7726\n7727\n7728\n7729\n7730\n7731\n7732\n7733\n7734\n7735\n7736\n7737\n7738\n7739\n7740\n7741\n7742\n7743\n7744\n7745\n7746\n7747\n7748\n7749\n7750\n7751\n7752\n7753\n7754\n7755\n7756\n7757\n7758\n7759\n7760\n7761\n7762\n7763\n7764\n7765\n7766\n7767\n7768\n7769\n7770\n7771\n7772\n7773\n7774\n7775\n7776\n7777\n7778\n7779\n7780\n7781\n7782\n7783\n7784\n7785\n7786\n7787\n7788\n7789\n7790\n7791\n7792\n7793\n7794\n7795\n7796\n7797\n7798\n7799\n7800\n7801\n7802\n7803\n7804\n7805\n7806\n7807\n7808\n7809\n7810\n7811\n7812\n7813\n7814\n7815\n7816\n7817\n7818\n7819\n7820\n7821\n7822\n7823\n7824\n7825\n7826\n7827\n7828\n7829\n7830\n7831\n7832\n7833\n7834\n7835\n7836\n7837\n7838\n7839\n7840\n7841\n7842\n7843\n7844\n7845\n7846\n7847\n7848\n7849\n7850\n7851\n7852\n7853\n7854\n7855\n7856\n7857\n7858\n7859\n7860\n7861\n7862\n7863\n7864\n7865\n7866\n7867\n7868\n7869\n7870\n7871\n7872\n7873\n7874\n7875\n7876\n7877\n7878\n7879\n7880\n7881\n7882\n7883\n7884\n7885\n7886\n7887\n7888\n7889\n7890\n7891\n7892\n7893\n7894\n7895\n7896\n7897\n7898\n7899\n7900\n7901\n7902\n7903\n7904\n7905\n7906\n7907\n7908\n7909\n7910\n7911\n7912\n7913\n7914\n7915\n7916\n7917\n7918\n7919\n7920\n7921\n7922\n7923\n7924\n7925\n7926\n7927\n7928\n7929\n7930\n7931\n7932\n7933\n7934\n7935\n7936\n7937\n7938\n7939\n7940\n7941\n7942\n7943\n7944\n7945\n7946\n7947\n7948\n7949\n7950\n7951\n7952\n7953\n7954\n7955\n7956\n7957\n7958\n7959\n7960\n7961\n7962\n7963\n7964\n7965\n7966\n7967\n7968\n7969\n7970\n7971\n7972\n7973\n7974\n7975\n7976\n7977\n7978\n7979\n7980\n7981\n7982\n7983\n7984\n7985\n7986\n7987\n7988\n7989\n7990\n7991\n7992\n7993\n7994\n7995\n7996\n7997\n7998\n7999\n8000\n8001\n8002\n8003\n8004\n8005\n8006\n8007\n8008\n8009\n8010\n8011\n8012\n8013\n8014\n8015\n8016\n8017\n8018\n8019\n8020\n8021\n8022\n8023\n8024\n8025\n8026\n8027\n8028\n8029\n8030\n8031\n8032\n8033\n8034\n8035\n8036\n8037\n8038\n8039\n8040\n8041\n8042\n8043\n8044\n8045\n8046\n8047\n8048\n8049\n8050\n8051\n8052\n8053\n8054\n8055\n8056\n8057\n8058\n8059\n8060\n8061\n8062\n8063\n8064\n8065\n8066\n8067\n8068\n8069\n8070\n8071\n8072\n8073\n8074\n8075\n8076\n8077\n8078\n8079\n8080\n8081\n8082\n8083\n8084\n8085\n8086\n8087\n8088\n8089\n8090\n8091\n8092\n8093\n8094\n8095\n8096\n8097\n8098\n8099\n8100\n8101\n8102\n8103\n8104\n8105\n8106\n8107\n8108\n8109\n8110\n8111\n8112\n8113\n8114\n8115\n8116\n8117\n8118\n8119\n8120\n8121\n8122\n8123\n8124\n8125\n8126\n8127\n8128\n8129\n8130\n8131\n8132\n8133\n8134\n8135\n8136\n8137\n8138\n8139\n8140\n8141\n8142\n8143\n8144\n8145\n8146\n8147\n8148\n8149\n8150\n8151\n8152\n8153\n8154\n8155\n8156\n8157\n8158\n8159\n8160\n8161\n8162\n8163\n8164\n8165\n8166\n8167\n8168\n8169\n8170\n8171\n8172\n8173\n8174\n8175\n8176\n8177\n8178\n8179\n8180\n8181\n8182\n8183\n8184\n8185\n8186\n8187\n8188\n8189\n8190\n8191\n8192\n8193\n8194\n8195\n8196\n8197\n8198\n8199\n8200\n8201\n8202\n8203\n8204\n8205\n8206\n8207\n8208\n8209\n8210\n8211\n8212\n8213\n8214\n8215\n8216\n8217\n8218\n8219\n8220\n8221\n8222\n8223\n8224\n8225\n8226\n8227\n8228\n8229\n8230\n8231\n8232\n8233\n8234\n8235\n8236\n8237\n8238\n8239\n8240\n8241\n8242\n8243\n8244\n8245\n8246\n8247\n8248\n8249\n8250\n8251\n8252\n8253\n8254\n8255\n8256\n8257\n8258\n8259\n8260\n8261\n8262\n8263\n8264\n8265\n8266\n8267\n8268\n8269\n8270\n8271\n8272\n8273\n8274\n8275\n8276\n8277\n8278\n8279\n8280\n8281\n8282\n8283\n8284\n8285\n8286\n8287\n8288\n8289\n8290\n8291\n8292\n8293\n8294\n8295\n8296\n8297\n8298\n8299\n8300\n8301\n8302\n8303\n8304\n8305\n8306\n8307\n8308\n8309\n8310\n8311\n8312\n8313\n8314\n8315\n8316\n8317\n8318\n8319\n8320\n8321\n8322\n8323\n8324\n8325\n8326\n8327\n8328\n8329\n8330\n8331\n8332\n8333\n8334\n8335\n8336\n8337\n8338\n8339\n8340\n8341\n8342\n8343\n8344\n8345\n8346\n8347\n8348\n8349\n8350\n8351\n8352\n8353\n8354\n8355\n8356\n8357\n8358\n8359\n8360\n8361\n8362\n8363\n8364\n8365\n8366\n8367\n8368\n8369\n8370\n8371\n8372\n8373\n8374\n8375\n8376\n8377\n8378\n8379\n8380\n8381\n8382\n8383\n8384\n8385\n8386\n8387\n8388\n8389\n8390\n8391\n8392\n8393\n8394\n8395\n8396\n8397\n8398\n8399\n8400\n8401\n8402\n8403\n8404\n8405\n8406\n8407\n8408\n8409\n8410\n8411\n8412\n8413\n8414\n8415\n8416\n8417\n8418\n8419\n8420\n8421\n8422\n8423\n8424\n8425\n8426\n8427\n8428\n8429\n8430\n8431\n8432\n8433\n8434\n8435\n8436\n8437\n8438\n8439\n8440\n8441\n8442\n8443\n8444\n8445\n8446\n8447\n8448\n8449\n8450\n8451\n8452\n8453\n8454\n8455\n8456\n8457\n8458\n8459\n8460\n8461\n8462\n8463\n8464\n8465\n8466\n8467\n8468\n8469\n8470\n8471\n8472\n8473\n8474\n8475\n8476\n8477\n8478\n8479\n8480\n8481\n8482\n8483\n8484\n8485\n8486\n8487\n8488\n8489\n8490\n8491\n8492\n8493\n8494\n8495\n8496\n8497\n8498\n8499\n8500\n8501\n8502\n8503\n8504\n8505\n8506\n8507\n8508\n8509\n8510\n8511\n8512\n8513\n8514\n8515\n8516\n8517\n8518\n8519\n8520\n8521\n8522\n8523\n8524\n8525\n8526\n8527\n8528\n8529\n8530\n8531\n8532\n8533\n8534\n8535\n8536\n8537\n8538\n8539\n8540\n8541\n8542\n8543\n8544\n8545\n8546\n8547\n8548\n8549\n8550\n8551\n8552\n8553\n8554\n8555\n8556\n8557\n8558\n8559\n8560\n8561\n8562\n8563\n8564\n8565\n8566\n8567\n8568\n8569\n8570\n8571\n8572\n8573\n8574\n8575\n8576\n8577\n8578\n8579\n8580\n8581\n8582\n8583\n8584\n8585\n8586\n8587\n8588\n8589\n8590\n8591\n8592\n8593\n8594\n8595\n8596\n8597\n8598\n8599\n8600\n8601\n8602\n8603\n8604\n8605\n8606\n8607\n8608\n8609\n8610\n8611\n8612\n8613\n8614\n8615\n8616\n8617\n8618\n8619\n8620\n8621\n8622\n8623\n8624\n8625\n8626\n8627\n8628\n8629\n8630\n8631\n8632\n8633\n8634\n8635\n8636\n8637\n8638\n8639\n8640\n8641\n8642\n8643\n8644\n8645\n8646\n8647\n8648\n8649\n8650\n8651\n8652\n8653\n8654\n8655\n8656\n8657\n8658\n8659\n8660\n8661\n8662\n8663\n8664\n8665\n8666\n8667\n8668\n8669\n8670\n8671\n8672\n8673\n8674\n8675\n8676\n8677\n8678\n8679\n8680\n8681\n8682\n8683\n8684\n8685\n8686\n8687\n8688\n8689\n8690\n8691\n8692\n8693\n8694\n8695\n8696\n8697\n8698\n8699\n8700\n8701\n8702\n8703\n8704\n8705\n8706\n8707\n8708\n8709\n8710\n8711\n8712\n8713\n8714\n8715\n8716\n8717\n8718\n8719\n8720\n8721\n8722\n8723\n8724\n8725\n8726\n8727\n8728\n8729\n8730\n8731\n8732\n8733\n8734\n8735\n8736\n8737\n8738\n8739\n8740\n8741\n8742\n8743\n8744\n8745\n8746\n8747\n8748\n8749\n8750\n8751\n8752\n8753\n8754\n8755\n8756\n8757\n8758\n8759\n8760\n8761\n8762\n8763\n8764\n8765\n8766\n8767\n8768\n8769\n8770\n8771\n8772\n8773\n8774\n8775\n8776\n8777\n8778\n8779\n8780\n8781\n8782\n8783\n8784\n8785\n8786\n8787\n8788\n8789\n8790\n8791\n8792\n8793\n8794\n8795\n8796\n8797\n8798\n8799\n8800\n8801\n8802\n8803\n8804\n8805\n8806\n8807\n8808\n8809\n8810\n8811\n8812\n8813\n8814\n8815\n8816\n8817\n8818\n8819\n8820\n8821\n8822\n8823\n8824\n8825\n8826\n8827\n8828\n8829\n8830\n8831\n8832\n8833\n8834\n8835\n8836\n8837\n8838\n8839\n8840\n8841\n8842\n8843\n8844\n8845\n8846\n8847\n8848\n8849\n8850\n8851\n8852\n8853\n8854\n8855\n8856\n8857\n8858\n8859\n8860\n8861\n8862\n8863\n8864\n8865\n8866\n8867\n8868\n8869\n8870\n8871\n8872\n8873\n8874\n8875\n8876\n8877\n8878\n8879\n8880\n8881\n8882\n8883\n8884\n8885\n8886\n8887\n8888\n8889\n8890\n8891\n8892\n8893\n8894\n8895\n8896\n8897\n8898\n8899\n8900\n8901\n8902\n8903\n8904\n8905\n8906\n8907\n8908\n8909\n8910\n8911\n8912\n8913\n8914\n8915\n8916\n8917\n8918\n8919\n8920\n8921\n8922\n8923\n8924\n8925\n8926\n8927\n8928\n8929\n8930\n8931\n8932\n8933\n8934\n8935\n8936\n8937\n8938\n8939\n8940\n8941\n8942\n8943\n8944\n8945\n8946\n8947\n8948\n8949\n8950\n8951\n8952\n8953\n8954\n8955\n8956\n8957\n8958\n8959\n8960\n8961\n8962\n8963\n8964\n8965\n8966\n8967\n8968\n8969\n8970\n8971\n8972\n8973\n8974\n8975\n8976\n8977\n8978\n8979\n8980\n8981\n8982\n8983\n8984\n8985\n8986\n8987\n8988\n8989\n8990\n8991\n8992\n8993\n8994\n8995\n8996\n8997\n8998\n8999\n9000\n9001\n9002\n9003\n9004\n9005\n9006\n9007\n9008\n9009\n9010\n9011\n9012\n9013\n9014\n9015\n9016\n9017\n9018\n9019\n9020\n9021\n9022\n9023\n9024\n9025\n9026\n9027\n9028\n9029\n9030\n9031\n9032\n9033\n9034\n9035\n9036\n9037\n9038\n9039\n9040\n9041\n9042\n9043\n9044\n9045\n9046\n9047\n9048\n9049\n9050\n9051\n9052\n9053\n9054\n9055\n9056\n9057\n9058\n9059\n9060\n9061\n9062\n9063\n9064\n9065\n9066\n9067\n9068\n9069\n9070\n9071\n9072\n9073\n9074\n9075\n9076\n9077\n9078\n9079\n9080\n9081\n9082\n9083\n9084\n9085\n9086\n9087\n9088\n9089\n9090\n9091\n9092\n9093\n9094\n9095\n9096\n9097\n9098\n9099\n9100\n9101\n9102\n9103\n9104\n9105\n9106\n9107\n9108\n9109\n9110\n9111\n9112\n9113\n9114\n9115\n9116\n9117\n9118\n9119\n9120\n9121\n9122\n9123\n9124\n9125\n9126\n9127\n9128\n9129\n9130\n9131\n9132\n9133\n9134\n9135\n9136\n9137\n9138\n9139\n9140\n9141\n9142\n9143\n9144\n9145\n9146\n9147\n9148\n9149\n9150\n9151\n9152\n9153\n9154\n9155\n9156\n9157\n9158\n9159\n9160\n9161\n9162\n9163\n9164\n9165\n9166\n9167\n9168\n9169\n9170\n9171\n9172\n9173\n9174\n9175\n9176\n9177\n9178\n9179\n9180\n9181\n9182\n9183\n9184\n9185\n9186\n9187\n9188\n9189\n9190\n9191\n9192\n9193\n9194\n9195\n9196\n9197\n9198\n9199\n9200\n9201\n9202\n9203\n9204\n9205\n9206\n9207\n9208\n9209\n9210\n9211\n9212\n9213\n9214\n9215\n9216\n9217\n9218\n9219\n9220\n9221\n9222\n9223\n9224\n9225\n9226\n9227\n9228\n9229\n9230\n9231\n9232\n9233\n9234\n9235\n9236\n9237\n9238\n9239\n9240\n9241\n9242\n9243\n9244\n9245\n9246\n9247\n9248\n9249\n9250\n9251\n9252\n9253\n9254\n9255\n9256\n9257\n9258\n9259\n9260\n9261\n9262\n9263\n9264\n9265\n9266\n9267\n9268\n9269\n9270\n9271\n9272\n9273\n9274\n9275\n9276\n9277\n9278\n9279\n9280\n9281\n9282\n9283\n9284\n9285\n9286\n9287\n9288\n9289\n9290\n9291\n9292\n9293\n9294\n9295\n9296\n9297\n9298\n9299\n9300\n9301\n9302\n9303\n9304\n9305\n9306\n9307\n9308\n9309\n9310\n9311\n9312\n9313\n9314\n9315\n9316\n9317\n9318\n9319\n9320\n9321\n9322\n9323\n9324\n9325\n9326\n9327\n9328\n9329\n9330\n9331\n9332\n9333\n9334\n9335\n9336\n9337\n9338\n9339\n9340\n9341\n9342\n9343\n9344\n9345\n9346\n9347\n9348\n9349\n9350\n9351\n9352\n9353\n9354\n9355\n9356\n9357\n9358\n9359\n9360\n9361\n9362\n9363\n9364\n9365\n9366\n9367\n9368\n9369\n9370\n9371\n9372\n9373\n9374\n9375\n9376\n9377\n9378\n9379\n9380\n9381\n9382\n9383\n9384\n9385\n9386\n9387\n9388\n9389\n9390\n9391\n9392\n9393\n9394\n9395\n9396\n9397\n9398\n9399\n9400\n9401\n9402\n9403\n9404\n9405\n9406\n9407\n9408\n9409\n9410\n9411\n9412\n9413\n9414\n9415\n9416\n9417\n9418\n9419\n9420\n9421\n9422\n9423\n9424\n9425\n9426\n9427\n9428\n9429\n9430\n9431\n9432\n9433\n9434\n9435\n9436\n9437\n9438\n9439\n9440\n9441\n9442\n9443\n9444\n9445\n9446\n9447\n9448\n9449\n9450\n9451\n9452\n9453\n9454\n9455\n9456\n9457\n9458\n9459\n9460\n9461\n9462\n9463\n9464\n9465\n9466\n9467\n9468\n9469\n9470\n9471\n9472\n9473\n9474\n9475\n9476\n9477\n9478\n9479\n9480\n9481\n9482\n9483\n9484\n9485\n9486\n9487\n9488\n9489\n9490\n9491\n9492\n9493\n9494\n9495\n9496\n9497\n9498\n9499\n9500\n9501\n9502\n9503\n9504\n9505\n9506\n9507\n9508\n9509\n9510\n9511\n9512\n9513\n9514\n9515\n9516\n9517\n9518\n9519\n9520\n9521\n9522\n9523\n9524\n9525\n9526\n9527\n9528\n9529\n9530\n9531\n9532\n9533\n9534\n9535\n9536\n9537\n9538\n9539\n9540\n9541\n9542\n9543\n9544\n9545\n9546\n9547\n9548\n9549\n9550\n9551\n9552\n9553\n9554\n9555\n9556\n9557\n9558\n9559\n9560\n9561\n9562\n9563\n9564\n9565\n9566\n9567\n9568\n9569\n9570\n9571\n9572\n9573\n9574\n9575\n9576\n9577\n9578\n9579\n9580\n9581\n9582\n9583\n9584\n9585\n9586\n9587\n9588\n9589\n9590\n9591\n9592\n9593\n9594\n9595\n9596\n9597\n9598\n9599\n9600\n9601\n9602\n9603\n9604\n9605\n9606\n9607\n9608\n9609\n9610\n9611\n9612\n9613\n9614\n9615\n9616\n9617\n9618\n9619\n9620\n9621\n9622\n9623\n9624\n9625\n9626\n9627\n9628\n9629\n9630\n9631\n9632\n9633\n9634\n9635\n9636\n9637\n9638\n9639\n9640\n9641\n9642\n9643\n9644\n9645\n9646\n9647\n9648\n9649\n9650\n9651\n9652\n9653\n9654\n9655\n9656\n9657\n9658\n9659\n9660\n9661\n9662\n9663\n9664\n9665\n9666\n9667\n9668\n9669\n9670\n9671\n9672\n9673\n9674\n9675\n9676\n9677\n9678\n9679\n9680\n9681\n9682\n9683\n9684\n9685\n9686\n9687\n9688\n9689\n9690\n9691\n9692\n9693\n9694\n9695\n9696\n9697\n9698\n9699\n9700\n9701\n9702\n9703\n9704\n9705\n9706\n9707\n9708\n9709\n9710\n9711\n9712\n9713\n9714\n9715\n9716\n9717\n9718\n9719\n9720\n9721\n9722\n9723\n9724\n9725\n9726\n9727\n9728\n9729\n9730\n9731\n9732\n9733\n9734\n9735\n9736\n9737\n9738\n9739\n9740\n9741\n9742\n9743\n9744\n9745\n9746\n9747\n9748\n9749\n9750\n9751\n9752\n9753\n9754\n9755\n9756\n9757\n9758\n9759\n9760\n9761\n9762\n9763\n9764\n9765\n9766\n9767\n9768\n9769\n9770\n9771\n9772\n9773\n9774\n9775\n9776\n9777\n9778\n9779\n9780\n9781\n9782\n9783\n9784\n9785\n9786\n9787\n9788\n9789\n9790\n9791\n9792\n9793\n9794\n9795\n9796\n9797\n9798\n9799\n9800\n9801\n9802\n9803\n9804\n9805\n9806\n9807\n9808\n9809\n9810\n9811\n9812\n9813\n9814\n9815\n9816\n9817\n9818\n9819\n9820\n9821\n9822\n9823\n9824\n9825\n9826\n9827\n9828\n9829\n9830\n9831\n9832\n9833\n9834\n9835\n9836\n9837\n9838\n9839\n9840\n9841\n9842\n9843\n9844\n9845\n9846\n9847\n9848\n9849\n9850\n9851\n9852\n9853\n9854\n9855\n9856\n9857\n9858\n9859\n9860\n9861\n9862\n9863\n9864\n9865\n9866\n9867\n9868\n9869\n9870\n9871\n9872\n9873\n9874\n9875\n9876\n9877\n9878\n9879\n9880\n9881\n9882\n9883\n9884\n9885\n9886\n9887\n9888\n9889\n9890\n9891\n9892\n9893\n9894\n9895\n9896\n9897\n9898\n9899\n9900\n9901\n9902\n9903\n9904\n9905\n9906\n9907\n9908\n9909\n9910\n9911\n9912\n9913\n9914\n9915\n9916\n9917\n9918\n9919\n9920\n9921\n9922\n9923\n9924\n9925\n9926\n9927\n9928\n9929\n9930\n9931\n9932\n9933\n9934\n9935\n9936\n9937\n9938\n9939\n9940\n9941\n9942\n9943\n9944\n9945\n9946\n9947\n9948\n9949\n9950\n9951\n9952\n9953\n9954\n9955\n9956\n9957\n9958\n9959\n9960\n9961\n9962\n9963\n9964\n9965\n9966\n9967\n9968\n9969\n9970\n9971\n9972\n9973\n9974\n9975\n9976\n9977\n9978\n9979\n9980\n9981\n9982\n9983\n9984\n9985\n9986\n9987\n9988\n9989\n9990\n9991\n9992\n9993\n9994\n9995\n9996\n9997\n9998\n9999\n10000\n"
  },
  {
    "path": "tests/golden/sum-freq-table.tsv",
    "content": "Units\tcount\tUnits_sum\n2\t1\t2\n3\t1\t3\n4\t1\t4\n5\t1\t5\n7\t2\t14\n11\t1\t11\n14\t1\t14\n15\t1\t15\n16\t1\t16\n27\t1\t27\n28\t2\t56\n29\t1\t29\n32\t1\t32\n35\t1\t35\n36\t1\t36\n42\t1\t42\n46\t1\t46\n50\t2\t100\n53\t1\t53\n55\t1\t55\n56\t1\t56\n57\t1\t57\n60\t2\t120\n62\t1\t62\n64\t1\t64\n66\t1\t66\n67\t1\t67\n74\t1\t74\n75\t1\t75\n76\t1\t76\n80\t1\t80\n81\t1\t81\n87\t1\t87\n90\t2\t180\n94\t1\t94\n95\t1\t95\n96\t2\t192\n"
  },
  {
    "path": "tests/golden/test_quartiles.tsv",
    "content": "Rep\tcount\tUnits_p33\tUnits_p67\nJones\t8\t42\t61\nJardine\t5\t40\t77\nGill\t5\t33\t50\nKivell\t4\t41\t50\nSorvino\t4\t6\t56\nAndrews\t4\t27\t66\nMorgan\t3\t45\t66\nParent\t3\t53\t76\nSmith\t3\t44\t73\nThompson\t2\t40\t48\nHoward\t2\t51\t73\n"
  },
  {
    "path": "tests/golden/transform-cols.tsv",
    "content": "Date\tCustomer\tSKU\tItem\tQuantity\tUnit\tPaid\n7/3/2018 1:47p\tRobert Armstrong\tNUTRI213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t4\t$12.95\t$51.8\n7/3/2018 3:32p\tKyle Kennedy\tNUTRI121\tnutri, Adult Cat - 3.5 oz\t1\t$4.22\t$4.22\n7/5/2018 4:15p\tDouglas \"Dougie\" Powers\tNUTRI121\tnutri, Adult Cat 3.5 oz\t1\t$4.22\t$4.22\n7/6/2018 12:15p\t桜 高橋 (Sakura Takahashi)\tNUTRI122\tnutri, Senior Wet Cat - 3 oz\t12\t$1.29\t157¥\n7/10/2018 10:28a\tDavid Attenborough\tNSCT201\tnutri, Salamander\t30\t$.05\t$1.5\n7/10/2018 5:23p\tSusan Ashworth\tCAT060\tCat, Korat (Felis catus)\t1\t$720.42\t$720.42\n7/10/2018 5:23p\tSusan Ashworth\tNUTRI130\tnutri, Kitten 3kg\t1\t$14.94\t$14.94\n7/13/2018 10:26a\tWil Wheaton\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t1\t$39.95\t$39.95\n7/13/2018 3:49p\tRobert Armstrong\tNUTRI216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 9:01a\tRobert Armstrong\tNUTRI217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 11:30a\tHelen Halestorm\tLAGO342\tRabbit (Oryctolagus cuniculus)\t2\t$32.94\t$65.88\n7/18/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tNUTRI122\tnutri, Senior Wet Cat - 3 oz\t6\t$1.29\t157¥\n7/19/2018 10:28a\tRubeus Hagrid\tNUTRI170\tnutri, Dog - 5kg\t5\t$44.95\t$224.75\n7/20/2018 2:13p\tJon Arbuckle\tNUTRI167\tnutri, Premium Wet Cat - 3.5 oz\t50\t$3.95\t$197.5\n7/23/2018 1:41p\tRobert Armstrong\tNUTRI215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/23/2018 4:23p\tDouglas \"Dougie\" Powers\tTOY235\tLaser Pointer\t1\t$16.12\t$16.12\n7/24/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tNUTRI122\tnutri, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/26/2018 4:39p\tDouglas \"Dougie\" Powers\tNUTRI420\tnutri, Shark - 10 kg\t1\t$15.70\t$15.7\n7/27/2018 12:16p\t桜 高橋 (Sakura Takahashi)\tNUTRI122\tnutri, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/30/2018 12:17p\t桜 高橋 (Sakura Takahashi)\tRETURN\tnutri, Senior Wet Cat - 3 oz\t1\t$1.29\t157¥\n7/31/2018 5:42p\tRubeus Hagrid\tCAT060\tnutri, Dragon - 50kg\t5\t$720.42\t$3602.1\n8/1/2018 2:44p\tDavid Attenborough\tNUTRI360\tnutri, Rhinocerous - 50kg\t4\t$5.72\t$22.88\n8/2/2018 5:12p\tSusan Ashworth\tCAT110\tCat, Maine Coon (Felix catus)\t1\t$1,309.68\t$1309.68\n8/2/2018 5:12p\tSusan Ashworth\tNUTRI130\tnutri, Kitten 3kg\t3\t$14.94\t$44.82\n8/6/2018 10:21a\tRobert Armstrong\tNUTRI212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t4\t$12.95\t$51.8\n8/7/2018 4:12p\tJuan Johnson\tREPT082\tKingsnake, California (Lampropeltis getula)\t1\t$89.95\t$89.95\n8/7/2018 4:12p\tJuan Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/10/2018 4:31p\tRobert Armstrong\tNUTRI211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t4\t$12.95\t$51.8\n8/13/2018 2:07p\tMonica Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/13/2018 2:08p\tMaría Fernández\tNUTRI146\tForti Diet Prohealth Mouse/Rat 3lbs\t2\t$2.00\t$4.0\n8/15/2018 11:57a\tMr. Praline\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t1\t$2300.00\t-$2300.0\n8/15/2018 3:48p\tKyle Kennedy\tNUTRI121\tnutri, Adult Cat - 3.5 oz\t2\t$4.22\t$8.44\n8/16/2018 11:50a\tHelen Halestorm\tRETURN\tRabbit (Oryctolagus cuniculus)\t6\t$0\t$0.0\n8/16/2018 4:00p\tKyle Kennedy\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$2,495.99\t$2495.99\n8/16/2018 5:15p\tMichael Smith\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t1\t29.95\t$31.85\n8/17/2018 9:26a\tRubeus Hagrid\tNSCT201\tnutri, Spider\t5\t$.05\t$0.25\n8/20/2018 9:36a\tKyle Kennedy\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$1,247.99\t-$1247.99\n8/20/2018 1:47p\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tGoat, American Pygmy (Capra hircus)\t1\t₪499\t$160.51\n8/20/2018 3:31p\tMonica Johnson\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t30\t$.05\t$1.5\n8/20/2018 5:12p\tDavid Attenborough\tNSCT084\tnutri, Pangolin\t30\t$.17\t$5.10\n8/21/2018 12:13p\tRobert Armstrong\tNUTRI214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/22/2018 9:38a\tDavid Attenborough\tBIRD160\tnutri, Quoll\t1\t29.95\t$29.95\n8/22/2018 2:13p\tJon Arbuckle\tNUTRI170\tnutri, Adult Dog - 5kg\t1\t$44.95\t$44.95\n8/22/2018 5:49p\tמרוסיה ניסנהולץ\tSFTY052\tFire Extinguisher, kitchen-rated\t1\t$61.70\t$61.70\n8/24/2018 11:42a\tRobert Armstrong\tNUTRI218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/27/2018 3:05p\tMonica Johnson\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t1\t$1.99\t$1.99\n8/28/2018 5:32p\tSusan Ashworth\tCAT020\tCat, Scottish Fold (Felis catus)\t1\t$1,964.53\t$1964.53\n8/28/2018 5:32p\tSusan Ashworth\tNUTRI130\tnutri, Kitten 3kg\t2\t$14.94\t$29.88\n8/29/2018 10:07a\tRobert Armstrong\tNUTRI219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t4\t$12.95\t$51.8\n8/31/2018 12:00a\tRobert Armstrong\tNUTRI219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t144\t$12.95\t$1864.8\n8/31/2018 5:57p\tJuan Johnson\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t1\t$99.95\t$99.95\n"
  },
  {
    "path": "tests/golden/type-customdate.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n1991-05-01\tEast\tJones\tPencil\t95\t1.99\t189.05\n1991-05-01\tCentral\tKivell\tBinder\t50\t19.99\t999.50\n1991-05-01\tCentral\tJardine\tPencil\t36\t4.99\t179.64\n1991-05-01\tCentral\tGill\tPen\t27\t19.99\t539.73\n1991-05-01\tWest\tSorvino\tPencil\t56\t2.99\t167.44\n1991-05-01\tEast\tJones\tBinder\t60\t4.99\t299.40\n1991-05-01\tCentral\tAndrews\tPencil\t75\t1.99\t149.25\n1991-05-01\tCentral\tJardine\tPencil\t90\t4.99\t449.10\n1991-05-01\tWest\tThompson\tPencil\t32\t1.99\t63.68\n1991-05-01\tEast\tJones\tBinder\t60\t8.99\t539.40\n1991-05-01\tCentral\tMorgan\tPencil\t90\t4.99\t449.10\n1991-05-01\tEast\tHoward\tBinder\t29\t1.99\t57.71\n1991-05-01\tEast\tParent\tBinder\t81\t19.99\t1619.19\n1991-05-01\tEast\tJones\tPencil\t35\t4.99\t174.65\n1991-05-01\tCentral\tSmith\tDesk\t2\t125.00\t250.00\n1991-05-01\tEast\tJones\tPen Set\t16\t15.99\t255.84\n1991-05-01\tCentral\tMorgan\tBinder\t28\t8.99\t251.72\n1991-05-01\tEast\tJones\tPen\t64\t8.99\t575.36\n1991-05-01\tEast\tParent\tPen\t15\t19.99\t299.85\n1991-05-01\tCentral\tKivell\tPen Set\t96\t4.99\t479.04\n1991-05-01\tCentral\tSmith\tPencil\t67\t1.29\t86.43\n1991-05-01\tEast\tParent\tPen Set\t74\t15.99\t1183.26\n1991-05-01\tCentral\tGill\tBinder\t46\t8.99\t413.54\n1991-05-01\tCentral\tSmith\tBinder\t87\t15.00\t1305.00\n1991-05-01\tEast\tJones\tBinder\t4\t4.99\t19.96\n1991-05-01\tWest\tSorvino\tBinder\t7\t19.99\t139.93\n1991-05-01\tCentral\tJardine\tPen Set\t50\t4.99\t249.50\n1991-05-01\tCentral\tAndrews\tPencil\t66\t1.99\t131.34\n1991-05-01\tEast\tHoward\tPen\t96\t4.99\t479.04\n1991-05-01\tCentral\tGill\tPencil\t53\t1.29\t68.37\n1991-05-01\tCentral\tGill\tBinder\t80\t8.99\t719.20\n1991-05-01\tCentral\tKivell\tDesk\t5\t125.00\t625.00\n1991-05-01\tEast\tJones\tPen Set\t62\t4.99\t309.38\n1991-05-01\tCentral\tMorgan\tPen Set\t55\t12.49\t686.95\n1991-05-01\tCentral\tKivell\tPen Set\t42\t23.95\t1005.90\n1991-05-01\tWest\tSorvino\tDesk\t3\t275.00\t825.00\n1991-05-01\tCentral\tGill\tPencil\t7\t1.29\t9.03\n1991-05-01\tWest\tSorvino\tPen\t76\t1.99\t151.24\n1991-05-01\tWest\tThompson\tBinder\t57\t19.99\t1139.43\n1991-05-01\tCentral\tAndrews\tPencil\t14\t1.29\t18.06\n1991-05-01\tCentral\tJardine\tBinder\t11\t4.99\t54.89\n1991-05-01\tCentral\tJardine\tBinder\t94\t19.99\t1879.06\n1991-05-01\tCentral\tAndrews\tBinder\t28\t4.99\t139.72\n"
  },
  {
    "path": "tests/golden/unfurl-dict.tsv",
    "content": "fall\tgeolocation_key\tgeolocation_value\tid\tmass\tname\tnametype\trecclass\treclat\treclong\tyear\t:@computed_region_cbhk_fwbd\t:@computed_region_nnqa_25f4\nFell\ttype\t\"Point\"\t1\t21\tAachen\tValid\tL5\t50.775000\t6.083330\t1880-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[6.08333, 50.775]\t1\t21\tAachen\tValid\tL5\t50.775000\t6.083330\t1880-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2\t720\tAarhus\tValid\tH6\t56.183330\t10.233330\t1951-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[10.23333, 56.18333]\t2\t720\tAarhus\tValid\tH6\t56.183330\t10.233330\t1951-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t6\t107000\tAbee\tValid\tEH4\t54.216670\t-113.000000\t1952-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-113, 54.21667]\t6\t107000\tAbee\tValid\tEH4\t54.216670\t-113.000000\t1952-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10\t1914\tAcapulco\tValid\tAcapulcoite\t16.883330\t-99.900000\t1976-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-99.9, 16.88333]\t10\t1914\tAcapulco\tValid\tAcapulcoite\t16.883330\t-99.900000\t1976-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t370\t780\tAchiras\tValid\tL6\t-33.166670\t-64.950000\t1902-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-64.95, -33.16667]\t370\t780\tAchiras\tValid\tL6\t-33.166670\t-64.950000\t1902-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t379\t4239\tAdhi Kot\tValid\tEH4\t32.100000\t71.800000\t1919-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[71.8, 32.1]\t379\t4239\tAdhi Kot\tValid\tEH4\t32.100000\t71.800000\t1919-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t390\t910\tAdzhi-Bogdo (stone)\tValid\tLL3-6\t44.833330\t95.166670\t1949-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[95.16667, 44.83333]\t390\t910\tAdzhi-Bogdo (stone)\tValid\tLL3-6\t44.833330\t95.166670\t1949-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t392\t30000\tAgen\tValid\tH5\t44.216670\t0.616670\t1814-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.61667, 44.21667]\t392\t30000\tAgen\tValid\tH5\t44.216670\t0.616670\t1814-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t398\t1620\tAguada\tValid\tL6\t-31.600000\t-65.233330\t1930-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-65.23333, -31.6]\t398\t1620\tAguada\tValid\tL6\t-31.600000\t-65.233330\t1930-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t417\t1440\tAguila Blanca\tValid\tL\t-30.866670\t-64.550000\t1920-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-64.55, -30.86667]\t417\t1440\tAguila Blanca\tValid\tL\t-30.866670\t-64.550000\t1920-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t423\t1000\tAioun el Atrouss\tValid\tDiogenite-pm\t16.398060\t-9.570280\t1974-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-9.57028, 16.39806]\t423\t1000\tAioun el Atrouss\tValid\tDiogenite-pm\t16.398060\t-9.570280\t1974-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t424\t24000\tAïr\tValid\tL6\t19.083330\t8.383330\t1925-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8.38333, 19.08333]\t424\t24000\tAïr\tValid\tL6\t19.083330\t8.383330\t1925-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t425\t\tAire-sur-la-Lys\tValid\tUnknown\t50.666670\t2.333330\t1769-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[2.33333, 50.66667]\t425\t\tAire-sur-la-Lys\tValid\tUnknown\t50.666670\t2.333330\t1769-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t426\t779\tAkaba\tValid\tL6\t29.516670\t35.050000\t1949-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[35.05, 29.51667]\t426\t779\tAkaba\tValid\tL6\t29.516670\t35.050000\t1949-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t427\t1800\tAkbarpur\tValid\tH4\t29.716670\t77.950000\t1838-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[77.95, 29.71667]\t427\t1800\tAkbarpur\tValid\tH4\t29.716670\t77.950000\t1838-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t432\t3000\tAkwanga\tValid\tH\t8.916670\t8.433330\t1959-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8.43333, 8.91667]\t432\t3000\tAkwanga\tValid\tH\t8.916670\t8.433330\t1959-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t433\t50000\tAkyumak\tValid\tIron, IVA\t39.916670\t42.816670\t1981-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[42.81667, 39.91667]\t433\t50000\tAkyumak\tValid\tIron, IVA\t39.916670\t42.816670\t1981-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t446\t160\tAl Rais\tValid\tCR2-an\t24.416670\t39.516670\t1957-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[39.51667, 24.41667]\t446\t160\tAl Rais\tValid\tCR2-an\t24.416670\t39.516670\t1957-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t447\t700\tAl Zarnkh\tValid\tLL5\t13.660330\t28.960000\t2001-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[28.96, 13.66033]\t447\t700\tAl Zarnkh\tValid\tLL5\t13.660330\t28.960000\t2001-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t448\t6000\tAlais\tValid\tCI1\t44.116670\t4.083330\t1806-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[4.08333, 44.11667]\t448\t6000\tAlais\tValid\tCI1\t44.116670\t4.083330\t1806-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t453\t2000\tAlbareto\tValid\tL/LL4\t44.650000\t11.016670\t1766-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[11.01667, 44.65]\t453\t2000\tAlbareto\tValid\tL/LL4\t44.650000\t11.016670\t1766-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t454\t625\tAlberta\tValid\tL\t2.000000\t22.666670\t1949-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[22.66667, 2]\t454\t625\tAlberta\tValid\tL\t2.000000\t22.666670\t1949-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t458\t252\tAlby sur Chéran\tValid\tEucrite-mmict\t45.821330\t6.015330\t2002-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[6.01533, 45.82133]\t458\t252\tAlby sur Chéran\tValid\tEucrite-mmict\t45.821330\t6.015330\t2002-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t461\t700\tAldsworth\tValid\tLL5\t51.783330\t-1.783330\t1835-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-1.78333, 51.78333]\t461\t700\tAldsworth\tValid\tLL5\t51.783330\t-1.783330\t1835-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t462\t3200\tAleppo\tValid\tL6\t36.233330\t37.133330\t1873-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[37.13333, 36.23333]\t462\t3200\tAleppo\tValid\tL6\t36.233330\t37.133330\t1873-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t463\t908\tAlessandria\tValid\tH5\t44.883330\t8.750000\t1860-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8.75, 44.88333]\t463\t908\tAlessandria\tValid\tH5\t44.883330\t8.750000\t1860-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t465\t9251\tAlexandrovsky\tValid\tH4\t50.950000\t31.816670\t1900-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[31.81667, 50.95]\t465\t9251\tAlexandrovsky\tValid\tH4\t50.950000\t31.816670\t1900-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t466\t228000\tAlfianello\tValid\tL6\t45.266670\t10.150000\t1883-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[10.15, 45.26667]\t466\t228000\tAlfianello\tValid\tL6\t45.266670\t10.150000\t1883-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2276\t32000\tAllegan\tValid\tH5\t42.533330\t-85.883330\t1899-01-01T00:00:00.000\t50\t429\nFell\tcoordinates\t[-85.88333, 42.53333]\t2276\t32000\tAllegan\tValid\tH5\t42.533330\t-85.883330\t1899-01-01T00:00:00.000\t50\t429\nFell\ttype\t\"Point\"\t2278\t2000000\tAllende\tValid\tCV3\t26.966670\t-105.316670\t1969-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-105.31667, 26.96667]\t2278\t2000000\tAllende\tValid\tCV3\t26.966670\t-105.316670\t1969-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t48915\t3950\tAlmahata Sitta\tValid\tUreilite-an\t20.745750\t32.412750\t2008-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[32.41275, 20.74575]\t48915\t3950\tAlmahata Sitta\tValid\tUreilite-an\t20.745750\t32.412750\t2008-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2284\t6000\tAlta'ameem\tValid\tLL5\t35.273330\t44.215560\t1977-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[44.21556, 35.27333]\t2284\t6000\tAlta'ameem\tValid\tLL5\t35.273330\t44.215560\t1977-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2290\t6400\tAmbapur Nagla\tValid\tH5\t27.666670\t78.250000\t1895-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.25, 27.66667]\t2290\t6400\tAmbapur Nagla\tValid\tH5\t27.666670\t78.250000\t1895-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2294\t2700\tAndhara\tValid\tStone-uncl\t26.583330\t85.566670\t1880-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[85.56667, 26.58333]\t2294\t2700\tAndhara\tValid\tStone-uncl\t26.583330\t85.566670\t1880-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2295\t3200\tAndover\tValid\tL6\t44.616670\t-70.750000\t1898-01-01T00:00:00.000\t49\t1723\nFell\tcoordinates\t[-70.75, 44.61667]\t2295\t3200\tAndover\tValid\tL6\t44.616670\t-70.750000\t1898-01-01T00:00:00.000\t49\t1723\nFell\ttype\t\"Point\"\t2296\t600\tAndreevka\tValid\tL3\t48.700000\t37.500000\t1969-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[37.5, 48.7]\t2296\t600\tAndreevka\tValid\tL3\t48.700000\t37.500000\t1969-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2298\t17900\tAndura\tValid\tH6\t20.883330\t76.866670\t1939-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.86667, 20.88333]\t2298\t17900\tAndura\tValid\tH6\t20.883330\t76.866670\t1939-01-01T00:00:00.000\t\t\nFound\ttype\t\"Point\"\t50693\t256.8\tNorthwest Africa 5815\tValid\tL5\t0.000000\t0.000000\t\t\t\nFound\tcoordinates\t[0, 0]\t50693\t256.8\tNorthwest Africa 5815\tValid\tL5\t0.000000\t0.000000\t\t\t\nFell\ttype\t\"Point\"\t2301\t\tAngers\tValid\tL6\t47.466670\t-0.550000\t1822-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-0.55, 47.46667]\t2301\t\tAngers\tValid\tL6\t47.466670\t-0.550000\t1822-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2302\t1500\tAngra dos Reis (stone)\tValid\tAngrite\t-22.966670\t-44.316670\t1869-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-44.31667, -22.96667]\t2302\t1500\tAngra dos Reis (stone)\tValid\tAngrite\t-22.966670\t-44.316670\t1869-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2304\t6500\tAnkober\tValid\tH4\t9.533330\t39.716670\t1942-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[39.71667, 9.53333]\t2304\t6500\tAnkober\tValid\tH4\t9.533330\t39.716670\t1942-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2305\t2500\tAnlong\tValid\tH5\t25.150000\t105.183330\t1971-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[105.18333, 25.15]\t2305\t2500\tAnlong\tValid\tH5\t25.150000\t105.183330\t1971-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2313\t320\tAomori\tValid\tL6\t40.810560\t140.785560\t1984-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[140.78556, 40.81056]\t2313\t320\tAomori\tValid\tL6\t40.810560\t140.785560\t1984-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2318\t15000\tAppley Bridge\tValid\tLL6\t53.583330\t-2.716670\t1914-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-2.71667, 53.58333]\t2318\t15000\tAppley Bridge\tValid\tLL6\t53.583330\t-2.716670\t1914-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2320\t3200\tApt\tValid\tL6\t43.866670\t5.383330\t1803-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[5.38333, 43.86667]\t2320\t3200\tApt\tValid\tL6\t43.866670\t5.383330\t1803-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2325\t810\tArbol Solo\tValid\tH5\t-33.000000\t-66.000000\t1954-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-66, -33]\t2325\t810\tArbol Solo\tValid\tH5\t-33.000000\t-66.000000\t1954-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2329\t5070\tArchie\tValid\tH6\t38.500000\t-94.300000\t1932-01-01T00:00:00.000\t18\t2697\nFell\tcoordinates\t[-94.3, 38.5]\t2329\t5070\tArchie\tValid\tH6\t38.500000\t-94.300000\t1932-01-01T00:00:00.000\t18\t2697\nFell\ttype\t\"Point\"\t2340\t7450\tArroyo Aguiar\tValid\tH5\t-31.416670\t-60.666670\t1950-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-60.66667, -31.41667]\t2340\t7450\tArroyo Aguiar\tValid\tH5\t-31.416670\t-60.666670\t1950-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2345\t41\tAsco\tValid\tH6\t42.450000\t9.033330\t1805-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[9.03333, 42.45]\t2345\t41\tAsco\tValid\tH6\t42.450000\t9.033330\t1805-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t48954\t9500\tAsh Creek\tValid\tL6\t31.805000\t-97.010000\t2009-01-01T00:00:00.000\t23\t774\nFell\tcoordinates\t[-97.01, 31.805]\t48954\t9500\tAsh Creek\tValid\tL6\t31.805000\t-97.010000\t2009-01-01T00:00:00.000\t23\t774\nFell\ttype\t\"Point\"\t2346\t1300\tAshdon\tValid\tL6\t52.050000\t0.300000\t1923-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.3, 52.05]\t2346\t1300\tAshdon\tValid\tL6\t52.050000\t0.300000\t1923-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t2353\t2000\tAssisi\tValid\tH5\t43.033330\t12.550000\t1886-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[12.55, 43.03333]\t2353\t2000\tAssisi\tValid\tH5\t43.033330\t12.550000\t1886-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4883\t1280\tAtarra\tValid\tL4\t25.254170\t80.625000\t1920-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[80.625, 25.25417]\t4883\t1280\tAtarra\tValid\tL4\t25.254170\t80.625000\t1920-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4884\t94.2\tAtemajac\tValid\tL6\t20.066670\t-103.666670\t1896-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-103.66667, 20.06667]\t4884\t94.2\tAtemajac\tValid\tL6\t20.066670\t-103.666670\t1896-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4885\t265\tAthens\tValid\tLL6\t34.750000\t-87.000000\t1933-01-01T00:00:00.000\t29\t3134\nFell\tcoordinates\t[-87, 34.75]\t4885\t265\tAthens\tValid\tLL6\t34.750000\t-87.000000\t1933-01-01T00:00:00.000\t29\t3134\nFell\ttype\t\"Point\"\t4888\t1384.2\tAtoka\tValid\tL6\t34.316670\t-96.150000\t1945-01-01T00:00:00.000\t20\t602\nFell\tcoordinates\t[-96.15, 34.31667]\t4888\t1384.2\tAtoka\tValid\tL6\t34.316670\t-96.150000\t1945-01-01T00:00:00.000\t20\t602\nFell\ttype\t\"Point\"\t4893\t800\tAubres\tValid\tAubrite\t44.383330\t5.166670\t1836-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[5.16667, 44.38333]\t4893\t800\tAubres\tValid\tAubrite\t44.383330\t5.166670\t1836-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4899\t50000\tAumale\tValid\tL6\t36.166670\t3.666670\t1865-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[3.66667, 36.16667]\t4899\t50000\tAumale\tValid\tL6\t36.166670\t3.666670\t1865-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4900\t2000\tAumieres\tValid\tL6\t44.333330\t3.233330\t1842-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[3.23333, 44.33333]\t4900\t2000\tAumieres\tValid\tL6\t44.333330\t3.233330\t1842-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4903\t50000\tAusson\tValid\tL5\t43.083330\t0.583330\t1858-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.58333, 43.08333]\t4903\t50000\tAusson\tValid\tL5\t43.083330\t0.583330\t1858-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4905\t9330\tAvanhandava\tValid\tH4\t-21.460280\t-49.950830\t1952-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-49.95083, -21.46028]\t4905\t9330\tAvanhandava\tValid\tH4\t-21.460280\t-49.950830\t1952-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4906\t1230\tAvce\tValid\tIron, IIAB\t46.000000\t13.500000\t1908-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[13.5, 46]\t4906\t1230\tAvce\tValid\tIron, IIAB\t46.000000\t13.500000\t1908-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4907\t146\tAvilez\tValid\tH\t25.000000\t-103.500000\t1855-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-103.5, 25]\t4907\t146\tAvilez\tValid\tH\t25.000000\t-103.500000\t1855-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4910\t134\tAwere\tValid\tL4\t2.716670\t32.833330\t1968-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[32.83333, 2.71667]\t4910\t134\tAwere\tValid\tL4\t2.716670\t32.833330\t1968-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4913\t2830\tAztec\tValid\tL6\t36.800000\t-108.000000\t1938-01-01T00:00:00.000\t11\t1989\nFell\tcoordinates\t[-108, 36.8]\t4913\t2830\tAztec\tValid\tL6\t36.800000\t-108.000000\t1938-01-01T00:00:00.000\t11\t1989\nFell\ttype\t\"Point\"\t4917\t18000\tBachmut\tValid\tL6\t48.600000\t38.000000\t1814-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[38, 48.6]\t4917\t18000\tBachmut\tValid\tL6\t48.600000\t38.000000\t1814-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4922\t10322\tBahjoi\tValid\tIron, IAB-sLL\t28.483330\t78.500000\t1934-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.5, 28.48333]\t4922\t10322\tBahjoi\tValid\tIron, IAB-sLL\t28.483330\t78.500000\t1934-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4925\t3700\tBald Mountain\tValid\tL4\t35.966670\t-82.483330\t1929-01-01T00:00:00.000\t37\t2373\nFell\tcoordinates\t[-82.48333, 35.96667]\t4925\t3700\tBald Mountain\tValid\tL4\t35.966670\t-82.483330\t1929-01-01T00:00:00.000\t37\t2373\nFell\ttype\t\"Point\"\t4926\t345\tBaldwyn\tValid\tL6\t34.500000\t-88.666670\t1922-01-01T00:00:00.000\t32\t495\nFell\tcoordinates\t[-88.66667, 34.5]\t4926\t345\tBaldwyn\tValid\tL6\t34.500000\t-88.666670\t1922-01-01T00:00:00.000\t32\t495\nFell\ttype\t\"Point\"\t4928\t1000\tBali\tValid\tCV3\t5.383330\t16.383330\t1907-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[16.38333, 5.38333]\t4928\t1000\tBali\tValid\tCV3\t5.383330\t16.383330\t1907-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4934\t16700\tBan Rong Du\tValid\tIron, ungrouped\t16.666670\t101.183330\t1993-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[101.18333, 16.66667]\t4934\t16700\tBan Rong Du\tValid\tIron, ungrouped\t16.666670\t101.183330\t1993-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4935\t11500\tBandong\tValid\tLL6\t-6.916670\t107.600000\t1871-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[107.6, -6.91667]\t4935\t11500\tBandong\tValid\tLL6\t-6.916670\t107.600000\t1871-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4936\t15000\tBansur\tValid\tL6\t27.700000\t76.333330\t1892-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.33333, 27.7]\t4936\t15000\tBansur\tValid\tL6\t27.700000\t76.333330\t1892-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4937\t14\tBanswal\tValid\tL5\t30.400000\t78.200000\t1913-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.2, 30.4]\t4937\t14\tBanswal\tValid\tL5\t30.400000\t78.200000\t1913-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4938\t629\tBanten\tValid\tCM2\t-6.333330\t106.000000\t1933-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[106, -6.33333]\t4938\t629\tBanten\tValid\tCM2\t-6.333330\t106.000000\t1933-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4942\t6400\tBarbotan\tValid\tH5\t43.950000\t-0.050000\t1790-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-0.05, 43.95]\t4942\t6400\tBarbotan\tValid\tH5\t43.950000\t-0.050000\t1790-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4944\t\tBarcelona (stone)\tValid\tOC\t41.366670\t2.166670\t1704-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[2.16667, 41.36667]\t4944\t\tBarcelona (stone)\tValid\tOC\t41.366670\t2.166670\t1704-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4946\t3200\tBarea\tValid\tMesosiderite-A1\t42.383330\t-2.500000\t1842-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-2.5, 42.38333]\t4946\t3200\tBarea\tValid\tMesosiderite-A1\t42.383330\t-2.500000\t1842-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4947\t23.2\tBarnaul\tValid\tH5\t52.733330\t84.083330\t1904-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[84.08333, 52.73333]\t4947\t23.2\tBarnaul\tValid\tH5\t52.733330\t84.083330\t1904-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4948\t17\tBarntrup\tValid\tLL4\t52.000000\t9.100000\t1886-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[9.1, 52]\t4948\t17\tBarntrup\tValid\tLL4\t52.000000\t9.100000\t1886-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4949\t4500\tBaroti\tValid\tL6\t31.616670\t76.800000\t1910-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.8, 31.61667]\t4949\t4500\tBaroti\tValid\tL6\t31.616670\t76.800000\t1910-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4954\t44000\tBarwell\tValid\tL5\t52.565280\t-1.339720\t1965-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-1.33972, 52.56528]\t4954\t44000\tBarwell\tValid\tL5\t52.565280\t-1.339720\t1965-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t44876\t29560\tBassikounou\tValid\tH5\t15.783330\t-5.900000\t2006-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-5.9, 15.78333]\t44876\t29560\tBassikounou\tValid\tH5\t15.783330\t-5.900000\t2006-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4957\t15500\tBaszkówka\tValid\tL5\t52.033330\t20.935830\t1994-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[20.93583, 52.03333]\t4957\t15500\tBaszkówka\tValid\tL5\t52.033330\t20.935830\t1994-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4974\t21000\tBath\tValid\tH4\t45.416670\t-98.316670\t1892-01-01T00:00:00.000\t21\t662\nFell\tcoordinates\t[-98.31667, 45.41667]\t4974\t21000\tBath\tValid\tH4\t45.416670\t-98.316670\t1892-01-01T00:00:00.000\t21\t662\nFell\ttype\t\"Point\"\t4975\t86000\tBath Furnace\tValid\tL6\t38.250000\t-83.750000\t1902-01-01T00:00:00.000\t36\t1921\nFell\tcoordinates\t[-83.75, 38.25]\t4975\t86000\tBath Furnace\tValid\tL6\t38.250000\t-83.750000\t1902-01-01T00:00:00.000\t36\t1921\nFell\ttype\t\"Point\"\t56133\t2900\tBattle Mountain\tValid\tL6\t40.668130\t-117.189130\t2012-01-01T00:00:00.000\t10\t2397\nFell\tcoordinates\t[-117.18913, 40.66813]\t56133\t2900\tBattle Mountain\tValid\tL6\t40.668130\t-117.189130\t2012-01-01T00:00:00.000\t10\t2397\nFell\ttype\t\"Point\"\t4976\t1557\tBawku\tValid\tLL5\t11.083330\t-0.183330\t1989-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-0.18333, 11.08333]\t4976\t1557\tBawku\tValid\tLL5\t11.083330\t-0.183330\t1989-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4977\t611\tBaxter\tValid\tL6\t36.750000\t-93.500000\t1916-01-01T00:00:00.000\t18\t2216\nFell\tcoordinates\t[-93.5, 36.75]\t4977\t611\tBaxter\tValid\tL6\t36.750000\t-93.500000\t1916-01-01T00:00:00.000\t18\t2216\nFell\ttype\t\"Point\"\t4984\t16000\tBeardsley\tValid\tH5\t39.800000\t-101.200000\t1929-01-01T00:00:00.000\t17\t1285\nFell\tcoordinates\t[-101.2, 39.8]\t4984\t16000\tBeardsley\tValid\tH5\t39.800000\t-101.200000\t1929-01-01T00:00:00.000\t17\t1285\nFell\ttype\t\"Point\"\t4986\t14000\tBeaver Creek\tValid\tH5\t51.166670\t-117.333330\t1893-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-117.33333, 51.16667]\t4986\t14000\tBeaver Creek\tValid\tH5\t51.166670\t-117.333330\t1893-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t4993\t794\tBeddgelert\tValid\tH5\t53.016670\t-4.100000\t1949-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-4.1, 53.01667]\t4993\t794\tBeddgelert\tValid\tH5\t53.016670\t-4.100000\t1949-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5005\t375\tBells\tValid\tC2-ung\t33.600000\t-96.466670\t1961-01-01T00:00:00.000\t23\t1978\nFell\tcoordinates\t[-96.46667, 33.6]\t5005\t375\tBells\tValid\tC2-ung\t33.600000\t-96.466670\t1961-01-01T00:00:00.000\t23\t1978\nFell\ttype\t\"Point\"\t5009\t\tBelville\tValid\tOC\t-32.333330\t-64.866670\t1937-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-64.86667, -32.33333]\t5009\t\tBelville\tValid\tOC\t-32.333330\t-64.866670\t1937-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5011\t3700\tBenares (a)\tValid\tLL4\t25.366670\t82.916670\t1798-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[82.91667, 25.36667]\t5011\t3700\tBenares (a)\tValid\tLL4\t25.366670\t82.916670\t1798-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t30443\t25000\tBenguerir\tValid\tLL6\t32.250000\t-8.150000\t2004-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-8.15, 32.25]\t30443\t25000\tBenguerir\tValid\tLL6\t32.250000\t-8.150000\t2004-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5018\t19000\tBeni M'hira\tValid\tL6\t32.866670\t10.800000\t2001-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[10.8, 32.86667]\t5018\t19000\tBeni M'hira\tValid\tL6\t32.866670\t10.800000\t2001-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5021\t1770.5\tBenld\tValid\tH6\t39.083330\t-89.150000\t1938-01-01T00:00:00.000\t34\t1869\nFell\tcoordinates\t[-89.15, 39.08333]\t5021\t1770.5\tBenld\tValid\tH6\t39.083330\t-89.150000\t1938-01-01T00:00:00.000\t34\t1869\nFell\ttype\t\"Point\"\t5023\t3880\tBenoni\tValid\tH6\t-26.166670\t28.416670\t1943-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[28.41667, -26.16667]\t5023\t3880\tBenoni\tValid\tH6\t-26.166670\t28.416670\t1943-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5024\t45000\tBensour\tValid\tLL6\t30.000000\t-7.000000\t2002-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-7, 30]\t5024\t45000\tBensour\tValid\tLL6\t30.000000\t-7.000000\t2002-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5026\t2840\tBenton\tValid\tLL6\t45.950000\t-67.550000\t1949-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-67.55, 45.95]\t5026\t2840\tBenton\tValid\tLL6\t45.950000\t-67.550000\t1949-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t48975\t270\tBerduc\tValid\tL6\t-31.910000\t-58.328330\t2008-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-58.32833, -31.91]\t48975\t270\tBerduc\tValid\tL6\t-31.910000\t-58.328330\t2008-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5028\t18000\tBéréba\tValid\tEucrite-mmict\t11.650000\t-3.650000\t1924-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-3.65, 11.65]\t5028\t18000\tBéréba\tValid\tEucrite-mmict\t11.650000\t-3.650000\t1924-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5029\t1440\tBerlanguillas\tValid\tL6\t41.683330\t-3.800000\t1811-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-3.8, 41.68333]\t5029\t1440\tBerlanguillas\tValid\tL6\t41.683330\t-3.800000\t1811-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t47355\t960\tBerthoud\tValid\tEucrite-mmict\t40.305830\t-105.023250\t2004-01-01T00:00:00.000\t9\t1072\nFell\tcoordinates\t[-105.02325, 40.30583]\t47355\t960\tBerthoud\tValid\tEucrite-mmict\t40.305830\t-105.023250\t2004-01-01T00:00:00.000\t9\t1072\nFell\ttype\t\"Point\"\t5032\t13.9\tBethlehem\tValid\tH\t42.533330\t-73.833330\t1859-01-01T00:00:00.000\t47\t2030\nFell\tcoordinates\t[-73.83333, 42.53333]\t5032\t13.9\tBethlehem\tValid\tH\t42.533330\t-73.833330\t1859-01-01T00:00:00.000\t47\t2030\nFell\ttype\t\"Point\"\t5034\t2000\tBeuste\tValid\tL5\t43.216670\t-0.233330\t1859-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-0.23333, 43.21667]\t5034\t2000\tBeuste\tValid\tL5\t43.216670\t-0.233330\t1859-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5035\t1100\tBeyrout\tValid\tLL3.8\t33.883330\t35.500000\t1921-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[35.5, 33.88333]\t5035\t1100\tBeyrout\tValid\tLL3.8\t33.883330\t35.500000\t1921-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5037\t18\tBhagur\tValid\tL6\t20.883330\t74.833330\t1877-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[74.83333, 20.88333]\t5037\t18\tBhagur\tValid\tL6\t20.883330\t74.833330\t1877-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t36591\t678\tBhawad\tValid\tLL6\t26.508330\t73.115280\t2002-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[73.11528, 26.50833]\t36591\t678\tBhawad\tValid\tLL6\t26.508330\t73.115280\t2002-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5039\t100\tBherai\tValid\tL6\t20.833330\t71.466670\t1893-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[71.46667, 20.83333]\t5039\t100\tBherai\tValid\tL6\t20.833330\t71.466670\t1893-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5040\t1047\tBhola\tValid\tLL3-6\t22.683330\t90.650000\t1940-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[90.65, 22.68333]\t5040\t1047\tBhola\tValid\tLL3-6\t22.683330\t90.650000\t1940-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5041\t2500\tBholghati\tValid\tHowardite\t22.083330\t86.900000\t1905-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[86.9, 22.08333]\t5041\t2500\tBholghati\tValid\tHowardite\t22.083330\t86.900000\t1905-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5042\t4000\tBialystok\tValid\tEucrite-pmict\t53.100000\t23.200000\t1827-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[23.2, 53.1]\t5042\t4000\tBialystok\tValid\tEucrite-pmict\t53.100000\t23.200000\t1827-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5043\t1900\tBielokrynitschie\tValid\tH4\t50.133330\t27.166670\t1887-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[27.16667, 50.13333]\t5043\t1900\tBielokrynitschie\tValid\tH4\t50.133330\t27.166670\t1887-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5045\t25000\tBilanga\tValid\tDiogenite\t12.450000\t-0.083330\t1999-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-0.08333, 12.45]\t5045\t25000\tBilanga\tValid\tDiogenite\t12.450000\t-0.083330\t1999-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5051\t488.1\tBinningup\tValid\tH5\t-33.156390\t115.676390\t1984-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[115.67639, -33.15639]\t5051\t488.1\tBinningup\tValid\tH5\t-33.156390\t115.676390\t1984-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5056\t560\tBirni N'konni\tValid\tH4\t13.766670\t5.300000\t1923-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[5.3, 13.76667]\t5056\t560\tBirni N'konni\tValid\tH4\t13.766670\t5.300000\t1923-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5059\t6000\tBishopville\tValid\tAubrite\t34.166670\t-80.283330\t1843-01-01T00:00:00.000\t33\t657\nFell\tcoordinates\t[-80.28333, 34.16667]\t5059\t6000\tBishopville\tValid\tAubrite\t34.166670\t-80.283330\t1843-01-01T00:00:00.000\t33\t657\nFell\ttype\t\"Point\"\t5060\t1039\tBishunpur\tValid\tLL3.15\t25.383330\t82.600000\t1895-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[82.6, 25.38333]\t5060\t1039\tBishunpur\tValid\tLL3.15\t25.383330\t82.600000\t1895-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5063\t1850\tBjelaja Zerkov\tValid\tH6\t49.783330\t30.166670\t1796-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[30.16667, 49.78333]\t5063\t1850\tBjelaja Zerkov\tValid\tH6\t49.783330\t30.166670\t1796-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5064\t330000\tBjurböle\tValid\tL/LL4\t60.400000\t25.800000\t1899-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[25.8, 60.4]\t5064\t330000\tBjurböle\tValid\tL/LL4\t60.400000\t25.800000\t1899-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5065\t705\tBlack Moshannan Park\tValid\tL5\t40.916670\t-78.083330\t1941-01-01T00:00:00.000\t48\t2495\nFell\tcoordinates\t[-78.08333, 40.91667]\t5065\t705\tBlack Moshannan Park\tValid\tL5\t40.916670\t-78.083330\t1941-01-01T00:00:00.000\t48\t2495\nFell\ttype\t\"Point\"\t5068\t2381\tBlackwell\tValid\tL5\t36.833330\t-97.333330\t1906-01-01T00:00:00.000\t20\t2164\nFell\tcoordinates\t[-97.33333, 36.83333]\t5068\t2381\tBlackwell\tValid\tL5\t36.833330\t-97.333330\t1906-01-01T00:00:00.000\t20\t2164\nFell\ttype\t\"Point\"\t5071\t5100\tBlanket\tValid\tL6\t31.833330\t-98.833330\t1909-01-01T00:00:00.000\t23\t3063\nFell\tcoordinates\t[-98.83333, 31.83333]\t5071\t5100\tBlanket\tValid\tL6\t31.833330\t-98.833330\t1909-01-01T00:00:00.000\t23\t3063\nFell\ttype\t\"Point\"\t5072\t470\tBlansko\tValid\tH6\t49.366670\t16.633330\t1833-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[16.63333, 49.36667]\t5072\t470\tBlansko\tValid\tH6\t49.366670\t16.633330\t1833-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5076\t67.8\tBloomington\tValid\tLL6\t40.480000\t-89.004170\t1938-01-01T00:00:00.000\t34\t1795\nFell\tcoordinates\t[-89.00417, 40.48]\t5076\t67.8\tBloomington\tValid\tLL6\t40.480000\t-89.004170\t1938-01-01T00:00:00.000\t34\t1795\nFell\ttype\t\"Point\"\t5090\t7500\tBo Xian\tValid\tLL3.9\t33.833330\t115.833330\t1977-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[115.83333, 33.83333]\t5090\t7500\tBo Xian\tValid\tLL3.9\t33.833330\t115.833330\t1977-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5093\t56\tBocas\tValid\tL6\t23.000000\t-102.000000\t1804-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-102, 23]\t5093\t56\tBocas\tValid\tL6\t23.000000\t-102.000000\t1804-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5097\t8800\tBogou\tValid\tIron, IAB-MG\t12.500000\t0.700000\t1962-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.7, 12.5]\t5097\t8800\tBogou\tValid\tIron, IAB-MG\t12.500000\t0.700000\t1962-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5098\t256000\tBoguslavka\tValid\tIron, IIAB\t44.550000\t131.633330\t1916-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[131.63333, 44.55]\t5098\t256000\tBoguslavka\tValid\tIron, IIAB\t44.550000\t131.633330\t1916-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5110\t1676\tBorgo San Donino\tValid\tLL6\t44.866670\t10.050000\t1808-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[10.05, 44.86667]\t5110\t1676\tBorgo San Donino\tValid\tLL6\t44.866670\t10.050000\t1808-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5111\t8600\tBori\tValid\tL6\t21.950000\t78.033330\t1894-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.03333, 21.95]\t5111\t8600\tBori\tValid\tL6\t21.950000\t78.033330\t1894-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5112\t1342\tBoriskino\tValid\tCM2\t54.233330\t52.483330\t1930-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[52.48333, 54.23333]\t5112\t1342\tBoriskino\tValid\tCM2\t54.233330\t52.483330\t1930-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5113\t7000\tBorkut\tValid\tL5\t48.150000\t24.283330\t1852-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[24.28333, 48.15]\t5113\t7000\tBorkut\tValid\tL5\t48.150000\t24.283330\t1852-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5114\t500\tBorodino\tValid\tH5\t55.466670\t35.866670\t1812-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[35.86667, 55.46667]\t5114\t500\tBorodino\tValid\tH5\t55.466670\t35.866670\t1812-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5117\t614\tBotschetschki\tValid\tL4\t51.333330\t33.883330\t1823-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[33.88333, 51.33333]\t5117\t614\tBotschetschki\tValid\tL4\t51.333330\t33.883330\t1823-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t57168\t190\tBoumdeid (2003)\tValid\tL6\t17.710670\t-11.371500\t2003-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-11.3715, 17.71067]\t57168\t190\tBoumdeid (2003)\tValid\tL6\t17.710670\t-11.371500\t2003-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t57167\t3599\tBoumdeid (2011)\tValid\tL6\t17.174930\t-11.341330\t2011-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-11.34133, 17.17493]\t57167\t3599\tBoumdeid (2011)\tValid\tL6\t17.174930\t-11.341330\t2011-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5121\t5460\tBovedy\tValid\tL3\t54.566670\t-6.333330\t1969-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-6.33333, 54.56667]\t5121\t5460\tBovedy\tValid\tL3\t54.566670\t-6.333330\t1969-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5128\t762\tBradford Woods\tValid\tL\t40.500000\t-80.083330\t1886-01-01T00:00:00.000\t48\t2455\nFell\tcoordinates\t[-80.08333, 40.5]\t5128\t762\tBradford Woods\tValid\tL\t40.500000\t-80.083330\t1886-01-01T00:00:00.000\t48\t2455\nFell\ttype\t\"Point\"\t5133\t39000\tBraunau\tValid\tIron, IIAB\t50.600000\t16.300000\t1847-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[16.3, 50.6]\t5133\t39000\tBraunau\tValid\tIron, IIAB\t50.600000\t16.300000\t1847-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5134\t1500\tBreitscheid\tValid\tH5\t50.666940\t8.183610\t1956-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8.18361, 50.66694]\t5134\t1500\tBreitscheid\tValid\tH5\t50.666940\t8.183610\t1956-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5135\t7250\tBremervörde\tValid\tH/L3.9\t53.400000\t9.100000\t1855-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[9.1, 53.4]\t5135\t7250\tBremervörde\tValid\tH/L3.9\t53.400000\t9.100000\t1855-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5140\t219\tBrient\tValid\tEucrite-pmict\t52.133330\t59.316670\t1933-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[59.31667, 52.13333]\t5140\t219\tBrient\tValid\tEucrite-pmict\t52.133330\t59.316670\t1933-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5156\t303000\tBruderheim\tValid\tL6\t53.900000\t-112.883330\t1960-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-112.88333, 53.9]\t5156\t303000\tBruderheim\tValid\tL6\t53.900000\t-112.883330\t1960-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t30448\t5300\tBukhara\tValid\tCV3\t39.779780\t64.600350\t2001-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[64.60035, 39.77978]\t30448\t5300\tBukhara\tValid\tCV3\t39.779780\t64.600350\t2001-01-01T00:00:00.000\t\t\nFell\t0\t\t5163\t2250\tBulls Run\tValid\tIron?\t\t\t1964-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t48653\t324\tBunburra Rockhole\tValid\tEucrite\t-31.350000\t129.190000\t2007-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[129.19, -31.35]\t48653\t324\tBunburra Rockhole\tValid\tEucrite\t-31.350000\t129.190000\t2007-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5165\t357\tBununu\tValid\tHowardite\t10.016670\t9.583330\t1942-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[9.58333, 10.01667]\t5165\t357\tBununu\tValid\tHowardite\t10.016670\t9.583330\t1942-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5169\t120000\tBur-Gheluai\tValid\tH5\t5.000000\t48.000000\t1919-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[48, 5]\t5169\t120000\tBur-Gheluai\tValid\tH5\t5.000000\t48.000000\t1919-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5175\t1504\tBurnwell\tValid\tH4-an\t37.621940\t-82.237220\t1990-01-01T00:00:00.000\t36\t256\nFell\tcoordinates\t[-82.23722, 37.62194]\t5175\t1504\tBurnwell\tValid\tH4-an\t37.621940\t-82.237220\t1990-01-01T00:00:00.000\t36\t256\nFell\ttype\t\"Point\"\t5177\t25000\tBursa\tValid\tL6\t40.200000\t29.233330\t1946-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[29.23333, 40.2]\t5177\t25000\tBursa\tValid\tL6\t40.200000\t29.233330\t1946-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5178\t5000\tBuschhof\tValid\tL6\t46.450000\t25.783330\t1863-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[25.78333, 46.45]\t5178\t5000\tBuschhof\tValid\tL6\t46.450000\t25.783330\t1863-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5181\t1500\tBustee\tValid\tAubrite\t26.783330\t82.833330\t1852-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[82.83333, 26.78333]\t5181\t1500\tBustee\tValid\tAubrite\t26.783330\t82.833330\t1852-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5183\t29000\tButsura\tValid\tH6\t27.083330\t84.083330\t1861-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[84.08333, 27.08333]\t5183\t29000\tButsura\tValid\tH6\t27.083330\t84.083330\t1861-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t48654\t41000\tBuzzard Coulee\tValid\tH4\t52.996000\t-109.848170\t2008-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-109.84817, 52.996]\t48654\t41000\tBuzzard Coulee\tValid\tH4\t52.996000\t-109.848170\t2008-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5185\t25000\tCabezo de Mayo\tValid\tL/LL6\t37.983330\t-1.166670\t1870-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-1.16667, 37.98333]\t5185\t25000\tCabezo de Mayo\tValid\tL/LL6\t37.983330\t-1.166670\t1870-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5186\t48500\tCabin Creek\tValid\tIron, IIIAB\t35.500000\t-93.500000\t1886-01-01T00:00:00.000\t15\t1029\nFell\tcoordinates\t[-93.5, 35.5]\t5186\t48500\tCabin Creek\tValid\tIron, IIIAB\t35.500000\t-93.500000\t1886-01-01T00:00:00.000\t15\t1029\nFell\ttype\t\"Point\"\t5187\t212\tCacak\tValid\tOC\t43.838890\t20.333330\t1919-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[20.33333, 43.83889]\t5187\t212\tCacak\tValid\tOC\t43.838890\t20.333330\t1919-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t45976\t478\tCali\tValid\tH/L4\t3.405000\t-76.510000\t2007-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-76.51, 3.405]\t45976\t478\tCali\tValid\tH/L4\t3.405000\t-76.510000\t2007-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5200\t2400\tCalivo\tValid\tStone-uncl\t11.750000\t122.333330\t1916-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[122.33333, 11.75]\t5200\t2400\tCalivo\tValid\tStone-uncl\t11.750000\t122.333330\t1916-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5249\t23680\tCampos Sales\tValid\tL5\t-7.033330\t-40.166670\t1991-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-40.16667, -7.03333]\t5249\t23680\tCampos Sales\tValid\tL5\t-7.033330\t-40.166670\t1991-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5250\t4000\tÇanakkale\tValid\tL6\t39.800000\t26.600000\t1964-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[26.6, 39.8]\t5250\t4000\tÇanakkale\tValid\tL6\t39.800000\t26.600000\t1964-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5251\t945\tCañellas\tValid\tH4\t41.250000\t1.666670\t1861-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[1.66667, 41.25]\t5251\t945\tCañellas\tValid\tH4\t41.250000\t1.666670\t1861-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5252\t34000\tCangas de Onis\tValid\tH5\t43.383330\t-5.150000\t1866-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-5.15, 43.38333]\t5252\t34000\tCangas de Onis\tValid\tH5\t43.383330\t-5.150000\t1866-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5253\t1400\tCanon City\tValid\tH6\t38.470280\t-105.241390\t1973-01-01T00:00:00.000\t9\t1448\nFell\tcoordinates\t[-105.24139, 38.47028]\t5253\t1400\tCanon City\tValid\tH6\t38.470280\t-105.241390\t1973-01-01T00:00:00.000\t9\t1448\nFell\ttype\t\"Point\"\t5260\t2300\tCape Girardeau\tValid\tH6\t37.266670\t-89.583330\t1846-01-01T00:00:00.000\t18\t2695\nFell\tcoordinates\t[-89.58333, 37.26667]\t5260\t2300\tCape Girardeau\tValid\tH6\t37.266670\t-89.583330\t1846-01-01T00:00:00.000\t18\t2695\nFell\ttype\t\"Point\"\t5264\t750\tCapilla del Monte\tValid\tH6\t-30.883330\t-64.550000\t1934-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-64.55, -30.88333]\t5264\t750\tCapilla del Monte\tValid\tH6\t-30.883330\t-64.550000\t1934-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t45817\t342\tCarancas\tValid\tH4-5\t-16.664440\t-69.043890\t2007-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-69.04389, -16.66444]\t45817\t342\tCarancas\tValid\tH4-5\t-16.664440\t-69.043890\t2007-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5265\t8\tCaratash\tValid\tLL6\t38.500000\t27.000000\t1902-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[27, 38.5]\t5265\t8\tCaratash\tValid\tLL6\t38.500000\t27.000000\t1902-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5291\t7300\tCastalia\tValid\tH5\t36.083330\t-78.066670\t1874-01-01T00:00:00.000\t37\t648\nFell\tcoordinates\t[-78.06667, 36.08333]\t5291\t7300\tCastalia\tValid\tH5\t36.083330\t-78.066670\t1874-01-01T00:00:00.000\t37\t648\nFell\ttype\t\"Point\"\t5292\t\tCastel Berardenga\tValid\tStone-uncl\t43.350000\t11.500000\t1791-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[11.5, 43.35]\t5292\t\tCastel Berardenga\tValid\tStone-uncl\t43.350000\t11.500000\t1791-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5293\t94\tCastine\tValid\tL6\t44.383330\t-68.750000\t1848-01-01T00:00:00.000\t49\t414\nFell\tcoordinates\t[-68.75, 44.38333]\t5293\t94\tCastine\tValid\tL6\t44.383330\t-68.750000\t1848-01-01T00:00:00.000\t49\t414\nFell\ttype\t\"Point\"\t5295\t15000\tCastrovillari\tValid\tStone-uncl\t39.800000\t16.200000\t1583-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[16.2, 39.8]\t5295\t15000\tCastrovillari\tValid\tStone-uncl\t39.800000\t16.200000\t1583-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5296\t1360\tCaswell County\tValid\tOC\t36.500000\t-79.250000\t1810-01-01T00:00:00.000\t37\t637\nFell\tcoordinates\t[-79.25, 36.5]\t5296\t1360\tCaswell County\tValid\tOC\t36.500000\t-79.250000\t1810-01-01T00:00:00.000\t37\t637\nFell\ttype\t\"Point\"\t5306\t1025\tCeniceros\tValid\tL3.7\t26.466670\t-105.233330\t1988-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-105.23333, 26.46667]\t5306\t1025\tCeniceros\tValid\tL3.7\t26.466670\t-105.233330\t1988-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5307\t45.6\tCenterville\tValid\tH5\t43.200000\t-96.916670\t1956-01-01T00:00:00.000\t21\t2684\nFell\tcoordinates\t[-96.91667, 43.2]\t5307\t45.6\tCenterville\tValid\tH5\t43.200000\t-96.916670\t1956-01-01T00:00:00.000\t21\t2684\nFell\ttype\t\"Point\"\t5308\t6460\tCereseto\tValid\tH5\t45.083330\t8.300000\t1840-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8.3, 45.08333]\t5308\t6460\tCereseto\tValid\tH5\t45.083330\t8.300000\t1840-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5313\t3700\tChadong\tValid\tL6\t28.533330\t109.316670\t1998-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[109.31667, 28.53333]\t5313\t3700\tChadong\tValid\tL6\t28.533330\t109.316670\t1998-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5314\t0.5\tChail\tValid\tH6\t25.366670\t81.666670\t1814-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[81.66667, 25.36667]\t5314\t0.5\tChail\tValid\tH6\t25.366670\t81.666670\t1814-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5315\t8200\tChainpur\tValid\tLL3.4\t25.850000\t83.483330\t1907-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[83.48333, 25.85]\t5315\t8200\tChainpur\tValid\tLL3.4\t25.850000\t83.483330\t1907-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5316\t18300\tChajari\tValid\tL5\t-30.783330\t-58.050000\t1933-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-58.05, -30.78333]\t5316\t18300\tChajari\tValid\tL5\t-30.783330\t-58.050000\t1933-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5320\t8800\tChandakapur\tValid\tL5\t20.266670\t76.016670\t1838-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.01667, 20.26667]\t5320\t8800\tChandakapur\tValid\tL5\t20.266670\t76.016670\t1838-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5321\t1100\tChandpur\tValid\tL6\t27.283330\t79.050000\t1885-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[79.05, 27.28333]\t5321\t1100\tChandpur\tValid\tL6\t27.283330\t79.050000\t1885-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5322\t1810\tChangde\tValid\tH5\t29.083330\t111.750000\t1977-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[111.75, 29.08333]\t5322\t1810\tChangde\tValid\tH5\t29.083330\t111.750000\t1977-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5325\t31500\tChantonnay\tValid\tL6\t46.683330\t1.050000\t1812-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[1.05, 46.68333]\t5325\t31500\tChantonnay\tValid\tL6\t46.683330\t1.050000\t1812-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5328\t4300\tCharlotte\tValid\tIron, IVA\t36.166670\t-87.333330\t1835-01-01T00:00:00.000\t39\t2007\nFell\tcoordinates\t[-87.33333, 36.16667]\t5328\t4300\tCharlotte\tValid\tIron, IVA\t36.166670\t-87.333330\t1835-01-01T00:00:00.000\t39\t2007\nFell\ttype\t\"Point\"\t5329\t27000\tCharsonville\tValid\tH6\t47.933330\t1.566670\t1810-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[1.56667, 47.93333]\t5329\t27000\tCharsonville\tValid\tH6\t47.933330\t1.566670\t1810-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5330\t12000\tCharwallas\tValid\tH6\t29.483330\t75.500000\t1834-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[75.5, 29.48333]\t5330\t12000\tCharwallas\tValid\tH6\t29.483330\t75.500000\t1834-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5331\t4000\tChassigny\tValid\tMartian (chassignite)\t47.716670\t5.366670\t1815-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[5.36667, 47.71667]\t5331\t4000\tChassigny\tValid\tMartian (chassignite)\t47.716670\t5.366670\t1815-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5332\t30000\tChâteau-Renard\tValid\tL6\t47.933330\t2.916670\t1841-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[2.91667, 47.93333]\t5332\t30000\tChâteau-Renard\tValid\tL6\t47.933330\t2.916670\t1841-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5334\t2945\tChaves\tValid\tHowardite\t41.933330\t-7.466670\t1925-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-7.46667, 41.93333]\t5334\t2945\tChaves\tValid\tHowardite\t41.933330\t-7.466670\t1925-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5338\t2936\tChela\tValid\tH4\t-3.666670\t32.500000\t1988-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[32.5, -3.66667]\t5338\t2936\tChela\tValid\tH4\t-3.666670\t32.500000\t1988-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t57165\t100000\tChelyabinsk\tValid\tLL5\t54.816670\t61.116670\t2013-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[61.11667, 54.81667]\t57165\t100000\tChelyabinsk\tValid\tLL5\t54.816670\t61.116670\t2013-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t47347\t100000\tChergach \tValid\tH5\t23.696390\t-5.014720\t2007-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-5.01472, 23.69639]\t47347\t100000\tChergach \tValid\tH5\t23.696390\t-5.014720\t2007-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5339\t6000\tChernyi Bor\tValid\tH4\t53.700000\t30.100000\t1964-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[30.1, 53.7]\t5339\t6000\tChernyi Bor\tValid\tH4\t53.700000\t30.100000\t1964-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5340\t8400\tCherokee Springs\tValid\tLL6\t35.033330\t-81.883330\t1933-01-01T00:00:00.000\t33\t2582\nFell\tcoordinates\t[-81.88333, 35.03333]\t5340\t8400\tCherokee Springs\tValid\tLL6\t35.033330\t-81.883330\t1933-01-01T00:00:00.000\t33\t2582\nFell\ttype\t\"Point\"\t5341\t705\tChervettaz\tValid\tL5\t46.550000\t6.816670\t1901-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[6.81667, 46.55]\t5341\t705\tChervettaz\tValid\tL5\t46.550000\t6.816670\t1901-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5342\t1700\tChervony Kut\tValid\tEucrite-mmict\t50.833330\t34.000000\t1939-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[34, 50.83333]\t5342\t1700\tChervony Kut\tValid\tEucrite-mmict\t50.833330\t34.000000\t1939-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5344\t72\tChetrinahatti\tValid\tStone-uncl\t14.500000\t76.500000\t1880-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.5, 14.5]\t5344\t72\tChetrinahatti\tValid\tStone-uncl\t14.500000\t76.500000\t1880-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5345\t367\tChiang Khan\tValid\tH6\t17.900000\t101.633330\t1981-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[101.63333, 17.9]\t5345\t367\tChiang Khan\tValid\tH6\t17.900000\t101.633330\t1981-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5349\t303\tChicora\tValid\tLL6\t40.933330\t-79.733330\t1938-01-01T00:00:00.000\t48\t2459\nFell\tcoordinates\t[-79.73333, 40.93333]\t5349\t303\tChicora\tValid\tLL6\t40.933330\t-79.733330\t1938-01-01T00:00:00.000\t48\t2459\nFell\ttype\t\"Point\"\t5355\t3920\tChisenga\tValid\tIron, IIIAB\t-10.059440\t33.395000\t1988-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[33.395, -10.05944]\t5355\t3920\tChisenga\tValid\tIron, IIIAB\t-10.059440\t33.395000\t1988-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5356\t\tChitado\tValid\tL6\t-17.350000\t13.966670\t1966-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[13.96667, -17.35]\t5356\t\tChitado\tValid\tL6\t-17.350000\t13.966670\t1966-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5357\t4000\tChitenay\tValid\tL6\t47.470830\t0.976670\t1978-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.97667, 47.47083]\t5357\t4000\tChitenay\tValid\tL6\t47.470830\t0.976670\t1978-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5364\t1600\tCilimus\tValid\tL5\t-6.950000\t108.100000\t1979-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[108.1, -6.95]\t5364\t1600\tCilimus\tValid\tL5\t-6.950000\t108.100000\t1979-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5374\t1455\tClaxton\tValid\tL6\t32.102500\t-81.872780\t1984-01-01T00:00:00.000\t31\t67\nFell\tcoordinates\t[-81.87278, 32.1025]\t5374\t1455\tClaxton\tValid\tL6\t32.102500\t-81.872780\t1984-01-01T00:00:00.000\t31\t67\nFell\t0\t\t5383\t48.6\tClohars\tValid\tL4\t\t\t1822-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5395\t104000\tColby (Wisconsin)\tValid\tL6\t44.900000\t-90.283330\t1917-01-01T00:00:00.000\t41\t877\nFell\tcoordinates\t[-90.28333, 44.9]\t5395\t104000\tColby (Wisconsin)\tValid\tL6\t44.900000\t-90.283330\t1917-01-01T00:00:00.000\t41\t877\nFell\ttype\t\"Point\"\t5397\t5200\tCold Bokkeveld\tValid\tCM2\t-33.133330\t19.383330\t1838-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[19.38333, -33.13333]\t5397\t5200\tCold Bokkeveld\tValid\tCM2\t-33.133330\t19.383330\t1838-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5401\t469\tColeman\tValid\tL6\t43.761110\t-84.507780\t1994-01-01T00:00:00.000\t50\t356\nFell\tcoordinates\t[-84.50778, 43.76111]\t5401\t469\tColeman\tValid\tL6\t43.761110\t-84.507780\t1994-01-01T00:00:00.000\t50\t356\nFell\ttype\t\"Point\"\t5403\t5000\tCollescipoli\tValid\tH5\t42.533330\t12.616670\t1890-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[12.61667, 42.53333]\t5403\t5000\tCollescipoli\tValid\tH5\t42.533330\t12.616670\t1890-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5418\t20350\tConquista\tValid\tH4\t-19.850000\t-47.550000\t1965-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-47.55, -19.85]\t5418\t20350\tConquista\tValid\tH4\t-19.850000\t-47.550000\t1965-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5451\t1200\tCosina\tValid\tH5\t21.166670\t-100.866670\t1844-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-100.86667, 21.16667]\t5451\t1200\tCosina\tValid\tH5\t21.166670\t-100.866670\t1844-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5465\t1460\tCranganore\tValid\tL6\t10.200000\t76.266670\t1917-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.26667, 10.2]\t5465\t1460\tCranganore\tValid\tL6\t10.200000\t76.266670\t1917-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5470\t78.400000000000006\tCrescent\tValid\tCM2\t35.950000\t-97.583330\t1936-01-01T00:00:00.000\t20\t2201\nFell\tcoordinates\t[-97.58333, 35.95]\t5470\t78.400000000000006\tCrescent\tValid\tCM2\t35.950000\t-97.583330\t1936-01-01T00:00:00.000\t20\t2201\nFell\ttype\t\"Point\"\t5474\t3650\tCronstad\tValid\tH5\t-27.700000\t27.300000\t1877-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[27.3, -27.7]\t5474\t3650\tCronstad\tValid\tH5\t-27.700000\t27.300000\t1877-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5476\t167\tCross Roads\tValid\tH5\t35.633330\t-78.133330\t1892-01-01T00:00:00.000\t37\t2332\nFell\tcoordinates\t[-78.13333, 35.63333]\t5476\t167\tCross Roads\tValid\tH5\t35.633330\t-78.133330\t1892-01-01T00:00:00.000\t37\t2332\nFell\ttype\t\"Point\"\t5477\t4255\tCrumlin\tValid\tL5\t54.616670\t-6.216670\t1902-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-6.21667, 54.61667]\t5477\t4255\tCrumlin\tValid\tL5\t54.616670\t-6.216670\t1902-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5496\t17000\tCumberland Falls\tValid\tAubrite\t36.833330\t-84.350000\t1919-01-01T00:00:00.000\t36\t1426\nFell\tcoordinates\t[-84.35, 36.83333]\t5496\t17000\tCumberland Falls\tValid\tAubrite\t36.833330\t-84.350000\t1919-01-01T00:00:00.000\t36\t1426\nFell\ttype\t\"Point\"\t5500\t6000\tCynthiana\tValid\tL/LL4\t38.400000\t-84.250000\t1877-01-01T00:00:00.000\t36\t244\nFell\tcoordinates\t[-84.25, 38.4]\t5500\t6000\tCynthiana\tValid\tL/LL4\t38.400000\t-84.250000\t1877-01-01T00:00:00.000\t36\t244\nFell\ttype\t\"Point\"\t5504\t18000\tDahmani\tValid\tLL6\t35.616670\t8.833330\t1981-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8.83333, 35.61667]\t5504\t18000\tDahmani\tValid\tLL6\t35.616670\t8.833330\t1981-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5511\t5650\tDandapur\tValid\tL6\t26.916670\t83.966670\t1878-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[83.96667, 26.91667]\t5511\t5650\tDandapur\tValid\tL6\t26.916670\t83.966670\t1878-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5513\t1064\tDaniel's Kuil\tValid\tEL6\t-28.200000\t24.566670\t1868-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[24.56667, -28.2]\t5513\t1064\tDaniel's Kuil\tValid\tEL6\t-28.200000\t24.566670\t1868-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t5514\t2000\tDanville\tValid\tL6\t34.400000\t-87.066670\t1868-01-01T00:00:00.000\t29\t103\nFell\tcoordinates\t[-87.06667, 34.4]\t5514\t2000\tDanville\tValid\tL6\t34.400000\t-87.066670\t1868-01-01T00:00:00.000\t29\t103\nFell\ttype\t\"Point\"\t6603\t100\tDarmstadt\tValid\tH5\t49.866670\t8.650000\t1804-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8.65, 49.86667]\t6603\t100\tDarmstadt\tValid\tH5\t49.866670\t8.650000\t1804-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t6604\t7000\tDashoguz\tValid\tH5\t41.984440\t59.685000\t1998-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[59.685, 41.98444]\t6604\t7000\tDashoguz\tValid\tH5\t41.984440\t59.685000\t1998-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t51559\t6580\tDaule\tValid\tL5\t-1.870890\t-79.957560\t2008-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-79.95756, -1.87089]\t51559\t6580\tDaule\tValid\tL5\t-1.870890\t-79.957560\t2008-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t6621\t340\tDe Cewsville\tValid\tH6\t43.000000\t-80.000000\t1887-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-80, 43]\t6621\t340\tDe Cewsville\tValid\tH6\t43.000000\t-80.000000\t1887-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t6634\t28\tDeal\tValid\tL6\t40.250000\t-74.000000\t1829-01-01T00:00:00.000\t\t2491\nFell\tcoordinates\t[-74, 40.25]\t6634\t28\tDeal\tValid\tL6\t40.250000\t-74.000000\t1829-01-01T00:00:00.000\t\t2491\nFell\ttype\t\"Point\"\t6642\t0.8\tDelhi\tValid\tL5\t28.566670\t77.250000\t1897-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[77.25, 28.56667]\t6642\t0.8\tDelhi\tValid\tL5\t28.566670\t77.250000\t1897-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t6649\t16400\tDemina\tValid\tL6\t51.466670\t84.766670\t1911-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[84.76667, 51.46667]\t6649\t16400\tDemina\tValid\tL6\t51.466670\t84.766670\t1911-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t6660\t230\tDenver\tValid\tL6\t39.782500\t-104.930560\t1967-01-01T00:00:00.000\t9\t1444\nFell\tcoordinates\t[-104.93056, 39.7825]\t6660\t230\tDenver\tValid\tL6\t39.782500\t-104.930560\t1967-01-01T00:00:00.000\t9\t1444\nFell\ttype\t\"Point\"\t6664\t12500\tDergaon\tValid\tH5\t26.683330\t93.866670\t2001-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[93.86667, 26.68333]\t6664\t12500\tDergaon\tValid\tH5\t26.683330\t93.866670\t2001-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t6693\t25400\tDesuri\tValid\tH6\t25.733330\t73.616670\t1962-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[73.61667, 25.73333]\t6693\t25400\tDesuri\tValid\tH6\t25.733330\t73.616670\t1962-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t6694\t12000\tDevgaon\tValid\tH3.8\t19.000000\t81.000000\t2001-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[81, 19]\t6694\t12000\tDevgaon\tValid\tH3.8\t19.000000\t81.000000\t2001-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t6696\t1140\tDevri-Khera\tValid\tL6\t24.225000\t76.525000\t1994-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.525, 24.225]\t6696\t1140\tDevri-Khera\tValid\tL6\t24.225000\t76.525000\t1994-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t6698\t45000\tDhajala\tValid\tH3.8\t22.377780\t71.427220\t1976-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[71.42722, 22.37778]\t6698\t45000\tDhajala\tValid\tH3.8\t22.377780\t71.427220\t1976-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t6699\t1800\tDharwar\tValid\tOC\t14.883330\t75.600000\t1848-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[75.6, 14.88333]\t6699\t1800\tDharwar\tValid\tOC\t14.883330\t75.600000\t1848-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7640\t32000\tDhurmsala\tValid\tLL6\t32.233330\t76.466670\t1860-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.46667, 32.23333]\t7640\t32000\tDhurmsala\tValid\tLL6\t32.233330\t76.466670\t1860-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t47350\t3396\tDidim\tValid\tH3-5\t37.351720\t27.329970\t2007-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[27.32997, 37.35172]\t47350\t3396\tDidim\tValid\tH3-5\t37.351720\t27.329970\t2007-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7642\t1000\tDiep River\tValid\tL6\t-33.750000\t18.566670\t1906-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[18.56667, -33.75]\t7642\t1000\tDiep River\tValid\tL6\t-33.750000\t18.566670\t1906-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7649\t400\tDistrito Quebracho\tValid\tH4\t-31.883330\t-60.466670\t1957-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-60.46667, -31.88333]\t7649\t400\tDistrito Quebracho\tValid\tH4\t-31.883330\t-60.466670\t1957-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7652\t166000\tDjati-Pengilon\tValid\tH6\t-7.500000\t111.500000\t1884-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[111.5, -7.5]\t7652\t166000\tDjati-Pengilon\tValid\tH6\t-7.500000\t111.500000\t1884-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7656\t3950\tDjermaia\tValid\tH\t12.733330\t15.050000\t1961-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[15.05, 12.73333]\t7656\t3950\tDjermaia\tValid\tH\t12.733330\t15.050000\t1961-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7657\t10000\tDjoumine\tValid\tH5-6\t36.950000\t9.550000\t1999-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[9.55, 36.95]\t7657\t10000\tDjoumine\tValid\tH5-6\t36.950000\t9.550000\t1999-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7658\t3840\tDokachi\tValid\tH5\t23.500000\t90.333330\t1903-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[90.33333, 23.5]\t7658\t3840\tDokachi\tValid\tH5\t23.500000\t90.333330\t1903-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7659\t1600\tDolgovoli\tValid\tL6\t50.750000\t25.300000\t1864-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[25.3, 50.75]\t7659\t1600\tDolgovoli\tValid\tL6\t50.750000\t25.300000\t1864-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7661\t438\tDomanitch\tValid\tL5\t40.000000\t29.000000\t1907-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[29, 40]\t7661\t438\tDomanitch\tValid\tL5\t40.000000\t29.000000\t1907-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7706\t128800\tDong Ujimqin Qi\tValid\tMesosiderite\t45.500000\t119.033330\t1995-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[119.03333, 45.5]\t7706\t128800\tDong Ujimqin Qi\tValid\tMesosiderite\t45.500000\t119.033330\t1995-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7707\t230\tDonga Kohrod\tValid\tH6\t21.866670\t82.450000\t1899-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[82.45, 21.86667]\t7707\t230\tDonga Kohrod\tValid\tH6\t21.866670\t82.450000\t1899-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7708\t5500\tDongtai\tValid\tLL6\t32.916670\t120.783330\t1970-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[120.78333, 32.91667]\t7708\t5500\tDongtai\tValid\tLL6\t32.916670\t120.783330\t1970-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7718\t3891\tDoroninsk\tValid\tH5-7\t51.200000\t112.300000\t1805-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[112.3, 51.2]\t7718\t3891\tDoroninsk\tValid\tH5-7\t51.200000\t112.300000\t1805-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7722\t1250\tDosso\tValid\tL6\t13.050000\t3.166670\t1962-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[3.16667, 13.05]\t7722\t1250\tDosso\tValid\tL6\t13.050000\t3.166670\t1962-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7723\t1161\tDouar Mghila\tValid\tLL6\t32.333330\t-6.300000\t1932-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-6.3, 32.33333]\t7723\t1161\tDouar Mghila\tValid\tLL6\t32.333330\t-6.300000\t1932-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7725\t642\tDowa\tValid\tStone-uncl\t-13.666670\t33.916670\t1976-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[33.91667, -13.66667]\t7725\t642\tDowa\tValid\tStone-uncl\t-13.666670\t33.916670\t1976-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7728\t5000\tDrake Creek\tValid\tL6\t36.400000\t-86.500000\t1827-01-01T00:00:00.000\t39\t2115\nFell\tcoordinates\t[-86.5, 36.4]\t7728\t5000\tDrake Creek\tValid\tL6\t36.400000\t-86.500000\t1827-01-01T00:00:00.000\t39\t2115\nFell\ttype\t\"Point\"\t7731\t47700\tDresden (Ontario)\tValid\tH6\t42.520000\t-82.260000\t1939-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-82.26, 42.52]\t7731\t47700\tDresden (Ontario)\tValid\tH6\t42.520000\t-82.260000\t1939-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7736\t1900\tDubrovnik\tValid\tL3-6\t42.458330\t18.441670\t1951-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[18.44167, 42.45833]\t7736\t1900\tDubrovnik\tValid\tL3-6\t42.458330\t18.441670\t1951-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7743\t30\tDunbogan\tValid\tL6\t-31.666670\t152.833330\t1999-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[152.83333, -31.66667]\t7743\t30\tDunbogan\tValid\tL6\t-31.666670\t152.833330\t1999-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7745\t2270\tDundrum\tValid\tH5\t52.550000\t-8.033330\t1865-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-8.03333, 52.55]\t7745\t2270\tDundrum\tValid\tH5\t52.550000\t-8.033330\t1865-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7749\t\tDunhua\tValid\tStone-uncl\t43.333330\t128.250000\t1976-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[128.25, 43.33333]\t7749\t\tDunhua\tValid\tStone-uncl\t43.333330\t128.250000\t1976-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7750\t13200\tDurala\tValid\tL6\t30.300000\t76.633330\t1815-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.63333, 30.3]\t7750\t13200\tDurala\tValid\tL6\t30.300000\t76.633330\t1815-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7752\t577\tDuruma\tValid\tL6\t-4.000000\t39.500000\t1853-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[39.5, -4]\t7752\t577\tDuruma\tValid\tL6\t-4.000000\t39.500000\t1853-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7754\t2117\tDuwun\tValid\tL6\t33.433330\t127.266670\t1943-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[127.26667, 33.43333]\t7754\t2117\tDuwun\tValid\tL6\t33.433330\t127.266670\t1943-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7755\t3230\tDwaleni\tValid\tH4-6\t-27.200000\t31.316670\t1970-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[31.31667, -27.2]\t7755\t3230\tDwaleni\tValid\tH4-6\t-27.200000\t31.316670\t1970-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7757\t300\tDyalpur\tValid\tUreilite\t26.250000\t82.000000\t1872-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[82, 26.25]\t7757\t300\tDyalpur\tValid\tUreilite\t26.250000\t82.000000\t1872-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7758\t188\tDyarrl Island\tValid\tMesosiderite-A1\t-3.000000\t151.000000\t1933-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[151, -3]\t7758\t188\tDyarrl Island\tValid\tMesosiderite-A1\t-3.000000\t151.000000\t1933-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7760\t10000\tEagle\tValid\tEL6\t40.781670\t-96.471670\t1947-01-01T00:00:00.000\t19\t462\nFell\tcoordinates\t[-96.47167, 40.78167]\t7760\t10000\tEagle\tValid\tEL6\t40.781670\t-96.471670\t1947-01-01T00:00:00.000\t19\t462\nFell\ttype\t\"Point\"\t7774\t2400\tEhole\tValid\tH5\t-17.300000\t15.833330\t1961-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[15.83333, -17.3]\t7774\t2400\tEhole\tValid\tH5\t-17.300000\t15.833330\t1961-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7775\t3000\tEichstädt\tValid\tH5\t48.900000\t11.216670\t1785-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[11.21667, 48.9]\t7775\t3000\tEichstädt\tValid\tH5\t48.900000\t11.216670\t1785-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7776\t3336\tEkeby\tValid\tH4\t56.033330\t13.000000\t1939-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[13, 56.03333]\t7776\t3336\tEkeby\tValid\tH4\t56.033330\t13.000000\t1939-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7777\t840\tEkh Khera\tValid\tH6\t28.266670\t78.783330\t1916-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.78333, 28.26667]\t7777\t840\tEkh Khera\tValid\tH6\t28.266670\t78.783330\t1916-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7807\t10000\tEl Idrissia\tValid\tL6\t34.416670\t3.250000\t1989-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[3.25, 34.41667]\t7807\t10000\tEl Idrissia\tValid\tL6\t34.416670\t3.250000\t1989-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t45977\t17226\tEl Paso de Aguila\tValid\tH5\t25.370000\t-97.370000\t1977-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-97.37, 25.37]\t45977\t17226\tEl Paso de Aguila\tValid\tH5\t25.370000\t-97.370000\t1977-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7819\t5000\tEl Tigre\tValid\tL6\t19.967220\t-103.051670\t1993-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-103.05167, 19.96722]\t7819\t5000\tEl Tigre\tValid\tL6\t19.967220\t-103.051670\t1993-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7822\t680.5\tElbert\tValid\tLL6\t39.246670\t-104.588170\t1998-01-01T00:00:00.000\t9\t88\nFell\tcoordinates\t[-104.58817, 39.24667]\t7822\t680.5\tElbert\tValid\tLL6\t39.246670\t-104.588170\t1998-01-01T00:00:00.000\t9\t88\nFell\ttype\t\"Point\"\t7823\t107000\tElbogen\tValid\tIron, IID\t50.183330\t12.733330\t1400-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[12.73333, 50.18333]\t7823\t107000\tElbogen\tValid\tIron, IID\t50.183330\t12.733330\t1400-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t7824\t54640\tElenovka\tValid\tL5\t47.833330\t37.666670\t1951-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[37.66667, 47.83333]\t7824\t54640\tElenovka\tValid\tL5\t47.833330\t37.666670\t1951-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10019\t1470\tEllemeet\tValid\tDiogenite\t51.750000\t4.000000\t1925-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[4, 51.75]\t10019\t1470\tEllemeet\tValid\tDiogenite\t51.750000\t4.000000\t1925-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10033\t127\tEmmaville\tValid\tEucrite-mmict\t-29.466670\t151.616670\t1900-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[151.61667, -29.46667]\t10033\t127\tEmmaville\tValid\tEucrite-mmict\t-29.466670\t151.616670\t1900-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10038\t8000\tEnshi\tValid\tH5\t30.300000\t109.500000\t1974-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[109.5, 30.3]\t10038\t8000\tEnshi\tValid\tH5\t30.300000\t109.500000\t1974-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10039\t127000\tEnsisheim\tValid\tLL6\t47.866670\t7.350000\t1492-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[7.35, 47.86667]\t10039\t127000\tEnsisheim\tValid\tLL6\t47.866670\t7.350000\t1492-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10041\t277\tÉpinal\tValid\tH5\t48.183330\t6.466670\t1822-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[6.46667, 48.18333]\t10041\t277\tÉpinal\tValid\tH5\t48.183330\t6.466670\t1822-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10042\t113\tErakot\tValid\tCM2\t19.033330\t81.891670\t1940-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[81.89167, 19.03333]\t10042\t113\tErakot\tValid\tCM2\t19.033330\t81.891670\t1940-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10043\t107.2\tErevan\tValid\tHowardite\t40.300000\t44.500000\t1911-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[44.5, 40.3]\t10043\t107.2\tErevan\tValid\tHowardite\t40.300000\t44.500000\t1911-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10044\t20000\tErgheo\tValid\tL5\t1.166670\t44.166670\t1889-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[44.16667, 1.16667]\t10044\t20000\tErgheo\tValid\tL5\t1.166670\t44.166670\t1889-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10049\t2250\tErxleben\tValid\tH6\t52.216670\t11.250000\t1812-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[11.25, 52.21667]\t10049\t2250\tErxleben\tValid\tH6\t52.216670\t11.250000\t1812-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10051\t1500\tEsnandes\tValid\tL6\t46.250000\t-1.100000\t1837-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-1.1, 46.25]\t10051\t1500\tEsnandes\tValid\tL6\t46.250000\t-1.100000\t1837-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10055\t500\tEssebi\tValid\tC2-ung\t2.883330\t30.833330\t1957-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[30.83333, 2.88333]\t10055\t500\tEssebi\tValid\tC2-ung\t2.883330\t30.833330\t1957-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10059\t320000\tEstherville\tValid\tMesosiderite-A3/4\t43.416670\t-94.833330\t1879-01-01T00:00:00.000\t16\t277\nFell\tcoordinates\t[-94.83333, 43.41667]\t10059\t320000\tEstherville\tValid\tMesosiderite-A3/4\t43.416670\t-94.833330\t1879-01-01T00:00:00.000\t16\t277\nFell\ttype\t\"Point\"\t10074\t89400\tFarmington\tValid\tL5\t39.750000\t-97.033330\t1890-01-01T00:00:00.000\t17\t1300\nFell\tcoordinates\t[-97.03333, 39.75]\t10074\t89400\tFarmington\tValid\tL5\t39.750000\t-97.033330\t1890-01-01T00:00:00.000\t17\t1300\nFell\ttype\t\"Point\"\t10075\t56000\tFarmville\tValid\tH4\t35.550000\t-77.533330\t1934-01-01T00:00:00.000\t37\t2439\nFell\tcoordinates\t[-77.53333, 35.55]\t10075\t56000\tFarmville\tValid\tH4\t35.550000\t-77.533330\t1934-01-01T00:00:00.000\t37\t2439\nFell\ttype\t\"Point\"\t10078\t1500\tFavars\tValid\tH5\t44.383330\t2.816670\t1844-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[2.81667, 44.38333]\t10078\t1500\tFavars\tValid\tH5\t44.383330\t2.816670\t1844-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10079\t2360\tFayetteville\tValid\tH4\t36.050000\t-94.166670\t1934-01-01T00:00:00.000\t15\t70\nFell\tcoordinates\t[-94.16667, 36.05]\t10079\t2360\tFayetteville\tValid\tH4\t36.050000\t-94.166670\t1934-01-01T00:00:00.000\t15\t70\nFell\ttype\t\"Point\"\t10080\t380\tFeid Chair\tValid\tH4\t36.883330\t8.450000\t1875-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8.45, 36.88333]\t10080\t380\tFeid Chair\tValid\tH4\t36.883330\t8.450000\t1875-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10081\t3200\tFelix\tValid\tCO3.3\t32.533330\t-87.166670\t1900-01-01T00:00:00.000\t29\t1631\nFell\tcoordinates\t[-87.16667, 32.53333]\t10081\t3200\tFelix\tValid\tCO3.3\t32.533330\t-87.166670\t1900-01-01T00:00:00.000\t29\t1631\nFell\ttype\t\"Point\"\t10086\t82\tFenghsien-Ku\tValid\tH5\t34.600000\t116.750000\t1924-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[116.75, 34.6]\t10086\t82\tFenghsien-Ku\tValid\tH5\t34.600000\t116.750000\t1924-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10088\t220\tFerguson\tValid\tOC\t36.100000\t-81.416670\t1889-01-01T00:00:00.000\t37\t2331\nFell\tcoordinates\t[-81.41667, 36.1]\t10088\t220\tFerguson\tValid\tOC\t36.100000\t-81.416670\t1889-01-01T00:00:00.000\t37\t2331\nFell\ttype\t\"Point\"\t10091\t10200\tFermo\tValid\tH3-5\t43.181110\t13.753330\t1996-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[13.75333, 43.18111]\t10091\t10200\tFermo\tValid\tH3-5\t43.181110\t13.753330\t1996-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10107\t17600\tFisher\tValid\tL6\t47.816670\t-96.850000\t1894-01-01T00:00:00.000\t1\t385\nFell\tcoordinates\t[-96.85, 47.81667]\t10107\t17600\tFisher\tValid\tL6\t47.816670\t-96.850000\t1894-01-01T00:00:00.000\t1\t385\nFell\ttype\t\"Point\"\t10111\t3640\tFlorence\tValid\tH3\t30.833330\t-97.766670\t1922-01-01T00:00:00.000\t23\t807\nFell\tcoordinates\t[-97.76667, 30.83333]\t10111\t3640\tFlorence\tValid\tH3\t30.833330\t-97.766670\t1922-01-01T00:00:00.000\t23\t807\nFell\ttype\t\"Point\"\t10119\t152000\tForest City\tValid\tH5\t43.250000\t-93.666670\t1890-01-01T00:00:00.000\t16\t1785\nFell\tcoordinates\t[-93.66667, 43.25]\t10119\t152000\tForest City\tValid\tH5\t43.250000\t-93.666670\t1890-01-01T00:00:00.000\t16\t1785\nFell\ttype\t\"Point\"\t10120\t26000\tForest Vale\tValid\tH4\t-33.350000\t146.858330\t1942-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[146.85833, -33.35]\t10120\t26000\tForest Vale\tValid\tH4\t-33.350000\t146.858330\t1942-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10123\t6067\tForksville\tValid\tL6\t36.783330\t-78.083330\t1924-01-01T00:00:00.000\t40\t2839\nFell\tcoordinates\t[-78.08333, 36.78333]\t10123\t6067\tForksville\tValid\tL6\t36.783330\t-78.083330\t1924-01-01T00:00:00.000\t40\t2839\nFell\ttype\t\"Point\"\t10163\t240\tForsbach\tValid\tH6\t50.950000\t7.316670\t1900-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[7.31667, 50.95]\t10163\t240\tForsbach\tValid\tH6\t50.950000\t7.316670\t1900-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10164\t16300\tForsyth\tValid\tL6\t33.016670\t-83.966670\t1829-01-01T00:00:00.000\t31\t1470\nFell\tcoordinates\t[-83.96667, 33.01667]\t10164\t16300\tForsyth\tValid\tL6\t33.016670\t-83.966670\t1829-01-01T00:00:00.000\t31\t1470\nFell\ttype\t\"Point\"\t10166\t\tFort Flatters\tValid\tStone-uncl\t28.250000\t7.000000\t1944-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[7, 28.25]\t10166\t\tFort Flatters\tValid\tStone-uncl\t28.250000\t7.000000\t1944-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10177\t650\tFrankfort (stone)\tValid\tHowardite\t34.483330\t-87.833330\t1868-01-01T00:00:00.000\t29\t99\nFell\tcoordinates\t[-87.83333, 34.48333]\t10177\t650\tFrankfort (stone)\tValid\tHowardite\t34.483330\t-87.833330\t1868-01-01T00:00:00.000\t29\t99\nFell\ttype\t\"Point\"\t52412\t23000\tFuhe\tValid\tL5\t31.475560\t113.566940\t1945-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[113.56694, 31.47556]\t52412\t23000\tFuhe\tValid\tL5\t31.475560\t113.566940\t1945-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10836\t11620\tFukutomi\tValid\tL5\t33.183330\t130.200000\t1882-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[130.2, 33.18333]\t10836\t11620\tFukutomi\tValid\tL5\t33.183330\t130.200000\t1882-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10838\t\tFünen\tValid\tStone-uncl\t55.333330\t10.333330\t1654-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[10.33333, 55.33333]\t10838\t\tFünen\tValid\tStone-uncl\t55.333330\t10.333330\t1654-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10839\t4000\tFuttehpur\tValid\tL6\t25.950000\t80.816670\t1822-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[80.81667, 25.95]\t10839\t4000\tFuttehpur\tValid\tL6\t25.950000\t80.816670\t1822-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10840\t2500\tFuyang\tValid\tStone-uncl\t32.900000\t115.900000\t1977-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[115.9, 32.9]\t10840\t2500\tFuyang\tValid\tStone-uncl\t32.900000\t115.900000\t1977-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10846\t132.69999999999999\tGalapian\tValid\tH6\t44.300000\t0.400000\t1826-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.4, 44.3]\t10846\t132.69999999999999\tGalapian\tValid\tH6\t44.300000\t0.400000\t1826-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10848\t36.1\tGalim (a)\tValid\tLL6\t7.050000\t12.433330\t1952-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[12.43333, 7.05]\t10848\t36.1\tGalim (a)\tValid\tLL6\t7.050000\t12.433330\t1952-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10849\t28\tGalim (b)\tValid\tEH3/4-an\t7.050000\t12.433330\t1952-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[12.43333, 7.05]\t10849\t28\tGalim (b)\tValid\tEH3/4-an\t7.050000\t12.433330\t1952-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10850\t5000\tGalkiv\tValid\tH4\t51.683330\t30.783330\t1995-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[30.78333, 51.68333]\t10850\t5000\tGalkiv\tValid\tH4\t51.683330\t30.783330\t1995-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10851\t6400\tGambat\tValid\tL6\t27.350000\t68.533330\t1897-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[68.53333, 27.35]\t10851\t6400\tGambat\tValid\tL6\t27.350000\t68.533330\t1897-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10854\t\tGao-Guenie\tValid\tH5\t11.650000\t-2.183330\t1960-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-2.18333, 11.65]\t10854\t\tGao-Guenie\tValid\tH5\t11.650000\t-2.183330\t1960-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10860\t380\tGarhi Yasin\tValid\tIron, IIE\t27.883330\t68.533330\t1917-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[68.53333, 27.88333]\t10860\t380\tGarhi Yasin\tValid\tIron, IIE\t27.883330\t68.533330\t1917-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10861\t102\tGarland\tValid\tDiogenite-pm\t41.683330\t-112.133330\t1950-01-01T00:00:00.000\t13\t2985\nFell\tcoordinates\t[-112.13333, 41.68333]\t10861\t102\tGarland\tValid\tDiogenite-pm\t41.683330\t-112.133330\t1950-01-01T00:00:00.000\t13\t2985\nFell\ttype\t\"Point\"\t44882\t4162\tGashua\tValid\tL6\t12.850000\t11.033330\t1984-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[11.03333, 12.85]\t44882\t4162\tGashua\tValid\tL6\t12.850000\t11.033330\t1984-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10866\t\tGasseltepaoua\tValid\tH5\t14.150830\t-2.041670\t2000-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-2.04167, 14.15083]\t10866\t\tGasseltepaoua\tValid\tH5\t14.150830\t-2.041670\t2000-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10870\t725\tGeidam\tValid\tH5\t12.916670\t11.916670\t1950-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[11.91667, 12.91667]\t10870\t725\tGeidam\tValid\tH5\t12.916670\t11.916670\t1950-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10914\t14290\tGifu\tValid\tL6\t35.533330\t136.883330\t1909-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[136.88333, 35.53333]\t10914\t14290\tGifu\tValid\tL6\t35.533330\t136.883330\t1909-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10917\t18000\tGirgenti\tValid\tL6\t37.316670\t13.566670\t1853-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[13.56667, 37.31667]\t10917\t18000\tGirgenti\tValid\tL6\t37.316670\t13.566670\t1853-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10919\t480\tGit-Git\tValid\tL6\t9.600000\t9.916670\t1947-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[9.91667, 9.6]\t10919\t480\tGit-Git\tValid\tL6\t9.600000\t9.916670\t1947-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10923\t670\tGlanerbrug\tValid\tL/LL5\t52.200000\t6.866670\t1990-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[6.86667, 52.2]\t10923\t670\tGlanerbrug\tValid\tL/LL5\t52.200000\t6.866670\t1990-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10924\t1303\tGlanggang\tValid\tH5-6\t-7.250000\t107.700000\t1939-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[107.7, -7.25]\t10924\t1303\tGlanggang\tValid\tH5-6\t-7.250000\t107.700000\t1939-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10926\t152000\tGlasatovo\tValid\tH4\t57.350000\t37.616670\t1918-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[37.61667, 57.35]\t10926\t152000\tGlasatovo\tValid\tH4\t57.350000\t37.616670\t1918-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10930\t767\tGlatton\tValid\tL6\t52.459720\t-0.300000\t1991-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-0.3, 52.45972]\t10930\t767\tGlatton\tValid\tL6\t52.459720\t-0.300000\t1991-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10936\t1750\tGnadenfrei\tValid\tH5\t50.666670\t16.766670\t1879-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[16.76667, 50.66667]\t10936\t1750\tGnadenfrei\tValid\tH5\t50.666670\t16.766670\t1879-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10948\t1600\tGopalpur\tValid\tH6\t24.233330\t89.050000\t1865-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[89.05, 24.23333]\t10948\t1600\tGopalpur\tValid\tH6\t24.233330\t89.050000\t1865-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10949\t3618\tGorlovka\tValid\tH3.7\t48.283330\t38.083330\t1974-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[38.08333, 48.28333]\t10949\t3618\tGorlovka\tValid\tH3.7\t48.283330\t38.083330\t1974-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t10956\t9000\tGranes\tValid\tL6\t42.900000\t2.250000\t1964-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[2.25, 42.9]\t10956\t9000\tGranes\tValid\tL6\t42.900000\t2.250000\t1964-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11196\t45.5\tGrefsheim\tValid\tL5\t60.666670\t11.000000\t1976-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[11, 60.66667]\t11196\t45.5\tGrefsheim\tValid\tL5\t60.666670\t11.000000\t1976-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t50911\t215\tGrimsby\tValid\tH5\t43.200000\t-79.616670\t2009-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-79.61667, 43.2]\t50911\t215\tGrimsby\tValid\tH5\t43.200000\t-79.616670\t2009-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11206\t3500\tGrosnaja\tValid\tCV3\t43.666670\t45.383330\t1861-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[45.38333, 43.66667]\t11206\t3500\tGrosnaja\tValid\tCV3\t43.666670\t45.383330\t1861-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11207\t10500\tGross-Divina\tValid\tH5\t49.266670\t18.716670\t1837-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[18.71667, 49.26667]\t11207\t10500\tGross-Divina\tValid\tH5\t49.266670\t18.716670\t1837-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11208\t8000\tGrossliebenthal\tValid\tL6\t46.350000\t30.583330\t1881-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[30.58333, 46.35]\t11208\t8000\tGrossliebenthal\tValid\tL6\t46.350000\t30.583330\t1881-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11426\t1000\tGrüneberg\tValid\tH4\t51.933330\t15.500000\t1841-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[15.5, 51.93333]\t11426\t1000\tGrüneberg\tValid\tH4\t51.933330\t15.500000\t1841-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11429\t690\tGrzempach\tValid\tH5\t52.866670\t16.633330\t1910-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[16.63333, 52.86667]\t11429\t690\tGrzempach\tValid\tH5\t52.866670\t16.633330\t1910-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11432\t22000\tGualeguaychú\tValid\tH6\t-33.000000\t-58.616670\t1932-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-58.61667, -33]\t11432\t22000\tGualeguaychú\tValid\tH6\t-33.000000\t-58.616670\t1932-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11435\t2910\tGuangmingshan\tValid\tH5\t39.804170\t122.763890\t1996-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[122.76389, 39.80417]\t11435\t2910\tGuangmingshan\tValid\tH5\t39.804170\t122.763890\t1996-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11436\t\tGuangnan\tValid\tL6\t24.100000\t105.000000\t1983-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[105, 24.1]\t11436\t\tGuangnan\tValid\tL6\t24.100000\t105.000000\t1983-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11437\t1900\tGuangrao\tValid\tL6\t37.100000\t118.400000\t1980-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[118.4, 37.1]\t11437\t1900\tGuangrao\tValid\tL6\t37.100000\t118.400000\t1980-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11439\t39000\tGuareña\tValid\tH6\t38.733330\t-6.016670\t1892-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-6.01667, 38.73333]\t11439\t39000\tGuareña\tValid\tH6\t38.733330\t-6.016670\t1892-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11440\t1915\tGuêa\tValid\tStone-uncl\t43.766670\t20.233330\t1891-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[20.23333, 43.76667]\t11440\t1915\tGuêa\tValid\tStone-uncl\t43.766670\t20.233330\t1891-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11442\t288\tGuibga\tValid\tL5\t13.500000\t-0.683330\t1972-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-0.68333, 13.5]\t11442\t288\tGuibga\tValid\tL5\t13.500000\t-0.683330\t1972-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11443\t968\tGuidder\tValid\tLL5\t9.916670\t13.983330\t1949-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[13.98333, 9.91667]\t11443\t968\tGuidder\tValid\tLL5\t9.916670\t13.983330\t1949-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11448\t2449\tGujargaon\tValid\tH5\t22.983330\t76.050000\t1982-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.05, 22.98333]\t11448\t2449\tGujargaon\tValid\tH5\t22.983330\t76.050000\t1982-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11449\t100000\tGujba\tValid\tCBa\t11.491670\t11.658330\t1984-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[11.65833, 11.49167]\t11449\t100000\tGujba\tValid\tCBa\t11.491670\t11.658330\t1984-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11450\t5700\tGumoschnik\tValid\tH5\t42.900000\t24.700000\t1904-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[24.7, 42.9]\t11450\t5700\tGumoschnik\tValid\tH5\t42.900000\t24.700000\t1904-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11464\t28\tGurram Konda\tValid\tL6\t13.783330\t78.566670\t1814-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.56667, 13.78333]\t11464\t28\tGurram Konda\tValid\tL6\t13.783330\t78.566670\t1814-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11465\t34650\tGursum\tValid\tH4/5\t9.366670\t42.416670\t1981-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[42.41667, 9.36667]\t11465\t34650\tGursum\tValid\tH4/5\t9.366670\t42.416670\t1981-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11466\t1000\tGütersloh\tValid\tH3/4\t51.916670\t8.383330\t1851-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8.38333, 51.91667]\t11466\t1000\tGütersloh\tValid\tH3/4\t51.916670\t8.383330\t1851-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11467\t1320\tGyokukei\tValid\tOC\t35.000000\t127.500000\t1930-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[127.5, 35]\t11467\t1320\tGyokukei\tValid\tOC\t35.000000\t127.500000\t1930-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11468\t0.2\tHachi-oji\tValid\tH?\t35.650000\t139.333330\t1817-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[139.33333, 35.65]\t11468\t0.2\tHachi-oji\tValid\tH?\t35.650000\t139.333330\t1817-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11472\t9000\tHainaut\tValid\tH3-6\t50.316670\t3.733330\t1934-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[3.73333, 50.31667]\t11472\t9000\tHainaut\tValid\tH3-6\t50.316670\t3.733330\t1934-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11479\t1456\tHallingeberg\tValid\tL3.4\t57.816670\t16.233330\t1944-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[16.23333, 57.81667]\t11479\t1456\tHallingeberg\tValid\tL3.4\t57.816670\t16.233330\t1944-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11485\t3710\tHamlet\tValid\tLL4\t41.383330\t-86.600000\t1959-01-01T00:00:00.000\t35\t1205\nFell\tcoordinates\t[-86.6, 41.38333]\t11485\t3710\tHamlet\tValid\tLL4\t41.383330\t-86.600000\t1959-01-01T00:00:00.000\t35\t1205\nFell\ttype\t\"Point\"\t11824\t1000\tHaraiya\tValid\tEucrite-mmict\t26.800000\t82.533330\t1878-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[82.53333, 26.8]\t11824\t1000\tHaraiya\tValid\tEucrite-mmict\t26.800000\t82.533330\t1878-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11829\t315\tHaripura\tValid\tCM2\t28.383330\t75.783330\t1921-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[75.78333, 28.38333]\t11829\t315\tHaripura\tValid\tCM2\t28.383330\t75.783330\t1921-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11830\t8360\tHarleton\tValid\tL6\t32.675000\t-94.511670\t1961-01-01T00:00:00.000\t23\t2025\nFell\tcoordinates\t[-94.51167, 32.675]\t11830\t8360\tHarleton\tValid\tL6\t32.675000\t-94.511670\t1961-01-01T00:00:00.000\t23\t2025\nFell\ttype\t\"Point\"\t11842\t680\tHarrison County\tValid\tL6\t38.250000\t-86.166670\t1859-01-01T00:00:00.000\t35\t1855\nFell\tcoordinates\t[-86.16667, 38.25]\t11842\t680\tHarrison County\tValid\tL6\t38.250000\t-86.166670\t1859-01-01T00:00:00.000\t35\t1855\nFell\ttype\t\"Point\"\t11848\t1110.5999999999999\tHashima\tValid\tH4\t35.294500\t136.700330\t1910-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[136.70033, 35.2945]\t11848\t1110.5999999999999\tHashima\tValid\tH4\t35.294500\t136.700330\t1910-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11852\t1250\tHassi-Jekna\tValid\tIron, IAB-sHL\t28.950000\t0.816670\t1890-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.81667, 28.95]\t11852\t1250\tHassi-Jekna\tValid\tIron, IAB-sHL\t28.950000\t0.816670\t1890-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11855\t29000\tHatford\tValid\tStone-uncl\t51.650000\t-1.516670\t1628-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-1.51667, 51.65]\t11855\t29000\tHatford\tValid\tStone-uncl\t51.650000\t-1.516670\t1628-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11859\t1544\tHaverö\tValid\tUreilite\t60.245560\t22.061940\t1971-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[22.06194, 60.24556]\t11859\t1544\tHaverö\tValid\tUreilite\t60.245560\t22.061940\t1971-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11869\t3500\tHedeskoga\tValid\tH5\t55.466670\t13.783330\t1922-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[13.78333, 55.46667]\t11869\t3500\tHedeskoga\tValid\tH5\t55.466670\t13.783330\t1922-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11870\t6100\tHedjaz\tValid\tL3.7-6\t27.333330\t35.666670\t1910-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[35.66667, 27.33333]\t11870\t6100\tHedjaz\tValid\tL3.7-6\t27.333330\t35.666670\t1910-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11875\t1000\tHeredia\tValid\tH5\t10.000000\t-84.100000\t1857-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-84.1, 10]\t11875\t1000\tHeredia\tValid\tH5\t10.000000\t-84.100000\t1857-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11878\t20000\tHessle\tValid\tH5\t59.850000\t17.666670\t1869-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[17.66667, 59.85]\t11878\t20000\tHessle\tValid\tH5\t59.850000\t17.666670\t1869-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11883\t750\tHigashi-koen\tValid\tH5\t33.600000\t130.433330\t1897-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[130.43333, 33.6]\t11883\t750\tHigashi-koen\tValid\tH5\t33.600000\t130.433330\t1897-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11884\t4500\tHigh Possil\tValid\tL6\t55.900000\t-4.233330\t1804-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-4.23333, 55.9]\t11884\t4500\tHigh Possil\tValid\tL6\t55.900000\t-4.233330\t1804-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11889\t414\tHiroshima\tValid\tH5\t34.450000\t132.383330\t2003-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[132.38333, 34.45]\t11889\t414\tHiroshima\tValid\tH5\t34.450000\t132.383330\t2003-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t44714\t167.7\tHoima\tValid\tH6\t1.345000\t31.472780\t2003-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[31.47278, 1.345]\t44714\t167.7\tHoima\tValid\tH6\t1.345000\t31.472780\t2003-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11893\t305.5\tHökmark\tValid\tL4\t64.433330\t21.200000\t1954-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[21.2, 64.43333]\t11893\t305.5\tHökmark\tValid\tL4\t64.433330\t21.200000\t1954-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11894\t220000\tHolbrook\tValid\tL/LL6\t34.900000\t-110.183330\t1912-01-01T00:00:00.000\t7\t990\nFell\tcoordinates\t[-110.18333, 34.9]\t11894\t220000\tHolbrook\tValid\tL/LL6\t34.900000\t-110.183330\t1912-01-01T00:00:00.000\t7\t990\nFell\ttype\t\"Point\"\t11895\t1415\tHoletta\tValid\tStone-uncl\t9.066670\t38.416670\t1923-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[38.41667, 9.06667]\t11895\t1415\tHoletta\tValid\tStone-uncl\t9.066670\t38.416670\t1923-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11901\t230000\tHomestead\tValid\tL5\t41.800000\t-91.866670\t1875-01-01T00:00:00.000\t16\t284\nFell\tcoordinates\t[-91.86667, 41.8]\t11901\t230000\tHomestead\tValid\tL5\t41.800000\t-91.866670\t1875-01-01T00:00:00.000\t16\t284\nFell\ttype\t\"Point\"\t11904\t2420\tHonolulu\tValid\tL5\t21.300000\t-157.866670\t1825-01-01T00:00:00.000\t4\t1657\nFell\tcoordinates\t[-157.86667, 21.3]\t11904\t2420\tHonolulu\tValid\tL5\t21.300000\t-157.866670\t1825-01-01T00:00:00.000\t4\t1657\nFell\ttype\t\"Point\"\t11913\t180\tHotse\tValid\tL6\t35.666670\t115.500000\t1956-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[115.5, 35.66667]\t11913\t180\tHotse\tValid\tL6\t35.666670\t115.500000\t1956-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11915\t266.10000000000002\tHoxie\tValid\tOC\t39.350000\t-100.450000\t1963-01-01T00:00:00.000\t17\t1293\nFell\tcoordinates\t[-100.45, 39.35]\t11915\t266.10000000000002\tHoxie\tValid\tOC\t39.350000\t-100.450000\t1963-01-01T00:00:00.000\t17\t1293\nFell\ttype\t\"Point\"\t11916\t49000\tHraschina\tValid\tIron, IID\t46.100000\t16.333330\t1751-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[16.33333, 46.1]\t11916\t49000\tHraschina\tValid\tIron, IID\t46.100000\t16.333330\t1751-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t54719\t1600\tHuaxi\tValid\tH5\t26.464690\t106.632410\t2010-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[106.63241, 26.46469]\t54719\t1600\tHuaxi\tValid\tH5\t26.464690\t106.632410\t2010-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11986\t112\tHungen\tValid\tH6\t50.300000\t8.916670\t1877-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8.91667, 50.3]\t11986\t112\tHungen\tValid\tH6\t50.300000\t8.916670\t1877-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11989\t14000\tHvittis\tValid\tEL6\t61.183330\t22.683330\t1901-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[22.68333, 61.18333]\t11989\t14000\tHvittis\tValid\tEL6\t61.183330\t22.683330\t1901-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11992\t2000\tIbbenbüren\tValid\tDiogenite\t52.283330\t7.700000\t1870-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[7.7, 52.28333]\t11992\t2000\tIbbenbüren\tValid\tDiogenite\t52.283330\t7.700000\t1870-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11993\t2500\tIbitira\tValid\tEucrite-mmict\t-20.000000\t-45.000000\t1957-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-45, -20]\t11993\t2500\tIbitira\tValid\tEucrite-mmict\t-20.000000\t-45.000000\t1957-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11994\t\tIbrisim\tValid\tOC\t38.000000\t35.000000\t1949-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[35, 38]\t11994\t\tIbrisim\tValid\tOC\t38.000000\t35.000000\t1949-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t11995\t3973\tIchkala\tValid\tH6\t58.200000\t82.933330\t1936-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[82.93333, 58.2]\t11995\t3973\tIchkala\tValid\tH6\t58.200000\t82.933330\t1936-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12000\t3457\tIdutywa\tValid\tH5\t-32.100000\t28.333330\t1956-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[28.33333, -32.1]\t12000\t3457\tIdutywa\tValid\tH5\t-32.100000\t28.333330\t1956-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12003\t1200\tIguaracu\tValid\tH5\t-23.200000\t-51.833330\t1977-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-51.83333, -23.2]\t12003\t1200\tIguaracu\tValid\tH5\t-23.200000\t-51.833330\t1977-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12004\t7330\tIjopega\tValid\tH6\t-6.033330\t145.366670\t1975-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[145.36667, -6.03333]\t12004\t7330\tIjopega\tValid\tH6\t-6.033330\t145.366670\t1975-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12027\t27000\tIndarch\tValid\tEH4\t39.750000\t46.666670\t1891-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[46.66667, 39.75]\t12027\t27000\tIndarch\tValid\tEH4\t39.750000\t46.666670\t1891-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12028\t880\tIndependence\tValid\tL6\t39.083330\t-94.400000\t1917-01-01T00:00:00.000\t18\t525\nFell\tcoordinates\t[-94.4, 39.08333]\t12028\t880\tIndependence\tValid\tL6\t39.083330\t-94.400000\t1917-01-01T00:00:00.000\t18\t525\nFell\ttype\t\"Point\"\t12037\t3000\tInner Mongolia\tValid\tL6\t41.000000\t112.000000\t1963-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[112, 41]\t12037\t3000\tInner Mongolia\tValid\tL6\t41.000000\t112.000000\t1963-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12039\t4576\tInnisfree\tValid\tL5\t53.415000\t-111.337500\t1977-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-111.3375, 53.415]\t12039\t4576\tInnisfree\tValid\tL5\t53.415000\t-111.337500\t1977-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12043\t7000\tIpiranga\tValid\tH6\t-25.500000\t-54.500000\t1972-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-54.5, -25.5]\t12043\t7000\tIpiranga\tValid\tH6\t-25.500000\t-54.500000\t1972-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12049\t1300\tIshinga\tValid\tH\t-8.933330\t33.800000\t1954-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[33.8, -8.93333]\t12049\t1300\tIshinga\tValid\tH\t-8.933330\t33.800000\t1954-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12053\t3050\tIsthilart\tValid\tH5\t-31.183330\t-57.950000\t1928-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-57.95, -31.18333]\t12053\t3050\tIsthilart\tValid\tH5\t-31.183330\t-57.950000\t1928-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12056\t2024\tItapicuru-Mirim\tValid\tH5\t-3.400000\t-44.333330\t1879-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-44.33333, -3.4]\t12056\t2024\tItapicuru-Mirim\tValid\tH5\t-3.400000\t-44.333330\t1879-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12058\t4720\tItqiy\tValid\tEH7-an\t26.590830\t-12.952170\t1990-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-12.95217, 26.59083]\t12058\t4720\tItqiy\tValid\tEH7-an\t26.590830\t-12.952170\t1990-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12063\t704.5\tIvuna\tValid\tCI1\t-8.416670\t32.433330\t1938-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[32.43333, -8.41667]\t12063\t704.5\tIvuna\tValid\tCI1\t-8.416670\t32.433330\t1938-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12065\t48000\tJackalsfontein\tValid\tL6\t-32.500000\t21.900000\t1903-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[21.9, -32.5]\t12065\t48000\tJackalsfontein\tValid\tL6\t-32.500000\t21.900000\t1903-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12067\t973\tJajh deh Kot Lalu\tValid\tEL6\t26.750000\t68.416670\t1926-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[68.41667, 26.75]\t12067\t973\tJajh deh Kot Lalu\tValid\tEL6\t26.750000\t68.416670\t1926-01-01T00:00:00.000\t\t\nFell\t0\t\t12068\t700\tJalanash\tValid\tUreilite\t\t\t1990-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12069\t1967\tJalandhar\tValid\tIron\t31.000000\t75.000000\t1621-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[75, 31]\t12069\t1967\tJalandhar\tValid\tIron\t31.000000\t75.000000\t1621-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12072\t22\tJamkheir\tValid\tH6\t18.750000\t75.333330\t1866-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[75.33333, 18.75]\t12072\t22\tJamkheir\tValid\tH6\t18.750000\t75.333330\t1866-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12074\t20500\tJartai\tValid\tL6\t39.700000\t105.800000\t1979-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[105.8, 39.7]\t12074\t20500\tJartai\tValid\tL6\t39.700000\t105.800000\t1979-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12078\t34000\tJelica\tValid\tLL6\t43.833330\t20.441670\t1889-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[20.44167, 43.83333]\t12078\t34000\tJelica\tValid\tLL6\t43.833330\t20.441670\t1889-01-01T00:00:00.000\t\t\nFell\t0\t\t12079\t450\tJemlapur\tValid\tL6\t\t\t1901-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t51589\t3667\tJesenice\tValid\tL6\t46.421370\t14.052170\t2009-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[14.05217, 46.42137]\t51589\t3667\tJesenice\tValid\tL6\t46.421370\t14.052170\t2009-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12085\t5900\tJhung\tValid\tL5\t31.300000\t72.383330\t1873-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[72.38333, 31.3]\t12085\t5900\tJhung\tValid\tL5\t31.300000\t72.383330\t1873-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12086\t222\tJiange\tValid\tH5\t31.916670\t104.916670\t1964-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[104.91667, 31.91667]\t12086\t222\tJiange\tValid\tH5\t31.916670\t104.916670\t1964-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12087\t600000\tJianshi\tValid\tIron, IIIAB\t30.808330\t109.500000\t1890-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[109.5, 30.80833]\t12087\t600000\tJianshi\tValid\tIron, IIIAB\t30.808330\t109.500000\t1890-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12171\t4000000\tJilin\tValid\tH5\t44.050000\t126.166670\t1976-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[126.16667, 44.05]\t12171\t4000000\tJilin\tValid\tH5\t44.050000\t126.166670\t1976-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t47362\t100\tJodiya\tValid\tL5\t22.680000\t70.313330\t2006-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[70.31333, 22.68]\t47362\t100\tJodiya\tValid\tL5\t22.680000\t70.313330\t2006-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12173\t30\tJodzie\tValid\tHowardite\t55.700000\t24.400000\t1877-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[24.4, 55.7]\t12173\t30\tJodzie\tValid\tHowardite\t55.700000\t24.400000\t1877-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12198\t40300\tJohnstown\tValid\tDiogenite\t40.350000\t-104.900000\t1924-01-01T00:00:00.000\t9\t1072\nFell\tcoordinates\t[-104.9, 40.35]\t12198\t40300\tJohnstown\tValid\tDiogenite\t40.350000\t-104.900000\t1924-01-01T00:00:00.000\t9\t1072\nFell\ttype\t\"Point\"\t12199\t483\tJolomba\tValid\tLL6\t-11.850000\t15.833330\t1974-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[15.83333, -11.85]\t12199\t483\tJolomba\tValid\tLL6\t-11.850000\t15.833330\t1974-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12202\t5000\tJonzac\tValid\tEucrite-mmict\t45.433330\t-0.450000\t1819-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-0.45, 45.43333]\t12202\t5000\tJonzac\tValid\tEucrite-mmict\t45.433330\t-0.450000\t1819-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12203\t100000\tJuancheng\tValid\tH5\t35.500000\t115.416670\t1997-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[115.41667, 35.5]\t12203\t100000\tJuancheng\tValid\tH5\t35.500000\t115.416670\t1997-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12207\t680\tJudesegeri\tValid\tH6\t12.850000\t76.800000\t1876-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.8, 12.85]\t12207\t680\tJudesegeri\tValid\tH6\t12.850000\t76.800000\t1876-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12209\t32490\tJumapalo\tValid\tL6\t-7.716670\t111.200000\t1984-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[111.2, -7.71667]\t12209\t32490\tJumapalo\tValid\tL6\t-7.716670\t111.200000\t1984-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12210\t950\tJunan\tValid\tL6\t35.200000\t118.800000\t1976-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[118.8, 35.2]\t12210\t950\tJunan\tValid\tL6\t35.200000\t118.800000\t1976-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12213\t25250\tJuromenha\tValid\tIron, IIIAB\t38.740280\t-7.270000\t1968-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-7.27, 38.74028]\t12213\t25250\tJuromenha\tValid\tIron, IIIAB\t38.740280\t-7.270000\t1968-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12214\t91000\tJuvinas\tValid\tEucrite-mmict\t44.716670\t4.300000\t1821-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[4.3, 44.71667]\t12214\t91000\tJuvinas\tValid\tEucrite-mmict\t44.716670\t4.300000\t1821-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12218\t3000\tKaba\tValid\tCV3\t47.350000\t21.300000\t1857-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[21.3, 47.35]\t12218\t3000\tKaba\tValid\tCV3\t47.350000\t21.300000\t1857-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12220\t13400\tKabo\tValid\tH4\t11.850000\t8.216670\t1971-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8.21667, 11.85]\t12220\t13400\tKabo\tValid\tH4\t11.850000\t8.216670\t1971-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12221\t89\tKadonah\tValid\tH6\t27.083330\t78.333330\t1822-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.33333, 27.08333]\t12221\t89\tKadonah\tValid\tH6\t27.083330\t78.333330\t1822-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12222\t230\tKaee\tValid\tH5\t27.250000\t79.966670\t1838-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[79.96667, 27.25]\t12222\t230\tKaee\tValid\tH5\t27.250000\t79.966670\t1838-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12227\t1900\tKagarlyk\tValid\tL6\t49.866670\t30.833330\t1908-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[30.83333, 49.86667]\t12227\t1900\tKagarlyk\tValid\tL6\t49.866670\t30.833330\t1908-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12228\t2000\tKaidun\tValid\tCR2\t15.000000\t48.300000\t1980-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[48.3, 15]\t12228\t2000\tKaidun\tValid\tCR2\t15.000000\t48.300000\t1980-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12229\t200000\tKainsaz\tValid\tCO3.2\t55.433330\t53.250000\t1937-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[53.25, 55.43333]\t12229\t200000\tKainsaz\tValid\tCO3.2\t55.433330\t53.250000\t1937-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12230\t350\tKakangari\tValid\tK3\t12.383330\t78.516670\t1890-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.51667, 12.38333]\t12230\t350\tKakangari\tValid\tK3\t12.383330\t78.516670\t1890-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12231\t577\tKakowa\tValid\tL6\t45.133330\t21.666670\t1858-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[21.66667, 45.13333]\t12231\t577\tKakowa\tValid\tL6\t45.133330\t21.666670\t1858-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12232\t950\tKalaba\tValid\tH4\t-6.833330\t29.500000\t1951-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[29.5, -6.83333]\t12232\t950\tKalaba\tValid\tH4\t-6.833330\t29.500000\t1951-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12236\t4500\tKalumbi\tValid\tL6\t17.833330\t73.983330\t1879-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[73.98333, 17.83333]\t12236\t4500\tKalumbi\tValid\tL6\t17.833330\t73.983330\t1879-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12238\t2770\tKamalpur\tValid\tL6\t26.033330\t81.466670\t1942-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[81.46667, 26.03333]\t12238\t2770\tKamalpur\tValid\tL6\t26.033330\t81.466670\t1942-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12240\t448\tKamiomi\tValid\tH5\t36.041670\t139.956670\t1913-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[139.95667, 36.04167]\t12240\t448\tKamiomi\tValid\tH5\t36.041670\t139.956670\t1913-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12241\t1293\tKamsagar\tValid\tL6\t14.183330\t75.800000\t1902-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[75.8, 14.18333]\t12241\t1293\tKamsagar\tValid\tL6\t14.183330\t75.800000\t1902-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12243\t299\tKandahar (Afghanistan)\tValid\tL6\t31.600000\t65.783330\t1959-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[65.78333, 31.6]\t12243\t299\tKandahar (Afghanistan)\tValid\tL6\t31.600000\t65.783330\t1959-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12245\t1630\tKangean\tValid\tH5\t-7.000000\t115.500000\t1908-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[115.5, -7]\t12245\t1630\tKangean\tValid\tH5\t-7.000000\t115.500000\t1908-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12246\t400\tKangra Valley\tValid\tH5\t32.083330\t76.300000\t1897-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.3, 32.08333]\t12246\t400\tKangra Valley\tValid\tH5\t32.083330\t76.300000\t1897-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12251\t11355\tKapoeta\tValid\tHowardite\t4.700000\t33.633330\t1942-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[33.63333, 4.7]\t12251\t11355\tKapoeta\tValid\tHowardite\t4.700000\t33.633330\t1942-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t47357\t1600\tKaprada\tValid\tL5/6\t20.339160\t73.223290\t2004-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[73.22329, 20.33916]\t47357\t1600\tKaprada\tValid\tL5/6\t20.339160\t73.223290\t2004-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12253\t3500\tKaptal-Aryk\tValid\tL6\t42.450000\t73.366670\t1937-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[73.36667, 42.45]\t12253\t3500\tKaptal-Aryk\tValid\tL6\t42.450000\t73.366670\t1937-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12256\t3000\tKarakol\tValid\tLL6\t47.216670\t81.016670\t1840-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[81.01667, 47.21667]\t12256\t3000\tKarakol\tValid\tLL6\t47.216670\t81.016670\t1840-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12258\t2220\tKaratu\tValid\tLL6\t-3.500000\t35.583330\t1963-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[35.58333, -3.5]\t12258\t2220\tKaratu\tValid\tLL6\t-3.500000\t35.583330\t1963-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12260\t180\tKarewar\tValid\tL6\t12.900000\t7.150000\t1949-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[7.15, 12.9]\t12260\t180\tKarewar\tValid\tL6\t12.900000\t7.150000\t1949-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12262\t22000\tKarkh\tValid\tL6\t27.800000\t67.166670\t1905-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[67.16667, 27.8]\t12262\t22000\tKarkh\tValid\tL6\t27.800000\t67.166670\t1905-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12263\t2950\tKarloowala\tValid\tL6\t31.583330\t71.600000\t1955-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[71.6, 31.58333]\t12263\t2950\tKarloowala\tValid\tL6\t31.583330\t71.600000\t1955-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12264\t41730\tKaroonda\tValid\tCK4\t-35.083330\t139.916670\t1930-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[139.91667, -35.08333]\t12264\t41730\tKaroonda\tValid\tCK4\t-35.083330\t139.916670\t1930-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12266\t710\tKasamatsu\tValid\tH\t35.366670\t136.766670\t1938-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[136.76667, 35.36667]\t12266\t710\tKasamatsu\tValid\tH\t35.366670\t136.766670\t1938-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t30740\t16820\tKasauli\tValid\tH4\t29.583330\t77.583330\t2003-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[77.58333, 29.58333]\t30740\t16820\tKasauli\tValid\tH4\t29.583330\t77.583330\t2003-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t35465\t1500\tKatagum\tValid\tL6\t11.333330\t10.083330\t1999-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[10.08333, 11.33333]\t35465\t1500\tKatagum\tValid\tL6\t11.333330\t10.083330\t1999-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t47351\t6800\tKavarpura\tValid\tIron, IIE-an\t25.143330\t75.813330\t2006-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[75.81333, 25.14333]\t47351\t6800\tKavarpura\tValid\tIron, IIE-an\t25.143330\t75.813330\t2006-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12268\t85000\tKayakent\tValid\tIron, IIIAB\t39.263330\t31.780000\t1961-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[31.78, 39.26333]\t12268\t85000\tKayakent\tValid\tIron, IIIAB\t39.263330\t31.780000\t1961-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12270\t3300\tKediri\tValid\tL4\t-7.750000\t112.016670\t1940-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[112.01667, -7.75]\t12270\t3300\tKediri\tValid\tL4\t-7.750000\t112.016670\t1940-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t53654\t5760\tKemer\tValid\tL4\t36.541940\t29.418220\t2008-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[29.41822, 36.54194]\t53654\t5760\tKemer\tValid\tL4\t36.541940\t29.418220\t2008-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12275\t6937\tKendleton\tValid\tL4\t29.450000\t-96.000000\t1939-01-01T00:00:00.000\t23\t3190\nFell\tcoordinates\t[-96, 29.45]\t12275\t6937\tKendleton\tValid\tL4\t29.450000\t-96.000000\t1939-01-01T00:00:00.000\t23\t3190\nFell\ttype\t\"Point\"\t12276\t6669.2\tKendrapara\tValid\tH4-5\t20.462500\t86.702780\t2003-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[86.70278, 20.4625]\t12276\t6669.2\tKendrapara\tValid\tH4-5\t20.462500\t86.702780\t2003-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12282\t5000\tKerilis\tValid\tH5\t48.400000\t-3.300000\t1874-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-3.3, 48.4]\t12282\t5000\tKerilis\tValid\tH5\t48.400000\t-3.300000\t1874-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12284\t80000\tKernouve\tValid\tH6\t48.116670\t-3.083330\t1869-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-3.08333, 48.11667]\t12284\t80000\tKernouve\tValid\tH6\t48.116670\t-3.083330\t1869-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12286\t135000\tKesen\tValid\tH4\t38.983330\t141.616670\t1850-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[141.61667, 38.98333]\t12286\t135000\tKesen\tValid\tH4\t38.983330\t141.616670\t1850-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12288\t13600\tKhairpur\tValid\tEL6\t29.533330\t72.300000\t1873-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[72.3, 29.53333]\t12288\t13600\tKhairpur\tValid\tEL6\t29.533330\t72.300000\t1873-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12289\t3698\tKhanpur\tValid\tLL5\t25.550000\t83.116670\t1932-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[83.11667, 25.55]\t12289\t3698\tKhanpur\tValid\tLL5\t25.550000\t83.116670\t1932-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12291\t1500\tKharkov\tValid\tL6\t50.625000\t35.075000\t1787-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[35.075, 50.625]\t12291\t1500\tKharkov\tValid\tL6\t50.625000\t35.075000\t1787-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12294\t450\tKheragur\tValid\tL6\t26.950000\t77.883330\t1860-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[77.88333, 26.95]\t12294\t450\tKheragur\tValid\tL6\t26.950000\t77.883330\t1860-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12296\t100\tKhetri\tValid\tH6\t28.016670\t75.816670\t1867-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[75.81667, 28.01667]\t12296\t100\tKhetri\tValid\tH6\t28.016670\t75.816670\t1867-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12297\t6109\tKhmelevka\tValid\tL5\t56.750000\t75.333330\t1929-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[75.33333, 56.75]\t12297\t6109\tKhmelevka\tValid\tL5\t56.750000\t75.333330\t1929-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12298\t9700\tKhohar\tValid\tL3.6\t25.100000\t81.533330\t1910-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[81.53333, 25.1]\t12298\t9700\tKhohar\tValid\tL3.6\t25.100000\t81.533330\t1910-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12299\t3200\tKhor Temiki\tValid\tAubrite\t16.000000\t36.000000\t1932-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[36, 16]\t12299\t3200\tKhor Temiki\tValid\tAubrite\t16.000000\t36.000000\t1932-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12300\t100000\tKidairat\tValid\tH6\t14.000000\t28.000000\t1983-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[28, 14]\t12300\t100000\tKidairat\tValid\tH6\t14.000000\t28.000000\t1983-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12301\t737.6\tKiel\tValid\tL6\t54.400000\t10.150000\t1962-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[10.15, 54.4]\t12301\t737.6\tKiel\tValid\tL6\t54.400000\t10.150000\t1962-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12303\t1500\tKiffa\tValid\tH5\t16.583330\t-11.333330\t1970-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-11.33333, 16.58333]\t12303\t1500\tKiffa\tValid\tH5\t16.583330\t-11.333330\t1970-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12305\t331\tKijima (1906)\tValid\tStone-uncl\t36.850000\t138.383330\t1906-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[138.38333, 36.85]\t12305\t331\tKijima (1906)\tValid\tStone-uncl\t36.850000\t138.383330\t1906-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12306\t195\tKikino\tValid\tH6\t55.000000\t34.000000\t1809-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[34, 55]\t12306\t195\tKikino\tValid\tH6\t55.000000\t34.000000\t1809-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12307\t19000\tKilabo\tValid\tLL6\t12.766670\t9.800000\t2002-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[9.8, 12.76667]\t12307\t19000\tKilabo\tValid\tLL6\t12.766670\t9.800000\t2002-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12308\t772\tKilbourn\tValid\tH5\t43.583330\t-89.600000\t1911-01-01T00:00:00.000\t41\t2971\nFell\tcoordinates\t[-89.6, 43.58333]\t12308\t772\tKilbourn\tValid\tH5\t43.583330\t-89.600000\t1911-01-01T00:00:00.000\t41\t2971\nFell\ttype\t\"Point\"\t12309\t140\tKilleter\tValid\tH6\t54.666670\t-7.666670\t1844-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-7.66667, 54.66667]\t12309\t140\tKilleter\tValid\tH6\t54.666670\t-7.666670\t1844-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12316\t67.400000000000006\tKingai\tValid\tH6\t11.633330\t24.683330\t1967-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[24.68333, 11.63333]\t12316\t67.400000000000006\tKingai\tValid\tH6\t11.633330\t24.683330\t1967-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12321\t97.7\tKirbyville\tValid\tEucrite-mmict\t30.750000\t-95.950000\t1906-01-01T00:00:00.000\t23\t2018\nFell\tcoordinates\t[-95.95, 30.75]\t12321\t97.7\tKirbyville\tValid\tEucrite-mmict\t30.750000\t-95.950000\t1906-01-01T00:00:00.000\t23\t2018\nFell\ttype\t\"Point\"\t12325\t1550\tKisvarsány\tValid\tL6\t48.166670\t22.308330\t1914-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[22.30833, 48.16667]\t12325\t1550\tKisvarsány\tValid\tL6\t48.166670\t22.308330\t1914-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12326\t202.6\tKitchener\tValid\tL6\t43.383330\t-80.383330\t1998-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-80.38333, 43.38333]\t12326\t202.6\tKitchener\tValid\tL6\t43.383330\t-80.383330\t1998-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12332\t3250\tKlein-Wenden\tValid\tH6\t51.600000\t10.800000\t1843-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[10.8, 51.6]\t12332\t3250\tKlein-Wenden\tValid\tH6\t51.600000\t10.800000\t1843-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12335\t500000\tKnyahinya\tValid\tL/LL5\t48.900000\t22.400000\t1866-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[22.4, 48.9]\t12335\t500000\tKnyahinya\tValid\tL/LL5\t48.900000\t22.400000\t1866-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12336\t136\tKobe\tValid\tCK4\t34.733330\t135.166670\t1999-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[135.16667, 34.73333]\t12336\t136\tKobe\tValid\tCK4\t34.733330\t135.166670\t1999-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12342\t11510\tKokubunji\tValid\tL6\t34.300000\t133.950000\t1986-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[133.95, 34.3]\t12342\t11510\tKokubunji\tValid\tL6\t34.300000\t133.950000\t1986-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12343\t238\tKomagome\tValid\tIron\t35.733330\t139.750000\t1926-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[139.75, 35.73333]\t12343\t238\tKomagome\tValid\tIron\t35.733330\t139.750000\t1926-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12344\t90\tKonovo\tValid\tLL5\t42.516670\t26.166670\t1931-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[26.16667, 42.51667]\t12344\t90\tKonovo\tValid\tLL5\t42.516670\t26.166670\t1931-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t53810\t4300\tKošice\tValid\tH5\t48.763670\t21.176330\t2010-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[21.17633, 48.76367]\t53810\t4300\tKošice\tValid\tH5\t48.763670\t21.176330\t2010-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12353\t16500\tKrähenberg\tValid\tLL5\t49.326940\t7.464720\t1869-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[7.46472, 49.32694]\t12353\t16500\tKrähenberg\tValid\tLL5\t49.326940\t7.464720\t1869-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12355\t2440\tKrasnoi-Ugol\tValid\tL6\t54.033330\t40.900000\t1829-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[40.9, 54.03333]\t12355\t2440\tKrasnoi-Ugol\tValid\tL6\t54.033330\t40.900000\t1829-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12357\t4000\tKrasnyi Klyuch\tValid\tH5\t54.333330\t56.083330\t1946-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[56.08333, 54.33333]\t12357\t4000\tKrasnyi Klyuch\tValid\tH5\t54.333330\t56.083330\t1946-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12363\t845.2\tKrutikha\tValid\tOC\t56.800000\t77.000000\t1906-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[77, 56.8]\t12363\t845.2\tKrutikha\tValid\tOC\t56.800000\t77.000000\t1906-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12364\t50000\tKrymka\tValid\tLL3.2\t47.833330\t30.766670\t1946-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[30.76667, 47.83333]\t12364\t50000\tKrymka\tValid\tLL3.2\t47.833330\t30.766670\t1946-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12368\t2250\tKukschin\tValid\tL6\t51.150000\t31.700000\t1938-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[31.7, 51.15]\t12368\t2250\tKukschin\tValid\tL6\t51.150000\t31.700000\t1938-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12369\t453.6\tKulak\tValid\tL5\t30.731110\t66.802220\t1961-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[66.80222, 30.73111]\t12369\t453.6\tKulak\tValid\tL5\t30.731110\t66.802220\t1961-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12370\t6000\tKuleschovka\tValid\tL6\t50.750000\t33.500000\t1811-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[33.5, 50.75]\t12370\t6000\tKuleschovka\tValid\tL6\t50.750000\t33.500000\t1811-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12373\t3719\tKulp\tValid\tH6\t41.116670\t45.000000\t1906-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[45, 41.11667]\t12373\t3719\tKulp\tValid\tH6\t41.116670\t45.000000\t1906-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12377\t200000\tKunashak\tValid\tL6\t55.783330\t61.366670\t1949-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[61.36667, 55.78333]\t12377\t200000\tKunashak\tValid\tL6\t55.783330\t61.366670\t1949-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12379\t1100000\tKunya-Urgench\tValid\tH5\t42.250000\t59.200000\t1998-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[59.2, 42.25]\t12379\t1100000\tKunya-Urgench\tValid\tH5\t42.250000\t59.200000\t1998-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12381\t4460\tKushiike\tValid\tOC\t37.050000\t138.383330\t1920-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[138.38333, 37.05]\t12381\t4460\tKushiike\tValid\tOC\t37.050000\t138.383330\t1920-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12382\t5\tKusiali\tValid\tL6\t29.683330\t78.383330\t1860-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.38333, 29.68333]\t12382\t5\tKusiali\tValid\tL6\t29.683330\t78.383330\t1860-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12383\t23\tKutais\tValid\tH5\t44.516670\t39.300000\t1977-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[39.3, 44.51667]\t12383\t23\tKutais\tValid\tH5\t44.516670\t39.300000\t1977-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12384\t45000\tKuttippuram\tValid\tL6\t10.833330\t76.033330\t1914-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.03333, 10.83333]\t12384\t45000\tKuttippuram\tValid\tL6\t10.833330\t76.033330\t1914-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12385\t4047\tKuznetzovo\tValid\tL6\t55.200000\t75.333330\t1932-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[75.33333, 55.2]\t12385\t4047\tKuznetzovo\tValid\tL6\t55.200000\t75.333330\t1932-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12390\t45000\tKyushu\tValid\tL6\t32.033330\t130.633330\t1886-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[130.63333, 32.03333]\t12390\t45000\tKyushu\tValid\tL6\t32.033330\t130.633330\t1886-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12392\t2800\tLa Bécasse\tValid\tL6\t47.083330\t1.750000\t1879-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[1.75, 47.08333]\t12392\t2800\tLa Bécasse\tValid\tL6\t47.083330\t1.750000\t1879-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12394\t399\tLa Charca\tValid\tOC\t20.666670\t-101.283330\t1878-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-101.28333, 20.66667]\t12394\t399\tLa Charca\tValid\tOC\t20.666670\t-101.283330\t1878-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12395\t2000\tLa Colina\tValid\tH5\t-37.333330\t-61.533330\t1924-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-61.53333, -37.33333]\t12395\t2000\tLa Colina\tValid\tH5\t-37.333330\t-61.533330\t1924-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12396\t45000\tLa Criolla\tValid\tL6\t-31.233330\t-58.166670\t1985-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-58.16667, -31.23333]\t12396\t45000\tLa Criolla\tValid\tL6\t-31.233330\t-58.166670\t1985-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12408\t3833\tLaborel\tValid\tH5\t44.283330\t5.583330\t1871-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[5.58333, 44.28333]\t12408\t3833\tLaborel\tValid\tH5\t44.283330\t5.583330\t1871-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12433\t900\tLahrauli\tValid\tUreilite\t26.783330\t82.716670\t1955-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[82.71667, 26.78333]\t12433\t900\tLahrauli\tValid\tUreilite\t26.783330\t82.716670\t1955-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12434\t37000\tL'Aigle\tValid\tL6\t48.766670\t0.633330\t1803-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.63333, 48.76667]\t12434\t37000\tL'Aigle\tValid\tL6\t48.766670\t0.633330\t1803-01-01T00:00:00.000\t\t\nFound\t0\t\t32531\t9.6\tCumulus Hills 04075\tValid\tPallasite\t\t\t2003-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12435\t212.5\tLakangaon\tValid\tEucrite-mmict\t21.866670\t76.033330\t1910-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.03333, 21.86667]\t12435\t212.5\tLakangaon\tValid\tEucrite-mmict\t21.866670\t76.033330\t1910-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12451\t372\tLalitpur\tValid\tL6\t24.450000\t78.566670\t1887-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.56667, 24.45]\t12451\t372\tLalitpur\tValid\tL6\t24.450000\t78.566670\t1887-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12455\t51700\tLancé\tValid\tCO3.5\t47.700000\t1.066670\t1872-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[1.06667, 47.7]\t12455\t51700\tLancé\tValid\tCO3.5\t47.700000\t1.066670\t1872-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12456\t7000\tLancon\tValid\tH6\t43.750000\t5.116670\t1897-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[5.11667, 43.75]\t12456\t7000\tLancon\tValid\tH6\t43.750000\t5.116670\t1897-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12461\t2300\tLånghalsen\tValid\tL6\t58.850000\t16.733330\t1947-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[16.73333, 58.85]\t12461\t2300\tLånghalsen\tValid\tL6\t58.850000\t16.733330\t1947-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12464\t1282\tLanxi\tValid\tL6\t46.241670\t126.196110\t1986-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[126.19611, 46.24167]\t12464\t1282\tLanxi\tValid\tL6\t46.241670\t126.196110\t1986-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12465\t7000\tLanzenkirchen\tValid\tL4\t47.750000\t16.233330\t1925-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[16.23333, 47.75]\t12465\t7000\tLanzenkirchen\tValid\tL4\t47.750000\t16.233330\t1925-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12466\t14250\tLaochenzhen\tValid\tH5\t33.133330\t115.166670\t1987-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[115.16667, 33.13333]\t12466\t14250\tLaochenzhen\tValid\tH5\t33.133330\t115.166670\t1987-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12740\t1060\tLaunton\tValid\tL6\t51.900000\t-1.116670\t1830-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-1.11667, 51.9]\t12740\t1060\tLaunton\tValid\tL6\t51.900000\t-1.116670\t1830-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12743\t800\tLavrentievka\tValid\tL6\t52.450000\t51.566670\t1938-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[51.56667, 52.45]\t12743\t800\tLavrentievka\tValid\tL6\t52.450000\t51.566670\t1938-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12748\t3000\tLe Pressoir\tValid\tH5\t47.166670\t0.433330\t1845-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.43333, 47.16667]\t12748\t3000\tLe Pressoir\tValid\tH5\t47.166670\t0.433330\t1845-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12749\t780\tLe Teilleul\tValid\tHowardite\t48.533330\t-0.866670\t1845-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-0.86667, 48.53333]\t12749\t780\tLe Teilleul\tValid\tHowardite\t48.533330\t-0.866670\t1845-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12755\t51500\tLeedey\tValid\tL6\t35.883330\t-99.333330\t1943-01-01T00:00:00.000\t20\t608\nFell\tcoordinates\t[-99.33333, 35.88333]\t12755\t51500\tLeedey\tValid\tL6\t35.883330\t-99.333330\t1943-01-01T00:00:00.000\t20\t608\nFell\ttype\t\"Point\"\t12756\t460\tLeeuwfontein\tValid\tL6\t-25.666670\t28.366670\t1912-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[28.36667, -25.66667]\t12756\t460\tLeeuwfontein\tValid\tL6\t-25.666670\t28.366670\t1912-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12759\t271.39999999999998\tLeighlinbridge\tValid\tL6\t52.666670\t-6.966670\t1999-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-6.96667, 52.66667]\t12759\t271.39999999999998\tLeighlinbridge\tValid\tL6\t52.666670\t-6.966670\t1999-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12760\t877\tLeighton\tValid\tH5\t34.583330\t-87.500000\t1907-01-01T00:00:00.000\t29\t1585\nFell\tcoordinates\t[-87.5, 34.58333]\t12760\t877\tLeighton\tValid\tH5\t34.583330\t-87.500000\t1907-01-01T00:00:00.000\t29\t1585\nFell\ttype\t\"Point\"\t12765\t700\tLeonovka\tValid\tL6\t52.266670\t32.850000\t1900-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[32.85, 52.26667]\t12765\t700\tLeonovka\tValid\tL6\t52.266670\t32.850000\t1900-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12769\t125\tLes Ormes\tValid\tL6\t48.350000\t3.250000\t1857-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[3.25, 48.35]\t12769\t125\tLes Ormes\tValid\tL6\t48.350000\t3.250000\t1857-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t12772\t2000\tLesves\tValid\tL6\t50.366670\t4.733330\t1896-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[4.73333, 50.36667]\t12772\t2000\tLesves\tValid\tL6\t50.366670\t4.733330\t1896-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14646\t4000\tLichtenberg\tValid\tH6\t-26.150000\t26.183330\t1973-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[26.18333, -26.15]\t14646\t4000\tLichtenberg\tValid\tH6\t-26.150000\t26.183330\t1973-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14650\t6862\tLillaverke\tValid\tH5\t56.650000\t15.866670\t1930-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[15.86667, 56.65]\t14650\t6862\tLillaverke\tValid\tH5\t56.650000\t15.866670\t1930-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14652\t50000\tLimerick\tValid\tH5\t52.566670\t-8.783330\t1813-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-8.78333, 52.56667]\t14652\t50000\tLimerick\tValid\tH5\t52.566670\t-8.783330\t1813-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14655\t1862\tLinum\tValid\tL6\t52.750000\t12.900000\t1854-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[12.9, 52.75]\t14655\t1862\tLinum\tValid\tL6\t52.750000\t12.900000\t1854-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14659\t498\tLishui\tValid\tL5\t31.633330\t118.983330\t1978-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[118.98333, 31.63333]\t14659\t498\tLishui\tValid\tL5\t31.633330\t118.983330\t1978-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14661\t12800\tLissa\tValid\tL6\t50.200000\t14.850000\t1808-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[14.85, 50.2]\t14661\t12800\tLissa\tValid\tL6\t50.200000\t14.850000\t1808-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14664\t491\tLittle Piney\tValid\tL5\t37.916670\t-92.083330\t1839-01-01T00:00:00.000\t18\t2171\nFell\tcoordinates\t[-92.08333, 37.91667]\t14664\t491\tLittle Piney\tValid\tL5\t37.916670\t-92.083330\t1839-01-01T00:00:00.000\t18\t2171\nFell\ttype\t\"Point\"\t14670\t5213\tLixna\tValid\tH4\t56.000000\t26.433330\t1820-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[26.43333, 56]\t14670\t5213\tLixna\tValid\tH4\t56.000000\t26.433330\t1820-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14675\t1000\tLodran\tValid\tLodranite\t29.533330\t71.800000\t1868-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[71.8, 29.53333]\t14675\t1000\tLodran\tValid\tLodranite\t29.533330\t71.800000\t1868-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14678\t40000\tLohawat\tValid\tHowardite\t26.965560\t72.626670\t1994-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[72.62667, 26.96556]\t14678\t40000\tLohawat\tValid\tHowardite\t26.965560\t72.626670\t1994-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t52843\t329.7\tLorton\tValid\tL6\t38.700660\t-77.211630\t2010-01-01T00:00:00.000\t40\t2770\nFell\tcoordinates\t[-77.21163, 38.70066]\t52843\t329.7\tLorton\tValid\tL6\t38.700660\t-77.211630\t2010-01-01T00:00:00.000\t40\t2770\nFell\ttype\t\"Point\"\t14708\t25\tLos Martinez\tValid\tL6\t38.000000\t-0.833330\t1894-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-0.83333, 38]\t14708\t25\tLos Martinez\tValid\tL6\t38.000000\t-0.833330\t1894-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14711\t17000\tLost City\tValid\tH5\t36.008330\t-95.150000\t1970-01-01T00:00:00.000\t20\t2711\nFell\tcoordinates\t[-95.15, 36.00833]\t14711\t17000\tLost City\tValid\tH5\t36.008330\t-95.150000\t1970-01-01T00:00:00.000\t20\t2711\nFell\ttype\t\"Point\"\t14716\t1300\tLouisville\tValid\tL6\t38.250000\t-85.750000\t1977-01-01T00:00:00.000\t36\t1327\nFell\tcoordinates\t[-85.75, 38.25]\t14716\t1300\tLouisville\tValid\tL6\t38.250000\t-85.750000\t1977-01-01T00:00:00.000\t36\t1327\nFell\ttype\t\"Point\"\t14718\t59000\tŁowicz\tValid\tMesosiderite-A3\t52.000000\t19.916670\t1935-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[19.91667, 52]\t14718\t59000\tŁowicz\tValid\tMesosiderite-A3\t52.000000\t19.916670\t1935-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14721\t9241\tLua\tValid\tL5\t24.950000\t75.150000\t1926-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[75.15, 24.95]\t14721\t9241\tLua\tValid\tL5\t24.950000\t75.150000\t1926-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14724\t3500\tLucé\tValid\tL6\t47.850000\t0.483330\t1768-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.48333, 47.85]\t14724\t3500\tLucé\tValid\tL6\t47.850000\t0.483330\t1768-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14753\t340\tLumpkin\tValid\tL6\t32.033330\t-84.766670\t1869-01-01T00:00:00.000\t31\t1567\nFell\tcoordinates\t[-84.76667, 32.03333]\t14753\t340\tLumpkin\tValid\tL6\t32.033330\t-84.766670\t1869-01-01T00:00:00.000\t31\t1567\nFell\ttype\t\"Point\"\t14754\t2520\tLunan\tValid\tH6\t24.800000\t103.300000\t1980-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[103.3, 24.8]\t14754\t2520\tLunan\tValid\tH6\t24.800000\t103.300000\t1980-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14755\t11000\tLundsgård\tValid\tL6\t56.216670\t13.033330\t1889-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[13.03333, 56.21667]\t14755\t11000\tLundsgård\tValid\tL6\t56.216670\t13.033330\t1889-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14756\t885\tLuotolax\tValid\tHowardite\t61.200000\t27.700000\t1813-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[27.7, 61.2]\t14756\t885\tLuotolax\tValid\tHowardite\t61.200000\t27.700000\t1813-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14757\t14000\tLuponnas\tValid\tH3-5\t46.216670\t5.000000\t1753-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[5, 46.21667]\t14757\t14000\tLuponnas\tValid\tH3-5\t46.216670\t5.000000\t1753-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14759\t\tLusaka\tValid\tUnknown\t-7.216670\t29.433330\t1951-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[29.43333, -7.21667]\t14759\t\tLusaka\tValid\tUnknown\t-7.216670\t29.433330\t1951-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t14764\t540\tMabwe-Khoywa\tValid\tL5\t19.000000\t97.000000\t1937-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[97, 19]\t14764\t540\tMabwe-Khoywa\tValid\tL5\t19.000000\t97.000000\t1937-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15370\t1500\tMacau\tValid\tH5\t-5.200000\t-36.666670\t1836-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-36.66667, -5.2]\t15370\t1500\tMacau\tValid\tH5\t-5.200000\t-36.666670\t1836-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15371\t93200\tMachinga\tValid\tL6\t-15.212220\t35.242220\t1981-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[35.24222, -15.21222]\t15371\t93200\tMachinga\tValid\tL6\t-15.212220\t35.242220\t1981-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15372\t1995\tMacibini\tValid\tEucrite-pmict\t-28.833330\t31.950000\t1936-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[31.95, -28.83333]\t15372\t1995\tMacibini\tValid\tEucrite-pmict\t-28.833330\t31.950000\t1936-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15379\t1000\tMadhipura\tValid\tL\t25.916670\t86.366670\t1950-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[86.36667, 25.91667]\t15379\t1000\tMadhipura\tValid\tL\t25.916670\t86.366670\t1950-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15380\t400\tMadiun\tValid\tL6\t-7.750000\t111.533330\t1935-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[111.53333, -7.75]\t15380\t400\tMadiun\tValid\tL6\t-7.750000\t111.533330\t1935-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15382\t400\tMadrid\tValid\tL6\t40.416670\t-3.716670\t1896-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-3.71667, 40.41667]\t15382\t400\tMadrid\tValid\tL6\t40.416670\t-3.716670\t1896-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15383\t600\tMafra\tValid\tL3-4\t-26.166670\t-49.933330\t1941-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-49.93333, -26.16667]\t15383\t600\tMafra\tValid\tL3-4\t-26.166670\t-49.933330\t1941-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15386\t5000\tMagnesia\tValid\tIron, IAB-sHL\t37.866670\t27.516670\t1899-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[27.51667, 37.86667]\t15386\t5000\tMagnesia\tValid\tIron, IAB-sHL\t37.866670\t27.516670\t1899-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15387\t666.6\tMagombedze\tValid\tH3-5\t-19.483330\t31.650000\t1990-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[31.65, -19.48333]\t15387\t666.6\tMagombedze\tValid\tH3-5\t-19.483330\t31.650000\t1990-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t47361\t70500\tMahadevpur\tValid\tH4/5\t27.666670\t95.783330\t2007-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[95.78333, 27.66667]\t47361\t70500\tMahadevpur\tValid\tH4/5\t27.666670\t95.783330\t2007-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t30751\t4629\tMaigatari-Danduma\tValid\tH5/6\t12.833330\t9.383330\t2004-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[9.38333, 12.83333]\t30751\t4629\tMaigatari-Danduma\tValid\tH5/6\t12.833330\t9.383330\t2004-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15393\t150\tMalaga\tValid\tOC\t32.216670\t-104.000000\t1933-01-01T00:00:00.000\t11\t611\nFell\tcoordinates\t[-104, 32.21667]\t15393\t150\tMalaga\tValid\tOC\t32.216670\t-104.000000\t1933-01-01T00:00:00.000\t11\t611\nFell\ttype\t\"Point\"\t15394\t2000\tMalakal\tValid\tL5\t9.500000\t31.750000\t1970-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[31.75, 9.5]\t15394\t2000\tMalakal\tValid\tL5\t9.500000\t31.750000\t1970-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15395\t470\tMalampaka\tValid\tH\t-3.133330\t33.516670\t1930-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[33.51667, -3.13333]\t15395\t470\tMalampaka\tValid\tH\t-3.133330\t33.516670\t1930-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15397\t\tMalotas\tValid\tH5\t-28.933330\t-63.233330\t1931-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-63.23333, -28.93333]\t15397\t\tMalotas\tValid\tH5\t-28.933330\t-63.233330\t1931-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15400\t807\tMalvern\tValid\tEucrite-pmict\t-29.450000\t26.766670\t1933-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[26.76667, -29.45]\t15400\t807\tMalvern\tValid\tEucrite-pmict\t-29.450000\t26.766670\t1933-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15401\t1000\tMamra Springs\tValid\tL6\t45.216670\t62.083330\t1927-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[62.08333, 45.21667]\t15401\t1000\tMamra Springs\tValid\tL6\t45.216670\t62.083330\t1927-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15402\t1700\tManbhoom\tValid\tLL6\t23.050000\t86.700000\t1863-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[86.7, 23.05]\t15402\t1700\tManbhoom\tValid\tLL6\t23.050000\t86.700000\t1863-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15403\t50\tManegaon\tValid\tDiogenite\t20.966670\t76.100000\t1843-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.1, 20.96667]\t15403\t50\tManegaon\tValid\tDiogenite\t20.966670\t76.100000\t1843-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15405\t22300\tMangwendi\tValid\tLL6\t-17.650000\t31.600000\t1934-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[31.6, -17.65]\t15405\t22300\tMangwendi\tValid\tLL6\t-17.650000\t31.600000\t1934-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15409\t3555\tManych\tValid\tLL3.4\t45.816670\t44.633330\t1951-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[44.63333, 45.81667]\t15409\t3555\tManych\tValid\tLL3.4\t45.816670\t44.633330\t1951-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15414\t4500\tMardan\tValid\tH5\t34.233330\t72.083330\t1948-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[72.08333, 34.23333]\t15414\t4500\tMardan\tValid\tH5\t34.233330\t72.083330\t1948-01-01T00:00:00.000\t\t\nFell\t0\t\t15418\t114\tMaria Linden\tValid\tL4\t\t\t1925-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15419\t340\tMariaville\tValid\tIron\t42.716670\t-99.383330\t1898-01-01T00:00:00.000\t19\t471\nFell\tcoordinates\t[-99.38333, 42.71667]\t15419\t340\tMariaville\tValid\tIron\t42.716670\t-99.383330\t1898-01-01T00:00:00.000\t19\t471\nFell\ttype\t\"Point\"\t48973\t25.81\tMaribo\tValid\tCM2\t54.761830\t11.467450\t2009-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[11.46745, 54.76183]\t48973\t25.81\tMaribo\tValid\tCM2\t54.761830\t11.467450\t2009-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15421\t3200\tMaridi\tValid\tH6\t4.666670\t29.250000\t1941-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[29.25, 4.66667]\t15421\t3200\tMaridi\tValid\tH6\t4.666670\t29.250000\t1941-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15422\t2500\tMarilia\tValid\tH4\t-22.250000\t-49.933330\t1971-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-49.93333, -22.25]\t15422\t2500\tMarilia\tValid\tH4\t-22.250000\t-49.933330\t1971-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15424\t28400\tMarion (Iowa)\tValid\tL6\t41.900000\t-91.600000\t1847-01-01T00:00:00.000\t16\t287\nFell\tcoordinates\t[-91.6, 41.9]\t15424\t28400\tMarion (Iowa)\tValid\tL6\t41.900000\t-91.600000\t1847-01-01T00:00:00.000\t16\t287\nFell\ttype\t\"Point\"\t15426\t45000\tMarjalahti\tValid\tPallasite, PMG\t61.500000\t30.500000\t1902-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[30.5, 61.5]\t15426\t45000\tMarjalahti\tValid\tPallasite, PMG\t61.500000\t30.500000\t1902-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15429\t3000\tMarmande\tValid\tL5\t44.500000\t0.150000\t1848-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.15, 44.5]\t15429\t3000\tMarmande\tValid\tL5\t44.500000\t0.150000\t1848-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15430\t6000\tMaromandia\tValid\tL6\t-14.200000\t48.100000\t2002-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[48.1, -14.2]\t15430\t6000\tMaromandia\tValid\tL6\t-14.200000\t48.100000\t2002-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15436\t1443\tMaryville\tValid\tL6\t35.800000\t-84.100000\t1983-01-01T00:00:00.000\t39\t2740\nFell\tcoordinates\t[-84.1, 35.8]\t15436\t1443\tMaryville\tValid\tL6\t35.800000\t-84.100000\t1983-01-01T00:00:00.000\t39\t2740\nFell\ttype\t\"Point\"\t15438\t1000\tMascombes\tValid\tL6\t45.366670\t1.866670\t1836-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[1.86667, 45.36667]\t15438\t1000\tMascombes\tValid\tL6\t45.366670\t1.866670\t1836-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t53653\t24.54\tMason Gully\tValid\tH5\t0.000000\t0.000000\t2010-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0, 0]\t53653\t24.54\tMason Gully\tValid\tH5\t0.000000\t0.000000\t2010-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15443\t1600\tMässing\tValid\tHowardite\t48.133330\t12.616670\t1803-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[12.61667, 48.13333]\t15443\t1600\tMässing\tValid\tHowardite\t48.133330\t12.616670\t1803-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15446\t19000\tMauerkirchen\tValid\tL6\t48.183330\t13.133330\t1768-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[13.13333, 48.18333]\t15446\t19000\tMauerkirchen\tValid\tL6\t48.183330\t13.133330\t1768-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15447\t220\tMauritius\tValid\tL6\t-20.000000\t57.000000\t1801-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[57, -20]\t15447\t220\tMauritius\tValid\tL6\t-20.000000\t57.000000\t1801-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15451\t4850\tMayo Belwa\tValid\tAubrite\t8.966670\t12.083330\t1974-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[12.08333, 8.96667]\t15451\t4850\tMayo Belwa\tValid\tAubrite\t8.966670\t12.083330\t1974-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15453\t4000\tMazapil\tValid\tIron, IAB-sLL\t24.683330\t-101.683330\t1885-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-101.68333, 24.68333]\t15453\t4000\tMazapil\tValid\tIron, IAB-sLL\t24.683330\t-101.683330\t1885-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15454\t4975\tMaziba\tValid\tL6\t-1.216670\t30.000000\t1942-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[30, -1.21667]\t15454\t4975\tMaziba\tValid\tL6\t-1.216670\t30.000000\t1942-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15455\t150000\tMbale\tValid\tL5/6\t1.066670\t34.166670\t1992-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[34.16667, 1.06667]\t15455\t150000\tMbale\tValid\tL5/6\t1.066670\t34.166670\t1992-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15467\t31\tMedanitos\tValid\tEucrite-cm\t-27.250000\t-67.500000\t1953-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-67.5, -27.25]\t15467\t31\tMedanitos\tValid\tEucrite-cm\t-27.250000\t-67.500000\t1953-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15469\t22\tMeerut\tValid\tH5\t29.016670\t77.800000\t1861-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[77.8, 29.01667]\t15469\t22\tMeerut\tValid\tH5\t29.016670\t77.800000\t1861-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15470\t24750\tMeester-Cornelis\tValid\tH5\t-6.233330\t106.883330\t1915-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[106.88333, -6.23333]\t15470\t24750\tMeester-Cornelis\tValid\tH5\t-6.233330\t106.883330\t1915-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15485\t10500\tMenow\tValid\tH4\t53.183330\t13.150000\t1862-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[13.15, 53.18333]\t15485\t10500\tMenow\tValid\tH4\t53.183330\t13.150000\t1862-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15486\t28.9\tMenziswyl\tValid\tL5\t46.818670\t7.218170\t1903-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[7.21817, 46.81867]\t15486\t28.9\tMenziswyl\tValid\tL5\t46.818670\t7.218170\t1903-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15489\t4000\tMern\tValid\tL6\t55.050000\t12.066670\t1878-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[12.06667, 55.05]\t15489\t4000\tMern\tValid\tL6\t55.050000\t12.066670\t1878-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15491\t6000\tMeru\tValid\tLL6\t0.000000\t37.666670\t1945-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[37.66667, 0]\t15491\t6000\tMeru\tValid\tLL6\t0.000000\t37.666670\t1945-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15492\t71400\tMerua\tValid\tH5\t25.483330\t81.983330\t1920-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[81.98333, 25.48333]\t15492\t71400\tMerua\tValid\tH5\t25.483330\t81.983330\t1920-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t15495\t2405\tMessina\tValid\tL5\t38.183330\t15.566670\t1955-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[15.56667, 38.18333]\t15495\t2405\tMessina\tValid\tL5\t38.183330\t15.566670\t1955-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16626\t870\tMeuselbach\tValid\tL6\t50.583330\t11.100000\t1897-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[11.1, 50.58333]\t16626\t870\tMeuselbach\tValid\tL6\t50.583330\t11.100000\t1897-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16627\t1300\tMezel\tValid\tL6\t45.766670\t3.250000\t1949-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[3.25, 45.76667]\t16627\t1300\tMezel\tValid\tL6\t45.766670\t3.250000\t1949-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16628\t22700\tMezö-Madaras\tValid\tL3.7\t46.500000\t25.733330\t1852-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[25.73333, 46.5]\t16628\t22700\tMezö-Madaras\tValid\tL3.7\t46.500000\t25.733330\t1852-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16629\t350\tMhow\tValid\tL6\t25.900000\t83.616670\t1827-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[83.61667, 25.9]\t16629\t350\tMhow\tValid\tL6\t25.900000\t83.616670\t1827-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16631\t1100\tMianchi\tValid\tH5\t34.800000\t111.700000\t1980-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[111.7, 34.8]\t16631\t1100\tMianchi\tValid\tH5\t34.800000\t111.700000\t1980-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16632\t1600\tMiddlesbrough\tValid\tL6\t54.566670\t-1.166670\t1881-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-1.16667, 54.56667]\t16632\t1600\tMiddlesbrough\tValid\tL6\t54.566670\t-1.166670\t1881-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t52090\t3584\tMifflin\tValid\tL5\t42.907500\t-90.365560\t2010-01-01T00:00:00.000\t41\t2996\nFell\tcoordinates\t[-90.36556, 42.9075]\t52090\t3584\tMifflin\tValid\tL5\t42.907500\t-90.365560\t2010-01-01T00:00:00.000\t41\t2996\nFell\ttype\t\"Point\"\t16634\t8000\tMighei\tValid\tCM2\t48.066670\t30.966670\t1889-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[30.96667, 48.06667]\t16634\t8000\tMighei\tValid\tCM2\t48.066670\t30.966670\t1889-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16635\t6380\tMihonoseki\tValid\tL6\t35.568330\t133.220000\t1992-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[133.22, 35.56833]\t16635\t6380\tMihonoseki\tValid\tL6\t35.568330\t133.220000\t1992-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16636\t224.2\tMike\tValid\tL6\t46.233330\t17.533330\t1944-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[17.53333, 46.23333]\t16636\t224.2\tMike\tValid\tL6\t46.233330\t17.533330\t1944-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16640\t10000\tMilena\tValid\tL6\t46.183330\t16.100000\t1842-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[16.1, 46.18333]\t16640\t10000\tMilena\tValid\tL6\t46.183330\t16.100000\t1842-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16643\t330000\tMillbillillie\tValid\tEucrite-mmict\t-26.450000\t120.366670\t1960-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[120.36667, -26.45]\t16643\t330000\tMillbillillie\tValid\tEucrite-mmict\t-26.450000\t120.366670\t1960-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16645\t16700\tMiller (Arkansas)\tValid\tH5\t35.400000\t-92.050000\t1930-01-01T00:00:00.000\t15\t11\nFell\tcoordinates\t[-92.05, 35.4]\t16645\t16700\tMiller (Arkansas)\tValid\tH5\t35.400000\t-92.050000\t1930-01-01T00:00:00.000\t15\t11\nFell\ttype\t\"Point\"\t16692\t1040\tMinamino\tValid\tL\t35.078330\t136.933330\t1632-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[136.93333, 35.07833]\t16692\t1040\tMinamino\tValid\tL\t35.078330\t136.933330\t1632-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16696\t42\tMineo\tValid\tPallasite\t37.283330\t14.700000\t1826-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[14.7, 37.28333]\t16696\t42\tMineo\tValid\tPallasite\t37.283330\t14.700000\t1826-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16697\t5500\tMin-Fan-Zhun\tValid\tLL6\t32.333330\t120.666670\t1952-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[120.66667, 32.33333]\t16697\t5500\tMin-Fan-Zhun\tValid\tLL6\t32.333330\t120.666670\t1952-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16700\t550\tMinnichhof\tValid\tOC\t47.700000\t16.600000\t1905-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[16.6, 47.7]\t16700\t550\tMinnichhof\tValid\tOC\t47.700000\t16.600000\t1905-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16701\t8510\tMirzapur\tValid\tL5\t25.683330\t83.250000\t1910-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[83.25, 25.68333]\t16701\t8510\tMirzapur\tValid\tL5\t25.683330\t83.250000\t1910-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16703\t5800\tMisshof\tValid\tH5\t56.666670\t23.000000\t1890-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[23, 56.66667]\t16703\t5800\tMisshof\tValid\tH5\t56.666670\t23.000000\t1890-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16707\t100.7\tMjelleim\tValid\tH\t61.733330\t5.933330\t1898-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[5.93333, 61.73333]\t16707\t100.7\tMjelleim\tValid\tH\t61.733330\t5.933330\t1898-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16709\t300000\tMocs\tValid\tL5-6\t46.800000\t24.033330\t1882-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[24.03333, 46.8]\t16709\t300000\tMocs\tValid\tL5-6\t46.800000\t24.033330\t1882-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16711\t35000\tModoc (1905)\tValid\tL6\t38.500000\t-101.100000\t1905-01-01T00:00:00.000\t17\t1290\nFell\tcoordinates\t[-101.1, 38.5]\t16711\t35000\tModoc (1905)\tValid\tL6\t38.500000\t-101.100000\t1905-01-01T00:00:00.000\t17\t1290\nFell\ttype\t\"Point\"\t16713\t4500\tMokoia\tValid\tCV3\t-39.633330\t174.400000\t1908-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[174.4, -39.63333]\t16713\t4500\tMokoia\tValid\tCV3\t-39.633330\t174.400000\t1908-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16715\t144000\tMolina\tValid\tH5\t38.116670\t-1.166670\t1858-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-1.16667, 38.11667]\t16715\t144000\tMolina\tValid\tH5\t38.116670\t-1.166670\t1858-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16717\t150\tMolteno\tValid\tHowardite\t-31.250000\t26.466670\t1953-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[26.46667, -31.25]\t16717\t150\tMolteno\tValid\tHowardite\t-31.250000\t26.466670\t1953-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16719\t2587\tMonahans (1998)\tValid\tH5\t31.608330\t-102.858330\t1998-01-01T00:00:00.000\t23\t2957\nFell\tcoordinates\t[-102.85833, 31.60833]\t16719\t2587\tMonahans (1998)\tValid\tH5\t31.608330\t-102.858330\t1998-01-01T00:00:00.000\t23\t2957\nFell\ttype\t\"Point\"\t16720\t8600\tMonroe\tValid\tH4\t35.250000\t-80.500000\t1849-01-01T00:00:00.000\t37\t636\nFell\tcoordinates\t[-80.5, 35.25]\t16720\t8600\tMonroe\tValid\tH4\t35.250000\t-80.500000\t1849-01-01T00:00:00.000\t37\t636\nFell\ttype\t\"Point\"\t16725\t4885\tMonte das Fortes\tValid\tL5\t38.016670\t-8.250000\t1950-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-8.25, 38.01667]\t16725\t4885\tMonte das Fortes\tValid\tL5\t38.016670\t-8.250000\t1950-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16726\t3130\tMonte Milone\tValid\tL5\t43.266670\t13.350000\t1846-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[13.35, 43.26667]\t16726\t3130\tMonte Milone\tValid\tL5\t43.266670\t13.350000\t1846-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16727\t149000\tMontferré\tValid\tH5\t43.390560\t1.962500\t1923-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[1.9625, 43.39056]\t16727\t149000\tMontferré\tValid\tH5\t43.390560\t1.962500\t1923-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16729\t500\tMontlivault\tValid\tL6\t47.633330\t1.583330\t1838-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[1.58333, 47.63333]\t16729\t500\tMontlivault\tValid\tL6\t47.633330\t1.583330\t1838-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16733\t\tMonze\tValid\tL6\t-15.966670\t27.350000\t1950-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[27.35, -15.96667]\t16733\t\tMonze\tValid\tL6\t-15.966670\t27.350000\t1950-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16736\t1880\tMoore County\tValid\tEucrite-cm\t35.416670\t-79.383330\t1913-01-01T00:00:00.000\t37\t2431\nFell\tcoordinates\t[-79.38333, 35.41667]\t16736\t1880\tMoore County\tValid\tEucrite-cm\t35.416670\t-79.383330\t1913-01-01T00:00:00.000\t37\t2431\nFell\ttype\t\"Point\"\t16737\t3520\tMooresfort\tValid\tH5\t52.450000\t-8.333330\t1810-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-8.33333, 52.45]\t16737\t3520\tMooresfort\tValid\tH5\t52.450000\t-8.333330\t1810-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16738\t8887.5\tMoorleah\tValid\tL6\t-40.975000\t145.600000\t1930-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[145.6, -40.975]\t16738\t8887.5\tMoorleah\tValid\tL6\t-40.975000\t145.600000\t1930-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16740\t70\tMoradabad\tValid\tL6\t28.783330\t78.833330\t1808-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.83333, 28.78333]\t16740\t70\tMoradabad\tValid\tL6\t28.783330\t78.833330\t1808-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16742\t633\tMorávka\tValid\tH5\t49.600000\t18.533330\t2000-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[18.53333, 49.6]\t16742\t633\tMorávka\tValid\tH5\t49.600000\t18.533330\t2000-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16747\t1300\tMornans\tValid\tH5\t44.600000\t5.133330\t1875-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[5.13333, 44.6]\t16747\t1300\tMornans\tValid\tH5\t44.600000\t5.133330\t1875-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t36592\t3763\tMoss\tValid\tCO3.6\t59.433330\t10.700000\t2006-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[10.7, 59.43333]\t36592\t3763\tMoss\tValid\tCO3.6\t59.433330\t10.700000\t2006-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16759\t1500\tMoti-ka-nagla\tValid\tH6\t26.833330\t77.333330\t1868-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[77.33333, 26.83333]\t16759\t1500\tMoti-ka-nagla\tValid\tH6\t26.833330\t77.333330\t1868-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16762\t9150\tMotta di Conti\tValid\tH4\t45.200000\t8.500000\t1868-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8.5, 45.2]\t16762\t9150\tMotta di Conti\tValid\tH4\t45.200000\t8.500000\t1868-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16766\t11300\tMount Browne\tValid\tH6\t-29.800000\t141.700000\t1902-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[141.7, -29.8]\t16766\t11300\tMount Browne\tValid\tH6\t-29.800000\t141.700000\t1902-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16804\t110000\tMount Tazerzait\tValid\tL5\t18.700000\t4.800000\t1991-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[4.8, 18.7]\t16804\t110000\tMount Tazerzait\tValid\tL5\t18.700000\t4.800000\t1991-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16805\t17000\tMount Vaisi\tValid\tStone-uncl\t44.083330\t6.866670\t1637-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[6.86667, 44.08333]\t16805\t17000\tMount Vaisi\tValid\tStone-uncl\t44.083330\t6.866670\t1637-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16820\t1100\tMtola\tValid\tStone-uncl\t-11.500000\t33.500000\t1944-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[33.5, -11.5]\t16820\t1100\tMtola\tValid\tStone-uncl\t-11.500000\t33.500000\t1944-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16841\t4400\tMuddoor\tValid\tL5\t12.633330\t77.016670\t1865-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[77.01667, 12.63333]\t16841\t4400\tMuddoor\tValid\tL5\t12.633330\t77.016670\t1865-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16851\t25.5\tMulletiwu\tValid\tL\t9.333330\t80.833330\t1795-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[80.83333, 9.33333]\t16851\t25.5\tMulletiwu\tValid\tL\t9.333330\t80.833330\t1795-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16874\t4703\tMuraid\tValid\tL6\t24.500000\t90.216670\t1924-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[90.21667, 24.5]\t16874\t4703\tMuraid\tValid\tL6\t24.500000\t90.216670\t1924-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16875\t100000\tMurchison\tValid\tCM2\t-36.616670\t145.200000\t1969-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[145.2, -36.61667]\t16875\t100000\tMurchison\tValid\tCM2\t-36.616670\t145.200000\t1969-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16882\t12600\tMurray\tValid\tCM2\t36.600000\t-88.100000\t1950-01-01T00:00:00.000\t36\t237\nFell\tcoordinates\t[-88.1, 36.6]\t16882\t12600\tMurray\tValid\tCM2\t36.600000\t-88.100000\t1950-01-01T00:00:00.000\t36\t237\nFell\ttype\t\"Point\"\t16885\t1245\tMuzaffarpur\tValid\tIron, IAB-sHL\t26.133330\t85.533330\t1964-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[85.53333, 26.13333]\t16885\t1245\tMuzaffarpur\tValid\tIron, IAB-sHL\t26.133330\t85.533330\t1964-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16887\t\tMyhee Caunta\tValid\tOC\t23.050000\t72.633330\t1842-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[72.63333, 23.05]\t16887\t\tMyhee Caunta\tValid\tOC\t23.050000\t72.633330\t1842-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16889\t8165\tNadiabondi\tValid\tH5\t12.000000\t1.000000\t1956-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[1, 12]\t16889\t8165\tNadiabondi\tValid\tH5\t12.000000\t1.000000\t1956-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16890\t1810\tNagai\tValid\tL6\t38.121670\t140.061670\t1922-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[140.06167, 38.12167]\t16890\t1810\tNagai\tValid\tL6\t38.121670\t140.061670\t1922-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16892\t20\tNagaria\tValid\tEucrite-cm\t26.983330\t78.216670\t1875-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.21667, 26.98333]\t16892\t20\tNagaria\tValid\tEucrite-cm\t26.983330\t78.216670\t1875-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16893\t6100\tNagy-Borové\tValid\tL5\t49.166670\t19.500000\t1895-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[19.5, 49.16667]\t16893\t6100\tNagy-Borové\tValid\tL5\t49.166670\t19.500000\t1895-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16898\t10000\tNakhla\tValid\tMartian (nakhlite)\t31.316670\t30.350000\t1911-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[30.35, 31.31667]\t16898\t10000\tNakhla\tValid\tMartian (nakhlite)\t31.316670\t30.350000\t1911-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16899\t23200\tNakhon Pathom\tValid\tL6\t13.733330\t100.083330\t1923-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[100.08333, 13.73333]\t16899\t23200\tNakhon Pathom\tValid\tL6\t13.733330\t100.083330\t1923-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16902\t4500\tNammianthal\tValid\tH5\t12.283330\t79.200000\t1886-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[79.2, 12.28333]\t16902\t4500\tNammianthal\tValid\tH5\t12.283330\t79.200000\t1886-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16903\t52900\tNan Yang Pao\tValid\tL6\t35.666670\t103.500000\t1917-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[103.5, 35.66667]\t16903\t52900\tNan Yang Pao\tValid\tL6\t35.666670\t103.500000\t1917-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16904\t7500\tNanjemoy\tValid\tH6\t38.416670\t-77.166670\t1825-01-01T00:00:00.000\t45\t419\nFell\tcoordinates\t[-77.16667, 38.41667]\t16904\t7500\tNanjemoy\tValid\tH6\t38.416670\t-77.166670\t1825-01-01T00:00:00.000\t45\t419\nFell\ttype\t\"Point\"\t16907\t529\tNantong\tValid\tH6\t32.116670\t121.800000\t1984-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[121.8, 32.11667]\t16907\t529\tNantong\tValid\tH6\t32.116670\t121.800000\t1984-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16908\t17000\tNaoki\tValid\tH6\t19.250000\t77.000000\t1928-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[77, 19.25]\t16908\t17000\tNaoki\tValid\tH6\t19.250000\t77.000000\t1928-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16909\t2700\tNaragh\tValid\tH6\t33.750000\t51.500000\t1974-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[51.5, 33.75]\t16909\t2700\tNaragh\tValid\tH6\t33.750000\t51.500000\t1974-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16912\t367.5\tNarellan\tValid\tL6\t-34.050000\t150.688890\t1928-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[150.68889, -34.05]\t16912\t367.5\tNarellan\tValid\tL6\t-34.050000\t150.688890\t1928-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16914\t\tNarni\tValid\tStone-uncl\t42.516670\t12.516670\t0921-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[12.51667, 42.51667]\t16914\t\tNarni\tValid\tStone-uncl\t42.516670\t12.516670\t0921-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16922\t347\tNassirah\tValid\tH4\t-21.733330\t165.900000\t1936-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[165.9, -21.73333]\t16922\t347\tNassirah\tValid\tH4\t-21.733330\t165.900000\t1936-01-01T00:00:00.000\t\t\nFell\t0\t\t16923\t1.4\tNatal\tValid\tStone-uncl\t\t\t1973-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16927\t105\tNawapali\tValid\tCM2\t21.250000\t83.666670\t1890-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[83.66667, 21.25]\t16927\t105\tNawapali\tValid\tCM2\t21.250000\t83.666670\t1890-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16934\t420\tNeagari\tValid\tL6\t36.449170\t136.465280\t1995-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[136.46528, 36.44917]\t16934\t420\tNeagari\tValid\tL6\t36.449170\t136.465280\t1995-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16935\t4500\tNedagolla\tValid\tIron, ungrouped\t18.683330\t83.483330\t1870-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[83.48333, 18.68333]\t16935\t4500\tNedagolla\tValid\tIron, ungrouped\t18.683330\t83.483330\t1870-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16941\t2450\tNejo\tValid\tL6\t9.500000\t35.333330\t1970-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[35.33333, 9.5]\t16941\t2450\tNejo\tValid\tL6\t9.500000\t35.333330\t1970-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16945\t10250\tNerft\tValid\tL6\t56.500000\t21.500000\t1864-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[21.5, 56.5]\t16945\t10250\tNerft\tValid\tL6\t56.500000\t21.500000\t1864-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16950\t6189\tNeuschwanstein\tValid\tEL6\t47.525000\t10.808330\t2002-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[10.80833, 47.525]\t16950\t6189\tNeuschwanstein\tValid\tEL6\t47.525000\t10.808330\t2002-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16953\t230000\tNew Concord\tValid\tL6\t40.000000\t-81.766670\t1860-01-01T00:00:00.000\t38\t2615\nFell\tcoordinates\t[-81.76667, 40]\t16953\t230000\tNew Concord\tValid\tL6\t40.000000\t-81.766670\t1860-01-01T00:00:00.000\t38\t2615\nFell\ttype\t\"Point\"\t16954\t12000\tNew Halfa\tValid\tL4\t15.366670\t35.683330\t1994-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[35.68333, 15.36667]\t16954\t12000\tNew Halfa\tValid\tL4\t15.366670\t35.683330\t1994-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16960\t19256\tNew Orleans\tValid\tH5\t29.947180\t-90.109760\t2003-01-01T00:00:00.000\t22\t1667\nFell\tcoordinates\t[-90.10976, 29.94718]\t16960\t19256\tNew Orleans\tValid\tH5\t29.947180\t-90.109760\t2003-01-01T00:00:00.000\t22\t1667\nFell\ttype\t\"Point\"\t16966\t1393\tNgawi\tValid\tLL3.6\t-7.450000\t111.416670\t1883-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[111.41667, -7.45]\t16966\t1393\tNgawi\tValid\tLL3.6\t-7.450000\t111.416670\t1883-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16968\t37500\tN'Goureyma\tValid\tIron, ungrouped\t13.850000\t-4.383330\t1900-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-4.38333, 13.85]\t16968\t37500\tN'Goureyma\tValid\tIron, ungrouped\t13.850000\t-4.383330\t1900-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16970\t\tNicorps\tValid\tStone-uncl\t49.033330\t-1.433330\t1750-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-1.43333, 49.03333]\t16970\t\tNicorps\tValid\tStone-uncl\t49.033330\t-1.433330\t1750-01-01T00:00:00.000\t\t\nFell\t0\t\t16974\t3.3\tNiger (L6)\tValid\tL6\t\t\t1967-01-01T00:00:00.000\t\t\nFell\t0\t\t16975\t3.3\tNiger (LL6)\tValid\tLL6\t\t\t1967-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16976\t3996\tNikolaevka\tValid\tH4\t52.450000\t78.633330\t1935-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.63333, 52.45]\t16976\t3996\tNikolaevka\tValid\tH4\t52.450000\t78.633330\t1935-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16977\t6000\tNikolskoe\tValid\tL4\t56.116670\t37.333330\t1954-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[37.33333, 56.11667]\t16977\t6000\tNikolskoe\tValid\tL4\t56.116670\t37.333330\t1954-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16980\t14250\tNingbo\tValid\tIron, IVA\t29.866670\t121.483330\t1975-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[121.48333, 29.86667]\t16980\t14250\tNingbo\tValid\tIron, IVA\t29.866670\t121.483330\t1975-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16981\t4610\tNingqiang\tValid\tC3-ung\t32.925000\t105.906670\t1983-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[105.90667, 32.925]\t16981\t4610\tNingqiang\tValid\tC3-ung\t32.925000\t105.906670\t1983-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16982\t467\tNio\tValid\tH3-4\t34.200000\t131.566670\t1897-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[131.56667, 34.2]\t16982\t467\tNio\tValid\tH3-4\t34.200000\t131.566670\t1897-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16983\t17200\tN'Kandhla\tValid\tIron, IID\t-28.566670\t30.700000\t1912-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[30.7, -28.56667]\t16983\t17200\tN'Kandhla\tValid\tIron, IID\t-28.566670\t30.700000\t1912-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16984\t2300\tNobleborough\tValid\tEucrite-pmict\t44.083330\t-69.483330\t1823-01-01T00:00:00.000\t49\t1683\nFell\tcoordinates\t[-69.48333, 44.08333]\t16984\t2300\tNobleborough\tValid\tEucrite-pmict\t44.083330\t-69.483330\t1823-01-01T00:00:00.000\t49\t1683\nFell\ttype\t\"Point\"\t16985\t483.7\tNoblesville\tValid\tH4-6\t40.085280\t-86.055000\t1991-01-01T00:00:00.000\t35\t2238\nFell\tcoordinates\t[-86.055, 40.08528]\t16985\t483.7\tNoblesville\tValid\tH4-6\t40.085280\t-86.055000\t1991-01-01T00:00:00.000\t35\t2238\nFell\ttype\t\"Point\"\t16988\t472\tNogata\tValid\tL6\t33.725000\t130.750000\t0861-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[130.75, 33.725]\t16988\t472\tNogata\tValid\tL6\t33.725000\t130.750000\t0861-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16989\t4000\tNogoya\tValid\tCM2\t-32.366670\t-59.833330\t1879-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-59.83333, -32.36667]\t16989\t4000\tNogoya\tValid\tCM2\t-32.366670\t-59.833330\t1879-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t16994\t1050\tNorfork\tValid\tIron, IIIAB\t36.216670\t-92.266670\t1918-01-01T00:00:00.000\t15\t10\nFell\tcoordinates\t[-92.26667, 36.21667]\t16994\t1050\tNorfork\tValid\tIron, IIIAB\t36.216670\t-92.266670\t1918-01-01T00:00:00.000\t15\t10\nFell\ttype\t\"Point\"\t17922\t1100000\tNorton County\tValid\tAubrite\t39.683330\t-99.866670\t1948-01-01T00:00:00.000\t17\t1252\nFell\tcoordinates\t[-99.86667, 39.68333]\t17922\t1100000\tNorton County\tValid\tAubrite\t39.683330\t-99.866670\t1948-01-01T00:00:00.000\t17\t1252\nFell\ttype\t\"Point\"\t17930\t177\tNoventa Vicentina\tValid\tH4\t45.291670\t11.527220\t1971-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[11.52722, 45.29167]\t17930\t177\tNoventa Vicentina\tValid\tH4\t45.291670\t11.527220\t1971-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17933\t1900\tNovo-Urei\tValid\tUreilite\t54.816670\t46.000000\t1886-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[46, 54.81667]\t17933\t1900\tNovo-Urei\tValid\tUreilite\t54.816670\t46.000000\t1886-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17934\t\tNovy-Ergi\tValid\tStone-uncl\t58.550000\t31.333330\t1662-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[31.33333, 58.55]\t17934\t\tNovy-Ergi\tValid\tStone-uncl\t58.550000\t31.333330\t1662-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17935\t1001\tNovy-Projekt\tValid\tOC\t56.000000\t22.000000\t1908-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[22, 56]\t17935\t1001\tNovy-Projekt\tValid\tOC\t56.000000\t22.000000\t1908-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17936\t250\tNoyan-Bogdo\tValid\tL6\t42.916670\t102.466670\t1933-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[102.46667, 42.91667]\t17936\t250\tNoyan-Bogdo\tValid\tL6\t42.916670\t102.466670\t1933-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17938\t50000\tNuevo Mercurio\tValid\tH5\t24.300000\t-102.133330\t1978-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-102.13333, 24.3]\t17938\t50000\tNuevo Mercurio\tValid\tH5\t24.300000\t-102.133330\t1978-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17959\t5000\tNulles\tValid\tH6\t41.633330\t0.750000\t1851-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.75, 41.63333]\t17959\t5000\tNulles\tValid\tH6\t41.633330\t0.750000\t1851-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17960\t363\tNumakai\tValid\tH4\t43.333330\t141.866670\t1925-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[141.86667, 43.33333]\t17960\t363\tNumakai\tValid\tH4\t43.333330\t141.866670\t1925-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17969\t737.6\tNyaung\tValid\tIron, IIIAB\t21.208330\t94.916670\t1939-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[94.91667, 21.20833]\t17969\t737.6\tNyaung\tValid\tIron, IIIAB\t21.208330\t94.916670\t1939-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17970\t1100\tNyirábrany\tValid\tLL5\t47.550000\t22.025000\t1914-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[22.025, 47.55]\t17970\t1100\tNyirábrany\tValid\tLL5\t47.550000\t22.025000\t1914-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17979\t500000\tOchansk\tValid\tH4\t57.783330\t55.266670\t1887-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[55.26667, 57.78333]\t17979\t500000\tOchansk\tValid\tH4\t57.783330\t55.266670\t1887-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17988\t1400\tOesede\tValid\tH5\t52.283330\t8.050000\t1927-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8.05, 52.28333]\t17988\t1400\tOesede\tValid\tH5\t52.283330\t8.050000\t1927-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17989\t6000\tOesel\tValid\tL6\t58.500000\t23.000000\t1855-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[23, 58.5]\t17989\t6000\tOesel\tValid\tL6\t58.500000\t23.000000\t1855-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17990\t3750\tOfehértó\tValid\tL6\t47.883330\t22.033330\t1900-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[22.03333, 47.88333]\t17990\t3750\tOfehértó\tValid\tL6\t47.883330\t22.033330\t1900-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17994\t14360\tOgi\tValid\tH6\t33.283330\t130.200000\t1741-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[130.2, 33.28333]\t17994\t14360\tOgi\tValid\tH6\t33.283330\t130.200000\t1741-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17995\t16250\tOhaba\tValid\tH5\t46.066670\t23.583330\t1857-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[23.58333, 46.06667]\t17995\t16250\tOhaba\tValid\tH5\t46.066670\t23.583330\t1857-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17996\t7700\tOhuma\tValid\tL5\t6.750000\t8.500000\t1963-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8.5, 6.75]\t17996\t7700\tOhuma\tValid\tL5\t6.750000\t8.500000\t1963-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17997\t5850\tOjuelos Altos\tValid\tL6\t38.183330\t-5.400000\t1926-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-5.4, 38.18333]\t17997\t5850\tOjuelos Altos\tValid\tL6\t38.183330\t-5.400000\t1926-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t17998\t194\tOkabe\tValid\tH5\t36.183330\t139.216670\t1958-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[139.21667, 36.18333]\t17998\t194\tOkabe\tValid\tH5\t36.183330\t139.216670\t1958-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18000\t4742\tOkano\tValid\tIron, IIAB\t35.083330\t135.200000\t1904-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[135.2, 35.08333]\t18000\t4742\tOkano\tValid\tIron, IIAB\t35.083330\t135.200000\t1904-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18002\t12000\tOkniny\tValid\tLL6\t50.833330\t25.500000\t1834-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[25.5, 50.83333]\t18002\t12000\tOkniny\tValid\tLL6\t50.833330\t25.500000\t1834-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18009\t16570\tOldenburg (1930)\tValid\tL6\t52.950000\t8.166670\t1930-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8.16667, 52.95]\t18009\t16570\tOldenburg (1930)\tValid\tL6\t52.950000\t8.166670\t1930-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18012\t\tOliva-Gandia\tValid\tStone-uncl\t39.000000\t-0.033330\t1520-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-0.03333, 39]\t18012\t\tOliva-Gandia\tValid\tStone-uncl\t39.000000\t-0.033330\t1520-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18013\t150000\tOlivenza\tValid\tLL5\t38.716670\t-7.066670\t1924-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-7.06667, 38.71667]\t18013\t150000\tOlivenza\tValid\tLL5\t38.716670\t-7.066670\t1924-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18015\t40000\tOlmedilla de Alarcón\tValid\tH5\t39.566670\t-2.100000\t1929-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-2.1, 39.56667]\t18015\t40000\tOlmedilla de Alarcón\tValid\tH5\t39.566670\t-2.100000\t1929-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18019\t250000\tOmolon\tValid\tPallasite, PMG\t64.020000\t161.808330\t1981-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[161.80833, 64.02]\t18019\t250000\tOmolon\tValid\tPallasite, PMG\t64.020000\t161.808330\t1981-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18026\t14000\tOrgueil\tValid\tCI1\t43.883330\t1.383330\t1864-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[1.38333, 43.88333]\t18026\t14000\tOrgueil\tValid\tCI1\t43.883330\t1.383330\t1864-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t34489\t180\tOrlando\tValid\tEucrite\t28.547500\t-81.362220\t2004-01-01T00:00:00.000\t30\t1078\nFell\tcoordinates\t[-81.36222, 28.5475]\t34489\t180\tOrlando\tValid\tEucrite\t28.547500\t-81.362220\t2004-01-01T00:00:00.000\t30\t1078\nFell\ttype\t\"Point\"\t18030\t6000\tOrnans\tValid\tCO3.4\t47.116670\t6.150000\t1868-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[6.15, 47.11667]\t18030\t6000\tOrnans\tValid\tCO3.4\t47.116670\t6.150000\t1868-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18033\t4500\tOrtenau\tValid\tStone-uncl\t48.500000\t8.000000\t1671-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[8, 48.5]\t18033\t4500\tOrtenau\tValid\tStone-uncl\t48.500000\t8.000000\t1671-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18034\t3400\tOrvinio\tValid\tH6\t42.133330\t12.933330\t1872-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[12.93333, 42.13333]\t18034\t3400\tOrvinio\tValid\tH6\t42.133330\t12.933330\t1872-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18042\t246\tOterøy\tValid\tL6\t58.883330\t9.400000\t1928-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[9.4, 58.88333]\t18042\t246\tOterøy\tValid\tL6\t58.883330\t9.400000\t1928-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18045\t6510\tOtomi\tValid\tH\t38.400000\t140.350000\t1867-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[140.35, 38.4]\t18045\t6510\tOtomi\tValid\tH\t38.400000\t140.350000\t1867-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18046\t840\tOttawa\tValid\tLL6\t38.600000\t-95.216670\t1896-01-01T00:00:00.000\t17\t1947\nFell\tcoordinates\t[-95.21667, 38.6]\t18046\t840\tOttawa\tValid\tLL6\t38.600000\t-95.216670\t1896-01-01T00:00:00.000\t17\t1947\nFell\ttype\t\"Point\"\t56729\t4440\tOuadangou\tValid\tL5\t12.900000\t0.080000\t2003-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.08, 12.9]\t56729\t4440\tOuadangou\tValid\tL5\t12.900000\t0.080000\t2003-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18050\t1215.5\tOued el Hadjar\tValid\tLL6\t30.180000\t-6.577170\t1986-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-6.57717, 30.18]\t18050\t1215.5\tOued el Hadjar\tValid\tLL6\t30.180000\t-6.577170\t1986-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t31282\t17000\tOum Dreyga\tValid\tH3-5\t24.300000\t-13.100000\t2003-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-13.1, 24.3]\t31282\t17000\tOum Dreyga\tValid\tH3-5\t24.300000\t-13.100000\t2003-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18052\t20000\tOurique\tValid\tH4\t37.608330\t-8.280000\t1998-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-8.28, 37.60833]\t18052\t20000\tOurique\tValid\tH4\t37.608330\t-8.280000\t1998-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18055\t121.5\tOvambo\tValid\tL6\t-18.000000\t16.000000\t1900-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[16, -18]\t18055\t121.5\tOvambo\tValid\tL6\t-18.000000\t16.000000\t1900-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18058\t205\tOviedo\tValid\tH5\t43.400000\t-5.866670\t1856-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-5.86667, 43.4]\t18058\t205\tOviedo\tValid\tH5\t43.400000\t-5.866670\t1856-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18062\t\tOwrucz\tValid\tOC\t51.333330\t28.833330\t1775-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[28.83333, 51.33333]\t18062\t\tOwrucz\tValid\tOC\t51.333330\t28.833330\t1775-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18068\t3400\tPacula\tValid\tL6\t21.050000\t-99.300000\t1881-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-99.3, 21.05]\t18068\t3400\tPacula\tValid\tL6\t21.050000\t-99.300000\t1881-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18069\t3858\tPadvarninkai\tValid\tEucrite-mmict\t55.666670\t25.000000\t1929-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[25, 55.66667]\t18069\t3858\tPadvarninkai\tValid\tEucrite-mmict\t55.666670\t25.000000\t1929-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18072\t515\tPaitan\tValid\tH6\t17.743330\t120.455830\t1910-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[120.45583, 17.74333]\t18072\t515\tPaitan\tValid\tH6\t17.743330\t120.455830\t1910-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18073\t\tPalahatchie\tValid\tOC\t32.316670\t-89.716670\t1910-01-01T00:00:00.000\t32\t503\nFell\tcoordinates\t[-89.71667, 32.31667]\t18073\t\tPalahatchie\tValid\tOC\t32.316670\t-89.716670\t1910-01-01T00:00:00.000\t32\t503\nFell\ttype\t\"Point\"\t18074\t1430\tPalca de Aparzo\tValid\tL5\t-23.116670\t-65.100000\t1988-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-65.1, -23.11667]\t18074\t1430\tPalca de Aparzo\tValid\tL5\t-23.116670\t-65.100000\t1988-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18077\t18000\tPalinshih\tValid\tIron\t43.483330\t118.616670\t1914-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[118.61667, 43.48333]\t18077\t18000\tPalinshih\tValid\tIron\t43.483330\t118.616670\t1914-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18079\t135\tPalmyra\tValid\tL3\t39.800000\t-91.500000\t1926-01-01T00:00:00.000\t18\t2122\nFell\tcoordinates\t[-91.5, 39.8]\t18079\t135\tPalmyra\tValid\tL3\t39.800000\t-91.500000\t1926-01-01T00:00:00.000\t18\t2122\nFell\ttype\t\"Point\"\t18082\t682\tPalolo Valley\tValid\tH5\t21.300000\t-157.783330\t1949-01-01T00:00:00.000\t4\t1657\nFell\tcoordinates\t[-157.78333, 21.3]\t18082\t682\tPalolo Valley\tValid\tH5\t21.300000\t-157.783330\t1949-01-01T00:00:00.000\t4\t1657\nFound\t0\t\t32591\t69.5\tDominion Range 03239\tValid\tL6\t\t\t2002-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18093\t10500\tPampanga\tValid\tL5\t15.083330\t120.700000\t1859-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[120.7, 15.08333]\t18093\t10500\tPampanga\tValid\tL5\t15.083330\t120.700000\t1859-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18098\t2130\tPantar\tValid\tH5\t8.066670\t124.283330\t1938-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[124.28333, 8.06667]\t18098\t2130\tPantar\tValid\tH5\t8.066670\t124.283330\t1938-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18101\t408000\tParagould\tValid\tLL5\t36.066670\t-90.500000\t1930-01-01T00:00:00.000\t15\t1023\nFell\tcoordinates\t[-90.5, 36.06667]\t18101\t408000\tParagould\tValid\tLL5\t36.066670\t-90.500000\t1930-01-01T00:00:00.000\t15\t1023\nFell\ttype\t\"Point\"\t18102\t2000\tParambu\tValid\tLL5\t-6.233330\t-40.700000\t1967-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-40.7, -6.23333]\t18102\t2000\tParambu\tValid\tLL5\t-6.233330\t-40.700000\t1967-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18103\t100000\tParanaiba\tValid\tL6\t-19.133330\t-51.666670\t1956-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-51.66667, -19.13333]\t18103\t100000\tParanaiba\tValid\tL6\t-19.133330\t-51.666670\t1956-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18106\t18000\tPark Forest\tValid\tL5\t41.484720\t-87.679170\t2003-01-01T00:00:00.000\t34\t1863\nFell\tcoordinates\t[-87.67917, 41.48472]\t18106\t18000\tPark Forest\tValid\tL5\t41.484720\t-87.679170\t2003-01-01T00:00:00.000\t34\t1863\nFell\ttype\t\"Point\"\t18108\t77600\tParnallee\tValid\tLL3.6\t9.233330\t78.350000\t1857-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.35, 9.23333]\t18108\t77600\tParnallee\tValid\tLL3.6\t9.233330\t78.350000\t1857-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18109\t800\tParsa\tValid\tEH3\t26.200000\t85.400000\t1942-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[85.4, 26.2]\t18109\t800\tParsa\tValid\tEH3\t26.200000\t85.400000\t1942-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18110\t5100\tPasamonte\tValid\tEucrite-pmict\t36.216670\t-103.400000\t1933-01-01T00:00:00.000\t11\t1994\nFell\tcoordinates\t[-103.4, 36.21667]\t18110\t5100\tPasamonte\tValid\tEucrite-pmict\t36.216670\t-103.400000\t1933-01-01T00:00:00.000\t11\t1994\nFell\ttype\t\"Point\"\t18112\t4375\tPatora\tValid\tH6\t20.936940\t82.050000\t1969-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[82.05, 20.93694]\t18112\t4375\tPatora\tValid\tH6\t20.936940\t82.050000\t1969-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18116\t2121\tPatrimonio\tValid\tL6\t-19.533330\t-48.566670\t1950-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-48.56667, -19.53333]\t18116\t2121\tPatrimonio\tValid\tL6\t-19.533330\t-48.566670\t1950-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18118\t12\tPatti\tValid\tIron\t38.133330\t14.966670\t1922-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[14.96667, 38.13333]\t18118\t12\tPatti\tValid\tIron\t38.133330\t14.966670\t1922-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18171\t37350\tPatwar\tValid\tMesosiderite-A1\t23.150000\t91.183330\t1935-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[91.18333, 23.15]\t18171\t37350\tPatwar\tValid\tMesosiderite-A1\t23.150000\t91.183330\t1935-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18173\t2968\tPavel\tValid\tH5\t43.466670\t25.516670\t1966-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[25.51667, 43.46667]\t18173\t2968\tPavel\tValid\tH5\t43.466670\t25.516670\t1966-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18175\t142.5\tPavlodar (stone)\tValid\tH5\t52.300000\t77.033330\t1938-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[77.03333, 52.3]\t18175\t142.5\tPavlodar (stone)\tValid\tH5\t52.300000\t77.033330\t1938-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18176\t40000\tPavlograd\tValid\tL6\t48.533330\t35.983330\t1826-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[35.98333, 48.53333]\t18176\t40000\tPavlograd\tValid\tL6\t48.533330\t35.983330\t1826-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18177\t2000\tPavlovka\tValid\tHowardite\t52.033330\t43.000000\t1882-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[43, 52.03333]\t18177\t2000\tPavlovka\tValid\tHowardite\t52.033330\t43.000000\t1882-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18179\t\tPê\tValid\tL6\t11.333670\t-3.542170\t1989-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-3.54217, 11.33367]\t18179\t\tPê\tValid\tL6\t11.333670\t-3.542170\t1989-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18180\t45760\tPeace River\tValid\tL6\t56.133330\t-117.933330\t1963-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-117.93333, 56.13333]\t18180\t45760\tPeace River\tValid\tL6\t56.133330\t-117.933330\t1963-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18181\t117.8\tPeckelsheim\tValid\tDiogenite-pm\t51.666670\t9.250000\t1953-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[9.25, 51.66667]\t18181\t117.8\tPeckelsheim\tValid\tDiogenite-pm\t51.666670\t9.250000\t1953-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18782\t12570\tPeekskill\tValid\tH6\t41.283330\t-73.916670\t1992-01-01T00:00:00.000\t47\t2185\nFell\tcoordinates\t[-73.91667, 41.28333]\t18782\t12570\tPeekskill\tValid\tH6\t41.283330\t-73.916670\t1992-01-01T00:00:00.000\t47\t2185\nFell\ttype\t\"Point\"\t18786\t70000\tPeña Blanca Spring\tValid\tAubrite\t30.125000\t-103.116670\t1946-01-01T00:00:00.000\t23\t3062\nFell\tcoordinates\t[-103.11667, 30.125]\t18786\t70000\tPeña Blanca Spring\tValid\tAubrite\t30.125000\t-103.116670\t1946-01-01T00:00:00.000\t23\t3062\nFell\ttype\t\"Point\"\t18792\t165\tPeramiho\tValid\tEucrite-mmict\t-10.666670\t35.500000\t1899-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[35.5, -10.66667]\t18792\t165\tPeramiho\tValid\tEucrite-mmict\t-10.666670\t35.500000\t1899-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18793\t23474\tPerpeti\tValid\tL6\t23.325000\t91.000000\t1935-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[91, 23.325]\t18793\t23474\tPerpeti\tValid\tL6\t23.325000\t91.000000\t1935-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18797\t2\tPerth\tValid\tLL5\t56.400000\t-3.433330\t1830-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-3.43333, 56.4]\t18797\t2\tPerth\tValid\tLL5\t56.400000\t-3.433330\t1830-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18798\t66000\tPervomaisky\tValid\tL6\t56.633330\t39.433330\t1933-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[39.43333, 56.63333]\t18798\t66000\tPervomaisky\tValid\tL6\t56.633330\t39.433330\t1933-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18799\t3393\tPesyanoe\tValid\tAubrite\t55.500000\t66.083330\t1933-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[66.08333, 55.5]\t18799\t3393\tPesyanoe\tValid\tAubrite\t55.500000\t66.083330\t1933-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18800\t189\tPétèlkolé\tValid\tH5\t14.052000\t0.420000\t1995-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.42, 14.052]\t18800\t189\tPétèlkolé\tValid\tH5\t14.052000\t0.420000\t1995-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18801\t1800\tPetersburg\tValid\tEucrite-pmict\t35.300000\t-86.633330\t1855-01-01T00:00:00.000\t39\t2017\nFell\tcoordinates\t[-86.63333, 35.3]\t18801\t1800\tPetersburg\tValid\tEucrite-pmict\t35.300000\t-86.633330\t1855-01-01T00:00:00.000\t39\t2017\nFell\ttype\t\"Point\"\t18804\t\tPettiswood\tValid\tStone-uncl\t53.533330\t-7.333330\t1779-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-7.33333, 53.53333]\t18804\t\tPettiswood\tValid\tStone-uncl\t53.533330\t-7.333330\t1779-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18808\t57900\tPhillips County (stone)\tValid\tL6\t40.000000\t-99.250000\t1901-01-01T00:00:00.000\t17\t1255\nFell\tcoordinates\t[-99.25, 40]\t18808\t57900\tPhillips County (stone)\tValid\tL6\t40.000000\t-99.250000\t1901-01-01T00:00:00.000\t17\t1255\nFell\ttype\t\"Point\"\t18809\t500\tPhu Hong\tValid\tH4\t11.250000\t108.583330\t1887-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[108.58333, 11.25]\t18809\t500\tPhu Hong\tValid\tH4\t11.250000\t108.583330\t1887-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18811\t7800\tPhum Sambo\tValid\tH4\t12.000000\t105.483330\t1933-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[105.48333, 12]\t18811\t7800\tPhum Sambo\tValid\tH4\t12.000000\t105.483330\t1933-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18812\t11000\tPhuoc-Binh\tValid\tL5\t15.716670\t108.100000\t1941-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[108.1, 15.71667]\t18812\t11000\tPhuoc-Binh\tValid\tL5\t15.716670\t108.100000\t1941-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18813\t13.1\tPiancaldoli\tValid\tLL3.4\t44.244170\t11.502220\t1968-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[11.50222, 44.24417]\t18813\t13.1\tPiancaldoli\tValid\tLL3.4\t44.244170\t11.502220\t1968-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18816\t\tPicote\tValid\tStone-uncl\t41.366670\t-6.233330\t1843-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-6.23333, 41.36667]\t18816\t\tPicote\tValid\tStone-uncl\t41.366670\t-6.233330\t1843-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18822\t23250\tPillistfer\tValid\tEL6\t58.666670\t25.733330\t1863-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[25.73333, 58.66667]\t18822\t23250\tPillistfer\tValid\tEL6\t58.666670\t25.733330\t1863-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18831\t42000\tPiplia Kalan\tValid\tEucrite-mmict\t26.034720\t73.941670\t1996-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[73.94167, 26.03472]\t18831\t42000\tPiplia Kalan\tValid\tEucrite-mmict\t26.034720\t73.941670\t1996-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18832\t37\tPiquetberg\tValid\tH\t-32.866670\t18.716670\t1881-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[18.71667, -32.86667]\t18832\t37\tPiquetberg\tValid\tH\t-32.866670\t18.716670\t1881-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18834\t842\tPirgunje\tValid\tL6\t25.800000\t88.450000\t1882-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[88.45, 25.8]\t18834\t842\tPirgunje\tValid\tL6\t25.800000\t88.450000\t1882-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18835\t1161\tPirthalla\tValid\tH6\t29.583330\t76.000000\t1884-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76, 29.58333]\t18835\t1161\tPirthalla\tValid\tH6\t29.583330\t76.000000\t1884-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18837\t3760\tPitts\tValid\tIron, IAB-ung\t31.950000\t-83.516670\t1921-01-01T00:00:00.000\t31\t207\nFell\tcoordinates\t[-83.51667, 31.95]\t18837\t3760\tPitts\tValid\tIron, IAB-ung\t31.950000\t-83.516670\t1921-01-01T00:00:00.000\t31\t207\nFell\ttype\t\"Point\"\t18846\t2085\tPlantersville\tValid\tH6\t30.700000\t-96.116670\t1930-01-01T00:00:00.000\t23\t2018\nFell\tcoordinates\t[-96.11667, 30.7]\t18846\t2085\tPlantersville\tValid\tH6\t30.700000\t-96.116670\t1930-01-01T00:00:00.000\t23\t2018\nFell\ttype\t\"Point\"\t51706\t6913\tPleşcoi\tValid\tL5-6\t45.275000\t26.709720\t2008-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[26.70972, 45.275]\t51706\t6913\tPleşcoi\tValid\tL5-6\t45.275000\t26.709720\t2008-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18849\t39\tPloschkovitz\tValid\tL5\t50.533330\t14.116670\t1723-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[14.11667, 50.53333]\t18849\t39\tPloschkovitz\tValid\tL5\t50.533330\t14.116670\t1723-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18851\t96\tPnompehn\tValid\tL6\t11.583330\t104.916670\t1868-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[104.91667, 11.58333]\t18851\t96\tPnompehn\tValid\tL6\t11.583330\t104.916670\t1868-01-01T00:00:00.000\t\t\nFound\t0\t\t32592\t290.89999999999998\tDominion Range 03240\tValid\tLL5\t\t\t2002-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18853\t3000\tPohlitz\tValid\tL5\t50.933330\t12.133330\t1819-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[12.13333, 50.93333]\t18853\t3000\tPohlitz\tValid\tL5\t50.933330\t12.133330\t1819-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18858\t350\tPokhra\tValid\tH5\t26.716670\t82.666670\t1866-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[82.66667, 26.71667]\t18858\t350\tPokhra\tValid\tH5\t26.716670\t82.666670\t1866-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18860\t253.6\tPollen\tValid\tCM2\t66.348330\t14.015000\t1942-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[14.015, 66.34833]\t18860\t253.6\tPollen\tValid\tCM2\t66.348330\t14.015000\t1942-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18865\t157\tPontlyfni\tValid\tWinonaite\t53.036390\t-4.319440\t1931-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-4.31944, 53.03639]\t18865\t157\tPontlyfni\tValid\tWinonaite\t53.036390\t-4.319440\t1931-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18874\t71400\tPortales Valley\tValid\tH6\t34.175000\t-103.295000\t1998-01-01T00:00:00.000\t11\t1987\nFell\tcoordinates\t[-103.295, 34.175]\t18874\t71400\tPortales Valley\tValid\tH6\t34.175000\t-103.295000\t1998-01-01T00:00:00.000\t11\t1987\nFell\ttype\t\"Point\"\t18876\t4500\tPortugal\tValid\tStone-uncl\t38.500000\t-8.000000\t1796-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-8, 38.5]\t18876\t4500\tPortugal\tValid\tStone-uncl\t38.500000\t-8.000000\t1796-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18879\t665\tPo-wang Chen\tValid\tLL\t31.416670\t118.500000\t1933-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[118.5, 31.41667]\t18879\t665\tPo-wang Chen\tValid\tLL\t31.416670\t118.500000\t1933-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18883\t2125\tPrambachkirchen\tValid\tL6\t48.302500\t13.940830\t1932-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[13.94083, 48.3025]\t18883\t2125\tPrambachkirchen\tValid\tL6\t48.302500\t13.940830\t1932-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18887\t5555\tPribram\tValid\tH5\t49.666670\t14.033330\t1959-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[14.03333, 49.66667]\t18887\t5555\tPribram\tValid\tH5\t49.666670\t14.033330\t1959-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18888\t900\tPricetown\tValid\tL6\t39.116670\t-83.850000\t1893-01-01T00:00:00.000\t38\t2566\nFell\tcoordinates\t[-83.85, 39.11667]\t18888\t900\tPricetown\tValid\tL6\t39.116670\t-83.850000\t1893-01-01T00:00:00.000\t38\t2566\nFell\ttype\t\"Point\"\t45984\t500\tPuerto Lápice\tValid\tEucrite-br\t39.350000\t-3.516670\t2007-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-3.51667, 39.35]\t45984\t500\tPuerto Lápice\tValid\tEucrite-br\t39.350000\t-3.516670\t2007-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18899\t560\tPulsora\tValid\tH5\t23.366670\t75.183330\t1863-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[75.18333, 23.36667]\t18899\t560\tPulsora\tValid\tH5\t23.366670\t75.183330\t1863-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18901\t250000\tPultusk\tValid\tH5\t52.766670\t21.266670\t1868-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[21.26667, 52.76667]\t18901\t250000\tPultusk\tValid\tH5\t52.766670\t21.266670\t1868-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18902\t100\tPunganaru\tValid\tStone-uncl\t13.333330\t78.950000\t1811-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.95, 13.33333]\t18902\t100\tPunganaru\tValid\tStone-uncl\t13.333330\t78.950000\t1811-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18905\t300000\tPutinga\tValid\tL6\t-29.033330\t-53.050000\t1937-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-53.05, -29.03333]\t18905\t300000\tPutinga\tValid\tL6\t-29.033330\t-53.050000\t1937-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18907\t1275\tQidong\tValid\tL/LL5\t32.083330\t121.500000\t1982-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[121.5, 32.08333]\t18907\t1275\tQidong\tValid\tL/LL5\t32.083330\t121.500000\t1982-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t18908\t2600\tQingzhen\tValid\tEH3\t26.533330\t106.466670\t1976-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[106.46667, 26.53333]\t18908\t2600\tQingzhen\tValid\tEH3\t26.533330\t106.466670\t1976-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22357\t7000\tQueen's Mercy\tValid\tH6\t-30.116670\t28.700000\t1925-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[28.7, -30.11667]\t22357\t7000\tQueen's Mercy\tValid\tH6\t-30.116670\t28.700000\t1925-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22358\t6045\tQuenggouk\tValid\tH4\t17.766670\t95.183330\t1857-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[95.18333, 17.76667]\t22358\t6045\tQuenggouk\tValid\tH4\t17.766670\t95.183330\t1857-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22360\t10750\tQuesa\tValid\tIron, IAB-ung\t39.000000\t-0.666670\t1898-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-0.66667, 39]\t22360\t10750\tQuesa\tValid\tIron, IAB-ung\t39.000000\t-0.666670\t1898-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22361\t17450\tQuija\tValid\tH\t44.616670\t126.133330\t1990-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[126.13333, 44.61667]\t22361\t17450\tQuija\tValid\tH\t44.616670\t126.133330\t1990-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22363\t65\tQuincay\tValid\tL6\t46.600000\t0.250000\t1851-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.25, 46.6]\t22363\t65\tQuincay\tValid\tL6\t46.600000\t0.250000\t1851-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22368\t5000\tRaco\tValid\tH5\t-26.666670\t-65.450000\t1957-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-65.45, -26.66667]\t22368\t5000\tRaco\tValid\tH5\t-26.666670\t-65.450000\t1957-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22371\t10200\tRaghunathpura\tValid\tIron, IIAB\t27.725280\t76.465000\t1986-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.465, 27.72528]\t22371\t10200\tRaghunathpura\tValid\tIron, IIAB\t27.725280\t76.465000\t1986-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t31302\t67225\tRahimyar Khan\tValid\tL5\t28.225000\t70.200000\t1983-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[70.2, 28.225]\t31302\t67225\tRahimyar Khan\tValid\tL5\t28.225000\t70.200000\t1983-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22376\t9000\tRakovka\tValid\tL6\t52.983330\t37.033330\t1878-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[37.03333, 52.98333]\t22376\t9000\tRakovka\tValid\tL6\t52.983330\t37.033330\t1878-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22384\t3766\tRamnagar\tValid\tL6\t26.450000\t82.900000\t1940-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[82.9, 26.45]\t22384\t3766\tRamnagar\tValid\tL6\t26.450000\t82.900000\t1940-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22385\t100\tRampurhat\tValid\tLL\t24.166670\t87.766670\t1916-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[87.76667, 24.16667]\t22385\t100\tRampurhat\tValid\tLL\t24.166670\t87.766670\t1916-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22386\t4682\tRamsdorf\tValid\tL6\t51.883330\t6.933330\t1958-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[6.93333, 51.88333]\t22386\t4682\tRamsdorf\tValid\tL6\t51.883330\t6.933330\t1958-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22387\t290.39999999999998\tRanchapur\tValid\tH4\t23.983330\t87.083330\t1917-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[87.08333, 23.98333]\t22387\t290.39999999999998\tRanchapur\tValid\tH4\t23.983330\t87.083330\t1917-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22390\t300\tRancho de la Presa\tValid\tH5\t19.866670\t-100.816670\t1899-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-100.81667, 19.86667]\t22390\t300\tRancho de la Presa\tValid\tH5\t19.866670\t-100.816670\t1899-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22392\t3224.5\tRangala\tValid\tL6\t25.383330\t72.016670\t1937-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[72.01667, 25.38333]\t22392\t3224.5\tRangala\tValid\tL6\t25.383330\t72.016670\t1937-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22394\t4910\tRaoyang\tValid\tL6\t38.200000\t115.700000\t1919-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[115.7, 38.2]\t22394\t4910\tRaoyang\tValid\tL6\t38.200000\t115.700000\t1919-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22395\t6.1\tRas Tanura\tValid\tH6\t26.666670\t50.150000\t1961-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[50.15, 26.66667]\t22395\t6.1\tRas Tanura\tValid\tH6\t26.666670\t50.150000\t1961-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22396\t24700\tRasgrad\tValid\tStone-uncl\t43.500000\t26.533330\t1740-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[26.53333, 43.5]\t22396\t24700\tRasgrad\tValid\tStone-uncl\t43.500000\t26.533330\t1740-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22398\t910\tRatyn\tValid\tStone-uncl\t52.200000\t17.983330\t1880-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[17.98333, 52.2]\t22398\t910\tRatyn\tValid\tStone-uncl\t52.200000\t17.983330\t1880-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t53502\t18.41\tRed Canyon Lake\tValid\tH5\t38.137420\t-119.758120\t2007-01-01T00:00:00.000\t8\t1391\nFell\tcoordinates\t[-119.75812, 38.13742]\t53502\t18.41\tRed Canyon Lake\tValid\tH5\t38.137420\t-119.758120\t2007-01-01T00:00:00.000\t8\t1391\nFell\ttype\t\"Point\"\t22584\t17300\tReliegos\tValid\tL5\t42.475000\t-5.333330\t1947-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-5.33333, 42.475]\t22584\t17300\tReliegos\tValid\tL5\t42.475000\t-5.333330\t1947-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22585\t10000\tRembang\tValid\tIron, IVA\t-6.733330\t111.366670\t1919-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[111.36667, -6.73333]\t22585\t10000\tRembang\tValid\tIron, IVA\t-6.733330\t111.366670\t1919-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22586\t1000\tRenazzo\tValid\tCR2\t44.766670\t11.283330\t1824-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[11.28333, 44.76667]\t22586\t1000\tRenazzo\tValid\tCR2\t44.766670\t11.283330\t1824-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22587\t300\tRenca\tValid\tL5\t-32.750000\t-65.283330\t1925-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-65.28333, -32.75]\t22587\t300\tRenca\tValid\tL5\t-32.750000\t-65.283330\t1925-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22589\t355\tRenqiu\tValid\tL6\t38.666670\t116.133330\t1916-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[116.13333, 38.66667]\t22589\t355\tRenqiu\tValid\tL6\t38.666670\t116.133330\t1916-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22590\t7000\tRepeev Khutor\tValid\tIron, IIF\t48.600000\t45.666670\t1933-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[45.66667, 48.6]\t22590\t7000\tRepeev Khutor\tValid\tIron, IIF\t48.600000\t45.666670\t1933-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22592\t1\tRevelstoke\tValid\tCI1\t51.333330\t-118.950000\t1965-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-118.95, 51.33333]\t22592\t1\tRevelstoke\tValid\tCI1\t51.333330\t-118.950000\t1965-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22593\t3332\tRewari\tValid\tL6\t28.200000\t76.666670\t1929-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[76.66667, 28.2]\t22593\t3332\tRewari\tValid\tL6\t28.200000\t76.666670\t1929-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22597\t668\tRich Mountain\tValid\tL6\t35.033330\t-83.033330\t1903-01-01T00:00:00.000\t37\t2388\nFell\tcoordinates\t[-83.03333, 35.03333]\t22597\t668\tRich Mountain\tValid\tL6\t35.033330\t-83.033330\t1903-01-01T00:00:00.000\t37\t2388\nFell\ttype\t\"Point\"\t24140\t20000\tUzcudun\tValid\tL\t-44.116670\t-66.150000\t1948-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-66.15, -44.11667]\t24140\t20000\tUzcudun\tValid\tL\t-44.116670\t-66.150000\t1948-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22599\t90000\tRichardton\tValid\tH5\t46.883330\t-102.316670\t1918-01-01T00:00:00.000\t3\t569\nFell\tcoordinates\t[-102.31667, 46.88333]\t22599\t90000\tRichardton\tValid\tH5\t46.883330\t-102.316670\t1918-01-01T00:00:00.000\t3\t569\nFell\ttype\t\"Point\"\t22602\t1900\tRichland Springs\tValid\tOC\t31.250000\t-99.033330\t1980-01-01T00:00:00.000\t23\t2885\nFell\tcoordinates\t[-99.03333, 31.25]\t22602\t1900\tRichland Springs\tValid\tOC\t31.250000\t-99.033330\t1980-01-01T00:00:00.000\t23\t2885\nFell\ttype\t\"Point\"\t22603\t1800\tRichmond\tValid\tLL5\t37.466670\t-77.500000\t1828-01-01T00:00:00.000\t40\t2764\nFell\tcoordinates\t[-77.5, 37.46667]\t22603\t1800\tRichmond\tValid\tLL5\t37.466670\t-77.500000\t1828-01-01T00:00:00.000\t40\t2764\nFell\ttype\t\"Point\"\t22611\t1310\tRio Negro\tValid\tL4\t-26.100000\t-49.800000\t1934-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-49.8, -26.1]\t22611\t1310\tRio Negro\tValid\tL4\t-26.100000\t-49.800000\t1934-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22614\t103.3\tRivolta de Bassi\tValid\tStone-uncl\t45.483330\t9.516670\t1491-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[9.51667, 45.48333]\t22614\t103.3\tRivolta de Bassi\tValid\tStone-uncl\t45.483330\t9.516670\t1491-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22637\t340\tRochester\tValid\tH6\t41.083330\t-86.283330\t1876-01-01T00:00:00.000\t35\t150\nFell\tcoordinates\t[-86.28333, 41.08333]\t22637\t340\tRochester\tValid\tH6\t41.083330\t-86.283330\t1876-01-01T00:00:00.000\t35\t150\nFell\ttype\t\"Point\"\t22640\t1641\tRockhampton\tValid\tStone-uncl\t-23.383330\t150.516670\t1895-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[150.51667, -23.38333]\t22640\t1641\tRockhampton\tValid\tStone-uncl\t-23.383330\t150.516670\t1895-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22641\t400\tRoda\tValid\tDiogenite\t42.300000\t0.550000\t1871-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.55, 42.3]\t22641\t400\tRoda\tValid\tDiogenite\t42.300000\t0.550000\t1871-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22642\t2900\tRodach\tValid\tStone-uncl\t50.350000\t10.800000\t1775-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[10.8, 50.35]\t22642\t2900\tRodach\tValid\tStone-uncl\t50.350000\t10.800000\t1775-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22766\t10600\tRose City\tValid\tH5\t44.516670\t-83.950000\t1921-01-01T00:00:00.000\t50\t361\nFell\tcoordinates\t[-83.95, 44.51667]\t22766\t10600\tRose City\tValid\tH5\t44.516670\t-83.950000\t1921-01-01T00:00:00.000\t50\t361\nFell\ttype\t\"Point\"\t22773\t3500\tRowton\tValid\tIron, IIIAB\t52.766670\t-2.516670\t1876-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-2.51667, 52.76667]\t22773\t3500\tRowton\tValid\tIron, IIIAB\t52.766670\t-2.516670\t1876-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22780\t465.5\tRuhobobo\tValid\tL6\t-1.450000\t29.833330\t1976-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[29.83333, -1.45]\t22780\t465.5\tRuhobobo\tValid\tL6\t-1.450000\t29.833330\t1976-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22782\t67\tRumuruti\tValid\tR3.8-6\t0.266670\t36.533330\t1934-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[36.53333, 0.26667]\t22782\t67\tRumuruti\tValid\tR3.8-6\t0.266670\t36.533330\t1934-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22783\t6000\tRupota\tValid\tL4-6\t-10.266670\t38.766670\t1949-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[38.76667, -10.26667]\t22783\t6000\tRupota\tValid\tL4-6\t-10.266670\t38.766670\t1949-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22791\t13000\tRyechki\tValid\tL5\t51.133330\t34.500000\t1914-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[34.5, 51.13333]\t22791\t13000\tRyechki\tValid\tL5\t51.133330\t34.500000\t1914-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22792\t1250\tSabetmahet\tValid\tH5\t27.433330\t82.083330\t1855-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[82.08333, 27.43333]\t22792\t1250\tSabetmahet\tValid\tH5\t27.433330\t82.083330\t1855-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22793\t478\tSabrum\tValid\tLL6\t23.083330\t91.666670\t1999-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[91.66667, 23.08333]\t22793\t478\tSabrum\tValid\tLL6\t23.083330\t91.666670\t1999-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t22796\t\tSagan\tValid\tStone-uncl\t51.533330\t14.883330\t1636-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[14.88333, 51.53333]\t22796\t\tSagan\tValid\tStone-uncl\t51.533330\t14.883330\t1636-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23101\t14000\tSaint-Sauveur\tValid\tEH5\t43.733330\t1.383330\t1914-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[1.38333, 43.73333]\t23101\t14000\tSaint-Sauveur\tValid\tEH5\t43.733330\t1.383330\t1914-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23102\t271000\tSaint-Séverin\tValid\tLL6\t45.300000\t0.233330\t1966-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.23333, 45.3]\t23102\t271000\tSaint-Séverin\tValid\tLL6\t45.300000\t0.233330\t1966-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23103\t4180\tSakauchi\tValid\tIron\t35.666670\t136.300000\t1913-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[136.3, 35.66667]\t23103\t4180\tSakauchi\tValid\tIron\t35.666670\t136.300000\t1913-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23107\t61.4\tSalem\tValid\tL6\t44.979170\t-122.969440\t1981-01-01T00:00:00.000\t12\t2409\nFell\tcoordinates\t[-122.96944, 44.97917]\t23107\t61.4\tSalem\tValid\tL6\t44.979170\t-122.969440\t1981-01-01T00:00:00.000\t12\t2409\nFell\ttype\t\"Point\"\t23111\t9000\tSalles\tValid\tL5\t46.050000\t4.633330\t1798-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[4.63333, 46.05]\t23111\t9000\tSalles\tValid\tL5\t46.050000\t4.633330\t1798-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23114\t43\tSalzwedel\tValid\tLL5\t52.750000\t11.050000\t1985-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[11.05, 52.75]\t23114\t43\tSalzwedel\tValid\tLL5\t52.750000\t11.050000\t1985-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23115\t2462\tSamelia\tValid\tIron, IIIAB\t25.666670\t74.866670\t1921-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[74.86667, 25.66667]\t23115\t2462\tSamelia\tValid\tIron, IIIAB\t25.666670\t74.866670\t1921-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23128\t56\tSan Juan Capistrano\tValid\tH6\t33.484720\t-117.662500\t1973-01-01T00:00:00.000\t8\t1174\nFell\tcoordinates\t[-117.6625, 33.48472]\t23128\t56\tSan Juan Capistrano\tValid\tH6\t33.484720\t-117.662500\t1973-01-01T00:00:00.000\t8\t1174\nFell\ttype\t\"Point\"\t31315\t237\tSan Michele\tValid\tL6\t43.666670\t13.000000\t2002-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[13, 43.66667]\t31315\t237\tSan Michele\tValid\tL6\t43.666670\t13.000000\t2002-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23130\t282\tSan Pedro de Quiles\tValid\tL6\t-31.016670\t-71.400000\t1956-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-71.4, -31.01667]\t23130\t282\tSan Pedro de Quiles\tValid\tL6\t-31.016670\t-71.400000\t1956-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t34063\t460\tSan Pedro Jacuaro\tValid\tLL6\t19.766670\t-100.650000\t1968-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-100.65, 19.76667]\t34063\t460\tSan Pedro Jacuaro\tValid\tLL6\t19.766670\t-100.650000\t1968-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23161\t400\tSanta Barbara\tValid\tL4\t-29.200000\t-51.866670\t1873-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-51.86667, -29.2]\t23161\t400\tSanta Barbara\tValid\tL4\t-29.200000\t-51.866670\t1873-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23164\t60\tSanta Cruz\tValid\tCM2\t24.166670\t-99.333330\t1939-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-99.33333, 24.16667]\t23164\t60\tSanta Cruz\tValid\tCM2\t24.166670\t-99.333330\t1939-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23165\t5500\tSanta Isabel\tValid\tL6\t-33.900000\t-61.700000\t1924-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-61.7, -33.9]\t23165\t5500\tSanta Isabel\tValid\tL6\t-33.900000\t-61.700000\t1924-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t50909\t4000\tSanta Lucia (2008)\tValid\tL6\t-31.535556\t-68.489444\t2008-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-68.489444, -31.535556]\t50909\t4000\tSanta Lucia (2008)\tValid\tL6\t-31.535556\t-68.489444\t2008-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23171\t927\tSão Jose do Rio Preto\tValid\tH4\t-20.810000\t-49.380560\t1962-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-49.38056, -20.81]\t23171\t927\tSão Jose do Rio Preto\tValid\tH4\t-20.810000\t-49.380560\t1962-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23176\t200000\tSaratov\tValid\tL4\t52.550000\t46.550000\t1918-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[46.55, 52.55]\t23176\t200000\tSaratov\tValid\tL4\t52.550000\t46.550000\t1918-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23187\t695\tSasagase\tValid\tH\t34.716670\t137.783330\t1688-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[137.78333, 34.71667]\t23187\t695\tSasagase\tValid\tH\t34.716670\t137.783330\t1688-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23188\t4000\tSauguis\tValid\tL6\t43.150000\t-0.850000\t1868-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-0.85, 43.15]\t23188\t4000\tSauguis\tValid\tL6\t43.150000\t-0.850000\t1868-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23190\t2500\tSavtschenskoje\tValid\tLL4\t47.216670\t29.866670\t1894-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[29.86667, 47.21667]\t23190\t2500\tSavtschenskoje\tValid\tLL4\t47.216670\t29.866670\t1894-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23192\t430\tSayama\tValid\tCM2\t35.866670\t139.400000\t1986-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[139.4, 35.86667]\t23192\t430\tSayama\tValid\tCM2\t35.866670\t139.400000\t1986-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23455\t412\tSazovice\tValid\tL5\t49.233330\t17.566670\t1934-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[17.56667, 49.23333]\t23455\t412\tSazovice\tValid\tL5\t49.233330\t17.566670\t1934-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23457\t7000\tSchellin\tValid\tL\t53.350000\t15.050000\t1715-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[15.05, 53.35]\t23457\t7000\tSchellin\tValid\tL\t53.350000\t15.050000\t1715-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23458\t283.3\tSchenectady\tValid\tH5\t42.860830\t-73.950280\t1968-01-01T00:00:00.000\t47\t2142\nFell\tcoordinates\t[-73.95028, 42.86083]\t23458\t283.3\tSchenectady\tValid\tH5\t42.860830\t-73.950280\t1968-01-01T00:00:00.000\t47\t2142\nFell\ttype\t\"Point\"\t23460\t8000\tSchönenberg\tValid\tL6\t48.116670\t10.466670\t1846-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[10.46667, 48.11667]\t23460\t8000\tSchönenberg\tValid\tL6\t48.116670\t10.466670\t1846-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23472\t5400\tSearsmont\tValid\tH5\t44.366670\t-69.200000\t1871-01-01T00:00:00.000\t49\t1727\nFell\tcoordinates\t[-69.2, 44.36667]\t23472\t5400\tSearsmont\tValid\tH5\t44.366670\t-69.200000\t1871-01-01T00:00:00.000\t49\t1727\nFell\ttype\t\"Point\"\t23473\t240\tSediköy\tValid\tL6\t38.300000\t27.133330\t1917-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[27.13333, 38.3]\t23473\t240\tSediköy\tValid\tL6\t38.300000\t27.133330\t1917-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23476\t6930\tSegowlie\tValid\tLL6\t26.750000\t84.783330\t1853-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[84.78333, 26.75]\t23476\t6930\tSegowlie\tValid\tLL6\t26.750000\t84.783330\t1853-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23481\t1590\tSelakopi\tValid\tH5\t-7.233330\t107.333330\t1939-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[107.33333, -7.23333]\t23481\t1590\tSelakopi\tValid\tH5\t-7.233330\t107.333330\t1939-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23483\t150\tSeldebourak\tValid\tH5\t22.833330\t4.983330\t1947-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[4.98333, 22.83333]\t23483\t150\tSeldebourak\tValid\tH5\t22.833330\t4.983330\t1947-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23487\t691\tSemarkona\tValid\tLL3.00\t22.250000\t79.000000\t1940-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[79, 22.25]\t23487\t691\tSemarkona\tValid\tLL3.00\t22.250000\t79.000000\t1940-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23495\t4000\tSena\tValid\tH4\t41.716670\t-0.050000\t1773-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-0.05, 41.71667]\t23495\t4000\tSena\tValid\tH4\t41.716670\t-0.050000\t1773-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23496\t866\tSenboku\tValid\tH6\t39.438330\t140.511670\t1993-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[140.51167, 39.43833]\t23496\t866\tSenboku\tValid\tH6\t39.438330\t140.511670\t1993-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23500\t20000\tSeoni\tValid\tH6\t21.683890\t79.500830\t1966-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[79.50083, 21.68389]\t23500\t20000\tSeoni\tValid\tH6\t21.683890\t79.500830\t1966-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23501\t8500\tSeres\tValid\tH4\t41.050000\t23.566670\t1818-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[23.56667, 41.05]\t23501\t8500\tSeres\tValid\tH4\t41.050000\t23.566670\t1818-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23502\t1800\tSerra de Magé\tValid\tEucrite-cm\t-8.383330\t-36.766670\t1923-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-36.76667, -8.38333]\t23502\t1800\tSerra de Magé\tValid\tEucrite-cm\t-8.383330\t-36.766670\t1923-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23504\t350\tSete Lagoas\tValid\tH4\t-19.466670\t-44.216670\t1908-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-44.21667, -19.46667]\t23504\t350\tSete Lagoas\tValid\tH4\t-19.466670\t-44.216670\t1908-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23508\t180\tSevilla\tValid\tLL4\t37.416670\t-6.000000\t1862-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-6, 37.41667]\t23508\t180\tSevilla\tValid\tLL4\t37.416670\t-6.000000\t1862-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23509\t101000\tSevrukovo\tValid\tL5\t50.616670\t36.600000\t1874-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[36.6, 50.61667]\t23509\t101000\tSevrukovo\tValid\tL5\t50.616670\t36.600000\t1874-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23512\t7000\tSfax\tValid\tL6\t34.750000\t10.716670\t1989-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[10.71667, 34.75]\t23512\t7000\tSfax\tValid\tL6\t34.750000\t10.716670\t1989-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23521\t4000\tShalka\tValid\tDiogenite\t23.100000\t87.300000\t1850-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[87.3, 23.1]\t23521\t4000\tShalka\tValid\tDiogenite\t23.100000\t87.300000\t1850-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23525\t1265\tSharps\tValid\tH3.4\t37.833330\t-76.700000\t1921-01-01T00:00:00.000\t40\t921\nFell\tcoordinates\t[-76.7, 37.83333]\t23525\t1265\tSharps\tValid\tH3.4\t37.833330\t-76.700000\t1921-01-01T00:00:00.000\t40\t921\nFell\ttype\t\"Point\"\t23529\t18600\tShelburne\tValid\tL5\t44.050000\t-80.166670\t1904-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-80.16667, 44.05]\t23529\t18600\tShelburne\tValid\tL5\t44.050000\t-80.166670\t1904-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23530\t5000\tShergotty\tValid\tMartian (shergottite)\t24.550000\t84.833330\t1865-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[84.83333, 24.55]\t23530\t5000\tShergotty\tValid\tMartian (shergottite)\t24.550000\t84.833330\t1865-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23531\t605\tSheyang\tValid\tL6\t33.650000\t120.066670\t1976-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[120.06667, 33.65]\t23531\t605\tSheyang\tValid\tL6\t33.650000\t120.066670\t1976-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23534\t3679.7\tShikarpur\tValid\tL6\t25.850000\t87.577500\t1921-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[87.5775, 25.85]\t23534\t3679.7\tShikarpur\tValid\tL6\t25.850000\t87.577500\t1921-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23582\t3900\tShuangyang\tValid\tH5\t43.500000\t125.666670\t1971-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[125.66667, 43.5]\t23582\t3900\tShuangyang\tValid\tH5\t43.500000\t125.666670\t1971-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23583\t5000\tShupiyan\tValid\tH6\t33.716670\t74.833330\t1912-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[74.83333, 33.71667]\t23583\t5000\tShupiyan\tValid\tH6\t33.716670\t74.833330\t1912-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23584\t3200\tShytal\tValid\tL6\t24.333330\t90.166670\t1863-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[90.16667, 24.33333]\t23584\t3200\tShytal\tValid\tL6\t24.333330\t90.166670\t1863-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23586\t3700\tSiena\tValid\tLL5\t43.116670\t11.600000\t1794-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[11.6, 43.11667]\t23586\t3700\tSiena\tValid\tLL5\t43.116670\t11.600000\t1794-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23593\t23000000\tSikhote-Alin\tValid\tIron, IIAB\t46.160000\t134.653330\t1947-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[134.65333, 46.16]\t23593\t23000000\tSikhote-Alin\tValid\tIron, IIAB\t46.160000\t134.653330\t1947-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23594\t1710\tSilao\tValid\tH5\t20.933330\t-101.383330\t1995-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-101.38333, 20.93333]\t23594\t1710\tSilao\tValid\tH5\t20.933330\t-101.383330\t1995-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t55584\t0.15\tSilistra\tValid\tAchondrite-ung\t44.116670\t27.266670\t1917-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[27.26667, 44.11667]\t55584\t0.15\tSilistra\tValid\tAchondrite-ung\t44.116670\t27.266670\t1917-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23603\t1222\tSimmern\tValid\tH5\t49.983330\t7.533330\t1920-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[7.53333, 49.98333]\t23603\t1222\tSimmern\tValid\tH5\t49.983330\t7.533330\t1920-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23606\t1455\tSinai\tValid\tL6\t30.900000\t32.483330\t1916-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[32.48333, 30.9]\t23606\t1455\tSinai\tValid\tL6\t30.900000\t32.483330\t1916-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23611\t8400\tSindhri\tValid\tH5\t26.216670\t69.550000\t1901-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[69.55, 26.21667]\t23611\t8400\tSindhri\tValid\tH5\t26.216670\t69.550000\t1901-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23613\t2000\tSinnai\tValid\tH6\t39.300000\t9.200000\t1956-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[9.2, 39.3]\t23613\t2000\tSinnai\tValid\tH6\t39.300000\t9.200000\t1956-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23614\t4100\tSioux County\tValid\tEucrite-mmict\t42.583330\t-103.666670\t1933-01-01T00:00:00.000\t19\t2351\nFell\tcoordinates\t[-103.66667, 42.58333]\t23614\t4100\tSioux County\tValid\tEucrite-mmict\t42.583330\t-103.666670\t1933-01-01T00:00:00.000\t19\t2351\nFell\ttype\t\"Point\"\t23616\t1600\tSitathali\tValid\tH5\t20.916670\t82.583330\t1875-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[82.58333, 20.91667]\t23616\t1600\tSitathali\tValid\tH5\t20.916670\t82.583330\t1875-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23617\t40000\tSivas\tValid\tH6\t39.824670\t36.135830\t1989-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[36.13583, 39.82467]\t23617\t40000\tSivas\tValid\tH6\t39.824670\t36.135830\t1989-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23619\t630\tSixiangkou\tValid\tL5\t32.433330\t119.866670\t1989-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[119.86667, 32.43333]\t23619\t630\tSixiangkou\tValid\tL5\t32.433330\t119.866670\t1989-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23621\t850\tSki\tValid\tL6\t59.733330\t10.866670\t1848-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[10.86667, 59.73333]\t23621\t850\tSki\tValid\tL6\t59.733330\t10.866670\t1848-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23626\t1708\tSlavetic\tValid\tH5\t45.683330\t15.600000\t1868-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[15.6, 45.68333]\t23626\t1708\tSlavetic\tValid\tH5\t45.683330\t15.600000\t1868-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23645\t2750\tSlobodka\tValid\tL4\t55.000000\t35.000000\t1818-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[35, 55]\t23645\t2750\tSlobodka\tValid\tL4\t55.000000\t35.000000\t1818-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23660\t72.900000000000006\tSoheria\tValid\tOC\t27.133330\t84.066670\t1960-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[84.06667, 27.13333]\t23660\t72.900000000000006\tSoheria\tValid\tOC\t27.133330\t84.066670\t1960-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23661\t80000\tSoko-Banja\tValid\tLL4\t43.666670\t21.866670\t1877-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[21.86667, 43.66667]\t23661\t80000\tSoko-Banja\tValid\tLL4\t43.666670\t21.866670\t1877-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23663\t54\tSologne\tValid\tH5\t47.366670\t1.733330\t1860-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[1.73333, 47.36667]\t23663\t54\tSologne\tValid\tH5\t47.366670\t1.733330\t1860-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t53829\t1066\tSołtmany\tValid\tL6\t54.008830\t22.005000\t2011-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[22.005, 54.00883]\t53829\t1066\tSołtmany\tValid\tL6\t54.008830\t22.005000\t2011-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23667\t17100\tSone\tValid\tH5\t35.166670\t135.333330\t1866-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[135.33333, 35.16667]\t23667\t17100\tSone\tValid\tH5\t35.166670\t135.333330\t1866-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23668\t36900\tSongyuan\tValid\tL6\t45.250000\t125.000000\t1993-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[125, 45.25]\t23668\t36900\tSongyuan\tValid\tL6\t45.250000\t125.000000\t1993-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23670\t958\tSopot\tValid\tOC\t44.416670\t23.500000\t1927-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[23.5, 44.41667]\t23670\t958\tSopot\tValid\tOC\t44.416670\t23.500000\t1927-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23671\t2050\tSoroti\tValid\tIron, ungrouped\t1.700000\t33.633330\t1945-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[33.63333, 1.7]\t23671\t2050\tSoroti\tValid\tIron, ungrouped\t1.700000\t33.633330\t1945-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23081\t360\tSt. Caprais-de-Quinsac\tValid\tL6\t44.750000\t0.050000\t1883-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[0.05, 44.75]\t23081\t360\tSt. Caprais-de-Quinsac\tValid\tL6\t44.750000\t0.050000\t1883-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23082\t5500\tSt. Christophe-la-Chartreuse\tValid\tL6\t46.950000\t-1.500000\t1841-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-1.5, 46.95]\t23082\t5500\tSt. Christophe-la-Chartreuse\tValid\tL6\t46.950000\t-1.500000\t1841-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23083\t700\tSt. Denis Westrem\tValid\tL6\t51.050000\t3.750000\t1855-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[3.75, 51.05]\t23083\t700\tSt. Denis Westrem\tValid\tL6\t51.050000\t3.750000\t1855-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23087\t4000\tSt. Germain-du-Pinel\tValid\tH6\t48.016670\t-1.150000\t1890-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-1.15, 48.01667]\t23087\t4000\tSt. Germain-du-Pinel\tValid\tH6\t48.016670\t-1.150000\t1890-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23089\t1000\tSt. Louis\tValid\tH4\t38.700000\t-90.233330\t1950-01-01T00:00:00.000\t18\t2223\nFell\tcoordinates\t[-90.23333, 38.7]\t23089\t1000\tSt. Louis\tValid\tH4\t38.700000\t-90.233330\t1950-01-01T00:00:00.000\t18\t2223\nFell\ttype\t\"Point\"\t23090\t13780\tSt. Mark's\tValid\tEH5\t-32.016670\t27.416670\t1903-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[27.41667, -32.01667]\t23090\t13780\tSt. Mark's\tValid\tEH5\t-32.016670\t27.416670\t1903-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23091\t24.3\tSt. Mary's County\tValid\tLL3.3\t38.166670\t-76.383330\t1919-01-01T00:00:00.000\t45\t424\nFell\tcoordinates\t[-76.38333, 38.16667]\t23091\t24.3\tSt. Mary's County\tValid\tLL3.3\t38.166670\t-76.383330\t1919-01-01T00:00:00.000\t45\t424\nFell\ttype\t\"Point\"\t23092\t8300\tSt. Mesmin\tValid\tLL6\t48.450000\t3.933330\t1866-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[3.93333, 48.45]\t23092\t8300\tSt. Mesmin\tValid\tLL6\t48.450000\t3.933330\t1866-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23093\t17000\tSt. Michel\tValid\tL6\t61.650000\t27.200000\t1910-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[27.2, 61.65]\t23093\t17000\tSt. Michel\tValid\tL6\t61.650000\t27.200000\t1910-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23097\t134.30000000000001\tSt.-Chinian\tValid\tL6\t43.433330\t2.950000\t1959-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[2.95, 43.43333]\t23097\t134.30000000000001\tSt.-Chinian\tValid\tL6\t43.433330\t2.950000\t1959-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23712\t34000\tStälldalen\tValid\tH5\t59.933330\t14.950000\t1876-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[14.95, 59.93333]\t23712\t34000\tStälldalen\tValid\tH5\t59.933330\t14.950000\t1876-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23713\t52000\tStannern\tValid\tEucrite-mmict\t49.283330\t15.566670\t1808-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[15.56667, 49.28333]\t23713\t52000\tStannern\tValid\tEucrite-mmict\t49.283330\t15.566670\t1808-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23717\t1500\tStavropol\tValid\tL6\t45.050000\t41.983330\t1857-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[41.98333, 45.05]\t23717\t1500\tStavropol\tValid\tL6\t45.050000\t41.983330\t1857-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23099\t4960\tSte. Marguerite\tValid\tH4\t50.766670\t3.000000\t1962-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[3, 50.76667]\t23099\t4960\tSte. Marguerite\tValid\tH4\t50.766670\t3.000000\t1962-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23724\t325000\tSterlitamak\tValid\tIron, IIIAB\t53.666670\t55.983330\t1990-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[55.98333, 53.66667]\t23724\t325000\tSterlitamak\tValid\tIron, IIIAB\t53.666670\t55.983330\t1990-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23726\t\tStolzenau\tValid\tStone-uncl\t52.533330\t9.050000\t1647-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[9.05, 52.53333]\t23726\t\tStolzenau\tValid\tStone-uncl\t52.533330\t9.050000\t1647-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23728\t50\tStratford\tValid\tL6\t41.200000\t-73.133330\t1974-01-01T00:00:00.000\t24\t1040\nFell\tcoordinates\t[-73.13333, 41.2]\t23728\t50\tStratford\tValid\tL6\t41.200000\t-73.133330\t1974-01-01T00:00:00.000\t24\t1040\nFell\ttype\t\"Point\"\t23729\t13400\tStrathmore\tValid\tL6\t56.583330\t-3.250000\t1917-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-3.25, 56.58333]\t23729\t13400\tStrathmore\tValid\tL6\t56.583330\t-3.250000\t1917-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23732\t10400\tStretchleigh\tValid\tStone-uncl\t50.383330\t-3.950000\t1623-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-3.95, 50.38333]\t23732\t10400\tStretchleigh\tValid\tStone-uncl\t50.383330\t-3.950000\t1623-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23733\t25400\tSt-Robert\tValid\tH5\t45.968610\t-72.978060\t1994-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-72.97806, 45.96861]\t23733\t25400\tSt-Robert\tValid\tH5\t45.968610\t-72.978060\t1994-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23736\t3500\tSuccess\tValid\tL6\t36.483330\t-90.666670\t1924-01-01T00:00:00.000\t15\t955\nFell\tcoordinates\t[-90.66667, 36.48333]\t23736\t3500\tSuccess\tValid\tL6\t36.483330\t-90.666670\t1924-01-01T00:00:00.000\t15\t955\nFell\ttype\t\"Point\"\t23737\t815.3\tSuchy Dul\tValid\tL6\t50.538060\t16.263330\t1969-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[16.26333, 50.53806]\t23737\t815.3\tSuchy Dul\tValid\tL6\t50.538060\t16.263330\t1969-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23738\t260000\tSuizhou\tValid\tL6\t31.616670\t113.466670\t1986-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[113.46667, 31.61667]\t23738\t260000\tSuizhou\tValid\tL6\t31.616670\t113.466670\t1986-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t48951\t110000\tSulagiri\tValid\tLL6\t12.666670\t78.033330\t2008-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[78.03333, 12.66667]\t48951\t110000\tSulagiri\tValid\tLL6\t12.666670\t78.033330\t2008-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23741\t1710.5\tSultanpur\tValid\tL/LL6\t25.933330\t84.283330\t1916-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[84.28333, 25.93333]\t23741\t1710.5\tSultanpur\tValid\tL/LL6\t25.933330\t84.283330\t1916-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23745\t637\tSungach\tValid\tH5\t44.866670\t133.166670\t1935-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[133.16667, 44.86667]\t23745\t637\tSungach\tValid\tH5\t44.866670\t133.166670\t1935-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23760\t7235\tSupuhee\tValid\tH6\t26.716670\t84.216670\t1865-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[84.21667, 26.71667]\t23760\t7235\tSupuhee\tValid\tH6\t26.716670\t84.216670\t1865-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t55529\t992.5\tSutter's Mill\tValid\tC\t38.803890\t-120.908060\t2012-01-01T00:00:00.000\t8\t1187\nFell\tcoordinates\t[-120.90806, 38.80389]\t55529\t992.5\tSutter's Mill\tValid\tC\t38.803890\t-120.908060\t2012-01-01T00:00:00.000\t8\t1187\nFell\ttype\t\"Point\"\t23773\t5560\tSylacauga\tValid\tH4\t33.188360\t-86.294500\t1954-01-01T00:00:00.000\t29\t1637\nFell\tcoordinates\t[-86.2945, 33.18836]\t23773\t5560\tSylacauga\tValid\tH4\t33.188360\t-86.294500\t1954-01-01T00:00:00.000\t29\t1637\nFell\ttype\t\"Point\"\t23776\t7540\tTabor\tValid\tH5\t49.400000\t14.650000\t1753-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[14.65, 49.4]\t23776\t7540\tTabor\tValid\tH5\t49.400000\t14.650000\t1753-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23778\t9000\tTadjera\tValid\tL5\t36.183330\t5.416670\t1867-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[5.41667, 36.18333]\t23778\t9000\tTadjera\tValid\tL5\t36.183330\t5.416670\t1867-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23782\t10000\tTagish Lake\tValid\tC2-ung\t59.704440\t-134.201390\t2000-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-134.20139, 59.70444]\t23782\t10000\tTagish Lake\tValid\tC2-ung\t59.704440\t-134.201390\t2000-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23784\t1000\tTahara\tValid\tH4/5\t34.720000\t137.305000\t1991-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[137.305, 34.72]\t23784\t1000\tTahara\tValid\tH4/5\t34.720000\t137.305000\t1991-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23789\t720\tTakenouchi\tValid\tH5\t35.383330\t134.900000\t1880-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[134.9, 35.38333]\t23789\t720\tTakenouchi\tValid\tH5\t35.383330\t134.900000\t1880-01-01T00:00:00.000\t\t\nFell\t0\t\t23791\t1421\tTalampaya\tValid\tEucrite-cm\t\t\t1995-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23795\t10500\tTambakwatu\tValid\tL6\t-7.750000\t112.766670\t1975-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[112.76667, -7.75]\t23795\t10500\tTambakwatu\tValid\tL6\t-7.750000\t112.766670\t1975-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t48691\t100000\tTamdakht\tValid\tH5\t31.163330\t-7.015000\t2008-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-7.015, 31.16333]\t48691\t100000\tTamdakht\tValid\tH5\t31.163330\t-7.015000\t2008-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23801\t905\tTané\tValid\tL5\t35.433330\t136.233330\t1918-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[136.23333, 35.43333]\t23801\t905\tTané\tValid\tL5\t35.433330\t136.233330\t1918-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23873\t3850\tTaonan\tValid\tL5\t45.400000\t122.900000\t1965-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[122.9, 45.4]\t23873\t3850\tTaonan\tValid\tL5\t45.400000\t122.900000\t1965-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23884\t12000\tTatahouine\tValid\tDiogenite\t32.950000\t10.416670\t1931-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[10.41667, 32.95]\t23884\t12000\tTatahouine\tValid\tDiogenite\t32.950000\t10.416670\t1931-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23885\t2500\tTathlith\tValid\tL6\t19.383330\t43.733330\t1967-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[43.73333, 19.38333]\t23885\t2500\tTathlith\tValid\tL6\t19.383330\t43.733330\t1967-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23887\t6000\tTauk\tValid\tL6\t35.133330\t44.450000\t1929-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[44.45, 35.13333]\t23887\t6000\tTauk\tValid\tL6\t35.133330\t44.450000\t1929-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23888\t21000\tTauti\tValid\tL6\t46.716670\t23.500000\t1937-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[23.5, 46.71667]\t23888\t21000\tTauti\tValid\tL6\t46.716670\t23.500000\t1937-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23897\t160000\tTenham\tValid\tL6\t-25.733330\t142.950000\t1879-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[142.95, -25.73333]\t23897\t160000\tTenham\tValid\tL6\t-25.733330\t142.950000\t1879-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23898\t28500\tTennasilm\tValid\tL4\t58.033330\t26.950000\t1872-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[26.95, 58.03333]\t23898\t28500\tTennasilm\tValid\tL4\t58.033330\t26.950000\t1872-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23908\t342\tThal\tValid\tH6\t33.400000\t70.600000\t1950-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[70.6, 33.4]\t23908\t342\tThal\tValid\tH6\t33.400000\t70.600000\t1950-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t54493\t14200\tThika\tValid\tL6\t-1.002780\t37.150280\t2011-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[37.15028, -1.00278]\t54493\t14200\tThika\tValid\tL6\t-1.002780\t37.150280\t2011-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23976\t45300\tThuathe\tValid\tH4/5\t-29.333330\t27.583330\t2002-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[27.58333, -29.33333]\t23976\t45300\tThuathe\tValid\tH4/5\t-29.333330\t27.583330\t2002-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23984\t2232\tTianzhang\tValid\tH5\t32.946670\t118.990000\t1986-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[118.99, 32.94667]\t23984\t2232\tTianzhang\tValid\tH5\t32.946670\t118.990000\t1986-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23989\t28000\tTieschitz\tValid\tH/L3.6\t49.600000\t17.116670\t1878-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[17.11667, 49.6]\t23989\t28000\tTieschitz\tValid\tH/L3.6\t49.600000\t17.116670\t1878-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t23998\t74800\tTilden\tValid\tL6\t38.200000\t-89.683330\t1927-01-01T00:00:00.000\t34\t1762\nFell\tcoordinates\t[-89.68333, 38.2]\t23998\t74800\tTilden\tValid\tL6\t38.200000\t-89.683330\t1927-01-01T00:00:00.000\t34\t1762\nFell\ttype\t\"Point\"\t23999\t3000\tTillaberi\tValid\tL6\t14.250000\t1.533330\t1970-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[1.53333, 14.25]\t23999\t3000\tTillaberi\tValid\tL6\t14.250000\t1.533330\t1970-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t24004\t65500\tTimochin\tValid\tH5\t54.500000\t35.200000\t1807-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[35.2, 54.5]\t24004\t65500\tTimochin\tValid\tH5\t54.500000\t35.200000\t1807-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t24009\t230\tTirupati\tValid\tH6\t13.633330\t79.416670\t1934-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[79.41667, 13.63333]\t24009\t230\tTirupati\tValid\tH6\t13.633330\t79.416670\t1934-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t54823\t7000\tTissint\tValid\tMartian (shergottite)\t29.481950\t-7.611230\t2011-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[-7.61123, 29.48195]\t54823\t7000\tTissint\tValid\tMartian (shergottite)\t29.481950\t-7.611230\t2011-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t24011\t20000\tTjabe\tValid\tH6\t-7.083330\t111.533330\t1869-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[111.53333, -7.08333]\t24011\t20000\tTjabe\tValid\tH6\t-7.083330\t111.533330\t1869-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t24012\t16500\tTjerebon\tValid\tL5\t-6.666670\t106.583330\t1922-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[106.58333, -6.66667]\t24012\t16500\tTjerebon\tValid\tL5\t-6.666670\t106.583330\t1922-01-01T00:00:00.000\t\t\nFell\ttype\t\"Point\"\t24019\t600\tTomakovka\tValid\tLL6\t47.850000\t34.766670\t1905-01-01T00:00:00.000\t\t\nFell\tcoordinates\t[34.76667, 47.85]\t24019\t600\tTomakovka\tValid\tLL6\t47.850000\t34.766670\t1905-01-01T00:00:00.000\t\t\n"
  },
  {
    "path": "tests/golden/unfurl-empty-false.tsv",
    "content": "a_key\ta_value\n"
  },
  {
    "path": "tests/golden/unfurl-empty.tsv",
    "content": "a_key\ta_value\nkey\tvalue\nkey\tvalue\n"
  },
  {
    "path": "tests/golden/unfurl-list.tsv",
    "content": "Date\tCustomer_key\tCustomer_value\tSKU\tItem\tQuantity\tUnit\tPaid\n7/3/2018 1:47p\t0\tRobert Armstrong\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t4\t$12.95\t$51.8\n7/3/2018 1:47p\t1\tDee Vasquez\tFOOD213\tBFF Oh My Gravy! Beef & Salmon 2.8oz\t4\t$12.95\t$51.8\n7/3/2018 3:32p\t0\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t1\t$4.22\t$4.22\n7/5/2018 4:15p\t0\tDouglas \"Dougie\" Powers\tFOOD121\tFood, Adult Cat 3.5 oz\t1\t$4.22\t$4.22\n7/6/2018 12:15p\t0\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t12\t$1.29\t157¥\n7/10/2018 10:28a\t0\tDavid Attenborough\tNSCT201\tFood, Salamander\t30\t$.05\t$1.5\n7/10/2018 5:23p\t0\tSusan Ashworth\tCAT060\tCat, Korat (Felis catus)\t1\t$720.42\t$720.42\n7/10/2018 5:23p\t0\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t1\t$14.94\t$14.94\n7/13/2018 10:26a\t0\tWil Wheaton\tNSCT523\tMonster, Rust (Monstrus gygaxus)\t1\t$39.95\t$39.95\n7/13/2018 3:49p\t0\tRobert Armstrong\tFOOD216\tBFF Oh My Gravy! Chicken & Shrimp 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 9:01a\t0\tRobert Armstrong\tFOOD217\tBFF Oh My Gravy! Duck & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/17/2018 11:30a\t0\tHelen Halestorm\tLAGO342\tRabbit (Oryctolagus cuniculus)\t2\t$32.94\t$65.88\n7/18/2018 12:16p\t0\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t6\t$1.29\t157¥\n7/19/2018 10:28a\t0\tRubeus Hagrid\tFOOD170\tFood, Dog - 5kg\t5\t$44.95\t$224.75\n7/20/2018 2:13p\t0\tJon Arbuckle\tFOOD167\tFood, Premium Wet Cat - 3.5 oz\t50\t$3.95\t$197.5\n7/23/2018 1:41p\t0\tRobert Armstrong\tFOOD215\tBFF Oh My Gravy! Lamb & Tuna 2.8oz\t4\t$12.95\t$51.8\n7/23/2018 4:23p\t0\tDouglas \"Dougie\" Powers\tTOY235\tLaser Pointer\t1\t$16.12\t$16.12\n7/24/2018 12:16p\t0\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/26/2018 4:39p\t0\tDouglas \"Dougie\" Powers\tFOOD420\tFood, Shark - 10 kg\t1\t$15.70\t$15.7\n7/27/2018 12:16p\t0\t桜 高橋 (Sakura Takahashi)\tFOOD122\tFood, Senior Wet Cat - 3 oz\t3\t$1.29\t157¥\n7/30/2018 12:17p\t0\t桜 高橋 (Sakura Takahashi)\tRETURN\tFood, Senior Wet Cat - 3 oz\t1\t$1.29\t157¥\n7/31/2018 5:42p\t0\tRubeus Hagrid\tCAT060\tFood, Dragon - 50kg\t5\t$720.42\t$3602.1\n8/1/2018 2:44p\t0\tDavid Attenborough\tFOOD360\tFood, Rhinocerous - 50kg\t4\t$5.72\t$22.88\n8/2/2018 5:12p\t0\tSusan Ashworth\tCAT110\tCat, Maine Coon (Felix catus)\t1\t$1,309.68\t$1309.68\n8/2/2018 5:12p\t0\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t3\t$14.94\t$44.82\n8/6/2018 10:21a\t0\tRobert Armstrong\tFOOD212\tBFF Oh My Gravy! Beef & Chicken 2.8oz\t4\t$12.95\t$51.8\n8/7/2018 4:12p\t0\tJuan Johnson\tREPT082\tKingsnake, California (Lampropeltis getula)\t1\t$89.95\t$89.95\n8/7/2018 4:12p\t0\tJuan Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/10/2018 4:31p\t0\tRobert Armstrong\tFOOD211\tBFF Oh My Gravy! Chicken & Turkey 2.8oz\t4\t$12.95\t$51.8\n8/13/2018 2:07p\t0\tMonica Johnson\tRDNT443\tMouse, Pinky (Mus musculus)\t1\t$1.49\t$1.49\n8/13/2018 2:08p\t0\tMaría Fernández\tFOOD146\tForti Diet Prohealth Mouse/Rat 3lbs\t2\t$2.00\t$4.0\n8/15/2018 11:57a\t0\tMr. Praline\tRETURN\tParrot, Norwegian Blue (Mopsitta tanta)\t1\t$2300.00\t-$2300.0\n8/15/2018 3:48p\t0\tKyle Kennedy\tFOOD121\tFood, Adult Cat - 3.5 oz\t2\t$4.22\t$8.44\n8/16/2018 11:50a\t0\tHelen Halestorm\tRETURN\tRabbit (Oryctolagus cuniculus)\t6\t$0\t$0.0\n8/16/2018 4:00p\t0\tKyle Kennedy\tDOG010\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$2,495.99\t$2495.99\n8/16/2018 5:15p\t0\tMichael Smith\tBIRD160\tParakeet, Blue (Melopsittacus undulatus)\t1\t29.95\t$31.85\n8/17/2018 9:26a\t0\tRubeus Hagrid\tNSCT201\tFood, Spider\t5\t$.05\t$0.25\n8/20/2018 9:36a\t0\tKyle Kennedy\tRETURN\tDog, Golden Retriever (Canis lupus familiaris)\t1\t$1,247.99\t-$1247.99\n8/20/2018 1:47p\t0\tמרוסיה ניסנהולץ אבולעפיה\tGOAT224\tGoat, American Pygmy (Capra hircus)\t1\t₪499\t$160.51\n8/20/2018 3:31p\t0\tMonica Johnson\tNSCT201\tCrickets, Adult Live (Gryllus assimilis)\t30\t$.05\t$1.5\n8/20/2018 5:12p\t0\tDavid Attenborough\tNSCT084\tFood, Pangolin\t30\t$.17\t$5.10\n8/21/2018 12:13p\t0\tRobert Armstrong\tFOOD214\tBFF Oh My Gravy! Duck & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/22/2018 9:38a\t0\tDavid Attenborough\tBIRD160\tFood, Quoll\t1\t29.95\t$29.95\n8/22/2018 2:13p\t0\tJon Arbuckle\tFOOD170\tFood, Adult Dog - 5kg\t1\t$44.95\t$44.95\n8/22/2018 5:49p\t0\tמרוסיה ניסנהולץ\tSFTY052\tFire Extinguisher, kitchen-rated\t1\t$61.70\t$61.70\n8/24/2018 11:42a\t0\tRobert Armstrong\tFOOD218\tBFF Oh My Gravy! Chicken & Salmon 2.8oz\t4\t$12.95\t$51.8\n8/27/2018 3:05p\t0\tMonica Johnson\tNSCT443\tMealworms, Large (Tenebrio molitor) 100ct\t1\t$1.99\t$1.99\n8/28/2018 5:32p\t0\tSusan Ashworth\tCAT020\tCat, Scottish Fold (Felis catus)\t1\t$1,964.53\t$1964.53\n8/28/2018 5:32p\t0\tSusan Ashworth\tFOOD130\tFood, Kitten 3kg\t2\t$14.94\t$29.88\n8/29/2018 10:07a\t0\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t4\t$12.95\t$51.8\n8/31/2018 12:00a\t0\tRobert Armstrong\tFOOD219\tBFF Oh My Gravy! Chicken & Pumpkin 2.8oz\t144\t$12.95\t$1864.8\n8/31/2018 5:57p\t0\tJuan Johnson\tREPT217\tLizard, Spinytail (Uromastyx ornatus)\t1\t$99.95\t$99.95\n"
  },
  {
    "path": "tests/golden/xlsx-color-cells.tsv",
    "content": "A\tA_cellPyObj\tA_fontColor\tA_fillColor\tBC\tBC_cellPyObj\tBC_fontColor\tBC_fillColor\t\t_cellPyObj\t_fontColor\t_fillColor\tD\tD_cellPyObj\tD_fontColor\tD_fillColor\nA\t<ReadOnlyCell 'Sheet1'.A2>\t1\tFFFF0000\tB\t<ReadOnlyCell 'Sheet1'.B2>\t1\t9\tC\t<ReadOnlyCell 'Sheet1'.C2>\t1\tFF00B0F0\tD\t<ReadOnlyCell 'Sheet1'.D2>\t1\tFF7030A0\n"
  },
  {
    "path": "tests/golden/xlsx-empty-cell.tsv",
    "content": "col_a\tcol_b\tcol_c\n1\t4\t7\n2\t\t8\n3\t6\t9\n"
  },
  {
    "path": "tests/golden/xlsx-header.tsv",
    "content": "account number\tcustomer name\tsales rep\tsku\tcategory\tquantity\tunit price\text price\tdate\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t19\t88.49\t1681.31\t2015-11-17 05:58:34\n680916\tMueller and Sons\tLoring Predovic\tFI-01804\tShirt\t3\t78.07\t234.21\t2016-02-13 04:04:11\n530925\tPurdy and Sons\tTeagan O'Keefe\tEO-54210\tShirt\t19\t30.21\t573.99\t2015-08-11 12:44:38\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tNZ-99565\tShirt\t12\t90.29\t1083.48\t2016-01-23 02:15:50\n398620\tBrekke Ltd\tEsequiel Schinner\tNZ-99565\tShirt\t5\t72.64\t363.2\t2015-08-10 07:16:03\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t20\t96.62\t1932.4\t2016-03-17 10:19:05\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t10\t67.64\t676.4\t2015-11-25 22:05:36\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t11\t91.86\t1010.46\t2016-04-24 15:05:58\n398620\tBrekke Ltd\tEsequiel Schinner\tNZ-99565\tShirt\t18\t98.67\t1776.06\t2015-08-06 08:09:56\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t12\t64.48\t773.76\t2016-01-08 09:52:04\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t20\t92.87\t1857.4\t2016-05-22 06:09:58\n93583\tHegmann-Howell\tEsequiel Schinner\tHZ-54995\tBelt\t17\t40.56\t689.52\t2015-07-05 01:05:52\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t17\t42.61\t724.37\t2016-05-16 19:11:55\n453258\tRunolfsson-Bayer\tShannen Hudson\tFI-01804\tShirt\t20\t12.31\t246.2\t2015-08-24 21:32:26\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t20\t67.95\t1359\t2015-11-24 15:04:30\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t17\t23.2\t394.4\t2015-09-12 13:16:56\n453258\tRunolfsson-Bayer\tShannen Hudson\tNZ-99565\tShirt\t2\t30.23\t60.46\t2016-03-21 11:31:24\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t3\t22.64\t67.92\t2015-12-02 01:55:28\n398620\tBrekke Ltd\tEsequiel Schinner\tHZ-54995\tBelt\t1\t36.2\t36.2\t2015-12-07 18:45:54\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t9\t82.06\t738.54\t2016-02-23 17:41:41\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tDU-87462\tShirt\t5\t28.51\t142.55\t2016-03-01 19:34:33\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t15\t95.6\t1434\t2015-10-08 03:01:22\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t11\t30.8\t338.8\t2015-11-25 06:07:47\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t6\t64.98\t389.88\t2016-01-15 21:07:30\n758030\tKilback-Abernathy\tTrish Deckow\tTK-29646\tShoes\t19\t26.9\t511.1\t2015-09-28 14:33:34\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t15\t30.34\t455.1\t2016-03-29 21:19:08\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t2\t61.01\t122.02\t2016-05-19 00:05:12\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t8\t18.34\t146.72\t2015-07-24 17:48:46\n530925\tPurdy and Sons\tTeagan O'Keefe\tDU-87462\tShirt\t10\t18.4\t184\t2016-03-05 23:45:57\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGP-14407\tBelt\t15\t17.93\t268.95\t2016-03-18 07:17:35\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t15\t83.52\t1252.8\t2016-04-18 09:46:35\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t13\t80.92\t1051.96\t2015-08-05 11:37:35\n398620\tBrekke Ltd\tEsequiel Schinner\tEO-54210\tShirt\t1\t55.12\t55.12\t2016-06-14 06:59:27\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t5\t44.35\t221.75\t2016-03-22 17:17:40\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t20\t21.17\t423.4\t2016-03-28 21:14:31\n887145\tGislason LLC\tLoring Predovic\tTK-29646\tShoes\t7\t60.98\t426.86\t2016-04-05 16:48:48\n262693\tZiemann-Heidenreich\tLoring Predovic\tZY-38455\tShirt\t13\t33.08\t430.04\t2015-09-11 13:13:54\n282122\tConnelly, Abshire and Von\tBeth Skiles\tFI-01804\tShirt\t6\t31.72\t190.32\t2015-12-26 21:07:48\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t14\t71.37\t999.18\t2016-03-10 17:48:45\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t1\t31.1\t31.1\t2015-08-21 23:43:26\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t12\t84.06\t1008.72\t2015-11-24 10:21:28\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tNZ-99565\tShirt\t1\t24\t24\t2016-04-02 11:47:32\n93583\tHegmann-Howell\tEsequiel Schinner\tNZ-99565\tShirt\t13\t52.21\t678.73\t2016-05-12 13:25:51\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t14\t92.19\t1290.66\t2016-04-07 16:35:47\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t20\t18.78\t375.6\t2016-04-03 16:10:50\n759168\tSchaefer Inc\tLoring Predovic\tTK-29646\tShoes\t12\t80.03\t960.36\t2015-08-30 22:07:39\n680916\tMueller and Sons\tLoring Predovic\tFI-01804\tShirt\t19\t13.83\t262.77\t2015-06-26 23:55:04\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t3\t30.68\t92.04\t2016-04-10 06:19:52\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t9\t93.27\t839.43\t2016-03-11 15:36:42\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTK-29646\tShoes\t19\t11.68\t221.92\t2016-01-12 02:26:26\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t7\t96.38\t674.66\t2015-10-08 09:10:36\n887145\tGislason LLC\tLoring Predovic\tTL-23025\tShoes\t17\t72.36\t1230.12\t2016-02-07 19:11:15\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t1\t94.59\t94.59\t2016-05-17 04:35:50\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t14\t14.75\t206.5\t2015-09-26 09:52:13\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t1\t56.03\t56.03\t2016-01-01 16:50:06\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t16\t76.38\t1222.08\t2015-11-05 09:07:04\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t13\t95.38\t1239.94\t2015-08-16 15:49:54\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t10\t25.58\t255.8\t2016-06-01 08:03:06\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t20\t66.71\t1334.2\t2016-02-22 12:49:01\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t13\t55.47\t721.11\t2016-03-12 17:54:20\n759168\tSchaefer Inc\tLoring Predovic\tEO-54210\tShirt\t5\t93.41\t467.05\t2015-08-06 10:57:53\n398620\tBrekke Ltd\tEsequiel Schinner\tZY-38455\tShirt\t2\t24.48\t48.96\t2015-11-04 13:26:05\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t5\t63.31\t316.55\t2015-12-06 09:20:20\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t10\t97.88\t978.8\t2015-08-24 05:43:32\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t5\t37.18\t185.9\t2015-10-10 04:24:46\n398620\tBrekke Ltd\tEsequiel Schinner\tFI-01804\tShirt\t18\t92.16\t1658.88\t2015-12-10 12:13:45\n530925\tPurdy and Sons\tTeagan O'Keefe\tTK-29646\tShoes\t4\t19.76\t79.04\t2015-08-04 02:54:20\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGJ-90272\tShoes\t13\t43.19\t561.47\t2015-09-04 11:58:47\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTK-29646\tShoes\t11\t29.52\t324.72\t2016-05-28 10:34:34\n262693\tZiemann-Heidenreich\tLoring Predovic\tNZ-99565\tShirt\t19\t41.14\t781.66\t2016-03-26 06:21:18\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t1\t90.45\t90.45\t2015-11-30 20:10:20\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t1\t47.29\t47.29\t2016-02-17 08:45:05\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tDU-87462\tShirt\t15\t48.65\t729.75\t2016-06-11 11:59:35\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tZY-38455\tShirt\t11\t66.93\t736.23\t2015-11-29 00:44:46\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t11\t31.88\t350.68\t2016-01-06 05:41:19\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t5\t82.58\t412.9\t2015-11-15 22:42:05\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t20\t14.6\t292\t2015-08-11 04:48:36\n759168\tSchaefer Inc\tLoring Predovic\tGJ-90272\tShoes\t3\t95.63\t286.89\t2016-03-15 20:36:17\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t17\t47.18\t802.06\t2015-11-10 19:31:36\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t5\t90.92\t454.6\t2016-01-31 14:42:16\n262693\tZiemann-Heidenreich\tLoring Predovic\tTK-29646\tShoes\t1\t40.05\t40.05\t2015-07-30 02:37:28\n453258\tRunolfsson-Bayer\tShannen Hudson\tHZ-54995\tBelt\t6\t17.37\t104.22\t2016-01-13 18:19:05\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t12\t86.12\t1033.44\t2015-11-02 22:56:31\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t10\t28.35\t283.5\t2015-07-21 07:17:41\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t15\t94.43\t1416.45\t2015-12-22 13:40:43\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tZY-38455\tShirt\t3\t26.6\t79.8\t2015-08-16 16:49:11\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t8\t38.88\t311.04\t2015-10-04 20:49:53\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t3\t97.19\t291.57\t2016-01-18 19:48:54\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t1\t26.14\t26.14\t2015-06-30 06:53:06\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t5\t43.66\t218.3\t2016-05-13 00:42:58\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t11\t43.62\t479.82\t2015-08-25 02:25:02\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t8\t56.72\t453.76\t2016-03-20 02:03:56\n758030\tKilback-Abernathy\tTrish Deckow\tFI-01804\tShirt\t20\t54.3\t1086\t2016-02-29 15:22:44\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t10\t72.42\t724.2\t2016-05-19 14:06:38\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t9\t25.95\t233.55\t2015-07-25 10:53:10\n262693\tZiemann-Heidenreich\tLoring Predovic\tTK-29646\tShoes\t8\t51.77\t414.16\t2016-05-29 07:25:04\n282122\tConnelly, Abshire and Von\tBeth Skiles\tNZ-99565\tShirt\t8\t88.29\t706.32\t2015-11-25 04:21:37\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGJ-90272\tShoes\t11\t92.74\t1020.14\t2016-02-06 02:38:55\n758030\tKilback-Abernathy\tTrish Deckow\tGP-14407\tBelt\t12\t20.07\t240.84\t2015-09-19 03:44:57\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t18\t75.6\t1360.8\t2015-08-06 20:29:46\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t10\t75.66\t756.6\t2016-02-06 22:24:02\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t5\t55.98\t279.9\t2016-05-09 11:44:59\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t7\t54.87\t384.09\t2016-04-17 08:15:24\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTK-29646\tShoes\t20\t84.49\t1689.8\t2015-12-17 10:06:40\n93583\tHegmann-Howell\tEsequiel Schinner\tDU-87462\tShirt\t19\t81.98\t1557.62\t2015-07-18 14:12:46\n218667\tJaskolski-O'Hara\tTrish Deckow\tNZ-99565\tShirt\t16\t33.38\t534.08\t2016-02-07 22:29:37\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t13\t14.18\t184.34\t2015-11-18 03:13:45\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t13\t68.09\t885.17\t2016-05-20 21:10:53\n218667\tJaskolski-O'Hara\tTrish Deckow\tHZ-54995\tBelt\t5\t32.61\t163.05\t2016-04-16 11:51:15\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t18\t33.15\t596.7\t2015-06-20 14:16:53\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t14\t39.17\t548.38\t2016-01-09 05:48:45\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t19\t79.02\t1501.38\t2015-08-05 21:40:50\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t13\t35.12\t456.56\t2016-01-04 01:23:10\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t11\t35.75\t393.25\t2016-02-18 21:04:47\n62592\tO'Keefe-Koch\tShannen Hudson\tHZ-54995\tBelt\t12\t40.52\t486.24\t2015-08-04 05:50:33\n758030\tKilback-Abernathy\tTrish Deckow\tEO-54210\tShirt\t11\t47.15\t518.65\t2016-01-15 06:09:23\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t18\t28.68\t516.24\t2016-05-02 00:07:28\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t14\t46.86\t656.04\t2015-07-21 12:27:25\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t12\t62.1\t745.2\t2015-10-11 10:56:53\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t4\t90.57\t362.28\t2016-06-11 15:25:49\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t2\t82.68\t165.36\t2016-04-07 01:40:01\n262693\tZiemann-Heidenreich\tLoring Predovic\tGP-14407\tBelt\t3\t59.09\t177.27\t2015-09-16 12:44:04\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t9\t96.1\t864.9\t2015-07-07 23:24:18\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t4\t27.18\t108.72\t2015-12-14 00:47:32\n282122\tConnelly, Abshire and Von\tBeth Skiles\tFI-01804\tShirt\t13\t22.6\t293.8\t2016-03-24 06:02:09\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t13\t24.18\t314.34\t2015-07-20 16:33:18\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t4\t49.78\t199.12\t2015-12-11 10:55:57\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t12\t97.14\t1165.68\t2016-03-09 21:19:48\n758030\tKilback-Abernathy\tTrish Deckow\tEO-54210\tShirt\t3\t59.99\t179.97\t2015-08-19 16:21:11\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGP-14407\tBelt\t5\t63.28\t316.4\t2015-09-08 00:01:16\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t9\t42.44\t381.96\t2015-09-02 01:05:17\n759168\tSchaefer Inc\tLoring Predovic\tHZ-54995\tBelt\t13\t65.36\t849.68\t2015-08-23 13:34:26\n262693\tZiemann-Heidenreich\tLoring Predovic\tNZ-99565\tShirt\t14\t59.01\t826.14\t2016-04-26 10:14:41\n530925\tPurdy and Sons\tTeagan O'Keefe\tTL-23025\tShoes\t12\t64.17\t770.04\t2015-10-14 21:03:49\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t12\t13.99\t167.88\t2015-09-03 21:12:58\n759168\tSchaefer Inc\tLoring Predovic\tGJ-90272\tShoes\t5\t81.98\t409.9\t2015-10-27 14:56:08\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t14\t99.38\t1391.32\t2016-04-08 20:59:25\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t13\t74.1\t963.3\t2015-10-05 13:58:23\n887145\tGislason LLC\tLoring Predovic\tTK-29646\tShoes\t11\t77.23\t849.53\t2015-08-11 02:40:07\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t2\t31.09\t62.18\t2015-10-09 16:35:42\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t6\t21.32\t127.92\t2016-03-17 09:56:53\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t19\t85.57\t1625.83\t2016-02-03 11:41:59\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t9\t26.14\t235.26\t2016-04-17 11:45:31\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t7\t24.25\t169.75\t2015-09-01 23:33:00\n530925\tPurdy and Sons\tTeagan O'Keefe\tDU-87462\tShirt\t5\t98.34\t491.7\t2015-10-14 17:20:02\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t2\t74.6\t149.2\t2016-04-25 10:02:27\n453258\tRunolfsson-Bayer\tShannen Hudson\tTL-23025\tShoes\t13\t82.54\t1073.02\t2016-04-27 12:23:15\n93583\tHegmann-Howell\tEsequiel Schinner\tDU-87462\tShirt\t3\t99.13\t297.39\t2015-10-08 14:55:04\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t7\t21.3\t149.1\t2015-10-17 19:48:03\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t18\t17.56\t316.08\t2016-04-05 17:23:36\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t17\t66.97\t1138.49\t2016-06-06 02:17:34\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t20\t28.5\t570\t2016-03-04 03:33:39\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t10\t51.52\t515.2\t2016-04-17 11:16:50\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t18\t26.17\t471.06\t2015-10-23 18:38:12\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t14\t91.12\t1275.68\t2015-07-30 20:05:19\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t2\t69.38\t138.76\t2015-10-30 21:56:42\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t19\t92.85\t1764.15\t2015-10-23 07:32:22\n280749\tDouglas PLC\tTeagan O'Keefe\tEO-54210\tShirt\t4\t11.52\t46.08\t2016-02-22 06:10:14\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGP-14407\tBelt\t6\t78.39\t470.34\t2016-01-22 14:26:31\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t6\t84.56\t507.36\t2016-02-09 14:03:33\n62592\tO'Keefe-Koch\tShannen Hudson\tDU-87462\tShirt\t11\t85.65\t942.15\t2016-03-31 01:46:55\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t16\t15.33\t245.28\t2016-03-07 13:30:30\n136521\tLabadie and Sons\tEsequiel Schinner\tEO-54210\tShirt\t12\t10.95\t131.4\t2015-11-11 17:18:38\n453258\tRunolfsson-Bayer\tShannen Hudson\tGJ-90272\tShoes\t17\t40.9\t695.3\t2016-04-05 05:52:35\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t10\t10.72\t107.2\t2016-06-11 05:43:00\n93583\tHegmann-Howell\tEsequiel Schinner\tHZ-54995\tBelt\t8\t82.47\t659.76\t2016-01-30 17:37:04\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t3\t34.86\t104.58\t2015-07-18 23:46:56\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t2\t19.82\t39.64\t2015-11-18 03:36:55\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t20\t26.16\t523.2\t2016-02-25 23:53:30\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t9\t53.67\t483.03\t2015-06-23 14:42:02\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t3\t33.19\t99.57\t2015-09-06 02:17:30\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t9\t37.98\t341.82\t2015-11-29 06:52:37\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t20\t71.54\t1430.8\t2015-12-10 09:24:45\n218667\tJaskolski-O'Hara\tTrish Deckow\tEO-54210\tShirt\t13\t25.81\t335.53\t2016-05-26 08:39:22\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t5\t48.02\t240.1\t2015-08-10 09:38:46\n759168\tSchaefer Inc\tLoring Predovic\tZY-38455\tShirt\t9\t27.44\t246.96\t2015-10-16 18:59:05\n280749\tDouglas PLC\tTeagan O'Keefe\tDU-87462\tShirt\t12\t44.67\t536.04\t2015-06-28 09:10:49\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t15\t41.55\t623.25\t2015-06-24 11:00:06\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t1\t47.56\t47.56\t2015-10-23 15:30:45\n218667\tJaskolski-O'Hara\tTrish Deckow\tTK-29646\tShoes\t11\t81.01\t891.11\t2015-09-30 03:47:05\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t16\t12.24\t195.84\t2015-07-12 15:31:43\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t6\t90.41\t542.46\t2015-07-09 15:43:18\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t12\t81.93\t983.16\t2015-12-05 14:13:38\n453258\tRunolfsson-Bayer\tShannen Hudson\tGP-14407\tBelt\t18\t91.33\t1643.94\t2016-01-16 06:34:43\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t7\t12.98\t90.86\t2016-02-15 14:42:25\n530925\tPurdy and Sons\tTeagan O'Keefe\tDU-87462\tShirt\t4\t46.72\t186.88\t2015-10-15 17:00:46\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t9\t31.77\t285.93\t2016-06-07 21:16:00\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t14\t24.71\t345.94\t2015-09-10 16:35:44\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTK-29646\tShoes\t11\t97.61\t1073.71\t2016-03-22 07:05:08\n280749\tDouglas PLC\tTeagan O'Keefe\tZY-38455\tShirt\t20\t93.38\t1867.6\t2015-06-28 02:25:36\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t3\t53.56\t160.68\t2015-08-06 09:53:32\n680916\tMueller and Sons\tLoring Predovic\tTL-23025\tShoes\t4\t27.01\t108.04\t2015-06-24 01:32:43\n398620\tBrekke Ltd\tEsequiel Schinner\tTK-29646\tShoes\t11\t78.27\t860.97\t2015-07-27 07:51:57\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t13\t24.27\t315.51\t2015-11-03 06:13:59\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t5\t27.59\t137.95\t2015-07-25 23:56:50\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t8\t43.93\t351.44\t2016-06-13 01:12:12\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t20\t59.39\t1187.8\t2015-10-28 18:54:37\n453258\tRunolfsson-Bayer\tShannen Hudson\tHZ-54995\tBelt\t12\t93.13\t1117.56\t2015-07-29 10:17:23\n398620\tBrekke Ltd\tEsequiel Schinner\tEO-54210\tShirt\t9\t62.67\t564.03\t2015-10-26 13:42:21\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t12\t71.33\t855.96\t2015-10-04 19:04:54\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t17\t79.59\t1353.03\t2016-05-27 07:32:41\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t8\t41\t328\t2015-06-18 15:24:55\n398620\tBrekke Ltd\tEsequiel Schinner\tNZ-99565\tShirt\t16\t18.74\t299.84\t2016-05-23 07:20:47\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t18\t34.21\t615.78\t2015-07-01 03:43:02\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t17\t93.56\t1590.52\t2016-01-06 00:58:56\n251881\tZulauf-Grady\tTeagan O'Keefe\tGP-14407\tBelt\t17\t34.89\t593.13\t2016-01-06 11:39:29\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t19\t97.63\t1854.97\t2016-01-02 20:36:26\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t11\t82.95\t912.45\t2016-02-29 23:05:14\n752312\tWatsica-Pfannerstill\tLoring Predovic\tEO-54210\tShirt\t17\t76.26\t1296.42\t2015-08-18 07:18:31\n453258\tRunolfsson-Bayer\tShannen Hudson\tDU-87462\tShirt\t8\t74.68\t597.44\t2016-05-30 07:56:58\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t11\t22.99\t252.89\t2015-07-05 15:52:42\n530925\tPurdy and Sons\tTeagan O'Keefe\tTL-23025\tShoes\t9\t77.96\t701.64\t2015-10-06 12:40:39\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t15\t56.85\t852.75\t2016-05-02 04:40:57\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t19\t37.74\t717.06\t2016-05-26 18:14:51\n398620\tBrekke Ltd\tEsequiel Schinner\tZY-38455\tShirt\t9\t74.43\t669.87\t2016-02-29 07:47:57\n530925\tPurdy and Sons\tTeagan O'Keefe\tDU-87462\tShirt\t16\t69.81\t1116.96\t2015-09-06 16:10:29\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t3\t66.25\t198.75\t2015-12-19 04:01:01\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tZY-38455\tShirt\t2\t30.48\t60.96\t2015-10-04 22:32:39\n136521\tLabadie and Sons\tEsequiel Schinner\tGP-14407\tBelt\t13\t13.03\t169.39\t2016-05-05 13:42:14\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t8\t68.48\t547.84\t2016-03-06 09:50:26\n93583\tHegmann-Howell\tEsequiel Schinner\tFI-01804\tShirt\t3\t83.12\t249.36\t2015-08-21 22:56:27\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tFI-01804\tShirt\t7\t95.82\t670.74\t2016-01-04 11:51:16\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t14\t22.54\t315.56\t2016-01-14 22:14:01\n398620\tBrekke Ltd\tEsequiel Schinner\tFI-01804\tShirt\t1\t76.83\t76.83\t2015-12-13 17:14:46\n136521\tLabadie and Sons\tEsequiel Schinner\tNZ-99565\tShirt\t3\t49.28\t147.84\t2016-01-13 13:43:25\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t12\t99.82\t1197.84\t2016-01-04 14:58:53\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t5\t84.53\t422.65\t2016-03-19 06:16:28\n752312\tWatsica-Pfannerstill\tLoring Predovic\tFI-01804\tShirt\t11\t41.66\t458.26\t2015-08-18 12:53:26\n262693\tZiemann-Heidenreich\tLoring Predovic\tGJ-90272\tShoes\t14\t52.85\t739.9\t2015-09-16 03:49:33\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t20\t34.98\t699.6\t2016-06-12 22:05:46\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t12\t78.07\t936.84\t2015-10-21 06:42:32\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tZY-38455\tShirt\t12\t44.15\t529.8\t2016-01-06 17:31:51\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tNZ-99565\tShirt\t11\t15.62\t171.82\t2016-01-19 08:58:11\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t16\t61.25\t980\t2016-03-31 23:39:04\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t6\t47.99\t287.94\t2016-05-04 09:00:27\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t12\t40.56\t486.72\t2015-12-02 12:36:52\n262693\tZiemann-Heidenreich\tLoring Predovic\tTK-29646\tShoes\t8\t41.26\t330.08\t2015-12-25 14:57:29\n398620\tBrekke Ltd\tEsequiel Schinner\tEO-54210\tShirt\t1\t44.55\t44.55\t2016-06-07 17:20:17\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t12\t24.31\t291.72\t2016-02-03 09:28:53\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t3\t20.12\t60.36\t2015-09-18 01:08:48\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t3\t99.29\t297.87\t2016-04-12 05:24:51\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t15\t53.95\t809.25\t2016-04-09 08:00:57\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t3\t33.63\t100.89\t2016-04-04 03:15:32\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t8\t37.17\t297.36\t2015-10-02 08:23:20\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t13\t80.87\t1051.31\t2015-09-26 00:02:26\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t3\t22.91\t68.73\t2015-12-30 05:17:06\n280749\tDouglas PLC\tTeagan O'Keefe\tDU-87462\tShirt\t6\t82.99\t497.94\t2016-03-29 20:28:28\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t14\t46.14\t645.96\t2015-11-27 08:00:03\n251881\tZulauf-Grady\tTeagan O'Keefe\tGP-14407\tBelt\t15\t71.5\t1072.5\t2016-04-18 05:58:22\n680916\tMueller and Sons\tLoring Predovic\tZY-38455\tShirt\t8\t70.78\t566.24\t2016-05-24 10:11:34\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t1\t62.85\t62.85\t2015-09-07 08:46:34\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tZY-38455\tShirt\t16\t53.29\t852.64\t2015-11-10 18:50:41\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTK-29646\tShoes\t1\t26.01\t26.01\t2015-12-15 18:19:50\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t2\t57.18\t114.36\t2015-09-17 16:16:15\n280749\tDouglas PLC\tTeagan O'Keefe\tZY-38455\tShirt\t2\t86.1\t172.2\t2015-06-21 17:34:14\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t10\t63.52\t635.2\t2015-12-21 08:10:37\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t12\t66.68\t800.16\t2015-10-24 18:26:07\n262693\tZiemann-Heidenreich\tLoring Predovic\tZY-38455\tShirt\t12\t90.89\t1090.68\t2015-10-21 09:27:48\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t11\t68.6\t754.6\t2016-03-31 11:43:58\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t1\t61.82\t61.82\t2016-01-16 00:02:26\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t13\t94.83\t1232.79\t2015-11-02 03:41:40\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTL-23025\tShoes\t3\t62.35\t187.05\t2015-08-30 07:21:47\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t1\t86.28\t86.28\t2015-09-14 17:23:29\n752312\tWatsica-Pfannerstill\tLoring Predovic\tDU-87462\tShirt\t2\t90.95\t181.9\t2015-09-21 03:38:21\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t15\t84.97\t1274.55\t2015-09-29 18:59:06\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t8\t77.21\t617.68\t2016-04-23 07:43:08\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t7\t85.95\t601.65\t2016-04-13 21:53:45\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t17\t27.56\t468.52\t2016-01-13 19:02:17\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t10\t88.51\t885.1\t2015-08-07 01:57:29\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t14\t65.45\t916.3\t2016-02-09 06:25:34\n280749\tDouglas PLC\tTeagan O'Keefe\tZY-38455\tShirt\t8\t60.51\t484.08\t2016-02-06 14:27:34\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t4\t48.14\t192.56\t2015-11-22 00:05:03\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tDU-87462\tShirt\t9\t85.35\t768.15\t2015-09-07 14:57:00\n680916\tMueller and Sons\tLoring Predovic\tZY-38455\tShirt\t8\t64.67\t517.36\t2016-05-05 05:49:24\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t3\t47.65\t142.95\t2016-05-11 02:04:13\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t20\t94.15\t1883\t2016-04-05 22:55:49\n282122\tConnelly, Abshire and Von\tBeth Skiles\tDU-87462\tShirt\t1\t44.26\t44.26\t2016-02-05 22:50:44\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t6\t65.12\t390.72\t2015-08-23 18:23:53\n453258\tRunolfsson-Bayer\tShannen Hudson\tZY-38455\tShirt\t14\t66.13\t925.82\t2015-11-17 05:25:37\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t18\t71.94\t1294.92\t2015-09-11 23:20:58\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t2\t41.8\t83.6\t2016-02-19 11:00:48\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t8\t51.47\t411.76\t2015-09-03 14:59:41\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t2\t77.26\t154.52\t2015-09-05 23:07:48\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t9\t96.36\t867.24\t2015-09-30 23:17:15\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t14\t95.18\t1332.52\t2015-12-20 08:54:39\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t10\t81.47\t814.7\t2016-02-22 00:46:10\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t18\t13.65\t245.7\t2015-11-17 19:21:52\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t4\t46.88\t187.52\t2015-11-26 19:21:12\n759168\tSchaefer Inc\tLoring Predovic\tZY-38455\tShirt\t20\t98.58\t1971.6\t2015-12-10 22:45:46\n251881\tZulauf-Grady\tTeagan O'Keefe\tGP-14407\tBelt\t19\t27.22\t517.18\t2015-08-01 18:52:14\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t3\t96.14\t288.42\t2016-02-08 02:38:57\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t20\t37.25\t745\t2016-05-24 02:57:59\n136521\tLabadie and Sons\tEsequiel Schinner\tGP-14407\tBelt\t4\t73.24\t292.96\t2016-04-20 09:42:33\n759168\tSchaefer Inc\tLoring Predovic\tTK-29646\tShoes\t19\t14.87\t282.53\t2016-04-06 15:16:21\n136521\tLabadie and Sons\tEsequiel Schinner\tNZ-99565\tShirt\t1\t38.43\t38.43\t2016-02-12 07:44:35\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t16\t36.58\t585.28\t2016-05-23 18:29:31\n262693\tZiemann-Heidenreich\tLoring Predovic\tTK-29646\tShoes\t7\t46.84\t327.88\t2015-06-16 11:11:36\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t4\t82.19\t328.76\t2015-08-25 22:44:23\n530925\tPurdy and Sons\tTeagan O'Keefe\tTK-29646\tShoes\t9\t57.76\t519.84\t2015-08-13 03:47:53\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t3\t80.6\t241.8\t2015-07-14 18:22:24\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t2\t83.63\t167.26\t2016-06-02 04:32:07\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t17\t45.85\t779.45\t2015-09-22 15:19:59\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t2\t74.98\t149.96\t2015-08-28 00:31:32\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tNZ-99565\tShirt\t12\t36.05\t432.6\t2015-12-25 21:33:39\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t15\t78.11\t1171.65\t2015-10-01 05:43:46\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t19\t13.68\t259.92\t2015-08-02 13:16:07\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t10\t31.77\t317.7\t2015-10-24 09:58:26\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t18\t56.29\t1013.22\t2015-10-31 10:20:24\n680916\tMueller and Sons\tLoring Predovic\tHZ-54995\tBelt\t4\t18.84\t75.36\t2015-11-27 01:36:45\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tZY-38455\tShirt\t6\t18.45\t110.7\t2016-01-04 16:05:58\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTK-29646\tShoes\t8\t67.4\t539.2\t2015-09-29 11:58:36\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGP-14407\tBelt\t4\t29.35\t117.4\t2015-11-17 23:43:19\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t2\t28\t56\t2016-03-31 09:12:37\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t8\t82.41\t659.28\t2015-10-08 10:12:35\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t18\t21.15\t380.7\t2016-05-25 20:49:54\n887145\tGislason LLC\tLoring Predovic\tDU-87462\tShirt\t2\t89.48\t178.96\t2015-12-09 16:23:45\n887145\tGislason LLC\tLoring Predovic\tDU-87462\tShirt\t18\t90.53\t1629.54\t2015-11-14 13:02:53\n680916\tMueller and Sons\tLoring Predovic\tTL-23025\tShoes\t2\t11.94\t23.88\t2015-07-30 05:48:08\n282122\tConnelly, Abshire and Von\tBeth Skiles\tNZ-99565\tShirt\t19\t58.3\t1107.7\t2015-09-26 04:18:03\n759168\tSchaefer Inc\tLoring Predovic\tEO-54210\tShirt\t6\t16.83\t100.98\t2016-06-03 16:49:41\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t10\t20.49\t204.9\t2015-11-25 19:08:20\n398620\tBrekke Ltd\tEsequiel Schinner\tFI-01804\tShirt\t11\t89.38\t983.18\t2015-10-22 10:59:29\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t13\t38.91\t505.83\t2016-01-21 21:50:18\n282122\tConnelly, Abshire and Von\tBeth Skiles\tZY-38455\tShirt\t13\t82.81\t1076.53\t2015-11-28 17:57:20\n680916\tMueller and Sons\tLoring Predovic\tFI-01804\tShirt\t1\t35.11\t35.11\t2015-06-30 14:05:07\n758030\tKilback-Abernathy\tTrish Deckow\tNZ-99565\tShirt\t6\t17.12\t102.72\t2016-01-08 09:48:38\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t17\t45.03\t765.51\t2016-03-27 21:47:28\n453258\tRunolfsson-Bayer\tShannen Hudson\tZY-38455\tShirt\t14\t18.11\t253.54\t2016-03-12 04:35:00\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tDU-87462\tShirt\t7\t52.82\t369.74\t2016-03-28 23:28:54\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t15\t88.94\t1334.1\t2015-08-31 05:30:36\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t1\t31.04\t31.04\t2016-05-28 04:52:42\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGP-14407\tBelt\t6\t44.53\t267.18\t2015-10-01 23:14:19\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t12\t90.81\t1089.72\t2015-09-04 13:50:47\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t19\t44.26\t840.94\t2016-03-27 06:13:41\n93583\tHegmann-Howell\tEsequiel Schinner\tNZ-99565\tShirt\t8\t98.1\t784.8\t2015-11-12 17:42:00\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTL-23025\tShoes\t13\t29.93\t389.09\t2015-12-20 13:51:00\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t1\t84.69\t84.69\t2016-02-21 09:19:38\n398620\tBrekke Ltd\tEsequiel Schinner\tZY-38455\tShirt\t17\t70.29\t1194.93\t2015-10-26 10:47:56\n251881\tZulauf-Grady\tTeagan O'Keefe\tEO-54210\tShirt\t1\t67.53\t67.53\t2016-01-04 23:30:33\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t12\t80.23\t962.76\t2015-08-02 19:26:21\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tFI-01804\tShirt\t7\t19.6\t137.2\t2015-09-14 05:00:48\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTL-23025\tShoes\t1\t20.22\t20.22\t2015-08-30 05:06:42\n251881\tZulauf-Grady\tTeagan O'Keefe\tGP-14407\tBelt\t5\t47.05\t235.25\t2016-04-25 00:59:19\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t11\t28.75\t316.25\t2016-01-31 07:06:53\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t9\t65.76\t591.84\t2016-03-02 19:10:29\n530925\tPurdy and Sons\tTeagan O'Keefe\tGP-14407\tBelt\t18\t92.56\t1666.08\t2016-02-14 21:57:48\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t2\t43.6\t87.2\t2016-03-29 02:37:00\n758030\tKilback-Abernathy\tTrish Deckow\tGP-14407\tBelt\t4\t60.29\t241.16\t2015-07-31 19:14:37\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t1\t14.56\t14.56\t2015-07-23 15:43:16\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tNZ-99565\tShirt\t19\t70.12\t1332.28\t2016-04-15 11:38:26\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t11\t98.22\t1080.42\t2015-08-22 17:45:47\n759168\tSchaefer Inc\tLoring Predovic\tDU-87462\tShirt\t18\t85.23\t1534.14\t2016-03-31 22:27:46\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t17\t59.25\t1007.25\t2016-03-08 14:02:03\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t6\t73.79\t442.74\t2016-06-04 20:01:57\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t13\t88.99\t1156.87\t2016-03-06 00:27:36\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTL-23025\tShoes\t6\t29.97\t179.82\t2016-04-30 07:40:44\n759168\tSchaefer Inc\tLoring Predovic\tHZ-54995\tBelt\t2\t82.53\t165.06\t2016-03-14 22:55:55\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t2\t57.13\t114.26\t2015-08-14 16:06:02\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t6\t94.54\t567.24\t2015-07-23 21:55:07\n530925\tPurdy and Sons\tTeagan O'Keefe\tDU-87462\tShirt\t5\t83.27\t416.35\t2015-11-21 21:30:27\n282122\tConnelly, Abshire and Von\tBeth Skiles\tZY-38455\tShirt\t1\t92.16\t92.16\t2016-04-24 22:08:30\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t13\t79.96\t1039.48\t2016-05-08 05:42:02\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t18\t72.81\t1310.58\t2015-10-23 01:51:04\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t4\t57.92\t231.68\t2016-04-25 06:03:36\n680916\tMueller and Sons\tLoring Predovic\tNZ-99565\tShirt\t7\t80.35\t562.45\t2015-10-15 06:41:29\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tHZ-54995\tBelt\t18\t18.03\t324.54\t2016-01-21 17:42:01\n680916\tMueller and Sons\tLoring Predovic\tTL-23025\tShoes\t2\t28.03\t56.06\t2016-02-08 05:10:32\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t20\t66.16\t1323.2\t2015-06-17 15:25:53\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t9\t94.55\t850.95\t2015-07-18 17:26:55\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t13\t65.26\t848.38\t2016-03-19 00:27:51\n759168\tSchaefer Inc\tLoring Predovic\tHZ-54995\tBelt\t15\t10.77\t161.55\t2016-01-30 19:33:41\n759168\tSchaefer Inc\tLoring Predovic\tNZ-99565\tShirt\t14\t97.43\t1364.02\t2015-07-12 20:41:56\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tDU-87462\tShirt\t19\t40.42\t767.98\t2016-02-17 15:08:32\n680916\tMueller and Sons\tLoring Predovic\tTL-23025\tShoes\t12\t68.67\t824.04\t2016-02-21 05:23:19\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t13\t23.75\t308.75\t2015-12-26 12:48:34\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t17\t87.78\t1492.26\t2016-02-12 05:16:01\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t2\t64.36\t128.72\t2015-09-04 18:23:16\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tZY-38455\tShirt\t19\t70.06\t1331.14\t2016-03-15 05:10:02\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t20\t14.29\t285.8\t2016-05-18 22:27:01\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tDU-87462\tShirt\t5\t67.69\t338.45\t2016-04-26 19:45:50\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t4\t34.81\t139.24\t2015-12-19 20:07:56\n530925\tPurdy and Sons\tTeagan O'Keefe\tNZ-99565\tShirt\t5\t61.25\t306.25\t2016-03-12 01:06:18\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t9\t71.3\t641.7\t2015-08-30 19:35:12\n758030\tKilback-Abernathy\tTrish Deckow\tFI-01804\tShirt\t15\t82.49\t1237.35\t2015-07-16 00:45:45\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTK-29646\tShoes\t2\t96.77\t193.54\t2015-07-20 06:59:26\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t2\t10.27\t20.54\t2015-11-10 21:37:02\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t20\t23.05\t461\t2015-09-12 15:44:45\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t7\t97.32\t681.24\t2015-09-26 21:42:45\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t3\t77.86\t233.58\t2016-02-12 08:04:05\n680916\tMueller and Sons\tLoring Predovic\tNZ-99565\tShirt\t12\t87.59\t1051.08\t2016-05-12 16:35:06\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t1\t92.37\t92.37\t2016-05-23 02:10:53\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t4\t61.45\t245.8\t2016-06-11 18:41:13\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t15\t73.36\t1100.4\t2016-01-01 08:18:23\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t1\t46.44\t46.44\t2015-12-29 08:29:36\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGP-14407\tBelt\t9\t44.51\t400.59\t2015-06-25 06:08:36\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t2\t79.42\t158.84\t2016-03-07 21:51:22\n398620\tBrekke Ltd\tEsequiel Schinner\tGP-14407\tBelt\t1\t14.94\t14.94\t2015-08-29 17:55:05\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t17\t37.91\t644.47\t2016-02-10 03:57:10\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t3\t47.12\t141.36\t2016-02-11 09:46:42\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t9\t99.54\t895.86\t2016-05-09 12:07:19\n262693\tZiemann-Heidenreich\tLoring Predovic\tZY-38455\tShirt\t8\t90.52\t724.16\t2016-04-20 15:50:33\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t5\t73.73\t368.65\t2015-11-23 15:30:25\n530925\tPurdy and Sons\tTeagan O'Keefe\tGP-14407\tBelt\t4\t40.72\t162.88\t2015-07-05 00:53:06\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t2\t21.11\t42.22\t2016-05-10 19:38:40\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t16\t69.26\t1108.16\t2015-07-23 16:02:25\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t15\t59.09\t886.35\t2015-06-28 23:28:07\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t1\t89.12\t89.12\t2015-09-29 04:15:42\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tHZ-54995\tBelt\t1\t40.82\t40.82\t2015-06-22 12:30:39\n93583\tHegmann-Howell\tEsequiel Schinner\tGJ-90272\tShoes\t20\t38.15\t763\t2016-03-22 21:05:35\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t11\t74.64\t821.04\t2016-05-01 00:32:51\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t19\t22.56\t428.64\t2016-06-02 00:45:26\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t3\t32.66\t97.98\t2015-08-18 22:21:01\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t14\t57.02\t798.28\t2016-04-01 02:58:27\n398620\tBrekke Ltd\tEsequiel Schinner\tNZ-99565\tShirt\t16\t24.94\t399.04\t2015-07-01 22:16:30\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t1\t82.7\t82.7\t2015-06-28 20:36:59\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t2\t31.71\t63.42\t2015-09-28 21:40:45\n680916\tMueller and Sons\tLoring Predovic\tFI-01804\tShirt\t20\t63.57\t1271.4\t2016-01-28 07:27:11\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t16\t52.65\t842.4\t2015-10-12 07:21:44\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t12\t95.45\t1145.4\t2016-05-27 17:04:55\n680916\tMueller and Sons\tLoring Predovic\tFI-01804\tShirt\t13\t56.68\t736.84\t2015-11-03 17:04:20\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t20\t23.96\t479.2\t2015-06-21 22:34:06\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t19\t20.1\t381.9\t2015-09-17 00:49:53\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t5\t41.68\t208.4\t2016-04-20 05:01:20\n758030\tKilback-Abernathy\tTrish Deckow\tNZ-99565\tShirt\t15\t98.34\t1475.1\t2015-07-11 22:55:59\n398620\tBrekke Ltd\tEsequiel Schinner\tGP-14407\tBelt\t11\t32.35\t355.85\t2016-03-24 18:34:44\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t11\t38.21\t420.31\t2016-03-20 19:36:04\n136521\tLabadie and Sons\tEsequiel Schinner\tEO-54210\tShirt\t7\t53.32\t373.24\t2015-11-15 17:08:39\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t17\t87.04\t1479.68\t2015-06-27 03:31:16\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t15\t72.85\t1092.75\t2015-08-21 14:17:24\n262693\tZiemann-Heidenreich\tLoring Predovic\tGJ-90272\tShoes\t12\t71.21\t854.52\t2016-03-14 00:09:04\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t2\t31.38\t62.76\t2016-04-28 13:45:23\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t5\t35.36\t176.8\t2016-01-29 07:07:52\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t2\t87.9\t175.8\t2015-10-29 05:15:39\n62592\tO'Keefe-Koch\tShannen Hudson\tNZ-99565\tShirt\t1\t24.02\t24.02\t2015-06-17 05:40:06\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t4\t96.13\t384.52\t2016-02-07 06:20:32\n680916\tMueller and Sons\tLoring Predovic\tHZ-54995\tBelt\t4\t19.95\t79.8\t2016-02-28 15:54:04\n758030\tKilback-Abernathy\tTrish Deckow\tEO-54210\tShirt\t13\t23.94\t311.22\t2016-05-20 13:58:02\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t4\t35.93\t143.72\t2015-08-22 16:19:56\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t17\t57.4\t975.8\t2016-02-09 02:24:02\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t8\t45.89\t367.12\t2015-11-06 00:53:43\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t9\t71.73\t645.57\t2015-07-12 15:48:36\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t20\t42.25\t845\t2015-07-31 10:46:21\n218667\tJaskolski-O'Hara\tTrish Deckow\tEO-54210\tShirt\t5\t97.15\t485.75\t2015-11-30 07:56:00\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t18\t66.19\t1191.42\t2015-07-21 19:59:59\n262693\tZiemann-Heidenreich\tLoring Predovic\tGJ-90272\tShoes\t10\t35.17\t351.7\t2016-02-23 08:10:10\n398620\tBrekke Ltd\tEsequiel Schinner\tFI-01804\tShirt\t17\t37.57\t638.69\t2016-02-22 12:42:42\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t14\t38.43\t538.02\t2015-07-29 01:36:15\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t11\t65.58\t721.38\t2015-07-01 19:35:33\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t10\t88.66\t886.6\t2016-03-21 19:08:54\n453258\tRunolfsson-Bayer\tShannen Hudson\tTL-23025\tShoes\t19\t57.29\t1088.51\t2016-05-28 06:46:55\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t4\t15.5\t62\t2016-01-04 06:07:17\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t7\t39.75\t278.25\t2016-05-18 05:49:51\n752312\tWatsica-Pfannerstill\tLoring Predovic\tEO-54210\tShirt\t20\t13.36\t267.2\t2015-07-26 20:53:51\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t18\t30.4\t547.2\t2016-01-08 07:54:37\n262693\tZiemann-Heidenreich\tLoring Predovic\tGP-14407\tBelt\t18\t57.17\t1029.06\t2015-08-01 15:27:18\n758030\tKilback-Abernathy\tTrish Deckow\tNZ-99565\tShirt\t6\t83.56\t501.36\t2015-11-06 20:46:36\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t7\t80.34\t562.38\t2015-12-22 18:06:48\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t5\t74.51\t372.55\t2015-06-17 15:33:42\n93583\tHegmann-Howell\tEsequiel Schinner\tFI-01804\tShirt\t6\t36.07\t216.42\t2015-08-16 15:54:56\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t11\t68.02\t748.22\t2016-03-31 09:48:53\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tDU-87462\tShirt\t19\t47.84\t908.96\t2015-07-10 18:45:01\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t17\t27.56\t468.52\t2015-08-13 17:26:13\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t10\t20.36\t203.6\t2016-05-04 11:43:07\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t13\t86.75\t1127.75\t2015-12-11 22:29:56\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t10\t14.26\t142.6\t2015-07-07 00:57:18\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t17\t78.75\t1338.75\t2015-12-26 21:57:47\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t1\t11.75\t11.75\t2015-12-27 04:27:54\n453258\tRunolfsson-Bayer\tShannen Hudson\tHZ-54995\tBelt\t17\t16.72\t284.24\t2015-09-17 20:14:18\n759168\tSchaefer Inc\tLoring Predovic\tTK-29646\tShoes\t14\t62.5\t875\t2015-11-04 23:13:42\n758030\tKilback-Abernathy\tTrish Deckow\tFI-01804\tShirt\t1\t43.14\t43.14\t2016-04-30 02:00:35\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tEO-54210\tShirt\t5\t15.24\t76.2\t2016-01-25 16:38:33\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t15\t18.48\t277.2\t2016-05-14 16:57:25\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t12\t20.22\t242.64\t2015-11-27 10:10:48\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t14\t55.89\t782.46\t2015-10-14 05:44:45\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t11\t78.26\t860.86\t2016-04-17 18:42:31\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t10\t74.96\t749.6\t2015-06-18 21:07:15\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t17\t42.38\t720.46\t2016-05-04 14:15:32\n282122\tConnelly, Abshire and Von\tBeth Skiles\tDU-87462\tShirt\t16\t54.87\t877.92\t2015-06-25 07:00:40\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t20\t86.77\t1735.4\t2016-02-29 10:05:51\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t7\t55.59\t389.13\t2015-12-28 13:47:46\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t6\t25.07\t150.42\t2016-04-15 12:52:04\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t1\t89.66\t89.66\t2015-11-22 21:55:16\n453258\tRunolfsson-Bayer\tShannen Hudson\tTL-23025\tShoes\t8\t68.81\t550.48\t2015-10-10 10:14:02\n282122\tConnelly, Abshire and Von\tBeth Skiles\tFI-01804\tShirt\t20\t48.77\t975.4\t2015-11-02 10:41:05\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t6\t81.32\t487.92\t2015-10-21 01:20:46\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t15\t50.62\t759.3\t2016-02-07 14:21:57\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t16\t35.7\t571.2\t2016-05-18 21:01:24\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tHZ-54995\tBelt\t3\t78.73\t236.19\t2016-03-04 22:39:49\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t18\t42.44\t763.92\t2015-12-03 14:44:16\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t1\t39.48\t39.48\t2015-10-06 07:26:06\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t4\t75.96\t303.84\t2015-12-24 11:19:46\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t5\t89.2\t446\t2015-07-12 18:59:29\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t6\t33.13\t198.78\t2016-01-29 12:13:07\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t2\t90.49\t180.98\t2015-06-29 06:39:21\n453258\tRunolfsson-Bayer\tShannen Hudson\tDU-87462\tShirt\t9\t11.24\t101.16\t2015-08-13 13:28:50\n453258\tRunolfsson-Bayer\tShannen Hudson\tDU-87462\tShirt\t6\t87.86\t527.16\t2015-11-12 02:44:00\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t9\t77.85\t700.65\t2015-08-16 22:43:35\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t6\t37.31\t223.86\t2015-08-11 20:20:12\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t19\t88.67\t1684.73\t2015-06-21 15:48:23\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t11\t82.51\t907.61\t2016-04-04 12:30:34\n680916\tMueller and Sons\tLoring Predovic\tEO-54210\tShirt\t3\t90.13\t270.39\t2016-03-30 01:55:33\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tDU-87462\tShirt\t10\t93.39\t933.9\t2016-05-26 06:06:40\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t16\t10.52\t168.32\t2015-07-15 23:13:38\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t5\t78.54\t392.7\t2016-04-05 03:03:05\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t15\t30.82\t462.3\t2015-12-29 02:46:13\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t18\t38.31\t689.58\t2016-02-13 22:07:31\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t9\t51.44\t462.96\t2015-09-18 10:07:09\n282122\tConnelly, Abshire and Von\tBeth Skiles\tDU-87462\tShirt\t20\t48.29\t965.8\t2015-08-28 02:43:55\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t16\t66.73\t1067.68\t2016-02-27 18:00:40\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t3\t29.63\t88.89\t2016-05-17 21:31:10\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t17\t24.81\t421.77\t2015-09-18 06:27:42\n93583\tHegmann-Howell\tEsequiel Schinner\tGJ-90272\tShoes\t17\t77.87\t1323.79\t2016-01-31 04:42:23\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t5\t23.78\t118.9\t2015-10-22 16:25:26\n93583\tHegmann-Howell\tEsequiel Schinner\tFI-01804\tShirt\t20\t99.25\t1985\t2016-04-06 16:25:00\n280749\tDouglas PLC\tTeagan O'Keefe\tDU-87462\tShirt\t2\t96.51\t193.02\t2015-10-24 05:50:53\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t4\t13.11\t52.44\t2015-08-30 15:25:22\n280749\tDouglas PLC\tTeagan O'Keefe\tEO-54210\tShirt\t13\t45.85\t596.05\t2015-11-01 10:25:14\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tFI-01804\tShirt\t18\t38.88\t699.84\t2016-02-25 01:36:57\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t2\t10.78\t21.56\t2016-01-19 12:26:16\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t10\t18.87\t188.7\t2016-04-30 21:04:38\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t2\t46.45\t92.9\t2015-10-16 04:53:06\n398620\tBrekke Ltd\tEsequiel Schinner\tGP-14407\tBelt\t6\t83.4\t500.4\t2016-03-22 03:14:16\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t6\t96.15\t576.9\t2016-05-05 13:34:56\n752312\tWatsica-Pfannerstill\tLoring Predovic\tDU-87462\tShirt\t3\t38.31\t114.93\t2016-04-14 10:03:00\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t16\t81.68\t1306.88\t2016-01-01 02:51:33\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t15\t76.98\t1154.7\t2015-11-27 12:13:20\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tFI-01804\tShirt\t15\t88.49\t1327.35\t2016-02-23 11:02:48\n680916\tMueller and Sons\tLoring Predovic\tZY-38455\tShirt\t11\t86.46\t951.06\t2015-10-18 21:49:11\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t19\t12.66\t240.54\t2015-07-15 01:14:22\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGJ-90272\tShoes\t15\t17.22\t258.3\t2016-05-20 07:46:24\n887145\tGislason LLC\tLoring Predovic\tTL-23025\tShoes\t11\t61.57\t677.27\t2015-07-28 09:19:07\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t7\t72.39\t506.73\t2016-01-20 10:19:27\n93583\tHegmann-Howell\tEsequiel Schinner\tNZ-99565\tShirt\t11\t13.46\t148.06\t2016-06-03 06:36:55\n218667\tJaskolski-O'Hara\tTrish Deckow\tTK-29646\tShoes\t13\t78.53\t1020.89\t2016-03-22 11:46:03\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGJ-90272\tShoes\t14\t74.52\t1043.28\t2015-06-29 12:09:29\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t9\t39.14\t352.26\t2016-02-11 15:27:05\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGJ-90272\tShoes\t8\t21.21\t169.68\t2016-03-20 18:19:30\n680916\tMueller and Sons\tLoring Predovic\tGJ-90272\tShoes\t3\t69.14\t207.42\t2015-06-27 11:19:56\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t5\t81.92\t409.6\t2015-11-04 16:29:33\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t8\t48.18\t385.44\t2016-04-19 23:55:10\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGP-14407\tBelt\t1\t92.3\t92.3\t2015-11-18 21:31:14\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t1\t85.94\t85.94\t2016-06-08 20:12:08\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t11\t13.75\t151.25\t2015-08-10 13:06:00\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t16\t69.01\t1104.16\t2016-05-01 20:32:12\n398620\tBrekke Ltd\tEsequiel Schinner\tHZ-54995\tBelt\t1\t68.32\t68.32\t2016-04-27 05:07:20\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t9\t94.67\t852.03\t2016-01-16 07:35:33\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t16\t30.44\t487.04\t2015-12-24 09:14:03\n398620\tBrekke Ltd\tEsequiel Schinner\tGP-14407\tBelt\t15\t16.66\t249.9\t2015-12-28 00:54:17\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t10\t29.52\t295.2\t2016-03-20 04:57:32\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t13\t66.16\t860.08\t2015-07-12 17:53:46\n680916\tMueller and Sons\tLoring Predovic\tFI-01804\tShirt\t1\t83.48\t83.48\t2015-10-10 12:10:07\n93583\tHegmann-Howell\tEsequiel Schinner\tDU-87462\tShirt\t9\t53.76\t483.84\t2015-11-22 10:39:22\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t9\t98.5\t886.5\t2015-09-16 20:37:17\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t4\t90.59\t362.36\t2015-12-07 06:48:05\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t1\t89.87\t89.87\t2015-08-28 11:16:00\n680916\tMueller and Sons\tLoring Predovic\tTL-23025\tShoes\t20\t61.65\t1233\t2016-02-05 07:14:29\n398620\tBrekke Ltd\tEsequiel Schinner\tFI-01804\tShirt\t8\t84.25\t674\t2016-01-22 23:37:32\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t10\t47.1\t471\t2016-01-21 19:22:43\n218667\tJaskolski-O'Hara\tTrish Deckow\tTL-23025\tShoes\t17\t49.15\t835.55\t2016-03-22 17:56:52\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t6\t57.32\t343.92\t2016-02-10 08:22:35\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t17\t51.03\t867.51\t2016-06-10 16:03:27\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t12\t14.38\t172.56\t2015-12-10 21:08:22\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t16\t74.32\t1189.12\t2015-07-09 08:48:11\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t15\t35.34\t530.1\t2015-06-18 00:59:00\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t12\t62.48\t749.76\t2016-03-16 04:42:32\n453258\tRunolfsson-Bayer\tShannen Hudson\tHZ-54995\tBelt\t17\t88.73\t1508.41\t2015-11-21 21:00:55\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t13\t47.89\t622.57\t2015-10-17 03:08:58\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t7\t13.63\t95.41\t2016-04-14 20:30:01\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t3\t37.24\t111.72\t2015-11-05 06:36:39\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t11\t51.56\t567.16\t2016-05-18 20:33:02\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t10\t77.34\t773.4\t2016-02-12 19:11:47\n759168\tSchaefer Inc\tLoring Predovic\tZY-38455\tShirt\t4\t87.6\t350.4\t2016-05-16 11:43:56\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t18\t87.73\t1579.14\t2016-01-13 08:41:56\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tZY-38455\tShirt\t20\t89.45\t1789\t2015-10-26 16:05:25\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t14\t42.13\t589.82\t2015-10-26 08:14:20\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t5\t30.63\t153.15\t2016-03-09 19:41:16\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t15\t14.5\t217.5\t2015-08-27 21:21:05\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t9\t95.41\t858.69\t2015-11-14 17:26:28\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t5\t96.79\t483.95\t2016-04-02 02:33:30\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t20\t31.6\t632\t2015-12-24 15:15:13\n887145\tGislason LLC\tLoring Predovic\tTK-29646\tShoes\t18\t31.53\t567.54\t2015-09-29 01:53:12\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGP-14407\tBelt\t13\t67.71\t880.23\t2015-08-24 08:01:49\n758030\tKilback-Abernathy\tTrish Deckow\tEO-54210\tShirt\t7\t14.02\t98.14\t2016-01-26 13:05:29\n251881\tZulauf-Grady\tTeagan O'Keefe\tEO-54210\tShirt\t14\t13.7\t191.8\t2016-05-04 05:20:47\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tZY-38455\tShirt\t13\t42.24\t549.12\t2015-12-23 18:36:25\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t12\t73.5\t882\t2016-03-27 06:21:34\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tNZ-99565\tShirt\t14\t60.97\t853.58\t2016-03-28 15:22:30\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t20\t15.58\t311.6\t2016-01-25 23:06:19\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t8\t74.64\t597.12\t2016-01-09 16:33:01\n136521\tLabadie and Sons\tEsequiel Schinner\tDU-87462\tShirt\t17\t75.41\t1281.97\t2015-10-08 00:27:07\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t18\t57.6\t1036.8\t2015-07-22 08:51:17\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t1\t75.59\t75.59\t2015-08-08 06:45:28\n62592\tO'Keefe-Koch\tShannen Hudson\tNZ-99565\tShirt\t20\t89.66\t1793.2\t2015-11-20 01:28:49\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t7\t28.77\t201.39\t2016-02-06 21:44:08\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tFI-01804\tShirt\t15\t66.28\t994.2\t2016-05-17 18:40:02\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t2\t25.51\t51.02\t2015-12-21 14:59:20\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t18\t67.38\t1212.84\t2016-03-24 16:37:57\n453258\tRunolfsson-Bayer\tShannen Hudson\tNZ-99565\tShirt\t2\t39.99\t79.98\t2015-10-01 23:00:39\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t5\t76.57\t382.85\t2016-03-16 00:15:08\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t5\t82.79\t413.95\t2016-01-06 21:14:00\n758030\tKilback-Abernathy\tTrish Deckow\tGP-14407\tBelt\t6\t74.65\t447.9\t2016-01-15 01:07:52\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t5\t53.26\t266.3\t2015-12-10 18:11:02\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tDU-87462\tShirt\t11\t42.63\t468.93\t2016-03-27 06:30:56\n887145\tGislason LLC\tLoring Predovic\tTL-23025\tShoes\t4\t87.16\t348.64\t2015-10-03 04:35:36\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t18\t13.51\t243.18\t2016-05-29 17:54:10\n398620\tBrekke Ltd\tEsequiel Schinner\tEO-54210\tShirt\t13\t25.26\t328.38\t2016-04-30 18:03:40\n136521\tLabadie and Sons\tEsequiel Schinner\tGP-14407\tBelt\t9\t11.57\t104.13\t2015-12-21 05:39:51\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t16\t30.1\t481.6\t2016-01-15 10:08:12\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t9\t88.8\t799.2\t2016-06-06 15:12:51\n218667\tJaskolski-O'Hara\tTrish Deckow\tHZ-54995\tBelt\t17\t23.92\t406.64\t2016-03-06 13:51:04\n93583\tHegmann-Howell\tEsequiel Schinner\tHZ-54995\tBelt\t13\t33.44\t434.72\t2016-03-21 21:42:03\n282122\tConnelly, Abshire and Von\tBeth Skiles\tNZ-99565\tShirt\t6\t66.58\t399.48\t2015-12-11 21:38:53\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t20\t31.23\t624.6\t2015-09-19 18:29:29\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t12\t58.36\t700.32\t2015-09-28 02:34:08\n62592\tO'Keefe-Koch\tShannen Hudson\tDU-87462\tShirt\t17\t16.97\t288.49\t2016-01-14 02:46:54\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t15\t62.24\t933.6\t2016-04-15 02:27:31\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t7\t44.21\t309.47\t2015-12-23 14:12:04\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t14\t75.84\t1061.76\t2015-07-16 18:34:19\n218667\tJaskolski-O'Hara\tTrish Deckow\tTK-29646\tShoes\t6\t92.31\t553.86\t2015-07-27 03:18:15\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t3\t80.39\t241.17\t2016-06-14 06:59:38\n759168\tSchaefer Inc\tLoring Predovic\tNZ-99565\tShirt\t13\t89.64\t1165.32\t2016-01-09 03:54:44\n759168\tSchaefer Inc\tLoring Predovic\tTL-23025\tShoes\t16\t93.57\t1497.12\t2016-03-21 21:13:24\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t12\t70.1\t841.2\t2016-01-31 23:50:37\n218667\tJaskolski-O'Hara\tTrish Deckow\tHZ-54995\tBelt\t8\t86.67\t693.36\t2015-06-18 23:36:37\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t17\t28.87\t490.79\t2016-02-21 11:47:57\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t19\t24.8\t471.2\t2015-11-29 03:01:53\n530925\tPurdy and Sons\tTeagan O'Keefe\tNZ-99565\tShirt\t3\t96.91\t290.73\t2015-11-22 09:16:14\n251881\tZulauf-Grady\tTeagan O'Keefe\tEO-54210\tShirt\t1\t72.88\t72.88\t2015-09-13 05:15:45\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t8\t86.55\t692.4\t2015-12-08 05:11:41\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t19\t28.26\t536.94\t2015-08-10 03:48:07\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t6\t85.47\t512.82\t2015-09-05 15:50:05\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t4\t81.97\t327.88\t2015-11-05 09:50:42\n282122\tConnelly, Abshire and Von\tBeth Skiles\tZY-38455\tShirt\t17\t49.68\t844.56\t2015-08-01 11:46:08\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t14\t80.27\t1123.78\t2016-05-15 05:10:05\n136521\tLabadie and Sons\tEsequiel Schinner\tDU-87462\tShirt\t19\t59.08\t1122.52\t2015-11-13 22:50:07\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t19\t99.9\t1898.1\t2016-03-12 09:04:00\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tZY-38455\tShirt\t1\t80.39\t80.39\t2016-01-21 12:16:53\n453258\tRunolfsson-Bayer\tShannen Hudson\tTL-23025\tShoes\t1\t19.62\t19.62\t2015-12-17 09:18:10\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t1\t21.23\t21.23\t2016-03-20 18:13:44\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t8\t69.58\t556.64\t2016-04-04 01:48:48\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t11\t57.4\t631.4\t2015-07-19 01:14:00\n887145\tGislason LLC\tLoring Predovic\tTL-23025\tShoes\t14\t26.28\t367.92\t2016-03-28 20:50:14\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t7\t39.7\t277.9\t2015-07-01 05:57:09\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t3\t67.52\t202.56\t2015-12-13 20:37:01\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t8\t18.14\t145.12\t2016-02-23 05:55:21\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t3\t30.65\t91.95\t2016-05-25 15:48:53\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t1\t79.38\t79.38\t2015-09-29 22:05:16\n280749\tDouglas PLC\tTeagan O'Keefe\tEO-54210\tShirt\t19\t99.24\t1885.56\t2015-10-18 02:05:41\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t9\t67.85\t610.65\t2016-03-05 19:02:44\n282122\tConnelly, Abshire and Von\tBeth Skiles\tNZ-99565\tShirt\t9\t28.92\t260.28\t2016-05-31 15:23:54\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t9\t99.69\t897.21\t2016-05-13 17:31:58\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t15\t52.17\t782.55\t2015-09-04 10:04:49\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t1\t95.98\t95.98\t2015-08-15 02:14:49\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t3\t90.08\t270.24\t2016-01-15 16:22:49\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t7\t27.88\t195.16\t2016-01-16 10:29:41\n758030\tKilback-Abernathy\tTrish Deckow\tGP-14407\tBelt\t2\t90.81\t181.62\t2016-05-04 09:55:57\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t20\t95.51\t1910.2\t2016-02-14 11:16:54\n759168\tSchaefer Inc\tLoring Predovic\tFI-01804\tShirt\t9\t30.98\t278.82\t2015-09-07 08:02:32\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t20\t73\t1460\t2016-01-22 12:29:50\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t12\t87.85\t1054.2\t2015-07-29 22:03:25\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t1\t26.5\t26.5\t2015-07-23 16:58:05\n218667\tJaskolski-O'Hara\tTrish Deckow\tHZ-54995\tBelt\t5\t96.08\t480.4\t2015-10-15 07:00:10\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t5\t17.37\t86.85\t2015-10-26 09:29:40\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t1\t42.75\t42.75\t2015-09-05 21:27:40\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t11\t73.93\t813.23\t2016-02-13 04:30:59\n93583\tHegmann-Howell\tEsequiel Schinner\tHZ-54995\tBelt\t17\t76.22\t1295.74\t2015-10-18 09:53:00\n887145\tGislason LLC\tLoring Predovic\tGP-14407\tBelt\t7\t51.7\t361.9\t2015-10-26 00:17:23\n759168\tSchaefer Inc\tLoring Predovic\tTL-23025\tShoes\t14\t83.77\t1172.78\t2015-07-05 16:38:06\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t13\t42.31\t550.03\t2015-09-28 21:46:35\n752312\tWatsica-Pfannerstill\tLoring Predovic\tDU-87462\tShirt\t17\t85.96\t1461.32\t2015-08-14 09:00:28\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t13\t22.62\t294.06\t2016-03-18 10:59:25\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tDU-87462\tShirt\t2\t41.75\t83.5\t2015-07-23 08:09:07\n398620\tBrekke Ltd\tEsequiel Schinner\tEO-54210\tShirt\t14\t49.36\t691.04\t2016-03-31 04:59:02\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t20\t29.81\t596.2\t2015-10-01 13:58:33\n453258\tRunolfsson-Bayer\tShannen Hudson\tGP-14407\tBelt\t1\t58.71\t58.71\t2016-05-20 20:54:07\n887145\tGislason LLC\tLoring Predovic\tTL-23025\tShoes\t6\t91.98\t551.88\t2016-03-20 02:23:19\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t16\t26.8\t428.8\t2015-10-24 10:43:03\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t11\t33.09\t363.99\t2015-11-16 13:52:56\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t12\t20.12\t241.44\t2016-05-04 04:17:06\n136521\tLabadie and Sons\tEsequiel Schinner\tDU-87462\tShirt\t2\t51.4\t102.8\t2015-07-30 18:12:05\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t15\t70.6\t1059\t2015-06-23 00:24:16\n887145\tGislason LLC\tLoring Predovic\tDU-87462\tShirt\t17\t40.63\t690.71\t2015-12-21 19:13:55\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTL-23025\tShoes\t13\t11.36\t147.68\t2015-09-27 02:06:31\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t17\t29.89\t508.13\t2016-03-02 04:26:05\n453258\tRunolfsson-Bayer\tShannen Hudson\tFI-01804\tShirt\t18\t38.43\t691.74\t2015-10-03 00:53:48\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t17\t83.88\t1425.96\t2015-10-29 17:02:31\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tZY-38455\tShirt\t20\t30.7\t614\t2015-06-20 09:15:40\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tFI-01804\tShirt\t1\t58.27\t58.27\t2016-02-06 20:22:10\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t10\t58.64\t586.4\t2015-10-04 04:24:29\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t6\t90.61\t543.66\t2015-11-13 15:11:46\n758030\tKilback-Abernathy\tTrish Deckow\tGP-14407\tBelt\t15\t94.43\t1416.45\t2016-03-17 03:50:49\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t19\t21.77\t413.63\t2015-08-28 08:18:06\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t14\t45.2\t632.8\t2016-02-27 19:37:13\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t4\t22.68\t90.72\t2016-03-03 00:32:29\n758030\tKilback-Abernathy\tTrish Deckow\tTK-29646\tShoes\t2\t79.33\t158.66\t2015-07-05 07:13:45\n530925\tPurdy and Sons\tTeagan O'Keefe\tTL-23025\tShoes\t10\t88.81\t888.1\t2015-10-26 19:44:32\n453258\tRunolfsson-Bayer\tShannen Hudson\tZY-38455\tShirt\t8\t38.21\t305.68\t2015-09-17 08:02:13\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t5\t37.83\t189.15\t2015-09-12 02:30:27\n759168\tSchaefer Inc\tLoring Predovic\tEO-54210\tShirt\t17\t94.04\t1598.68\t2016-06-08 14:23:28\n280749\tDouglas PLC\tTeagan O'Keefe\tDU-87462\tShirt\t14\t35.51\t497.14\t2015-06-19 02:44:20\n62592\tO'Keefe-Koch\tShannen Hudson\tHZ-54995\tBelt\t10\t74.65\t746.5\t2015-09-20 14:08:02\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t4\t68.78\t275.12\t2015-07-13 07:54:21\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t3\t13.92\t41.76\t2016-02-02 13:43:47\n680916\tMueller and Sons\tLoring Predovic\tHZ-54995\tBelt\t19\t35.7\t678.3\t2015-11-02 06:28:15\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t3\t21.77\t65.31\t2015-12-12 17:56:02\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t1\t38.29\t38.29\t2015-12-21 17:56:11\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t2\t25.2\t50.4\t2015-08-05 06:10:20\n759168\tSchaefer Inc\tLoring Predovic\tDU-87462\tShirt\t15\t62.53\t937.95\t2015-11-28 10:44:52\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t2\t60.27\t120.54\t2015-08-10 06:27:56\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t14\t35.92\t502.88\t2015-10-09 02:08:25\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTK-29646\tShoes\t6\t88.69\t532.14\t2016-01-07 14:36:42\n680916\tMueller and Sons\tLoring Predovic\tHZ-54995\tBelt\t18\t17.61\t316.98\t2015-12-14 09:24:06\n398620\tBrekke Ltd\tEsequiel Schinner\tFI-01804\tShirt\t12\t36.39\t436.68\t2015-12-02 05:27:04\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t13\t92.17\t1198.21\t2016-02-21 01:46:10\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t15\t44.41\t666.15\t2015-07-11 18:11:37\n759168\tSchaefer Inc\tLoring Predovic\tHZ-54995\tBelt\t7\t86.04\t602.28\t2015-11-17 20:34:12\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTK-29646\tShoes\t13\t99.08\t1288.04\t2016-04-07 10:45:22\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t9\t63.09\t567.81\t2016-04-28 11:00:46\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t8\t33.49\t267.92\t2016-03-05 21:00:49\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t11\t76.83\t845.13\t2016-04-07 21:29:59\n759168\tSchaefer Inc\tLoring Predovic\tDU-87462\tShirt\t6\t52.15\t312.9\t2016-06-11 02:11:20\n398620\tBrekke Ltd\tEsequiel Schinner\tHZ-54995\tBelt\t20\t42.21\t844.2\t2016-06-12 15:35:59\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t17\t25.94\t440.98\t2016-03-21 18:10:30\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t7\t31.14\t217.98\t2016-03-11 04:35:56\n136521\tLabadie and Sons\tEsequiel Schinner\tNZ-99565\tShirt\t17\t21.78\t370.26\t2015-11-26 14:45:36\n887145\tGislason LLC\tLoring Predovic\tGP-14407\tBelt\t18\t30.04\t540.72\t2016-03-24 06:50:51\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t19\t85.18\t1618.42\t2016-03-04 14:53:59\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t16\t57.82\t925.12\t2015-10-08 02:05:32\n282122\tConnelly, Abshire and Von\tBeth Skiles\tZY-38455\tShirt\t16\t32.06\t512.96\t2015-06-25 23:04:47\n136521\tLabadie and Sons\tEsequiel Schinner\tEO-54210\tShirt\t19\t84.25\t1600.75\t2016-05-06 20:22:18\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tNZ-99565\tShirt\t17\t55.98\t951.66\t2015-10-26 18:29:32\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t16\t17.63\t282.08\t2015-06-28 10:57:58\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t3\t50.53\t151.59\t2016-02-20 02:42:24\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t17\t68.7\t1167.9\t2016-04-07 11:15:34\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t5\t79.26\t396.3\t2016-06-06 21:59:01\n758030\tKilback-Abernathy\tTrish Deckow\tNZ-99565\tShirt\t3\t67.95\t203.85\t2015-12-04 00:04:08\n218667\tJaskolski-O'Hara\tTrish Deckow\tHZ-54995\tBelt\t19\t77.63\t1474.97\t2016-02-27 18:22:26\n530925\tPurdy and Sons\tTeagan O'Keefe\tTL-23025\tShoes\t16\t49.24\t787.84\t2015-11-20 10:41:23\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t10\t33.15\t331.5\t2016-06-11 16:46:22\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t9\t66.92\t602.28\t2015-08-01 13:45:24\n530925\tPurdy and Sons\tTeagan O'Keefe\tGP-14407\tBelt\t12\t74.12\t889.44\t2016-04-23 06:51:24\n887145\tGislason LLC\tLoring Predovic\tGJ-90272\tShoes\t4\t70.61\t282.44\t2015-08-13 19:46:11\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t17\t59.11\t1004.87\t2015-06-16 00:22:29\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t17\t36.23\t615.91\t2016-02-08 14:07:38\n136521\tLabadie and Sons\tEsequiel Schinner\tEO-54210\tShirt\t10\t78.55\t785.5\t2015-10-21 04:11:07\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t15\t35.85\t537.75\t2015-09-07 19:26:46\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t6\t82.65\t495.9\t2016-05-11 21:44:59\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t7\t54.9\t384.3\t2015-09-01 17:14:02\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tFI-01804\tShirt\t5\t35.37\t176.85\t2016-05-07 21:52:57\n262693\tZiemann-Heidenreich\tLoring Predovic\tZY-38455\tShirt\t13\t49.27\t640.51\t2015-06-29 14:57:30\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t17\t54.5\t926.5\t2015-07-07 16:55:49\n282122\tConnelly, Abshire and Von\tBeth Skiles\tDU-87462\tShirt\t14\t46.71\t653.94\t2016-01-19 11:35:10\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t14\t49.86\t698.04\t2016-02-07 08:12:27\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGP-14407\tBelt\t18\t21.33\t383.94\t2015-12-10 12:18:06\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t17\t31.06\t528.02\t2015-07-01 13:50:34\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t14\t29.8\t417.2\t2015-08-10 23:13:09\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t15\t64.94\t974.1\t2015-12-31 12:41:21\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t19\t38.12\t724.28\t2015-08-25 12:50:12\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t1\t27.15\t27.15\t2015-10-25 09:58:45\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tHZ-54995\tBelt\t7\t57.6\t403.2\t2015-09-29 13:52:45\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t17\t88.9\t1511.3\t2016-01-22 00:16:33\n887145\tGislason LLC\tLoring Predovic\tTK-29646\tShoes\t10\t74.8\t748\t2015-09-15 21:23:19\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t4\t87.59\t350.36\t2015-12-10 13:22:51\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t6\t93.94\t563.64\t2016-05-20 19:46:09\n218667\tJaskolski-O'Hara\tTrish Deckow\tNZ-99565\tShirt\t8\t50.54\t404.32\t2016-03-04 11:16:38\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t15\t82.43\t1236.45\t2015-12-11 20:29:55\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTK-29646\tShoes\t18\t54.49\t980.82\t2015-12-17 13:03:57\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t20\t57.08\t1141.6\t2015-12-29 11:41:27\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t20\t22.69\t453.8\t2015-12-10 23:35:28\n62592\tO'Keefe-Koch\tShannen Hudson\tNZ-99565\tShirt\t2\t48.04\t96.08\t2016-04-10 09:47:16\n62592\tO'Keefe-Koch\tShannen Hudson\tGJ-90272\tShoes\t3\t12.97\t38.91\t2016-03-10 09:01:55\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t12\t41.23\t494.76\t2016-03-12 19:02:26\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t19\t95.97\t1823.43\t2015-07-25 07:10:58\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t20\t37.24\t744.8\t2016-04-26 13:12:51\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t17\t65.63\t1115.71\t2015-08-27 20:19:42\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t13\t88.83\t1154.79\t2016-02-25 15:25:04\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t13\t48.79\t634.27\t2015-11-27 22:23:09\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t18\t21.73\t391.14\t2016-01-10 00:07:03\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t6\t15.54\t93.24\t2015-12-26 17:28:43\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t5\t27.9\t139.5\t2016-03-12 19:44:40\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t6\t35.25\t211.5\t2015-12-16 01:37:04\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t16\t96.6\t1545.6\t2015-10-26 10:02:50\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t2\t37.94\t75.88\t2016-01-11 07:30:56\n752312\tWatsica-Pfannerstill\tLoring Predovic\tDU-87462\tShirt\t5\t99.77\t498.85\t2015-08-14 13:30:18\n453258\tRunolfsson-Bayer\tShannen Hudson\tHZ-54995\tBelt\t20\t45.9\t918\t2015-12-24 17:48:43\n752312\tWatsica-Pfannerstill\tLoring Predovic\tDU-87462\tShirt\t11\t20.19\t222.09\t2015-08-13 07:01:47\n93583\tHegmann-Howell\tEsequiel Schinner\tFI-01804\tShirt\t4\t97.05\t388.2\t2016-06-02 15:33:33\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t11\t46.35\t509.85\t2016-02-13 01:49:05\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t12\t98\t1176\t2016-04-20 22:18:13\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tNZ-99565\tShirt\t10\t32.69\t326.9\t2015-09-20 23:36:14\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t14\t64.72\t906.08\t2015-10-12 12:13:11\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t17\t77.98\t1325.66\t2016-01-25 19:10:06\n680916\tMueller and Sons\tLoring Predovic\tGJ-90272\tShoes\t5\t55.87\t279.35\t2015-08-13 12:34:51\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t9\t13.86\t124.74\t2016-02-09 06:49:16\n759168\tSchaefer Inc\tLoring Predovic\tEO-54210\tShirt\t14\t77.27\t1081.78\t2016-06-11 07:15:32\n758030\tKilback-Abernathy\tTrish Deckow\tNZ-99565\tShirt\t1\t68.6\t68.6\t2015-08-19 07:13:09\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t7\t67.47\t472.29\t2016-02-07 00:52:06\n453258\tRunolfsson-Bayer\tShannen Hudson\tNZ-99565\tShirt\t14\t69.17\t968.38\t2015-07-07 01:36:32\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t2\t31.82\t63.64\t2015-09-26 05:32:58\n759168\tSchaefer Inc\tLoring Predovic\tTL-23025\tShoes\t9\t10.33\t92.97\t2016-03-13 14:29:14\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t3\t33.7\t101.1\t2015-06-20 01:53:54\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t13\t85.14\t1106.82\t2016-05-20 04:18:19\n453258\tRunolfsson-Bayer\tShannen Hudson\tDU-87462\tShirt\t15\t60.86\t912.9\t2015-06-18 04:49:24\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t15\t42.41\t636.15\t2016-05-02 23:13:54\n530925\tPurdy and Sons\tTeagan O'Keefe\tEO-54210\tShirt\t15\t60.55\t908.25\t2015-07-30 06:30:48\n62592\tO'Keefe-Koch\tShannen Hudson\tGP-14407\tBelt\t14\t90.95\t1273.3\t2016-06-12 22:38:41\n218667\tJaskolski-O'Hara\tTrish Deckow\tEO-54210\tShirt\t1\t63.54\t63.54\t2015-12-17 07:54:32\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t18\t24.24\t436.32\t2015-07-01 08:11:11\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t13\t11.05\t143.65\t2015-12-21 09:17:00\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t1\t56.21\t56.21\t2016-05-28 01:54:20\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tDU-87462\tShirt\t6\t36.62\t219.72\t2015-08-16 08:02:30\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t12\t32.34\t388.08\t2015-08-15 15:12:14\n282122\tConnelly, Abshire and Von\tBeth Skiles\tFI-01804\tShirt\t8\t92.32\t738.56\t2015-09-04 18:49:14\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t2\t55.56\t111.12\t2016-04-17 02:57:35\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t18\t35.01\t630.18\t2015-10-30 22:03:14\n262693\tZiemann-Heidenreich\tLoring Predovic\tNZ-99565\tShirt\t7\t44.92\t314.44\t2016-04-11 10:21:47\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t12\t78.64\t943.68\t2015-08-19 04:16:09\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t19\t85.3\t1620.7\t2016-06-08 22:52:53\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t19\t45.33\t861.27\t2015-10-03 06:41:13\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t8\t54.71\t437.68\t2015-10-04 20:08:28\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t8\t11.56\t92.48\t2015-09-13 11:59:46\n218667\tJaskolski-O'Hara\tTrish Deckow\tTL-23025\tShoes\t17\t84.99\t1444.83\t2015-12-18 10:22:09\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t12\t59.9\t718.8\t2016-06-13 16:25:36\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGP-14407\tBelt\t15\t30.62\t459.3\t2015-12-24 06:02:37\n136521\tLabadie and Sons\tEsequiel Schinner\tEO-54210\tShirt\t8\t15.23\t121.84\t2015-10-17 20:16:57\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t3\t25.41\t76.23\t2015-08-31 05:52:44\n453258\tRunolfsson-Bayer\tShannen Hudson\tHZ-54995\tBelt\t4\t69.62\t278.48\t2016-03-15 05:44:08\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t17\t42.83\t728.11\t2015-08-10 21:03:07\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t6\t85.22\t511.32\t2015-12-25 08:03:32\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t12\t59.21\t710.52\t2016-04-29 14:26:51\n758030\tKilback-Abernathy\tTrish Deckow\tFI-01804\tShirt\t14\t22.04\t308.56\t2016-03-05 22:24:01\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t10\t56.21\t562.1\t2016-04-30 07:46:53\n759168\tSchaefer Inc\tLoring Predovic\tFI-01804\tShirt\t4\t15.27\t61.08\t2016-02-01 14:24:47\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t5\t22.65\t113.25\t2015-11-11 22:02:39\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t18\t91.63\t1649.34\t2015-11-12 01:09:42\n453258\tRunolfsson-Bayer\tShannen Hudson\tFI-01804\tShirt\t13\t19.85\t258.05\t2016-02-04 00:35:09\n759168\tSchaefer Inc\tLoring Predovic\tTL-23025\tShoes\t8\t31.32\t250.56\t2016-03-08 15:36:31\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t19\t55.9\t1062.1\t2015-06-30 13:23:08\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t14\t22.97\t321.58\t2016-02-21 17:28:53\n758030\tKilback-Abernathy\tTrish Deckow\tTK-29646\tShoes\t19\t12.43\t236.17\t2015-09-12 00:00:13\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t7\t79.34\t555.38\t2016-01-12 18:12:36\n759168\tSchaefer Inc\tLoring Predovic\tZY-38455\tShirt\t1\t59.62\t59.62\t2015-08-25 08:39:53\n136521\tLabadie and Sons\tEsequiel Schinner\tEO-54210\tShirt\t9\t68.86\t619.74\t2015-08-31 03:44:04\n680916\tMueller and Sons\tLoring Predovic\tNZ-99565\tShirt\t20\t96.82\t1936.4\t2016-04-10 16:44:47\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t20\t72.2\t1444\t2015-12-22 15:26:45\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t12\t23.01\t276.12\t2015-10-14 15:07:11\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t11\t11.18\t122.98\t2015-07-12 23:12:17\n887145\tGislason LLC\tLoring Predovic\tTL-23025\tShoes\t10\t64.17\t641.7\t2016-04-23 10:36:40\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t17\t72.21\t1227.57\t2016-02-19 09:09:36\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t4\t71.95\t287.8\t2016-02-03 05:50:23\n262693\tZiemann-Heidenreich\tLoring Predovic\tTK-29646\tShoes\t16\t59.85\t957.6\t2015-09-24 07:11:41\n759168\tSchaefer Inc\tLoring Predovic\tTK-29646\tShoes\t5\t87.47\t437.35\t2015-10-26 09:44:16\n453258\tRunolfsson-Bayer\tShannen Hudson\tGP-14407\tBelt\t4\t76.42\t305.68\t2015-09-07 02:21:17\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t14\t37.28\t521.92\t2015-09-20 16:02:14\n530925\tPurdy and Sons\tTeagan O'Keefe\tTK-29646\tShoes\t12\t52.48\t629.76\t2015-09-05 06:57:10\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t10\t98.75\t987.5\t2015-10-04 01:47:05\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t12\t38.77\t465.24\t2015-08-16 13:10:34\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t15\t64.23\t963.45\t2015-09-12 16:38:32\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t16\t10.21\t163.36\t2015-09-11 20:19:48\n218667\tJaskolski-O'Hara\tTrish Deckow\tEO-54210\tShirt\t14\t45.47\t636.58\t2015-10-20 23:02:00\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tZY-38455\tShirt\t2\t68.3\t136.6\t2015-11-25 03:18:34\n282122\tConnelly, Abshire and Von\tBeth Skiles\tFI-01804\tShirt\t5\t72.81\t364.05\t2015-09-15 09:12:54\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t10\t13.84\t138.4\t2015-12-27 09:14:45\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t1\t35.34\t35.34\t2015-12-08 07:45:15\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t12\t46.58\t558.96\t2016-04-26 16:34:55\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTK-29646\tShoes\t5\t51.01\t255.05\t2015-08-06 23:22:41\n887145\tGislason LLC\tLoring Predovic\tTL-23025\tShoes\t19\t82.7\t1571.3\t2015-11-23 11:32:39\n758030\tKilback-Abernathy\tTrish Deckow\tFI-01804\tShirt\t19\t77.73\t1476.87\t2015-09-13 23:36:42\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t7\t83.34\t583.38\t2015-07-11 16:04:28\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tHZ-54995\tBelt\t1\t10.01\t10.01\t2016-04-15 18:51:27\n93583\tHegmann-Howell\tEsequiel Schinner\tHZ-54995\tBelt\t11\t22.27\t244.97\t2016-02-02 04:12:40\n398620\tBrekke Ltd\tEsequiel Schinner\tTK-29646\tShoes\t19\t75.46\t1433.74\t2016-03-12 10:05:36\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t8\t51.64\t413.12\t2015-09-23 14:59:21\n680916\tMueller and Sons\tLoring Predovic\tGJ-90272\tShoes\t17\t33.65\t572.05\t2016-01-27 11:12:10\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t13\t31.1\t404.3\t2015-10-31 05:22:29\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t16\t55.86\t893.76\t2015-06-16 17:20:38\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t8\t33.21\t265.68\t2016-04-30 04:50:44\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t17\t16.3\t277.1\t2016-03-18 18:11:55\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t4\t14.37\t57.48\t2015-11-30 02:34:42\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTL-23025\tShoes\t20\t36.78\t735.6\t2015-09-05 00:01:37\n887145\tGislason LLC\tLoring Predovic\tGP-14407\tBelt\t1\t25.73\t25.73\t2016-04-26 02:03:03\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t14\t92.74\t1298.36\t2015-09-12 05:25:08\n759168\tSchaefer Inc\tLoring Predovic\tGJ-90272\tShoes\t17\t88.73\t1508.41\t2015-09-15 05:06:14\n62592\tO'Keefe-Koch\tShannen Hudson\tNZ-99565\tShirt\t5\t99.7\t498.5\t2016-05-09 17:22:40\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t2\t26.74\t53.48\t2016-05-22 07:47:44\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t11\t92.27\t1014.97\t2015-09-06 10:06:02\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t13\t12.73\t165.49\t2015-12-17 00:28:16\n282122\tConnelly, Abshire and Von\tBeth Skiles\tZY-38455\tShirt\t10\t94.57\t945.7\t2015-10-26 14:00:02\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tNZ-99565\tShirt\t5\t34.28\t171.4\t2016-02-08 18:21:51\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTL-23025\tShoes\t3\t50.58\t151.74\t2015-08-28 05:18:54\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTL-23025\tShoes\t6\t35.54\t213.24\t2016-02-04 04:09:28\n758030\tKilback-Abernathy\tTrish Deckow\tFI-01804\tShirt\t2\t77.7\t155.4\t2015-12-09 19:44:19\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t5\t35.88\t179.4\t2016-04-25 08:44:12\n453258\tRunolfsson-Bayer\tShannen Hudson\tFI-01804\tShirt\t18\t72.54\t1305.72\t2015-07-22 22:07:13\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t14\t32.39\t453.46\t2016-03-10 06:05:35\n398620\tBrekke Ltd\tEsequiel Schinner\tNZ-99565\tShirt\t10\t97.37\t973.7\t2016-04-09 05:11:19\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t8\t22.75\t182\t2016-03-30 08:23:25\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t13\t59.7\t776.1\t2016-04-30 13:37:43\n262693\tZiemann-Heidenreich\tLoring Predovic\tGJ-90272\tShoes\t9\t98.57\t887.13\t2016-02-08 18:29:37\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t18\t74.14\t1334.52\t2016-04-26 05:15:18\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t14\t39.04\t546.56\t2015-10-20 01:10:49\n136521\tLabadie and Sons\tEsequiel Schinner\tDU-87462\tShirt\t16\t98.29\t1572.64\t2015-12-23 08:18:27\n453258\tRunolfsson-Bayer\tShannen Hudson\tGP-14407\tBelt\t11\t90.83\t999.13\t2015-09-14 15:55:17\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t3\t58.45\t175.35\t2016-06-13 15:28:08\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t1\t37.51\t37.51\t2016-02-01 03:56:14\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t6\t55.89\t335.34\t2016-04-19 05:59:39\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t6\t62.83\t376.98\t2016-06-13 13:08:05\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t16\t62.11\t993.76\t2016-02-29 19:09:47\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t17\t11.86\t201.62\t2015-11-27 23:56:34\n453258\tRunolfsson-Bayer\tShannen Hudson\tNZ-99565\tShirt\t13\t29.38\t381.94\t2016-05-19 19:03:16\n887145\tGislason LLC\tLoring Predovic\tDU-87462\tShirt\t1\t52.94\t52.94\t2015-06-16 10:39:19\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t1\t29.45\t29.45\t2015-07-25 06:03:31\n680916\tMueller and Sons\tLoring Predovic\tEO-54210\tShirt\t2\t28.76\t57.52\t2016-01-27 08:32:23\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t9\t28.29\t254.61\t2015-08-20 19:00:48\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGP-14407\tBelt\t6\t29.53\t177.18\t2015-11-19 04:48:36\n759168\tSchaefer Inc\tLoring Predovic\tDU-87462\tShirt\t18\t29.7\t534.6\t2015-10-28 20:24:20\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t14\t70.47\t986.58\t2015-08-23 07:27:41\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTK-29646\tShoes\t5\t45.6\t228\t2016-03-07 11:43:00\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t2\t97.36\t194.72\t2016-03-19 10:47:22\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t5\t76.9\t384.5\t2015-09-16 18:22:57\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tZY-38455\tShirt\t1\t61.25\t61.25\t2015-06-29 08:03:51\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t19\t69.75\t1325.25\t2015-08-20 21:23:33\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t15\t77.73\t1165.95\t2016-03-03 07:11:38\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t4\t73.37\t293.48\t2015-10-07 21:17:54\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t19\t76.67\t1456.73\t2016-03-19 12:51:52\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t19\t26.26\t498.94\t2015-09-29 03:21:48\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t1\t77.8\t77.8\t2015-08-31 16:20:02\n398620\tBrekke Ltd\tEsequiel Schinner\tZY-38455\tShirt\t15\t30.3\t454.5\t2015-11-04 10:41:23\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t16\t61.13\t978.08\t2015-10-27 03:59:40\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t13\t53.28\t692.64\t2015-12-01 01:04:31\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tZY-38455\tShirt\t8\t10.57\t84.56\t2015-12-28 10:04:59\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t3\t50.87\t152.61\t2015-07-12 14:44:20\n453258\tRunolfsson-Bayer\tShannen Hudson\tGP-14407\tBelt\t15\t79.23\t1188.45\t2016-01-26 15:21:44\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t5\t79.88\t399.4\t2016-06-08 03:56:34\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t15\t61.17\t917.55\t2015-08-03 12:30:18\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t5\t91.65\t458.25\t2015-09-22 17:53:59\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t4\t29.21\t116.84\t2016-03-23 11:17:09\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t5\t60.55\t302.75\t2016-06-11 13:12:56\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tZY-38455\tShirt\t3\t85.3\t255.9\t2015-09-17 07:26:56\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t12\t63.28\t759.36\t2015-09-25 04:08:26\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t19\t46.74\t888.06\t2016-03-16 16:05:12\n62592\tO'Keefe-Koch\tShannen Hudson\tDU-87462\tShirt\t11\t94.04\t1034.44\t2016-02-25 00:35:46\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t7\t69.01\t483.07\t2016-01-24 22:28:39\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t12\t50.58\t606.96\t2015-10-07 03:38:18\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t3\t52.79\t158.37\t2015-12-17 17:20:54\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t1\t10.21\t10.21\t2016-03-17 07:07:27\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t18\t82.34\t1482.12\t2015-07-18 00:20:29\n218667\tJaskolski-O'Hara\tTrish Deckow\tNZ-99565\tShirt\t7\t62.52\t437.64\t2015-06-24 16:39:26\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t15\t11.58\t173.7\t2016-01-21 23:11:30\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t20\t27.61\t552.2\t2015-10-22 16:20:10\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t8\t85.56\t684.48\t2015-09-09 03:55:03\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t1\t59.65\t59.65\t2016-01-03 03:17:53\n62592\tO'Keefe-Koch\tShannen Hudson\tHZ-54995\tBelt\t7\t82.86\t580.02\t2015-09-13 01:48:03\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t11\t16.97\t186.67\t2016-01-27 03:59:56\n453258\tRunolfsson-Bayer\tShannen Hudson\tGJ-90272\tShoes\t19\t71.37\t1356.03\t2015-10-06 09:42:52\n759168\tSchaefer Inc\tLoring Predovic\tDU-87462\tShirt\t3\t56.42\t169.26\t2015-08-07 10:12:36\n530925\tPurdy and Sons\tTeagan O'Keefe\tTL-23025\tShoes\t10\t86.97\t869.7\t2015-08-02 18:56:42\n282122\tConnelly, Abshire and Von\tBeth Skiles\tDU-87462\tShirt\t4\t96.17\t384.68\t2016-03-02 16:46:17\n93583\tHegmann-Howell\tEsequiel Schinner\tNZ-99565\tShirt\t18\t17.41\t313.38\t2016-05-06 06:38:11\n280749\tDouglas PLC\tTeagan O'Keefe\tDU-87462\tShirt\t17\t71.27\t1211.59\t2015-09-04 15:54:34\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t3\t68.73\t206.19\t2015-09-10 03:39:56\n887145\tGislason LLC\tLoring Predovic\tGP-14407\tBelt\t4\t19.35\t77.4\t2015-07-02 05:12:52\n93583\tHegmann-Howell\tEsequiel Schinner\tFI-01804\tShirt\t4\t55.93\t223.72\t2015-06-16 17:47:09\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t19\t57.59\t1094.21\t2015-07-12 23:26:50\n62592\tO'Keefe-Koch\tShannen Hudson\tFI-01804\tShirt\t13\t45.98\t597.74\t2015-07-23 09:32:59\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t9\t96.71\t870.39\t2015-08-05 15:14:26\n887145\tGislason LLC\tLoring Predovic\tDU-87462\tShirt\t5\t28.36\t141.8\t2015-12-18 21:13:33\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tDU-87462\tShirt\t3\t61.37\t184.11\t2015-08-30 06:03:27\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGP-14407\tBelt\t12\t55.44\t665.28\t2015-07-28 04:36:44\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t6\t62.54\t375.24\t2015-08-26 04:41:14\n530925\tPurdy and Sons\tTeagan O'Keefe\tTL-23025\tShoes\t3\t87.87\t263.61\t2016-03-30 06:56:02\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tHZ-54995\tBelt\t6\t29.08\t174.48\t2015-11-17 14:10:20\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t16\t12.44\t199.04\t2015-11-28 14:52:21\n887145\tGislason LLC\tLoring Predovic\tDU-87462\tShirt\t12\t62.78\t753.36\t2016-02-01 09:45:39\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t1\t33.52\t33.52\t2015-12-07 21:52:48\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t9\t17.2\t154.8\t2015-09-23 01:11:07\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t12\t63.66\t763.92\t2015-09-26 12:10:43\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t14\t24.89\t348.46\t2016-03-27 05:51:30\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t2\t97.18\t194.36\t2015-11-17 15:15:00\n398620\tBrekke Ltd\tEsequiel Schinner\tTK-29646\tShoes\t10\t74.07\t740.7\t2016-05-30 18:52:27\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGP-14407\tBelt\t15\t14.4\t216\t2015-07-12 12:26:25\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t20\t97.26\t1945.2\t2016-02-17 23:39:23\n759168\tSchaefer Inc\tLoring Predovic\tFI-01804\tShirt\t9\t20.33\t182.97\t2016-04-12 03:25:04\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t6\t98.51\t591.06\t2016-05-06 10:00:11\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t20\t88.09\t1761.8\t2016-04-20 06:37:35\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t9\t31.2\t280.8\t2016-04-19 07:30:54\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t18\t97.83\t1760.94\t2015-09-22 21:18:37\n752312\tWatsica-Pfannerstill\tLoring Predovic\tEO-54210\tShirt\t4\t39.53\t158.12\t2016-01-23 21:18:13\n280749\tDouglas PLC\tTeagan O'Keefe\tFI-01804\tShirt\t5\t63.97\t319.85\t2015-06-26 16:33:59\n680916\tMueller and Sons\tLoring Predovic\tEO-54210\tShirt\t14\t28.79\t403.06\t2015-07-13 06:48:53\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t2\t67.68\t135.36\t2015-08-05 17:10:41\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t5\t70.5\t352.5\t2016-03-21 06:42:49\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t7\t24.96\t174.72\t2015-11-21 07:01:00\n398620\tBrekke Ltd\tEsequiel Schinner\tEO-54210\tShirt\t2\t78.94\t157.88\t2015-10-29 11:34:39\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t15\t49.31\t739.65\t2016-05-07 08:01:47\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t3\t83.84\t251.52\t2015-09-08 04:24:41\n752312\tWatsica-Pfannerstill\tLoring Predovic\tDU-87462\tShirt\t18\t73.45\t1322.1\t2016-03-07 05:05:25\n759168\tSchaefer Inc\tLoring Predovic\tDU-87462\tShirt\t2\t58.01\t116.02\t2015-12-27 14:45:56\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t20\t96.9\t1938\t2015-10-11 11:41:32\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTL-23025\tShoes\t19\t15.52\t294.88\t2016-06-13 14:29:57\n93583\tHegmann-Howell\tEsequiel Schinner\tNZ-99565\tShirt\t11\t12.96\t142.56\t2016-01-16 07:41:52\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t19\t78.44\t1490.36\t2015-08-30 02:48:44\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t11\t67.72\t744.92\t2015-10-31 16:35:11\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tFI-01804\tShirt\t10\t24.64\t246.4\t2016-04-28 10:31:43\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t8\t32.47\t259.76\t2015-09-28 04:23:01\n530925\tPurdy and Sons\tTeagan O'Keefe\tTK-29646\tShoes\t18\t51.12\t920.16\t2016-03-20 15:42:05\n93583\tHegmann-Howell\tEsequiel Schinner\tNZ-99565\tShirt\t2\t68.2\t136.4\t2015-07-16 05:21:32\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t18\t77.45\t1394.1\t2015-06-18 21:36:35\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t18\t89.41\t1609.38\t2015-08-14 02:36:05\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t17\t29.37\t499.29\t2015-09-06 06:32:02\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t20\t53.44\t1068.8\t2015-06-15 17:58:31\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t13\t75.25\t978.25\t2015-08-18 07:55:12\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t3\t65.71\t197.13\t2015-11-08 10:22:05\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t20\t93.1\t1862\t2015-09-04 08:15:17\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t14\t99.93\t1399.02\t2015-10-22 18:30:48\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t4\t31.1\t124.4\t2015-09-21 11:40:14\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t11\t53.05\t583.55\t2015-07-05 05:19:51\n262693\tZiemann-Heidenreich\tLoring Predovic\tZY-38455\tShirt\t4\t66.64\t266.56\t2016-03-06 19:54:10\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t11\t12.88\t141.68\t2015-10-12 04:07:01\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t6\t71.73\t430.38\t2015-11-25 17:31:47\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t11\t11.13\t122.43\t2016-04-29 16:25:24\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t7\t14.92\t104.44\t2016-04-04 08:29:17\n752312\tWatsica-Pfannerstill\tLoring Predovic\tEO-54210\tShirt\t9\t19.42\t174.78\t2015-10-19 11:14:35\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t9\t74.92\t674.28\t2016-02-10 19:49:54\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t8\t54.36\t434.88\t2016-04-13 04:21:15\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t4\t69.53\t278.12\t2015-11-03 16:49:18\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t3\t94.77\t284.31\t2016-04-21 14:31:05\n530925\tPurdy and Sons\tTeagan O'Keefe\tGP-14407\tBelt\t12\t45.29\t543.48\t2016-04-12 00:36:27\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t20\t40.47\t809.4\t2015-06-21 17:37:13\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t2\t52.95\t105.9\t2015-11-23 14:16:18\n251881\tZulauf-Grady\tTeagan O'Keefe\tGP-14407\tBelt\t14\t44.6\t624.4\t2015-06-25 04:18:40\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t14\t14.44\t202.16\t2015-07-23 06:08:02\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t3\t32.77\t98.31\t2016-04-27 03:08:52\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t20\t14.63\t292.6\t2015-12-17 07:03:43\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t12\t83.53\t1002.36\t2015-06-23 15:12:05\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t4\t12.67\t50.68\t2015-09-12 05:43:23\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tHZ-54995\tBelt\t10\t19.69\t196.9\t2015-11-20 09:53:57\n759168\tSchaefer Inc\tLoring Predovic\tFI-01804\tShirt\t18\t23.11\t415.98\t2016-03-27 07:08:14\n752312\tWatsica-Pfannerstill\tLoring Predovic\tFI-01804\tShirt\t13\t66.92\t869.96\t2016-03-23 20:52:56\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t5\t94.8\t474\t2015-09-29 15:36:25\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t5\t46.79\t233.95\t2016-05-09 12:28:35\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t14\t83.31\t1166.34\t2015-08-07 11:50:14\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t8\t16.45\t131.6\t2015-07-28 09:47:29\n93583\tHegmann-Howell\tEsequiel Schinner\tHZ-54995\tBelt\t12\t64.9\t778.8\t2016-03-07 02:36:13\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tHZ-54995\tBelt\t11\t12.84\t141.24\t2016-05-05 18:31:30\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t19\t42.66\t810.54\t2015-07-17 10:13:39\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tHZ-54995\tBelt\t19\t39.89\t757.91\t2015-12-04 23:07:40\n262693\tZiemann-Heidenreich\tLoring Predovic\tGP-14407\tBelt\t7\t44.76\t313.32\t2016-05-14 18:48:22\n453258\tRunolfsson-Bayer\tShannen Hudson\tHZ-54995\tBelt\t17\t84.25\t1432.25\t2016-04-12 06:38:40\n218667\tJaskolski-O'Hara\tTrish Deckow\tTK-29646\tShoes\t12\t77.8\t933.6\t2015-12-29 06:30:23\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t3\t31.77\t95.31\t2015-11-07 07:47:41\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t1\t11.7\t11.7\t2015-10-12 16:53:00\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t8\t91.37\t730.96\t2016-01-24 18:20:03\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t17\t29.9\t508.3\t2015-10-03 14:39:26\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t3\t62.16\t186.48\t2016-01-19 08:53:51\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t17\t46.43\t789.31\t2015-07-25 04:36:40\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t4\t60.65\t242.6\t2016-02-05 13:42:29\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t16\t56.94\t911.04\t2016-05-31 04:11:44\n758030\tKilback-Abernathy\tTrish Deckow\tEO-54210\tShirt\t10\t23.5\t235\t2015-10-10 20:27:25\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTK-29646\tShoes\t8\t92.47\t739.76\t2015-08-28 03:52:06\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t14\t35.97\t503.58\t2015-06-25 12:56:21\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t17\t21.94\t372.98\t2016-02-03 17:01:29\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t10\t49.67\t496.7\t2015-08-12 01:46:43\n759168\tSchaefer Inc\tLoring Predovic\tNZ-99565\tShirt\t16\t31.75\t508\t2016-06-02 03:13:35\n251881\tZulauf-Grady\tTeagan O'Keefe\tZY-38455\tShirt\t11\t64.12\t705.32\t2015-11-03 16:23:28\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t9\t61.07\t549.63\t2015-10-20 22:22:40\n453258\tRunolfsson-Bayer\tShannen Hudson\tNZ-99565\tShirt\t16\t68.65\t1098.4\t2015-10-12 16:13:33\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t3\t77.67\t233.01\t2016-04-23 01:21:58\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t9\t47.19\t424.71\t2016-05-01 02:23:54\n136521\tLabadie and Sons\tEsequiel Schinner\tNZ-99565\tShirt\t8\t69.37\t554.96\t2015-08-17 17:07:53\n759168\tSchaefer Inc\tLoring Predovic\tFI-01804\tShirt\t15\t93.99\t1409.85\t2016-02-12 08:06:58\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t7\t48.06\t336.42\t2015-06-20 23:04:18\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t12\t29.72\t356.64\t2016-03-01 18:43:25\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tNZ-99565\tShirt\t12\t57.1\t685.2\t2016-03-23 10:27:28\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t6\t96.3\t577.8\t2015-11-05 18:29:42\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t1\t88.49\t88.49\t2015-10-17 19:56:53\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t19\t19.35\t367.65\t2015-06-15 15:24:05\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t4\t37.62\t150.48\t2015-07-16 08:18:01\n282122\tConnelly, Abshire and Von\tBeth Skiles\tFI-01804\tShirt\t11\t61.91\t681.01\t2015-10-19 23:58:04\n280749\tDouglas PLC\tTeagan O'Keefe\tDU-87462\tShirt\t1\t46.44\t46.44\t2015-09-11 07:14:00\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tEO-54210\tShirt\t15\t62.27\t934.05\t2016-05-24 02:07:43\n93583\tHegmann-Howell\tEsequiel Schinner\tDU-87462\tShirt\t16\t11.04\t176.64\t2015-09-22 07:24:09\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t6\t73.34\t440.04\t2015-12-08 19:46:18\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tTK-29646\tShoes\t20\t78.89\t1577.8\t2015-08-19 16:10:06\n282122\tConnelly, Abshire and Von\tBeth Skiles\tNZ-99565\tShirt\t11\t37.4\t411.4\t2016-03-22 09:11:04\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t6\t17\t102\t2015-08-10 13:00:07\n251881\tZulauf-Grady\tTeagan O'Keefe\tHZ-54995\tBelt\t10\t20.95\t209.5\t2015-07-12 06:24:40\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t5\t96.59\t482.95\t2015-07-08 19:24:34\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t13\t57.86\t752.18\t2015-11-11 02:45:44\n453258\tRunolfsson-Bayer\tShannen Hudson\tNZ-99565\tShirt\t7\t79.35\t555.45\t2015-07-06 23:08:49\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t8\t18.41\t147.28\t2016-04-19 15:59:07\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t11\t65.69\t722.59\t2016-05-29 12:51:02\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t13\t24.02\t312.26\t2016-04-15 22:07:48\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t13\t47.75\t620.75\t2016-05-21 10:28:06\n887145\tGislason LLC\tLoring Predovic\tGJ-90272\tShoes\t19\t35.04\t665.76\t2016-02-25 18:02:18\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t14\t56.3\t788.2\t2015-11-21 19:14:13\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t1\t56.68\t56.68\t2015-07-23 15:20:34\n453258\tRunolfsson-Bayer\tShannen Hudson\tEO-54210\tShirt\t5\t30.34\t151.7\t2016-04-26 14:56:52\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t19\t66.56\t1264.64\t2015-12-22 11:41:21\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t18\t78.53\t1413.54\t2015-07-22 00:20:15\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t8\t32.15\t257.2\t2015-06-23 14:54:59\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTL-23025\tShoes\t4\t50.64\t202.56\t2015-11-07 12:18:46\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t9\t30.58\t275.22\t2016-05-14 04:16:37\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t8\t52.22\t417.76\t2016-01-23 23:47:15\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t9\t29.43\t264.87\t2016-01-13 11:00:22\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t11\t12\t132\t2015-10-12 10:39:12\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t3\t94.15\t282.45\t2015-12-15 11:30:04\n453258\tRunolfsson-Bayer\tShannen Hudson\tTL-23025\tShoes\t10\t70.72\t707.2\t2015-10-14 10:39:32\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t12\t46.8\t561.6\t2015-08-05 10:19:57\n93583\tHegmann-Howell\tEsequiel Schinner\tTL-23025\tShoes\t7\t40.78\t285.46\t2016-02-03 09:49:07\n887145\tGislason LLC\tLoring Predovic\tGJ-90272\tShoes\t20\t43.4\t868\t2015-11-23 06:26:18\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t3\t93.58\t280.74\t2016-05-25 04:08:43\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t19\t94.1\t1787.9\t2016-03-21 17:28:38\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t19\t62.09\t1179.71\t2015-07-05 04:43:57\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTK-29646\tShoes\t15\t95.91\t1438.65\t2016-06-06 01:21:53\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t17\t95.46\t1622.82\t2015-11-13 11:03:35\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t19\t47.61\t904.59\t2016-02-17 11:05:24\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t2\t85.44\t170.88\t2016-01-01 00:27:00\n262693\tZiemann-Heidenreich\tLoring Predovic\tGP-14407\tBelt\t3\t19.17\t57.51\t2015-10-17 02:55:08\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t3\t80.89\t242.67\t2015-12-30 09:37:26\n251881\tZulauf-Grady\tTeagan O'Keefe\tNZ-99565\tShirt\t10\t86.2\t862\t2016-05-08 14:59:01\n453258\tRunolfsson-Bayer\tShannen Hudson\tZY-38455\tShirt\t17\t29.59\t503.03\t2015-10-04 12:03:52\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t1\t51.66\t51.66\t2016-02-21 05:07:18\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t2\t99.24\t198.48\t2015-11-21 12:06:54\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t2\t50.61\t101.22\t2016-02-01 22:51:35\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t9\t83.67\t753.03\t2016-04-08 05:56:01\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t16\t24.06\t384.96\t2016-05-07 22:06:41\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t6\t12.65\t75.9\t2015-07-15 08:20:02\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t12\t91.15\t1093.8\t2015-08-12 19:27:27\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tEO-54210\tShirt\t18\t59.99\t1079.82\t2016-01-17 02:48:25\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t18\t20.1\t361.8\t2015-08-20 00:46:35\n251881\tZulauf-Grady\tTeagan O'Keefe\tGP-14407\tBelt\t20\t69.61\t1392.2\t2016-03-20 03:10:05\n136521\tLabadie and Sons\tEsequiel Schinner\tGP-14407\tBelt\t7\t83.01\t581.07\t2015-07-30 13:14:31\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t15\t38.26\t573.9\t2016-03-05 10:54:48\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t16\t96.67\t1546.72\t2015-11-13 08:59:59\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tFI-01804\tShirt\t2\t53.63\t107.26\t2016-03-09 05:03:29\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tHZ-54995\tBelt\t17\t29.93\t508.81\t2016-03-21 03:05:25\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t9\t62.45\t562.05\t2016-06-14 02:31:06\n887145\tGislason LLC\tLoring Predovic\tGJ-90272\tShoes\t8\t40.73\t325.84\t2015-08-07 09:25:06\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t17\t70.95\t1206.15\t2015-11-15 02:03:01\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t17\t55.09\t936.53\t2015-06-25 13:14:00\n62592\tO'Keefe-Koch\tShannen Hudson\tGJ-90272\tShoes\t9\t19.34\t174.06\t2015-08-14 07:37:49\n752312\tWatsica-Pfannerstill\tLoring Predovic\tGJ-90272\tShoes\t16\t34.07\t545.12\t2015-11-25 06:52:33\n62592\tO'Keefe-Koch\tShannen Hudson\tDU-87462\tShirt\t9\t95.4\t858.6\t2015-06-15 16:13:54\n530925\tPurdy and Sons\tTeagan O'Keefe\tGP-14407\tBelt\t11\t65.51\t720.61\t2016-05-26 22:37:49\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t20\t64.87\t1297.4\t2015-11-02 02:26:07\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tNZ-99565\tShirt\t19\t47.41\t900.79\t2015-11-12 04:41:55\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t3\t66.27\t198.81\t2016-03-05 01:04:10\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t9\t25.92\t233.28\t2016-05-09 23:58:05\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t8\t70.95\t567.6\t2016-04-30 10:36:52\n453258\tRunolfsson-Bayer\tShannen Hudson\tGP-14407\tBelt\t19\t55.75\t1059.25\t2016-05-23 21:39:18\n758030\tKilback-Abernathy\tTrish Deckow\tFI-01804\tShirt\t15\t70.02\t1050.3\t2016-04-25 09:15:35\n262693\tZiemann-Heidenreich\tLoring Predovic\tDU-87462\tShirt\t16\t29.57\t473.12\t2015-11-10 00:13:42\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t2\t36.25\t72.5\t2015-10-11 04:08:05\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t9\t47.83\t430.47\t2015-07-02 00:19:02\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t12\t57.35\t688.2\t2016-02-28 07:41:11\n759168\tSchaefer Inc\tLoring Predovic\tFI-01804\tShirt\t17\t77.26\t1313.42\t2015-07-31 16:28:54\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t9\t20.3\t182.7\t2015-09-14 09:27:19\n136521\tLabadie and Sons\tEsequiel Schinner\tNZ-99565\tShirt\t16\t18.27\t292.32\t2015-10-17 02:47:41\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t19\t69.87\t1327.53\t2015-06-30 07:06:17\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t2\t39.65\t79.3\t2016-01-05 18:06:00\n218667\tJaskolski-O'Hara\tTrish Deckow\tDU-87462\tShirt\t11\t60.13\t661.43\t2015-10-10 13:00:55\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t13\t36.53\t474.89\t2015-08-12 20:30:08\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t13\t99.73\t1296.49\t2015-07-29 17:08:00\n262693\tZiemann-Heidenreich\tLoring Predovic\tTL-23025\tShoes\t20\t76.61\t1532.2\t2015-10-29 00:43:01\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t19\t48.05\t912.95\t2015-08-13 04:45:55\n136521\tLabadie and Sons\tEsequiel Schinner\tGP-14407\tBelt\t17\t96.53\t1641.01\t2015-11-02 16:23:31\n680916\tMueller and Sons\tLoring Predovic\tZY-38455\tShirt\t13\t23.92\t310.96\t2015-07-25 09:42:53\n251881\tZulauf-Grady\tTeagan O'Keefe\tEO-54210\tShirt\t12\t38.32\t459.84\t2016-01-08 17:05:36\n282122\tConnelly, Abshire and Von\tBeth Skiles\tZY-38455\tShirt\t9\t83.62\t752.58\t2015-12-06 05:13:28\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t13\t94.31\t1226.03\t2016-02-19 08:00:23\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t2\t98.89\t197.78\t2016-04-08 17:58:31\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t20\t85.22\t1704.4\t2015-07-18 23:36:44\n218667\tJaskolski-O'Hara\tTrish Deckow\tHZ-54995\tBelt\t11\t17.48\t192.28\t2016-01-07 00:47:35\n280749\tDouglas PLC\tTeagan O'Keefe\tZY-38455\tShirt\t14\t48.82\t683.48\t2015-06-18 06:39:25\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t5\t67.48\t337.4\t2015-12-29 06:44:00\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t14\t46.65\t653.1\t2016-06-07 17:06:08\n680916\tMueller and Sons\tLoring Predovic\tZY-38455\tShirt\t9\t22.92\t206.28\t2015-06-30 14:54:36\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t4\t34.52\t138.08\t2016-03-11 12:59:52\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t2\t92.93\t185.86\t2015-11-29 09:17:39\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t10\t33.4\t334\t2015-10-17 13:50:42\n93583\tHegmann-Howell\tEsequiel Schinner\tDU-87462\tShirt\t14\t99.83\t1397.62\t2016-05-25 18:21:41\n93583\tHegmann-Howell\tEsequiel Schinner\tDU-87462\tShirt\t1\t72.58\t72.58\t2015-08-18 11:48:21\n887145\tGislason LLC\tLoring Predovic\tTK-29646\tShoes\t10\t30.56\t305.6\t2016-02-14 05:49:47\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t12\t25.31\t303.72\t2016-04-09 00:33:12\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t17\t27.23\t462.91\t2015-10-24 22:20:55\n262693\tZiemann-Heidenreich\tLoring Predovic\tHZ-54995\tBelt\t19\t79.14\t1503.66\t2016-05-18 18:17:53\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t19\t62.79\t1193.01\t2016-06-02 13:42:25\n280749\tDouglas PLC\tTeagan O'Keefe\tZY-38455\tShirt\t12\t95.27\t1143.24\t2015-11-22 01:48:46\n680916\tMueller and Sons\tLoring Predovic\tHZ-54995\tBelt\t1\t46.62\t46.62\t2016-01-19 13:12:44\n262693\tZiemann-Heidenreich\tLoring Predovic\tFI-01804\tShirt\t13\t99.17\t1289.21\t2015-11-26 03:30:51\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t19\t99.87\t1897.53\t2015-10-10 10:49:09\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t9\t58.58\t527.22\t2016-03-04 19:14:45\n280749\tDouglas PLC\tTeagan O'Keefe\tZY-38455\tShirt\t20\t32.17\t643.4\t2016-05-02 23:46:07\n398620\tBrekke Ltd\tEsequiel Schinner\tZY-38455\tShirt\t2\t93.65\t187.3\t2015-07-19 06:40:33\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t19\t98.14\t1864.66\t2015-12-30 01:52:53\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t12\t13.65\t163.8\t2015-08-15 00:14:22\n280749\tDouglas PLC\tTeagan O'Keefe\tDU-87462\tShirt\t20\t86.47\t1729.4\t2015-07-19 22:11:06\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t3\t14.71\t44.13\t2016-06-01 10:45:04\n398620\tBrekke Ltd\tEsequiel Schinner\tFI-01804\tShirt\t1\t94.84\t94.84\t2015-12-08 11:59:46\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t15\t79.89\t1198.35\t2015-12-27 12:44:01\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t12\t34.03\t408.36\t2015-06-27 12:46:39\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t12\t31.74\t380.88\t2015-12-17 14:13:57\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t18\t84.95\t1529.1\t2016-06-14 09:41:30\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGP-14407\tBelt\t14\t44.95\t629.3\t2016-05-31 22:50:13\n218667\tJaskolski-O'Hara\tTrish Deckow\tTL-23025\tShoes\t1\t35.47\t35.47\t2015-11-15 03:26:28\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t19\t57.77\t1097.63\t2015-10-01 05:23:55\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t10\t57.4\t574\t2016-02-02 15:10:37\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t4\t76.6\t306.4\t2015-07-28 14:21:04\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t15\t15.35\t230.25\t2016-06-07 05:59:20\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t19\t56.79\t1079.01\t2016-02-20 12:42:57\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t4\t69.97\t279.88\t2015-07-07 05:23:37\n759168\tSchaefer Inc\tLoring Predovic\tGP-14407\tBelt\t12\t84.2\t1010.4\t2016-04-04 21:08:12\n759168\tSchaefer Inc\tLoring Predovic\tTK-29646\tShoes\t2\t33.2\t66.4\t2015-07-16 19:46:08\n251881\tZulauf-Grady\tTeagan O'Keefe\tGP-14407\tBelt\t18\t66.29\t1193.22\t2015-08-11 08:41:46\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t17\t81.93\t1392.81\t2016-03-14 08:25:26\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t18\t28.91\t520.38\t2015-12-09 07:21:52\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t9\t24.46\t220.14\t2015-09-12 04:33:24\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t4\t28.81\t115.24\t2016-06-06 09:25:28\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t5\t73.18\t365.9\t2015-12-22 02:05:33\n759168\tSchaefer Inc\tLoring Predovic\tHZ-54995\tBelt\t16\t20.59\t329.44\t2016-02-24 19:11:17\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGP-14407\tBelt\t19\t91.91\t1746.29\t2016-01-29 11:13:03\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t14\t25.1\t351.4\t2015-12-17 05:51:15\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t19\t61.67\t1171.73\t2015-06-22 23:35:03\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t16\t63.91\t1022.56\t2016-04-11 21:30:05\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t13\t61.78\t803.14\t2016-04-22 12:50:40\n398620\tBrekke Ltd\tEsequiel Schinner\tNZ-99565\tShirt\t5\t88.95\t444.75\t2015-10-13 02:33:54\n251881\tZulauf-Grady\tTeagan O'Keefe\tGJ-90272\tShoes\t10\t72.48\t724.8\t2015-10-18 05:38:41\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t3\t71.89\t215.67\t2016-01-26 05:56:16\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t16\t73.01\t1168.16\t2015-12-06 12:48:43\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t12\t72\t864\t2015-11-19 22:39:27\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t5\t52.86\t264.3\t2016-02-26 12:10:45\n62592\tO'Keefe-Koch\tShannen Hudson\tHZ-54995\tBelt\t5\t89.58\t447.9\t2015-08-12 01:35:24\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t7\t11.85\t82.95\t2015-07-14 00:35:05\n262693\tZiemann-Heidenreich\tLoring Predovic\tNZ-99565\tShirt\t10\t81.84\t818.4\t2015-12-20 00:23:51\n262693\tZiemann-Heidenreich\tLoring Predovic\tTK-29646\tShoes\t14\t59.56\t833.84\t2016-04-03 06:16:34\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t17\t74.02\t1258.34\t2016-05-10 07:12:36\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t17\t37.19\t632.23\t2015-09-29 19:52:00\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t14\t97.91\t1370.74\t2016-05-06 10:34:45\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t7\t31.96\t223.72\t2016-03-29 21:32:14\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTK-29646\tShoes\t5\t16.63\t83.15\t2015-10-04 23:30:14\n136521\tLabadie and Sons\tEsequiel Schinner\tDU-87462\tShirt\t16\t52.96\t847.36\t2015-12-08 13:11:56\n453258\tRunolfsson-Bayer\tShannen Hudson\tFI-01804\tShirt\t7\t12.58\t88.06\t2016-01-28 02:06:26\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t17\t67.32\t1144.44\t2016-05-26 13:00:14\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tDU-87462\tShirt\t12\t42.7\t512.4\t2016-05-08 06:27:36\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t4\t49.51\t198.04\t2016-02-21 08:21:11\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t16\t70.63\t1130.08\t2016-03-30 14:00:03\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t10\t21.84\t218.4\t2016-03-31 21:49:31\n282122\tConnelly, Abshire and Von\tBeth Skiles\tNZ-99565\tShirt\t7\t44.56\t311.92\t2016-02-02 15:39:41\n93583\tHegmann-Howell\tEsequiel Schinner\tGJ-90272\tShoes\t6\t83.25\t499.5\t2015-11-03 09:49:54\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGP-14407\tBelt\t8\t10.98\t87.84\t2015-10-03 22:16:08\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t9\t53.13\t478.17\t2015-08-03 22:05:32\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t18\t97.49\t1754.82\t2015-08-15 06:11:14\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t15\t23.97\t359.55\t2016-05-31 00:27:04\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t14\t29.93\t419.02\t2016-05-17 03:07:38\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tHZ-54995\tBelt\t3\t98.91\t296.73\t2016-01-19 16:06:30\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t12\t22.27\t267.24\t2015-10-20 12:04:38\n759168\tSchaefer Inc\tLoring Predovic\tTL-23025\tShoes\t1\t59.26\t59.26\t2015-07-08 23:54:04\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t1\t69.31\t69.31\t2016-06-03 21:52:57\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t4\t77.6\t310.4\t2016-04-29 02:43:57\n262693\tZiemann-Heidenreich\tLoring Predovic\tZY-38455\tShirt\t5\t66.78\t333.9\t2015-10-19 06:14:48\n680916\tMueller and Sons\tLoring Predovic\tEO-54210\tShirt\t1\t28.03\t28.03\t2016-03-31 16:58:00\n62592\tO'Keefe-Koch\tShannen Hudson\tFI-01804\tShirt\t1\t52.37\t52.37\t2016-04-11 22:57:14\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t19\t46.62\t885.78\t2016-01-18 02:57:40\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t15\t47.06\t705.9\t2015-08-14 23:39:39\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t1\t11.35\t11.35\t2015-08-10 03:09:17\n218667\tJaskolski-O'Hara\tTrish Deckow\tGP-14407\tBelt\t12\t26.39\t316.68\t2015-08-27 07:38:04\n680916\tMueller and Sons\tLoring Predovic\tNZ-99565\tShirt\t6\t15.69\t94.14\t2016-06-12 19:47:43\n62592\tO'Keefe-Koch\tShannen Hudson\tGJ-90272\tShoes\t16\t69.18\t1106.88\t2016-03-13 00:51:07\n398620\tBrekke Ltd\tEsequiel Schinner\tGP-14407\tBelt\t13\t55.91\t726.83\t2015-10-16 12:59:45\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t12\t84.83\t1017.96\t2016-06-08 19:07:52\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t8\t76.19\t609.52\t2016-01-26 18:39:00\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t2\t73.12\t146.24\t2015-08-06 03:08:55\n752312\tWatsica-Pfannerstill\tLoring Predovic\tZY-38455\tShirt\t13\t65.42\t850.46\t2015-12-21 07:24:44\n453258\tRunolfsson-Bayer\tShannen Hudson\tZY-38455\tShirt\t3\t41.76\t125.28\t2015-06-27 12:46:27\n280749\tDouglas PLC\tTeagan O'Keefe\tEO-54210\tShirt\t12\t13.58\t162.96\t2015-08-29 07:58:08\n136521\tLabadie and Sons\tEsequiel Schinner\tGJ-90272\tShoes\t18\t78.19\t1407.42\t2016-01-19 10:04:44\n282122\tConnelly, Abshire and Von\tBeth Skiles\tGJ-90272\tShoes\t6\t55.01\t330.06\t2015-10-09 13:09:37\n62592\tO'Keefe-Koch\tShannen Hudson\tZY-38455\tShirt\t14\t36.47\t510.58\t2015-07-28 09:01:16\n759168\tSchaefer Inc\tLoring Predovic\tNZ-99565\tShirt\t7\t63.18\t442.26\t2015-09-25 18:56:53\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t19\t43\t817\t2016-03-28 02:57:09\n887145\tGislason LLC\tLoring Predovic\tGJ-90272\tShoes\t3\t67.59\t202.77\t2015-07-13 08:54:37\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t2\t28.99\t57.98\t2015-07-03 11:01:40\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t8\t65.3\t522.4\t2015-08-01 18:46:14\n62592\tO'Keefe-Koch\tShannen Hudson\tFI-01804\tShirt\t10\t79.44\t794.4\t2015-07-27 20:58:05\n262693\tZiemann-Heidenreich\tLoring Predovic\tNZ-99565\tShirt\t16\t65.48\t1047.68\t2015-07-11 10:10:34\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t2\t60.09\t120.18\t2016-03-10 13:41:05\n62592\tO'Keefe-Koch\tShannen Hudson\tGJ-90272\tShoes\t8\t87.92\t703.36\t2015-06-30 21:27:57\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tTL-23025\tShoes\t18\t80.5\t1449\t2016-01-20 04:43:57\n752312\tWatsica-Pfannerstill\tLoring Predovic\tEO-54210\tShirt\t1\t88.6\t88.6\t2015-10-21 10:05:59\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tHZ-54995\tBelt\t9\t24.72\t222.48\t2016-03-18 13:28:48\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t15\t58.91\t883.65\t2015-09-15 14:41:40\n282122\tConnelly, Abshire and Von\tBeth Skiles\tDU-87462\tShirt\t1\t80.35\t80.35\t2015-10-19 21:49:18\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t10\t92.51\t925.1\t2016-05-19 21:13:58\n759168\tSchaefer Inc\tLoring Predovic\tEO-54210\tShirt\t5\t70.3\t351.5\t2015-10-04 09:17:45\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t14\t37.05\t518.7\t2015-12-24 14:18:43\n93583\tHegmann-Howell\tEsequiel Schinner\tTK-29646\tShoes\t12\t48.35\t580.2\t2016-03-10 07:03:16\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t8\t44.48\t355.84\t2015-10-10 22:12:29\n530925\tPurdy and Sons\tTeagan O'Keefe\tNZ-99565\tShirt\t10\t83.23\t832.3\t2015-06-22 17:47:17\n453258\tRunolfsson-Bayer\tShannen Hudson\tGJ-90272\tShoes\t16\t64.55\t1032.8\t2015-08-12 07:30:32\n530925\tPurdy and Sons\tTeagan O'Keefe\tEO-54210\tShirt\t13\t76.16\t990.08\t2016-01-23 04:58:24\n218667\tJaskolski-O'Hara\tTrish Deckow\tFI-01804\tShirt\t7\t81.63\t571.41\t2016-02-03 11:48:32\n280749\tDouglas PLC\tTeagan O'Keefe\tHZ-54995\tBelt\t19\t76.27\t1449.13\t2015-08-23 19:32:06\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t11\t10.23\t112.53\t2015-07-02 01:12:03\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tTL-23025\tShoes\t2\t22.19\t44.38\t2015-12-15 15:01:48\n752312\tWatsica-Pfannerstill\tLoring Predovic\tFI-01804\tShirt\t2\t70.45\t140.9\t2016-04-16 19:14:06\n530925\tPurdy and Sons\tTeagan O'Keefe\tZY-38455\tShirt\t15\t87.01\t1305.15\t2015-07-31 09:20:30\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t19\t58.81\t1117.39\t2016-01-08 08:12:34\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t17\t25.75\t437.75\t2016-01-31 16:45:40\n530925\tPurdy and Sons\tTeagan O'Keefe\tTL-23025\tShoes\t3\t23.86\t71.58\t2016-06-06 21:59:05\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t18\t42.51\t765.18\t2015-12-27 03:00:44\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t16\t60.56\t968.96\t2015-10-01 15:32:08\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tDU-87462\tShirt\t18\t29.35\t528.3\t2016-05-16 11:43:57\n758030\tKilback-Abernathy\tTrish Deckow\tTL-23025\tShoes\t9\t57.66\t518.94\t2015-12-11 15:26:15\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tFI-01804\tShirt\t6\t74.03\t444.18\t2016-03-26 00:48:29\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t19\t12.42\t235.98\t2016-02-17 21:33:21\n262693\tZiemann-Heidenreich\tLoring Predovic\tNZ-99565\tShirt\t11\t98.56\t1084.16\t2015-09-27 16:34:10\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tHZ-54995\tBelt\t17\t54.3\t923.1\t2015-09-11 23:10:23\n282122\tConnelly, Abshire and Von\tBeth Skiles\tHZ-54995\tBelt\t13\t12.3\t159.9\t2015-11-13 13:50:23\n752312\tWatsica-Pfannerstill\tLoring Predovic\tEO-54210\tShirt\t8\t53.01\t424.08\t2016-04-11 10:02:27\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tHZ-54995\tBelt\t5\t83.9\t419.5\t2015-07-01 04:37:01\n136521\tLabadie and Sons\tEsequiel Schinner\tDU-87462\tShirt\t17\t70.44\t1197.48\t2015-12-05 00:59:07\n251881\tZulauf-Grady\tTeagan O'Keefe\tTK-29646\tShoes\t3\t33.05\t99.15\t2015-11-18 00:43:03\n758030\tKilback-Abernathy\tTrish Deckow\tGP-14407\tBelt\t14\t21.23\t297.22\t2016-02-15 16:34:36\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t5\t88.26\t441.3\t2015-09-18 23:32:07\n398620\tBrekke Ltd\tEsequiel Schinner\tDU-87462\tShirt\t19\t94.79\t1801.01\t2015-08-05 22:16:25\n752312\tWatsica-Pfannerstill\tLoring Predovic\tEO-54210\tShirt\t5\t58.9\t294.5\t2016-05-12 05:08:06\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t8\t31.13\t249.04\t2016-05-15 02:25:47\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t11\t75.62\t831.82\t2015-06-22 11:58:37\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t5\t38.62\t193.1\t2015-11-26 08:20:58\n93583\tHegmann-Howell\tEsequiel Schinner\tDU-87462\tShirt\t16\t35.27\t564.32\t2016-04-24 05:51:38\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t15\t90.93\t1363.95\t2015-06-29 11:02:10\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t19\t81.56\t1549.64\t2015-11-25 04:06:09\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t1\t46.75\t46.75\t2016-03-24 14:00:51\n752312\tWatsica-Pfannerstill\tLoring Predovic\tFI-01804\tShirt\t8\t18.03\t144.24\t2015-06-17 13:21:25\n759168\tSchaefer Inc\tLoring Predovic\tEO-54210\tShirt\t13\t24.67\t320.71\t2015-08-11 19:17:48\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t1\t58.76\t58.76\t2015-11-20 20:19:58\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t20\t29.32\t586.4\t2015-08-14 23:14:27\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t20\t81.73\t1634.6\t2015-09-11 04:43:21\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t8\t79.6\t636.8\t2015-06-28 20:47:20\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGJ-90272\tShoes\t7\t42.89\t300.23\t2015-12-04 16:48:06\n759168\tSchaefer Inc\tLoring Predovic\tDU-87462\tShirt\t8\t59.45\t475.6\t2016-06-04 10:01:09\n62592\tO'Keefe-Koch\tShannen Hudson\tEO-54210\tShirt\t7\t54.74\t383.18\t2015-12-31 14:59:30\n218667\tJaskolski-O'Hara\tTrish Deckow\tTL-23025\tShoes\t14\t53.3\t746.2\t2015-12-17 03:07:10\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t8\t26.97\t215.76\t2016-03-28 20:38:54\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t14\t44.57\t623.98\t2015-07-18 09:11:49\n62592\tO'Keefe-Koch\tShannen Hudson\tHZ-54995\tBelt\t7\t69.31\t485.17\t2015-09-28 15:03:22\n680916\tMueller and Sons\tLoring Predovic\tGP-14407\tBelt\t8\t30.35\t242.8\t2015-09-25 08:19:14\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tFI-01804\tShirt\t11\t55.66\t612.26\t2015-10-30 16:45:48\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t9\t56.4\t507.6\t2015-08-10 03:13:01\n453258\tRunolfsson-Bayer\tShannen Hudson\tGP-14407\tBelt\t10\t92.31\t923.1\t2015-09-22 13:31:48\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tFI-01804\tShirt\t9\t60.69\t546.21\t2015-07-22 02:15:29\n62592\tO'Keefe-Koch\tShannen Hudson\tFI-01804\tShirt\t8\t98.58\t788.64\t2016-04-16 03:43:49\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tZY-38455\tShirt\t19\t38.76\t736.44\t2015-06-27 12:21:52\n680916\tMueller and Sons\tLoring Predovic\tZY-38455\tShirt\t19\t42.58\t809.02\t2016-02-10 11:04:31\n887145\tGislason LLC\tLoring Predovic\tGJ-90272\tShoes\t19\t52.07\t989.33\t2015-12-22 08:11:09\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t12\t45.25\t543\t2015-08-24 19:44:22\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tGJ-90272\tShoes\t20\t93.67\t1873.4\t2016-04-24 11:05:11\n93583\tHegmann-Howell\tEsequiel Schinner\tNZ-99565\tShirt\t3\t57.51\t172.53\t2016-01-03 09:43:55\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t7\t54.34\t380.38\t2016-01-22 09:37:00\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t6\t73.18\t439.08\t2015-11-26 04:33:54\n280749\tDouglas PLC\tTeagan O'Keefe\tGP-14407\tBelt\t9\t29.94\t269.46\t2015-07-29 23:34:01\n758030\tKilback-Abernathy\tTrish Deckow\tNZ-99565\tShirt\t16\t65.97\t1055.52\t2016-05-31 11:12:55\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGP-14407\tBelt\t2\t21.3\t42.6\t2016-03-06 18:33:01\n251881\tZulauf-Grady\tTeagan O'Keefe\tDU-87462\tShirt\t4\t74.59\t298.36\t2016-01-08 10:44:07\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t8\t11.73\t93.84\t2016-06-12 04:31:13\n280749\tDouglas PLC\tTeagan O'Keefe\tTL-23025\tShoes\t18\t95.05\t1710.9\t2015-07-22 19:05:21\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tDU-87462\tShirt\t12\t20.12\t241.44\t2015-07-27 10:15:02\n759168\tSchaefer Inc\tLoring Predovic\tTL-23025\tShoes\t5\t24.72\t123.6\t2016-04-02 14:06:21\n62592\tO'Keefe-Koch\tShannen Hudson\tDU-87462\tShirt\t12\t61.21\t734.52\t2015-09-09 12:15:15\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTL-23025\tShoes\t18\t14.36\t258.48\t2015-12-22 19:02:00\n398620\tBrekke Ltd\tEsequiel Schinner\tTL-23025\tShoes\t20\t43.83\t876.6\t2015-09-22 16:09:18\n759168\tSchaefer Inc\tLoring Predovic\tGJ-90272\tShoes\t3\t63.75\t191.25\t2015-06-19 19:47:22\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGP-14407\tBelt\t15\t13.77\t206.55\t2015-06-19 10:54:34\n280749\tDouglas PLC\tTeagan O'Keefe\tNZ-99565\tShirt\t11\t66.18\t727.98\t2016-02-01 11:46:35\n680916\tMueller and Sons\tLoring Predovic\tEO-54210\tShirt\t3\t18.49\t55.47\t2016-04-20 20:43:28\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tZY-38455\tShirt\t16\t48.13\t770.08\t2015-07-03 10:25:56\n280749\tDouglas PLC\tTeagan O'Keefe\tTK-29646\tShoes\t2\t81.71\t163.42\t2016-05-29 04:46:06\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t14\t10.9\t152.6\t2015-09-10 09:35:26\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t17\t43.15\t733.55\t2015-07-30 15:15:07\n680916\tMueller and Sons\tLoring Predovic\tDU-87462\tShirt\t13\t57.05\t741.65\t2015-12-22 03:16:17\n62592\tO'Keefe-Koch\tShannen Hudson\tFI-01804\tShirt\t15\t74.01\t1110.15\t2016-04-21 00:07:39\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t16\t42.66\t682.56\t2016-05-14 22:37:23\n759168\tSchaefer Inc\tLoring Predovic\tZY-38455\tShirt\t6\t81.65\t489.9\t2016-05-31 09:30:24\n280749\tDouglas PLC\tTeagan O'Keefe\tZY-38455\tShirt\t10\t34.03\t340.3\t2016-01-19 21:09:25\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t18\t89.18\t1605.24\t2015-09-23 01:35:44\n62592\tO'Keefe-Koch\tShannen Hudson\tFI-01804\tShirt\t17\t81.97\t1393.49\t2015-09-12 16:51:39\n282122\tConnelly, Abshire and Von\tBeth Skiles\tTK-29646\tShoes\t12\t94.86\t1138.32\t2016-02-19 06:48:15\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTK-29646\tShoes\t9\t83.38\t750.42\t2016-03-14 05:30:27\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tEO-54210\tShirt\t11\t25.09\t275.99\t2016-02-02 07:25:55\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t3\t90.02\t270.06\t2015-12-10 22:11:22\n280749\tDouglas PLC\tTeagan O'Keefe\tGJ-90272\tShoes\t3\t92.27\t276.81\t2015-06-23 05:00:05\n62592\tO'Keefe-Koch\tShannen Hudson\tNZ-99565\tShirt\t5\t33.29\t166.45\t2015-11-29 02:54:10\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tEO-54210\tShirt\t12\t99.92\t1199.04\t2016-01-18 21:39:45\n93583\tHegmann-Howell\tEsequiel Schinner\tHZ-54995\tBelt\t8\t97.9\t783.2\t2015-08-09 03:30:43\n752312\tWatsica-Pfannerstill\tLoring Predovic\tTL-23025\tShoes\t4\t11.84\t47.36\t2016-06-08 11:29:06\n758030\tKilback-Abernathy\tTrish Deckow\tNZ-99565\tShirt\t2\t92.25\t184.5\t2016-04-27 05:33:43\n887145\tGislason LLC\tLoring Predovic\tEO-54210\tShirt\t15\t88.05\t1320.75\t2015-06-27 20:31:20\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tGJ-90272\tShoes\t3\t72.66\t217.98\t2015-07-17 10:21:51\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTL-23025\tShoes\t1\t29.33\t29.33\t2015-09-12 01:35:23\n218667\tJaskolski-O'Hara\tTrish Deckow\tNZ-99565\tShirt\t2\t85.75\t171.5\t2016-01-29 03:09:46\n218667\tJaskolski-O'Hara\tTrish Deckow\tEO-54210\tShirt\t8\t85.19\t681.52\t2015-07-31 12:40:26\n680916\tMueller and Sons\tLoring Predovic\tHZ-54995\tBelt\t1\t84.55\t84.55\t2016-01-13 18:23:08\n759168\tSchaefer Inc\tLoring Predovic\tNZ-99565\tShirt\t19\t11.6\t220.4\t2016-02-01 02:23:24\n453258\tRunolfsson-Bayer\tShannen Hudson\tDU-87462\tShirt\t9\t89.49\t805.41\t2015-11-21 07:07:41\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t2\t88.64\t177.28\t2015-10-16 23:24:09\n758030\tKilback-Abernathy\tTrish Deckow\tHZ-54995\tBelt\t19\t49.62\t942.78\t2016-01-02 22:18:19\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tDU-87462\tShirt\t5\t66.07\t330.35\t2015-08-27 13:38:11\n136521\tLabadie and Sons\tEsequiel Schinner\tDU-87462\tShirt\t9\t10.18\t91.62\t2015-09-03 18:27:31\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGP-14407\tBelt\t12\t33.31\t399.72\t2015-08-07 12:12:11\n758030\tKilback-Abernathy\tTrish Deckow\tZY-38455\tShirt\t17\t80.77\t1373.09\t2015-10-18 01:47:14\n282122\tConnelly, Abshire and Von\tBeth Skiles\tEO-54210\tShirt\t3\t96.93\t290.79\t2016-03-16 14:09:31\n218667\tJaskolski-O'Hara\tTrish Deckow\tEO-54210\tShirt\t1\t25.52\t25.52\t2016-03-21 00:40:24\n218667\tJaskolski-O'Hara\tTrish Deckow\tTK-29646\tShoes\t13\t37.61\t488.93\t2016-04-13 01:17:01\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t13\t66.82\t868.66\t2015-12-04 20:48:54\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tFI-01804\tShirt\t9\t20.85\t187.65\t2015-11-21 03:57:23\n136521\tLabadie and Sons\tEsequiel Schinner\tTK-29646\tShoes\t4\t21.85\t87.4\t2015-10-25 08:17:15\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t11\t35.41\t389.51\t2015-12-16 19:41:26\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tNZ-99565\tShirt\t16\t89.22\t1427.52\t2016-04-29 10:06:43\n887145\tGislason LLC\tLoring Predovic\tNZ-99565\tShirt\t3\t47.54\t142.62\t2016-05-20 22:50:19\n62592\tO'Keefe-Koch\tShannen Hudson\tDU-87462\tShirt\t11\t63.24\t695.64\t2016-05-30 05:24:41\n136521\tLabadie and Sons\tEsequiel Schinner\tNZ-99565\tShirt\t18\t50.97\t917.46\t2015-07-24 16:33:22\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t9\t27.16\t244.44\t2016-03-01 10:18:06\n530925\tPurdy and Sons\tTeagan O'Keefe\tTK-29646\tShoes\t5\t41\t205\t2016-03-29 02:55:58\n398620\tBrekke Ltd\tEsequiel Schinner\tZY-38455\tShirt\t6\t69.22\t415.32\t2016-05-29 23:02:03\n62592\tO'Keefe-Koch\tShannen Hudson\tDU-87462\tShirt\t13\t86.03\t1118.39\t2015-11-21 00:48:18\n136521\tLabadie and Sons\tEsequiel Schinner\tZY-38455\tShirt\t20\t14.71\t294.2\t2016-01-15 21:05:37\n398620\tBrekke Ltd\tEsequiel Schinner\tGJ-90272\tShoes\t18\t27.83\t500.94\t2016-02-29 11:37:51\n136521\tLabadie and Sons\tEsequiel Schinner\tGP-14407\tBelt\t10\t70.39\t703.9\t2015-09-24 12:08:14\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t10\t13.96\t139.6\t2015-12-21 08:55:15\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t9\t17.17\t154.53\t2015-07-11 23:55:48\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t9\t93.05\t837.45\t2016-03-10 07:03:27\n758030\tKilback-Abernathy\tTrish Deckow\tTK-29646\tShoes\t6\t40.64\t243.84\t2015-07-14 21:52:12\n93583\tHegmann-Howell\tEsequiel Schinner\tGJ-90272\tShoes\t3\t38.07\t114.21\t2015-08-03 03:44:35\n218667\tJaskolski-O'Hara\tTrish Deckow\tZY-38455\tShirt\t5\t71.26\t356.3\t2015-12-27 22:16:08\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t15\t42.57\t638.55\t2015-11-19 05:49:45\n759168\tSchaefer Inc\tLoring Predovic\tTK-29646\tShoes\t12\t39.34\t472.08\t2015-07-08 08:57:06\n680916\tMueller and Sons\tLoring Predovic\tZY-38455\tShirt\t11\t72.81\t800.91\t2015-10-28 06:20:25\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t5\t14.09\t70.45\t2016-04-09 02:52:30\n282122\tConnelly, Abshire and Von\tBeth Skiles\tZY-38455\tShirt\t19\t33.73\t640.87\t2015-10-05 20:08:50\n530925\tPurdy and Sons\tTeagan O'Keefe\tTK-29646\tShoes\t13\t75.97\t987.61\t2015-10-13 08:56:20\n62592\tO'Keefe-Koch\tShannen Hudson\tTL-23025\tShoes\t2\t18.26\t36.52\t2015-10-05 09:30:52\n93583\tHegmann-Howell\tEsequiel Schinner\tGJ-90272\tShoes\t10\t58.94\t589.4\t2016-01-31 07:11:00\n680916\tMueller and Sons\tLoring Predovic\tTK-29646\tShoes\t19\t91.98\t1747.62\t2015-10-29 11:24:38\n752312\tWatsica-Pfannerstill\tLoring Predovic\tNZ-99565\tShirt\t10\t12.63\t126.3\t2015-11-23 04:36:21\n108399\tKuhic, Shields and Volkman\tTrish Deckow\tFI-01804\tShirt\t12\t35.28\t423.36\t2015-09-27 16:09:58\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t11\t41.52\t456.72\t2015-11-21 19:39:35\n530925\tPurdy and Sons\tTeagan O'Keefe\tEO-54210\tShirt\t18\t48.26\t868.68\t2016-02-03 07:33:06\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t5\t28.81\t144.05\t2016-03-31 11:58:09\n262693\tZiemann-Heidenreich\tLoring Predovic\tZY-38455\tShirt\t10\t55.57\t555.7\t2015-07-04 02:29:54\n136521\tLabadie and Sons\tEsequiel Schinner\tNZ-99565\tShirt\t20\t91.57\t1831.4\t2016-01-09 02:30:27\n136521\tLabadie and Sons\tEsequiel Schinner\tTL-23025\tShoes\t16\t43.17\t690.72\t2016-06-05 07:18:59\n530925\tPurdy and Sons\tTeagan O'Keefe\tNZ-99565\tShirt\t7\t42.45\t297.15\t2015-10-25 16:21:56\n251881\tZulauf-Grady\tTeagan O'Keefe\tFI-01804\tShirt\t4\t23.26\t93.04\t2016-04-21 16:43:51\n398620\tBrekke Ltd\tEsequiel Schinner\tZY-38455\tShirt\t4\t74\t296\t2015-07-24 09:56:02\n758030\tKilback-Abernathy\tTrish Deckow\tDU-87462\tShirt\t4\t47.37\t189.48\t2016-02-05 03:06:08\n93583\tHegmann-Howell\tEsequiel Schinner\tEO-54210\tShirt\t1\t37.4\t37.4\t2015-11-29 17:18:21\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t18\t91.74\t1651.32\t2015-10-17 20:35:41\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t8\t36.1\t288.8\t2015-07-19 00:03:38\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tNZ-99565\tShirt\t5\t42.74\t213.7\t2015-11-14 12:55:00\n251881\tZulauf-Grady\tTeagan O'Keefe\tEO-54210\tShirt\t20\t47.05\t941\t2015-11-11 18:26:48\n759168\tSchaefer Inc\tLoring Predovic\tGJ-90272\tShoes\t1\t79.93\t79.93\t2016-05-07 13:20:15\n530925\tPurdy and Sons\tTeagan O'Keefe\tGJ-90272\tShoes\t10\t90.21\t902.1\t2016-04-01 01:55:48\n282122\tConnelly, Abshire and Von\tBeth Skiles\tDU-87462\tShirt\t16\t14.5\t232\t2016-06-13 09:17:02\n453258\tRunolfsson-Bayer\tShannen Hudson\tTK-29646\tShoes\t15\t37.68\t565.2\t2016-05-12 03:44:39\n251881\tZulauf-Grady\tTeagan O'Keefe\tTL-23025\tShoes\t2\t27.22\t54.44\t2016-02-04 21:42:35\n887145\tGislason LLC\tLoring Predovic\tFI-01804\tShirt\t9\t19.96\t179.64\t2016-05-31 13:09:59\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t18\t48.1\t865.8\t2015-07-21 05:00:37\n887145\tGislason LLC\tLoring Predovic\tHZ-54995\tBelt\t3\t68.23\t204.69\t2015-11-09 11:03:57\n759168\tSchaefer Inc\tLoring Predovic\tTL-23025\tShoes\t4\t73.99\t295.96\t2015-09-21 23:28:46\n680916\tMueller and Sons\tLoring Predovic\tHZ-54995\tBelt\t18\t17.93\t322.74\t2016-04-28 01:57:00\n218667\tJaskolski-O'Hara\tTrish Deckow\tTK-29646\tShoes\t13\t57.8\t751.4\t2015-11-09 12:17:52\n887145\tGislason LLC\tLoring Predovic\tGP-14407\tBelt\t5\t51.82\t259.1\t2016-06-08 11:25:05\n93583\tHegmann-Howell\tEsequiel Schinner\tZY-38455\tShirt\t10\t86.25\t862.5\t2016-05-10 23:48:57\n530925\tPurdy and Sons\tTeagan O'Keefe\tFI-01804\tShirt\t13\t10.13\t131.69\t2016-04-01 20:39:41\n752312\tWatsica-Pfannerstill\tLoring Predovic\tHZ-54995\tBelt\t18\t23.48\t422.64\t2015-07-25 05:51:10\n758030\tKilback-Abernathy\tTrish Deckow\tTK-29646\tShoes\t7\t86.67\t606.69\t2015-08-19 15:35:31\n398620\tBrekke Ltd\tEsequiel Schinner\tGP-14407\tBelt\t7\t16.52\t115.64\t2016-04-07 10:25:42\n218667\tJaskolski-O'Hara\tTrish Deckow\tGJ-90272\tShoes\t6\t36.44\t218.64\t2015-11-02 20:55:11\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tHZ-54995\tBelt\t5\t48.52\t242.6\t2016-05-22 12:34:35\n218667\tJaskolski-O'Hara\tTrish Deckow\tTL-23025\tShoes\t14\t88.33\t1236.62\t2015-07-12 15:59:56\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t9\t62.85\t565.65\t2015-08-12 17:07:20\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tGP-14407\tBelt\t9\t55.57\t500.13\t2016-02-27 03:20:13\n758030\tKilback-Abernathy\tTrish Deckow\tGJ-90272\tShoes\t8\t98.87\t790.96\t2016-02-10 16:51:59\n136521\tLabadie and Sons\tEsequiel Schinner\tFI-01804\tShirt\t15\t99.43\t1491.45\t2015-12-17 21:58:31\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGJ-90272\tShoes\t18\t11.05\t198.9\t2016-04-01 10:19:26\n136521\tLabadie and Sons\tEsequiel Schinner\tHZ-54995\tBelt\t20\t54.67\t1093.4\t2016-02-20 10:43:41\n218667\tJaskolski-O'Hara\tTrish Deckow\tTL-23025\tShoes\t19\t45.97\t873.43\t2015-08-12 22:53:38\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTL-23025\tShoes\t1\t55.81\t55.81\t2016-02-01 17:50:13\n887145\tGislason LLC\tLoring Predovic\tZY-38455\tShirt\t10\t16.37\t163.7\t2015-10-11 22:11:45\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tGP-14407\tBelt\t8\t83.37\t666.96\t2016-01-27 03:26:53\n62592\tO'Keefe-Koch\tShannen Hudson\tTK-29646\tShoes\t18\t24.92\t448.56\t2016-02-11 17:13:23\n530925\tPurdy and Sons\tTeagan O'Keefe\tHZ-54995\tBelt\t3\t90.33\t270.99\t2015-09-23 07:36:34\n93583\tHegmann-Howell\tEsequiel Schinner\tGP-14407\tBelt\t5\t45.93\t229.65\t2016-04-13 22:34:56\n14406\tHarber, Lubowitz and Fahey\tEsequiel Schinner\tZY-38455\tShirt\t16\t21.6\t345.6\t2015-11-18 06:28:56\n136521\tLabadie and Sons\tEsequiel Schinner\tGP-14407\tBelt\t4\t98.57\t394.28\t2016-06-01 17:28:44\n575704\tLindgren, Thompson and Kirlin\tTeagan O'Keefe\tTK-29646\tShoes\t3\t65.16\t195.48\t2016-04-02 16:38:31\n898496\tWeissnat, Veum and Barton\tAnsley Cummings\tEO-54210\tShirt\t17\t28.1\t477.7\t2015-07-20 19:30:10\n62592\tO'Keefe-Koch\tShannen Hudson\tFI-01804\tShirt\t19\t94.96\t1804.24\t2015-10-05 15:55:01\n530925\tPurdy and Sons\tTeagan O'Keefe\tDU-87462\tShirt\t3\t22.86\t68.58\t2015-10-07 19:49:38\n"
  },
  {
    "path": "tests/golden/xlsx-merged-cells.tsv",
    "content": "A\tBC\t\tD\nA\tB\tC\tD\n"
  },
  {
    "path": "tests/graph-cursor-nosave.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/usage.tsv.gz\to\nusage\tdaily_users\t\ttype-int\t\t#\t\nusage\tdaily_users\t\taggregate-col\tsum\t+\t\nusage\tmotd_fetches\t\ttype-int\t\t#\t\nusage\tmotd_fetches\t\taggregate-col\tsum\t+\t\nusage\tdate\t\tfreq-col\t\tF\t\nusage_date_freq\tdate\t\ttype-date\t\t@\t\nusage_date_freq\t\t\texec-python\timport calendar\tg^X\t\nusage_date_freq\tdate\t\taddcol-expr\tdate.isocalendar()[2]\t=\t\nusage_date_freq\tdate.isocalendar()[2]\t\trename-col\tdotw\t^\t\nusage_date_freq\tdotw\t\taddcol-expr\t'Sat/Sun' if dotw >=6 else 'Mon-Fri'\t=\t\nusage_date_freq\t'Sat/Sun' if dotw >=6 else 'Mon-Fri'\t\tkey-col\t\t!\t\nusage_date_freq\tdate\t\tsort-desc\t\t!\t\nusage_date_freq\tdaily_users_sum\t\tplot-column\t\t.\t\nusage_date_freq_graph\t2018-11-18 2019-03-26\t0 150\tdelete-cursor\t\td\tdelete rows on source sheet contained within canvas cursor\n"
  },
  {
    "path": "tests/graph-sincos-nosave.vdj",
    "content": "#!vd -p\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"\", \"longname\": \"add-sheet\", \"input\": \"1\", \"keystrokes\": \"A\", \"comment\": \"open new blank sheet with number columns\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"add-rows\", \"input\": \"360\", \"keystrokes\": \"ga\", \"comment\": \"add N blank rows\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-rows\", \"input\": \"\", \"keystrokes\": \"gs\", \"comment\": \"\"}\n{\"sheet\": \"unnamed\", \"col\": 0, \"row\": \"\", \"longname\": \"setcol-iter\", \"input\": \"range(360)\", \"keystrokes\": \"gz=\", \"comment\": \"set selected rows in this column to the values in the given Python sequence expression\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"unselect-rows\", \"input\": \"\", \"keystrokes\": \"gu\", \"comment\": \"\"}\n{\"sheet\": \"unnamed\", \"col\": 0, \"row\": \"\", \"longname\": \"rename-col\", \"input\": \"xdeg\", \"keystrokes\": \"^\", \"comment\": \"edit name of current column\"}\n{\"sheet\": \"unnamed\", \"col\": \"xdeg\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\"}\n{\"sheet\": \"unnamed\", \"col\": \"xdeg\", \"row\": \"\", \"longname\": \"addcol-expr\", \"input\": \"xdeg*math.pi/180\", \"keystrokes\": \"=\", \"comment\": \"create new column from Python expression, with column names as variables\"}\n{\"sheet\": \"unnamed\", \"col\": \"xdeg*math.pi/180\", \"row\": \"\", \"longname\": \"rename-col\", \"input\": \"xrad\", \"keystrokes\": \"^\", \"comment\": \"edit name of current column\"}\n{\"sheet\": \"unnamed\", \"col\": \"xrad\", \"row\": \"\", \"longname\": \"type-float\", \"input\": \"\", \"keystrokes\": \"%\", \"comment\": \"set type of current column to float\"}\n{\"sheet\": \"unnamed\", \"col\": \"xrad\", \"row\": \"\", \"longname\": \"addcol-expr\", \"input\": \"math.sin(xrad)\", \"keystrokes\": \"=\", \"comment\": \"create new column from Python expression, with column names as variables\"}\n{\"sheet\": \"unnamed\", \"col\": \"math.sin(xrad)\", \"row\": \"\", \"longname\": \"type-float\", \"input\": \"\", \"keystrokes\": \"%\", \"comment\": \"set type of current column to float\"}\n{\"sheet\": \"unnamed\", \"col\": \"xdeg\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"pin current column on the left as a key column\"}\n{\"sheet\": \"unnamed\", \"col\": \"math.sin(xrad)\", \"row\": \"\", \"longname\": \"addcol-expr\", \"input\": \"math.cos(xrad)\", \"keystrokes\": \"=\", \"comment\": \"create new column from Python expression, with column names as variables\"}\n{\"sheet\": \"unnamed\", \"col\": \"math.sin(xrad)\", \"row\": \"\", \"longname\": \"type-float\", \"input\": \"\", \"keystrokes\": \"%\", \"comment\": \"set type of current column to float\"}\n{\"sheet\": \"unnamed\", \"col\": \"math.cos(xrad)\", \"row\": \"\", \"longname\": \"type-float\", \"input\": \"\", \"keystrokes\": \"%\", \"comment\": \"set type of current column to float\"}\n{\"sheet\": \"unnamed\", \"col\": \"xrad\", \"row\": \"\", \"longname\": \"hide-col\", \"input\": \"\", \"keystrokes\": \"-\", \"comment\": \"hide current column\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"plot-numerics\", \"input\": \"\", \"keystrokes\": \"g.\", \"comment\": \"graph all numeric columns vs the first key column (or row number)\"}\n"
  },
  {
    "path": "tests/graphpr-nosave.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/StatusPR.csv\to\topen file\nStatusPR\tMonth\t\taddcol-expr\tMonth+Day\t=\tcreate new column from Python expression, with column names as variables\nStatusPR\tMonth+Day\t\ttype-date\t\t@\tset type of current column to date\nStatusPR\tMonth+Day\t\trename-col\tDate\t^\tedit name of current column\nStatusPR\tDate\t\tkey-col\t\t!\tpin current column on the left as a key column\nStatusPR\tMonth\t\thide-col\t\t-\thide current column\nStatusPR\tDay\t\thide-col\t\t-\thide current column\nStatusPR\tResource\t\tkey-col\t\t!\tpin current column on the left as a key column\nStatusPR\tValue\t\ttype-float\t\t%\tset type of current column to float\nStatusPR\tValue\t\tplot-column\t\t.\tgraph the current column vs the first key column (or row number)\nStatusPR\tLocation\t\tselect-col-regex\tPuerto\t|\tselect rows matching regex in current column\nStatusPR\tUnit\t\tunselect-col-regex\tnumber\t\\\tunselect rows matching regex in current column\nStatusPR\t\t\tdup-selected\t\t\"\topen duplicate sheet with only selected rows\nStatusPR_selectedref\t\t\tunselect-rows\t\tgu\tunselect all rows\nStatusPR_selectedref\tValue\t\tplot-column\t\t.\tgraph the current column vs the first key column (or row number)\nStatusPR_selectedref\tValue\t\tplot-column\t\t.\tgraph the current column vs the first key column (or row number)\n"
  },
  {
    "path": "tests/hide-uniform.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\", \"comment\": null, \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-rows\", \"input\": \"\", \"keystrokes\": \"gs\", \"comment\": \"select all rows\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"Region\", \"row\": 0, \"longname\": \"setcol-input\", \"input\": \"East\", \"keystrokes\": \"ge\", \"comment\": \"set contents of current column for selected rows to same input\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"\", \"row\": \"\", \"longname\": \"unselect-rows\", \"input\": \"\", \"keystrokes\": \"gu\", \"comment\": \"unselect all rows\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"\", \"row\": \"\", \"longname\": \"hide-uniform-cols\", \"input\": \"\", \"comment\": \"hide any column that has multiple rows but only one distinct value\", \"replayable\": true}\n"
  },
  {
    "path": "tests/histogram.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nglobal\t\tnumeric_binning\tset-option\tTrue\t\t\nbenchmark\tQuantity\t\ttype-int\t\t#\t\nbenchmark\tQuantity\t\taddcol-expr\tQuantity > 1\t=\t\nbenchmark\tQuantity > 1\t\tselect-col-regex\tTrue\t|\t\nbenchmark\t\t\tdup-selected\t\t\"\t\nbenchmark_selectedref\tQuantity\t\tfreq-col\t\tF\t\nbenchmark_selectedref_Quantity_freq\thistogram\t\thide-col\t\t-\tHide current column\n"
  },
  {
    "path": "tests/import-python.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\t\nsample\t\t\timport-python\tmath\tgCtrl+X\timport Python module in the global scope\nsample\tOrderDate\t\taddcol-expr\tmath.pi\t=\tcreate new column from Python expression, with column names as variables\n"
  },
  {
    "path": "tests/inner-join.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/data1.tsv\to\t\n\t\t\topen-file\ttests/data2.tsv\to\t\ndata1\tKey\t\tkey-col\t\t!\t\ndata2\tKey\t\tkey-col\t\t!\t\ndata2\t\t\tsheets-stack\t\tS\t\nsheets\t\tキdata2\tselect-row\t\ts\t\nsheets\t\tキdata1\tselect-row\t\ts\t\nsheets\t\t\tjoin-sheets\tinner\t&\t\ndata2+data1\tA\t\tkey-col\t\t!\t\ndata2+data1\t\t\tsort-keys-asc\t\tg[\t\ndata2+data1\tA\t\tkey-col\t\t!\t\n"
  },
  {
    "path": "tests/invalid_unicode_sqlite.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\nglobal\t\tencoding\tset-option\tlatin-1\t\t\ninvalid_unicode\t\tencoding\tset-option\tlatin-1\t\t\nglobal\t\tsave_encoding\tset-option\tlatin-1\t\t\ninvalid_unicode\t\tsave_encoding\tset-option\tlatin-1\t\t\n\t\t\topen-file\ttests/invalid_unicode.sqlite\to\t\ninvalid_unicode\t\tキTest\topen-row\t\tEnter\topen sheet with copies of rows referenced in current row\n"
  },
  {
    "path": "tests/issue1308.vdx",
    "content": "open-file sample_data/issue1308.html\nopen-row\n"
  },
  {
    "path": "tests/issue1346.html",
    "content": "<table>\n <tr><th>Name</th><td>Widget</td></tr>\n <tr><th>Weight</th><td>5kg</td></tr>\n <tr><th>Color</th><td>Red</td></tr>\n</table>\n"
  },
  {
    "path": "tests/issue1346.vdx",
    "content": "open-file tests/issue1346.html\nopen-row\n"
  },
  {
    "path": "tests/issue1377.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/sample-sales-reps.xlsx\", \"keystrokes\": \"o\", \"comment\": null}\n{\"sheet\": \"sample-sales-reps\", \"col\": \"\", \"row\": \"\\u30adsample-salesv4\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open current row with sheet-specific dive\"}\n{\"sheet\": \"sample-sales-reps_sample-salesv4\", \"col\": \"\", \"row\": \"0\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"sample-sales-reps_sample-salesv4\", \"col\": \"\", \"row\": \"1\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"sample-sales-reps_sample-salesv4\", \"col\": \"\", \"row\": \"2\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"sample-sales-reps_sample-salesv4\", \"col\": \"\", \"row\": \"\", \"longname\": \"copy-selected\", \"input\": \"\", \"keystrokes\": \"gy\", \"comment\": \"yank (copy) selected rows to clipboard\"}\n{\"col\": \"\", \"row\": \"\", \"longname\": \"open-new\", \"input\": \"\", \"keystrokes\": \"Shift+A\", \"comment\": \"Open new empty sheet\"}\n{\"col\": \"\", \"row\": \"\", \"longname\": \"paste-after\", \"input\": \"\", \"keystrokes\": \"p\", \"comment\": \"paste clipboard rows after current row\"}\n"
  },
  {
    "path": "tests/issue1377b.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/sample-sales-reps.xlsx\", \"keystrokes\": \"o\", \"comment\": null}\n{\"sheet\": \"sample-sales-reps\", \"col\": \"\", \"row\": \"\\u30adsample-salesv4\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open current row with sheet-specific dive\"}\n{\"sheet\": \"sample-sales-reps_sample-salesv4\", \"col\": \"\", \"row\": \"0\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"sample-sales-reps_sample-salesv4\", \"col\": \"\", \"row\": \"1\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"sample-sales-reps_sample-salesv4\", \"col\": \"\", \"row\": \"2\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"sample-sales-reps_sample-salesv4\", \"col\": \"\", \"row\": \"\", \"longname\": \"copy-selected\", \"input\": \"\", \"keystrokes\": \"gy\", \"comment\": \"yank (copy) selected rows to clipboard\"}\n{\"col\": \"\", \"row\": \"\", \"longname\": \"open-new\", \"input\": \"\", \"keystrokes\": \"Shift+A\", \"comment\": \"Open new empty sheet\"}\n{\"col\": \"\", \"row\": \"\", \"longname\": \"paste-after\", \"input\": \"\", \"keystrokes\": \"p\", \"comment\": \"paste clipboard rows after current row\"}\n{\"col\": \"\", \"row\": \"1\", \"longname\": \"paste-before\", \"input\": \"\", \"keystrokes\": \"Shift+P\", \"comment\": \"paste clipboard rows before current row\"}\n"
  },
  {
    "path": "tests/issue2015.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/test.jsonl\", \"keystrokes\": \"o\", \"comment\": null}\n{\"col\": \"\", \"row\": \"\", \"longname\": \"open-new\", \"input\": \"\", \"keystrokes\": \"Shift+A\", \"comment\": \"Open new empty sheet\"}\n{\"sheet\": \"unnamed\", \"col\": \"A\", \"row\": \"\", \"longname\": \"rename-col\", \"input\": \"id\", \"keystrokes\": \"^\", \"comment\": \"rename current column\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"add-row\", \"input\": \"\", \"keystrokes\": \"a\", \"comment\": \"append a blank row\"}\n{\"sheet\": \"unnamed\", \"col\": \"id\", \"row\": \"0\", \"longname\": \"edit-cell\", \"input\": \"1\", \"keystrokes\": \"e\", \"comment\": \"edit contents of current cell\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"0\", \"longname\": \"add-row\", \"input\": \"\", \"keystrokes\": \"a\", \"comment\": \"append a blank row\"}\n{\"sheet\": \"unnamed\", \"col\": \"id\", \"row\": \"1\", \"longname\": \"edit-cell\", \"input\": \"2003\", \"keystrokes\": \"e\", \"comment\": \"edit contents of current cell\"}\n{\"sheet\": \"unnamed\", \"col\": \"id\", \"row\": \"\", \"longname\": \"addcol-new\", \"input\": \"name\", \"keystrokes\": \"za\", \"comment\": \"append an empty column\"}\n{\"sheet\": \"unnamed\", \"col\": \"name\", \"row\": \"0\", \"longname\": \"edit-cell\", \"input\": \"andy\", \"keystrokes\": \"e\", \"comment\": \"edit contents of current cell\"}\n{\"sheet\": \"unnamed\", \"col\": \"name\", \"row\": \"1\", \"longname\": \"edit-cell\", \"input\": \"bandy\", \"keystrokes\": \"e\", \"comment\": \"edit contents of current cell\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"sheets-stack\", \"input\": \"\", \"keystrokes\": \"Shift+S\", \"comment\": \"open Sheets Stack: join or jump between the active sheets on the current stack\"}\n{\"sheet\": \"sheets\", \"col\": \"name\", \"row\": \"\\u30adunnamed\", \"longname\": \"edit-cell\", \"input\": \"a\", \"keystrokes\": \"e\", \"comment\": \"edit contents of current cell\"}\n{\"col\": \"\", \"row\": \"\", \"longname\": \"open-new\", \"input\": \"\", \"keystrokes\": \"Shift+A\", \"comment\": \"Open new empty sheet\"}\n{\"sheet\": \"unnamed\", \"col\": \"A\", \"row\": \"\", \"longname\": \"rename-col\", \"input\": \"id\", \"keystrokes\": \"^\", \"comment\": \"rename current column\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"add-row\", \"input\": \"\", \"keystrokes\": \"a\", \"comment\": \"append a blank row\"}\n{\"sheet\": \"unnamed\", \"col\": \"id\", \"row\": \"0\", \"longname\": \"edit-cell\", \"input\": \"1\", \"keystrokes\": \"e\", \"comment\": \"edit contents of current cell\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"0\", \"longname\": \"add-row\", \"input\": \"\", \"keystrokes\": \"a\", \"comment\": \"append a blank row\"}\n{\"sheet\": \"unnamed\", \"col\": \"id\", \"row\": \"1\", \"longname\": \"edit-cell\", \"input\": \"2003\", \"keystrokes\": \"e\", \"comment\": \"edit contents of current cell\"}\n{\"sheet\": \"unnamed\", \"col\": \"id\", \"row\": \"\", \"longname\": \"addcol-new\", \"input\": \"color\", \"keystrokes\": \"za\", \"comment\": \"append an empty column\"}\n{\"sheet\": \"unnamed\", \"col\": \"color\", \"row\": \"0\", \"longname\": \"edit-cell\", \"input\": \"yellow\", \"keystrokes\": \"e\", \"comment\": \"edit contents of current cell\"}\n{\"sheet\": \"unnamed\", \"col\": \"color\", \"row\": \"1\", \"longname\": \"edit-cell\", \"input\": \"orange\", \"keystrokes\": \"e\", \"comment\": \"edit contents of current cell\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"sheets-stack\", \"input\": \"\", \"keystrokes\": \"Shift+S\", \"comment\": \"open Sheets Stack: join or jump between the active sheets on the current stack\"}\n{\"sheet\": \"sheets\", \"col\": \"name\", \"row\": \"\\u30adunnamed\", \"longname\": \"edit-cell\", \"input\": \"b\", \"keystrokes\": \"e\", \"comment\": \"edit contents of current cell\"}\n{\"sheet\": \"global\", \"row\": \"disp_int_fmt\", \"longname\": \"set-option\", \"input\": \"{:,}\", \"keystrokes\": \"\"}\n{\"sheet\": \"b\", \"col\": \"id\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\"}\n{\"sheet\": \"b\", \"col\": \"\", \"row\": \"\", \"longname\": \"sheets-stack\", \"input\": \"\", \"keystrokes\": \"Shift+S\", \"comment\": \"open Sheets Stack: join or jump between the active sheets on the current stack\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\\u30ada\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet referenced in current row\"}\n{\"sheet\": \"a\", \"col\": \"id\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\"}\n{\"sheet\": \"a\", \"col\": \"\", \"row\": \"\", \"longname\": \"sheets-stack\", \"input\": \"\", \"keystrokes\": \"Shift+S\", \"comment\": \"open Sheets Stack: join or jump between the active sheets on the current stack\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\\u30ada\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\\u30adb\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\", \"longname\": \"columns-selected\", \"input\": \"\", \"keystrokes\": \"gShift+C\", \"comment\": \"open Columns Sheet with all visible columns from selected sheets\"}\n{\"sheet\": \"all_columns\", \"col\": \"\", \"row\": \"\\u30ada,id\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"all_columns\", \"col\": \"\", \"row\": \"\\u30adb,id\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"all_columns\", \"col\": \"\", \"row\": \"\", \"longname\": \"key-selected\", \"input\": \"\", \"keystrokes\": \"g!\", \"comment\": \"toggle selected rows as key columns on source sheet\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\", \"longname\": \"join-selected\", \"input\": \"inner\", \"keystrokes\": \"&\", \"comment\": \"merge selected sheets with visible columns from all, keeping rows according to jointype\"}\n"
  },
  {
    "path": "tests/issue2190.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\", \"comment\": null}\n{\"sheet\": \"sample\", \"col\": \"Region\", \"row\": \"\", \"longname\": \"sort-asc\", \"input\": \"\", \"keystrokes\": \"[\", \"comment\": \"sort ascending by current column; replace any existing sort criteria\"}\n{\"sheet\": \"sample\", \"col\": \"\", \"row\": \"\", \"longname\": \"dup-rows\", \"input\": \"\", \"keystrokes\": \"g\\\"\", \"comment\": \"open a duplicate sheet with only the selected rows\"}\n{\"sheet\": \"sample\", \"col\": \"Rep\", \"row\": \"\", \"longname\": \"sort-asc-add\", \"input\": \"\", \"keystrokes\": \"z[\", \"comment\": \"sort ascending by current column; add to existing sort criteria\"}\n{\"sheet\": \"sample\", \"col\": \"Item\", \"row\": \"\", \"longname\": \"sort-desc-add\", \"input\": \"\", \"keystrokes\": \"z]\", \"comment\": \"sort descending by current column; add to existing sort criteria\"}\n{\"longname\": \"assert-expr\", \"input\": \"sheet._ordering[0][0] is sheet.column(\\\"Region\\\")\"}\n"
  },
  {
    "path": "tests/issue2225-nosave.vdx",
    "content": "select-row\ndup-selected\nassert-expr sheet.nSelectedRows == 0\n"
  },
  {
    "path": "tests/issue2227.html",
    "content": "<table>\n <tr><th>url</th></tr>\n <tr><td><a href=\"https://google.com]\">1</a></td></tr>\n <tr><td><a href=\"https://example.com\">2</a></td></tr>\n</table>\n"
  },
  {
    "path": "tests/issue2227.vdx",
    "content": "# VisiData v3.0\nopen-file tests/issue2227.html\nopen-row\n"
  },
  {
    "path": "tests/issue2316.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/issue2316.zip\to\n\t\t\tallow-error\tunknown \"log\" filetype\nissue2316\t\tキ.,sample.log\topen-row\t\tEnter\topen .log inside zip as text not tar\n"
  },
  {
    "path": "tests/issue2476.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-new\", \"input\": null, \"keystrokes\": null, \"comment\": null}\n{\"row\": \"\", \"longname\": \"addcol-expr\", \"input\": \"None\", \"keystrokes\": \"=\", \"comment\": \"create new column from Python expression, with column names as variables\"}\n{\"longname\": \"add-row\"}\n"
  },
  {
    "path": "tests/issue2524-curcol.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/benchmark.csv\", \"keystrokes\": \"o\", \"comment\": null, \"replayable\": true}\n{\"sheet\": \"benchmark\", \"col\": \"Quantity\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\", \"replayable\": true}\n{\"sheet\": \"benchmark\", \"col\": \"Quantity\", \"row\": \"\", \"longname\": \"addcol-expr\", \"input\": \"curcol*2\", \"keystrokes\": \"=\", \"comment\": \"create new column from Python expression, with column names as variables\", \"replayable\": true}\n{\"sheet\": \"benchmark\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-rows\", \"input\": \"\", \"keystrokes\": \"gs\", \"comment\": \"select all rows\", \"replayable\": true}\n{\"sheet\": \"benchmark\", \"col\": \"Quantity\", \"row\": \"\", \"longname\": \"setcol-expr\", \"input\": \"curcol*4\", \"keystrokes\": \"g=\", \"comment\": \"set current column for selected rows to result of Python expression\", \"replayable\": true}\n"
  },
  {
    "path": "tests/issue2890-parquet-addrow-nosave.vdx",
    "content": "# adding a row to a parquet sheet should not crash  #2890\n\nopen-file sample_data/sample.parquet\n\nadd-row\n\ncol Region\nedit-cell test\n\nassert-expr sheet.cursorValue == 'test'\n"
  },
  {
    "path": "tests/issue2901-defer-edit-nosave.vdx",
    "content": "# edits to a newly-added row on a deferred sheet should be\n# merged into the deferred add, not tracked as separate mods  #2901\n\nopen-file sample_data/employees.sqlite\nopen-row\n\n# add a row and edit the dname text column\nadd-row\ncol dname\nedit-cell hello\n\n# getDeferredChanges should have 1 add with the edited value, 0 separate mods\nassert-expr len(sheet.getDeferredChanges()[0]) == 1\nassert-expr len(sheet.getDeferredChanges()[1]) == 0\nassert-expr sheet.column('dname').calcValue(list(sheet.getDeferredChanges()[0].values())[0]) is not None\n\n# undo the edit; added row value should revert to None\nundo-last\nassert-expr sheet.column('dname').calcValue(list(sheet.getDeferredChanges()[0].values())[0]) is None\n"
  },
  {
    "path": "tests/issue3015-nosave.vdx",
    "content": "# n/N should repeat z/ expr search, not just regex search  #3015\n\nopen-file sample_data/benchmark.csv\ncol Quantity\ntype-int\n\n# search by expr for Quantity > 10\nsearch-expr Quantity > 10\nassert-cell 12\n\n# search-next should repeat the expr search\nsearch-next\nassert-cell 30\n"
  },
  {
    "path": "tests/issue3022-nosave.vdx",
    "content": "# addcol-expr should allow name=expr to specify column name  #3022\n\nopen-file sample_data/sample.tsv\n\n# named expr: result = Units should create column named \"result\"\naddcol-expr result = Units\nassert-expr cursorCol.name == \"result\"\nassert-cell 95\n\n# plain expr without name should use the expression as column name\naddcol-expr Units\nassert-expr cursorCol.name == \"Units\"\n\n# double-equals should not be parsed as name=expr\naddcol-expr Units == Units\nassert-expr cursorCol.name == \"Units == Units\"\n"
  },
  {
    "path": "tests/issue350.json",
    "content": "[\n    {\n        \"season\": 1,\n        \"episode\": 0,\n        \"rating\": 7,\n        \"votes\": 1415\n    },\n    {\n        \"season\": 1,\n        \"episode\": 1,\n        \"rating\": 8,\n        \"votes\": 3441\n    },\n    {\n        \"season\": 1,\n        \"episode\": 2,\n        \"rating\": 8,\n        \"votes\": 2973\n    },\n    {\n        \"season\": 1,\n        \"episode\": 3,\n        \"rating\": 7,\n        \"votes\": 2994\n    }\n]\n"
  },
  {
    "path": "tests/issue350.vdj",
    "content": "#!vd -p\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"\", \"longname\": \"open-file\", \"input\": \"tests/issue350.json\", \"keystrokes\": \"o\", \"comment\": \"\"}\n{\"sheet\": \"issue350\", \"col\": \"season\", \"row\": \"\", \"longname\": \"addcol-expr\", \"input\": \"episode\", \"keystrokes\": \"=\", \"comment\": \"\"}\n{\"sheet\": \"issue350\", \"col\": \"episode\", \"row\": \"\", \"longname\": \"rename-col\", \"input\": \"episode\", \"keystrokes\": \"^\", \"comment\": \"\"}\n{\"sheet\": \"issue350\", \"col\": 1, \"row\": \"\", \"longname\": \"slide-right\", \"input\": \"\", \"keystrokes\": \"L\", \"comment\": \"slide current column right\"}\n{\"sheet\": \"issue350\", \"col\": 2, \"row\": \"\", \"longname\": \"cache-col\", \"input\": \"\", \"keystrokes\": \"z'\", \"comment\": \"add/reset cache for current column\"}\n{\"sheet\": \"issue350\", \"col\": 2, \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\"}\n"
  },
  {
    "path": "tests/issue655.vdx",
    "content": "open-file sample_data/benchmark.csv\ndefine-command test-655 cursorCol.setValues(selectedRows, currow.Item)\nrow 6\ncol Customer\nselect-rows\ntest-655\n"
  },
  {
    "path": "tests/issue733.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tDate\t\ttype-date\t\t@\tset type of current column to date\nbenchmark\t\tdisp_date_fmt\tset-option\t%Y\t\t\nbenchmark\t\tdisp_date_fmt\tunset-option\t\t\t\n"
  },
  {
    "path": "tests/issue964-inner-join.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/issue964b.csv\to\t\n\t\t\topen-file\ttests/issue964a.csv\to\t\nissue964b\tcod_istat\t\tkey-col\t\t!\ttoggle current column as a key column\nissue964a\tdomicilioCom\t\tkey-col\t\t!\ttoggle current column as a key column\nissue964a\t\t\tjoin-sheets-top2\tinner\t&\tconcatenate top two sheets in Sheets Stack\n"
  },
  {
    "path": "tests/issue964a.csv",
    "content": "sesso,domicilioCom,domicilioProv\nM,082053,PA\nM,082070,PA\nM,082053,PA\nM,082014,PA\n"
  },
  {
    "path": "tests/issue964b.csv",
    "content": "cod_istat,comune\n082014,Caccamo\n082053,Palermo\n082070,Termini Imerese\n082071,Terrasini\n"
  },
  {
    "path": "tests/join-cols-single-sheet.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\tname_joiner\tset-option\t+\t\t\n\t\t\topen-file\tsample_data/sample.tsv\to\t\nsample\t\t\tcolumns-sheet\t\tC\topen Columns Sheet: edit column properties for current sheet\nsample_columns\t\tキRegion\tselect-row\t\ts\tselect current row\nsample_columns\t\tキRep\tselect-row\t\ts\tselect current row\nsample_columns\t\t\tjoin-cols\t\t&\tadd column from concatenating selected source columns\nsample_columns\t\t\tsheets-stack\t\tS\topen Sheets Stack: join or jump between the active sheets on the current stack\nsheets\t\tキsample\topen-row\t\t^J\topen sheet with copies of rows referenced in current row\n"
  },
  {
    "path": "tests/join-concat.vdj",
    "content": "#!vd -p\n{\"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\"}\n{\"longname\": \"open-file\", \"input\": \"sample_data/benchmark.csv\", \"keystrokes\": \"o\"}\n{\"sheet\": \"sample\", \"col\": \"\", \"row\": \"\", \"longname\": \"columns-sheet\", \"input\": \"\", \"keystrokes\": \"Shift+C\", \"comment\": \"open Columns Sheet: edit column properties for current sheet\"}\n{\"sheet\": \"benchmark\", \"col\": \"\", \"row\": \"\", \"longname\": \"columns-sheet\", \"input\": \"\", \"keystrokes\": \"Shift+C\", \"comment\": \"open Columns Sheet: edit column properties for current sheet\"}\n{\"sheet\": \"benchmark_columns\", \"col\": \"\", \"row\": \"\", \"longname\": \"sheets-stack\", \"input\": \"\", \"keystrokes\": \"Shift+S\", \"comment\": \"open Sheets Stack: join or jump between the active sheets on the current stack\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\\u30adsample_columns\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\\u30adbenchmark_columns\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\", \"longname\": \"join-selected\", \"input\": \"concat\", \"keystrokes\": \"&\", \"comment\": \"merge selected sheets with visible columns from all, keeping rows according to jointype\"}\n{\"sheet\": \"benchmark_columns&sample_columns\", \"col\": \"name\", \"row\": \"\\u30adCustomer\", \"longname\": \"edit-cell\", \"input\": \"Delilah\", \"keystrokes\": \"e\", \"comment\": \"edit contents of current cell\"}\n{\"sheet\": \"benchmark_columns&sample_columns\", \"col\": \"\", \"row\": \"\", \"longname\": \"sheets-stack\", \"input\": \"\", \"keystrokes\": \"Shift+S\", \"comment\": \"open Sheets Stack: join or jump between the active sheets on the current stack\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\\u30adbenchmark\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet referenced in current row\"}\n"
  },
  {
    "path": "tests/join-different-types.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/joining_error.xlsx\to\t\n\t\t\topen-file\ttests/joining_error_interesting_records.csv\to\t\njoining_error\t\tキrecords\topen-row\t\t^J\topen sheet with copies of rows referenced in current row\njoining_error_records\t\t\tsheets-stack\t\tS\topen Sheets Stack: join or jump between the active sheets on the current stack\nsheets\t\tキjoining_error_interesting_records\tslide-up\t\tK\tslide current row up\nsheets\t\tキjoining_error_interesting_records\tslide-up\t\tK\tslide current row up\nsheets\t\tキjoining_error_interesting_records\tselect-row\t\ts\tselect current row\nsheets\t\tキjoining_error_records\tselect-row\t\ts\tselect current row\nsheets\t\tキjoining_error_interesting_records\topen-row\t\t^J\topen sheet referenced in current row\njoining_error_interesting_records\tRow\t\tkey-col\t\t!\ttoggle current column as a key column\njoining_error_interesting_records\t\t\tsheets-stack\t\tS\topen Sheets Stack: join or jump between the active sheets on the current stack\nsheets\t\tキjoining_error_records\topen-row\t\t^J\topen sheet referenced in current row\njoining_error_records\tRow\t\tkey-col\t\t!\ttoggle current column as a key column\njoining_error_records\t\t\tsheets-stack\t\tS\topen Sheets Stack: join or jump between the active sheets on the current stack\nsheets\t\tキjoining_error_interesting_records\tslide-up\t\tK\tslide current row up\nsheets\t\t\tjoin-sheets\tinner\t&\tmerge selected sheets with visible columns from all, keeping rows according to jointype\n\t\t\tallow-error\thave different types\n"
  },
  {
    "path": "tests/join-extend-mult.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/data1.tsv\to\t\n\t\t\topen-file\ttests/data2.tsv\to\t\n\t\t\topen-file\ttests/data3.tsv\to\t\ndata1\tKey\t\tkey-col\t\t!\ttoggle current column as a key column\ndata2\tKey\t\tkey-col\t\t!\ttoggle current column as a key column\ndata3\tKey\t\tkey-col\t\t!\ttoggle current column as a key column\ndata1\t\t\tjoin-sheets-top2\textend\t&\tconcatenate top two sheets in Sheets Stack\ndata1\t\t\tquit-sheet\t\t\t\ndata3\t\t\tquit-sheet\t\t\t\ndata1+data3\t\t\tjoin-sheets-top2\textend\t&\tconcatenate top two sheets in Sheets Stack\n"
  },
  {
    "path": "tests/join-merge-1.jsonl",
    "content": "{\"colA\": \"1\", \"colB\": null, \"colC\": \"db_C1\", \"colD\": \"db_D1\", \"colE\": \"db_E1\"}\n{\"colA\": \"2\", \"colB\": null, \"colC\": \"db_C2\", \"colD\": \"db_D2\", \"colE\": \"db_E2\"}\n{\"colA\": \"3\", \"colB\": \"db_B3\", \"colC\": null, \"colD\": \"db_D3\", \"colE\": null}\n{\"colA\": \"4\", \"colB\": \"db_B4\", \"colC\": \"db_C4\", \"colD\": \"db_D4\", \"colE\": \"db_E4\"}\n{\"colA\": \"5\", \"colB\": \"db_B5\", \"colC\": \"db_C5\", \"colD\": null, \"colE\": \"db_E5\"}\n{\"colA\": \"6\", \"colB\": \"db_B6\", \"colC\": \"db_C6\", \"colD\": \"db_D6\", \"colE\": \"db_E6\"}\n{\"colA\": \"7\", \"colB\": null, \"colC\": null, \"colD\": null, \"colE\": null}\n{\"colA\": \"9\", \"colB\": \"db_B9\", \"colC\": \"db_C9\", \"colD\": \"db_D9\", \"colE\": \"db_E9\"}\n"
  },
  {
    "path": "tests/join-merge-2.jsonl",
    "content": "{\"colA\": \"5\", \"colB\": null, \"colC\": null, \"colD\": null, \"colE\": null, \"colF\": \"new_F5\"}\n{\"colA\": \"1\", \"colB\": \"new_B1\", \"colC\": \"new_C1\", \"colD\": null, \"colE\": null, \"colF\": null}\n{\"colA\": \"6\", \"colB\": \"new_B6\", \"colC\": \"new_C6\", \"colD\": null, \"colE\": \"new_E6\", \"colF\": \"new_F6\"}\n{\"colA\": \"7\", \"colB\": \"new_B7\", \"colC\": \"new_C7\", \"colD\": \"new_D7\", \"colE\": \"new_E7\", \"colF\": \"new_F7\"}\n{\"colA\": \"8\", \"colB\": \"new_B8\", \"colC\": \"new_C8\", \"colD\": \"new_D8\", \"colE\": \"new_E8\", \"colF\": \"new_F8\"}\n{\"colA\": \"9\", \"colB\": \"new_B9\", \"colC\": \"new_C9\", \"colD\": \"new_D9\", \"colE\": \"new_E9\", \"colF\": \"new_F9\"}\n{\"colA\": \"10\", \"colB\": \"new_B10\", \"colC\": \"new_C10\", \"colD\": \"new_D10\", \"colE\": \"new_E10\", \"colF\": \"new_F10\"}\n{\"colA\": \"11\", \"colB\": \"new_B11\", \"colC\": \"new_C11\", \"colD\": \"new_D11\", \"colE\": \"new_E11\", \"colF\": \"new_F11\"}\n"
  },
  {
    "path": "tests/join-merge.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/join-merge-2.jsonl\to\t\n\t\t\topen-file\ttests/join-merge-1.jsonl\to\t\njoin-merge-1\tcolA\t\tkey-col\t\t!\t\njoin-merge-2\tcolA\t\tkey-col\t\t!\t\njoin-merge-1\t\t\tjoin-sheets-top2\tmerge\t&\t\njoin-merge-1+join-merge-2\tcolA\t\ttype-int\t\t#\t\njoin-merge-1+join-merge-2\tcolA\t\tsort-asc\t\t[\t\n"
  },
  {
    "path": "tests/join-non-unique-cols.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\tSqliteSheet\theader\tset-option\t0\t\t\n\tUsvSheet\tdelimiter\tset-option\t␞\t\t\n\tUsvSheet\trow_delimiter\tset-option\t␟\t\t\n\t\t\topen-file\tsample_data/sample.tsv\to\t\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nsample\tOrderDate\t\trename-col\tDate\t^\t\nsample\tDate\t\tkey-col\t\t!\t\nbenchmark\tDate\t\tkey-col\t\t!\t\nbenchmark\t\t\tsheets-stack\t\tS\t\nsheets\t\tキbenchmark\tselect-row\t\ts\t\nsheets\t\tキsample\tselect-row\t\ts\t\nsheets\t\t\tjoin-sheets\touter\t&\t\nbenchmark+sample\t\t\tcolumns-sheet\t\tC\t\nbenchmark+sample_columns\tname\t\tsort-desc\t\t]\t\nbenchmark+sample_columns\t\t\tsheets-stack\t\tS\t\nsheets\t\tキbenchmark+sample\topen-row\t\t^J\t\n"
  },
  {
    "path": "tests/joining_error_interesting_records.csv",
    "content": "Row,other\r\n2,some\r\n4,other\r\n5,stuff\r\n"
  },
  {
    "path": "tests/known-broken.vdx",
    "content": "open-file sample_data/benchmark.csv\nassert-expr False\n"
  },
  {
    "path": "tests/listofdictobj.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/y77d-th95.json.gz\to\t\ny77d-th95\tgeolocation\t\texpand-col-depth\t1\tz(\texpand current column of containers to given depth (0=fully)\n\tgeolocation.coordinates\t0\topen-cell\t\tz^J\topen sheet with copies of rows referenced in current cell\n"
  },
  {
    "path": "tests/load-2d-matrix.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/arrays.npz\", \"keystrokes\": \"o\", \"comment\": null, \"replayable\": true}\n{\"sheet\": \"arrays\", \"col\": \"\", \"row\": 2, \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open current row with sheet-specific dive\", \"replayable\": true}\n"
  },
  {
    "path": "tests/load-conllu.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/sample.conllu\", \"keystrokes\": \"o\", \"comment\": null}\n"
  },
  {
    "path": "tests/load-dir.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\nglobal\t\tfiletype\tset-option\tdir\t\t\n\t\t\topen-file\tbin\to\t\nbin\tfilename\t\tsort-asc\t\t[\tsort ascending by current column; replace any existing sort criteria\nbin\tmodtime\t\thide-col\t\t-\tHide current column\nbin\tsize\t\thide-col\t\t-\tHide current column\n"
  },
  {
    "path": "tests/load-fec.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/1794685.fec\", \"keystrokes\": \"o\", \"comment\": null}\n{\"sheet\": \"1794685\", \"col\": \"\", \"row\": \"\\u30adheader\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open current row with sheet-specific dive\"}\n"
  },
  {
    "path": "tests/load-fixed-header0.vdx",
    "content": "# test fixed-width loader with header=0  #2265\noption global header 0\noption override filetype fixed\nopen-file sample_data/test.fixed\n"
  },
  {
    "path": "tests/load-fixed-leadingspaces.vdx",
    "content": "# test fixed-width loader preserves leading spaces with header=0  #2265\noption global header 0\noption override filetype fixed\nopen-file sample_data/test-fixed-leadingspaces.txt\n"
  },
  {
    "path": "tests/load-fixed.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\toverride\tfiletype\tset-option\tfixed\t\t\n\t\t\topen-file\tsample_data/countries\to\t\ncountries\tcountry-name--------------------------------\t\trename-col\tcountry name\t^\t\ncountries\tkeywords-------------------------------------------\t\trename-col\tkeywords\t^\t\n"
  },
  {
    "path": "tests/load-grep-json.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/smiths-json.grep\to\t\n"
  },
  {
    "path": "tests/load-grep-standard.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/smiths-standard.grep\to\t\n"
  },
  {
    "path": "tests/load-h5.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sensors.h5\to\topen file\nsensors\t\t0\tdive-row\t\t^J\topen this group or dataset\nsensors_hchoi-20160128pk\t\t0\tdive-row\t\t^J\topen this group or dataset\nsensors_hchoi-20160128pk_bonjour-BP_L\t\t0\tdive-row\t\t^J\topen this group or dataset\n"
  },
  {
    "path": "tests/load-html.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sunshinelist.html\to\topen input in VisiData\nsunshinelist\t\t0\tdive-row\t\t^J\topen this table\ndatatable-disclosures\tYear_ Year   All  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017\t\trename-col\tYear\t^\tedit name of current column\ndatatable-disclosures\tSector_ Sector   All  Children & Youth Services  College  Community & Social Services  Community Safety & Correctional Services  Crown  Education  Electricity  Energy  Health & Long–Term Care  Hospital  Judiciary  Labour  Legislative  Legislative Assembly & Offices  Ministry  Municipality  Ontario Public Service  Other  School Board  Seconded  University  Unknown\t\trename-col\tSector\t^\tedit name of current column\n"
  },
  {
    "path": "tests/load-http-flaky.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\toverride\tfiletype\tset-option\tcsv\t\t\n\t\t\topen-file\thttps://raw.githubusercontent.com/saulpw/visidata/develop/sample_data/benchmark.csv\to\t\n"
  },
  {
    "path": "tests/load-json.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/y77d-th95.json.gz\to\topen input in VisiData\ny77d-th95\t\t0\texpand-cols-depth\t0\tgz(\texpand all visible columns of containers to given depth (0=fully)\ny77d-th95\t\t\tcolumns-sheet\t\tC\topen Columns Sheet\ny77d-th95_columns\tname\t\tsort-asc\t\t[\tsort ascending by current column\ny77d-th95_columns\t\t\tquit-sheet\t\tq\tquit current sheet\n"
  },
  {
    "path": "tests/load-jsonla.vdj",
    "content": "#!vd -p\n{\"longname\": \"open-file\", \"input\": \"sample_data/officials.jsonla\", \"keystrokes\": \"o\"}\n{\"sheet\": \"officials\", \"col\": \"\", \"row\": \"\", \"longname\": \"columns-sheet\", \"input\": \"\", \"keystrokes\": \"Shift+C\", \"comment\": \"open Columns Sheet: edit column properties for current sheet\"}\n"
  },
  {
    "path": "tests/load-lsv.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.lsv\to\t\n"
  },
  {
    "path": "tests/load-msgpack.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/test.msgpack\to\topen input in VisiData\ntest\t\t0\texpand-cols-depth\t0\tgz(\texpand all visible columns of containers to given depth (0=fully)\ntest\t\t\tcolumns-sheet\t\tC\topen Columns Sheet\ntest_columns\tname\t\tsort-asc\t\t[\tsort ascending by current column\ntest_columns\t\t\tquit-sheet\t\tq\tquit current sheet\n"
  },
  {
    "path": "tests/load-msgpackz.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\tfiletype\tset-option\tmsgpackz\t\t\n\t\t\topen-file\tsample_data/test.msgpackz\to\topen input in VisiData\ntest\t\t0\texpand-cols-depth\t0\tgz(\texpand all visible columns of containers to given depth (0=fully)\ntest\t\t\tcolumns-sheet\t\tC\topen Columns Sheet\ntest_columns\tname\t\tsort-asc\t\t[\tsort ascending by current column\ntest_columns\t\t\tquit-sheet\t\tq\tquit current sheet\n"
  },
  {
    "path": "tests/load-numpy.vdj",
    "content": "#!vd -p\n{\"sheet\": \"global\", \"row\": \"npy_allow_pickle\", \"longname\": \"set-option\", \"input\": \"True\", \"keystrokes\": \"\"}\n{\"longname\": \"open-file\", \"input\": \"sample_data/goog.npy\", \"keystrokes\": \"o\"}\n"
  },
  {
    "path": "tests/load-ods.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.ods\to\t\nbenchmark\t\tキbenchmark\topen-row\t\tEnter\topen sheet with copies of rows referenced in current row\n"
  },
  {
    "path": "tests/load-pandas-2.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\tglobal\tfiletype\tset-option\tpandas\t\t\n\t\t\topen-file\tsample_data/StatusPR.csv\to\t\nStatusPR\tMonth\t\tselect-col-regex\tsep\t|\tselect rows matching regex in current column\nStatusPR\tLocation\t\tunselect-col-regex\tpuerto\t\\\tunselect rows matching regex in current column\nStatusPR\t\t\tdelete-selected\t\tgd\tdelete (cut) selected rows and move them to clipboard\nStatusPR\t\t0\tdelete-row\t\td\tdelete (cut) current row and move it to clipboard\nStatusPR\t\t0\tdelete-row\t\td\tdelete (cut) current row and move it to clipboard\nStatusPR\t\t0\tadd-row\t\ta\tappend a blank row\nStatusPR\t\t1\tadd-row\t\ta\tappend a blank row\nStatusPR\t\t1\tadd-rows\t5\tga\tappend a blank row\nStatusPR\t\t\tselect-cols-regex\tsep\tg|\tselect rows matching regex in any visible column\nStatusPR\t\t\tunselect-cols-regex\tases\tg\\\tunselect rows matching regex in any visible column\nStatusPR\t\t\tdelete-selected\t\tgd\tdelete (cut) selected rows and move them to clipboard\n"
  },
  {
    "path": "tests/load-pandas-3.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\nglobal\t\tfiletype\tset-option\tpandas\t\t\n\t\t\topen-file\tsample_data/co3.stata\to\t\nco3\ts\t\tfreq-col\t\tShift+F\topen Frequency Table grouped on current column, with aggregations of other columns\nco3_s_freq\ts\t\tsort-asc\t\t[\tsort ascending by current column; replace any existing sort criteria\nco3_s_freq\thistogram\t\thide-col\t\t-\tHide current column\nco3_s_freq\tpercent\t\thide-col\t\t-\tHide current column\n"
  },
  {
    "path": "tests/load-pandas.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\toverride\tfiletype\tset-option\tpandas\t\t\n\t\t\topen-file\tsample_data/co3.stata\to\t\n"
  },
  {
    "path": "tests/load-parquet.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.parquet\to\tOpen file or URL\n"
  },
  {
    "path": "tests/load-png.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/vdlogo-160x24.png\", \"keystrokes\": \"o\", \"comment\": null}\n"
  },
  {
    "path": "tests/load-sqlite-view.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/employees.sqlite\to\t\nemployees\t\tキemp_view\topen-row\t\tEnter\topen sheet with copies of rows referenced in current row\n"
  },
  {
    "path": "tests/load-sqlite.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/employees.sqlite\to\topen file\nemployees\t\t0\tdive-row\t\t^J\tload the entire table into memory\n"
  },
  {
    "path": "tests/load-stata.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/co3.dta\to\topen file\n"
  },
  {
    "path": "tests/load-toml.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/freshwater-mammals.toml\to\t\nfreshwater-mammals\tmuskrat\t0\topen-cell\t\tzEnter\topen sheet with copies of rows referenced in current cell\nfreshwater-mammals[0].muskrat\tvalue\tキvariants\topen-cell\t\tzEnter\topen sheet with copies of rows referenced in current cell\nfreshwater-mammals[0].muskrat[variants].value\tvalue\tキround-tailed\topen-cell\t\tzEnter\topen sheet with copies of rows referenced in current cell\nfreshwater-mammals\tcapybara\t0\topen-cell\t\tzEnter\topen sheet with copies of rows referenced in current cell\nfreshwater-mammals[0].capybara\tvalue\tキsightings\topen-cell\t\tzEnter\topen sheet with copies of rows referenced in current cell\nfreshwater-mammals[0].capybara[sightings].value\t\t0\topen-row\t\tEnter\topen current row with sheet-specific dive\n"
  },
  {
    "path": "tests/load-usv.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/test.usv\to\t\n"
  },
  {
    "path": "tests/load-xlsx.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample-sales-reps.xlsx\to\t\nsample-sales-reps\t\tキsample-salesv4\tdive-row\t\t^J\t\n"
  },
  {
    "path": "tests/load-xml.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/benchmark.xml\", \"keystrokes\": \"o\", \"comment\": null}\n"
  },
  {
    "path": "tests/load-xpt-n311.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/brakes.xpt\", \"keystrokes\": \"o\", \"comment\": null}\n"
  },
  {
    "path": "tests/load-yaml.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.yml\to\t\nbenchmark\t\t\tcolumns-sheet\t\tShift+C\topen Columns Sheet: edit column properties for current sheet\nbenchmark_columns\tname\t\tsort-asc\t\t[\tsort ascending by current column; replace any existing sort criteria\nbenchmark\t\t0\tselect-row\t\ts\tselect current row\n"
  },
  {
    "path": "tests/load-zip.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.zip\to\t\nbenchmark\t\tキsample_data/,benchmark.csv\topen-row\t\tEnter\topen sheet with copies of rows referenced in current row\n"
  },
  {
    "path": "tests/load_npy.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/benchmark.npy\", \"keystrokes\": \"o\", \"comment\": null, \"replayable\": true}\n"
  },
  {
    "path": "tests/long-title-xlsx-nosave.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tCustomer\t0\tselect-equal-cell\t\t,\tselect rows matching current cell in current column\nbenchmark\t\t\tdup-selected\t\t\"\topen duplicate sheet with only selected rows\nbenchmark_selectedref\tQuantity\t0\tselect-equal-cell\t\t,\tselect rows matching current cell in current column\nbenchmark_selectedref\t\t\tdup-selected\t\t\"\topen duplicate sheet with only selected rows\nbenchmark_selectedref_selectedref\tSKU\t0\tselect-equal-cell\t\t,\tselect rows matching current cell in current column\nbenchmark_selectedref_selectedref\t\t\tdup-selected\t\t\"\topen duplicate sheet with only selected rows\n"
  },
  {
    "path": "tests/macros/golden/test_macro.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016-01-06\tEast\tJones\tPencil\t95\t1.99\t189.05\n2016-01-23\tCentral\tKivell\tBinder\t50\t19.99\t999.50\n2016-02-09\tCentral\tJardine\tPencil\t36\t4.99\t179.64\n2016-02-26\tCentral\tGill\tPen\t27\t19.99\t539.73\n2016-03-15\tWest\tSorvino\tPencil\t56\t2.99\t167.44\n2016-04-01\tEast\tJones\tBinder\t60\t4.99\t299.40\n"
  },
  {
    "path": "tests/macros/test_macro.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\topen input in VisiData\n\t\t\texec-1\n"
  },
  {
    "path": "tests/melt-error.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/test.jsonl\to\t\ntest\tkey1\t\ttype-date\t\t@\t\ntest\tqty\t\ttype-int\t\t#\t\ntest\tamt\t\ttype-float\t\t%\t\ntest\tkey1\t\tkey-col\t\t!\t\ntest\t\t\tmelt\t\tM\t\ntest_melted\t\t\treload-sheet\t\t^R\t\ntest_melted\tVariable\t\tkey-col\t\t!\t\ntest_melted\tkey1\t\tsort-keys-asc\t\tg[\t\n"
  },
  {
    "path": "tests/messenger-nosave.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\toverride\toverwrite\tset-option\ty\t\t^S errors in batchmode, if trying to save over an existing file\n\t\t\topen-file\tsample_data/messenger.pcap\to\t\nmessenger\tsrchost\t\tkey-col\t\t!\t\nmessenger\tdsthost\t\tkey-col\t\t!\t\n"
  },
  {
    "path": "tests/monthly-revenue.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tDate\t0\taddcol-capture\t(\\d+/\\d+)\t;\nbenchmark\tDate_re\t\texpand-col\t\t(\nbenchmark\tDate_re\t\thide-col\t\t-\nbenchmark\tDate\t\thide-col\t\t-\nbenchmark\tDate_re[0]\t\trename-col\tDate\t^\nbenchmark\tPaid\t\ttype-currency\t\t$\t\nbenchmark\tPaid\t\taggregate-col\tsum\t+\t\nbenchmark\tDate\t\tfreq-col\t\tF\t\nbenchmark_Date_freq\tDate\t\tsort-asc\t\t[\t\nbenchmark_Date_freq\tPaid_sum\t\trename-col\tRevenue\t^\t\n"
  },
  {
    "path": "tests/numeric-cols.vdj",
    "content": "#!vd -p\n{\"longname\": \"open-file\", \"input\": \"sample_data/numeric-cols.tsv\", \"keystrokes\": \"o\"}\n{\"sheet\": \"numeric-cols\", \"col\": \"5\", \"row\": \"\", \"longname\": \"hide-col\", \"input\": \"\", \"keystrokes\": \"-\", \"comment\": \"Hide current column\"}\n{\"sheet\": \"numeric-cols\", \"col\": 1, \"row\": \"\", \"longname\": \"rename-col\", \"input\": \"Rep\", \"keystrokes\": \"^\", \"comment\": \"edit name of current column\"}\n"
  },
  {
    "path": "tests/numeric-names.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/numeric-cols.tsv\to\t\nnumeric-cols\t5\t\thide-col\t\t-\tHide current column\n"
  },
  {
    "path": "tests/numeric_binning.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nglobal\t\tnumeric_binning\tset-option\tTrue\t\t\nbenchmark\tQuantity\t\ttype-int\t\t#\t\nbenchmark\tQuantity\t\tfreq-col\t\tF\t\nbenchmark_Quantity_freq\tcount\t\tsort-desc\t\t]\t\nbenchmark_Quantity_freq\thistogram\t\thide-col\t\t-\tHide current column\n"
  },
  {
    "path": "tests/outer-join-1.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/data1.tsv\to\t\n\t\t\topen-file\ttests/data2.tsv\to\t\ndata1\t\t\tsheets-stack\t\tShift+S\topen Sheets Stack: join or jump between the active sheets on the current stack\nsheets\t\t\treload-selected\t\tgCtrl+R\treload all selected sheets\ndata1\t\t\tcolumns-all\t\tgShift+C\topen Columns Sheet: edit column properties for all visible columns from all sheets on the sheets stack\nall_columns\t\tキdata1,Key\tselect-row\t\ts\tselect current row\nall_columns\t\tキdata2,Key\tselect-row\t\ts\tselect current row\nall_columns\t\t\tkey-selected\t\tg!\ttoggle selected rows as key columns on source sheet\nall_columns\t\t\tjoin-sheets-cols\touter\t&\t\ndata1+data2\tA\t\tkey-col\t\t!\ttoggle current column as a key column\ndata1+data2\t\t\tsort-keys-asc\t\tg[\tsort ascending by all key columns; replace any existing sort criteria\ndata1+data2\tA\t\tkey-col\t\t!\ttoggle current column as a key column\n"
  },
  {
    "path": "tests/outer-join-2.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/data1.tsv\to\t\n\t\t\topen-file\ttests/data2.tsv\to\t\ndata1\tKey\t\tkey-col\t\t!\t\ndata2\tKey\t\tkey-col\t\t!\t\ndata2\t\t\tsheets-stack\t\tS\t\nsheets\t\tキdata2\tselect-row\t\ts\t\nsheets\t\tキdata1\tselect-row\t\ts\t\nsheets\t\t\tjoin-sheets\touter\t&\t\ndata2+data1\tA\t\tkey-col\t\t!\t\ndata2+data1\t\t\tsort-keys-asc\t\tg[\t\ndata2+data1\tA\t\tkey-col\t\t!\t\n"
  },
  {
    "path": "tests/output/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "tests/pandas_loader_dup_selected.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\nglobal\t\tfiletype\tset-option\tpandas\t\t\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\t\t0\tselect-row\t\ts\tselect current row\nbenchmark\t\t1\tselect-row\t\ts\tselect current row\nbenchmark\t\t2\tselect-row\t\ts\tselect current row\nbenchmark\t\t\tdup-selected\t\t\"\topen duplicate sheet with only selected rows\n"
  },
  {
    "path": "tests/petsdiet.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tDate\t\tkey-col\t\t!\t\nbenchmark\tCustomer\t\thide-col\t\t-\t\nbenchmark\tItem\t\thide-col\t\t-\t\nbenchmark\tQuantity\t\ttype-int\t\t#\t\nbenchmark\tSKU\t\tselect-col-regex\tFOOD\t|\t\nbenchmark\t\t\tdup-selected\t\t\"\t\nbenchmark_selectedref\tQuantity\t\taggregate-col\tmean\t+\t\nbenchmark_selectedref\tSKU\t\tfreq-col\t\tF\t\nbenchmark_selectedref_SKU_freq\tQuantity_mean\t\ttype-int\t\t#\t\nbenchmark_selectedref_SKU_freq\tQuantity_mean\t\tsort-desc\t\t]\t\n"
  },
  {
    "path": "tests/pivot-error.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/test.jsonl\to\t\ntest\tkey1\t\ttype-date\t\t@\t\ntest\tqty\t\ttype-int\t\t#\t\ntest\tamt\t\ttype-float\t\t%\t\ntest\tqty\t\taggregate-col\tsum\t+\t\ntest\tkey1\t\tkey-col\t\t!\t\ntest\tkey2\t\tpivot\t\tW\t\ntest_pivot_key2_sum\tkey1\t\tsort-desc\t\t]\t\n"
  },
  {
    "path": "tests/pivot-noaggr.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tQuantity\t\tpivot\t\tW\t\n"
  },
  {
    "path": "tests/pivot.vdj",
    "content": "#!vd -p\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"\", \"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\", \"comment\": \"\"}\n{\"sheet\": \"sample\", \"col\": \"Rep\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"\"}\n{\"sheet\": \"sample\", \"col\": \"Units\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"\"}\n{\"sheet\": \"sample\", \"col\": \"Units\", \"row\": \"\", \"longname\": \"aggregate-col\", \"input\": \"sum\", \"keystrokes\": \"+\", \"comment\": \"\"}\n{\"sheet\": \"sample\", \"col\": \"Units\", \"row\": \"\", \"longname\": \"aggregate-col\", \"input\": \"mean\", \"keystrokes\": \"+\", \"comment\": \"\"}\n{\"sheet\": \"sample\", \"col\": \"Item\", \"row\": \"\", \"longname\": \"pivot\", \"input\": \"\", \"keystrokes\": \"W\", \"comment\": \"\"}\n"
  },
  {
    "path": "tests/pr2302.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\", \"comment\": null}\n{\"sheet\": \"sample\", \"row\": \"regex_skip\", \"longname\": \"set-option\", \"input\": \"\"}\n{\"sheet\": \"sample\", \"longname\": \"reload-sheet\"}\n"
  },
  {
    "path": "tests/pr2308.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"tests/small.json\", \"keystrokes\": \"o\", \"comment\": null}\n{\"sheet\": \"small\", \"col\": \"id\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"toggle current column as a key column\"}\n{\"sheet\": \"small\", \"col\": \"A\", \"row\": \"\", \"longname\": \"aggregate-col\", \"input\": \"keymax\", \"keystrokes\": \"+\", \"comment\": \"Add aggregator to current column\"}\n{\"sheet\": \"small\", \"col\": \"\", \"row\": \"\", \"longname\": \"freq-summary\", \"input\": \"\", \"keystrokes\": \"zShift+F\", \"comment\": \"open one-line summary for all rows and selected rows\"}\n"
  },
  {
    "path": "tests/pr2372.tsv",
    "content": "text\n1\n2\n3\n4\n5\n6\n7\n8\n9\n"
  },
  {
    "path": "tests/pr2372.vdj",
    "content": "#!vd -p\n{\"sheet\": \"global\", \"col\": null, \"row\": \"disp_formatter\", \"longname\": \"set-option\", \"input\": \"python\", \"keystrokes\": \"\", \"comment\": null}\n{\"longname\": \"open-file\", \"input\": \"tests/pr2372.tsv\", \"keystrokes\": \"o\"}\n{\"sheet\": \"pr2372\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-rows\", \"input\": \"\", \"keystrokes\": \"gs\", \"comment\": \"select all rows\"}\n{\"sheet\": \"pr2372\", \"col\": \"text\", \"row\": \"\", \"longname\": \"copy-cells\", \"input\": \"\", \"keystrokes\": \"gzy\", \"comment\": \"yank (copy) contents of current column for selected rows to clipboard\"}\n{\"sheet\": \"pr2372\", \"col\": \"text\", \"row\": \"\", \"longname\": \"addcol-new\", \"input\": \"newcol\", \"keystrokes\": \"za\", \"comment\": \"append an empty column\"}\n{\"sheet\": \"pr2372\", \"col\": \"\", \"row\": \"\", \"longname\": \"setcol-clipboard\", \"input\": \"\", \"keystrokes\": \"gzp\", \"comment\": \"set cells of current column for selected rows to last clipboard value\"}\n"
  },
  {
    "path": "tests/pr2400.vdj",
    "content": "#!vd -p\n{\"sheet\": \"global\", \"col\": null, \"row\": \"disp_date_fmt\", \"longname\": \"set-option\", \"input\": \"%b %d, %Y\", \"keystrokes\": \"\", \"comment\": null}\n{\"sheet\": \"global\", \"row\": \"disp_float_fmt\", \"longname\": \"set-option\", \"input\": \"%.05f\", \"keystrokes\": \"\"}\n{\"sheet\": \"global\", \"row\": \"default_width\", \"longname\": \"set-option\", \"input\": \"50\", \"keystrokes\": \"\"}\n{\"longname\": \"open-file\", \"input\": \"sample_data/test.fixed\", \"keystrokes\": \"o\"}\n{\"longname\": \"open-file\", \"input\": \"sample_data/officials.jsonla\", \"keystrokes\": \"o\"}\n{\"sheet\": \"test\", \"col\": \"\", \"row\": \"\", \"longname\": \"sheets-stack\", \"input\": \"\", \"keystrokes\": \"Shift+S\", \"comment\": \"open Sheets Stack: join or jump between the active sheets on the current stack\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\\u30adofficials\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet referenced in current row\"}\n{\"sheet\": \"officials\", \"col\": \"\", \"row\": \"\", \"longname\": \"sheets-stack\", \"input\": \"\", \"keystrokes\": \"Shift+S\", \"comment\": \"open Sheets Stack: join or jump between the active sheets on the current stack\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\\u30adsheets\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet referenced in current row\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\\u30adofficials\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet referenced in current row\"}\n{\"sheet\": \"officials\", \"col\": \"Name\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"toggle current column as a key column\"}\n{\"sheet\": \"officials\", \"col\": \"\", \"row\": \"\", \"longname\": \"sheets-stack\", \"input\": \"\", \"keystrokes\": \"Shift+S\", \"comment\": \"open Sheets Stack: join or jump between the active sheets on the current stack\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\\u30adtest\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet referenced in current row\"}\n{\"sheet\": \"test\", \"col\": 0, \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"toggle current column as a key column\"}\n{\"sheet\": \"test\", \"col\": \"\", \"row\": \"\", \"longname\": \"sheets-stack\", \"input\": \"\", \"keystrokes\": \"Shift+S\", \"comment\": \"open Sheets Stack: join or jump between the active sheets on the current stack\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\\u30adtest\", \"longname\": \"stoggle-row\", \"input\": \"\", \"keystrokes\": \"t\", \"comment\": \"toggle selection of current row\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\\u30adofficials\", \"longname\": \"stoggle-row\", \"input\": \"\", \"keystrokes\": \"t\", \"comment\": \"toggle selection of current row\"}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\", \"longname\": \"join-selected\", \"input\": \"merge\", \"keystrokes\": \"&\", \"comment\": \"merge selected sheets with visible columns from all, keeping rows according to jointype\"}\n"
  },
  {
    "path": "tests/pr2614.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"tests/data1.tsv\", \"keystrokes\": \"o\", \"comment\": null, \"replayable\": true}\n{\"sheet\": \"data1\", \"col\": \"Key\", \"row\": \"\", \"longname\": \"hide-col\", \"input\": \"\", \"keystrokes\": \"-\", \"comment\": \"hide the current column\", \"replayable\": true}\n{\"sheet\": \"data1\", \"col\": \"A\", \"row\": \"\", \"longname\": \"hide-col\", \"input\": \"\", \"keystrokes\": \"-\", \"comment\": \"hide the current column\", \"replayable\": true}\n{\"sheet\": \"data1\", \"col\": \"B\", \"row\": \"\", \"longname\": \"hide-col\", \"input\": \"\", \"keystrokes\": \"-\", \"comment\": \"hide the current column\", \"replayable\": true}\n{\"sheet\": \"data1\", \"col\": 0, \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n"
  },
  {
    "path": "tests/pr2647.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": \"\", \"row\": \"\", \"longname\": \"open-file\", \"input\": \"sample_data/a.tsv\", \"keystrokes\": \"o\", \"comment\": null, \"replayable\": true}\n{\"col\": \"\", \"row\": \"\", \"longname\": \"open-file\", \"input\": \"sample_data/b.tsv\", \"keystrokes\": \"o\", \"replayable\": true}\n{\"sheet\": \"a\", \"col\": \"key\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"toggle current column as a key column\", \"replayable\": true}\n{\"sheet\": \"b\", \"col\": \"key\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"toggle current column as a key column\", \"replayable\": true}\n{\"sheet\": \"b\", \"col\": \"\", \"row\": \"\", \"longname\": \"sheets-stack\", \"input\": \"\", \"keystrokes\": \"Shift+S\", \"comment\": \"open Sheets Stack: join or jump between the active sheets on the current stack\", \"replayable\": true}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": 1, \"longname\": \"stoggle-row\", \"input\": \"\", \"keystrokes\": \"t\", \"comment\": \"toggle selection of current row\", \"replayable\": true}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": 2, \"longname\": \"stoggle-row\", \"input\": \"\", \"keystrokes\": \"t\", \"comment\": \"toggle selection of current row\", \"replayable\": true}\n{\"sheet\": \"sheets\", \"col\": \"\", \"row\": \"\", \"longname\": \"join-selected\", \"input\": \"merge\", \"keystrokes\": \"&\", \"comment\": \"merge selected sheets with visible columns from all, keeping rows according to jointype\", \"replayable\": true}\n{\"sheet\": \"b+a\", \"col\": \"source_sheet\", \"row\": 0, \"longname\": \"edit-cell\", \"input\": \"c\", \"keystrokes\": \"e\", \"comment\": \"edit contents of current cell\", \"replayable\": true}\n"
  },
  {
    "path": "tests/pr2688a.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\", \"comment\": null, \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"Units\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"Unit_Cost\", \"row\": \"\", \"longname\": \"type-float\", \"input\": \"\", \"keystrokes\": \"%\", \"comment\": \"set type of current column to float\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"Units\", \"row\": \"\", \"longname\": \"sort-asc-change\", \"input\": \"\\u241f<Units\", \"keystrokes\": \"z[\", \"comment\": \"sort ascending by current column; keep higher priority sort criteria\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"Unit_Cost\", \"row\": \"\", \"longname\": \"sort-desc-change\", \"input\": \"\\u241f<Units\\u241f>Unit_Cost\", \"keystrokes\": \"z]\", \"comment\": \"sort descending by current column; keep higher priority sort criteria\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"Units\", \"row\": \"\", \"longname\": \"sort-asc-change\", \"input\": \"\", \"keystrokes\": \"z[\", \"comment\": \"sort ascending by current column; keep higher priority sort criteria\", \"replayable\": true}\n"
  },
  {
    "path": "tests/pr2688b.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\", \"comment\": null, \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"Units\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"Unit_Cost\", \"row\": \"\", \"longname\": \"type-float\", \"input\": \"\", \"keystrokes\": \"%\", \"comment\": \"set type of current column to float\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"Units\", \"row\": \"\", \"longname\": \"sort-asc-change\", \"input\": \"\\u241f<Units\", \"keystrokes\": \"z[\", \"comment\": \"sort ascending by current column; keep higher priority sort criteria\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"Unit_Cost\", \"row\": \"\", \"longname\": \"sort-desc-change\", \"input\": \"\\u241f<Units\\u241f>Unit_Cost\", \"keystrokes\": \"z]\", \"comment\": \"sort descending by current column; keep higher priority sort criteria\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"Units\", \"row\": \"\", \"longname\": \"sort-desc-change\", \"input\": \"\\u241f>Units\", \"keystrokes\": \"z]\", \"comment\": \"sort descending by current column; keep higher priority sort criteria\", \"replayable\": true}\n"
  },
  {
    "path": "tests/pr2815.vdj",
    "content": "#!vd -p\n{\"sheet\": \"global\", \"col\": null, \"row\": \"filetype\", \"longname\": \"set-option\", \"input\": \"jsonla\", \"keystrokes\": \"\", \"comment\": null, \"replayable\": null}\n{\"longname\": \"open-file\", \"input\": \"sample_data/pr2815.jsonl\", \"keystrokes\": \"o\", \"replayable\": true}\n"
  },
  {
    "path": "tests/pr2855.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": \"\", \"row\": \"\", \"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\", \"comment\": null, \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"OrderDate\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"A\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"B\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"C\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n{\"col\": \"\", \"row\": \"\", \"longname\": \"open-new\", \"input\": \"\", \"keystrokes\": \"Shift+A\", \"comment\": \"Open new empty sheet\", \"replayable\": true}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"add-row\", \"input\": \"\", \"keystrokes\": \"a\", \"comment\": \"append a blank row\", \"replayable\": true}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": 0, \"longname\": \"add-row\", \"input\": \"\", \"keystrokes\": \"a\", \"comment\": \"append a blank row\", \"replayable\": true}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": 1, \"longname\": \"add-row\", \"input\": \"\", \"keystrokes\": \"a\", \"comment\": \"append a blank row\", \"replayable\": true}\n{\"sheet\": \"unnamed\", \"col\": \"A\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n{\"sheet\": \"unnamed\", \"col\": \"B\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n{\"sheet\": \"unnamed\", \"col\": \"C\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n{\"sheet\": \"unnamed\", \"col\": \"D\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"D\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"E\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"F\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"G\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n{\"sheet\": \"unnamed\", \"col\": \"E\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n{\"sheet\": \"unnamed\", \"col\": \"F\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n{\"sheet\": \"unnamed\", \"col\": \"G\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n{\"sheet\": \"unnamed\", \"col\": \"H\", \"row\": \"\", \"longname\": \"addcol-incr\", \"input\": \"\", \"keystrokes\": \"i\", \"comment\": \"add column with incremental values\", \"replayable\": true}\n"
  },
  {
    "path": "tests/prefer-visible-col.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\t\nsample\tUnits\t\taddcol-expr\tUnits\t=\tcreate new column from Python expression, with column names as variables\nsample\tUnits\t\tfreeze-col\t\t'\tadd a frozen copy of current column with all cells evaluated\nsample\tUnits\t\thide-col\t\t-\tHide current column\nsample\tUnits\t\thide-col\t\t-\tHide current column\nsample\tUnits_frozen\t\trename-col\tUnits\t^\tedit name of current column\nsample\t\t\tselect-rows\t\tgs\tselect all rows\nsample\tUnits\t0\tsetcol-input\t0\tge\tset contents of current column for selected rows to same input\nsample\t\t\tunselect-rows\t\tgu\tunselect all rows\nsample\tUnits\t\ttype-int\t\t#\tset type of current column to int\nsample\tUnits\t\taddcol-expr\tUnits + 1\t=\tcreate new column from Python expression, with column names as variables\n"
  },
  {
    "path": "tests/pull2140.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/empty-table.html\", \"keystrokes\": \"o\", \"comment\": null}\n"
  },
  {
    "path": "tests/quantum-sum-manual.vdj",
    "content": "#!vd -p\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"\", \"longname\": \"add-sheet\", \"input\": \"1\", \"keystrokes\": \"A\", \"comment\": \"open new blank sheet with number columns\"}\n{\"sheet\": \"unnamed\", \"col\": \"\", \"row\": \"\", \"longname\": \"add-rows\", \"input\": \"100000\", \"keystrokes\": \"ga\", \"comment\": \"add N blank rows\"}\n{\"sheet\": \"unnamed\", \"col\": 0, \"row\": \"\", \"longname\": \"addcol-expr\", \"input\": \"random.random()\", \"keystrokes\": \"=\", \"comment\": \"create new column from Python expression, with column names as variables\"}\n{\"sheet\": \"unnamed\", \"col\": \"random.random()\", \"row\": \"\", \"longname\": \"type-float\", \"input\": \"\", \"keystrokes\": \"%\", \"comment\": \"set type of current column to float\"}\n{\"sheet\": \"unnamed\", \"col\": \"random.random()\", \"row\": \"\", \"longname\": \"rename-col\", \"input\": \"x\", \"keystrokes\": \"^\", \"comment\": \"edit name of current column\"}\n{\"sheet\": \"unnamed\", \"col\": \"x\", \"row\": \"\", \"longname\": \"addcol-expr\", \"input\": \"int(x*6+1)\", \"keystrokes\": \"=\", \"comment\": \"create new column from Python expression, with column names as variables\"}\n{\"sheet\": \"unnamed\", \"col\": \"x\", \"row\": \"\", \"longname\": \"hide-col\", \"input\": \"\", \"keystrokes\": \"-\", \"comment\": \"hide current column\"}\n{\"sheet\": \"unnamed\", \"col\": \"int(x*6+1)\", \"row\": \"\", \"longname\": \"rename-col\", \"input\": \"d6\", \"keystrokes\": \"^\", \"comment\": \"edit name of current column\"}\n{\"sheet\": \"unnamed\", \"col\": \"d6\", \"row\": \"\", \"longname\": \"addcol-expr\", \"input\": \"random.choice(string.ascii_uppercase)\", \"keystrokes\": \"=\", \"comment\": \"create new column from Python expression, with column names as variables\"}\n{\"sheet\": \"unnamed\", \"col\": \"d6\", \"row\": \"\", \"longname\": \"aggregate-col\", \"input\": \"sum\", \"keystrokes\": \"+\", \"comment\": \"add aggregator to the current column\"}\n{\"sheet\": \"unnamed\", \"col\": \"random.choice(string.ascii_uppercase)\", \"row\": \"\", \"longname\": \"freq-col\", \"input\": \"\", \"keystrokes\": \"F\", \"comment\": \"open Frequency Table grouped on current column\"}\n{\"sheet\": \"unnamed_random.choice(string.ascii_uppercase)_freq\", \"col\": \"random.choice(string.ascii_uppercase)\", \"row\": \"\", \"longname\": \"sort-desc\", \"input\": \"\", \"keystrokes\": \"]\", \"comment\": \"sort descending by current column\"}\n{\"sheet\": \"unnamed_random.choice(string.ascii_uppercase)_freq\", \"col\": \"random.choice(string.ascii_uppercase)\", \"row\": \"\", \"longname\": \"sort-asc\", \"input\": \"\", \"keystrokes\": \"[\", \"comment\": \"sort ascending by current column\"}\n"
  },
  {
    "path": "tests/quit-perf.vdj",
    "content": "#!vd -p\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"\", \"longname\": \"open-file\", \"input\": \"sample_data/2m.tsv\", \"keystrokes\": null, \"comment\": null}\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"\", \"longname\": \"quit-all\", \"input\": \"\"}\n"
  },
  {
    "path": "tests/rank-sheetrank-sorted-cols.vdj",
    "content": "#!vd -p\n{\"sheet\": \"global\", \"col\": null, \"row\": \"disp_date_fmt\", \"longname\": \"set-option\", \"input\": \"%b %d, %Y\", \"keystrokes\": \"\", \"comment\": null, \"replayable\": null}\n{\"sheet\": \"global\", \"row\": \"disp_float_fmt\", \"longname\": \"set-option\", \"input\": \"%.05f\", \"keystrokes\": \"\"}\n{\"sheet\": \"global\", \"row\": \"default_width\", \"longname\": \"set-option\", \"input\": \"50\", \"keystrokes\": \"\"}\n{\"col\": \"\", \"row\": \"\", \"longname\": \"open-file\", \"input\": \"sample_data/employees.sqlite\", \"keystrokes\": \"o\", \"replayable\": true}\n{\"sheet\": \"employees\", \"col\": \"\", \"row\": 1, \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open current row with sheet-specific dive\", \"replayable\": true}\n{\"sheet\": \"emp\", \"col\": \"deptno\", \"row\": \"\", \"longname\": \"key-col-on\", \"input\": \"\", \"comment\": \"set current column as a key column\", \"replayable\": true}\n{\"sheet\": \"emp\", \"col\": \"job\", \"row\": \"\", \"longname\": \"key-col-on\", \"input\": \"\", \"comment\": \"set current column as a key column\", \"replayable\": true}\n{\"sheet\": \"emp\", \"col\": \"mgr\", \"row\": \"\", \"longname\": \"key-col-on\", \"input\": \"\", \"comment\": \"set current column as a key column\", \"replayable\": true}\n{\"sheet\": \"emp\", \"col\": \"empno\", \"row\": \"\", \"longname\": \"key-col-off\", \"input\": \"\", \"comment\": \"unset current column as a key column\", \"replayable\": true}\n{\"sheet\": \"emp\", \"col\": \"\", \"row\": \"\", \"longname\": \"addcol-rank-sheet\", \"input\": \"\", \"comment\": \"add column with the rank of each row based on its key columns\", \"replayable\": true}\n{\"sheet\": \"emp\", \"col\": \"emp_sheetrank\", \"row\": \"\", \"longname\": \"rename-col\", \"input\": \"sheetrank_default_sort\", \"keystrokes\": \"^\", \"comment\": \"rename current column\", \"replayable\": true}\n{\"sheet\": \"emp\", \"col\": \"deptno\", \"row\": \"\", \"longname\": \"sort-asc\", \"input\": \"\", \"keystrokes\": \"[\", \"comment\": \"sort ascending by current column; replace any existing sort criteria\", \"replayable\": true}\n{\"sheet\": \"emp\", \"col\": \"job\", \"row\": \"\", \"longname\": \"sort-desc-add\", \"input\": \"\", \"keystrokes\": \"z]\", \"comment\": \"sort descending by current column; add to existing sort criteria\", \"replayable\": true}\n{\"sheet\": \"emp\", \"col\": \"\", \"row\": \"\", \"longname\": \"addcol-rank-sheet\", \"input\": \"\", \"comment\": \"add column with the rank of each row based on its key columns\", \"replayable\": true}\n{\"sheet\": \"emp\", \"col\": \"emp_sheetrank\", \"row\": \"\", \"longname\": \"rename-col\", \"input\": \"sheetrank_1asc2desc\", \"keystrokes\": \"^\", \"comment\": \"rename current column\", \"replayable\": true}\n{\"sheet\": \"emp\", \"col\": \"deptno\", \"row\": \"\", \"longname\": \"sort-asc\", \"input\": \"\", \"keystrokes\": \"[\", \"comment\": \"sort ascending by current column; replace any existing sort criteria\", \"replayable\": true}\n{\"sheet\": \"emp\", \"col\": \"job\", \"row\": \"\", \"longname\": \"sort-asc-add\", \"input\": \"\", \"keystrokes\": \"z[\", \"comment\": \"sort ascending by current column; add to existing sort criteria\", \"replayable\": true}\n{\"sheet\": \"emp\", \"col\": \"mgr\", \"row\": \"\", \"longname\": \"sort-desc-add\", \"input\": \"\", \"keystrokes\": \"z]\", \"comment\": \"sort descending by current column; add to existing sort criteria\", \"replayable\": true}\n{\"sheet\": \"emp\", \"col\": \"\", \"row\": \"\", \"longname\": \"addcol-rank-sheet\", \"input\": \"\", \"comment\": \"add column with the rank of each row based on its key columns\", \"replayable\": true}\n{\"sheet\": \"emp\", \"col\": \"emp_sheetrank\", \"row\": \"\", \"longname\": \"rename-col\", \"input\": \"sheetrank_1asc2asc3desc\", \"keystrokes\": \"^\", \"comment\": \"rename current column\", \"replayable\": true}\n"
  },
  {
    "path": "tests/record-aggr.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\t\nsample\tUnits\t\ttype-int\t\t#\tset type of current column to int\nsample\tUnits\t\tmemo-aggregate\tsum\tz+\trecord result of aggregator over values in selected rows for current column\nsample\tUnits\t\taddcol-expr\tUnits*100/Units_sum\t=\tcreate new column from Python expression, with column names as variables\nsample\tUnits*100/Units_sum\t\ttype-float\t\t%\tset type of current column to float\nsample\tUnits*100/Units_sum\t\trename-col\tUnits_pct\t^\tedit name of current column\nsample\tUnits_pct\t\tmemo-aggregate\tsum\tz+\trecord result of aggregator over values in selected rows for current column\n"
  },
  {
    "path": "tests/remove-errors.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tDate\t\ttype-date\t\t@\t\nbenchmark\tCustomer\t\tselect-col-regex\tAshworth\t|\t\nbenchmark\tQuantity\t\tsetcol-expr\t'one'\tg=\t\nbenchmark\t\t\tunselect-rows\t\tgu\t\nbenchmark\tQuantity\t\ttype-int\t\t#\t\nbenchmark\t\t\tdescribe-sheet\t\tI\t\nbenchmark_describe\terrors\tキQuantity\tselect-cell\t\tzs\t\nbenchmark_describe\t\t\tprev-sheet\t\t^^\t\nbenchmark\t\t\tdelete-selected\t\tgd\t\n"
  },
  {
    "path": "tests/rows-select-expr.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/StatusPR.csv\to\t\nStatusPR\t\t\tselect-expr\t'Puerto Rico' in Location\tz|\t\nStatusPR\t\t\tunselect-expr\t'number' in Unit\tz\\\t\nStatusPR\t\t\tdup-selected\t\t\"\t\n"
  },
  {
    "path": "tests/save-benchmarks.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\tDate\t\ttype-date\t\t@\tset type of current column to date\nbenchmark\tQuantity\t\ttype-int\t\t#\tset type of current column to int\nbenchmark\tUnit\t\ttype-currency\t\t$\tset type of current column to currency\n"
  },
  {
    "path": "tests/save-geojson.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.geojson\to\t\nsample\t\t\taddcol-incr\t\ti\t\nsample\tA\t\tslide-left\t\tShift+H\t\nsample\tstate\t\thide-col\t\t-\t\nsample\tpostal-code\t2\tedit-cell\t92104\te\t\nsample\tcounty_fips\t\ttype-string\t\t~\t\nsample\tcounty_fips\t\taddcol-expr\t\"06\"\t=\t\nsample\t\"06\"\t\trename-col\tstate_fips\t^\t\n"
  },
  {
    "path": "tests/save-json.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\toverride\toverwrite\tset-option\ty\t\t^S errors in batchmode, if trying to save over an existing file\n\t\t\topen-file\tsample_data/test.jsonl\to\t\ntest\t\t\tcolumns-sheet\t\tC\t\ntest_columns\tname\t\tsort-asc\t\t[\t\ntest_columns\t\t\tquit-sheet\t\tq\t\ntest\tamt\t\tkey-col\t\t!\t\ntest\tkey1\t\tkey-col\t\t!\t\ntest\t\t\tsort-keys-asc\t\tg[\t\ntest\tamt\t\tkey-col\t\t!\t\ntest\tkey1\t\tkey-col\t\t!\t\n"
  },
  {
    "path": "tests/save-jsonla.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\", \"comment\": null}\n{\"sheet\": \"sample\", \"col\": \"Units\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\"}\n{\"sheet\": \"sample\", \"col\": \"Unit_Cost\", \"row\": \"\", \"longname\": \"type-float\", \"input\": \"\", \"keystrokes\": \"%\", \"comment\": \"set type of current column to float\"}\n{\"sheet\": \"sample\", \"col\": \"Total\", \"row\": \"\", \"longname\": \"type-float\", \"input\": \"\", \"keystrokes\": \"%\", \"comment\": \"set type of current column to float\"}\n{\"sheet\": \"sample\", \"col\": \"OrderDate\", \"row\": \"\", \"longname\": \"type-date\", \"input\": \"\", \"keystrokes\": \"@\", \"comment\": \"set type of current column to date\"}\n"
  },
  {
    "path": "tests/save-usv.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\t\n"
  },
  {
    "path": "tests/setcol_fake.vdj",
    "content": "#!vd -p\n{\"row\": \"faker_salt\", \"longname\": \"set-option\", \"input\": \"1\"}\n{\"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\"}\n{\"sheet\": \"sample\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-rows\", \"input\": \"\", \"keystrokes\": \"gs\", \"comment\": \"select all rows\"}\n{\"sheet\": \"sample\", \"col\": \"Rep\", \"row\": \"\", \"longname\": \"setcol-fake\", \"input\": \"name\", \"comment\": \"\"}\n"
  },
  {
    "path": "tests/setcol_precision_less.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\", \"comment\": null}\n{\"sheet\": \"sample\", \"col\": \"Unit_Cost\", \"row\": \"\", \"longname\": \"type-float\", \"input\": \"\", \"keystrokes\": \"%\", \"comment\": \"set type of current column to float\"}\n{\"sheet\": \"sample\", \"col\": \"Unit_Cost\", \"row\": \"\", \"longname\": \"setcol-precision-less\", \"input\": \"\", \"comment\": \"show less precision in current column\"}\n"
  },
  {
    "path": "tests/setcol_precision_more.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\", \"comment\": null}\n{\"sheet\": \"sample\", \"col\": \"Total\", \"row\": \"\", \"longname\": \"type-currency\", \"input\": \"\", \"keystrokes\": \"$\", \"comment\": \"set type of current column to currency\"}\n{\"sheet\": \"sample\", \"col\": \"Total\", \"row\": \"\", \"longname\": \"setcol-precision-more\", \"input\": \"\", \"comment\": \"show more precision in current column\"}\n"
  },
  {
    "path": "tests/small.json",
    "content": "[\n{\"id\": 1.0, \"A\": 1},\n{\"id\": 2.0, \"A\": 1}\n]\n"
  },
  {
    "path": "tests/sort-levels.tsv",
    "content": "primary\tsecondary\ttertiary\n1\t1\t1\n2\t2\t4\n1\t3\t2\n1\t1\t1\n1\t3\t2\n2\t2\t4\n1\t1\t1\n2\t2\t4\n2\t2\t4\n1\t1\t1\n1\t3\t2\n2\t2\t3\n2\t2\t4\n1\t3\t2\n2\t2\t4\n2\t2\t4\n1\t1\t1\n2\t2\t3\n1\t1\t1\n1\t1\t1\n1\t3\t2\n2\t1\t3\n2\t1\t3\n1\t3\t2\n1\t3\t2\n2\t1\t3\n2\t2\t4\n1\t3\t1\n2\t1\t3\n1\t1\t1\n2\t3\t3\n2\t2\t3\n2\t1\t3\n2\t1\t3\n1\t1\t1\n1\t1\t1\n1\t3\t2\n2\t2\t3\n2\t2\t4\n1\t3\t1\n1\t1\t1\n2\t2\t4\n1\t3\t2\n1\t1\t1\n1\t3\t1\n2\t3\t2\n1\t3\t2\n2\t2\t3\n1\t1\t1\n"
  },
  {
    "path": "tests/sort-levels.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/sort-levels.tsv\to\t\nsort-levels\tprimary\t\tsort-asc\t\t[\tsort ascending by current column; replace any existing sort criteria\nsort-levels\tsecondary\t\tsort-asc-add\t\tz[\tsort ascending by current column; add to existing sort criteria\nsort-levels\ttertiary\t\tsort-desc-add\t\tz]\tsort descending by current column; add to existing sort criteria\n"
  },
  {
    "path": "tests/sortorder.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\", \"comment\": null, \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"Rep\", \"row\": \"\", \"longname\": \"sort-asc-change\", \"input\": \"\\u241f<Rep\", \"keystrokes\": \"z[\", \"comment\": \"sort ascending by current column; keep higher priority sort criteria\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"Item\", \"row\": \"\", \"longname\": \"sort-desc-change\", \"input\": \"\\u241f<Rep\\u241f>Item\", \"keystrokes\": \"z]\", \"comment\": \"sort descending by current column; keep higher priority sort criteria\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"Units\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"Units\", \"row\": \"\", \"longname\": \"sort-asc-change\", \"input\": \"\\u241f<Rep\\u241f>Item\\u241f<Units\", \"keystrokes\": \"z[\", \"comment\": \"sort ascending by current column; keep higher priority sort criteria\", \"replayable\": true}\n{\"sheet\": \"sample\", \"col\": \"\", \"row\": \"\", \"longname\": \"columns-sheet\", \"input\": \"\", \"keystrokes\": \"Shift+C\", \"comment\": \"open Columns Sheet: edit column properties for current sheet\", \"replayable\": true}\n"
  },
  {
    "path": "tests/sqlite_withoutrowid.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\ttests/without_rowid.db\to\t\nwithout_rowid\t\tキwithoutrowid\topen-row\t\tEnter\topen sheet with copies of rows referenced in current row\n"
  },
  {
    "path": "tests/sum-freq-table.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\t\nsample\tUnits\t\ttype-int\t\t#\tset type of current column to int\nsample\tUnits\t\taggregate-col\tsum\t+\tAdd aggregator to current column\nsample\tUnits\t\tfreq-col\t\tShift+F\topen Frequency Table grouped on current column, with aggregations of other columns\nsample_Units_freq\tUnits\t\tsort-asc\t\t[\tsort ascending by current column; replace any existing sort criteria\n"
  },
  {
    "path": "tests/test-delimiter.sh",
    "content": "#!/usr/bin/env bash\n# Test delimiter handling across formats and CLI args  #2727\nsource tests/testenv.sh\n\nset -e\n\nVDB=\"$VD --batch\"\nFAIL=0\n\ncheck() {\n    local desc=\"$1\" expected=\"$2\"\n    shift 2\n    local result rc\n    result=$($VDB \"$@\" -O -) && rc=$? || rc=$?\n    if [[ $rc -ne 0 ]]; then\n        echo \"FAIL: $desc (vd exited with $rc)\"\n        FAIL=1\n    elif [[ \"$result\" != \"$expected\" ]]; then\n        echo \"FAIL: $desc\"\n        echo \"  expected: '$expected'\"\n        echo \"  got:      '$result'\"\n        FAIL=1\n    fi\n}\n\nsave_check() {\n    local desc=\"$1\" infile=\"$2\" outfile=\"$3\"\n    shift 3\n    $VDB \"$@\" \"$infile\" -o \"$outfile\"\n    if ! diff \"$infile\" \"$outfile\" > /dev/null 2>&1; then\n        echo \"FAIL: $desc\"\n        diff \"$infile\" \"$outfile\" | head -5\n        FAIL=1\n    fi\n}\n\nmkdir -p $OUTDIR\n\n# Create test fixtures\nprintf 'a|b|c\\n1|2|3\\n4|5|6\\n' > $OUTDIR/test.psv\nprintf 'a;b;c\\n1;2;3\\n4;5;6\\n' > $OUTDIR/test-semi.csv\nprintf 'a|b|c\\n1|2|3\\n4|5|6\\n' > $OUTDIR/pipe.txt\n\n# === Basic format loading ===\ncheck \"tsv: first cell\" \"2016-01-06\" sample_data/sample.tsv\ncheck \"csv: first cell\" \"7/3/2018 1:47p\" sample_data/benchmark.csv\ncheck \"psv: first cell\" \"1\" $OUTDIR/test.psv\ncheck \"psv: second col\" \"2\" $OUTDIR/test.psv +1:0\ncheck \"usv: first cell\" \"d\" sample_data/test.usv\n\n# === -d (generic delimiter) for TSV-family ===\ncheck \"-d pipe on .txt\" \"1\" $OUTDIR/pipe.txt -d \"|\"\ncheck \"-d pipe on .txt col1\" \"2\" $OUTDIR/pipe.txt -d \"|\" +1:0\n\n# === -d for CSV (#2727) ===\ncheck \"-d semicolon on .csv\" \"1\" $OUTDIR/test-semi.csv -f csv -d \";\"\ncheck \"-d semicolon on .csv col1\" \"2\" $OUTDIR/test-semi.csv -f csv -d \";\" +1:0\n\n# === --csv-delimiter ===\ncheck \"--csv-delimiter semicolon\" \"1\" $OUTDIR/test-semi.csv --csv-delimiter \";\"\n\n# === Roundtrip saves (same file format) ===\nsave_check \"tsv roundtrip\" sample_data/sample.tsv $OUTDIR/roundtrip.tsv\nsave_check \"psv roundtrip\" $OUTDIR/test.psv $OUTDIR/roundtrip.psv\nsave_check \"usv roundtrip\" sample_data/test.usv $OUTDIR/roundtrip.usv\n\n# CSV roundtrip (header check — csv may normalize quoting)\n$VDB sample_data/benchmark.csv -o $OUTDIR/roundtrip.csv\ndiff <(head -1 sample_data/benchmark.csv) <(head -1 $OUTDIR/roundtrip.csv) || { echo \"FAIL: csv roundtrip header\"; FAIL=1; }\n\n# -d roundtrip: load with -d, save, verify delimiter in output\n$VDB $OUTDIR/pipe.txt -d \"|\" -o $OUTDIR/pipe-rt.txt\ngrep -q '|' $OUTDIR/pipe-rt.txt || { echo \"FAIL: -d pipe roundtrip save\"; FAIL=1; }\n\n# Semicolon CSV roundtrip via -d\n$VDB $OUTDIR/test-semi.csv -f csv -d \";\" -o $OUTDIR/semi-rt.csv\ngrep -q ';' $OUTDIR/semi-rt.csv || { echo \"FAIL: -d semicolon csv roundtrip\"; FAIL=1; }\n\n# === Save-as to new file (different path string) ===\n# save_psv should set delimiter on new output path\n$VDB $OUTDIR/test.psv -o $OUTDIR/new-output.psv\ngrep -q '|' $OUTDIR/new-output.psv || { echo \"FAIL: save-as new .psv\"; FAIL=1; }\n\n# === Cross-format save ===\n# PSV loaded, saved as CSV — should use csv defaults, not pipe\n$VDB $OUTDIR/test.psv -o $OUTDIR/cross.csv\nhead -1 $OUTDIR/cross.csv | grep -q ',' || { echo \"FAIL: psv->csv uses comma\"; FAIL=1; }\nhead -1 $OUTDIR/cross.csv | grep -qv '|' || { echo \"FAIL: psv->csv no pipes\"; FAIL=1; }\n\nif [[ $FAIL -eq 1 ]]; then\n    echo \"FAILED\"\n    exit 1\nfi\necho \"all delimiter tests passed\"\n"
  },
  {
    "path": "tests/test-macros.sh",
    "content": "#!/usr/bin/env bash\n# Test replaying macros  #1652\nsource tests/testenv.sh\nmkdir -p $OUTDIR\nXDG_DATA_HOME=tests/xdg/data XDG_CONFIG_HOME=tests/xdg/config \\\n    $VD --batch -p tests/macros/test_macro.vd --output $OUTDIR/test_macro.tsv\ndiff tests/macros/golden/test_macro.tsv $OUTDIR/test_macro.tsv\n"
  },
  {
    "path": "tests/test-perf.sh",
    "content": "#!/usr/bin/env bash\n# Run perf tests and report wall time  #2369\nsource tests/testenv.sh\n\nfor i in tests/*-perf.vd*; do\n    testname=$(basename \"$i\" | sed 's/\\.vd.*//')\n    /usr/bin/time -f \"%e\" -o /tmp/vd_perf_time $VD --batch --play \"$i\" -o /dev/null\n    echo \"$testname: $(cat /tmp/vd_perf_time)s\"\ndone\n"
  },
  {
    "path": "tests/test-pytest.sh",
    "content": "#!/usr/bin/env bash\n# Run Python unit tests\nsource tests/testenv.sh\n$PYTHON -m pytest visidata/tests/ ${PYTEST_FLAGS:--q}\n"
  },
  {
    "path": "tests/test-roundtrip.sh",
    "content": "#!/usr/bin/env bash\n# Test format round-trip: load file, save it, reload saved version, save again.\n# Verifies that VisiData's save is idempotent for each format.\n# Usage: test-roundtrip.sh [format ...]\n#   With no args, tests all formats with roundtrip set in dev/formats.jsonl\n\nsource tests/testenv.sh\nmkdir -p $OUTDIR\n\nFAILED=0\nPASSED=0\nSKIPPED=0\n\ntest_roundtrip() {\n    local fmt=\"$1\" src=\"$2\"\n    local out1=\"$OUTDIR/roundtrip1.$fmt\"\n    local out2=\"$OUTDIR/roundtrip2.$fmt\"\n\n    if [ ! -f \"$src\" ]; then\n        echo \"SKIP: $fmt (missing $src)\"\n        SKIPPED=$((SKIPPED + 1))\n        return\n    fi\n\n    rm -f \"$out1\" \"$out2\"\n\n    # First pass: load source, save as format\n    $VD \"$src\" --batch -o \"$out1\"\n    if [ ! -f \"$out1\" ]; then\n        echo \"FAIL: $fmt (no output from first pass)\"\n        FAILED=$((FAILED + 1))\n        return\n    fi\n\n    # Second pass: reload saved version, save again\n    $VD \"$out1\" --batch -o \"$out2\"\n    if [ ! -f \"$out2\" ]; then\n        echo \"FAIL: $fmt (no output from second pass)\"\n        FAILED=$((FAILED + 1))\n        return\n    fi\n\n    # Compare: second save should match first (idempotent round-trip)\n    if diff -q \"$out1\" \"$out2\" >/dev/null 2>&1; then\n        PASSED=$((PASSED + 1))\n    else\n        echo \"DIFF: roundtrip $fmt\"\n        diff \"$out1\" \"$out2\"\n        FAILED=$((FAILED + 1))\n    fi\n}\n\n# Find a sample file for a given format\nfind_source() {\n    local fmt=\"$1\"\n    for dir in sample_data tests; do\n        for prefix in benchmark sample test small; do\n            local f=\"$dir/$prefix.$fmt\"\n            if [ -f \"$f\" ]; then\n                echo \"$f\"\n                return\n            fi\n        done\n    done\n}\n\nif [ $# -gt 0 ]; then\n    for fmt in \"$@\"; do\n        src=$(find_source \"$fmt\")\n        test_roundtrip \"$fmt\" \"$src\"\n    done\nelse\n    while IFS= read -r line; do\n        read -r fmt src < <($PYTHON -c \"\nimport sys, json\nd = json.loads(sys.argv[1])\nif d.get('roundtrip'):\n    print(d['filetype'], d.get('roundtrip_source', ''))\n\" \"$line\" 2>/dev/null)\n        [ -z \"$fmt\" ] && continue\n        [ -z \"$src\" ] && src=$(find_source \"$fmt\")\n        test_roundtrip \"$fmt\" \"$src\"\n    done < dev/formats.jsonl\nfi\n\n[ $SKIPPED -gt 0 ] && SKIP_MSG=\", $SKIPPED skipped\" || SKIP_MSG=\"\"\nif [ $FAILED -gt 0 ]; then\n    echo \"FAIL: $PASSED passed, $FAILED failed${SKIP_MSG}\"\n    exit 1\nelse\n    echo \"PASS: $PASSED passed${SKIP_MSG}\"\nfi\n"
  },
  {
    "path": "tests/test-smoke.sh",
    "content": "#!/usr/bin/env bash\n# Ensure VisiData starts and can open a directory\nsource tests/testenv.sh\n$VD --version\n$VD -f dir . --batch -o /dev/null\n"
  },
  {
    "path": "tests/test-startpos.sh",
    "content": "#!/usr/bin/env bash\n# Test startpos (+N, +col:row) CLI positioning  #2425\nsource tests/testenv.sh\n\nset -e\n\nVD=\"$VD --batch -O -\"\nFAIL=0\n\ncheck() {\n    local desc=\"$1\" expected=\"$2\"\n    shift 2\n    local result rc\n    result=$($VD \"$@\") && rc=$? || rc=$?\n    if [[ $rc -ne 0 ]]; then\n        echo \"FAIL: $desc (vd exited with $rc)\"\n        FAIL=1\n    elif [[ \"$result\" != \"$expected\" ]]; then\n        echo \"FAIL: $desc (expected '$expected', got '$result')\"\n        FAIL=1\n    fi\n}\n\n# default: no positioning, cursor at row 0 col 0\ncheck \"default position\" \"dept\" sample_data/employees.sqlite\n# +N: row positioning\ncheck \"+1 -> emp\" \"emp\" sample_data/employees.sqlite +1\ncheck \"+2 -> emp_view\" \"emp_view\" sample_data/employees.sqlite +2\n\n# +col:row positioning (col 1 = 'rows' count column)\ncheck \"+1:0 -> 4 (dept rows)\" \"4\" sample_data/employees.sqlite +1:0\ncheck \"+1:1 -> 14 (emp rows)\" \"14\" sample_data/employees.sqlite +1:1\n\n# per-file positioning: active sheet is first input\ncheck \"a +1 b -> a at row 1\" \"emp\" sample_data/employees.sqlite +1 sample_data/benchmark.csv\n\n# only preceding input gets positioned\ncheck \"a +1 b -> b unpositioned\" \"7/3/2018 1:47p\" sample_data/benchmark.csv sample_data/employees.sqlite +1\n\n# subsheet navigation (dept table: deptno=10,20,30,40; dname=ACCOUNTING,RESEARCH,SALES,OPERATIONS)\ncheck \"+0:0:: -> dept subsheet\" \"10\" sample_data/employees.sqlite +0:0::\ncheck \"+0:dept:: -> dept by name\" \"10\" sample_data/employees.sqlite +0:dept::\ncheck \"+0:0:1:0 -> dname col\" \"ACCOUNTING\" sample_data/employees.sqlite +0:0:1:0\ncheck \"+0:0::1 -> row 1\" \"20\" sample_data/employees.sqlite +0:0::1\n\nif [[ $FAIL -eq 1 ]]; then\n    echo \"FAILED\"\n    exit 1\nfi\necho \"all startpos tests passed\"\n"
  },
  {
    "path": "tests/test-startup-time.sh",
    "content": "#!/usr/bin/env bash\n# Test startup time less than 400ms  #2216\nsource tests/testenv.sh\n/usr/bin/time -f \"%U\" -o /tmp/vd_start_time $VD -b -N -p dev/quit.vdx\necho \"startup time: $(cat /tmp/vd_start_time)s\"\n$PYTHON -c 'assert float(open(\"/tmp/vd_start_time\").read()) < 0.40, \"startup should be under 400ms\"'\n"
  },
  {
    "path": "tests/test-stdin-replay.sh",
    "content": "#!/usr/bin/env bash\n# Test replaying input from stdin\nsource tests/testenv.sh\nmkdir -p $OUTDIR\nprintf '{\"a\":1}\\n{\"a\":2}\\n' | $VD -f jsonl -p dev/test-stdin-replay.vdx --batch -N -o $OUTDIR/stdin-replay.tsv\ndiff tests/golden/stdin-replay.tsv $OUTDIR/stdin-replay.tsv\n"
  },
  {
    "path": "tests/test-stdin.sh",
    "content": "#!/usr/bin/env bash\n# Test stdin piping  #1978\nsource tests/testenv.sh\nmkdir -p $OUTDIR\nseq 10000 | $VD -f txt --overwrite=n --batch --output $OUTDIR/stdin.tsv\ndiff tests/golden/stdin.tsv $OUTDIR/stdin.tsv\n"
  },
  {
    "path": "tests/test-vdx.sh",
    "content": "#!/usr/bin/env bash\n\n# Run cmdlog tests in parallel\n# Usage: test-vdx.sh [-d] [-j N] [testname ...]\n#   -d    debug mode: abort on first error, show diffs\n#   -j N  number of parallel golden batch processes (default: nproc)\n\n#set -e\nshopt -s failglob\n\ntrap \"echo SIGTERM; exit;\" SIGTERM\ntrap \"echo SIGINT; exit;\" SIGINT\n\nsource tests/testenv.sh\n\nexport LC_NUMERIC=\"en_US.UTF-8\" #2867\nexport LC_TIME=\"en_US.UTF-8\"\n\nPY311=$($PYTHON -c 'import sys; print(sys.version_info[:2] >= (3,11))')\n\nDEBUG=0\nwhile getopts \"dj:\" opt; do\n    case \"$opt\" in\n        d) DEBUG=1 ;;\n        j) NPROCS=$OPTARG ;;\n    esac;\ndone\nshift $((OPTIND - 1))\n\nVD_OPTS=\"--batch --config tests/.visidatarc --visidata-dir tests/.visidata\"\n\nshould_skip() {\n    local i=\"$1\"\n    case \"${i%.vd*}\" in\n        *-broken) echo \"broken\" ;;\n        *-manual) echo \"manual\" ;;\n        *-perf)   echo \"perf\" ;;\n        *-nosave) return 1 ;;  # not skipped, just no golden comparison\n        *-flaky)  return 1 ;;  # not skipped; failures reported but non-fatal\n        *-n311)  [ \"$PY311\" == \"True\" ] && echo \"n311\" ;;\n        *-311)   [ \"$PY311\" != \"True\" ] && echo \"311\" ;;\n    esac\n}\n\n# Resolve test arguments to file list\nif [ $# -eq 0 ] ; then\n    TESTS=\"tests/*.vd*\"\nelse\n    TESTS=\"\"\n    for arg in \"$@\"; do\n        if [ -f \"$arg\" ] ; then\n            TESTS+=\" $arg\"\n        else\n            arg=\"${arg#tests/}\"\n            TESTS+=\" tests/$arg.vd*\"\n        fi\n    done\nfi\n\nmkdir -p tests/output\n\nN_TESTS=0\nN_SKIPPED=0\ndeclare -a EXPECTED_OUTPUTS  # output files we expect to be created\ndeclare -A FAILED_TESTS\ndeclare -A FLAKY_TESTS\n\n# Clean output directory before running tests\nrm -f tests/output/*\n\n# Build parallel golden batches and a nosave batch\ndeclare -a GOLDEN_TESTS\nNOSAVE_BATCH=\"\"\n\nfor i in $TESTS ; do\n    outbase=${i##tests/}\n    testname=${outbase%.vd*}\n\n    skip_reason=$(should_skip \"$i\")\n    if [ -n \"$skip_reason\" ]; then\n        N_SKIPPED=$((N_SKIPPED + 1))\n        [ $DEBUG -eq 1 ] && echo \"SKIP: $testname ($skip_reason)\"\n        continue\n    fi\n\n    N_TESTS=$((N_TESTS + 1))\n    if [ \"${i%-nosave.vd*}-nosave\" != \"${i%.vd*}\" ]; then\n        GOLDEN_TESTS+=(\"$i\")\n    else\n        NOSAVE_BATCH+=\"replay-reset $testname\"$'\\n'\n        NOSAVE_BATCH+=\"$(< \"$i\")\"$'\\n'\n        NOSAVE_BATCH+=\"replay-end\"$'\\n'\n    fi\ndone\n\n# Chunk golden tests into NPROCS sequential batches (keeps similar imports together)\nN_GOLDEN=${#GOLDEN_TESTS[@]}\nCHUNK=$(( (N_GOLDEN + NPROCS - 1) / NPROCS ))\ndeclare -a BATCHES\nfor (( idx=0; idx<N_GOLDEN; idx++ )); do\n    i=\"${GOLDEN_TESTS[$idx]}\"\n    BATCH_IDX=$(( idx / CHUNK ))\n    testname=${i##tests/}\n    testname=${testname%.vd*}\n    for goldfn in tests/golden/\"$testname\".*; do\n        outfn=\"tests/output/$(basename \"$goldfn\")\"\n        BATCHES[$BATCH_IDX]+=\"replay-reset $outfn\"$'\\n'\n        if [ $DEBUG -eq 0 ]; then\n            BATCHES[$BATCH_IDX]+=\"option global replay_ignore_errors True\"$'\\n'\n        fi\n        BATCHES[$BATCH_IDX]+=\"$(< \"$i\")\"$'\\n'\n        BATCHES[$BATCH_IDX]+=\"replay-output\"$'\\n'\n        EXPECTED_OUTPUTS+=(\"$outfn\")\n    done\ndone\n\n# Launch nosave in background, golden in foreground\n\n# nosave tests run without replay_ignore_errors so assert-expr failures are caught\nNOSAVE_PID=\"\"\nif [ -n \"$NOSAVE_BATCH\" ]; then\n    NOSAVE_BATCH+=\"replay-exit\"$'\\n'\n    env PYTHONPATH=. bin/vd --play - $VD_OPTS <<< \"$NOSAVE_BATCH\" > /tmp/vd-nosave-output.txt &\n    NOSAVE_PID=$!\nfi\n\n# golden batches run in parallel\ndeclare -a GOLDEN_PIDS\nfor idx in \"${!BATCHES[@]}\"; do\n    if [ -n \"${BATCHES[$idx]}\" ]; then\n        BATCHES[$idx]+=\"replay-exit\"$'\\n'\n        env PYTHONPATH=. bin/vd --play - $VD_OPTS <<< \"${BATCHES[$idx]}\" &\n        GOLDEN_PIDS+=($!)\n    fi\ndone\n\n# wait for golden batches\nfor pid in \"${GOLDEN_PIDS[@]}\"; do\n    wait $pid\ndone\n\n# wait for background jobs\nif [ -n \"$NOSAVE_PID\" ]; then\n    wait $NOSAVE_PID\n    nosave_exit=$?\n    if [ $nosave_exit -ne 0 ]; then\n        cat /tmp/vd-nosave-output.txt >&2\n        # extract failing test name from error output\n        failing_test=$(grep -oP '^\\S+-nosave' /tmp/vd-nosave-output.txt | head -1)\n        if [ -n \"$failing_test\" ]; then\n            FAILED_TESTS[$failing_test]=1\n        else\n            FAILED_TESTS[\"nosave-batch\"]=1\n        fi\n    fi\nfi\n\nrecord_failure() {\n    local testname=\"$1\" msg=\"$2\"\n    case \"$testname\" in\n        *-flaky)\n            echo \"FLAKY: $testname ($msg)\"\n            FLAKY_TESTS[$testname]=1\n            ;;\n        *)\n            echo \"DIFF: $testname ($msg)\"\n            FAILED_TESTS[$testname]=1\n            ;;\n    esac\n}\n\n# Check for expected output files that were never created (batch aborted mid-run)\nfor outfn in \"${EXPECTED_OUTPUTS[@]}\"; do\n    if [ ! -f \"$outfn\" ]; then\n        testname=$(basename \"$outfn\" | sed 's/\\.[^.]*$//')\n        record_failure \"$testname\" \"no output: $outfn\"\n    fi\ndone\n\nfor outfn in tests/output/*; do\n    [ \"$outfn\" = \"tests/output/.gitignore\" ] && continue\n    [ -f \"$outfn\" ] || continue\n    goldfn=\"tests/golden/$(basename \"$outfn\")\"\n    if [ ! -f \"$goldfn\" ]; then\n        testname=$(basename \"$outfn\" | sed 's/\\.[^.]*$//')\n        record_failure \"$testname\" \"no golden file: $goldfn\"\n    elif ! diff -q \"$goldfn\" \"$outfn\"; then\n        testname=$(basename \"$outfn\" | sed 's/\\.[^.]*$//')\n        record_failure \"$testname\" \"$outfn\"\n        if [ $DEBUG -eq 1 ]; then\n            diff \"$goldfn\" \"$outfn\"\n            break\n        fi\n    fi\ndone\nN_FAILED=${#FAILED_TESTS[@]}\nN_FLAKY=${#FLAKY_TESTS[@]}\nif [ $N_FAILED -gt 0 ]; then\n    echo \"\"\n    echo \"$N_FAILED tests failed: ${!FAILED_TESTS[*]}\"\nfi\n\n# summary\nN_PASSED=$((N_TESTS - N_FAILED - N_FLAKY))\n[ $N_SKIPPED -gt 0 ] && SKIP_MSG=\", $N_SKIPPED skipped\" || SKIP_MSG=\"\"\n[ $N_FLAKY -gt 0 ] && FLAKY_MSG=\", $N_FLAKY flaky\" || FLAKY_MSG=\"\"\n\nif [ $N_FAILED -gt 0 ]; then\n    echo \"FAIL: $N_PASSED/$N_TESTS tests passed${FLAKY_MSG}${SKIP_MSG}\"\n    exit 1\nelse\n    echo \"PASS: $N_PASSED/$N_TESTS tests passed${FLAKY_MSG}${SKIP_MSG}\"\nfi\n"
  },
  {
    "path": "tests/test-zsh-syntax.sh",
    "content": "#!/usr/bin/env bash\n# Ensure VisiData can generate zsh completions\nsource tests/testenv.sh\n$PYTHON dev/zsh-completion.py /dev/null\n"
  },
  {
    "path": "tests/test_quartiles.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/sample.tsv\to\t\nsample\tRep\t\tkey-col\t\t!\ttoggle current column as a key column\nsample\tUnits\t\ttype-int\t\t#\tset type of current column to int\nsample\tUnits\t\taggregate-col\tq3\t+\tAdd aggregator to current column\nsample\t\t\tfreq-keys\t\tgShift+F\topen Frequency Table grouped by all key columns on source sheet, with aggregations of other columns\n"
  },
  {
    "path": "tests/testenv.sh",
    "content": "# Common test environment — source this from test-*.sh scripts\n# Usage: source tests/testenv.sh\n\nPYTHON=${PYTHON:-python3}\nVD=\"${VD:-$PYTHON -m visidata --config tests/.visidatarc --visidata-dir tests/.visidata}\"\nNPROCS=${NPROCS:-$(nproc)}\nOUTDIR=${OUTDIR:-tests/output}\nexport NO_COLOR=1\n"
  },
  {
    "path": "tests/transform-cols.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.csv\to\t\nbenchmark\t\t\tselect-rows\t\tgs\t\nbenchmark\t\t\tsetcol-regex-subst-all\t{\"before\":\"food\",\"after\":\"nutri\"}\tgz*\nbenchmark\tSKU\t\tsetcol-regex-subst\t{\"before\":\"nutri\",\"after\":\"NUTRI\"}\tg*\nbenchmark\t\t\tunselect-rows\t\tgu\t\n"
  },
  {
    "path": "tests/type-customdate.vdj",
    "content": "#!vd -p\n{\"sheet\": \"global\", \"row\": \"disp_formatter\", \"longname\": \"set-option\", \"input\": \"python\", \"keystrokes\": \"\"}\n{\"longname\": \"open-file\", \"input\": \"sample_data/sample.tsv\", \"keystrokes\": \"o\"}\n{\"sheet\": \"sample\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-rows\", \"input\": \"\", \"keystrokes\": \"gs\", \"comment\": \"select all rows\"}\n{\"sheet\": \"sample\", \"col\": \"OrderDate\", \"row\": \"0\", \"longname\": \"setcol-input\", \"input\": \"05/1991\", \"keystrokes\": \"ge\", \"comment\": \"set contents of current column for selected rows to same input\"}\n{\"sheet\": \"sample\", \"col\": \"\", \"row\": \"\", \"longname\": \"unselect-rows\", \"input\": \"\", \"keystrokes\": \"gu\", \"comment\": \"unselect all rows\"}\n{\"sheet\": \"sample\", \"col\": \"OrderDate\", \"row\": \"\", \"longname\": \"type-customdate\", \"input\": \"%m/%Y\", \"comment\": \"set type of current column to custom date format\"}\n"
  },
  {
    "path": "tests/unfurl-dict.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/y77d-th95.json.gz\to\t\ny77d-th95\tgeolocation\t\tunfurl-col\t\t\trow-wise expand current column of lists (e.g. [2]) or dicts (e.g. {3}) within that column\ny77d-th95_geolocation_unfurled\tgeolocation_value\t\tsetcol-formatter\tjson\t\tset formatter for current column (generic, json, python)\n"
  },
  {
    "path": "tests/unfurl-empty-false.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\nglobal\t\tdisp_float_fmt\tset-option\t%.07f\t\t\n\t\t\topen-file\ttests/unfurl-empty.jsonl\to\t\nunfurl-empty\ta\t\tunfurl-col\t\t\trow-wise expand current column of lists (e.g. [2]) or dicts (e.g. {3}) within that column\n"
  },
  {
    "path": "tests/unfurl-empty.jsonl",
    "content": "{\"a\":[]}\n{\"a\":[]}\n"
  },
  {
    "path": "tests/unfurl-empty.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\nglobal\t\tdisp_float_fmt\tset-option\t%.07f\t\t\n\t\t\topen-file\ttests/unfurl-empty.jsonl\to\t\nglobal\t\tunfurl_empty\tset-option\tTrue\t\t\nunfurl-empty\ta\t\tunfurl-col\t\t\trow-wise expand current column of lists (e.g. [2]) or dicts (e.g. {3}) within that column\nunfurl-empty_a_unfurled\t\t0\tselect-row\t\ts\tselect current row\nunfurl-empty_a_unfurled\t\t1\tselect-row\t\ts\tselect current row\nunfurl-empty_a_unfurled\ta_key\t1\tsetcol-input\tkey\tge\tset contents of current column for selected rows to same input\nunfurl-empty_a_unfurled\ta_value\t1\tsetcol-input\tvalue\tge\tset contents of current column for selected rows to same input\n"
  },
  {
    "path": "tests/unfurl-list.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/benchmark.jsonl\to\t\nbenchmark\tCustomer\t\tunfurl-col\t\t\trow-wise expand current column of lists (e.g. [2]) or dicts (e.g. {3}) within that column\n"
  },
  {
    "path": "tests/xdg/data/visidata/1.vdj",
    "content": "#!vd -p\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"\", \"col\": \"\", \"row\": \"\", \"longname\": \"dup-selected\", \"input\": \"\", \"keystrokes\": \"\\\"\", \"comment\": \"open duplicate sheet with only selected rows\"}\n"
  },
  {
    "path": "tests/xdg/data/visidata/macros.jsonl",
    "content": "{\"binding\": \"1\", \"source\": \"1.vdj\"}\n"
  },
  {
    "path": "tests/xlsx-color-cells.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\nglobal\t\txlsx_meta_columns\tset-option\tTrue\t\t\n\t\t\topen-file\tsample_data/color-merged-cells.xlsx\to\t\ncolor-merged-cells\t\tキSheet1\topen-row\t\tEnter\topen sheet with copies of rows referenced in current row\n"
  },
  {
    "path": "tests/xlsx-empty-cell.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/empty-cell.xlsx\to\t\nempty-cell\t\tキSheet1\topen-row\t\tEnter\topen sheet with copies of rows referenced in current row\n"
  },
  {
    "path": "tests/xlsx-header.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\toverride\theader\tset-option\t0\t\t\n\t\t\topen-file\tsample_data/sample-sales-reps.xlsx\to\t\nsample-sales-reps\t\tキsample-salesv4\tdive-row\t\t^J\t\nsample-sales-reps_sample-salesv4\t\t0\trename-cols-row\t\tg^\t\nsample-sales-reps_sample-salesv4\t\t0\tdelete-row\t\td\t\n"
  },
  {
    "path": "tests/xlsx-merged-cells.vd",
    "content": "sheet\tcol\trow\tlongname\tinput\tkeystrokes\tcomment\n\t\t\topen-file\tsample_data/color-merged-cells.xlsx\to\t\ncolor-merged-cells\t\tキSheet1\topen-row\t\tEnter\topen sheet with copies of rows referenced in current row\n"
  },
  {
    "path": "visidata/__init__.py",
    "content": "'VisiData: a curses interface for exploring and arranging tabular data'\n\n__version__ = '3.4dev'\n__version_info__ = 'VisiData v' + __version__\n__author__ = 'Saul Pwanson <vd@saul.pw>'\n__status__ = 'Production/Stable'\n__copyright__ = 'Copyright (c) 2016-2024 ' + __author__\n\n\nclass EscapeException(BaseException):\n    'Inherits from BaseException to avoid \"except Exception\" clauses.  Do not use a blanket \"except:\" or the task will be uncancelable.'\n    pass\n\n\ndef addGlobals(*args, **kwargs):\n    '''Update the VisiData globals dict with items from *args* and *kwargs*; to add symbols available to command execstrings and eval strings like command expr.'\n\n    Dunder methods are ignored, to prevent accidentally overwriting housekeeping methods.'''\n    drop_dunder = lambda d: {k: v for k, v in d.items() if not k.startswith(\"__\")}\n    for g in args:\n        globals().update(drop_dunder(g))\n    globals().update(drop_dunder(kwargs))\n\n\ndef getGlobals():\n    'Return the VisiData globals dict.'\n    return globals()\n\nfrom .utils import *\n\nfrom .extensible import *\nfrom .vdobj import *\nvd = VisiData()\n\nvd.version = __version__\n\nvd.addGlobals = addGlobals\nvd.getGlobals = getGlobals\n\nimport visidata.keys\n\nfrom .basesheet import *\n\nimport visidata.settings\n\n# importModule tracks where commands/options/etc are coming from (via vd.importingModule)\ncore_imports = '''\nimport visidata.errors\nimport visidata.editor\nimport visidata.color\nimport visidata.cliptext\nimport visidata.mainloop\n\nimport visidata.menu\nimport visidata.wrappers\nimport visidata.undo\nimport visidata._types\nimport visidata.column\n\nimport visidata.interface\nimport visidata.sheets\nimport visidata.rename_col\nimport visidata.indexsheet\n\nimport visidata.statusbar\n\nimport visidata.textsheet\nimport visidata.threads\nimport visidata.path\nimport visidata.guide\n\nimport visidata.stored_list\nimport visidata._input\nimport visidata.tuiwin\nimport visidata.mouse\nimport visidata.movement\n\nimport visidata.type_date\n\nimport visidata._urlcache\nimport visidata.selection\nimport visidata.text_source\nimport visidata.loaders\nimport visidata.loaders.tsv\nimport visidata.pyobj\nimport visidata.loaders.json\nimport visidata._open\nimport visidata.save\nimport visidata.search\n\nimport visidata.expr\nimport visidata.metasheets\nimport visidata.input_history\nimport visidata.optionssheet\nimport visidata.type_currency\nimport visidata.type_floatsi\nimport visidata.clean_names\nimport visidata.cmdlog\nimport visidata.clipboard\nimport visidata.choose\nimport visidata.aggregators\nimport visidata.pivot\nimport visidata.freqtbl\nimport visidata.canvas\nimport visidata.canvas_text\nimport visidata.graph\nimport visidata.motd\nimport visidata.shell\nimport visidata.main\nimport visidata.help\nimport visidata.modify\nimport visidata.sort\nimport visidata.memory\nimport visidata.macros\n\nimport visidata.macos\nimport visidata.windows\n\nimport visidata.form\nimport visidata.sidebar\n\nimport visidata.ddwplay\nimport visidata.plugins\n\nimport visidata.theme\nimport visidata.apps\nimport visidata.fuzzymatch\nimport visidata.hint\n'''\n\nfor line in core_imports.splitlines():\n    if not line: continue\n    module = line[len('import '):]\n    vd.importModule(module)\n\nvd.importSubmodules('visidata.loaders')\n\ndef importFeatures():\n    vd.importSubmodules('visidata.features')\n    vd.importSubmodules('visidata.themes')\n\n    import visidata.deprecated\n\n    vd.importModule('copy', 'copy deepcopy'.split())\n    vd.importModule('builtins', 'abs all any ascii bin bool bytes callable chr complex dict dir divmod enumerate eval filter float format getattr hex int len list map max min next oct ord pow range repr reversed round set sorted str sum tuple type zip'.split())\n    vd.importModule('math', 'acos acosh asin asinh atan atan2 atanh ceil copysign cos cosh degrees dist erf erfc exp expm1 fabs factorial floor fmod frexp fsum gamma gcd hypot isclose isfinite isinf isnan isqrt lcm ldexp lgamma log log1p log10 log2 modf radians remainder sin sinh sqrt tan tanh trunc prod perm comb nextafter ulp pi e tau inf nan'.split())\n    vd.importModule('random', 'randrange randint choice choices sample uniform gauss lognormvariate'.split())\n    vd.importModule('string', 'ascii_letters ascii_lowercase ascii_uppercase digits hexdigits punctuation printable whitespace'.split())\n    vd.importModule('json')\n    vd.importModule('itertools')\n    vd.importModule('curses')\n\n    import visidata.experimental  # import nothing by default but make package accessible\n\nvd.finalInit()  # call all VisiData.init() from modules\n\nimportFeatures()\n\nvd.addGlobals(vd=vd) # globals())\n"
  },
  {
    "path": "visidata/__main__.py",
    "content": "from .main import vd_cli\n\nvd_cli()\n"
  },
  {
    "path": "visidata/_input.py",
    "content": "from contextlib import suppress\nimport curses\nimport json\n\nimport visidata\n\nfrom visidata import EscapeException, ExpectedException, clipdraw, Sheet, VisiData, BaseSheet\nfrom visidata import vd, colors, dispwidth, ColorAttr, clipstr_start\nfrom visidata import AttrDict\n\n\nvd.theme_option('color_edit_unfocused', '238 on 110', 'display color for unfocused input in form')\nvd.theme_option('color_edit_cell', '233 on 110', 'cell color to use when editing cell')\nvd.theme_option('disp_edit_fill', '_', 'edit field fill character')\nvd.theme_option('disp_unprintable', '·', 'substitute character for unprintables')\nvd.theme_option('mouse_interval', 1, 'max time between press/release for click (ms)', sheettype=None)\n\n\nclass AcceptInput(Exception):\n    '*args[0]* is the input to be accepted'\n\nvd._injectedInput = None  # for vd.injectInput\nvd.editCellBindings = {}  # user-customizable bindings for cell editing; use acceptThenFunc() to define\n\n\n@VisiData.api\ndef injectInput(vd, x):\n    'Use *x* as input to next command.'\n    assert vd._injectedInput is None, vd._injectedInput\n    vd._injectedInput = x\n\n\n@VisiData.api\ndef getCommandInput(vd):\n    if vd._injectedInput is not None:\n        r = vd._injectedInput\n        vd._injectedInput = None\n        return r\n\n    return vd.getLastArgs()\n\n\n@BaseSheet.after\ndef execCommand(sheet, longname, *args, **kwargs):\n    if vd._injectedInput is not None:\n        vd.debug(f'{longname} did not consume input \"{vd._injectedInput}\"')\n        vd._injectedInput = None\n\n\ndef acceptThenFunc(*longnames):\n    def _acceptthen(v, i):\n        for longname in longnames:\n            vd.queueCommand(longname)\n        raise AcceptInput(v)\n    return _acceptthen\n\n# editline helpers\n\nclass EnableCursor:\n    def __enter__(self):\n        with suppress(curses.error):\n            vd.enableMouse(False)\n            curses.curs_set(1)\n\n    def __exit__(self, exc_type, exc_val, tb):\n        with suppress(curses.error):\n            curses.curs_set(0)\n            vd.enableMouse(bool(vd.options.mouse_interval))\n\n\ndef until_get_wch(scr):\n    'Ignores get_wch timeouts'\n    ret = None\n    while not ret:\n        try:\n            ret = vd.get_wch(scr)\n        except curses.error:\n            pass\n\n    if isinstance(ret, int):\n        return chr(ret)\n    return ret\n\n\ndef splice(v:str, i:int, s:str):\n    'Insert `s` into string `v` at `i` (such that v[i] == s[0]).'\n    return v if i < 0 else v[:i] + s + v[i:]\n\n\n@VisiData.api\ndef drawInputHelp(vd, scr):\n    if not scr or not vd.cursesEnabled:\n        return\n\n    sheet = vd.activeSheet\n    if not sheet:\n        return\n\n    vd.drawSidebar(scr, sheet)\n\n\ndef clean_printable(s):\n    'Escape unprintable characters.'\n    return ''.join(c if c.isprintable() else vd.options.disp_unprintable for c in str(s))\n\n\ndef delchar(s, i, remove=1):\n    'Delete `remove` characters from str `s` beginning at position `i`.'\n    return s if i < 0 else s[:i] + s[i+remove:]\n\ndef find_word(s, a, b, incr):\n        '''Return first index of word boundary in s[a:b], going forward if incr is +1 and backward if incr is -1.'''\n        if not s: return 0\n        a = min(max(a, 0), len(s)-1)\n        b = min(max(b, 0), len(s)-1)\n\n        if incr < 0:\n            while not s[b].isalnum() and b >= a:  # first skip non-word chars\n                b += incr\n            while s[b].isalnum() and b >= a:\n                b += incr\n            return min(max(b, -1), len(s))\n        else:\n            while s[a].isalnum() and a < b:       # first skip word chars\n                a += incr\n            while not s[a].isalnum() and a < b:   # then skip non-word chars\n                a += incr\n            return min(max(a, 0), len(s))\n\nclass InputWidget:\n    def __init__(self,\n                 value:str='',\n                 i=0,\n                 display=True,\n                 history=[],\n                 completer=lambda text,idx: None,\n                 options=None,\n                 fillchar=''):\n        '''\n            - value: starting value\n            - i: starting index into value\n            - display: False to not display input (for sensitive input, e.g. a password)\n            - history: list of strings; earliest entry first.\n            - completer: func(value:str, idx:int) takes the current value and tab completion index, and returns a string if there is a completion available, or None if not.\n            - options: sheet.options; defaults to vd.options.\n        '''\n        options = options or vd.options\n\n        self.orig_value = value\n        self.first_action = (i == 0)  # whether this would be the 'first action'; if so, clear text on input\n\n        # display theme\n        self.fillchar  = fillchar or options.disp_edit_fill\n        self.truncchar = options.disp_truncator\n        self.display = display  # if False, obscure before displaying\n\n        # main state\n        self.value = self.orig_value  # value under edit\n        self.current_i = i\n        self.insert_mode = True\n\n        # history state\n        self.history = history\n        self.hist_idx = None\n        self.prev_val = None\n\n        # completion state\n        self.comps_idx = -1\n        self.completer_func = completer\n        self.former_i = None\n        self.just_completed = False\n\n    def editline(self, scr, y, x, w, attr=ColorAttr(), updater=lambda val:None, bindings={}, clear=True) -> str:\n        'If *clear* is True, clear whole editing area before displaying.'\n        with EnableCursor():\n            while True:\n                if len(vd.pendingKeys) <= 3:  #speed up paste of long strings by skipping redraws\n                    vd.drawSheet(scr, vd.activeSheet)\n                    updater(self.value)\n                    vd.drawInputHelp(scr)\n\n                self.draw(scr, y, x, w, attr, clear=clear)\n                ch = vd.getkeystroke(scr)\n                if ch in bindings:\n                    self.value, self.current_i = bindings[ch](self.value, self.current_i)\n                else:\n                    if self.handle_key(ch, scr):\n                        return self.value\n\n\n    def draw(self, scr, y, x, w, attr=ColorAttr(), clear=True):\n        i = self.current_i  # the onscreen offset within the field where v[i] is displayed\n        trunch = self.truncchar\n        tr_w = dispwidth(trunch)\n        fill_w = dispwidth(self.fillchar)\n\n        def _calc_display(dispval, i):\n            '''Return a formatted substring of *dispval* that fills the on-screen width *w*.'''\n            if i == len(dispval): # add a fillchar so the user perceives room to type\n                dispval += self.fillchar\n            dw = dispwidth(dispval, literal=True)\n            if dw <= w:  # entire value fits\n                dispval += self.fillchar*(w-dw)\n                return dispval, i\n            if w <= tr_w: # column is too narrow to hold a left and right truncation\n                return trunch, 0\n\n            dw = dispwidth(dispval[i:], literal=True)\n            if dw + tr_w <= w and dw <= w//2: #cursor is within half-colwidth of end\n                #truncate the left and show the end\n                frag, n = clipstr_start(dispval, w-tr_w, literal=True)\n                offset = len(dispval) - i\n                dispval = ' '*(w-tr_w - n) + trunch + frag\n                i = len(dispval) - offset\n                return dispval, i\n\n            # the remaining cases need the right side truncated, after the new dispval is returned\n            dw = dispwidth(dispval[:i+1], literal=True)\n            if dw + tr_w <= w and dispwidth(dispval[:i], literal=True) <= w//2: #cursor is within half-colwidth of start\n                #truncate the right, and show the string start\n                pass\n            else: # truncate left and right sides\n                # Place the cursor at the midpoint of the available colwidth\n                left_w = (w - 2*tr_w)//2\n                # calculate the fragment to the left of the cursor\n                l_frag, n = clipstr_start(dispval[:i], left_w, literal=True)\n                dispval = ' '*(left_w-n) + trunch + l_frag + dispval[i:]\n                i = left_w-n + len(trunch) + len(l_frag)\n            return dispval, i\n\n        if self.display:\n            dispval = clean_printable(self.value)\n        else:\n            dispval = '*' * len(self.value)\n        dispval, i = _calc_display(dispval, i)\n\n        #clipdraw will truncate the right side of dispval with trunch as needed\n        clipdraw(scr, y, x, dispval, attr, w, clear=clear, literal=True)\n        if x+w < scr.getmaxyx()[1]:\n            #draw a space to indicate that the user can scroll right of the cell's final char\n            clipdraw(scr, y, x+w, ' ', attr, 1, clear=False, literal=True)\n        if scr:\n            prew = dispwidth(dispval[:i], literal=True)\n            if x+prew < scr.getmaxyx()[1]: #move cursor back to where the user is editing\n                scr.move(y, x+prew)\n\n    def handle_key(self, ch:str, scr) -> bool:\n        'Return True to accept current input.  Raise EscapeException on Ctrl+C, Ctrl+Q, or ESC.'\n        i = self.current_i\n        v = self.value\n\n        if ch == '':                               return False\n        elif ch == 'Ins':                          self.insert_mode = not self.insert_mode\n        elif ch == 'Ctrl+A' or ch == 'Home':       i = 0\n        elif ch == 'Ctrl+B' or ch == 'Left':       i -= 1\n        elif ch in ('Ctrl+C', 'Ctrl+Q', 'Esc'): raise EscapeException(ch)\n        elif ch == 'Ctrl+D' or ch == 'Del':        v = delchar(v, i)\n        elif ch == 'Ctrl+E' or ch == 'End':        i = len(v)\n        elif ch == 'Ctrl+F' or ch == 'Right':      i += 1\n        elif ch == 'Ctrl+G':\n            vd.cycleSidebar()\n            return False # not considered a first keypress\n        elif ch in ('Ctrl+H', 'Bksp', 'Ctrl+?'):   i -= 1; v = delchar(v, i)\n        elif ch == 'Tab':                          v, i = self.completion(v, i, +1)\n        elif ch == 'Shift+Tab':                    v, i = self.completion(v, i, -1)\n        elif ch == 'Enter':                        return True # ENTER to accept value\n        elif ch == 'Ctrl+K':                       v = v[:i]  # Ctrl+Kill to end-of-line\n        elif ch == 'Ctrl+N':\n            c = ''\n            while not c:\n                c = vd.getkeystroke(scr)\n            i += len(c)\n            v += c\n        elif ch == 'Ctrl+O':\n            edit_v = vd.launchExternalEditor(v)\n            if self.value == edit_v:\n                # leave cell unmodified when the editor exits with no change\n                raise EscapeException(ch)\n            else:\n                self.value = edit_v\n                return True\n        elif ch == 'Ctrl+R':                           v = self.orig_value  # Ctrl+Reload initial value\n        elif ch == 'Ctrl+T':                           v = delchar(splice(v, i-2, v[i-1:i]), i)  # swap chars\n        elif ch == 'Ctrl+U':                           v = v[i:]; i = 0  # clear to beginning\n        elif ch == 'Ctrl+V':                           v = splice(v, i, until_get_wch(scr)); i += 1  # literal character\n        elif ch in ('Ctrl+W','Alt+Bksp','Ctrl+Bksp'):  j = find_word(v, 0, i-1, -1); v = v[:j+1] + v[i:]; i = j+1  # erase word\n        elif ch in ('Ctrl+Del','Alt+Del','Alt+d'):     j = find_word(v, i, len(v)-1, +1); v = v[:i] + v[j:]  # erase word forward\n        elif ch == 'Ctrl+Y':                           v = splice(v, i, str(vd.memory.clipval))\n        elif ch == 'Ctrl+Z':                           vd.suspend()\n        elif ch == 'Ctrl+Left':                        i = find_word(v, 0, i-1, -1)+1;  # word left\n        elif ch == 'Ctrl+Right':                       i = find_word(v, i, len(v)-1, +1);  # word right\n        elif ch == 'Ctrl+Up':                          pass\n        elif ch == 'Ctrl+Down':                        pass\n        elif self.history and ch == 'Up':              v, i = self.prev_history(v, i)\n        elif self.history and ch == 'Down':            v, i = self.next_history(v, i)\n        elif ch == 'KEY_RESIZE':                       pass\n        elif len(ch) > 1:                              vd.warning(f'unknown key {ch}')\n        else:\n            if self.first_action:\n                v = ''\n            if self.insert_mode:\n                v = splice(v, i, ch)\n            else:\n                v = v[:i] + ch + v[i+1:]\n\n            i += 1\n\n        if i < 0: i = 0\n        # v may have a non-str type with no len()\n        v = str(v)\n        if i > len(v): i = len(v)\n        self.current_i = i\n        self.value = v\n        self.first_action = False\n        self.reset_completion()\n        return False\n\n    def completion(self, v, i, state_incr):\n        self.just_completed = True\n        self.comps_idx += state_incr\n\n        if self.former_i is None:\n            self.former_i = i\n        try:\n            r = self.completer_func(v[:self.former_i], self.comps_idx)\n        except Exception as e:\n            # raise  # beep/flash; how to report exception?\n            return v, i\n\n        if not r:\n            # beep/flash to indicate no matches?\n            return v, i\n\n        v = r + v[i:]\n        return v, len(v)\n\n    def reset_completion(self):\n        if self.just_completed:\n            self.just_completed = False\n        else:\n            self.former_i = None\n            self.comps_idx = -1\n\n    def prev_history(self, v, i):\n        if self.hist_idx is None:\n            self.hist_idx = len(self.history)\n            self.prev_val = v\n        if self.hist_idx > 0:\n            self.hist_idx -= 1\n            v = self.history[self.hist_idx]\n        i = len(str(v))\n        return v, i\n\n    def next_history(self, v, i):\n        if self.hist_idx is None:\n            return v, i\n        elif self.hist_idx < len(self.history)-1:\n            self.hist_idx += 1\n            v = self.history[self.hist_idx]\n        else:\n            v = self.prev_val\n            self.hist_idx = None\n        i = len(str(v))\n        return v, i\n\n\n@VisiData.api\ndef editText(vd, y, x, w, attr=ColorAttr(), value='',\n             help='',\n             updater=lambda val: None, bindings={},\n             display=True, record=True, clear=True, **kwargs):\n    '''Invoke modal single-line editor at (*y*, *x*) for *w* terminal chars. Use *display* is False for sensitive input like passphrases.  If *record* is True, get input from the cmdlog in batch mode, and save input to the cmdlog if *display* is also True. Return new value as string. Callers should handle curses.error, which will be raised if the terminal is resized during the edit, in a way that moves the editor coordinates offscreen.'''\n    v = None\n    if record and vd.cmdlog:\n        v = vd.getCommandInput()\n\n    if v is None:\n        if vd.options.batch:\n            return ''\n\n        if vd.activeSheet._scr is None:\n            raise Exception('active sheet does not have a screen')\n\n        if value is None:\n            value = ''\n\n        try:\n            widget = InputWidget(value=str(value), display=display, **kwargs)\n\n            with vd.AddedHelp(vd.getHelpPane('input', module='visidata'), 'Input Keystrokes Help', 'inputkeys'), \\\n                 vd.AddedHelp(help, 'Input Field Help', 'inputfield'):\n                v = widget.editline(vd.activeSheet._scr, y, x, w, attr=attr, updater=updater, bindings=bindings, clear=clear)\n        except AcceptInput as e:\n            v = e.args[0]\n\n        if vd.cursesEnabled:\n            # clear keyboard buffer to neutralize multi-line pastes (issue#585)\n            curses.flushinp()\n\n    if display:\n        if record and vd.cmdlog:\n            vd.setLastArgs(v)\n\n    if value:\n        if isinstance(value, (int, float)) and v[-1] == '%':  #2082\n            pct = float(v[:-1])\n            v = pct*value/100\n\n        # convert back to type of original value\n        v = type(value)(v)\n\n    return v\n\n@VisiData.api\ndef inputsingle(vd, prompt, record=True):\n    'Display prompt and return single character of user input.'\n    sheet = vd.activeSheet\n\n    v = None\n    if record and vd.cmdlog:\n        v = vd.getCommandInput()\n\n    if v is not None:\n        return v\n\n    y = sheet.windowHeight-1\n    w = sheet.windowWidth\n    rstatuslen = vd.drawRightStatus(sheet._scr, sheet)\n    promptlen = clipdraw(sheet._scr, y, 0, prompt, 0, w=w-rstatuslen-1, literal=True)\n    sheet._scr.move(y, w-promptlen-rstatuslen-2)\n\n    while not v:\n        v = vd.getkeystroke(sheet._scr)\n\n    if record and vd.cmdlog:\n        vd.setLastArgs(v)\n\n    return v\n\n@VisiData.api\ndef inputMultiple(vd, updater=lambda val: None, record=True, **kwargs):\n    'A simple form, where each input is an entry in `kwargs`, with the key being the key in the returned dict, and the value being a dictionary of kwargs to the singular input().'\n    sheet = vd.activeSheet\n    scr = sheet._scr\n\n    previnput = vd.getCommandInput()\n    if previnput is not None:\n        ret = None\n        if isinstance(previnput, str):\n            if previnput.startswith('{'):\n                ret = json.loads(previnput)\n            else:\n                ret = {k:v.get('value', '') for k,v in kwargs.items()}\n                primekey = list(ret.keys())[0]\n                ret[primekey] = previnput\n\n        if isinstance(previnput, dict):\n            ret = previnput\n\n        if ret:\n            if record and vd.cmdlog:\n                vd.setLastArgs(ret)\n            return ret\n\n        assert False, type(previnput)\n\n    maxw = sheet.windowWidth//2\n    attr = colors.color_edit_unfocused\n\n    keys = list(kwargs.keys())\n    cur_input_key = keys[0]\n\n    if scr:\n        scr.erase()\n\n    for i, (k, v) in enumerate(kwargs.items()):\n        v['dy'] = i\n        v['w'] = maxw-dispwidth(v.get('prompt'))\n\n    class ChangeInput(Exception):\n        pass\n\n    def change_input(offset):\n        def _throw(v, i):\n            if scr:\n                scr.erase()\n            raise ChangeInput(v, offset)\n        return _throw\n\n    def _drawPrompt(val):\n        for k, v in kwargs.items():\n            #recalculate y to adjust for screen resizes during input()\n            y = sheet.windowHeight-v.get('dy')-1\n            maxw = min(sheet.windowWidth-1, max(dispwidth(v.get('prompt'), literal=True),\n                                                dispwidth(str(v.get('value', '')), literal=True)))\n            promptlen = clipdraw(scr, y, 0, v.get('prompt'), attr, w=maxw, literal=True)  #1947\n            promptlen = clipdraw(scr, y, promptlen, v.get('value', ''),  attr, w=maxw, literal=True)\n\n        return updater(val)\n\n    while True:\n        try:\n            input_kwargs = kwargs[cur_input_key]\n            input_kwargs['value'] = vd.input(**input_kwargs,\n                                             attr=colors.color_edit_cell,\n                                             updater=_drawPrompt,\n                                             record=False,\n                                             bindings={\n                'Shift+Tab':   change_input(-1),\n                'Tab':     change_input(+1),\n                'Shift+Up':   change_input(-1),\n                'Shift+Down': change_input(+1),\n            })\n            break\n        except ChangeInput as e:\n            input_kwargs['value'] = e.args[0]\n            offset = e.args[1]\n            i = keys.index(cur_input_key)\n            cur_input_key = keys[(i+offset)%len(keys)]\n\n    retargs = {}\n    lastargs = {}\n    for k, input_kwargs in kwargs.items():\n        v = input_kwargs.get('value', '')\n        retargs[k] = v\n\n        if input_kwargs.get('record', record):\n            if input_kwargs.get('display', True):\n                lastargs[k] = v\n                vd.addInputHistory(v, input_kwargs.get('type', ''))\n    if record:\n        if vd.cmdlog and lastargs:\n            vd.setLastArgs(lastargs)\n\n    return retargs\n\n\n@VisiData.api\ndef input(vd, prompt, type=None, defaultLast=False, history=[], dy=0, attr=None, updater=lambda v: None, **kwargs):\n    '''Display *prompt* and return line of user input.\n\n        - *type*: string indicating the type of input to use for history.\n        - *history*: list of strings to use for input history.\n        - *defaultLast*:  on empty input, if True, return last history item.\n        - *display*: pass False to not display input (for sensitive input, e.g. a password), and to also prevent recording input as if *record* is False\n        - *record*: pass False to not record input on cmdlog or input history (for sensitive or inconsequential input).\n        - *completer*: ``completer(val, idx)`` is called on TAB to get next completed value.\n        - *updater*: ``updater(val)`` is called every keypress or timeout.\n        - *bindings*: dict of keystroke to func(v, i) that returns updated (v, i)\n        - *dy*: number of lines from bottom of pane\n        - *attr*: curses attribute for prompt\n        - *help*: string to include in help\n    '''\n\n    if attr is None:\n        attr = ColorAttr()\n    sheet = vd.activeSheet\n    if not vd.cursesEnabled:\n        if kwargs.get('record', True) and vd.cmdlog:\n            return vd.getCommandInput()\n\n        if kwargs.get('display', True):\n            import builtins\n            return builtins.input(prompt)\n        else:\n            import getpass\n            return getpass.getpass(prompt)\n\n    if not history:\n        history = list(vd.inputHistory.setdefault(type, {}).keys())\n\n    y = sheet.windowHeight-dy-1\n    promptlen = dispwidth(prompt)\n\n    def _drawPrompt(val=''):\n        rstatuslen = vd.drawRightStatus(sheet._scr, sheet)\n        clipdraw(sheet._scr, y, 0, prompt, attr, w=sheet.windowWidth-rstatuslen-1)\n        updater(val)\n        return sheet.windowWidth-promptlen-rstatuslen-2\n\n    w = kwargs.pop('w', _drawPrompt())\n    restarts = 0\n    while restarts < 100:\n        #recalculate y to handle resize events\n        y = sheet.windowHeight-dy-1\n        try:\n            ret = vd.editText(y, promptlen, w=w,\n                                attr=colors.color_edit_cell,\n                                options=vd.options,\n                                history=history,\n                                updater=_drawPrompt,\n                                **kwargs)\n            if ret:\n                if kwargs.get('record', True) and kwargs.get('display', True):\n                    vd.addInputHistory(ret, type=type)\n            elif defaultLast:\n                history or vd.fail(\"no previous input\")\n                ret = history[-1]\n\n            return ret\n        except curses.error:\n            vd.warning('restarting input due to resize')\n            restarts += 1\n    # if it keeps happening, it's probably not resize events, so give some debug output\n    vd.error(f'aborting input:  y={y}, w={w}, windowHeight={sheet.windowHeight}, windowWidth={sheet.windowWidth}')\n\n\n@VisiData.api\ndef confirm(vd, prompt, exc=EscapeException):\n    'Display *prompt* on status line and demand input that starts with \"Y\" or \"y\" to proceed.  Raise *exc* otherwise.  Return True.'\n    if vd.options.batch:\n        return vd.fail('cannot confirm in batch mode: ' + prompt)\n\n    yn = vd.input(prompt, value='no', record=False)[:1]\n    if not yn or yn not in 'Yy':\n        msg = 'disconfirmed: ' + prompt\n        if exc:\n            raise exc(msg)\n        vd.warning(msg)\n        return False\n    return True\n\n\nclass CompleteKey:\n    def __init__(self, items):\n        self.items = items\n\n    def __call__(self, val, state):\n        opts = [x for x in self.items if x.startswith(val)]\n        return opts[state%len(opts)] if opts else val\n\n\n@Sheet.api\ndef editCell(self, vcolidx=None, rowidx=None, value=None, **kwargs):\n    '''Call vd.editText for the cell at (*rowidx*, *vcolidx*).  Return the new value, properly typed.\n       - *vcolidx*: numeric index into ``self.availCols``. When None, use current column.\n       - *rowidx*: numeric index into ``self.rows``.  If negative, indicates the column name in the header.\n       - *value*: if given, the starting input; otherwise the starting input is the cell value or column name as appropriate.\n       - *kwargs*: passthrough args to ``vd.editText``.\n       '''\n\n    if vcolidx is None:\n        vcolidx = self.cursorVisibleColIndex\n    x, w = self._visibleColLayout.get(vcolidx, (0, 0))\n\n    col = self.availCols[vcolidx]\n\n    if rowidx is None:\n        rowidx = self.cursorRowIndex\n\n    if rowidx < 0:  # header\n        y = 0\n        value = value or col.name\n    else:\n        if col.readonly:\n            vd.fail('cannot edit readonly column')\n        y, h = self._rowLayout.get(rowidx, (0, 0))\n        value = value or col.getFullDisplayValue(self.rows[self.cursorRowIndex])\n\n    bindings={\n        'Shift+Up':     acceptThenFunc('go-up', 'rename-col' if rowidx < 0 else 'edit-cell'),\n        'Shift+Down':     acceptThenFunc('go-down', 'rename-col' if rowidx < 0 else 'edit-cell'),\n        'Shift+Right': acceptThenFunc('go-right', 'rename-col' if rowidx < 0 else 'edit-cell'),\n        'Shift+Left':  acceptThenFunc('go-left', 'rename-col' if rowidx < 0 else 'edit-cell'),\n        'Tab':         acceptThenFunc('go-right', 'rename-col' if rowidx < 0 else 'edit-cell'),\n        'Shift+Tab':   acceptThenFunc('go-left', 'rename-col' if rowidx < 0 else 'edit-cell'),\n    }\n\n    if vcolidx == self.nVisibleCols-1 or vcolidx >= self.nCols-1:\n        if rowidx < 0:\n            bindings['Tab'] = acceptThenFunc('go-leftmost', 'rename-col')\n        else:\n            bindings['Tab'] = acceptThenFunc('go-down', 'go-leftmost', 'edit-cell')\n\n    if vcolidx <= 0:\n        if rowidx < 0:\n            bindings['Shift+Tab'] = acceptThenFunc('go-rightmost', 'rename-col')\n        else:\n            bindings['Shift+Tab'] = acceptThenFunc('go-up', 'go-rightmost', 'edit-cell')\n\n    bindings.update(vd.editCellBindings)\n    # update local bindings with kwargs.bindings instead of the inverse, to preserve kwargs.bindings for caller\n    bindings.update(kwargs.get('bindings', {}))\n    kwargs['bindings'] = bindings\n\n    editargs = dict(value=value, options=self.options)\n\n    editargs.update(kwargs)  # update with user-specified args\n    try:\n        r = vd.editText(y, x, w, attr=colors.color_edit_cell, **editargs)\n    except curses.error:\n        vd.fail(f'aborting edit due to resize')\n\n    if rowidx >= 0:  # if not header\n        r = col.type(r)  # convert input to column type, let exceptions be raised\n\n    return r\n\n\nvd.addGlobals(CompleteKey=CompleteKey, AcceptInput=AcceptInput, InputWidget=InputWidget, acceptThenFunc=acceptThenFunc)\n"
  },
  {
    "path": "visidata/_open.py",
    "content": "import os\nimport os.path\nimport sys\n\nfrom visidata import VisiData, vd, Path, BaseSheet, TableSheet, TextSheet, SettableColumn\n\n\nvd.option('filetype', '', 'specify file type', replay=True)\n\n\n@VisiData.api\ndef inputFilename(vd, prompt, *args, **kwargs):\n    completer= _completeFilename\n    if not vd.couldOverwrite():  #1805 don't suggest an existing file\n        completer = None\n        v = kwargs.get('value', '')\n        if v and Path(v).exists():\n            kwargs['value'] = ''\n    return vd.input(prompt, type=\"filename\", *args, completer=completer, **kwargs).strip()\n\n\n@VisiData.api\ndef inputPath(vd, *args, **kwargs):\n    return Path(vd.inputFilename(*args, **kwargs))\n\n\ndef _completeFilename(val, state):\n    i = val.rfind('/')\n    if i < 0:  # no /\n        base = ''\n        partial = val\n    elif i == 0: # root /\n        base = '/'\n        partial = val[1:]\n    else:\n        base = val[:i]\n        partial = val[i+1:]\n\n    files = []\n    for f in os.listdir(Path(base or '.')):\n        if f.startswith(partial):\n            files.append(os.path.join(base, f))\n\n    files.sort()\n    return files[state%len(files)]\n\n\n@VisiData.api\ndef guessFiletype(vd, p, *args, funcprefix='guess_'):\n    '''Call all vd.guess_<filetype>(p) functions and return best candidate sheet based on file contents.'''\n\n    guessfuncs = [getattr(vd, x) for x in dir(vd) if x.startswith(funcprefix)]\n    filetypes = []\n    for f in guessfuncs:\n        try:\n            filetype = f(p, *args)\n            if filetype:\n                filetype['_guesser'] = f.__name__\n                filetypes.append(filetype)\n        except FileNotFoundError:\n            pass\n        except Exception as e:\n            vd.debug(f'{f.__name__}: {e}')\n\n    if filetypes:\n        return sorted(filetypes, key=lambda r: -r.get('_likelihood', 1))[0]\n\n    return {}\n\n\n@VisiData.api\ndef guess_extension(vd, path):\n    # try auto-detect from extension\n    ext = path.suffix[1:].lower()\n    openfunc = getattr(vd, f'open_{ext}', vd.getGlobals().get(f'open_{ext}'))\n    if openfunc:\n        return dict(filetype=ext, _likelihood=3)\n\n\n@VisiData.api\ndef openPath(vd, p, filetype=None, create=False):\n    '''Call ``open_<filetype>(p)`` or ``openurl_<p.scheme>(p, filetype)``.  Return constructed but unloaded sheet of appropriate type.\n    If True, *create* will return a new, blank **Sheet** if file does not exist.'''\n    filetype = filetype or p.options.filetype  # resolve from path instance, Path class, global  #1710\n\n    if p.scheme and not p.has_fp():\n        schemes = p.scheme.split('+')\n        openfuncname = 'openurl_' + schemes[-1]\n\n        openfunc = getattr(vd, openfuncname, None) or vd.getGlobals().get(openfuncname, None)\n        if not openfunc:\n            vd.fail(f'no loader for url scheme: {p.scheme}')\n\n        return openfunc(p, filetype=filetype)\n\n    if not p.exists() and not create:\n        return None\n\n    # assign filetype from extension, but only for files, not directories\n    if not p.is_dir():  #2547\n        filetype = filetype or p.ext\n\n    filetype = filetype.lower()\n\n    # store resolved filetype on path for downstream access (e.g. self.source.options.filetype)\n    p.options.set('filetype', filetype, p, cmdlog=False)\n\n    if not p.exists():\n        newfunc = getattr(vd, 'new_' + filetype, vd.getGlobals().get('new_' + filetype))\n        if not newfunc:\n            vd.warning('%s does not exist, creating new sheet' % p)\n            return vd.newSheet(p.base_stem, 1, source=p)\n\n        vd.status('creating blank %s' % (p.given))\n        return newfunc(p)\n\n    if p.is_fifo():\n        # read the file as text, into a RepeatFile that can be opened multiple times\n        p = Path(p.given, fp=p.open(mode='rb'))\n\n    openfuncname = 'open_' + filetype\n    openfunc = getattr(vd, openfuncname, vd.getGlobals().get(openfuncname))\n    if not openfunc:\n        opts = vd.guessFiletype(p)\n        if opts and 'filetype' in opts:\n            filetype = opts['filetype']\n            openfuncname = 'open_' + filetype\n            openfunc = getattr(vd, openfuncname, vd.getGlobals().get(openfuncname))\n            if not openfunc:\n                vd.error(f'guessed {filetype} but no {openfuncname}')\n\n            vs = openfunc(p)\n            for k, v in opts.items():\n                if k != 'filetype' and not k.startswith('_'):\n                    setattr(vs.options, k, v)\n            vd.status('guessed \"%s\" filetype based on contents' % opts['filetype'])\n            return vs\n\n        vd.warning('unknown \"%s\" filetype' % filetype)\n\n        filetype = 'txt'\n        openfunc = vd.open_txt\n\n    vd.status('opening %s as %s' % (p.given, filetype))\n\n    return openfunc(p)\n\n@VisiData.api\ndef openSource(vd, p, filetype=None, create=False, **kwargs):\n    '''Return unloaded sheet object for *p* opened as the given *filetype* and with *kwargs* as option overrides. *p* can be a Path or a string (filename, url, or \"-\" for stdin).\n    when true, *create* will return a blank sheet, if file does not exist.'''\n\n    if isinstance(p, BaseSheet):\n        return p\n\n    vs = None\n    if isinstance(p, str):\n        if '://' in p:\n            vs = vd.openPath(Path(p), filetype=filetype)  # convert to Path and recurse\n        elif p == '-':\n            if vd.stdinSource.fptext.isatty():\n                vd.fail('cannot open stdin when it is a tty')\n            vs = vd.openPath(vd.stdinSource, filetype=filetype)\n        else:\n            vs = vd.openPath(Path(p), filetype=filetype, create=create)  # convert to Path and recurse\n    else:\n        vs = vd.openPath(p, filetype=filetype, create=create)\n\n    for optname, optval in kwargs.items():\n        vs.options[optname] = optval\n        # Path is authoritative for format options  #2727\n        if isinstance(vs.source, Path):\n            vs.source.options.set(optname, optval, vs.source, cmdlog=False)\n\n    return vs\n\n\n#### enable external addons\n@VisiData.api\ndef open_txt(vd, p):\n    'Create sheet from `.txt` file at Path `p`, checking whether it is TSV.'\n    if p.exists(): #1611\n        with p.open(encoding=vd.options.encoding) as fp:\n            delimiter = vd.options.delimiter\n            try:\n                if delimiter and delimiter in next(fp):    # peek at the first line\n                    return vd.open_tsv(p)  # TSV often have .txt extension\n            except StopIteration:\n                return vd.newSheet(p.base_stem, 1, source=p)\n    return TextSheet(p.base_stem, source=p)\n\n\nBaseSheet.addCommand('o', 'open-file', 'vd.push(openSource(inputFilename(\"open: \"), create=True))', 'Open file or URL')\nTableSheet.addCommand('zo', 'open-cell-file', 'vd.push(openSource(cursorDisplay) or fail(f\"file {cursorDisplay} does not exist\"))', 'Open file or URL from path in current cell')\nBaseSheet.addCommand('gU', 'undo-last-quit', 'push(allSheets[-1])', 'reopen most recently closed sheet')\n\nvd.addMenuItems('''\n    File > Open > input file/url > open-file\n    File > Reopen last closed > undo-last-quit\n''')\n"
  },
  {
    "path": "visidata/_types.py",
    "content": "# VisiData uses Python native int, float, str, and adds simple anytype.\n\nimport locale\nfrom visidata import vd, VisiData\n\nvd.help_float_fmt = '''\n- fmt starting with `'%'` (like `%0.2f`) will use [:onclick https://docs.python.org/3.6/library/locale.html#locale.format_string]locale.format_string[/]\n- other fmt (like `{:.02f}` is passed to Python [:onclick https://docs.python.org/3/library/string.html#custom-string-formatting)]string.format][/]\n'''\n\nvd.help_int_fmt = '''\n- fmt starting with `'%'` (like `%04d`) will use [:onclick https://docs.python.org/3.6/library/locale.html#locale.format_string]locale.format_string[/]\n- other fmt (like `{:4d}` is passed to Python [:onclick https://docs.python.org/3/library/string.html#custom-string-formatting)]string.format[/]\n'''\n\nvd.option('disp_float_fmt', '{:.02f}', 'default fmtstr to format float values', replay=True, help=vd.help_float_fmt)\nvd.option('disp_int_fmt', '{:d}', 'default fmtstr to format int values', replay=True, help=vd.help_int_fmt)\n\n\nvd.numericTypes = [int,float]\n\n# VisiDataType .typetype are e.g. int, float, str, and used internally in these ways:\n#\n#    o = typetype(val)   # for interpreting raw value\n#    o = typetype(str)   # for conversion from string (when setting)\n#    o = typetype()      # for default value to be used when conversion fails\n#\n# The resulting object o must be orderable and convertible to a string for display and certain outputs (like csv).\n#\n# .icon is a single character that appears in the notes field of cells and column headers.\n# .formatter(fmtstr, typedvalue) returns a string of the formatted typedvalue according to fmtstr.\n# .fmtstr is the default fmtstr passed to .formatter.\n\ndef anytype(r=None):\n    'minimalist \"any\" passthrough type'\n    return r\nanytype.__name__ = ''\n\n\n@VisiData.global_api\ndef numericFormatter(vd, fmtstr, typedval):\n    try:\n        fmtstr = fmtstr or vd.options['disp_'+type(typedval).__name__+'_fmt']\n        if fmtstr[0] == '%':\n            return locale.format_string(fmtstr, typedval, grouping=False)\n        else:\n            return fmtstr.format(typedval)\n    except ValueError:\n        return str(typedval)\n\n\n@VisiData.api\ndef numericType(vd, icon='', fmtstr='', formatter=vd.numericFormatter):\n    '''Decorator for numeric types.'''\n    def _decorator(f):\n        vd.addType(f, icon=icon, fmtstr=fmtstr, formatter=formatter, name=f.__name__)\n        vd.numericTypes.append(f)\n        return f\n    return _decorator\n\n\nclass VisiDataType:\n    'Register *typetype* in the typemap.'\n    def __init__(self, typetype=None, icon=None, fmtstr='', formatter=vd.numericFormatter, key='', name=None):\n        self.typetype = typetype or anytype # int or float or other constructor\n        self.name = name or getattr(typetype, '__name__', str(typetype))\n        self.icon = icon      # show in rightmost char of column\n        self.fmtstr = fmtstr\n        self.formatter = formatter\n        self.key = key\n\n@VisiData.api\ndef addType(vd, typetype=None, icon=None, fmtstr='', formatter=vd.numericFormatter, key='', name=None):\n    '''Add type to type map.\n\n    - *typetype*: actual type class *TYPE* above\n    - *icon*: unicode character in column header\n    - *fmtstr*: format string to use if fmtstr not given\n    - *formatter*: formatting function to call as ``formatter(fmtstr, typedvalue)``\n    '''\n    t = VisiDataType(typetype=typetype, icon=icon, fmtstr=fmtstr, formatter=formatter, key=key, name=name)\n    if typetype:\n        vd.typemap[typetype] = t\n        if name:\n            vd.addGlobals({name: typetype})\n    return t\n\nvdtype = vd.addType\n\n\n# typemap [vtype] -> VisiDataType\nvd.typemap = {}\n\n@VisiData.api\ndef getType(vd, typetype):\n    return vd.typemap.get(typetype) or VisiDataType()\n\n\n@vd.numericType('')\ndef numtype(r=None):\n    'A passthrough numeric type that uses default precision and formatting'\n    return r\nnumtype.__name__ = 'num'\n\n\nvdtype(None, '∅', name='none')\nvdtype(anytype, '', formatter=lambda _,v: str(v))\nvdtype(numtype, '')\nvdtype(str, '~', formatter=lambda _,v: v)\nvdtype(int, '#')\nvdtype(float, '%')\nvdtype(dict, '')\nvdtype(list, '')\n\n@VisiData.api\ndef isNumeric(vd, col):\n    return col.type in vd.numericTypes\n\ndef deduceType(v):\n    if isinstance(v, (float, int)):\n        return type(v)\n    else:\n        return anytype\n##\n\n@vd.numericType('%')\ndef floatlocale(*args):\n    'Calculate float() using system locale set in LC_NUMERIC.'\n    if not args:\n        return 0.0\n\n    return locale.atof(*args)\n\n\n@vd.numericType('♯', fmtstr='%d')\nclass vlen(int):\n    def __new__(cls, v=0):\n        if isinstance(v, (vlen, int, float)):\n            return super(vlen, cls).__new__(cls, v)\n        else:\n            return super(vlen, cls).__new__(cls, len(v))\n\n    def __len__(self):\n        return self\n\nvd.addGlobals(anytype=anytype,\n              numtype=numtype,\n              vdtype=vdtype,\n              deduceType=deduceType)\n"
  },
  {
    "path": "visidata/_urlcache.py",
    "content": "import os\nimport os.path\nimport time\n\nfrom visidata import vd, VisiData, Path, modtime\n\n\n@VisiData.global_api\ndef urlcache(vd, url, days=1, text=True, headers={}):\n    'Return Path object to local cache of url contents.'\n    from urllib.request import Request, urlopen\n    import urllib.parse\n\n    os.makedirs(vd.cache_dir, exist_ok=True)\n\n    p = Path(vd.cache_dir / urllib.parse.quote(url, safe=''))\n    if p.exists():\n        secs = time.time() - modtime(p)\n        if secs < days*24*60*60:\n            return p\n\n    req = Request(url)\n    for k, v in headers.items():\n        req.add_header(k, v)\n\n    with urlopen(req) as fp:\n        ret = fp.read()\n        if text:\n            ret = ret.decode('utf-8').strip()\n            with p.open(mode='w', encoding='utf-8') as fpout:\n                fpout.write(ret)\n        else:\n            with p.open_bytes(mode='w') as fpout:\n                fpout.write(ret)\n\n    return p\n\n\n@VisiData.api\ndef enable_requests_cache(vd):\n    try:\n        import requests\n        import requests_cache\n\n        requests_cache.install_cache(str(Path(os.path.join(vd.options.visidata_dir, 'httpcache'))), backend='sqlite', expire_after=24*60*60)\n    except ModuleNotFoundError:\n        vd.warning('install requests_cache for less intrusive scraping')\n\n\nvd.addGlobals({'urlcache': urlcache})\n"
  },
  {
    "path": "visidata/aggregators.py",
    "content": "import math\nimport functools\nimport collections\nimport statistics\nfrom copy import copy\nimport itertools\n\nfrom visidata import Progress, Sheet, Column, ColumnsSheet, VisiData, SettableColumn\nfrom visidata import vd, anytype, numtype, vlen, asyncthread, wrapply, AttrDict, date, INPROGRESS, dispwidth, stacktrace, TypedExceptionWrapper\n\nvd.help_aggregators = '''# Choose Aggregators\nStart typing an aggregator name or description.\nMultiple aggregators can be added by separating spaces.\n\n- `Enter` to select top aggregator.\n- `Tab` to highlight top aggregator.\n\n## When Aggregator Highlighted\n\n- `Tab`/`Shift+Tab` to cycle highlighted aggregator.\n- `Enter` to select aggregators.\n- `Space` to add highlighted aggregator.\n- `0-9` to add numbered aggregator.\n'''\n\nvd.option('null_value', None, 'a value to be counted as null', replay=True)\n\n\n@Column.api\ndef getValueRows(self, rows):\n    'Generate (value, row) for each row in *rows* at this column, excluding null and error values.'\n    f = self.sheet.isNullFunc()\n\n    for r in Progress(rows, 'calculating'):\n        try:\n            v = self.getTypedValue(r)\n            if not f(v):\n                yield v, r\n        except Exception:\n            pass\n\n\n@Column.api\ndef getValues(self, rows):\n    'Generate value for each row in *rows* at this column, excluding null and error values.'\n    for v, r in self.getValueRows(rows):\n        yield v\n\n\nvd.aggregators = collections.OrderedDict()  # [aggname] -> annotated func, or list of same\n\nColumn.init('aggstr', str, copy=True)\nColumn.init('_aggregatedTotals', dict)  # [aggname] -> agg total over all rows\n\n\ndef aggregators_get(col):\n    'A space-separated names of aggregators on this column.'\n    aggs = []\n    for k in (col.aggstr or '').split():\n        agg = vd.aggregators[k]\n        aggs += agg if isinstance(agg, list) else [agg]\n    return aggs\n\n\ndef aggregators_set(col, aggs):\n    if isinstance(aggs, str):\n        newaggs = []\n        for agg in aggs.split():\n            if agg not in vd.aggregators:\n                vd.fail(f'unknown aggregator {agg}')\n            newaggs.append(agg)\n    elif aggs is None:\n        newaggs = ''\n    else:\n        newaggs = [agg.name for agg in aggs]\n\n    col.aggstr = ' '.join(newaggs)\n\nColumn.aggregators = property(aggregators_get, aggregators_set)\n\n\nclass Aggregator:\n    def __init__(self, name, type, funcValues=None, helpstr=''):\n        'Define aggregator `name` that calls funcValues(values)'\n        self.type = type\n        self.funcValues = funcValues  # funcValues(values)\n        self.helpstr = helpstr\n        self.name = name\n\n    def aggregate(self, col, rows):  # wrap builtins so they can have a .type\n        vals = list(col.getValues(rows))\n        try:\n            return self.funcValues(vals)\n        except Exception as e:\n            if len(vals) == 0:\n                return None\n            raise e\n\n\nclass ListAggregator(Aggregator):\n    '''A list aggregator is an aggregator that returns a list of values, generally\n    one value per input row, unlike ordinary aggregators that operate on rows\n    and return only a single value.\n    To implement a new list aggregator, subclass ListAggregator,\n    and override aggregate() and aggregate_list().'''\n    def __init__(self, name, type, helpstr='', listtype=None):\n        '''*listtype* determines the type of the column created by addcol_aggregate()\n        for list aggrs. If it is None, then the new column will match the type of the input column'''\n        super().__init__(name, type, helpstr=helpstr)\n        self.listtype = listtype\n\n    def aggregate(self, col, rows) -> list:\n        '''Return a list, which can be shorter than *rows*, because it filters out nulls and errors.\n        Override in subclass.'''\n        vals = self.aggregate_list(col, rows)\n        # filter out nulls and errors\n        vals = [ v for v in vals if not col.sheet.isNullFunc()(v) ]\n        return vals\n\n    def aggregate_list(self, col, row_group) -> list:\n        '''Return a list of results, which will be one result per input row.\n        *row_group* is an iterable that holds a \"group\" of rows to run the aggregator on.\n        rows in *row_group* are not necessarily in the same order they are in the sheet.\n        Override in subclass.'''\n        vals = [ col.getTypedValue(r) for r in row_group ]\n        return vals\n\n\n@VisiData.api\ndef aggregator(vd, name, funcValues, helpstr='', *, type=None):\n    '''Define simple aggregator *name* that calls ``funcValues(values)`` to aggregate *values*.\n       Use *type* to force type of aggregated column (default to use type of source column).'''\n    vd.aggregators[name] = Aggregator(name, type, funcValues=funcValues, helpstr=helpstr)\n\n\n@VisiData.api\ndef aggregator_list(vd, name, helpstr='', type=anytype, listtype=anytype):\n    '''Define simple aggregator *name* that calls ``funcValues(values)`` to aggregate *values*.\n       Use *type* to force type of aggregated column (default to use type of source column).\n       Use *listtype* to force the type of the new column created by addcol-aggregate.\n       If *listtype* is None, it will match the type of the source column.'''\n    vd.aggregators[name] = ListAggregator(name, type, helpstr=helpstr, listtype=listtype)\n\n## specific aggregator implementations\n\n\ndef mean(vals):\n    vals = list(vals)\n    if vals:\n        return sum(vals)/len(vals)\n\n\ndef vsum(vals):\n    return sum(vals, start=type(vals[0] if len(vals) else 0)())  #1996\n\n\ndef stdev(vals):\n    # because statistics.stdev can raise an exception, we put it in a wrapper.\n    # The wrapper lets the exception be seen as an error string in the stdev\n    # aggregator, shown at the bottom of the sheet as part of allAggregators.\n    try:\n        return statistics.stdev(vals)\n    except statistics.StatisticsError as e:  #when vals holds only 1 element\n        e.stacktrace = stacktrace()\n        return TypedExceptionWrapper(None, exception=e)\n\n\n# http://code.activestate.com/recipes/511478-finding-the-percentile-of-the-values/\ndef _percentile(N, percent, key=lambda x:x):\n    \"\"\"\n    Find the percentile of a list of values.\n\n    @parameter N - is a list of values. Note N MUST BE already sorted.\n    @parameter percent - a float value from 0.0 to 1.0.\n    @parameter key - optional key function to compute value from each element of N.\n\n    @return - the percentile of the values\n    \"\"\"\n    if not N:\n        return None\n    k = (len(N)-1) * percent\n    f = math.floor(k)\n    c = math.ceil(k)\n    if f == c:\n        return key(N[int(k)])\n    d0 = key(N[int(f)]) * (c-k)\n    d1 = key(N[int(c)]) * (k-f)\n    return d0+d1\n\n\n@functools.lru_cache(100)\nclass PercentileAggregator(Aggregator):\n    def __init__(self, pct, helpstr=''):\n        super().__init__('p%s'%pct, None, helpstr=helpstr)\n        self.pct = pct\n\n    def aggregate(self, col, rows):\n        return _percentile(sorted(col.getValues(rows)), self.pct/100, key=float)\n\n\ndef quantiles(q, helpstr):\n    return [PercentileAggregator(round(100*i/q), helpstr) for i in range(1, q)]\n\n\ndef aggregate_groups(sheet, col, rows, aggr) -> list:\n    '''Returns a list, containing the result of the aggregator applied to each row.\n    *col* is a column whose values determine each row's rank within a group.\n    *rows* is a list of visidata rows.\n    *aggr* is an Aggregator object.\n    Rows are grouped by their key columns. Null key column cells are considered equal,\n    so nulls are grouped together. Cells with exceptions do not group together.\n    Each exception cell is grouped by itself, with only one row in the group.\n    '''\n    def _key_progress(prog):\n        def identity(val):\n            prog.addProgress(1)\n            return val\n        return identity\n\n    with Progress(gerund='ranking', total=4*sheet.nRows) as prog:\n        p = _key_progress(prog) # increment progress every time p() is called\n        # compile row data, for each row a list of tuples: (group_key, rank_key, rownum)\n        rowdata = [(sheet.rowkey(r), col.getTypedValue(r), p(rownum)) for rownum, r in enumerate(rows)]\n        # sort by row key and column value to prepare for grouping\n        try:\n            rowdata.sort(key=p)\n        except TypeError as e:\n            vd.fail(f'elements in a ranking column must be comparable: {e.args[0]}')\n        rowvals = []\n        #group by row key\n        for _, group in itertools.groupby(rowdata, key=lambda v: v[0]):\n            # within a group, the rows have already been sorted by col_val\n            group = list(group)\n            if isinstance(aggr, ListAggregator): # for list aggregators, each row gets its own value\n                aggr_vals = aggr.aggregate_list(col, [rows[rownum] for _, _, rownum in group])\n                rowvals += [(rownum, v) for (_, _, rownum), v in zip(group, aggr_vals)]\n            else:             # for normal aggregators, each row in the group gets the same value\n                aggr_val = aggr.aggregate(col, [rows[rownum] for _, _, rownum in group])\n                rowvals += [(rownum, aggr_val) for _, _, rownum in group]\n            prog.addProgress(len(group))\n        # sort by unique rownum, to make rank results match the original row order\n        rowvals.sort(key=p)\n        rowvals = [ v for rownum, v in rowvals ]\n        return rowvals\n\nvd.aggregator('min', min, 'minimum value')\nvd.aggregator('max', max, 'maximum value')\nvd.aggregator('avg', mean, 'arithmetic mean of values', type=numtype)\nvd.aggregator('mean', mean, 'arithmetic mean of values', type=numtype)\nvd.aggregator('median', statistics.median, 'median of values', type=numtype)\nvd.aggregator('mode', statistics.mode, 'mode of values')\nvd.aggregator('sum', vsum, 'sum of values')\nvd.aggregator('distinct', set, 'distinct values', type=vlen)\nvd.aggregator('count', lambda values: sum(1 for v in values), 'number of values', type=int)\nvd.aggregator_list('list', 'list of values', type=anytype, listtype=None)\nvd.aggregator('stdev', stdev, 'standard deviation of values', type=float)\n\nvd.aggregators['q3'] = quantiles(3, 'tertiles (33/66th pctile)')\nvd.aggregators['q4'] = quantiles(4, 'quartiles (25/50/75th pctile)')\nvd.aggregators['q5'] = quantiles(5, 'quintiles (20/40/60/80th pctiles)')\nvd.aggregators['q10'] = quantiles(10, 'deciles (10/20/30/40/50/60/70/80/90th pctiles)')\n\n# since bb29b6e, a record of every aggregator\n# is needed in vd.aggregators\nfor pct in (10, 20, 25, 30, 33, 40, 50, 60, 67, 70, 75, 80, 90, 95, 99):\n    vd.aggregators[f'p{pct}'] = PercentileAggregator(pct, f'{pct}th percentile')\n\n\nclass KeyFindingAggregator(Aggregator):\n    '''Return the key of the row that results from applying *aggr_func* to *rows*.\n        Return None if *rows* is an empty list.\n        *aggr_func* takes a list of (value, row) tuples, one for each row in the column,\n        excluding rows where the column holds null and error values.\n        *aggr_func* must also take the parameters *default* and *key*, as max() does:\n        https://docs.python.org/3/library/functions.html#max'''\n\n    def __init__(self, aggr_func, *args, **kwargs):\n        self.aggr_func = aggr_func\n        super().__init__(*args, **kwargs)\n\n    def aggregate(self, col, rows):\n        if not col.sheet.keyCols:\n            vd.error('key aggregator function requires one or more key columns')\n            return None\n        # convert dicts to lists because functions like max() can't compare dicts\n        sortkey = lambda t: (t[0], sorted(t[1].items())) if isinstance(t[1], dict) else t\n        row = self.aggr_func(col.getValueRows(rows), default=(None, None), key=sortkey)[1]\n        return col.sheet.rowkey(row) if row else None\n\nvd.aggregators['keymin'] = KeyFindingAggregator(min, 'keymin', anytype, helpstr='key of the minimum value')\nvd.aggregators['keymax'] = KeyFindingAggregator(max, 'keymax', anytype, helpstr='key of the maximum value')\n\n\nColumnsSheet.columns += [\n    Column('aggregators',\n           getter=lambda c,r:r.aggstr,\n           setter=lambda c,r,v:setattr(r, 'aggregators', v),\n           help='change the metrics calculated in every Frequency or Pivot derived from the source sheet')\n]\n\n\n@Sheet.api\ndef addAggregators(sheet, cols, aggrnames):\n    'Add each aggregator in list of *aggrnames* to each of *cols*. Ignores names that are not valid.'\n    for aggrname in aggrnames:\n        aggrs = vd.aggregators.get(aggrname)\n        aggrs = aggrs if isinstance(aggrs, list) else [aggrs]\n        for c in cols:\n            vd.addUndo(setattr, c, 'aggregators', copy(c.aggregators))\n            for aggr in aggrs:\n                if aggr and aggr not in c.aggregators:\n                    c.aggregators += [aggr]\n\n\n@Column.api\ndef aggname(col, agg):\n    'Consistent formatting of the name of given aggregator for this column.  e.g. \"col1_sum\"'\n    return '%s_%s' % (col.name, agg.name)\n\n\n@Column.api\ndef aggregateTotal(col, agg):\n    if agg not in col._aggregatedTotals:\n        col._aggregatedTotals[agg] = INPROGRESS\n        col._aggregateTotalAsync(agg)\n    return col._aggregatedTotals[agg]\n\n\n@Column.api\n@asyncthread\ndef _aggregateTotalAsync(col, agg):\n    col._aggregatedTotals[agg] = wrapply(agg.aggregate, col, col.sheet.rows)\n\n\n@Column.api\n@asyncthread\ndef memo_aggregate(col, agg_choices, rows):\n    'Show aggregated value in status, and add to memory.'\n    for agg_choice in agg_choices:\n        agg = vd.aggregators.get(agg_choice)\n        if not agg: continue\n        aggs = agg if isinstance(agg, list) else [agg]\n        for agg in aggs:\n            aggval = agg.aggregate(col, rows)\n            typedval = wrapply(agg.type or col.type, aggval)\n            # limit width to limit formatting time when typedval is a long list\n            dispval = col.format(typedval, width=1000)\n            k = col.name+'_'+agg.name\n            vd.status(f'{k}={dispval}')\n            vd.memory[k] = typedval\n\n\n@VisiData.property\ndef aggregator_choices(vd):\n    return [\n       AttrDict(key=agg, desc=v[0].helpstr if isinstance(v, list) else v.helpstr)\n         for agg, v in vd.aggregators.items()\n           if not (agg.startswith('p') and agg[1:].isdigit())  # skip all the percentiles like 'p10', user should use q# instead\n    ]\n\n\n@VisiData.api\ndef chooseAggregators(vd, prompt = 'choose aggregators: '):\n    '''Return a list of aggregator name strings chosen or entered by the user. User-entered names may be invalid.'''\n    def _fmt_aggr_summary(match, row, trigger_key):\n        formatted_aggrname = match.formatted.get('key', row.key) if match else row.key\n        r = ' '*(dispwidth(prompt)-3)\n        r += f' [:keystrokes]{trigger_key}[/] ' if trigger_key else '   '\n        r += f'[:bold]{formatted_aggrname}[/]'\n        if row.desc:\n            r += ' - '\n            r += match.formatted.get('desc', row.desc) if match else row.desc\n        return r\n\n    r = vd.activeSheet.inputPalette(prompt,\n            vd.aggregator_choices,\n            value_key='key',\n            formatter=_fmt_aggr_summary,\n            type='aggregators',\n            help=vd.help_aggregators,\n            multiple=True)\n\n    aggrs = r.split()\n    valid_choices = vd.aggregators.keys()\n    for aggr in aggrs:\n        vd.usedInputs[aggr] += 1\n        if aggr not in valid_choices:\n            vd.warning(f'aggregator does not exist: {aggr}')\n    return aggrs\n\n\n@Sheet.api\n@asyncthread\ndef addcol_aggregate(sheet, col, aggrnames):\n    for aggrname in aggrnames:\n        aggrs = vd.aggregators.get(aggrname)\n        if aggrs is None: continue\n        aggrs = aggrs if isinstance(aggrs, list) else [aggrs]\n        for aggr in aggrs:\n            rows = aggregate_groups(sheet, col, sheet.rows, aggr)\n            if isinstance(aggr, ListAggregator):\n                t = aggr.listtype or col.type\n            else:\n                t = aggr.type or col.type\n            c = SettableColumn(name=f'{col.name}_{aggr.name}', type=t)\n            sheet.addColumnAtCursor(c)\n            c.setValues(sheet.rows, *rows)\n\nSheet.addCommand('+', 'aggregate-col', 'addAggregators([cursorCol], chooseAggregators())', 'Add aggregator to current column')\nSheet.addCommand('z+', 'memo-aggregate', 'cursorCol.memo_aggregate(chooseAggregators(), selectedRows or rows)', 'memo result of aggregator over values in selected rows for current column')\nColumnsSheet.addCommand('g+', 'aggregate-cols', 'addAggregators(selectedRows or source[0].nonKeyVisibleCols, chooseAggregators())', 'add aggregators to selected source columns')\nSheet.addCommand('', 'addcol-aggregate', 'addcol_aggregate(cursorCol, chooseAggregators(prompt=\"aggregator for groups: \"))', 'add column(s) with aggregator of rows grouped by key columns')\n\nvd.addGlobals(\n    ListAggregator=ListAggregator\n)\n\nvd.addMenuItems('''\n    Column > Add aggregator > aggregate-col\n    Column > Add column > aggregate > addcol-aggregate\n''')\n\n"
  },
  {
    "path": "visidata/apps/__init__.py",
    "content": ""
  },
  {
    "path": "visidata/apps/galcon/Dockerfile.galcon-client",
    "content": "FROM ubuntu as intermediate\n\nRUN apt-get update\nRUN apt-get install -y git\n\nARG SSH_PRIVATE_KEY\nRUN mkdir /root/.ssh/\nRUN echo \"${SSH_PRIVATE_KEY}\" > /root/.ssh/id_rsa\nRUN chmod 0400 /root/.ssh/id_rsa\n\n\n# make sure domain is accepted\nRUN touch /root/.ssh/known_hosts\nRUN ssh-keyscan github.com >> /root/.ssh/known_hosts\n\nRUN git clone git@github.com:saulpw/vdplus.git\nWORKDIR \"vdplus\"\nRUN git pull\n\n\nFROM python:3.9-alpine3.13\n\nRUN apk add git\n# copy repo from previous image\nCOPY --from=intermediate /vdplus/galcon /galcon\n\nWORKDIR \"/galcon\"\nRUN pip install .\nENV TERM=\"xterm-256color\"\nRUN sh -c \"echo >>~/.visidatarc import galcon\"\nENV IPADDR=1.1.1.1  # 172.17.0.2\nENTRYPOINT [\"sh\", \"-c\", \"vd galcon+http://${IPADDR}:8080\"]\n"
  },
  {
    "path": "visidata/apps/galcon/Dockerfile.galcon-server",
    "content": "FROM ubuntu as intermediate\n\nRUN apt-get update\nRUN apt-get install -y git\n\nARG SSH_PRIVATE_KEY\nRUN mkdir /root/.ssh/\nRUN echo \"${SSH_PRIVATE_KEY}\" > /root/.ssh/id_rsa\nRUN chmod 0400 /root/.ssh/id_rsa\n\n# make sure domain is accepted\nRUN touch /root/.ssh/known_hosts\nRUN ssh-keyscan github.com >> /root/.ssh/known_hosts\n\nRUN git clone git@github.com:saulpw/vdplus.git\nWORKDIR \"vdplus\"\nRUN git pull\n\n\nFROM python:3.9-alpine3.13\n\nRUN apk add git\n# copy repo from previous image\nCOPY --from=intermediate /vdplus /vdplus\nWORKDIR \"vdplus/galcon\"\n\nRUN pip install .\nEXPOSE 8080\nENTRYPOINT [\"galcon-server.py\", \"-p 8080\"]\n"
  },
  {
    "path": "visidata/apps/galcon/README.md",
    "content": "**Note: This code has not been updated to run with the latest VisiData.**\n\n\n# Galactic Conquest in VisiData\n\nTake over the galaxy with your warship fleet!\nStarting with only one planet and 10 ships, you compete with any number of enemies for the most planets and thus galactic glory.\n\nAt first, most planets are inhabited by savages with only a few spaceships for battle.\nSome planets have better pilots, and ships from those planets have a higher kill rate in battle.\n\nTo capture a planet, you need to send a strong enough fleet.  Deploy ships from your planets and conquer the galaxy!\n\nGalactic Conquest (or \"galcon\" as it is sometimes called) is turn-based.\nWhen all players have submitted their moves, the turn is over.\nShips arrive, battles are resolved, and planets produce more ships.\nThen the next turn begins.\n\n## Instructions\n\n### Starting a game\n\nThe host has to start a server:\n\n    ./galcon-server.py [-p <port>]\n\nThis will output a URL for players to connect to.  All players then start their clients and login:\n\n    vd -f galcon http://your.ip.address:8080\n\nOf course, the given port on `your.ip.address` must be open to all players.\n\nThe first time a player name is used, the password is set.\nPlayers join the game if it has not yet started (each server only hosts one game).\n\nEach player presses `Ctrl+S` when they are ready for the game to start.\n\nPress `Alt+M` to go to the Map for this game, or `Alt+P` for the list of planets.\nBefore the game has started, any player can change `Alt+G`ame options or press `Alt+N` to generate a New map.\n`Ctrl+R` will reload the current sheet from data on the server.\n\nWhen the map and all players are ready, the game begins.\n\n### Playing the game\n\nFrom any sheet:\n\n- `Alt+M` opens the planet map\n- `Alt+P` opens the planet sheet\n- `Alt+U` opens the queued deployments sheet (not yet sent to server)\n- `Alt+D` opens the full deployments sheet\n- `Alt+E` opens the events sheet\n- `Alt+Q` allows players to quit the game\n- `Ctrl+S` submits the pending deployments to the server and signals the player is done\n\nOn the Planets sheet:\n\n- `m` to mark the destination planet for a player's ships\n- `f` to indicate the source planet\n    - The player is then prompted to specify how many ships they wish to deploy from the source planet to the marked planet\n- `gf` to send the provided number of ships from all selected planets to the marked planet\n\nOn the Map sheet:\n\n- The colour of the planet indicates which player currently 'owns' it\n- White planets are neutral and currently not in anybody's control\n- `v` to cycle through `name`, `prod`, `killpct` and `numships` fields\n- `m` and `f` to mark and deploy on the map sheet, same as on the Planets sheet\n\nOn the Queued Orders sheet:\n\n- `e` to modify an order\n- `d` to delete an order\n\n### Using the Dockerfiles\n\nCreate an ssh deploy key that has permissions for vdplus. Here, it is called `bluebird_docker`\n\n```\n# build the image for the galcon server\nsudo docker build --build-arg SSH_PRIVATE_KEY=\"$(cat bluebird_docker)\" -t galcon-server -f Dockerfile.galcon-server .\n# run the galcon server\nsudo docker run -d -p 7777:8080 --rm galcon-server\n\n# get ip address of where galcon server is running\nsudo docker inspect GALCON_SERVER_CONTAINER_NUMBER | jq '.[0].NetworkSettings.IPAddress'\n\n# build the image for the client\nsudo docker build --build-arg SSH_PRIVATE_KEY=\"$(cat bluebird_docker)\" -t galcon-client -f Dockerfile.galcon-client .\n\n# for each person that is playing, run the docker client\nsudo docker run -e IPADDR=\"GALCON_SERVER_IP_ADDRESS\" -it --rm galcon-client\n```\n"
  },
  {
    "path": "visidata/apps/galcon/galcon-server.py",
    "content": "#!/usr/bin/env python3\n\nimport sys\nimport string\nimport math\nimport json\nimport http.server\nimport urllib.parse\nimport uuid\nimport random\nimport traceback\n\nplayer_colors = 'green yellow cyan magenta red blue'.split()\nall_planet_names =  string.ascii_uppercase + '0123456789' + '☿♀♂♃♄⛢♅♆⚳⚴⚵' + '+&%$#@![](){}=<>'\n\nrand = random.randrange\n\ndef error(s):\n    raise HTTPException(300, s)\n\n#### options management\nclass OptionsObject:\n    \"\"\"Get particular option value from `base_options`.\"\"\"\n    def __init__(self, d):\n        self._opts = d\n    def __getattr__(self, k):\n        return self._opts[k]\n    def __setitem__(self, k, v):\n        if k not in self._opts:\n            raise Exception('no such option \"%s\"' % k)\n        self._opts[k] = v\n\nclass Game:\n    def __init__(self):\n        self.options_dict = {\n            'num_planets': 57,\n            'num_turns': 20,\n            'map_width': 15,\n            'map_height': 15,\n            'toroidal_map': False,  # if the edges are connected\n            'map_generator': 'rclogo_fixed',  # or 'random' or 'rclogo_var'\n            'debug': False,\n        }\n        self.options = OptionsObject(self.options_dict)\n        self.players = {}   # [playername] -> Player\n        self.planets = {}   # [planetname] -> Planet\n        self.deployments = []\n        self.events = []\n        self.current_turn = 0\n\n        self.generate_planets()\n\n    def generate_planets(self):\n        f = globals()['generate_map_' + self.options.map_generator]\n\n        self.planets = f(self.options.map_width,\n                         self.options.map_height,\n                         self.options.num_planets,\n                         self.distance)\n\n        # assign a starting planet for each player\n        for i, player in enumerate(self.players.values()):\n            starting_planet = self.planets[all_planet_names[i]]\n            starting_planet.owner = player\n            starting_planet.prod = 10\n            starting_planet.nships = 10\n            starting_planet.killpct = 40\n\n        for planet in self.planets.values():\n            if planet.name not in all_planet_names[:len(self.players)]:\n                planet.prod = rand(6) + rand(6)\n                planet.killpct = rand(11)+rand(11)+rand(11)+rand(11)+6\n                planet.nships = max(planet.prod, 1)\n\n    def notify(self, eventstr):\n        self.events.append(Event(self.current_turn, eventstr))\n\n    def start_game(self):\n        self.next_turn()\n\n    def end_turn(self):\n        for d in self.deployments:\n            if d.dest_turn != self.current_turn+1:\n                continue\n\n            if d.dest_planet.owner is d.launch_player:\n                d.dest_planet.nships += d.nships_deployed\n                self.notify('%s sent %d reinforcements to %s' % (d.launch_player, d.nships_deployed, d.dest_planet.name))\n                if self.options.debug:\n                    self.notify('   from %s' % d.launch_planet)\n                continue\n\n            # battle time\n\n            attackers = d.nships_deployed\n            defenders = d.dest_planet.nships\n            attack_killpct = d.killpct\n            defend_killpct = d.dest_planet.killpct\n\n            battle_notice = '%s attacked %s (%s ships at %s%%) with %s ships (%s%%)' % (d.launch_player,\n                d.dest_planet,\n                defenders,\n                defend_killpct,\n                attackers,\n                attack_killpct)\n\n            round_results = []\n\n            while attackers > 0 and defenders > 0:\n                killed_by_attackers = sum(1 for i in range(attackers) if rand(100) <= attack_killpct)\n                killed_by_defenders = sum(1 for i in range(defenders) if rand(100) <= defend_killpct)\n                if self.options.debug:\n                    round_results.append('%s/%s' % (\n                        defenders-min(killed_by_attackers, defenders),\n                        attackers-min(killed_by_defenders, attackers)))\n\n                attackers -= killed_by_defenders\n                defenders -= killed_by_attackers\n\n            if round_results:\n                battle_notice += '[%s]' % ','.join(round_results)\n\n            if attackers <= defenders:\n                defenders = max(defenders, 0)\n                battle_notice += ' and was destroyed, leaving %s ships!' % defenders\n                d.dest_planet.nships = defenders\n            else:\n                attackers = max(attackers, 0)\n                battle_notice += ' and seized control with %s ships!' % attackers\n\n                d.dest_planet.owner = d.launch_player\n                d.dest_planet.nships = attackers\n\n            self.notify(battle_notice)\n            if self.options.debug:\n                self.notify('   from %s' % d.launch_planet)\n\n        for p in self.planets.values():\n            if p.owner:\n                # production\n                p.nships += p.prod\n\n                # random planetary events\n                if rand(100) < 5:\n                    if rand(40) > p.killpct:\n                        p.killpct += rand(5)\n                        self.notify('Planet %s instituted compulsory opera, killpct improved to %s%%' % (p.name, p.killpct))\n                    elif rand(10) > p.prod:\n                        p.prod += 1\n                        self.notify('Planet %s improved its production to %s' % (p.name, p.prod))\n                    elif rand(40) < p.killpct:\n                        p.killpct -= rand(5)\n                        self.notify('Planet %s legalized dancing, killpct dropped to %s%%' % (p.name, p.killpct))\n                    elif rand(10) < p.prod:\n                        p.prod -= 1\n                        self.notify('Planet %s production decreased to %s%%' % (p.name, p.prod))\n                    else:\n                        self.GET_deploy(p.owner, p.name, random.choice([x.name for x in self.planets.values() if x.owner is p.owner]), None, p.nships)\n                        self.notify('Planet %s revolted against the tyrannical rule of %s!' % (p.name, p.owner))\n                        p.owner = None\n\n        self.next_turn()\n\n    def next_turn(self):\n        self.current_turn += 1\n\n        for p in self.players.values():\n            p.turn_sent = False\n\n        if self.current_turn > self.options.num_turns:\n            scores = self.GET_scores(None)\n            self.notify('Game over!')\n            self.notify('%s is the winner!' % scores[0]['name'])\n        else:\n            self.notify('*** Turn %d started' % self.current_turn)\n\n    def GET_scores(self, pl, **kwargs):\n        player_scores = {}\n        for plname in self.players.keys():\n            player_scores[plname] = {\n                'name': plname,\n                'nplanets': 0,\n                'nships': 0\n            }\n\n        for planet in self.planets.values():\n            if planet.owner:\n                player_scores[planet.owner.name]['nplanets'] += 1\n                player_scores[planet.owner.name]['nships'] += planet.nships\n\n        return sorted(player_scores.values(), key=lambda r: (r['nplanets'], r['nships']), reverse=True)\n\n    def GET_player_quit(self, pl, **kwargs):\n        if pl not in self.players.values():\n            error('no such player in game')\n\n        self.players.pop(pl.name)\n\n        for planet in self.planets.values():\n            if planet.owner is pl:\n                planet.owner = None\n\n        self.notify('Player %s has quit the game.' % pl.name)\n        return 'Thanks for playing!'\n\n    @property\n    def started(self):\n        return self.current_turn > 0\n\n    def POST_options(self, pl, **kwargs):\n        if self.started:\n            return 'game already started'\n\n        if pl not in self.players.values():\n            return 'only players in the game can set the options'\n\n        self.options.update(kwargs)\n\n    def GET_options(self, pl, **kwargs):\n        return self.options._opts\n\n    def GET_set_option(self, pl, option='', value=''):\n        if self.started:\n            return 'options cannot be changed after game start'\n        if pl.number is None:\n            return 'only a participating player can change a game option'\n\n        self.options[option] = type(getattr(self.options, option))(value)\n        return 'options.%s is now %s' % (option, value)\n\n    def GET_regen_map(self, pl, **kwargs):\n        if self.started:\n            error('game already started')\n\n        self.generate_planets()\n\n    def GET_gamestate(self, pl, **kwargs):\n        return {\n            'map_width': self.options.map_width,\n            'map_height': self.options.map_height,\n            'started': self.started,\n            'current_turn': self.current_turn,\n            'num_turns': self.options.num_turns,\n        }\n\n    # leaky\n    def POST_auth(self, pl, **kwargs):\n        return pl.sessionid\n\n    def GET_join(self, pl, **kwargs):\n        if self.started:\n            raise HTTPException(402, 'Game already started')\n\n        if pl.number is not None:\n            return 'already player %s/%s' % (pl.number, len(self.players))\n\n        pl.number = len(self.players)\n        self.players[pl.name] = pl\n\n        self.generate_planets()\n        return 'joined game'\n\n    def GET_ready(self, pl, **kwargs):\n        if self.started:\n            raise HTTPException(402, 'Game already started')\n\n        if not pl:\n            raise HTTPException(403, 'Unauthorized')\n\n        pl.turn_sent = True\n        if all(pl.turn_sent for pl in self.players.values()):\n            self.start_game()\n            return 'game started'\n\n        return 'player ready'\n\n    def GET_players(self, pl, **kwargs):\n        return [x.as_dict() for x in self.players.values()]\n\n    def GET_planets(self, pl, **kwargs):\n        return [x.as_dict() for x in self.planets.values()]\n\n    def GET_deployments(self, pl, **kwargs):\n        return [x.as_dict() for x in self.deployments if x.dest_turn <= self.current_turn or x.launch_player is pl]\n\n    def GET_events(self, pl):\n        return [x.as_dict() for x in self.events]\n\n    def predeploy(self, launch_player, launch_planet_name=None, dest_planet_name=None, dest_turn=None, nships=0):\n        if not self.started:\n            error('game not yet started')\n\n        launch_planet = self.planets.get(launch_planet_name) or error('no such planet %s' % launch_planet_name)\n        if launch_player is not launch_planet.owner:\n            error('player does not own planet')\n\n        dest_planet = self.planets.get(dest_planet_name) or error('no such planet %s' % dest_planet_name)\n\n        turns = int(self.distance(launch_planet, dest_planet)/2 + 0.5)\n        turns = max(1, turns)\n\n        if dest_turn is None:\n            dest_turn = 0\n        dest_turn = max(int(dest_turn), self.current_turn+turns)\n\n        dobj = Deployment(launch_player, self.current_turn, launch_planet, dest_planet, dest_turn, int(nships), launch_planet.killpct)\n        dobj.nships_deployed = min(int(nships), launch_planet.nships)\n        return dobj\n\n    def GET_deploy(self, launch_player, launch_planet_name=None, dest_planet_name=None, dest_turn=None, nships_requested=0, **kwargs):\n        dobj = self.predeploy(launch_player, launch_planet_name, dest_planet_name, dest_turn, nships_requested)\n\n\n        assert dobj.launch_planet.nships >= dobj.nships_deployed\n\n        d = dobj.as_dict()\n\n        if dobj.nships_deployed > 0:\n            dobj.launch_planet.nships -= dobj.nships_deployed\n            self.deployments.append(dobj)\n            d['result'] = 'deployed'\n        else:\n            d['result'] = 'no ships'\n\n        return d\n\n    def GET_validate_deploy(self, launch_player, launch_planet_name=None, dest_planet_name=None, dest_turn=None, nships_requested=0, **kwargs):\n        dobj = self.predeploy(launch_player, launch_planet_name, dest_planet_name, dest_turn, nships_requested)\n        dobj.nships_deployed = 0  # for client to display correctly before actual deployment\n        return dobj.as_dict()\n\n    def GET_end_turn(self, pl):\n        if not self.started:\n            error('game not yet started')\n\n        pl.turn_sent = True\n        num_still_turning = len([p for p in self.players.values() if not p.turn_sent])\n        if num_still_turning > 0:\n            return 'still waiting on %d players' % num_still_turning\n        else:\n            return self.end_turn()\n\n    def distance(self, here, dest):\n        if self.options.toroidal_map:\n            # toroidal distance : going off the edge comes back on the other side\n            return math.sqrt( ((here.y-dest.y) % self.options.map_height)**2 + ((here.x-dest.x) % self.options.map_width)**2)\n        else:\n            return math.sqrt((here.y-dest.y)**2 + (here.x-dest.x)**2)\n\n\nclass Player:\n    def __init__(self, name, md5_password, sessionid):\n        self.number = None\n        self.name = name\n        self.md5_password = md5_password\n        self.sessionid = sessionid\n        self.turn_sent = False\n\n    def as_dict(self):\n        return dict(number=self.number,\n                    name=self.name,\n                    color=player_colors[self.number],\n                    ready=self.turn_sent)\n\n    def __str__(self):\n        return self.name\n\n\nclass Planet:\n    def __init__(self, name, x, y, prod=0, killpct=0, owner=None):\n        self.name = name\n        self.x = x\n        self.y = y\n        self.prod = prod\n        self.killpct = killpct\n        self.owner = owner\n        self.nships = prod\n\n    @property\n    def xy(self):\n        return (self.x, self.y)\n\n    def __str__(self):\n        return self.name\n\n    def as_dict(self):\n        r = {\n                'name': self.name,\n                'x': self.x,\n                'y': self.y,\n        }\n        if self.owner:  # if owned by any player, all players can see it\n            r.update(prod = self.prod,\n                     killpct = self.killpct,\n                     ownername = self.owner.name,\n                     nships = self.nships)\n        else:\n            r.update(prod = None,\n                     killpct = None,\n                     ownername = None,\n                     nships = None)\n\n        return r\n\nclass Deployment:\n    def __init__(self, launch_player, launch_turn, launch_planet, dest_planet, dest_turn, nships, killpct):\n        self.launch_player = launch_player\n        self.launch_turn = launch_turn\n        self.launch_planet = launch_planet\n        self.dest_planet = dest_planet\n        self.dest_turn = dest_turn\n        self.nships_requested = nships\n        self.nships_deployed = 0\n        self.killpct = killpct\n\n    def as_dict(self):\n        return {\n            'launch_turn': self.launch_turn,\n            'launch_player_name': self.launch_player.name,\n            'launch_planet_name': self.launch_planet.name,\n            'dest_planet_name': self.dest_planet.name,\n            'dest_turn': int(self.dest_turn),\n            'nships_requested': self.nships_requested,\n            'nships_deployed': self.nships_deployed,\n            'killpct': self.killpct\n        }\n\n\nclass Event:\n    def __init__(self, turn_num, eventstr):\n        self.turn_num = turn_num\n        self.eventstr = eventstr\n\n    def as_dict(self):\n        return {\n            'turn': self.turn_num,\n            'event': self.eventstr,\n        }\n\n\n### networking via simple HTTP\n\nclass HTTPException(Exception):\n    def __init__(self, errcode, text):\n        super().__init__(text)\n        self.errcode = errcode\n\n\nclass WSIServer(http.server.HTTPServer):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.game = Game()\n        self.sessions = {}  # sessionid -> Player\n        self.users = {}     # username -> Player\n\n\nclass WSIHandler(http.server.BaseHTTPRequestHandler):\n    def generic_handler(self, reqtype, path, data):\n        fields = urllib.parse.parse_qs(data)\n        if 'params' in fields:\n            fields = fields['params']\n\n        fields = dict((k, v[0]) for k, v in fields.items())  # every param is a list; assume only one value for any param\n\n        toplevel = path.split('/')[1]\n        if not toplevel:\n            self.wfile.write('OK\\n'.encode('utf-8'))\n            return\n\n        try:\n            sessions = fields.pop('session', None)\n            if sessions:\n                pl = self.server.sessions.get(sessions)\n            else:\n                pl = None\n\n            if not pl:\n                username = fields.get('username')\n                if username:\n                    if username in self.server.users:\n                        pl = self.server.users[username]\n                        if fields['password'] != pl.md5_password:\n                            raise HTTPException(403, 'Sorry, wrong password')\n                    else:\n                        sessionid = uuid.uuid1().hex\n                        pl = Player(username, fields['password'], sessionid)\n                        self.server.sessions[sessionid] = pl\n                        self.server.users[username] = pl\n\n            ret = getattr(self.server.game, '%s_%s' % (reqtype, toplevel))(pl, **fields)\n\n            if isinstance(ret, list) or isinstance(ret, dict):\n                ret = json.dumps(ret)\n            # else leave as string\n\n            self.send_response(200)\n            self.send_header('Content-type', 'text/json')\n            self.end_headers()\n\n            if ret:\n                self.wfile.write(ret.encode('utf-8'))\n        except HTTPException as e:\n            if self.server.game.options.debug:\n                print(traceback.format_exc())\n            self.send_response(e.errcode)\n            self.send_header('Content-type', 'text/plain')\n            self.end_headers()\n            self.wfile.write(str(e).encode('utf-8')) #\n        except Exception as e:\n            print(traceback.format_exc())\n            self.send_response(404)\n            self.send_header('Content-type', 'text/plain')\n            self.end_headers()\n            self.wfile.write(str(traceback.format_exc()).encode('utf-8'))\n\n    def do_GET(self):\n        parsed_url = urllib.parse.urlparse(self.path)\n        return self.generic_handler('GET', parsed_url.path, parsed_url.query)\n\n    def do_POST(self):\n        length = int(self.headers['content-length'])\n        field_data = self.rfile.read(length).decode('utf-8')\n        return self.generic_handler('POST', self.path, field_data)\n\n\ndef generate_map_random(width, height, num_planets, distancefunc):\n    planets = {}\n\n    for planet_name in all_planet_names[:num_planets]:\n        x = rand(width)\n        y = rand(height)\n        while (x,y) in planet_coords:\n            x = rand(width)\n            y = rand(height)\n\n        planets[planet_name] = Planet(planet_name, x, y)\n        planet_coords.add((x,y))\n\n    return planets\n\n\ndef generate_map_rclogo_fixed(width, height, num_planets, distancefunc):\n    grid = '''\n.X.X.X.G.X.X.X.\n.X...........X.\n....E.X.X......\n.X...........X.\n.....XX.XB.....\n.X...........X.\n...............\n.C.X.X.H.X.X.D.\n......X.X......\n..X.X.X.X.X.X..\nX.X.........X.X\n....X.X.X.F....\nX..A.X.X.X....X\n...............\nX.X.X.X.X.X.X.X'''\n\n    starting_coords = {}\n    rclogo_coords = []\n    for y, line in enumerate(grid.strip().splitlines()):\n        for x, ch in enumerate(line):\n            if ch == 'X':\n                rclogo_coords.append((x, y))\n            elif ch != '.':\n                starting_coords[ch] = (x, y)\n\n    random.shuffle(rclogo_coords)\n\n    planets = {}\n    for planet_name in all_planet_names[:num_planets]:\n        if planet_name in starting_coords:\n            x, y = starting_coords[planet_name]\n        else:\n            x, y = rclogo_coords.pop()\n\n        planets[planet_name] = Planet(planet_name, x, y)\n\n    return planets\n\n\ndef generate_map_rclogo_var(width, height, num_planets, distancefunc):\n    planet_names = all_planet_names[:num_planets]\n\n    def allowed_coord_set(width, height):\n        def rectangle(leftupper, rightlower): # inclusive\n            return set([(i,j) for i in range(leftupper[0], rightlower[0]+1) for j in range(leftupper[1], rightlower[1]+1)])\n\n        allowed = set()\n\n        allowed = allowed | rectangle((2,2)                  ,(width-3,2))\n        allowed = allowed | rectangle((2,int(2/3 * height)-2)  ,(width-3,int(2/3 * height)-2))\n        allowed = allowed | rectangle((int(6/15 * width),int(2/3 * height)-1),(int(6/15 * width),int(2/3 * height))) # left stand\n        allowed = allowed | rectangle((int(7/15 * width),int(2/3 * height)+1), (int(7/15*width), int(2/3 * height)+2)) # right stand\n        allowed = allowed | rectangle((int(8/15 * width),int(2/3 * height)-1),(int(8/15 * width),int(2/3 * height))) # left stand\n        allowed = allowed | rectangle((int(9/15 * width),int(2/3 * height)+1), (int(9/15*width), int(2/3 * height)+2)) # right stand\n        allowed = allowed | rectangle( (int(width*2/10),height-3)        ,(int(3/10*width),height-3)) # left keyboard\n        allowed = allowed | rectangle( (int(width*4/10),height-2)        ,(int(5/10*width),height-2)) # left keyboard\n        allowed = allowed | rectangle( (int(width*6/10),height-3)        ,(int(7/10*width),height-3)) # left keyboard\n        allowed = allowed | rectangle( (int(width*7/10),height-2)        ,(int(8/10*width),height-2)) # right keyboard\n\n        allowed = allowed | rectangle( (2,2)                  ,(2,int(2/3 * height)-2) )  # left edge\n        allowed = allowed | rectangle((width-3,2)             ,(width-3,int(2/3 * height)-2))  # right edge\n        assert height not in [x[1] for x in allowed], \"allowed set is too tall\"\n        assert width not in [x[0] for x in allowed], \"allowed set is too wide\"\n\n        return allowed\n\n    def planet_away_from_planets(width, height, existingplanets):\n        def min_distance(oneplanet, planets):\n            return min(map(lambda x, oneplanet=oneplanet, distancefunc=distancefunc: distancefunc(oneplanet,x), planets))\n\n        def index_best(potentialplanets, ownedplanets):\n            distances = map(lambda x, ownedplanets=ownedplanets: min_distance(x ,ownedplanets), potentialplanets)\n            index_of_best_planet = max([(d,i) for i,d in enumerate(distances)])[1]\n            return index_of_best_planet\n\n        ownedplanets = [p for p in existingplanets.values() if p.owner is not None]\n        potentialplanets = random.sample(list(existingplanets.values()),k=5)\n        if len(ownedplanets) > 0 :\n            idx =  index_best(ownedplanets, potentialplanets)\n            return potentialplanets[idx]\n        else:\n            return potentialplanets[0]\n\n    # body\n#    if planets is not None:\n#        owners = [p.owner for p in planets.values() if p.owner is not None]\n#    else:\n#        owners = []\n\n#    owned_planet_coords = set([p.xy for p in planets.values() if p.owner is not None])\n    newcoord_list = random.sample(allowed_coord_set(width, height), k=len(planet_names))\n\n    planets = {}\n    for i, planet_name in enumerate(planet_names[:num_planets]):\n        planets[planet_name] = Planet(planet_name, newcoord_list[i][0], newcoord_list[i][1])\n\n#    for i, (name, pl) in enumerate(self.players.items()):\n#        if pl not in owners or planets is None  :\n#            planet_name = planet_names[i]\n#            (xx,yy) = planet_away_from_planets(width, height, self.planets).xy\n#            self.planets[planet_name] = Planet(planet_name, xx, yy, 10, 40, pl)\n\n    return planets\n\n\ndef main():\n    import argparse\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument('-p', dest='port', help='port to run on', default=8080)\n    args = parser.parse_args()\n\n    port = int(args.port)\n\n    server = WSIServer(('', port), WSIHandler)\n\n    import requests\n    public_ip = requests.get('http://ip.42.pl/raw').text\n\n    print('http://%s:%s' % (public_ip, port))\n    server.serve_forever()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "visidata/apps/galcon/galcon.py",
    "content": "#!/usr/bin/env python3\n\n'Galactic Conquest for VisiData'\n\nimport sys\nimport math\nimport requests\nimport time\nimport getpass\nimport hashlib\nimport builtins\nimport random\n\nfrom visidata import *\n\noption('refresh_rate_s', 2.0, 'time to sleep between refreshes')\noption('disp_turn_done', '*', 'symbol to indicate player turn taken')\n\ntheme('disp_title', 'Galactic Conquest', 'title on map sheet')\ntheme('color_incomplete_deploy', 'red bold', 'color of unresolved deployments')\ntheme('color_dest_planet', 'underline', 'color of marked destination planet')\ntheme('color_empty_space', '20 blue', 'color of empty space')\ntheme('color_unowned_planet', 'white', 'color of unowned planet')\ntheme('disp_empty_space', '.', 'color of empty space')\ntheme('twinkle_rate', '200', 'neg twinkle')\ntheme('color_twinkle', 'cyan bold', 'color of twinkling star')\n\n\n@VisiData.api\ndef openhttp_galcon(vd, p):\n    vd.g_client = WSIClient(p.given)\n\n    vd._status = [\"'N' to generate new 'M'ap; Ctrl+S when ready to start\"]\n\n    vd.g_client.login()\n    return vd.g_client.Players\n\n\nclass GalconSheet(Sheet):\n    pass\n\nGalconSheet.addCommand('Alt+g', 'options-galcon', 'vd.push(g_client.GameOptions)', 'push game options')\nGalconSheet.addCommand('Alt+n', 'new-map', 'vd.status(g_client.get(\"/regen_map\")); g_client.Map.reload()', 'make New map')\nGalconSheet.addCommand('Alt+y', 'open-players', 'vd.push(g_client.Players)', 'push players sheet')\nGalconSheet.addCommand('Alt+p', 'open-planets', 'vd.push(g_client.Planets)', 'push planets sheet')\nGalconSheet.addCommand('Alt+m', 'open-map', 'vd.push(g_client.Map)', 'push map sheet')\nGalconSheet.addCommand('Alt+u', 'open-routes', 'vd.push(g_client.QueuedDeployments)', 'push unsent routes sheet')\nGalconSheet.addCommand('Alt+d', 'open-deployments', 'vd.push(g_client.HistoricalDeployments)', 'push historical deployments sheet')\nGalconSheet.addCommand('Alt+e', 'open-events', 'vd.push(g_client.Events)', 'push events sheet')\nGalconSheet.addCommand('Alt+r', 'open-scores', 'vd.push(SheetList(\"scores\", g_client.get(\"/scores\").json()))', 'push scores sheet')\nGalconSheet.addCommand('Ctrl+S', 'end-turn', 'g_client.submit_turn()', 'submit deployments and end turn')\nGalconSheet.addCommand('Alt+q', 'quit-game', 'g_client.player_quit(); vd.quit(s for s in vd.sheets if isinstance(s, GalconSheet))', 'quit the game (with confirm)')\n\n\nclass WSIClient:\n    def __init__(self, url):\n        self.sessionid = None\n        self.server_url = url\n\n        self.Players = PlayersSheet('players')\n        self.Planets = PlanetsSheet('planets')\n        self.QueuedDeployments = QueuedDeploymentsSheet('queued_deployments', rows=[])\n        self.Events = EventsSheet('events')\n        self.Map = MapSheet('map')\n        self.HistoricalDeployments = HistoricalDeploymentsSheet('deployments')\n        self.GameOptions = GameOptionsSheet('game_options')\n\n        vd.rightStatus = self.rightStatus\n        self.gamestate = {}\n        self.refresh = False\n\n    def submit_turn(self):\n        if self.current_turn > 0:\n            qd = self.QueuedDeployments\n            for i, depl in enumerate(qd.rows):\n                if depl.result:\n                    continue\n                try:\n                    r = AttrDict(self.get('/deploy', **depl).json())\n                    qd.rows[i] = r\n                except Exception as e:\n                    qd.rows[i].result = str(e)\n\n            status(self.get('/end_turn').text)\n        else:\n            status(self.get(\"/ready\").text)\n\n    @property\n    def current_turn(self):\n        if not self.gamestate:\n            self.refresh = True\n            vd.g_client.refresh_everything()\n\n        return self.gamestate.get('current_turn')\n\n    def rightStatus(self, sheet):\n        max_turn = self.gamestate.get('num_turns')\n        turn_num = self.current_turn\n\n        rstatus = ''\n        if turn_num:\n            rstatus += 'Turn %s/%s:' % (turn_num, max_turn)\n\n        for pl in self.Players.rows:\n            name = pl.name\n            if pl.ready:\n                name += options.disp_turn_done\n            if pl.name == self.username:\n                fmtstr = ' [%s]'\n            else:\n                fmtstr = ' %s'\n            rstatus += fmtstr % name\n\n        return rstatus\n\n    def login(self):  # before curses init\n        self.username = builtins.input('player name: ')\n        password = getpass.getpass('password: ')\n\n        data = { 'username': self.username, 'password': hashlib.md5(password.encode('utf-8')).hexdigest() }\n\n        r = requests.post(self.server_url + '/auth', data=data)\n\n        if r.status_code == 200:\n            self.sessionid = r.text\n        else:\n            error('[login error %s] %s' % (r.status_code, r.text))\n\n        try:\n            status(self.get('/join').text)\n        except Exception as e:\n            print(str(e))\n\n    def get(self, path, **kwargs):\n        if not self.sessionid:\n            fail('not logged in')\n\n        kwargs['session'] = self.sessionid\n\n        r = requests.get(self.server_url + path, params=kwargs)\n\n        if r.status_code != 200:\n            fail(r.text)\n\n        return r\n\n    def player_quit(self):\n        yn = input('Are you sure you want to leave the game? (y/N) ')\n        if yn[:1].upper() == 'Y':\n            status(self.get('/player_quit').text)\n        else:\n            status('Whew! That was close.')\n\n    def add_deployment(self, sources, dest, nships):\n        ndeployments = 0\n        for src in sources:\n            r = self.get('/validate_deploy', launch_planet_name=src.name, dest_planet_name=dest.name, nships_requested=nships)\n            if r.status_code != 200:\n                status(r.text)\n            else:\n                d = AttrDict(r.json())\n                d.result = None\n                self.QueuedDeployments.addRow(d)\n                ndeployments += 1\n                src.nships -= d.nships_requested  # keep track for the player\n        status('Queued %s deployments' % ndeployments)\n\n    @asyncthread\n    def refresh_everything(self):\n        while True:\n            if self.refresh:\n                self.Players.reload()  # to see who has taken their turn\n\n                prev_turn = self.gamestate.get('current_turn', 0)\n                self.gamestate = self.get('/gamestate').json()\n\n                current_turn = self.gamestate.get('current_turn', 0)\n                if current_turn != prev_turn:\n                    self.Planets.reload()\n                    self.Events.reload()\n                    self.Map.reload()\n                    self.HistoricalDeployments.reload()\n\n                    if current_turn > self.gamestate.get('num_turns'):\n\n                        scores = self.get(\"/scores\").json()\n                        status('Game over. %s is the winner!' % scores[0]['name'])\n                        vd.push(SheetList(\"scores\", scores))\n\n                    elif current_turn > 0:\n                        vd.push(self.Events)\n                        status('Turn %s started' % current_turn)\n\n            time.sleep(options.refresh_rate_s)\n\n\nclass PlayersSheet(GalconSheet):\n    columns = [\n        ColumnAttr('name'),\n        ColumnAttr('ready'),\n    ]\n    colorizers = [\n        RowColorizer(8, None, lambda s,c,r,v: r and r.color)\n    ]\n\n    def loader(self):\n        self.rows = []\n        for r in vd.g_client.get('/players').json():\n            self.addRow(AttrDict(r))\n\n        self.rows.sort(key=lambda row: row.name)\n\n    def get_player_color(self, playername):\n        for plrow in self.rows:\n            if plrow.name == playername:\n                return plrow.color\n        return 'color_unowned_planet'\n\n\ndef distance_turns(pl1, pl2):\n    if pl1 and pl2:\n        return max(int(math.sqrt((pl1.y-pl2.y)**2 + (pl1.x-pl2.x)**2)/2 + 0.5), 1)\n\n\nclass PlanetsSheet(GalconSheet):\n    columns = [\n        ColumnAttr('name'),\n        ColumnAttr('prod', type=int),\n        ColumnAttr('killpct', type=int, fmtstr='%s%%'),\n        ColumnAttr('ownername'),\n        ColumnAttr('nships', type=int),\n        Column('turns_to_marked', type=int, getter=lambda col,row: distance_turns(row, col.sheet.marked_planet)),\n        ColumnAttr('x', type=int, width=4),\n        ColumnAttr('y', type=int, width=4),\n    ]\n\n    colorizers = [\n        RowColorizer(5, None, lambda sheet,col,row,value: row and vd.g_client.Players.get_player_color(row.ownername)),\n        RowColorizer(5, 'color_dest_planet', lambda sheet,c,row,v: row is sheet.marked_planet),\n    ]\n    marked_planet = None\n\n    def reload(self):\n        # name, x, y, prod, killpct, owner.name, nships\n        self.rows = []\n        for planetobj in vd.g_client.get('/planets').json():\n                self.addRow(AttrDict(planetobj))\n        self.rows.sort(key=lambda row: row.name)\n\nPlanetsSheet.addCommand('Enter', 'dive-planet', 'vd.push(g_client.Map); g_client.Map.cursorRowIndex = cursorRow.y; g_client.Map.cursorColIndex = cursorRow.x', 'go to this planet on the map')\nPlanetsSheet.addCommand('m', 'mark-planet', 'sheet.marked_planet = cursorRow', 'mark current planet as destination')\nPlanetsSheet.addCommand('f', 'deploy-planet', 'g_client.add_deployment([cursorRow], marked_planet, int(input(\"# ships: \", value=cursorRow.nships)))', 'deploy N ships from current planet to marked planet')\nPlanetsSheet.addCommand('gf', 'deploy-planets-selected', 'g_client.add_deployment(selectedRows, marked_planet, int(input(\"# ships: \")))', 'deploy N ships from each selected planet to marked planet')\n\n\nclass QueuedDeploymentsSheet(GalconSheet):\n    columns = [\n        ColumnItem('src_turn', 'launch_turn', type=int),\n        ColumnItem('dest_turn', 'dest_turn', type=int),\n        ColumnItem('src', 'launch_planet_name'),\n        ColumnItem('dest', 'dest_planet_name'),\n        ColumnItem('nrequested', 'nships_requested', type=int),\n        ColumnItem('ndeployed', 'nships_deployed', type=int),\n        ColumnItem('result', 'result'),\n    ]\n    colorizers = [\n            CellColorizer(5, 'red bold', lambda s,c,r,v: c and s.colorIncomplete(c,r,v))\n    ]\n\n    def colorIncomplete(self, col, row, value):\n        if row and col.name == 'ndeployed':\n            if row.result and row.nships_deployed != row.nships_requested:\n                return 'red bold'\n\n    def reload(self):\n        self.rows = []\n\n\nclass HistoricalDeploymentsSheet(GalconSheet):\n    columns = [\n        ColumnItem('player', 'launch_player_name'),\n        ColumnItem('src_turn', 'launch_turn', type=int),\n        ColumnItem('dest_turn', 'dest_turn', type=int),\n        ColumnItem('src', 'launch_planet_name'),\n        ColumnItem('dest', 'dest_planet_name'),\n        ColumnItem('nships', 'nships_deployed', type=int),\n        ColumnItem('killpct', 'killpct', type=int, fmtstr='%s%%'),\n    ]\n    colorizers = [\n        RowColorizer(9, None, lambda s,c,r,v: r and vd.g_client.Players.get_player_color(r['launch_player_name']))\n    ]\n\n    @asyncthread\n    def reload(self):\n        self.rows = []\n        for r in vd.g_client.get('/deployments').json():\n            self.addRow(r)\n\n\nclass EventsSheet(GalconSheet):\n    columns = [\n        ColumnItem('turn', 'turn', type=int),\n        ColumnItem('event', 'event', width=80),\n    ]\n\n    @asyncthread\n    def reload(self):\n        self.rows = []\n        for row in vd.g_client.get('/events').json():\n            self.addRow(row)\n\n        # find first event for the current turn and put the toprow there\n        for i, (turn, _) in enumerate(self.rows):\n            if turn == vd.g_client.current_turn:\n                self.topRowIndex = index\n                self.cursorRowIndex = index\n                break\n\ndef CellColor(prec, color, func):\n    return CellColorizer(prec, color, lambda s,c,r,v,f=func: r and c and f(s,c,r,v))\n\n\nclass MapSheet(GalconSheet):\n    fieldToShow = [ 'name', 'prod', 'killpct', 'nships' ]\n\n    colorizers = [\n        CellColor(9, None, lambda s,c,r,v: vd.g_client.Players.get_player_color(r[c.x].ownername) if r[c.x] else None),\n        CellColor(5, 'color_dest_planet', lambda s,c,r,v: r[c.x] and r[c.x] is vd.g_client.Planets.marked_planet),\n        CellColor(2, None, lambda s,c,r,v: s.colorSpace(c,r,v)),\n    ]\n\n    @property\n    def title(self):\n        return ''.join(c.name for c in columns)\n\n    @title.setter\n    def title(self, value):\n        for i in range(self.map_w):\n            self.columns[i].name = value[i:i+1]\n\n    def colorSpace(sheet,col,row,value):\n        if row and col and row[col.x] is None:\n            if row is not sheet.cursorRow:\n                r = options.color_empty_space\n                if random.randrange(0, int(options.twinkle_rate)) == 0:\n                    r = 'cyan bold'\n                return r\n\n    def cycle_info(self):\n        self.fieldToShow = self.fieldToShow[1:] + [self.fieldToShow[0]]\n        status('showing \"%s\"' % self.fieldToShow[0])\n\n    def reload(self):\n        vd.g_client.Planets.reload()\n\n        # set columns on every reload, to use current width/height\n        self.map_w = vd.g_client.gamestate['map_width']\n        self.map_h = vd.g_client.gamestate['map_height']\n\n        self.columns = []\n        for x in range(self.map_w):\n            c = Column(' ', width=3, x=x, getter=lambda col,row: getattr(row[col.x], col.sheet.fieldToShow[0]) or '?' if row[col.x] else options.disp_empty_space)\n            self.addColumn(c)\n        self.title = options.disp_title\n\n        self.rows = []\n        for y in range(self.map_h):\n            current_row = []\n            for x in range(self.map_w):\n                current_row.append(None)\n            self.addRow(current_row)\n\n        for planet in vd.g_client.Planets.rows:\n            self.rows[planet.y][planet.x] = planet\n\n        # so the order can't be changed\n        self.columns = tuple(self.columns)\n        self.rows = tuple(self.rows)\n\n\nMapSheet.addCommand('m', 'mark-planet', 'g_client.Planets.marked_planet = cursorRow[cursorCol.x]', 'mark current planet as destination')\nMapSheet.addCommand('f', 'deploy-planet', 'g_client.add_deployment([cursorRow[cursorCol.x]], g_client.Planets.marked_planet, int(input(\"# ships: \", value=cursorRow[cursorCol.x].nships)))', 'deploy N ships from current planet to marked planet')\nMapSheet.addCommand('v', 'cycle-info', 'cycle_info()', 'cycle the information displayed')\n\n\nclass GameOptionsSheet(GalconSheet):\n    columns = [\n        ColumnItem('option', 0),\n        ColumnItem('value', 1),\n    ]\n\n    def reload(self):\n        self.rows = []\n        for r in vd.g_client.get('/options').json().items():\n            self.addRow(r)\n\nPlanetsSheet.class_options.disp_column_sep = ''\n#PlanetsSheet.class_options.color_current_row = 'reverse white'\n\nGameOptionsSheet.addCommand('e', 'edit-option', 'status(g_client.get(\"/set_option\", option=cursorRow[0], value=editCell(1))); reload()', 'edit game option')\n"
  },
  {
    "path": "visidata/apps/galcon/requirements.txt",
    "content": "requests\nvisidata>=2\n"
  },
  {
    "path": "visidata/apps/galcon/setup.py",
    "content": "#!/usr/bin/env python3\n\nfrom setuptools import setup\n\n__version__ = '1.14'\n\nsetup(name='visidata-galcon',\n      version=__version__,\n      install_requires=['visidata@git+https://github.com/saulpw/visidata.git@develop', 'requests'],\n      description='Galactic Conquest in VisiData',\n      author='Saul Pwanson',\n      author_email='vdgalcon@saul.pw',\n      url='http://visidata.org/plus/galcon',\n      download_url='https://visidata.org/plus/galcon.py',\n      scripts=['galcon.py', 'galcon-server.py'],\n      classifiers=[\n          'Development Status :: 3 - Alpha',\n          'Environment :: Console',\n          'Environment :: Console :: Curses',\n          'Intended Audience :: Developers',\n          'Operating System :: OS Independent',\n          'Programming Language :: Python :: 3',\n          'Topic :: Office/Business :: Financial :: Spreadsheet',\n      ],\n      keywords=('console game textpunk visidata galactic conquest galcon')\n      )\n"
  },
  {
    "path": "visidata/apps/vdsql/.gitignore",
    "content": "*/__pycache__\n*.egg-info\n.venv\n"
  },
  {
    "path": "visidata/apps/vdsql/CHANGELOG.md",
    "content": "# vdsql version history\n\n# 0.2 (2022-10-12)\n\nAdded and tested support for these backends:\n\n  - bigquery\n  - clickhouse\n  - mysql\n  - postgres\n  - duckdb with `.ddb` extension\n  - sqlite with `.sqlite3` extension\n  - snowflake support (with unreleased Ibis)\n\nAdded options:\n- `options.sql_always_count` (default: False), which determines whether to always query\n- [freq sheet] histogram available, but by default disabled\n   - enable by setting `options.disp_histogram` and `options.disp_histolen`\n\n- set `options.clean_names` to `True` for all ibis sheets\n- set `options.load_lazy` to `True` for all ibis sheets\n- set `regex_flags` to not ignorecase\n\n- [columns sheet] add `ibis_type`\n- [load] provide helpful message if `ibis-framework` dependencies are not installed\n\nAdditional commands added:\n- `exec-sql` command\n- `dup-limit` (keybinding `z\"`) and `dup-nolimit` (keybinding `gz\"`)\n\n- sidebar keybindings now `b`\n    - `zb` to choose sidebar style\n    - `b` to toggle instead of cycle\n    - `gb` to open sidebar contents in new sheet\n\nSince the last release, most other VisiData commands and features have been implemented to a first degree, to the point that it's easier to talk about what's not implemented, than what is.\n\nVisiData features that don't currently work in vdsql:\n - progress (not possible in many backends)\n - rowcount (disabled by default; is expensive or not possible on some backends)\n - task cancellation\n\nThese following commands should be disabled and fail with a warning, instead of erroneously working on the sheet (using only limited data, for example).\n\nNot implemented commands (but probably will be soon/someday):\n  - regex select\n  - describe-sheet\n  - melt\n  - freq-summary\n  - addcol-capture\n  - addcol-incr and addcol-incr-step\n  - addcol-window\n  - capture-col\n  - contract-col\n  - expand-col-depth - expand-cols - expand-cols-depth\n  - random-rows\n  - select-exact-cell - select-exact-row\n  - select-rows\n  - unselect-expr - select-expr\n  - cache-col - cache-cols\n  - dive-selected-cells\n  - dup-rows - dup-rows-deep - dup-selected-deep\n  - data modification commands (pending Ibis support)\n    - adding rows or blank columns\n    - deleting rows (use select and dup with `\"` instead)\n    - modifying values in place (add new columns and hide old columns instead)\n\nThese commands will probably never be implemented:\n  - transpose\n  - less common select commands like select-after, select-error\n\nOf course you can still do any of these commands, by first using the VisiData command `freeze-sheet` or `g'` to copy the sheet's values into a new VisiData (i.e. non-vdsql) sheet.\n\n## Bugfixes\n\n- fix key columns on sheets with start=0\n\n# 0.1.1 (2022-08-08)\n\n- limit install of ibis-framework dependencies to sqlite and duckdb\n\n# 0.1 (2022-08-08)\n\n- load data in VisiData for sqlite and duckdb with `vdsql` filetype\n- sidebar cycles between SQL, Ibis expression, Substrait, and none\n- commands implemented with Ibis expressions\n    - frequency table\n    - filter rows by single value\n    - unfurl-col -> unnest\n    - hide column\n    - set column type\n    - rename col\n    - add aggregator (name must be function on Ibis column expr; e.g. use `mean`, `avg` is not available)\n    - aggregate immediately\n    - sort\n    - select-equal\n    - stoggle-rows\n    - join\n\n\n"
  },
  {
    "path": "visidata/apps/vdsql/MANIFEST.in",
    "content": "include README.md\ninclude LICENSE-apache2.txt\ninclude requirements.txt\n"
  },
  {
    "path": "visidata/apps/vdsql/README.md",
    "content": "# vdsql: [VisiData](https://visidata.org) for Databases\n\nA VisiData interface for databases.\n\nPowered by [Ibis](https://ibis-project.org).\n\n## Features\n\n- query data in VisiData from any supported backend\n- compose complex queries using VisiData commands instead of writing SQL\n- output resulting query in SQL, Substrait, or Python\n\n## Requirements\n\n- Python 3.10+\n- VisiData 3.0+\n- Ibis 12.0+\n\n## Installation\n\n### Install from pip\n\nThis installs both:\n  - the usual `vd` with the vdsql plugin available (use `-f vdsql` to use Ibis instead of builtin loaders),\n  - the `vdsql` script that acts identically to `vd` but will use Ibis instead of VisiData's builtin loader.\n\n    pip install vdsql\n\n### Install manually (cutting edge development)\n\n    git clone git@github.com:saulpw/visidata.git\n    cd visidata/visidata/apps/vdsql\n    pip3 install .\n\n### Install Ibis backends\n\nTo minimize dependencies, only the sqlite backend is included by default.\n[Install other backends for Ibis](https://ibis-project.org/backends/) directly, and they will be supported automatically:\n\n    pip install 'ibis-framework[postgres]'\n\n## Usage\n\n### Connecting to databases\n\n    vdsql <file_or_url>\n    vd -f ibis <file_or_url>\n\nwhere `file_or_url` is any connection string supported by `ibis.connect()` or any of the filetypes and options that VisiData itself supports.\n\n#### Connection examples\n\n    vdsql foo.sqlite          # or .sqlite3, .db\n    vdsql foo.duckdb          # or .ddb\n    vdsql mysql://...\n    vdsql postgres://...\n    vdsql clickhouse://play:clickhouse@play.clickhouse.com/?secure=1\n    vdsql bigquery:///bigquery-public-data\n\n### Commands\n\nA decent amount of work has gone into making `vdsql` work just like VisiData.\n\nYou can learn about VisiData starting with the [Intro to VisiData Tutorial](https://jsvine.github.io/intro-to-visidata/) and the [VisiData documentation](https://visidata.org/docs).\n\nThere are a few differences, however:\n\n- `\"` (dup-sheet) runs a new base query, including added columns, filtering for the current selection, and applying the current sort order.\n- `z\"` creates a new sheet with a different row limit.\n- `gz\"` removes the row limit entirely (fetch all rows).\n- `'` casts the current column to its given type, persisting into future queries (with `\"`).\n- `g'` freezes the current set of loaded rows into a plain VisiData sheet, where all VisiData commands are available.\n\nSome VisiData commands aren't implemented using the database engine.\nThe base VisiData commands can only use the loaded rows (500 by default), and this might be misleading, so most not-implemented commands are disabled.\nIf you want to use them anyway, knowing the dataset is incomplete, use `g'` to freeze the sheet first.\n\n### Sidebar\n\n`vdsql` uses the VisiData sidebar to show the SQL query for the current view.\n\n- `b` to toggle the sidebar on/off\n- `zb` to choose a sidebar option (pending SQL, base SQL, etc.)\n- `gb` to open the sidebar as its own sheet\n\nIn this way you can compose a SQL expression using VisiData commands, open the SQL sidebar, and save the resulting query to a file (or copy it into your system clipboard buffer).\n\n### Options\n\n- `ibis_limit` (default: `500`) - max number of rows to fetch per query\n- `postgres_schema` (default: `''`, public only) - which PostgreSQL schemas to show (space-separated list; use `*` for all non-system schemas)\n- `sql_always_count` (default: `False`) - include total row count in every query\n- `disp_ibis_sidebar` (default: `pending_sql`) - which sidebar property to display\n\n## Supported Backends\n\n### Confirmed\n\n- SQLite\n- MySQL\n- PostgreSQL\n- DuckDB\n- ClickHouse\n- Google BigQuery\n- Snowflake\n\n### Backend-specific notes\n\n#### PostgreSQL\n\nBy default, only tables from the `public` schema are shown.\n\nTo show tables from specific schemas:\n\n    vdsql --postgres-schema='myschema otherschema' postgres://...\n\nTo show tables from all non-system schemas:\n\n    vdsql --postgres-schema='*' postgres://...\n\nNote: quote or escape `*` on the command line to prevent shell glob expansion.\n\n#### MySQL\n\n- Requires `libmysqlclient-dev` (on Debian/Ubuntu)\n- If you get a timezone warning: `mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql`\n\n### Other backends supported by Ibis\n\nThese backends are supported by Ibis and should work, but haven't specifically been tested with vdsql.\nIf you have problems connecting, please [file an issue](https://github.com/saulpw/visidata/issues/new).\n\n- Apache Impala\n- Datafusion\n- Dask\n- PySpark\n- HeavyAI\n\n# License\n\n`vdsql` is licensed under the Apache 2.0 license.\n\nShare and enjoy!\n"
  },
  {
    "path": "visidata/apps/vdsql/__about__.py",
    "content": "__all__ = '__title__ __author__ __version__ __description__ __license__ __copyright__'.split()\n\n__title__ = 'vdsql'\n__author__ = 'Saul Pwanson <code@saul.pw>'\n__version__ = '0.3dev'\n__description__ = 'VisiData for database queries'\n__license__ = 'Apache License, Version 2.0'\n__copyright__ = 'Copyright 2022 ' + __author__\n"
  },
  {
    "path": "visidata/apps/vdsql/__init__.py",
    "content": "from .__about__ import *\nfrom ._ibis import *\nfrom .bigquery import *\nfrom .snowflake import *\nfrom .clickhouse import *\n"
  },
  {
    "path": "visidata/apps/vdsql/__main__.py",
    "content": "#!/usr/bin/env python3\n\ndef main():\n    import ibis\n    import visidata\n    from visidata import main, vd\n\n    from . import __version__\n    visidata.__version_info__ = f'vdsql {__version__}'\n\n    for ext in \"db ddb duckdb sqlite sqlite3\".split():\n        setattr(vd, f\"open_{ext}\", vd.open_vdsql)\n\n    for entry_point in ibis.util.backend_entry_points():\n        if entry_point.name in ['bigquery', 'clickhouse', 'snowflake']:\n            # these have their own custom openurl_ funcs already installed\n            continue\n\n        attrname = f\"openurl_{entry_point.name}\"\n        # when running vdsql directly, override visidata builtin loader with vdsql loader #1929\n        setattr(vd, attrname, vd.open_vdsql)\n\n    main.vd_cli()\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "visidata/apps/vdsql/_ibis.py",
    "content": "from copy import copy\nimport threading\nimport functools\nimport operator\nimport re\n\nfrom contextlib import contextmanager\nfrom visidata import VisiData, Sheet, IndexSheet, vd, date, anytype, vlen, clipdraw, colors, stacktrace, PyobjSheet, BaseSheet, ExpectedException\nfrom visidata import ItemColumn, AttrColumn, Column, TextSheet, asyncthread, wrapply, ColumnsSheet, UNLOADED, ExprColumn, undoAttrCopyFunc, Path\n\nvd.option('disp_ibis_sidebar', 'pending_sql', 'which sidebar property to display')\nvd.option('sql_always_count', False, 'whether to include count of total number of results')\nvd.option('ibis_limit', 500, 'max number of rows to get in query')\n\n\ndef vdtype_to_ibis_type(t):\n    from ibis.expr import datatypes as dt\n    return {\n        int: dt.int,\n        float: dt.float,\n        date: dt.date,\n        str: dt.string,\n    }.get(t)\n\n\ndef dtype_to_vdtype(dtype):\n    from ibis.expr import datatypes as dt\n\n    try:\n        if isinstance(dtype, dt.Decimal):\n            if dtype.scale == 0:\n                return int\n            else:\n                return float\n        if isinstance(dtype, dt.Integer):\n            return int\n        if isinstance(dtype, dt.Floating):\n            return float\n        if isinstance(dtype, (dt.Date, dt.Timestamp)):\n            return date\n    except TypeError:\n        # For categoricals and other pandas-defined dtypes\n        pass\n    return anytype\n\n\n@VisiData.api\ndef configure_ibis(vd):\n    import ibis\n\n    vd.aggregator('collect', ibis.expr.types.AnyValue.collect, 'collect a list of values')\n    ibis.options.verbose_log = vd.status\n    if vd.options.debug:\n        ibis.options.verbose = True\n\n    if 'ibis_type' not in set(c.expr for c in ColumnsSheet.columns):\n        ColumnsSheet.columns += [\n            AttrColumn('ibis_type', type=str)\n        ]\n\n\n@VisiData.api\ndef open_vdsql(vd, p, filetype=None):\n    import ibis\n\n    vd.configure_ibis()\n\n    if not p.is_url() and p.ext in ('ddb', 'duckdb'):\n        p = Path(f'duckdb://{p}')\n    elif not p.is_url() and p.ext in ('sqlite', 'sqlite3'):\n        p = Path(f'sqlite://{p}')\n\n    return IbisTableIndexSheet(p.base_stem, source=p, filetype=None, database_name=None,\n                               ibis_conpool=IbisConnectionPool(p), sheet_type=IbisTableSheet)\n\n\nvd.open_ibis = vd.open_vdsql\nvd.openurl_sqlite = vd.open_vdsql\n\n\nclass IbisConnectionPool:\n    def __init__(self, source, pool=None, total=0):\n        self.source = source\n        self._local = threading.local()\n        self._local.connection = None\n\n    def __copy__(self):\n        return IbisConnectionPool(self.source)\n\n    @contextmanager\n    def get_conn(self):\n        import ibis\n        if not hasattr(self._local, 'connection') or not self._local.connection:\n            self._local.connection = ibis.connect(str(self.source))\n        yield self._local.connection\n\n\nclass IbisTableIndexSheet(IndexSheet):\n    # sheet_type = IbisTableSheet  # set below\n\n    @property\n    def con(self):\n        return self.ibis_conpool.get_conn()\n\n    def rawSql(self, qstr):\n        with self.con as con:\n            return IbisTableSheet('rawsql',\n                                  ibis_conpool=self.ibis_conpool,\n                                  ibis_source=qstr,\n                                  source=qstr,\n                                  query=con.sql(qstr))\n\n    def iterload(self):\n        with self.con as con:\n            if self.database_name:\n                con.set_database(self.database_name)\n\n            # use the actual count instead of the returned limit\n            nrows_col = self.column('rows')\n            nrows_col.expr = 'countRows'\n            nrows_col.width += 3\n\n            schemas = self.options.postgres_schema.split()\n\n            dbnames = [dbname\n                       for dbname in con.list_databases()\n                       if '*' in schemas or dbname in schemas]\n\n            for dbname in dbnames or [None]:\n                for tblname in con.list_tables(database=dbname):\n                    vs = self.sheet_type(tblname,\n                        ibis_source=self.source,\n                        ibis_filetype=self.filetype,\n                        ibis_conpool=self.ibis_conpool,\n                        database_name=self.database_name,\n                        table_name=tblname,\n                        source=self.source,\n                        query=None)\n                    vs.dbname = dbname\n                    yield vs\n\n\nclass IbisColumn(ItemColumn):\n    @property\n    def ibis_type(self):\n        return self.sheet.query[self.ibis_name].type()\n\n    @asyncthread\n    def memo_aggregate(self, agg, rows):\n        'Show aggregated value in status, and add ibis expr to memory for use later.'\n\n        aggexpr = self.ibis_aggr(agg.name)  # ignore rows, do over whole query\n\n        with self.sheet.con as con:\n            aggval = con.execute(aggexpr)\n\n        typedval = wrapply(agg.type or self.type, aggval)\n        dispval = self.format(typedval)\n        k = self.name+'_'+agg.name\n        vd.status(f'{k}={dispval}')\n        vd.memory[k] = aggval\n        # store aggexpr somewhere to use in later subquery\n\n    def expand(self, rows):\n        return self.expand_struct(rows)\n\n    def expand_struct(self, rows):\n        oldexpr = self.sheet.ibis_current_expr\n        struct_field = self.get_ibis_col(oldexpr)\n#        if struct_field is not StructType:\n#            vd.fail('vdsql can only expand Struct columns')\n\n        struct_fields = [struct_field[name] for name in struct_field.names]\n        expandedCols = super().expand(rows)   # this must go after ibis_current_expr, because it alters ibis_current_expr\n        fields = []\n        for ibiscol, expcol in zip(struct_fields, expandedCols):\n            fields.append(ibiscol.name(expcol.name))\n    #    self.sheet.query = oldexpr.drop([struct_field.get_name()]).mutate(fields)\n        self.sheet.query = oldexpr.mutate(fields)\n        return expandedCols\n\nIbisTableIndexSheet.columns = IbisTableIndexSheet.columns[:1] + [AttrColumn('dbname')] + IbisTableIndexSheet.columns[1:]\n\n\nclass LazyIbisColMap:\n    def __init__(self, sheet, q):\n        self._sheet = sheet\n        self._query = q\n        self._map = {col.name: col for col in sheet.columns}\n\n    def __getitem__(self, k):\n        col = self._map[k]\n        return col.get_ibis_col(self._query)\n\n\nclass IbisTableSheet(Sheet):\n    @property\n    def con(self):\n        return self.ibis_conpool.get_conn()\n\n    @property\n    def help_sidebars(self):\n        'Return list of available sidebars: (text, title) callables.'\n        sidebars = []\n        # Add base sidebars from parent class\n        sidebars.extend(super().help_sidebars)\n\n        # Add vdsql-specific SQL sidebars\n        sidebar_options = [\n            ('pending_sql', 'SQL (pending)'),\n            ('base_sql', 'SQL (base)'),\n            ('str_current_expr', 'Ibis expr (current)'),\n            ('str_pending_expr', 'Ibis expr (pending)'),\n        ]\n\n        for attr_name, title in sidebar_options:\n            try:\n                # Test if the attribute can be accessed\n                getattr(self, attr_name)\n                # Add a lambda that captures both attr_name and title\n                sidebars.append(lambda a=attr_name, t=title: (getattr(self, a), t))\n            except Exception:\n                if self.options.debug:\n                    vd.exceptionCaught()\n\n        # Add curcol_sql if it's available\n        try:\n            if self.curcol_sql:\n                sidebars.append(lambda: (self.curcol_sql, 'Column SQL'))\n        except Exception:\n            pass\n\n        return sidebars\n\n    def choose_sidebar(self):\n        sidebars = ['base_sql', 'pending_sql', 'ibis_current_expr', 'curcol_sql', 'pending_expr']\n        opts = []\n        for s in sidebars:\n            try:\n                opts.append({'key': s, 'value':getattr(self, s)})\n            except Exception as e:\n                if self.options.debug:\n                    vd.exceptionCaught()\n\n        vd.options.disp_ibis_sidebar = vd.chooseOne(opts)\n\n    @property\n    def curcol_sql(self):\n        expr = self.cursorCol.get_ibis_col(self.ibis_current_expr)\n        if expr is not None:\n            return self.ibis_expr_to_sql(expr, fragment=True)\n\n    def ibis_expr_to_sql(self, expr, fragment=False):\n        with self.con as con:\n            s = con.compile(expr, pretty=True)\n        return s\n\n    @property\n    def sidebar(self) -> str:\n        sbtype = self.options.disp_ibis_sidebar\n        if sbtype:\n            txt = str(getattr(self, sbtype, ''))\n            if txt:\n                return f'# {sbtype}\\n'+txt\n\n    @property\n    def ibis_locals(self):\n        return LazyIbisColMap(self, self.query)\n\n    def select_row(self, row):\n        k = self.rowkey(row) or vd.fail('need key column to select individual rows')\n        super().selectRow(row)\n        self.ibis_selection.append(self.matchRowKeyExpr(row))\n\n    def stoggle_row(self, row):\n        vd.fail('cannot toggle selection of individual row in vdsql')\n\n    def unselect_row(self, row):\n        super().unselectRow(row)\n        self.ibis_selection = [ self.ibis_filter & ~self.matchRowKeyExpr(row) ]\n\n    def matchRowKeyExpr(self, row):\n        import ibis\n        k = self.rowkey(row) or vd.fail('need key column to select individual rows')\n\n        return functools.reduce(operator.and_, [\n            c.get_ibis_col(self.query, typed=True) == k[i]\n                for i, c in enumerate(self.keyCols)\n        ])\n\n    @property\n    def ibis_current_expr(self):\n        return self.get_current_expr(typed=False)\n\n    @property\n    def str_current_expr(self):\n        return str(self.ibis_current_expr)\n\n    @property\n    def str_pending_expr(self):\n        return str(self.pending_expr)\n\n    def get_current_expr(self, typed=False):\n        q = self.query\n        extra_cols = {}\n        for c in self.visibleCols:\n            ibis_col = c.get_ibis_col(q, typed=typed)\n            if ibis_col is not None:\n                extra_cols[c.name] = ibis_col\n            else:\n                vd.warning(f'no column {c.name}')\n\n        if extra_cols:\n            q = q.mutate(**extra_cols)\n\n        return q\n\n    @property\n    def ibis_filter(self):\n        import ibis\n        selectors = [self.ibisCompileExpr(f, self.get_current_expr(typed=True)) for f in self.ibis_selection]\n        if not selectors:\n            return ibis.literal(True)\n        return functools.reduce(operator.or_, selectors)\n\n    @property\n    def pending_expr(self):\n        import ibis\n        q = self.get_current_expr(typed=True)\n        if self.ibis_selection:\n            q = q.filter(self.ibis_filter)\n\n        if self._ordering:\n            colorder = []\n            for col, rev in self._ordering:\n                ibiscol = col.get_ibis_col(q)  #1856\n                if rev:\n                    ibiscol = ibis.desc(ibiscol)\n                colorder.append(ibiscol)\n            q = q.order_by(colorder)\n\n        return q\n\n    def ibisCompileExpr(self, expr, q):\n        if isinstance(expr, str):\n            return eval(expr, vd.getGlobals(), LazyIbisColMap(self, q))\n        else:\n            return expr\n\n    def evalIbisExpr(self, expr):\n        return eval(expr, vd.getGlobals(), self.ibis_locals)\n\n    @property\n    def base_sql(self):\n        return self.sqlize(self.ibis_current_expr)\n\n    @property\n    def pending_sql(self):\n        return self.sqlize(self.pending_expr)\n\n    def sqlize(self, expr):\n        if vd.options.debug:\n            expr = self.withRowcount(expr)\n        return self.ibis_expr_to_sql(expr)\n\n    @property\n    def substrait(self):\n        from ibis_substrait.compiler.core import SubstraitCompiler\n        compiler = SubstraitCompiler()\n        return compiler.compile(self.ibis_current_expr)\n\n    def withRowcount(self, q):\n        if self.options.sql_always_count:\n            # return q.mutate(__n__=q.count())\n            return q.cross_join(q.aggregate(__n__=lambda t: t.count()))\n        return q\n\n    def beforeLoad(self):\n        self.options.disp_rstatus_fmt = self.options.disp_rstatus_fmt.replace('nRows', 'countRows')\n        self.options.disp_rstatus_fmt = self.options.disp_rstatus_fmt.replace('nSelectedRows', 'countSelectedRows')\n\n    def baseQuery(self, con):\n        'Return base table for {database_name}.{table_name}'\n        import ibis\n        tbl = con.table(self.table_name)\n        return ibis.table(tbl.schema(), name=self.fqtblname(con))\n\n    def fqtblname(self, con) -> str:\n        'Return fully-qualified table name including database/schema, or whatever connection needs to identify this table.'\n        if hasattr(con, '_fully_qualified_name'):\n            return con._fully_qualified_name(self.table_name, self.database_name)\n        return self.table_name\n\n    def iterload(self):\n        with self.con as con:\n            if self.query is None:\n                self.query = self.baseQuery(con)\n\n            self.reloadColumns(self.query)  # columns based on query without metadata\n            self.query_result = con.execute(self.withRowcount(self.query),\n                                            limit=self.options.ibis_limit or None)\n\n            yield from self.query_result.itertuples()\n\n\n    def reloadColumns(self, expr, start=1):\n        oldkeycols = {c.name:c for c in self.keyCols}\n        self._nrows_col = -1\n\n        for i, (colname, dtype) in enumerate(expr.schema().items(), start=start):\n            keycol=oldkeycols.get(colname, Column()).keycol\n            if i-start < self.nKeys:\n                keycol = i+1\n\n            if colname == '__n__':\n                self._nrows_col = i\n                continue\n\n            self.addColumn(IbisColumn(colname, i,\n                           type=dtype_to_vdtype(dtype),\n                           keycol=keycol,\n                           ibis_name=colname))\n\n    @property\n    def countSelectedRows(self):\n        return f'{self.nSelectedRows}+'\n\n    @property\n    def countRows(self):\n        if self.rows is UNLOADED:\n            return None\n        if not self.rows or self._nrows_col < 0:\n            return self.nRows\n        return self.rows[0][self._nrows_col]  # __n__\n\n    def groupBy(self, groupByCols):\n        from ibis import _\n        import ibis\n        from ibis.expr import datatypes as dt\n        aggr_cols = [groupByCols[0].ibis_col.count().name('count')]\n        for c in self.visibleCols:\n            aggr_cols.extend(c.ibis_aggrs)\n\n        q = self.ibis_current_expr\n        groupq = q.aggregate(aggr_cols, by=[c.ibis_col for c in groupByCols])\n        try:\n            win = ibis.window(order_by=ibis.NA)\n        except ibis.common.exceptions.IbisTypeError: # ibis bug: there is not yet a good workaround that covers all backends\n            win = ibis.window(order_by=None)\n        groupq = groupq.mutate(percent=_['count']*100 / _['count'].sum().over(win))\n\n        histolen = 40\n        histogram_char = self.options.disp_histogram\n        if histogram_char and len(aggr_cols) == 1:\n            groupq = groupq.mutate(maxcount=_['count'].max())\n            hval = ibis.literal(histogram_char, type=dt.string)\n\n            def _histogram(t):\n                return hval.repeat((histolen*t['count']/t.maxcount).cast(dt.int))\n\n            groupq = groupq.mutate(histogram=_histogram)\n\n        groupq = groupq.order_by(ibis.desc('count'))\n\n        return IbisFreqTable(self.name, *(col.name for col in groupByCols), 'freq',\n                             ibis_conpool=self.ibis_conpool,\n                             ibis_source=self.ibis_source,\n                             source=self,\n                             groupByCols=groupByCols,\n                             query=groupq,\n                             nKeys=len(groupByCols))\n\n    def unfurl_col(self, col):\n        vs = copy(self)\n        vs.names = [self.name, col.name, 'unfurled']\n        vs.query = self.ibis_current_expr.mutate(**{col.name:col.ibis_col.unnest()})\n        vs.cursorVisibleColIndex = self.cursorVisibleColIndex\n        return vs\n\n    def openJoin(self, others, jointype=''):\n        sheets = [self] + others\n\n        sheets[1:] or vd.fail(\"join requires more than 1 sheet\")\n\n        if jointype == 'append':\n            q = self.ibis_current_expr\n            for other in others:\n                q = q.union(other.ibis_current_expr)\n            return IbisTableSheet('&'.join(vs.name for vs in sheets), query=q, ibis_source=self.ibis_source, ibis_conpool=self.ibis_conpool)\n\n        for s in sheets:\n            s.keyCols or vd.fail(f'{s.name} has no key cols to join')\n\n        if jointype in ['extend', 'outer']:\n            jointype = 'left'\n        elif jointype in ['full']:\n            jointype = 'outer'\n#        elif jointype in ['inner']:\n#            jointype = 'inner'\n\n\n        q = self.ibis_current_expr\n        for other in others:\n            preds = [(a.ibis_col == b.ibis_col) for a, b in zip(self.keyCols, other.keyCols)]\n            # Try new API (ibis >= 9.0) with lname/rname, fall back to old API with suffixes\n            try:\n                q = q.join(other.ibis_current_expr, predicates=preds, how=jointype, lname='', rname='{name}_'+other.name)\n            except TypeError:\n                # Fall back to old API (ibis < 9.0)\n                q = q.join(other.ibis_current_expr, predicates=preds, how=jointype, suffixes=('', '_{name}_'+other.name))\n\n        return IbisTableSheet('+'.join(vs.name for vs in sheets), sources=sheets, query=q, ibis_source=self.ibis_source, ibis_conpool=self.ibis_conpool)\n\n\n@Column.property\ndef ibis_col(col):\n    return col.get_ibis_col(col.sheet.ibis_current_expr)\n\n\n@Column.api\ndef get_ibis_col(col, query:'ibis.Expr', typed=False) -> 'ibis.Expr':\n    'Return ibis.Expr for `col` within context of `query`, cast by VisiData column type if `typed`.'\n    import ibis.common.exceptions\n\n    r = None\n    if isinstance(col, ExprColumn):\n        r = col.sheet.evalIbisExpr(col.expr)\n    elif isinstance(col, vd.ExpandedColumn):\n        r = query[col.name]\n    elif not hasattr(col, 'ibis_name'):\n        return\n    else:\n        try:\n            r = query[col.ibis_name]\n        except (ibis.common.exceptions.IbisTypeError, AttributeError):\n            r = query[col.name]\n\n    if r is None:\n        return r\n\n    if typed:\n        import ibis.expr.datatypes as dt\n        if col.type is str: r = r.cast(dt.string)\n        if col.type is int: r = r.cast(dt.int)\n        if col.type is float: r = r.cast(dt.float)\n        if col.type is date:\n            if not isinstance(r.type(), (dt.Timestamp, dt.Date)):\n                r = r.cast(dt.date)\n\n    r = r.name(col.name)\n    return r\n\n\n@Column.property\ndef ibis_aggrs(col):\n    return [col.ibis_aggr(aggname) for aggname in (col.aggstr or '').split()]\n\n\n@Column.api\ndef ibis_aggr(col, aggname):\n    aggname = {\n        'avg': 'mean',\n        'median': 'approx_median',\n        'mode': 'notimpl',\n        'distinct': 'nunique',\n        'list': 'collect',\n        'stdev': 'std',\n#        'p99': 'quantile(0.99)',\n#        'q10': 'quantile([.1,.2,.3,.4,.5,.6,.7,.8,.9])',\n    }.get(aggname, aggname)\n\n    agg = getattr(col.ibis_col, aggname)\n    return agg().name(f'{aggname}_{col.name}')\n\n\nIbisTableSheet.init('ibis_selection', list, copy=False)\nIbisTableSheet.init('_sqlscr', lambda: None, copy=False)\nIbisTableSheet.init('query_result', lambda: None, copy=False)\nIbisTableSheet.init('ibis_conpool', lambda: None, copy=True)\n\n@IbisTableSheet.api\ndef stoggle_rows(sheet):\n    sheet.toggle(sheet.rows)\n    sheet.ibis_selection = [~sheet.ibis_filter]\n\n\n@IbisTableSheet.api\ndef clearSelected(sheet):\n    super(IbisTableSheet, sheet).clearSelected()\n    sheet.ibis_selection.clear()\n\n\n\n@IbisTableSheet.api\ndef addUndoSelection(sheet):\n    super(IbisTableSheet, sheet).addUndoSelection()\n    vd.addUndo(undoAttrCopyFunc([sheet], 'ibis_selection'))\n\n\n@IbisTableSheet.api\ndef select_equal_cell(sheet, col, typedval):\n    if sheet.isNullFunc()(typedval):\n        expr = col.ibis_col.isnull()\n    else:\n        q = sheet.get_current_expr(typed=True)\n        ibis_col = col.get_ibis_col(q, typed=True)\n        expr = (ibis_col == typedval)\n\n    sheet.ibis_selection.append(expr)\n    sheet.select(sheet.gatherBy(lambda r,c=col,v=typedval: c.getTypedValue(r) == v), progress=False)\n\n\n@IbisTableSheet.api\ndef select_col_regex(sheet, col, regex):\n    sheet.selectByIdx(vd.searchRegex(sheet, regex=regex, columns=\"cursorCol\"))\n    sheet.ibis_selection.append(col.get_ibis_col(col.sheet.query).re_search(regex))\n\n\n@IbisTableSheet.api\ndef select_expr(sheet, expr):\n    sheet.select(sheet.gatherBy(lambda r, sheet=sheet, expr=expr: sheet.evalExpr(expr, r)), progress=False)\n    sheet.ibis_selection.append(expr)\n\n\n@IbisTableSheet.api\ndef addcol_split(sheet, col, delim):\n    from ibis.expr import datatypes as dt\n    c = Column(col.name+'_split',\n               getter=lambda col,row: col.origCol.getDisplayValue(row).split(col.expr),\n               expr=delim,\n               origCol=col,\n               ibis_name=col.name+'_split')\n    sheet.query = sheet.query.mutate(**{c.name:col.get_ibis_col(sheet.query).cast(dt.string).split(delim)})\n    return c\n\n\n@IbisTableSheet.api\ndef addcol_subst(sheet, col, before='', after=''):\n    c = Column(col.name + \"_re\",\n               getter=lambda col,row,before=before,after=after: re.sub(before, after, col.origCol.getDisplayValue(row)),\n               origCol=col,\n               ibis_name=col.name + \"_re\")\n    sheet.query = sheet.query.mutate(**{c.name:col.get_ibis_col(sheet.query).re_replace(before, after)})\n    return c\n\n\n@IbisTableSheet.api\ndef addcol_cast(sheet, col):\n    # sheet.query and sheet.ibis_current_expr don't match\n    new_type = vdtype_to_ibis_type(col.type)\n    if new_type is None:\n        vd.warning(f\"no type for vd type {col.type}\")\n        return\n    expr = sheet.query[col.name].cast(new_type)\n    sheet.query = sheet.query.mutate(**{col.name: expr})\n    newcol = copy(col)\n    col.hide()\n    sheet.addColumnAtCursor(newcol)\n\n# disable not implemented commands\n\n@BaseSheet.api\ndef notimpl(sheet):\n    vd.fail(f\"{vd.activeCommand.longname} not implemented for {type(sheet).__name__}; copy to new non-ibis sheet with g'\")\n\n\ndml_cmds = '''addcol-bulk addcol-new add-row add-rows\ncopy-cell copy-cells copy-row copy-selected commit-sheet cut-cell cut-cells cut-row cut-selected delete-cell delete-cells delete-row delete-selected\nedit-cell paste-after paste-before paste-cell setcell-expr\nsetcol-clipboard setcol-expr setcol-fake setcol-fill setcol-format-enum setcol-formatter setcol-incr setcol-incr-step setcol-input setcol-iter setcol-subst setcol-subst-all\n'''.split()\n\nneverimpl_cmds = '''\nselect-after select-around-n select-before select-equal-row select-error stoggle-after stoggle-before stoggle-row unselect-after unselect-before select-cols-regex unselect-cols-regex transpose\n'''.split()\n\nnotimpl_cmds = '''\naddcol-capture addcol-incr addcol-incr-step addcol-window\ncontract-col expand-col-depth expand-cols expand-cols-depth melt melt-regex pivot random-rows\nselect-error-col select-exact-cell select-exact-row select-rows\ndescribe-sheet freq-summary\ncache-col cache-cols\ndive-selected-cells\ndup-rows dup-rows-deep dup-selected-deep\n'''.split()\n\nfor longname in list(notimpl_cmds) + list(neverimpl_cmds) + list(dml_cmds):\n    if longname:\n        IbisTableSheet.addCommand('', longname, 'notimpl()')\n\n@IbisTableSheet.api\ndef dup_selected(sheet):\n    vs=copy(sheet)\n    vs.query=sheet.pending_expr\n    vs.incrementName()\n    vd.push(vs)\n\n\n@BaseSheet.api\ndef incrementName(sheet):\n    if isinstance(sheet.names[-1], int):\n        sheet.names[-1] += 1\n    else:\n        sheet.names = list(sheet.names) + [1]\n    sheet.name = '_'.join(map(str, sheet.names))\n\n\n@IbisTableSheet.api\ndef dup_limit(sheet, limit:int):\n    vs=copy(sheet)\n    vs.name += f\"_top{limit}\" if limit else \"_all\"\n    vs.query=sheet.pending_expr\n    vs.options.ibis_limit=limit\n    return vs\n\n@IbisTableSheet.api\ndef rawSql(sheet, qstr):\n    with sheet.con as con:\n        return IbisTableSheet('rawsql',\n                          ibis_conpool=sheet.ibis_conpool,\n                          ibis_source=qstr,\n                          source=qstr,\n                          query=con.sql(qstr))\n\nclass IbisFreqTable(IbisTableSheet):\n    def freqExpr(self, row):\n        # matching key of grouped columns\n        return functools.reduce(operator.and_, [\n            c.get_ibis_col(self.source.query, typed=True) == self.rowkey(row)[i]\n                for i, c in enumerate(self.groupByCols)\n        ])\n\n    def selectRow(self, row):\n        super().selectRow(row)\n        self.source.select(self.gatherBy(lambda r, sheet=self, expr=self.freqExpr(row): sheet.evalExpr(expr, r)), progress=False)\n        self.source.ibis_selection.append(self.freqExpr(row))\n\n    def openRow(self, row):\n        vs = copy(self.source)\n        vs.names = list(vs.names) + ['_'.join(str(x) for x in self.rowkey(row))]\n        vs.query = self.source.query.filter(self.freqExpr(row))\n        return vs\n\n    def openRows(self, rows):\n        'Return sheet with union of all selected items.'\n        vs = copy(self.source)\n        vs.names = list(vs.names) + ['several']\n\n        vs.query = self.source.query.filter([\n            functools.reduce(operator.or_, [self.freqExpr(row) for row in rows])\n        ])\n        return vs\n\n\nIbisTableSheet.addCommand('F', 'freq-col', 'vd.push(groupBy([cursorCol]))')\nIbisTableSheet.addCommand('gF', 'freq-keys', 'vd.push(groupBy(keyCols))')\n\nIbisTableSheet.addCommand('\"', 'dup-selected', 'vd.push(dup_selected())', 'open duplicate sheet with selected rows (default limit)')\nIbisTableSheet.addCommand('z\"', 'dup-limit', 'vd.push(dup_limit(input(\"max rows: \", value=options.ibis_limit)))', 'open duplicate sheet with only selected rows (input limit)')\nIbisTableSheet.addCommand('gz\"', 'dup-nolimit', 'vd.push(dup_limit(0))', 'open duplicate sheet with only selected rows (no limit--be careful!)')\n\nIbisTableSheet.addCommand(\"'\", 'addcol-cast', 'addcol_cast(cursorCol)')\n\nIbisTableSheet.addCommand('zb', 'sidebar-choose', 'choose_sidebar()', 'choose vdsql sidebar to show')\nIbisTableSheet.addCommand('', 'exec-sql', 'vd.push(rawSql(input(\"SQL query: \")))', 'open sheet with results of raw SQL query')\nIbisTableSheet.addCommand('', 'addcol-subst', 'addColumnAtCursor(addcol_subst(cursorCol, **inputRegexSubstOld(\"transform column by regex: \")))') # deprecated\nIbisTableSheet.addCommand('', 'addcol-regex-subst', 'addColumnAtCursor(addcol_subst(cursorCol, **inputRegexSubst(\"transform column by regex: \")))')\nIbisTableSheet.addCommand('', 'addcol-split', 'addColumnAtCursor(addcol_split(cursorCol, input(\"split by delimiter: \", type=\"delim-split\")))')\nIbisTableSheet.addCommand('gt', 'stoggle-rows', 'stoggle_rows()', 'select rows matching current cell in current column')\nIbisTableSheet.addCommand(',', 'select-equal-cell', 'select_equal_cell(cursorCol, cursorTypedValue)', 'select rows matching current cell in current column')\nIbisTableSheet.addCommand('t', 'stoggle-row', 'stoggle_row(cursorRow); cursorDown(1)', 'toggle selection of current row')\nIbisTableSheet.addCommand('s', 'select-row', 'select_row(cursorRow); cursorDown(1)', 'select current row')\nIbisTableSheet.addCommand('u', 'unselect-row', 'unselect_row(cursorRow); cursorDown(1)', 'unselect current row')\n#IbisTableSheet.addCommand('g,', 'select-equal-row', 'select(gatherBy(lambda r,currow=cursorRow,vcols=visibleCols: all([c.getDisplayValue(r) == c.getDisplayValue(currow) for c in vcols])), progress=False)', 'select rows matching current row in all visible columns')\n#IbisTableSheet.addCommand('z,', 'select-exact-cell', 'select(gatherBy(lambda r,c=cursorCol,v=cursorTypedValue: c.getTypedValue(r) == v), progress=False)', 'select rows matching current cell in current column')\n#IbisTableSheet.addCommand('gz,', 'select-exact-row', 'select(gatherBy(lambda r,currow=cursorRow,vcols=visibleCols: all([c.getTypedValue(r) == c.getTypedValue(currow) for c in vcols])), progress=False)', 'select rows matching current row in all visible columns')\n\nIbisTableSheet.addCommand('', 'select-col-regex', 'select_col_regex(cursorCol, inputRegex(\"select regex: \", type=\"regex\", defaultLast=True))', 'select rows matching regex in current column')\n\nIbisTableSheet.addCommand('z|', 'select-expr', 'expr=inputExpr(\"select by expr: \"); select_expr(expr)', 'select rows matching Python expression in any visible column')\nIbisTableSheet.addCommand('z\\\\', 'unselect-expr', 'expr=inputExpr(\"unselect by expr: \"); unselect(gatherBy(lambda r, sheet=sheet, expr=expr: sheet.evalExpr(expr, r)), progress=False)', 'unselect rows matching Python expression in any visible column')\n\nIbisFreqTable.addCommand('gEnter', 'open-selected', 'vd.push(openRows(selectedRows))')\nIbisTableIndexSheet.addCommand('', 'exec-sql', 'vd.push(rawSql(input(\"SQL query: \")))', 'open sheet with results of raw SQL query')\n\nIbisTableIndexSheet.class_options.postgres_schema = ''\nIbisTableIndexSheet.class_options.load_lazy = True\nIbisTableIndexSheet.sheet_type = IbisTableSheet\nIbisTableSheet.class_options.clean_names = True\nIbisTableSheet.class_options.regex_flags = ''\n\nvd.addMenuItem('View', 'Sidebar', 'choose', 'sidebar-choose')\n"
  },
  {
    "path": "visidata/apps/vdsql/bigquery.py",
    "content": "'''\nSpecify the billing_project_id as the netloc, and the actual dataset_id as the path:\n\n    vdsql bigquery://<billing_project>/<dataset_id>''\n'''\n\n\nfrom visidata import vd, VisiData, Sheet, AttrColumn\nfrom . import IbisTableSheet, IbisTableIndexSheet, IbisConnectionPool\n\nimport ibis\nimport ibis.expr.operations as ops\n\n@VisiData.api\ndef openurl_bigquery(vd, p, filetype=None):\n    vd.configure_ibis()\n    vd.configure_bigquery()\n    return BigqueryDatabaseIndexSheet(p.base_stem, source=p, ibis_con=None)\n\nvd.openurl_bq = vd.openurl_bigquery\n\n\n@VisiData.api\ndef configure_bigquery(vd):\n    @ibis.bigquery.add_operation(ops.TimestampDiff)\n    def bq_timestamp_diff(t, expr):\n        op = expr.op()\n        left = t.translate(op.left)\n        right = t.translate(op.right)\n        return f\"TIMESTAMP_DIFF({left}, {right}, SECOND)\"\n\n\nclass BigqueryDatabaseIndexSheet(Sheet):\n    rowtype = 'databases'  # rowdef: DatasetListItem\n    columns = [\n#        AttrColumn('project', width=0),\n        AttrColumn('dataset_id'),\n        AttrColumn('friendly_name'),\n        AttrColumn('full_dataset_id', width=0),\n        AttrColumn('labels'),\n    ]\n    nKeys = 1\n\n    @property\n    def con(self):\n        if not self.ibis_con:\n            import ibis\n            self.ibis_con = ibis.connect(self.source)\n        return self.ibis_con\n\n    def iterload(self):\n        yield from self.con.client.list_datasets(project=self.source.name)\n\n    def openRow(self, row):\n        return IbisTableIndexSheet(row.dataset_id,\n                                   database_name=self.source.name+'.'+row.dataset_id,\n                                   ibis_con=self.con,\n                                   ibis_conpool=IbisConnectionPool(f\"{self.source}/{row.dataset_id}\"),\n                                   source=row,\n                                   filetype=None,\n                                   sheet_type=IbisTableSheet)\n"
  },
  {
    "path": "visidata/apps/vdsql/clickhouse.py",
    "content": "import time\n\nfrom visidata import vd, VisiData, Progress\n\nfrom ._ibis import IbisTableSheet, IbisTableIndexSheet, IbisConnectionPool\n\n\n@VisiData.api\ndef openurl_clickhouse(vd, p, filetype=None):\n    vd.configure_ibis()\n    return IbisTableIndexSheet(p.base_stem, source=p, filetype=None, database_name=None,\n                               ibis_conpool=IbisConnectionPool(p), sheet_type=ClickhouseSheet)\n\nvd.openurl_clickhouses = vd.openurl_clickhouse\n\n\nclass ClickhouseSheet(IbisTableSheet):\n    @property\n    def countRows(self):\n        if self.total_rows is not None:\n            return self.total_rows\n        return super().countRows\n\n    def iterload(self):\n        with self.con as con:\n            qid = None\n            try:\n                if self.query is None:\n                    self.query = self.baseQuery(con)\n\n                self.reloadColumns(self.query, start=0)  # columns based on query without metadata\n                sqlstr = con.compile(self.query.limit(self.options.ibis_limit or None))\n\n                with Progress(gerund='clickhousing', sheet=self) as prog:\n                    settings = {'max_block_size': 10000}\n                    with con.con.query_rows_stream(sqlstr, settings) as stream:\n                        prog.total = int(stream.source.summary['total_rows_to_read'])\n                        prog.made = 0\n                        for row in stream:\n                            prog.made += 1\n                            yield row\n                        self.total_rows = prog.total\n\n            except Exception as e:\n                raise\n            except BaseException:\n                if qid:\n                    con._client.cancel(qid)\n\n\nClickhouseSheet.init('total_rows', lambda: None)\n\n#ClickhouseSheet.class_options.sql_always_count = True\n"
  },
  {
    "path": "visidata/apps/vdsql/demos/clickhouse-demo.vdx",
    "content": "#!vdsql\nopen-file clickhouse://play:clickhouse@play.clickhouse.com/?secure=1\nsearch-keys recipes\nopen-row\ncol NER\nunfurl-col\nfreq-col\n"
  },
  {
    "path": "visidata/apps/vdsql/requirements-extra.txt",
    "content": "ibis-framework[duckdb,clickhouse,bigquery] >= 12\npsycopg2-binary\nduckdb-engine\nduckdb\n"
  },
  {
    "path": "visidata/apps/vdsql/requirements.txt",
    "content": "ibis-framework[sqlite]\nibis-substrait\nsqlparse\npandas>=1.5.0\n"
  },
  {
    "path": "visidata/apps/vdsql/setup.py",
    "content": "# SPDX-License-Identifier: MIT\n\nfrom setuptools import setup, find_packages\nfrom pathlib import Path\n\n\nexec(Path('__about__.py').read_text())\n\n\ndef readme():\n    return Path(\"README.md\").read_text()\n\n\ndef requirements():\n    return Path(\"requirements.txt\").read_text().splitlines()\n\ndef requirements_extra():\n    return Path(\"requirements-extra.txt\").read_text().splitlines()\n\n\nsetup(\n        name=\"vdsql\",\n        version=__version__,\n        description=__description__,\n        long_description=readme(),\n        long_description_content_type=\"text/markdown\",\n        classifiers=[\n            \"Development Status :: 4 - Beta\",\n            \"Programming Language :: Python :: 3\",\n        ],\n        keywords=\"visidata sql rdbms ibis substrait\",\n        author=\"Saul Pwanson\",\n        url=\"https://github.com/visidata/vdsql\",\n        python_requires=\">=3.9\",\n        packages=find_packages(exclude=[\"tests\"]),\n        entry_points={'visidata.plugins': 'vdsql=visidata.apps.vdsql'},\n        scripts=['vdsql'],\n        install_requires=requirements(),\n        extra_requires=requirements_extra(),\n)\n"
  },
  {
    "path": "visidata/apps/vdsql/snowflake.py",
    "content": "import time\n\nfrom visidata import vd, VisiData\n\nfrom ._ibis import IbisTableSheet, IbisConnectionPool, IbisTableIndexSheet\n\n\n@VisiData.api\ndef openurl_snowflake(vd, p, filetype=None):\n    return IbisTableIndexSheet(p.base_stem, source=p, filetype=None, database_name=None,\n                               ibis_conpool=IbisConnectionPool(p),\n                               sheet_type=SnowflakeSheet)\n\n\nclass SnowflakeSheet(IbisTableSheet):\n    @property\n    def countRows(self):\n        r = super().countRows\n        if r is None and self.cursor is None:\n            return None  # no cursor yet\n        return r\n\n    def executeSql(self, sql):\n        assert self.cursor is None\n\n        with self.con as con:\n            con = con.con\n\n            if self.warehouse:\n                con.execute(f'USE WAREHOUSE {self.warehouse}')\n\n            with con.begin() as c:\n                snowflake_conn = c.connection.dbapi_connection\n                cursor = self.cursor = snowflake_conn.cursor()\n                cursor.execute_async(sql)\n                while snowflake_conn.is_still_running(snowflake_conn.get_query_status(cursor.sfqid)):\n                    time.sleep(.1)\n\n        cursor.get_results_from_sfqid(cursor.sfqid)\n        yield from cursor.fetchall()\n\n        self.cursor = None\n\n    def iterload(self):\n        try:\n            with self.con as con:\n                if self.query is None:\n                    self.query = self.baseQuery(con)\n                yield from self.executeSql(self.ibis_to_sql(self.withRowcount(self.baseQuery(con))))\n        except BaseException:\n            if self.cursor:\n                self.cancelQuery(self.cursor.sfqid)\n            raise\n\n        self.reloadColumns(self.query)  # columns based on query without metadata\n\n    def cancelQuery(self, qid):\n        vd.status(f'canceling \"{qid}\"')\n        with self.con as con:\n            with con.begin() as con:\n                cursor = con.connection.dbapi_connection.cursor()\n                cursor.execute(f\"SELECT SYSTEM$CANCEL_QUERY('{qid}')\")\n                vd.status(cursor.fetchall())\n\n\nSnowflakeSheet.init('cursor', lambda: None)\nSnowflakeSheet.init('warehouse', str)\n"
  },
  {
    "path": "visidata/apps/vdsql/test.sh",
    "content": "#!/usr/bin/env bash\n\n# Usage: test.sh [testname]\n\nset -e\nshopt -s failglob\n\ntrap \"echo aborted; exit;\" SIGINT SIGTERM\n\nif [ -z \"$1\" ] ; then\n    # test.sh; run all .vd/.vdj/.vdx in tests/\n    TESTS=\"tests/*.vd*\"\nelse\n    # test.sh testname; run tests/testname.vd\n    TESTS=tests/$1.vd*\nfi\n\nfor i in $TESTS ; do\n    echo \"--- $i\"\n    outbase=${i##tests/}\n    if [ \"${i%-nosave.vd*}-nosave\" == \"${i%.vd*}\" ];\n    then\n        echo \"$1\"\n    else\n        for goldfn in tests/golden/${outbase%.vd*}.*; do\n            PYTHONPATH=. vdsql --confirm-overwrite=False --play \"$i\" --batch --output \"$goldfn\" --config tests/.visidatarc --visidata-dir tests/.visidata\n            echo \"save: $goldfn\"\n        done\n    fi\ndone\n\necho '=== git diffs for BUILD FAILURE ==='\ngit --no-pager diff --numstat tests/\ngit --no-pager diff --exit-code tests/\necho '=============================================='\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/dup-limit.vdj",
    "content": "#!/usr/bin/env vd -p\n{\"longname\": \"open-file\", \"input\": \"tests/business.sqlite\", \"keystrokes\": \"o\"}\n{\"sheet\": \"business\", \"col\": \"\", \"row\": \"\\u30adcustomers\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet with copies of rows referenced in current row\"}\n{\"sheet\": \"customers\", \"col\": \"customerid\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"toggle current column as a key column\"}\n{\"sheet\": \"customers\", \"col\": \"\", \"row\": \"\\u30ad1002\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"customers\", \"col\": \"\", \"row\": \"\\u30ad1003\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"customers\", \"col\": \"\", \"row\": \"\\u30ad1004\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"customers\", \"col\": \"\", \"row\": \"\\u30ad1006\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"customers\", \"col\": \"\", \"row\": \"\\u30ad1007\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"customers\", \"col\": \"\", \"row\": \"\", \"longname\": \"dup-limit\", \"input\": 2, \"comment\": \"open duplicate sheet with only selected rows (input limit)\"}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/freq-open-selected.vdj",
    "content": "#!/usr/bin/env vd -p\n{\"longname\": \"open-file\", \"input\": \"tests/business.sqlite\", \"keystrokes\": \"o\"}\n{\"sheet\": \"business\", \"col\": \"\", \"row\": \"\\u30adcustomers\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet with copies of rows referenced in current row\"}\n{\"sheet\": \"business\", \"col\": \"\", \"row\": \"\\u30adproducts\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet with copies of rows referenced in current row\"}\n{\"sheet\": \"business\", \"col\": \"\", \"row\": \"\\u30adorders\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet with copies of rows referenced in current row\"}\n{\"sheet\": \"orders\", \"col\": \"customerid\", \"row\": \"\", \"longname\": \"freq-col\", \"input\": \"\", \"keystrokes\": \"Shift+F\", \"comment\": \"\"}\n{\"sheet\": \"orders_customerid_freq\", \"col\": \"\", \"row\": \"\\u30ad1004\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet with copies of rows referenced in current row\"}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/freq.vdj",
    "content": "#!vd -p\n{\"sheet\": null, \"col\": null, \"row\": null, \"longname\": \"open-file\", \"input\": \"tests/business.sqlite\", \"keystrokes\": \"o\", \"comment\": null}\n{\"sheet\": \"business\", \"col\": \"\", \"row\": \"\\u30adorder_items\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet with copies of rows referenced in current row\"}\n{\"sheet\": \"order_items\", \"col\": \"sku\", \"row\": \"\", \"longname\": \"freq-col\", \"input\": \"\", \"keystrokes\": \"Shift+F\", \"comment\": \"\"}\n{\"sheet\": \"order_items_sku_freq\", \"col\": \"sku\", \"row\": \"\", \"longname\": \"sort-asc\", \"input\": \"\", \"comment\": \"sort ascending by current column; replace any existing sort criteria\"}\n{\"sheet\": \"order_items_sku_freq\", \"col\": \"histogram\", \"longname\": \"hide-col\", \"keystrokes\": \"-\"}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/golden/dup-limit.jsonl",
    "content": "{\"customerid\": 1002, \"name\": \"\\u0645\\u062d\\u0645\\u062f\\u06cc\\u0627\\u0633\\u06cc\\u0646 \\u0645\\u0647\\u062f\\u06cc\\u0627\\u0646\", \"address\": \"4923 \\u0641\\u0631\\u062c\\u06cc \\u0686\\u0647\\u0627\\u0631 \\u0631\\u0627\\u0647 \\u0633\\u0648\\u0626\\u06cc\\u062a 695\\n\\u0627\\u0633\\u062a\\u0627\\u0646 \\u0645\\u062d\\u062f\\u062b\\u0647, \\u062e\\u0631\\u0627\\u0633\\u0627\\u0646 \\u062c\\u0646\\u0648\\u0628\\u06cc 2126860358\", \"birthdate\": \"1978-09-16\", \"phone\": \"028 7779 0603\", \"timezone\": \"America/Tegucigalpa\", \"lat\": \"36.64852\", \"long\": \"51.49621\", \"locale\": \"fa_IR\"}\n{\"customerid\": 1003, \"name\": \"\\u0421\\u043e\\u043b\\u043e\\u043c\\u0456\\u044f \\u041e\\u0431\\u0435\\u0440\\u0435\\u043c\\u043a\\u043e\", \"address\": \"\\u043f\\u043b\\u043e\\u0449\\u0430 \\u042f\\u043c\\u0441\\u044c\\u043a\\u0430, \\u0431\\u0443\\u0434. 58 \\u043a\\u0432. 66, \\u041f\\u0435\\u0440\\u0435\\u0449\\u0435\\u043f\\u0438\\u043d\\u0435, 04629\", \"birthdate\": \"1992-11-30\", \"phone\": \"081 465 33 69\", \"timezone\": \"Pacific/Truk\", \"lat\": \"45.99194\", \"long\": \"29.41824\", \"locale\": \"uk_UA\"}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/golden/freq-open-selected.jsonl",
    "content": "{\"orderid\": \"063457\", \"customerid\": 1004, \"timestamp\": \"2022-09-01T01:55:21\", \"amount_paid\": 19.64}\n{\"orderid\": \"078435\", \"customerid\": 1004, \"timestamp\": \"2022-08-02T10:31:12\", \"amount_paid\": 19.75}\n{\"orderid\": \"036500\", \"customerid\": 1004, \"timestamp\": \"2022-02-10T00:05:08\", \"amount_paid\": 10.16}\n{\"orderid\": \"004662\", \"customerid\": 1004, \"timestamp\": \"2022-05-21T05:41:59\", \"amount_paid\": 28.75}\n{\"orderid\": \"039027\", \"customerid\": 1004, \"timestamp\": \"2022-04-05T20:18:16\", \"amount_paid\": 18.32}\n{\"orderid\": \"009471\", \"customerid\": 1004, \"timestamp\": \"2022-05-31T05:29:47\", \"amount_paid\": 32.82}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/golden/freq.jsonl",
    "content": "{\"sku\": \"BB00\", \"count\": 12, \"percent\": 8.053691275167786, \"maxcount\": 24}\n{\"sku\": \"BB16\", \"count\": 13, \"percent\": 8.724832214765101, \"maxcount\": 24}\n{\"sku\": \"BB24\", \"count\": 15, \"percent\": 10.06711409395973, \"maxcount\": 24}\n{\"sku\": \"BB69\", \"count\": 17, \"percent\": 11.409395973154362, \"maxcount\": 24}\n{\"sku\": \"BB71\", \"count\": 24, \"percent\": 16.107382550335572, \"maxcount\": 24}\n{\"sku\": \"BB93\", \"count\": 9, \"percent\": 6.040268456375839, \"maxcount\": 24}\n{\"sku\": \"JA16\", \"count\": 12, \"percent\": 8.053691275167786, \"maxcount\": 24}\n{\"sku\": \"JA37\", \"count\": 14, \"percent\": 9.395973154362416, \"maxcount\": 24}\n{\"sku\": \"JA90\", \"count\": 15, \"percent\": 10.06711409395973, \"maxcount\": 24}\n{\"sku\": \"JA99\", \"count\": 18, \"percent\": 12.080536912751677, \"maxcount\": 24}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/golden/scoop.jsonl",
    "content": "{\"orderid\": \"038385\", \"sku\": \"BB71\", \"qty\": 4, \"unit_price\": 3.12}\n{\"orderid\": \"038385\", \"sku\": \"JA99\", \"qty\": 4, \"unit_price\": 3.22}\n{\"orderid\": \"059776\", \"sku\": \"BB16\", \"qty\": 4, \"unit_price\": 2.76}\n{\"orderid\": \"014345\", \"sku\": \"BB71\", \"qty\": 4, \"unit_price\": 3.02}\n{\"orderid\": \"092935\", \"sku\": \"BB71\", \"qty\": 4, \"unit_price\": 2.75}\n{\"orderid\": \"065481\", \"sku\": \"BB69\", \"qty\": 4, \"unit_price\": 4.19}\n{\"orderid\": \"019193\", \"sku\": \"JA99\", \"qty\": 4, \"unit_price\": 2.89}\n{\"orderid\": \"059039\", \"sku\": \"JA99\", \"qty\": 4, \"unit_price\": 3.14}\n{\"orderid\": \"017098\", \"sku\": \"BB71\", \"qty\": 4, \"unit_price\": 2.81}\n{\"orderid\": \"069477\", \"sku\": \"BB16\", \"qty\": 4, \"unit_price\": 2.79}\n{\"orderid\": \"083279\", \"sku\": \"BB24\", \"qty\": 4, \"unit_price\": 3.15}\n{\"orderid\": \"019452\", \"sku\": \"BB71\", \"qty\": 4, \"unit_price\": 3.24}\n{\"orderid\": \"019452\", \"sku\": \"BB93\", \"qty\": 4, \"unit_price\": 2.13}\n{\"orderid\": \"080285\", \"sku\": \"JA99\", \"qty\": 4, \"unit_price\": 2.89}\n{\"orderid\": \"046042\", \"sku\": \"BB71\", \"qty\": 4, \"unit_price\": 3.09}\n{\"orderid\": \"098006\", \"sku\": \"BB24\", \"qty\": 4, \"unit_price\": 2.79}\n{\"orderid\": \"087879\", \"sku\": \"BB69\", \"qty\": 4, \"unit_price\": 4.1}\n{\"orderid\": \"066848\", \"sku\": \"JA16\", \"qty\": 4, \"unit_price\": 3.04}\n{\"orderid\": \"079880\", \"sku\": \"BB69\", \"qty\": 4, \"unit_price\": 4.38}\n{\"orderid\": \"089123\", \"sku\": \"JA90\", \"qty\": 4, \"unit_price\": 3.5}\n{\"orderid\": \"087410\", \"sku\": \"BB24\", \"qty\": 4, \"unit_price\": 3.12}\n{\"orderid\": \"064231\", \"sku\": \"BB69\", \"qty\": 4, \"unit_price\": 3.86}\n{\"orderid\": \"075469\", \"sku\": \"JA99\", \"qty\": 4, \"unit_price\": 2.98}\n{\"orderid\": \"094509\", \"sku\": \"BB16\", \"qty\": 4, \"unit_price\": 2.79}\n{\"orderid\": \"052835\", \"sku\": \"BB93\", \"qty\": 4, \"unit_price\": 2.07}\n{\"orderid\": \"009471\", \"sku\": \"BB71\", \"qty\": 4, \"unit_price\": 3.23}\n{\"orderid\": \"004410\", \"sku\": \"JA16\", \"qty\": 4, \"unit_price\": 2.88}\n{\"orderid\": \"020066\", \"sku\": \"BB69\", \"qty\": 4, \"unit_price\": 4.27}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/golden/select-col-regex.jsonl",
    "content": "{\"sku\": \"BB69\", \"desc\": \"Automatic Machine\", \"baseprice\": 3.99, \"weight_kg\": 4, \"dims_cm\": \"23.4 x 13.4 x 10.2\"}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/golden/select-expr-cast-type.tsv",
    "content": "orderid\tsku\tqty\tunit_price\n23041\tJA16\t3\t2.75\n12921\tBB93\t3\t1.83\n14345\tBB71\t4\t3.02\n14345\tBB69\t2\t3.68\n1916\tJA16\t1\t3.00\n21167\tBB24\t2\t2.78\n19193\tJA99\t4\t2.89\n19193\tBB69\t2\t3.75\n17098\tBB71\t4\t2.81\n2738\tBB71\t2\t2.76\n19452\tBB71\t4\t3.24\n19452\tBB93\t4\t2.13\n3154\tJA16\t3\t3.22\n11462\tBB71\t5\t2.70\n25822\tBB24\t5\t3.15\n25822\tBB93\t2\t2.13\n4662\tBB71\t5\t2.91\n4662\tJA16\t5\t2.84\n12780\tBB16\t3\t2.73\n2866\tBB93\t5\t2.10\n9471\tJA37\t5\t3.98\n9471\tBB71\t4\t3.23\n2389\tBB16\t5\t3.01\n2389\tJA99\t2\t3.13\n6785\tBB69\t1\t3.76\n4127\tJA90\t5\t3.23\n4127\tBB16\t1\t2.72\n6452\tBB16\t2\t3.02\n6452\tJA99\t2\t2.98\n4410\tJA37\t5\t3.72\n4410\tJA16\t4\t2.88\n18316\tBB71\t3\t2.89\n20066\tBB69\t4\t4.27\n6193\tJA90\t1\t3.84\n5892\tJA90\t5\t3.53\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/golden/select-expr.jsonl",
    "content": "{\"orderid\": \"023041\", \"sku\": \"JA16\", \"qty\": 3, \"unit_price\": 2.75}\n{\"orderid\": \"048629\", \"sku\": \"BB00\", \"qty\": 3, \"unit_price\": 2.99}\n{\"orderid\": \"056953\", \"sku\": \"JA37\", \"qty\": 3, \"unit_price\": 3.91}\n{\"orderid\": \"091022\", \"sku\": \"JA99\", \"qty\": 2, \"unit_price\": 2.73}\n{\"orderid\": \"065473\", \"sku\": \"BB00\", \"qty\": 3, \"unit_price\": 2.66}\n{\"orderid\": \"059776\", \"sku\": \"BB00\", \"qty\": 3, \"unit_price\": 2.84}\n{\"orderid\": \"062266\", \"sku\": \"JA99\", \"qty\": 1, \"unit_price\": 2.97}\n{\"orderid\": \"062266\", \"sku\": \"JA90\", \"qty\": 2, \"unit_price\": 3.74}\n{\"orderid\": \"012921\", \"sku\": \"BB93\", \"qty\": 3, \"unit_price\": 1.83}\n{\"orderid\": \"014345\", \"sku\": \"BB69\", \"qty\": 2, \"unit_price\": 3.68}\n{\"orderid\": \"063457\", \"sku\": \"BB00\", \"qty\": 2, \"unit_price\": 2.97}\n{\"orderid\": \"001916\", \"sku\": \"JA16\", \"qty\": 1, \"unit_price\": 3.0}\n{\"orderid\": \"021167\", \"sku\": \"BB24\", \"qty\": 2, \"unit_price\": 2.78}\n{\"orderid\": \"089680\", \"sku\": \"JA37\", \"qty\": 2, \"unit_price\": 4.25}\n{\"orderid\": \"089680\", \"sku\": \"BB16\", \"qty\": 2, \"unit_price\": 2.68}\n{\"orderid\": \"038648\", \"sku\": \"BB24\", \"qty\": 3, \"unit_price\": 2.94}\n{\"orderid\": \"019193\", \"sku\": \"BB69\", \"qty\": 2, \"unit_price\": 3.75}\n{\"orderid\": \"065577\", \"sku\": \"JA90\", \"qty\": 1, \"unit_price\": 3.82}\n{\"orderid\": \"065577\", \"sku\": \"JA99\", \"qty\": 2, \"unit_price\": 3.23}\n{\"orderid\": \"086831\", \"sku\": \"BB16\", \"qty\": 1, \"unit_price\": 3.14}\n{\"orderid\": \"086651\", \"sku\": \"BB00\", \"qty\": 2, \"unit_price\": 2.95}\n{\"orderid\": \"086651\", \"sku\": \"BB71\", \"qty\": 2, \"unit_price\": 2.77}\n{\"orderid\": \"089601\", \"sku\": \"JA90\", \"qty\": 2, \"unit_price\": 3.37}\n{\"orderid\": \"069477\", \"sku\": \"JA99\", \"qty\": 2, \"unit_price\": 2.99}\n{\"orderid\": \"002738\", \"sku\": \"BB71\", \"qty\": 2, \"unit_price\": 2.76}\n{\"orderid\": \"082108\", \"sku\": \"JA99\", \"qty\": 1, \"unit_price\": 2.83}\n{\"orderid\": \"078967\", \"sku\": \"BB69\", \"qty\": 3, \"unit_price\": 4.22}\n{\"orderid\": \"064407\", \"sku\": \"JA90\", \"qty\": 2, \"unit_price\": 3.83}\n{\"orderid\": \"094381\", \"sku\": \"BB71\", \"qty\": 3, \"unit_price\": 3.13}\n{\"orderid\": \"080285\", \"sku\": \"JA37\", \"qty\": 1, \"unit_price\": 4.2}\n{\"orderid\": \"032590\", \"sku\": \"BB24\", \"qty\": 3, \"unit_price\": 3.11}\n{\"orderid\": \"003154\", \"sku\": \"JA16\", \"qty\": 3, \"unit_price\": 3.22}\n{\"orderid\": \"049997\", \"sku\": \"BB71\", \"qty\": 3, \"unit_price\": 3.13}\n{\"orderid\": \"098006\", \"sku\": \"JA99\", \"qty\": 2, \"unit_price\": 2.91}\n{\"orderid\": \"038436\", \"sku\": \"BB69\", \"qty\": 3, \"unit_price\": 4.18}\n{\"orderid\": \"053038\", \"sku\": \"BB00\", \"qty\": 1, \"unit_price\": 2.77}\n{\"orderid\": \"062598\", \"sku\": \"BB93\", \"qty\": 2, \"unit_price\": 1.82}\n{\"orderid\": \"043282\", \"sku\": \"JA99\", \"qty\": 2, \"unit_price\": 2.82}\n{\"orderid\": \"046852\", \"sku\": \"BB00\", \"qty\": 2, \"unit_price\": 2.76}\n{\"orderid\": \"063817\", \"sku\": \"BB71\", \"qty\": 2, \"unit_price\": 3.07}\n{\"orderid\": \"063817\", \"sku\": \"BB69\", \"qty\": 3, \"unit_price\": 3.68}\n{\"orderid\": \"031212\", \"sku\": \"BB71\", \"qty\": 3, \"unit_price\": 2.73}\n{\"orderid\": \"057109\", \"sku\": \"JA90\", \"qty\": 2, \"unit_price\": 3.25}\n{\"orderid\": \"057109\", \"sku\": \"BB69\", \"qty\": 3, \"unit_price\": 3.97}\n{\"orderid\": \"079880\", \"sku\": \"BB71\", \"qty\": 1, \"unit_price\": 3.27}\n{\"orderid\": \"037446\", \"sku\": \"JA99\", \"qty\": 1, \"unit_price\": 2.66}\n{\"orderid\": \"098773\", \"sku\": \"BB16\", \"qty\": 2, \"unit_price\": 2.96}\n{\"orderid\": \"098773\", \"sku\": \"BB71\", \"qty\": 1, \"unit_price\": 2.76}\n{\"orderid\": \"089123\", \"sku\": \"BB71\", \"qty\": 1, \"unit_price\": 2.76}\n{\"orderid\": \"049802\", \"sku\": \"JA90\", \"qty\": 3, \"unit_price\": 3.26}\n{\"orderid\": \"025822\", \"sku\": \"BB93\", \"qty\": 2, \"unit_price\": 2.13}\n{\"orderid\": \"036500\", \"sku\": \"JA37\", \"qty\": 2, \"unit_price\": 3.71}\n{\"orderid\": \"036500\", \"sku\": \"BB71\", \"qty\": 1, \"unit_price\": 2.74}\n{\"orderid\": \"044118\", \"sku\": \"BB69\", \"qty\": 3, \"unit_price\": 3.89}\n{\"orderid\": \"066603\", \"sku\": \"BB24\", \"qty\": 3, \"unit_price\": 3.15}\n{\"orderid\": \"076526\", \"sku\": \"BB24\", \"qty\": 3, \"unit_price\": 2.88}\n{\"orderid\": \"055934\", \"sku\": \"BB93\", \"qty\": 1, \"unit_price\": 1.87}\n{\"orderid\": \"055934\", \"sku\": \"JA90\", \"qty\": 1, \"unit_price\": 3.34}\n{\"orderid\": \"077106\", \"sku\": \"BB71\", \"qty\": 2, \"unit_price\": 3.02}\n{\"orderid\": \"077106\", \"sku\": \"BB69\", \"qty\": 1, \"unit_price\": 3.64}\n{\"orderid\": \"075469\", \"sku\": \"JA37\", \"qty\": 2, \"unit_price\": 4.17}\n{\"orderid\": \"081746\", \"sku\": \"BB71\", \"qty\": 1, \"unit_price\": 2.98}\n{\"orderid\": \"094509\", \"sku\": \"JA37\", \"qty\": 3, \"unit_price\": 4.04}\n{\"orderid\": \"097515\", \"sku\": \"JA37\", \"qty\": 3, \"unit_price\": 3.96}\n{\"orderid\": \"097515\", \"sku\": \"JA99\", \"qty\": 1, \"unit_price\": 2.99}\n{\"orderid\": \"033968\", \"sku\": \"BB93\", \"qty\": 2, \"unit_price\": 1.77}\n{\"orderid\": \"012780\", \"sku\": \"BB16\", \"qty\": 3, \"unit_price\": 2.73}\n{\"orderid\": \"062432\", \"sku\": \"JA99\", \"qty\": 3, \"unit_price\": 3.04}\n{\"orderid\": \"062432\", \"sku\": \"BB24\", \"qty\": 1, \"unit_price\": 3.14}\n{\"orderid\": \"039027\", \"sku\": \"BB69\", \"qty\": 1, \"unit_price\": 3.92}\n{\"orderid\": \"099325\", \"sku\": \"BB24\", \"qty\": 3, \"unit_price\": 3.03}\n{\"orderid\": \"002389\", \"sku\": \"JA99\", \"qty\": 2, \"unit_price\": 3.13}\n{\"orderid\": \"066589\", \"sku\": \"JA16\", \"qty\": 2, \"unit_price\": 3.22}\n{\"orderid\": \"006785\", \"sku\": \"BB69\", \"qty\": 1, \"unit_price\": 3.76}\n{\"orderid\": \"056248\", \"sku\": \"JA99\", \"qty\": 2, \"unit_price\": 3.02}\n{\"orderid\": \"056248\", \"sku\": \"BB16\", \"qty\": 2, \"unit_price\": 2.81}\n{\"orderid\": \"004127\", \"sku\": \"BB16\", \"qty\": 1, \"unit_price\": 2.72}\n{\"orderid\": \"067171\", \"sku\": \"JA37\", \"qty\": 1, \"unit_price\": 3.66}\n{\"orderid\": \"075297\", \"sku\": \"BB00\", \"qty\": 2, \"unit_price\": 2.68}\n{\"orderid\": \"082870\", \"sku\": \"JA16\", \"qty\": 3, \"unit_price\": 3.11}\n{\"orderid\": \"092131\", \"sku\": \"BB24\", \"qty\": 1, \"unit_price\": 2.69}\n{\"orderid\": \"088945\", \"sku\": \"BB93\", \"qty\": 2, \"unit_price\": 1.89}\n{\"orderid\": \"078360\", \"sku\": \"JA37\", \"qty\": 3, \"unit_price\": 3.92}\n{\"orderid\": \"006452\", \"sku\": \"BB16\", \"qty\": 2, \"unit_price\": 3.02}\n{\"orderid\": \"006452\", \"sku\": \"JA99\", \"qty\": 2, \"unit_price\": 2.98}\n{\"orderid\": \"018316\", \"sku\": \"BB71\", \"qty\": 3, \"unit_price\": 2.89}\n{\"orderid\": \"041972\", \"sku\": \"BB24\", \"qty\": 1, \"unit_price\": 3.11}\n{\"orderid\": \"006193\", \"sku\": \"JA90\", \"qty\": 1, \"unit_price\": 3.84}\n{\"orderid\": \"043322\", \"sku\": \"BB69\", \"qty\": 1, \"unit_price\": 4.21}\n{\"orderid\": \"043322\", \"sku\": \"JA16\", \"qty\": 3, \"unit_price\": 3.27}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/golden/select-row-dup.jsonl",
    "content": "{\"orderid\": \"038385\", \"sku\": \"BB71\", \"qty\": 4, \"unit_price\": 3.12}\n{\"orderid\": \"038385\", \"sku\": \"JA99\", \"qty\": 4, \"unit_price\": 3.22}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/golden/toggle.jsonl",
    "content": "{\"orderid\": \"001916\", \"sku\": \"JA16\", \"qty\": 1, \"unit_price\": 3.0}\n{\"orderid\": \"021167\", \"sku\": \"BB24\", \"qty\": 2, \"unit_price\": 2.78}\n{\"orderid\": \"092935\", \"sku\": \"BB71\", \"qty\": 4, \"unit_price\": 2.75}\n{\"orderid\": \"065481\", \"sku\": \"BB69\", \"qty\": 4, \"unit_price\": 4.19}\n{\"orderid\": \"089680\", \"sku\": \"JA37\", \"qty\": 2, \"unit_price\": 4.25}\n{\"orderid\": \"089680\", \"sku\": \"BB16\", \"qty\": 2, \"unit_price\": 2.68}\n{\"orderid\": \"038648\", \"sku\": \"BB24\", \"qty\": 3, \"unit_price\": 2.94}\n{\"orderid\": \"019193\", \"sku\": \"JA99\", \"qty\": 4, \"unit_price\": 2.89}\n{\"orderid\": \"019193\", \"sku\": \"BB69\", \"qty\": 2, \"unit_price\": 3.75}\n{\"orderid\": \"065577\", \"sku\": \"JA90\", \"qty\": 1, \"unit_price\": 3.82}\n{\"orderid\": \"065577\", \"sku\": \"JA99\", \"qty\": 2, \"unit_price\": 3.23}\n{\"orderid\": \"086831\", \"sku\": \"BB24\", \"qty\": 5, \"unit_price\": 3.0}\n{\"orderid\": \"086831\", \"sku\": \"BB16\", \"qty\": 1, \"unit_price\": 3.14}\n{\"orderid\": \"086651\", \"sku\": \"BB00\", \"qty\": 2, \"unit_price\": 2.95}\n{\"orderid\": \"086651\", \"sku\": \"BB71\", \"qty\": 2, \"unit_price\": 2.77}\n{\"orderid\": \"089601\", \"sku\": \"JA90\", \"qty\": 2, \"unit_price\": 3.37}\n{\"orderid\": \"059039\", \"sku\": \"JA99\", \"qty\": 4, \"unit_price\": 3.14}\n{\"orderid\": \"017098\", \"sku\": \"BB71\", \"qty\": 4, \"unit_price\": 2.81}\n{\"orderid\": \"069477\", \"sku\": \"JA99\", \"qty\": 2, \"unit_price\": 2.99}\n{\"orderid\": \"069477\", \"sku\": \"BB16\", \"qty\": 4, \"unit_price\": 2.79}\n{\"orderid\": \"002738\", \"sku\": \"BB71\", \"qty\": 2, \"unit_price\": 2.76}\n{\"orderid\": \"078435\", \"sku\": \"JA37\", \"qty\": 5, \"unit_price\": 3.95}\n{\"orderid\": \"082108\", \"sku\": \"JA99\", \"qty\": 1, \"unit_price\": 2.83}\n{\"orderid\": \"083279\", \"sku\": \"BB00\", \"qty\": 5, \"unit_price\": 2.94}\n{\"orderid\": \"083279\", \"sku\": \"BB24\", \"qty\": 4, \"unit_price\": 3.15}\n{\"orderid\": \"078967\", \"sku\": \"BB69\", \"qty\": 3, \"unit_price\": 4.22}\n{\"orderid\": \"064407\", \"sku\": \"JA90\", \"qty\": 2, \"unit_price\": 3.83}\n{\"orderid\": \"094381\", \"sku\": \"BB71\", \"qty\": 3, \"unit_price\": 3.13}\n{\"orderid\": \"019452\", \"sku\": \"BB71\", \"qty\": 4, \"unit_price\": 3.24}\n{\"orderid\": \"019452\", \"sku\": \"BB93\", \"qty\": 4, \"unit_price\": 2.13}\n{\"orderid\": \"080285\", \"sku\": \"JA99\", \"qty\": 4, \"unit_price\": 2.89}\n{\"orderid\": \"080285\", \"sku\": \"JA37\", \"qty\": 1, \"unit_price\": 4.2}\n{\"orderid\": \"032590\", \"sku\": \"BB24\", \"qty\": 3, \"unit_price\": 3.11}\n{\"orderid\": \"032590\", \"sku\": \"JA37\", \"qty\": 5, \"unit_price\": 4.14}\n{\"orderid\": \"003154\", \"sku\": \"JA16\", \"qty\": 3, \"unit_price\": 3.22}\n{\"orderid\": \"046042\", \"sku\": \"BB71\", \"qty\": 4, \"unit_price\": 3.09}\n{\"orderid\": \"049997\", \"sku\": \"BB00\", \"qty\": 5, \"unit_price\": 2.94}\n{\"orderid\": \"049997\", \"sku\": \"BB71\", \"qty\": 3, \"unit_price\": 3.13}\n{\"orderid\": \"098006\", \"sku\": \"JA99\", \"qty\": 2, \"unit_price\": 2.91}\n{\"orderid\": \"098006\", \"sku\": \"BB24\", \"qty\": 4, \"unit_price\": 2.79}\n{\"orderid\": \"038436\", \"sku\": \"BB69\", \"qty\": 3, \"unit_price\": 4.18}\n{\"orderid\": \"087879\", \"sku\": \"BB16\", \"qty\": 5, \"unit_price\": 3.06}\n{\"orderid\": \"087879\", \"sku\": \"BB69\", \"qty\": 4, \"unit_price\": 4.1}\n{\"orderid\": \"053038\", \"sku\": \"BB00\", \"qty\": 1, \"unit_price\": 2.77}\n{\"orderid\": \"053038\", \"sku\": \"JA37\", \"qty\": 5, \"unit_price\": 3.8}\n{\"orderid\": \"062598\", \"sku\": \"BB93\", \"qty\": 2, \"unit_price\": 1.82}\n{\"orderid\": \"043282\", \"sku\": \"JA99\", \"qty\": 2, \"unit_price\": 2.82}\n{\"orderid\": \"066848\", \"sku\": \"JA16\", \"qty\": 4, \"unit_price\": 3.04}\n{\"orderid\": \"046852\", \"sku\": \"BB00\", \"qty\": 2, \"unit_price\": 2.76}\n{\"orderid\": \"063817\", \"sku\": \"BB71\", \"qty\": 2, \"unit_price\": 3.07}\n{\"orderid\": \"063817\", \"sku\": \"BB69\", \"qty\": 3, \"unit_price\": 3.68}\n{\"orderid\": \"031212\", \"sku\": \"BB71\", \"qty\": 3, \"unit_price\": 2.73}\n{\"orderid\": \"057109\", \"sku\": \"JA90\", \"qty\": 2, \"unit_price\": 3.25}\n{\"orderid\": \"057109\", \"sku\": \"BB69\", \"qty\": 3, \"unit_price\": 3.97}\n{\"orderid\": \"079880\", \"sku\": \"BB71\", \"qty\": 1, \"unit_price\": 3.27}\n{\"orderid\": \"079880\", \"sku\": \"BB69\", \"qty\": 4, \"unit_price\": 4.38}\n{\"orderid\": \"037446\", \"sku\": \"JA99\", \"qty\": 1, \"unit_price\": 2.66}\n{\"orderid\": \"037446\", \"sku\": \"JA16\", \"qty\": 5, \"unit_price\": 2.82}\n{\"orderid\": \"098773\", \"sku\": \"BB16\", \"qty\": 2, \"unit_price\": 2.96}\n{\"orderid\": \"098773\", \"sku\": \"BB71\", \"qty\": 1, \"unit_price\": 2.76}\n{\"orderid\": \"089123\", \"sku\": \"JA90\", \"qty\": 4, \"unit_price\": 3.5}\n{\"orderid\": \"089123\", \"sku\": \"BB71\", \"qty\": 1, \"unit_price\": 2.76}\n{\"orderid\": \"011462\", \"sku\": \"BB71\", \"qty\": 5, \"unit_price\": 2.7}\n{\"orderid\": \"049802\", \"sku\": \"JA90\", \"qty\": 3, \"unit_price\": 3.26}\n{\"orderid\": \"025822\", \"sku\": \"BB24\", \"qty\": 5, \"unit_price\": 3.15}\n{\"orderid\": \"025822\", \"sku\": \"BB93\", \"qty\": 2, \"unit_price\": 2.13}\n{\"orderid\": \"087410\", \"sku\": \"BB24\", \"qty\": 4, \"unit_price\": 3.12}\n{\"orderid\": \"036500\", \"sku\": \"JA37\", \"qty\": 2, \"unit_price\": 3.71}\n{\"orderid\": \"036500\", \"sku\": \"BB71\", \"qty\": 1, \"unit_price\": 2.74}\n{\"orderid\": \"044118\", \"sku\": \"BB69\", \"qty\": 3, \"unit_price\": 3.89}\n{\"orderid\": \"044118\", \"sku\": \"BB00\", \"qty\": 5, \"unit_price\": 2.85}\n{\"orderid\": \"066603\", \"sku\": \"BB24\", \"qty\": 3, \"unit_price\": 3.15}\n{\"orderid\": \"092120\", \"sku\": \"BB24\", \"qty\": 5, \"unit_price\": 2.96}\n{\"orderid\": \"076526\", \"sku\": \"BB24\", \"qty\": 3, \"unit_price\": 2.88}\n{\"orderid\": \"064231\", \"sku\": \"BB69\", \"qty\": 4, \"unit_price\": 3.86}\n{\"orderid\": \"055934\", \"sku\": \"BB93\", \"qty\": 1, \"unit_price\": 1.87}\n{\"orderid\": \"055934\", \"sku\": \"JA90\", \"qty\": 1, \"unit_price\": 3.34}\n{\"orderid\": \"077106\", \"sku\": \"BB71\", \"qty\": 2, \"unit_price\": 3.02}\n{\"orderid\": \"077106\", \"sku\": \"BB69\", \"qty\": 1, \"unit_price\": 3.64}\n{\"orderid\": \"097963\", \"sku\": \"JA90\", \"qty\": 5, \"unit_price\": 3.21}\n{\"orderid\": \"075469\", \"sku\": \"JA99\", \"qty\": 4, \"unit_price\": 2.98}\n{\"orderid\": \"075469\", \"sku\": \"JA37\", \"qty\": 2, \"unit_price\": 4.17}\n{\"orderid\": \"068829\", \"sku\": \"JA16\", \"qty\": 5, \"unit_price\": 2.71}\n{\"orderid\": \"081746\", \"sku\": \"BB71\", \"qty\": 1, \"unit_price\": 2.98}\n{\"orderid\": \"004662\", \"sku\": \"BB71\", \"qty\": 5, \"unit_price\": 2.91}\n{\"orderid\": \"004662\", \"sku\": \"JA16\", \"qty\": 5, \"unit_price\": 2.84}\n{\"orderid\": \"094509\", \"sku\": \"BB16\", \"qty\": 4, \"unit_price\": 2.79}\n{\"orderid\": \"094509\", \"sku\": \"JA37\", \"qty\": 3, \"unit_price\": 4.04}\n{\"orderid\": \"097515\", \"sku\": \"JA37\", \"qty\": 3, \"unit_price\": 3.96}\n{\"orderid\": \"097515\", \"sku\": \"JA99\", \"qty\": 1, \"unit_price\": 2.99}\n{\"orderid\": \"033968\", \"sku\": \"BB93\", \"qty\": 2, \"unit_price\": 1.77}\n{\"orderid\": \"012780\", \"sku\": \"BB16\", \"qty\": 3, \"unit_price\": 2.73}\n{\"orderid\": \"062432\", \"sku\": \"JA99\", \"qty\": 3, \"unit_price\": 3.04}\n{\"orderid\": \"062432\", \"sku\": \"BB24\", \"qty\": 1, \"unit_price\": 3.14}\n{\"orderid\": \"039027\", \"sku\": \"BB00\", \"qty\": 5, \"unit_price\": 2.88}\n{\"orderid\": \"039027\", \"sku\": \"BB69\", \"qty\": 1, \"unit_price\": 3.92}\n{\"orderid\": \"052835\", \"sku\": \"JA16\", \"qty\": 5, \"unit_price\": 2.79}\n{\"orderid\": \"052835\", \"sku\": \"BB93\", \"qty\": 4, \"unit_price\": 2.07}\n{\"orderid\": \"002866\", \"sku\": \"BB93\", \"qty\": 5, \"unit_price\": 2.1}\n{\"orderid\": \"099325\", \"sku\": \"BB24\", \"qty\": 3, \"unit_price\": 3.03}\n{\"orderid\": \"009471\", \"sku\": \"JA37\", \"qty\": 5, \"unit_price\": 3.98}\n{\"orderid\": \"009471\", \"sku\": \"BB71\", \"qty\": 4, \"unit_price\": 3.23}\n{\"orderid\": \"002389\", \"sku\": \"BB16\", \"qty\": 5, \"unit_price\": 3.01}\n{\"orderid\": \"002389\", \"sku\": \"JA99\", \"qty\": 2, \"unit_price\": 3.13}\n{\"orderid\": \"066589\", \"sku\": \"JA16\", \"qty\": 2, \"unit_price\": 3.22}\n{\"orderid\": \"006785\", \"sku\": \"BB69\", \"qty\": 1, \"unit_price\": 3.76}\n{\"orderid\": \"056248\", \"sku\": \"JA99\", \"qty\": 2, \"unit_price\": 3.02}\n{\"orderid\": \"056248\", \"sku\": \"BB16\", \"qty\": 2, \"unit_price\": 2.81}\n{\"orderid\": \"004127\", \"sku\": \"JA90\", \"qty\": 5, \"unit_price\": 3.23}\n{\"orderid\": \"004127\", \"sku\": \"BB16\", \"qty\": 1, \"unit_price\": 2.72}\n{\"orderid\": \"067171\", \"sku\": \"JA90\", \"qty\": 5, \"unit_price\": 3.66}\n{\"orderid\": \"067171\", \"sku\": \"JA37\", \"qty\": 1, \"unit_price\": 3.66}\n{\"orderid\": \"075297\", \"sku\": \"BB00\", \"qty\": 2, \"unit_price\": 2.68}\n{\"orderid\": \"075297\", \"sku\": \"BB69\", \"qty\": 5, \"unit_price\": 3.96}\n{\"orderid\": \"082870\", \"sku\": \"JA16\", \"qty\": 3, \"unit_price\": 3.11}\n{\"orderid\": \"082870\", \"sku\": \"JA90\", \"qty\": 5, \"unit_price\": 3.74}\n{\"orderid\": \"092131\", \"sku\": \"BB71\", \"qty\": 5, \"unit_price\": 2.94}\n{\"orderid\": \"092131\", \"sku\": \"BB24\", \"qty\": 1, \"unit_price\": 2.69}\n{\"orderid\": \"088945\", \"sku\": \"BB93\", \"qty\": 2, \"unit_price\": 1.89}\n{\"orderid\": \"078360\", \"sku\": \"JA37\", \"qty\": 3, \"unit_price\": 3.92}\n{\"orderid\": \"006452\", \"sku\": \"BB16\", \"qty\": 2, \"unit_price\": 3.02}\n{\"orderid\": \"006452\", \"sku\": \"JA99\", \"qty\": 2, \"unit_price\": 2.98}\n{\"orderid\": \"004410\", \"sku\": \"JA37\", \"qty\": 5, \"unit_price\": 3.72}\n{\"orderid\": \"004410\", \"sku\": \"JA16\", \"qty\": 4, \"unit_price\": 2.88}\n{\"orderid\": \"018316\", \"sku\": \"BB71\", \"qty\": 3, \"unit_price\": 2.89}\n{\"orderid\": \"020066\", \"sku\": \"BB69\", \"qty\": 4, \"unit_price\": 4.27}\n{\"orderid\": \"041972\", \"sku\": \"BB24\", \"qty\": 1, \"unit_price\": 3.11}\n{\"orderid\": \"006193\", \"sku\": \"JA90\", \"qty\": 1, \"unit_price\": 3.84}\n{\"orderid\": \"005892\", \"sku\": \"JA90\", \"qty\": 5, \"unit_price\": 3.53}\n{\"orderid\": \"043322\", \"sku\": \"BB69\", \"qty\": 1, \"unit_price\": 4.21}\n{\"orderid\": \"043322\", \"sku\": \"JA16\", \"qty\": 3, \"unit_price\": 3.27}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/golden/unselect-regex.tsv",
    "content": "customerid\tname\taddress\tbirthdate\tphone\ttimezone\tlat\tlong\tlocale\n1008\t高橋 くみ子\t熊本県川崎市宮前区丹勢16丁目8番15号 コーポ鶴ヶ丘724\t1966-08-14\t38-8514-1974\tEurope/Minsk\t36.53333\t136.61667\tja_JP\n1018\tJustin Morris\t95274 Ricardo Pines\nNorth Taylormouth, VA 06352\t1984-05-11\t597.052.2346x63522\tEurope/Ljubljana\t32.9156\t-117.14392\ten_US\n1022\tMaitê Rodrigues\tCampo Nathan Cunha, 92\nVila Atila De Paiva\n03920997 Cavalcanti do Campo / CE\t\t(021) 9298 6896\tEurope/Andorra\t-12.91667\t-39.25\tpt_BR\n1048\tRonald Ramirez\t2858 Francisco Prairie Apt. 289\nPort Brenda, ME 70743\t1981-05-06\t+1-121-296-3014x5029\tEurope/Riga\t38.06084\t-97.92977\ten_US\n1056\tSherri Gonzalez\tPSC 5573, Box 1138\nAPO AA 11320\t2003-08-17\t844-462-7381x6305\tEurope/Amsterdam\t29.65163\t-82.32483\ten_US\n1060\tAna Beatriz Jesus\tColônia de da Mota, 16\nInconfidência\n13740-031 da Cruz de da Rosa / TO\t1973-11-23\t(084) 7174 7621\tEurope/Zagreb\t-8.05389\t-34.88111\tpt_BR\n1063\tRichard Green\tUnit 3733 Box 6473\nDPO AA 82378\t1965-10-01\t095.243.7787x7493\tEurope/Monaco\t43.1009\t-75.23266\ten_US\n1065\tпані Єлисавета Цюцюра\tшосе Вокзальний, буд. 36, Тальне, 28056\t1998-01-13\t063 70 83\tEurope/Helsinki\t49.65186\t26.97253\tuk_UA\n1070\tУстим Адамчук\tвулиця Думська, буд. 55 кв. 592, Броди, 58888\t1984-12-06\t035 868-81-34\tEurope/Kiev\t49.65186\t26.97253\tuk_UA\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/golden/unselect.jsonl",
    "content": "{\"orderid\": \"038385\", \"sku\": \"BB71\", \"qty\": 4, \"unit_price\": 3.12}\n{\"orderid\": \"038385\", \"sku\": \"JA99\", \"qty\": 4, \"unit_price\": 3.22}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/scoop.vdj",
    "content": "#!/usr/bin/env vd -p\n{\"longname\": \"open-file\", \"input\": \"tests/business.sqlite\", \"keystrokes\": \"o\"}\n{\"sheet\": \"business\", \"col\": \"\", \"row\": \"\\u30adorder_items\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet with copies of rows referenced in current row\"}\n{\"sheet\": \"order_items\", \"col\": \"qty\", \"row\": \"0\", \"longname\": \"select-equal-cell\", \"input\": \"\", \"keystrokes\": \",\", \"comment\": \"select rows matching current cell in current column\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\", \"longname\": \"dup-selected\", \"input\": \"\", \"keystrokes\": \"\\\"\", \"comment\": \"open duplicate sheet with selected rows (default limit)\"}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/select-col-regex.vdj",
    "content": "#!/usr/bin/env vd -p\n{\"longname\": \"open-file\", \"input\": \"tests/business.sqlite\", \"keystrokes\": \"o\"}\n{\"sheet\": \"business\", \"col\": \"\", \"row\": \"\\u30adproducts\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet with copies of rows referenced in current row\"}\n{\"sheet\": \"products\", \"col\": \"desc\", \"row\": \"\", \"longname\": \"select-col-regex\", \"input\": \"Auto\", \"comment\": \"select rows matching regex in current column\"}\n{\"sheet\": \"products\", \"col\": \"\", \"row\": \"\", \"longname\": \"dup-selected\", \"input\": \"\", \"keystrokes\": \"\\\"\", \"comment\": \"open duplicate sheet with selected rows (default limit)\"}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/select-expr-cast-type.vdj",
    "content": "#!vd -p\n{\"longname\": \"open-file\", \"input\": \"tests/business.sqlite\", \"keystrokes\": \"o\"}\n{\"sheet\": \"business\", \"col\": \"\", \"row\": \"\\u30adorder_items\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open current row with sheet-specific dive\"}\n{\"sheet\": \"order_items\", \"col\": \"orderid\", \"row\": \"\", \"longname\": \"type-int\", \"input\": \"\", \"keystrokes\": \"#\", \"comment\": \"set type of current column to int\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-expr\", \"input\": \"orderid < 30000\", \"keystrokes\": \"z|\", \"comment\": \"select rows matching Python expression in any visible column\"}\n{\"sheet\": \"order_items\", \"longname\": \"dup-selected\"}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/select-expr.vdj",
    "content": "{\"col\": \"\", \"row\": \"\", \"longname\": \"open-file\", \"input\": \"tests/business.sqlite\", \"keystrokes\": \"o\"}\n{\"sheet\": \"business\", \"col\": \"\", \"row\": \"\\u30adorder_items\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet with copies of rows referenced in current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\", \"longname\": \"select-expr\", \"input\": \"qty <= 3\", \"keystrokes\": \"z|\", \"comment\": \"select rows matching Python expression in any visible column\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\", \"longname\": \"dup-selected\", \"input\": \"\", \"keystrokes\": \"\\\"\", \"comment\": \"open duplicate sheet with selected rows (default limit)\"}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/select-row-dup.vdj",
    "content": "#!/usr/bin/env vd -p\n{\"longname\": \"open-file\", \"input\": \"tests/business.sqlite\", \"keystrokes\": \"o\"}\n{\"sheet\": \"business\", \"col\": \"\", \"row\": \"\\u30adorder_items\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet with copies of rows referenced in current row\"}\n{\"sheet\": \"order_items\", \"col\": \"orderid\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"toggle current column as a key column\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad038385\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad038385\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\", \"longname\": \"dup-selected\", \"input\": \"\", \"keystrokes\": \"\\\"\", \"comment\": \"open duplicate sheet with selected rows (default limit)\"}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/toggle.vdj",
    "content": "#!/usr/bin/env vd -p\n{\"longname\": \"open-file\", \"input\": \"tests/business.sqlite\", \"keystrokes\": \"o\"}\n{\"sheet\": \"business\", \"col\": \"\", \"row\": \"\\u30adorder_items\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet with copies of rows referenced in current row\"}\n{\"sheet\": \"order_items\", \"col\": \"orderid\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"toggle current column as a key column\"}\n{\"sheet\": \"order_items\", \"col\": \"sku\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"toggle current column as a key column\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad038385,BB71\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad038385,JA99\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad023041,JA16\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad048629,BB00\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad056953,JA37\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad091022,JA99\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad065473,JA90\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad065473,BB00\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad043182,BB16\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad059776,BB00\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad059776,BB16\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad062266,JA99\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad062266,JA90\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad012921,BB93\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad014345,BB71\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad014345,BB69\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad063457,BB71\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad063457,BB00\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\", \"longname\": \"stoggle-rows\", \"input\": \"\", \"keystrokes\": \"gt\", \"comment\": \"select rows matching current cell in current column\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\", \"longname\": \"dup-selected\", \"input\": \"\", \"keystrokes\": \"\\\"\", \"comment\": \"open duplicate sheet with selected rows (default limit)\"}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/unselect-regex.vdj",
    "content": "#!vd -p\n{\"longname\": \"open-file\", \"input\": \"tests/business.sqlite\", \"keystrokes\": \"o\"}\n{\"sheet\": \"business\", \"col\": \"\", \"row\": \"\\u30adcustomers\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open current row with sheet-specific dive\"}\n{\"sheet\": \"customers\", \"col\": \"timezone\", \"row\": \"\", \"longname\": \"select-col-regex\", \"input\": \"Europe\", \"keystrokes\": \"|\", \"comment\": \"select rows matching regex in current column\"}\n{\"sheet\": \"customers\", \"col\": \"timezone\", \"row\": \"\", \"longname\": \"unselect-col-regex\", \"input\": \"Minsk\", \"keystrokes\": \"\\\\\", \"comment\": \"unselect rows matching regex in current column\"}\n{\"sheet\": \"customers\", \"col\": \"\", \"row\": \"\", \"longname\": \"dup-selected\", \"input\": \"\", \"keystrokes\": \"\\\"\", \"comment\": \"open duplicate sheet with selected rows (default limit)\"}\n"
  },
  {
    "path": "visidata/apps/vdsql/tests/unselect.vdj",
    "content": "#!/usr/bin/env vd -p\n{\"longname\": \"open-file\", \"input\": \"tests/business.sqlite\", \"keystrokes\": \"o\"}\n{\"sheet\": \"business\", \"col\": \"\", \"row\": \"\\u30adorder_items\", \"longname\": \"open-row\", \"input\": \"\", \"keystrokes\": \"Enter\", \"comment\": \"open sheet with copies of rows referenced in current row\"}\n{\"sheet\": \"order_items\", \"col\": \"orderid\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"toggle current column as a key column\"}\n{\"sheet\": \"order_items\", \"col\": \"sku\", \"row\": \"\", \"longname\": \"key-col\", \"input\": \"\", \"keystrokes\": \"!\", \"comment\": \"toggle current column as a key column\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad038385,BB71\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad038385,JA99\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad023041,JA16\", \"longname\": \"select-row\", \"input\": \"\", \"keystrokes\": \"s\", \"comment\": \"select current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\\u30ad023041,JA16\", \"longname\": \"unselect-row\", \"input\": \"\", \"keystrokes\": \"u\", \"comment\": \"unselect current row\"}\n{\"sheet\": \"order_items\", \"col\": \"\", \"row\": \"\", \"longname\": \"dup-selected\", \"input\": \"\", \"keystrokes\": \"\\\"\", \"comment\": \"open duplicate sheet with selected rows (default limit)\"}\n"
  },
  {
    "path": "visidata/apps/vdsql/vdsql",
    "content": "#!/usr/bin/env python3\n\nimport sys\nfrom visidata.apps.vdsql.__main__ import main\n\nif __name__ == '__main__':\n  rc = main()\n  sys.exit(rc)\n"
  },
  {
    "path": "visidata/apps/vgit/CHANGELOG.md",
    "content": "# CHANGELOG\n\n## 0.4\n\n- opening page:\n  - GitStatus if vgit run in/on worktree with .git at toplevel\n  - GitOverview with any descendent .gits\n  - currently does not open GitStatus worktree below toplevel\n-  unbind ignore-file and ignore-wildcard\n- g/ from anywhere does 'git grep'.\n  - ENTER to go to git blame (needs love),\n  - ^O to open in $EDITOR\n- \n## 0.3\n\n\n- log all git commands which vgit executes to gitcmd.log\n- git log sheet\n    - `Shift-C` amends the selected commit to contain the currently staged changes\n    - `r` resets the shown branch HEAD to the selected commit\n\n## v0.2 (2017-08-23)\n- vgit auto pushes a full sheet of statuses if the status is more than 3 lines\n- add async to some git commands\n- global keystrokes\n    - `R` pushes the remotes sheet\n    - `P`ushes the local refs to the currently set remote refs\n    - `X` pushes the list of git commands executed\n    - `H` pushes the git log sheet (history) for the current branch\n    - `Ctrl-s`tashes uncommitted changes\n    - `Ctrl-p`ops the most recent stashed change and drops it\n    - `A`bort the current in-progress action\n    - `T` pushes the stashes sheet\n    - `L` pushes the blame sheet\n- git status sheet\n    - provides information about the working tree\n    - `r` to unstage a file (instead of `w`)\n    - `i` to add a file to toplevel .gitignore\n   - `gi` to add an input line to toplevel .gitignore\n   - `V` opens selected file\n   - `g<ENTER>` pushes hunks sheet for selected files (or all files, if none selected)\n   - `z<ENTER>` pushes hunks sheet for the staged diffs for the selected file\n   - `zg<ENTER>` pushes hunks sheet for the staged diffs for selected files (or all files, if none selected)\n- git branches sheet\n    - displays information about branches and enables their modification\n    - add upstream diff column\n    - add `merge_base` column\n    - `m`erge the selected branch into the current branch\n    - `e` renames a branch\n    - `<ENTER>` pushes the log sheet of the selected branch\n- git stashes sheet\n    - allows viewing of current stashed commits\n    - `<ENTER>` shows the selected stashed change\n    - `a`pplies a stashed change without removing it from the stash\n    - `Ctrl-p` applies a stashed change and drops it\n    - `d`rops a stashed change\n    - `b` creates a new branch from the stashed change\n- git log sheet\n    - allows viewing of the git commit history for the selected branch\n    - `c` cherry-picks the selected commit onto the current branch\n    - `<ENTER>` shows the diff for the selected commit\n- hunks sheet\n    - allows the viewing of hunks for a file (pieces of diffs)\n    - `V`iew the raw patch for this hunk\n    - `d` or `r` undo this hunk\n- diff viewer for selected hunks sheet\n    - opens a view for the diff of a hunk\n    - `y`, `a` or `2` stage a hunk to the index and move on to the next hunk\n    - `r` or `1` remove this hunk from the diff\n    - `n` or `<ENTER>`to skip this hunk without staging\n    - `d` deletes a line from a patch\n- git options sheet\n    - for editing git configuration\n    - `d` unsets this config value\n    - `gd` unsets all selected config values\n    - `ge` edits this option for all selected rows\n    - `a`dd new option\n- git remotes sheet\n    - allows viewing and managing of remote urls\n    - `d`elete remote\n    - `a`dd new remote\n\n## v0.1 (2017-08-02) -- Initial Release\n- git status sheet\n    - provides information about the working tree\n    - `a` to stage a file for addition\n    - `m` to rename a file\n    - `d` to stage a file for deletion\n    - `w` to unstage a file\n    - `c` to checkout a file\n    - `C` to commit all staged changes\n    - `ga`/`gd` adds/removes all selected files\n    - `g/` performs a search through all files\n    - `ENTER` pushes a hunks sheet for a file\n    - `x` execute an arbitrary git command\n    - `f` will add a --force flag to the next git command\n    - `B` pushes the git branches sheet\n    - `O` pushes the git options sheet\n- hunks sheet\n    - allows the viewing of hunks for a file (pieces of diffs)\n    - `ENTER` on a hunk allows the viewing of its diffs\n    - `gENTER` allows the viewing of diffs for all of the selected hunks (or all hunks, if none selected)\n    - `a` stages a hunk\n- diff viewer for selected hunks sheet\n    - opens a view for the diff of a hunk\n    - `a` to stage a hunk\n    - `ENTER` to skip this hunk without staging\n    - viewer exits when all hunks have been added or skipped\n- git branches sheet\n    - displays information about branches and enables their modification\n    - `c` to checkout a branch\n    - `a` to create a new branch\n    - `d` to remove a branch\n- git options sheet\n    - for editing git configuration\n    - `e` to edit an option\n"
  },
  {
    "path": "visidata/apps/vgit/README.md",
    "content": "# vgit\n\n## latest version: v0.2-dev (2018-12-xx)\n\nvgit is a [VisiData package](https://visidata.org) that provides a sleek terminal user interface to git, supplanting the arcana of git command-line operations with intuitive keystroke commands.\n\nCurrent features include:\n- viewing, stashing, staging, unstaging, and committing of diff hunks.\n- viewing the git log (history)\n- branch and remotes management\n- branch merges and commit cherry-picks\n- popping, applying, and dropping of stashed diffs\n- setting of local and global git config options\n\n## Installing vgit\n\nvgit is located as a module within the [VisiData repo](https://github.com/saulpw/visidata/tree/develop/visidata/apps/vgit). It has its own setup.py. Note that installing vgit will also install VisiData.\n\n```\npip install git+https://github.com/saulpw/visidata.git@branch#subdirectory=visidata/apps/vgit\n```\n\n### Dependencies\n\n- Python 3.8+\n- [VisiData](https://visidata.org/)\n- [sh](https://github.com/saulpw/sh)\n\n## Running vgit\n\n`vgit [<working_dir>]` automatically opens a git status [sheet](https://www.visidata.org/docs/api/sheets#sheets) if the directory has a `.git` subdirectory.\n\nFurther documentation is available [here](vgit-guide.md).\n\n## License\n\nvgit is released under a GPLv3 license.\n"
  },
  {
    "path": "visidata/apps/vgit/USECASES.md",
    "content": "\nFor each use case:\n\na) get it working\nb) add menu items\nc) help string for all sheets and columns and options and commands\nd) test case\ne) screenshot\nf) brag tweet\n\n# 0. vgit passthrough\n\n+ any unknown command just acts exactly like git\n\n# 1. vgit grep\n\n+ launches vd interface to list of all matches \n+ can press Ctrl+O to open file at that location.\n- g Enter to launch vim/$EDITOR with hotlist\n\n# 3. vgit config\n\n- add new config value\n+ edit config value\n+ unset config value\n\n\n# 2. vgit branch\n\n+ view branches incl metadata (last commit)\n- checkout branch\n- create branch\n- delete branch\n- rename branch\n- go to log\n\n# 4. vgit log\n\n- freq on contributor\n  - sum on nlines diff\n- show commit\n- cherry-pick to current branch\n- reset to this commit\n- checkout this commit\n- revert commit\n- drop commit and rebase\n- copy SHA to system clipboard\n\n- edit commit message like vgit amend\n\n# 5. vgit blame\n+ basic sheet\n- combo with vgit grep somehow?\n\n# 6. vgit stash\n\n- view/apply/pop a specific stash item\n- change stash item message\n- see stash in sidebar as scrolling by\n- create new branch from stashed change?\n\n# 7. toplevel `g Ctrl+?` to reset current checkout to known state\n- branch HEAD\n- no diffs in any files\n- not merging, not fixing conflicts\n- not bisecting, etc\n\n# 8. vgit status\n\n- move files between staging/unstaged\n- delete file 'd'\n- rename file 'd'\n- drop changes 'zd'\n- see diff hunks for one/selected files\n- zCtrl+S -> commit changes\n- remove ignore-file and ignore-wildcard\n- edit file\n\n# 9. vgit repos\n\n+ show all repos at a glance\n\n# 10. vgit remote\n\n+ add remote\n+ delete remote\n+ rename remote\n+ edit remote url\n\n# 10. vgit amend\n\n- edit file, add hunk to much older commit\n  - or commit message\n- rebase later commits on top of new/old commit\n- warn if already pushed\n- test for various starting states, that all else gets saved/restored properly\n\n# 11. vgit diff\n\n+ git diff hunks\n- show diff between committed, staged, unstaged\n+ add/remove hunks in staged/unstaged\n- diff between two commits\n\n# . wow\n\n- find all commits that added/changed only one line of code\n   - and that have \"#1234\" in the commit message\n- append appropriate \"#1234\" to each line of code\n- see list of diffs\n- commit\n\n# schedule for removal\n\n- vgit merge\n\n# testing vgit\n\n- have test repo with basic content\n- do vgit commands\n  - for some, check that contents of repo are correct (external fs state)\n  - for others, check that output of last sheet is correct (internal vd state)\n\n# needed visidata features\n\n- rebind key on some sheets without unbinding it for the rest of visidata\n\n"
  },
  {
    "path": "visidata/apps/vgit/__init__.py",
    "content": "from . import abort, statusbar\nfrom . import (\n    grep,\n    config,\n    branch,\n    remote,\n    blame,\n    status,\n    log,\n    diff,\n    stash,\n    repos,\n)\n"
  },
  {
    "path": "visidata/apps/vgit/__main__.py",
    "content": "from .main import vgit_cli\n\nvgit_cli()\n"
  },
  {
    "path": "visidata/apps/vgit/abort.py",
    "content": "from visidata import vd, Menu\nfrom .gitsheet import GitSheet\n\n\n@GitSheet.api\ndef abortWhatever(sheet):\n    inp = sheet.gitInProgress()\n    if inp.startswith('cherry-pick'):\n        sheet.modifyGit('cherry-pick', '--abort')\n    elif inp.startswith('merg'):\n        sheet.modifyGit('merge', '--abort')\n    elif inp.startswith('bisect'):\n        sheet.modifyGit('bisect', 'reset')\n    elif inp.startswith('rebas') or inp.startswith('apply'):\n        sheet.modifyGit('rebase', '--abort')  # or --quit?\n    else:\n        vd.status('nothing to abort')\n\n\nGitSheet.addCommand('Ctrl+A', 'git-abort', 'abortWhatever()', 'abort the current in-progress action')\n\n\nvd.addMenuItems('Git > Abort > git-abort')\n"
  },
  {
    "path": "visidata/apps/vgit/blame.py",
    "content": "from visidata import vd, Column, VisiData, ItemColumn, Path, AttrDict, date\n\nfrom .gitsheet import GitSheet\n\n\n@VisiData.api\ndef git_blame(vd, gitpath, args, **kwargs):\n    if args and not args[-1].startswith('-'):\n        fn = args[-1]\n        return GitBlame('blame', fn, source=Path(fn), **kwargs)\n\n\nclass FormatColumn(Column):\n    def calcValue(self, row):\n        return self.expr.format(**row)\n\n\n# rowdef: (hdr, orig_linenum, linenum, line)\n#   hdr = { 'sha': .., 'orig_linenum': .., 'final_linenum': .. }\n# source = GitSheet; .gitfile=GitFile\nclass GitBlame(GitSheet):\n    rowtype = 'lines'\n    guide = '''\n        # git blame\n    '''\n    columns = [\n        ItemColumn('sha', width=0),\n        ItemColumn('orig_linenum', width=0, type=int),\n        ItemColumn('final_linenum', width=0, type=int),\n        ItemColumn('author', width=15),\n        ItemColumn('author_time', width=13, type=date),\n        FormatColumn('committer', width=0, expr='{committer} {committer_mail}'),\n        ItemColumn('committer_time', width=0, type=date),\n        ItemColumn('linenum', width=6, type=int),\n        ItemColumn('line', width=72),\n    ]\n\n    def iterload(self):\n        lines = list(self.git_lines('blame', '--porcelain', str(self.source)))\n        i = 0\n        headers = {}  # [sha1] -> hdr\n        while i < len(lines):\n            # header\n            parts = lines[i].split()\n            sha, orig, final = parts[:3]\n            if len(parts) > 3:\n                nlines_this_group = parts[3]\n\n            if sha not in headers:\n                hdr = AttrDict(sha=sha, orig_linenum=orig, final_linenum=final)\n                headers[sha] = hdr\n            else:\n                hdr = headers[sha]\n\n            while lines[i][0] != '\\t':\n                try:\n                    k, v = lines[i].split(maxsplit=1)\n                    k = k.replace('-', '_')\n                    if '_time' in k:\n                        v = int(v)\n                    hdr[k] = v\n                except Exception:\n                    vd.status(lines[i])\n                i += 1\n\n            yield AttrDict(\n                linenum=final,\n                line=lines[i][1:],\n                **hdr\n            )\n            i += 1\n\n\n#GitBlame.addCommand('Enter', 'diff-line', 'openDiff(str(gitfile), cursorRow[0][\"sha\"]+\"^\", cursorRow[0][\"sha\"])', 'open diff of the commit when this line changed')\n\n#GitStatus.addCommand(None, 'git-blame', 'vd.push(GitBlame(cursorRow, source=sheet))', 'push blame for this file')\n"
  },
  {
    "path": "visidata/apps/vgit/branch.py",
    "content": "import re\n\nfrom visidata import vd, WritableColumn, VisiData, ItemColumn, AttrColumn, Path, AttrDict, RowColorizer, date, Progress\n\nfrom .gitsheet import GitSheet\n\nvd.theme_option('color_git_current_branch', 'underline', 'color of current branch on branches sheet')\nvd.theme_option('color_git_remote_branch', 'cyan', 'color of remote branches on branches sheet')\n\n\n@VisiData.api\ndef git_branch(vd, p, args):\n    nonListArgs = '--track --no-track --set-upstream-to -u --unset-upstream -m -M -c -C -d -D --edit-description'.split()\n    if any(x in args for x in nonListArgs):\n        return\n\n    return GitBranch('git-branch-list', source=p, git_args=args)\n\n\ndef _remove_prefix(text, prefix):\n    if text.startswith(prefix):\n        return text[len(prefix):]\n    return text\n\n\nclass GitBranchNameColumn(WritableColumn):\n    def calcValue(self, row):\n        return _remove_prefix(row.localbranch, 'remotes/')\n\n    def putValue(self, row, val):\n        self.sheet.loggit('branch', '-v', '--move', row.localbranch, val)\n\n\nclass GitBranch(GitSheet):\n    guide = '''\n        # git branch\n        List of all branches, including relevant metadata.\n\n        - `d` to mark a branch for deletion\n        - `e` on the _branch_ column to rename the branch\n        - `z Ctrl+S` to commit changes\n    '''\n    defer = True\n    rowtype = 'branches'  # rowdef: AttrDict from regex (in reload below)\n    columns = [\n        GitBranchNameColumn('branch', width=20),\n#        Column('remote', getter=lambda c,r: r['localbranch'].startswith('remotes/') and '*' or '', width=3),\n        ItemColumn('head_commitid', 'refid', width=0),\n        ItemColumn('tracking', 'remotebranch'),\n        ItemColumn('upstream'),\n        ItemColumn('merge_base', 'merge_name', width=20),\n        ItemColumn('extra', width=0),\n        ItemColumn('head_commitmsg', 'msg', width=50),\n        ItemColumn('last_commit', type=date),\n        ItemColumn('last_author'),\n    ]\n    colorizers = [\n        RowColorizer(10, 'color_git_current_branch', lambda s,c,r,v: r and r['current']),\n        RowColorizer(10, 'color_git_remote_branch', lambda s,c,r,v: r and r['localbranch'].startswith('remotes/')),\n    ]\n    nKeys = 1\n\n    def iterload(self):\n        branches_lines = self.git_lines(\n            'branch',\n            '--list',\n            '--format',\n            ' '.join((\n                '%(if)%(symref)%(then)yes%(else)no%(end)',\n                '%(HEAD) %(refname:short) %(objectname:short)',\n                '%(if)%(upstream)%(then)[%(upstream:short)',\n                '%(if)%(upstream:track)%(then): %(upstream:track,nobracket)%(end)]',\n                '%(end)',\n                '%(contents:subject)'\n            )),\n            '-vv',\n            '--no-color',\n            *self.git_args)\n\n        for line in branches_lines:\n            m = re.match(r'''(?P<is_symref>(yes|no)?)\\s+\n                             (?P<current>\\*?)\\s+\n                             (?P<localbranch>\\S+)\\s+\n                             (?P<refid>\\w+)\\s+\n                             (?:\\[\n                               (?P<remotebranch>[^\\s\\]:]+):?\n                               \\s*(?P<extra>.*?)\n                             \\])?\n                             \\s*(?P<msg>.*)''', line, re.VERBOSE)\n            if not m:\n                continue\n            branch_details = AttrDict(m.groupdict())\n            if branch_details.is_symref == 'yes':\n                continue\n            yield branch_details\n\n        branch_stats = self.gitRootSheet.gitBranchStatuses\n        for row in Progress(self.rows):\n            merge_base = self.git_all(\"show-branch\", \"--merge-base\", row.localbranch, self.gitRootSheet.branch, _ok_code=[0,1]).strip()\n            row.update(dict(\n                merge_name = self.git_all(\"name-rev\", \"--name-only\", merge_base).strip() if merge_base else '',\n                upstream = branch_stats.get(row.localbranch),\n                last_commit = self.git_all(\"show\", \"--no-patch\", '--pretty=%ai', row.localbranch).strip(),\n                last_author = self.git_all(\"show\", \"--no-patch\", '--pretty=%an', row.localbranch).strip()\n            ))\n\n    def commitAddRow(self, row):\n        self.loggit('branch', row.localbranch)\n\n    def commitDeleteRow(self, row):\n        self.loggit('branch', '--delete', _remove_prefix(row.localbranch, 'remotes/'))\n\n\n@GitSheet.lazy_property\ndef gitBranchStatuses(sheet):\n    ret = {}  # localbranchname -> \"+5/-2\"\n    for branch_status in sheet.git_lines('for-each-ref', '--format=%(refname:short) %(upstream:short) %(upstream:track)', 'refs/heads'):\n        m = re.search(r'''(\\S+)\\s*\n                          (\\S+)?\\s*\n                          (\\[\n                          (ahead.(\\d+)),?\\s*\n                          (behind.(\\d+))?\n                          \\])?''', branch_status, re.VERBOSE)\n        if not m:\n            vd.status('unmatched branch status: ' + branch_status)\n            continue\n\n        localb, remoteb, _, _, nahead, _, nbehind = m.groups()\n        if nahead:\n            r = '+%s' % nahead\n        else:\n            r = ''\n        if nbehind:\n            if r:\n                r += '/'\n            r += '-%s' % nbehind\n        ret[localb] = r\n\n    return ret\n\n\nGitSheet.addCommand('', 'git-open-branches', 'vd.push(git_branch(source, []))', 'push branches sheet')\nGitSheet.addCommand('', 'git-branch-create', 'git(\"branch\", input(\"create branch: \", type=\"branch\"))', 'create a new branch off the current checkout')\nGitBranch.addCommand('', 'git-branch-checkout', 'git(\"checkout\", cursorRow.localbranch)', 'checkout this branch')\n\n\nvd.addMenuItems('''\n    Git > Branch > add > git-branch-create\n    Git > Branch > delete > git-branch-delete\n    Git > Branch > rename > git-branch-rename\n    Git > Branch > checkout > git-branch-checkout\n    Git > Open > branches > git-open-branches\n''')\n"
  },
  {
    "path": "visidata/apps/vgit/config.py",
    "content": "from itertools import islice\n\nfrom visidata import vd, Column, VisiData, ItemColumn, AttrColumn, Path, AttrDict\n\nfrom .gitsheet import GitSheet\n\n\nCONFIG_CONTEXTS = ('local', 'global', 'system')\n\n@VisiData.api\ndef git_config(vd, p, args):\n    if not args or '-l' in args:\n        return GitConfig('git-config', source=p)\n\nvd.git_options = vd.git_config\n\ndef batched(iterable, n=1):\n    \"Batch data into tuples of length n. The last batch may be shorter.\"\n    # batched('ABCDEFG', 3) --> ABC DEF G\n    assert n >= 1, 'n must be at least one'\n\n    while (batch := tuple(islice(iter(iterable), n))):\n        yield batch\n\n\nclass GitConfigColumn(Column):\n    def calcValue(self, row):\n        return row.get(self.expr)\n\n    def putValue(self, row, val):\n        if val is None:\n            self.sheet.loggit('config', '--unset', '--'+self.expr, row['option'])\n        else:\n            self.sheet.loggit('config', '--'+self.expr, row['option'], val)\n\n        row[self.expr] = val\n\n\nclass GitConfig(GitSheet):\n    guide = '''\n        # git config\n        Add, edit, or delete git config options.\n\n        - Make changes using standard commands like `a`dd and `e`dit\n        - `z Ctrl+S` to commit changes to git config file.\n    '''\n    rowtype = 'git options'  # rowdef: [scope, origin, opt, val]\n    defer = True\n    columns = [\n        ItemColumn('option', width=20),\n    ]\n    nKeys = 1\n\n    def iterload(self):\n        cmd = self.git_iter('config', '--list', '--show-scope', '--show-origin', '-z')\n        self.gitopts = {}\n        scopes = {c.name:c for c in self.columns}\n        for row in batched(cmd, 3):\n            if len(row) < 3:\n                break\n\n            scope, origin, optval = row\n            opt, val = optval.split('\\n', 1)\n\n            if opt in self.gitopts:\n                r = self.gitopts[opt]\n            else:\n                r = AttrDict(option=opt)\n                self.gitopts[opt] = r\n                yield r\n\n            r[scope] = val\n\n            if scope not in scopes:\n                c = GitConfigColumn(scope, expr=scope)\n                self.addColumn(c)\n                scopes[scope] = c\n\n    def commitDeleteRow(self, row):\n        for k in CONFIG_CONTEXTS:\n            if row.get(k):\n                self.loggit('config', '--unset', '--'+k, row['option'])\n\n    def commitAddRow(self, row):\n        for k in CONFIG_CONTEXTS:\n            if row.get(k):\n                self.loggit('config', '--add', '--'+k, row['option'], row.get(k))\n\n\nGitSheet.addCommand('gO', 'git-config', 'vd.push(GitConfig(\"git_config\", source=Path(\".\")))', 'push sheet of git options')\n\n\nvd.addMenuItems('''\n    Git > Config > git-config\n''')\n"
  },
  {
    "path": "visidata/apps/vgit/diff.py",
    "content": "from visidata import vd, VisiData, ItemColumn, RowColorizer, AttrDict, Column\n\nfrom .gitsheet import GitSheet\n\nvd.option('git_diff_algo', 'minimal', 'algorithm to use for git diff')\nvd.theme_option('color_git_hunk_add', 'green', 'color for added hunk lines')\nvd.theme_option('color_git_hunk_del', 'red', 'color for deleted hunk lines')\nvd.theme_option('color_git_hunk_diff', 'yellow', 'color for hunk diffs')\n\n@VisiData.api\ndef git_diff(vd, p, args):\n    return GitDiffSheet('git-diff', source=p, gitargs=args)\n\ndef _parseStartCount(s):\n    sc = s.split(',')\n    if len(sc) == 2:\n        return sc\n    if len(sc) == 1:\n        return sc[0], 1\n\n\nclass GitDiffSheet(GitSheet):\n    columns = [\n        ItemColumn('a_fn', width=0),\n        ItemColumn('fn', 'b_fn', width=30, hoffset=-28),\n        ItemColumn('a_lineno', type=int, width=0),\n        ItemColumn('lineno', 'b_lineno', type=int, width=8),\n        Column('count', width=10, getter=lambda c,r: c.sheet.hunkCount(r)),\n        ItemColumn('context'),\n        ItemColumn('lines', type=''.join),\n    ]\n\n    guide = '''# {sheet.cursorRow.a_fn}\n{sheet.cursorLines}'''\n\n    def hunkCount(self, row):\n        return f'-{row.a_count}/+{row.b_count}'\n\n    @property\n    def cursorLines(self):\n        r = ''\n        for line in self.cursorRow.lines[2:]:\n            if line.startswith('-'):\n                line = '[:git_hunk_del]' + line + '[/]'\n            elif line.startswith('+'):\n                line = '[:git_hunk_add]' + line + '[/]'\n\n            r += line + '\\n'\n        r = r[4:]\n        return r\n\n    def iterload(self):\n        current_hunk = None\n\n        for line in self.git_lines('diff --patch --inter-hunk-context=2 --find-renames --no-color --no-prefix', *self.gitargs):\n            if line.startswith('diff'):\n                diff_started = True\n                continue\n            if not diff_started:\n                continue\n\n            if line.startswith('---'):\n                hunk_lines = [line]  # new file\n                leftfn = line[4:]\n            elif line.startswith('+++'):\n                hunk_lines.append(line)\n                rightfn = line[4:]\n            elif line.startswith('@@'):\n                hunk_lines.append(line)\n                _, linenums, context = line.split('@@')\n                leftlinenums, rightlinenums = linenums.split()\n                leftstart, leftcount = _parseStartCount(leftlinenums[1:])\n                rightstart, rightcount = _parseStartCount(rightlinenums[1:])\n                current_hunk = AttrDict(\n                    a_fn=leftfn,\n                    b_fn=rightfn,\n                    context=context,\n                    a_lineno=int(leftstart),\n                    a_count=0,\n                    b_lineno=int(rightstart),\n                    b_count=0,\n                    lines=hunk_lines\n                )\n                yield current_hunk\n                hunk_lines = hunk_lines[:2]  # keep file context only\n\n            elif line[0] in ' +-':\n                current_hunk.lines.append(line)\n                if line[0] == '+':\n                    current_hunk.a_count += 1\n                elif line[0] == '-':\n                    current_hunk.b_count += 1\n\n    def openRow(self, row):\n        return HunkViewer(f'{row.a_fn}:{row.a_lineno}', source=self.source, hunks=[row])\n\n\nclass HunkViewer(GitSheet):\n    colorizers = [\n        RowColorizer(4, 'color_git_hunk_add', lambda s,c,r,v: r and r.old != r.new and r.old is None),\n        RowColorizer(4, 'color_git_hunk_del', lambda s,c,r,v: r and r.old != r.new and r.new is None),\n        RowColorizer(5, 'color_git_hunk_diff', lambda s,c,r,v: r and r.old != r.new and r.new is not None and r.old is not None),\n    ]\n    columns = [\n        ItemColumn('1', 'old', width=40),\n        ItemColumn('2', 'new', width=40),\n    ]\n\n    def draw(self, scr):\n        self.column('1').width=self.windowWidth//2-1\n        self.column('2').width=self.windowWidth//2-1\n        super().draw(scr)\n\n    def iterload(self):\n        nextDelIdx = None\n        for hunk in self.hunks:\n          for line in hunk.lines[3:]:  # diff without the patch headers\n            typech = line[0]\n            line = line[1:]\n            if typech == '-':  # deleted\n                yield AttrDict(hunk=hunk, type=typech, old=line)\n                if nextDelIdx is None:\n                    nextDelIdx = len(self.rows)-1\n            elif typech == '+':  # added\n                if nextDelIdx is not None:\n                    if nextDelIdx < len(self.rows):\n                        self.rows[nextDelIdx].new = line\n                        nextDelIdx += 1\n                        continue\n\n                yield AttrDict(hunk=hunk, type=typech, new=line)\n                nextDelIdx = None\n            elif typech == ' ':  # unchanged\n                yield AttrDict(hunk=hunk, type=typech, old=line, new=line)\n                nextDelIdx = None\n            else:\n                continue  # header\n\n\nHunkViewer.addCommand('2', 'git-apply-hunk', 'source.git_apply(cursorRow.hunk, \"--cached\"); reload()', 'apply this hunk to the index and move to the next hunk')\nHunkViewer.addCommand('1', 'git-remove-hunk', 'source.git_apply(cursorRow.hunk, \"--reverse\"); reload()', 'remove this hunk from staging')\nHunkViewer.addCommand('Enter', 'git-skip-hunk', 'hunks.pop(0); reload()', 'move to the next hunk without applying this hunk')\nHunkViewer.addCommand('d', 'delete-line', 'source[7].pop(cursorRow[3]); reload()', 'delete a line from the patch')\n\n#HunksSheet.addCommand('gEnter', 'git-diff-selected', 'vd.push(HunkViewer(selectedRows or rows, source=sheet))', 'view the diffs for the selected hunks (or all hunks)')\n\n@GitDiffSheet.api\ndef git_apply(sheet, row, *args):\n    sheet.git('apply -p0 -', *args, _in='\\n'.join(row.lines)+'\\n')\n\n    c = sheet.hunkCount(row)\n    vd.status(f'applied hunk ({c})')\n    sheet.reload()\n\n\n#DiffSheet.addCommand('[', '', 'cursorRowIndex = findDiffRow(cursorCol.refnum, cursorRowIndex, -1)', 'go to previous diff')\n#DiffSheet.addCommand(']', '', 'cursorRowIndex = findDiffRow(cursorCol.refnum, cursorRowIndex, +1)', 'go to next diff')\n\nGitDiffSheet.addCommand('a', 'git-add-hunk', 'git_apply(cursorRow, \"--cached\")', 'apply this hunk to the index')\n\nvd.addMenuItems('''\n    Git > Stage > current hunk > git-add-hunk\n    Git > Stage > current hunk > git-add-hunk\n''')\n\nvd.addGlobals(\n    GitDiffSheet=GitDiffSheet,\n    HunkViewer=HunkViewer\n)\n"
  },
  {
    "path": "visidata/apps/vgit/gitsheet.py",
    "content": "import io\n\nfrom visidata import AttrDict, vd, Path, asyncthread, Sheet\n\n\nclass GitSheet(Sheet):\n    @property\n    def gitargstr(self):\n        return ' '.join(self.gitargs)\n\n    def git(self, subcmd, *args, **kwargs):\n        'For non-modifying commands; not logged except in debug mode'\n        sh = vd.importExternal('sh')\n        args = list(subcmd.split()) + list(args)\n        vd.debug('git ' + ' '.join(str(x) for x in args))\n        return sh.git(*args,\n                      _cwd=self.gitRootPath,\n                      **kwargs)\n\n    def loggit(self, subcmd, *args, **kwargs):\n        'Run git command with *args*, and post a status message.'\n        import sh\n        args = list(subcmd.split()) + list(args)\n        vd.warning('git ' + ' '.join(str(x) for x in args))\n        return sh.git(*args,\n                      _cwd=self.gitRootPath,\n                      **kwargs)\n\n    def git_all(self, *args, **kwargs):\n        'Return entire output of git command.'\n        sh = vd.importExternal('sh')\n        try:\n            vd.debug('git ' + ' '.join(str(x) for x in args))\n            out = self.git('--no-pager',\n                      *args,\n                      _decode_errors='replace',\n                      _bg_exc=False,\n                      **kwargs)\n        except sh.ErrorReturnCode as e:\n            vd.warning('git '+' '.join(str(x) for x in args), 'error=%s' % e.exit_code)\n            out = e.stdout\n\n        return out\n\n    def git_lines(self, subcmd, *args, **kwargs):\n        'Generator of stdout lines from given git command'\n        sh = vd.importExternal('sh')\n        err = io.StringIO()\n        args = list(subcmd.split()) + list(args)\n        try:\n            vd.debug('git ' + ' '.join(str(x) for x in args))\n            for line in self.git('--no-pager',\n                            *args,\n                            _decode_errors='replace',\n                            _iter=True,\n                            _bg_exc=False,\n                            _err=err,\n                            **kwargs):\n                yield line[:-1]  # remove EOL\n\n        except sh.ErrorReturnCode as e:\n            vd.warning('git '+' '.join(str(x) for x in args), 'error=%s' % e.exit_code)\n\n        errlines = err.getvalue().splitlines()\n        if errlines:\n            vd.warning('git stderr: ' + '\\n'.join(errlines))\n\n\n    def git_iter(self, subcmd, *args, sep='\\0', **kwargs):\n        'Generator of chunks of stdout from given git command *subcmd*, delineated by sep character.'\n        sh = vd.importExternal('sh')\n        import sh\n        err = io.StringIO()\n\n        args = list(subcmd.split()) + list(args)\n        bufsize = 512\n        chunks = []\n        try:\n            vd.debug('git ' + ' '.join(str(x) for x in args))\n            for data in self.git('--no-pager',\n                               *args,\n                               _decode_errors='replace',\n                               _out_bufsize=bufsize,\n                               _iter=True,\n                               _bg_exc=False,\n                               _err=err,\n                               **kwargs):\n                while True:\n                    i = data.find(sep)\n                    if i < 0:\n                        break\n                    chunks.append(data[:i])\n                    data = data[i+1:]\n                    yield ''.join(chunks)\n                    chunks.clear()\n\n                chunks.append(data)\n        except sh.ErrorReturnCode as e:\n            vd.warning('git '+' '.join(str(x) for x in args), 'error=%s' % e.exit_code)\n\n        if chunks:\n            yield ''.join(chunks)\n\n        errlines = err.getvalue().splitlines()\n        if errlines:\n            vd.warning('git stderr: ' + '\\n'.join(errlines))\n\n    @asyncthread\n    def modifyGit(self, *args, **kwargs):\n        'Run git command that modifies the repo'\n        vd.warning('git ' + ' '.join(str(x) for x in args))\n        ret = self.git_all(*args, **kwargs)\n        vd.status(ret)\n\n        if isinstance(self.source, GitSheet):\n            self.source.reload()\n\n        self.reload()\n\n    @property\n    def gitRootSheet(self):\n        if isinstance(self.source, GitSheet):\n            return self.source.gitRootSheet\n        return self\n\n    def iterload(self):\n        for line in self.git_lines(*self.gitargs):\n            yield AttrDict(line=line)\n\n\n@GitSheet.lazy_property\ndef gitRootPath(self):\n    'Return Path of git root (nearest ancestor directory with a .git/)'\n    def _getRepoPath(p):\n        'Return path at p or above which has .git subdir'\n        if p.joinpath('.git').exists():\n            return p\n        if str(p) in ['/','']:\n            return None\n        return _getRepoPath(p.resolve().parent)\n\n    p = _getRepoPath(self.gitRootSheet.source)\n    if p:\n       return p\n\n\n@GitSheet.lazy_property\ndef branch(self):\n    return self.git('rev-parse', '--abbrev-ref', 'HEAD').strip()\n\n\nGitSheet.options.disp_note_none = ''\nGitSheet.options.disp_status_fmt = '{sheet.progressStatus}‹{sheet.branchStatus}› {sheet.name}| '\n\nGitSheet.addCommand('gi', 'git-exec', 'cmdstr=input(\"gi\", type=\"git\"); vd.push(GitSheet(cmdstr, gitargs=cmdstr.split()))', 'execute git command')\n\nGitSheet.addCommand('Alt+g', 'menu-git', 'pressMenu(\"Git\")', '')\n\nvd.addMenuItems('''\n    Git > Execute command > git-exec\n''')\n"
  },
  {
    "path": "visidata/apps/vgit/grep.py",
    "content": "from visidata import vd, VisiData, Path, ColumnItem, ESC\n\nfrom .gitsheet import GitSheet\n\n\n@VisiData.api\ndef git_grep(vd, p, args):\n    return GitGrep(args[0], regex=args[0], source=p)\n\n\nclass GitGrep(GitSheet):\n    rowtype = 'results' # rowdef: list(file, line, line_contents)\n    guide = '''\n        # vgit grep\n        Each row on this sheet is a line matching the regex pattern `{sheet.regex}` in the tracked files of the current directory.\n\n        - `Ctrl+O` to open _{sheet.cursorRow[0]}:{sheet.cursorRow[1]}_ in the system editor; saved changes will be reflected automatically.\n    '''\n    columns = [\n        ColumnItem('file', 0, help='filename of the match'),\n        ColumnItem('line', 1, help='line number within file'),\n        ColumnItem('text', 2, width=120, help='matching line of text'),\n    ]\n    nKeys = 2\n\n    def iterload(self):\n        tmp = (self.topRowIndex, self.cursorRowIndex)\n        for line in self.git_lines('grep', '--no-color', '-z', '--line-number', '--ignore-case', self.regex):\n#            line = line.replace(ESC+'[1;31m', '[:green]')\n#            line = line.replace(ESC+'[m', '[/]')\n            yield list(line.split('\\0'))\n        self.topRowIndex, self.cursorRowIndex = tmp\n\n\nGitSheet.addCommand('g/', 'git-grep', 'rex=inputRegex(\"git grep: \"); vd.push(GitGrep(rex, regex=rex, source=sheet))', 'find in all files in this repo')\nGitGrep.addCommand('Ctrl+O', 'sysopen-row', 'launchExternalEditorPath(Path(cursorRow[0]), linenum=cursorRow[1]); reload()', 'open this file in $EDITOR')\nGitGrep.bindkey('Enter', 'sysopen-row')\n"
  },
  {
    "path": "visidata/apps/vgit/log.py",
    "content": "import functools\n\nfrom visidata import vd, VisiData, Column, ItemColumn, date, RowColorizer, asyncthread, Progress, AttrDict\n\nfrom .gitsheet import GitSheet\n\n\n@VisiData.api\ndef git_log(vd, p, *args):\n    return GitLogSheet('git-log', source=p, gitargs=args)\n\n# rowdef: (commit_hash, refnames, author, author_date, body, notes)\nclass GitLogSheet(GitSheet):\n    guide = '''\n# git log {sheet.gitargstr}\n{sheet.cursorRow.message}\n    '''\n    GIT_LOG_FORMAT = ['%H', '%D', '%an <%ae>', '%ai', '%B', '%N']\n    rowtype = 'commits'  # rowdef: AttrDict\n    defer = True\n    savesToSource = True\n    columns = [\n        ItemColumn('commitid', width=8),\n        ItemColumn('refnames', width=12),\n        ItemColumn('message', type=str.strip, setter=lambda c,r,v: c.sheet.git('commit --amend --no-edit --quiet --message', v), width=50),\n        ItemColumn('author', setter=lambda c,r,v: c.sheet.git('commit --amend --no-edit --quiet --author', v)),\n        ItemColumn('author_date', type=date, setter=lambda c,r,v: c.sheet.git('commit --amend --no-edit --quiet --date', v)),\n        ItemColumn('notes', setter=lambda c,r,v: c.sheet.git('notes add --force --message', v, r.commitid)),\n    ]\n    colorizers = [\n            RowColorizer(5, 'color_vgit_unpushed', lambda s,c,r,v: r and not s.inRemoteBranch(r.commitid)),\n    ]\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n    @functools.lru_cache()\n    def inRemoteBranch(self, commitid):\n        return self.git_all('branch -r --contains', commitid, _ok_code=[0, 1])\n\n    def iterload(self):\n        lines = self.git_iter('log --no-color -z', '--pretty=format:' + '%x1f'.join(self.GIT_LOG_FORMAT), *self.gitargs)\n        for record in Progress(tuple(lines)):\n            r = record.split('\\x1f')\n            yield AttrDict(\n                commitid=r[0],\n                refnames=r[1],\n                author=r[2],\n                author_date=r[3],\n                message=r[4],\n                notes=r[5],\n            )\n\n    def openRow(self, row):\n        'open this commit'\n        return getCommitSheet(row[0][:7], self, row[0])\n\n    @asyncthread\n    def commit(self, path, adds, mods, dels):\n\n        assert not adds\n        assert not dels\n\n        for row, rowmods in mods.values():\n            for col, val in rowmods.values():\n                vd.callNoExceptions(col.putValue, row, val)\n\n        self.reload()\n        self.resetDeferredCommit()\n\n\nGitLogSheet.addCommand(None, 'delete-row', 'error(\"delete is not supported\")')\nGitLogSheet.addCommand(None, 'add-row', 'error(\"commits cannot be added\")')\n#GitLogSheet.addCommand('x', 'git-pick', 'git(\"cherry-pick\", cursorRow.commitid)', 'cherry-pick this commit onto current branch')\n#GitLogSheet.addCommand('r', 'git-reset-here', 'git(\"update-ref\", \"refs/heads/\"+source, cursorRow[0])', 'reset this branch to this commit')\n\nGitSheet.addCommand('', 'git-log', 'vd.push(git_log(gitRootPath, branch))', 'push log of current branch')\n\nvd.addMenuItems('''\n    Git > Open > log > git-log\n''')\n"
  },
  {
    "path": "visidata/apps/vgit/main.py",
    "content": "'''\n# vgit: VisiData wrapper for git\n\nThe syntax for vgit is the same as the syntax for git.\nBy default, will pass the command to git verbatim, as quickly as possible.\nIf vgit can provide an interactive interface for a particular subcommand,\nit will open the sheet returned by vd.git_<subcommand>(path, args).\n'''\n\nimport os\nimport sys\n\n\ndef vgit_cli():\n    import visidata\n    from visidata import vd, Path\n\n    args = sys.argv[1:]\n    flDebug = '--debug' in args\n    if flDebug:\n        args.remove('--debug')\n\n    if not args:\n        args = ['help']\n\n    func = getattr(vd, 'git_'+args[0], None)\n    if func:\n        vd.loadConfigAndPlugins()\n        vd.status(visidata.__version_info__)\n        vd.domotd()\n        if flDebug:\n            vd.options.debug = True\n\n        rc = 0\n        try:\n            p = Path('.')\n            vs = func(p, args[1:])\n            if vs:\n                vd.run(vs)\n        except BrokenPipeError:\n            os.dup2(os.open(os.devnull, os.O_WRONLY), sys.stdout.fileno()) # handle broken pipe gracefully\n        except visidata.ExpectedException as e:\n            print(str(e))\n        except Exception as e:\n            rc = 1\n            vd.exceptionCaught(e)\n            if flDebug:\n                raise\n\n        sys.stderr.flush()\n        sys.stdout.flush()\n        os._exit(rc)  # cleanup can be expensive\n\n    import subprocess\n    return subprocess.run(['git', *args]).returncode\n"
  },
  {
    "path": "visidata/apps/vgit/remote.py",
    "content": "from visidata import vd, VisiData, ItemColumn, AttrDict, RowColorizer, Path\n\nfrom .gitsheet import GitSheet\n\n@VisiData.api\ndef git_remote(vd, p, args):\n    if not args or 'show' in args:\n        return GitRemotes('remotes', source=p)\n\n\nclass GitRemotes(GitSheet):\n    guide = '''\n        # git remote\n        Manage the set of repositories (\"remotes\") whose branches you track.\n\n        - `a` to add a remote\n        - `d` to mark a remote for deletion\n        - `e` to edit the _remote_ or _url_\n        - `z Ctrl+S` to commit the changes.\n    '''\n    rowtypes = 'remotes'  # rowdef: dict(remote=, url=, type=)\n    columns=[\n        ItemColumn('remote', setter=lambda c,r,v: c.sheet.set_remote(c,r,v)),\n        ItemColumn('type'),\n        ItemColumn('url', width=40, setter=lambda c,r,v: c.sheet.set_url(c,r,v)),\n    ]\n    nKeys = 1\n    defer = True\n\n    def set_remote(self, col, row, val):\n        self.loggit('remote', 'rename', self.column('remote').getSourceValue(row), val)\n\n    def set_url(self, col, row, val):\n        self.loggit('remote', 'set-url', row.remote, val)\n\n    def iterload(self):\n        for line in self.git_lines('remote', '-v', 'show'):\n            name, url, paren_type = line.split()\n            yield AttrDict(remote=name, url=url, type=paren_type[1:-1])\n\n    def commitDeleteRow(self, row):\n        self.loggit('remote', 'remove', row.remote)\n\n    def commitAddRow(self, row):\n        row.remote = self.column('remote').getValue(row)\n        row.url = self.column('url').getValue(row)\n        self.loggit('remote', 'add', row.remote, row.url)\n\n    def newRow(self):\n        return AttrDict()\n\n\nGitSheet.addCommand('', 'git-open-remotes', 'vd.push(git_remote(Path(\".\"), \"\"))', 'open git remotes sheet')\n\nvd.addMenuItems('''\n    Git > Open > remotes > git-open-remotes\n''')\n"
  },
  {
    "path": "visidata/apps/vgit/repos.py",
    "content": "from visidata import vd, VisiData, Sheet, Column, AttrColumn, date, vlen, asyncthread, Path, namedlist, PyobjSheet, modtime, AttrDict\n\nfrom .gitsheet import GitSheet\n\n@VisiData.api\ndef guess_git(vd, p):\n    if (p/'.git').is_dir():\n        return dict(filetype='git', _likelihood=10)\n\n\n@VisiData.api\ndef open_git(vd, p):\n    return vd.git_status(p, [])\n\n\n@VisiData.api\ndef git_repos(vd, p, args):\n    return GitRepos(p.base_stem, source=p)\n\n\nclass GitLinesColumn(Column):\n    def __init__(self, name, cmd, *args, **kwargs):\n        super().__init__(name, cache='async', **kwargs)\n        cmdparts = cmd.split()\n        if cmdparts[0] == 'git':\n            cmdparts = cmdparts[1:]\n        self.gitargs = cmdparts + list(args)\n\n    def calcValue(self, r):\n        lines = list(GitSheet(source=r).git_lines(*self.gitargs))\n        if lines:\n            return lines\n\n\nclass GitAllColumn(GitLinesColumn):\n    def calcValue(self, r):\n        return GitSheet(source=r).git_all(*self.gitargs).strip()\n\n\n\nclass GitRepos(GitSheet):\n    guide = '''\n        # git repos\n        A list of git repositories under `{sheet.source}`\n\n        - `Enter` to open the status sheet for the current repo\n    '''\n    rowtype = 'git repos'  # rowdef: Path\n    columns = [\n        Column('repo', type=str, width=30),\n        GitAllColumn('branch', 'git rev-parse --abbrev-ref HEAD', width=8),\n        GitLinesColumn('diffs', 'git diff --no-color', type=vlen, width=8),\n        GitLinesColumn('staged_diffs', 'git diff --cached', type=vlen, width=8),\n        GitLinesColumn('branches', 'git branch --no-color', type=vlen, width=10),\n        GitLinesColumn('stashes', 'git stash list', type=vlen, width=8),\n        Column('modtime', type=date, getter=lambda c,r: modtime(r)),\n    ]\n    nKeys = 1\n\n    def iterload(self):\n        import glob\n        for fn in glob.glob('**/.git', root_dir=self.source, recursive=True):\n            yield Path(fn).parent\n\n\n    def openRow(self, row):\n        return vd.git_status(row, [])\n\n    def openCell(self, col, row):\n        val = col.getValue(row)\n        return PyobjSheet(getattr(val, '__name__', ''), source=val)\n"
  },
  {
    "path": "visidata/apps/vgit/setup.py",
    "content": "#!/usr/bin/env python3\n\nfrom setuptools import setup, find_packages\n\n# Note: use `python3 visidata/apps/setup.py install` from the root directory\n\n__version__ = '0.2-dev'\n\nsetup(name='vgit',\n      version=__version__,\n      description='a sleek terminal user interface for git',\n      # long_description=open('README.md').read(),\n      install_requires=['sh<2'], # visidata\n      packages=find_packages(exclude=[\"tests\"]),\n      scripts=['vgit'],\n      entry_points={'visidata.plugins': 'vgit=visidata.apps.vgit'},\n      author='Saul Pwanson',\n      author_email='vgit@saul.pw',\n      url='https://github.com/saulpw/visidata/vgit',\n      license='GPLv3',\n      python_requires='>=3.7',\n      classifiers=[\n          'Development Status :: 2 - Pre-Alpha',\n          'Environment :: Console',\n          'Environment :: Console :: Curses',\n          'Intended Audience :: Developers',\n          'Intended Audience :: System Administrators',\n          'Intended Audience :: Information Technology',\n          'License :: OSI Approved :: GNU General Public License v3 (GPLv3)',\n          'Operating System :: OS Independent',\n          'Programming Language :: Python :: 3',\n          'Topic :: Utilities',\n          'Topic :: Software Development :: Version Control',\n          'Topic :: Terminals'\n      ],\n      keywords=('console textpunk git version-control curses visidata tui terminal'),\n      )\n"
  },
  {
    "path": "visidata/apps/vgit/stash.py",
    "content": "from visidata import vd, VisiData, ItemColumn, AttrDict\n\n\nfrom .gitsheet import GitSheet\nfrom .diff import GitDiffSheet\n\n\n@VisiData.api\ndef git_stash(vd, p, args):\n    if 'list' in args:\n        return GitStashes('git-stash-list', source=p, gitargs=args)\n\n\nclass GitStashes(GitSheet):\n    guide = '''\n        # git stash\n        This is the list of changes that have been stashed previously.\n\n        `a` to apply this stashed change (without removing it)\n        `d` to drop this stashed change\n        `b` to create a branch from this stashed change'),\n    '''\n    rowtype = 'stashed change'  # rowdef: AttrDict(stashid=, branched_from=, sha1=, msg=)\n    columns = [\n        ItemColumn('stashid'),\n        ItemColumn('branched_from'),\n        ItemColumn('sha1'),\n        ItemColumn('msg'),\n        ItemColumn('line', width=0),\n    ]\n\n    def iterload(self):\n        for line in self.git_lines('stash', *self.gitargs):\n            stashid, ctx, rest = line.split(': ', 2)\n            if ctx.startswith('WIP on '):\n                branched_from = ctx[len('WIP on '):]\n                sha1, msg = rest.split(' ', 1)\n            elif ctx.startswith('On '):\n                branched_from = ctx[len('On '):]\n                sha1 = ''\n                msg = rest\n            yield AttrDict(\n                line=line,\n                stashid=stashid,\n                branched_from=branched_from,\n                sha1=sha1,\n                msg=msg.strip(),\n            )\n\n    def openRow(self, row):\n        'open this stashed change'\n        return GitDiffSheet(row.stashid, \"diffs\", gitargs=['stash show --no-color --patch', row.stashid], source=self.source)\n\n\nGitSheet.addCommand('', 'git-open-stashes', 'vd.push(git_stash(source, [\"list\"]))', 'push stashes sheet')\n\nGitStashes.addCommand('a', 'git-stash-apply', 'loggit(\"stash\", \"apply\", cursorRow[0])', 'apply this stashed change without removing')\nGitStashes.addCommand('', 'git-stash-pop', 'loggit(\"stash\", \"pop\", cursorRow[0])', 'apply this stashed change and drop it')\nGitStashes.addCommand('d', 'git-stash-drop', 'loggit(\"stash\", \"drop\", cursorRow[0])', 'drop this stashed change')\nGitStashes.addCommand('b', 'git-stash-branch', 'loggit(\"stash\", \"branch\", input(\"create branch from stash named: \"), cursorRow[0])', 'create branch from stash')\n\n\nvd.addMenuItems('''\n    Git > Open > stashes > git-open-stashes\n    Git > Stash > apply > git-stash-apply\n    Git > Stash > drop > git-stash-drop\n    Git > Stash > apply then drop  > git-stash-pop\n    Git > Stash > create branch > git-stash-branch\n''')\n"
  },
  {
    "path": "visidata/apps/vgit/status.py",
    "content": "from visidata import vd, Column, VisiData, ItemColumn, Path, AttrDict, BaseSheet, IndexSheet\nfrom visidata import RowColorizer, CellColorizer\nfrom visidata import filesize, modtime, date\n\nfrom .gitsheet import GitSheet\n#from .diff import DifferSheet\n\nvd.option('vgit_show_ignored', False, 'show ignored files on git status')\nvd.theme_option('color_git_staged_mod', 'green', 'color of files staged with modifications')\nvd.theme_option('color_git_staged_add', 'green', 'color of files staged for addition')\nvd.theme_option('color_git_staged_del', 'red', 'color of files staged for deletion')\nvd.theme_option('color_git_unstaged_del', 'on 88', 'color of files deleted but unstaged')\nvd.theme_option('color_git_untracked', '243 blue', 'color of ignored/untracked files')\n\n\n@VisiData.api\ndef git_status(vd, p, args, **kwargs):\n    vs = GitStatus('/'.join(p.parts[-2:]), source=p)\n    if not vs.gitRootPath:\n        return vd.git_repos(p, [])\n    return vs\n\nclass GitFile:\n    def __init__(self, path, gitsrc):\n        self.path = path\n        self.filename = path.relative_to(gitsrc)\n        self.is_dir = self.path.is_dir()\n\n    def __str__(self):\n        return str(self.filename) + (self.is_dir and '/' or '')\n\nclass GitStatus(GitSheet):\n    rowtype = 'files'  # rowdef: GitFile\n    guide = '''\n        # git status\n        An overview of the local git checkout.\n\n        - `Enter` to open diff of file (`git diff`)\n        - `a` to stage changes in file (`git add`)\n        - `r` to unstage changes in file (`git reset`)\n        - `c` to revert all unstaged changes in file (`git checkout`)\n        - `d` to stage the entire file for deletion (`git rm`)\n        - `z Ctrl+S` to commit staged changes (`git commit`)\n    '''\n\n    columns = [\n        Column('path', width=40, getter=lambda c,r: str(r)),\n        Column('status', getter=lambda c,r: c.sheet.statusText(c.sheet.git_status(r)), width=8),\n        Column('status_raw', getter=lambda c,r: c.sheet.git_status(r), width=0),\n        Column('staged', getter=lambda c,r: c.sheet.git_status(r).dels),\n        Column('unstaged', getter=lambda c,r: c.sheet.git_status(r).adds),\n        Column('type', getter=lambda c,r: r.is_dir() and '/' or r.suffix, width=0),\n        Column('size', type=int, getter=lambda c,r: filesize(r)),\n        Column('modtime', type=date, getter=lambda c,r: modtime(r)),\n    ]\n    nKeys = 1\n\n    colorizers = [\n        CellColorizer(3, 'color_git_staged_mod',   lambda s,c,r,v: r and c and c.name == 'staged' and s.git_status(r).status[0] == 'M'), # staged mod\n        CellColorizer(1, 'color_git_staged_del',     lambda s,c,r,v: r and c and c.name == 'staged' and s.git_status(r).status == 'D '), # staged delete\n        RowColorizer(1, 'color_git_staged_add',  lambda s,c,r,v: r and s.git_status(r).status in ['A ', 'M ']), # staged add/mod\n        RowColorizer(1, 'color_git_unstaged_del',       lambda s,c,r,v: r and s.git_status(r).status[1] == 'D'), # unstaged delete\n        RowColorizer(3, 'color_git_untracked', lambda s,c,r,v: r and s.git_status(r).status == '!!'),  # ignored\n        RowColorizer(1, 'color_git_untracked', lambda s,c,r,v: r and s.git_status(r).status == '??'),  # untracked\n    ]\n\n    def statusText(self, st):\n        vmod = {'A': 'add', 'D': 'rm', 'M': 'mod', 'T': 'chmod', '?': '', '!': 'ignored', 'U': 'unmerged'}\n        x, y = st.status\n        if st == '??': # untracked\n            return 'new'\n        elif st == '!!':  # ignored\n            return 'ignored'\n        elif x != ' ' and y == ' ': # staged\n            return vmod.get(x, x)\n        elif y != ' ': # unstaged\n            return vmod.get(y, y)\n        else:\n            return ''\n\n    @property\n    def workdir(self):\n        return str(self.source)\n\n    def git_status(self, r):\n        '''return tuple of (status, adds, dels).\n        status like !! ??\n        adds and dels are lists of additions and deletions.\n        '''\n        if not r:\n            return None\n\n        fn = str(r)\n        ret = self._cachedStatus.get(fn, None)\n        if not ret:\n            ret = AttrDict(status='??')\n            self._cachedStatus[fn] = ret\n\n        return ret\n\n    def ignored(self, fn):\n        if self.options.vgit_show_ignored:\n            return False\n\n        if fn in self._cachedStatus:\n            return self._cachedStatus[fn].status == '!!'\n\n        return False\n\n    @property\n    def remotediff(self):\n        return self.gitBranchStatuses.get(self.branch, 'no branch')\n\n    def iterload(self):\n        files = [GitFile(p, self.source) for p in self.source.iterdir() if p.stem not in ('.git')]  # files in working dir\n\n        filenames = dict((gf.filename, gf) for gf in files)\n\n        self._cachedStatus.clear()\n        for fn in self.git_iter('ls-files', '-z'):\n            self._cachedStatus[fn] = AttrDict(status='  ')\n\n        for line in self.git_iter('status', '-z', '-unormal', '--ignored'):\n            if not line: continue\n\n            if line[2:3] == ' ':\n                st, fn = line[:2], line[3:]\n            else:\n                fn = line\n                st = '??'  # untracked file\n\n            self._cachedStatus[fn] = AttrDict(status=st)\n            if not self.ignored(fn):\n                yield Path(fn)\n\n        for line in self.git_iter('diff-files', '--numstat', '-z'):\n            if not line: continue\n            adds, dels, fn = line.split('\\t')\n            if fn not in self._cachedStatus:\n                self._cachedStatus[fn] = AttrDict(status='##')\n            cs = self._cachedStatus[fn]\n            cs.adds = '+%s/-%s' % (adds, dels)\n\n        for line in self.git_iter('diff-index', '--cached', '--numstat', '-z', 'HEAD'):\n            if not line: continue\n            adds, dels, fn = line.split('\\t')\n            if fn not in self._cachedStatus:\n                self._cachedStatus[fn] = AttrDict(status='$$')\n            cs = self._cachedStatus[fn]\n            cs.dels = '+%s/-%s' % (adds, dels)\n\n        self.orderBy(None, self.columns[-1], reverse=True)\n\n        self.recalc()  # erase column caches\n\n    def openRow(self, row):\n        'Open unstaged diffs for this file, or dive into directory'\n        if row.is_dir:\n            return GitStatus(row.path)\n        else:\n            return DifferSheet(row, \"HEAD\", \"index\", \"working\", source=sheet)\n\n    def openRows(self, rows):\n        'Open unstaged hunks for selected rows'\n        return getHunksSheet(sheet, *rows)\n\n\n@GitStatus.lazy_property\ndef _cachedStatus(self):\n    return {}  # [filename] -> AttrDict(status='xx', adds=, dels=)\n\n\nGitStatus.addCommand('a', 'git-add', 'loggit(\"add\", cursorRow.filename)', 'add this new file or modified file to staging')\n#GitStatus.addCommand('m', 'git-mv', 'loggit(\"mv\", cursorRow.filename, input(\"rename file to: \", value=cursorRow.filename))', 'rename this file')\nGitStatus.addCommand('d', 'git-rm', 'loggit(\"rm\", cursorRow.filename)', 'stage this file for deletion')\nGitStatus.addCommand('r', 'git-reset', 'loggit(\"reset\", \"HEAD\", cursorRow.filename)', 'reset/unstage this file')\nGitStatus.addCommand('c', 'git-checkout', 'loggit(\"checkout\", cursorRow.filename)', 'checkout this file')\nGitStatus.addCommand('ga', 'git-add-selected', 'loggit(\"add\", *[r for r in selectedRows])', 'add all selected files to staging')\nGitStatus.addCommand('gd', 'git-rm-selected', 'loggit(\"rm\", *[r for r in selectedRows])', 'delete all selected files')\nGitStatus.addCommand(None, 'git-commit', 'loggit(\"commit\", \"-m\", input(\"commit message: \"))', 'commit changes')\nGitStatus.addCommand(None, 'git-ignore-file', 'open(rootPath/\".gitignore\", \"a\").write(cursorRow.filename+\"\\\\n\"); reload()', 'add file to toplevel .gitignore')\nGitStatus.addCommand(None, 'git-ignore-wildcard', 'open(rootPath/.gitignore, \"a\").write(input(\"add wildcard to .gitignore: \"))', 'add input line to toplevel .gitignore')\n\n\n#GitStatus.addCommand('zEnter', 'diff-file-staged', 'vd.push(getStagedHunksSheet(sheet, cursorRow))', 'push staged diffs for this file')\n#GitStatus.addCommand('gzEnter', 'diff-selected-staged', 'vd.push(getStagedHunksSheet(sheet, *(selectedRows or rows)))', 'push staged diffs for selected files or all files')\n#GitStatus.addCommand('Ctrl+O', 'sysopen-row', 'launchExternalEditorPath(Path(cursorRow.path))', 'open this file in $EDITOR')\n\n\nvd.addMenuItems('''\n    Git > View staged changes > current file > diff-file-staged\n    Git > View staged changes > selected files > staged changes > diff-selected-staged\n    Git > Stage > current file > git-add\n    Git > Stage > selected files > git-add-selected\n    Git > Unstage > current file > git-reset\n    Git > Unstage > selected files > git-reset-selected\n    Git > Rename file > git-mv\n    Git > Delete > file > git-rm\n    Git > Delete > selected files > git-rm-selected\n    Git > Ignore > file > ignore-file\n    Git > Ignore > wildcard > ignore-wildcard\n    Git > Commit staged changes > git-commit\n    Git > Revert unstaged changes > current file > git-checkout\n''')\n"
  },
  {
    "path": "visidata/apps/vgit/statusbar.py",
    "content": "from .gitsheet import vd, GitSheet\n\n\nGitSheet.options.disp_status_fmt = '{sheet.progressStatus}‹{sheet.branchStatus}› {sheet.name}| '\n\n@GitSheet.property\ndef progressStatus(sheet):\n    inp = sheet.gitInProgress()\n    return ('[%s] ' % inp) if inp else ''\n\n\n@GitSheet.property\ndef branchStatus(sheet):\n    if hasattr(sheet.gitRootSheet, 'branch'):\n        return '%s%s' % (sheet.rootSheet.branch, sheet.rootSheet.remotediff)\n    return ''\n\n\n@GitSheet.api\ndef gitInProgress(sheet):\n    p = sheet.gitPath\n    if not p:\n        return 'no repo'\n    if (p/'rebase-merge').exists() or (p/'rebase-apply/rebasing').exists():\n        return 'rebasing'\n    elif p/'rebase-apply'.exists():\n        return 'applying'\n    elif p/'CHERRY_PICK_HEAD'.exists():\n        return 'cherry-picking'\n    elif p/'MERGE_HEAD'.exists():\n        return 'merging'\n    elif p/'BISECT_LOG'.exists():\n        return 'bisecting'\n    return ''\n"
  },
  {
    "path": "visidata/apps/vgit/tests/git_branch_test.vdx",
    "content": "# VisiData v2.12dev\nexec-python vd.options.overwrite='y'\nexec-python vd.options.filetype='git'\nopen-file .\ngit-open-branches\ngit-branch-create test_branch\ncommit-sheet\nreload-sheet\ncol branch\nrow キtest_branch\nedit-cell test_branch2\ncommit-sheet\nreload-sheet\nrow キtest_branch2\ndelete-row\ncommit-sheet\nreload-sheet\n"
  },
  {
    "path": "visidata/apps/vgit/tests/git_remote_test.vdx",
    "content": "# VisiData v2.12dev\nexec-python vd.options.overwrite='y'\nexec-python vd.options.filetype='git'\nopen-file .\ngit-open-remotes\n\n# remote add\nadd-row\ncol remote\nedit-cell test_remote\ncol url\nedit-cell git@github.com:test/test.git\ncommit-sheet\nreload-sheet\n\n# remote rename\ncol remote\nrow キtest_remote\nedit-cell test_remote2\ncommit-sheet\nreload-sheet\n\n# remote remove\nrow キtest_remote2\ndelete-row\ncommit-sheet\nreload-sheet\n"
  },
  {
    "path": "visidata/apps/vgit/vgit",
    "content": "#!/usr/bin/env python3\n\nimport sys\nfrom visidata.apps.vgit.main import vgit_cli\n\n\nif __name__ == '__main__':\n    rc = vgit_cli()\n    sys.exit(rc)\n"
  },
  {
    "path": "visidata/apps/vgit/vgit-guide.md",
    "content": "# User Documentation for vgit\n\n## Global Commands\n\n- `^S` to stash all uncommitted changes (`git stash`)\n- `^P` to pops the most recent stashed change and drops it (`git stash pop`)\n- `A` to abort the cherry-pick/rebase/merge in-progress action shown on status line\n\n- `f` is for force, to prefix any command\n\n\n###\n\n- `a` is for add, to stage the current row in the index\n- `b` is for branch, to start a new branch\n- `c` is for checkout, to update the working tree with the current row\n- `d` is for delete, to remove the current row\n- `e` is for the builtin editor, to change the current cell\n- `r` is for reset, to unstage the current row from the index\n- `Shift-E` is for your own $EDITOR, to change the current row\n- `Shift-C` is for commit, from the index to the repo\n\nThe exact command(s) required in each case are context dependent.\nA `g` prefix will make the command affect all selected rows instead.  If no rows are selected, it will fanout to all rows.\nFor example, 'ge' edits the current cell, then sets the current column for all selected rows to the same value.\n\n### Commands that push or change sheets are always shift-keystrokes.\n\n- `H` History (`git log`)\n- `B` Branches (`git branch`)\n- `R` Remotes (`git remote`)\n- `O` Options (`git config`)\n- `T` sTashes (`git stash`)\n- `L` bLame (`git blame`)\n- `G` Git command history\n\n### Workflows\n\n- checkout a commit: 'H'istory, choose commit, 'c'heckout\n   - see contents of the commit first: ENTER for file listing, then ENTER for diff against parent.\n\n- checkout a different branch: 'B'ranches, move cursor to desired branch, 'c'heckout\n\n- amend an older commit with contents of the index: 'H'istory, choose commit, 'C'ommit; will confirm and then amend/rebase\n\n- dig through code: b'L'ame, ENTER\n\n- `P`ush the local refs to the currently set remote refs (`git push`)\n\n- \n\n\n## Quick Reference\n\n### Global Keystrokes\n- `P`ushes the local refs to the currently set remote refs (`git push`)\n\n### Git Status Sheet\n- provides information about the working tree\n- a/r/c/d should be intuitive\n- `m` moves a file (or `e`dit the filename to rename within the current directory)_\n- `Enter` pushes a hunks sheet for a file; `gEnter` pushes hunks sheet for selected files (or all files, if none selected)\n- `g/` performs a search through all files\n- `x` executes an arbitrary git command\n- `f` adds a --force flag to the next git command\n- `i` adds a file to toplevel .gitignore; `gi` to add an input line to toplevel .gitignore\n- `Shift-V` opens selected file in $Editor\n- `zEnter` opens hunks sheet for the staged diffs for the selected file; `gzEnter` pushes hunks sheet for the staged diffs for selected files (or all files, if none selected)\n\n### Hunks Sheet \n- opens a view for the hunks of a file (pieces of diffs)\n- `Enter` on a hunk shows you its diffs; `gEnter` scrolls through diffs for all of the selected hunks (or all hunks, if none selected)\n- `a` stages a hunk\n- `d` or `r` undoes this hunk\n- `Shift-V` views the raw patch for this hunk\n\n### Diff Viewer for Selected Hunks Sheet\n- opens a view for the diff of a hunk\n- `y`, `a` or `2` stages a hunk to the index and move on to the next hunk\n- `r` or `1` removes this hunk from the diff (from the working tree)\n- `n` or `<ENTER>` skips this hunk without staging \n- `d` deletes a line from a patch\n- viewer exits when all hunks have been added or skipped\n\n### Git Log Sheet (`H`istory)\n- shows the git commit history for the selected branch\n- `Enter` shows the diff for the selected commit\n- `Shift-C` amends the selected commit to contain the currently staged changes\n- `r` resets the shown branch HEAD to the selected commit\n- `p` cherry-picks the selected commit onto the current branch\n\n### Git `B`ranches Sheet\n- displays information about branches and enables their modification\n- `a` creates a new branch\n- `c` checks out a branch\n- `d` removes a branch\n- `e` renames a branch\n- \n- `Enter` pushes the log sheet of the selected branch\n- `m` merges the selected branch into the current branch\n\n### Git `R`emotes Sheet\n    - for viewing and managing of remote urls\n    - `d` deletes a remote\n    - `a` adds a new remote\n\n### Git S`T`ashes Sheet\n    - allows viewing of current stashed commits\n    - `<ENTER>` shows the selected stashed change\n    - `a` applies a stashed change without removing it from the stash\n    - `Ctrl-p` applies a stashed change and drops it\n    - `d` drops a stashed change\n    - `b` creates a new branch from the stashed change\n\n## Git `O`ptions Sheet\n    - to view and/or edit git configuration (local/global/system)\n    - `a` adds new option\n    - `d` unsets this config value\n    - `gd` unsets all selected config values\n    - `e` edits an option; `ge` edits this option for all selected rows\n"
  },
  {
    "path": "visidata/basesheet.py",
    "content": "from visidata import vd, Extensible, VisiData, EscapeException, MissingAttrFormatter\n\n\nUNLOADED = tuple()  # sentinel for a sheet not yet loaded for the first time; should be iterable\n\nvd.beforeExecHooks = [] # func(sheet, cmd, args, keystrokes) called before the exec()\n\n\nclass LazyChainMap:\n    'provides a lazy mapping to obj attributes.  useful when some attributes are expensive properties.'\n    def __init__(self, *objs, locals=None):\n        self.locals = {} if locals is None else locals\n        self.objs = {} # [k] -> obj\n        for obj in objs:\n            for k in dir(obj):\n                if k not in self.objs:\n                    self.objs[k] = obj\n\n    def __iter__(self):\n        return iter(self.objs)\n\n    def __contains__(self, k):\n        return k in self.objs\n\n    def keys(self):\n        return list(self.objs.keys())  # sum(set(dir(obj)) for obj in self.objs))\n\n    def get(self, key, default=None):\n        if key in self.locals:\n            return self.locals[key]\n        return self.objs.get(key, default)\n\n    def clear(self):\n        self.locals.clear()\n\n    def __getitem__(self, k):\n        obj = self.objs.get(k, None)\n        if obj:\n            return getattr(obj, k)\n        return self.locals[k]\n\n    def __setitem__(self, k, v):\n        obj = self.objs.get(k, None)\n        if obj:\n            return setattr(obj, k, v)\n        self.locals[k] = v\n\n\nclass DrawablePane(Extensible):\n    def __init__(self, **kwargs):\n        self.__dict__.update(kwargs)\n\n    'Base class for all interaction owners that can be drawn in a window.'\n    def draw(self, scr):\n        'Draw on the terminal window *scr*.  Should be overridden.'\n        vd.error('no draw')\n\n    @property\n    def windowHeight(self):\n        'Height of the current sheet window, in terminal lines.'\n        return self._scr.getmaxyx()[0] if self._scr else 25\n\n    @property\n    def windowWidth(self):\n        'Width of the current sheet window, in single-width characters.'\n        return self._scr.getmaxyx()[1] if self._scr else 80\n\n    @property\n    def currow(self):\n        return None\n\n    def execCommand2(self, cmd, vdglobals=None):\n        \"Execute `cmd` with `vdglobals` as globals and this sheet's attributes as locals.  Return True if user cancelled.\"\n\n        try:\n            self.sheet = self\n            if cmd.deprecated:\n                vd.deprecated_warn(cmd.longname, cmd.deprecated, 'a different command')\n            code = compile(cmd.execstr, cmd.longname, 'exec')\n            exec(code, vdglobals, LazyChainMap(vd, self))\n            return False\n        except EscapeException as e:  # user aborted\n            vd.warning(str(e))\n            return True\n\n\nclass _dualproperty:\n    'Return *obj_method* or *cls_method* depending on whether property is on instance or class.'\n    def __init__(self, obj_method, cls_method):\n        self._obj_method = obj_method\n        self._cls_method = cls_method\n\n    def __get__(self, obj, objtype=None):\n        if obj is None:\n            return self._cls_method(objtype)\n        else:\n            return self._obj_method(obj)\n\n\nclass BaseSheet(DrawablePane):\n    'Base class for all sheet types.'\n    _rowtype = object    # callable (no parms) that returns new empty item\n    _coltype = None      # callable (no parms) that returns new settable view into that item\n    rowtype = 'objects'  # one word, plural, describing the items\n    precious = True      # False for a few discardable metasheets\n    defer = False        # False for not deferring changes until save\n    guide = ''           # default to show in sidebar\n    icon = '›'\n\n    def _obj_options(self):\n        return vd.OptionsObject(vd._options, obj=self)\n\n    def _class_options(cls):\n        return vd.OptionsObject(vd._options, obj=cls)\n\n    class_options = options = _dualproperty(_obj_options, _class_options)\n\n    def __init__(self, *names, rows=UNLOADED, **kwargs):\n        self._name = None   # initial cache value necessary for self.options\n        self._names = []\n        self.loading = False\n        self.names = list(names)\n        self.source = None\n        self.rows = rows      # list of opaque objects\n        self._scr = None\n        self.hasBeenModified = False\n\n        super().__init__(**kwargs)\n\n        self._sidebar = ''\n\n    def setModified(self):\n        if not self.hasBeenModified:\n            vd.addUndo(setattr, self, 'hasBeenModified', self.hasBeenModified)\n            self.hasBeenModified = True\n\n    def __lt__(self, other):\n        if self.name != other.name:\n            return self.name < other.name\n        else:\n            return id(self) < id(other)\n\n    def __copy__(self):\n        'Return shallow copy of sheet.'\n        cls = self.__class__\n        ret = cls.__new__(cls)\n        ret.__dict__.update(self.__dict__)\n        ret.precious = True  # copy can be precious even if original is not\n        ret.hasBeenModified = False  # copy is not modified even if original is\n        return ret\n\n    def __bool__(self):\n        'an instantiated Sheet always tests true'\n        return True\n\n    def __len__(self):\n        'Number of elements on this sheet.'\n        return self.nRows\n\n    def __str__(self):\n        return self.name\n\n    @property\n    def rows(self):\n        return self._rows\n\n    @rows.setter\n    def rows(self, rows):\n        self._rows = rows\n\n    @property\n    def nRows(self):\n        'Number of rows on this sheet.  Override in subclass.'\n        return 0\n\n    def __contains__(self, vs):\n        if self.source is vs:\n            return True\n        if isinstance(self.source, BaseSheet):\n            return vs in self.source\n        return False\n\n    @property\n    def displaySource(self):\n        if isinstance(self.source, BaseSheet):\n            return f'the *{self.source}* sheet'\n\n        if isinstance(self.source, (list, tuple)):\n            if len(self.source) == 1:\n                return f'the **{self.source[0]}** sheet'\n            return f'{len(self.source)} sheets'\n\n        return f'**{self.source}**'\n\n    def execCommand(self, longname, vdglobals=None, keystrokes=None):\n        if ' ' in longname:\n            cmd, arg = longname.split(' ', maxsplit=1)\n            vd.injectInput(arg)\n\n        cmd = self.getCommand(longname or keystrokes)\n        if not cmd:\n            vd.fail('no command for %s' % (longname or keystrokes))\n            return False\n\n        escaped = False\n        err = ''\n\n        if vdglobals is None:\n            vdglobals = vd.getGlobals()\n\n        vd.cmdlog  # make sure cmdlog has been created for first command\n\n        try:\n            for hookfunc in vd.beforeExecHooks:\n                hookfunc(self, cmd, '', keystrokes)\n            escaped = self.execCommand2(cmd, vdglobals=vdglobals)\n        except Exception as e:\n            vd.debug(cmd.execstr)\n            err = vd.exceptionCaught(e)\n            escaped = True\n\n        if vd.cmdlog:\n            # sheet may have changed\n            vd.callNoExceptions(vd.cmdlog.afterExecSheet, vd.activeSheet, escaped, err)\n\n        vd.callNoExceptions(self.checkCursor)\n\n        vd.clearCaches()\n\n        for t in self.currentThreads:\n            if not hasattr(t, 'lastCommand'):\n                t.lastCommand = True\n\n        return escaped\n\n    @property\n    def lastCommandThreads(self):\n        return [t for t in self.currentThreads if getattr(t, 'lastCommand', None)]\n\n    @property\n    def names(self):\n        return self._names\n\n    @names.setter\n    def names(self, names):\n        if self._names:\n            vd.addUndo(setattr, self, 'names', self._names)\n        self._names = names\n        self._name = self.options.name_joiner.join(self.maybeClean(str(x)) for x in self._names)\n\n    @property\n    def name(self):\n        'Name of this sheet.'\n        return self._name\n\n    @name.setter\n    def name(self, name):\n        'Set name without spaces.'\n        if self._names:\n            vd.addUndo(setattr, self, 'names', self._names)\n        self._name = self.maybeClean(str(name))\n        self._names = [self._name]\n\n    def maybeClean(self, s):\n        'stub'\n        return s\n\n    def recalc(self):\n        'Clear any calculated value caches.'\n        pass\n\n    def refresh(self):\n        'Recalculate any internal state needed for `draw()`.  Overridable.'\n        pass\n\n    def ensureLoaded(self):\n        'Call ``reload()`` if not already loaded.'\n        if self.rows is UNLOADED:\n            self.rows = []  # prevent auto-reload from running twice\n            return self.reload()   # likely launches new thread\n\n    def reload(self):\n        'Load sheet from *self.source*.  Override in subclass.'\n        vd.error('no reload')\n\n    @property\n    def cursorRow(self):\n        'The row object at the row cursor.  Overridable.'\n        return None\n\n    def checkCursor(self):\n        'Check cursor and fix if out-of-bounds.  Overridable.'\n        pass\n\n    def evalExpr(self, expr, **kwargs):\n        'Evaluate Python expression *expr* in the context of *kwargs* (may vary by sheet type).'\n        return eval(expr, vd.getGlobals(), dict(sheet=self))\n\n    def formatString(self, fmt, **kwargs):\n        'Return formatted string with *sheet* and *vd* accessible to expressions.  Missing expressions return empty strings instead of error.'\n        return MissingAttrFormatter().format(fmt, sheet=self, vd=vd, **kwargs)\n\n\n@VisiData.api\ndef redraw(vd):\n    'Clear the terminal screen and let the next draw cycle recreate the windows and redraw everything.'\n    for vs in vd.sheets:\n        vs._scr = None\n    if vd.win1: vd.win1.clear()\n    if vd.win2: vd.win2.clear()\n    if vd.scrFull:\n        vd.scrFull.clear()\n        vd.setWindows(vd.scrFull)\n\n\n@VisiData.property\ndef sheet(self):\n    return self.activeSheet\n\n\n@VisiData.api\ndef isLongname(self, ks:str):\n    'Return True if *ks* is a longname.'\n    return ('-' in ks) and (ks[-1] != '-') or (len(ks) > 3 and ks.islower())\n\n\n@VisiData.api\ndef getSheet(vd, sheetname):\n    'Return Sheet from the sheet stack.  *sheetname* can be a sheet name or a sheet number indexing directly into ``vd.sheets``.'\n    if isinstance(sheetname, BaseSheet):\n        return sheetname\n\n    matchingSheets = [x for x in vd.sheets if x.name == sheetname]\n    if matchingSheets:\n        if len(matchingSheets) > 1:\n            vd.warning('more than one sheet named \"%s\"' % sheetname)\n        return matchingSheets[0]\n\n    try:\n        sheetidx = int(sheetname)\n        return vd.sheets[sheetidx]\n    except (ValueError, IndexError):\n        pass\n\n    if sheetname == 'options':\n        vs = vd.globalOptionsSheet\n        vs.reload()\n        vs.vd = vd\n        return vs\n"
  },
  {
    "path": "visidata/bezier.py",
    "content": "import math\n\n\ndef bezier(x1, y1, x2, y2, x3, y3):\n    'Generate (x,y) coordinates on quadratic curve from (x1,y1) to (x3,y3) with control point at (x2,y2).'\n    yield (x1, y1)\n    yield from _recursive_bezier(x1, y1, x2, y2, x3, y3)\n    yield (x3, y3)\n\n\ndef _recursive_bezier(x1, y1, x2, y2, x3, y3, level=0):\n    'from http://www.antigrain.com/research/adaptive_bezier/'\n    m_approximation_scale = 10.0\n    m_distance_tolerance = (0.5 / m_approximation_scale) ** 2\n    m_angle_tolerance = 1 * 2*math.pi/360  # 15 degrees in rads\n    curve_angle_tolerance_epsilon = 0.01\n    curve_recursion_limit = 32\n    curve_collinearity_epsilon = 1e-30\n\n    if level > curve_recursion_limit:\n        return\n\n    # Calculate all the mid-points of the line segments\n\n    x12   = (x1 + x2) / 2\n    y12   = (y1 + y2) / 2\n    x23   = (x2 + x3) / 2\n    y23   = (y2 + y3) / 2\n    x123  = (x12 + x23) / 2\n    y123  = (y12 + y23) / 2\n\n    dx = x3-x1\n    dy = y3-y1\n    d = abs(((x2 - x3) * dy - (y2 - y3) * dx))\n\n    if d > curve_collinearity_epsilon:\n        # Regular care\n        if d*d <= m_distance_tolerance * (dx*dx + dy*dy):\n            # If the curvature doesn't exceed the distance_tolerance value, we tend to finish subdivisions.\n            if m_angle_tolerance < curve_angle_tolerance_epsilon:\n                yield (x123, y123)\n                return\n\n            # Angle & Cusp Condition\n            da = abs(math.atan2(y3 - y2, x3 - x2) - math.atan2(y2 - y1, x2 - x1))\n            if da >= math.pi:\n                da = 2*math.pi - da\n\n            if da < m_angle_tolerance:\n                # Finally we can stop the recursion\n                yield (x123, y123)\n                return\n    else:\n        # Collinear case\n        dx = x123 - (x1 + x3) / 2\n        dy = y123 - (y1 + y3) / 2\n        if dx*dx + dy*dy <= m_distance_tolerance:\n            yield (x123, y123)\n            return\n\n    # Continue subdivision\n    yield from _recursive_bezier(x1, y1, x12, y12, x123, y123, level + 1)\n    yield from _recursive_bezier(x123, y123, x23, y23, x3, y3, level + 1)\n"
  },
  {
    "path": "visidata/canvas.py",
    "content": "import math\nimport random\n\nfrom collections import defaultdict, Counter, OrderedDict\nfrom visidata import vd, asyncthread, colors, update_attr, clipdraw, dispwidth\nfrom visidata import BaseSheet, Column, Progress, ColorAttr\nfrom visidata.bezier import bezier\n\n# see www/design/graphics.md\n\nvd.theme_option('disp_graph_labels', True, 'show axes and legend on graph')\nvd.theme_option('plot_colors', 'green red yellow cyan magenta white 38 136 168', 'list of distinct colors to use for plotting distinct objects')\nvd.theme_option('disp_canvas_charset', ''.join(chr(0x2800+i) for i in range(256)), 'charset to render 2x4 blocks on canvas')\nvd.theme_option('disp_graph_pixel_random', False, 'randomly choose attr from set of pixels instead of most common')\nvd.theme_option('disp_zoom_incr', 2.0, 'amount to multiply current zoomlevel when zooming')\nvd.theme_option('color_graph_hidden', '238 blue', 'color of legend for hidden attribute')\nvd.theme_option('color_graph_selected', 'bold', 'color of selected graph points')\n\n\nclass Point:\n    def __init__(self, x, y):\n        self.x = x\n        self.y = y\n\n    def __repr__(self):\n        if isinstance(self.x, int):\n            return '(%d,%d)' % (self.x, self.y)\n        else:\n            return '(%.02f,%.02f)' % (self.x, self.y)\n\n    @property\n    def xy(self):\n        return (self.x, self.y)\n\nclass Box:\n    def __init__(self, x, y, w=0, h=0):\n        self.xmin = x\n        self.ymin = y\n        self.w = w\n        self.h = h\n\n    def __repr__(self):\n        return '[%s+%s,%s+%s]' % (self.xmin, self.w, self.ymin, self.h)\n\n    @property\n    def xymin(self):\n        return Point(self.xmin, self.ymin)\n\n    @property\n    def xmax(self):\n        return self.xmin + self.w\n\n    @property\n    def ymax(self):\n        return self.ymin + self.h\n\n    @property\n    def center(self):\n        return Point(self.xcenter, self.ycenter)\n\n    @property\n    def xcenter(self):\n        return self.xmin + self.w/2\n\n    @property\n    def ycenter(self):\n        return self.ymin + self.h/2\n\n    def contains(self, x, y):\n        return x >= self.xmin and \\\n               x < self.xmax and \\\n               y >= self.ymin and \\\n               y < self.ymax\n\ndef BoundingBox(x1, y1, x2, y2):\n    return Box(min(x1, x2), min(y1, y2), abs(x2-x1), abs(y2-y1))\n\n\ndef clipline(x1, y1, x2, y2, xmin, ymin, xmax, ymax):\n    'Liang-Barsky algorithm, returns [xn1,yn1,xn2,yn2] of clipped line within given area, or None'\n    dx = x2-x1\n    dy = y2-y1\n    pq = [\n        (-dx, x1-xmin),  # left\n        ( dx, xmax-x1),  # right\n        (-dy, y1-ymin),  # bottom\n        ( dy, ymax-y1),  # top\n    ]\n\n    u1, u2 = 0, 1\n    for p, q in pq:\n        if p < 0:  # from outside to inside\n            u1 = max(u1, q/p)\n        elif p > 0:  # from inside to outside\n            u2 = min(u2, q/p)\n        else: #  p == 0:  # parallel to bbox\n            if q < 0:  # completely outside bbox\n                return None\n\n    if u1 > u2:  # completely outside bbox\n        return None\n\n    xn1 = x1 + dx*u1\n    yn1 = y1 + dy*u1\n\n    xn2 = x1 + dx*u2\n    yn2 = y1 + dy*u2\n\n    return xn1, yn1, xn2, yn2\n\ndef iterline(x1, y1, x2, y2):\n    'Yields (x, y) coords of line from (x1, y1) to (x2, y2)'\n    xdiff = abs(x2-x1)\n    ydiff = abs(y2-y1)\n    xdir = 1 if x1 <= x2 else -1\n    ydir = 1 if y1 <= y2 else -1\n\n    r = math.ceil(max(xdiff, ydiff))\n    if r == 0:  # point, not line\n        yield x1, y1\n    else:\n        x, y = math.floor(x1), math.floor(y1)\n        i = 0\n        while i < r:\n            x += xdir * xdiff / r\n            y += ydir * ydiff / r\n\n            yield x, y\n            i += 1\n\n\ndef anySelected(vs, rows):\n    for r in rows:\n        if vs.isSelected(r):\n            return True\n\n#  - width/height are exactly equal to the number of pixels displayable, and can change at any time.\n#  - needs to refresh from source on resize\nclass Plotter(BaseSheet):\n    'pixel-addressable display of entire terminal with (x,y) integer pixel coordinates'\n    columns=[Column('_')]  # to eliminate errors outside of draw()\n    rowtype='pixels'\n    def __init__(self, *names, **kwargs):\n        super().__init__(*names, **kwargs)\n        self.labels = []  # (x, y, text, attr, row)\n        self.hiddenAttrs = set()\n        self.needsRefresh = False\n        self.resetCanvasDimensions(1, 1)  #2171\n\n    @property\n    def nRows(self):\n        return (self.plotwidth* self.plotheight)\n\n    def resetCanvasDimensions(self, windowHeight, windowWidth):\n        'sets total available canvas dimensions to (windowHeight, windowWidth) (in char cells)'\n        self.plotwidth = windowWidth*2\n        self.plotheight = (windowHeight-1)*4  # exclude status line\n\n        # pixels[y][x] = { attr: list(rows), ... }\n        self.pixels = [[defaultdict(list) for x in range(self.plotwidth)] for y in range(self.plotheight)]\n\n    def plotpixel(self, x, y, attr:\"str|ColorAttr=''\", row=None):\n        self.pixels[y][x][attr].append(row)\n\n    def plotline(self, x1, y1, x2, y2, attr:\"str|ColorAttr=''\", row=None):\n        for x, y in iterline(x1, y1, x2, y2):\n            self.plotpixel(math.ceil(x), math.ceil(y), attr, row)\n\n    def plotlabel(self, x, y, text, attr:\"str|ColorAttr=''\", row=None):\n        self.labels.append((x, y, text, attr, row))\n\n    def plotlegend(self, i, txt, attr:\"str|ColorAttr=''\", width=15):\n        # move it 1 character to the left b/c the rightmost column can't be drawn to\n        self.plotlabel(self.plotwidth-(width+1)*2, i*4, txt, attr)\n\n    @property\n    def plotterCursorBox(self):\n        'Returns pixel bounds of cursor as a Box.  Override to provide a cursor.'\n        return Box(0,0,0,0)\n\n    @property\n    def plotterMouse(self):\n        return Point(*self.plotterFromTerminalCoord(self.mouseX, self.mouseY))\n\n    def plotterFromTerminalCoord(self, x, y):\n        return x*2, y*4\n\n    def getPixelAttrRandom(self, x, y) -> str:\n        'weighted-random choice of colornum at this pixel.'\n        c = list(attr for attr, rows in self.pixels[y][x].items()\n                         for r in rows if attr and attr not in self.hiddenAttrs)\n        return random.choice(c) if c else 0\n\n    def getPixelAttrMost(self, x, y) -> str:\n        'most common colornum at this pixel.'\n        r = self.pixels[y][x]\n        if not r:\n            return 0\n        c = [(len(rows), attr, rows) for attr, rows in r.items() if attr and attr not in self.hiddenAttrs]\n        if not c:\n            return 0\n        _, attr, rows = max(c)\n        return attr\n\n    def hideAttr(self, attr:str, hide=True):\n        if hide:\n            self.hiddenAttrs.add(attr)\n        else:\n            self.hiddenAttrs.remove(attr)\n        self.plotlegends()\n\n    def rowsWithin(self, plotter_bbox, invert_y=False):\n        'return list of deduped rows within plotter_bbox'\n        ret = {}\n\n        x_start = max(0, plotter_bbox.xmin)\n        if len(self.pixels) == 0: return []\n        x_end = min(len(self.pixels[0]), plotter_bbox.xmax)\n\n        y_start = max(0, plotter_bbox.ymin)\n        y_end = min(len(self.pixels), plotter_bbox.ymax)\n        if invert_y:\n            y_range = range(y_end-1, y_start-1, -1)\n        else:\n            y_range = range(y_start, y_end)\n\n        for x in range(x_start, x_end):\n            for y in y_range:\n                for attr, rows in self.pixels[y][x].items():\n                    if attr not in self.hiddenAttrs:\n                        for r in rows:\n                            ret[self.source.rowid(r)] = r\n        return list(ret.values())\n\n    def draw(self, scr):\n        windowHeight, windowWidth = scr.getmaxyx()\n        if self.needsRefresh:\n            self.render(windowHeight, windowWidth)\n\n        self.draw_pixels(scr)\n        self.draw_labels(scr)\n\n    def draw_empty(self, scr):\n        # use draw_empty() when calling draw_pixels() with clear_empty_squares=False\n        cursorBBox = self.plotterCursorBox\n        for char_y in range(0, self.plotheight//4):\n            for char_x in range(0, self.plotwidth//2):\n                cattr = ColorAttr()\n                ch = ' '\n                # draw cursor\n                if cursorBBox.contains(char_x*2, char_y*4) or \\\n                    cursorBBox.contains(char_x*2+1, char_y*4+3):\n                    cattr = update_attr(cattr, colors.color_current_row)\n                scr.addstr(char_y, char_x, ch, cattr.attr)\n\n    def draw_pixels(self, scr, clear_empty_squares=True):\n        disp_canvas_charset = self.options.disp_canvas_charset or ' o'\n        disp_canvas_charset += (256 - len(disp_canvas_charset)) * disp_canvas_charset[-1]\n        if self.pixels:\n            cursorBBox = self.plotterCursorBox\n            getPixelAttr = self.getPixelAttrRandom if self.options.disp_graph_pixel_random else self.getPixelAttrMost\n\n            for char_y in range(0, self.plotheight//4):\n                for char_x in range(0, self.plotwidth//2):\n                    block_attrs = [\n                        getPixelAttr(char_x*2  , char_y*4  ),\n                        getPixelAttr(char_x*2  , char_y*4+1),\n                        getPixelAttr(char_x*2  , char_y*4+2),\n                        getPixelAttr(char_x*2+1, char_y*4  ),\n                        getPixelAttr(char_x*2+1, char_y*4+1),\n                        getPixelAttr(char_x*2+1, char_y*4+2),\n                        getPixelAttr(char_x*2  , char_y*4+3),\n                        getPixelAttr(char_x*2+1, char_y*4+3),\n                    ]\n\n                    pow2 = 1\n                    braille_num = 0\n                    for c in block_attrs:\n                        if c:\n                            braille_num += pow2\n                        pow2 *= 2\n\n                    ch = disp_canvas_charset[braille_num]\n                    if braille_num != 0:\n                        color = Counter(c for c in block_attrs if c).most_common(1)[0][0]\n                        cattr = colors.get_color(color)\n                    else:\n                        cattr = ColorAttr()\n                        # don't erase empty squares, useful for subclasses that draw elements like reflines\n                        # before pixels are drawn\n                        if not clear_empty_squares:\n                            continue\n\n                    # draw cursor\n                    if cursorBBox.contains(char_x*2, char_y*4) or \\\n                       cursorBBox.contains(char_x*2+1, char_y*4+3):\n                        cattr = update_attr(cattr, colors.color_current_row)\n\n                    if cattr.attr:\n                        scr.addstr(char_y, char_x, ch, cattr.attr)\n\n    def draw_labels(self, scr):\n        def _mark_overlap_text(labels, textobj):\n            def _overlaps(a, b):\n                a_x1, _, a_txt, _, _ = a\n                b_x1, _, b_txt, _, _ = b\n                a_x2 = a_x1 + dispwidth(a_txt, literal=True)\n                b_x2 = b_x1 + dispwidth(b_txt, literal=True)\n                if a_x1 < b_x1 < a_x2 or a_x1 < b_x2 < a_x2 or \\\n                   b_x1 < a_x1 < b_x2 or b_x1 < a_x2 < b_x2:\n                   return True\n                else:\n                   return False\n\n            label_fldraw = [textobj, True]\n            labels.append(label_fldraw)\n            for o in labels:\n                if _overlaps(o[0], textobj):\n                    o[1] = False\n                    label_fldraw[1] = False\n\n        if self.options.disp_graph_labels:\n            labels_by_line = defaultdict(list) # y -> text labels\n\n            for pix_x, pix_y, txt, attr, row in self.labels:\n                if attr in self.hiddenAttrs:\n                    continue\n                char_y = int(pix_y/4)\n                char_x = int(pix_x/2)\n                if row is not None:\n                    char_x -= math.ceil(dispwidth(txt, literal=True)/2)*2\n                o = (char_x, char_y, txt, attr, row)\n                _mark_overlap_text(labels_by_line[char_y], o)\n\n            for line in labels_by_line.values():\n                for o, fldraw in line:\n                    if fldraw:\n                        char_x, char_y, txt, attr, row = o\n                        cattr = colors.get_color(attr)\n                        clipdraw(scr, char_y, char_x, txt, cattr, dispwidth(txt, literal=True), literal=True)\n                        cursorBBox = self.plotterCursorBox\n                        for c in txt:\n                            w = dispwidth(c, literal=True)\n                            # draw cursor if the cursor contains the midpoint of the character cell\n                            if cursorBBox.contains(char_x*2+1, char_y*4+2):\n                                char_attr = update_attr(cattr, colors.color_current_row)\n                                clipdraw(scr, char_y, char_x, c, char_attr, w, literal=True)\n                            char_x += w\n\n\n# - has a cursor, of arbitrary position and width/height (not restricted to current zoom)\nclass Canvas(Plotter):\n    'zoomable/scrollable virtual canvas with (x,y) coordinates in arbitrary units'\n    rowtype = 'plots'\n    leftMarginPixels = 10*2\n    rightMarginPixels = 4*2\n    topMarginPixels = 0*4\n    bottomMarginPixels = 1*4  # reserve bottom line for x axis\n    guide = '# Canvas\\n'\n\n    def __init__(self, *names, **kwargs):\n        self.left_margin = self.leftMarginPixels\n        super().__init__(*names, **kwargs)\n\n        self.canvasBox = None   # bounding box of entire canvas, in canvas units\n        self.visibleBox = None  # bounding box of visible canvas, in canvas units\n        self.cursorBox = None   # bounding box of cursor, in canvas units\n\n        self.aspectRatio = 0.0\n        self.xzoomlevel = 1.0\n        self.yzoomlevel = 1.0\n        self.needsRefresh = False\n\n        self.polylines = []   # list of ([(canvas_x, canvas_y), ...], fgcolornum, row)\n        self.gridlabels = []  # list of (grid_x, grid_y, label, fgcolornum, row)\n\n        self.legends = OrderedDict()   # txt: attr  (visible legends only)\n        self.plotAttrs = {}   # key: attr  (all keys, for speed)\n        self.reset()\n\n    @property\n    def nRows(self):\n        return len(self.polylines)\n\n    def reset(self):\n        'clear everything in preparation for a fresh reload()'\n        self.polylines.clear()\n        self.canvasBox = None\n        self.visibleBox = None\n        self.cursorBox = None\n        self.left_margin = self.leftMarginPixels\n        self.legends.clear()\n        self.legendwidth = 0\n        self.plotAttrs.clear()\n        self.unusedAttrs = list(self.options.plot_colors.split())\n\n    def plotColor(self, k) -> str:\n        attr = self.plotAttrs.get(k, None)\n        if attr is None:\n            if self.unusedAttrs:\n                attr = self.unusedAttrs.pop(0)\n                legend = ' '.join(str(x) for x in k)\n            else:\n                lastlegend, attr = list(self.legends.items())[-1]\n                del self.legends[lastlegend]\n                legend = '[other]'\n\n            self.legendwidth = max(self.legendwidth, dispwidth(legend, literal=True))\n            self.legends[legend] = attr\n            self.plotAttrs[k] = attr\n        return attr\n\n    def resetCanvasDimensions(self, windowHeight, windowWidth):\n        old_plotsize = None\n        realign_cursor = False\n        if hasattr(self, 'plotwidth') and hasattr(self, 'plotheight'):\n            old_plotsize = [self.plotheight, self.plotwidth]\n            if hasattr(self, 'cursorBox') and self.cursorBox and self.visibleBox:\n                # if the cursor is at the origin, realign it with the origin after the resize\n                if self.cursorBox.xmin == self.visibleBox.xmin and self.cursorBox.ymin == self.calcBottomCursorY():\n                    realign_cursor = True\n        super().resetCanvasDimensions(windowHeight, windowWidth)\n        # if window is not big enough to contain a particular margin, pretend that margin is 0\n        pvbox_x = pvbox_y = 0\n        if self.plotwidth > self.left_margin:\n            pvbox_x = self.left_margin\n        if self.plotheight > self.topMarginPixels:\n            pvbox_y = self.topMarginPixels\n        if hasattr(self, 'legendwidth'):\n            # +4 = 1 empty space after the graph + 2 characters for the legend prefixes of \"1:\", \"2:\", etc +\n            #      1 character for the empty rightmost column\n            new_margin = max(self.rightMarginPixels, (self.legendwidth+4)*2)\n            pvbox_xmax = self.plotwidth-new_margin-1\n            # ensure the graph data takes up at least 3/4 of the width of the screen no matter how wide the legend gets\n            pvbox_xmax = max(pvbox_xmax, math.ceil(self.plotwidth * 3/4)//2*2 + 1)\n        else:\n            pvbox_xmax = self.plotwidth-self.rightMarginPixels-1\n        self.left_margin = min(self.left_margin, math.ceil(self.plotwidth * 1/3)//2*2)\n        # enforce a minimum plotview box size of 1x1\n        pvbox_xmax = max(pvbox_xmax, 1)\n        pvbox_ymax = max(self.plotheight-self.bottomMarginPixels-1, 1)\n        self.plotviewBox = BoundingBox(pvbox_x, pvbox_y, pvbox_xmax, pvbox_ymax)\n        if [self.plotheight, self.plotwidth] != old_plotsize:\n            if hasattr(self, 'cursorBox') and self.cursorBox:\n                self.setCursorSizeInPlotterPixels(2, 4)\n            if realign_cursor:\n                self.cursorBox.ymin = self.calcBottomCursorY()\n\n    @property\n    def statusLine(self):\n        return 'canvas %s visible %s cursor %s' % (self.canvasBox, self.visibleBox, self.cursorBox)\n\n    @property\n    def canvasMouse(self):\n        x = self.plotterMouse.x\n        y = self.plotterMouse.y\n        if not self.canvasBox: return None\n        p = Point(self.unscaleX(x), self.unscaleY(y))\n        return p\n\n    def setCursorSize(self, p):\n        'sets width based on diagonal corner p'\n        if not p: return\n        self.cursorBox = BoundingBox(self.cursorBox.xmin, self.cursorBox.ymin, p.x, p.y)\n        self.cursorBox.w = max(self.cursorBox.w, self.canvasCharWidth)\n        self.cursorBox.h = max(self.cursorBox.h, self.canvasCharHeight)\n\n    def setCursorSizeInPlotterPixels(self, w, h):\n        self.setCursorSize(Point(self.cursorBox.xmin + w/2 * self.canvasCharWidth,\n                                 self.cursorBox.ymin + h/4 * self.canvasCharHeight))\n\n    def formatX(self, v):\n        return str(v)\n\n    def formatY(self, v):\n        return str(v)\n\n    def commandCursor(sheet, execstr):\n        'Return (col, row) of cursor suitable for cmdlog replay of execstr.'\n        contains = lambda s, *substrs: any((a in s) for a in substrs)\n        colname, rowname = '', ''\n        if contains(execstr, 'plotterCursorBox'):\n            bb = sheet.cursorBox\n            colname = '%s %s' % (sheet.formatX(bb.xmin), sheet.formatX(bb.xmax))\n            rowname = '%s %s' % (sheet.formatY(bb.ymin), sheet.formatY(bb.ymax))\n        elif contains(execstr, 'plotterVisibleBox'):\n            bb = sheet.visibleBox\n            colname = '%s %s' % (sheet.formatX(bb.xmin), sheet.formatX(bb.xmax))\n            rowname = '%s %s' % (sheet.formatY(bb.ymin), sheet.formatY(bb.ymax))\n        return colname, rowname\n\n    @property\n    def canvasCharWidth(self):\n        'Width in canvas units of a single char in the terminal'\n        return self.visibleBox.w*2/self.plotviewBox.w\n\n    @property\n    def canvasCharHeight(self):\n        'Height in canvas units of a single char in the terminal'\n        return self.visibleBox.h*4/self.plotviewBox.h\n\n    @property\n    def plotterVisibleBox(self):\n        return BoundingBox(self.scaleX(self.visibleBox.xmin),\n                           self.scaleY(self.visibleBox.ymin),\n                           self.scaleX(self.visibleBox.xmax),\n                           self.scaleY(self.visibleBox.ymax))\n\n    @property\n    def plotterCursorBox(self):\n        if self.cursorBox is None:\n            return Box(0,0,0,0)\n        return BoundingBox(self.scaleX(self.cursorBox.xmin),\n                           self.scaleY(self.cursorBox.ymin),\n                           self.scaleX(self.cursorBox.xmax),\n                           self.scaleY(self.cursorBox.ymax))\n\n    def startCursor(self):\n        cm = self.canvasMouse\n        if cm:\n            self.cursorBox = Box(*cm.xy)\n            return True\n        else:\n            return None\n\n    def point(self, x, y, attr:\"str|ColorAttr=''\", row=None):\n        self.polylines.append(([(x, y)], attr, row))\n\n    def line(self, x1, y1, x2, y2, attr:\"str|ColorAttr=''\", row=None):\n        self.polylines.append(([(x1, y1), (x2, y2)], attr, row))\n\n    def polyline(self, vertexes, attr:\"str|ColorAttr=''\", row=None):\n        'adds lines for (x,y) vertexes of a polygon'\n        self.polylines.append((vertexes, attr, row))\n\n    def polygon(self, vertexes, attr:\"str|ColorAttr=''\", row=None):\n        'adds lines for (x,y) vertexes of a polygon'\n        self.polylines.append((vertexes + [vertexes[0]], attr, row))\n\n    def qcurve(self, vertexes, attr:\"str|ColorAttr=''\", row=None):\n        'Draw quadratic curve from vertexes[0] to vertexes[2] with control point at vertexes[1]'\n        if len(vertexes) != 3:\n            vd.fail('need exactly 3 points for qcurve (got %d)' % len(vertexes))\n\n        x1, y1 = vertexes[0]\n        x2, y2 = vertexes[1]\n        x3, y3 = vertexes[2]\n\n        for x, y in bezier(x1, y1, x2, y2, x3, y3):\n            self.point(x, y, attr, row)\n\n    def label(self, x, y, text, attr:\"str|ColorAttr=''\", row=None):\n        self.gridlabels.append((x, y, text, attr, row))\n\n    def fixPoint(self, plotterPoint, canvasPoint):\n        'adjust visibleBox.xymin so that canvasPoint is plotted at plotterPoint'\n        self.visibleBox.xmin = canvasPoint.x - self.canvasW(plotterPoint.x-self.plotviewBox.xmin)\n        self.visibleBox.ymin = canvasPoint.y - self.canvasH(plotterPoint.y-self.plotviewBox.ymin)\n        self.resetBounds()\n\n    def zoomTo(self, bbox):\n        'set visible area to bbox, maintaining aspectRatio if applicable'\n        self.fixPoint(self.plotviewBox.xymin, bbox.xymin)\n        self.xzoomlevel=bbox.w/self.canvasBox.w\n        self.yzoomlevel=bbox.h/self.canvasBox.h\n        self.resetBounds()\n\n    def incrZoom(self, incr):\n        self.xzoomlevel *= incr\n        self.yzoomlevel *= incr\n\n        self.resetBounds()\n\n    def resetBounds(self, refresh=True):\n        'create canvasBox and cursorBox if necessary, and set visibleBox w/h according to zoomlevels.  then redisplay legends.'\n        if not self.canvasBox:\n            xmin, ymin, xmax, ymax = None, None, None, None\n            for vertexes, attr, row in self.polylines:\n                for x, y in vertexes:\n                    if xmin is None or x < xmin: xmin = x\n                    if ymin is None or y < ymin: ymin = y\n                    if xmax is None or x > xmax: xmax = x\n                    if ymax is None or y > ymax: ymax = y\n            xmin = xmin or 0\n            xmax = xmax or 0\n            ymin = ymin or 0\n            ymax = ymax or 0\n            if xmin == xmax:\n                xmax += 1\n                if xmin == xmax:  #handle large floats that were unchanged by += 1\n                    xmin = xmin * 0.99  #the alternative of increasing xmax could hit infinity\n            if ymin == ymax:\n                ymax += 1\n                if ymin == ymax:\n                    ymin = ymin * 0.99\n            self.canvasBox = BoundingBox(float(xmin), float(ymin), float(xmax), float(ymax))\n\n        w = self.calcVisibleBoxWidth()\n        h = self.calcVisibleBoxHeight()\n        if not self.visibleBox:\n            # initialize minx/miny, but w/h must be set first to center properly\n            self.visibleBox = Box(0, 0, w, h)\n            self.visibleBox.xmin = self.canvasBox.xmin + (self.canvasBox.w / 2) * (1 - self.xzoomlevel)\n            self.visibleBox.ymin = self.canvasBox.ymin + (self.canvasBox.h / 2) * (1 - self.yzoomlevel)\n        else:\n            self.visibleBox.w = w\n            self.visibleBox.h = h\n\n        if not self.cursorBox:\n            cb_xmin = self.visibleBox.xmin\n            cb_ymin = self.calcBottomCursorY()\n            self.cursorBox = Box(cb_xmin, cb_ymin, self.canvasCharWidth, self.canvasCharHeight)\n\n        self.plotlegends()\n        if refresh:\n            self.refresh()\n\n    def calcTopCursorY(self):\n        'ymin for the cursor that will align its top with the top edge of the graph'\n        # + (1/4*self.canvasCharHeight) shifts the cursor up by 1 plotter pixel.\n        # That shift makes the cursor contain the top data point.\n        # Otherwise, the top data point would have y == plotterCursorBox.ymax,\n        # which would not be inside plotterCursorBox. Shifting the cursor makes\n        # plotterCursorBox.ymax > y for that top point.\n        return self.visibleBox.ymax - self.cursorBox.h + (1/4*self.canvasCharHeight)\n\n    def calcBottomCursorY(self):\n        'ymin for the cursor that will align its bottom with the bottom edge of the graph'\n        return self.visibleBox.ymin\n\n    def plotlegends(self):\n        # display labels\n        for i, (legend, attr) in enumerate(self.legends.items()):\n            self.addCommand(str(i+1), f'toggle-{i+1}', f'hideAttr(\"{attr}\", \"{attr}\" not in hiddenAttrs)', f'toggle display of \"{legend}\"')\n            if attr in self.hiddenAttrs:\n                attr = 'graph_hidden'\n            # add 2 characters to width to account for '1:' '2:' etc\n            self.plotlegend(i, '%s:%s'%(i+1,legend), attr, width=self.legendwidth+2)\n\n    def checkCursor(self):\n        'override Sheet.checkCursor'\n        if self.visibleBox and self.cursorBox:\n            if self.cursorBox.h < self.canvasCharHeight:\n                self.cursorBox.h = self.canvasCharHeight*3/4\n            if self.cursorBox.w < self.canvasCharWidth:\n                self.cursorBox.w = self.canvasCharWidth*3/4\n\n        return False\n\n    @property\n    def xScaler(self):\n        xratio = self.plotviewBox.w/(self.canvasBox.w*self.xzoomlevel)\n        if self.aspectRatio:\n            yratio = self.plotviewBox.h/(self.canvasBox.h*self.yzoomlevel)\n            return self.aspectRatio*min(xratio, yratio)\n        else:\n            return xratio\n\n    @property\n    def yScaler(self):\n        yratio = self.plotviewBox.h/(self.canvasBox.h*self.yzoomlevel)\n        if self.aspectRatio:\n            xratio = self.plotviewBox.w/(self.canvasBox.w*self.xzoomlevel)\n            return min(xratio, yratio)\n        else:\n            return yratio\n\n    def calcVisibleBoxWidth(self):\n        w = self.canvasBox.w * self.xzoomlevel\n        if self.aspectRatio:\n            h = self.canvasBox.h * self.yzoomlevel\n            xratio = self.plotviewBox.w / w\n            yratio = self.plotviewBox.h / h\n            if xratio <= yratio:\n                return w / self.aspectRatio\n            else:\n                return self.plotviewBox.w / (self.aspectRatio * yratio)\n        else:\n            return w\n\n    def calcVisibleBoxHeight(self):\n        h = self.canvasBox.h * self.yzoomlevel\n        if self.aspectRatio:\n            w = self.canvasBox.w * self.yzoomlevel\n            xratio = self.plotviewBox.w / w\n            yratio = self.plotviewBox.h / h\n            if xratio < yratio:\n                return self.plotviewBox.h / xratio\n            else:\n                return h\n        else:\n            return h\n\n    def scaleX(self, canvasX) -> int:\n        'returns a plotter x coordinate'\n        return self.plotviewBox.xmin+round((canvasX-self.visibleBox.xmin)*self.xScaler)\n\n    def scaleY(self, canvasY) -> int:\n        'returns a plotter y coordinate'\n        return self.plotviewBox.ymin+round((canvasY-self.visibleBox.ymin)*self.yScaler)\n\n    def unscaleX(self, plotterX):\n        'performs the inverse of scaleX, returns a canvas x coordinate'\n        return (plotterX-self.plotviewBox.xmin)/self.xScaler + self.visibleBox.xmin\n\n    def unscaleY(self, plotterY):\n        'performs the inverse of scaleY, returns a canvas y coordinate'\n        return (plotterY-self.plotviewBox.ymin)/self.yScaler + self.visibleBox.ymin\n\n    def canvasW(self, plotter_width):\n        'plotter X units to canvas units'\n        return plotter_width/self.xScaler\n\n    def canvasH(self, plotter_height):\n        'plotter Y units to canvas units'\n        return plotter_height/self.yScaler\n\n    def refresh(self):\n        'triggers render() on next draw()'\n        self.needsRefresh = True\n\n    def render(self, h, w):\n        'resets plotter, cancels previous render threads, spawns a new render'\n        self.needsRefresh = False\n        vd.cancelThread(*(t for t in self.currentThreads if t.name == 'plotAll_async'))\n        self.labels.clear()\n        self.resetCanvasDimensions(h, w)\n        self.resetBounds(refresh=False)\n        self.render_async()\n\n    @asyncthread\n    def render_async(self):\n        self.plot_elements()\n\n    def plot_elements(self, invert_y=False):\n        'plots points and lines and text onto the plotter'\n\n        self.resetBounds(refresh=False)\n\n        bb = self.visibleBox\n        xmin, ymin, xmax, ymax = bb.xmin, bb.ymin, bb.xmax, bb.ymax\n        xfactor, yfactor = self.xScaler, self.yScaler\n        plotxmin = self.plotviewBox.xmin\n        if invert_y:\n            plotymax = self.plotviewBox.ymax\n        else:\n            plotymin = self.plotviewBox.ymin\n\n        for vertexes, attr, row in Progress(self.polylines, 'rendering'):\n            if len(vertexes) == 1:  # single point\n                x1, y1 = vertexes[0]\n                x1, y1 = float(x1), float(y1)\n                if xmin <= x1 <= xmax and ymin <= y1 <= ymax:\n                    # equivalent to self.scaleX(x1) and self.scaleY(y1), inlined for speed\n                    x = plotxmin+round((x1-xmin)*xfactor)\n                    if invert_y:\n                        y = plotymax-round((y1-ymin)*yfactor)\n                    else:\n                        y = plotymin+round((y1-ymin)*yfactor)\n                    self.plotpixel(x, y, attr, row)\n                continue\n\n            prev_x, prev_y = vertexes[0]\n            for x, y in vertexes[1:]:\n                r = clipline(prev_x, prev_y, x, y, xmin, ymin, xmax, ymax)\n                if r:\n                    x1, y1, x2, y2 = r\n                    x1 = plotxmin+float(x1-xmin)*xfactor\n                    x2 = plotxmin+float(x2-xmin)*xfactor\n                    if invert_y:\n                        y1 = plotymax-float(y1-ymin)*yfactor\n                        y2 = plotymax-float(y2-ymin)*yfactor\n                    else:\n                        y1 = plotymin+float(y1-ymin)*yfactor\n                        y2 = plotymin+float(y2-ymin)*yfactor\n                    self.plotline(x1, y1, x2, y2, attr, row)\n                prev_x, prev_y = x, y\n\n        for x, y, text, attr, row in Progress(self.gridlabels, 'labeling'):\n            self.plotlabel(self.scaleX(x), self.scaleY(y), text, attr, row)\n\n    @asyncthread\n    def deleteSourceRows(self, rows):\n        rows = list(rows)\n        self.source.copyRows(rows)\n        rowids = {self.source.rowid(r):True for r in rows}\n        self.source.deleteBy(lambda r,rowids=rowids: self.source.rowid(r) in rowids)\n        self.reload()\n\nPlotter.addCommand('v', 'visibility', 'options.disp_graph_labels = not options.disp_graph_labels', 'toggle disp_graph_labels option')\n\nCanvas.addCommand(None, 'go-left', 'if cursorBox: sheet.cursorBox.xmin -= cursorBox.w', 'move cursor left by its width')\nCanvas.addCommand(None, 'go-right', 'if cursorBox: sheet.cursorBox.xmin += cursorBox.w', 'move cursor right by its width' )\nCanvas.addCommand(None, 'go-up', 'if cursorBox: sheet.cursorBox.ymin -= cursorBox.h', 'move cursor up by its height')\nCanvas.addCommand(None, 'go-down', 'if cursorBox: sheet.cursorBox.ymin += cursorBox.h', 'move cursor down by its height')\nCanvas.addCommand(None, 'go-leftmost', 'if cursorBox: sheet.cursorBox.xmin = visibleBox.xmin', 'move cursor to left edge of visible canvas')\nCanvas.addCommand(None, 'go-rightmost', 'if cursorBox: sheet.cursorBox.xmin = visibleBox.xmax-cursorBox.w+(1/2*canvasCharWidth)', 'move cursor to right edge of visible canvas')\nCanvas.addCommand(None, 'go-top',    'if cursorBox: sheet.cursorBox.ymin = sheet.calcTopCursorY()', 'move cursor to top edge of visible canvas')\nCanvas.addCommand(None, 'go-bottom', 'if cursorBox: sheet.cursorBox.ymin = sheet.calcBottomCursorY()', 'move cursor to bottom edge of visible canvas')\n\nCanvas.addCommand(None, 'go-pagedown', 't=(visibleBox.ymax-visibleBox.ymin); sheet.cursorBox.ymin += t; sheet.visibleBox.ymin += t; refresh()', 'move cursor down to next visible page')\nCanvas.addCommand(None, 'go-pageup', 't=(visibleBox.ymax-visibleBox.ymin); sheet.cursorBox.ymin -= t; sheet.visibleBox.ymin -= t; refresh()', 'move cursor up to previous visible page')\n\nCanvas.addCommand('zh', 'go-left-small', 'sheet.cursorBox.xmin -= canvasCharWidth', 'move cursor left one character')\nCanvas.addCommand('zl', 'go-right-small', 'sheet.cursorBox.xmin += canvasCharWidth', 'move cursor right one character')\nCanvas.addCommand('zj', 'go-down-small', 'sheet.cursorBox.ymin += canvasCharHeight', 'move cursor down one character')\nCanvas.addCommand('zk', 'go-up-small', 'sheet.cursorBox.ymin -= canvasCharHeight', 'move cursor up one character')\n\nCanvas.addCommand('gH', 'resize-cursor-halfwide', 'sheet.cursorBox.w /= 2', 'halve cursor width')\nCanvas.addCommand('gL', 'resize-cursor-doublewide', 'sheet.cursorBox.w *= 2', 'double cursor width')\nCanvas.addCommand('gJ','resize-cursor-halfheight', 'sheet.cursorBox.h /= 2', 'halve cursor height')\nCanvas.addCommand('gK', 'resize-cursor-doubleheight', 'sheet.cursorBox.h *= 2', 'double cursor height')\n\nCanvas.addCommand('H', 'resize-cursor-thinner', 'sheet.cursorBox.w -= canvasCharWidth', 'decrease cursor width by one character')\nCanvas.addCommand('L', 'resize-cursor-wider', 'sheet.cursorBox.w += canvasCharWidth', 'increase cursor width by one character')\nCanvas.addCommand('J', 'resize-cursor-taller', 'sheet.cursorBox.h += canvasCharHeight', 'increase cursor height by one character')\nCanvas.addCommand('K', 'resize-cursor-shorter', 'sheet.cursorBox.h -= canvasCharHeight', 'decrease cursor height by one character')\nCanvas.addCommand('zz', 'zoom-cursor', 'zoomTo(cursorBox)', 'set visible bounds to cursor')\n\nCanvas.addCommand('-', 'zoomout-cursor', 'tmp=cursorBox.center; incrZoom(options.disp_zoom_incr); fixPoint(plotviewBox.center, tmp)', 'zoom out from cursor center')\nCanvas.addCommand('+', 'zoomin-cursor', 'tmp=cursorBox.center; incrZoom(1.0/options.disp_zoom_incr); fixPoint(plotviewBox.center, tmp)', 'zoom into cursor center')\nCanvas.addCommand('_', 'zoom-all', 'sheet.canvasBox = None; sheet.visibleBox = None; sheet.xzoomlevel=sheet.yzoomlevel=1.0; resetBounds()', 'zoom to fit full extent')\nCanvas.addCommand('z_', 'set-aspect', 'sheet.aspectRatio = float(input(\"aspect ratio=\", value=aspectRatio)); refresh()', 'set aspect ratio')\n\n# set cursor box with left click\nCanvas.addCommand('BUTTON1_PRESSED', 'start-cursor', 'startCursor()', 'start cursor box with left mouse button press')\nCanvas.addCommand('BUTTON1_RELEASED', 'end-cursor', 'cm=canvasMouse; setCursorSize(cm) if cm else None', 'end cursor box with left mouse button release')\nCanvas.addCommand('BUTTON1_CLICKED', 'remake-cursor', 'startCursor(); cm=canvasMouse; setCursorSize(cm) if cm else None', 'end cursor box with left mouse button release')\nCanvas.bindkey('BUTTON1_DOUBLE_CLICKED', 'remake-cursor')\nCanvas.bindkey('BUTTON1_TRIPLE_CLICKED', 'remake-cursor')\n\nCanvas.addCommand('BUTTON3_PRESSED', 'start-move', 'cm=canvasMouse; sheet.anchorPoint = cm if cm else None', 'mark grid point to move')\nCanvas.addCommand('BUTTON3_RELEASED', 'end-move', 'fixPoint(plotterMouse, anchorPoint) if anchorPoint else None', 'mark canvas anchor point')\n# A click does not actually move the canvas, but gives useful UI feedback. It helps users understand that they can do press-drag-release.\nCanvas.addCommand('BUTTON3_CLICKED', 'move-canvas',  '', 'move canvas (in place)')\nCanvas.bindkey('BUTTON3_DOUBLE_CLICKED', 'move-canvas')\nCanvas.bindkey('BUTTON3_TRIPLE_CLICKED', 'move-canvas')\n\nCanvas.addCommand('ScrollUp', 'zoomin-mouse', 'cm=canvasMouse; incrZoom(1.0/options.disp_zoom_incr) if cm else fail(\"cannot zoom in on unplotted canvas\"); fixPoint(plotterMouse, cm)', 'zoom in with scroll wheel')\nCanvas.addCommand('ScrollDown', 'zoomout-mouse', 'cm=canvasMouse; incrZoom(options.disp_zoom_incr) if cm else fail(\"cannot zoom out on unplotted canvas\"); fixPoint(plotterMouse, cm)', 'zoom out with scroll wheel')\n\nCanvas.addCommand('s', 'select-cursor', 'source.select(list(rowsWithin(plotterCursorBox)))', 'select rows on source sheet contained within canvas cursor')\nCanvas.addCommand('t', 'stoggle-cursor', 'source.toggle(list(rowsWithin(plotterCursorBox)))', 'toggle selection of rows on source sheet contained within canvas cursor')\nCanvas.addCommand('u', 'unselect-cursor', 'source.unselect(list(rowsWithin(plotterCursorBox)))', 'unselect rows on source sheet contained within canvas cursor')\nCanvas.addCommand('Enter', 'dive-cursor', 'vs=copy(source); vs.rows=list(rowsWithin(plotterCursorBox)); vd.push(vs)', 'open sheet of source rows contained within canvas cursor')\nCanvas.addCommand('d', 'delete-cursor', 'deleteSourceRows(rowsWithin(plotterCursorBox))', 'delete rows on source sheet contained within canvas cursor')\n\nCanvas.addCommand('gs', 'select-visible', 'source.select(list(rowsWithin(plotterVisibleBox)))', 'select rows on source sheet visible on screen')\nCanvas.addCommand('gt', 'stoggle-visible', 'source.toggle(list(rowsWithin(plotterVisibleBox)))', 'toggle selection of rows on source sheet visible on screen')\nCanvas.addCommand('gu', 'unselect-visible', 'source.unselect(list(rowsWithin(plotterVisibleBox)))', 'unselect rows on source sheet visible on screen')\nCanvas.addCommand('gEnter', 'dive-visible', 'vs=copy(source); vs.rows=list(rowsWithin(plotterVisibleBox)); vd.push(vs)', 'open sheet of source rows visible on screen')\nCanvas.addCommand('gd', 'delete-visible', 'deleteSourceRows(rowsWithin(plotterVisibleBox))', 'delete rows on source sheet visible on screen')\n\nvd.addGlobals({\n    'Canvas': Canvas,\n    'Plotter': Plotter,\n    'BoundingBox': BoundingBox,\n    'Box': Box,\n    'Point': Point,\n})\n\nvd.addMenuItems('''\n    Plot > Resize cursor > height > double > resize-cursor-doubleheight\n    Plot > Resize cursor > height > half > resize-cursor-halfheight\n    Plot > Resize cursor > height > shorter > resize-cursor-shorter\n    Plot > Resize cursor > height > taller > resize-cursor-taller\n    Plot > Resize cursor > width > double > resize-cursor-doublewide\n    Plot > Resize cursor > width > half > resize-cursor-halfwide\n    Plot > Resize cursor > width > thinner > resize-cursor-thinner\n    Plot > Resize cursor > width > wider > resize-cursor-wider\n    Plot > Resize graph > X axis > resize-x-input\n    Plot > Resize graph > Y axis > resize-y-input\n    Plot > Resize graph > aspect ratio > set-aspect\n    Plot > Zoom > out > zoomout-cursor\n    Plot > Zoom > in > zoomin-cursor\n    Plot > Zoom > cursor > zoom-all\n    View > Open subsheet > from cursor > dive-cursor\n    Edit > Delete > under cursor > delete-cursor\n''')\n"
  },
  {
    "path": "visidata/canvas_text.py",
    "content": "from visidata import vd, BaseSheet, colors, dispwidth\nimport curses\n\n\ndef boundingBox(rows):\n    'Return (xmin, ymin, xmax, ymax) of rows.'\n    xmin, ymin, xmax, ymax = 9999, 9999, 0, 0\n    for r in rows:\n        if r.x is not None:\n            xmin = min(xmin, r.x)\n            xmax = max(xmax, r.x + (r.w or dispwidth(r.text or '')))\n        if r.y is not None:\n            ymin = min(ymin, r.y)\n            ymax = max(ymax, r.y + (r.h or 0))\n    return xmin, ymin, xmax, ymax\n\n\nclass CharBox:\n    def __init__(self, scr=None, x1=0, y1=0, w=None, h=None):\n        scrh, scrw = scr.getmaxyx() if scr else (25, 80)\n        self.scr = scr\n        self.x1 = x1\n        self.y1 = y1\n        self.w = scrw if w is None else w\n        self.h = scrh if h is None else h\n\n        self.normalize()\n\n    def __str__(self):\n        return f'({self.x1}+{self.w},{self.y1}+{self.h})'\n\n    def normalize(self):\n        'Make sure w and h are non-negative, swapping coordinates as needed.'\n        if self.w < 0:\n            self.x1 += self.w\n            self.w = -self.w\n\n        if self.h < 0:\n            self.y1 += self.h\n            self.h = -self.h\n\n    @property\n    def x2(self):\n        return self.x1+self.w+1\n\n    @x2.setter\n    def x2(self, v):\n        self.w = v-self.x1-1\n        self.normalize()\n\n    @property\n    def y2(self):\n        return self.y1+self.h+1\n\n    @y2.setter\n    def y2(self, v):\n        self.h = v-self.y1-1\n        self.normalize()\n\n    def contains(self, b):\n        'Return True if this box contains any part of the given x,y,w,h.'\n        xA = max(self.x1, b.x1)  # left\n        xB = min(self.x2, b.x2)  # right\n        yA = max(self.y1, b.y1)  # top\n        yB = min(self.y2, b.y2)  # bottom\n        return xA < xB-1 and yA < yB-1   # xA+.5 < xB-.5 and yA+.5 < yB-.5\n\n\nclass TextCanvas(BaseSheet):\n    @property\n    def rows(self):\n        return self.source.rows\n\n    @rows.setter\n    def rows(self, v):\n        pass\n\n    @property\n    def minXY(self) -> int:\n        minX, minY, maxX, maxY = boundingBox(self.rows)\n        return minX, minY\n\n    @property\n    def maxXY(self) -> int:\n        minX, minY, maxX, maxY = boundingBox(self.rows)\n        return maxX, maxY\n\n    def reload(self):\n        pass\n\n    def draw(self, scr):\n        for i in range(self.cursorBox.h):\n            for j in range(self.cursorBox.w):\n                scr.addstr(self.cursorBox.y1+i, self.cursorBox.x1+j, ' ', colors.color_current_row)\n\n    def commandCursor(self, execstr):\n        if 'cursor' in execstr:\n            return '%s %s' % (self.cursorBox.x1, self.cursorBox.x2), '%s %s' % (self.cursorBox.y1, self.cursorBox.y2)\n        return '', ''\n\n    def checkCursor(self):\n        self.cursorBox.x1 = min(self.windowWidth-2, max(0, self.cursorBox.x1))\n        self.cursorBox.y1 = min(self.windowHeight-2, max(0, self.cursorBox.y1))\n\n    def iterbox(self, box, n=None):\n        'Return *n* top elements from each cell within the given *box*.'\n        ret = list()\n        for r in self.source.rows:\n            if r.pos.x is None or r.pos.y is None: continue\n            if box.contains(CharBox(None, r.pos.x, r.pos.y, 1, 1)):\n                ret.append(r)\n\n        return ret[:-n] if n else ret\n\n    def itercursor(self, n=None):\n        return self.iterbox(self.cursorBox, n=n)\n\n    @property\n    def cursorRows(self):\n        return list(self.iterbox(self.cursorBox))\n\n    def slide(self, rows, dx, dy):\n        x1, y1, x2, y2 = boundingBox(rows)\n\n        # limit dx to not slide beyond top-left\n        if x1+dx < 0: dx = -x1\n        if y1+dy < 0: dy = -y1\n\n        xcol = self.source.column('x')\n        ycol = self.source.column('y')\n        for r in rows:\n            oldx = xcol.getValue(r)\n            oldy = ycol.getValue(r)\n            if oldx is not None:\n                xcol.setValue(r, oldx+dx)\n            if oldy is not None:\n                ycol.setValue(r, oldy+dy)\n\n\nTextCanvas.addCommand('', 'go-down', 'cursorBox.y1 += 1')\nTextCanvas.addCommand('', 'go-up', 'cursorBox.y1 -= 1')\nTextCanvas.addCommand('', 'go-left', 'cursorBox.x1 -= 1')\nTextCanvas.addCommand('', 'go-right', 'cursorBox.x1 += 1')\nTextCanvas.addCommand('Ctrl+Right', 'resize-cursor-wider', 'cursorBox.w += 1', 'increase cursor width by one character')\nTextCanvas.addCommand('Ctrl+Left', 'resize-cursor-thinner', 'cursorBox.w -= 1', 'decrease cursor width by one character')\nTextCanvas.addCommand('Ctrl+Up', 'resize-cursor-shorter', 'cursorBox.h -= 1', 'decrease cursor height by one character')\nTextCanvas.addCommand('Ctrl+Down', 'resize-cursor-taller', 'cursorBox.h += 1', 'increase cursor height by one character')\nTextCanvas.addCommand('gzLeft', 'resize-cursor-min-width', 'cursorBox.w = 1')\nTextCanvas.addCommand('gzUp', 'resize-cursor-min-height', 'cursorBox.h = 1')\nTextCanvas.addCommand('z_', 'resize-cursor-min', 'cursorBox.h = cursorBox.w = 1')\nTextCanvas.addCommand('g_', 'resize-cursor-max', 'maxX, maxY = maxXY; cursorBox.x1=cursorBox.y1=0; cursorBox.h=maxY+1; cursorBox.w=maxX+1')\nTextCanvas.bindkey('zRight', 'resize-cursor-wider')\nTextCanvas.bindkey('zLeft', 'resize-cursor-thinner')\nTextCanvas.bindkey('zUp', 'resize-cursor-shorter')\nTextCanvas.bindkey('zDown', 'resize-cursor-taller')\nTextCanvas.addCommand('BUTTON1_PRESSED', 'move-cursor', 'sheet.cursorBox = CharBox(None, mouseX, mouseY, 1, 1)', 'start cursor box with left mouse button press')\nTextCanvas.addCommand('BUTTON1_RELEASED', 'end-cursor', 'cursorBox.x2=mouseX+2; cursorBox.y2=mouseY+2; cursorBox.normalize()', 'end cursor box with left mouse button release')\n\nTextCanvas.addCommand('s', 'select-cursor', 'source.select(cursorRows)')\nTextCanvas.addCommand('t', 'toggle-cursor', 'source.toggle(cursorRows)')\nTextCanvas.addCommand('u', 'unselect-cursor', 'source.unselect(cursorRows)')\nTextCanvas.addCommand('gs', 'select-all', 'source.select(source.rows)')\nTextCanvas.addCommand('gt', 'toggle-all', 'source.toggle(source.rows)')\nTextCanvas.addCommand('gu', 'unselect-all', 'source.clearSelected()')\nTextCanvas.addCommand('zs', 'select-top-cursor', 'source.select(list(itercursor(n=1)))')\nTextCanvas.addCommand('zt', 'toggle-top-cursor', 'source.toggle(list(itercursor(n=1)))')\nTextCanvas.addCommand('zu', 'unselect-top-cursor', 'source.unselect(list(itercursor(n=1)))')\nTextCanvas.addCommand('d', 'delete-cursor', 'source.deleteBy(lambda r,rows=cursorRows: r in rows)', 'delete first item under cursor')\nTextCanvas.addCommand('gd', 'delete-selected', 'source.deleteSelected()', 'delete selected rows on source sheet')\nTextCanvas.addCommand('Enter', 'dive-cursor', 'vs=copy(source); vs.rows=cursorRows; vs.source=sheet; vd.push(vs)', 'dive into source rows under cursor')\nTextCanvas.addCommand('gEnter', 'dive-selected', 'vd.push(type(source)(source=sheet, rows=source.selectedRows))', 'dive into selected source rows')\n\nTextCanvas.addCommand('H', 'slide-left-obj',       'slide(source.selectedRows, -1, 0)', 'slide selected objects left one character')\nTextCanvas.addCommand('J', 'slide-down-obj',       'slide(source.selectedRows, 0, +1)', 'slide selected objects down one character')\nTextCanvas.addCommand('K', 'slide-up-obj',         'slide(source.selectedRows, 0, -1)', 'slide selected objects up one character')\nTextCanvas.addCommand('L', 'slide-right-obj',      'slide(source.selectedRows, +1, 0)', 'slide selected objects right one character')\nTextCanvas.addCommand('gH', 'slide-leftmost-obj',  'slide(source.selectedRows, -maxXY[0], 0)', 'slide selected objects all the way left')\nTextCanvas.addCommand('gJ', 'slide-bottom-obj',    'slide(source.selectedRows, 0, +maxXY[1])', 'slide all selected objects all the way bottom')\nTextCanvas.addCommand('gK', 'slide-top-obj',       'slide(source.selectedRows, 0, -maxXY[1])', 'slide all selected objects all the way top')\nTextCanvas.addCommand('gL', 'slide-rightmost-obj', 'slide(source.selectedRows, +maxXY[0], 0)', 'slide all selected objects all the way right')\n\n\nTextCanvas.init('cursorBox', lambda: CharBox(None, 0,0,1,1))\n\nvd.addGlobals({\n    'CharBox': CharBox,\n    'boundingBox': boundingBox,\n    'TextCanvas': TextCanvas,\n    })\n"
  },
  {
    "path": "visidata/choose.py",
    "content": "from copy import copy\nfrom visidata import vd, options, VisiData, ListOfDictSheet, CompleteKey, ReturnValue\n\n\nvd.option('fancy_chooser', False, 'a nicer selection interface for aggregators and jointype')\n\n@VisiData.api\ndef chooseOne(vd, choices, type=''):\n    'Return one user-selected key from *choices*.'\n    return vd.choose(choices, 1, type=type)\n\n\n@VisiData.api\ndef choose(vd, choices, n=None, type=''):\n    'Return a list of 1 to *n* \"key\" from elements of *choices* (see chooseMany).'\n    ret = vd.chooseMany(choices, type=type) or vd.fail('no choice made')\n    if n and len(ret) > n:\n        vd.fail('can only choose %s' % n)\n    return ret[0] if n==1 else ret\n\n\nclass ChoiceSheet(ListOfDictSheet):\n    rowtype = 'choices'  # rowdef = dict\n    precious = False\n    def makeChoice(self, rows):\n        # selected rows by their keys, separated by spaces\n        raise ReturnValue([r['key'] for r in rows])\n\n@VisiData.api\ndef chooseFancy(vd, choices):\n        vs = ChoiceSheet('choices', source=copy(choices))\n        options.set('disp_splitwin_pct', -75, vs)\n        vs.reload()\n        vs.setKeys([vs.column('key')])\n        vd.push(vs)\n        chosen = vd.runresult()\n        vd.remove(vs)\n        return chosen\n\n\n@VisiData.api\ndef chooseMany(vd, choices, type=''):\n    '''Return a list of 1 or more keys from *choices*, which is a list of\n    dicts. Each element dict must have a unique \"key\", which must be typed\n    directly by the user in non-fancy mode (therefore no spaces).  All other\n    items in the dicts are also shown in fancy chooser mode.  Use previous\n    choices from the replay input if available.  Add chosen keys\n    (space-separated) to the cmdlog as input for the current command.'''\n    if vd.cmdlog:\n        v = vd.getLastArgs()\n        if v is not None:\n            # check that each key in v is in choices?\n            vd.setLastArgs(v)\n            return v.split()\n\n    if options.fancy_chooser:\n        chosen = vd.chooseFancy(choices)\n    else:\n        chosen = []\n        choice_keys = [c['key'] for c in choices]\n        prompt='choose any of %d options (Ctrl+X for menu)' % len(choice_keys)\n        try:\n            def throw_fancy(v, i):\n                ret = vd.chooseFancy(choices)\n                if ret:\n                    raise ReturnValue(ret)\n                return v, i\n            chosenstr = vd.input(prompt+': ', completer=CompleteKey(choice_keys), bindings={'^X': throw_fancy}, type=type)\n            for c in chosenstr.split():\n                if c in choice_keys:\n                    chosen.append(c)\n                else:\n                    vd.warning('invalid choice \"%s\"' % c)\n        except ReturnValue as e:\n            chosen = e.args[0]\n\n    if vd.cmdlog:\n        vd.setLastArgs(' '.join(chosen))\n\n    return chosen\n\n\nChoiceSheet.addCommand('Enter', 'choose-rows', 'makeChoice([cursorRow])')\nChoiceSheet.addCommand('gEnter', 'choose-rows-selected', 'makeChoice(onlySelectedRows)')\n"
  },
  {
    "path": "visidata/clean_names.py",
    "content": "import re\nfrom visidata import vd, VisiData, Sheet\n\n\nvd.option('clean_names', False, 'clean column/sheet names to be valid Python identifiers', replay=True)\n\n\n@VisiData.global_api\ndef cleanName(vd, s):\n    #[Nas Banov] https://stackoverflow.com/a/3305731\n    #    return re.sub(r'\\W|^(?=\\d)', '_', str(s)).strip('_')\n    s = re.sub(r'[^\\w\\d_]', '_', s)  # replace non-alphanum chars with _\n    s = re.sub(r'_+', '_', s)  # replace runs of _ with a single _\n    s = s.strip('_')\n    return s\n\n\n@Sheet.api\ndef maybeClean(sheet, s):\n    if sheet.options.clean_names:\n        s = vd.cleanName(s)\n    return s\n\n\nSheet.addCommand('', 'clean-names', '''\noptions.clean_names = True;\nfor c in visibleCols:\n    c.name = cleanName(c.name)\n''', 'set options.clean_names on sheet and clean visible column names')\n"
  },
  {
    "path": "visidata/clipboard.py",
    "content": "from copy import copy, deepcopy\nimport shutil\nimport subprocess\nimport io\nimport sys\nimport tempfile\nimport functools\nimport os\nimport itertools\nimport platform\n\nfrom visidata import VisiData, vd, asyncthread, SettableColumn\nfrom visidata import Sheet, Path, Column\n\nif (\n    # Windows\n    sys.platform == 'win32'\n    # WSL 2\n    or \"microsoft-standard-WSL2\" in platform.uname().release\n    # WSL 1\n    or sys.platform == 'linux' and platform.uname().release.endswith(\"-Microsoft\")\n):\n    syscopy_cmd_default = 'clip.exe'\n    syspaste_cmd_default = 'powershell.exe -noprofile -command Get-Clipboard'\nelif sys.platform == 'darwin':\n    syscopy_cmd_default = 'pbcopy w'\n    syspaste_cmd_default = 'pbpaste'\nelse:\n    if 'WAYLAND_DISPLAY' in os.environ:\n        syscopy_cmd_default = 'wl-copy'\n        syspaste_cmd_default = 'wl-paste'\n    else:\n        syscopy_cmd_default = 'xclip -selection clipboard -filter'  # xsel --clipboard --input\n        syspaste_cmd_default = 'xclip -selection clipboard -o'  # xsel --clipboard\n\nvd.option('clipboard_copy_cmd', syscopy_cmd_default, 'command to copy stdin to system clipboard', sheettype=None)\nvd.option('clipboard_paste_cmd', syspaste_cmd_default, 'command to send contents of system clipboard to stdout', sheettype=None)\n\n@VisiData.api\ndef setClipboardRows(vd, rows):\n    vd.memory.cliprows = rows\n\n@VisiData.api\ndef getClipboardRows(vd):\n    return vd.memory.cliprows\n\n@VisiData.api\ndef setClipboardCols(vd, cols):\n    vd.memory.clipcols = cols\n\n@VisiData.api\ndef getClipboardCols(vd):\n    return vd.memory.clipcols\n\n@Sheet.api\ndef copyRows(sheet, rows):\n    vd.setClipboardRows(rows)\n    vd.setClipboardCols(list(sheet.visibleCols))\n    if not rows:\n        vd.warning('no %s selected; clipboard emptied' % sheet.rowtype)\n    else:\n        vd.status('copied %d %s to clipboard' % (len(rows), sheet.rowtype))\n\n@Sheet.api\ndef copyCells(sheet, col, rows):\n    vd.memory.clipcells = [col.getTypedValue(r) for r in rows]\n    if not rows:\n        vd.warning('no %s selected; clipboard emptied' % sheet.rowtype)\n        return\n    vd.status('copied %d %s.%s to clipboard' % (len(rows), sheet.rowtype, col.name))\n\n\n@Sheet.api\ndef syscopyValue(sheet, val):\n    # pipe val to stdin of clipboard command\n\n    p = subprocess.run(\n        sheet.options.clipboard_copy_cmd.split(),\n        input=val,\n        encoding='utf-8',\n        stdout=subprocess.DEVNULL)\n\n    vd.status('copied value to system clipboard')\n\n@Sheet.api\ndef setColClipboard(sheet):\n    if not vd.memory.clipcells:\n        vd.warning(\"nothing to paste from clipcells\")\n        return\n    sheet.cursorCol.setValuesTyped(sheet.onlySelectedRows, *vd.memory.clipcells)\n\n@Sheet.api\ndef syscopyCells(sheet, cols, rows, filetype=None):\n    filetype = filetype or vd.input(\"copy %d %s as filetype: \" % (len(rows), sheet.rowtype), value=sheet.options.save_filetype or 'tsv')\n    sheet.syscopyCells_async(cols, rows, filetype)\n\n\n@Sheet.api\n@asyncthread\ndef syscopyCells_async(sheet, cols, rows, filetype):\n    vs = copy(sheet)\n    vs.rows = rows or vd.fail('no %s selected' % sheet.rowtype)\n    vs.columns = cols\n\n    vd.status(f'copying {vs.nRows} {vs.rowtype} to system clipboard as {filetype}')\n\n    with io.StringIO() as buf:\n        with tempfile.NamedTemporaryFile() as temp:\n            temp.close()  #2118\n\n            vd.sync(vd.saveSheets(Path(f'{temp.name}.{filetype}', fptext=buf), vs, confirm_overwrite=False))\n            subprocess.run(\n                sheet.options.clipboard_copy_cmd.split(),\n                input=buf.getvalue(),\n                encoding='utf-8',\n                stdout=subprocess.DEVNULL)\n\n\n@VisiData.api\ndef sysclipValue(vd):\n    cmd = vd.options.clipboard_paste_cmd\n    return subprocess.check_output(vd.options.clipboard_paste_cmd.split()).decode('utf-8')\n\n\n@VisiData.api\n@asyncthread\ndef pasteFromClipboard(vd, cols, rows):\n    text = vd.getLastArgs() or vd.sysclipValue().strip() or vd.fail('nothing to paste from system clipboard')\n\n    vd.addUndoSetValues(cols, rows)\n    lines = text.split('\\n')\n    if not lines:\n        vd.warning('nothing to paste from system clipboard')\n        return\n\n    vs = cols[0].sheet\n    newrows = [vs.newRow() for i in range(len(lines)-len(rows))]\n    if newrows:\n        rows.extend(newrows)\n        vs.addRows(newrows)\n\n    for line, r in zip(lines, rows):\n        for v, c in zip(line.split('\\t'), cols):\n            c.setValue(r, v)\n\n\n@Sheet.api\ndef delete_row(sheet, rowidx):\n    if not sheet.rows:\n        vd.fail(\"no row to delete\")\n    if not sheet.defer:\n        oldrow = sheet.rows.pop(rowidx)\n        vd.addUndo(sheet.rows.insert, rowidx, oldrow)\n        # clear the deleted row from selected rows\n        if sheet.isSelected(oldrow):\n            sheet.addUndoSelection()\n            sheet.unselectRow(oldrow)\n    else:\n        oldrow = sheet.rows[rowidx]\n        sheet.rowDeleted(oldrow)\n\n    sheet.setModified()\n    return oldrow\n\n\n@Sheet.api\n@asyncthread\ndef paste_after(sheet, rowidx):\n    'Paste rows from *vd.cliprows* at *rowidx*.'\n    if not vd.getClipboardRows():  #1793\n        vd.warning('nothing to paste from cliprows')\n        return\n\n    for col in vd.getClipboardCols()[sheet.nVisibleCols:]:\n        newcol = SettableColumn()\n        newcol.__setstate__(col.__getstate__())\n        sheet.addColumn(newcol)\n\n    addedRows = []\n\n    for extrow in vd.getClipboardRows():\n        if isinstance(extrow, Column):\n            newrow = copy(extrow)\n        else:\n            newrow = sheet.newRow()\n            for col, extcol in zip(sheet.visibleCols, vd.getClipboardCols()):\n                col.setValue(newrow, extcol.getTypedValue(extrow))\n\n        addedRows.append(newrow)\n\n    sheet.addRows(addedRows, index=rowidx)\n\n\nSheet.addCommand('y', 'copy-row', 'copyRows([cursorRow])', 'copy current row to internal clipboard')\n\nSheet.addCommand('p', 'paste-after', 'paste_after(cursorRowIndex)', 'paste internal clipboard rows after current row')\nSheet.addCommand('P', 'paste-before', 'paste_after(cursorRowIndex-1)', 'paste internal clipboard rows before current row')\n\nSheet.addCommand('gy', 'copy-selected', 'copyRows(onlySelectedRows)', 'copy selected rows to internal clipboard')\n\nSheet.addCommand('zy', 'copy-cell', 'copyCells(cursorCol, [cursorRow]); vd.memoValue(\"clipval\", cursorTypedValue, cursorDisplay)', 'copy current cell to internal clipboard')\nSheet.addCommand('zp', 'paste-cell', 'cursorCol.setValuesTyped([cursorRow], vd.memory.clipval) if vd.memory.clipval else vd.warning(\"nothing to paste from clipval\")', 'set contents of current cell to last internal clipboard value')\n\nSheet.addCommand('d', 'delete-row', 'delete_row(cursorRowIndex); defer and cursorDown(1)', 'delete current row')\nSheet.addCommand('gd', 'delete-selected', 'deleteSelected()', 'delete selected rows')\nSheet.addCommand('zd', 'delete-cell', 'cursorCol.setValues([cursorRow], options.null_value)', 'delete current cell (set to None)')\nSheet.addCommand('gzd', 'delete-cells', 'cursorCol.setValues(onlySelectedRows, options.null_value)', 'delete contents of current column for selected rows (set to None)')\n\nSheet.bindkey('BUTTON2_PRESSED', 'go-mouse')\nSheet.addCommand('BUTTON2_RELEASED', 'syspaste-cells', 'pasteFromClipboard(visibleCols[cursorVisibleColIndex:], rows[cursorRowIndex:])', 'paste from system clipboard to region starting at cursor')\nSheet.bindkey('BUTTON2_CLICKED', 'go-mouse')\nSheet.bindkey('zP', 'syspaste-cells')\nSheet.addCommand('gzP', 'syspaste-cells-selected', 'pasteFromClipboard(visibleCols[cursorVisibleColIndex:], someSelectedRows)', 'paste from system clipboard to selected cells')\n\nSheet.addCommand('gzy', 'copy-cells', 'copyCells(cursorCol, onlySelectedRows)', 'copy contents of current column for selected rows to internal clipboard')\nSheet.addCommand('gzp', 'setcol-clipboard', 'setColClipboard()', 'set cells of current column for selected rows to last internal clipboard value')\n\nSheet.addCommand('Y', 'syscopy-row', 'syscopyCells(visibleCols, [cursorRow])', 'copy current row to system clipboard (using options.clipboard_copy_cmd)')\n\nSheet.addCommand('gY', 'syscopy-selected', 'syscopyCells(visibleCols, onlySelectedRows)', 'copy selected rows to system clipboard (using options.clipboard_copy_cmd)')\nSheet.addCommand('zY', 'syscopy-cell', 'syscopyValue(cursorFullDisplay)', 'copy current cell to system clipboard (using options.clipboard_copy_cmd)')\nSheet.addCommand('', 'syscopy-colname', 'syscopyValue(cursorCol.name)', 'copy current column header to system clipboard (using options.clipboard_copy_cmd)')\nSheet.addCommand('gzY', 'syscopy-cells', 'syscopyCells([cursorCol], onlySelectedRows, filetype=\"txt\")', 'copy contents of current column from selected rows to system clipboard (using options.clipboard_copy_cmd')\n\nSheet.addCommand('x', 'cut-row', 'copyRows([sheet.delete_row(cursorRowIndex)]); defer and cursorDown(1)', 'delete current row and move it to internal clipboard')\nSheet.addCommand('gx', 'cut-selected', 'copyRows(onlySelectedRows); deleteSelected()', 'delete selected rows and move them to internal clipboard')\nSheet.addCommand('zx', 'cut-cell', 'copyCells(cursorCol, [cursorRow]); cursorCol.setValues([cursorRow], None)', 'delete current cell and move it to internal clipboard')\nSheet.addCommand('gzx', 'cut-cells', 'copyCells(cursorCol, onlySelectedRows); cursorCol.setValues(onlySelectedRows, None)', 'delete contents of current column for selected rows and move them to internal clipboard')\n\n\nSheet.bindkey('Del', 'delete-cell'),\nSheet.bindkey('gDel', 'delete-cells'),\n\nvd.addMenuItems('''\n    Edit > Delete > current row > delete-row\n    Edit > Delete > current cell > delete-cell\n    Edit > Delete > selected rows > delete-selected\n    Edit > Delete > selected cells > delete-cells\n    Edit > Copy > to internal clipboard > current cell > copy-cell\n    Edit > Copy > to internal clipboard > current row > copy-row\n    Edit > Copy > to internal clipboard > selected cells > copy-cells\n    Edit > Copy > to internal clipboard > selected rows > copy-selected\n    Edit > Copy > to system clipboard > current cell > syscopy-cell\n    Edit > Copy > to system clipboard > current row > syscopy-row\n    Edit > Copy > to system clipboard > selected cells > syscopy-cells\n    Edit > Copy > to system clipboard > selected rows > syscopy-selected\n    Edit > Cut > current row > cut-row\n    Edit > Cut > selected cells > cut-selected\n    Edit > Cut > current cell > cut-cell\n    Edit > Paste > from internal clipboard > row after > paste-after\n    Edit > Paste > from internal clipboard > row before > paste-before\n    Edit > Paste > from internal clipboard > into selected cells > setcol-clipboard\n    Edit > Paste > from internal clipboard > into current cell > paste-cell\n    Edit > Paste > from system clipboard > cells at cursor > syspaste-cells\n    Edit > Paste > from system clipboard > selected cells > syspaste-cells-selected\n''')\n"
  },
  {
    "path": "visidata/cliptext.py",
    "content": "import curses\nimport unicodedata\nimport sys\nimport re\nimport functools\nimport textwrap\n\nfrom visidata import vd, drawcache, update_attr, colors, ColorAttr\n\ndisp_column_fill = ' '\nbracket_markup_re = r'\\[[:/][^\\]]*?\\]'  # [:whatever until the closing bracket] or [/whatever] or [:whatever] or [/] or [:]\nliteral_markup_re = r'\\uFFF9.*?\\uFFFB'\ninternal_markup_re = f'({literal_markup_re}|{bracket_markup_re})'\n\n### Curses helpers\n\n# ZERO_WIDTH_CF is from wcwidth:\n# NOTE: created by hand, there isn't anything identifiable other than\n# general Cf category code to identify these, and some characters in Cf\n# category code are of non-zero width.\n# Also includes some Cc, Mn, Zl, and Zp characters\nZERO_WIDTH_CF = set(map(chr, [\n    0,       # Null (Cc)\n    0x034F,  # Combining grapheme joiner (Mn)\n    0x200B,  # Zero width space\n    0x200C,  # Zero width non-joiner\n    0x200D,  # Zero width joiner\n    0x200E,  # Left-to-right mark\n    0x200F,  # Right-to-left mark\n    0x2028,  # Line separator (Zl)\n    0x2029,  # Paragraph separator (Zp)\n    0x202A,  # Left-to-right embedding\n    0x202B,  # Right-to-left embedding\n    0x202C,  # Pop directional formatting\n    0x202D,  # Left-to-right override\n    0x202E,  # Right-to-left override\n    0x2060,  # Word joiner\n    0x2061,  # Function application\n    0x2062,  # Invisible times\n    0x2063,  # Invisible separator\n]))\n\n\ndef wcwidth(cc, ambig=1):\n        if cc in ZERO_WIDTH_CF:\n            return 1\n        eaw = unicodedata.east_asian_width(cc)\n        if eaw in 'AN':  # ambiguous or neutral\n            if unicodedata.category(cc) == 'Mn':\n                return 1\n            else:\n                return ambig\n        elif eaw in 'WF': # wide/full\n            return 2\n        elif not unicodedata.combining(cc):\n            return 1\n        return 0\n\n\ndef is_vdcode(s:str) -> bool:\n    return (s.startswith('[:') and s.endswith(']')) or \\\n           (s.startswith('[/') and s.endswith(']'))\n\ndef escape_vdcode(s:str) -> str:\n    # wrap between Interlinear Annotation Anchor and Interlinear Annotation Terminator\n    return '\\uFFF9' + s + '\\uFFFB'\n\ndef is_marked_literal(s):\n    return s and s[0] == '\\uFFF9' and s[-1] == '\\uFFFB'\n\ndef iterchunks(s, literal=False):\n    literal_attr = dict(link='', cattr=ColorAttr())\n    if literal:\n        yield literal_attr, s\n        return\n    attrstack = [literal_attr]\n    chunks = re.split(internal_markup_re, s)\n    for chunk in chunks:\n        if not chunk:\n            continue\n\n        if is_marked_literal(chunk):\n            yield attrstack[-1], chunk[1:-1]\n            continue\n        elif is_vdcode(chunk):\n            cattr = attrstack[-1]['cattr']\n            link = attrstack[-1]['link']\n\n            if chunk.startswith('[:onclick '):\n                attrstack.append(dict(link=chunk[2:-1], cattr=cattr.update(colors.clickable)))\n                continue\n            elif chunk == '[:]':  # clear stack, keep origattr\n                if len(attrstack) > 1:\n                    del attrstack[1:]\n                    continue\n            elif chunk.startswith('[/'):  # pop last attr off stack\n                if len(attrstack) > 1:\n                    attrstack.pop()\n                continue  # don't display trailing [/foo] ever\n            else:  # push updated color on stack\n                newcolor = colors.get_color(chunk[2:-1])\n                if newcolor:\n                    cattr = update_attr(cattr, newcolor, len(attrstack))\n                    attrstack.append(dict(link=link, cattr=cattr))\n                    continue\n\n        yield attrstack[-1], chunk\n\n\n@functools.lru_cache(maxsize=100000)\ndef dispwidth(ss, maxwidth=None, literal=False):\n    'Return display width of string, according to unicodedata width and vd.options.disp_ambig_width.'\n    disp_ambig_width = vd.options.disp_ambig_width\n    w = 0\n\n    for _, s in iterchunks(ss, literal=literal):\n        for cc in s:\n            if cc:\n                w += wcwidth(cc, disp_ambig_width)\n                if maxwidth and w > maxwidth:\n                    return maxwidth\n    return w\n\n\n@functools.lru_cache(maxsize=100000)\ndef _dispch(c, oddspacech=None, combch=None, modch=None):\n    ccat = unicodedata.category(c)\n    if ccat in ['Mn', 'Sk', 'Lm']:\n        if unicodedata.name(c).startswith('MODIFIER'):\n            return modch, 1\n    elif c != ' ' and ccat in ('Cc', 'Zs', 'Zl', 'Cs'):  # control char, space, line sep, surrogate\n        return oddspacech, 1\n    elif c in ZERO_WIDTH_CF:\n        return combch, 1\n\n    return c, dispwidth(c, literal=True)\n\n\ndef iterchars(x):\n    if isinstance(x, dict):\n        yield from '{%d}' % len(x)\n        for k, v in x.items():\n            yield ' '\n            yield from iterchars(k)\n            yield '='\n            yield from iterchars(v)\n\n    elif isinstance(x, (list, tuple)):\n        yield from '[%d] ' % len(x)\n        for i, v in enumerate(x):\n            if i != 0:\n                yield from '; '\n            yield from iterchars(v)\n\n    else:\n        yield from str(x)\n\n\n@functools.lru_cache(maxsize=100000)\ndef _clipstr(s, dispw, trunch='', oddspacech='', combch='', modch=''):\n    ''' *s* is a string or an iterator that contains characters.\n    *dispw* is the integer screen width that the clipped string will fit inside, or None.\n    Return clipped string and width in terminal display characters.\n    Note: width may differ from len(s) if chars are 'fullwidth'.\n    If *dispw* is None, no clipping occurs.\n    If *trunch* has a width greater than *dispw*, the empty string\n    will be used as a truncator instead.'''\n    if not s or (dispw is not None and dispw < 1): #iterator s would be truthy\n        return '', 0\n\n    w = 0\n    ret = ''\n    trunc_i = 0\n    w_truncated = 0\n\n    trunchlen = dispwidth(trunch, literal=True)\n    if dispw is None:\n        s = ''.join(s)\n        return s, dispwidth(s, literal=True)\n    if trunchlen > dispw: #if the truncator cannot fit, use a truncator of ''\n        return _clipstr(s, dispw, trunch='', oddspacech=oddspacech, combch=combch, modch=modch)\n    for c in s:\n        newc, chlen = _dispch(c, oddspacech=oddspacech, combch=combch, modch=modch)\n        if not newc:\n            newc = c\n            chlen = dispwidth(c, literal=True)\n\n        #if the next character will fit\n        if w+chlen <= dispw:\n            ret += newc\n            w += chlen\n            #move the truncation spot forward only when the truncation character can fit\n            if w+trunchlen <= dispw:\n                trunc_i += 1\n                w_truncated += chlen\n            continue\n        # if we reach this line, a character did not fit, and the result needs truncation\n        return ret[:trunc_i] + trunch, w_truncated+trunchlen\n\n    return ret, w\n\n\n@drawcache\ndef clipstr(s, dispw, truncator=None, oddspace=None):\n    ''' *s* is a string or an iterator that contains characters.\n    *dispw* is the integer screen width that the clipped string will fit inside, or None.'''\n    if vd.options.visibility:\n        return _clipstr(s, dispw,\n                        trunch=vd.options.disp_truncator if truncator is None else truncator,\n                        oddspacech=vd.options.disp_oddspace if oddspace is None else oddspace,\n                        modch='\\u25e6',\n                        combch='\\u25cc')\n    else:\n        return _clipstr(s, dispw,\n                trunch=vd.options.disp_truncator if truncator is None else truncator,\n                oddspacech=vd.options.disp_oddspace if oddspace is None else oddspace,\n                modch='',\n                combch='')\n\n\ndef clipdraw(scr, y, x, s, attr, w=None, clear=True, literal=False, **kwargs):\n    '''Draw `s`  at (y,x)-(y,x+w) with curses `attr`, clipping with ellipsis char.\n       If `clear`, clear whole editing area before displaying.\n       If `literal`, do not interpret internal vd code markup.\n       Return width drawn (max of w).\n    '''\n    if not literal:\n        chunks = iterchunks(s, literal=literal)\n    else:\n        chunks = [(dict(link='', cattr=ColorAttr()), s)]\n\n    x = max(0, x)\n    y = max(0, y)\n\n    return clipdraw_chunks(scr, y, x, chunks, attr, w=w, clear=clear, **kwargs)\n\n\ndef _addstr(scr, y, x, s, attr):\n    'addstr with curses.error suppressed (e.g. writing to last cell of window).'\n    try:\n        scr.addstr(y, x, s, attr)\n    except curses.error:\n        pass\n\n\ndef clipdraw_chunks(scr, y, x, chunks, cattr:ColorAttr=ColorAttr(), w=None, clear=True, **kwargs):\n    '''Draw `chunks` (sequence of (color:str, text:str) as from iterchunks) at (y,x)-(y,x+w) with curses `attr`, clipping with ellipsis char.\n       If `clear`, clear whole editing area before displaying.\n       Return width drawn (max of w).\n       Text elements of `chunks` are literal, meaning any contained vd code markup is drawn raw as uninterpreted text.\n    '''\n    if scr:\n        windowHeight, windowWidth = scr.getmaxyx()\n    else:\n        windowHeight, windowWidth = 25, 80\n    totaldispw = 0\n\n    assert isinstance(cattr, ColorAttr), cattr\n    origattr = cattr\n    origw = w\n    clipped = ''\n    link = ''\n\n    if w and clear:\n        actualw = min(w, windowWidth-x)\n        if scr:\n            _addstr(scr, y, x, disp_column_fill*actualw, cattr.attr)  # clear whole area before displaying\n\n    try:\n        for colorstate, chunk in chunks:\n            if colorstate:\n                if isinstance(colorstate, ColorAttr):\n                    cattr = origattr.update(colorstate, 100)\n                elif isinstance(colorstate, str):\n                    cattr = origattr.update(colors.get_color(colorstate), 100)\n                else:\n                    cattr = origattr.update(colorstate['cattr'], 100)\n                    link = colorstate['link']\n            else:\n                cattr = origattr\n\n            if not chunk:\n                continue\n\n            if origw is None:\n                chunkw = dispwidth(chunk, maxwidth=windowWidth-totaldispw, literal=True)\n            else:\n                chunkw = origw-totaldispw\n\n            chunkw = min(chunkw, windowWidth-x)\n            if chunkw <= 0:  # no room anyway\n                return totaldispw\n            if not scr:\n                return totaldispw\n\n            # convert to string just before drawing\n            clipped, dispw = clipstr(chunk, chunkw, **kwargs)\n\n            if y >= 0 and y < windowHeight:\n                _addstr(scr, y, x, clipped, cattr.attr)\n            else:\n                if vd.options.debug:\n                    raise Exception(f'addstr(y={y} x={x}) out of bounds')\n\n            if link:\n                vd.onMouse(scr, x, y, dispw, 1, BUTTON1_RELEASED=link)\n\n            x += dispw\n            totaldispw += dispw\n\n            if chunkw < dispw:\n                break\n    except Exception as e:  # noqa: F841\n        if vd.options.debug:\n            raise\n#        raise type(e)('%s [clip_draw y=%s x=%s dispw=%s w=%s clippedlen=%s]' % (e, y, x, totaldispw, w, len(clipped))\n#                ).with_traceback(sys.exc_info()[2])\n\n    return totaldispw\n\n\ndef _markdown_to_internal(text):\n    'Return markdown-formatted `text` converted to internal formatting (like `[:color]text[/]`).'\n    text = re.sub(r'`(.*?)`', r'[:code]\\1[/]', text)\n    text = re.sub(r'(^#.*?)$', r'[:heading]\\1[/]', text)\n    text = re.sub(r'\\*\\*(.*?)\\*\\*', r'[:bold]\\1[/]', text)\n    text = re.sub(r'\\*(.*?)\\*', r'[:italic]\\1[/]', text)\n    text = re.sub(r'\\b_(.*?)_\\b', r'[:underline]\\1[/]', text)\n    return text\n\n\ndef wraptext(text, width=80, indent=''):\n    '''\n    Word-wrap `text` and yield (formatted_line, textonly_line) for each line of at most `width` characters.\n    Formatting like `[:color]text[/]` is ignored for purposes of computing width, and not included in `textonly_line`.\n    Markup that spans multiple lines, is automatically applied to each individual component line. But markup-escaping formatting (see literal_markup_re) is not.\n    '''\n    import re\n\n    if width <= 0:\n        return\n\n    active_tags = []  # stack of open markup tags carried across lines #2212\n\n    for line in text.splitlines():\n        if not line:\n            yield '', ''\n            continue\n\n        line = _markdown_to_internal(line)\n        # prepend any active (unclosed) tags from previous lines\n        line = ''.join(active_tags) + line\n        chunks = re.split(internal_markup_re, line)\n\n        # track which tags are still open at end of this line\n        line_tags = []\n        for chunk in chunks:\n            if is_vdcode(chunk):\n                if chunk.startswith('[:'):\n                    if chunk[2] == ']' and line_tags:\n                        line_tags = []\n                    else:\n                        line_tags.append(chunk)\n                elif chunk.startswith('[/') and line_tags:\n                    line_tags.pop()\n        active_tags = line_tags\n\n        textchunks = []\n        for chunk in chunks:  # 3 kinds of chunk:  marked-literal text, markup, and regular text\n            if is_marked_literal(chunk):\n                textchunks.append(chunk[1:-1])\n            elif not is_vdcode(chunk):\n                textchunks.append(chunk)\n        linetext = ''.join(textchunks)\n        if linetext == '':  #for markup with no contents, like '[:tag][/]' or '[:]' or '[/]'\n            yield '', ''\n            continue\n        # textwrap.wrap does not handle variable-width characters  #2416\n        for linenum, wrapped_textline in enumerate(textwrap.wrap(linetext, width=width, drop_whitespace=False)):\n            wrapped_remainder = wrapped_textline\n            marked_up = ''\n            while chunks:\n                c = chunks[0]\n                if len(c) > len(wrapped_remainder):  #handle wrapping a chunk of text across a line boundary\n                    marked_up += wrapped_remainder\n                    chunks[0] = c[len(wrapped_remainder):]\n                    break\n\n                #if we got here, then len(c) <= len(wrapped_remainder)\n                if len(chunks) == 1:  #the last chunk is regular text\n                    marked_up += chunks.pop(0)   #the while-loop terminates here\n                else:  #if there are multiple chunks, the line contains markup tags or escaped text\n                    #the first chunk is text (or the empty string), and the second chunk is either escaped text or markup\n                    chunks.pop(0)\n                    marked_up += wrapped_remainder[:len(c)] + chunks.pop(0)\n                    wrapped_remainder = wrapped_remainder[len(c):]\n\n            marked_up = marked_up.strip()\n            # close any unclosed tags at end of line, reopen at start of next\n            if active_tags:\n                # count how many tags are open but not closed in marked_up\n                open_in_marked_up = []\n                for part in re.split(internal_markup_re, marked_up):\n                    if is_vdcode(part):\n                        if part.startswith('[:'):\n                            if part[2] == ']':\n                                if open_in_marked_up:\n                                    open_in_marked_up = []\n                            else:\n                                open_in_marked_up.append(part)\n                        elif part.startswith('[/') and open_in_marked_up:\n                            open_in_marked_up.pop()\n                marked_up += '[/]' * len(open_in_marked_up)\n\n            if linenum > 0:\n                marked_up = indent + marked_up\n            yield marked_up, wrapped_textline\n\n        for c in chunks:\n            yield c, ''\n\n\ndef clipstr_start(dispval, w, truncator='', literal=False):\n    '''Return a tuple (frag, dw), where *frag* is the longest ending substring\n    of *dispval* that will fit in a space *w* terminal display characters wide,\n    and *dw* is the substring's display width as an int.'''\n    # Note: this implementation is likely incorrect for unusual Unicode\n    # strings or encodings, where trimming an initial character produces\n    # an invalid string or does not make the string shorter.\n    if w <= 0: return '', 0\n    j = len(dispval)\n    while j >= 1:\n        if dispwidth((truncator if j > 1 else '') + dispval[j-1:], literal=literal) <= w:\n            j -= 1\n        else:\n            break\n    frag = (truncator if j > 0 else '') + dispval[j:]\n    return frag, dispwidth(frag, literal=literal)\n\n\ndef clipstr_middle(s, n=10, truncator='…'):\n    '''Return a string having a display width <= *n*. Excess characters are\n    trimmed from the middle of the string, and replaced by a single\n    instance of *truncator*. Markup is treated as literal text.'''\n    if n == 0: return '', 0\n    if dispwidth(s, literal=True) > n:\n        #for even widths, give the leftover 1 space to the right fragment\n        l_space = n//2 if n%2 == 1 else max(n//2-1, 0)\n        l_frag, l_w = _clipstr(s, l_space)\n        #if left fragment did not fill its space, give the unused space to the right fragment\n        r_frag = clipstr_start(s, n//2+(l_space-l_w))[0]\n        res = l_frag + truncator + r_frag\n        return res, dispwidth(res, literal=True)\n    return s, dispwidth(s, literal=True)\n\n\ndef clip_markup_middle(s:str, w:int):\n    '''takes a string *s* containing optional visidata markup, and returns a string\n    truncated to have a display width less than or equal to *w*, while preserving markup\n    for the remaining text. When text with markup is clipped, what is omitted is one or\n    more entire markup sections, between markup start and end delimiters:\n    [:markup] [:] [/markup] [/]\n    When clipping escaped text, what is omitted is the entire escaped section.\n    The dropped text is replaced with a single disp_truncator.\n    When clipping text without markup or escaping, *clipstr_middle()* is used.\n    The parsing will fail on markup that is nested.\n    '''\n    trunch = vd.options.disp_truncator\n\n    if w <= 0: return ''\n    if dispwidth(s) <= w:\n        return s\n    if w < dispwidth(trunch, literal=True): return ''\n\n    markup_section_re = f'({literal_markup_re}|' + r'\\[.*?\\].*?\\[[/:].*?\\])'  # escaped markup or [:whatever]text[:] or [:whatever]text[/anything]\n    if not re.match(internal_markup_re, s):\n        return clipstr_middle(s, w, truncator=vd.options.disp_truncator)\n    # build the front half of the string\n    output = []\n    chunks_w = 0\n    truncated = False\n    chunks = re.split(markup_section_re, s)\n    for i, chunk in enumerate(chunks):  #chunks are either regular text, or marked up section:  start, text, end\n        # or escaped literal:  start, literal, end\n        if is_marked_literal(chunk):\n            chunk = chunk[1:-1]\n            text_w = dispwidth(chunk, literal=True)\n        else:\n            parts = re.split(internal_markup_re, chunk)\n            if len(parts) == 1:      #text with no markup\n                text_w = dispwidth(chunk, literal=True)\n            elif len(parts) == 5 and parts[0] == '' and parts[4] == '': #empty string, start, text, end, empty string\n                text_w = dispwidth(parts[2], literal=True)\n            else:\n                vd.fail('error parsing markup clip')\n        if chunks_w + text_w < w//2:\n            output.append(chunk)\n            chunks_w += text_w\n        else:\n            output.append(trunch)  #skip the chunk instead of using a substring, because Unicode strings are complex to trim\n            truncated = True\n            break\n    # build the back half of the string, working backwards from the end\n    reverse_output = []\n    chunks_w = 0\n    for chunk in chunks[len(chunks)-1:i:-1]:\n        parts = re.split(internal_markup_re, chunk)\n        if len(parts) == 1:\n            text_w = dispwidth(parts[0], literal=True)\n        elif len(parts) == 5 and parts[0] == '' and parts[4] == '':\n            text_w = dispwidth(parts[2], literal=True)\n        else:\n            vd.fail('error parsing markup clip')\n        if chunks_w + text_w <= w//2 - (0 if truncated else dispwidth(trunch, literal=True)):\n            reverse_output.append(chunk)\n            chunks_w += text_w\n        else:\n            if not truncated:\n                reverse_output.append(trunch)\n            break\n    output += reverse_output[::-1]\n    return ''.join(output)\n\nvd.addGlobals(clipstr=clipstr,\n              clipdraw=clipdraw,\n              clipdraw_chunks=clipdraw_chunks,\n              dispwidth=dispwidth,\n              iterchars=iterchars,\n              iterchunks=iterchunks,\n              wraptext=wraptext,\n              clipstr_start=clipstr_start,\n              clipstr_middle=clipstr_middle,\n              clip_markup_middle=clip_markup_middle,\n              escape_vdcode=escape_vdcode)\n"
  },
  {
    "path": "visidata/cmdlog.py",
    "content": "import threading\n\nfrom visidata import vd, UNLOADED, namedlist, vlen, asyncthread, globalCommand, date\nfrom visidata import VisiData, BaseSheet, Sheet, ColumnAttr, VisiDataMetaSheet, JsonLinesSheet, TypedWrapper, AttrDict, Progress, ErrorSheet, CompleteKey, Path\nimport visidata\n\nvd.option('replay_wait', 0.0, 'time to wait between replayed commands, in seconds', sheettype=None)\nvd.option('replay_ignore_errors', False, 'continue replay on error instead of aborting', sheettype=None)\nvd.theme_option('disp_replay_play', '▶', 'status indicator for active replay')\nvd.theme_option('disp_replay_record', '⏺', 'status indicator for macro record')\nvd.theme_option('color_status_replay', 'green', 'color of replay status indicator')\n\n# prefixes which should not be logged\nnonLogged = '''forget exec-longname undo redo quit\nshow error errors statuses options threads jump\nreplay cancel save-cmdlog macro cmdlog-sheet menu repeat reload-every\nsearch scroll prev next page start end zoom visibility sidebar\nmouse suspend redraw no-op help syscopy sysopen profile toggle'''.split()\n\nvd.option('rowkey_prefix', 'キ', 'string prefix for rowkey in the cmdlog', sheettype=None)\n\nvd._nextCommands = []  # list[str|CommandLogRow] for vd.queueCommand\n\nCommandLogRow = namedlist('CommandLogRow', 'sheet col row longname input keystrokes comment undofuncs'.split())\n\n@VisiData.api\ndef queueCommand(vd, longname, input=None, sheet=None, col=None, row=None):\n    'Add command to queue of next commands to execute.'\n    vd._nextCommands.append(CommandLogRow(longname=longname, input=input, sheet=sheet, col=col, row=row))\n\n\n@VisiData.api\ndef open_vd(vd, p):\n    return CommandLog(p.base_stem, source=p, precious=True)\n\n@VisiData.api\ndef open_vdj(vd, p):\n    return CommandLogJsonl(p.base_stem, source=p, precious=True)\n\nVisiData.save_vd = VisiData.save_tsv\n\n\n@VisiData.api\ndef save_vdj(vd, p, *vsheets):\n    with p.open(mode='w', encoding=vsheets[0].options.save_encoding) as fp:\n        fp.write(\"#!/usr/bin/env -S vd -p\\n\")\n        for vs in vsheets:\n            vs.write_jsonl(fp)\n\n\n@VisiData.api\ndef checkVersion(vd, desired_version):\n    if desired_version != visidata.__version_info__:\n        vd.fail(\"version %s required\" % desired_version)\n\n@VisiData.api\ndef fnSuffix(vd, prefix:str):\n    i = 0\n    fn = prefix + '.vdj'\n    while Path(fn).exists():\n        i += 1\n        fn = f'{prefix}-{i}.vdj'\n\n    return fn\n\ndef indexMatch(L, func):\n    'returns the smallest i for which func(L[i]) is true'\n    for i, x in enumerate(L):\n        if func(x):\n            return i\n\n@VisiData.api\ndef isLoggableCommand(vd, cmd):\n    'Return whether command should be logged to the cmdlog, depending if it has a prefix in nonLogged, or was defined with replay=False.'\n    if not cmd.replayable:\n        return False\n\n    for n in nonLogged:\n        if cmd.longname.startswith(n):\n            return False\n    return True\n\ndef isLoggableSheet(sheet):\n    return sheet is not vd.cmdlog and not isinstance(sheet, (vd.OptionsSheet, ErrorSheet))\n\n\n@Sheet.api\ndef moveToRow(vs, rowstr):\n    'Move cursor to row given by *rowstr*, which can be either the row number or keystr.'\n    rowidx = vs.getRowIndexFromStr(rowstr)\n    if rowidx is None or rowidx >= vs.nRows:\n        return False\n\n    vs.cursorRowIndex = rowidx\n\n    return True\n\n@Sheet.api\ndef getRowIndexFromStr(vs, row):\n    prefix = vd.options.rowkey_prefix\n    index = None\n    if isinstance(row, int):\n        index = row\n    elif isinstance(row, str) and row.startswith(prefix):\n        rowk = row[len(prefix):]\n        index = indexMatch(vs.rows, lambda r,vs=vs,rowk=rowk: rowk == ','.join(map(str, vs.rowkey(r))))\n    else:\n        try:\n            index = int(row)\n        except ValueError:\n            vd.warning('invalid type for row index')\n\n    return index\n\n\n@Sheet.api\ndef moveToCol(vs, col):\n    'Move cursor to column given by *col*, which can be either the column number or column name.'\n    if isinstance(col, str):\n        vcolidx = indexMatch(vs.availCols, lambda c,name=col: name == c.name)\n    elif isinstance(col, int):\n        vcolidx = col\n\n    if vcolidx is None or vcolidx >= len(vs.availCols):\n        return False\n\n    vs.cursorVisibleColIndex = vcolidx\n\n    return True\n\n\n@BaseSheet.api\ndef commandCursor(sheet, execstr):\n    'Return (col, row) of cursor suitable for cmdlog replay of execstr.'\n    colname, rowname = '', ''\n    contains = lambda s, *substrs: any((a in s) for a in substrs)\n    if contains(execstr, 'cursorTypedValue', 'cursorDisplay', 'cursorValue', 'cursorCell', 'cursorRow') and sheet.nRows > 0:\n        rowname = sheet.cursorRowIndex\n\n    if contains(execstr, 'cursorTypedValue', 'cursorDisplay', 'cursorValue', 'cursorCell', 'cursorCol', 'cursorVisibleCol', 'ColumnAtCursor'):\n        if sheet.cursorCol:\n            colname = sheet.cursorCol.name or sheet.visibleCols.index(sheet.cursorCol)\n        else:\n            colname = None\n    return colname, rowname\n\n\n# rowdef: namedlist (like TsvSheet)\nclass CommandLogBase:\n    'Log of commands for current session.'\n    rowtype = 'logged commands'\n    precious = False\n    _rowtype = CommandLogRow\n    columns = [\n        ColumnAttr('sheet'),\n        ColumnAttr('col'),\n        ColumnAttr('row'),\n        ColumnAttr('longname'),\n        ColumnAttr('input'),\n        ColumnAttr('keystrokes'),\n        ColumnAttr('comment'),\n        ColumnAttr('undo', 'undofuncs', type=vlen, width=0)\n    ]\n\n    filetype = 'vd'\n\n    def newRow(self, **fields):\n        return self._rowtype(**fields)\n\n    def beforeExecHook(self, sheet, cmd, args, keystrokes):\n        if vd.activeCommand:\n            self.afterExecSheet(sheet, False, '')\n\n        colname, rowname, sheetname = '', '', None\n        if sheet and not (cmd.longname.startswith('open-') and not cmd.longname in ('open-row', 'open-cell')):\n            sheetname = sheet.name\n\n            colname, rowname = sheet.commandCursor(cmd.execstr)\n\n            contains = lambda s, *substrs: any((a in s) for a in substrs)\n            if contains(cmd.execstr, 'pasteFromClipboard'):\n                args = vd.sysclipValue().strip()\n\n\n        comment = vd.currentReplayRow.comment if vd.currentReplayRow else cmd.helpstr\n        vd.activeCommand = self.newRow(sheet=sheetname,\n                                            col=colname,\n                                            row=rowname,\n                                            keystrokes=keystrokes,\n                                            input=args,\n                                            longname=cmd.longname,\n                                            comment=comment,\n                                            replayable=cmd.replayable,\n                                            undofuncs=[])\n\n    def afterExecSheet(self, sheet, escaped, err):\n        'Records vd.activeCommand'\n        if not vd.activeCommand:  # nothing to record\n            return\n\n        if escaped:\n            vd.activeCommand = None\n            return\n\n        # remove user-aborted commands and simple movements (unless first command on the sheet, which created the sheet)\n        if not sheet.cmdlog_sheet.rows or vd.isLoggableCommand(vd.activeCommand):\n            if isLoggableSheet(sheet):      # don't record actions from cmdlog or other internal sheets on global cmdlog\n                self.addRow(vd.activeCommand)  # add to global cmdlog\n            sheet.cmdlog_sheet.addRow(vd.activeCommand)  # add to sheet-specific cmdlog\n\n        vd.activeCommand = None\n\n    def openHook(self, vs, src):\n        while isinstance(src, BaseSheet):\n            src = src.source\n        r = self.newRow(keystrokes='o', input=str(src), longname='open-file', replayable=True)\n        vs.cmdlog_sheet.addRow(r)\n        self.addRow(r)\n\nclass CommandLog(CommandLogBase, VisiDataMetaSheet):\n    pass\n\nclass CommandLogJsonl(CommandLogBase, JsonLinesSheet):\n\n    filetype = 'vdj'\n\n    def newRow(self, **fields):\n        return AttrDict(JsonLinesSheet.newRow(self, **fields))\n\n    def iterload(self):\n        for r in JsonLinesSheet.iterload(self):\n            if isinstance(r, TypedWrapper):\n                yield r\n            else:\n                yield AttrDict(r)\n\n\n### replay\n\nvd.paused = False\nvd.currentReplay = None     # CommandLog replaying currently\nvd.currentReplayRow = None  # must be global, to allow replay\n\n\n@VisiData.api\ndef replay_cancel(vd):\n    vd.currentReplayRow = None\n    vd.currentReplay = None\n    vd._nextCommands.clear()\n\n\n@VisiData.api\ndef moveToReplayContext(vd, r, vs):\n        'set the sheet/row/col to the values in the replay row'\n        vs.ensureLoaded()\n        vd.sync()\n        vd.clearCaches()\n\n        if r.row not in [None, '']:\n            vs.moveToRow(r.row) or vd.error(f'no \"{r.row}\" row on {vs}')\n\n        if r.col not in [None, '']:\n            vs.moveToCol(r.col) or vd.error(f'no \"{r.col}\" column on {vs}')\n\n\n@VisiData.api\ndef replayOne(vd, r):\n        'Replay the command in one given row.'\n        vd.currentReplayRow = r\n        longname = getattr(r, 'longname', None)\n        if longname is None and getattr(r, 'keystrokes', None) is None:\n            vd.fail('failed to find command to replay')\n\n        if r.sheet and longname not in ['set-option', 'unset-option']:\n            vs = vd.getSheet(r.sheet) or vd.error('no sheet named %s' % r.sheet)\n        else:\n            vs = None\n\n        if longname in ['set-option', 'unset-option']:\n            try:\n                context = vs if r.sheet and vs else vd\n                option_scope = r.sheet or r.col or 'global'\n                if option_scope == 'override': option_scope = 'global' # override is deprecated, is now global\n                if longname == 'set-option':\n                    context.options.set(r.row, r.input, option_scope)\n                else:\n                    context.options.unset(r.row, option_scope)\n\n                escaped = False\n            except Exception as e:\n                vd.exceptionCaught(e)\n                escaped = True\n        else:\n            vs = vs or vd.activeSheet\n            if vs:\n                if vs in vd.sheets:  # if already on sheet stack, push to top\n                    vd.push(vs)\n            else:\n                vs = vd.cmdlog\n\n            try:\n                vd.moveToReplayContext(r, vs)\n                if r.comment:\n                    vd.status(r.comment)\n\n                # <=v1.2 used keystrokes in longname column; getCommand fetches both\n                escaped = vs.execCommand(longname if longname else r.keystrokes, keystrokes=r.keystrokes)\n            except Exception as e:\n                vd.exceptionCaught(e)\n                escaped = True\n\n        vd.currentReplayRow = None\n\n        if escaped:  # escape during replay aborts replay\n            vd.warning('replay aborted during %s' % (longname or r.keystrokes))\n        return escaped\n\n\n@VisiData.api\nclass DisableAsync:\n    def __enter__(self):\n        vd.execAsync = vd.execSync\n\n    def __exit__(self, exc_type, exc_val, tb):\n        vd.execAsync = lambda *args, vd=vd, **kwargs: visidata.VisiData.execAsync(vd, *args, **kwargs)\n\n\n@VisiData.api\ndef replay_sync(vd, cmdlog):\n    'Replay all commands in *cmdlog*.'\n    with vd.DisableAsync():\n        vd.sync()  #2352 let cmdlog finish loading\n        cmdlog.cursorRowIndex = 0\n        # save current replay, for cmdlogs that replay other cmdlogs, such as a macro executing another macro\n        prev_replay = vd.currentReplay\n        prev_replay_row = vd.currentReplayRow\n        vd.currentReplay = cmdlog\n\n        with Progress(total=len(cmdlog.rows)) as prog:\n            while cmdlog.cursorRowIndex < len(cmdlog.rows):\n                if vd.currentReplay is None:\n                    vd.status('replay canceled')\n                    return\n\n                vd.statuses.clear()\n                try:\n                    if vd.replayOne(cmdlog.cursorRow):\n                        if not vd.options.replay_ignore_errors:\n                            vd.replay_cancel()\n                            return True\n                except Exception as e:\n                    vd.exceptionCaught(e)\n                    if not vd.options.replay_ignore_errors:\n                        vd.replay_cancel()\n                        vd.status('replay canceled')\n                        return True\n\n                cmdlog.cursorRowIndex += 1\n                prog.addProgress(1)\n\n                if vd.activeSheet:\n                    vd.activeSheet.ensureLoaded()\n\n        vd.status('replay complete')\n        vd.currentReplay = prev_replay\n        vd.currentReplayRow = prev_replay_row\n\n\n@VisiData.api\ndef replay(vd, cmdlog):\n    'Inject commands into live execution with interface.'\n    vd._nextCommands.extend(cmdlog.rows)\n    vd.currentReplay = cmdlog\n\n\n@VisiData.api\ndef getLastArgs(vd):\n        'Get user input for the currently playing command.'\n        if vd.currentReplayRow:\n            return vd.currentReplayRow.input\n        return None\n\n\n@VisiData.api\ndef setLastArgs(vd, args):\n        'Set user input on last command, if not already set.'\n        # only set if not already set (second input usually confirmation)\n        if vd.activeCommand:\n            if not vd.activeCommand.input:\n                vd.activeCommand.input = args\n\n\n@VisiData.property\ndef replayStatus(vd):\n    if vd.macroMode:\n        return f'|[:error] {len(vd.macroMode)} {vd.options.disp_replay_record} [:]'\n\n    if vd._nextCommands:\n        return f'|[:status_replay] {len(vd._nextCommands)} {vd.options.disp_replay_play} [:]'\n\n    return ''\n\n\n@BaseSheet.property\ndef cmdlog(sheet):\n    rows = sheet.cmdlog_sheet.rows\n    if isinstance(sheet.source, BaseSheet):\n        rows = sheet.source.cmdlog.rows + rows\n    return CommandLogJsonl(sheet.name+'_cmdlog', source=sheet, rows=rows)\n\n\n@BaseSheet.lazy_property\ndef cmdlog_sheet(sheet):\n    c = CommandLogJsonl(sheet.name+'_cmdlog', source=sheet, rows=[])\n    # copy over all existing globally set options\n    # you only need to do this for the first BaseSheet in a tree\n    if not isinstance(sheet.source, BaseSheet):\n        for r in vd.cmdlog.rows:\n            if r.sheet == 'global' and (r.longname == 'set-option') or (r.longname == 'unset-option'):\n                c.addRow(r)\n    return c\n\n\n@BaseSheet.property\ndef shortcut(self):\n    if self._shortcut:\n        return self._shortcut\n    try:\n        return str(vd.allSheets.index(self)+1)\n    except ValueError:\n        pass\n\n    try:\n        return self.cmdlog_sheet.rows[0].keystrokes or ''  #2293\n    except Exception:\n        pass\n\n    return ''\n\n\n@VisiData.property\ndef cmdlog(vd):\n    if not vd._cmdlog:\n        vd._cmdlog = CommandLogJsonl('cmdlog', rows=[])  # no reload\n        vd._cmdlog.resetCols()\n        vd.beforeExecHooks.append(vd._cmdlog.beforeExecHook)\n    return vd._cmdlog\n\n@VisiData.property\ndef modifyCommand(vd):\n    if vd.activeCommand and vd.isLoggableCommand(vd.activeCommand):\n        return vd.activeCommand\n    if not vd.cmdlog.rows:\n        return None\n    return vd.cmdlog.rows[-1]\n\n\nBaseSheet.init('_shortcut')\n\n\nglobalCommand('gD', 'cmdlog-all', 'vd.push(vd.cmdlog)', 'open global CommandLog for all commands executed in current session')\nglobalCommand('D', 'cmdlog-sheet', 'vd.push(sheet.cmdlog)', \"open current sheet's CommandLog with all other loose ends removed; includes commands from parent sheets\")\nglobalCommand('zD', 'cmdlog-sheet-only', 'vd.push(sheet.cmdlog_sheet)', 'open CommandLog for current sheet with commands from parent sheets removed')\nBaseSheet.addCommand('Ctrl+D', 'save-cmdlog', 'saveSheets(inputPath(\"save cmdlog to: \", value=fnSuffix(name)), vd.cmdlog)', 'save CommandLog to filename.vdj file')\nBaseSheet.bindkey('Ctrl+N', 'no-op')\nBaseSheet.addCommand('Ctrl+K', 'replay-stop', 'vd.replay_cancel(); vd.warning(\"replay canceled\")', 'cancel current replay')\n\nglobalCommand(None, 'show-status', 'status(input(\"status: \"))', 'show given message on status line')\nglobalCommand('Ctrl+V', 'show-version', 'status(__version_info__);', 'Show version and copyright information on status line')\nglobalCommand('zCtrl+V', 'check-version', 'checkVersion(input(\"require version: \", value=__version_info__))', 'check VisiData version against given version')\n\nCommandLog.addCommand('x', 'replay-row', 'vd.replayOne(cursorRow); status(\"replayed one row\")', 'replay command in current row')\nCommandLog.addCommand('gx', 'replay-all', 'vd.replay(sheet)', 'replay contents of entire CommandLog')\n\nCommandLogJsonl.addCommand('x', 'replay-row', 'vd.replayOne(cursorRow); status(\"replayed one row\")', 'replay command in current row')\nCommandLogJsonl.addCommand('gx', 'replay-all', 'vd.replay(sheet)', 'replay contents of entire CommandLog')\n\nCommandLog.options.json_sort_keys = False\nCommandLog.options.encoding = 'utf-8'\nCommandLogJsonl.options.json_sort_keys = False\nCommandLogJsonl.options.regex_skip = r'^(//|#).*'\n\nvd.addGlobals(CommandLogBase=CommandLogBase,\n              CommandLogJsonl=CommandLogJsonl,\n              CommandLogRow=CommandLogRow,\n              )\n\nvd.addMenuItems('''\n    View > Command log > this sheet > cmdlog-sheet\n    View > Command log > this sheet only > cmdlog-sheet-only\n    View > Command log > all commands > cmdlog-all\n    System > Execute longname > exec-longname\n    Help > Version > show-version\n''')\n"
  },
  {
    "path": "visidata/color.py",
    "content": "import curses\nimport functools\nfrom copy import copy\nfrom collections import namedtuple\nfrom dataclasses import dataclass\n\nfrom visidata import vd, options, Extensible, drawcache, drawcache_property, VisiData\nimport visidata\n\n__all__ = ['ColorAttr', 'colors', 'update_attr', 'ColorMaker', 'rgb_to_attr', 'css_to_xterm256', 'xterm256_to_rgb', 'rgb_to_xterm256', 'xterm256_to_css']\n\nvd.help_color = '''Color syntax: `<attribute> <fg-color> on <bg-color>`\n\n- attributes: [:bold]bold[/] [:underline]underline[/] [:italic]italic[/] [:reverse]reverse[/]\n- colors: 0-255 or [:black on 238]black[/] [:red on 238]red[/] [:green on 238]green[/] [:yellow on 238]yellow[/] [:blue on 238]blue[/] [:magenta on 238]magenta[/] [:cyan on 238]cyan[/] [:white on 238]white[/]\n- the second color is used as a fallback if the first color is not available\n\nSee [:onclick https://visidata.org/docs/colors]https://visidata.org/docs/colors[/] for more detailed info.\n'''\n\n\n@dataclass\nclass ColorAttr:\n    fg:int = -1         # default is no foreground specified\n    bg:int = -1         # default is no background specified\n    attributes:int = 0       # default is no attributes\n    precedence:int = 0  # default is lowest priority\n    colorname:str = ''\n\n    def __init__(self, fg:int=-1, bg:int=-1, attributes:int=0, precedence:int=0, colorname:str=''):\n        assert fg < 256, fg\n        assert bg < 256, bg\n        self.fg = fg\n        self.bg = bg\n        self.attributes = attributes\n        self.precedence = precedence\n        self.colorname = colorname\n\n    def update(self, b:'ColorAttr', prec:int=10) -> 'ColorAttr':\n        return update_attr(self, b, prec)\n\n    @property\n    def attr(self) -> int:\n        a = colors._get_colorpair(self.fg, self.bg, self.colorname) | self.attributes\n        assert a >= 0, a\n        return a\n\n    def as_str(self) -> str:\n        attrnames = [attrname for attrname, attr in colors._attrs.items() if self.attributes & attr]\n        attrnames.append(f'{self.fg} on {self.bg}')\n        return ' '.join(attrnames)\n\n\ndef update_attr(oldattr:ColorAttr, updattr:ColorAttr, updprec:int=None) -> ColorAttr:\n    assert isinstance(updattr, ColorAttr), updattr\n    if updprec is None:\n        updprec = updattr.precedence\n    updfg = updattr.fg\n    updbg = updattr.bg\n    updattr = updattr.attributes\n\n    # starting values, work backwards\n    newfg = oldattr.fg\n    newbg = oldattr.bg\n    newattr = oldattr.attributes | updattr\n    newprec = oldattr.precedence\n\n    if newfg < 0 or (updfg >= 0 and updprec > newprec):\n        newfg = updfg\n    if newbg < 0 or (updbg >= 0 and updprec > newprec):\n        newbg = updbg\n\n    newprec = max(updprec, newprec)\n\n    return ColorAttr(newfg, newbg, newattr, newprec)\n\n\nclass ColorMaker:\n    def __init__(self):\n        self.color_pairs = {}  # (fg,bg) -> (pairnum, colornamestr) (pairnum can be or'ed with other attrs)\n        self.colorpair_cache = {}  # colorname -> pairnum\n\n    @drawcache_property\n    def colorattr_cache(self):\n        'mapping of colorname or optname to ColorAttr'\n        return {}\n\n    def setup(self):\n        try:\n            curses.use_default_colors()\n        except Exception as e:\n            pass\n\n    @drawcache_property\n    def colors(self):\n        'not computed until curses color has been initialized'\n        return {x[6:]:getattr(curses, x) for x in dir(curses) if x.startswith('COLOR_') and x != 'COLOR_PAIRS'}\n\n    def __getitem__(self, colorname:str) -> ColorAttr:\n        'colors[\"green\"] or colors[\"foo\"] returns parsed ColorAttr.'\n        return self.get_color(colorname)\n\n    def __getattr__(self, optname) -> ColorAttr:\n        'colors.color_foo or colors.foo returns parsed ColorAttr.'\n        return self.get_color(optname)\n\n    @drawcache\n    def resolve_colors(self, colorstack):\n        'Returns the ColorAttr for the colorstack, a list of (prec, color_option_name) sorted highest-precedence color first.'\n        cattr = ColorAttr()\n        for prec, coloropt in colorstack:\n            c = self.get_color(coloropt)\n            cattr = update_attr(cattr, c, prec)\n        return cattr\n\n    def get_color(self, optname:str, precedence:int=0) -> ColorAttr:\n        '''Return ColorAttr for options.color_foo if *optname* of either \"foo\" or \"color_foo\",\n           Otherwise parse *optname* for colorstring like \"bold 34 red on 135 blue\".'''\n        r = self.colorattr_cache.get(optname, None)\n        if r is None:\n            coloropt = vd.options._get(optname) or vd.options._get(f'color_{optname}')\n            colornamestr = coloropt.value if coloropt else optname\n            r = self.colorattr_cache[optname] = self._colornames_to_cattr(colornamestr, precedence)\n        return r\n\n    def _split_colorstr(self, colorstr):\n        'Return (fgstr, bgstr, attrlist) parsed from colorstr.'\n        fgbgattrs = ['', '', []]  # fgstr, bgstr, attrlist\n        if not colorstr:\n            return fgbgattrs\n        colorstr = str(colorstr)\n\n        i = 0  # fg by default\n        for x in colorstr.split():\n            if x == 'fg':\n                i = 0\n                continue\n            elif x in ['on', 'bg']:\n                i = 1\n                continue\n\n            if hasattr(curses, 'A_' + x.upper()):\n                fgbgattrs[2].append(x)\n            else:\n                if not fgbgattrs[i]:  # keep first known color\n                    if self._get_colornum(x) is not None:   # only set known colors\n                        fgbgattrs[i] = x\n                    else:\n                        fgbgattrs[i] = None\n\n        return fgbgattrs\n\n    def _get_colornum(self, colorname:'str|int', default:int=-1) -> int:\n        'Return terminal color number for colorname.'\n        if isinstance(colorname, int):\n            return colorname\n\n        if not colorname:\n            return default\n\n        r = self.colorpair_cache.get(colorname, None)\n        if r is not None:\n            return r\n\n        try:\n            r = int(colorname)\n        except Exception:\n            r = self.colors.get(colorname.upper())\n\n        if r is None:\n            return None\n\n        try: # test to see if color is available\n            curses.init_pair(255, r, 0)\n            self.colorpair_cache[colorname] = r\n            return r\n        except curses.error as e:\n            return None  # not available\n        except ValueError:  # Python 3.10+  issue #1227\n            return None\n\n    def _attrnames_to_num(self, attrnames:'list[str]') -> int:\n        attrs = 0\n        for attr in attrnames:\n            attrs |= getattr(curses, 'A_'+attr.upper())\n        return attrs\n\n    @drawcache_property\n    def _attrs(self):\n        return {k[2:].lower():getattr(curses, k) for k in dir(curses) if k.startswith('A_') and k != 'A_ATTRIBUTES'}\n\n    @drawcache\n    def _colornames_to_cattr(self, colorname:str, precedence=0) -> ColorAttr:\n        fg, bg, attrlist = self._split_colorstr(colorname)\n\n        fg = self._get_colornum(fg)\n        bg = self._get_colornum(bg)\n        return ColorAttr(fg, bg,\n                         self._attrnames_to_num(attrlist),\n                         precedence, colorname)\n\n    def _get_colorpair(self, fg:'int|None', bg:'int|None', colorname:str) -> int:\n            pairnum, _ = self.color_pairs.get((fg, bg), (None, ''))\n            if pairnum is None:\n                if len(self.color_pairs) > 254:\n                    self.color_pairs.clear()  # start over\n                    self.colorpair_cache.clear()\n                pairnum = len(self.color_pairs)+1\n                if fg is None: fg = -1\n                if bg is None: bg = -1\n                try:\n                    curses.init_pair(pairnum, fg, bg)\n                except curses.error as e:\n                    return 0  # do not cache\n                self.color_pairs[(fg, bg)] = (pairnum, colorname)\n\n            return curses.color_pair(pairnum)\n\n\ncolors = ColorMaker()\n\n\n@functools.lru_cache(256)\ndef rgb_to_xterm256(r:int,g:int,b:int,a:int=255) -> int:\n    if a == 0:\n        return -1\n\n    if max(r,g,b) - min(r,g,b) < 8:\n        if r <= 4: return 16\n        elif r <= 8: return 232\n        elif r >= 247: return 231\n        elif r >= 238: return 255\n        else:\n            return int(232 + (r-8)//10)\n    else:\n        r = max(0, r-(95-40)) // 40\n        g = max(0, g-(95-40)) // 40\n        b = max(0, b-(95-40)) // 40\n        return int(16 + r*36 + g*6 + b)\n\n\ndef xterm256_to_css(n:'str|int') -> str:\n    r,g,b = xterm256_to_rgb(n)\n    return f'#{r:02x}{g:02x}{b:02x}'\n\n\n@functools.lru_cache(256)\ndef xterm256_to_rgb(n:'str|int') -> tuple:\n    if not n:\n        return (255,255,255)\n    colordict = dict(\n            black=(0,0,0),\n            blue=(114,159,207),\n            green=(78,154,6),\n            red=(204,0,0),\n            cyan=(6,152,154),\n            magenta=(255,0,255),\n            brown=(196,160, 0),\n            white=(211,215,207),\n            gray=(85,87,83),\n            lightblue=(50,175,255),\n            lightgreen=(138,226,52),\n            lightaqua=(52,226,226),\n            lightred=(239,41,41),\n            lightpurple=(173,127,168),\n            lightyellow=(252,233,79),\n            brightwhite=(255,255,255),\n    )\n    if n in colordict:\n        return colordict.get(n)\n    n = int(n)\n    if 0 <= n < 16:\n        return list(colordict.values())[n]\n    if 16 <= n < 232:\n        n -= 16\n        r,g,b = n//36,(n%36)//6,n%6\n        ints = [0x00, 0x66, 0x88,0xbb,0xdd,0xff]\n        return ints[r],ints[g],ints[b]\n    else:\n        n=list(range(8,255,10))[n-232]\n        return n,n,n\n\n\n@functools.lru_cache(256)\ndef rgb_to_attr(r:int,g:int,b:int,a:int=255) -> str:\n    return str(rgb_to_xterm256(r,g,b,a))\n\n@functools.lru_cache(256)\ndef css_to_xterm256(csscolor:str) -> str:\n    if csscolor[0] == '#':\n        csscolor = csscolor[1:]\n    r,g,b,_ = csscolor[:2], csscolor[2:4], csscolor[4:6], csscolor[6:]\n    r = int(r, base=16)\n    g = int(g, base=16)\n    b = int(b, base=16)\n    return rgb_to_xterm256(r,g,b)\n\nimport sys\nvd.addGlobals({k:getattr(sys.modules[__name__], k) for k in __all__})\n"
  },
  {
    "path": "visidata/column.py",
    "content": "from copy import copy\nimport collections\nimport string\nimport itertools\nimport threading\nimport re\nimport time\nimport json\n\nfrom visidata import options, anytype, stacktrace, vd, drawcache\nfrom visidata import asyncthread, dispwidth, clipstr, iterchars\nfrom visidata import wrapply, TypedWrapper, TypedExceptionWrapper\nfrom visidata import Extensible, AttrDict, undoAttrFunc, ExplodingMock, MissingAttrFormatter\nfrom visidata import getitem, setitem, getitemdef, getitemdeep, setitemdeep, getattrdeep, setattrdeep, iterchunks\n\nclass InProgress(Exception):\n    @property\n    def stacktrace(self):\n        return  ['calculation in progress']\n\nINPROGRESS = TypedExceptionWrapper(None, exception=InProgress())  # sentinel\n\nvd.option('col_cache_size', 0, 'max number of cache entries in each cached column')\nvd.option('disp_formatter', 'generic', 'formatter to create the text in each cell (also used by text savers)', replay=True)\nvd.option('disp_displayer', 'generic', 'displayer to render the text in each cell', replay=False)\n\n\nclass DisplayWrapper:\n    def __init__(self, value=None, *, typedval=None, text='', note=None, notecolor=None, error=None):\n        self.value = value      # actual value (any type)\n        self.typedval = typedval  # consistently typed value (or None)\n        self.text = text  # displayed string\n        self.note = note        # single unicode character displayed in cell far right\n        self.notecolor = notecolor  # configurable color name (like 'color_warning')\n        self.error = error      # list of strings for stacktrace\n\n    def __bool__(self):\n        return bool(self.value)\n\n    def __eq__(self, other):\n        return self.value == other\n\n\nclass Column(Extensible):\n    '''Base class for all column types.\n\n        - *name*: name of this column; if None, current sheet will assign a name\n        - *type*: ``anytype str int float date`` or other type-like conversion function.\n        - *cache*: cache behavior\n\n           - ``False`` (default): getValue never caches; calcValue is always called.\n           - ``True``: getValue maintains a cache of ``options.col_cache_size``.\n           - ``\"async\"``: ``getValue`` launches thread for every uncached result, returns invalid value until cache entry available.\n        - *width*: == 0 if hidden, None if auto-compute next time.\n        - *height*: max height, None/0 to auto-compute for each row.\n        - *fmtstr*: format string as applied by column type.\n        - *getter*: default calcValue calls ``getter(col, row)``.\n        - *setter*: default putValue calls ``setter(col, row, val)``.\n        - *kwargs*: other attributes to be set on this column.\n    '''\n    def __init__(self, name=None, *, type=anytype, cache=False, **kwargs):\n        self.sheet = ExplodingMock('use addColumn() on all columns')  # owning Sheet, set in .recalc() via Sheet.addColumn\n        if name is None:\n            if vd.sheet: # get a column name from the current sheet\n                name = vd.sheet.incremented_colname()\n            else:\n                name = ''\n        self.name = str(name) # display visible name\n        self.fmtstr = ''      # by default, use str()\n        self._type = type     # anytype/str/int/float/date/func\n        self.getter = lambda col, row: row\n        self.setter = None\n        self._width = None    # == 0 if hidden, None if auto-compute next time\n        self.hoffset = 0      # starting horizontal (char) offset of displayed column value\n        self.voffset = 0      # starting vertical (line) offset of displayed column value\n        self.height = 1       # max height, None/0 to auto-compute for each row\n        self.keycol = 0       # keycol index (or 0 if not key column)\n        self.expr = None      # Column-type-dependent parameter\n        self.formatter = ''\n        self.displayer = ''\n        self.defer = False\n        self.disp_expert = 0    # do not show if 'nometacols' in options.disp_help_flags\n\n        self.setCache(cache)\n        for k, v in kwargs.items():\n            setattr(self, k, v)  # instead of __dict__.update(kwargs) to invoke property.setters\n\n    def __copy__(self):\n        cls = self.__class__\n        ret = cls.__new__(cls)\n        ret.__dict__.update(self.__dict__)\n        ret.keycol = 0   # column copies lose their key status\n        if self._cachedValues is not None:\n            ret._cachedValues = collections.OrderedDict()  # an unrelated cache for copied columns\n        return ret\n\n    def __str__(self):\n        return f'{type(self).__name__}:{self.name}'\n\n    def __repr__(self):\n        return f'<{type(self).__name__}: {self.name}>'\n\n    def __deepcopy__(self, memo):\n        return self.__copy__()  # no separate deepcopy\n\n    def __getstate__(self):\n        return {k:getattr(self, k) for k in 'name typestr width height expr keycol formatter displayer fmtstr voffset hoffset aggstr'.split() if hasattr(self, k)}\n\n    def __setstate__(self, d):\n        for attr, v in d.items():\n            setattr(self, attr, v)\n\n    def recalc(self, sheet=None):\n        'Reset column cache, attach column to *sheet*, and reify column name.'\n        if self._cachedValues:\n            self._cachedValues.clear()\n        if sheet:\n            self.sheet = sheet\n        self.name = self._name\n\n    @property\n    def name(self):\n        'Name of this column.'\n        return self._name or ''\n\n    @name.setter\n    def name(self, name):\n        self.setName(name)\n\n    def setName(self, name):\n        if name is None:\n            name = ''\n        if isinstance(name, str):\n            name = name.strip()\n        else:\n            name = str(name)\n\n        if self.sheet:\n            name = self.sheet.maybeClean(name)\n\n        self._name = name\n\n    @property\n    def typestr(self):\n        'Type of this column as string.'\n        return self._type.__name__\n\n    @typestr.setter\n    def typestr(self, v):\n        self.type = vd.getGlobals()[v or 'anytype']\n\n    @property\n    def type(self):\n        'Type of this column.'\n        return self._type\n\n    @type.setter\n    def type(self, t):\n        if self._type != t:\n            vd.addUndo(setattr, self, '_type', self.type)\n        if not t:\n            self._type = anytype\n        elif isinstance(t, str):\n            self.typestr = t\n        else:\n            self._type = t\n\n    @property\n    def width(self):\n        'Width of this column in characters.  0 or negative means hidden.  None means not-yet-autocomputed.'\n        return self._width\n\n    @width.setter\n    def width(self, w):\n        if self.width != w:\n            if self.width == 0 or w == 0:  # hide/unhide\n                vd.addUndo(setattr, self, '_width', self.width)\n            self._width = w\n\n    @property\n    def formatted_help(self):\n        return MissingAttrFormatter().format(self.help, sheet=self.sheet, col=self, vd=vd)\n\n    @property\n    def help_formatters(self):\n        formatters = [k[10:] for k in dir(self) if k.startswith('formatter_')]\n        return ' '.join(formatters)\n\n    @property\n    def help_displayers(self):\n        displayers = [k[10:] for k in dir(self) if k.startswith('displayer_')]\n        return ' '.join(displayers)\n\n    @property\n    def _formatdict(col):\n        if '=' in col.fmtstr:\n            return dict(val.split('=', maxsplit=1) for val in col.fmtstr.split())\n        return {}\n\n    @property\n    def fmtstr(self):\n        'Format string to use to display this column.'\n        return self._fmtstr or vd.getType(self.type).fmtstr\n\n    @fmtstr.setter\n    def fmtstr(self, v):\n        self._fmtstr = v\n\n    def _format_len(self, typedval, **kwargs):\n        if isinstance(typedval, dict):\n            return f'{{{len(typedval)}}}'\n        elif isinstance(typedval, (list, tuple)):\n            return f'[{len(typedval)}]'\n\n        return self.formatValue(typedval, **kwargs)\n\n    def formatter_len(self, fmtstr):\n        return self._format_len\n\n    def formatter_generic(self, fmtstr):\n        return self.formatValue\n\n    def formatter_json(self, fmtstr):\n        return lambda v,*args,**kwargs: json.dumps(v)\n\n    def formatter_python(self, fmtstr):\n        return lambda v,*args,**kwargs: str(v)\n\n    @drawcache\n    def make_formatter(self):\n        'Return function for format(v) from the current formatter and fmtstr'\n        _formatMaker = getattr(self, 'formatter_'+(self.formatter or self.sheet.options.disp_formatter))\n        return _formatMaker(self._formatdict)\n\n    def format(self, *args, **kwargs):\n        return self.make_formatter()(*args, **kwargs)\n\n    def formatValue(self, typedval, width=None):\n        '''Return displayable string of *typedval* according to ``Column.fmtstr``.\n        If *width* is not None, values are clipped to that width when *typedval*\n        is a dict/list/tuple, but not for other types.'''\n        if typedval is None:\n            return None\n\n        if self.type is anytype:\n            if isinstance(typedval, (dict, list, tuple)):\n                if width is None:\n                    return ''.join(iterchars(typedval))\n                dispval, dispw = clipstr(iterchars(typedval), width-1) #subtract 1 for left-side margin\n                return dispval\n\n        if isinstance(typedval, bytes):\n            typedval = typedval.decode(options.encoding, options.encoding_errors)\n\n        gt = vd.getType(self._type)\n        return gt.formatter(self._fmtstr or gt.fmtstr, typedval)\n\n    def displayer_generic(self, dw:DisplayWrapper, width=None):\n        '''Fit *dw.text* into *width* charcells.\n           Generate list of (attr:str, text:str) suitable for clipdraw_chunks.\n\n           The 'generic' displayer does not do any formatting.\n        '''\n        if width is not None and width > 1 and \\\n                vd.isNumeric(self) and \\\n                isinstance(dw.typedval, (int, float)):\n            yield ('', dw.text.rjust(width-2))\n        else:\n            yield ('', dw.text)\n\n    def displayer_full(self, dw:DisplayWrapper, width=None):\n        '''Fit *dw.text* into *width* charcells.\n           Generate list of (attr:str, text:str) suitable for clipdraw_chunks.\n\n           The 'full' displayer allows formatting like [:color].\n        '''\n        if width is not None and width > 1 and vd.isNumeric(self):\n            yield from iterchunks(dw.text.rjust(width-2))\n        else:\n            yield from iterchunks(dw.text)\n\n    def display(self, *args, **kwargs):\n        f = getattr(self, 'displayer_'+(self.displayer or self.sheet.options.disp_displayer), self.displayer_generic)\n        return f(*args, **kwargs)\n\n    def hide(self, hide=True):\n        if hide:\n            self.setWidth(0)\n        else:\n            self.setWidth(abs(self.width or self.getMaxWidth(self.sheet.visibleRows)))\n\n    @property\n    def readonly(self):\n        return self.setter is None\n\n    @property\n    def hidden(self):\n        'Return True if width of this column is 0 or negative.'\n        if self.width is None:\n            return False\n        return self.width <= 0\n\n    def calcValue(self, row):\n        'Calculate and return value for *row* in this column.'\n        return (self.getter)(self, row)\n\n    def getTypedValue(self, row):\n        'Return the properly-typed value for the given row at this column, or a TypedWrapper object in case of null or error.'\n        return wrapply(self.type, wrapply(self.getValue, row))\n\n    def setCache(self, cache):\n        '''Set cache behavior for this column to *cache*:\n\n           - ``False`` (default): getValue never caches; calcValue is always called.\n           - ``True``: getValue maintains a cache of ``options.col_cache_size``.\n           - ``\"async\"``: ``getValue`` launches thread for every uncached result, maintains cache of infinite size.  Returns invalid value until cache entry available.'''\n        self.cache = cache\n        self._cachedValues = collections.OrderedDict() if self.cache else None\n\n    @asyncthread\n    def _calcIntoCacheAsync(self, row):\n        # causes issues when moved into _calcIntoCache gen case\n        self._cachedValues[self.sheet.rowid(row)] = INPROGRESS\n        self._calcIntoCache(row)\n\n    def _calcIntoCache(self, row):\n        ret = wrapply(self.calcValue, row)\n        if not isinstance(ret, TypedExceptionWrapper) or ret.val is not INPROGRESS:\n            self._cachedValues[self.sheet.rowid(row)] = ret\n        return ret\n\n    def getValue(self, row):\n        'Return value for *row* in this column, calculating if not cached.'\n\n        if self.defer:\n            try:\n                row, rowmods = self.sheet._deferredMods[self.sheet.rowid(row)]\n                return rowmods[self]\n            except KeyError:\n                pass\n\n        if self._cachedValues is None:\n            return self.calcValue(row)\n\n        k = self.sheet.rowid(row)\n        if k in self._cachedValues:\n            return self._cachedValues[k]\n\n        if self.cache == 'async':\n            ret = self._calcIntoCacheAsync(row)\n        else:\n            ret = self._calcIntoCache(row)\n\n            cachesize = options.col_cache_size\n            if cachesize > 0 and len(self._cachedValues) > cachesize:\n                self._cachedValues.popitem(last=False)\n\n        return ret\n\n    def getCell(self, row):\n        '''Return DisplayWrapper for displayable cell value.\n        For dict/list/tuple cells, the width of the value returned is capped at the column width.'''\n        cellval = wrapply(self.getValue, row)\n        typedval = wrapply(self.type, cellval)\n\n        if isinstance(typedval, TypedWrapper):\n            if isinstance(cellval, TypedExceptionWrapper):  # calc failed\n                exc = cellval.exception\n                if cellval.forwarded:\n                    dispval = str(cellval)  # traceback.format_exception_only(type(exc), exc)[-1].strip()\n                else:\n                    dispval = options.disp_error_val\n                return DisplayWrapper(cellval.val, error=exc.stacktrace,\n                                        text=dispval,\n                                        note=f'[:onclick error-cell]{options.disp_note_getexc}[:]',\n                                        notecolor='color_error')\n            elif typedval.val is None:  # early out for strict None\n                return DisplayWrapper(None, text='',  # force empty display for None\n                                            note=options.disp_note_none,\n                                            notecolor='color_note_type')\n            elif isinstance(typedval, TypedExceptionWrapper):  # calc succeeded, type failed\n                return DisplayWrapper(typedval.val, text=str(cellval),\n                                            error=typedval.stacktrace,\n                                            note=f'[:onclick error-cell]{options.disp_note_typeexc}[:]',\n                                            notecolor='color_warning')\n            else:\n                return DisplayWrapper(typedval.val, text=str(typedval.val),\n                                            error=['unknown'],\n                                            note=f'[:onclick error-cell]{options.disp_note_typeexc}[:]',\n                                            notecolor='color_warning')\n        elif isinstance(typedval, threading.Thread):\n            return DisplayWrapper(None,\n                                text=options.disp_pending,\n                                note=options.disp_note_pending,\n                                notecolor='color_note_pending')\n\n        dw = DisplayWrapper(cellval)\n        dw.typedval = typedval\n\n        try:\n            dw.text = self.format(typedval, width=self.width) or ''\n\n            # annotate cells with raw value type in anytype columns, except for strings\n            if self.type is anytype and type(cellval) is not str:\n                typedesc = vd.typemap.get(type(cellval), None)\n                if typedesc:\n                    dw.note = typedesc.icon\n                    dw.notecolor = 'color_note_type'\n\n        except Exception as e:  # formatting failure\n            e.stacktrace = stacktrace()\n            dw.error = e.stacktrace\n            try:\n                dw.text = str(cellval)\n            except Exception as e:\n                dw.text = str(e)\n            dw.note = options.disp_note_fmtexc\n            dw.notecolor = 'color_warning'\n\n#        dw.display = self.display(dw)   # set during draw() once colwidth is known\n        return dw\n\n    def getDisplayValue(self, row):\n        '''Return string displayed in this column for given *row*.\n        For dict/list/tuple cells, the width of the display value returned is capped at the column width.'''\n        return self.getCell(row).text\n\n    def getFullDisplayValue(self, row):\n        '''Return display string for *row* in this column, without width truncation.'''\n        typedval = self.getTypedValue(row)\n        if isinstance(typedval, TypedWrapper):\n            return self.getCell(row).text\n        try:\n            return self.format(typedval) or ''\n        except Exception:\n            return self.getCell(row).text\n\n    def putValue(self, row, val):\n        'Change value for *row* in this column to *val* immediately.  Does not check the type.  Overridable; by default calls ``.setter(row, val)``.'\n        if self.setter:\n            return self.setter(self, row, val)\n\n    def setValue(self, row, val, setModified=True):\n        'Change value for *row* in this column to *val*.  Call ``putValue`` immediately if not a deferred column (added to deferred parent at load-time); otherwise cache until later ``putChanges``.  Caller must add undo function.'\n        if self.defer:\n            self.cellChanged(row, val)\n        else:\n            self.putValue(row, val)\n        if setModified:  #1800\n            self.sheet.setModified()\n\n    @asyncthread\n    def setValues(self, rows, *values):\n        'Set values in this column for *rows* to *values*, recycling values as needed to fill *rows*.'\n        if self.readonly:\n            vd.fail(\"Cannot set values on readonly column\")\n\n        vd.addUndoSetValues([self], rows)\n\n        nsets = 0\n        for r, v in zip(rows, itertools.cycle(values)):\n            try:\n                self.setValue(r, v)\n                nsets += 1\n            except Exception as e:\n                vd.exceptionCaught(e)\n\n        self.recalc()\n        if nsets:\n            return vd.status(f'set {nsets} cells to {len(values)} values')\n\n    @asyncthread\n    def setValuesTyped(self, rows, *values):\n        'Set values on this column for *rows* to *values*, coerced to column type, recycling values as needed to fill *rows*.  Abort on type exception.'\n        if self.readonly:\n            vd.fail(\"Cannot set values on readonly column\")\n\n        vd.addUndoSetValues([self], rows)\n        nsets = 0\n        for r, v in zip(vd.Progress(rows, gerund='setting', total=len(rows)), itertools.cycle(self.type(val) for val in values)):\n            try:\n                self.setValue(r, v)\n                nsets += 1\n            except Exception as e:\n                vd.exceptionCaught(e)\n\n        self.recalc()\n\n        if nsets:\n            return vd.status(f'set {nsets} cells to {len(values)} values')\n\n    def getMaxWidth(self, rows):\n        'Return the maximum length of any cell in column or its header (up to drawable window width).'\n        drawable_width = self.sheet.windowWidth-1\n        nlen = dispwidth(self.name, literal=True)\n        w_max = nlen\n        for r in rows:\n            row_w = self.measureValueWidthCapped(r, maxwidth=drawable_width)\n            if w_max < row_w:\n                w_max = row_w\n            if w_max >= self.sheet.windowWidth:\n                break  #1747  early out to speed up wide columns\n        return min(w_max+2, drawable_width)\n\n    def measureValueWidthCapped(self, row, maxwidth=None):\n        '''Measure the width of the contents of a cell. Stop measuring at *maxwidth*,\n           to save time iterating over very long dict/list/tuple values.\n           If *maxwidth* is None, return the full width.'''\n        # The value classification logic here is taken from getCell,\n        # modified to cap the width examined for any dict/list/tuple\n        cellval = wrapply(self.getValue, row)\n        typedval = wrapply(self.type, cellval)\n        if isinstance(typedval, (TypedWrapper, threading.Thread)):\n            return dispwidth(self.getCell(row).text, maxwidth=maxwidth, literal=True)\n        try:\n            text = self.format(typedval, width=maxwidth) or ''\n        except Exception as e:  # formatting failure\n            try:\n                text = str(cellval)\n            except Exception as e:\n                text = str(e)\n        return dispwidth(text, maxwidth=maxwidth, literal=True)\n\n\n# ---- basic Columns\n\nclass WritableColumn(Column):\n    @property\n    def readonly(self):\n        return False\n\nclass AttrColumn(WritableColumn):\n    'Column using getattr/setattr with *attr*.'\n    def __init__(self, name=None, expr=None, **kwargs):\n        super().__init__(name,\n            expr=expr if expr is not None else name,\n            getter=lambda col,row: getattrdeep(row, col.expr, None),\n            **kwargs)\n\n    def putValue(self, row, val):\n        super().putValue(row, val)\n        setattrdeep(row, self.expr, val)\n\n\nclass ItemColumn(WritableColumn):\n    'Column using getitem/setitem with *expr*.'\n    def __init__(self, name=None, expr=None, **kwargs):\n        super().__init__(name,\n            expr=expr if expr is not None else name,\n            getter=lambda col,row: getitemdeep(row, col.expr, None),\n            **kwargs)\n\n    def putValue(self, row, val):\n        super().putValue(row, val)\n        setitemdeep(row, self.expr, val)\n\n\nclass SubColumnFunc(Column):\n    'Column compositor; preprocess row with *subfunc*(row, *expr*) before passing to *origcol*.getValue and *origcol*.setValue.'\n    def __init__(self, name='', origcol=None, expr=None, subfunc=getitemdef, **kwargs):\n        super().__init__(name, type=origcol.type, width=origcol.width, expr=expr, **kwargs)\n        self.origcol = origcol\n        self.subfunc = subfunc\n\n    @property\n    def readonly(self):\n        return self.origcol.readonly\n\n    def calcValue(self, row):\n        subrow = self.subfunc(row, self.expr)\n        if subrow is not None:\n            # call getValue to use deferred values from source sheet\n            return self.origcol.getValue(subrow)\n\n    def putValue(self, row, value):\n        subrow = self.subfunc(row, self.expr)\n        if subrow is None:\n            vd.fail('no source row')\n        self.origcol.setValue(subrow, value)\n\n    def recalc(self, sheet=None):\n        Column.recalc(self, sheet)\n        self.origcol.recalc()  # reset cache but don't change sheet\n\n\ndef SubColumnAttr(attrname, c, **kwargs):\n    if 'name' not in kwargs:\n        kwargs['name'] = c.name\n    return SubColumnFunc(origcol=c, subfunc=getattrdeep, expr=attrname, **kwargs)\n\ndef SubColumnItem(idx, c, **kwargs):\n    if 'name' not in kwargs:\n        kwargs['name'] = c.name\n    return SubColumnFunc(origcol=c, subfunc=getitemdef, expr=idx, **kwargs)\n\n\nclass SettableColumn(WritableColumn):\n    'Column using rowid to store and retrieve values internally.'\n    def putValue(self, row, value):\n        self._store[self.sheet.rowid(row)] = value\n\n    def calcValue(self, row):\n        return self._store.get(self.sheet.rowid(row), None)\n\n\nSettableColumn.init('_store', dict, copy=True)\n\n\nvd.addGlobals(\n    INPROGRESS=INPROGRESS,\n    Column=Column,\n    setitem=setitem,\n    getattrdeep=getattrdeep,\n    setattrdeep=setattrdeep,\n    getitemdef=getitemdef,\n    AttrColumn=AttrColumn,\n    ItemColumn=ItemColumn,\n    WritableColumn=WritableColumn,\n    SettableColumn=SettableColumn,\n    SubColumnFunc=SubColumnFunc,\n    SubColumnItem=SubColumnItem,\n    SubColumnAttr=SubColumnAttr,\n\n# synonyms\n    ColumnItem=ItemColumn,\n    ColumnAttr=AttrColumn,\n    DisplayWrapper=DisplayWrapper\n)\n"
  },
  {
    "path": "visidata/ddw/input.ddw",
    "content": "{\"id\": null, \"type\": null, \"x\": 6, \"y\": 7, \"text\": \"\\u2190\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\", \"frame\": null, \"rows\": null, \"duration_ms\": null, \"ref\": null, \"onclick\": null}\n{\"x\": 11, \"y\": 7, \"text\": \"go to prev/next char\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 3, \"y\": 4, \"text\": \"Ctrl\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 11, \"y\": 4, \"text\": \"cancel input (abort)\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 45, \"y\": 4, \"text\": \"delete one char at cursor\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 45, \"y\": 5, \"text\": \"delete one char before cursor\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 0, \"y\": 13, \"text\": \"Shift\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 4, \"y\": 3, \"text\": \"Enter\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 11, \"y\": 3, \"text\": \"accept input\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 42, \"y\": 6, \"text\": \"K\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 45, \"y\": 6, \"text\": \"delete all before/after cursor\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 42, \"y\": 12, \"text\": \"O\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 45, \"y\": 12, \"text\": \"open input in external editor\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 42, \"y\": 13, \"text\": \"R\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 45, \"y\": 13, \"text\": \"restore starting value\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 42, \"y\": 8, \"text\": \"T\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 45, \"y\": 8, \"text\": \"swap last two chars\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 40, \"y\": 6, \"text\": \"U\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 42, \"y\": 9, \"text\": \"V\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 45, \"y\": 9, \"text\": \"insert literal char\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 42, \"y\": 7, \"text\": \"W\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 45, \"y\": 7, \"text\": \"delete one word before cursor\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 42, \"y\": 11, \"text\": \"Y\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 45, \"y\": 11, \"text\": \"insert clipboard text at cursor\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 6, \"y\": 8, \"text\": \"\\u2190\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 11, \"y\": 8, \"text\": \"go to prev/next word\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 0, \"y\": 0, \"text\": \"Begin typing to overwrite the starting value.\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 0, \"y\": 1, \"text\": \"(To edit the starting value, press a movement key first.)\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 6, \"y\": 11, \"text\": \"\\u2191\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 1, \"y\": 9, \"text\": \"Home\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 11, \"y\": 9, \"text\": \"go to start/end\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 6, \"y\": 9, \"text\": \"End\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 7, \"text\": \"\\u2192\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 37, \"y\": 4, \"text\": \"Delete\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 34, \"y\": 5, \"text\": \"Backspace\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 37, \"y\": 3, \"text\": \"Insert\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 45, \"y\": 3, \"text\": \"toggle insert mode\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 6, \"y\": 12, \"text\": \"Tab\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 1, \"y\": 8, \"text\": \"Ctrl\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 35, \"y\": 6, \"text\": \"Ctrl\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 37, \"y\": 8, \"text\": \"Ctrl\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 37, \"y\": 7, \"text\": \"Ctrl\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 37, \"y\": 9, \"text\": \"Ctrl\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 37, \"y\": 11, \"text\": \"Ctrl\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 37, \"y\": 12, \"text\": \"Ctrl\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 37, \"y\": 13, \"text\": \"Ctrl\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 5, \"y\": 8, \"text\": \"+\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 39, \"y\": 6, \"text\": \"+\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 41, \"y\": 7, \"text\": \"+\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 41, \"y\": 8, \"text\": \"+\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 41, \"y\": 9, \"text\": \"+\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 41, \"y\": 11, \"text\": \"+\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 41, \"y\": 12, \"text\": \"+\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 41, \"y\": 13, \"text\": \"+\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 11, \"y\": 11, \"text\": \"prev/next in history\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 11, \"y\": 12, \"text\": \"next autocomplete\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 11, \"y\": 13, \"text\": \"prev autocomplete\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 7, \"y\": 4, \"text\": \"+\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 4, \"text\": \"C\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 5, \"y\": 13, \"text\": \"+\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 6, \"y\": 13, \"text\": \"Tab\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 32, \"y\": 3, \"text\": \"\\u2502\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 32, \"y\": 4, \"text\": \"\\u2502\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 32, \"y\": 5, \"text\": \"\\u2502\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 32, \"y\": 6, \"text\": \"\\u2502\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 32, \"y\": 7, \"text\": \"\\u2502\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 32, \"y\": 8, \"text\": \"\\u2502\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 32, \"y\": 9, \"text\": \"\\u2502\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 32, \"y\": 10, \"text\": \"\\u2502\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 32, \"y\": 11, \"text\": \"\\u2502\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 32, \"y\": 12, \"text\": \"\\u2502\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 32, \"y\": 13, \"text\": \"\\u2502\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 7, \"y\": 7, \"text\": \"/\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 5, \"y\": 9, \"text\": \"/\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 8, \"text\": \"\\u2192\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 11, \"text\": \"\\u2193\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 41, \"y\": 6, \"text\": \"/\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 7, \"y\": 11, \"text\": \"/\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 7, \"y\": 8, \"text\": \"/\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 75, \"y\": 0, \"text\": \"?\", \"color\": \"bold 117 cyan\", \"tags\": [], \"group\": \"\", \"onclick\": \"https://visidata.org/input\"}\n{\"x\": 3, \"y\": 5, \"text\": \"Ctrl+G\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 11, \"y\": 5, \"text\": \"cycle help sidebar\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n"
  },
  {
    "path": "visidata/ddw/regex.ddw",
    "content": "{\"id\": null, \"type\": null, \"x\": 5, \"y\": 1, \"text\": \".\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\", \"frame\": null, \"rows\": null, \"duration_ms\": null, \"ref\": null, \"href\": null}\n{\"x\": 5, \"y\": 2, \"text\": \"^\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 5, \"y\": 3, \"text\": \"$\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 38, \"y\": 1, \"text\": \"*\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 38, \"y\": 2, \"text\": \"+\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 38, \"y\": 3, \"text\": \"?\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 34, \"y\": 5, \"text\": \"{m,n}\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 1, \"text\": \"any char except newline\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 2, \"text\": \"start of string\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 3, \"text\": \"end of string\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 42, \"y\": 1, \"text\": \"0 or more\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 42, \"y\": 2, \"text\": \"1 or more\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 42, \"y\": 3, \"text\": \"0 or 1\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 42, \"y\": 5, \"text\": \"between m and n\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 1, \"y\": 11, \"text\": \"[abc]\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 0, \"y\": 12, \"text\": \"[^abc]\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 4, \"y\": 4, \"text\": \"\\\\d\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 4, \"y\": 6, \"text\": \"\\\\s\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 4, \"y\": 8, \"text\": \"\\\\w\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 4, \"text\": \"digit char\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 6, \"text\": \"whitespace char\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 4, \"y\": 10, \"text\": \"\\\\b\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 10, \"text\": \"word boundary\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 8, \"text\": \"word char\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 18, \"y\": 8, \"text\": \"[a-zA-Z0-9_]\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 36, \"y\": 7, \"text\": \"(\\u2026)\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 34, \"y\": 8, \"text\": \"(?:\\u2026)\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 11, \"text\": \"any of\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 15, \"y\": 11, \"text\": \"a\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 17, \"y\": 11, \"text\": \"or\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 20, \"y\": 11, \"text\": \"b\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 22, \"y\": 11, \"text\": \"or\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 25, \"y\": 11, \"text\": \"c\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 19, \"y\": 4, \"text\": \"[0-9]\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 42, \"y\": 7, \"text\": \"capturing group\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 42, \"y\": 8, \"text\": \"non-capturing group\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 9, \"y\": 12, \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 12, \"text\": \"not\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 12, \"y\": 12, \"text\": \"a\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 14, \"y\": 12, \"text\": \"or\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 17, \"y\": 12, \"text\": \"b\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 19, \"y\": 12, \"text\": \"or\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 22, \"y\": 12, \"text\": \"c\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 38, \"y\": 10, \"text\": \"|\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 42, \"y\": 10, \"text\": \"logical OR\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 4, \"y\": 5, \"text\": \"\\\\D\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 4, \"y\": 7, \"text\": \"\\\\S\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 4, \"y\": 9, \"text\": \"\\\\W\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 5, \"text\": \"non-digit char\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 7, \"text\": \"non-whitespace char\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 8, \"y\": 9, \"text\": \"non-word char\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 36, \"y\": 4, \"text\": \"{m}\", \"color\": \"keystrokes\", \"tags\": [], \"group\": \"\"}\n{\"x\": 42, \"y\": 4, \"text\": \"exactly m\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 4, \"y\": 0, \"text\": \"Character classes\", \"color\": \"bold underline\", \"tags\": [], \"group\": \"\"}\n{\"x\": 35, \"y\": 0, \"text\": \"Repetition\", \"color\": \"bold underline\", \"tags\": [], \"group\": \"\"}\n{\"x\": 2, \"y\": 15, \"text\": \"For full documentation on Python regular expressions, see\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n{\"x\": 6, \"y\": 16, \"text\": \"https://docs.python.org/3/library/re.html\", \"color\": \"underline\", \"tags\": [], \"group\": \"\", \"href\": \"https://docs.python.org/3/library/re.html\"}\n{\"x\": 2, \"y\": 14, \"text\": \"Note: regex operations apply to the displayed value in a cell\", \"color\": \"\", \"tags\": [], \"group\": \"\"}\n"
  },
  {
    "path": "visidata/ddwplay.py",
    "content": "from collections import defaultdict\nimport json\nimport time\nfrom visidata import colors, vd, clipdraw, ColorAttr, dispwidth\n\n__all__ = ['Animation', 'AnimationMgr']\n\n# duplicate of visidata.AttrDict, except default return value is '' instead of None\nclass AttrDict(dict):\n    def __getattr__(self, k):\n        try:\n            v = self[k]\n            if isinstance(v, dict):\n                v = AttrDict(v)\n            return v\n        except KeyError as e:\n            if k.startswith(\"__\"):\n                raise AttributeError from e\n            return ''\n    def __setattr__(self, k, v):\n        self[k] = v\n    def __dir__(self):\n        return self.keys()\n\n\nclass Animation:\n    def __init__(self, fp):\n        self.frames = defaultdict(AttrDict)  # frame.id -> frame row\n        self.groups = defaultdict(AttrDict)  # group.id -> group row\n        self.height = 0\n        self.width = 0\n        self.load_from(fp)\n\n    def iterdeep(self, rows, x=0, y=0, parents=None, **kwargs):\n        'Walk rows deeply and generate (row, x, y, [ancestors]) for each row, filtering on kwargs.'\n        for r in rows:\n            newparents = (parents or []) + [r]\n            if r.type == 'frame': continue\n            if r.ref:\n                assert r.type == 'ref'\n                g = self.groups[r.ref]\n                if self.matches(r, kwargs):\n                    yield from self.iterdeep(map(AttrDict, g.rows or []), x+r.x, y+r.y, newparents)\n            else:\n                if self.matches(r, kwargs):\n                    yield r, x+r.x, y+r.y, newparents\n                    yield from self.iterdeep(map(AttrDict, r.rows or []), x+r.x, x+r.y, newparents)\n\n    def matches(self, row, values):\n        for k, v in values.items():\n            actualv = getattr(row, k, None)\n            if isinstance(actualv, (list, tuple)) and isinstance(v, (list, tuple)):\n                if not any(x in actualv for x in v):\n                    return False\n            elif v != actualv:\n                return False\n        return True\n\n    def load_from(self, fp):\n        for line in fp.readlines():\n            r = AttrDict(json.loads(line))\n            if r.type == 'frame':\n                f = self.frames[r.id]\n                f.update(r)\n                f.rows = []\n            elif r.type == 'group':\n                self.groups[r.id].update(r)\n\n            f = self.frames[r.frame or '']\n            if not f.rows:\n                f.rows = [r]\n            else:\n                f.rows.append(r)\n\n        self.total_ms = 0\n        if self.frames:\n            self.total_ms = sum(f.duration_ms or 0 for f in self.frames.values())\n            for f in self.frames.values():\n                for r, x, y, _ in self.iterdeep(f.rows):\n                    self.width = max(self.width, x+dispwidth(r.text))\n                    self.height = max(self.height, y)\n\n    def draw(self, scr, *, t=0, x=0, y=0, loop=False, attr=ColorAttr(), **kwargs):\n        windowHeight, windowWidth = scr.getmaxyx()\n        for r, dx, dy, _ in self.iterdeep(self.frames[''].rows, **kwargs):\n            text = f'[:onclick {r.href}]{r.text}[/]' if r.href else r.text\n            if y+dy < windowHeight:\n                clipdraw(scr, y+dy, x+dx, text, attr.update(colors[r.color], 2))\n\n        if not self.total_ms:\n            return None\n\n        ms = int(t*1000) % self.total_ms\n        for f in self.frames.values():\n            ms -= int(f.duration_ms or 0)\n            if ms < 0:\n                for r, dx, dy, _ in self.iterdeep(f.rows, **kwargs):\n                    text = f'[:onclick {r.href}]{r.text}[/]' if r.href else r.text\n                    if y+dy < windowHeight:\n                        clipdraw(scr, y+dy, x+dx, text, colors[r.color])\n\n                return -ms/1000\n\n        if loop:\n            return -ms/1000\n\n\nclass AnimationMgr:\n    def __init__(self):\n        self.library = {}  # animation name -> Animation\n        self.active = []  # list of (start_time, Animation, kwargs)\n\n    def trigger(self, name, **kwargs):\n        if name in self.library:\n            self.active.append((time.time(), self.library[name], kwargs))\n        else:\n            vd.debug('unknown drawing \"%s\"' % name)\n\n    def load(self, name, fp):\n        self.library[name] = Animation(fp)\n\n    @property\n    def maxHeight(self):\n        return max(anim.height for _, anim, _ in self.active) if self.active else 0\n\n    @property\n    def maxWidth(self):\n        return max(anim.width for _, anim, _ in self.active) if self.active else 0\n\n    def draw(self, scr, t=None, **kwargs):\n        'Draw all active animations on *scr* at time *t*.  Return next t to be called at.'\n        if t is None:\n            t = time.time()\n        times = []\n        done = []\n        for row in self.active:\n            startt, anim, akwargs = row\n            kwargs.update(akwargs)\n            nextt = anim.draw(scr, t=t+startt, **kwargs)\n            if nextt is None:\n                if not akwargs.get('loop', True):\n                    done.append(row)\n            else:\n                times.append(t+nextt)\n\n        for row in done:\n            self.active.remove(row)\n\n        return min(times) if times else None\n\nvd.addGlobals({'Animation': Animation, 'AnimationMgr': AnimationMgr})\n"
  },
  {
    "path": "visidata/deprecated.py",
    "content": "import functools\n\nfrom visidata import VisiData, vd\nimport visidata\n\ndef deprecated_alias(depver, *args, **kwargs):\n    # expand this to create cmd\n    # with cmd.deprecated=depver\n    return visidata.BaseSheet.bindkey(*args, **kwargs)\n\n@VisiData.api\ndef deprecated_warn(vd, funcname, ver, instead):\n    import traceback\n\n    msg = f'{funcname} deprecated since v{ver}'\n    if instead:\n        msg += f'; use {instead}'\n\n    vd.warning(msg)\n\n    if vd.options.debug:\n        for line in reversed(traceback.extract_stack(limit=7)[:-2]):\n            vd.warning(f'    {line.name} at {line.filename}:{line.lineno}')\n        vd.warning(f'Deprecated call traceback (most recent last):')\n\n\ndef deprecated(ver, instead='', check=True):\n    def decorator(func):\n        @functools.wraps(func)\n        def wrapper(*args, **kwargs):\n            vd.deprecated_warn(wrapper.__name__, ver, instead)\n            return func(*args, **kwargs)\n\n        if check and hasattr(func, '_extensible_api'):\n            vd.error(f\"{func.__name__}: @deprecated applied in wrong order\")  #2623\n\n        return wrapper\n    return decorator\n\n\ndef _deprecated_api(ver, instead=''):\n    'Decorator to deliberately wrap non-deprecated .api functions as a deprecated global function.  Use @deprecated instead, except in deprecated.py.'\n    return deprecated(ver, instead, check=False)\n\n\n@VisiData.api\n@deprecated('1.6', 'vd instead of vd()')\ndef __call__(vd):\n    'Deprecated; use plain \"vd\"'\n    return vd\n\n\n@deprecated('1.6')\ndef copyToClipboard(value):\n    vd.error(\"copyToClipboard no longer implemented\")\n    return visidata.clipboard_copy(value)\n\n\n@deprecated('1.6')\ndef replayableOption(optname, default, helpstr):\n    vd.option(optname, default, helpstr, replay=True)\n\n@deprecated('1.6')\ndef SubrowColumn(*args, **kwargs):\n    return visidata.SubColumnFunc(*args, **kwargs)\n\n@deprecated('1.6')\ndef DeferredSetColumn(*args, **kwargs):\n    return visidata.Column(*args, defer=True, **kwargs)\n\n@deprecated('2.0')\ndef bindkey_override(keystrokes, longname):\n    vd.bindkeys.set(keystrokes, longname)\n\nbindkey = visidata.BaseSheet.bindkey\nunbindkey = visidata.BaseSheet.unbindkey\n\n@visidata.Sheet.api\n@deprecated('2.0')\ndef exec_keystrokes(self, keystrokes, vdglobals=None):\n    return self.execCommand(self.getCommand(keystrokes), vdglobals, keystrokes=keystrokes)\n\nvisidata.Sheet.exec_command = deprecated('2.0')(visidata.Sheet.execCommand)\n\n@VisiData.api\n@deprecated('2.0', 'def open_<filetype> instead')\ndef filetype(vd, ext, constructor):\n    'Add constructor to handle the given file type/extension.'\n    globals().setdefault('open_'+ext, lambda p,ext=ext: constructor(p.base_stem, source=p, filetype=ext))\n\n@VisiData.global_api\n@deprecated('2.0', 'Sheet(namepart1, namepart2, ...)')\ndef joinSheetnames(vd, *sheetnames):\n    'Concatenate sheet names in a standard way'\n    return visidata.options.name_joiner.join(str(x) for x in sheetnames)\n\n@VisiData.global_api\n@deprecated('2.0', 'PyobjSheet')\ndef load_pyobj(*names, **kwargs):\n    return visidata.PyobjSheet(*names, **kwargs)\n\n@VisiData.global_api\n@deprecated('2.0', 'PyobjSheet')\ndef push_pyobj(name, pyobj):\n    vs = visidata.PyobjSheet(name, source=pyobj)\n    if vs:\n        return vd.push(vs)\n    else:\n        vd.error(\"cannot push '%s' as pyobj\" % type(pyobj).__name__)\n\n@deprecated('2.1', 'vd.isNumeric instead')\ndef isNumeric(col):\n    return vd.isNumeric(col)\n\nvisidata.addGlobals({'load_pyobj': load_pyobj, 'isNumeric': isNumeric})\n\n# The longnames on the left are deprecated for 2.0\n\ndeprecated_alias('2.0', 'edit-cells', 'setcol-input')\ndeprecated_alias('2.0', 'fill-nulls', 'setcol-fill')\ndeprecated_alias('2.0', 'paste-cells', 'setcol-clipboard')\ndeprecated_alias('2.0', 'frequency-rows', 'frequency-summary')\ndeprecated_alias('2.0', 'dup-cell', 'dive-cell')\ndeprecated_alias('2.0', 'dup-row', 'dive-row')\ndeprecated_alias('2.0', 'next-search', 'search-next')\ndeprecated_alias('2.0', 'prev-search', 'search-prev')\ndeprecated_alias('2.0', 'search-prev', 'searchr-next')\ndeprecated_alias('2.0', 'prev-sheet', 'jump-prev')\ndeprecated_alias('2.0', 'prev-value', 'go-prev-value')\ndeprecated_alias('2.0', 'next-value', 'go-next-value')\ndeprecated_alias('2.0', 'prev-selected', 'go-prev-selected')\ndeprecated_alias('2.0', 'next-selected', 'go-next-selected')\ndeprecated_alias('2.0', 'prev-null', 'go-prev-null')\ndeprecated_alias('2.0', 'next-null', 'go-next-null')\ndeprecated_alias('2.0', 'page-right', 'go-right-page')\ndeprecated_alias('2.0', 'page-left', 'go-left-page')\ndeprecated_alias('2.0', 'dive-cell', 'open-cell')\ndeprecated_alias('2.0', 'dive-row', 'open-row')\ndeprecated_alias('2.0', 'add-sheet', 'open-new')\ndeprecated_alias('2.0', 'save-sheets-selected', 'save-selected')\ndeprecated_alias('2.0', 'join-sheets', 'join-selected')\ndeprecated_alias('2.0', 'dive-rows', 'dive-selected')\n\n# v2.3\ndeprecated_alias('2.3', 'show-aggregate', 'memo-aggregate')\n#theme('use_default_colors', True, 'curses use default terminal colors')\n#option('expand_col_scanrows', 1000, 'number of rows to check when expanding columns (0 = all)')\n\n# 2.6\n\ndef clean_name(s):\n    return visidata.vd.cleanName(s)\n\ndef maybe_clean(s, vs):\n    if (vs or visidata.vd).options.clean_names:\n        s = visidata.vd.cleanName(s)\n    return s\n\ndef load_tsv(fn):\n    vs = open_tsv(Path(fn))\n    yield from vs.iterload()\n\n# NOTE: you cannot use deprecated() with nonfuncs\n\ncancelThread = _deprecated_api('2.6', 'vd.cancelThread')(vd.cancelThread)\nstatus = _deprecated_api('2.6', 'vd.status')(vd.status)\nwarning = _deprecated_api('2.6', 'vd.warning')(vd.warning)\nerror = _deprecated_api('2.6', 'vd.error')(vd.error)\ndebug = _deprecated_api('2.6', 'vd.debug')(vd.debug)\nfail = _deprecated_api('2.6', 'vd.fail')(vd.fail)\n\noption = theme = vd.option # deprecated('2.6', 'vd.option')(vd.option)\njointypes = vd.jointypes # deprecated('2.6', 'vd.jointypes')(vd.jointypes)\nconfirm = _deprecated_api('2.6', 'vd.confirm')(vd.confirm)\nlaunchExternalEditor = _deprecated_api('2.6', 'vd.launchExternalEditor')(vd.launchExternalEditor)\nlaunchEditor = _deprecated_api('2.6', 'vd.launchEditor')(vd.launchEditor)\nexceptionCaught = _deprecated_api('2.6', 'vd.exceptionCaught')(vd.exceptionCaught)\nopenSource = _deprecated_api('2.6', 'vd.openSource')(vd.openSource)\nglobalCommand = visidata.BaseSheet.addCommand\nvisidata.Sheet.StaticColumn = _deprecated_api('2.11', 'Sheet.freeze_col')(visidata.Sheet.freeze_col)\n#visidata.Path.open_text = deprecated('3.0', 'visidata.Path.open')(visidata.Path.open)  # undeprecated in 3.1\n\nvd.sysclip_value = _deprecated_api('3.0', 'vd.sysclipValue')(vd.sysclipValue)\n\ndef itemsetter(i):\n    def g(obj, v):\n        obj[i] = v\n    return g\n\n\nvd.optalias('force_valid_colnames', 'clean_names')\nvd.optalias('dir_recurse', 'dir_depth', 100000)\nvd.optalias('confirm_overwrite', 'overwrite', 'confirm')\nvd.optalias('show_graph_labels', 'disp_graph_labels')\nvd.optalias('zoom_incr', 'disp_zoom_incr')\n\ndeprecated_alias('3.0', 'visibility-sheet', 'toggle-multiline')\ndeprecated_alias('3.0', 'visibility-col', 'toggle-multiline')\n\ndef clean_to_id(s):\n    return visidata.vd.cleanName(s)\n\n@deprecated('3.0', 'use try/finally')\nclass OnExit:\n    '\"with OnExit(func, ...):\" calls func(...) when the context is exited'\n    def __init__(self, func, *args, **kwargs):\n        self.func = func\n        self.args = args\n        self.kwargs = kwargs\n\n    def __enter__(self):\n        return self\n\n    def __exit__(self, exc_type, exc_value, exc_traceback):\n        try:\n            self.func(*self.args, **self.kwargs)\n        except Exception as e:\n            vd.exceptionCaught(e)\n\ndeprecated_alias('3.0', 'open-inputs', 'open-input-history')\n\n#vd.option('plugins_url', 'https://visidata.org/plugins/plugins.jsonl', 'source of plugins sheet')\n\n@visidata.VisiData.api\ndef inputRegexSubstOld(vd, prompt):\n    'Input regex transform via oneliner (separated with `/`).  Return parsed transformer as dict(before=, after=).'\n    rex = vd.inputRegex(prompt, type='regex-subst')\n    before, after = vd.parse_sed_transform(rex)\n    return dict(before=before, after=after)\n\n\nvisidata.Sheet.addCommand('', 'addcol-subst', 'addColumnAtCursor(Column(cursorCol.name + \"_re\", getter=regexTransform(cursorCol, **inputRegexSubstOld(\"transform column by regex: \"))))', 'add column derived from current column, replacing regex with subst (may include \\1 backrefs)', deprecated='3.0')\nvisidata.Sheet.addCommand('', 'setcol-subst', 'setValuesFromRegex([cursorCol], someSelectedRows, **inputRegexSubstOld(\"transform column by regex: \"))', 'regex/subst - modify selected rows in current column, replacing regex with subst, (may include backreferences \\\\1 etc)', deprecated='3.0')\nvisidata.Sheet.addCommand('', 'setcol-subst-all', 'setValuesFromRegex(visibleCols, someSelectedRows, **inputRegexSubstOld(f\"transform {nVisibleCols} columns by regex: \"))', 'modify selected rows in all visible columns, replacing regex with subst (may include \\\\1 backrefs)', deprecated='3.0')\n\nvisidata.Sheet.addCommand('', 'split-col', 'addRegexColumns(makeRegexSplitter, cursorCol, inputRegex(\"split regex: \", type=\"regex-split\"))', 'Add new columns from regex split', deprecated='3.0')\nvisidata.Sheet.addCommand('', 'capture-col', 'addRegexColumns(makeRegexMatcher, cursorCol, inputRegex(\"capture regex: \", type=\"regex-capture\"))', 'add new column from capture groups of regex; requires example row', deprecated='3.0')\n\n#vd.option('cmdlog_histfile', '', 'file to autorecord each cmdlog action to', sheettype=None)\n#BaseSheet.bindkey('KEY_BACKSPACE', 'menu-help')\n\n@visidata.Column.api\n@deprecated('3.0', 'vd.callNoExceptions(col.setValue, row, value)')\ndef setValueSafe(self, row, value):\n    'setValue and ignore exceptions.'\n    return vd.callNoExceptions(self.setValue, row, value)\n\n@visidata.BaseSheet.api\n@deprecated('3.0', 'vd.callNoExceptions(sheet.checkCursor)')\ndef checkCursorNoExceptions(sheet):\n    return vd.callNoExceptions(sheet.checkCursor)\n\n@VisiData.api\n@deprecated('3.1', 'vd.memoValue(name, value, displayvalue)')\ndef memo(vd, name, col, row):\n    return vd.memoValue(name, col.getTypedValue(row), col.getDisplayValue(row))\n\ndeprecated_alias('3.1', 'view-cell', 'pyobj-cell')\n\nvd.optalias('textwrap_cells', 'disp_wrap_max_lines', 3) # wordwrap text for multiline rows\n\n@visidata.TableSheet.api\n@deprecated('3.1', 'sheet.rowname(row)')\ndef keystr(sheet, row):\n    return sheet.rowname(row)\n\nvd.optalias('color_refline', 'color_graph_refline') # color_refline was used in v3.1 by mistake\n\n@visidata.TableSheet.api\n@deprecated('3.2', '[self.unsetKeys([c]) if c.keycol else self.setKeys([c]) for c in cols]')\ndef toggleKeys(self, cols):\n    for col in cols:\n        if col.keycol:\n            self.unsetKeys([col])\n        else:\n            self.setKeys([col])\n\nvd.optalias('disp_pixel_random', 'disp_graph_pixel_random')  #2661\n\nvd.addGlobals(deprecated_warn=deprecated_warn)\n\n# v3.3\n\n#vd.option('disp_expert', 'max level of options and columns to include')\n#vd.option('disp_help', '')\n"
  },
  {
    "path": "visidata/desktop/org.visidata.VisiData.metainfo.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component type=\"desktop-application\">\n  <id>org.visidata.VisiData</id>\n  <name>VisiData</name>\n  <summary>Terminal interface for exploring and arranging tabular data</summary>\n\n  <metadata_license>CC0-1.0</metadata_license>\n  <project_license>GPL-3.0-only</project_license>\n\n  <description>\n    <p>\n      VisiData is an interactive multitool for tabular data. It combines the\n      clarity of a spreadsheet, the efficiency of the terminal, and the power of\n      Python, into a lightweight utility which can handle millions of rows with\n      ease.\n    </p>\n    <p>\n      It supports many formats including CSV, TSV, JSON, Excel (.xlsx), SQLite,\n      and many others. Open data from the command line or pipe it in for quick\n      exploration and transformation.\n    </p>\n  </description>\n\n  <launchable type=\"desktop-id\">visidata.desktop</launchable>\n\n  <url type=\"homepage\">https://visidata.org</url>\n  <url type=\"bugtracker\">https://github.com/saulpw/visidata/issues</url>\n  <url type=\"help\">https://visidata.org/docs</url>\n  <url type=\"faq\">https://visidata.org/install</url>\n\n  <developer_name>Saul Pwanson</developer_name>\n\n  <screenshots>\n    <screenshot type=\"default\">\n      <image xml:space=\"preserve\">https://raw.githubusercontent.com/saulpw/visidata/develop/docs/assets/guide.png</image>\n      <caption>Interactive guide showing VisiData in use</caption>\n    </screenshot>\n    <screenshot>\n      <image xml:space=\"preserve\">https://raw.githubusercontent.com/saulpw/visidata/develop/docs/assets/vd-screenshot-options-colors.png</image>\n      <caption>Options sheet with color configuration in VisiData</caption>\n    </screenshot>\n  </screenshots>\n\n  <keywords>\n    <keyword>terminal</keyword>\n    <keyword>spreadsheet</keyword>\n    <keyword>tabular data</keyword>\n    <keyword>csv</keyword>\n    <keyword>data</keyword>\n  </keywords>\n</component>\n"
  },
  {
    "path": "visidata/desktop/visidata.desktop",
    "content": "[Desktop Entry]\nType=Application\nTerminal=true\nName=VisiData\nIcon=visidata\nExec=vd %F\nCategories=Utility;TextTools;\nComment=Terminal interface for exploring and arranging tabular data\nKeywords=terminal;spreadsheet;tabular;data;csv;\n"
  },
  {
    "path": "visidata/editor.py",
    "content": "import os\nimport sys\nimport signal\nimport subprocess\nimport tempfile\nimport curses\n\nimport visidata\n\nvisidata.vd.tstp_signal = None\n\nclass SuspendCurses:\n    'Context manager to leave windowed mode on enter and restore it on exit.'\n    def __enter__(self):\n        if visidata.vd.scrFull:\n            curses.endwin()\n        if visidata.vd.tstp_signal:\n            signal.signal(signal.SIGTSTP, visidata.vd.tstp_signal)\n\n    def __exit__(self, exc_type, exc_val, tb):\n        if visidata.vd.scrFull:\n            curses.reset_prog_mode()\n            visidata.vd.scrFull.refresh()\n            curses.doupdate()\n\n\n@visidata.VisiData.api\ndef launchEditor(vd, *args):\n    'Launch $EDITOR with *args* as arguments.'\n    editor = os.environ.get('EDITOR') or vd.fail('$EDITOR not set')\n    args = editor.split() + list(args)\n    with SuspendCurses():\n        return subprocess.call(args)\n\n\n@visidata.VisiData.api\ndef launchBrowser(vd, *args):\n    'Launch $BROWSER with *args* as arguments.'\n    browser = os.environ.get('BROWSER') or vd.fail('no $BROWSER for %s' % args[0])\n    vd.status('opening ' + args[0])\n    args = [browser] + list(args)\n    subprocess.call(args)\n\n\n@visidata.VisiData.api\ndef launchExternalEditor(vd, v, linenum=0):\n    'Launch $EDITOR to edit string *v* starting on line *linenum*.'\n    import tempfile\n    with tempfile.NamedTemporaryFile() as temp:\n        temp.close()  #2118 must close before re-opening on windows\n        with open(temp.name, 'w') as fp:\n            fp.write(v)\n        return vd.launchExternalEditorPath(visidata.Path(temp.name), linenum)\n\n\n@visidata.VisiData.api\ndef launchExternalEditorPath(vd, path, linenum=0):\n        'Launch $EDITOR to edit *path* starting on line *linenum*.'\n        if linenum:\n            visidata.vd.launchEditor(path, '+%s' % linenum)\n        else:\n            visidata.vd.launchEditor(path)\n\n        with open(path, 'r') as fp:\n            try:\n                return fp.read().rstrip('\\n')  # trim inevitable trailing newlines\n            except Exception as e:\n                visidata.vd.exceptionCaught(e)\n                return ''\n\n\n@visidata.VisiData.api\ndef suspend(vd):\n    import signal\n    with SuspendCurses():\n        os.kill(os.getpid(), signal.SIGSTOP)\n\n\ndef _breakpoint(*args, **kwargs):\n    import pdb\n    class VisiDataPdb(pdb.Pdb):\n        def precmd(self, line):\n            r = super().precmd(line)\n            if not r:\n                SuspendCurses.__exit__(None, None, None, None)\n            return r\n\n        def postcmd(self, stop, line):\n            if stop:\n                SuspendCurses.__enter__(None)\n            return super().postcmd(stop, line)\n\n    SuspendCurses.__enter__(None)\n    VisiDataPdb(nosigint=True).set_trace()\n\n\nsys.breakpointhook = _breakpoint\n\n\nvisidata.BaseSheet.addCommand('Ctrl+Z', 'suspend', 'suspend()', 'suspend VisiData process')\nvisidata.BaseSheet.addCommand('', 'breakpoint', 'breakpoint()', 'drop into pdb REPL')\n\nvisidata.vd.addGlobals(SuspendCurses=SuspendCurses)\n"
  },
  {
    "path": "visidata/errors.py",
    "content": "import traceback\nimport sys\nimport re\n\nfrom visidata import vd, VisiData\n\nvd.option('debug', False, 'exit on error and display stacktrace')\n\n\nclass ExpectedException(Exception):\n    'Controlled Exception from fail() or confirm().  Status or other interface update is done by raiser.'\n    pass\n\n\ndef stacktrace(e=None, exclude_caller=False):\n    '''Return a list of strings for the stack trace, without newlines\n    at the end. If an exception handler is executing, and *e* is none,\n    the stack trace includes extra levels of callers beyond the level\n    where the exception was caught. If *exclude_caller* is True, the\n    trace will exclude the function that called stacktrace(). The\n    trace will exclude several uninformative levels that are run\n    in interactive visidata.'''\n\n    if e:\n        return traceback.format_exception_only(type(e), e)\n    #in Python 3.11 we can replace sys.exc_info() with sys.exception()\n    handling = (sys.exc_info() != (None, None, None))\n\n    stack = ''.join(traceback.format_stack()).strip().splitlines()\n\n    if handling:\n        trim_levels = 2       # remove levels for stacktrace() -> format_stack()\n        if exclude_caller:\n            trim_levels += 1\n        trace_above = stack[:-2*trim_levels]\n    else:\n        trace_above = stack\n    if trace_above:\n        trace_above[0] = '  ' + trace_above[0]  #fix indent level of first line\n    try:\n        # remove several levels of uninformative stacktrace in typical interactive vd\n        idx = trace_above.index('    ret = vd.mainloop(scr)')\n        trace_above = trace_above[idx+1:]\n    except ValueError:\n        pass\n    if not handling:\n        return trace_above\n    # remove lines that mark error columns with carets and sometimes tildes\n    trace_below = [ line for line in traceback.format_exc().strip().splitlines() if not re.match('^ *~*\\\\^+$', line) ]\n    # move the \"Traceback (most recent call last) header to the top of the output\n    return [trace_below[0]] + trace_above + trace_below[1:]\n\n\n@VisiData.api\ndef exceptionCaught(vd, exc=None, status=True, **kwargs):\n    'Add *exc* to list of last errors and add to status history.  Show on left status bar if *status* is True.  Reraise exception if options.debug is True.'\n    if isinstance(exc, ExpectedException):  # already reported, don't log\n        return\n    # save a stack trace that does not include this function\n    vd.lastErrors.append(stacktrace(exclude_caller=True))\n    if status:\n        vd.status(f'{type(exc).__name__}: {exc}', priority=2)\n    else:\n        vd.addToStatusHistory(vd.lastErrors[-1][-1])\n    if vd.options.debug:\n        raise\n\n\nvd.addGlobals(stacktrace=stacktrace, ExpectedException=ExpectedException)\n\n# see textsheet.py for ErrorSheet and associated commands\n"
  },
  {
    "path": "visidata/experimental/__init__.py",
    "content": ""
  },
  {
    "path": "visidata/experimental/daw/CLAUDE.md",
    "content": "# VisiData Audio Workstation (vdaw)\n\n## Overview\n\nThis is an experimental VisiData plugin for editing podcast transcripts with synchronized audio playback. It provides a terminal-based interface for reviewing word-level transcripts, marking cuts, editing speaker labels, and exporting edited transcripts.\n\n## Architecture\n\n### Core Components\n\n**vdaw.py** - Main sheet implementation and editing logic\n- `EditRow` class: Hierarchical row structure representing transcript segments\n  - Supports nested subrows (sections → lines → words)\n  - Tracks cut/keep state, speaker, timestamps (start/end), and text\n  - Implements splitting operations (split_at_word, split_at_time)\n  - Uses `@drawcache_property` for expensive computations (text, duration, uncutrows)\n- `PodcastEditingSheet`: VisiData Sheet subclass for transcript editing\n  - Manages row hierarchy and playback cursor synchronization\n  - Integrates with MpvProcess for audio playback\n  - Handles cut detection during playback (skipcut mode)\n  - Binary search for finding rows by timestamp (find_row_path)\n- Export formats: `.transcript` (JSON), `.xmd` (markdown with timestamps), `.cutlist`\n\n**mpv.py** - Audio playback via mpv IPC\n- `MpvProcess`: Manages mpv subprocess and Unix socket communication\n- Audio filter support (agate, loudnorm) with parameter adjustment\n- Real-time filter parameter modification triggers mpv restart\n- Socket-based commands: play, pause, seek, property queries\n\n**merge_transcripts.py** - Merges human-edited transcript with whisperx word timings\n- Matches words between human transcript and whisperx output using fuzzy matching\n- Scores based on speaker match, text similarity (difflib), and time proximity\n- Outputs combined transcript with accurate word-level timestamps\n\n**xmd2json.py** - Parses markdown transcripts into JSON format\n- Format: `[HH:MM:SS.s] **Speaker**: text` with optional section headers (`##`)\n- Handles strikethrough for cuts (`~~text~~`)\n- Interpolates timestamps for lines without explicit timing\n- Splits lines into word-level subrows\n\n### Data Flow\n\n```\nAudio file\n  → AI-generated transcript with word-level timings\n  → VisiData (vd -f transcript)\n  → editing in PodcastEditingSheet\n  → export as .xmd (markdown) or .transcript (JSON)\n```\n\n### Key Design Patterns\n\n1. **Hierarchical Rows**: EditRow supports arbitrary nesting. Top-level rows are sections/paragraphs, mid-level are lines, bottom-level are individual words with timestamps.\n\n2. **Cut State Propagation**: If a row has subrows, its cut state is max of subrow cuts. Otherwise, it's explicitly set. Negative cut values indicate cuts to remove.\n\n3. **Playhead Synchronization**: `checkCursor()` is called during playback to:\n   - Skip over cut segments when skipcut=True\n   - Find the current word via binary search (find_row_path)\n   - Seek to next uncut word if in a cut segment\n\n4. **Draw Cache**: Expensive properties (text, duration, uncutrows) use `@drawcache_property` which clears on every fresh draw cycle.\n\n## Common Commands\n\n### Running vdaw\n\nLoad a transcript (requires matching .wav or .mp3 file for synced playback):\n```bash\nvd editable-transcript.json -f transcript\n# or with .transcript extension:\nvd editable-transcript.transcript\n```\n\n### Key Editing Commands\n\nSee README.md for the complete list of editing commands.\n\n### Exporting\n\n- Save as `.xmd` for markdown transcript with strikethrough cuts\n- Save as `.cutlist` for a human-readable list of cut segments\n- Save as `.transcript` or `.json` for the full editable format\n\n## Development Notes\n\n### Adding New Features\n\n- All VisiData commands are added via `Sheet.addCommand()` at bottom of vdaw.py\n- New columns should be added to `PodcastEditingSheet.columns` list\n- Use `vd.addUndo()` before modifying sheet.rows to enable undo\n- Call `sheet.setModified()` when making edits to trigger save prompts\n\n### Timestamp Handling\n\n- All timestamps are floats (seconds since start)\n- `to_hms()` formats timestamps as `HH:MM:SS.s` or `MM:SS.s` format\n- Words without valid timestamps have `start=None, end=None`\n- `flag_bad_timings()` identifies and interpolates invalid timings\n\n### mpv Integration\n\n- mpv runs in separate process, controlled via Unix socket at `/tmp/vdmpv`\n- Filter changes require mpv restart (see `restart_mpv()`)\n- Playback queries (`playback_time`, `paused`) are synchronous socket calls\n- Clean up leftover mpv processes: `pkill -f vdmpv` or restart with `Ctrl+R`\n"
  },
  {
    "path": "visidata/experimental/daw/README.md",
    "content": "\n# VisiData Audio Workstation\n\n* current goal: automate getting functional transcript (80%+)\n  so that i can actually make progress editing with vdaw\n  which will close the loop and take vdaw to become a functional transcript audio editor\n\n## getting the input transcript\n\nGiven a separate .wav file per speaker.\n\nFor each input .wav file:\n\n1. Cut out the low volume audio, so the non-speaker doesn't get transcribed.\n\n    ffmpeg -i mike.wav -af \"agate=\" mike-only.wav\n\n2.  Use whisperx to get word-level timestamps.\n\n    uvx whisperx --model base.en --task transcribe --hf_token ${HF_API_TOKEN} --highlight_words True --compute_type int8 --device cpu mike-only.wav\n\n3.  (Optional) get full transcript from other source as .md to serve as the best/canonical edit.\n\n    xmd2json.py transcript.md > transcript.json\n\n4.  Then merge the per-speaker transcripts.\n\n    merge_transcripts.py transcript.json mike-only.json saul-only.json > editable-transcript.json\n\n5.  Load into VisiData using the `transcript` file format.\n\n    vd editable-transcript.json -f transcript\n\n## Saving changes\n\nModifications can be saved via `Ctrl+S` to the original .json file, or use a `.transcript` suffix for a bit more convenience (doesn't require the `-f` flag above).\n\n### Export markdown\n\n[Ideally VisiData should make it possible for a sheet to override a saver, so vdaw could define a save_md.]\n\nFor now, save as `foo.xmd` to get a markdown transcript with strikethrough for deleted lines.\n\n## Editing Commands\n\n### Playback\n- `p` - Play from cursor row (skipping cuts)\n- `P` - Play from cursor row (including cuts)\n- `zp` - Toggle pause\n- `[` / `]` - Seek backward/forward 10 seconds\n- `g[` / `g]` - Seek backward/forward 60 seconds\n- `gg` - Jump cursor to playhead\n- `F5` - Slow down playback speed by 50%\n- `F8` - Speed up playback 2x\n- `Ctrl+R` - Restart mpv process\n\n### Cutting/Keeping Audio\n- `x` - Cut audio for line at cursor row\n- `y` - Keep/upvote audio for line at cursor row\n- `gx` - Cut audio for selected rows\n- `gy` - Keep audio for selected rows\n\n### Splitting & Combining\n- `a` - Split line at current playhead\n- `za` - Split line at word (prompts for word)\n- `g)` - Combine selected rows into one\n- `(` - Expand row into subrows\n- `g(` - Expand selected rows\n\n### Navigation\n- `<` / `>` - Move to previous/next section header\n- `g<` / `g>` - Move to first/last section header\n\n### Text Formatting\n- `r` - Reformat row (wrap text to column width)\n- `gr` - Reformat selected rows\n\n### Audio Filters\n- `f` - Open audio filter parameters sheet\n- `0-9` - Set filter parameter to preset value (in filter sheet or main sheet)\n\n### Utilities\n- `c` - Clean/interpolate bad word timings\n\n## Applying ffmpeg filters\n\n- Use vdaw to experiment with ffmpeg filters via the `f` command\n\n     - agate\n     - compand\n     - loudnorm\n"
  },
  {
    "path": "visidata/experimental/daw/TODO.md",
    "content": "- when rollup with g), don't put it at the cursor, put it at the \n   - put cursor on rolled up line\n- rollup all sections?\n- preserve cut amount with 'a'\n- only colorize text for 'cut' sections?\n- use background instead of underline for section start\n- use underline for playhead?\n- 'a' after last word creates two empty rows?\n- cut text should not be shown in rolled up text in vd?\n\n- flag words or lines as incorrect for cleanup review\n\n- single-word interjections inlined into other paragraph\n- combine consecutive cuts in markdown\n- bug: batch convert transcript to xmd \"terminated\"\n\n- feat: play side subsheet of rows (if in order)\n- feat: edit text of subwords while maintaining timings\n- output should descend into EditRow; lower headers are subheaders?\n\n- feat: replace line with separate stem (e.g. AI generated voice)\n\n- ) to reclose current row.  or is that too much given ENTER/q?\n\n\n- command to rollup whisper transcript by speaker again\n   - like the .xmd output grouping\n\n? sequential cut lines should show up as single …\n? select to next marker\n? command to select rows from last marker (zs)\n\n- cleanup: rename PodcastEditingSheet to Transcript[Editing]Sheet\n\n? highlight current word in transcript\n\n- track cutpoints as times\n- feat: z< and z> to adjust the previous cutpoint\n   - play 100ms tone at marker\n\n- feat: 1-9 for numbered (temporary) marker\n   - 'z1' to set marker 1 at current timestamp; '1' to play starting at marker 1\n\n7. outputs\n   + c) transcript with cuts excluded (transcript of edited audio) -- based on options.daw_include_cuts\n   d) edited audio (pasting non-cut sections together)\n   e) .omf file for use in other DAW like reaper\n"
  },
  {
    "path": "visidata/experimental/daw/__init__.py",
    "content": "from .mpv import MpvProcess\nfrom . import vdaw\n"
  },
  {
    "path": "visidata/experimental/daw/merge_transcripts.py",
    "content": "#!/usr/bin/env python3\n\nimport sys\nimport json\n\nimport difflib\n\ndef stderr(*args):\n    print(*args, file=sys.stderr)\n\ndef progress(s):\n    print(f\"\\r{s}\", end='', file=sys.stderr)\n    sys.stderr.flush()\n\ndef find_words_around(needle:dict, haystack:list[dict], seconds=10):\n    return [w\n        for w in haystack\n            if abs(needle['start']-w['start']) < seconds]\n\ndef _score(whisperw, humanw):\n    r = 0\n    if whisperw.get('speaker') == humanw.get('speaker'):\n        r += 5\n\n    w1 = clean(whisperw.get('word', whisperw.get('text')))\n    w2 = clean(humanw['text'])\n    r += difflib.SequenceMatcher(a=w1, b=w2).ratio()*10\n\n    r -= abs(whisperw['start'] - humanw['start'])\n    return r\n\ndef clean(s:str) -> str:\n    return ''.join(c.lower() for c in s if c.isalnum())\n\ndef main(humanfn, *whisperfns):\n    mdt = json.loads(open(humanfn).read())\n\n    poss = []\n    for whisperfn in whisperfns:\n        whispert = json.loads(open(whisperfn).read())\n        word_timings = whispert['word_segments']\n\n        for row in mdt['word_segments']:\n            startt = row.get('start') or 0\n            progress(f\"{startt:.01f}\")\n            if row['speaker'] == 'marker':\n                continue\n            for humanw in row['subrows']:\n                for whisperw in find_words_around(humanw, word_timings):\n                    poss.append((_score(whisperw, humanw), whisperw, humanw))\n\n    poss.sort(key=lambda r: -r[0])\n\n    i = 0\n    for score, whisperw, humanw in poss:\n        if whisperw.get('used'):\n            continue\n\n        if humanw.get('match_score'):\n            continue\n\n        i += 1\n        humanw['start'] = whisperw['start']\n        humanw['end'] = whisperw['end']\n        humanw['match_score'] = score\n#        humanw['text'] += f\" {i}\"\n        whisperw['used'] = humanw\n\n    for row in mdt['word_segments']:\n        if row.get('speaker') == 'marker':\n            continue\n        if not row.get('subrows'):\n            stderr('no subrows', row)\n            continue\n        row['start'] = row['subrows'][0]['start']\n        row['end'] = row['subrows'][-1]['end']\n\n    mdt['sourceaudio'] = 'daw/2025-10-16.mp3'\n    print(json.dumps(mdt))\n\n\nmain(*sys.argv[1:])\n"
  },
  {
    "path": "visidata/experimental/daw/mpv.py",
    "content": "import os\nimport os.path\nimport socket\nimport json\nimport time\nimport subprocess\nimport shlex\n\nfrom visidata import AttrDict, Sheet, vd\n\n\nvd.option('daw_mpv_cmd', '/usr/bin/mpv --no-terminal --ao=pulse', '')\n\n\nclass MpvProcess:\n    mpvproc = None\n\n    afilters = dict(\n        agate=[AttrDict(key=k, desc=desc) for k, desc in dict(\n            level_in='input level before filtering',\n            mode='upward=higher parts amplified; downward=lower parts reduced',\n            range='level of gain reduction when the signal is below the threshold',\n            threshold='If a signal rises above this level the gain reduction is released',\n            ratio='ratio by which the signal is reduced',\n            attack='milliseconds the signal has to rise above the threshold before gain reduction stops',\n            release='milliseconds the signal has to fall below the threshold before the reduction is increased again',\n            makeup='amount of amplification of signal after processing',\n            knee='Curve the sharp knee around the threshold to enter gain reduction more softly',\n            detection='if exact signal should be taken for detection or an RMS like one',\n            link='if the average level between all channels or the louder channel affects the reduction'\n         ).items()],\n        loudnorm=[AttrDict(key=k, desc=desc) for k, desc in dict(\n           i='integrated loudness target',\n           lra='loudness range target',\n           tp='maximum true peak',\n           measured_i='Measured IL of input file',\n           measured_lra='Measured LRA of input file',\n           measured_tp='Measured true peak of input file',\n           measured_thresh='Measured threshold of input file',\n           offset='offset gain. Gain is applied before the true-peak limiter',\n           linear='Normalize by linearly scaling the source audio',\n           dual_mono='Treat mono input files as \"dual-mono\"',\n         ).items()])\n    # possible values across buttons 0 (default) to 9\n    afilter_options = dict(agate=dict(\n                                level_in=[1, 0.015625, 0.03, 0.1, 0.3, 1, 3, 10, 30, 64],\n                                mode=['downward', 'upward'],\n                                range=[0.06125,.1,.2,.3,.4,.5,.6,.7,.8,.9],\n                                threshold=[0.125,.1,.2,.3,.4,.5,.6,.7,.8,.9],\n                                ratio=[2,1,3,10,30,100,300,1000,3000,9000],\n                                attack=[20, 0.01, .1, 1, 3, 10, 30, 100, 1000, 9000],\n                                release=[250, 0.01, .1, 1, 3, 10, 30, 100, 1000, 9000],\n                                makeup=[1,1,2,3,4,6,8,16,32,64],\n                                knee=[2.828427,1,2,2.8,3,4,5,6,7,8],\n                                detection=['rms', 'peak'],\n                                link=['average', 'maximum']),\n                           loudnorm=dict(\n                               i=[-24.0],\n                               lra=[7.0],\n                               tp=[-0.0],\n                               measured_i=[None],\n                               measured_lra=[None],\n                               measured_tp=[None],\n                               measured_thresh=[None],\n                               offset=[0, -99,-50,-20,-5,5,20,50,99],\n                               linear=[True, False],\n                               dual_mono=[False, True],\n                           ))\n    afilter_parms = {}\n\n    def __init__(self, sourcefn, source:Sheet):\n        self.sourceaudio = sourcefn\n        self.mpvproc = None\n        self.source = source\n\n    def add_filter(self, filtername):\n        self.afilter_parms[filtername] = {\n            parmname:values[0] for parmname, values in self.afilter_options[filtername].items()\n        }\n        vd.status(f'filter {filtername} added')\n\n    def remove_filter(self, filtername):\n        del self.afilter_parms[filtername]\n\n    def set_filter_parm(self, filtername, parmname, val):\n        if filtername not in self.afilter_parms:\n            self.add_filter(filtername)\n        self.afilter_parms[filtername][parmname] = val\n        self.restart_mpv(self.source.cursorRow.start) # self.playback_time\n\n    @property\n    def mpvsockfn(self):\n        return '/tmp/vdmpv'\n\n    def restart_mpv(self, t:float):\n        self.start_mpv()\n        time.sleep(0.5)\n        self.seek_audio(t, 'absolute')\n        self.pause_audio(False)\n\n    def is_default(self, filtername, parmname, val):\n        return val is None or val == self.afilter_options[filtername][parmname][0]\n\n    def start_mpv(self):\n        if self.mpvproc:\n            self.mpv_command(command=[\"quit\"])\n            self.mpvproc = None\n\n        if os.path.exists(self.mpvsockfn):\n            os.unlink(self.mpvsockfn)\n\n        if not os.path.exists(self.mpvsockfn):\n            if not os.path.exists(self.sourceaudio):\n                vd.warning(f'{self.sourceaudio} does not exist')\n                return\n\n            filterparams = ','.join(\n                    (f'{filtername}=' + ':'.join(f'{k}={v}' for k, v in filterparms.items() if not self.is_default(filtername, k, v)))\n                        for filtername, filterparms in self.afilter_parms.items())\n\n            if filterparams:\n                filterparams = '--af='+filterparams\n                vd.status(filterparams)\n\n            cmd = shlex.split(vd.options.daw_mpv_cmd)\n            cmd.append(f'--input-ipc-server={self.mpvsockfn}')\n            cmd.append(filterparams)\n            cmd.append(self.sourceaudio)\n            self.mpvproc = vd.popen(cmd)\n\n    def mpv_command(self, **kwargs):\n        sock = socket.socket(socket.AF_UNIX)\n        sock.connect(self.mpvsockfn)\n        sock.sendall(json.dumps(kwargs).encode() + b'\\n')\n        sock.close()\n\n    def mpv_query(self, propname):\n        sock = socket.socket(socket.AF_UNIX)\n        try:\n            sock.connect(self.mpvsockfn)\n            sock.sendall(json.dumps(dict(command=['get_property', propname])).encode() + b'\\n')\n            r = sock.recv(4096)\n            for line in r.splitlines():\n                d = json.loads(line)\n                error = d.get('error', '')\n                if error != 'success':\n                    vd.error(f\"mpv error ({propname}): {error}\")\n            return d['data']\n        except FileNotFoundError as e:\n            vd.warning(str(e))\n        finally:\n            sock.close()\n\n    def set_property(self, propname, b=True):\n        self.mpv_command(command=['set_property', propname, b])\n\n    @property\n    def paused(self):\n        p = self.mpv_query('pause')\n#        vd.status(f'paused={p}')\n        return p\n\n    @property\n    def playback_time(self):\n        t = self.mpv_query('playback-time')\n        if t is not None:\n            return float(t)\n\n    def pause_audio(self, b=True):\n        self.set_property('pause', b)\n\n    def play_audio(self, t:float):\n        self.seek_audio(t, 'absolute')\n        self.pause_audio(False)\n\n    def seek_audio(self, dt:float, *args):\n        self.mpv_command(command=['seek', str(dt), *args])\n"
  },
  {
    "path": "visidata/experimental/daw/vdaw.py",
    "content": "\nfrom collections import defaultdict\nfrom copy import copy\n\nimport json\nimport textwrap\n\nfrom functools import cached_property\nfrom visidata import vd, VisiData, Sheet, ItemColumn, AttrColumn, AttrDict, vlen, RowColorizer, Column\nfrom visidata import drawcache_property, setitem, asyncthread\n\nfrom . import MpvProcess\n\nvd.theme_option('color_daw_header', 'underline', 'color of first line in a transcript section')\nvd.theme_option('color_daw_playhead', 'blue', 'color of playhead line')\nvd.theme_option('color_daw_cut', '238', 'color of cut rows')\nvd.theme_option('color_daw_keep', 'green', 'color of kept rows')\nvd.theme_option('daw_include_cuts', True, 'whether saving xmd format includes cuts with strikethrough')\n\n\noptions_daw_hms_seps = '::.'  # or maybe 'hm.' or '..,'\n\ndef to_hms(t:float, width=None) -> str:\n    'Return some form of HH:MM:SS.s'\n    if not isinstance(t, (float, int)) or t == 0:\n        return ''\n\n    if t < 100:\n        return f'{t:0.1f}s'\n\n    ret = ''\n\n    h = int(t // 3600)\n    if h > 0:\n        ret += f'{h}' + options_daw_hms_seps[0]\n\n    m = int((t % 3600) // 60)\n    if ret or m > 0:\n        ret += f'{m:02d}' + options_daw_hms_seps[1]\n\n    s = int(t % 60)\n    ms = int((t - int(t))*10)\n\n    ret += f'{s:02d}{options_daw_hms_seps[2]}{ms:01d}'\n\n    return ret\n\ndef cleanword(s:str) -> str:\n    return ''.join(c.lower() for c in s if c.isalnum())\n\ndef is_cut(row):\n    if isinstance(row.cut, (float, int)):\n        return row.cut < 0\n    else:\n        return bool(row.cut)\n\n\ndef replace_subrows(row):\n    'Turn row into EditRow, recursively making its subrows also EditRows, until the bottom level which are simple AttrDicts.'\n    if not isinstance(row, EditRow):\n        ret = EditRow(**row)\n    else:\n        ret = row\n\n    if not ret.subrows:\n        if not ret.data:\n            ret.data = AttrDict(row)\n    else:\n        ret.subrows = [replace_subrows(baser) for baser in ret.subrows]\n    return ret\n\n\n@VisiData.api\ndef open_transcript(vd, p):\n    '''path is transcript in JSON format; audio should be path.mp3'''\n    vd.timeouts_before_idle = -1\n    return PodcastEditingSheet(p.base_stem, source=p)\n\n@Column.api\ndef formatter_hhmmss(self, fmtstr):\n    return to_hms\n\n\nclass EditRow:\n    def __init__(self, section:str='', speaker:str='', header:str='', subrows:list=None, cut=None, **kwargs):\n        self.data = AttrDict(kwargs) # start/end/text for leaf nodes\n        self.section = section\n        self.speaker = speaker\n        self.header = header\n        self.weird = None\n        self.subrows = [replace_subrows(baser) for baser in (subrows or [])]\n        if not subrows or cut is not None:\n            self.cut = cut\n        else:\n            self.cut = max(r.cut if r.cut else 0 for r in self.subrows)\n\n    def __str__(self):\n        return f'[{self.cut} {self.start:.1f}-{self.end:.1f}] {self.speaker}: {self.editedtext}'\n        return f'[{\"CUT \" if is_cut(self) else \"\"}{self.start:.1f}-{self.end:.1f}] {self.speaker}: {self.editedtext}'\n\n    def to_json(self) -> dict:\n        return dict(section=self.section,\n                    speaker=self.speaker,\n                    start=self.start,\n                    end=self.end,\n                    cut=self.cut,\n                    subrows=self.subrows,\n                    text=self.text)\n\n    def __contains__(self, t:float) -> bool:\n        if t is None:\n            return False\n        if not self.start or not self.end:\n            return False\n        return self.start <= t <= self.end\n\n    @drawcache_property\n    def start(self) -> float:\n        if self.data: return self.data.start\n        return min((r.start for r in self.subrows if r.start), default=None)\n\n    @drawcache_property\n    def end(self) -> float:\n        if self.data: return self.data.end\n        return max((r.end for r in self.subrows if r.end), default=None)\n\n    @drawcache_property\n    def duration(self) -> float:\n        if is_cut(self):\n            return 0\n        if self.subrows:\n            return sum((r.duration or 0) for r in self.uncutrows) if self.uncutrows else 0\n        if self.data: return self.data.end-self.data.start\n        return 0\n\n    @drawcache_property\n    def raw_duration(self) -> float:\n        return self.end-self.start\n\n    @drawcache_property\n    def text(self) -> str:\n        if not self.subrows: return self.data.text\n        if self.cut:\n            # if shown directly, toplevel shows words for all rows regardless of cutness\n            return ' '.join((r.text or '') for r in self.subrows)\n        else:\n            # otherwise cut subrows are elided\n            return ' '.join((r.text or '') if not is_cut(r) else '…' for r in self.uncutrows)\n\n    @drawcache_property\n    def editedtext(self) -> str:\n        if self.data:\n            if is_cut(self):\n                return f'~~{self.data.text}~~'\n            else:\n                return self.data.text\n\n        line = ' '.join((r.text or '') for r in self.subrows)\n        if is_cut(self):\n            line = f'~~{line}~~'\n        return line\n\n    @drawcache_property\n    def cookedtext(self) -> str:\n        if is_cut(self):\n            return ''\n\n        if self.data:\n            return self.data.text\n\n        return ' '.join((r.cookedtext or '') for r in self.subrows)\n\n    @drawcache_property\n    def uncutrows(self) -> list:\n        if is_cut(self):\n            return []\n        return [r for r in self.subrows if r and not is_cut(r)]\n\n    @drawcache_property\n    def nwords(self) -> int:\n        return sum(r.nwords for r in self.subrows) if not self.data else len(self.data.text.split())\n\n    def split_at_word(self, n:int) -> tuple['EditRow', 'EditRow']:\n        wordnum = 0\n        beforerows = []\n        afterrows = []\n        midrow = None\n        for sr in self.uncutrows:\n            nsubwords = len(sr.text.split())\n            if wordnum < n:\n                beforerows.append(sr)\n            elif wordnum + nsubwords - 1 > n:\n                afterrows.append(sr)\n            else:\n                assert midrow is None\n                midrow = sr\n                cutwordnum = n - wordnum\n\n            wordnum += nsubwords\n\n        if midrow:  # word n is contained within this subrow\n            if midrow.subrows:\n                a, b = midrow.split_at_word(cutwordnum)\n                r1 = EditRow(section=self.section, speaker=self.speaker, header=self.header, subrows=beforerows + [a], cut=self.cut)\n                r2 = EditRow(section=self.section, speaker=self.speaker, subrows=[b] + afterrows, cut=self.cut)\n                return r1, r2\n            else:\n                r1 = EditRow(section=self.section, speaker=self.speaker, header=self.header, subrows=beforerows + [midrow], cut=self.cut)\n                r2 = EditRow(section=self.section, speaker=self.speaker, subrows=afterrows, cut=self.cut)\n                return r1, r2\n        else:\n            return None, None\n\n    def split_at_time(self, t:float) -> tuple['EditRow', 'EditRow']:\n        midrow = None\n        beforerows = None\n        afterrows = None\n        for i, r in enumerate(self.subrows):\n            if r.subrows:\n                if t in r:\n                    beforerows = self.subrows[:i]\n                    afterrows = self.subrows[i+1:]\n                    midrow = r\n                    break\n            else:  # bottomost level\n                if t <= r.start:\n                    if i == 0:\n                        beforerows = []\n                        afterrows = self.subrows\n                        break\n                    elif self.subrows[i-1].end <= t <= r.start:\n                        beforerows = self.subrows[:i]\n                        afterrows = self.subrows[i:]\n                        break\n                    else:  # in the middle of the previous word\n                        prevr = self.subrows[i-1]\n                        beforerows = self.subrows[:i]\n                        afterrows = self.subrows[i:]\n                        assert prevr.start <= t <= prevr.end, (prevr.start, t, prevr.end)\n                        break\n\n        if midrow:  # time t is contained within this subrow\n            if midrow.subrows:\n                a, b = midrow.split_at_time(t)\n                r1 = EditRow(section=midrow.section, speaker=midrow.speaker, header=self.header, subrows=beforerows + [a])\n                r2 = EditRow(section=midrow.section, speaker=midrow.speaker, subrows=[b] + afterrows)\n                return r1, r2\n            else:\n                r1 = EditRow(section=self.section, speaker=midrow.speaker, header=self.header, subrows=beforerows + [midrow])\n                r2 = EditRow(section=self.section, speaker=midrow.speaker, subrows=afterrows)\n                return r1, r2\n        else:\n            r1 = EditRow(section=self.section, speaker=self.speaker, header=self.header, subrows=beforerows)\n            r2 = EditRow(section=self.section, speaker=self.speaker, subrows=afterrows)\n            return r1, r2\n\n\nclass PodcastEditingSheet(Sheet):\n    # rowdef: EditRow\n    columns = [\n        AttrColumn('section', width=20),\n        AttrColumn('speaker', setter=lambda c,r,v: c.sheet.set_speaker_recursive(r, v)),\n        AttrColumn('start', type=float, formatter='hhmmss'),\n        AttrColumn('end', type=float, formatter='hhmmss'),\n        AttrColumn('duration', type=float, formatter='hhmmss'),\n        AttrColumn('raw', 'raw_duration', type=float, formatter='hhmmss'),\n        AttrColumn('cut', type=float, width=6),\n        Column('conf', getter=lambda c,r: r.data.conf, type=float, width=0),\n        AttrColumn('text', width=80, setter=lambda c,r,v: c.sheet.set_text_recursive(r, v)),\n        AttrColumn('subrows', type=vlen, width=0),\n    ]\n    colorizers = [\n        RowColorizer(5, 'color_daw_header', lambda s,c,r,v: r.header),  # section header\n        RowColorizer(3, 'color_daw_cut', lambda s,c,r,v: r.cut and r.cut < 0),\n        RowColorizer(5, 'color_daw_keep', lambda s,c,r,v: r.cut and r.cut > 0),\n        RowColorizer(4, 'color_daw_playhead', lambda s,c,r,v: s.mpv.playback_time in r)\n    ]\n    nKeys = 2\n    mpv = AttrDict()  # bunk null mock object until server created\n    sourcerows = None\n    sourceaudio = None\n\n    curfilter = 'agate'\n    curparm = 'ratio'\n    speed = 1\n    skipcut = True  # play audio without cut segments\n\n    def iterload(self):\n        self.speakers = defaultdict(list)  # speakername -> list of words/subrows\n\n        transcript = json.loads(self.source.open_text().read())\n        if not self.sourcerows:\n            self.sourcerows = transcript.get('word_segments')\n\n        if not self.sourceaudio:\n            if self.source.with_suffix('.wav').exists():\n                self.sourceaudio = str(self.source.with_suffix('.wav'))\n            elif self.source.with_suffix('.mp3').exists():\n                self.sourceaudio = str(self.source.with_suffix('.mp3'))\n\n        if self.sourceaudio:\n            self.mpv = MpvProcess(self.sourceaudio, self)\n            self.mpv.start_mpv()\n        else:\n            vd.warning(\"no matching audio file\")\n\n        curhdr = ''\n        try:\n            for row in self.sourcerows:\n                if not isinstance(row, EditRow):\n                    if 'text' not in row:  # TODO: remove on next transcribe pass\n                        row['text'] = row.get('word')\n                    row = EditRow(**row)\n                if row.section != curhdr:  # only the first row of a section has 'header'\n                    curhdr = row.header = row.section\n\n                self.speakers[row.speaker].append(row)\n                yield row\n\n            self.rows.sort(key=lambda r: r.start)  # TODO: remove on next transcribe pass\n        except Exception as e:\n            vd.exceptionCaught(e)\n\n        self.column('duration').aggregators = 'sum'\n        self.column('raw').aggregators = 'sum'\n        self.column('start').aggregators = 'min'\n        self.column('end').aggregators = 'max'\n\n    def openRows(self, rows):\n        def itersubrows(rows):\n            for r in rows:\n                yield from r.subrows\n\n        vs = PodcastEditingSheet(*self.names, rows[0].section,\n                                   source=self.source,\n                                   sourcerows=iterwords(rows),\n                                   sourceaudio=self.sourceaudio)\n        vd.push(vs)\n\n    def openRow(self, row):\n        return PodcastEditingSheet(*self.names, row.section,\n                                   source=self.source,\n                                   sourcerows=row.subrows,\n                                   sourceaudio=self.sourceaudio)\n\n    def combine_rows(self, rows):\n        vd.addUndo(setattr, self, 'rows', copy(self.rows))\n        self.setModified()\n\n        uncutrows = [r for r in rows if not r.cut or r.cut < 0]\n        newrow = EditRow(speaker=' '.join(set(r.speaker for r in uncutrows if r.speaker)),\n                         section=rows[0].section,\n                         subrows=rows)\n        self.addRow(newrow, index=self.cursorRowIndex)\n\n        for r in rows:\n            self.rows.remove(r)\n\n    def expand_row(self, rowidx):\n        vd.addUndo(setattr, self, 'rows', copy(self.rows))\n        self.setModified()\n\n        subrows = self.rows[rowidx].subrows\n        if subrows:\n            if self.rows[rowidx].section:\n                subrows[0].section = self.rows[rowidx].section\n            self.rows[rowidx:rowidx+1] = subrows\n        else:\n            vd.warning('no subrows')\n\n    def bump(self, n, *rows):\n        self.setModified()\n        for row in rows:\n            vd.addUndo(setattr, row, 'cut', row.cut)\n            row.cut = (row.cut or 0)+n\n        self.column('duration')._aggregatedTotals.clear()\n\n    def set_speaker_recursive(self, row, speaker):\n        '''Set speaker on row and recursively on all subrows.'''\n        row.speaker = speaker\n        if row.subrows:\n            for subrow in row.subrows:\n                self.set_speaker_recursive(subrow, speaker)\n\n    def set_text_recursive(self, row, newtext):\n        '''Set text on row, distributing edits to underlying word-level subrows.'''\n        if not row.subrows:\n            # Leaf node (word) - set text directly\n            row.data.text = newtext\n        else:\n            # Grouped row - distribute text to word-level subrows\n            new_words = newtext.split()\n            leaf_words = list(iterwords([row]))\n\n            # Map new words to existing word rows\n            for i, leaf_word in enumerate(leaf_words):\n                if i < len(new_words):\n                    leaf_word.data.text = new_words[i]\n                else:\n                    # If fewer words in new text, clear remaining words\n                    leaf_word.data.text = ''\n\n            # If there are more new words than existing subrows, warn user\n            if len(new_words) > len(leaf_words):\n                vd.warning(f'New text has {len(new_words)} words but row only has {len(leaf_words)} word slots; extra words ignored')\n\n        self.setModified()\n\n    def cycle_speaker(self, row):\n        self.setModified()\n        vd.addUndo(setattr, row, 'speaker', row.speaker)\n        speakers = list(self.speakers.keys())\n        new_speaker = speakers[(speakers.index(row.speaker)+1)%len(speakers)]\n        self.set_speaker_recursive(row, new_speaker)\n\n    def getRowIndexByPlaytime(self, t:float, rows=None) -> int:\n        'Return index of first row that ostensibly contains time t.'\n        rows = rows or self.rows\n        rowpath = self.find_row_path(t, rows)\n        return rows.index(rowpath[0])\n\n    def checkCursor(self):\n        super().checkCursor()\n\n        if not self.skipcut:\n            return\n\n        t = self.mpv.playback_time\n        if not t:\n            return\n\n        words = self.words\n        rowpath = self.find_row_path(t)\n        widx = words.index(rowpath[-1])\n        cut = False\n\n        while any(map(is_cut, rowpath)):\n            widx += 1\n            cut = True\n            rowpath = self.find_row_path(words[widx].start)\n\n        if widx >= len(words):\n            self.mpv.pause_audio()\n\n        if cut:\n            newt = words[widx].start  # or words[widx-1].end\n            self.mpv.play_audio(newt)\n\n    def find_row_path(self, t:float, rows:list['EditRow']=None) -> list['EditRow']:\n        '''Return a list of EditRow along the path to the actual word at time t.\n        Each EditRow either contains t, or is immediately after t.\n        The toplevel segment containing t is ret[0], and the exact word at/near t is ret[-1].\n        '''\n        if rows is None:\n            rows = self.rows\n\n        # binary search\n        low = 0\n        high = len(rows) - 1\n\n        while low <= high:\n            mid = (high + low) // 2\n            midw = rows[mid]\n            if mid > 0 and t < rows[mid-1].end:  # t in/before preceding word\n                high = mid - 1\n            elif t > midw.end:  # t after mid word\n                low = mid + 1\n            else:  # t either within mid word or just before it\n                if not midw.subrows:\n                    return [midw]\n                else:\n                    return [midw] + self.find_row_path(t, midw.subrows)\n\n    def is_cut(self, t:float):\n        rowpath = self.find_row_path(t)\n        if t not in rowpath[-1]:\n            return False\n        return any(map(is_cut, rowpath))\n\n    def go_playhead(self):\n        t = self.mpv.playback_time\n        self.cursorRowIndex = self.getRowIndexByPlaytime(t)\n\n    def split_at_playhead(self):\n        vd.addUndo(setattr, self, 'rows', copy(self.rows))\n\n        t = self.mpv.playback_time\n        idx = self.getRowIndexByPlaytime(t)\n        row = self.rows[idx]\n\n        row, newrow = row.split_at_time(t)\n        self.rows[idx] = row  # might be the same, modified in place\n        self.addRow(newrow, index=idx+1)\n\n    def split_at_input(self, rowidx, word:str):\n        vd.addUndo(setattr, self, 'rows', copy(self.rows))\n\n        oldrow = self.rows[rowidx]\n\n        try:\n            wordidx = int(word)\n        except Exception:\n            words = [cleanword(w) for w in oldrow.text.split()]\n            wordidx = words.index(cleanword(word))\n\n        if wordidx == 0:\n            vd.fail('cannot split on first word')\n\n        row, newrow = oldrow.split_at_word(wordidx-1)\n        self.rows[rowidx] = row  # might be the same, modified in place\n        self.addRow(newrow, index=rowidx+1)\n\n    def go_header_next(self, didx:int, startrow:int):\n        i = startrow\n        while 0 <= i < self.nRows-(0 if didx < 0 else 1):\n            i += didx\n            if self.rows[i].header:\n                self.cursorRowIndex = i\n                return\n        vd.fail(\"no more sections\")\n\n    @property\n    def playheadStatus(self):\n        try:\n            return to_hms(self.mpv.playback_time)\n        except Exception as e:\n            if vd.options.debug:\n                vd.exceptionCaught(e)\n\n    def setFilterParmByIndex(self, filtername, parmname, idxvalue):\n        self.mpv.set_filter_parm(filtername, parmname, self.mpv.afilter_options[filtername][parmname][idxvalue])\n\n    def reformat_row(self, rowidx, undo=True):\n        if undo:\n            vd.addUndo(setattr, self, 'rows', copy(self.rows))\n\n        row = self.rows[rowidx]\n\n        formatted_rows = []\n        wordnum = 0\n        for line in textwrap.wrap(row.text,\n                        width=self.column('text').width-2,\n                        break_long_words=False,\n                        break_on_hyphens=False):\n            pr, row = row.split_at_word(len(line.split())-1)\n            if pr:\n                formatted_rows.append(pr)\n\n            if not isinstance(row, EditRow):\n                break\n\n        self.rows[rowidx:rowidx+1] = formatted_rows\n\n    def reformat_rows(self, rows):\n        vd.addUndo(setattr, self, 'rows', copy(self.rows))\n        for row in rows[::-1]:\n            if not row.cut or row.cut > 0:\n                self.reformat_row(rows.index(row), undo=False)\n\n    def bulk_combine(self, rows):\n        vd.addUndo(setattr, self, 'rows', copy(self.rows))\n        self.rows = list(iterspeakerrows(rows, inline_interjections=False))\n\n    def speed_change(self, dv):\n        self.speed *= dv\n        self.mpv.set_property('speed', self.speed)\n\n    @drawcache_property\n    def words(self):\n        'All word-level EditRows'\n        return list(iterwords(self.rows))\n\n    @asyncthread\n    def flag_bad_timings(self):\n        def weird(t1, t2):\n            return not t1 or not t2 or (t1 > t2 or t2-t1 > 0.5)\n\n        words = self.words\n        lastnonweirdt = 0\n        for i, w2 in enumerate(words):\n            if i == 0 or i >= len(words)-1:\n                continue\n\n            w1 = words[i-1]\n            w3 = words[i+1]\n\n            if weird(w2.start, w2.end):  # if too long\n                w2.weird = True\n            elif weird(w1.end, w2.start) and weird(w2.end, w3.start):\n                w2.weird = True\n            elif w2.start > w2.end or w2.start < lastnonweirdt:\n                w2.weird = True\n            else:\n                lastnonweirdt = w2.start  # or end?\n\n        for w in words:\n            if w.weird:\n                w.data.start = None\n                w.data.end = None\n\n        # pass 2: look for runs of \"None\" timings and interpolate from surrounding words\n        firstidx = None\n        for i, w in enumerate(words):\n            if w.start is None and firstidx is None:\n                firstidx = i\n            elif w.start is not None and firstidx is not None:\n                startt = words[firstidx-1].end + 0.1  # 100ms between words\n                endt = words[i].start - 0.1\n                # interpolate timings for None-timed sequence of words\n                dt = (endt-startt-0.01*(i-firstidx))/(i-firstidx)\n                # vd.status(f'{dt*1000:.0f}ms for each of {i-firstidx} words from {startt:.1f}-{endt:.1f}s')\n                for j, wnone in enumerate(words[firstidx:i]):\n                    wnone.data.start = startt+dt*j + 0.005\n                    wnone.data.end = startt+dt*(j+1) - 0.005\n\n                firstidx = None\n            # else in the middle of a run, let it run\n\ndef iterwords(segs):\n    for seg in segs:\n        if not seg.subrows:\n            yield seg\n        else:\n            yield from iterwords(seg.subrows)\n\n\n@VisiData.api\nclass FilterParametersSheet(Sheet):\n    columns = [\n        ItemColumn('filter'),\n        ItemColumn('filter_parm'),\n        ItemColumn('value', setter=lambda c,r,v: c.sheet.source.mpv.set_filter_parm(r.filter, r.filter_parm, type(r.default_value)(v))),\n        ItemColumn('default_value'),\n        ItemColumn('help'),\n    ]\n    colorizers = [\n        RowColorizer(5, 'on 90', lambda s,c,r,v: r.value is not None and r.value != r.default_value)\n    ]\n    def iterload(self):\n        for filtername, values in self.source.mpv.afilter_options.items():\n            helpstrs = dict((i.key, i.desc) for i in self.source.mpv.afilters[filtername])\n            for filterparmname, parmvalue in values.items():\n                yield AttrDict(filter=filtername,\n                           filter_parm=filterparmname,\n                           value=self.source.mpv.afilter_parms.get(filtername, {}).get(filterparmname, None),\n                           default_value=self.source.mpv.afilter_options[filtername][filterparmname][0],\n                           help=helpstrs[filterparmname])\n\n\n@VisiData.api\ndef save_cutlist(vd, p, sheet):\n    assert isinstance(sheet, PodcastEditingSheet)\n\n    with p.open(mode='w', encoding=sheet.options.save_encoding) as fp:\n        fp.write(f'## edits for {sheet.mpv.sourceaudio}\\n\\n')\n\n        i = 0\n        cut_start = None\n        cut_end = None\n        for row in sheet.rows:\n            if is_cut(row):\n                if cut_start is None:\n                    cut_start = row\n                cut_end = row\n            else:\n                if cut_start is not None:\n                    i += 1\n                    dt = '??'\n                    if cut_end.end and cut_start.start:\n                        dt = f'{cut_end.end - cut_start.start:.1f}'\n                    fp.write(f'{i}. cut {dt}s from {to_hms(cut_start.start)} to {to_hms(cut_end.end)}: {cut_start.text[:20]}...{cut_end.text[-20:]}\\n')\n                    cut_start = None\n                    cut_end = None\n\n\ndef iterspeakerrows(rows, include_cuts=True, inline_interjections=False, already_cut=False):\n    def _combine_rows(accumrows):\n        firstrow = accumrows[0]\n        lastrow = accumrows[-1]\n        r = EditRow(speaker=firstrow.speaker,\n                    section=firstrow.section,\n                    subrows=accumrows)\n        if include_cuts:\n            text = ' '.join(r.editedtext for r in accumrows)\n            if already_cut or is_cut(firstrow):\n                text = text.replace('~~', '')\n                text = '~~' + text + '~~'\n        else:\n            if already_cut or is_cut(firstrow):\n                text = ''\n            else:\n                text = ' '.join(r.cookedtext for r in accumrows).strip()\n\n        r.data = AttrDict(start=firstrow.start, end=lastrow.end, text=text)\n        return r\n\n    accumrows = []\n    for i, row in enumerate(rows):\n        assert row, i\n        if ' ' in row.speaker:\n            if accumrows:\n                yield _combine_rows(accumrows)\n                accumrows = []\n            yield from iterspeakerrows(row.subrows, include_cuts=include_cuts, inline_interjections=inline_interjections, already_cut=is_cut(row))\n            continue\n\n        if not accumrows:\n            accumrows = [row]\n            continue\n\n        lastrow = accumrows[-1]\n        if is_cut(row) == is_cut(lastrow) and row.speaker == lastrow.speaker and row.section == lastrow.section:\n            accumrows.append(row)\n            continue\n\n        if inline_interjections and is_cut(row) == is_cut(lastrow) and row.section == lastrow.section:\n            # speaker different; only one word?\n            if row.nwords == 1:\n                r = EditRow(speaker=lastrow.speaker, section=row.section, cut=row.cut)   # fake speaker, preserve original cut value\n                r.data = AttrDict(start=row.start, end=row.end, text=f'[{row.speaker}: {row.text}]')\n                accumrows.append(r)\n                continue\n\n        yield _combine_rows(accumrows)\n\n        accumrows = [row]\n\n    yield _combine_rows(accumrows)\n\n\n@VisiData.api\ndef save_xmd(vd, p, sheet):\n    assert isinstance(sheet, PodcastEditingSheet)\n\n    prevhdr = ''\n    with p.open(mode='w', encoding=sheet.options.save_encoding) as fp:\n        for row in iterspeakerrows(sheet.rows, include_cuts=sheet.options.daw_include_cuts, inline_interjections=True):\n\n            if row.section != prevhdr:\n                prevhdr = row.section\n                fp.write(f'## {prevhdr}\\n\\n')\n\n            if sheet.options.daw_include_cuts:\n                text = row.data.text\n            else:\n                text = row.cookedtext\n                vd.status(text)\n\n            if text:\n                timestr = to_hms(row.start)\n                line = f'[{timestr}] **{row.speaker}**: {text}'\n                line = line.strip()\n                fp.write(line+'\\n\\n')\n\n\n# use .to_json() for any class that is not already serializable, like EditRow\ndef _default(self, obj):\n    return getattr(obj.__class__, \"to_json\", _default.default)(obj)\n\n_default.default = json.JSONEncoder().default\njson.JSONEncoder.default = _default\n\n@VisiData.api\ndef save_transcript(vd, p, sheet):\n    d = dict(word_segments=sheet.rows, sourceaudio=sheet.mpv.sourceaudio)\n    with p.open(mode='w', encoding='utf-8') as fp:\n        fp.write(json.dumps(d)+'\\n')\n\n\nPodcastEditingSheet.options.save_filetype = 'transcript'\nPodcastEditingSheet.options.disp_rstatus_fmt = '{sheet.playheadStatus}  ' + Sheet.options.disp_rstatus_fmt\n\nPodcastEditingSheet.addCommand('P', 'play-row-raw', 'mpv.play_audio(cursorRow.start); sheet.skipcut=False', 'play from cursor row without skipping cuts')\nPodcastEditingSheet.addCommand('p', 'play-row', 'mpv.play_audio(cursorRow.start); sheet.skipcut=True', 'play from cursor row skipping cuts')\nPodcastEditingSheet.addCommand('zp', 'play-toggle', 'mpv.pause_audio(not mpv.paused)', 'toggle pause/play')\nFilterParametersSheet.addCommand('P', 'play-toggle', 'source.mpv.pause_audio(not source.mpv.paused)', 'toggle pause/play')\nPodcastEditingSheet.addCommand('g)', 'combine-selected', 'combine_rows(selectedRows)', 'combine selected rows into one')\nPodcastEditingSheet.addCommand('(', 'expand-row', 'expand_row(cursorRowIndex)', 'expand row into subrows')\nPodcastEditingSheet.addCommand('g(', 'expand-selected', 'for row in selectedRows: if not is_cut(row): expand_row(rows.index(row))', 'expand selected rows into subrows')\n\nPodcastEditingSheet.addCommand('Ctrl+R', 'restart-mpv', 'mpv.start_mpv()', 'restart mpv process')\n\nFilterParametersSheet.addCommand('a', 'add-filter', 'source.mpv.add_filter()', 'add filter on current row')\nFilterParametersSheet.addCommand('d', 'remove-filter', 'source.mpv.remove_filter()', 'remove filter on current row')\n\nfor i in range(0, 10):\n    PodcastEditingSheet.addCommand(str(i), f'set-afilter-parm-{i}', f'setFilterParmByIndex(curfilter, curparm, {i})', f'set audio filter parameter to preset {i}')\n    FilterParametersSheet.addCommand(str(i), f'set-afilter-parm-{i}', f'source.setFilterParmByIndex(cursorRow.filter, cursorRow.filter_parm, {i}); reload()', f'set filter parameter to preset {i}')\n\nPodcastEditingSheet.addCommand('c', 'cycle-speaker', 'cycle_speaker(cursorRow)', 'cycle through speakers')\nPodcastEditingSheet.addCommand('gc', 'cycle-speaker-selected', 'for row in selectedRows: cycle_speaker(row)', 'cycle through speakers for selected rows')\nPodcastEditingSheet.addCommand('[', 'audio-back-10', 'mpv.seek_audio(-10); go_playhead()', 'seek backward 10 seconds')\nPodcastEditingSheet.addCommand(']', 'audio-forward-10', 'mpv.seek_audio(+10); go_playhead()', 'seek forward 10 seconds')\nPodcastEditingSheet.addCommand('g[', 'audio-back-60', 'mpv.seek_audio(-60); go_playhead()', 'seek backward 60 seconds')\nPodcastEditingSheet.addCommand('g]', 'audio-forward-60', 'mpv.seek_audio(+60); go_playhead()', 'seek forward 60 seconds')\nPodcastEditingSheet.addCommand('gg', 'go-playhead', 'go_playhead()', 'move row cursor to playhead' )\n\nPodcastEditingSheet.addCommand('F5', 'audio-slower', 'speed_change(0.5)', 'adjust playspeed down 50%')\nPodcastEditingSheet.addCommand('F8', 'audio-faster', 'speed_change(2.0)', 'adjust playspeed 2x')\n\nPodcastEditingSheet.addCommand('a', 'split-at-time', 'split_at_playhead(); cursorDown(2)', 'split line at current playhead')\nPodcastEditingSheet.addCommand('za', 'split-at-input', 'split_at_input(cursorRowIndex, input(\"word to split at: \"))', 'split line at current playhead')\nPodcastEditingSheet.addCommand('x', 'cut-row', 'bump(-1, cursorRow); cursorDown()', 'cut audio for line at cursor row')\nPodcastEditingSheet.addCommand('y', 'bump-row', 'bump(+1, cursorRow); cursorDown()', 'upvote audio for line at cursor row')\nPodcastEditingSheet.addCommand('gx', 'cut-selected', 'bump(-1, *selectedRows)', 'cut audio for selected rows')\nPodcastEditingSheet.addCommand('gy', 'bump-selected', 'bump(+1, *selectedRows)', 'bump audio for selected rows')\nPodcastEditingSheet.addCommand('<', 'go-header-prev', 'go_header_next(-1, cursorRowIndex)', 'move row cursor to previous section')\nPodcastEditingSheet.addCommand('>', 'go-header-next', 'go_header_next(+1, cursorRowIndex)', 'move row cursor to next section')\nPodcastEditingSheet.addCommand('g<', 'go-header-first', 'go_header_next(+1, 0)', 'move row cursor to first section')\nPodcastEditingSheet.addCommand('g>', 'go-header-last', 'go_header_next(-1, nRows-1)', 'move row cursor to last section')\n\nPodcastEditingSheet.addCommand('f', 'open-vdaw-filters', 'vd.push(FilterParametersSheet(\"filters\", source=sheet))', 'open audio filter parameters')\nPodcastEditingSheet.addCommand('r', 'reformat-row', 'reformat_row(cursorRowIndex)', 'reformat row to fit column width')\nPodcastEditingSheet.addCommand('gr', 'reformat-selected', 'reformat_rows(selectedRows)', 'reformat selected rows to fit column width')\nPodcastEditingSheet.addCommand('', 'bulk-combine', 'bulk_combine(rows)', 'combine all rows by speaker')\n\nPodcastEditingSheet.addCommand('', 'clean-timings', 'flag_bad_timings()', 'detect and fix bad word timings')\n"
  },
  {
    "path": "visidata/experimental/daw/xmd2json.py",
    "content": "#!/usr/bin/env python3\n\n'''\nUsage: $0 <human_transcript.json> <whisper_transcript.json...>\n\nParse human_transcript.json, and match the words from whisper_transcript.json to provide the word-level timings.  Output centaur_transcript.json to stdout.\n'''\n\nimport sys\nimport copy\nimport re\nimport json\n\n\ndef parse_hhmmss(hms:str) -> float:\n    if not hms:\n        return hms\n    h, m, s = hms.split(':')\n    return int(h)*3600 + int(m)*60 + float(s)\n\n\ndef interpolate_times(pending_rows:list[dict], startt, endt):\n    total_len = sum(len(r['text']) for r in pending_rows)\n    for i, pr in enumerate(pending_rows):\n        if i > 0:\n            pr['start'] = pending_rows[i-1]['end']\n        else:\n            pr['start'] = startt\n        pr['end'] = (len(pr['text'])/total_len)*(endt-startt)+pr['start']\n\n    return pending_rows\n\n\ndef split_cuts(row, startcut=False):\n    parts = row['text'].split('~~')\n    cut = startcut  # whether we start in cut mode\n    for p in parts:\n        p = p.strip()\n        if p:\n            newrow = copy.copy(row)\n            newrow['text'] = p\n            if cut:\n                newrow['cut'] = cut\n            yield newrow\n\n        cut = not cut\n\ndef parse_xmd(xmdfn:str) -> list:\n    rows = []\n    pending_rows = []\n    headers = []\n    for line in open(xmdfn):\n        line = line.strip()\n        if not line: continue\n        if line.startswith('#'):\n            n = len(line) - len(line.lstrip('#')) - 1\n            headers = headers[:n+1] + ['']*(n - len(headers)+1)\n            headers[n] = line[n+1:]\n        else:\n            m = re.match(r'(?P<start_cut>~~)?\\\\?(\\[(?P<start>[\\d:\\.]+)\\\\?\\] )?((?P<speaker>[A-Za-z]+): )?(?P<text>.*)', line)\n            if not m:\n                print('Unmatched: ' + line)\n                return rows\n\n            row = m.groupdict()\n\n            row['speaker'] = row.get('speaker')\n            if not row['speaker']:\n                if pending_rows:\n                    row['speaker'] = pending_rows[-1].get('speaker')\n                elif rows:\n                    row['speaker'] = rows[-1].get('speaker')\n\n            lastt = row['start'] = parse_hhmmss(row.get('start'))\n\n            if lastt:\n                if pending_rows:\n                    firstt = float(pending_rows[0]['start'])\n                else:\n                    firstt = 0\n\n                if headers:\n                    row['section'] = headers[-1].strip()\n                    headers = []\n\n                for pr in interpolate_times(pending_rows, firstt, lastt):\n                    pr['subrows'] = interpolate_times([\n                        dict(start=None, end=None,\n                             speaker=pr['speaker'],\n                             cut=pr.get('cut'),\n                             text=w)\n                          for w in pr['text'].split()\n                      ], pr['start'], pr['end'])\n                    rows.append(pr)\n\n                pending_rows = []\n\n            for newrow in split_cuts(row, row.pop('start_cut', False)):\n                pending_rows.append(newrow)\n\n    return rows\n\n\ndef main(xmdfn):\n    print(json.dumps(dict(word_segments=parse_xmd(xmdfn))))\n\n\nmain(*sys.argv[1:])\n"
  },
  {
    "path": "visidata/experimental/diff_sheet.py",
    "content": "# command setdiff-sheet adds a diff colorizer for all sheets against current sheet\n\nfrom visidata import Sheet, CellColorizer, vd\n\nvd.theme_option('color_diff', 'red', 'color of values different from --diff source')\nvd.theme_option('color_diff_add', 'yellow', 'color of rows/columns added to --diff source')\n\n\ndef makeDiffColorizer(othersheet):\n    def colorizeDiffs(sheet, col, row, cellval):\n        if row is None or col is None:\n            return None\n        vcolidx = sheet.visibleCols.index(col)\n        rowidx = sheet.rows.index(row)\n        if vcolidx < len(othersheet.visibleCols) and rowidx < len(othersheet.rows):\n            otherval = othersheet.visibleCols[vcolidx].getFullDisplayValue(othersheet.rows[rowidx])\n            if cellval.display != otherval:\n                return 'color_diff'\n        else:\n            return 'color_diff_add'\n    return colorizeDiffs\n\n\n@Sheet.api\ndef setDiffSheet(vs):\n    Sheet.colorizers.append(CellColorizer(8, None, makeDiffColorizer(vs)))\n\n\nSheet.addCommand(None, 'setdiff-sheet', 'setDiffSheet()', 'set this sheet as diff sheet for all new sheets')\n"
  },
  {
    "path": "visidata/experimental/digit_autoedit.py",
    "content": "'Enter edit mode automatically when typing numeric digits.'\n\nfrom visidata import Sheet\n\nfor i in range(0, 10):\n    Sheet.addCommand(str(i), 'autoedit-%s' % i, 'cursorCol.setValues([cursorRow], editCell(cursorVisibleColIndex, value=\"%s\", i=1))' % i, 'replace cell value with input starting with %s' % i)\n"
  },
  {
    "path": "visidata/experimental/gdrive.py",
    "content": "import visidata\nfrom visidata import vd, VisiData, Sheet, IndexSheet, SequenceSheet, ColumnItem, Path, AttrDict, ColumnAttr, asyncthread, Progress, ColumnExpr, date\n\nfrom .gsheets import GSheetsIndex\n\n@VisiData.api\ndef open_gdrive(vd, p):\n    return GDriveSheet(p.base_stem)\n\n\nFILES_FIELDS_VISIBLE='''name size modifiedTime mimeType description'''.split()\n\nFILES_FIELDS='''\nid name size modifiedTime mimeType description owners\nstarred properties spaces version webContentLink webViewLink sharingUser lastModifyingUser shared\nownedByMe originalFilename md5Checksum size quotaBytesUsed headRevisionId imageMediaMetadata videoMediaMetadata parents\nexportLinks contentRestrictions contentHints trashed\n'''.split()\n\n\n@VisiData.cached_property\ndef _drivebuild(vd):\n    return vd.google_discovery.build(\"drive\", \"v3\", credentials=vd.google_auth('drive.readonly'))\n\n@VisiData.cached_property\ndef _gdrive(self):\n    return vd.google_discovery.build(\"drive\", \"v3\", credentials=vd.google_auth('drive.readonly')).files()\n\n@VisiData.cached_property\ndef _gdrive_rw(self):\n    return vd.google_discovery.build(\"drive\", \"v3\", credentials=vd.google_auth('drive')).files()\n\n\nclass GDriveSheet(Sheet):\n    rowtype='files'  # rowdef: AttrDict of result from Google Drive files.list API\n    defer=True\n    columns = [\n        ColumnItem('name'),\n        ColumnItem('size', type=int),\n        ColumnItem('modifiedTime', type=date),\n        ColumnItem('mimeType'),\n        ColumnItem('name'),\n        ColumnExpr('owner', expr='owners[0][\"displayName\"]')\n    ] + [\n        ColumnItem(x, width=0) for x in FILES_FIELDS if x not in FILES_FIELDS_VISIBLE\n    ]\n\n    def iterload(self):\n        self.results = []\n        page_token = None\n        while True:\n            ret = vd._gdrive.list(\n                    pageSize=1000,\n                    pageToken=page_token,\n                    fields=\"nextPageToken, files(%s)\" % ','.join(FILES_FIELDS)\n                    ).execute()\n\n            self.results.append(ret)\n\n            for r in ret.get('files', []):\n                yield AttrDict(r)\n\n            page_token = ret.get('nextPageToken', None)\n            if not page_token:\n                break\n\n    def openRow(self, r):\n        if r.mimeType == 'application/vnd.google-apps.spreadsheet':\n            return GSheetsIndex(r.name, source=r.id)\n        if r.mimeType.startswith('image'):\n            return vd.launchBrowser(r.webViewLink)\n        return vd.openSource(r.webContentLink)\n\n    @asyncthread\n    def deleteFile(self, **kwargs):\n        with Progress(total=1) as prog:\n            vd._gdrive_rw.delete(**kwargs).execute()\n            prog.addProgress(1)\n\n    @asyncthread\n    def putChanges(self):\n        adds, mods, dels = self.getDeferredChanges()\n\n        for row in Progress(dels.values()):\n            self.deleteFile(fileId=row.id)\n\n        vd.sync()\n        self.preloadHook()\n        self.reload()\n"
  },
  {
    "path": "visidata/experimental/google.py",
    "content": "'''\n# Using VisiData with Google Sheets and Google Drive\n\n## Setup and Authentication\n\nAdd to .visidatarc:\n\n    import visidata.experimental.google\n\nWhen VisiData attempts to use the Google API, it uses the \"web authentication flow\", which causes a web page to open asking for permissions to read and/or write your Google Sheets.\nAfter granting permissions, VisiData caches the auth token in the .visidata directory.  Remove `.visidata/google-*.pickle` to unauthenticate.\n\n## Load a Google Sheet into VisiData\n\nUse VisiData to open the URL or spreadsheet id, with filetype `g` (or `gsheets`):\n\n    vd https://docs.google.com/spreadsheets/d/1WV0JI_SsGfmoocXWJILK2nhfcxU1H7roqL1HE7zBdsY/ -f g\n\nVisiData assumes the first row is the header row with column names.\n\n## Save one or more sheets in VisiData as a Google Sheet\n\nSave to `<sheetname>.g` using either `Ctrl+S` (current sheet only) or `g Ctrl+S` (all sheets on the sheet stack).\n<sheetname> will be the visible name of the Spreadsheet in Google Drive; each sheet tab within the Spreadsheet will be named according to the sheet name within VisiData.\n\n## List files in Google Drive\n\nUse the `gdrive` filetype (the path doesn't matter):\n\n    vd . -f gdrive\n\n- Files can be marked for deletion with `d` and execute those deletions with `z Ctrl+S` (same as on the DirSheet for the local filesystem).\n- Images can be viewed with `Enter` (in browser).\n'''\n\nimport visidata.experimental.gdrive\nimport visidata.experimental.gsheets\n"
  },
  {
    "path": "visidata/experimental/gsheets.py",
    "content": "import re\nfrom visidata import vd, VisiData, Sheet, IndexSheet, SequenceSheet, ColumnItem, Path, AttrDict, ColumnAttr, asyncthread\n\nSPREADSHEET_FIELDS='properties sheets namedRanges spreadsheetUrl developerMetadata dataSources dataSourceSchedules'.split()\nSHEET_FIELDS='merges conditionalFormats filterViews protectedRanges basicFilter charts bandedRanges developerMetadata rowGroups columnGroups slicers'.split()\n\n@VisiData.api\ndef open_gsheets(vd, p):\n    m = re.search(r'([A-z0-9_]{44})', p.given)\n    if m:\n        return GSheetsIndex(p.base_stem, source=m.groups()[0])\n\nVisiData.open_g = VisiData.open_gsheets\n\n@VisiData.lazy_property\ndef google_discovery(self):\n    googleapiclient = vd.importExternal('googleapiclient', 'google-api-python-client')\n    from googleapiclient import discovery\n    return discovery\n\n\n@VisiData.cached_property\ndef _gsheets(vd):\n    return vd.google_discovery.build(\"sheets\", \"v4\", credentials=vd.google_auth('spreadsheets.readonly')).spreadsheets()\n\n\n@VisiData.cached_property\ndef _gsheets_rw(vd):\n    return vd.google_discovery.build(\"sheets\", \"v4\", credentials=vd.google_auth('spreadsheets')).spreadsheets()\n\n\nclass GSheetsIndex(Sheet):\n    columns = [\n        ColumnAttr('title', 'properties.title'),\n        ColumnAttr('type', 'properties.sheetType', width=0),\n        ColumnAttr('nRows', 'properties.gridProperties.rowCount', type=int),\n        ColumnAttr('nCols', 'properties.gridProperties.columnCount', type=int),\n    ]\n    def iterload(self):\n        googlesheet = vd._gsheets.get(spreadsheetId=self.source, fields=','.join(SPREADSHEET_FIELDS)).execute()\n        vd.status(googlesheet['properties']['title'])\n\n        for gsheet in googlesheet['sheets']:\n            yield AttrDict(gsheet)\n\n    def openRow(self, r):\n        return GSheet(r.properties.title, source=self.source)\n\n\nclass GSheet(SequenceSheet):\n    '.source is gsheet id; .name is sheet name'\n    def iterload(self):\n        result = vd._gsheets.values().get(spreadsheetId=self.source, range=self.name).execute()\n        yield from result.get('values', [])\n\n\n@VisiData.api\ndef save_gsheets(vd, p, *sheets):\n    gsheet = vd._gsheets_rw.create(body={\n        'properties': { 'title': p.base_stem },\n        'sheets': list({'properties': { 'title': vs.name }} for vs in sheets),\n    }, fields='spreadsheetId').execute()\n\n    gsheetId = gsheet.get('spreadsheetId')\n    vd.status(f'https://docs.google.com/spreadsheets/d/{gsheetId}/')\n\n    for vs in sheets:\n        rows = [list(c.name for c in vs.visibleCols)]\n        rows += list(list(val for col, val in row.items())\n                        for row in vs.iterdispvals(*vs.visibleCols, format=True))\n\n        vd._gsheets_rw.values().append(\n            spreadsheetId=gsheetId,\n            valueInputOption='RAW',\n            range=vs.name,\n            body=dict(values=rows)\n        ).execute()\n\nvd.save_g = vd.save_gsheets\n"
  },
  {
    "path": "visidata/experimental/helloworld.py",
    "content": "'''\nHello world minimal plugin.  Press F2 to show options.hello_world on the status line.\n\n.visidatarc: `import plugins.hello`\n'''\nfrom visidata import vd, BaseSheet\n\nvd.option('hello_world', '¡Hola mundo!', 'shown by the hello-world command')\n\nBaseSheet.addCommand('F2', 'hello-world', 'status(options.hello_world)', 'print greeting to status')\n"
  },
  {
    "path": "visidata/experimental/live_search.py",
    "content": "from copy import copy\n\nfrom visidata import Sheet, vd, asyncsingle\n\n@Sheet.api\ndef dup_search(sheet, cols='cursorCol'):\n    vs = copy(sheet)\n    vs.name += \"_search\"\n    vs.rows = sheet.rows\n    vs.source = sheet\n    vs.search = ''\n\n    @asyncsingle\n    def live_search_async(val, status=False):\n        if not val:\n            vs.rows = vs.source.rows\n        else:\n            vs.rows = []\n            for i in vd.searchRegex(vs.source, regex=val, columns=cols, printStatus=status):\n                vs.addRow(vs.source.rows[i])\n\n    def live_search(val):\n        vs.draw(vs._scr)\n        vd.drawRightStatus(vs._scr, vs)\n        val = val.rstrip('\\n')\n        if val == vs.search:\n            return\n        vs.search = val\n        live_search_async(val, sheet=vs, status=False)\n\n    vd.input(\"search regex: \", updater=live_search)\n    vd.push(vs)\n    vs.name = vs.source.name+'_'+vs.search\n\n\nSheet.addCommand('Alt+s', 'dup-search', 'dup_search(\"cursorCol\")', 'search for regex forwards in current column, creating duplicate sheet with matching rows live')\nSheet.addCommand('gAlt+s', 'dup-search-cols', 'dup_search(\"visibleCols\")', 'search for regex forwards in all columns, creating duplicate sheet with matching rows live')\n"
  },
  {
    "path": "visidata/experimental/liveupdate.py",
    "content": "from visidata import Column, vd, ColumnExpr, CompleteExpr, EscapeException, Sheet\n\n\n@Column.api\ndef updateExpr(col, val):\n    col.name = val\n    try:\n        col.expr = val\n    except SyntaxError:\n        col.expr = None\n\n    col.sheet.draw(col.sheet._scr)\n\n\n@Column.api  # expr.setter\ndef expr(self, expr):\n    try:\n        self.compiledExpr = compile(expr, '<expr>', 'eval') if expr else None\n        self._expr = expr\n    except SyntaxError as e:\n        self._expr = None\n\n\n@Sheet.api\ndef addcol_expr(sheet):\n    try:\n        c = sheet.addColumnAtCursor(ColumnExpr(\"\", width=sheet.options.default_width))\n        oldidx = sheet.cursorVisibleColIndex\n        sheet.cursorVisibleColIndex = sheet.visibleCols.index(c)\n\n        expr = sheet.editCell(sheet.cursorVisibleColIndex, -1,\n                                completer=CompleteExpr(sheet),\n                                updater=lambda val,col=c: col.updateExpr(val))\n\n        c.expr = expr or vd.fail(\"no expr\")\n        c.name = expr\n        c.width = None\n    except (Exception, EscapeException):\n        sheet.columns.remove(c)\n        sheet.cursorVisibleColIndex = oldidx\n        raise\n\n\nSheet.addCommand(None, 'addcol-expr', 'sheet.addcol_expr()', \"create new column from Python expression, updating the column's calculated values live\")\nSheet.addCommand(None, 'addcol-new', 'c=addColumnAtCursor(SettableColumn(name=\"\", width=options.default_width)); draw(sheet._scr); cursorVisibleColIndex=visibleCols.index(c); c.name=editCell(cursorVisibleColIndex, -1); c.width=None', 'append new column, updating the column name live')\n"
  },
  {
    "path": "visidata/experimental/llm.py",
    "content": "'''\n# LLM Analysis Feature\n\nAnalyze column data using Anthropic Claude LLM with natural language queries.\n\n## Usage\n\n1. Position cursor on a column containing text data\n2. Run `llm-analyze-column` command (or `llm-analyze-selected` for selected rows only)\n3. Enter your analysis query (e.g. \"Did the model exhibit reasoning?\")\n4. Four new columns will be added with results:\n   - `{colname}_llm_score` (0-1 float score)\n   - `{colname}_llm_analysis` (text explanation)\n   - `{colname}_llm_raw` (hidden raw JSON response)\n   - `{colname}_llm_tokens` (token count for cost tracking)\n\n## Configuration\n\nSet in ~/.visidatarc or via environment variables:\n\n    options.llm_model = \"claude-haiku-4-5\"\n    options.llm_max_tokens = 1024\n    options.llm_temperature = 1.0\n    options.llm_rate_delay = 0.5  # seconds between requests\n    options.llm_template_path = \"\"  # path to custom template file\n\n    export ANTHROPIC_API_KEY=\"...\"\n## Custom Templates\n\nCreate a text file with {query} and {text} placeholders:\n\n    Analyze this text: {text}\n    Question: {query}\n    Return JSON: {{\"score\": 0-1, \"analysis\": \"explanation\"}}\n\nThen set: `options.llm_template_path = \"/path/to/template.txt\"`\n'''\n\nimport os\nimport time\nimport json\nimport re\n\nfrom visidata import vd, VisiData, Sheet, SettableColumn, asyncthread, Progress\n\n# Configuration options\nvd.option('llm_model', 'claude-haiku-4-5', 'Anthropic model name')\nvd.option('llm_max_tokens', 1024, 'max tokens for LLM response')\nvd.option('llm_temperature', 1.0, 'temperature for LLM sampling (0-1)')\nvd.option('llm_rate_delay', 0.1, 'delay in seconds between API requests')\nvd.option('llm_template_path', '', 'path to custom template file (empty = use default)')\n\n# Default template with structured JSON output\nDEFAULT_TEMPLATE = '''Analyze the following text and respond in JSON format.\n\nQuery: {query}\nText: {text}\n\nProvide:\n1. A score from 0 to 1 indicating how well the text matches or satisfies the query\n2. A brief analysis explaining your reasoning\n\nResponse format: {{\"score\": <float 0-1>, \"analysis\": \"<text>\"}}'''\n\n\n@VisiData.lazy_property\ndef anthropic_client(vd):\n    'Initialize and return Anthropic API client.'\n    anthropic = vd.importExternal('anthropic')\n    api_key = os.environ.get('ANTHROPIC_API_KEY') or vd.fail('set $ANTHROPIC_API_KEY (Get API key from https://console.anthropic.com/')\n    return anthropic.Anthropic(api_key=api_key)\n\n\n@VisiData.api\ndef loadLLMTemplate(vd):\n    'Load LLM template from file or return default template.'\n    template_path = vd.options.llm_template_path\n    if template_path:\n        try:\n            with open(template_path) as f:\n                return f.read()\n        except Exception as e:\n            vd.exceptionCaught(e)\n            vd.fail(f'Could not load template from {template_path}')\n\n    return DEFAULT_TEMPLATE\n\n\n@VisiData.api\ndef queryLLM(vd, prompt):\n    'Query Anthropic LLM with prompt and return parsed response.'\n    response = vd.anthropic_client.messages.create(\n        model=vd.options.llm_model,\n        max_tokens=vd.options.llm_max_tokens,\n        temperature=vd.options.llm_temperature,\n        messages=[{'role': 'user', 'content': prompt}]\n    )\n\n    raw_text = response.content[0].text\n    tokens = response.usage.input_tokens + response.usage.output_tokens\n\n    # Try to parse JSON response\n    try:\n        data = json.loads(raw_text)\n        score = float(data.get('score', 0))\n        analysis = str(data.get('analysis', ''))\n    except (json.JSONDecodeError, ValueError, KeyError):\n        # Fallback: try to extract score with regex\n        score_match = re.search(r'\"?score\"?\\s*:\\s*(\\d+\\.?\\d*)', raw_text)\n        score = float(score_match.group(1)) if score_match else None\n        analysis = raw_text  # use raw response as analysis\n\n    return {\n        'score': score,\n        'analysis': analysis,\n        'raw': raw_text,\n        'tokens': tokens\n    }\n\n\n@Sheet.api\n@asyncthread\ndef llmAnalyzeColumn(sheet, col, rows, query):\n    'Analyze column data with LLM using given query.'\n    # Load template\n    template = vd.loadLLMTemplate()\n\n    # Warn about large datasets\n    n_rows = len(rows)\n    if n_rows > 100:\n        if not vd.confirm(f'Analyze {n_rows} rows? This may take some time and money.'):\n            return\n\n    # Create result columns\n    score_col = SettableColumn(f'{col.name}_llm_score', type=float)\n    analysis_col = SettableColumn(f'{col.name}_llm_analysis', type=str, width=40)\n    raw_col = SettableColumn(f'{col.name}_llm_raw', type=str, width=0)  # hidden\n    tokens_col = SettableColumn(f'{col.name}_llm_tokens', type=int, width=8)\n\n    sheet.addColumnAtCursor(score_col, analysis_col, raw_col, tokens_col)\n\n    # Track statistics\n    processed = 0\n    skipped = 0\n    errors = 0\n    total_tokens = 0\n\n    # Process rows sequentially\n    for row in Progress(rows, gerund='analyzing with LLM'):\n        cell_text = col.format(col.getTypedValue(row))\n\n        # Skip empty cells\n        if not cell_text or str(cell_text).strip() == '':\n            skipped += 1\n            continue\n\n        # Truncate if too long (rough estimate: 4 chars ≈ 1 token)\n        max_chars = vd.options.llm_max_tokens * 3\n        if len(cell_text) > max_chars:\n            cell_text = cell_text[:max_chars] + '...'\n            vd.warning(f'Cell content truncated (exceeded {max_chars} chars)')\n\n        # Build prompt\n        prompt = template.format(query=query, text=cell_text)\n\n        # Call API with error handling\n        try:\n            result = vd.queryLLM(prompt)\n\n            score_col.setValue(row, result['score'])\n            analysis_col.setValue(row, result['analysis'])\n            raw_col.setValue(row, result['raw'])\n            tokens_col.setValue(row, result['tokens'])\n\n            total_tokens += result['tokens']\n            processed += 1\n\n        except Exception as e:\n            vd.exceptionCaught(e)\n            analysis_col.setValue(row, f'Error: {e}')\n            errors += 1\n\n        # Rate limiting\n        time.sleep(vd.options.llm_rate_delay)\n\n    # Report results\n    msg = f'LLM analysis complete: {processed} rows processed'\n    if skipped > 0:\n        msg += f', {skipped} skipped (empty)'\n    if errors > 0:\n        msg += f', {errors} errors'\n    if total_tokens > 0:\n        msg += f' ({total_tokens} tokens)'\n\n    vd.status(msg)\n\n\n# Command bindings - no default keybindings, users can add their own\nSheet.addCommand('', 'llm-analyze-column',\n    'llmAnalyzeColumn(cursorCol, rows, vd.input(\"LLM query: \", type=\"llm-query\"))',\n    'analyze all rows in current column with LLM')\n\nSheet.addCommand('', 'llm-analyze-selected',\n    'llmAnalyzeColumn(cursorCol, someSelectedRows, vd.input(\"LLM query: \", type=\"llm-query\"))',\n    'analyze selected rows only with LLM')\n\n# Menu integration\nvd.addMenuItems('''\n    Column > Analyze with LLM > all rows > llm-analyze-column\n    Column > Analyze with LLM > selected rows > llm-analyze-selected\n''')\n"
  },
  {
    "path": "visidata/experimental/mark.py",
    "content": "'''\nMarking selected rows with a keystroke, selecting marked rows,\nand viewing lists of marks and their rows.\n'''\n\nfrom copy import copy\nfrom visidata import vd, asyncthread, vlen, VisiData, TableSheet, ColumnItem, RowColorizer\n\n@VisiData.lazy_property\ndef marks(vd):\n    return MarksSheet('marks')\n\n\nclass MarkSheet(TableSheet):\n    pass\n\n\nclass MarksSheet(TableSheet):\n    '''\n    The Marks Sheet shows all marks in use (on all sheets) and how many rows have each mark.\n    '''\n    rowtype = \"marks\"  # rowdef: [mark, color, [rows]]\n    columns = [\n        ColumnItem('mark', 0),\n        ColumnItem('color', 1),\n        ColumnItem('rows', 2, type=vlen),\n    ]\n    colorizers = [\n        RowColorizer(2, None, lambda s,c,r,v: r and r[1])\n    ]\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.marknotes = list('0123456789')\n        self.marks = []  #\n        self.markedRows = {}  # rowid(row): [row, set(marks)]\n        self.rows = []\n\n    def getColor(self, sheet, row):\n        mark = self.getMark(sheet, row)\n        if not mark:\n            return ''\n        return self.getMarkRow(sheet, mark)[1]\n\n    def getMark(self, sheet, row):\n        mrow = self.markedRows.get(sheet.rowid(row), None)\n        if not mrow:\n            return ''\n        if mrow[1]:\n            return next(iter(mrow[1]))  # first item in set\n\n    def getMarks(self, row):\n        'Return set of all marks for given row'\n        return self.markedRows[self.rowid(row)][1]\n\n    def isMarked(self, row, mark):\n        'Return True if given row has given mark'\n        return mark in self.getMarks(row)\n\n    def getMarkRow(self, sheet, mark):\n        for r in self.rows:\n            if r[0] == mark:\n                return r\n        r = [mark, 'color_note_type', MarkSheet('mark_', rows=[], columns=copy(sheet.columns))]\n        self.addRow(r)\n        return r\n\n    def setMark(self, sheet, row, mark):\n        rowid = self.rowid(row)\n        if rowid not in self.markedRows:\n            self.markedRows[rowid] = [row, set(mark)]\n        else:\n            self.markedRows[rowid][1].add(mark)\n\n        vd.marks.getMarkRow(sheet, mark)[2].addRow(row)\n\n    def unsetMark(self, sheet, row, mark):\n        rowid = self.rowid(row)\n        if rowid in self.markedRows:\n            self.markedRows[rowid][1].remove(mark)\n        vd.marks.getMarkRow(sheet, mark)[2].deleteBy(lambda r,x=row: r is x)\n\n    def inputmark(self):\n        return vd.inputsingle('mark: ') or self.marknotes.pop(0)\n\n    def openRow(self, row):\n        return row[2]\n\n\n@VisiData.api\n@asyncthread\ndef mark(vd, sheet, rows, m):\n    for r in rows:\n        vd.marks.setMark(sheet, r, m)\n\n@VisiData.api\n@asyncthread\ndef unmark(vd, sheet, rows, m):\n    for r in rows:\n        vd.marks.unsetMark(sheet, r, m)\n\n\nvd.rowNoters.insert(0, lambda sheet, row: vd.marks.getMark(sheet, row))\n\nTableSheet.colorizers.append(RowColorizer(2, None, lambda s,c,r,v: not c and r and vd.marks.getColor(s, r)))\n\nTableSheet.addCommand('', 'mark-row', 'vd.mark(sheet, [cursorRow], vd.marks.inputmark())', '')\nTableSheet.addCommand('', 'unmark-row', 'vd.unmark(sheet, [cursorRow], vd.marks.inputmark())', '')\nTableSheet.addCommand('', 'mark-selected', 'vd.mark(sheet, selectedRows, vd.marks.inputmark())', '')\nTableSheet.addCommand('', 'unmark-selected', 'vd.unmark(sheet, selectedRows, vd.marks.inputmark())', '')\n\nTableSheet.addCommand('', 'select-marks', 'select(gatherBy(lambda r,mark=vd.marks.inputmark(): vd.marks.isMarked(r, mark)), progress=False)', '')\nTableSheet.addCommand('', 'stoggle-marks', 'toggle(gatherBy(lambda r,mark=vd.marks.inputmark(): vd.marks.isMarked(r, mark)), progress=False)', '')\nTableSheet.addCommand('', 'unselect-marks', 'unselect(gatherBy(lambda r,mark=vd.marks.inputmark(): vd.marks.isMarked(r, mark)), progress=False)', '')\n\nTableSheet.addCommand('', 'open-marks', 'vd.push(vd.marks)', '')\n\nTableSheet.addCommand('', 'go-prev-mark', 'moveToNextRow(lambda row,mark=vd.marks.inputmark(): vd.marks.isMarked(row, mark), reverse=True, msg=\"no previous marked row\")', 'go up current column to previous row with given mark')\nTableSheet.addCommand('', 'go-next-mark', 'moveToNextRow(lambda row,mark=vd.marks.inputmark(): vd.marks.isMarked(row, mark), msg=\"no next marked row\")', 'go down current column to next row with given mark')\n\n\nvd.addMenuItems('''\n    View > Marks > open-marks\n    Row > Mark > open Marks Sheet > open-marks\n    Row > Mark > current row > mark-row\n    Row > Mark > selected rows > mark-selected\n    Row > Unmark > current row > unmark-row\n    Row > Unmark > selected rows > unmark-selected\n    Row > Select > marked rows > select-marks\n    Row > Unselect > marked rows > unselect-marks\n    Row > Toggle select > marked rows > stoggle-marks\n    Row > Goto > next marked row > go-next-mark\n    Row > Goto > previous marked row > go-prev-mark\n''')\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/__init__.py",
    "content": "from . import tapestry\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/clues.json",
    "content": "{\"cleanerinits\": \"DS\", \"p3_sign\": \"Libra\", \"p3_signsymbol\": \"\\ufe0e\", \"p3_signadj\": \"balanced\", \"p3_chinesezodiac\": \"Goat\", \"clue5a\": \"in the Bronx\", \"clue6a\": \"Deborah\", \"clue6b\": \"who lives here i│·n Bronx\", \"clue7a\": \"in Astoria\", \"clue8a\": \"in Manhattan\"}\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/flame.ddw",
    "content": "{\"id\": \"0\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"1\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"2\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"3\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"4\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"5\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"6\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"7\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"8\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"9\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"10\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"11\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"12\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"13\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"14\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"15\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"16\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"17\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"18\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"19\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"20\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"21\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"22\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"23\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"24\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"25\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"26\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"27\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"28\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"29\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"30\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"31\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"32\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"33\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"34\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"35\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"36\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"37\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"38\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"39\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"40\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"id\": \"41\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"0\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"0\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"0\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"0\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"0\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"0\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"0\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"1\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"1\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"1\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"1\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"1\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"1\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"1\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"2\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"2\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"2\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"2\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"2\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"2\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"2\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"3\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"3\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"3\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"3\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"3\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"3\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u02ce\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"3\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"4\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"4\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"4\"}\n{\"x\": 2, \"y\": 2, \"text\": \")\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"4\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"4\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"4\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"5\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"5\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"5\"}\n{\"x\": 2, \"y\": 2, \"text\": \")\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"5\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"5\"}\n{\"x\": 1, \"y\": 1, \"text\": \"(\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"5\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"6\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"6\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"6\"}\n{\"x\": 2, \"y\": 2, \"text\": \")\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"6\"}\n{\"x\": 1, \"y\": 1, \"text\": \"(\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"6\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u23a0\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"6\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"7\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"7\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"7\"}\n{\"x\": 2, \"y\": 2, \"text\": \")\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"7\"}\n{\"x\": 1, \"y\": 1, \"text\": \"(\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"7\"}\n{\"x\": 2, \"y\": 0, \"text\": \"\\u23a0\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"7\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u02ec\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"7\"}\n{\"x\": 1, \"y\": 0, \"text\": \",\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"7\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"8\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"8\"}\n{\"x\": 2, \"y\": 2, \"text\": \")\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"8\"}\n{\"x\": 1, \"y\": 1, \"text\": \"(\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"8\"}\n{\"x\": 2, \"y\": 0, \"text\": \"\\u23a0\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"8\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u02ec\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"8\"}\n{\"x\": 1, \"y\": 0, \"text\": \",\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"8\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"8\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"9\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"9\"}\n{\"x\": 2, \"y\": 2, \"text\": \")\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"9\"}\n{\"x\": 1, \"y\": 1, \"text\": \"(\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"9\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u23a0\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"9\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"9\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"10\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u23a0\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"10\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"10\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"10\"}\n{\"x\": 2, \"y\": 2, \"text\": \")\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"10\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"10\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"11\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"11\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u23a0\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"11\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"11\"}\n{\"x\": 2, \"y\": 2, \"text\": \")\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"11\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"11\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"12\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"12\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"12\"}\n{\"x\": 2, \"y\": 2, \"text\": \")\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"12\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"12\"}\n{\"x\": 0, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"12\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"13\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"13\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"13\"}\n{\"x\": 2, \"y\": 2, \"text\": \")\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"13\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"13\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"13\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"14\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"14\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"14\"}\n{\"x\": 2, \"y\": 2, \"text\": \")\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"14\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"14\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u23a0\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"14\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"15\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"15\"}\n{\"x\": 2, \"y\": 2, \"text\": \")\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"15\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"15\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u23a0\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"15\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"15\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"15\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"16\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"16\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"16\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"16\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u23a0\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"16\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"16\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"16\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"16\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"17\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"17\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"17\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"17\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"17\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u23a0\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"17\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"17\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"17\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"18\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"18\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"18\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"18\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"18\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u23a0\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"18\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"18\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"18\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"19\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"19\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"19\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u23a0\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"19\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"19\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"19\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"19\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"20\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"20\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"20\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"20\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"20\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"20\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"20\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"21\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"21\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"21\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"21\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"21\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"21\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"21\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"22\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"22\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"22\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"22\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"22\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"22\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"22\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"23\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"23\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"23\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"23\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"23\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"23\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"23\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"24\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"24\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"24\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"24\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"24\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"24\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u02ec\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"24\"}\n{\"x\": 0, \"y\": 1, \"text\": \",\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"24\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"25\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"25\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"25\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"25\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"25\"}\n{\"x\": 0, \"y\": 2, \"text\": \"(\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"25\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"26\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"26\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"26\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"26\"}\n{\"x\": 0, \"y\": 2, \"text\": \"(\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"26\"}\n{\"x\": 1, \"y\": 1, \"text\": \")\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"26\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"27\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"27\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"27\"}\n{\"x\": 0, \"y\": 2, \"text\": \"(\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"27\"}\n{\"x\": 1, \"y\": 1, \"text\": \")\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"27\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239d\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"27\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"28\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"28\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"28\"}\n{\"x\": 0, \"y\": 2, \"text\": \"(\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"28\"}\n{\"x\": 1, \"y\": 1, \"text\": \")\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"28\"}\n{\"x\": 0, \"y\": 0, \"text\": \"\\u239d\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"28\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u02ce\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"28\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"29\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"29\"}\n{\"x\": 0, \"y\": 2, \"text\": \"(\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"29\"}\n{\"x\": 1, \"y\": 1, \"text\": \")\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"29\"}\n{\"x\": 0, \"y\": 0, \"text\": \"\\u239d\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"29\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u02ce\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"29\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"29\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"30\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"30\"}\n{\"x\": 0, \"y\": 2, \"text\": \"(\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"30\"}\n{\"x\": 1, \"y\": 1, \"text\": \")\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"30\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239d\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"30\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"30\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"31\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"31\"}\n{\"x\": 0, \"y\": 2, \"text\": \"(\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"31\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239d\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"31\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"31\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"31\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"32\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"32\"}\n{\"x\": 0, \"y\": 2, \"text\": \"(\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"32\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239d\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"32\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"32\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"32\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"33\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"33\"}\n{\"x\": 0, \"y\": 2, \"text\": \"(\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"33\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"33\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"33\"}\n{\"x\": 2, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"33\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"34\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"34\"}\n{\"x\": 0, \"y\": 2, \"text\": \"(\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"34\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"34\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"34\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"34\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"35\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"35\"}\n{\"x\": 0, \"y\": 2, \"text\": \"(\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"35\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"35\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"35\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239d\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"35\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"36\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"36\"}\n{\"x\": 0, \"y\": 2, \"text\": \"(\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"36\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"36\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"36\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239d\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"36\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"36\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"37\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"37\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"37\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239d\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"37\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"37\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"37\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"37\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"38\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"38\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239d\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"38\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u23a0\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"38\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"38\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"38\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"38\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"39\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"39\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239d\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"39\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"39\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"39\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"39\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"39\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"40\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"40\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239d\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"40\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"40\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"40\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"40\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"40\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a0\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"41\"}\n{\"x\": 1, \"y\": 2, \"text\": \"\\u203f\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"41\"}\n{\"x\": 1, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"41\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u239d\", \"color\": \"202\", \"tags\": [], \"group\": \"\", \"frame\": \"41\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"41\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"214 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"41\"}\n{\"x\": 1, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"228 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"41\"}\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/menorah.ddw",
    "content": "{\"id\": \"off\", \"type\": \"frame\", \"x\": null, \"y\": null, \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"frame\": null, \"rows\": null, \"duration_ms\": 100, \"ref\": null, \"href\": null}\n{\"id\": \"on\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 100}\n{\"x\": 4, \"y\": 5, \"text\": \"\\u0194\", \"color\": \"88\", \"tags\": [\"wick\", \"day8\"], \"group\": \"\", \"frame\": \"on\", \"href\": \"open-puzzle-8\"}\n{\"x\": 13, \"y\": 5, \"text\": \"\\u0194\", \"color\": \"88\", \"tags\": [\"wick\", \"day7\"], \"group\": \"\", \"frame\": \"on\", \"href\": \"open-puzzle-7\"}\n{\"x\": 22, \"y\": 5, \"text\": \"\\u0194\", \"color\": \"88\", \"tags\": [\"wick\", \"day6\"], \"group\": \"\", \"frame\": \"on\", \"href\": \"open-puzzle-6\"}\n{\"x\": 31, \"y\": 5, \"text\": \"\\u0194\", \"color\": \"88\", \"tags\": [\"wick\", \"day5\"], \"group\": \"\", \"frame\": \"on\", \"href\": \"open-puzzle-5\"}\n{\"x\": 49, \"y\": 5, \"text\": \"\\u0194\", \"color\": \"88\", \"tags\": [\"wick\", \"day4\"], \"group\": \"\", \"frame\": \"on\", \"href\": \"open-puzzle-4\"}\n{\"x\": 58, \"y\": 5, \"text\": \"\\u0194\", \"color\": \"88\", \"tags\": [\"wick\", \"day3\"], \"group\": \"\", \"frame\": \"on\", \"href\": \"open-puzzle-3\"}\n{\"x\": 67, \"y\": 5, \"text\": \"\\u0194\", \"color\": \"88\", \"tags\": [\"wick\", \"day2\"], \"group\": \"\", \"frame\": \"on\", \"href\": \"open-puzzle-2\"}\n{\"x\": 76, \"y\": 5, \"text\": \"\\u0194\", \"color\": \"88\", \"tags\": [\"wick\", \"day1\"], \"group\": \"\", \"frame\": \"on\", \"href\": \"open-puzzle-1\"}\n{\"x\": 40, \"y\": 1, \"text\": \"\\u0194\", \"color\": \"88\", \"tags\": [\"wick\", \"day0\"], \"group\": \"\", \"frame\": \"on\", \"href\": \"open-puzzle-0\"}\n{\"x\": 40, \"y\": 3, \"text\": \" \", \"color\": \"\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 40, \"y\": 4, \"text\": \" \", \"color\": \"\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 39, \"y\": 4, \"text\": \" \", \"color\": \"\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 40, \"y\": 5, \"text\": \" \", \"color\": \"\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 41, \"y\": 5, \"text\": \" \", \"color\": \"\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 41, \"y\": 6, \"text\": \" \", \"color\": \"\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 39, \"y\": 6, \"text\": \" \", \"color\": \"\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 4, \"y\": 7, \"text\": \" \", \"color\": \"\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 4, \"y\": 8, \"text\": \" \", \"color\": \"\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 3, \"y\": 8, \"text\": \" \", \"color\": \"\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 4, \"y\": 9, \"text\": \" \", \"color\": \"\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 5, \"y\": 9, \"text\": \" \", \"color\": \"\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 5, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 3, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 39, \"y\": 7, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 37, \"y\": 7, \"text\": \"{\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 43, \"y\": 7, \"text\": \"}\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 38, \"y\": 7, \"text\": \"\\u00ec\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 42, \"y\": 7, \"text\": \"\\u00ed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 40, \"y\": 7, \"text\": \"\\u0289\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 41, \"y\": 7, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 48, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 46, \"y\": 11, \"text\": \"{\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 52, \"y\": 11, \"text\": \"}\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 47, \"y\": 11, \"text\": \"\\u00ec\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 51, \"y\": 11, \"text\": \"\\u00ed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 49, \"y\": 11, \"text\": \"\\u0289\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 50, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 57, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 55, \"y\": 11, \"text\": \"{\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 61, \"y\": 11, \"text\": \"}\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 56, \"y\": 11, \"text\": \"\\u00ec\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 60, \"y\": 11, \"text\": \"\\u00ed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 58, \"y\": 11, \"text\": \"\\u0289\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 59, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 66, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 64, \"y\": 11, \"text\": \"{\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 70, \"y\": 11, \"text\": \"}\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 65, \"y\": 11, \"text\": \"\\u00ec\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 69, \"y\": 11, \"text\": \"\\u00ed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 67, \"y\": 11, \"text\": \"\\u0289\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 68, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 75, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 73, \"y\": 11, \"text\": \"{\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 79, \"y\": 11, \"text\": \"}\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 74, \"y\": 11, \"text\": \"\\u00ec\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 78, \"y\": 11, \"text\": \"\\u00ed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 76, \"y\": 11, \"text\": \"\\u0289\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 77, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 3, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 1, \"y\": 11, \"text\": \"{\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 7, \"y\": 11, \"text\": \"}\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 3, \"y\": 12, \"text\": \"\\u02ca\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 2, \"y\": 11, \"text\": \"\\u00ec\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 6, \"y\": 11, \"text\": \"\\u00ed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 5, \"y\": 12, \"text\": \"\\u02cb\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 4, \"y\": 11, \"text\": \"\\u0289\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 5, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 21, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 19, \"y\": 11, \"text\": \"{\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 25, \"y\": 11, \"text\": \"}\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 20, \"y\": 11, \"text\": \"\\u00ec\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 24, \"y\": 11, \"text\": \"\\u00ed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 22, \"y\": 11, \"text\": \"\\u0289\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 23, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 12, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 10, \"y\": 11, \"text\": \"{\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 16, \"y\": 11, \"text\": \"}\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 11, \"y\": 11, \"text\": \"\\u00ec\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 15, \"y\": 11, \"text\": \"\\u00ed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 13, \"y\": 11, \"text\": \"\\u0289\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 14, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 30, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 34, \"y\": 11, \"text\": \"}\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 29, \"y\": 11, \"text\": \"\\u00ec\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 33, \"y\": 11, \"text\": \"\\u00ed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 31, \"y\": 11, \"text\": \"\\u0289\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 32, \"y\": 11, \"text\": \"\\u0268\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 28, \"y\": 11, \"text\": \"{\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 6, \"y\": 13, \"text\": \"\\u23a0\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 2, \"y\": 13, \"text\": \"\\u239d\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 2, \"y\": 12, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 6, \"y\": 12, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 75, \"y\": 12, \"text\": \"\\u02ca\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 77, \"y\": 12, \"text\": \"\\u02cb\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 78, \"y\": 13, \"text\": \"\\u23a0\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 74, \"y\": 13, \"text\": \"\\u239d\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 74, \"y\": 12, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 78, \"y\": 12, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 12, \"y\": 12, \"text\": \"\\u02ca\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 14, \"y\": 12, \"text\": \"\\u02cb\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 15, \"y\": 13, \"text\": \"\\u23a0\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 11, \"y\": 13, \"text\": \"\\u239d\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 11, \"y\": 12, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 15, \"y\": 12, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 3, \"y\": 14, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 5, \"y\": 14, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 1, \"y\": 18, \"text\": \"\\u1fed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 2, \"y\": 15, \"text\": \"\\u1fee\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 2, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 6, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 7, \"y\": 18, \"text\": \"\\u1fee\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 12, \"y\": 14, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 11, \"y\": 15, \"text\": \"\\u1fee\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 14, \"y\": 14, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 15, \"y\": 15, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 14, \"y\": 17, \"text\": \"\\\\\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 14, \"y\": 16, \"text\": \"\\u239b\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 6, \"y\": 15, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 5, \"y\": 16, \"text\": \"\\u239b\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 5, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 3, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 4, \"y\": 18, \"text\": \"\\u02cd\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 6, \"y\": 17, \"text\": \"\\u203f\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 7, \"y\": 17, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 1, \"y\": 15, \"text\": \"/\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 10, \"y\": 15, \"text\": \"/\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 5, \"y\": 17, \"text\": \"\\\\\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 3, \"y\": 15, \"text\": \"\\u02db\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 5, \"y\": 15, \"text\": \"\\u1fed\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 0, \"y\": 16, \"text\": \"\\u239f\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 2, \"y\": 16, \"text\": \"|\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 4, \"y\": 15, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 4, \"y\": 12, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 3, \"y\": 13, \"text\": \"\\u02ce\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 5, \"y\": 13, \"text\": \"\\u02cf\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 12, \"y\": 13, \"text\": \"\\u02ce\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 14, \"y\": 13, \"text\": \"\\u02cf\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 13, \"y\": 12, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 12, \"y\": 15, \"text\": \"\\u02db\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 14, \"y\": 15, \"text\": \"\\u1fed\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 13, \"y\": 15, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 11, \"y\": 16, \"text\": \"|\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 15, \"y\": 17, \"text\": \"\\u203f\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 16, \"y\": 17, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 10, \"y\": 18, \"text\": \"\\u1fed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 11, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 15, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 16, \"y\": 18, \"text\": \"\\u1fee\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 14, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 12, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 13, \"y\": 18, \"text\": \"\\u02cd\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 9, \"y\": 17, \"text\": \"\\u2144\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 21, \"y\": 12, \"text\": \"\\u02ca\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 23, \"y\": 12, \"text\": \"\\u02cb\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 24, \"y\": 13, \"text\": \"\\u23a0\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 20, \"y\": 13, \"text\": \"\\u239d\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 20, \"y\": 12, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 24, \"y\": 12, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 21, \"y\": 14, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 20, \"y\": 15, \"text\": \"\\u1fee\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 23, \"y\": 14, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 24, \"y\": 15, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 23, \"y\": 17, \"text\": \"\\\\\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 23, \"y\": 16, \"text\": \"\\u239b\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 18, \"y\": 16, \"text\": \"\\u239f\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 19, \"y\": 15, \"text\": \"/\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 21, \"y\": 13, \"text\": \"\\u02ce\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 23, \"y\": 13, \"text\": \"\\u02cf\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 22, \"y\": 12, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 21, \"y\": 15, \"text\": \"\\u02db\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 23, \"y\": 15, \"text\": \"\\u1fed\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 22, \"y\": 15, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 20, \"y\": 16, \"text\": \"|\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 24, \"y\": 17, \"text\": \"\\u203f\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 25, \"y\": 17, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 19, \"y\": 18, \"text\": \"\\u1fed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 20, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 24, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 25, \"y\": 18, \"text\": \"\\u1fee\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 23, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 21, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 22, \"y\": 18, \"text\": \"\\u02cd\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 18, \"y\": 17, \"text\": \"\\u2144\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 30, \"y\": 12, \"text\": \"\\u02ca\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 32, \"y\": 12, \"text\": \"\\u02cb\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 33, \"y\": 13, \"text\": \"\\u23a0\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 29, \"y\": 13, \"text\": \"\\u239d\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 29, \"y\": 12, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 33, \"y\": 12, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 30, \"y\": 14, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 29, \"y\": 15, \"text\": \"\\u1fee\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 32, \"y\": 14, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 33, \"y\": 15, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 32, \"y\": 17, \"text\": \"\\\\\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 32, \"y\": 16, \"text\": \"\\u239b\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 27, \"y\": 16, \"text\": \"\\u239f\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 28, \"y\": 15, \"text\": \"/\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 30, \"y\": 13, \"text\": \"\\u02ce\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 32, \"y\": 13, \"text\": \"\\u02cf\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 31, \"y\": 12, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 30, \"y\": 15, \"text\": \"\\u02db\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 32, \"y\": 15, \"text\": \"\\u1fed\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 31, \"y\": 15, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 29, \"y\": 16, \"text\": \"|\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 33, \"y\": 17, \"text\": \"\\u203f\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 34, \"y\": 17, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 28, \"y\": 18, \"text\": \"\\u1fed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 29, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 33, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 34, \"y\": 18, \"text\": \"\\u1fee\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 32, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 30, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 31, \"y\": 18, \"text\": \"\\u02cd\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 27, \"y\": 17, \"text\": \"\\u2144\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 39, \"y\": 8, \"text\": \"\\u02ca\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 41, \"y\": 8, \"text\": \"\\u02cb\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 42, \"y\": 9, \"text\": \"\\u23a0\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 38, \"y\": 9, \"text\": \"\\u239d\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 38, \"y\": 8, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 42, \"y\": 8, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 39, \"y\": 10, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 41, \"y\": 10, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 39, \"y\": 9, \"text\": \"\\u02ce\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 41, \"y\": 9, \"text\": \"\\u02cf\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 40, \"y\": 8, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 38, \"y\": 11, \"text\": \"\\u1fee\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 42, \"y\": 11, \"text\": \"\\u1fed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 40, \"y\": 11, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 37, \"y\": 11, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 43, \"y\": 11, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 42, \"y\": 12, \"text\": \"\\u239b\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 38, \"y\": 12, \"text\": \"\\u239e\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 42, \"y\": 13, \"text\": \"\\u239c\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 38, \"y\": 13, \"text\": \"\\u239f\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 39, \"y\": 11, \"text\": \"\\u02ca\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 41, \"y\": 11, \"text\": \"\\u02cb\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 39, \"y\": 13, \"text\": \"!\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 39, \"y\": 12, \"text\": \".\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 41, \"y\": 12, \"text\": \".\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 41, \"y\": 13, \"text\": \"!\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 77, \"y\": 14, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 75, \"y\": 14, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 79, \"y\": 15, \"text\": \"\\\\\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 78, \"y\": 15, \"text\": \"\\u1fed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 75, \"y\": 15, \"text\": \"\\u1fee\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 76, \"y\": 15, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 74, \"y\": 15, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 75, \"y\": 16, \"text\": \"\\u239e\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 74, \"y\": 17, \"text\": \"\\u203f\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 73, \"y\": 17, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 80, \"y\": 16, \"text\": \"\\u239c\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 78, \"y\": 16, \"text\": \"|\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 77, \"y\": 15, \"text\": \"\\u00b8\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 79, \"y\": 18, \"text\": \"\\u1fee\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 74, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 77, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 75, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 76, \"y\": 18, \"text\": \"\\u02cd\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 78, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 73, \"y\": 18, \"text\": \"\\u1fed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 66, \"y\": 12, \"text\": \"\\u02ca\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 68, \"y\": 12, \"text\": \"\\u02cb\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 69, \"y\": 13, \"text\": \"\\u23a0\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 65, \"y\": 13, \"text\": \"\\u239d\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 65, \"y\": 12, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 69, \"y\": 12, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 68, \"y\": 14, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 66, \"y\": 14, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 70, \"y\": 15, \"text\": \"\\\\\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 69, \"y\": 15, \"text\": \"\\u1fed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 66, \"y\": 15, \"text\": \"\\u1fee\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 67, \"y\": 15, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 65, \"y\": 15, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 66, \"y\": 16, \"text\": \"\\u239e\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 65, \"y\": 17, \"text\": \"\\u203f\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 64, \"y\": 17, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 71, \"y\": 16, \"text\": \"\\u239c\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 69, \"y\": 16, \"text\": \"|\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 68, \"y\": 15, \"text\": \"\\u00b8\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 70, \"y\": 18, \"text\": \"\\u1fee\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 65, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 68, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 66, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 67, \"y\": 18, \"text\": \"\\u02cd\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 69, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 71, \"y\": 17, \"text\": \"\\u2144\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 57, \"y\": 12, \"text\": \"\\u02ca\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 59, \"y\": 12, \"text\": \"\\u02cb\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 60, \"y\": 13, \"text\": \"\\u23a0\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 56, \"y\": 13, \"text\": \"\\u239d\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 56, \"y\": 12, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 60, \"y\": 12, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 59, \"y\": 14, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 57, \"y\": 14, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 61, \"y\": 15, \"text\": \"\\\\\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 60, \"y\": 15, \"text\": \"\\u1fed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 57, \"y\": 15, \"text\": \"\\u1fee\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 58, \"y\": 15, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 56, \"y\": 15, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 57, \"y\": 16, \"text\": \"\\u239e\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 56, \"y\": 17, \"text\": \"\\u203f\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 55, \"y\": 17, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 62, \"y\": 16, \"text\": \"\\u239c\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 60, \"y\": 16, \"text\": \"|\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 59, \"y\": 15, \"text\": \"\\u00b8\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 61, \"y\": 18, \"text\": \"\\u1fee\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 56, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 59, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 57, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 58, \"y\": 18, \"text\": \"\\u02cd\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 60, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 55, \"y\": 18, \"text\": \"\\u1fed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 64, \"y\": 18, \"text\": \"\\u1fed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 62, \"y\": 17, \"text\": \"\\u2144\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 48, \"y\": 12, \"text\": \"\\u02ca\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 50, \"y\": 12, \"text\": \"\\u02cb\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 51, \"y\": 13, \"text\": \"\\u23a0\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 47, \"y\": 13, \"text\": \"\\u239d\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 47, \"y\": 12, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 51, \"y\": 12, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 50, \"y\": 14, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 48, \"y\": 14, \"text\": \")\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 52, \"y\": 15, \"text\": \"\\\\\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 51, \"y\": 15, \"text\": \"\\u1fed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 48, \"y\": 15, \"text\": \"\\u1fee\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 49, \"y\": 15, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 47, \"y\": 15, \"text\": \"(\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 48, \"y\": 16, \"text\": \"\\u239e\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 47, \"y\": 17, \"text\": \"\\u203f\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 46, \"y\": 17, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 53, \"y\": 16, \"text\": \"\\u239c\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 51, \"y\": 16, \"text\": \"|\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 50, \"y\": 15, \"text\": \"\\u00b8\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 52, \"y\": 18, \"text\": \"\\u1fee\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 47, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 50, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 48, \"y\": 18, \"text\": \".\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 49, \"y\": 18, \"text\": \"\\u02cd\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 51, \"y\": 18, \"text\": \"\\u02d1\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 46, \"y\": 18, \"text\": \"\\u1fed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 53, \"y\": 17, \"text\": \"\\u2144\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 0, \"y\": 17, \"text\": \"\\u239d\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 80, \"y\": 17, \"text\": \"\\u23a0\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 75, \"y\": 17, \"text\": \"\\u23a0\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 66, \"y\": 17, \"text\": \"\\u23a0\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 57, \"y\": 17, \"text\": \"\\u23a0\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 48, \"y\": 17, \"text\": \"\\u23a0\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 78, \"y\": 17, \"text\": \"\\u23a0\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 69, \"y\": 17, \"text\": \"\\u23a0\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 60, \"y\": 17, \"text\": \"\\u23a0\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 51, \"y\": 17, \"text\": \"\\u23a0\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 2, \"y\": 17, \"text\": \"\\u239d\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 11, \"y\": 17, \"text\": \"\\u239d\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 20, \"y\": 17, \"text\": \"\\u239d\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 29, \"y\": 17, \"text\": \"\\u239d\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 36, \"y\": 17, \"text\": \"\\u2144\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 36, \"y\": 16, \"text\": \"\\u239f\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 37, \"y\": 15, \"text\": \"/\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 38, \"y\": 15, \"text\": \"\\u1fee\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 43, \"y\": 15, \"text\": \"\\\\\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 42, \"y\": 15, \"text\": \"\\u1fed\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 44, \"y\": 16, \"text\": \"\\u239c\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 44, \"y\": 17, \"text\": \"\\u2144\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 40, \"y\": 15, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 39, \"y\": 15, \"text\": \"\\u02db\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 41, \"y\": 15, \"text\": \"\\u00b8\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 38, \"y\": 16, \"text\": \"|\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 42, \"y\": 16, \"text\": \"|\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 38, \"y\": 17, \"text\": \"\\u239d\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 42, \"y\": 17, \"text\": \"\\u23a0\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 37, \"y\": 18, \"text\": \"\\\\\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 43, \"y\": 18, \"text\": \"/\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 39, \"y\": 18, \"text\": \"\\u1fed\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 41, \"y\": 18, \"text\": \"\\u1fee\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 67, \"y\": 12, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 76, \"y\": 12, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 58, \"y\": 12, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 49, \"y\": 12, \"text\": \"\\u2040\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 48, \"y\": 13, \"text\": \"\\u02ce\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 50, \"y\": 13, \"text\": \"\\u02cf\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 57, \"y\": 13, \"text\": \"\\u02ce\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 59, \"y\": 13, \"text\": \"\\u02cf\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 66, \"y\": 13, \"text\": \"\\u02ce\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 68, \"y\": 13, \"text\": \"\\u02cf\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 75, \"y\": 13, \"text\": \"\\u02ce\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 77, \"y\": 13, \"text\": \"\\u02cf\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 8, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 9, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 8, \"y\": 17, \"text\": \"\\u02cd\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 9, \"y\": 16, \"text\": \"\\u239f\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 17, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 18, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 17, \"y\": 17, \"text\": \"\\u02cd\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 26, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 27, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 26, \"y\": 17, \"text\": \"\\u02cd\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 35, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 36, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 35, \"y\": 17, \"text\": \"\\u02cd\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 45, \"y\": 17, \"text\": \"\\u02cd\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 54, \"y\": 17, \"text\": \"\\u02cd\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 63, \"y\": 17, \"text\": \"\\u02cd\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 72, \"y\": 17, \"text\": \"\\u02cd\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 44, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 45, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 53, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 54, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 62, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 63, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 71, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 72, \"y\": 18, \"text\": \"\\u02c9\", \"color\": \"250 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 39, \"y\": 19, \"text\": \"\\u00b8\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 41, \"y\": 19, \"text\": \"\\u02db\", \"color\": \"244 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 38, \"y\": 20, \"text\": \"\\u239f\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 42, \"y\": 20, \"text\": \"\\u239c\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 38, \"y\": 14, \"text\": \"\\u23a0\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 42, \"y\": 14, \"text\": \"\\u239d\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 42, \"y\": 19, \"text\": \"\\u239b\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 38, \"y\": 19, \"text\": \"\\u239e\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 4, \"y\": 6, \"text\": \"\\u02e1\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 5, \"y\": 8, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 9, \"text\": \".\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 4, \"y\": 10, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 6, \"y\": 6, \"text\": \"\\u03b9\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 4, \"y\": 5, \"text\": \"8\", \"color\": \"230 bold\", \"tags\": [\"wick\", \"day8\"], \"group\": \"\", \"frame\": \"off\", \"href\": \"open-puzzle-8\"}\n{\"x\": 5, \"y\": 6, \"text\": \"\\u1fed\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 6, \"text\": \"\\u1fee\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 6, \"text\": \"\\u2041\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 7, \"text\": \"\\u00a1\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 5, \"y\": 7, \"text\": \"\\u1fcd\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 4, \"y\": 4, \"text\": \"\\u02cc\", \"color\": \"230 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 6, \"y\": 7, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 6, \"y\": 8, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 6, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 6, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 7, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 13, \"y\": 6, \"text\": \"\\u02e1\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 14, \"y\": 8, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 12, \"y\": 9, \"text\": \".\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 13, \"y\": 10, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 15, \"y\": 6, \"text\": \"\\u03b9\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 13, \"y\": 5, \"text\": \"7\", \"color\": \"230 bold\", \"tags\": [\"wick\", \"day7\"], \"group\": \"\", \"frame\": \"off\", \"href\": \"open-puzzle-7\"}\n{\"x\": 14, \"y\": 6, \"text\": \"\\u1fed\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 12, \"y\": 6, \"text\": \"\\u1fee\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 11, \"y\": 6, \"text\": \"\\u2041\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 12, \"y\": 7, \"text\": \"\\u00a1\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 14, \"y\": 7, \"text\": \"\\u1fcd\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 13, \"y\": 4, \"text\": \"\\u02cc\", \"color\": \"230 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 15, \"y\": 7, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 15, \"y\": 8, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 15, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 15, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 11, \"y\": 7, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 11, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 11, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 11, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 6, \"text\": \"\\u02e1\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 8, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 9, \"text\": \".\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 10, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 6, \"text\": \"\\u03b9\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 5, \"text\": \"6\", \"color\": \"230 bold\", \"tags\": [\"wick\", \"day6\"], \"group\": \"\", \"frame\": \"off\", \"href\": \"open-puzzle-6\"}\n{\"x\": 23, \"y\": 6, \"text\": \"\\u1fed\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 6, \"text\": \"\\u1fee\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 6, \"text\": \"\\u2041\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 7, \"text\": \"\\u00a1\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 7, \"text\": \"\\u1fcd\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 4, \"text\": \"\\u02cc\", \"color\": \"230 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 24, \"y\": 7, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 8, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 7, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 6, \"text\": \"\\u02e1\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 8, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 9, \"text\": \".\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 10, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 6, \"text\": \"\\u03b9\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 5, \"text\": \"5\", \"color\": \"230 bold\", \"tags\": [\"wick\", \"day5\"], \"group\": \"\", \"frame\": \"off\", \"href\": \"open-puzzle-5\"}\n{\"x\": 32, \"y\": 6, \"text\": \"\\u1fed\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 6, \"text\": \"\\u1fee\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 6, \"text\": \"\\u2041\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 7, \"text\": \"\\u00a1\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 7, \"text\": \"\\u1fcd\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 4, \"text\": \"\\u02cc\", \"color\": \"230 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 33, \"y\": 7, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 8, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 7, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 6, \"text\": \"\\u02e1\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 8, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 9, \"text\": \".\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 10, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 6, \"text\": \"\\u03b9\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 5, \"text\": \"4\", \"color\": \"230 bold\", \"tags\": [\"wick\", \"day4\"], \"group\": \"\", \"frame\": \"off\", \"href\": \"open-puzzle-4\"}\n{\"x\": 50, \"y\": 6, \"text\": \"\\u1fed\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 6, \"text\": \"\\u1fee\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 6, \"text\": \"\\u2041\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 7, \"text\": \"\\u00a1\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 7, \"text\": \"\\u1fcd\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 4, \"text\": \"\\u02cc\", \"color\": \"230 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 51, \"y\": 7, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 8, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 7, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 58, \"y\": 6, \"text\": \"\\u02e1\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 59, \"y\": 8, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 9, \"text\": \".\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 58, \"y\": 10, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 6, \"text\": \"\\u03b9\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 58, \"y\": 5, \"text\": \"3\", \"color\": \"230 bold\", \"tags\": [\"wick\", \"day3\"], \"group\": \"\", \"frame\": \"off\", \"href\": \"open-puzzle-3\"}\n{\"x\": 59, \"y\": 6, \"text\": \"\\u1fed\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 6, \"text\": \"\\u1fee\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 6, \"text\": \"\\u2041\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 7, \"text\": \"\\u00a1\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 59, \"y\": 7, \"text\": \"\\u1fcd\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 58, \"y\": 4, \"text\": \"\\u02cc\", \"color\": \"230 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 60, \"y\": 7, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 8, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 7, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 6, \"text\": \"\\u02e1\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 8, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 9, \"text\": \".\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 10, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 6, \"text\": \"\\u03b9\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 6, \"text\": \"\\u1fed\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 6, \"text\": \"\\u1fee\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 6, \"text\": \"\\u2041\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 7, \"text\": \"\\u00a1\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 7, \"text\": \"\\u1fcd\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 4, \"text\": \"\\u02cc\", \"color\": \"230 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 69, \"y\": 7, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 8, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 7, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 6, \"text\": \"\\u02e1\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 8, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 9, \"text\": \".\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 10, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 6, \"text\": \"\\u03b9\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 5, \"text\": \"1\", \"color\": \"230 bold\", \"tags\": [\"wick\", \"day1\"], \"group\": \"\", \"frame\": \"off\", \"href\": \"open-puzzle-1\"}\n{\"x\": 77, \"y\": 6, \"text\": \"\\u1fed\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 6, \"text\": \"\\u1fee\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 6, \"text\": \"\\u2041\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 7, \"text\": \"\\u00a1\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 7, \"text\": \"\\u1fcd\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 4, \"text\": \"\\u02cc\", \"color\": \"230 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 78, \"y\": 7, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 8, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 7, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 2, \"text\": \"\\u02e1\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 4, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 5, \"text\": \".\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 6, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 2, \"text\": \"\\u03b9\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 1, \"text\": \"0\", \"color\": \"230 bold\", \"tags\": [\"wick\", \"day0\"], \"group\": \"\", \"frame\": \"off\", \"href\": \"open-puzzle-0\"}\n{\"x\": 41, \"y\": 2, \"text\": \"\\u1fed\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 2, \"text\": \"\\u1fee\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 2, \"text\": \"\\u2041\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 3, \"text\": \"\\u00a1\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 3, \"text\": \"\\u1fcd\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 0, \"text\": \"\\u02cc\", \"color\": \"230 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 42, \"y\": 3, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 4, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 5, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 6, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 3, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 4, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 5, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 6, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 10, \"text\": \"\\u0240\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 4, \"y\": 14, \"text\": \"\\u0240\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 13, \"y\": 14, \"text\": \"\\u0240\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 22, \"y\": 14, \"text\": \"\\u0240\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 31, \"y\": 14, \"text\": \"\\u0240\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 49, \"y\": 14, \"text\": \"\\u0240\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 58, \"y\": 14, \"text\": \"\\u0240\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 67, \"y\": 14, \"text\": \"\\u0240\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 76, \"y\": 14, \"text\": \"\\u0240\", \"color\": \"255 bold\", \"tags\": [\"menorah\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 4, \"y\": 13, \"text\": \"\", \"color\": \"15 bold\", \"tags\": [], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 67, \"y\": 5, \"text\": \"2\", \"color\": \"230 bold\", \"tags\": [\"wick\", \"day2\"], \"group\": \"\", \"frame\": \"off\", \"href\": \"open-puzzle-2\"}\n{\"x\": 50, \"y\": 9, \"text\": \" \", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 9, \"text\": \" \", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 8, \"text\": \" \", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 8, \"text\": \" \", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 7, \"text\": \" \", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 10, \"text\": \" \", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 10, \"text\": \" \", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 8, \"text\": \"\\u00b8\", \"color\": \"27 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 3, \"y\": 9, \"text\": \".\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 4, \"y\": 10, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 2, \"y\": 6, \"text\": \"\\u03b6\", \"color\": \"33 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 5, \"y\": 7, \"text\": \"\\u20b0\", \"color\": \"39 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 5, \"y\": 6, \"text\": \"\\u210c\", \"color\": \"39 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 5, \"y\": 9, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 5, \"y\": 10, \"text\": \"\\u1fed\", \"color\": \"27 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 6, \"y\": 8, \"text\": \"\\u1f37\", \"color\": \"27 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 3, \"y\": 6, \"text\": \"\\u214b\", \"color\": \"39 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 2, \"y\": 7, \"text\": \"\\u1f86\", \"color\": \"27 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 3, \"y\": 7, \"text\": \"\\u1fdf\", \"color\": \"39 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 6, \"y\": 6, \"text\": \"\\u00b8\", \"color\": \"33 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 5, \"y\": 8, \"text\": \"\\u1fdf\", \"color\": \"33 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 6, \"y\": 7, \"text\": \"\\u1f97\", \"color\": \"33 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 4, \"y\": 6, \"text\": \"\\u0267\", \"color\": \"39 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 4, \"y\": 7, \"text\": \"\\u00a1\", \"color\": \"33 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 4, \"y\": 8, \"text\": \"\\u01be\", \"color\": \"33 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 30, \"y\": 8, \"text\": \"\\u00b8\", \"color\": \"27 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 30, \"y\": 9, \"text\": \".\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 31, \"y\": 10, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 29, \"y\": 6, \"text\": \"\\u03b6\", \"color\": \"33 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 32, \"y\": 7, \"text\": \"\\u20b0\", \"color\": \"39 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 32, \"y\": 6, \"text\": \"\\u210c\", \"color\": \"39 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 32, \"y\": 9, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 32, \"y\": 10, \"text\": \"\\u1fed\", \"color\": \"27 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 33, \"y\": 8, \"text\": \"\\u1f37\", \"color\": \"27 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 30, \"y\": 6, \"text\": \"\\u214b\", \"color\": \"39 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 29, \"y\": 7, \"text\": \"\\u1f86\", \"color\": \"27 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 30, \"y\": 7, \"text\": \"\\u1fdf\", \"color\": \"39 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 33, \"y\": 6, \"text\": \"\\u00b8\", \"color\": \"33 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 32, \"y\": 8, \"text\": \"\\u1fdf\", \"color\": \"33 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 33, \"y\": 7, \"text\": \"\\u1f97\", \"color\": \"33 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 31, \"y\": 6, \"text\": \"\\u0267\", \"color\": \"39 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 31, \"y\": 7, \"text\": \"\\u00a1\", \"color\": \"33 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 31, \"y\": 8, \"text\": \"\\u01be\", \"color\": \"33 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 57, \"y\": 8, \"text\": \"\\u00b8\", \"color\": \"27 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 57, \"y\": 9, \"text\": \".\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 58, \"y\": 10, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 56, \"y\": 6, \"text\": \"\\u03b6\", \"color\": \"33 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 59, \"y\": 7, \"text\": \"\\u20b0\", \"color\": \"39 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 59, \"y\": 6, \"text\": \"\\u210c\", \"color\": \"39 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 59, \"y\": 9, \"text\": \"\\u02c8\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 59, \"y\": 10, \"text\": \"\\u1fed\", \"color\": \"27 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 60, \"y\": 8, \"text\": \"\\u1f37\", \"color\": \"27 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 57, \"y\": 6, \"text\": \"\\u214b\", \"color\": \"39 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 56, \"y\": 7, \"text\": \"\\u1f86\", \"color\": \"27 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 57, \"y\": 7, \"text\": \"\\u1fdf\", \"color\": \"39 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 60, \"y\": 6, \"text\": \"\\u00b8\", \"color\": \"33 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 59, \"y\": 8, \"text\": \"\\u1fdf\", \"color\": \"33 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 60, \"y\": 7, \"text\": \"\\u1f97\", \"color\": \"33 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 58, \"y\": 6, \"text\": \"\\u0267\", \"color\": \"39 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 58, \"y\": 7, \"text\": \"\\u00a1\", \"color\": \"33 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 58, \"y\": 8, \"text\": \"\\u01be\", \"color\": \"33 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 15, \"y\": 8, \"text\": \"\\u026e\", \"color\": \"33 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 13, \"y\": 10, \"text\": \"\\u0296\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 12, \"y\": 9, \"text\": \".\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 15, \"y\": 7, \"text\": \"\\u1f97\", \"color\": \"39 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 11, \"y\": 7, \"text\": \"\\u1f86\", \"color\": \"33 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 12, \"y\": 7, \"text\": \"\\u1fce\", \"color\": \"39 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 13, \"y\": 9, \"text\": \"\\u00a1\", \"color\": \"27 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 13, \"y\": 7, \"text\": \"\\u03d4\", \"color\": \"39 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 14, \"y\": 8, \"text\": \"\\u02c8\", \"color\": \"27 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 12, \"y\": 6, \"text\": \"\\u1faf\", \"color\": \"39 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 11, \"y\": 6, \"text\": \"\\u0481\", \"color\": \"33 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 13, \"y\": 8, \"text\": \"\\u1f37\", \"color\": \"33 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 14, \"y\": 6, \"text\": \"\\u04a9\", \"color\": \"39 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 14, \"y\": 7, \"text\": \"\\u1fa7\", \"color\": \"33 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 12, \"y\": 8, \"text\": \";\", \"color\": \"27 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 15, \"y\": 6, \"text\": \"\\u2137\", \"color\": \"39 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 13, \"y\": 6, \"text\": \"\\u00a1\", \"color\": \"33 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 24, \"y\": 8, \"text\": \"\\u0296\", \"color\": \"27 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 20, \"y\": 6, \"text\": \"\\u02a7\", \"color\": \"33 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 24, \"y\": 7, \"text\": \"\\u1fd2\", \"color\": \"33 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 21, \"y\": 6, \"text\": \"\\u20a7\", \"color\": \"39 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 21, \"y\": 7, \"text\": \"\\u1f27\", \"color\": \"39 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 20, \"y\": 7, \"text\": \"\\u1e08\", \"color\": \"33 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 22, \"y\": 6, \"text\": \"\\u2118\", \"color\": \"39 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 23, \"y\": 8, \"text\": \"\\u1fdd\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 21, \"y\": 8, \"text\": \"\\u04b8\", \"color\": \"33 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 23, \"y\": 10, \"text\": \"\\u1fcd\", \"color\": \"27 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 22, \"y\": 10, \"text\": \"\\u0387\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 21, \"y\": 9, \"text\": \"\\u00bf\", \"color\": \"27 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 22, \"y\": 8, \"text\": \"\\u1fcf\", \"color\": \"27 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 23, \"y\": 6, \"text\": \"\\u04a9\", \"color\": \"39 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 22, \"y\": 7, \"text\": \"\\u2103\", \"color\": \"33 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 23, \"y\": 7, \"text\": \"'\", \"color\": \"39 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 24, \"y\": 6, \"text\": \"\\u00b8\", \"color\": \"33 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 22, \"y\": 9, \"text\": \"'\", \"color\": \"27 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 42, \"y\": 4, \"text\": \"\\u026e\", \"color\": \"33 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 40, \"y\": 6, \"text\": \"\\u0296\", \"color\": \"21 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 39, \"y\": 5, \"text\": \".\", \"color\": \"21 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 42, \"y\": 3, \"text\": \"\\u1f97\", \"color\": \"39 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 38, \"y\": 3, \"text\": \"\\u1f86\", \"color\": \"33 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 39, \"y\": 3, \"text\": \"\\u1fce\", \"color\": \"39 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 40, \"y\": 5, \"text\": \"\\u00a1\", \"color\": \"27 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 40, \"y\": 3, \"text\": \"\\u03d4\", \"color\": \"39 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 41, \"y\": 4, \"text\": \"\\u02c8\", \"color\": \"27 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 39, \"y\": 2, \"text\": \"\\u1faf\", \"color\": \"39 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 38, \"y\": 2, \"text\": \"\\u0481\", \"color\": \"33 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 40, \"y\": 4, \"text\": \"\\u1f37\", \"color\": \"33 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 41, \"y\": 2, \"text\": \"\\u04a9\", \"color\": \"39 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 41, \"y\": 3, \"text\": \"\\u1fa7\", \"color\": \"33 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 39, \"y\": 4, \"text\": \";\", \"color\": \"27 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 42, \"y\": 2, \"text\": \"\\u2137\", \"color\": \"39 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 40, \"y\": 2, \"text\": \"\\u00a1\", \"color\": \"33 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 51, \"y\": 8, \"text\": \"\\u0296\", \"color\": \"27 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 47, \"y\": 6, \"text\": \"\\u02a7\", \"color\": \"33 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 51, \"y\": 7, \"text\": \"\\u1fd2\", \"color\": \"33 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 48, \"y\": 6, \"text\": \"\\u20a7\", \"color\": \"39 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 48, \"y\": 7, \"text\": \"\\u1f27\", \"color\": \"39 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 47, \"y\": 7, \"text\": \"\\u1e08\", \"color\": \"33 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 49, \"y\": 6, \"text\": \"\\u2118\", \"color\": \"39 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 50, \"y\": 8, \"text\": \"\\u1fdd\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 48, \"y\": 8, \"text\": \"\\u04b8\", \"color\": \"33 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 50, \"y\": 10, \"text\": \"\\u1fcd\", \"color\": \"27 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 49, \"y\": 10, \"text\": \"\\u0387\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 48, \"y\": 9, \"text\": \"\\u00bf\", \"color\": \"27 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 49, \"y\": 8, \"text\": \"\\u1fcf\", \"color\": \"27 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 50, \"y\": 6, \"text\": \"\\u04a9\", \"color\": \"39 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 49, \"y\": 7, \"text\": \"\\u2103\", \"color\": \"33 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 50, \"y\": 7, \"text\": \"'\", \"color\": \"39 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 51, \"y\": 6, \"text\": \"\\u00b8\", \"color\": \"33 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 49, \"y\": 9, \"text\": \"'\", \"color\": \"27 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 78, \"y\": 8, \"text\": \"\\u0296\", \"color\": \"27 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 74, \"y\": 6, \"text\": \"\\u02a7\", \"color\": \"33 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 78, \"y\": 7, \"text\": \"\\u1fd2\", \"color\": \"33 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 75, \"y\": 6, \"text\": \"\\u20a7\", \"color\": \"39 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 75, \"y\": 7, \"text\": \"\\u1f27\", \"color\": \"39 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 74, \"y\": 7, \"text\": \"\\u1e08\", \"color\": \"33 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 76, \"y\": 6, \"text\": \"\\u2118\", \"color\": \"39 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 77, \"y\": 8, \"text\": \"\\u1fdd\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 75, \"y\": 8, \"text\": \"\\u04b8\", \"color\": \"33 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 77, \"y\": 10, \"text\": \"\\u1fcd\", \"color\": \"27 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 76, \"y\": 10, \"text\": \"\\u0387\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 75, \"y\": 9, \"text\": \"\\u00bf\", \"color\": \"27 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 76, \"y\": 8, \"text\": \"\\u1fcf\", \"color\": \"27 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 77, \"y\": 6, \"text\": \"\\u04a9\", \"color\": \"39 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 76, \"y\": 7, \"text\": \"\\u2103\", \"color\": \"33 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 77, \"y\": 7, \"text\": \"'\", \"color\": \"39 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 78, \"y\": 6, \"text\": \"\\u00b8\", \"color\": \"33 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 76, \"y\": 9, \"text\": \"'\", \"color\": \"27 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 69, \"y\": 8, \"text\": \"\\u026e\", \"color\": \"33 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 67, \"y\": 10, \"text\": \"\\u0296\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 66, \"y\": 9, \"text\": \".\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 69, \"y\": 7, \"text\": \"\\u1f97\", \"color\": \"39 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 65, \"y\": 7, \"text\": \"\\u1f86\", \"color\": \"33 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 66, \"y\": 7, \"text\": \"\\u1fce\", \"color\": \"39 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 67, \"y\": 9, \"text\": \"\\u00a1\", \"color\": \"27 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 67, \"y\": 7, \"text\": \"\\u03d4\", \"color\": \"39 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 68, \"y\": 8, \"text\": \"\\u02c8\", \"color\": \"27 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 66, \"y\": 6, \"text\": \"\\u1faf\", \"color\": \"39 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 65, \"y\": 6, \"text\": \"\\u0481\", \"color\": \"33 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 67, \"y\": 8, \"text\": \"\\u1f37\", \"color\": \"33 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 68, \"y\": 6, \"text\": \"\\u04a9\", \"color\": \"39 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 68, \"y\": 7, \"text\": \"\\u1fa7\", \"color\": \"33 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 66, \"y\": 8, \"text\": \";\", \"color\": \"27 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 69, \"y\": 6, \"text\": \"\\u2137\", \"color\": \"39 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 67, \"y\": 6, \"text\": \"\\u00a1\", \"color\": \"33 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 2, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 2, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 6, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 15, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 24, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 24, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"27 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 15, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"27 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 6, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 20, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 20, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 20, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"27 bold\", \"tags\": [\"day6\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 11, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"33 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 11, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"27 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 11, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 2, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"27 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 29, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 29, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 33, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 33, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 29, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"27 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 56, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 56, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 60, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 60, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 56, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"27 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 42, \"y\": 6, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 42, \"y\": 5, \"text\": \"\\u239f\", \"color\": \"27 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 38, \"y\": 4, \"text\": \"\\u239c\", \"color\": \"33 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 38, \"y\": 5, \"text\": \"\\u239c\", \"color\": \"27 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 38, \"y\": 6, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 69, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 69, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"27 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 65, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"33 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 65, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"27 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 65, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day2\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 51, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 51, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"27 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 47, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 47, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 47, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"27 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 78, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 78, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"27 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 74, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 74, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"21 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 74, \"y\": 8, \"text\": \"\\u239c\", \"color\": \"27 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"on\"}\n{\"x\": 55, \"y\": 20, \"text\": \"\\u20ab\", \"color\": \"243\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 61, \"y\": 20, \"text\": \"\\u211f\", \"color\": \"243\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 60, \"y\": 20, \"text\": \"\\u2107\", \"color\": \"243\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 56, \"y\": 20, \"text\": \"\\u0461\", \"color\": \"243\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 59, \"y\": 20, \"text\": \"\\u04ce\", \"color\": \"243\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 57, \"y\": 20, \"text\": \"\\u2139\", \"color\": \"243\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 58, \"y\": 20, \"text\": \"\\u04cd\", \"color\": \"243\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 63, \"y\": 20, \"text\": \"\\u2661\", \"color\": \"235\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 65, \"y\": 20, \"text\": \"\\u20ab\", \"color\": \"243\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 66, \"y\": 20, \"text\": \"\\u2107\", \"color\": \"243\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 67, \"y\": 20, \"text\": \"\\u2123\", \"color\": \"243\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 69, \"y\": 20, \"text\": \"\\u20ae\", \"color\": \"243\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 68, \"y\": 20, \"text\": \"\\u0298\", \"color\": \"243\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 70, \"y\": 20, \"text\": \"\\u0167\", \"color\": \"243\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 72, \"y\": 20, \"text\": \"\\u023f\", \"color\": \"242\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n{\"x\": 71, \"y\": 20, \"text\": \"\\u024f\", \"color\": \"243\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"off\"}\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/puzzle0.md",
    "content": "## Noah's Market\n\nYour granduncle Noah owns “Noah’s Market”, an old-fashioned mom-and-pop everything store in NYC.  In recent years it’s become quite an operation, with over a thousand products and customers all over the U.S.  They still have the same Manhattan storefront, and they’re still running on the same database your cousin Alex set up at the start of 2017.\n\nYou were in Noah's buying some bagels, when your Aunt Sarah pulled you aside and asked if you could help her with something.\n\n\"You know how Noah's been talking recently about that rug we used to have?\"\n\nShe looked over at Noah, who was talking to a customer: \"Such a beautiful rug, with the most intricate design!  I miss having it in my living room.  It has this vibrant beehive buzzing along the edge...\"\n\nSarah said, \"Noah gave it to me a few years ago for safekeeping.  It was so old and filthy, that I had to send it to the cleaners.  Now that Noah's retiring and I'll be taking over the store, he wants that old rug back, so he can put it in his new den.\n\n\"The problem is, after I sent it to the cleaners, I forgot about it.  I apparently never went to pick it up.  I combed the apartment yesterday and I finally found this claim ticket.  'All items must be picked up within 90 days.' it says on it.\n\n\"Well I took it back to the cleaners, but they didn't have the rug.  They did have the other half of the ticket, though!  The ticket had [:bold]'2017 spec {cleanerinits}'[/] written on it.  The clerk was super busy and said they didn't have time for an ancient claim ticket.\n\n\"I'd really like to find this rug, before Noah comes over for our family dinner on the last day of Hanukkah.  I would normally ask Alex to help me with this, but Alex said they wouldn't be able to get to it until after the new year.  I think it's because Alex is spending all day working on those Advent of Code problems.\n\n\"Do you think you could help me track down the rug?\"\n\nShe hands you a [:onclick open-noahs-database]USB drive[/] labeled \"Noah's Market Database Backup\".\n\n\"Alex set up the backups to be password-protected.  I can never remember the password itself, but it's just the year in the Hebrew calendar when Alex set up the database.\"\n\nWhat's the password to open the .zip files on the USB drive?\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/puzzle1.md",
    "content": "## Puzzle 1\n\nSarah brought over one of the cashiers.  She said, \"Joe here says that one of our customers is a skilled private investigator.\"\n\nJoe nodded, \"They came in awhile ago and showed me their business card, and that's what it said. Skilled Private Investigator. And their phone number was their last name spelled out.  I didn't know what that meant, but apparently before there were smartphones, people had to remember phone numbers or write them down.  If you wanted a phone number that was easy-to-remember, you could get a number that spelled something using the letters printed on the phone buttons: like 2 has \"ABC\", and 3 \"DEF\", etc.  And I guess this person had done that, so if you dialed the numbers corresponding to the letters in their name, it would call their phone number!\n\n\"I thought that was pretty cool.  But I don't remember their name, or anything else about them for that matter.  I couldn't even tell you if they were male or female.\"\n\nSarah said, \"This person seems like they are clever and skilled at investigation.  I'd like to hire them to help me find Noah's rug before the Hanukkah dinner.  I don't know how to contact them, but apparently they shop here at Noah's Market.\"\n\nShe nodded at the [:onclick open-noahs-database]USB drive[/] in your hand.\n\n\"Can you find this private investigator's phone number?\"\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/puzzle2.md",
    "content": "## Puzzle 2\n\nWith your help, Sarah was able to call the private investigator that afternoon, and brought them up to speed.  The investigator went to the cleaners directly to see if they could get any more information about the unclaimed rug.\n\nWhile they were out, Sarah said, \"I tried cleaning the rug myself, but there was this snail on it that always seemed to leave a trail of slime behind it.  I spent a few hours cleaning it, and the next day the slime trail was back.\"\n\nWhen the investigator returned, they said, \"Apparently, this cleaner had a special projects program, where they outsourced challenging cleaning projects to industrious contractors.  As they're right across the street from Noah's, they usually talked about the project over coffee and bagels at Noah's before handing off the item to be cleaned.  The contractors would pick up the tab and expense it, along with their cleaning supplies.\n\n\"So this rug was apparently one of those special projects.  The claim ticket said '2017 spec {cleanerinits}'.  '2017' is the year the item was brought in, and '{cleanerinits}' is the initials of the contractor.\n\n\"But they stopped outsourcing a few years ago, and don't have contact information for any of these workers anymore.\"\n\nSarah first seemed hopeless, and then looked at the [:onclick open-noahs-database]USB drive[/] you had just put back in her hand.  She said, \"I know it's a long shot, but is there any chance you could find their phone number?\"\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/puzzle3.md",
    "content": "## Puzzle 3\n\nSarah and the investigator were very impressed with your data skills, as you were able to figure out the phone number of the contractor.  They called up the cleaning contractor straight away and asked about the rug.\n\n\"Oh, yeah, I did some special projects for them a few years ago.  I remember that rug unfortunately.  I managed to clean one section, which revealed a giant spider that startled me whenever I tried to work on it.\n\n\"I already had a fear of spiders before this, but this spider was so realistic that I had a hard time making any more progress.  I kept expecting the cleaners would call for the rug, but they never did.  I felt so bad about it, I couldn't face them, and of course they never gave me another project.\n\n\"At last I couldn't deal with the rug taking up my whole bathtub, so I gave it to this guy who lived in my neighborhood.  He said that he was naturally {p3_signadj} because he was a {p3_sign} born in the year of the {p3_chinesezodiac}, so maybe he was able to clean it.\n\n\"I don't remember his name.  Last time I saw him, he was leaving the subway and carrying a bag from Noah's.  I swore I saw a spider on his hat.\"\n\nCan you find the phone number of the person that the contractor gave the rug to?\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/puzzle4.md",
    "content": "## Puzzle 4\n\nThe investigator called the phone number you found and left a message, and a man soon called back:\n\n\"Wow, that was years ago!  It was quite an elegant tapestry.\n\n\"It took a lot of patience, but I did manage to get the dirt out of one section, which uncovered a superb owl.  I put it up on my wall, and sometimes at night I swear I could hear the owl hooting.\n\n\"A few weeks later my bike chain broke on the way home, and I needed to get it fixed before work the next day.  Thankfully, this woman I met on Tinder came over at 5am with her bike chain repair kit and some pastries from Noah's.  Apparently she liked to get up before dawn and claim the first pastries that came out of the oven.\n\n\"I didn't have any money or I would've paid her for her trouble.  She really liked the tapestry, though, so I wound up giving it to her.\n\n\"I don't remember her name or anything else about her.\"\n\nCan you find the bicycle fixer's phone number?\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/puzzle5.md",
    "content": "## Puzzle 5\n\n\"Yes, I did have that tapestry for a little bit.  I even cleaned a blotchy section that turned out to be a friendly koala.\n\n\"But it was still really dirty, so when I was going through a Marie Kondo phase, I decided it wasn't sparking joy anymore.\n\n\"I listed it on Freecycle, and a woman {clue5a} came to pick it up.  She was wearing a 'Noah's Market' sweatshirt, and it was just covered in cat hair.  When I suggested that a clowder of cats might ruin such a fine tapestry, she looked at me funny.  She said \"I only have ten or eleven cats, and anyway they are getting quite old now, so I doubt they'd care about some old rug.\"\n\n\"It took her 20 minutes to stuff the tapestry into some plastic bags she brought because it was raining.  I spent the evening cleaning my apartment.\"\n\nWhat's the phone number of the woman from Freecycle?\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/puzzle6.md",
    "content": "## Puzzle 6\n\n\"Why yes, I did have that rug for a little while in my living room!  My cats can't see a thing but they sure chased after the squirrel on it like it was dancing in front of their noses.\n\n\"It was a nice rug and they were surely going to ruin it, so I gave it to my cousin, who was moving into a new place that had wood floors.\n\n\"She refused to buy a new rug for herself--she said they were way too expensive.  She's always been very frugal, and she clips every coupon and shops every sale at Noah's Market.  In fact I like to tease her that Noah actually loses money whenever she comes in the store.\n\n\"I think she's been taking it too far lately though.  Once the subway fare increased, she stopped coming to visit me.  And she's really slow to respond to my texts.  I hope she remembers to invite me to the family reunion next year.\"\n\nCan you find her cousin's phone number?\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/puzzle7.md",
    "content": "## Puzzle 7\n\n\"Oh that tapestry, with the colorful toucan on it!  I'll tell you what happened to it.\n\n\"One day, I was at Noah's Market, and I was just about to leave when someone behind me said 'Miss!  You dropped something!'\n\n\"Well I turned around and sure enough this cute guy was holding something I had bought.  He said 'I got almost exactly the same thing!' We laughed about it and wound up swapping items because he had wanted the color I got.  We had a moment when our eyes met and my heart stopped for a second.  I asked him to get some food with me and we spent the rest of the day together.\n\n\"Before long I moved into his place.  It didn't last long though, as I soon discovered this man was not the gentleman I thought he was.  I moved out only a few months later, late at night and in quite a hurry.\n\n\"I realized the next day that I'd left that tapestry hanging on his wall.  But the tapestry had come to represent our relationship, and I wanted nothing more to do with him, so I let it go.  For all I know, he still has it.\"\n\nCan you figure out her ex-boyfriend's phone number?\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/puzzle8.md",
    "content": "## Puzzle 8\n\n\"Oh that damned woman!  She moved in, clogged my bathtub, spilled oatmeal all over the kitchen, and then just vanished one night without leaving so much as a note.  Well except she did leave behind that tapestry.  We spent much of our time together cleaning one filthy area, only to reveal a snake hiding in the branches!\n\n\"I left it on my wall hoping she would come back for it, but eventually I accepted that I had to move on.\n\n\"I don't have any storage here, and it didn't seem right to sell it, so I gave it to my sister {clue8a}.  She wound up getting a newer and more expensive rug, so she gave it to an acquaintance of hers who collects all sorts of junk.  Apparently he owns an entire set of Noah's collectibles!  He probably still has the rug, even.\n\n\"My sister is away for the holidays, but I can have her call you in a few weeks.\"\n\nThe family dinner is tonight!  Can you find the collector's phone number in time?\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/solutions.json",
    "content": "{\"p0\": \"NTc3Nw==\", \"p1\": \"NzY3LTM2NS03MjY5\", \"p2\": \"ODM4LTM1MS0wMzcw\", \"p3\": \"OTE0LTU5NC01NTM1\", \"p4\": \"NzE2LTc4OS00NDMz\", \"p5\": \"MzQ3LTgzNS0yMzU4\", \"p6\": \"ODM4LTI5NS03MTQz\", \"p7\": \"NTE2LTU0NC00MTg3\", \"p8\": \"NTE2LTYzOC05OTY2\"}\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/tapestry.ddw",
    "content": "{\"id\": \"on\", \"type\": \"frame\", \"x\": null, \"y\": null, \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"frame\": null, \"rows\": null, \"duration_ms\": 3500, \"ref\": null}\n{\"id\": \"on2\", \"type\": \"frame\", \"text\": \"\", \"color\": \"\", \"tags\": [], \"group\": \"\", \"duration_ms\": 500}\n{\"x\": 58, \"y\": 25, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 6, \"text\": \"-\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 26, \"text\": \"\\u026e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 27, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 13, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 12, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 27, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 13, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 11, \"text\": \"\\u02cb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 26, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 27, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 26, \"text\": \"\\u02cf\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 27, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 24, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 59, \"y\": 24, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 26, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 25, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 26, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 26, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 24, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 24, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 25, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 25, \"text\": \"\\u02cf\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 25, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 26, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 26, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 26, \"text\": \",\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 27, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 26, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 26, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 25, \"text\": \",\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 25, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 26, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 25, \"text\": \",\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 27, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 26, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 27, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 27, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 25, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 24, \"text\": \",\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 24, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 27, \"text\": \",\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 27, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 27, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 25, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 26, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 25, \"text\": \"\\u02cf\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 26, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 25, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 27, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 27, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 26, \"text\": \"\\u02cf\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 26, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 26, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 27, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 25, \"text\": \".\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 25, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 25, \"text\": \"\\u02cf\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 25, \"text\": \"\\u02cf\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 25, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 24, \"text\": \".\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 24, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 24, \"text\": \"\\u02cf\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 24, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 61, \"y\": 27, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 62, \"y\": 27, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 25, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 25, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 27, \"text\": \"\\u026e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 27, \"text\": \"\\u02cf\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 27, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 27, \"text\": \"\\u03b6\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 27, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 27, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 26, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 26, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 26, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 26, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 26, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 25, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 25, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 25, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 25, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 24, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 27, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 26, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 26, \"text\": \"\\u02cf\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 26, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 25, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 27, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 26, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 25, \"text\": \"-\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 25, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 25, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 24, \"text\": \"-\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 24, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 24, \"text\": \"\\u2500\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 24, \"text\": \"\\u2500\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 23, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 24, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 24, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 24, \"text\": \"-\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 24, \"text\": \"\\u02cf\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 24, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 24, \"text\": \"-\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 24, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 25, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 25, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 25, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 25, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 25, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 26, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 26, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 26, \"text\": \"\\u1ef7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 24, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 24, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 24, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 24, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 24, \"text\": \"\\u02cb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 24, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 24, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 24, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 24, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 24, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 24, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 25, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 25, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 25, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 22, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 55, \"y\": 27, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 26, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 24, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 55, \"y\": 25, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 25, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 20, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 21, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 19, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 23, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 26, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 25, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 62, \"y\": 24, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 27, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 25, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 25, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 25, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 26, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 26, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 27, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 27, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 27, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 26, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 26, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 26, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 26, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 26, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 26, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 27, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 27, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 26, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 27, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 27, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 27, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 26, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 26, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 25, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 26, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 27, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 27, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 27, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 26, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 25, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 25, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 25, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 25, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 25, \"text\": \".\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 25, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 25, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 24, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 24, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 24, \"text\": \".\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 24, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 24, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 24, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 24, \"text\": \"\\u02cb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 24, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 24, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 24, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 24, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 24, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 24, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 24, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 24, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 24, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 24, \"text\": \"-\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 24, \"text\": \"\\u02cb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 24, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 24, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 24, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 24, \"text\": \"-\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 24, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 24, \"text\": \"\\u2500\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 24, \"text\": \"\\u2500\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 24, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 24, \"text\": \"-\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 24, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 26, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 26, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 25, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 25, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 25, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 25, \"text\": \"-\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 25, \"text\": \"\\u02cb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 25, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 25, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 25, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 25, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 25, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 25, \"text\": \"\\u02cb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 25, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 25, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 25, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 25, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 26, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 61, \"y\": 24, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 62, \"y\": 26, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 61, \"y\": 25, \"text\": \"\\u02cc\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 23, \"text\": \"\\u02cc\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 61, \"y\": 23, \"text\": \"\\u02cc\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 23, \"text\": \"\\u02cf\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 23, \"text\": \"\\u203f\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 23, \"text\": \"\\u203f\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 23, \"text\": \"\\u2038\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 23, \"text\": \"\\u02db\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 23, \"text\": \"\\u037a\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 23, \"text\": \"\\u00b8\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 23, \"text\": \"\\u03d4\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 23, \"text\": \"\\u03e5\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 23, \"text\": \"\\u2020\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 23, \"text\": \"\\u03ef\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 23, \"text\": \"\\u02db\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 23, \"text\": \"\\u203f\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 23, \"text\": \"\\u00b8\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 23, \"text\": \"\\u00b8\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 23, \"text\": \"\\u0375\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 23, \"text\": \"\\u203f\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 11, \"text\": \"\\u02cf\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 11, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 11, \"text\": \"-\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 11, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 13, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 13, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 13, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 13, \"text\": \"\\u02cb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 13, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 13, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 13, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 14, \"text\": \"\\u02cb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 14, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 14, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 14, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 14, \"text\": \"-\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 14, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 14, \"text\": \".\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 14, \"text\": \"\\u02db\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 14, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 14, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 13, \"text\": \"\\u02db\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 13, \"text\": \"\\u02af\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 13, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 12, \"text\": \"\\u02db\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 12, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 12, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 23, \"text\": \"\\u00b8\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 23, \"text\": \"\\u203f\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 23, \"text\": \"\\u037a\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 23, \"text\": \"\\u2026\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 23, \"text\": \"\\u03b9\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 23, \"text\": \"\\u201e\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 17, \"y\": 23, \"text\": \"\\u2026\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 18, \"y\": 23, \"text\": \"\\u203f\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 19, \"y\": 23, \"text\": \"\\u02db\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 23, \"text\": \"\\u0375\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 23, \"text\": \"\\u00b8\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 23, \"text\": \"\\u0131\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 16, \"y\": 23, \"text\": \".\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 23, \"text\": \"\\u2026\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 23, \"text\": \"\\u03b9\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 23, \"text\": \"\\u203f\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 99, \"y\": 23, \"text\": \"\\u02db\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 104, \"y\": 23, \"text\": \"\\u037a\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 101, \"y\": 23, \"text\": \"\\u201e\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 102, \"y\": 23, \"text\": \"\\u0375\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 100, \"y\": 23, \"text\": \"\\u0131\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 23, \"text\": \"\\u3030\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 23, \"text\": \"\\u203f\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 23, \"text\": \"\\u02de\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 23, \"text\": \"\\u02de\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 23, \"text\": \"\\u203f\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 14, \"y\": 23, \"text\": \"\\u037a\", \"color\": \"28 bold\", \"tags\": [\"grass\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 14, \"text\": \"\\u00b8\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 14, \"text\": \".\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 14, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 14, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 14, \"text\": \"-\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 14, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 14, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 14, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 13, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 13, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 13, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 13, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 13, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 15, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 20, \"text\": \"\\u23aa\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 16, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 12, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 13, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 13, \"text\": \"\\u23ad\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 13, \"text\": \"\\u239d\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 12, \"text\": \"\\u239c\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 11, \"text\": \"\\u239c\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 14, \"text\": \"\\u02cb\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 14, \"text\": \"\\u02ca\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 14, \"text\": \"\\u02d1\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 14, \"text\": \"\\u02ce\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 14, \"text\": \"\\u02cf\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 14, \"text\": \"\\u02d1\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 13, \"text\": \"\\u23a0\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 13, \"text\": \"\\u02cc\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 12, \"text\": \"\\u239f\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 11, \"text\": \"\\u239f\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 13, \"text\": \"/\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 12, \"text\": \"\\u23a0\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 11, \"text\": \"\\u239f\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 10, \"text\": \"\\u23ab\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 11, \"text\": \"/\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 10, \"text\": \"\\u239e\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 19, \"y\": 13, \"text\": \"\\\\\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 9, \"text\": \"\\u239b\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 10, \"text\": \"\\u239c\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 17, \"y\": 10, \"text\": \"\\u239b\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 17, \"y\": 11, \"text\": \"\\u239d\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 18, \"y\": 12, \"text\": \"\\\\\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 18, \"y\": 9, \"text\": \"\\u02cf\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 19, \"y\": 9, \"text\": \"\\u02de\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 8, \"text\": \"_\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 9, \"text\": \"\\u1fed\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 9, \"text\": \"Y\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 9, \"text\": \"\\u23ba\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 10, \"text\": \"\\u23a0\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 10, \"text\": \"\\u239b\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 9, \"text\": \"\\u23ba\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 9, \"text\": \"\\u23bb\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 9, \"text\": \"\\u213d\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 9, \"text\": \"\\u02de\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 10, \"text\": \"\\u239b\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 9, \"text\": \"\\u02d7\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 9, \"text\": \"\\u02ce\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 11, \"text\": \"\\u1fcd\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 11, \"text\": \"\\u1fce\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 11, \"text\": \"\\u2144\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 11, \"text\": \"\\u239e\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 13, \"text\": \"\\u23a9\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 12, \"text\": \"o\", \"color\": \"202 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 12, \"text\": \"o\", \"color\": \"202 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 12, \"text\": \"\\u1fee\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 12, \"text\": \"\\u1fed\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 11, \"text\": \"\\u239b\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 9, \"text\": \"\\u0482\", \"color\": \"117 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 10, \"text\": \"\\u02e3\", \"color\": \"117 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 18, \"y\": 10, \"text\": \"\\u0482\", \"color\": \"117 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 13, \"text\": \".\", \"color\": \"231 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 12, \"text\": \"\\u02da\", \"color\": \"231 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 13, \"text\": \"\\u02da\", \"color\": \"231 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 12, \"text\": \"\\u02d9\", \"color\": \"231 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 13, \"text\": \".\", \"color\": \"231 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 10, \"text\": \"\\u02da\", \"color\": \"231 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 11, \"text\": \"\\u02da\", \"color\": \"231 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 19, \"y\": 10, \"text\": \"\\u02da\", \"color\": \"231 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 18, \"y\": 11, \"text\": \"\\u02d9\", \"color\": \"231 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 10, \"text\": \"\\u02d9\", \"color\": \"231 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 12, \"text\": \".\", \"color\": \"231 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 10, \"text\": \"\\u0482\", \"color\": \"117 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 11, \"text\": \"\\u02e3\", \"color\": \"117 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 10, \"text\": \"\\u02d9\", \"color\": \"231 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 19, \"y\": 12, \"text\": \"\\u02e3\", \"color\": \"117 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 10, \"text\": \"\\u02d9\", \"color\": \"231 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 14, \"text\": \"_\", \"color\": \"40 bold\", \"tags\": [\"snake_0\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 22, \"text\": \"\\u23a0\", \"color\": \"130 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 18, \"text\": \"\\u02db\", \"color\": \"202 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 18, \"text\": \"\\u02db\", \"color\": \"202 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 18, \"text\": \"\\u029b\", \"color\": \"202 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 18, \"text\": \"\\u026e\", \"color\": \"202 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 19, \"text\": \"\\u239d\", \"color\": \"130 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 20, \"text\": \"\\u02d8\", \"color\": \"218 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 23, \"text\": \"\\u1fcf\", \"color\": \"202 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 23, \"text\": \"\\u02ba\", \"color\": \"225 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 21, \"text\": \"\\u02c1\", \"color\": \"225 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 21, \"text\": \"\\u02c0\", \"color\": \"225 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 23, \"text\": \"\\u1fce\", \"color\": \"166 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 19, \"text\": \"\\u239f\", \"color\": \"166 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 19, \"text\": \"\\u02ac\", \"color\": \"166 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 18, \"text\": \"\\u2026\", \"color\": \"166 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 20, \"text\": \"\\u02cb\", \"color\": \"166 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 20, \"text\": \"\\u02ca\", \"color\": \"166 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 23, \"text\": \"\\u201f\", \"color\": \"225 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 22, \"text\": \"\\u239d\", \"color\": \"166 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 21, \"text\": \"\\u239c\", \"color\": \"166 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 20, \"text\": \"\\u239b\", \"color\": \"166 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 22, \"text\": \"\\u239e\", \"color\": \"230 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 22, \"text\": \"\\u239b\", \"color\": \"230 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 21, \"text\": \"\\u239e\", \"color\": \"230 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 21, \"text\": \"\\u239b\", \"color\": \"230 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 21, \"text\": \"\\u239f\", \"color\": \"130 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 23, \"text\": \"\\u203e\", \"color\": \"166 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 23, \"text\": \"\\u203e\", \"color\": \"166 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 20, \"text\": \"\\u2137\", \"color\": \"130 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 18, \"text\": \"\\u1e08\", \"color\": \"202 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 20, \"text\": \"\\u1fd3\", \"color\": \"202 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 21, \"text\": \"\\u1f8f\", \"color\": \"202 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 22, \"text\": \"\\u00ff\", \"color\": \"202 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 17, \"text\": \"\\u1fbe\", \"color\": \"202 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 18, \"text\": \"\\u0105\", \"color\": \"202 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 19, \"text\": \"\\u0284\", \"color\": \"202 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 19, \"text\": \"\\u0385\", \"color\": \"202 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 18, \"text\": \"\\u00b8\", \"color\": \"202 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 19, \"text\": \"\\u0385\", \"color\": \"202 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 20, \"text\": \"\\u02cf\", \"color\": \"166 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 6, \"text\": \"\\u00b0\", \"color\": \"202 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 6, \"text\": \"(\", \"color\": \"214 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 6, \"text\": \"/\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 7, \"text\": \"/\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 12, \"text\": \"\\u00ec\", \"color\": \"189 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 12, \"text\": \"<\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 12, \"text\": \"\\u01b7\", \"color\": \"189 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 11, \"text\": \"\\u01b7\", \"color\": \"189 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 11, \"text\": \"\\u00ec\", \"color\": \"189 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 11, \"text\": \"\\u00b8\", \"color\": \"19 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 6, \"text\": \"\\u203e\", \"color\": \"214 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 6, \"text\": \"\\u203e\", \"color\": \"214 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 6, \"text\": \"\\u203e\", \"color\": \"208 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 6, \"text\": \"\\u02cb\", \"color\": \"202 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 7, \"text\": \"\\u203e\", \"color\": \"202 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 7, \"text\": \"\\u203e\", \"color\": \"202 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 7, \"text\": \"\\u203e\", \"color\": \"196 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 7, \"text\": \"\\u203e\", \"color\": \"196 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 7, \"text\": \"\\u1fcf\", \"color\": \"202 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 6, \"text\": \"\\u03e1\", \"color\": \"202 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 6, \"text\": \"\\u203e\", \"color\": \"214 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 7, \"text\": \"\\u203e\", \"color\": \"202 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 6, \"text\": \"\\u203e\", \"color\": \"208 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 8, \"text\": \"\\u239b\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 9, \"text\": \"\\u239c\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 9, \"text\": \"\\u239e\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 11, \"text\": \"\\u23a0\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 11, \"text\": \"\\u23a9\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 9, \"text\": \"(\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 10, \"text\": \"\\u239e\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 8, \"text\": \"\\u239d\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 7, \"text\": \"\\u239b\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 8, \"text\": \"\\u23a0\", \"color\": \"230 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 8, \"text\": \"_\", \"color\": \"229 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 7, \"text\": \"\\u02bb\", \"color\": \"230 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 8, \"text\": \"\\u239d\", \"color\": \"230 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 10, \"text\": \"\\u23a9\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 5, \"text\": \"_\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 5, \"text\": \"\\u02cd\", \"color\": \"27 bold\", \"tags\": [\"toucan_0\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 16, \"text\": \"\\u00b0\", \"color\": \"94 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 16, \"text\": \"\\u00b0\", \"color\": \"94 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 16, \"text\": \"\\u23a0\", \"color\": \"242 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 16, \"text\": \"\\u239d\", \"color\": \"242 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 15, \"text\": \"\\u2101\", \"color\": \"248 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 15, \"text\": \"\\u2100\", \"color\": \"248 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 16, \"text\": \"\\u1fdf\", \"color\": \"249 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 16, \"text\": \"\\u1fcf\", \"color\": \"249 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 15, \"text\": \"~\", \"color\": \"242 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 15, \"text\": \"\\u02de\", \"color\": \"242 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 15, \"text\": \"\\u02de\", \"color\": \"242 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 17, \"text\": \"\\u2034\", \"color\": \"249 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 17, \"text\": \"\\u2037\", \"color\": \"249 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 16, \"text\": \"\\u15dd\", \"color\": \"240 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 15, \"text\": \"\\u027f\", \"color\": \"240 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 15, \"text\": \"\\u027e\", \"color\": \"240 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 17, \"text\": \"\\u02de\", \"color\": \"240 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 17, \"text\": \"\\u23bc\", \"color\": \"240 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 17, \"text\": \"-\", \"color\": \"240 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 55, \"y\": 17, \"text\": \"\\u3090\", \"color\": \"240 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 18, \"text\": \"\\u23ba\", \"color\": \"248 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 18, \"text\": \"\\u23bb\", \"color\": \"248 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 18, \"text\": \"\\u1fde\", \"color\": \"248 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 17, \"text\": \"\\u239b\", \"color\": \"240 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 19, \"text\": \"\\u026e\", \"color\": \"240 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 20, \"text\": \"\\u1fed\", \"color\": \"248 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 20, \"text\": \"\\u2037\", \"color\": \"248 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 19, \"text\": \"\\u1fed\", \"color\": \"242 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 18, \"text\": \"\\u239b\", \"color\": \"240 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 19, \"text\": \"\\u239d\", \"color\": \"242 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 20, \"text\": \"\\u23ba\", \"color\": \"242 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 20, \"text\": \"\\u1fde\", \"color\": \"242 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 18, \"text\": \"\\u02af\", \"color\": \"240 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 18, \"text\": \"\\u02de\", \"color\": \"248 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 20, \"text\": \"\\u2037\", \"color\": \"248 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 18, \"text\": \"\\u02ce\", \"color\": \"242 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 18, \"text\": \"\\u02cf\", \"color\": \"240 bold\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 17, \"text\": \"\\u02ac\", \"color\": \"\", \"tags\": [\"koala_0\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 18, \"text\": \"\\u239b\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 18, \"text\": \"\\u239e\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 19, \"text\": \"\\u239d\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 19, \"text\": \"\\u23a0\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 20, \"text\": \"\\u23a9\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 20, \"text\": \"\\u23ad\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 20, \"text\": \"\\u2026\", \"color\": \"160 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 21, \"text\": \"\\u1fbd\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 18, \"text\": \"\\u23a0\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 18, \"text\": \"\\u239d\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 18, \"text\": \"\\u239d\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 17, \"text\": \"\\u239c\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 18, \"text\": \"\\u23a0\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 17, \"text\": \"\\u239f\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 21, \"text\": \"\\u23a0\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 20, \"text\": \"/\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 21, \"text\": \"\\u239d\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 20, \"text\": \"\\\\\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 20, \"text\": \"\\u239e\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 19, \"text\": \">\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 20, \"text\": \"\\u239b\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 19, \"text\": \"<\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 17, \"text\": \"\\u23aa\", \"color\": \"15 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 16, \"text\": \"\\u23aa\", \"color\": \"15 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 15, \"text\": \"\\u23aa\", \"color\": \"15 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 14, \"text\": \"\\u0162\", \"color\": \"15 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 18, \"text\": \"\\u0164\", \"color\": \"160 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 21, \"text\": \"\\u02b7\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 19, \"text\": \"_\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 22, \"text\": \"\\u207d\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 21, \"text\": \"\\u1ffe\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 21, \"text\": \"\\u207d\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 17, \"text\": \"\\u208d\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 16, \"text\": \"\\u208d\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 16, \"text\": \"\\u208e\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 17, \"text\": \"\\u208e\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 22, \"text\": \"\\u207e\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 21, \"text\": \"\\u207e\", \"color\": \"19 bold\", \"tags\": [\"spider_0\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 9, \"text\": \"\\u1f78\", \"color\": \"214 bold\", \"tags\": [\"horned-owl_0\", \"squirrel_o\", \"string_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 9, \"text\": \"\\u1f79\", \"color\": \"214 bold\", \"tags\": [\"horned-owl_0\", \"squirrel_o\", \"string_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 10, \"text\": \"\\u02c5\", \"color\": \"59 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 9, \"text\": \"\\u239b\", \"color\": \"166 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 9, \"text\": \"\\u239e\", \"color\": \"166 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 8, \"text\": \"\\u0668\", \"color\": \"130 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 8, \"text\": \"\\u0668\", \"color\": \"130 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 10, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 10, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 10, \"text\": \"\\u1fee\", \"color\": \"230 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 10, \"text\": \"\\u1fed\", \"color\": \"230 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 11, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 12, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 11, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 10, \"text\": \"\\u02ce\", \"color\": \"230 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 10, \"text\": \"\\u02cf\", \"color\": \"230 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 11, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 11, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 12, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 12, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 12, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 14, \"text\": \"\\u02c5\", \"color\": \"230 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 11, \"text\": \"\\u02e3\", \"color\": \"230 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 9, \"text\": \"\\u02c5\", \"color\": \"94 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 8, \"text\": \"\\u00b8\", \"color\": \"94 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 11, \"text\": \"/\", \"color\": \"130 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 11, \"text\": \"\\\\\", \"color\": \"130 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 12, \"text\": \"\\u028d\", \"color\": \"230 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 12, \"text\": \"\\u028d\", \"color\": \"230 bold\", \"tags\": [\"horned-owl_0\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 14, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 13, \"text\": \"\\u02db\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 13, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 13, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 12, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 13, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 13, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 21, \"text\": \"\\u239b\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 21, \"text\": \"\\u239b\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 22, \"text\": \"\\u239d\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 22, \"text\": \"\\u02cf\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 23, \"text\": \"\\u1fed\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 22, \"text\": \"-\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 22, \"text\": \"\\u1ffd\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 22, \"text\": \"\\u1fee\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 22, \"text\": \"\\u1fef\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 21, \"text\": \")\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 22, \"text\": \"\\u02ca\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 22, \"text\": \"\\u02d1\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 21, \"text\": \"\\u203e\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 21, \"text\": \"\\u0269\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 21, \"text\": \"(\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 21, \"text\": \"\\u1f87\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 20, \"text\": \"\\u02ce\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 22, \"text\": \"-\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 22, \"text\": \"\\u23ba\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 22, \"text\": \"\\u23bb\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 22, \"text\": \"\\u027a\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 21, \"text\": \"\\u239f\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 19, \"text\": \"\\u02db\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 20, \"text\": \"\\u00b8\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 21, \"text\": \"\\u239c\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 20, \"text\": \"\\u239c\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 22, \"text\": \"\\\\\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 22, \"text\": \"\\u23bb\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 23, \"text\": \"\\u0668\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 23, \"text\": \"\\u02d1\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 23, \"text\": \"\\u23bc\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 21, \"text\": \"\\u1fed\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 23, \"text\": \"\\u23bc\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 23, \"text\": \"-\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 23, \"text\": \"\\u02ca\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 22, \"text\": \"/\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 21, \"text\": \"\\u239e\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 20, \"text\": \"-\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 20, \"text\": \"\\u02cf\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 20, \"text\": \"\\u02de\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 20, \"text\": \"\\u02ca\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 20, \"text\": \"\\u02ec\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 20, \"text\": \",\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 19, \"text\": \"\\u02db\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 19, \"text\": \"\\u23bd\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 20, \"text\": \"\\u02ce\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 19, \"text\": \"\\u23bd\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 19, \"text\": \"\\u00b8\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 20, \"text\": \"\\u1fed\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 23, \"text\": \"\\u23bc\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 23, \"text\": \"\\u23bc\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 23, \"text\": \"\\u23bc\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 23, \"text\": \"\\u23bc\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 23, \"text\": \"\\u02b2\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 23, \"text\": \"<\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 23, \"text\": \"=\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 23, \"text\": \"=\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 23, \"text\": \"=\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 23, \"text\": \"\\u00b1\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 23, \"text\": \"\\u1fb4\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 23, \"text\": \"=\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 21, \"text\": \"\\u02e3\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 21, \"text\": \"\\u0482\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 22, \"text\": \"\\u02d9\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 22, \"text\": \"\\u0482\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 23, \"text\": \"\\u2026\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 23, \"text\": \"\\u2025\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 23, \"text\": \"\\u2025\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 23, \"text\": \".\", \"color\": \"235\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 21, \"text\": \"\\u239b\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 21, \"text\": \"\\u239b\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 22, \"text\": \"\\u239d\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 22, \"text\": \"\\u02cf\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 23, \"text\": \"\\u1fed\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 22, \"text\": \"-\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 22, \"text\": \"\\u1ffd\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 22, \"text\": \"\\u1fee\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 22, \"text\": \"\\u1fef\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 21, \"text\": \")\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 22, \"text\": \"\\u02ca\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 22, \"text\": \"\\u02d1\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 21, \"text\": \"\\u203e\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 21, \"text\": \"\\u0269\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 21, \"text\": \"(\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 21, \"text\": \"\\u1f87\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 20, \"text\": \"\\u02ce\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 22, \"text\": \"-\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 22, \"text\": \"\\u23ba\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 22, \"text\": \"\\u23bb\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 22, \"text\": \"\\u027a\", \"color\": \"144 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 21, \"text\": \"\\u239f\", \"color\": \"144 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 19, \"text\": \"\\u02db\", \"color\": \"144 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 20, \"text\": \"\\u00b8\", \"color\": \"144 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 21, \"text\": \"\\u239c\", \"color\": \"144 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 20, \"text\": \"\\u239c\", \"color\": \"144 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 22, \"text\": \"\\\\\", \"color\": \"144 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 22, \"text\": \"\\u23bb\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 23, \"text\": \"\\u0668\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 23, \"text\": \"\\u02d1\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 23, \"text\": \"\\u23bc\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 21, \"text\": \"\\u1fed\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 23, \"text\": \"\\u23bc\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 23, \"text\": \"-\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 23, \"text\": \"\\u02ca\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 22, \"text\": \"/\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 21, \"text\": \"\\u239e\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 20, \"text\": \"-\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 20, \"text\": \"\\u02cf\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 20, \"text\": \"\\u02de\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 20, \"text\": \"\\u02ca\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 20, \"text\": \"\\u02ec\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 20, \"text\": \",\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 19, \"text\": \"\\u02db\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 19, \"text\": \"\\u23bd\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 20, \"text\": \"\\u02ce\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 19, \"text\": \"\\u23bd\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 19, \"text\": \"\\u00b8\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 20, \"text\": \"\\u1fed\", \"color\": \"166 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 23, \"text\": \"\\u23bc\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 23, \"text\": \"\\u23bc\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 23, \"text\": \"\\u23bc\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 23, \"text\": \"\\u23bc\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 23, \"text\": \"\\u02b2\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 23, \"text\": \"<\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 23, \"text\": \"=\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 23, \"text\": \"=\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 23, \"text\": \"=\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 23, \"text\": \"\\u00b1\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 23, \"text\": \"\\u1fb4\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 23, \"text\": \"=\", \"color\": \"101 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 21, \"text\": \"\\u02e3\", \"color\": \"94 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 21, \"text\": \"\\u0482\", \"color\": \"94 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 22, \"text\": \"\\u02d9\", \"color\": \"94 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 22, \"text\": \"\\u0482\", \"color\": \"94 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 23, \"text\": \"\\u2026\", \"color\": \"255 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 23, \"text\": \"\\u2025\", \"color\": \"255 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 23, \"text\": \"\\u2025\", \"color\": \"254 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 23, \"text\": \".\", \"color\": \"252 bold\", \"tags\": [\"snail_0\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 58, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 59, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 58, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 55, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 58, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 55, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 10, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 10, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 10, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 10, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 10, \"text\": \"-\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 10, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 10, \"text\": \".\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 9, \"text\": \"\\u00b8\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 9, \"text\": \".\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 9, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 9, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 9, \"text\": \"-\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 9, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 10, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 8, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 8, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 8, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 8, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 8, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 8, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 8, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 61, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 62, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 62, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 62, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 61, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 61, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 105, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 104, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 105, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 99, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 100, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 102, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 103, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 101, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 101, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 102, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 101, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 111, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 110, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 111, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 108, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 109, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 108, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 109, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 106, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 106, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 108, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 103, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 109, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 110, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 102, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 103, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 104, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 105, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 106, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 108, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 109, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 102, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 103, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 107, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 108, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 7, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 7, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 7, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 8, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 8, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 7, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 8, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 8, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 8, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 8, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 8, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 8, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 9, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 9, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 7, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 18, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 17, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 18, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 12, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 13, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 10, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 11, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 15, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 16, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 14, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 8, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 9, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 9, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 10, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 11, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 14, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 15, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 14, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 19, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 19, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 11, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 9, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 10, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 7, \"y\": 3, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 8, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 7, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 8, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 17, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 15, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 16, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 17, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 18, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 19, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 15, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 16, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 7, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 7, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 8, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 8, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 7, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 5, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 7, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 7, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 7, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 7, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 7, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 61, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 62, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 6, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 61, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 62, \"y\": 7, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 7, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 7, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 58, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 59, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 105, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 110, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 111, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 108, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 107, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 18, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 19, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 8, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 1, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 55, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 59, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 100, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 101, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 109, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 107, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 107, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 108, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 102, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 13, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 14, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 15, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 16, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 10, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 110, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 111, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 107, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 17, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 11, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 7, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 0, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 6, \"y\": 0, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 6, \"y\": 1, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 24, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 11, \"y\": 1, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 13, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 16, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 6, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 5, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 14, \"y\": 13, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 14, \"y\": 14, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 14, \"y\": 15, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 15, \"y\": 13, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 16, \"y\": 13, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 15, \"y\": 14, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 16, \"y\": 14, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 17, \"y\": 14, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 13, \"y\": 15, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 12, \"y\": 14, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 12, \"y\": 13, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 13, \"y\": 14, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 11, \"y\": 12, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 12, \"y\": 12, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 12, \"y\": 11, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 11, \"y\": 10, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 10, \"y\": 10, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 10, \"y\": 11, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 11, \"y\": 13, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 12, \"y\": 10, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 14, \"y\": 10, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 13, \"y\": 11, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 14, \"y\": 9, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 14, \"y\": 12, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 15, \"y\": 12, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 15, \"y\": 11, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 17, \"y\": 9, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 16, \"y\": 11, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 13, \"y\": 9, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 15, \"y\": 9, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 11, \"y\": 9, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 12, \"y\": 9, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 13, \"y\": 8, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 14, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 15, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 14, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 14, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 15, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 14, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 14, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 13, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 13, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 13, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 12, \"text\": \"\\u2041\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 13, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 12, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 11, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 11, \"text\": \"\\u2500\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 12, \"text\": \"\\u2500\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 12, \"text\": \"\\u2500\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 12, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 9, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 9, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 9, \"text\": \"\\u02cb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 9, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 9, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 9, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 11, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 10, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 8, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 9, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 10, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 10, \"text\": \"\\u23a7\", \"color\": \"172 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 11, \"text\": \"\\u23a7\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 9, \"text\": \"\\u256d\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 13, \"text\": \"\\u23a9\", \"color\": \"172 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 12, \"text\": \"\\u23a9\", \"color\": \"178 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 14, \"text\": \"\\u2570\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 100, \"y\": 10, \"text\": \"\\u23ab\", \"color\": \"172 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 101, \"y\": 11, \"text\": \"\\u23ab\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 99, \"y\": 9, \"text\": \"\\u256e\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 101, \"y\": 12, \"text\": \"\\u23ad\", \"color\": \"178 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 100, \"y\": 13, \"text\": \"\\u23ad\", \"color\": \"172 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 99, \"y\": 14, \"text\": \"\\u256f\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 11, \"text\": \"\\u203e\", \"color\": \"172 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 11, \"text\": \"\\u23ba\", \"color\": \"172 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 11, \"text\": \"\\u23bb\", \"color\": \"172 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 100, \"y\": 12, \"text\": \"\\u203e\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 12, \"text\": \"\\u203e\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 12, \"text\": \"\\u23ba\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 12, \"text\": \"\\u23bb\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 13, \"text\": \"\\u203e\", \"color\": \"178 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 99, \"y\": 13, \"text\": \"\\u23bb\", \"color\": \"178 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 14, \"text\": \"\\u203e\", \"color\": \"172 bold on -1\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 14, \"text\": \"\\u203e\", \"color\": \"172 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 14, \"text\": \"\\u23ba\", \"color\": \"172 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 14, \"text\": \"\\u23ba\", \"color\": \"172 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 10, \"text\": \"\\u23ba\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 10, \"text\": \"\\u23bb\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 10, \"text\": \"\\u23bb\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 10, \"text\": \"\\u23ba\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 9, \"text\": \"\\u02ca\", \"color\": \"178 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 9, \"text\": \"\\u2500\", \"color\": \"178 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 9, \"text\": \"\\u2500\", \"color\": \"178 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 9, \"text\": \"\\u02cb\", \"color\": \"178 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 8, \"text\": \"\\u0249\", \"color\": \"94 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 8, \"text\": \"\\u23a0\", \"color\": \"172 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 11, \"text\": \"(\", \"color\": \"94 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 11, \"text\": \")\", \"color\": \"94 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 12, \"text\": \"\\u2500\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 12, \"text\": \"\\u2500\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 12, \"text\": \"\\u2500\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 99, \"y\": 12, \"text\": \"\\u23bb\", \"color\": \"214 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 13, \"text\": \"\\u2500\", \"color\": \"178 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 13, \"text\": \"\\u2500\", \"color\": \"178 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 13, \"text\": \"\\u2500\", \"color\": \"178 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 13, \"text\": \"\\u23bb\", \"color\": \"178 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 99, \"y\": 11, \"text\": \"\\u23bb\", \"color\": \"172 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 15, \"text\": \"\\u0296\", \"color\": \"220 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 14, \"text\": \"\\u23aa\", \"color\": \"220 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 13, \"text\": \"\\u0254\", \"color\": \"230 bold\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 13, \"text\": \"c\", \"color\": \"230 bold\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 13, \"text\": \"\\u016d\", \"color\": \"214 bold\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 9, \"text\": \"\\u0254\", \"color\": \"230 bold\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 9, \"text\": \"c\", \"color\": \"230 bold\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 9, \"text\": \"\\u016d\", \"color\": \"214 bold\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 104, \"y\": 14, \"text\": \"\\u0254\", \"color\": \"230 bold\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 102, \"y\": 14, \"text\": \"c\", \"color\": \"230 bold\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 103, \"y\": 14, \"text\": \"\\u016d\", \"color\": \"214 bold\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 15, \"text\": \"\\u0254\", \"color\": \"230 bold\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 15, \"text\": \"c\", \"color\": \"230 bold\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 15, \"text\": \"\\u016d\", \"color\": \"214 bold\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 106, \"y\": 11, \"text\": \"\\u0254\", \"color\": \"230 bold\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 104, \"y\": 11, \"text\": \"c\", \"color\": \"230 bold\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 105, \"y\": 11, \"text\": \"\\u016d\", \"color\": \"214 bold\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 9, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 9, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 9, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 8, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 8, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 7, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 8, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 8, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 7, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 7, \"text\": \"\\u2500\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 7, \"text\": \"\\u2500\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 6, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 6, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 7, \"text\": \"\\u239f\", \"color\": \"172 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 6, \"text\": \"\\u239e\", \"color\": \"172 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 7, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 6, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 13, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 14, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 14, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 13, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 13, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 14, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 14, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 13, \"text\": \"\\u20b0\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 14, \"text\": \"\\u203e\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 13, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 94, \"y\": 5, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 5, \"text\": \"\\u2500\", \"color\": \"94 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 99, \"y\": 5, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 100, \"y\": 5, \"text\": \"\\u2500\", \"color\": \"94 bold\", \"tags\": [\"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 12, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 13, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 21, \"text\": \"\\u23dc\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 14, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 15, \"text\": \"\\u208e\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 15, \"text\": \"!\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 14, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 14, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 21, \"text\": \"\\u203d\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 21, \"text\": \")\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 22, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 16, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 17, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 18, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 18, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 17, \"text\": \"\\u25dc\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 17, \"text\": \"\\u25dd\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 18, \"text\": \"\\u25de\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 18, \"text\": \"(\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 17, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 19, \"text\": \"\\u1fef\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 19, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 62, \"y\": 17, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 16, \"text\": \"\\u02cf\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 14, \"text\": \"\\u239d\", \"color\": \"34 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 14, \"text\": \"\\u239c\", \"color\": \"34 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 13, \"text\": \"\\u239c\", \"color\": \"34 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 12, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 23, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 58, \"y\": 23, \"text\": \"\\u23dc\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 22, \"text\": \"!\", \"color\": \"94 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 23, \"text\": \".\", \"color\": \"94 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 17, \"text\": \"\\u2038\", \"color\": \"94 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 16, \"text\": \"\\u1fbe\", \"color\": \"94 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 20, \"text\": \"\\u207e\", \"color\": \"94 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 58, \"y\": 22, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 55, \"y\": 18, \"text\": \"\\u2034\", \"color\": \"94 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 19, \"text\": \"\\u2134\", \"color\": \"181 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 19, \"text\": \"\\u2134\", \"color\": \"181 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 18, \"text\": \"\\u03eb\", \"color\": \"166 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 18, \"text\": \"\\u03eb\", \"color\": \"166 bold\", \"tags\": [\"squirrel_0\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 13, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 8, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 9, \"text\": \"\\u02db\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 11, \"text\": \"\\u0249\", \"color\": \"94 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 19, \"text\": \"\\u00b8\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 11, \"text\": \"\\u23aa\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 10, \"text\": \"\\u025a\", \"color\": \"94 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 59, \"y\": 22, \"text\": \"\\u02a8\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 8, \"text\": \"\\u02db\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 8, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 8, \"text\": \"\\u2041\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 8, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 7, \"text\": \"-\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 7, \"text\": \"\\u23bc\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 7, \"text\": \".\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 8, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 13, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 15, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 15, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 38, \"y\": 14, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 14, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 9, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 10, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 9, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 9, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 10, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 9, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 10, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 10, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 7, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 7, \"text\": \"\\u23bd\", \"color\": \"94 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 6, \"text\": \"\\u23bd\", \"color\": \"94 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 23, \"y\": 6, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 6, \"text\": \"\\u23bd\", \"color\": \"94 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 19, \"y\": 6, \"text\": \"\\u2500\", \"color\": \"94 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 18, \"y\": 6, \"text\": \"\\u23bb\", \"color\": \"94 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 17, \"y\": 6, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 13, \"y\": 5, \"text\": \"\\u23ba\", \"color\": \"94 bold\", \"tags\": [\"day8\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 21, \"text\": \"#\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 9, \"text\": \"\\u00a2\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 59, \"y\": 13, \"text\": \"Y\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 13, \"text\": \"(\", \"color\": \"94 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 61, \"y\": 13, \"text\": \")\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 58, \"y\": 13, \"text\": \"\\u02cb\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 13, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 59, \"y\": 14, \"text\": \"v\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 14, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 58, \"y\": 14, \"text\": \"\\u02cb\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 59, \"y\": 21, \"text\": \"\\u00bd\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 60, \"y\": 20, \"text\": \"\\u1fbe\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 21, \"text\": \"\\u1fbe\", \"color\": \"94 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 9, \"text\": \"\\u1fbe\", \"color\": \"94 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 21, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 61, \"y\": 22, \"text\": \"\\u03d7\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 61, \"y\": 21, \"text\": \"\\u02db\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 58, \"y\": 11, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 23, \"text\": \"\\u03e1\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 8, \"text\": \"\\u03f0\", \"color\": \"94 bold\", \"tags\": [\"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 11, \"text\": \"\\u1e9b\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 22, \"text\": \"\\u1fbe\", \"color\": \"94 bold\", \"tags\": [\"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 22, \"text\": \"\\u1fbe\", \"color\": \"94 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 58, \"y\": 8, \"text\": \"\\u203d\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 8, \"text\": \"\\u2038\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 62, \"y\": 11, \"text\": \"\\u1fbe\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 55, \"y\": 20, \"text\": \"\\u1fbe\", \"color\": \"94 bold\", \"tags\": [\"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 15, \"text\": \"!\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 57, \"y\": 14, \"text\": \"\\u1fbe\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 80, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 59, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 56, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day7\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 2, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day4\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 104, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 107, \"y\": 2, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 110, \"y\": 3, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"leaf\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 2, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 3, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 4, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 5, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 6, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 7, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 8, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 7, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 7, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 8, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 9, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 10, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 11, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 12, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 13, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 14, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 15, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 16, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 1, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 18, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 19, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 20, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 21, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 22, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 23, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 24, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 25, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 26, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 17, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 1, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 2, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 3, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 4, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 5, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 6, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 7, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 8, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 9, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 10, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 11, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 12, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 13, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 14, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 15, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 16, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 8, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 9, \"text\": \"\\u0249\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 9, \"text\": \"\\u23a9\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 3, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 3, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 5, \"text\": \"\\u23b1\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 5, \"text\": \"\\u23ad\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 1, \"text\": \"\\u0249\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 1, \"text\": \"\\u23a9\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 1, \"text\": \"\\u23ad\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 1, \"text\": \"\\u23b1\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 4, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 4, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 3, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 3, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 5, \"text\": \"\\u23a9\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 5, \"text\": \"\\u0249\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 8, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 8, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 7, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 7, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 9, \"text\": \"\\u23ad\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 9, \"text\": \"\\u23b1\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 16, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 15, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 15, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 16, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 17, \"text\": \"\\u0249\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 17, \"text\": \"\\u23a9\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 12, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 12, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 11, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 11, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 13, \"text\": \"\\u23b1\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 13, \"text\": \"\\u23ad\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 24, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 23, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 23, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 24, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 25, \"text\": \"\\u0249\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 25, \"text\": \"\\u23a9\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 20, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 20, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 19, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 19, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 21, \"text\": \"\\u23b1\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 21, \"text\": \"\\u23ad\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 12, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 12, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 11, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 11, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 13, \"text\": \"\\u23a9\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 13, \"text\": \"\\u0249\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 16, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 16, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 15, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 15, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 17, \"text\": \"\\u23ad\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 17, \"text\": \"\\u23b1\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 20, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 20, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 19, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 19, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 21, \"text\": \"\\u23a9\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 21, \"text\": \"\\u0249\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 24, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 24, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 23, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 23, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 25, \"text\": \"\\u23ad\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 25, \"text\": \"\\u23b1\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 17, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 18, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 19, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 20, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 21, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 22, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 23, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 24, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 25, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 26, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 28, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 28, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 27, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 27, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 29, \"text\": \"\\u23a9\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 29, \"text\": \"\\u0249\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 27, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 28, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 29, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 30, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 27, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 28, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 29, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 30, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 28, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 28, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 27, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 27, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 29, \"text\": \"\\u23b1\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 29, \"text\": \"\\u23ad\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 2, \"text\": \"\\u23a7\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 10, \"text\": \"\\u23a7\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 18, \"text\": \"\\u23a7\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 26, \"text\": \"\\u23a7\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 6, \"text\": \"\\u23ab\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 14, \"text\": \"\\u23ab\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 22, \"text\": \"\\u23ab\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 30, \"text\": \"\\u23ab\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 2, \"text\": \"\\u23ab\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 10, \"text\": \"\\u23ab\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 18, \"text\": \"\\u23ab\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 26, \"text\": \"\\u23ab\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 6, \"text\": \"\\u23a7\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 14, \"text\": \"\\u23a7\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 22, \"text\": \"\\u23a7\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 30, \"text\": \"\\u23a7\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 9, \"text\": \"-\", \"color\": \"214 bold\", \"tags\": [\"horned-owl_1\", \"day4\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 78, \"y\": 9, \"text\": \"-\", \"color\": \"214 bold\", \"tags\": [\"horned-owl_1\", \"day4\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 49, \"y\": 16, \"text\": \"\\u02cb\", \"color\": \"94 bold\", \"tags\": [\"koala_1\", \"day5\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 51, \"y\": 16, \"text\": \"\\u02ca\", \"color\": \"94 bold\", \"tags\": [\"koala_1\", \"day5\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 30, \"y\": 20, \"text\": \"\\u23a0\", \"color\": \"166 bold\", \"tags\": [\"squirrel_1\", \"day6\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 29, \"y\": 21, \"text\": \"\\u02c1\", \"color\": \"225 bold\", \"tags\": [\"squirrel_1\", \"day6\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 30, \"y\": 21, \"text\": \"\\u02de\", \"color\": \"230 bold\", \"tags\": [\"squirrel_1\", \"day6\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 32, \"y\": 21, \"text\": \"\\u2036\", \"color\": \"230 bold\", \"tags\": [\"squirrel_1\", \"day6\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 31, \"y\": 21, \"text\": \"\\u02ca\", \"color\": \"230 bold\", \"tags\": [\"squirrel_1\", \"day6\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 24, \"y\": 14, \"text\": \"\\u2144\", \"color\": \"160 bold\", \"tags\": [\"snake_1\", \"day8\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 42, \"y\": 6, \"text\": \"\\u02c9\", \"color\": \"202 bold\", \"tags\": [\"toucan_1\", \"day7\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 70, \"y\": 21, \"text\": \"\\\\\", \"color\": \"19 bold\", \"tags\": [\"spider_1\", \"day3\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 74, \"y\": 21, \"text\": \"/\", \"color\": \"19 bold\", \"tags\": [\"spider_1\", \"day3\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 71, \"y\": 22, \"text\": \"\\u1fef\", \"color\": \"19 bold\", \"tags\": [\"spider_1\", \"day3\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 73, \"y\": 22, \"text\": \"\\u1ffd\", \"color\": \"19 bold\", \"tags\": [\"spider_1\", \"day3\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 97, \"y\": 21, \"text\": \"\\u02db\", \"color\": \"235\", \"tags\": [\"snail_1\", \"day2\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 95, \"y\": 21, \"text\": \"\\u00b8\", \"color\": \"235\", \"tags\": [\"snail_1\", \"day2\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 97, \"y\": 21, \"text\": \"\\u02db\", \"color\": \"144 bold\", \"tags\": [\"snail_1\", \"day2\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 95, \"y\": 21, \"text\": \"\\u00b8\", \"color\": \"144 bold\", \"tags\": [\"snail_1\", \"day2\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 91, \"y\": 14, \"text\": \"\\u0254\", \"color\": \"230 bold\", \"tags\": [\"beehive_1\", \"day1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 89, \"y\": 14, \"text\": \"c\", \"color\": \"230 bold\", \"tags\": [\"beehive_1\", \"day1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 90, \"y\": 14, \"text\": \"\\u016d\", \"color\": \"214 bold\", \"tags\": [\"beehive_1\", \"day1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 92, \"y\": 9, \"text\": \"\\u0254\", \"color\": \"230 bold\", \"tags\": [\"beehive_1\", \"day1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 90, \"y\": 9, \"text\": \"c\", \"color\": \"230 bold\", \"tags\": [\"beehive_1\", \"day1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 91, \"y\": 9, \"text\": \"\\u016d\", \"color\": \"214 bold\", \"tags\": [\"beehive_1\", \"day1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 104, \"y\": 13, \"text\": \"\\u0254\", \"color\": \"230 bold\", \"tags\": [\"beehive_1\", \"day1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 102, \"y\": 13, \"text\": \"c\", \"color\": \"230 bold\", \"tags\": [\"beehive_1\", \"day1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 103, \"y\": 13, \"text\": \"\\u016d\", \"color\": \"214 bold\", \"tags\": [\"beehive_1\", \"day1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 99, \"y\": 15, \"text\": \"\\u0254\", \"color\": \"230 bold\", \"tags\": [\"beehive_1\", \"day1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 97, \"y\": 15, \"text\": \"c\", \"color\": \"230 bold\", \"tags\": [\"beehive_1\", \"day1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 98, \"y\": 15, \"text\": \"\\u016d\", \"color\": \"214 bold\", \"tags\": [\"beehive_1\", \"day1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 105, \"y\": 11, \"text\": \"\\u0254\", \"color\": \"230 bold\", \"tags\": [\"beehive_1\", \"day1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 103, \"y\": 11, \"text\": \"c\", \"color\": \"230 bold\", \"tags\": [\"beehive_1\", \"day1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 104, \"y\": 11, \"text\": \"\\u016d\", \"color\": \"214 bold\", \"tags\": [\"beehive_1\", \"day1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 19, \"y\": 28, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 19, \"y\": 29, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 28, \"text\": \",\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 29, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 30, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 31, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 20, \"y\": 32, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 28, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 30, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 31, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 21, \"y\": 32, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 22, \"y\": 28, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 29, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 25, \"y\": 30, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 28, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 29, \"text\": \",\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 30, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 31, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 32, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 26, \"y\": 33, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 28, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 29, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 31, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 32, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 27, \"y\": 33, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 29, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 31, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 32, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 28, \"y\": 33, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 28, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 30, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 31, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 32, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 33, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 34, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 29, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 30, \"y\": 30, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 28, \"text\": \"\\u02cf\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 31, \"y\": 30, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 28, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 32, \"y\": 29, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 28, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 33, \"y\": 29, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 29, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 34, \"y\": 30, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 35, \"y\": 31, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 28, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 29, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 30, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 32, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 33, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 36, \"y\": 34, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 31, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 32, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 33, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 34, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 37, \"y\": 35, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 29, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 30, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 39, \"y\": 31, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 28, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 29, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 30, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 31, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 40, \"y\": 32, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 41, \"y\": 28, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 42, \"y\": 28, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day6\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 31, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 43, \"y\": 32, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 30, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 31, \"text\": \",\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 32, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 33, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 34, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 44, \"y\": 35, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 30, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 31, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 33, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 34, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 45, \"y\": 35, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 29, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 31, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 33, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 34, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 46, \"y\": 35, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 28, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 30, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 32, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 33, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 34, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 35, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 47, \"y\": 36, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 29, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 31, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 48, \"y\": 32, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 28, \"text\": \",\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 30, \"text\": \"\\u02cf\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 49, \"y\": 32, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 28, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 30, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 50, \"y\": 31, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 28, \"text\": \"\\u03b6\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 29, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 30, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 51, \"y\": 31, \"text\": \"\\u1fee\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 31, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 52, \"y\": 32, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 53, \"y\": 33, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 28, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 29, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 30, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 31, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 32, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 34, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 35, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 54, \"y\": 36, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 55, \"y\": 33, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 55, \"y\": 34, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 55, \"y\": 35, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 55, \"y\": 36, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 55, \"y\": 37, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day5\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 28, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 33, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 34, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 35, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 36, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 63, \"y\": 37, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 29, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 30, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 31, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 32, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 34, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 35, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 64, \"y\": 36, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 65, \"y\": 33, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 31, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 66, \"y\": 32, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\", \"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 28, \"text\": \"\\u026e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 29, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 30, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 67, \"y\": 31, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 28, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 30, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 68, \"y\": 31, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 28, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 30, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 69, \"y\": 32, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 29, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 31, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 70, \"y\": 32, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 28, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 30, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 32, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 33, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 34, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 35, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 71, \"y\": 36, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 29, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 31, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 33, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 34, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 72, \"y\": 35, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 30, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 31, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 33, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 34, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 73, \"y\": 35, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 30, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 31, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 32, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 33, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 34, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 74, \"y\": 35, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 31, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 75, \"y\": 32, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 76, \"y\": 28, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 77, \"y\": 28, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 28, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 29, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 30, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 31, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 78, \"y\": 32, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 29, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 30, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 79, \"y\": 31, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day3\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 31, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 32, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 33, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 34, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 81, \"y\": 35, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 28, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 29, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 30, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 32, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 33, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 82, \"y\": 34, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 83, \"y\": 31, \"text\": \"/\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 29, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 84, \"y\": 30, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 28, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 85, \"y\": 29, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 28, \"text\": \"\\u00b7\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 86, \"y\": 29, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 28, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 87, \"y\": 30, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 29, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 30, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 28, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 30, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 31, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 32, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 33, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 34, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 29, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 31, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 32, \"text\": \"\\u239f\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 33, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 28, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 29, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 31, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 32, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 33, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 28, \"text\": \"_\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 29, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 30, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 31, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 32, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 33, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 29, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 30, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day2\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 28, \"text\": \"\\u1fed\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 28, \"text\": \"\\u02de\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 30, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 31, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 32, \"text\": \"\\\\\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 28, \"text\": \"\\u02ce\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 29, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 30, \"text\": \"\\u239b\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 31, \"text\": \"\\u239c\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 32, \"text\": \"\\u239d\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 99, \"y\": 28, \"text\": \"\\u239e\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 99, \"y\": 29, \"text\": \"\\u23a0\", \"color\": \"94 bold\", \"tags\": [\"tree\", \"day1\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 0, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 0, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 0, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 31, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 32, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 31, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 31, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 32, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 33, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 34, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 35, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 36, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 37, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 38, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 39, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 40, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 42, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 43, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 44, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 45, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 46, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 47, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 48, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 49, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 0, \"y\": 41, \"text\": \"\\u23aa\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 32, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 33, \"text\": \"\\u0249\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 33, \"text\": \"\\u23a9\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 40, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 39, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 39, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 40, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 41, \"text\": \"\\u0249\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 41, \"text\": \"\\u23a9\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 36, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 36, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 35, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 35, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 37, \"text\": \"\\u23b1\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 37, \"text\": \"\\u23ad\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 48, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 47, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 47, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 48, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 3, \"y\": 49, \"text\": \"\\u0249\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 49, \"text\": \"\\u23a9\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 44, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 44, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 43, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 43, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 1, \"y\": 45, \"text\": \"\\u23b1\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 45, \"text\": \"\\u23ad\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 34, \"text\": \"\\u23a7\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 42, \"text\": \"\\u23a7\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 38, \"text\": \"\\u23ab\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 2, \"y\": 46, \"text\": \"\\u23ab\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 0, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 0, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 0, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 31, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 32, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 33, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 34, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 35, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 36, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 37, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 38, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 39, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 40, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 32, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 32, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 31, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 31, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 33, \"text\": \"\\u23ad\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 33, \"text\": \"\\u23b1\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 36, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 36, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 35, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 35, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 37, \"text\": \"\\u23a9\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 37, \"text\": \"\\u0249\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 40, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 40, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 39, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 39, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 41, \"text\": \"\\u23ad\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 41, \"text\": \"\\u23b1\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 44, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 44, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 43, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 43, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 45, \"text\": \"\\u23a9\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 117, \"y\": 45, \"text\": \"\\u0249\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 48, \"text\": \"\\u239d\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 48, \"text\": \"\\u23a0\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 47, \"text\": \"\\u239b\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 47, \"text\": \"\\u239e\", \"color\": \"28 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 49, \"text\": \"\\u23ad\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 115, \"y\": 49, \"text\": \"\\u23b1\", \"color\": \"94 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 41, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 42, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 43, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 44, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 45, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 46, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 47, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 48, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 118, \"y\": 49, \"text\": \"\\u239f\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 34, \"text\": \"\\u23ab\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 42, \"text\": \"\\u23ab\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 38, \"text\": \"\\u23a7\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 116, \"y\": 46, \"text\": \"\\u23a7\", \"color\": \"214 bold\", \"tags\": [\"day0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 8, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 8, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 8, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 93, \"y\": 8, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 13, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 14, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 89, \"y\": 14, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 90, \"y\": 14, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 91, \"y\": 14, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 14, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 92, \"y\": 13, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 15, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 16, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 96, \"y\": 16, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 97, \"y\": 16, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 98, \"y\": 16, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 99, \"y\": 16, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 99, \"y\": 15, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 100, \"y\": 15, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 101, \"y\": 15, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 102, \"y\": 15, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 103, \"y\": 15, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 104, \"y\": 15, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 105, \"y\": 15, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 106, \"y\": 14, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 105, \"y\": 14, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 105, \"y\": 13, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 101, \"y\": 13, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 102, \"y\": 13, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 103, \"y\": 13, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 104, \"y\": 13, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 106, \"y\": 13, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 102, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 103, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 104, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 105, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 106, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 107, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 108, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 108, \"y\": 11, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 107, \"y\": 11, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 106, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 107, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 105, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 104, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 103, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 102, \"y\": 11, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 103, \"y\": 11, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 88, \"y\": 13, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 89, \"y\": 13, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 90, \"y\": 13, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 91, \"y\": 13, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 92, \"y\": 13, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 92, \"y\": 14, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 92, \"y\": 15, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 91, \"y\": 15, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 90, \"y\": 15, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 89, \"y\": 15, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 88, \"y\": 15, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 88, \"y\": 14, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 89, \"y\": 9, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 89, \"y\": 8, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 90, \"y\": 8, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 91, \"y\": 8, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 92, \"y\": 8, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 93, \"y\": 8, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 93, \"y\": 9, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 92, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 91, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 90, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 89, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 102, \"y\": 11, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 102, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 103, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 104, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 105, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 106, \"y\": 10, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 106, \"y\": 11, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 102, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 103, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 104, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 105, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 106, \"y\": 12, \"text\": \"\", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 106, \"y\": 12, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 105, \"y\": 13, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 105, \"y\": 14, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 104, \"y\": 14, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 103, \"y\": 14, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 102, \"y\": 14, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 101, \"y\": 14, \"text\": \"\", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 101, \"y\": 13, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 101, \"y\": 14, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 96, \"y\": 15, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 100, \"y\": 15, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 100, \"y\": 16, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 99, \"y\": 16, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 98, \"y\": 16, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 97, \"y\": 16, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 96, \"y\": 16, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 90, \"y\": 9, \"text\": \" \", \"color\": \"\", \"tags\": [\"day1\", \"beehive_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 29, \"y\": 21, \"text\": \" \", \"color\": \"\", \"tags\": [\"day6\", \"squirrel_0\"], \"group\": \"\", \"frame\": \"\"}\n{\"x\": 95, \"y\": 20, \"text\": \" \", \"color\": \"\", \"tags\": [\"day2\", \"snail_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 97, \"y\": 20, \"text\": \" \", \"color\": \"\", \"tags\": [\"day2\", \"snail_1\"], \"group\": \"\", \"frame\": \"on2\"}\n{\"x\": 97, \"y\": 19, \"text\": \" \", \"color\": \"\", \"tags\": [\"day2\", \"snail_1\"], \"group\": \"\", \"frame\": \"on2\"}\n"
  },
  {
    "path": "visidata/experimental/noahs_tapestry/tapestry.py",
    "content": "import json\nimport time\nimport collections\nimport random\nfrom functools import cached_property\nfrom base64 import b64encode\n\nfrom visidata import vd, VisiData, Canvas, Animation, Path, asyncthread, clipdraw, colors, ItemColumn, Sheet, wraptext\n\nvd.theme_option('color_hint', 'black on yellow', '')\n\n@VisiData.api\ndef getNoahsPath(vd, name):\n    return Path(vd.pkg_resources_files('visidata')/f'experimental/noahs_tapestry/{name}')\n\n@VisiData.api\ndef openNoahsText(vd, name):\n    return vd.getNoahsPath(name).open(encoding='utf-8')\n\n@VisiData.cached_property\ndef noahsDatabase(vd):\n    return vd.open_sqlite(vd.getNoahsPath('noahs.sqlite'))\n\nclass NoahsPuzzle(Sheet):\n    guide = '''\n        # Puzzle {sheet.puznum}\n        - `Shift+A` to input a solution to the puzzle\n        - `Shift+Y` to attempt the current cell as the solution\n        - `Shift+B` to open Noah's Database Backup\n        - `Shift+V` to view Noah's Tapestry\n    '''\n    rowtype = 'lines'  # rowdef: [linenum, text]\n    filetype = 'txt'\n    columns = [\n        ItemColumn('linenum', 0, type=int, width=0),\n        ItemColumn('text', 1, width=80, displayer='full'),\n    ]\n    precious = False\n\n    def iterload(self):\n        clues = json.loads(vd.getNoahsPath(f'clues.json').read_text())\n        source = vd.getNoahsPath(f'puzzle{self.puznum}.md')\n        winWidth = 78\n        formatted_text = source.open(encoding='utf-8').read().format(**clues)\n        for startingLine, text in enumerate(formatted_text.splitlines()):\n            text = text.strip()\n            if text:\n                for i, (L, _) in enumerate(wraptext(str(text), width=winWidth)):\n                    yield [startingLine+i+1, L]\n            else:\n                yield [startingLine+1, text]\n\n@VisiData.cached_property\ndef noahsSolutions(vd):\n    return json.loads(vd.getNoahsPath(f'solutions.json').read_text())\n\n@VisiData.api\ndef solve_puzzle(vd, answer):\n    puznum = vd.noahsCurrentPuznum\n    if b64encode(answer.encode()).decode() != vd.noahsSolutions[f'p{puznum}']:\n        vd.fail(\"Hmmm, that doesn't seem right. Try again?\")\n\n    vd.noahsTapestry.solved.add(puznum)\n    vd.status(f'Correct! The candle is now lit.')\n    vd.push(vd.noahsTapestry)\n\n\nclass Tapestry(Canvas):\n    @property\n    def guide(self):\n        ret = ''\n        if vd.screenWidth < 120 or vd.screenHeight < 50:\n            ret = f'''\n            # [:black on yellow]WARNING: TERMINAL TOO SMALL[/]\n            Please expand your terminal to at least 120x50 (currently {vd.screenWidth}x{vd.screenHeight})\n        '''\n\n        ret += '''\n            # Noah's Tapestry\n            An interactive data game\n\n            - `Shift+N` to open the next puzzle\n        '''\n\n        return ret\n\n    solved = set()\n    def reload(self):\n        self.noahs_menorah = Animation(vd.openNoahsText('menorah.ddw'))\n        self.noahs_tapestry = Animation(vd.openNoahsText('tapestry.ddw'))\n        self.noahs_flame = Animation(vd.openNoahsText('flame.ddw'))\n        self.solved = set()\n\n#        self.keep_running()\n\n    @asyncthread\n    def keep_running(self):\n        while True:\n            time.sleep(1)\n\n    def draw(self, scr):\n        solvedays = ['menorah']+[f'day{i}' for i in self.solved]\n        t = time.time()\n        self.noahs_menorah.draw(scr, t=0, y=30, x=19)\n        if not self.solved:\n            clipdraw(scr, 22, 52, \"Light the [:italic]shamash[/]\", colors['255'])\n            return\n\n        self.noahs_menorah.draw(scr, t=0.1, y=30, x=19, tags=solvedays)\n        self.noahs_tapestry.draw(scr, t=t, tags=solvedays)\n\n        for i in self.solved:\n            xs = [58, 22+9*8, 22+9*7, 22+9*6, 22+9*5, 22+27, 22+18, 22+9, 22, 22]\n            ys = [28, 32, 32, 32, 32, 32, 32, 32, 32, 32]\n            x = xs[i]\n            y = ys[i]\n\n            self.noahs_flame.draw(scr, t=t+(i+random.random())*0.2, y=y, x=x)\n\n    def open_puzzle(self, puznum=None):\n        if puznum is None:\n            puznum = 0\n            if self.solved:\n                puznum = max(self.solved)+1\n\n        vs = NoahsPuzzle('puzzle', str(puznum), source=self, puznum=puznum)\n        vs.ensureLoaded()\n        vd.noahsCurrentPuznum = puznum\n        return vs\n\n\n@VisiData.lazy_property\ndef noahsTapestry(vd):\n    vd.curses_timeout = 50\n    return Tapestry('noahs', 'tapestry')\n\n\nNoahsPuzzle.options.color_default = '178 yellow on 232 black'\n\nvd.addCommand('Shift+B', 'open-noahs-database', 'vd.push(noahsDatabase)', \"open database for Noah's Tapestry\")\nvd.addCommand('Shift+V', 'open-noahs-tapestry', 'vd.push(noahsTapestry)', \"open Noah's Tapestry\")\nTapestry.addCommand('Shift+N', 'open-puzzle-next', 'vd.push(open_puzzle())', 'open next unsolved puzzle')\nNoahsPuzzle.addCommand('Shift+A', 'solve-puzzle-input', 'solve_puzzle(input(\"Answer: \"))', 'input an answer to the current puzzle')\nSheet.addCommand('Shift+Y', 'solve-puzzle-cell', 'solve_puzzle(cursorValue)', 'input an answer to the current puzzle')\nfor i in range(9):\n    Tapestry.addCommand(f'{i}', f'open-puzzle-{i}', f'vd.push(open_puzzle({i}))')\n    Tapestry.addCommand(f'Alt+{i}', f'solve-puzzle-force-{i}', f'sheet.solved.add({i})')\n"
  },
  {
    "path": "visidata/experimental/rownum.py",
    "content": "from visidata import *\nfrom functools import wraps, partial\n\n\n@asyncthread\n@Sheet.api\ndef calcRowIndex(sheet, indexes):\n    for rownum, r in enumerate(sheet.rows):\n        indexes[sheet.rowid(r)] = rownum\n\n\n@Sheet.lazy_property\ndef _rowindex(sheet):\n    ret = {}\n    sheet.calcRowIndex(ret)\n    return ret\n\n\n@Sheet.api\ndef rowindex(sheet, row):\n    'Returns the rowindex given the row.  May spawn a thread to compute underlying _rowindex.'\n    return sheet._rowindex.get(sheet.rowid(row))\n\n\n@Sheet.api\ndef prev(sheet, row):\n    'Return the row previous to the given row.'\n    rownum = max(sheet.rowindex(row)-1, 0)\n    return LazyComputeRow(sheet, sheet.rows[rownum])\n\n\n@Sheet.api\ndef addcol_rowindex(sheet, newcol):\n    oldAddRow = sheet.addRow\n    def rownum_addRow(sheet, col, row, index=None):\n        if index is None:\n            index = len(sheet.rows)\n\n        col._rowindex[sheet.rowid(row)] = index\n        return oldAddRow(row, index)\n\n    # wrapper addRow to keep the index up to date\n    sheet.addRow = wraps(oldAddRow)(partial(rownum_addRow, sheet, newcol))\n    sheet.addColumnAtCursor(newcol)\n\n    # spawn a little thread to calc the rowindex\n    sheet.calcRowIndex(newcol._rowindex)\n\n\n@Sheet.api\ndef addcol_delta(sheet, vcolidx):\n    col = sheet.visibleCols[vcolidx]\n\n    newcol = ColumnExpr(\"delta_\"+col.name,\n                   type=col.type,\n                   _rowindex={},    # [rowid(row)] -> rowidx\n                   expr=\"{0}-prev(row).{0}\".format(col.name))\n\n    sheet.addcol_rowindex(newcol)\n    return newcol\n\n@Sheet.api\ndef addcol_rownum(sheet):\n    newcol = Column(\"rownum\",\n               type=int,\n               _rowindex={},    # [rowid(row)] -> rowidx\n               getter=lambda col,row: col._rowindex.get(col.sheet.rowid(row)))\n\n    sheet.addcol_rowindex(newcol)\n    return newcol\n\nSheet.addCommand(None, 'addcol-rownum', 'addcol_rownum()', helpstr='add column with original row ordering')\nSheet.addCommand(None, 'addcol-delta', 'addcol_delta(cursorVisibleColIndex)', helpstr='add column with delta of current column')\n"
  },
  {
    "path": "visidata/experimental/slide_cells.py",
    "content": "'''\n# TODO:\n- slide-cells-left\n- slide-cells-<dir>-n\n- slide-cells-selected-<dir>-n\n- rename \"slide\" to \"shift\"?\n'''\n\nfrom visidata import vd, TableSheet\n\n\n@TableSheet.api\ndef slide_cells_right(sheet, row, vcolidx):\n    for oldcol, newcol in reversed(list(zip(sheet.visibleCols[vcolidx:], sheet.visibleCols[vcolidx+1:]))):\n        newcol.setValue(row, oldcol.getValue(row))\n\n    sheet.visibleCols[vcolidx].setValue(row, None)\n\n\nTableSheet.addCommand('', 'slide-cells-right', 'slide_cells_right(cursorRow, cursorVisibleColIndex)', '''\nShift individual values in current row one visible column to the right, with leftmost cell set to null.\n''')\n\nvd.addMenuItems('''\n    Edit > Slide > cells > right > slide-cells-right\n''')\n"
  },
  {
    "path": "visidata/experimental/sort_selected.py",
    "content": "from copy import copy\nfrom visidata import vd, Sheet, Progress, asyncthread, options, UNLOADED\n\n@Sheet.api\n@asyncthread\ndef sortSelected(self, ordering):\n    \"\"\"sort the rows that are selected, in place so that each originally-selected row takes the place of another.\n    *ordering* is a list of tuples: (col_name_str, reverse_sort_bool) (string and bool)\"\"\"\n    if self.rows is UNLOADED or not self.rows:\n        return\n    if self.nSelectedRows == 0:\n        vd.fail('no rows selected')\n        return\n\n    if options.undo:\n        vd.status('undo added')\n        vd.addUndo(setattr, self, 'rows', copy(self.rows))\n\n# temporary:  save data to test integrity after the sort\n    rows_initial = { self.rowid(r) for r in self.rows }\n    selected_initial = set(self._selectedRows.keys())\n\n    with Progress(gerund='sorting', total=self.nSelectedRows) as prog:\n        selected = list(self._selectedRows.values())\n        selected_rowids = set(self._selectedRows.keys())\n\n        selected_indices = []\n        for i, r in enumerate(self.rows):\n            rowid = self.rowid(r)\n            if rowid in selected_rowids:\n                selected_indices.append(i)\n                selected_rowids.remove(rowid)\n            if len(selected_rowids) == 0:\n                break\n        try:\n            def _sortkey(r):\n                prog.addProgress(1)\n                return self.sortkey(r, ordering=ordering)\n            sorted_selected = sorted(selected, key=_sortkey)\n        except TypeError as e:\n            vd.warning('sort incomplete due to TypeError; change column type')\n            vd.exceptionCaught(e, status=False)\n            return\n        for selected_idx, r in zip(selected_indices, sorted_selected, strict=True):\n            self.rows[selected_idx] = r\n\n# temporary:  make sure we haven't lost any rows in the sheet or the selection\n    rows_final = { self.rowid(r) for r in self.rows }\n    selected_final = set(self._selectedRows.keys())\n    assert(rows_initial == rows_final)\n    assert(selected_initial == selected_final)\n\nSheet.addCommand(None, 'sort-selected-asc', 'sortSelected([(cursorCol, False)])', 'sort selected rows by the current column, in ascending order')\nSheet.addCommand(None, 'sort-selected-desc', 'sortSelected([(cursorCol, True)])', 'sort selected rows by the current column, in descending order')\n"
  },
  {
    "path": "visidata/experimental/vimcompat.py",
    "content": "\"\"\"Additional vim-like bindings for Visidata\n\nEnable in .visidatarc with `import visidata.experimental.vimcompat`.\n\"\"\"\n\nfrom visidata import BaseSheet\n\n# Jump to first row and column with 'go'\nBaseSheet.bindkey('go', 'go-home')\n\n# standard half-page movement\nBaseSheet.bindkey('Ctrl+D', 'go-pagedown-half')\nBaseSheet.bindkey('Ctrl+U', 'go-pageup-half')\n"
  },
  {
    "path": "visidata/expr.py",
    "content": "import time\n\nfrom visidata import Progress, Sheet, Column, asyncthread, vd\n\n\nclass ExprColumn(Column):\n    'Column using *expr* to derive the value from each row.'\n    def __init__(self, name, expr=None, **kwargs):\n        super().__init__(name, **kwargs)\n        self.expr = expr or name\n        self.ncalcs = 0\n        self.totaltime = 0\n        self.maxtime = 0\n\n    def calcValue(self, row):\n        t0 = time.perf_counter()\n        r = self.sheet.evalExpr(self.compiledExpr, row, col=self, curcol=self)\n        t1 = time.perf_counter()\n        self.ncalcs += 1\n        self.maxtime = max(self.maxtime, t1-t0)\n        self.totaltime += (t1-t0)\n        return r\n\n    @property\n    def expr(self):\n        return self._expr\n\n    @expr.setter\n    def expr(self, expr):\n        self.compiledExpr = compile(expr, '<expr>', 'eval') if expr else None\n        self._expr = expr\n\n\nclass CompleteExpr:\n    def __init__(self, sheet=None):\n        self.varnames = []\n        if sheet:\n            self.varnames.extend(sorted(col.name for col in sheet.columns))\n        self.varnames.extend(sorted(x for x in vd.getGlobals()))\n        for c in vd.contexts:\n            self.varnames.extend(sorted(x for x in dir(c)))\n\n    def __call__(self, val, state):\n        i = len(val)-1\n        while val[i:].isidentifier() and i >= 0:\n            i -= 1\n\n        if i < 0:\n            base = ''\n            partial = val\n        elif val[i] == '.':  # no completion of attributes\n            return None\n        else:\n            base = val[:i+1]\n            partial = val[i+1:]\n\n        # Remove unmatching and duplicate completions\n        varnames_dict = {x:None for x in self.varnames if x.startswith(partial)}\n        varnames = list(varnames_dict.keys())\n\n        if not varnames:\n            return val\n\n        return base + varnames[state%len(varnames)]\n\n\n@Column.api\n@asyncthread\ndef setValuesFromExpr(self, rows, expr, **kwargs):\n    'Set values in this column for *rows* to the result of the Python expression *expr* applied to each row.'\n    compiledExpr = compile(expr, '<expr>', 'eval')\n    vd.addUndoSetValues([self], rows)\n    nset = 0\n    for row in Progress(rows, 'setting'):\n        # Note: expressions that are only calculated once, do not need to pass column identity\n        # they can reference their \"previous selves\" once without causing a recursive problem\n        try:\n            v = self.sheet.evalExpr(compiledExpr, row, **kwargs)\n            self.setValue(row, v)\n            nset += 1\n        except Exception as e:\n            vd.exceptionCaught(e)\n\n    self.recalc()\n    vd.status(f'set {nset} values = {expr}')\n\n\n@Sheet.api\ndef inputExpr(self, prompt, *args, **kwargs):\n    return vd.input(prompt, \"expr\", *args, completer=CompleteExpr(self), **kwargs)\n\n\n@Sheet.api\ndef addcol_expr(sheet, expr_input, **kwargs):  # #3022\n    'Parse \"name=expr\" and return an ExprColumn. If no name given, use the expression as the name.'\n    name, expr = expr_input, None\n    eq_idx = expr_input.find('=')\n    if eq_idx > 0:\n        lhs = expr_input[:eq_idx].strip()\n        rhs = expr_input[eq_idx+1:]\n        if lhs.isidentifier() and rhs and rhs[0] != '=':\n            expr = rhs.strip() or None\n            if expr:\n                name = lhs\n    return ExprColumn(name, expr=expr, **kwargs)\n\n\nSheet.addCommand('=', 'addcol-expr', 'addColumnAtCursor(addcol_expr(inputExpr(\"new column expr=\"), col=cursorCol, curcol=cursorCol))', 'create new column from Python expression, with column names as variables')\nSheet.addCommand('g=', 'setcol-expr', 'cursorCol.setValuesFromExpr(someSelectedRows, inputExpr(\"set selected=\"), curcol=cursorCol)', 'set current column for selected rows to result of Python expression')\nSheet.addCommand('z=', 'setcell-expr', 'cursorCol.setValues([cursorRow], evalExpr(inputExpr(\"set expr=\"), row=cursorRow, curcol=cursorCol))', 'evaluate Python expression on current row and set current cell with result of Python expression')\nSheet.addCommand('gz=', 'setcol-iter', 'cursorCol.setValues(someSelectedRows, *list(itertools.islice(eval(input(\"set column= \", \"expr\", completer=CompleteExpr())), len(someSelectedRows))))', 'set current column for selected rows to the items in result of Python sequence expression')\nSheet.addCommand('', 'addcol-iter', 'iter_expr=inputExpr(\"new column iterator expr: \"); it = eval(iter_expr, getGlobals()); c=SettableColumn(); addColumnAtCursor(c); c.setValues(rows, *it)', 'add column with values from a Python sequence expression, repeating it if needed to fill')\n\nSheet.addCommand(None, 'show-expr', 'status(evalExpr(inputExpr(\"show expr=\"), row=cursorRow, curcol=cursorCol))', 'evaluate Python expression on current row and show result on status line')\n\nvd.addGlobals(\n    ExprColumn=ExprColumn,\n    ColumnExpr=ExprColumn,\n    CompleteExpr=CompleteExpr,\n)\n\nvd.addMenuItems('''\n    Edit > Modify > current cell > Python expression > setcell-expr\n    Edit > Modify > selected cells > Python sequence > setcol-expr\n    Column > Add column > Python expr > addcol-expr\n''')\n"
  },
  {
    "path": "visidata/extensible.py",
    "content": "from functools import wraps, lru_cache\n\n\n__all__ = ['Extensible', 'cache', 'drawcache', 'drawcache_property']\n\nclass Extensible:\n    _cache_clearers = []  # list of func() to call in clearCaches()\n\n    @classmethod\n    def init(cls, membername, initfunc=lambda: None, copy=False):\n        'Prepend equivalent of ``self.<membername> = initfunc()`` to ``<cls>.__init__``.  If *copy* is True, <membername> will be copied when object is copied.'\n\n        def thisclass_hasattr(cls, k):\n            return getattr(cls, k, None) is not getattr(cls.__bases__[0], k, None)\n\n        # must check hasattr first or else this might be parent's __init__\n        oldinit = thisclass_hasattr(cls, '__init__') and getattr(cls, '__init__')\n        def newinit(self, *args, **kwargs):\n            if not hasattr(self, membername):  # can be overridden by a subclass\n                setattr(self, membername, initfunc())\n            if oldinit:\n                oldinit(self, *args, **kwargs)\n            else:\n                super(cls, self).__init__(*args, **kwargs)\n        cls.__init__ = wraps(oldinit)(newinit) if oldinit else newinit\n\n        oldcopy = thisclass_hasattr(cls, '__copy__') and getattr(cls, '__copy__')\n        def newcopy(self, *args, **kwargs):\n            if oldcopy:\n                ret = oldcopy(self, *args, **kwargs)\n            else:\n                ret = super(cls, self).__copy__(*args, **kwargs)\n            setattr(ret, membername, getattr(self, membername) if copy and hasattr(self, membername) else initfunc())\n            return ret\n        cls.__copy__ = wraps(oldcopy)(newcopy) if oldcopy else newcopy\n\n    @classmethod\n    def superclasses(cls):\n        yield cls\n        yield from cls.__bases__\n        for b in cls.__bases__:\n            if hasattr(b, 'superclasses'):\n                yield from b.superclasses()\n\n    @classmethod\n    def api(cls, func):\n        oldfunc = getattr(cls, func.__name__, None)\n        if oldfunc:\n            func = wraps(oldfunc)(func)\n        from visidata import vd\n        func.importingModule = vd.importingModule\n        setattr(cls, func.__name__, func)\n        func._extensible_api = True\n        return func\n\n    @classmethod\n    def before(cls, beforefunc):\n        funcname = beforefunc.__name__\n        oldfunc = getattr(cls, funcname, None)\n        if not oldfunc:\n            setattr(cls, funcname, beforefunc)\n\n        @wraps(oldfunc)\n        def wrappedfunc(*args, **kwargs):\n            beforefunc(*args, **kwargs)\n            return oldfunc(*args, **kwargs)\n\n        setattr(cls,  funcname, wrappedfunc)\n        return wrappedfunc\n\n    @classmethod\n    def after(cls, afterfunc):\n        funcname = afterfunc.__name__\n        oldfunc = getattr(cls, funcname, None)\n        if not oldfunc:\n            setattr(cls, funcname, afterfunc)\n\n        @wraps(oldfunc)\n        def wrappedfunc(*args, **kwargs):\n            r = oldfunc(*args, **kwargs)\n            afterfunc(*args, **kwargs)\n            return r\n\n        setattr(cls,  funcname, wrappedfunc)\n        return wrappedfunc\n\n    @classmethod\n    def class_api(cls, func):\n        '''`@Class.class_api` works much like `@Class.api`, but for class methods. This method is used internally but may not be all that useful for plugin and module authors. Note that `@classmethod` must still be provided, and **the order of multiple decorators is crucial**, in that `@<class>.class_api` must come before `@classmethod`:\n\n::\n        @Sheet.class_api\n        @classmethod\n        def addCommand(cls, ...):\n        '''\n\n        name = func.__get__(None, dict).__func__.__name__\n        oldfunc = getattr(cls, name, None)\n        if oldfunc:\n            func = wraps(oldfunc)(func)\n        func._extensible_api = True\n        setattr(cls, name, func)\n        return func\n\n    @classmethod\n    def property(cls, func):\n        @property\n        @wraps(func)\n        def dofunc(self):\n            return func(self)\n        setattr(cls, func.__name__, dofunc)\n        func._extensible_api = True\n        return dofunc\n\n    @classmethod\n    def lazy_property(cls, func):\n        'Return ``func()`` on first access and cache result; return cached result thereafter.'\n        name = '_' + func.__name__\n        cls.init(name, lambda: None, copy=False)\n        @property\n        @wraps(func)\n        def get_if_not(self):\n            if getattr(self, name, None) is None:\n                setattr(self, name, func(self))\n            return getattr(self, name)\n        setattr(cls, func.__name__, get_if_not)\n        func._extensible_api = True\n        return get_if_not\n\n    @classmethod\n    def cached_property(cls, func):\n        'Return ``func()`` on first access, and cache result; return cached result until ``clearCaches()``.'\n        @property\n        @wraps(func)\n        @lru_cache(maxsize=None)\n        def get_if_not(self):\n            return func(self)\n        setattr(cls, func.__name__, get_if_not)\n        Extensible._cache_clearers.append(get_if_not.fget.cache_clear)\n        return get_if_not\n\n    @classmethod\n    def clear_all_caches(cls):\n        for func in Extensible._cache_clearers:\n            func()\n\n\ndef cache(func):\n    'Return func(...) on first access, and cache result; return cached result until clearCaches().'\n    @wraps(func)\n    @lru_cache(maxsize=None)\n    def call_if_not(self, *args, **kwargs):\n        return func(self, *args, **kwargs)\n    Extensible._cache_clearers.append(call_if_not.cache_clear)\n    return call_if_not\n\n\n# @drawcache is vd alias for @cache, since vd clears it every frame\ndrawcache = cache\n\ndef drawcache_property(func):\n    return property(drawcache(func))\n"
  },
  {
    "path": "visidata/features/__init__.py",
    "content": ""
  },
  {
    "path": "visidata/features/addcol_audiometadata.py",
    "content": "# requirements: mutagen\n\nimport functools\n\nfrom visidata import vd, Column, AttrColumn, DirSheet\n\n\n@functools.lru_cache(None)\ndef get_mutagen_info(path):\n    mutagen = vd.importExternal('mutagen')\n    m = mutagen.File(path)\n    return m.info\n\n\nclass MutagenColumn(AttrColumn):\n    def calcValue(self, r):\n        md = get_mutagen_info(r)\n        return getattr(md, self.expr, None)\n\n\n@DirSheet.api\ndef audiometadata_columns(sheet):\n    return [\n        Column('audio_info', width=0, getter=lambda c,r: get_mutagen_info(r)),\n        MutagenColumn('bitrate'),\n        MutagenColumn('channels'),\n        MutagenColumn('encoder_info'),\n        MutagenColumn('encoder_settings'),\n        MutagenColumn('frame_offset'),\n        MutagenColumn('length'),\n        MutagenColumn('mode'),\n        MutagenColumn('padding'),\n        MutagenColumn('protected'),\n        MutagenColumn('sample_rate'),\n        MutagenColumn('track_gain'),\n    ]\n\n\nDirSheet.addCommand('', 'addcol-audiometadata', 'addColumn(*audiometadata_columns())', 'add metadata columns for audio files (MP3, FLAC, Ogg, etc)')\n\n\nvd.addMenuItems('Column > Add column > audio metadata > addcol-audiometadata')\n"
  },
  {
    "path": "visidata/features/addcol_histogram.py",
    "content": "from visidata import vd, Column, Sheet, asyncthread, Progress\n\n\nclass HistogramColumn(Column):\n    def calcValue(col, row):\n        histogram = col.sheet.options.disp_histogram\n        histolen = (col.width-2)*col.sourceCol.getTypedValue(row)//(col.sourceCol.largest-col.sourceCol.smallest)\n        return histogram*histolen\n\n\n@Sheet.api\ndef addcol_histogram(sheet, col):  #2052\n    newcol = HistogramColumn(col.name+'_histogram', sourceCol=col)\n    col.smallest = None\n    col.largest = None\n    sheet.calc_histogram_bounds(col)\n    return newcol\n\n\n@Sheet.api\n@asyncthread\ndef calc_histogram_bounds(sheet, col):\n    for row in Progress(sheet.rows):\n        v = col.getTypedValue(row)\n        if col.smallest is None or v < col.smallest:\n            col.smallest = v\n        if col.largest is None or v > col.largest:\n            col.largest = v\n\n\nSheet.addCommand('', 'addcol-histogram', 'addColumnAtCursor(addcol_histogram(cursorCol))', 'add column with histogram of current column')\n\n\nvd.addMenuItems('Column > Add column > histogram > addcol-histogram')\n"
  },
  {
    "path": "visidata/features/canvas_save_svg.py",
    "content": "'''\nAdd svg saver to Canvas.\n\nRequires matplotlib.pyplot\n'''\n\n\nimport collections\n\nfrom visidata import VisiData, Canvas, vd, Progress\n\nvd.option('plt_marker', '.', 'matplotlib.markers')\n\n\n@Canvas.api\ndef plot_sheet(self, ax):\n    plt = vd.importExternal('matplotlib.pyplot', 'matplotlib')\n    nerrors = 0\n    nplotted = 0\n\n    self.reset()\n\n    vd.status('loading data points')\n    catcols = [c for c in self.xcols if not vd.isNumeric(c)]\n    numcols = [c for c in self.xcols if vd.isNumeric(c)]\n    for ycol in self.ycols:\n        xpts = collections.defaultdict(list)\n        ypts = collections.defaultdict(list)\n        for rownum, row in enumerate(Progress(self.sourceRows, 'plotting')):  # rows being plotted from source\n            try:\n                k = tuple(c.getValue(row) for c in catcols) if catcols else (ycol.name,)\n\n                # convert deliberately to float (to e.g. linearize date)\n                graph_x = numcols[0].type(numcols[0].getValue(row)) if numcols else rownum\n                graph_y = ycol.type(ycol.getValue(row))\n\n                xpts[k].append(graph_x)\n                ypts[k].append(graph_y)\n\n                nplotted += 1\n            except Exception:\n                nerrors += 1\n                if vd.options.debug:\n                    raise\n        lines = []\n        for k in xpts:\n            line = ax.scatter(xpts[k], ypts[k], label=' '.join(str(x) for x in k), **vd.options.getall('plt_'))\n            lines.append(line)\n\n        ax.legend(handles=lines)\n        ax.set_xlabel(','.join(xcol.name for xcol in self.xcols if vd.isNumeric(xcol)) or 'row#')\n        ax.xaxis.set_major_locator(plt.MaxNLocator(4))\n        ax.yaxis.set_major_locator(plt.MaxNLocator(4))\n\n\n@VisiData.api\ndef save_svg(vd, p, *sheets):\n    plt = vd.importExternal('matplotlib.pyplot', 'matplotlib')\n    fig_, ax = plt.subplots()\n    for vs in sheets:\n        if not isinstance(vs, Canvas):\n            vd.warning(f'{vs.name} not a Canvas')\n            continue\n        vs.plot_sheet(ax)\n\n    ax.grid()\n    ax.set_title('\\n'.join(vs.name for vs in sheets))\n    plt.xticks()\n    plt.savefig(p, format='svg')\n"
  },
  {
    "path": "visidata/features/change_precision.py",
    "content": "__author__ = 'Andy Craig, andycraig (https://github.com/andycraig)'\n\n\nimport re\n\nfrom visidata import vd, Sheet, Column, floatsi, currency, date\n\ndate_fmtstrs = [\n    '%Y',\n    '%Y-%m',\n#    '%Y-W%U',\n    '%Y-%m-%d',\n    '%Y-%m-%d %H',\n    '%Y-%m-%d %H:%M',\n    '%Y-%m-%d %H:%M:%S',\n    '%Y-%m-%d %H:%M:%S.%f',\n]\n\n@Column.api\ndef setcol_precision(col, amount:int):\n    if col.type is date:\n        try:\n            i = date_fmtstrs.index(col.fmtstr)\n        except ValueError:\n            i = 2\n        col.fmtstr = date_fmtstrs[(i+amount)%len(date_fmtstrs)]\n    elif col.type in (float, floatsi, currency):\n        if col.fmtstr == '':\n            col.fmtstr = f'%.{2 + amount}f'\n        else:\n            precision_str = re.match(r'%.([0-9]+)f', col.fmtstr)\n            if not precision_str is None:\n                col.fmtstr = f'%.{max(0, int(precision_str[1]) + amount)}f'\n    else:\n        vd.fail('column type must be numeric or date')\n\n\nvd.addMenuItems('''\n    Column > Set precision > more > setcol-precision-more\n    Column > Set precision > less > setcol-precision-less\n''')\n\nSheet.addCommand('Alt+-', 'setcol-precision-less', 'cursorCol.setcol_precision(-1)', 'show less precision in current column')\nSheet.addCommand('Alt++', 'setcol-precision-more', 'cursorCol.setcol_precision(1)', 'show more precision in current column')\n"
  },
  {
    "path": "visidata/features/cmdpalette.py",
    "content": "import collections\nimport math\nfrom functools import partial\nfrom visidata import DrawablePane, BaseSheet, vd, VisiData, CompleteKey, clipdraw, HelpSheet, colors, AcceptInput, AttrDict, drawcache_property, dispwidth, EscapeException\n\n\nvd.theme_option('color_cmdpalette', 'black on 72', 'base color of command palette')\nvd.theme_option('disp_cmdpal_max', 10, 'max number of suggestions for command palette')\n\nvd.help_longname = '''# Choose Command\nStart typing a command longname or keyword in its helpstring.\n\n- `Enter` to execute top command.\n- `Tab` to highlight top command.\n\n## When Command Highlighted\n\n- `Tab`/`Shift+Tab` to cycle highlighted command.\n- `Enter` to execute highlighted command.\n- `0-9` to execute numbered command.\n'''\n\ndef add_to_input(v, i, value=''):\n    items = list(v.split())\n    if not v or v.endswith(' '):\n        items.append(value)\n    else:\n        items[-1] = value\n    v = ' '.join(items) + ' '\n    return v, len(v)\n\n\ndef accept_input(v, i, value=None):\n    raise AcceptInput(v if value is None else value)\n\ndef accept_input_if_subset(v, i, value=''):\n    # if no input, accept value under cmd palette cursor\n    if not v:\n        raise AcceptInput(value)\n\n    # if the last item is a partial match, replace it with the full value\n    parts = v.split()\n    if value and value.startswith(parts[-1]):\n        v = ' '.join(parts[:-1] + [value])\n\n    raise AcceptInput(v)\n\n@VisiData.lazy_property\ndef usedInputs(vd):\n    return collections.defaultdict(int)\n\n@DrawablePane.after\ndef execCommand2(sheet, cmd, *args, **kwargs):\n    vd.usedInputs[cmd.longname] += 1\n\n@BaseSheet.api\ndef inputPalette(sheet, prompt, items,\n                 value_key='key',\n                 formatter=lambda m, item, trigger_key: f'{trigger_key} {item}',\n                 multiple=False,\n                 x=0, y=0, w=0, h=0,\n                 **kwargs):\n    if not vd.wantsHelp('cmdpalette'):\n        return vd.input(prompt,\n                completer=CompleteKey(sorted(item[value_key] for item in items)),\n                **kwargs)\n\n    bindings = dict()\n\n    #state variables for navigating display of matches\n    prev_value = None\n    tabitem = -1\n    offset = 0\n    def reset_display():\n        nonlocal tabitem, offset\n        tabitem = -1\n        offset = 0\n\n    def tab(n, nitems):\n        nonlocal tabitem\n        if not nitems: return None\n        tabitem = (tabitem + n) % nitems\n\n    def _draw_palette(value):\n        nonlocal prev_value, h, w\n        words = value.split()\n        if value != prev_value:\n            reset_display()\n            prev_value = value\n\n        if multiple and words:\n            if value.endswith(' '):\n                finished_words = words\n                unfinished_words = []\n            else:\n                finished_words = words[:-1]\n                unfinished_words = [words[-1]]\n        else:\n            finished_words = []\n            unfinished_words = words\n\n        unuseditems = [item for item in items if item[value_key] not in finished_words]\n\n        matches = vd.fuzzymatch(unuseditems, unfinished_words)\n\n        h = h or sheet.windowHeight\n        w = w or min(100, sheet.windowWidth)\n        nitems = min(h-3, sheet.options.disp_cmdpal_max)\n        if nitems <= 0:\n            return None\n\n        useditems = []\n        palrows = []\n        n_results = 0\n        def read_matches(offset):\n            nonlocal useditems, palrows, value, n_results\n\n            useditems = []\n            palrows = []\n            for m in matches[offset:offset+nitems]:\n                useditems.append(m.match)\n                palrows.append((m, m.match))\n            n_results += len(matches)\n\n            #List matches only, usually. But list the available choices when there's no input,\n            #or (if multiple is True) they've just pressed space after a word.\n            if not unfinished_words:\n                favitems = sorted([item for item in unuseditems if item not in useditems],\n                                key=lambda item: -vd.usedInputs.get(item[value_key], 0))\n                for item in favitems[offset-len(palrows):offset+nitems-len(palrows)]:\n                    palrows.append((None, item))\n                n_results += len(favitems)\n        read_matches(offset)\n\n        def change_page(dir=+1):\n            nonlocal offset, n_results, nitems\n            new_offset = offset + dir*nitems\n            # constrain offset to be a multiple of nitems\n            new_offset = min(new_offset, ((n_results-1) // nitems)*nitems)\n            new_offset = max(new_offset, 0)\n            if new_offset == offset: return None\n            offset = new_offset\n\n        navailitems = min(len(palrows), nitems)\n\n        bindings['Tab'] = lambda *args: tab(1, navailitems) or args\n        bindings['Shift+Tab'] = lambda *args: tab(-1, navailitems) or args\n        bindings['PgUp'] = lambda *args: (change_page(-1) and read_matches(offset)) or args\n        bindings['PgDn'] = lambda *args: (change_page(+1) and read_matches(offset)) or args\n        for numkey in '1234567890':\n            bindings.pop(numkey, None)\n\n        for i in range(nitems-len(palrows)):\n            palrows.append((None, None))\n\n        if not navailitems:\n            def _enter(v, i):\n                raise EscapeException(f'no choice matching {v}')\n            bindings['Enter'] = _enter\n            bindings.pop(' ', None)\n        pal_cattr = colors.get_color('color_cmdpalette')\n        vd.drawBox(sheet._scr, x, y+h-nitems-3, w, nitems+2, pal_cattr, bottom=False)\n\n        used_triggers = set()\n        for i, (m, item) in enumerate(palrows):\n            trigger_key = ''\n            if tabitem >= 0 and item:\n                tkey = f'{i+1}'[-1]\n                if tkey not in used_triggers:\n                    trigger_key = tkey\n                    bindings[trigger_key] = partial(add_to_input if multiple else accept_input, value=item[value_key])\n                    used_triggers.add(trigger_key)\n\n            attr = colors.color_cmdpalette\n\n            if tabitem < 0 and palrows:\n                _ , topitem = palrows[0]\n                if topitem:\n                    if multiple:\n                        bindings['Enter'] = partial(accept_input_if_subset, value=topitem[value_key])\n                        bindings['Space'] = partial(add_to_input, value=topitem[value_key])\n                    else:\n                        bindings['Enter'] = partial(accept_input, value=topitem[value_key])\n            elif item and i == tabitem:\n                if multiple:\n                    bindings['Enter'] = partial(accept_input_if_subset, value=item[value_key])\n                    bindings['Space'] = partial(add_to_input, value=item[value_key])\n                else:\n                    bindings['Enter'] = partial(accept_input, value=item[value_key])\n                attr = colors.color_menu_spec\n\n            match_summary = formatter(m, item, trigger_key) if item else ' '\n\n            clipdraw(sheet._scr, y+h-nitems-2+i, x+1, match_summary, attr, w=w-2)\n        attr = colors.color_cmdpalette\n        instr = 'Press [:keystrokes]PgUp/PgDn[/] to scroll items, [:keystrokes]Tab/Shift+Tab[/] then [:keystrokes]Enter[/] to choose, [:keystrokes]Esc[/] to cancel.'\n        if dispwidth(instr) < w-2:\n            clipdraw(sheet._scr, h-2, x+1, instr, attr, w=w-2)\n\n        return None\n\n    completer = CompleteKey(sorted(item[value_key] for item in items))\n    return vd.input(prompt,\n            completer=completer,\n            updater=_draw_palette,\n            bindings=bindings,\n            **kwargs)\n\n\ndef cmdlist(sheet):\n    return [\n            AttrDict(longname=row.longname,\n                     description=sheet.cmddict[(row.sheet, row.longname)].helpstr)\n        for row in sheet.rows\n    ]\nHelpSheet.cmdlist = drawcache_property(cmdlist)\n\n\n@BaseSheet.api\ndef inputLongname(sheet):\n    prompt = 'command name: '\n    # get set of commands possible in the sheet\n    this_sheets_help = HelpSheet('', source=sheet)\n    vd.sync(this_sheets_help.ensureLoaded())\n\n    def _fmt_cmdpal_summary(match, row, trigger_key):\n        keystrokes = this_sheets_help.revbinds.get(row.longname, [None])[0] or ' '\n        formatted_longname = match.formatted.get('longname', row.longname) if match else row.longname\n        formatted_name = f'[:bold][:onclick {row.longname}]{formatted_longname}[/][/]'\n        if vd.options.debug and match:\n            keystrokes = f'[{match.score}]'\n        r = f' [:keystrokes]{keystrokes.rjust(dispwidth(prompt)-5)}[/]  '\n        if trigger_key:\n            r += f'[:keystrokes]{trigger_key}[/]'\n        else:\n            r += ' '\n\n        r += f' {formatted_name}'\n        if row.description:\n            formatted_desc = match.formatted.get('description', row.description) if match else row.description\n            r += f' - {formatted_desc}'\n        return r\n\n    return sheet.inputPalette(prompt, this_sheets_help.cmdlist,\n                              value_key='longname',\n                              formatter=_fmt_cmdpal_summary,\n                              help=vd.help_longname,\n                              type='longname')\n\n@BaseSheet.api\ndef inputLongnameSimple(sheet):\n    'Input a command longname without using the command palette.'\n    longnames = set(k for (k, obj), v in vd.commands.iter(sheet))\n    return vd.input(\"command name: \", completer=CompleteKey(sorted(longnames)), type='longname')\n\n\n@BaseSheet.api\ndef exec_longname(sheet, longname):\n    if not sheet.getCommand(longname):\n        vd.fail(f'no command {longname}')\n    sheet.execCommand(longname)\n\n\nvd.addCommand('Space', 'exec-longname', 'exec_longname(inputLongname())', 'execute command by its longname')\nvd.addCommand('zSpace', 'exec-longname-simple', 'exec_longname(inputLongnameSimple())', 'execute command by its longname (without command palette)')\n"
  },
  {
    "path": "visidata/features/colorbrewer.py",
    "content": "'''Colorbrewer scales for plotting in Visidata.\n\nThanks to:\n  - Prof. Cynthia Brewer et al. @ colorbrewer.org\n  - @dsc https://github.com/dsc/colorbrewer-python\n  - @MicahElliott https://gist.github.com/MicahElliott/719710\n  - @er1kb https://github.com/er1kb/visidata-plugins\n\n   This feature adds these commands which can be used while viewing a plot (GraphSheet):\n       - color-cycle: change plot colors to another palette\n       - color-reset:\n'''\nfrom visidata import vd, VisiData, GraphSheet, BaseSheet, Sheet, ItemColumn, CellColorizer\n\n# https://raw.githubusercontent.com/er1kb/colorbrewer-python/master/colorbrewer.py\n# https://gist.githubusercontent.com/er1kb/02f1fee3453431d5c0ccad5e62326a99/raw/73d047f0a3ffc35f0655488547e7f24fa3f04ea6/colortrans.py\n\nvd.option('plot_palette', 'Set3', 'colorbrewer palette to use')\n\n\ncolorbrewer_palettes = dict(\n    Accent='114 146 216 228 61 198 130 59',\n    Dark2='36 166 97 162 70 178 136 59',\n    Paired='152 31 150 70 210 160 215 208 182 60 228 130',\n    Pastel1='217 152 194 188 223 230 187 225 231',\n    Pastel2='152 223 188 224 194 229 224 188',\n    Set1='160 67 71 97 208 227 130 211 102',\n    Set2='73 209 110 176 149 220 186 145',\n    Set3='116 229 146 209 110 215 149 224 188 139 194 227',\n\nYellowGreen = {\n3: '229 150 71',\n4: '230 150 114 29',\n5: '230 150 114 71 23',\n6: '230 193 150 114 71 23',\n7: '230 193 150 114 71 29 23',\n8: '230 229 193 150 114 71 29 23',\n9: '230 229 193 150 114 71 29 23 22',\n},\nYellowGreenBlue = {\n3: '229 115 31',\n4: '230 151 74 25',\n5: '230 151 74 31 24',\n6: '230 187 115 74 31 24',\n7: '230 187 115 74 31 25 18',\n8: '230 229 187 115 74 31 25 18',\n9: '230 229 187 115 74 31 25 24 17',\n},\nGreenBlue = {\n3: '194 151 74',\n4: '230 151 116 31',\n5: '230 151 116 74 25',\n6: '230 194 151 116 74 25',\n7: '230 194 151 116 74 31 25',\n8: '231 194 194 151 116 74 31 25',\n9: '231 194 194 151 116 74 31 25 24',\n},\nBlueGreen = {\n3: '195 116 35',\n4: '231 152 73 29',\n5: '231 152 73 35 22',\n6: '231 194 116 73 35 22',\n7: '231 194 116 73 72 29 22',\n8: '231 195 194 116 73 72 29 22',\n9: '231 195 194 116 73 72 29 22 22',\n},\nPurpleBlueGreen = {\n3: '225 146 30',\n4: '231 152 74 30',\n5: '231 152 74 30 23',\n6: '231 188 146 74 30 23',\n7: '231 188 146 74 67 30 23',\n8: '231 225 188 146 74 67 30 23',\n9: '231 225 188 146 74 67 30 23 23',\n},\nPurpleBlue = {\n3: '225 146 31',\n4: '231 152 110 25',\n5: '231 152 110 31 24',\n6: '231 188 146 110 31 24',\n7: '231 188 146 110 67 25 24',\n8: '231 225 188 146 110 67 25 24',\n9: '231 225 188 146 110 67 25 24 23',\n},\nBluePurple = {\n3: '195 146 97',\n4: '231 152 104 97',\n5: '231 152 104 97 90',\n6: '231 152 146 104 97 90',\n7: '231 152 146 104 97 97 53',\n8: '231 195 152 146 104 97 97 53',\n9: '231 195 152 146 104 97 97 90 53',\n},\nRedPurple = {\n3: '224 217 162',\n4: '230 217 205 126',\n5: '230 217 205 162 90',\n6: '230 223 217 205 162 90',\n7: '230 223 217 205 168 126 90',\n8: '231 224 223 217 205 168 126 90',\n9: '231 224 223 217 205 168 126 90 53',\n},\nPurpleRed = {\n3: '189 176 162',\n4: '231 182 169 161',\n5: '231 182 169 162 89',\n6: '231 182 176 169 162 89',\n7: '231 182 176 169 162 161 89',\n8: '231 189 182 176 169 162 161 89',\n9: '231 189 182 176 169 162 161 89 52',\n},\nOrangeRed = {\n3: '224 216 167',\n4: '230 222 209 166',\n5: '230 222 209 167 124',\n6: '230 223 216 209 167 124',\n7: '230 223 216 209 203 166 88',\n8: '231 224 223 216 209 203 166 88',\n9: '231 224 223 216 209 203 166 124 88',\n},\nYellowOrangeRed = {\n3: '229 215 202',\n4: '229 221 209 160',\n5: '229 221 209 202 124',\n6: '229 222 215 209 202 124',\n7: '229 222 215 209 202 160 124',\n8: '230 229 222 215 209 202 160 124',\n9: '230 229 222 215 209 202 160 124 88',\n},\nYellowOrangeBrown= {\n3: '229 221 166',\n4: '230 222 208 166',\n5: '230 222 208 166 94',\n6: '230 222 221 208 166 94',\n7: '230 222 221 208 202 166 88',\n8: '230 229 222 221 208 202 166 88',\n9: '230 229 222 221 208 202 166 94 52',\n},\nPurples = {\n3: '231 146 97',\n4: '231 188 140 61',\n5: '231 188 140 97 54',\n6: '231 189 146 140 97 54',\n7: '231 189 146 140 103 61 54',\n8: '231 231 189 146 140 103 61 54',\n9: '231 231 189 146 140 103 61 54 54',\n},\nBlues = {\n3: '195 152 67',\n4: '231 152 74 25',\n5: '231 152 74 67 25',\n6: '231 189 152 74 67 25',\n7: '231 189 152 74 68 25 24',\n8: '231 195 189 152 74 68 25 24',\n9: '231 195 189 152 74 68 25 25 23',\n},\nGreens = {\n3: '194 151 71',\n4: '230 151 114 29',\n5: '230 151 114 71 22',\n6: '230 187 151 114 71 22',\n7: '230 187 151 114 71 29 23',\n8: '231 194 187 151 114 71 29 23',\n9: '231 194 187 151 114 71 29 22 22',\n},\nOranges = {\n3: '224 215 166',\n4: '230 216 209 166',\n5: '230 216 209 166 130',\n6: '230 223 215 209 166 130',\n7: '230 223 215 209 202 166 88',\n8: '231 224 223 215 209 202 166 88',\n9: '231 224 223 215 209 202 166 130 88',\n},\nReds = {\n3: '224 209 160',\n4: '224 216 203 160',\n5: '224 216 203 160 124',\n6: '224 217 209 203 160 124',\n7: '224 217 209 203 202 160 88',\n8: '231 224 217 209 203 202 160 88',\n9: '231 224 217 209 203 202 160 124 52',\n},\nGreys = {\n3: '231 145 59',\n4: '231 188 102 59',\n5: '231 188 102 59 16',\n6: '231 188 145 102 59 16',\n7: '231 188 145 102 102 59 16',\n8: '231 231 188 145 102 102 59 16',\n9: '231 231 188 145 102 102 59 16 16',\n},\nPurpleOrange = {\n3: '215 231 104',\n4: '166 215 146 60',\n5: '166 215 231 146 60',\n6: '130 215 223 189 104 54',\n7: '130 215 223 231 189 104 54',\n8: '130 172 215 223 189 146 103 54',\n9: '130 172 215 223 231 189 146 103 54',\n10: '94 130 172 215 223 189 146 103 54 17',\n11: '94 130 172 215 223 231 189 146 103 54 17',\n},\nBrownGreen = {\n3: '179 231 73',\n4: '130 180 115 29',\n5: '130 180 231 115 29',\n6: '94 179 224 188 73 23',\n7: '94 179 224 231 188 73 23',\n8: '94 136 180 224 188 115 66 23',\n9: '94 136 180 224 231 188 115 66 23',\n10: '58 94 136 180 224 188 115 66 23 23',\n11: '58 94 136 180 224 231 188 115 66 23 23',\n},\nPurpleGreen = {\n3: '140 231 108',\n4: '96 146 151 29',\n5: '96 146 231 151 29',\n6: '90 140 188 194 108 29',\n7: '90 140 188 231 194 108 29',\n8: '90 97 146 188 194 151 71 29',\n9: '90 97 146 188 231 194 151 71 29',\n10: '53 90 97 146 188 194 151 71 29 22',\n11: '53 90 97 146 188 231 194 151 71 29 22',\n},\nPinkYellowGreen = {\n3: '182 231 149',\n4: '162 218 150 70',\n5: '162 218 231 150 70',\n6: '162 182 225 194 149 64',\n7: '162 182 225 231 194 149 64',\n8: '162 175 218 225 194 150 107 64',\n9: '162 175 218 225 231 194 150 107 64',\n10: '89 162 175 218 225 194 150 107 64 22',\n11: '89 162 175 218 225 231 194 150 107 64 22',\n},\nRedBlue = {\n3: '209 231 74',\n4: '160 216 116 25',\n5: '160 216 231 116 25',\n6: '124 209 224 189 74 25',\n7: '124 209 224 231 189 74 25',\n8: '124 167 216 224 189 116 68 25',\n9: '124 167 216 224 231 189 116 68 25',\n10: '52 124 167 216 224 189 116 68 25 23',\n11: '52 124 167 216 224 231 189 116 68 25 23',\n},\nRedGrey = {\n3: '209 231 102',\n4: '160 216 145 59',\n5: '160 216 231 145 59',\n6: '124 209 224 188 102 59',\n7: '124 209 224 231 188 102 59',\n8: '124 167 216 224 188 145 102 59',\n9: '124 167 216 224 231 188 145 102 59',\n10: '52 124 167 216 224 188 145 102 59 16',\n11: '52 124 167 216 224 231 188 145 102 59 16',\n},\nRedYellowBlue = {\n3: '209 229 110',\n4: '160 215 152 31',\n5: '160 215 229 152 31',\n6: '166 209 222 195 110 67',\n7: '166 209 222 229 195 110 67',\n8: '166 203 215 222 195 152 110 67',\n9: '166 203 215 222 229 195 152 110 67',\n10: '124 166 203 215 222 195 152 110 67 60',\n11: '124 166 203 215 222 229 195 152 110 67 60',\n},\nSpectral = {\n3: '209 229 114',\n4: '160 215 151 31',\n5: '160 215 229 151 31',\n6: '167 209 222 192 114 67',\n7: '167 209 222 229 192 114 67',\n8: '167 203 215 222 192 151 73 67',\n9: '167 203 215 222 229 192 151 73 67',\n10: '125 167 203 215 222 192 151 73 67 61',\n11: '125 167 203 215 222 229 192 151 73 67 61',\n},\nRedYellowGreen = {\n3: '209 229 113',\n4: '160 215 149 29',\n5: '160 215 229 149 29',\n6: '166 209 222 192 113 29',\n7: '166 209 222 229 192 113 29',\n8: '166 203 215 222 192 149 71 29',\n9: '166 203 215 222 229 192 149 71 29',\n10: '124 166 203 215 222 192 149 71 29 23',\n11: '124 166 203 215 222 229 192 149 71 29 23',\n},\n)\n\nvd.colorbrewer_choices = [dict(key=k, colors=v) for k, v in colorbrewer_palettes.items()]\n\n\nclass PalettesSheet(Sheet):\n    colorizers = [\n        CellColorizer(2, None, lambda s,c,r,v: f'black on {v.value}' if c and r and c.name.startswith('c') else None)\n    ]\n    columns = [\n        ItemColumn('name', 0),\n        ItemColumn('n', 1, type=int),\n    ] + [\n        ItemColumn(f'c{i}', i+1)\n          for i in range(1, 13)\n    ]\n\n    def iterload(self):\n        for palname, pals in colorbrewer_palettes.items():\n            if isinstance(pals, str):\n                yield [palname, len(pals.split())] + pals.split()\n            else:\n                for n, pal in pals.items():\n                    yield [palname, n] + pal.split()\n\n\n@GraphSheet.api\ndef cycle_palette(obj):\n    pals = list(colorbrewer_palettes.keys())\n    i = pals.index(obj.options.plot_palette)\n    i = (i+1)%len(pals)\n    n = len(obj.legends) if getattr(obj, 'legends', None) else 8\n    obj.set_palette(pals[i], n)\n\n\n@GraphSheet.api\ndef set_palette(obj, palname, n):\n    r = colorbrewer_palettes[palname]\n    if not isinstance(r, str):\n        n = max(n, min(r.keys()))\n        n = min(n, max(r.keys()))\n        r = r[n]\n\n    vd.status(f'Using {palname} {n}-color palette')\n    obj.options.plot_palette = palname\n    obj.options.plot_colors = r\n\n    if isinstance(obj, GraphSheet):\n        obj.reload()\n\n\nVisiData.set_palette  = GraphSheet.set_palette\nVisiData.cycle_palette = GraphSheet.cycle_palette\n\n\nBaseSheet.addCommand(None, 'open-palettes', 'vd.push(PalettesSheet(\"palettes\", source=vd))', 'open color palettes sheet for graphs')\nBaseSheet.addCommand(None, 'cycle-palette', 'vd.cycle_palette()', 'cycle to next color palette for graphs')\nBaseSheet.addCommand(None, 'unset-palette', 'vd.options.unset(\"plot_colors\")', 'reset to default color palette for graphs')\n\nGraphSheet.addCommand('C', 'open-palettes-sheet', 'vd.push(PalettesSheet(\"palettes\", source=sheet))', 'open color palettes sheet for this graph')\nGraphSheet.addCommand('zc', 'cycle-palette-sheet', 'sheet.cycle_palette()', 'cycle to next color palette for this graph')\nGraphSheet.addCommand(None, 'unset-palette-sheet', 'sheet.options.unset(\"plot_colors\"); reload()', 'reset to default color palette for this graph')\n\nPalettesSheet.addCommand('Enter', 'choose-palette', 'source.set_palette(cursorRow[0], cursorRow[1])', 'set current palette for source graph')\n\nvd.addMenuItems('''\n    Plot > Palette > cycle > cycle-palette-sheet\n    Plot > Palette > unset > unset-palette-sheet\n    Plot > Palette > choose > open-palettes\n''')\n\nvd.addGlobals(PalettesSheet=PalettesSheet)\n"
  },
  {
    "path": "visidata/features/colorsheet.py",
    "content": "import curses\nfrom visidata import VisiData, colors, Sheet, Column, ItemColumn, RowColorizer, wrapply, BaseSheet\n\n\nclass ColorSheet(Sheet):\n    rowtype = 'colors'  # rowdef: [fg, bg, color_attr, colornamestr]\n    columns = [\n        ItemColumn('fg', 0, type=int),\n        ItemColumn('bg', 1, type=int),\n        ItemColumn('pairnum', 2),\n        ItemColumn('name', 3),\n    ]\n    colorizers = [\n        RowColorizer(7, None, lambda s,c,r,v: r and r[3])\n    ]\n\n    def iterload(self):\n        self.rows = []\n        for k, v in colors.color_pairs.items():\n            fg, bg = k\n            pairnum, colorname = v\n            yield [fg, bg, pairnum, colorname]\n\n        for i in range(0, 256):\n            yield [i, 0, None, f'{i}']\n\n    def draw(self, scr):\n        super().draw(scr)\n        rightcol = max(self._visibleColLayout.values())\n        xstart = rightcol[0] + rightcol[1] + 4\n        for i, r in enumerate(self.rows[(self.topRowIndex//6)*6:(self.bottomRowIndex//6+1)*6]):\n            fg, bg, _, colorstr = r\n            s = f'█▌{fg:3}▐█'\n            y=i//6+1\n            x=(i%6)*(len(s)+2)+xstart\n            if y > self.windowHeight-1:\n                break\n            if r is self.cursorRow:\n                s = f'█[{fg:3}]█'\n            scr.addstr(y, x, s, colors[colorstr].attr)\n\n\nBaseSheet.addCommand(None, 'open-colors', 'vd.push(vd.colorsSheet)', 'open Color Sheet with available terminal colors')\n\n@VisiData.lazy_property\ndef colorsSheet(vd):\n    return ColorSheet('colors')\n"
  },
  {
    "path": "visidata/features/command_server.py",
    "content": "import io\nimport json\nimport socket\nfrom unittest.mock import Mock\n\nfrom visidata import vd, VisiData, asyncthread, asyncignore, CommandLogRow, Sheet\n\n\nvd.option('server_addr', '127.0.0.1', 'IP address to listen for commands', sheettype=None, replay=False)\nvd.option('server_port', 0, 'port to listen for commands', sheettype=None, replay=False)\n\n\nclass SocketIO(io.RawIOBase):\n    def __init__(self, sock):\n        self.sock = sock\n\n    def read(self, sz=-1):\n        if (sz == -1): sz=0x7FFFFFFF\n        return self.sock.recv(sz)\n\n    def seekable(self):\n        return False\n\n\n@VisiData.before\ndef mainloop(vd, scr):\n    port = vd.options.server_port\n    if port:\n        vd.command_listener(vd.options.server_addr, port)\n\n\n@VisiData.api\n@asyncignore\ndef command_listener(vd, addr, port):\n    while True:\n        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)\n        s.bind((addr, port))\n        s.listen(1)\n\n        conn, (addr, inport) = s.accept()\n        vd.status(f'Connection from {addr}:{inport}')\n        vd.queueCommand('no-op')  # update screen\n        vd.command_server(conn)\n\n\n@VisiData.api\n@asyncignore\ndef command_server(vd, conn):\n    for line in SocketIO(conn):\n        line = line.decode().strip()\n        if line == 'draw':\n            r = '\\n'.join(json.dumps(d) for d in vd.sheet.capture_draw_object())\n            conn.send(r.encode('utf-8')+b'\\n')\n        elif line.startswith('{'):\n            cmd = json.loads(line)\n            vd.queueCommand(**cmd)\n        else:\n            longname, *rest = line.split(' ', maxsplit=1)\n            cmd = dict(longname=longname, input=rest[0] if rest else '')\n            vd.queueCommand(**cmd)\n\n    conn.close()\n\n\n@Sheet.api\ndef capture_draw_object(sheet, topRowIndex=0, nScreenRows=25):\n    'capture interface at the object level'\n    isNull = sheet.isNullFunc()\n    sortkeys = {col:rev for col, rev in sheet._ordering}\n    rows = sheet.rows[topRowIndex:min(topRowIndex+nScreenRows+1, sheet.nRows)]\n\n    for vcolidx, col in enumerate(sheet.visibleCols):\n        colstate = col.__getstate__()\n\n        if col in sortkeys:\n            colstate['sort'] = 'desc' if sortkeys.get(col) else 'asc'\n\n        yield dict(i=vcolidx, _type='column', **colstate)\n\n    for rowidx, row in enumerate(rows):\n        rowstate = dict()\n\n        for notefunc in vd.rowNoters:\n            ch = notefunc(sheet, row)\n            if ch:\n                rowstate['note'] = rowstate.get('note', '') + ch\n\n        for vcolidx, col in enumerate(sheet.visibleCols):\n            cellval = col.getCell(row)\n\n            disp = ''.join(x for _, x in col.display(cellval))\n            cellstate = dict(display=disp)\n            notes = getattr(cellval, 'notes', '')\n            try:\n                if isNull and isNull(cellval.value):\n                    notes += sheet.options.disp_note_none\n            except (TypeError, ValueError):\n                pass\n\n            if notes:\n                cellstate['notes'] = notes\n            rowstate[str(vcolidx)] = cellstate\n\n        yield dict(_type='row', i=rowidx, **rowstate)\n"
  },
  {
    "path": "visidata/features/currency_to_usd.py",
    "content": "'''Provide USD(s) function to convert string like '£300' or '205 AUD' to equivalent US$ as float.\nUses data from api.apilayer.com/fixer. Requires an API key for apilayer.com.\n'''\n\nfrom visidata import vd\nimport functools\nimport json\n\nvd.option('fixer_api_key', '', 'API Key for api.apilayer.com/fixer')\nvd.option('fixer_cache_days', 1, 'Cache days for currency conversions')\n\ncurrency_symbols = {\n    '$': 'USD',\n    '£': 'GBP',\n    '₩': 'KRW',\n    '€': 'EUR',\n    '₪': 'ILS',\n    'zł': 'PLN',\n    '₽': 'RUB',\n    '₫': 'VND',\n}\n\ndef currency_rates_json(date='latest', base='USD'):\n    url = 'https://api.apilayer.com/fixer/%s?base=%s' % (date, base)\n    return vd.urlcache(\n        url,\n        days=vd.options.fixer_cache_days,\n        headers={\n            # First need to set some additional headers as otherwise apilayers will block it with a 403\n            # See also https://stackoverflow.com/questions/13303449/urllib2-httperror-http-error-403-forbidden\n            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',\n            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',\n            'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',\n            'Accept-Encoding': 'none',\n            'Accept-Language': 'en-US,en;q=0.8',\n            'Connection': 'keep-alive',\n\n            # Finally set Apikey\n            'apikey': vd.options.fixer_api_key\n        }\n    ).read_text()\n\n@functools.lru_cache()\ndef currency_rates():\n    return json.loads(currency_rates_json())['rates']\n\n@functools.lru_cache()\ndef currency_multiplier(src_currency, dest_currency):\n    'returns equivalent value in USD for an amt of currency_code'\n    if src_currency == 'USD':\n        return 1.0\n    eur_usd_mult = currency_rates()['USD']\n    eur_src_mult = currency_rates()[src_currency]\n    usd_mult = eur_usd_mult/eur_src_mult\n    if dest_currency == 'USD':\n        return usd_mult\n    \n    return usd_mult/currency_rates()[dest_currency]\n\ndef USD(s):\n    for currency_symbol, currency_code in currency_symbols.items():\n        if currency_symbol in s:\n            amt = float(s.replace(currency_symbol, ''))\n            return amt*currency_multiplier(currency_code, 'USD')\n\n    amtstr, currcode = s.split(' ')\n    return float(amtstr) * currency_multiplier(currcode, 'USD')\n\n\nvd.addGlobals(USD=USD)\n"
  },
  {
    "path": "visidata/features/customdate.py",
    "content": "import time\nfrom visidata import vd, Sheet, ColumnsSheet\nfrom visidata.type_date import date\n\n\n@Sheet.api\ndef customdate(sheet, fmtstr):\n    'Return date class with strptime parse format fixed to *fmtstr*.'\n    class _customdate(date):\n        def __new__(cls, *args, **kwargs):\n            if len(args) == 1 and isinstance(args[0], str):\n                return super().__new__(cls, *time.strptime(args[0], fmtstr)[:6])\n            return super().__new__(cls, *args, **kwargs)\n\n    _customdate.__name__ = 'customdate(%s)' % fmtstr\n\n    vd.addType(_customdate, '@', '', formatter=lambda fmt,val: val.strftime(fmt or sheet.options.disp_date_fmt))\n    vd.numericTypes.append(_customdate)\n    return _customdate\n\n\nSheet.addCommand('z@', 'type-customdate', 'fmt=input(\"date format: \", type=\"fmtstr\"); cursorCol.type=customdate(fmt); cursorCol.fmtstr=fmt', 'set type of current column to custom date format')\nColumnsSheet.addCommand('gz@', 'type-customdate-selected', 'fmt=input(\"date format: \", type=\"fmtstr\"); onlySelectedRows.type=customdate(fmt); onlySelectedRows.fmtstr=fmt', 'set type of selected columns to date')\n\nvd.addMenuItems('Column > Type as > custom date format > type-customdate')\n"
  },
  {
    "path": "visidata/features/dedupe.py",
    "content": "\"\"\"\n# Usage\n\nDuplicates are determined by the sheet's key columns.\n\nIf no key columns are specified, then a duplicate row is one where the values\nof *all non-hidden* columns are exactly the same as a row that occurs earlier\nin the sheet.\n\nIf key columns *are* specified, then duplicates are detected based on the\nvalues in just those columns.\n\n## Commands\n\n- `select-duplicate-rows` sets the selection status in VisiData to `selected`\n  for each row in the active sheet that is a duplicate of a prior row.\n\n- `dedupe-rows` pushes a new sheet in which only non-duplicate rows in the\n  active sheet are included.\n\"\"\"\n\n\n__author__ = \"Jeremy Singer-Vine <jsvine@gmail.com>\"\n\nfrom copy import copy\n\nfrom visidata import Sheet, TableSheet, asyncthread, Progress, vd\n\n\ndef gen_identify_duplicates(sheet):\n    \"\"\"\n    Takes a sheet, and returns a generator yielding a tuple for each row\n    encountered. The tuple's structure is `(row_object, is_dupe)`, where\n    is_dupe is True/False.\n\n    See note in Usage section above regarding how duplicates are determined.\n    \"\"\"\n\n    keyCols = sheet.keyCols\n\n    cols_to_check = None\n    if len(keyCols) == 0:\n        vd.warning(\"No key cols specified. Using all columns.\")\n        cols_to_check = sheet.visibleCols\n    else:\n        cols_to_check = sheet.keyCols\n\n    seen = set()\n    for r in sheet.rows:\n        vals = tuple(col.getValue(r) for col in cols_to_check)\n        is_dupe = vals in seen\n        if not is_dupe:\n            seen.add(vals)\n        yield (r, is_dupe)\n\n\n@Sheet.api\n@asyncthread\ndef select_duplicate_rows(sheet, duplicates=True):\n    \"\"\"\n    Given a sheet, sets the selection status in VisiData to `selected` for each\n    row that is a duplicate of a prior row.\n\n    If `duplicates = False`, then the behavior is reversed; sets the selection\n    status to `selected` for each row that is *not* a duplicate.\n    \"\"\"\n    before = len(sheet.selectedRows)\n\n    gen = gen_identify_duplicates(sheet)\n    prog = Progress(gen, gerund=\"selecting\", total=sheet.nRows)\n\n    for row, is_dupe in prog:\n        if is_dupe == duplicates:\n            sheet.selectRow(row)\n\n    sel_count = len(sheet.selectedRows) - before\n\n    more_str = \" more\" if before > 0 else \"\"\n\n    vd.status(f\"selected {sel_count}{more_str} {sheet.rowtype}\")\n\n\n@Sheet.api\ndef dedupe_rows(sheet, suffix='_deduped'):\n    \"\"\"\n    Given a sheet, pushes a new sheet in which only non-duplicate rows are\n    included.\n    \"\"\"\n    vs = copy(sheet)\n    vs.name += suffix\n\n    @asyncthread\n    def _reload(self=vs):\n        self.rows = []\n        gen = gen_identify_duplicates(sheet)\n        prog = Progress(gen, gerund=\"deduplicating\", total=sheet.nRows)\n        for row, is_dupe in prog:\n            if not is_dupe:\n                self.addRow(row)\n\n    vs.reload = _reload\n    return vs\n\n\n# Add longname-commands to VisiData to execute these methods\nTableSheet.addCommand(None, \"select-duplicate-rows\", \"sheet.select_duplicate_rows()\", \"select each row that is a duplicate of a prior row\")\nTableSheet.addCommand(None, \"dedupe-rows\", \"vd.push(sheet.dedupe_rows())\", \"open new sheet in which only non-duplicate rows in the active sheet are included\")\n\nvd.addMenuItems('''\n    Row > Select > duplicate rows > select-duplicate-rows\n    Data > Deduplicate rows > dedupe-rows\n''')\n\n\"\"\"\n# Changelog\n\n## 0.2.0 - 2021-09-22\n\nUse `vd.warning(...)` instead of `warning(...)`\n\n## 0.1.0 - 2020-10-09\n\nRevised for compatibility with VisiData 2.x\n\n## 0.0.1 - 2019-01-01\n\nInternal change, no external effects: Migrates from ._selectedRows to .selectedRows.\n\n## 0.0.0 - 2018-12-30\n\nInitial release.\n\"\"\"\n"
  },
  {
    "path": "visidata/features/describe.py",
    "content": "from copy import copy\nfrom statistics import mode, median, mean, stdev\n\nfrom visidata import vd, Column, ColumnAttr, vlen, RowColorizer, asyncthread, Progress, wrapply\nfrom visidata import BaseSheet, TableSheet, ColumnsSheet, IndexSheet\n\n\nvd.option('describe_aggrs', 'mean stdev', 'numeric aggregators to calculate on Describe sheet', help=vd.help_aggregators)\n\n\n@Column.api\ndef isError(col, row):\n    'Return True if the computed or typed value for *row* in this column is an error.'\n    try:\n        v = col.getValue(row)\n        if v is not None:\n            col.type(v)\n        return False\n    except Exception as e:\n        return True\n\n\nclass DescribeColumn(Column):\n    def __init__(self, name, **kwargs):\n        kwargs.setdefault('width', 10)\n        super().__init__(name, getter=lambda col,srccol: col.sheet.describeData[srccol].get(col.expr, ''), expr=name, **kwargs)\n\n\n# rowdef: Column from source sheet\nclass DescribeSheet(ColumnsSheet):\n#    rowtype = 'columns'\n    guide = '''\n        # Describe Sheet\n        This `Describe Sheet` shows a few basic metrics over data in {sheet.displaySource}, with each column represented by a row.\n\n        For example, row {sheet.cursorRowIndex} describes the _{sheet.cursorRow.name}_ column, showing its minimum value, maximum value, mean, median, and other measures.\n    '''\n    precious = True\n    columns = [\n            ColumnAttr('sheet', 'sheet', width=0),\n            ColumnAttr('column', 'name'),\n            ColumnAttr('type', 'typestr', width=0),\n            DescribeColumn('errors', type=vlen),\n            DescribeColumn('nulls',  type=vlen),\n            DescribeColumn('distinct',type=vlen),\n            DescribeColumn('mode',   type=str),\n            DescribeColumn('min',    type=str),\n            DescribeColumn('max',    type=str),\n            DescribeColumn('sum'),\n            DescribeColumn('median', type=str),\n    ]\n    colorizers = [\n        RowColorizer(7, 'color_key_col', lambda s,c,r,v: r and r in r.sheet.keyCols),\n    ]\n    nKeys = 2\n\n    def loader(self):\n        super().loader()\n        self.rows = [c for c in self.rows if not c.hidden]\n        self.describeData = { col: {} for col in self.rows }\n        self.resetCols()\n\n        for aggrname in vd.options.describe_aggrs.split():\n            self.addColumn(DescribeColumn(aggrname, type=float))\n\n        for srccol in Progress(self.rows, 'categorizing'):\n            if not srccol.hidden:\n                self.reloadColumn(srccol)\n\n    def reloadColumn(self, srccol):\n            d = self.describeData[srccol]\n            isNull = srccol.sheet.isNullFunc()\n\n            vals = list()\n            d['errors'] = list()\n            d['nulls'] = list()\n            d['distinct'] = set()\n\n            for sr in Progress(srccol.sheet.rows, 'calculating'):\n                try:\n                    v = srccol.getValue(sr)\n                    if isNull(v):\n                        d['nulls'].append(sr)\n                    else:\n                        v = srccol.type(v)\n                        vals.append(v)\n                    d['distinct'].add(v)\n                except Exception as e:\n                    d['errors'].append(sr)\n\n            d['mode'] = self.calcStatistic(d, mode, vals)\n            if vd.isNumeric(srccol):\n                for func in [min, max, sum, median]:  # use type\n                    d[func.__name__] = self.calcStatistic(d, func, vals)\n                for aggrname in vd.options.describe_aggrs.split():\n                    aggr = vd.aggregators[aggrname].funcValues\n                    d[aggrname] = self.calcStatistic(d, aggr, vals)\n\n    def calcStatistic(self, d, func, *args, **kwargs):\n        r = wrapply(func, *args, **kwargs)\n        d[func.__name__] = r\n        return r\n\n    def openCell(self, col, row):\n        'open copy of source sheet with rows described in current cell'\n        val = col.getValue(row)\n        if isinstance(val, list):\n            vs=copy(row.sheet)\n            vs.rows=val\n            vs.name+=\"_%s_%s\"%(row.name,col.name)\n            return vs\n        vd.warning(val)\n\n\nTableSheet.addCommand('I', 'describe-sheet', 'vd.push(DescribeSheet(sheet.name+\"_describe\", source=[sheet]))', 'open Describe Sheet with descriptive statistics for all visible columns')\nBaseSheet.addCommand('gI', 'describe-all', 'vd.push(DescribeSheet(\"describe_all\", source=vd.stackedSheets))', 'open Describe Sheet with description statistics for all visible columns from all sheets')\nIndexSheet.addCommand('gI', 'describe-selected', 'vd.push(DescribeSheet(\"describe_all\", source=selectedRows))', 'open Describe Sheet with all visible columns from selected sheets')\n\nDescribeSheet.addCommand('zs', 'select-cell', 'cursorRow.sheet.select(cursorValue)', 'select rows on source sheet which are being described in current cell')\nDescribeSheet.addCommand('zu', 'unselect-cell', 'cursorRow.sheet.unselect(cursorValue)', 'unselect rows on source sheet which are being described in current cell')\n\nvd.addMenuItems('Data > Statistics > describe-sheet')\n\nvd.addGlobals({'DescribeSheet':DescribeSheet})\n"
  },
  {
    "path": "visidata/features/expand_cols.py",
    "content": "import math\nimport random\nimport os.path\nfrom functools import singledispatch\n\nfrom visidata import vd, Sheet, asyncthread, Progress, Column, VisiData, deduceType, anytype, getitemdef, ColumnsSheet, WritableColumn\n\n\n@Sheet.api\ndef getSampleRows(sheet):\n    'Return list of sample rows, including the cursor row as the first row.'\n\n    # do not include cursorRow in sample\n    ret = sheet.rows[:sheet.cursorRowIndex] + sheet.rows[sheet.cursorRowIndex+1:]\n\n    n = sheet.options.default_sample_size\n    if n != 0 and n < sheet.nRows:\n        vd.aside(f'sampling {n} rows')\n        ret = random.sample(ret, n)\n\n    return [sheet.cursorRow] + ret\n\n\n@Sheet.api\ndef expandCols(sheet, cols, rows=None, depth=0):\n    'expand all visible columns of containers to the given depth (0=fully)'\n    ret = []\n    if not rows:\n        rows = sheet.getSampleRows()\n\n    for col in cols:\n        newcols = col.expand(rows)\n        if depth != 1:  # countdown not yet complete, or negative (indefinite)\n            ret.extend(sheet.expandCols(newcols, rows, depth-1))\n    return ret\n\n@singledispatch\ndef _createExpandedColumns(sampleValue, col, rows):\n    '''By default, a column is not expandable. Supported container types for\n    sampleValue trigger alternate, type-specific expansions.'''\n    return []\n\n@_createExpandedColumns.register(dict)\ndef _(sampleValue, col, vals):\n    '''Build a set of columns to add, using the first occurrence of each key to\n    determine column type'''\n    newcols = {}\n\n    for val in Progress(vals, 'expanding'):\n        if not isinstance(val, dict):  # allow mixed-use columns\n            continue\n        colsToAdd = set(val).difference(newcols)\n        colsToAdd and newcols.update({\n            k: deduceType(v)\n            for k, v in val.items()\n            if k in colsToAdd\n        })\n\n    return [\n        ExpandedColumn(col.sheet.options.fmt_expand_dict % (col.name, k), type=v, origCol=col, expr=k)\n            for k, v in newcols.items()\n    ]\n\ndef _createExpandedColumnsNamedTuple(col, val):\n    return [\n        ExpandedColumn(col.sheet.options.fmt_expand_dict % (col.name, k), type=colType, origCol=col, expr=i)\n            for i, (k, colType) in enumerate(zip(val._fields, (deduceType(v) for v in val)))\n    ]\n\n@_createExpandedColumns.register(list)\n@_createExpandedColumns.register(tuple)\ndef _(sampleValue, col, vals):\n    '''Use the longest sequence to determine the number of columns we need to\n    create, and their presumed types.  Ignore strings and exceptions. '''\n    def lenNoExceptions(v):\n        try:\n            if isinstance(v, str):\n                return 0\n            return len(v)\n        except Exception as e:\n            return 0\n\n    if hasattr(sampleValue, '_fields'):  # looks like a namedtuple\n        return _createExpandedColumnsNamedTuple(col, vals[0])\n\n    longestSeq = max(vals, key=lenNoExceptions)\n    colTypes = [deduceType(v) for v in longestSeq]\n    return [\n        ExpandedColumn(col.sheet.options.fmt_expand_list % (col.name, k), type=colType, origCol=col, expr=k)\n            for k, colType in enumerate(colTypes)\n    ]\n\n\n@Column.api\ndef expand(col, rows):\n    isNull = col.sheet.isNullFunc()\n    nonNulls = [\n        col.getTypedValue(row)\n        for row in rows\n        if not isNull(col.getValue(row))\n    ]\n\n    if not nonNulls:\n        return []\n\n    # The type of the first non-null value for col determines if and how the\n    # column can be expanded.\n    expandedCols = _createExpandedColumns(nonNulls[0], col, nonNulls)\n\n    idx = col.sheet.columns.index(col)\n\n    for i, c in enumerate(expandedCols):\n        col.sheet.addColumn(c, index=idx+i+1)\n    if expandedCols:\n        col.hide()\n    return expandedCols\n\n\n@VisiData.api\nclass ExpandedColumn(WritableColumn):\n    def calcValue(self, row):\n        return getitemdef(self.origCol.getValue(row), self.expr)\n\n    def setValue(self, row, value, setModified=True):\n        self.origCol.getValue(row)[self.expr] = value\n        if setModified:\n            self.origCol.sheet.setModified()\n\n\n@Sheet.api\n@asyncthread\ndef contract_cols(sheet, cols, depth=1):  # depth == 0 means contract all the way\n    'Remove any columns in cols with .origCol, and also remove others in sheet.columns which share those .origCol.  The inverse of expand.'\n    vd.addUndo(setattr, sheet, 'columns', sheet.columns)\n    for i in range(depth or 10000):\n        colsToClose = [c for c in cols if getattr(c, \"origCol\", None)]\n\n        if not colsToClose:\n            break\n\n        origCols = set(c.origCol for c in colsToClose)\n        for col in origCols:\n            col.width = sheet.options.default_width\n\n        sheet.columns = [col for col in sheet.columns if getattr(col, 'origCol', None) not in origCols]\n\n\n@Sheet.api\n@asyncthread\ndef expand_cols_deep(sheet, cols, rows=None, depth=0):  # depth == 0 means drill all the way\n    return sheet.expandCols(cols, rows=rows, depth=depth)\n\n\n@ColumnsSheet.api\ndef contract_source_cols(sheet, cols):\n    prefix = os.path.commonprefix([c.name for c in cols])\n    ret = ColumnGroup(prefix or 'group', prefix=prefix, sourceCols=cols)\n    for c in cols:\n        c.origCol = ret\n    for vs in sheet.source:\n        vd.addUndo(setattr, vs, 'columns', vs.columns)\n        vs.columns[:] = [c for c in vs.columns if c not in cols]\n    return ret\n\n\nclass ColumnGroup(Column):\n    def calcValue(self, row):\n        return {c.name[len(self.prefix):]:c.getValue(row) for c in self.sourceCols}\n\n    def expand(self, rows):\n        idx = self.sheet.columns.index(self)\n\n        for i, c in enumerate(self.sourceCols):\n            self.sheet.addColumn(c, index=idx+i+1)\n\n        self.hide()\n\n        return self.sourceCols\n\n\nSheet.addCommand('(', 'expand-col', 'expand_cols_deep([cursorCol], depth=1)', 'expand current column of containers one level')\nSheet.addCommand('g(', 'expand-cols', 'expand_cols_deep(visibleCols, depth=1)', 'expand all visible columns of containers one level')\nSheet.addCommand('z(', 'expand-col-depth', 'expand_cols_deep([cursorCol], depth=int(input(\"expand depth=\", value=0)))', 'expand current column of containers to given depth (0=fully)')\nSheet.addCommand('gz(', 'expand-cols-depth', 'expand_cols_deep(visibleCols, depth=int(input(\"expand depth=\", value=0)))', 'expand all visible columns of containers to given depth (0=fully)')\n\nSheet.addCommand(')', 'contract-col', 'contract_cols([cursorCol])', 'remove current column and siblings from sheet columns and unhide parent (1 level)')\nSheet.addCommand('g)', 'contract-cols', 'contract_cols(visibleCols)', 'remove all child columns and unhide toplevel parents (1 level)')\nSheet.addCommand('z)', 'contract-col-depth', 'contract_cols([cursorCol], depth=int(input(\"contract depth=\", value=0)))', 'remove current column and siblings from sheet columns and unhide parent, prompting for depth')\nSheet.addCommand('gz)', 'contract-cols-depth', 'contract_cols(visibleCols, depth=int(input(\"contract depth=\", value=0)))', 'remove all child columns and unhide toplevel parents, prompting for depth')\n\nColumnsSheet.addCommand(')', 'contract-source-cols', 'source[0].addColumn(contract_source_cols(someSelectedRows), index=cursorRowIndex)', 'contract selected columns into column group')  #1702\n\n\nvd.addMenuItems('''\n    Column > Expand > one level > expand-col\n    Column > Expand > to depth N > expand-col-depth\n    Column > Expand > all columns one level > expand-cols\n    Column > Expand > all columns to depth > expand-cols-depth\n    Column > Contract > one level > contract-col\n    Column > Contract > N levels > contract-col-depth\n    Column > Contract > all columns one level > contract-cols\n    Column > Contract > all columns N levels > contract-cols-depth\n    Column > Contract > selected columns on source sheet > contract-source-cols\n''')\n"
  },
  {
    "path": "visidata/features/fill.py",
    "content": "from visidata import vd, VisiData, asyncthread, Sheet, Progress\n\n\n@VisiData.api\n@asyncthread\ndef fillNullValues(vd, col, rows):\n    'Fill null cells in col with the previous non-null value'\n    lastval = None\n    oldvals = [] # for undo\n    isNull = col.sheet.isNullFunc()\n    n = 0\n    rowsToFill = {id(r) for r in rows}\n    for r in Progress(col.sheet.rows, 'filling'):  # loop over all rows\n        try:\n            val = col.getValue(r)\n        except Exception as e:\n            val = e\n\n        if isNull(val):\n            if not isNull(lastval) and (id(r) in rowsToFill):\n                oldvals.append((col,r,val))\n                col.setValue(r, lastval)\n                n += 1\n        else:\n            lastval = val\n\n    def _undo():\n        for c, r, v in oldvals:\n            c.setValue(r, v)\n    vd.addUndo(_undo)\n\n    col.recalc()\n    vd.status(\"filled %d values\" % n)\n\n\nSheet.addCommand('f', 'setcol-fill', 'fillNullValues(cursorCol, someSelectedRows)', 'fills null cells in selected rows of current column with contents of non-null cells up the current column')\n\nvd.addMenuItems('Column > Fill > setcol-fill')\n"
  },
  {
    "path": "visidata/features/freeze.py",
    "content": "import collections\nfrom visidata import Column, Sheet, VisiData, ColumnItem, Progress, TypedExceptionWrapper, SettableColumn\nfrom visidata import asyncthread, vd\n\n\n@Column.api\ndef resetCache(col):\n    col._cachedValues = collections.OrderedDict()\n    vd.status(\"reset cache for \" + col.name)\n\n\n@Sheet.api\ndef freeze_col(sheet, col):\n    frozencol = SettableColumn(col.name+'_frozen')\n    state = col.__getstate__()\n    state.pop('name')\n    frozencol.__setstate__(state)\n    frozencol.recalc(sheet)\n\n    @asyncthread\n    def calcRows_async(frozencol, rows, col):\n        # no need to undo, addColumn undo is enough\n        for r in Progress(rows, 'calculating'):\n            try:\n                frozencol.putValue(r, col.getTypedValue(r))\n            except Exception as e:\n                frozencol.putValue(r, e)\n\n    calcRows_async(frozencol, sheet.rows, col)\n    return frozencol\n\n\n@VisiData.api\nclass StaticSheet(Sheet):\n    'A copy of the source sheet with all cells frozen.'\n    def __init__(self, source):\n        super().__init__(source.name + \"'\", source=source)\n\n    def resetCols(self):\n        self.columns = []\n        for i, col in enumerate(self.source.visibleCols):\n            colcopy = ColumnItem(col.name)\n            colcopy.__setstate__(col.__getstate__())\n            colcopy.expr = i\n            self.addColumn(colcopy)\n            if col in self.source.keyCols:\n                self.setKeys([colcopy])\n\n    def iterload(self):\n        for r in Progress(self.source.rows, 'calculating'):\n            row = []\n            yield row\n\n            # now fill out row\n            for col in self.source.visibleCols:\n                val = col.getTypedValue(r)\n                if isinstance(val, TypedExceptionWrapper):\n                    row.append(None)\n                else:\n                    row.append(val)\n\n\n@Sheet.api\ndef setcol_freeze(sheet, unfrozen):  #2660  Contributed by @midichef\n    frozen = sheet.freeze_col(unfrozen)\n    frozen.name = unfrozen.name\n    unfrozen.hide()\n    vd.addUndoColNames([unfrozen])\n    unfrozen.name = frozen.name + '_unfrozen'\n    sheet.addColumnAtCursor(frozen)\n    vd.status(f'replaced {frozen.name} with frozen copy')\n\n\nSheet.addCommand(\"z'\", 'setcol-freeze', 'setcol_freeze(cursorCol)', 'replace current column with a frozen copy, with all cells evaluated')\nSheet.addCommand(\"'\", 'freeze-col', 'sheet.addColumnAtCursor(freeze_col(cursorCol))', 'add a frozen copy of current column with all cells evaluated')\nSheet.addCommand(\"g'\", 'freeze-sheet', 'vd.push(StaticSheet(sheet)); status(\"pushed frozen copy of \"+name)', 'open a frozen copy of current sheet with all visible columns evaluated')\nSheet.addCommand(None, 'cache-col', 'cursorCol.resetCache()', 'add/reset cache for current column')\nSheet.addCommand(\"gz'\", 'cache-cols', 'for c in visibleCols: c.resetCache()', 'add/reset cache for all visible columns')\n\nvd.addMenuItem('Column', 'Freeze', 'setcol-freeze')\nvd.addMenuItem('File', 'Freeze', 'freeze-sheet')\n"
  },
  {
    "path": "visidata/features/go_col.py",
    "content": "import itertools\nimport re\nfrom visidata import vd, Sheet, AttrDict, dispwidth, escape_vdcode\n\n\n@Sheet.api\ndef nextColRegex(sheet, colregex):\n    'Go to first visible column after the cursor matching `colregex`.'\n    pivot = sheet.cursorVisibleColIndex\n    for i in itertools.chain(range(pivot+1, len(sheet.visibleCols)), range(0, pivot+1)):\n        c = sheet.visibleCols[i]\n        if re.search(colregex, c.name, sheet.regex_flags()):\n            return i\n\n    vd.fail('no column name matches /%s/' % colregex)\n\n@Sheet.api\ndef nextColName(sheet, show_cells=True):\n    if len(sheet.visibleCols) == 0: vd.fail('no columns to choose from')\n\n    prompt = 'choose column name: '\n    colnames = []\n    for c in sheet.visibleCols:\n        dv = None\n        if show_cells and len(sheet.rows) > 0:\n            dv = c.getDisplayValue(sheet.cursorRow)\n        #the underscore that starts _cursor_cell excludes it from being fuzzy matched\n        item = AttrDict(name=c.name,\n                        _cursor_cell=dv)\n        colnames.append(item)\n\n    def _fmt_colname(match, row, trigger_key):\n        # columns may contain [:text] that looks like markup, so we have to escape it\n        name = match.formatted.get('name', row.name) if match else escape_vdcode(row.name)\n        r = ' '*(dispwidth(prompt)-3)\n        r += f' [:keystrokes]{trigger_key}[/] ' if trigger_key else '   '\n        r += f'[:bold]{name}[/]'\n        if show_cells and len(sheet.rows) > 0:\n            # pad the right side with spaces\n            # use row.name, because name from match contains\n            # extra formatting characters that change its length\n            n_spaces = max(20 - dispwidth(row.name), 0)\n            r += n_spaces*' '\n            r += '   '\n            #todo:  does not show disp_note_none for None\n            r += escape_vdcode(row._cursor_cell)\n        return r\n\n    name = vd.activeSheet.inputPalette(prompt,\n            colnames,\n            value_key='name',\n            type='column_name',\n            formatter=_fmt_colname)\n\n    pivot = sheet.cursorVisibleColIndex\n    for i in itertools.chain(range(pivot+1, len(sheet.visibleCols)), range(0, pivot+1)):\n        if name == sheet.visibleCols[i].name:\n            return i\n\n    vd.warning(f'found no column with name: {name}')\n\n\nSheet.addCommand('c', 'go-col-regex', 'sheet.cursorVisibleColIndex=nextColRegex(inputRegex(\"column name regex: \", type=\"regex-col\", defaultLast=True))', 'go to next column with name matching regex')\nSheet.addCommand('zc', 'go-col-number', 'sheet.cursorVisibleColIndex = int(input(\"move to column number: \"))', 'go to given column number (0-based)')\nSheet.addCommand('', 'go-col-name', 'sheet.cursorVisibleColIndex=nextColName()', 'go to next column with name matching string, case-insensitive')\n\nvd.addMenuItems('''\n    Column > Goto > by regex > go-col-regex\n    Column > Goto > by number > go-col-number\n    Column > Goto > by name > go-col-name\n''')\n"
  },
  {
    "path": "visidata/features/graph_seaborn.py",
    "content": "'''\nAdd plot-column-ext and plot-numerics-ext to Sheet, and plot-ext to GraphSheet, to open current graph in new matplotlib window.\n'''\n\nfrom visidata import vd, VisiData, Sheet, GraphSheet, Progress, asyncthread\n\n\n@VisiData.api\n@asyncthread\ndef plot_seaborn(vd, rows, xcols, ycols):\n    vd.status(f'plotting {len(rows)} rows using matplotlib')\n    import multiprocessing\n    mp = multiprocessing.Process(target=ext_plot_seaborn, args=(vd, rows, xcols, ycols))\n    mp.start()\n\n\ndef ext_plot_seaborn(vd, rows, xcols, ycols):\n    pd = vd.importExternal('pandas')\n    plt = vd.importExternal('matplotlib.pyplot', 'matplotlib')\n    sns = vd.importExternal('seaborn')\n\n    # Set the default theme\n    sns.set()\n\n    plt.figure(figsize=(10, 6))\n    title = f'{\", \".join(c.name for c in xcols)} vs {\", \".join(c.name for c in ycols)}'\n    plt.title(title)\n    plt.xticks(rotation=15)\n\n    nerrors = 0\n    nplotted = 0\n\n    x_array = []\n    y_array = []\n    cat_array = []\n\n    catcols = [c for c in xcols if not vd.isNumeric(c)]\n    numcols = vd.numericCols(xcols)\n    for rownum, row in enumerate(Progress(rows, 'plotting')):\n        for ycol in ycols:\n            try:\n                if catcols:\n                    k = tuple(c.getValue(row) for c in catcols)\n                    if len(catcols) == 1:\n                        k = k[0]\n                else:\n                    k = ycol.name\n\n                graph_x = numcols[0].type(numcols[0].getValue(row)) if numcols else rownum\n                graph_y = ycol.type(ycol.getValue(row))\n\n                x_array.append(graph_x)\n                y_array.append(graph_y)\n                cat_array.append(k)\n\n                nplotted += 1\n            except Exception:\n                nerrors += 1\n                if vd.options.debug:\n                    raise\n\n    ax = sns.scatterplot(\n        x=x_array,\n        y=y_array,\n        hue=cat_array,\n        #        hue_order=df.tag.value_counts().iloc[:top].index,\n        #        data=tmpdf,\n        s=5,\n        linewidth=0,\n    )\n\n    ax.set(xlabel=\", \".join(c.name for c in xcols),\n           ylabel=\", \".join(c.name for c in ycols))\n    ax.xaxis.labelpad = 1\n\n    plt.show()\n\n\nSheet.addCommand('', 'plot-column-ext', 'plot_seaborn(rows, keyCols, numericCols([cursorCol]))', 'plot current numeric column on y-axis vs key columns on x-axis using matplotlib/seaborn')\nSheet.addCommand('', 'plot-numerics-ext', 'plot_seaborn(rows, keyCols, numericCols(nonKeyVisibleCols))', 'plot a graph of all visible numeric columns using matplotlib/seaborn')\nGraphSheet.addCommand('', 'plot-ext', 'plot_seaborn(sourceRows, xcols, ycols)', 'replot current graph using matplotlib/seaborn')\n\nvd.addMenuItem('Plot', 'Graph', 'using matplotlib', 'current column', 'plot-column-ext')\nvd.addMenuItem('Plot', 'Graph', 'using matplotlib', 'all numeric columns', 'plot-numerics-ext')\nvd.addMenuItem('Plot', 'Graph', 'replot using matplotlib', 'plot-ext')\n"
  },
  {
    "path": "visidata/features/graph_zoom_y.py",
    "content": "# contributed by Ram Rachum (@cool-RR) via ChatGPT  #2751\n\nfrom visidata import GraphSheet\n\n@GraphSheet.api\ndef zoom_all_y(sheet):\n    \"\"\"Find the lowest and highest y values in the current visible plot and set the y range to that.\"\"\"\n    ymin, ymax = None, None\n    \n    # Find the min and max y values of all points within the current x range\n    xmin, xmax = sheet.visibleBox.xmin, sheet.visibleBox.xmax\n    \n    for vertexes, attr, row in sheet.polylines:\n        if attr in sheet.hiddenAttrs:\n            continue\n            \n        for x, y in vertexes:\n            # Check if the point is within the current x range\n            if xmin <= x <= xmax:\n                if ymin is None or y < ymin:\n                    ymin = y\n                if ymax is None or y > ymax:\n                    ymax = y\n    \n    if ymin is None or ymax is None:\n        # No visible points found\n        return\n    \n    # Add a 5% margin on both top and bottom\n    y_range = ymax - ymin\n    margin = sheet.ycols[0].type(y_range * 0.05)\n    \n    # Calculate adjusted min/max with margin\n    adj_ymin = ymin - margin\n    adj_ymax = ymax + margin\n    \n    # Create 5 equally spaced y ticks from real min to real max (not adjusted with margin)\n    step = (ymax - ymin) / 4  # 5 ticks means 4 intervals\n    y_ticks = tuple(ymin + step * i for i in range(5))\n    \n    # Set the y range with margin\n    sheet.set_y(f\"{adj_ymin} {adj_ymax}\")\n    \n    # Set custom y ticks (using the real min/max, not the adjusted ones)\n    sheet.forced_y_ticks = y_ticks\n\nGraphSheet.addCommand('g_', 'zoom-all-y', 'zoom_all_y()', 'Zoom y-axis to fit all visible data points')\n"
  },
  {
    "path": "visidata/features/hint_types.py",
    "content": "from visidata import Sheet, anytype\n\n@Sheet.api\ndef hint_type_int(sheet):\n    c = sheet.cursorCol\n    if c.type is anytype:\n        v = c.getTypedValue(sheet.cursorRow)\n        if isinstance(v, int) or int(v) is not None:\n            return 2, '[:onclick type-int]Set column type to integer[/] with `#`.'\n\n@Sheet.api\ndef hint_type_float(sheet):\n    c = sheet.cursorCol\n    if c.type is anytype:\n        v = c.getTypedValue(sheet.cursorRow)\n        if isinstance(v, float) or float(v) is not None:\n            return 1, '[:onclick type-float]Set column type to floating point[/] with `%`.'\n"
  },
  {
    "path": "visidata/features/hlsearch.py",
    "content": "from visidata import Sheet, TableSheet, Column\nfrom visidata import vd, dispwidth\nimport re\n\n\n# NOTE: both Sheet and Column have highlight_regex, but g/ sets per-column\n# (not sheet-level), so sheet.highlight_regex is only used by highlight-sheet.\n# clear_search() always wipes both before any new pattern is set, so the\n# `col.highlight_regex or sheet.highlight_regex` in drawRow() never chooses\n# between two live patterns. The two-attribute model seems like it could be simplified to\n# one.  See PR #2861 for discussion.\nTableSheet.init('highlight_regex', lambda: None, copy=False)\nColumn.init('highlight_regex', lambda: None, copy=False)\n\n@Sheet.api\ndef highlight_chunks(sheet, chunks, hp, hoffset, colwidth, notewidth, cattr, hl_attr):\n    '''Highlights *hp* which is a regex to highlight, or None if no highlighting.\n       Always handles formatting for *hoffset* even when *hp* is None.\n       Consumes the generator *chunks*. Returns a list of (attr, string) pairs.\n    '''\n    display_chunks = []\n    left_hl = False\n    right_hl = False\n    truncate_right = False  #becomes True only if the highlighted chunk ends at the col edge\n    dispw = 0\n    for attr, text in chunks:\n        last = hoffset if hoffset > 0 else 0\n        # note a limitation with Unicode:  the regex can cut a grapheme cluster into codepoints\n        matches = re.finditer(hp, text) if hp else []\n        for m in matches:\n            m1 = m.start()\n            m2 = m.end()\n            if m1 < hoffset:\n                left_hl = True\n                if m2 <= hoffset:\n                    continue\n                m1 = hoffset\n            if m1 > last:\n                s = text[last:m1]\n                if truncate_right:\n                    display_chunks[-1][1] += s\n                else:\n                    display_chunks.append([attr, s])\n                dispw += dispwidth(s, literal=True)\n            s = text[m1:m2]\n            if truncate_right:\n                display_chunks[-1][1] += s\n            else:\n                display_chunks.append([hl_attr, s])\n            dispw += dispwidth(text[m1:m2], literal=True)\n            if dispw > colwidth-notewidth-1:\n                right_hl = True\n                last = len(text)\n                break\n            if dispw == colwidth-notewidth-1:\n                #append any subsequent cell text to the highlighted chunk so it gets a truncator added by clipdraw()\n                truncate_right = True\n            last = m2\n        if last < len(text):\n            s = text[last:]\n            if truncate_right:\n                display_chunks[-1][1] += s\n            else:\n                display_chunks.append([attr, s])\n            dispw += dispwidth(s, literal=True)\n    return display_chunks, left_hl, right_hl\n\n@Sheet.api\ndef setHighlightRegex(sheet, r, cols=[]):\n    if not sheet.options.highlight_search:\n        return\n    flagbits = sum(getattr(re, f.upper()) for f in r['flags'])\n    rc = re.compile(r['regex'], flagbits)\n    sheet.clear_search()\n    if cols is None:\n        vd.addUndo(setattr, sheet, 'highlight_regex', sheet.highlight_regex)\n        sheet.highlight_regex = rc\n    else:\n        for col in cols:\n            vd.addUndo(setattr, col, 'highlight_regex', col.highlight_regex)\n            col.highlight_regex = rc\n\n@Sheet.api\ndef highlight_input(sheet, cols=[]):\n    r = vd.inputMultiple(regex=dict(prompt=f\"highlight regex: \", type=\"regex\", defaultLast=True, help=vd.help_regex),\n                        flags=dict(prompt=\"regex flags: \", type=\"regex_flags\", value=sheet.options.regex_flags, help=vd.help_regex_flags))\n    if not sheet.options.highlight_search:\n        vd.warning('highlight option needs to be set to True')\n    sheet.setHighlightRegex(r, cols)\n\n@Sheet.after\ndef clear_search(sheet):\n    if not sheet.options.highlight_search:\n        return\n    for col in sheet.columns:\n        if col.highlight_regex:\n            vd.addUndo(setattr, col, 'highlight_regex', col.highlight_regex)\n            col.highlight_regex = None\n    if sheet.highlight_regex:\n        vd.addUndo(setattr, sheet, 'highlight_regex', sheet.highlight_regex)\n        sheet.highlight_regex = None\n\nvd.option('highlight_search', True, 'whether to highlight strings in searches')\nvd.option('color_highlight_search', '21 blue on 15 white', 'color to use for highlighting search results', sheettype=None)  #bright blue on white\n\nSheet.addCommand('', 'highlight-sheet', 'highlight_input(None)', 'highlight a regex in all columns')\nSheet.addCommand('', 'highlight-col', 'highlight_input([cursorCol])', 'highlight a regex in current column')\nSheet.addCommand('', 'highlight-clear', 'clear_search()', 'clear the current highlight pattern')\n# redefine existing commands\nSheet.addCommand('r', 'search-keys', 'tmp=cursorVisibleColIndex; cols=keyCols or [visibleCols[0]]; r=moveInputRegex(\"row key\", type=\"regex-row\", columns=cols); setHighlightRegex(r, cols); sheet.cursorVisibleColIndex=tmp', 'go to next row with key matching regex')\nSheet.addCommand('/', 'search-col', 'r=moveInputRegex(\"search\", columns=\"cursorCol\", backward=False); setHighlightRegex(r, [cursorCol])', 'search for regex forwards in current column')\nSheet.addCommand('?', 'searchr-col', 'r=moveInputRegex(\"reverse search\", columns=\"cursorCol\", backward=True); setHighlightRegex(r, [cursorCol])', 'search for regex backwards in current column')\nSheet.addCommand('g/', 'search-cols', 'r=moveInputRegex(\"g/\", backward=False, columns=\"visibleCols\"); setHighlightRegex(r, sheet.visibleCols)', 'search for regex forwards over all visible columns')\nSheet.addCommand('g?', 'searchr-cols', 'r=moveInputRegex(\"g?\", backward=True, columns=\"visibleCols\"); setHighlightRegex(r, sheet.visibleCols)', 'search for regex backwards over all visible columns')\n\nvd.addGlobals(highlight_chunks=highlight_chunks)\n"
  },
  {
    "path": "visidata/features/icon.py",
    "content": "from visidata import DirSheet, FreqTableSheet, GraphSheet\n\nDirSheet.icon = '📂'\nFreqTableSheet.icon = '📶'\nGraphSheet.icon = '📊'\n"
  },
  {
    "path": "visidata/features/incr.py",
    "content": "from visidata import VisiData, Sheet, vd\n\n\nvd.option('incr_base', 1.0, 'start value for column increments', replay=True)\n\n\n@VisiData.api\ndef numrange(vd, n, step=1):\n    'Generate n values, starting from options.incr_base and increasing by step for each number.'\n    base = type(step)(vd.options.incr_base)\n    yield from ((base+x)*step for x in range(n))\n\n\ndef test_numrange(vd=None):\n    assert list(vd.numrange(5)) == [1,2,3,4,5]\n    assert list(vd.numrange(5, step=5)) == [5,10,15,20,25]  #2769\n\n@VisiData.api\ndef num(vd, *args):\n    'Return parsed string as number, preferring int to float.'\n    try:\n        return int(*args)\n    except Exception:\n        return float(*args)\n\n\nSheet.addCommand('i', 'addcol-incr', 'c=SettableColumn(type=int); addColumnAtCursor(c); c.setValuesTyped(rows, *numrange(nRows))', 'add column with incremental values')\nSheet.addCommand('gi', 'setcol-incr', 'cursorCol.setValuesTyped(selectedRows, *numrange(sheet.nSelectedRows))', 'set current column for selected rows to incremental values')\nSheet.addCommand('zi', 'addcol-incr-step', 'n=num(input(\"interval step: \")); c=SettableColumn(type=type(n)); addColumnAtCursor(c); c.setValuesTyped(rows, *numrange(nRows, step=n))', 'add column with incremental values times given step')\nSheet.addCommand('gzi', 'setcol-incr-step', 'n=num(input(\"interval step: \")); cursorCol.setValuesTyped(selectedRows, *numrange(nSelectedRows, n))', 'set current column for selected rows to incremental values times given step')\n\nvd.addMenuItems('''\n    Column > Add column > increment > addcol-incr\n    Edit > Modify > selected cells > increment > setcol-incr\n''')\n"
  },
  {
    "path": "visidata/features/join.py",
    "content": "import collections\nimport itertools\nimport functools\nfrom copy import copy\n\nfrom visidata import vd, VisiData, asyncthread, Sheet, Progress, IndexSheet, Column, CellColorizer, ItemColumn, SubColumnItem, TypedWrapper, ColumnsSheet, AttrDict, dispwidth\nfrom visidata import WritableColumn\n\nvd.help_join = '# Join Help\\nHELPTODO'\n\n@VisiData.api\ndef ensureLoaded(vd, sheets):\n    threads = [vs.ensureLoaded() for vs in sheets]\n    threads = [t for t in threads if t]\n    if threads:\n        vd.status('loading %d source sheets' % len(threads))\n    return threads\n\n\n@asyncthread\ndef _appendRowsAfterLoading(joinsheet, origsheets):\n    '''Will fail() if any sheets have different numbers of visible columns.'''\n    with Progress(gerund='loading'):\n        vd.ensureLoaded(origsheets)\n        vd.sync()\n\n    colcounts = { len(vs.visibleCols) for vs in origsheets }\n    if len(colcounts) != 1:\n        vd.fail(f'sheets must have same number of columns for `concat`; use `append` instead')\n\n    # rowdef: (srcSheet, srcRow), same as ConcatSheet  #2929\n    srcKeyColNames = {c.name for c in origsheets[0].keyCols}\n    joinsheet.columns = []\n    joinsheet.addColumn(ItemColumn('origin_sheet', 0, width=0))\n    keyedcols = collections.defaultdict(dict)  # name -> { sheet -> col }\n\n    for vs in origsheets:\n        joinsheet.rows.extend((vs, r) for r in vs.rows)\n        for c in vs.visibleCols:\n            if not keyedcols[c.name]:\n                newcol = ConcatColumn(c.name, cols=keyedcols[c.name], type=c.type)\n                if c.name in srcKeyColNames:\n                    newcol.keycol = c.keycol\n                joinsheet.addColumn(newcol)\n            keyedcols[c.name][vs] = c\n\n\n@VisiData.api\ndef join_sheets_cols(vd, cols, jointype:str=''):\n    'match joinkeys by cols in order per sheet.'\n    sheetkeys = collections.defaultdict(list)  # [sheet] -> list of keycols on that sheet\n    for c in cols:\n        sheetkeys[c.sheet].append(c)\n\n    sheets = list(sheetkeys.keys())\n    return JoinSheet('+'.join(vs.name for vs in sheets),\n                     sources=sheets,\n                     sheetKeyCols=sheetkeys,\n                     jointype=jointype)\n\n\n@Sheet.api\ndef openJoin(sheet, others, jointype=''):\n    sheets = [sheet] + others\n\n    sheets[1:] or vd.fail(\"join requires more than 1 sheet\")\n\n    if jointype == 'concat':\n        name = '&'.join(vs.name for vs in sheets)\n        sheettypes = set(type(vs) for vs in sheets)\n        if len(sheettypes) != 1:  # only one type of sheet #1598\n            vd.fail(f'only same sheet types can be concat-joined; use \"append\"')\n\n        joinsheet = copy(sheet)\n        joinsheet.name = name\n        joinsheet.rows = []\n        joinsheet.source = sheets\n\n        _appendRowsAfterLoading(joinsheet, sheets)\n\n        return joinsheet\n\n    elif jointype == 'append':\n        name = '&'.join(vs.name for vs in sheets)\n        return ConcatSheet(name, source=sheets)\n\n    nkeys = set(len(s.keyCols) for s in sheets)\n    if 0 in nkeys or len(nkeys) != 1:\n        vd.fail(f'all sheets must have the same number of key columns')\n\n    if jointype == 'extend':\n        vs = copy(sheets[0])\n        vs.name = '+'.join(vs.name for vs in sheets)\n        vs.sheetKeyCols = {vs:vs.keyCols for vs in sheets}\n        vs.reload = functools.partial(ExtendedSheet_reload, vs, sheets)\n        return vs\n    else:\n        return JoinSheet('+'.join(vs.name for vs in sheets),\n                         sources=sheets,\n                         jointype=jointype,\n                         sheetKeyCols={s:s.keyCols for s in sheets})\n\n\nvd.jointypes = [AttrDict(key=k, desc=v) for k, v in {\n    'inner': 'only rows with matching keys on all sheets',\n    'outer': 'only rows with matching keys on first selected sheet',\n    'full': 'all rows from all sheets (union)',\n    'diff': 'only rows NOT in all sheets',\n    'append': 'all rows from all sheets; columns from all sheets',\n    'concat': 'all rows from all sheets; columns and type from first sheet',\n    'extend': 'only rows from first sheet; type from first sheet; columns from all sheets',\n    'merge': 'all rows from all sheets; where keys match, use latest truthy value',\n}.items()]\n\ndef joinkey(sheetKeyCols, row):\n    return tuple(c.getFullDisplayValue(row) for c in sheetKeyCols)\n\n\ndef groupRowsByKey(sheets:dict, rowsBySheetKey, rowsByKey):\n    with Progress(gerund='grouping', total=sum(len(vs.rows) for vs in sheets)*2) as prog:\n        for vs in sheets:\n            # tally rows by keys for each sheet\n            rowsBySheetKey[vs] = collections.defaultdict(list)\n            for r in vs.rows:\n                prog.addProgress(1)\n                key = joinkey(sheets[vs], r)\n                rowsBySheetKey[vs][key].append(r)\n\n        for vs in sheets:\n            for r in vs.rows:\n                prog.addProgress(1)\n                key = joinkey(sheets[vs], r)\n                if key not in rowsByKey: # gather for this key has not been done yet\n                    # multiplicative for non-unique keys\n                    rowsByKey[key] = [\n                        dict(crow)\n                          for crow in itertools.product(*[\n                              [(vs2, j) for j in rowsBySheetKey[vs2].get(key, [None])]\n                                  for vs2 in sheets\n                          ])\n                    ]\n\n\nclass JoinKeyColumn(WritableColumn):\n    def __init__(self, name='', keycols=None, **kwargs):\n        super().__init__(name, type=keycols[0].type, width=keycols[0].width, **kwargs)\n        self.keycols = keycols\n\n    def calcValue(self, row):\n        vals = set()\n        for i, c in enumerate(self.keycols):\n            if row[c.sheet] is not None:\n                vals.add(c.getTypedValue(row[c.sheet]))\n        if len(vals) != 1:\n            keycolnames = ', '.join([f'{col.sheet.name}:{col.name}' for col in self.keycols])\n            vd.warning(f\"source key columns ({keycolnames}) have different types\")\n        return vals.pop()\n\n    def putValue(self, row, value):\n        for i, c in enumerate(self.keycols):\n            if row[c.sheet] is not None:\n                c.setValues([row[c.sheet]], value)\n\n    def recalc(self, sheet=None):\n        Column.recalc(self, sheet)\n        for c in self.keycols:\n            c.recalc()\n\n\nclass MergeColumn(WritableColumn):\n    # .cols is { sheet: col, ... } in sheet-join order\n    def calcValue(self, row):\n        'Return value from last joined sheet with truth-y value in this column for the given row.'\n        for vs, c in reversed(list(self.cols.items())):\n            if c:\n                v = c.getTypedValue(row[vs])\n                if v and not isinstance(v, TypedWrapper):\n                    return v\n\n    def putValue(self, row, value):\n        for vs, c in reversed(list(self.cols.items())):\n            if row[vs] is not None:\n                c.setValue(row[vs], value)\n\n    def isDiff(self, row, value):\n        col = list(self.cols.values())[0]\n        if not col:\n            return False\n        if row[col.sheet] is None:\n            return True\n        return value != col.getValue(row[col.sheet])\n\n\n#### slicing and dicing\n# rowdef: {sheet1:sheet1_row, sheet2:sheet2_row, ...}\n#   if a sheet does not have this key, sheet#_row is None\nclass JoinSheet(Sheet):\n    'Column-wise join/merge. `jointype` constructor arg should be one of jointypes.'\n    colorizers = [\n        CellColorizer(0, 'color_diff', lambda s,c,r,v: c and r and isinstance(c, MergeColumn) and c.isDiff(r, v.value))\n    ]\n\n    sheetKeyCols = {}  # [sheet] -> list of joinkeycols for that sheet\n\n    def loader(self):\n        sheets = self.sources\n\n        with Progress(gerund='loading'):\n            vd.ensureLoaded(sheets)\n            vd.sync()\n\n        # first item in joined row is the key tuple from the first sheet.\n        # first columns are the key columns from the first sheet, using its row (0)\n        self.columns = []\n\n        for i, cols in enumerate(itertools.zip_longest(*list(self.sheetKeyCols.values()))):\n            self.addColumn(JoinKeyColumn(cols[0].name, keycols=cols)) # ColumnItem(c.name, i, sheet=sheets[0], type=c.type, width=c.width)))\n        self.setKeys(self.columns)\n\n        allcols = collections.defaultdict(dict) # colname: { sheet: origcol, ... }\n        # MergeColumn relies on allcols having sheets in this specific order\n        for sheetnum, vs in enumerate(sheets):\n            for c in vs.visibleCols:\n                if c not in self.sheetKeyCols[vs]:\n                    allcols[c.name][vs] = c\n\n        if self.jointype == 'merge':\n            for colname, cols in allcols.items():\n                self.addColumn(MergeColumn(colname, cols=cols))\n        else:\n          ctr = collections.Counter(c.name for vs in sheets for c in vs.visibleCols if c not in self.sheetKeyCols[vs])\n          for sheetnum, vs in enumerate(sheets):\n              # subsequent elements are the rows from each source, in order of the source sheets\n              for c in vs.visibleCols:\n                  if c not in self.sheetKeyCols[vs]:\n                      newname = c.name if ctr[c.name] == 1 else '%s_%s' % (vs.name, c.name)\n                      self.addColumn(SubColumnItem(vs, c, name=newname))\n\n        rowsBySheetKey = {}   # [sheet] -> { key:list(rows), ... }\n        rowsByKey = {}  # [key] -> [{sheet1:row1, sheet2:row1, ... }, ...]\n\n        groupRowsByKey(self.sheetKeyCols, rowsBySheetKey, rowsByKey)\n\n        self.rows = []\n\n        with Progress(gerund='joining', total=len(rowsByKey)) as prog:\n            for k, combinedRows in rowsByKey.items():\n                prog.addProgress(1)\n\n                if self.jointype in ['full', 'merge']:  # keep all rows from all sheets\n                    for combinedRow in combinedRows:\n                        self.addRow(combinedRow)\n\n                elif self.jointype == 'inner':  # only rows with matching key on all sheets\n                    for combinedRow in combinedRows:\n                        if all(r is not None for r in combinedRow.values()):\n                            self.addRow(combinedRow)\n\n                elif self.jointype == 'outer':  # all rows from first sheet\n                    for combinedRow in combinedRows:\n                        if combinedRow[sheets[0]]:\n                            self.addRow(combinedRow)\n\n                elif self.jointype == 'diff':  # only rows without matching key on all sheets\n                    for combinedRow in combinedRows:\n                        if not all(r is not None for r in combinedRow.values()):\n                            self.addRow(combinedRow)\n\n\n## for ExtendedSheet_reload below\nclass ExtendedColumn(WritableColumn):\n    def calcValue(self, row):\n        key = joinkey(self.firstJoinSource.keyCols, row)\n        srcrow = self.rowsBySheetKey[self.srcsheet][key]\n        if srcrow:\n            return self.sourceCol.calcValue(srcrow[0])\n\n    def putValue(self, row, value):\n        key = joinkey(self.firstJoinSource.keyCols, row)\n        srcrow = self.rowsBySheetKey[self.srcsheet][key]\n        if len(srcrow) == 1:\n            self.sourceCol.putValue(srcrow[0], value)\n        else:\n            vd.warning('failed to modify, not able to identify unique source row')\n\n\n@asyncthread\ndef ExtendedSheet_reload(self, sheets):\n    # first item in joined row is the key tuple from the first sheet.\n    # first columns are the key columns from the first sheet, using its row (0)\n\n    with Progress(gerund='loading'):\n        vd.ensureLoaded(sheets)\n        vd.sync()\n\n    self.columns = []\n    for i, c in enumerate(sheets[0].keyCols):\n        self.addColumn(copy(c))\n    self.setKeys(self.columns)\n\n    for i, c in enumerate(sheets[0].visibleCols):\n        if c not in self.sheetKeyCols[c.sheet]:\n            self.addColumn(copy(c))\n\n    self.rowsBySheetKey = {}  # [srcSheet][key] -> list(rowobjs from sheets[0])\n    rowsByKey = {}  # [key] -> [{sheet1:row1, sheet2:row1, ... }, ...]\n\n    for sheetnum, vs in enumerate(sheets[1:]):\n        # subsequent elements are the rows from each source, in order of the source sheets\n#        ctr = collections.Counter(c.name for c in vs.visibleCols if c not in sheetkeys[vs])\n        for c in vs.visibleCols:\n            if c not in self.sheetKeyCols[c.sheet]:\n                newname = '%s_%s' % (vs.name, c.name)\n                newcol = ExtendedColumn(newname, srcsheet=vs, rowsBySheetKey=self.rowsBySheetKey, firstJoinSource=sheets[0], sourceCol=c)\n                self.addColumn(newcol)\n\n    groupRowsByKey(self.sheetKeyCols, self.rowsBySheetKey, rowsByKey)\n\n    self.rows = []\n\n    with Progress(gerund='joining', total=len(rowsByKey)) as prog:\n        for k, combinedRows in rowsByKey.items():\n            prog.addProgress(1)\n            for combinedRow in combinedRows:\n                if combinedRow[sheets[0]]:\n                    self.addRow(combinedRow[sheets[0]])\n\n\n## for ConcatSheet\nclass ConcatColumn(WritableColumn):\n    '''ConcatColumn(name, cols={srcsheet:srccol}, ...)'''\n    def getColBySheet(self, s):\n        return self.cols.get(s, None)\n\n    def calcValue(self, row):\n        srcSheet, srcRow = row\n        srcCol = self.getColBySheet(srcSheet)\n        if srcCol:\n            return srcCol.calcValue(srcRow)\n\n    def setValue(self, row, v):\n        srcSheet, srcRow = row\n        srcCol = self.getColBySheet(srcSheet)\n        if srcCol:\n            srcCol.setValue(srcRow, v)\n        else:\n            vd.fail('column not on source sheet')\n\n\n# rowdef: (srcSheet, srcRow)\nclass ConcatSheet(Sheet):\n    'combination of multiple sheets by row concatenation. source=list of sheets. '\n    columns = [ItemColumn('origin_sheet', 0, width=0)]\n    def iterload(self):\n        # only one column with each name allowed per sheet\n        keyedcols = collections.defaultdict(dict)  # name -> { sheet -> col }\n\n        with Progress(gerund='loading'):\n            vd.ensureLoaded(self.source)\n            vd.sync()\n        with Progress(gerund='joining', sheet=self, total=sum(vs.nRows for vs in self.source)) as prog:\n            for sheet in self.source:\n                for r in sheet.rows:\n                    yield (sheet, r)\n                    prog.addProgress(1)\n\n                for idx, col in enumerate(sheet.visibleCols):\n                    if not keyedcols[col.name]:  # first column with this name/number\n                        self.addColumn(ConcatColumn(col.name, cols=keyedcols[col.name], type=col.type))\n\n                    if sheet in keyedcols[col.name]:  # two columns with same name on sheet\n                        keyedcols[idx][sheet] = col  # key by column num instead\n                        self.addColumn(ConcatColumn(col.name, cols=keyedcols[idx], type=col.type))\n                    else:\n                        keyedcols[col.name][sheet] = col\n\n\n@VisiData.api\ndef inputJointype(vd):\n    prompt = 'choose jointype: '\n    def _fmt_aggr_summary(match, row, trigger_key):\n        formatted_jointype = match.formatted.get('key', row.key) if match else row.key\n        r = ' '*(dispwidth(prompt)-3)\n        r += f' [:keystrokes]{trigger_key}[/] ' if trigger_key else '   '\n        r += f'[:bold]{formatted_jointype}[/]'\n        if row.desc:\n            r += ' - '\n            r += match.formatted.get('desc', row.desc) if match else row.desc\n        return r\n\n    return vd.activeSheet.inputPalette(prompt,\n            vd.jointypes,\n            value_key='key',\n            formatter=_fmt_aggr_summary,\n            help=vd.help_join,\n            type='jointype')\n\n\nIndexSheet.addCommand('&', 'join-selected', 'left, rights = someSelectedRows[0], someSelectedRows[1:]; vd.push(left.openJoin(rights, jointype=inputJointype()))', 'join selected sheets with visible columns from all, keeping rows according to jointype')\nIndexSheet.bindkey('g&', 'join-selected')\nSheet.addCommand('&', 'join-sheets-top2', 'vd.push(openJoin(vd.sheets[1:2], jointype=inputJointype()))', 'join top two sheets on Sheets Stack')\nSheet.addCommand('g&', 'join-sheets-all', 'vd.push(openJoin(vd.sheets[1:], jointype=inputJointype()))', 'join all sheets on Sheets Stack')\nColumnsSheet.addCommand('&', 'join-sheets-cols', 'vd.push(join_sheets_cols(selectedRows, jointype=inputJointype()))', 'join sheets for selected columns')\n\nvd.addMenuItems('''\n    Data > Join > Selected Sheets > choose jointype > join-selected\n    Data > Join > Top Two Sheets > choose jointype > join-sheets-top2\n    Data > Join > All Sheets > choose jointype > join-sheets-all\n''')\n\nfor d in vd.jointypes:\n    jointype, joinhelp = d.key, d.desc\n    IndexSheet.addCommand('', f'join-selected-{jointype}', 'left, rights = someSelectedRows[0], someSelectedRows[1:]; vd.push(left.openJoin(rights, jointype=\"{jointype}))', f'join selected sheets, keeping {joinhelp}')\n    Sheet.addCommand('', f'join-sheets-top2-{jointype}', f'vd.push(openJoin(vd.sheets[1:2], jointype=\"{jointype}\"))', f'join top two sheets on Sheets Stack, keeping {joinhelp}')\n    Sheet.addCommand('', f'join-sheets-all-{jointype}', f'vd.push(openJoin(vd.sheets[1:], jointype=\"{jointype}\"))', f'join all sheets on Sheets Stack, keeping {joinhelp}')\n    ColumnsSheet.addCommand('', 'join-cols-{jointype}', 'vd.push(join_sheets_cols(selectedRows, jointype=inputJointype()))', f'join sheets for selected columns, keeping {joinhelp}')\n\n    vd.addMenuItems(f'''Data > Join > Selected Sheets > {jointype} > join-selected-{jointype}''')\n    vd.addMenuItems(f'''Data > Join > Top Two Sheets > {jointype} > join-sheets-top2-{jointype}''')\n    vd.addMenuItems(f'''Data > Join > All Sheets > {jointype} > join-selected-{jointype}''')\n\nIndexSheet.guide += '''\n    - `&` to join the selected sheets together\n'''\n"
  },
  {
    "path": "visidata/features/known_cols.py",
    "content": "'''#1488\nUsage (in .visidatarc):\n\n\n    DirSheet.knownCols.directory.width = 0\n    Sheet.knownCols.date.type = date\n'''\n\nfrom visidata import Sheet, DefaultAttrDict\n\n\nSheet.knownCols = DefaultAttrDict()\n\n\n@Sheet.before\ndef afterLoad(sheet):\n    for colname, attrs in sheet.knownCols.items():\n        col = sheet.colsByName.get(colname)\n        if col:\n            for k, v in attrs.items():\n                setattr(col, k, v)\n"
  },
  {
    "path": "visidata/features/layout.py",
    "content": "from visidata import VisiData, vd, Column, Sheet, Fanout, asyncthread\n\n@Column.api\ndef setWidth(self, w):\n    if self.width != w:\n        if self.width == 0 or w == 0:  # hide/unhide\n            vd.addUndo(setattr, self, '_width', self.width)\n    self._width = w\n\n\n@Column.api\ndef toggleWidth(self, width):\n    'Change column width to either given `width` or default value.'\n    if self.width != width:\n        self.width = width\n    else:\n        self.width = int(self.sheet.options.default_width)\n\n\n@Column.api\ndef toggleMultiline(self):\n    if self.height == 1:\n        self.height = self.sheet.options.default_height\n    else:\n        self.height = 1\n\n@VisiData.api\ndef unhide_cols(vd, cols, rows):\n    'sets appropriate width if column was either hidden (0) or unseen (None)'\n    for c in cols:\n        c.setWidth(abs(c.width or 0) or c.getMaxWidth(rows))\n\n@VisiData.api\ndef hide_col(vd, col):\n    if not col: vd.fail(\"no columns to hide\")\n    col.hide()\n\n@Sheet.api\n@asyncthread\ndef hide_uniform_cols(sheet):\n    if len(sheet.rows) < 2:\n        return\n    idx = sheet.cursorVisibleColIndex\n    for i, col in enumerate(sheet.visibleCols):\n        vals = (col.getTypedValue(r) for r in sheet.rows)\n        first = next(vals)\n        if all(v == first for v in vals):\n            vd.status(f'hide {col.name} with value: {col.getDisplayValue(sheet.rows[0])}')\n            if i <= idx:\n                sheet.cursorRight(-1)\n            col.hide()\n\nSheet.addCommand('_', 'resize-col-max', 'if cursorCol: cursorCol.toggleWidth(cursorCol.getMaxWidth(visibleRows))', 'toggle width of current column between full and default width')\nSheet.addCommand('z_', 'resize-col-input', 'width = int(input(\"set width= \", value=cursorCol.width)); cursorCol.setWidth(width)', 'adjust width of current column to N')\nSheet.addCommand('g_', 'resize-cols-max', 'for c in visibleCols: c.toggleWidth(c.getMaxWidth(visibleRows))', 'toggle widths of all visible columns between full and default width')\nSheet.addCommand('gz_', 'resize-cols-input', 'width = int(input(\"set width= \", value=cursorCol.width)); Fanout(visibleCols).setWidth(width)', 'adjust widths of all visible columns to N')\n\nSheet.addCommand('-', 'hide-col', 'hide_col(cursorCol)', 'hide the current column')\nSheet.addCommand('z-', 'resize-col-half', 'width = cursorCol.width if cursorCol.width is not None else options.default_width; cursorCol.setWidth(width//2)', 'reduce width of current column by half')\nSheet.addCommand('g-', 'hide-uniform-cols', 'sheet.hide_uniform_cols()', 'hide any column that has multiple rows but only one distinct value')\n\nSheet.addCommand('gv', 'unhide-cols', 'unhide_cols(columns, visibleRows)', 'unhide all hidden columns on current sheet')\nSheet.addCommand('v', 'toggle-multiline', 'for c in visibleCols: c.toggleMultiline()', 'toggle multiline display')\nSheet.addCommand('zv', 'resize-height-input', 'Fanout(visibleCols).height=int(input(\"set height for all columns to: \", value=max(c.height for c in sheet.visibleCols)))', 'resize row height to N')\nSheet.addCommand('gzv', 'resize-height-max', 'h=calc_height(cursorRow, {}, maxheight=windowHeight-1); vd.status(f\"set height for all columns to {h}\"); Fanout(visibleCols).height=h', 'resize row height to max height needed to see this row')\n\nvd.addMenuItems('''\n    Column > Hide > Hide > hide-col\n    Column > Hide > Hide uniform > hide-uniform-cols\n    Column > Hide > Unhide all > unhide-cols\n    Column > Resize > half width > resize-col-half\n    Column > Resize > current column width to max > resize-col-max\n    Column > Resize > current column width to N > resize-col-input\n    Column > Resize > all columns width to max > resize-cols-max\n    Column > Resize > all columns width to N > resize-cols-input\n    Row > Resize > height to N > resize-height-input\n    Row > Resize > height to max > resize-height-max\n    View > Toggle display > multiline > toggle-multiline\n''')\n"
  },
  {
    "path": "visidata/features/melt.py",
    "content": "import collections\nimport re\nfrom copy import copy\n\nfrom visidata import Sheet, SubColumnItem, ColumnItem, Column, Progress\nfrom visidata import asyncthread, vd\n\nmelt_var_colname = 'Variable' # column name to use for the melted variable name\nmelt_value_colname = 'Value'  # column name to use for the melted value\nmelt_null = False   # whether to include rows for null values during melt\n\n\n# rowdef: {0:sourceRow, 1:Category1, ..., N:CategoryN, ColumnName:Column, ...}\nclass MeltedSheet(Sheet):\n    \"Perform 'melt', the inverse of 'pivot', on input `source` sheet.  Pass `regex` to parse column names into additional columns\"\n\n    rowtype = 'melted values'\n\n    def getValueCols(self) -> dict:\n        '''Return dict of ('Category1', 'Category2') -> list of tuple('ColumnName', Column)'''\n        colsToMelt = [copy(c) for c in self.source.nonKeyVisibleCols]\n\n        # break down Category1_Category2_ColumnName as per regex\n        valcols = collections.OrderedDict()\n        for c in colsToMelt:\n            c.aggregators = [vd.aggregators['max']]\n            m = re.match(self.regex, c.name)\n            if m:\n                if len(m.groups()) == 1:\n                    varvals = m.groups()\n                    valcolname = melt_value_colname\n                else:\n                    *varvals, valcolname = m.groups()\n                cats = tuple(varvals)\n                if cats not in valcols:\n                    valcols[cats] = []\n                valcols[cats].append((valcolname, c))\n                ncats = len(varvals)\n            else:\n                vd.status(f'\"{c.name}\" column does not match regex, skipping')\n                ncats = 0\n\n        return valcols\n\n    def resetCols(self):\n        self.columns = []\n        sheet = self.source\n        for c in sheet.keyCols:\n            self.addColumn(SubColumnItem(0, c))\n        self.setKeys(self.columns)\n\n        valcols = self.getValueCols()\n        othercols = set()\n        ncats = 0\n        for colnames, cols in valcols.items():\n            ncats = max(ncats, len(colnames))\n            for cname, _ in cols:\n                othercols.add(cname)\n\n        if ncats == 1:\n            self.addColumn(ColumnItem(melt_var_colname, 1))\n        else:\n            for i in range(ncats):\n                self.addColumn(ColumnItem(f'{melt_var_colname}{i+1}', i+1))\n\n        for cname in othercols:\n            self.addColumn(Column(cname,\n                getter=lambda col,row,cname=cname: row[cname].getValue(row[0]),\n                setter=lambda col,row,val,cname=cname: row[cname].setValues([row[0]], val),\n                aggregators=[vd.aggregators['max']]))\n\n    def iterload(self):\n        isNull = self.isNullFunc()\n\n        valcols = self.getValueCols()\n        for r in Progress(self.source.rows, 'melting'):\n            for colnames, cols in valcols.items():\n                meltedrow = {}\n                for varval, c in cols:\n                    try:\n                        if melt_null or not isNull(c.getValue(r)):\n                            meltedrow[varval] = c\n                    except Exception as e:\n                        pass\n\n                if meltedrow:  # remove rows with no content (all nulls)\n                    meltedrow[0] = r\n                    for i, colname in enumerate(colnames):\n                        meltedrow[i+1] = colname\n\n                    yield meltedrow\n\n\n@Sheet.api\ndef openMelt(sheet, regex='(.*)'):\n    return MeltedSheet(sheet.name, 'melted', source=sheet, regex=regex)\n\n\nSheet.addCommand('M', 'melt', 'vd.push(openMelt())', 'open Melted Sheet (unpivot), with key columns retained and all non-key columns reduced to Variable-Value rows')\n\nSheet.addCommand('gM', 'melt-regex', 'vd.push(openMelt(vd.inputRegex(\"regex to split colname: \", value=\"(.*)_(.*)\", type=\"regex-capture\")))', 'open Melted Sheet (unpivot), with key columns retained and regex capture groups determining how the non-key columns will be reduced to Variable-Value rows')\n\nvd.addMenuItems('''\n    Data > Melt > nonkey columns > melt\n    Data > Melt > nonkey columns by regex > melt-regex\n''')\nvd.addGlobals(MeltedSheet=MeltedSheet)\n"
  },
  {
    "path": "visidata/features/normcol.py",
    "content": "\"\"\"\n# Usage\n\nThis plugin normalizes column names in any given sheet, so that the names are:\n\n- Composed only of lowercase letters, numbers, and underscores.\n\n- Valid Python identifiers. This is mostly handled by the rule above, but also\n  prohibits names beginning with a digit; that is handled by prefixing those\n  names with an underscore.\n\n- Unique within the sheet. Non-unique names are suffixed with \"__\" and an\n  integer.\n\nUnnamed columns are left as such.\n\nFor instance, a sheet with the following columns names:\n\n- \"Genus, Species\"\n- \"Height\"\n- \"5-score\"\n- \"Height\"\n- \"\"\n- \"\"\n\n... would be converted to have the following column names:\n\n- \"genus_species\"\n- \"height__0\"\n- \"_5_score\"\n- \"height__1\"\n- \"\"\n- \"\"\n\n## Commands\n\n- `normalize-col-names` normalizes the names of all *non-hidden* columns in the\n  active sheet, per the approach described above.\n\n\"\"\"\n\n__author__ = \"Jeremy Singer-Vine <jsvine@gmail.com>\"\n\nfrom visidata import vd, Sheet, asyncthread, Progress\nfrom collections import Counter\nimport re\nimport string\n\nnonalphanum_pat = re.compile(r\"[^a-z0-9]+\")\n\n\ndef normalize_name(name):\n    \"\"\"\n    Given a string, return a normalized string, per the first two rules\n    described above.\n    \"\"\"\n    # Lowercase and replace all non-alphanumeric characters with _\n    subbed = re.sub(nonalphanum_pat, \"_\", name.lower())\n\n    # Remove leading and trailing _s\n    stripped = subbed.strip(\"_\")\n\n    # To ensure it's a valid Python identifier\n    if (stripped or \"_\")[0] in string.digits:\n        stripped = \"_\" + stripped\n\n    return stripped\n\n\ndef gen_normalize_names(names):\n    \"\"\"\n    Given a list of strings, yield fully-normalized conversions of those\n    strings, ensuring that each is unique.\n    \"\"\"\n    base = list(map(normalize_name, names))\n    counts = Counter(base)\n\n    # Append __{i} to non-unique names\n    seen = dict((key, 0) for key in counts.keys())\n    for name in base:\n        if counts[name] == 1 or name == \"\":\n            norm_name = name\n        else:\n            norm_name = name + \"__\" + str(seen[name])\n            seen[name] += 1\n        yield norm_name\n\n\n@Sheet.api\n@asyncthread\ndef normalize_column_names(sheet):\n    \"\"\"\n    Normalize the names of all non-hidden columns on the active sheet.\n    \"\"\"\n\n    init_names = {}\n    gen = gen_normalize_names(c.name for c in sheet.visibleCols)\n    prog = Progress(gen, gerund=\"normalizing\", total=sheet.nVisibleCols)\n\n    for i, norm_name in enumerate(prog):\n        col = sheet.visibleCols[i]\n        init_names[col] = col.name  # Store for undo\n        col.name = norm_name\n\n    @asyncthread\n    def undo():\n        for c, oldname in init_names.items():\n            c.name = oldname\n\n    vd.addUndo(undo)\n\n\n# Add longname-commands to VisiData to execute these methods\nSheet.addCommand(None, \"normalize-col-names\", \"vd.sheet.normalize_column_names()\", \"normalize the names of all non-hidden columns\")\n\nvd.addMenuItems('''\n    Column > Rename > normalize all > normalize-col-names\n''')\n"
  },
  {
    "path": "visidata/features/open_config.py",
    "content": "from visidata import vd, BaseSheet\n\nBaseSheet.addCommand('gO', 'open-config', 'vd.push(open_txt(Path(options.config)))', 'open options.config as text sheet')\n\nvd.addMenuItems('''\n    File > Options > edit config file > open-config\n''')\n"
  },
  {
    "path": "visidata/features/open_syspaste.py",
    "content": "'''\nLoad new table from system clipboard\n'''\n\nfrom visidata import vd, BaseSheet, Path\n\n\n@BaseSheet.api\ndef open_syspaste(sheet, filetype='tsv'):\n    import io\n\n    v = vd.sysclipValue().strip() or vd.fail('nothing to open')\n\n    p = Path('syspaste'+'.'+filetype, fp=io.BytesIO(v.encode('utf-8')))\n    return vd.openSource(p, filetype=filetype)\n\n\nBaseSheet.addCommand('gShift+P', 'open-syspaste', 'vd.push(open_syspaste(filetype=vd.input(\"paste as filetype: \", value=\"tsv\")))', 'open clipboard as filetype')\n"
  },
  {
    "path": "visidata/features/ping.py",
    "content": "# requires shell tools: ping traceroute\n#   these tools aren't inlined as they require root privs\n\nimport re\nimport time\nfrom statistics import mean\n\nfrom visidata import vd, VisiData, BaseSheet, Sheet, Column, AttrColumn, Progress\n\n@VisiData.api\ndef new_ping(vd, p):\n    'Open a sheet with the round-trip time for each hop along the path to the given host.'\n    return makePingStats(p.given)\n\n# open_ping() is called when a local file exists matching the path p, otherwise new_ping() is called\nvd.open_ping = vd.new_ping\n\ndef makePingStats(ip):\n    pingsheet = PingSheet(ip, source=ip)\n    return PingStatsSheet(\"traceroute_\"+pingsheet.name, source=pingsheet)\n\nclass PingStatsSheet(Sheet):\n    help='''# ping/traceroute\nThis sheet runs `traceroute` to generate intermediate hops, then runs `ping` against each hop N times to get the `avg_ms` and `max_ms` ping time.\n\n- {help.commands.open_source} (for raw ping data)\n'''\n    rowtype='hosts' # rowdef: PingColumn\n    columns = [\n        Column('hop', type=int, width=5, getter=lambda col,r: col.sheet.source.sources.index(r.ip)+1),\n        Column('hostname', getter=lambda col,r: r.name, width=40),\n        Column('ip',  getter=lambda col,r: r.ip, width=17),\n        Column('avg_ms', type=float, fmtstr='%.1f', getter=lambda col,r: mean(r.getValues(col.sheet.source.rows))),\n        Column('max_ms', type=float, fmtstr='%.1f', getter=lambda col,r: max(r.getValues(col.sheet.source.rows))),\n        Column('count',  type=int, getter=lambda col,r: len(list(r.getValues(col.sheet.source.rows)))),\n    ]\n    def loader(self):\n        sheet = self.source\n        vd.sync(sheet.ensureLoaded())\n\n        self.rows = sheet.columns\n\n\ndef PingColumn(name, ip):\n    return Column(name, ip=ip, getter=lambda c,r: r.get(c.ip), type=float, fmtstr='%0.1f')\n\n\nclass PingSheet(Sheet):\n    rowtype = 'pings'  # rowdef: {'time':time.time(), 'hostname': pingtime}\n    def __init__(self, *names, source=None, **kwargs):\n        super().__init__(*names, source=source, **kwargs)\n        self.sources = [source]\n\n    def ping_response(self, row, ip, data):\n        for line in data.splitlines():\n            m = re.search(r'from ([0-9\\.]+).* time=(.*) ms', line)\n            if m:\n                row[ip] = m.group(2)\n#                assert ip == m.group(1)\n\n    def traceroute_response(self, ip, data):\n        for line in data.splitlines():\n            m = re.search(r'(\\d+)  (\\S+) \\((\\S+)\\)  (.*) ms', line)\n            if m:\n                ttl, hostname, inner_ip, latency_ms = m.groups()\n                self.routes[ip][int(ttl)-1] = inner_ip\n                if inner_ip == ip:\n                    return  # traceroute work is done, let ping do the rest\n\n                if inner_ip not in self.sources:\n                    self.sources.insert(-1, inner_ip)\n                    self.addColumn(PingColumn(hostname, inner_ip), index=-1)\n                    self.send_trace(ip, int(ttl)+1)  # get next hop\n                break\n\n    def ping_error(self, ip, data):\n        if ip in self.sources:\n            self.sources.remove(ip)\n            vd.warning(\"%s removed: %s\" % (ip, data.rstrip()))\n\n    def update_traces(self, row, ip):\n        rtes = self.routes.get(ip)\n        if rtes is None:\n            rtes = []\n            self.routes[ip] = rtes\n\n        if ip in rtes:\n            return\n\n        for i, inner_ip in enumerate(rtes):\n            if inner_ip is None:\n                self.send_trace(ip, i+1)\n\n        self.send_trace(ip, len(rtes)+1)  # and one more for the road\n\n    def send_trace(self, ip, n):\n        sh = vd.importExternal('sh')\n\n        while n > len(self.routes[ip]):\n            self.routes[ip].append(None)\n\n        sh.traceroute('--sim-queries=1',\n                      '--queries=1',\n                      '--first=%s' % n,\n                      '--max-hops=%s' % n,\n                      ip,\n                      _bg=True, _bg_exc=False,\n                      _out=lambda data,self=self,ip=ip,a=1: self.traceroute_response(ip, data),\n                      _err=lambda data,self=self,ip=ip,a=1: self.ping_error(ip, data))\n\n    def iterload(self):\n        sh = vd.importExternal('sh')\n\n        self.stop = False\n        self.start_time = time.time()\n        self.columns.clear()\n\n        for ip in self.sources:\n            self.addColumn(PingColumn(ip, ip))\n\n        self.routes = {}\n        self.rows = []\n        pings_sent = {}\n        ping_count = self.options.ping_count\n        with Progress(total=ping_count*len(self.sources), gerund='pinging') as prog:\n          while not self.stop:\n            r = {'time':time.time()}\n            yield r\n\n            npings = 0  # this loop\n            for ip in self.sources:\n                self.update_traces(r, ip)\n                pings_sent[ip] = pings_sent.get(ip, 0)+1\n                if ping_count and pings_sent[ip] <= ping_count:\n                    sh.ping('-c', '1', ip, _bg=True, _bg_exc=False, _timeout=30,\n                            _out=lambda data,self=self,r=r,ip=ip: self.ping_response(r,ip,data),\n                            _err=lambda data,self=self,ip=ip,a=1: self.ping_error(ip, data))\n                    npings += 1\n                else:\n                    r[ip] = None\n\n            if npings == 0:\n                vd.status('no more pings to send')\n                break\n\n            time.sleep(self.options.ping_interval)\n\n\nvd.option('ping_count', 3, 'send this many pings to each host', sheettype=PingSheet)\nvd.option('ping_interval', 0.1, 'wait between ping rounds, in seconds', sheettype=PingSheet)\n\nPingSheet.options.null_value = False\nBaseSheet.addCommand('', 'open-ping', 'vd.push(makePingStats(vd.input(\"ping: \", type=\"hostip\")))', 'open sheet to ping input IP Address', testable=False)\n\nvd.addGlobals(\n    makePingStats=makePingStats,\n)\n\nvd.addMenuItems('''\n    System > Ping IP/hostname > open-ping\n''')\n"
  },
  {
    "path": "visidata/features/procmgr.py",
    "content": "from visidata import *\n\n\n@VisiData.api\ndef new_top(vd, p):\n    return vd.processes\n\n\nclass CPUStatsSheet(Sheet):\n    rowtype='CPUs'  # rowdef = (count, perfect, times, freq) from psutil (see below)\n    columns = [\n        ColumnItem('cpu', 0, type=int, keycol=0),\n        ColumnItem('cpu_pct', 1, type=float)\n    ]\n    def iterload(self):\n        psutil = vd.importExternal('psutil')\n\n        for i, k in enumerate(psutil.cpu_times()._fields):\n            self.addColumn(SubColumnItem(2, ColumnItem(k+'_s', i, type=float, sheet=self)))\n\n        for i, k in enumerate(psutil.cpu_freq()._fields):\n            self.addColumn(SubColumnItem(3, ColumnItem(k+'_MHz', i, type=float, sheet=self)))\n\n        for r in zip(range(psutil.cpu_count()),\n                        psutil.cpu_percent(percpu=True),\n                        psutil.cpu_times(percpu=True),\n                        psutil.cpu_freq(percpu=True)):\n            yield r\n\n\n\nclass MemStatsSheet(Sheet):\n    rowtype = ''  # rowdef: (name, value)\n    columns = [\n        AttrColumn('t', type=date, fmtstr='%H:%M:%S'),\n        AttrColumn('meminfo'),\n        AttrColumn('virtmem'),\n        AttrColumn('swapmem'),\n    ]\n    nKeys = 1\n\n    def iterload(self):\n        psutil = vd.importExternal('psutil')\n        import time\n\n        proc = psutil.Process()\n\n        while True:\n            yield AttrDict(t=time.time(),\n                         virtmem=psutil.virtual_memory(),\n                         swapmem=psutil.swap_memory(),\n                         meminfo=proc.memory_info(),\n                        )\n\n            if self.nRows == 1:  # first time through\n                for n in 'meminfo virtmem swapmem'.split():\n                    c = self.column(n)\n                    if not c.hidden:\n                        c.expand([self.rows[0]])\n\n            time.sleep(1)\n\n\nclass UsefulProcessesSheet(Sheet):\n    columns = [\n        Column('pid', type=int, getter=lambda c,r: r[0].pid),\n        Column('name', getter=lambda c,r: r[0].name()),\n        Column('status', getter=lambda c,r: r[0].status()),\n        Column('cmdline', getter=lambda c,r: ' '.join(r[0].cmdline())),\n        Column('user', getter=lambda c,r: r[0].username()),\n        Column('real_uid', type=int, width=0, getter=lambda c,r: r[0].uids()[0]),\n        Column('effective_uid', type=int, width=0, getter=lambda c,r: r[0].uids()[1]),\n        Column('mem_uss', type=int, getter=lambda c,r: r[1].mem_uss),\n        Column('user_time_s', type=float, getter=lambda c,r: r[0].cpu_times()[0]),\n        Column('system_time_s', type=float, getter=lambda c,r: r[0].cpu_times()[1]),\n    ]\n    def iterload(self):\n        psutil = vd.importExternal('psutil')\n        for pr in psutil.process_iter():\n            yield (pr, pr.memory_full_info())\n\n\nclass ProcessesSheet(Sheet):\n    columns = [\n        Column('pid', type=int, getter=lambda c,r: r.pid),\n        Column('name', getter=lambda c,r: r.name()),\n        Column('status', getter=lambda c,r: r.status()),\n        Column('parent_pid', type=int, getter=lambda c,r: r.ppid()),\n        Column('exe', getter=lambda c,r: r.exe()),\n        Column('cmdline', getter=lambda c,r: ' '.join(r.cmdline())),\n        Column('cwd', getter=lambda c,r: r.cwd()),\n        Column('user', getter=lambda c,r: r.username()),\n\n        Column('real_uid', type=int, width=0, getter=lambda c,r: r.uids()[0]),\n        Column('effective_uid', type=int, width=0, getter=lambda c,r: r.uids()[1]),\n        Column('saved_uid', type=int, width=0, getter=lambda c,r: r.uids()[2]),\n\n        Column('real_gid', type=int, width=0, getter=lambda c,r: r.gids()[0]),\n        Column('effective_gid', type=int, width=0, getter=lambda c,r: r.gids()[1]),\n        Column('saved_gid', type=int, width=0, getter=lambda c,r: r.gids()[2]),\n\n        Column('create_time', type=date, getter=lambda c,r: r.create_time()),\n        Column('cpu_num', type=int, getter=lambda c,r: r.cpu_num()),\n        Column('cpu_percent', type=float, getter=lambda c,r: r.cpu_percent()),\n\n        Column('tty', getter=lambda c,r: r.terminal()),\n        Column('nice', getter=lambda c,r: r.nice()),\n        Column('ioclass', getter=lambda c,r: r.ionice()[0]),\n        Column('ionice', getter=lambda c,r: r.ionice()[1]),\n\n        Column('user_time_s', type=float, getter=lambda c,r: r.cpu_times()[0]),\n        Column('system_time_s', type=float, getter=lambda c,r: r.cpu_times()[1]),\n        Column('children_user_time_s', type=float, width=0, getter=lambda c,r: r.cpu_times()[2]),\n        Column('children_system_time_s', type=float, width=0, getter=lambda c,r: r.cpu_times()[3]),\n\n        Column('read_ops', type=int, getter=lambda c,r: r.io_counters()[0]),\n        Column('write_ops', type=int, getter=lambda c,r: r.io_counters()[1]),\n        Column('read_bytes', type=int, getter=lambda c,r: r.io_counters()[2]),\n        Column('write_bytes', type=int, getter=lambda c,r: r.io_counters()[3]),\n\n        Column('voluntary_ctx_switches', type=int, getter=lambda c,r: r.num_ctx_switches()[0]),\n        Column('involuntary_ctx_switches', type=int, getter=lambda c,r: r.num_ctx_switches()[1]),\n        Column('num_fds', type=int, getter=lambda c,r: r.num_fds()),\n        Column('num_threads', type=int, getter=lambda c,r: r.num_threads()),\n    ]\n    nKeys = 2\n\n    def iterload(self):\n        psutil = vd.importExternal('psutil')\n#        self.columns = []\n#        for c in ProcessesSheet.columns:\n#            self.addColumn(c)\n\n        for i,k in enumerate(psutil.Process().memory_full_info()._fields):\n            self.addColumn(Column('mem_'+k, type=int, getter=lambda c,r,i=i: r.memory_full_info()[i], cache=True))\n        # mem_uss is probably the most representative metric for determining how much memory is actually being used by a process. It represents the amount of memory that would be freed if the process was terminated right now.\n\n        yield from psutil.process_iter()\n#            try:\n#                self.addRow((pr, pr.memory_full_info()))\n#            except:\n#                self.addRow((pr, None))\n\nclass RlimitsSheet(Sheet):\n    columns = [\n        ColumnItem('rlimit', 0),\n        Column('soft', type=int, getter=lambda c,r: c.sheet.soft(r), setter=lambda c,r,v: c.sheet.set_soft(r, v)),\n        Column('hard', type=int, getter=lambda c,r: c.sheet.hard(r), setter=lambda c,r,v: c.sheet.set_hard(r, v))\n    ]\n\n    def soft(self, r):\n        return self.source.rlimit(r[1])[0]\n    def hard(self, r):\n        return self.source.rlimit(r[1])[1]\n    def set_soft(self, r, v):\n        self.source.rlimit(r[1], (v, self.hard(r)))\n    def set_hard(self, r, v):\n        self.source.rlimit(r[1], (self.soft(r), v))\n\n    def iterload(self):\n        psutil = vd.importExternal('psutil')\n        for r in dir(psutil):\n            if r.startswith('RLIMIT'):\n                yield (r[7:], getattr(psutil, r))\n\n\n@VisiData.lazy_property\ndef cpuStats(vd):\n    return CPUStatsSheet('cpu_stats')\n\n@VisiData.lazy_property\ndef memStats(vd):\n    return MemStatsSheet('memory_stats')\n\n@VisiData.lazy_property\ndef processes(vd):\n    return ProcessesSheet('processes')\n\n\nBaseSheet.addCommand('', 'open-cpustats', 'vd.push(vd.cpuStats)', 'open CPU usage stats' )\nBaseSheet.addCommand('', 'open-memstats', 'vd.push(vd.memStats)', 'open memory usage stats')\nBaseSheet.addCommand('', 'open-processes', 'vd.push(vd.processes)', 'open system process stats')\n\n@VisiData.api\ndef chooseSignal(vd):\n    import signal\n    d = [{'key': attr[3:]} for attr in dir(signal) if attr.startswith('SIG') and not attr.startswith('SIG_')]\n    return getattr(signal, 'SIG'+vd.chooseOne(d, type='signal'))\n\nProcessesSheet.addCommand('d', 'term-process', 'os.kill(cursorRow.pid, signal.SIGTERM)', 'send SIGTERM to process')\nProcessesSheet.addCommand('gd', 'term-selected', 'for r in someSelectedRows: os.kill(r.pid, signal.SIGTERM)', 'send SIGTERM to selected processes')\nProcessesSheet.addCommand('zd', 'kill-process', 'os.kill(cursorRow.pid, signal.SIGKILL)', 'send SIGKILL to process')\nProcessesSheet.addCommand('gzd', 'kill-selected', 'for r in someSelectedRows: os.kill(r.pid, signal.SIGKILL)', 'send SIGKILL to selected processes')\n\nProcessesSheet.addCommand('Ctrl+K', 'signal-process', 'os.kill(cursorRow.pid, chooseSignal())', 'send chosen signal to process')\nUsefulProcessesSheet.addCommand('Ctrl+K', 'signal-selected', 'os.kill(cursorRow.pid, chooseSignal())', 'kill(2) send chosen signal to process')\nUsefulProcessesSheet.addCommand('', 'open-rlimits', 'vd.push(RlimitsSheet(cursorRow.name() + \"_rlimits\", cursorRow))', 'push rlimits for this process')\n\nvd.addMenuItem('System', 'Signal', 'current process', 'TERMinate', 'term-process')\nvd.addMenuItem('System', 'Signal', 'current process', 'KILL', 'kill-process')\nvd.addMenuItem('System', 'Signal', 'current process', 'choose signal', 'signal-process')\nvd.addMenuItem('System', 'Signal', 'selected processes', 'TERMinate', 'term-selected')\nvd.addMenuItem('System', 'Signal', 'selected processes', 'KILL', 'kill-selected')\nvd.addMenuItem('System', 'Signal', 'selected processes', 'choose signal', 'signal-selected')\nvd.addMenuItem('System', 'Stats', 'CPU', 'open-cpustats')\nvd.addMenuItem('System', 'Stats', 'memory', 'open-memstats')\nvd.addMenuItem('System', 'Stats', 'processes', 'open-processes')\nvd.addMenuItem('System', 'Stats', 'resource limits', 'open-rlimits')\n"
  },
  {
    "path": "visidata/features/pypkg.py",
    "content": "from visidata import vd, BaseSheet, Column\nfrom visidata.pyobj import PythonSheet, PyobjSheet\n\n\n# rowdef: Distribution object from importlib.metadata\nclass PythonPackagesSheet(PythonSheet):\n    'Sheet displaying installed Python packages via importlib.metadata.distributions()'\n    rowtype = 'packages'\n    columns = [\n        Column('name', getter=lambda c,r: r.name),\n        Column('version', getter=lambda c,r: r.version),\n        Column('summary', getter=lambda c,r: r.metadata.get('Summary', '')),\n        Column('author', getter=lambda c,r: r.metadata.get('Author', '')),\n        Column('license', getter=lambda c,r: r.metadata.get('License', '')),\n        Column('location', getter=lambda c,r: str(r._path.parent) if hasattr(r, '_path') and r._path else ''),\n        Column('home_page', getter=lambda c,r: r.metadata.get('Home-page', '')),\n    ]\n    nKeys = 1\n\n    def reload(self):\n        import importlib.metadata\n        distributions = list(importlib.metadata.distributions())\n        try:\n            self.rows = sorted(distributions, key=lambda d: d.name.lower())\n        except AttributeError:  # Python == 3.9       distributions do not have .name attr, instead use .metadata.distributions['Name']\n            for r in distributions:\n                r.name = r.metadata['Name']\n            self.rows = sorted(distributions, key=lambda d: d.name.lower())\n\n    def openRow(self, row):\n        'Open package metadata as Python object'\n        return PyobjSheet(f'{row.name}-{row.version}', source=row)\n\n\nBaseSheet.addCommand('', 'open-python-packages', 'vd.push(PythonPackagesSheet(\"python-packages\"))', 'open Python Packages Sheet listing the installed packages')\n\nvd.addMenuItems('''\n    System > Python > installed packages > open-python-packages\n''')\n\nvd.addGlobals(PythonPackagesSheet=PythonPackagesSheet)\n"
  },
  {
    "path": "visidata/features/random_sample.py",
    "content": "from visidata import vd, Sheet\n\nSheet.addCommand(None, 'random-rows', 'nrows=int(input(\"random number to filter: \", value=nRows)); vs=copy(sheet); vs.name=name+\"_sample\"; vs.rows=sample(rows, nrows or nRows); vd.push(vs)', 'open duplicate sheet with a random population subset of N rows')\nSheet.addCommand(None, 'select-random', 'nrows=int(input(\"random number to select: \", value=nRows)); select(sample(rows, nrows or nRows))', 'select random sample of N rows')\n\nvd.addMenuItems('Row > Select > random sample > select-random')\n"
  },
  {
    "path": "visidata/features/rank.py",
    "content": "import itertools\n\nfrom visidata import Sheet, ListAggregator, SettableColumn\nfrom visidata import vd, anytype, asyncthread, Progress\n\nclass RankAggregator(ListAggregator):\n    '''\n    Ranks start at 1, and each group's rank is 1 higher than the previous group.\n    When elements are tied in ranking, each of them gets the same rank.\n    '''\n    def aggregate(self, col, rows) -> [int]:\n        return self.aggregate_list(col, rows)\n\n    def aggregate_list(self, col, rows) -> [int]:\n        if not col.sheet.keyCols:\n            vd.error('ranking requires one or more key columns')\n        return self.rank(col, rows)\n\n    def rank(self, col, rows):\n        if col.keycol:\n            vd.warning('rank aggregator is uninformative for key columns')\n        def _key_progress(prog):\n            def identity(val):\n                prog.addProgress(1)\n                return val\n            return identity\n        with Progress(gerund='ranking', total=4*col.sheet.nRows) as prog:\n            p = _key_progress(prog) # increment progress every time p() is called\n            # compile row data, for each row a list of tuples: (group_key, rank_key, rownum)\n            rowdata = [(col.sheet.rowkey(r), col.getTypedValue(r), p(rownum)) for rownum, r in enumerate(rows)]\n            # sort by row key and column value to prepare for grouping\n            # If the column is in descending order, use descending order for within-group ranking.\n            reverse = next((r for (c, r) in col.sheet.ordering if c == col or c == col.name), False)\n            try:\n                rowdata.sort(reverse=reverse, key=p)\n                if reverse:\n                    vd.status('ranking {col.name} in descending order')\n            except TypeError as e:\n                vd.fail(f'elements in a ranking column must be comparable: {e.args[0]}')\n            rowvals = []\n            #group by row key\n            for _, group in itertools.groupby(rowdata, key=lambda v: v[0]):\n                # within a group, the rows have already been sorted by col_val\n                group = list(group)\n                # rank each group individually\n                group_ranks = rank_sorted_iterable([p(col_val) for _, col_val, rownum in group])\n                rowvals += [(rownum, rank) for (_, _, rownum), rank in zip(group, group_ranks)]\n            # sort by unique rownum, to make rank results match the original row order\n            rowvals.sort(key=p)\n            rowvals = [ rank for rownum, rank in rowvals ]\n        return rowvals\n\nvd.aggregators['rank'] = RankAggregator('rank', anytype, helpstr='list of ranks, when grouping by key columns', listtype=int)\n\ndef rank_sorted_iterable(vals_sorted) -> [int]:\n    '''*vals_sorted* is an iterable whose elements form one or more groups.\n    The iterable must already be sorted.'''\n\n    ranks = []\n    val_groups = itertools.groupby(vals_sorted)\n    for rank, (_, val_group) in enumerate(val_groups, 1):\n        for _ in val_group:\n            ranks.append(rank)\n    return ranks\n\n@Sheet.api\n@asyncthread\ndef addcol_sheetrank(sheet, rows):\n    '''\n    Each row is ranked within its sheet. Rows are ordered by the\n    value of their key columns.\n    '''\n    if not sheet.keyCols:\n        vd.error('ranking requires one or more key columns')\n    colname = f'{sheet.name}_sheetrank'\n    c = SettableColumn(name=colname, type=int)\n    sheet.addColumnAtCursor(c)\n    def _key_progress(prog):\n        def identity(val):\n            prog.addProgress(1)\n            return val\n        return identity\n    with Progress(gerund='ranking', total=5*sheet.nRows) as prog:\n        p = _key_progress(prog) # increment progress every time p() is called\n        ordering = [(col, reverse) for (col, reverse) in sheet.ordering if col.keycol]\n        rowkeys = [(sheet.rowkey(r), p(rownum), r) for rownum, r in enumerate(rows)]\n        if ordering:\n            vd.status('using custom ordering for keycol sort')\n            keycols_ordered = [col for (col, reverse) in ordering]\n            keycols_unordered = [keycol for keycol in sheet.keyCols if not keycol in keycols_ordered]\n            ordering += [(keycol, False) for keycol in keycols_unordered]\n            def _sortkey(e): # sort the rows by using the column\n                p(None)\n                return sheet.sortkey(e[2], ordering=ordering)\n            rowkeys.sort(key=_sortkey)\n        else:\n            rowkeys.sort(key=p)\n        ranks = rank_sorted_iterable([p(rowkey) for rowkey, _, _ in rowkeys])\n        row_ranks = sorted(zip((rownum for _, rownum, _ in rowkeys), ranks), key=p)\n        row_ranks = [rank for rownum, rank in row_ranks]\n        c.setValues(sheet.rows, *[p(row_rank) for row_rank in row_ranks])\n\nSheet.addCommand('', 'addcol-rank-sheet', 'sheet.addcol_sheetrank(rows)', 'add column with the rank of each row based on its key columns')\n"
  },
  {
    "path": "visidata/features/regex.py",
    "content": "import re\nimport random\n\nfrom visidata import asyncthread, options, vd\nfrom visidata import VisiData, BaseSheet, Sheet, Column, Progress\n\n\n@VisiData.lazy_property\ndef help_regex(vd):\n    return vd.getHelpPane('regex', module='visidata')\n\n\nvd.option('regex_maxsplit', 0, 'maxsplit to pass to regex.split', replay=True)\n\n@VisiData.api\ndef makeRegexSplitter(vd, regex, origcol):\n    return lambda row, regex=regex, origcol=origcol, maxsplit=options.regex_maxsplit: regex.split(origcol.getFullDisplayValue(row), maxsplit=maxsplit)\n\n@VisiData.api\ndef makeRegexMatcher(vd, regex, origcol):\n    if not regex.groups:\n        vd.fail('specify a capture group')  #1778\n    def _regexMatcher(row):\n        m = regex.search(origcol.getFullDisplayValue(row))\n        if m:\n            return m.groupdict() if m.groupdict() else m.groups()\n    return _regexMatcher\n\n\n@Sheet.api\ndef RegexColumn(vs, regexMaker, origcol, regexstr):\n    regex = re.compile(regexstr, vs.regex_flags())\n    func = regexMaker(regex, origcol)\n    return Column(origcol.name+'_re',\n                  getter=lambda col,row,func=func: func(row),\n                  origCol=origcol)\n\n\n@Sheet.api\n@asyncthread\ndef addRegexColumns(vs, regexMaker, origcol, regexstr):\n    regexstr or vd.fail('regex required')\n\n    regex = re.compile(regexstr, vs.regex_flags())\n\n    func = regexMaker(regex, origcol)\n\n    cols = {}\n    ncols = 0  # number of new columns added already\n    for r in Progress(vs.getSampleRows()):\n        m = vd.callNoExceptions(func, r)\n        if not m:\n            continue\n\n        if isinstance(m, dict):\n            for name in m:\n                if name in cols:\n                    continue\n                cols[name] = Column(origcol.name+'_'+str(name),\n                                    getter=lambda col,row,name=name,func=func: func(row)[name],\n                                    origCol=origcol)\n        elif isinstance(m, (tuple, list)):\n            for _ in range(len(m)-len(cols)):\n                cols[len(cols)] = Column(origcol.name+'_re'+str(len(cols)),\n                                         getter=lambda col,row,i=len(cols),func=func: func(row)[i],\n                                         origCol=origcol)\n        else:\n            raise TypeError(\"addRegexColumns() expects a dict, list, or tuple from regexMaker, but got a \"+type(m).__name__)\n\n    if not cols:\n        vd.warning(\"no regex matches found, didn't add column\")\n        return\n\n    vs.addColumnAtCursor(*cols.values())\n\n\n@VisiData.api\ndef regexTransform(vd, origcol, before='', after=''):\n    return lambda col,row,origcol=origcol,before=before,after=after,flags=origcol.sheet.regex_flags(): re.sub(before, after, origcol.getFullDisplayValue(row), flags=flags)\n\n\n@VisiData.api\ndef parse_sed_transform(vd, instr):\n    i = indexWithEscape(instr, '/')\n    if i is None:\n        return instr, ''\n    else:\n        return instr[:i], instr[i+1:]\n\n\ndef indexWithEscape(s, char, escape_char='\\\\'):\n    i=0\n    while i < len(s):\n        if s[i] == escape_char:\n            i += 1\n        elif s[i] == char:\n            return i\n        i += 1\n\n    return None\n\n\n@Sheet.api\n@asyncthread\ndef setValuesFromRegex(sheet, cols, rows, before='', after=''):\n    transforms = [vd.regexTransform(col, before=before, after=after) for col in cols]\n    vd.addUndoSetValues(cols, rows)\n    for r in Progress(rows, 'replacing'):\n        for col, transform in zip(cols, transforms):\n            vd.callNoExceptions(col.setValue, r, transform(col, r))\n\n    for col in cols:\n        col.recalc()\n\n\n@VisiData.api\ndef inputRegex(vd, prompt, type='regex', **kwargs):\n    return vd.input(prompt, type=type, help=vd.help_regex, **kwargs)\n\n\n\n@VisiData.api\ndef inputRegexSubst(vd, prompt):\n    'Input regex transform via oneliner (separated with `/`).  Return parsed transformer as dict(before=, after=).'\n    return vd.inputMultiple(before=dict(type='regex', prompt='search: ', help=prompt),\n                            after=dict(type='regex-replace', prompt='replace: ', help=prompt))\n\n\nSheet.addCommand(':', 'addcol-split', 'addColumnAtCursor(RegexColumn(makeRegexSplitter, cursorCol, inputRegex(\"split regex: \", type=\"regex-split\")))', 'add column split by regex')\nSheet.addCommand(';', 'addcol-capture', 'addColumnAtCursor(RegexColumn(makeRegexMatcher, cursorCol, inputRegex(\"capture regex: \", type=\"regex-capture\")))', 'add column captured by regex')\n\nSheet.addCommand('*', 'addcol-regex-subst', 'addColumnAtCursor(Column(cursorCol.name + \"_re\", getter=regexTransform(cursorCol, **inputRegexSubst(\"regex transform column\"))))', 'add column derived from current column, replacing `search` regex with `replace` (may include \\\\1 backrefs)')\nSheet.addCommand('g*', 'setcol-regex-subst', 'setValuesFromRegex([cursorCol], someSelectedRows, **inputRegexSubst(\"regex transform column\"))', 'modify selected rows in current column, replacing `search` regex with `replace`, (may include backreferences \\\\1 etc)')\nSheet.addCommand('gz*', 'setcol-regex-subst-all', 'setValuesFromRegex(visibleCols, someSelectedRows, **inputRegexSubst(f\"regex transform {nVisibleCols} columns\"))', 'modify selected rows in all visible columns, replacing `search` regex with `replace` (may include \\\\1 backrefs)')\n\n\nvd.addMenuItems('''\n    Edit > Modify > selected cells > regex substitution > setcol-regex-subst\n    Column > Add column > capture by regex > addcol-capture\n    Column > Add column > split by regex > addcol-split\n    Column > Add column > subst by regex > addcol-regex-subst\n    Row > Select > by regex > current column > select-col-regex\n    Row > Select > by regex > all columns > select-cols-regex\n    Row > Unselect > by regex > current column > unselect-col-regex\n    Row > Unselect > by regex > all columns > unselect-cols-regex\n''')\n"
  },
  {
    "path": "visidata/features/reload_every.py",
    "content": "import os\nimport time\n\nfrom visidata import vd, BaseSheet, Sheet, asyncignore, asyncthread, asyncsingle_queue, Path, ScopedSetattr\n\n\n@BaseSheet.api\n@asyncignore\ndef reload_every(sheet, seconds:int):\n    while True:\n        # continue reloading till vd.remove() runs, like when the sheet is quit\n        if not sheet in vd.sheets:\n            break\n        vd.sync(sheet.reload())\n        time.sleep(seconds)\n\n\n@BaseSheet.api\n@asyncthread\ndef reload_modified(sheet):\n    'Spawn thread to call sheet.reload_rows when sheet.source mtime has changed.'\n    p = sheet.source\n    assert isinstance(p, Path)\n    assert not p.is_url()\n\n    mtime = 0\n    while True:\n        t = os.stat(p).st_mtime\n        if t != mtime:\n            mtime = t\n            sheet.reload_rows()\n        time.sleep(1)\n\n\n@Sheet.api\n@asyncsingle_queue\ndef reload_rows(self):\n    '''Reload rows from ``self.source``, keeping current columns intact.  Async. If previous calls are running, waits for them to finish.'''\n    with (ScopedSetattr(self, 'loading', True),\n          ScopedSetattr(self, 'checkCursor', lambda: True),\n          ScopedSetattr(self, 'cursorRowIndex', self.cursorRowIndex)):\n            self.beforeLoad()\n            try:\n                self.loader()\n                vd.status(\"finished loading rows\")\n            finally:\n                self.afterLoad()\n\n\nBaseSheet.addCommand('', 'reload-every', 'sheet.reload_every(input(\"reload interval (sec): \", value=1))', 'schedule sheet reload every N seconds') #683\nBaseSheet.addCommand('', 'reload-modified', 'sheet.reload_modified()', 'reload sheet when source file modified (tail-like behavior)')  #1686\nSheet.addCommand('zCtrl+R', 'reload-rows', 'preloadHook(); reload_rows(); status(\"reloaded\")', 'Reload current sheet leaving current columns intact')\n\nvd.addMenuItems('''\n    File > Reload > rows only > reload-rows\n    File > Reload > every N seconds > reload-every\n    File > Reload > when source modified > reload-modified\n''')\n"
  },
  {
    "path": "visidata/features/rename_col_cascade.py",
    "content": "import ast\n\nfrom visidata import vd, Column, ExprColumn, Sheet\n\nvd.option('rename_cascade', False, 'cascade column renames into expressions')  #2088\n\n\nclass Renamer(ast.NodeTransformer):\n    def __init__(self, find, replace):\n        self.find = find\n        self.replace = replace\n\n    def visit_Name(self, node):\n        if node.id == self.find:\n            node.id = self.replace\n\n        return node\n\n\n@Column.before\ndef setName(col, newname):\n    if col.sheet and col.sheet.options.rename_cascade:\n        for c in col.sheet.columns:\n            if isinstance(c, ExprColumn):\n                parsed_expr = ast.parse(c.expr)\n                canon_expr = ast.unparse(parsed_expr)\n                new_expr = ast.unparse(Renamer(col.name, newname).visit(parsed_expr))\n                if new_expr != canon_expr:\n                    vd.addUndo(setattr, c, 'expr', c.expr)\n                    c.expr = new_expr\n"
  },
  {
    "path": "visidata/features/repeat.py",
    "content": "from visidata import vd, BaseSheet, VisiData, asyncthread, Progress\n\n\n@VisiData.property\ndef prevCmdlogRow(vd):\n    if not vd.cmdlog.rows:\n        vd.fail(\"no recent command to repeat\")\n\n    return vd.cmdlog.rows[-1]\n\n\n@BaseSheet.api\ndef repeat_last(sheet, cmdrow):\n    vd.queueCommand(cmdrow.longname, cmdrow.input, sheet=sheet)\n\n\n@BaseSheet.api\n@asyncthread\ndef repeat_for_n(sheet, cmdrow, n=1):\n    for i in range(n):\n        vd.queueCommand(cmdrow.longname, cmdrow.input, sheet=sheet)\n\n\n@BaseSheet.api\n@asyncthread\ndef repeat_for_selected(sheet, cmdrow):\n    for idx, r in enumerate(Progress(vd.sheet.rows)):\n        if vd.sheet.isSelected(r):\n            vd.queueCommand(cmdrow.longname, cmdrow.input, row=idx, sheet=sheet)\n\n\nBaseSheet.addCommand('', 'repeat-last', 'repeat_last(vd.prevCmdlogRow)', 'run most recent command with an empty, queried input')\nBaseSheet.addCommand('', 'repeat-input', 'repeat_for_n(vd.prevCmdlogRow, 1)', 'run previous modifying command (incl input)')\nBaseSheet.addCommand('', 'repeat-input-n', 'repeat_for_n(vd.prevCmdlogRow, input(\"# times to repeat prev command:\", value=1))', 'run previous command (incl its input) N times')\nBaseSheet.addCommand('', 'repeat-input-selected', 'repeat_for_selected(vd.prevCmdlogRow)', 'run previous command (incl its input) for each selected row')\n\nvd.addMenuItem('Edit', 'Repeat', 'last command', 'repeat-input')\nvd.addMenuItem('Edit', 'Repeat', 'last command N times', 'repeat-input-n')\nvd.addMenuItem('Edit', 'Repeat', 'last command for all selected rows', 'repeat-input-selected')\n"
  },
  {
    "path": "visidata/features/repl.py",
    "content": "\"\"\"\nLaunch an embedded ptipython REPL from within VisiData.\nContributed by @ajkerrigan #2290 #2736\n\"\"\"\n\nfrom pathlib import Path\n\nfrom visidata import LazyChainMap, Sheet, SuspendCurses, VisiData\n\n\n# Sheet-local properties that are expensive or problematic during\n# tab-completion in the REPL.  Override them with inert values.\n_REPL_OVERRIDES = dict(\n    replayStatus=\"dummy\",\n    someSelectedRows=\"dummy\",\n    onlySelectedRows=\"dummy\",\n)\n\n\nclass _LazyNamespace(dict):\n    'dict backed by a LazyChainMap; evaluates attributes lazily on access.'\n    def __init__(self, lcm):\n        # Seed dict keys so IPython tab-completion discovers names,\n        # but values are sentinel and resolved on first __getitem__.\n        super().__init__({k: _SENTINEL for k in lcm})\n        self._lcm = lcm\n\n    def __getitem__(self, k):\n        v = super().__getitem__(k)\n        if v is _SENTINEL:\n            v = self._lcm[k]\n            super().__setitem__(k, v)\n        return v\n\n    def __contains__(self, k):\n        return super().__contains__(k) or k in self._lcm\n\n_SENTINEL = object()\n\n\n@VisiData.api\ndef openRepl(vd):\n    \"\"\"Open a ptipython-based REPL that inherits VisiData's context.\"\"\"\n    ptipython = vd.importExternal('ptpython.ipython', 'ptpython')\n\n    def configure(python_input):\n        python_input.title = \"VisiData IPython REPL (ptipython)\"\n\n    lcm = LazyChainMap(vd.sheet, locals=vd.getGlobals())\n    user_ns = _LazyNamespace(lcm)\n    user_ns.update(_REPL_OVERRIDES)\n\n    with SuspendCurses():\n        try:\n            history_file = (\n                Path(vd.options.visidata_dir).expanduser()\n                / \"cache\"\n                / \"ptpython\"\n                / \"history\"\n            )\n            Path.mkdir(history_file.parent, parents=True, exist_ok=True)\n            ptipython.embed(\n                user_ns=user_ns,\n                history_filename=str(history_file),\n                vi_mode=True,\n                configure=configure,\n                title=\"VisiData IPython REPL (ptipython)\",\n            )\n        except Exception as e:\n            vd.exceptionCaught(e)\n        finally:\n            # The embedded IPython session is a singleton by default,\n            # but launching it via `open-repl` in VisiData a second time\n            # seems to either freeze or leave an exit message up from the\n            # previous instance. Clean out the existing instance so any\n            # future invocations get a fresh start.\n            ptipython.InteractiveShellEmbed.clear_instance()\n\n\nSheet.addCommand(\"\", \"open-repl\", \"vd.openRepl()\")\n"
  },
  {
    "path": "visidata/features/replay_bulk.py",
    "content": "import re\nimport time\n\nfrom visidata import vd, BaseSheet, Path, VisiData\n\nvd.replay_output_path = ''  # output path set by replay-reset, used by replay-output\nvd.replay_line = 0  # current line number within a test\nvd.replay_start_time = 0  # timestamp when current test started\nvd.replay_allowed_errors = []  # set by allow-error, checked by status hook\n\n\n@VisiData.before\ndef replayOne(vd, r):\n    vd.replay_line += 1\n\n\n@BaseSheet.api\ndef replay_reset(vs):  # noqa: ARG001\n    'Initialize state for a new test.'\n    p = vd.input(\"output path: \")\n    vd.resetVisiData()\n    vd.options.batch = True\n    vd.replay_output_path = p\n    vd.replay_line = 0\n    vd.replay_start_time = time.time()\n    vd.replay_allowed_errors = []\n    vd.statusHistory.clear()  # clear for cross-test isolation\n\n\n@BaseSheet.api\ndef replay_end(vs):  # noqa: ARG001\n    'Reset state for next test (no output).'\n    if vd.options.debug:\n        print(f'{time.time() - vd.replay_start_time:.1f}s  {vd.replay_output_path}')\n\n_default_printStatus = VisiData.printStatus\n\n@VisiData.api\ndef printStatus(vd, *args, priority=0, source=None):\n    'Print labeled status during bulk replay; default stderr otherwise.'\n    if priority > 0 and vd.replay_output_path:\n        msg = str(args[0])\n        allowed = any(re.search(p, msg) for p in vd.replay_allowed_errors)\n        if not allowed:\n            print(f'{vd.replay_output_path}:{vd.replay_line}: {msg}')\n        elif vd.options.debug:\n            print(f'{vd.replay_output_path}:{vd.replay_line}: {msg} (expected)')\n    else:\n        _default_printStatus(vd, *args, priority=priority, source=source)\n\n@BaseSheet.api\ndef replay_output(vs):\n    'Save current sheet to path from replay-reset and reset state for next test.'\n    outpath = Path(vd.replay_output_path)\n    vd.saveSheets(outpath, vs, confirm_overwrite=False)\n    vd.sync()\n    if vd.options.debug:\n        print(f'{time.time() - vd.replay_start_time:.1f}s  {vd.replay_output_path}')\n\n\n@BaseSheet.api\ndef allow_error(vs, pattern:str):  # noqa: ARG001\n    'suppress expected error messages matching regex pattern during batch replay'\n    vd.replay_allowed_errors.append(pattern)\n\n\n@BaseSheet.api\ndef replay_exit(vs):  # noqa: ARG001\n    'Exit cleanly at end of batch replay.'\n    vd.sheets.clear()\n\n\nBaseSheet.addCommand('', 'replay-reset', 'replay_reset()', 'initialize test state for a test', testable=False)\nBaseSheet.addCommand('', 'replay-end', 'replay_end()', 'reset state for test runner (no output)', testable=False)\nBaseSheet.addCommand('', 'replay-output', 'replay_output()', 'save output and reset state for test runner', testable=False)\nBaseSheet.addCommand('', 'replay-exit', 'replay_exit()', 'exit cleanly at end of batch replay', testable=False)\nBaseSheet.addCommand('', 'allow-error', 'allow_error(vd.input(\"allow error: \"))', 'suppress expected error messages matching regex pattern', testable=False)\n"
  },
  {
    "path": "visidata/features/scroll_context.py",
    "content": "'''\nEnables two functions:\n1. options.disp_scroll_context: the minimum number of lines to keep visible above and below the cursor when scrolling\n2. toggle-scrollfix: Lock the cursor to a particular row number in the view\n\nAllows the user to fix the position on the page where they would like the\ncursor to \"stick\". Helps to provide context about surrounding rows when\nnear the top and bottom of the page.\n\nUsage: scroll a few lines down, `toggle-scrollfix' and scroll again!\n\nNOTE:\n    - disables scroll-middle command (zz)\n'''\n\n__author__ = 'Geekscrapy'\n__version__ = '1.2'\n\nfrom visidata import vd, Sheet\n\nvd.option('disp_scroll_context', 0, 'minimum number of lines to keep visible above/below cursor when scrolling')\nvd.optalias('disp_scrolloff', 'disp_scroll_context')\n\n@Sheet.after\ndef checkCursor(sheet):\n    nctx = sheet.options.disp_scroll_context\n    if nctx:\n        if nctx >= int(sheet.nScreenRows/2):\n            if sheet.cursorRowIndex+1 > int(sheet.nScreenRows/2):\n                sheet.topRowIndex = sheet.cursorRowIndex - int(sheet.nScreenRows/2)\n        else:\n            if sheet.cursorRowIndex-sheet.topRowIndex < nctx:\n                sheet.topRowIndex = max(0, sheet.cursorRowIndex-nctx)\n\n            if sheet.bottomRowIndex-sheet.cursorRowIndex < nctx:\n                sheet.bottomRowIndex = sheet.cursorRowIndex+nctx\n\n    nfix = getattr(sheet, 'disp_scrollfix', 0)\n    if nfix > 0:\n        cursorViewIndex = sheet.cursorRowIndex - sheet.topRowIndex\n        if cursorViewIndex > nfix:\n            sheet.topRowIndex += abs(nfix - cursorViewIndex)\n        if cursorViewIndex < nfix and sheet.topRowIndex > 0:\n            sheet.topRowIndex -= abs(nfix - cursorViewIndex)\n\n\n@Sheet.api\ndef toggle_scrollfix(sheet):\n    if getattr(sheet, 'disp_scrollfix', -1) >= 0:\n        sheet.disp_scrollfix = -1\n        vd.status(\"cursor unlocked\")\n    else:\n        sheet.disp_scrollfix = sheet.cursorRowIndex - sheet.topRowIndex\n        vd.status(f\"cursor locked to screen row {sheet.disp_scrollfix}\")\n\n\nSheet.addCommand('', 'toggle-scrollfix', 'toggle_scrollfix()', helpstr='toggle cursor lock to current screen row')\n\n\nvd.addMenuItems('''View > Toggle display > lock cursor to screen row > toggle-scrollfix''')\n"
  },
  {
    "path": "visidata/features/select_equal_selected.py",
    "content": "from visidata import Sheet, asyncthread, Progress\n\n\n@Sheet.api\n@asyncthread\ndef select_equal_selected(sheet, col):\n    selectedVals = set(col.getFullDisplayValue(row) for row in Progress(sheet.selectedRows))\n    sheet.select(sheet.gatherBy(lambda r,c=col,vals=selectedVals: c.getFullDisplayValue(r) in vals), progress=False)\n\n\nSheet.addCommand('', 'select-equal-selected', 'select_equal_selected(cursorCol)', 'select rows with values in current column in already selected rows')\n"
  },
  {
    "path": "visidata/features/setcol_fake.py",
    "content": "# to anonymize a column in vd: do \"setcol-fake\" with e.g. 'name' 'isbn10' or any of the functions on Faker()\n\nimport json\n\nfrom visidata import vd, Column, Sheet, asyncthread, Progress, VisiData\n\nvd.option('faker_locale', 'en_US', 'default locale to use for Faker', replay=True)\nvd.option('faker_extra_providers', None, 'list of additional Provider classes to load via add_provider()', replay=True)\nvd.option('faker_salt', '', 'Use a non-empty string to enable deterministic fakes')\n\ndef addFakerProviders(fake, providers):\n    '''\n    Add custom providers to Faker. Provider classes typically derive from\n    faker.providers.BaseProvider, so check for that here. This helps to\n    highlight likely misconfigurations instead of hiding them.\n\n    See also: https://faker.readthedocs.io/en/master/communityproviders.html\n\n    fake: Faker object\n    providers: List of provider classes to add\n    '''\n    faker = vd.importExternal('faker', 'Faker')\n    if isinstance(providers, str):\n        providers = [ getattr(faker.providers, p) for p in providers.split() ]\n\n    if not isinstance(providers, list):\n        vd.fail('options.faker_extra_providers must be a list')\n\n    for provider in providers:\n        if not issubclass(provider, faker.providers.BaseProvider):\n            vd.warning('\"{}\" not a Faker Provider'.format(provider.__name__))\n            continue\n        fake.add_provider(provider)\n\n@Column.api\n@asyncthread\ndef setValuesFromFaker(col, faketype, rows):\n    faker = vd.importExternal('faker', 'Faker')\n    fake = faker.Faker(col.sheet.options.faker_locale)\n    if col.sheet.options.faker_extra_providers:\n        addFakerProviders(fake, col.sheet.options.faker_extra_providers)\n    fakefunc = getattr(fake, faketype, None) or vd.fail(f'no such faker \"{faketype}\"')\n\n    fakeMap = {}\n    fakeMap[None] = None\n    fakeMap[col.sheet.options.null_value] = col.sheet.options.null_value\n\n    vd.addUndoSetValues([col], rows)\n    salt = col.sheet.options.faker_salt\n\n    for r in Progress(rows):\n        v = col.getValue(r)\n        if v in fakeMap:\n            newv = fakeMap[v]\n        else:\n            if salt:\n                # Reset the Faker seed for each value. For a given salt string,\n                # the same cell value will always generate the same fake value.\n                fake.seed_instance(json.dumps(v) + salt)\n            newv = fakefunc()\n            fakeMap[v] = newv\n        col.setValue(r, newv)\n\n\nSheet.addCommand(None, 'setcol-fake', 'cursorCol.setValuesFromFaker(input(\"faketype: \", type=\"faketype\"), selectedRows)', 'replace values in current column for selected rows with fake values')\n"
  },
  {
    "path": "visidata/features/slide.py",
    "content": "'''slide rows/columns around'''\n\nimport visidata\nfrom visidata import Sheet, moveListItem, vd\n\n@Sheet.api\ndef slide_col(sheet, colidx, newcolidx):\n    vd.addUndo(moveVisibleCol, sheet, newcolidx, colidx)\n    return moveVisibleCol(sheet, colidx, newcolidx)\n\n@Sheet.api\ndef slide_keycol(sheet, fromKeyColIdx, toKeyColIdx):\n    vd.addUndo(moveKeyCol, sheet, toKeyColIdx, fromKeyColIdx)\n    return moveKeyCol(sheet, fromKeyColIdx, toKeyColIdx)\n\n\n@Sheet.api\ndef slide_row(sheet, rowidx, newcolidx):\n    vd.addUndo(moveListItem, sheet.rows, newcolidx, rowidx)\n    return moveListItem(sheet.rows, rowidx, newcolidx)\n\n\ndef moveKeyCol(sheet, fromKeyColIdx, toKeyColIdx):\n    'Move key column to another key column position in sheet.'\n    if not (1 <= toKeyColIdx <= len(sheet.keyCols)):\n        vd.warning('already at edge')\n        return fromKeyColIdx-1\n\n    for col in sheet.keyCols:\n        if col.keycol == fromKeyColIdx:\n            col.keycol = toKeyColIdx\n        elif toKeyColIdx < fromKeyColIdx:  # moving to the left\n            if toKeyColIdx <= col.keycol < fromKeyColIdx:\n                col.keycol += 1\n        else:  # moving to the right\n            if fromKeyColIdx < col.keycol <= toKeyColIdx:\n                col.keycol -= 1\n\n    # key columns are 1-indexed; columns in general are 0-indexed\n    return toKeyColIdx-1\n\n\ndef moveVisibleCol(sheet, fromVisColIdx, toVisColIdx):\n    'Move visible column to another visible index in sheet.'\n    # a regular column cannot move to the left of keycols\n    if 0 <= toVisColIdx < sheet.nVisibleCols:\n        fromVisColIdx = min(max(fromVisColIdx, 0), sheet.nVisibleCols-1)\n        fromColIdx = sheet.columns.index(sheet.visibleCols[fromVisColIdx])\n        if toVisColIdx < len(sheet.keyCols):\n            vd.warning('already at edge')\n            return fromVisColIdx\n        else:\n            toColIdx = sheet.columns.index(sheet.visibleCols[toVisColIdx])\n        moveListItem(sheet.columns, fromColIdx, toColIdx)\n        return toVisColIdx\n    else:\n        vd.warning('already at edge')\n        return fromVisColIdx\n\n\nSheet.addCommand('H', 'slide-left', 'sheet.cursorVisibleColIndex = slide_col(cursorVisibleColIndex, cursorVisibleColIndex-1) if not cursorCol.keycol else slide_keycol(cursorCol.keycol, cursorCol.keycol-1)', 'slide the current column left **one position**')\nSheet.addCommand('L', 'slide-right', 'sheet.cursorVisibleColIndex = slide_col(cursorVisibleColIndex, cursorVisibleColIndex+1) if not cursorCol.keycol else slide_keycol(cursorCol.keycol, cursorCol.keycol+1)', 'slide the current column right **one position**')\nSheet.addCommand('J', 'slide-down', 'sheet.cursorRowIndex = slide_row(cursorRowIndex, cursorRowIndex+1)', 'slide current row down')\nSheet.addCommand('K', 'slide-up', 'sheet.cursorRowIndex = slide_row(cursorRowIndex, cursorRowIndex-1)', 'slide current row up')\nSheet.addCommand('gH', 'slide-leftmost', 'slide_col(cursorVisibleColIndex, len(keyCols) + 0) if not cursorCol.keycol else slide_keycol(cursorCol.keycol, 1)', 'slide the current column **all the way** to the left of its section')\nSheet.addCommand('gL', 'slide-rightmost', 'slide_col(cursorVisibleColIndex, nVisibleCols-1) if not cursorCol.keycol else slide_keycol(cursorCol.keycol, len(keyCols))', 'slide the current column **all the way** to the right of its section')\nSheet.addCommand('gJ', 'slide-bottom', 'slide_row(cursorRowIndex, nRows)', 'slide current row all the way to the bottom of sheet')\nSheet.addCommand('gK', 'slide-top', 'slide_row(cursorRowIndex, 0)', 'slide current row to top of sheet')\nSheet.addCommand('zH', 'slide-left-n', 'slide_col(cursorVisibleColIndex, cursorVisibleColIndex-int(input(\"slide col left n=\", value=1)))', 'slide current column **N positions** to the left')\nSheet.addCommand('zL', 'slide-right-n', 'slide_col(cursorVisibleColIndex, cursorVisibleColIndex+int(input(\"slide col left n=\", value=1)))', 'slide current column **N positions** to the right')\nSheet.addCommand('zJ', 'slide-down-n', 'slide_row(cursorRowIndex, cursorRowIndex+int(input(\"slide row down n=\", value=1)))', 'slide current row N positions down')\nSheet.addCommand('zK', 'slide-up-n', 'slide_row(cursorRowIndex, cursorRowIndex-int(input(\"slide row up n=\", value=1)))', 'slide current row N positions up')\n\nSheet.bindkey('Shift+Left', 'slide-left')\nSheet.bindkey('Shift+Up', 'slide-up')\nSheet.bindkey('Shift+Down', 'slide-down')\nSheet.bindkey('Shift+Right', 'slide-right')\n\nSheet.bindkey('g Shift+Left', 'slide-leftmost')\nSheet.bindkey('g Shift+Down', 'slide-bottom')\nSheet.bindkey('g Shift+Up', 'slide-top')\nSheet.bindkey('g Shift+Right', 'slide-rightmost')\n\nvd.addMenuItems('''\n    Edit > Slide > Row > up > slide-up\n    Edit > Slide > Row > up N > slide-up-n\n    Edit > Slide > Row > down > slide-down\n    Edit > Slide > Row > down N > slide-down-n\n    Edit > Slide > Row > to top > slide-top\n    Edit > Slide > Row > to bottom > slide-bottom\n    Edit > Slide > Column > left > slide-left\n    Edit > Slide > Column > left N > slide-left-n\n    Edit > Slide > Column > leftmost > slide-leftmost\n    Edit > Slide > Column > right > slide-right\n    Edit > Slide > Column > right N > slide-right-n\n    Edit > Slide > Column > rightmost > slide-rightmost\n''')\n\n## tests\n\nsample_path = vd.pkg_resources_files(visidata) / 'tests/sample.tsv'\nbenchmark_path = vd.pkg_resources_files(visidata) / 'tests/benchmark.csv'\n\ndef make_tester(setup_vdx):\n    def t(vdx, golden):\n        global vd\n        vd = visidata.vd.resetVisiData()\n        vd.runvdx(setup_vdx)\n\n        vd.runvdx(vdx)\n        colnames = [c.name for c in vd.sheet.visibleCols]\n        assert colnames == golden.split(), ' '.join(colnames)\n\n    return t\n\ndef test_slide_keycol_1(vd):\n    t = make_tester(f'''\n            open-file {sample_path}\n            +:OrderDate: key-col\n            +:Region: key-col\n            +:Rep: key-col\n        ''')\n\n    t('',                             'OrderDate Region Rep Item Units Unit_Cost Total')\n    t('+:Rep: slide-leftmost',        'Rep OrderDate Region Item Units Unit_Cost Total')\n    t('+:OrderDate: slide-rightmost', 'Region Rep OrderDate Item Units Unit_Cost Total')\n    t('+:Rep: slide-left',            'OrderDate Rep Region Item Units Unit_Cost Total')\n    t('+:OrderDate: slide-right',     'Region OrderDate Rep Item Units Unit_Cost Total')\n\n    t('''\n        +:Item: key-col\n        +:Item: slide-left\n        slide-left\n        slide-right\n        slide-right\n        slide-left\n        slide-left\n    ''', 'OrderDate Item Region Rep Units Unit_Cost Total')\n\n\ndef test_slide_leftmost(vd):\n    t = make_tester(f'''open-file {benchmark_path}''')\n\n    t('+:Paid: slide-leftmost', 'Paid Date Customer SKU Item Quantity Unit')\n\n    t = make_tester(f'''\n         open-file {benchmark_path}\n         +:Date: key-col\n    ''')\n\n    t('', 'Date Customer SKU Item Quantity Unit Paid')\n    t('''+:Item: slide-leftmost''', 'Date Item Customer SKU Quantity Unit Paid')\n    t('''+:SKU: key-col\n         +:Quantity: slide-leftmost''', 'Date SKU Quantity Customer Item Unit Paid')\n    t('''+:Date: slide-leftmost''', 'Date Customer SKU Item Quantity Unit Paid')\n    t('''+:Item: slide-leftmost\n         +:SKU: slide-leftmost''', 'Date SKU Item Customer Quantity Unit Paid')\n"
  },
  {
    "path": "visidata/features/sparkline.py",
    "content": "\"\"\"\nGenerate sparkline column for numeric columns\n\"\"\"\n\nfrom visidata import vd, Column, Sheet\n\n__author__ = 'Lucas Messenger @layertwo'\n\nvd.theme_option('disp_sparkline', '▁▂▃▄▅▆▇', 'characters to display sparkline')\n\n\ndef sparkline(*values):\n    \"\"\"\n    From *values generate string sparkline\n    \"\"\"\n    lines = vd.options.disp_sparkline\n    values = [v for v in values if isinstance(v, (int, float))]\n    mx = max(values)\n    mn = min(values)\n    w = (mx - mn) / len(lines)\n    bounds = [(mn + w * i) for i in range(len(lines))]\n\n    output = ''\n    for val in values:\n        for b in bounds:\n            if mn == 0 and val == 0:\n                output += ' '\n                break\n            if val < b:\n                output += lines[bounds.index(b) - 1]\n                break\n        else:\n            output += max(lines)\n    return output\n\n\n@Sheet.api\ndef addcol_sparkline(sheet, sourceCols):\n    \"\"\"\n    Add sparkline column\n    \"\"\"\n    c = Column('sparkline',\n               sourceCols=sourceCols,\n               getter=lambda c,r: sparkline(*tuple(c.getTypedValue(r) for c in c.sheet.sourceCols)))\n    sheet.addColumn(c)\n\n\nSheet.addCommand(None, 'addcol-sparkline', 'addcol_sparkline(numericCols(nonKeyVisibleCols))', 'add sparkline of all numeric columns')\n"
  },
  {
    "path": "visidata/features/status_source.py",
    "content": "import inspect\n\nimport visidata\nfrom visidata import VisiData\n\n@VisiData.api\ndef getStatusSource(vd) -> str:\n    if not vd.options.debug:\n        return ''\n    stack = inspect.stack(context=0)  #2370\n    for i, sf in enumerate(stack):\n        if sf.function in 'status aside'.split():\n            if stack[i+1].function in 'error fail warning debug'.split():\n                sf = stack[i+2]\n            else:\n                sf = stack[i+1]\n            break\n\n    fn = sf.filename\n    if fn.startswith(visidata.__path__[0]):\n        fn = visidata.__package__ + fn[len(visidata.__path__[0]):]\n    return f'{fn}:{sf.lineno}:{sf.function}'\n"
  },
  {
    "path": "visidata/features/sysedit.py",
    "content": "from copy import copy\nfrom visidata import vd, asyncthread, Path, Sheet, IndexSheet, TableSheet\n\n\n@Sheet.api\ndef syseditCells(sheet, cols, rows, filetype=None):\n    filetype = filetype or vd.input(\"edit %d %s as filetype: \" % (len(rows), sheet.rowtype), value=sheet.options.save_filetype or 'tsv')\n    vd.sync(sheet.syseditCells_async(cols, rows, filetype))\n\n\n@Sheet.api\n@asyncthread\ndef syseditCells_async(sheet, cols, rows, filetype=None):\n    vs = copy(sheet)\n    vs.rows = rows or vd.fail('no %s selected' % sheet.rowtype)\n    vs.columns = cols\n\n    import tempfile\n    with tempfile.NamedTemporaryFile() as temp:\n        temp.close()  #2118\n        p = Path(temp.name)\n\n        vd.status(f'copying {vs.nRows} {vs.rowtype} to {p} as {filetype}')\n        vd.sync(vd.saveSheets(p, vs))\n\n        tempvs = vd.openSource(p, filetype=filetype)\n\n        vd.launchExternalEditorPath(p)\n        tempvs.source = p\n        vd.sync(tempvs.ensureLoaded())\n\n        while isinstance(tempvs, IndexSheet):\n            vd.sync(tempvs.ensureLoaded())\n            tempvs = tempvs.rows[0]\n\n        for col in sheet.visibleCols:\n            tempcol = tempvs.colsByName.get(col.name)\n            if not tempcol: # column not in edited version\n                continue\n            # only assign values that were changed by the editor\n            edited_rows = []\n            edited_vals = []\n            for r, r_edited in zip(rows, tempvs.rows):\n                v = tempcol.getFullDisplayValue(r_edited)\n                if col.getFullDisplayValue(r) != v:\n                    edited_rows.append(r)\n                    edited_vals.append(v)\n            if edited_rows:\n                col.setValuesTyped(edited_rows, *edited_vals)\n\n\nTableSheet.addCommand('Ctrl+O', 'sysedit-cell', 'cd = cursorFullDisplay; e = vd.launchExternalEditor(cd); cursorCol.setValues([cursorRow], e) if e != cd else None', 'edit current cell in external $EDITOR')\nSheet.addCommand('gCtrl+O', 'sysedit-selected', 'syseditCells(visibleCols, onlySelectedRows)', 'edit rows in $EDITOR')\n"
  },
  {
    "path": "visidata/features/sysopen_mailcap.py",
    "content": "''' Plugin for viewing files with appropriate mailcap-specified application.\nAdd mailcap-view and mailcap-view-selected commands to DirSheet.\n\nmimetype can be given explicitly with `mimetype` option; will be guessed by filename otherwise.\n\nUsage:\n   - add `import experimental.mailcap_view` to .visidatarc\n   - on the DirSheet, `Ctrl+V` or `gCtrl+V` to view file(s) using mailcap entry for the guessed (or given via options) mimetype\n'''\n\nimport os\nfrom visidata import vd, DirSheet, SuspendCurses\n\nvd.option('mailcap_mimetype', '', 'force mimetype for sysopen-mailcap')\nvd.optalias('mimetype', 'mailcap_mimetype')\n\n\n@DirSheet.api\ndef run_mailcap(sheet, p, key='view'):\n    import mailcap\n    import mimetypes\n\n    mimetype = sheet.options.mailcap_mimetype\n    if not mimetype:\n        mimetype, encoding = mimetypes.guess_type(str(p))\n\n    if not mimetype:\n        vd.fail('no mimetype given and no guess')\n\n    caps = mailcap.getcaps()\n\n    plist = [f'{k}={v}' for k, v in sheet.options.getall('mailcap_').items() if k != 'mailcap_mimetype']\n    cmdline, mcap_entry = mailcap.findmatch(caps, mimetype, key=key, filename=str(p), plist=plist)\n\n    with SuspendCurses():\n        os.system(cmdline)\n\n\nDirSheet.addCommand('', 'sysopen-mailcap', 'run_mailcap(cursorRow)', 'open using mailcap entry for current row, guessing mimetype')\nDirSheet.addCommand('', 'sysopen-mailcap-selected', 'for r in selectedRows: run_mailcap(r)', 'open selected files in succession, using mailcap')\n\n\nvd.addMenuItems('''\n    File > Open > using mailcap > file at cursor > sysopen-mailcap\n    File > Open > using mailcap > selected files > sysopen-mailcap-selected\n''')\n"
  },
  {
    "path": "visidata/features/term_extras.py",
    "content": "import os\n\nfrom visidata import VisiData\n\n\n@VisiData.api\ndef ansi(*args):\n    os.write(1, b'\\x1b'+b''.join([str(x).encode('utf-8') for x in args]))\n\n\n@VisiData.api\ndef set_titlebar(vd, title:str):\n    ansi(']2;', title, '\\x07')\n"
  },
  {
    "path": "visidata/features/transpose.py",
    "content": "from visidata import vd, VisiData, Sheet, asyncthread, Progress, Column\n\n# rowdef: Column\n@VisiData.api\nclass TransposeSheet(Sheet):\n    def beforeLoad(self):\n        # key rows become column names\n        col = Column('_'.join(c.name for c in self.source.keyCols),\n                getter=lambda c,origcol: origcol.name)\n        # associate column with sheet\n        col.recalc(self)\n        self.columns = [col]\n        self.setKeys(self.columns)\n\n    def loader(self):\n        # rows become columns\n        for row in Progress(self.source.rows, 'transposing'):\n            self.addColumn(Column('_'.join(map(str, self.source.rowkey(row))),\n                                  getter=lambda c,origcol,row=row: origcol.getValue(row),\n                                  setter=lambda c,origcol,v,row=row: origcol.setValue(row, v)))\n\n        # columns become rows\n        self.rows = list(self.source.nonKeyVisibleCols)\n\nSheet.addCommand('T', 'transpose', 'vd.push(TransposeSheet(name+\"_T\", source=sheet))', 'open new sheet with rows and columns transposed')\n\nvd.addMenuItems('Data > Transpose > transpose')\nvd.addGlobals(TransposeSheet=TransposeSheet)\n"
  },
  {
    "path": "visidata/features/type_ipaddr.py",
    "content": "\"\"\"\nColumn types and utility commands related to IP addresses.\n\"\"\"\nfrom ipaddress import ip_address, ip_network, _BaseNetwork\n\nfrom visidata import vd\nfrom visidata.sheets import Column, TableSheet\n\n\nvd.addType(ip_address, icon=\":\", formatter=lambda fmt, ip: str(ip), name='ip_address')\nvd.addType(ip_network, icon=\"/\", formatter=lambda fmt, ip: str(ip), name='ip_network')\n\n\ndef isSupernet(cell, network, isNull):\n    \"\"\"Is `cell` a supernet of `network`?\n\n    Treat nulls as false, and perform conversions to IP network objects only\n    if necessary.\n    \"\"\"\n    if isNull(cell):\n        return False\n    if not isinstance(cell, _BaseNetwork):\n        try:\n            cell = ip_network(str(cell).strip())\n        except ValueError:\n            return False\n    return cell.supernet_of(network)\n\n\n@Column.api\ndef selectSupernets(col, ip):\n    \"\"\"Select rows based on network containment\n\n    Given an IP address (e.g. 10.0.0.0) or network (e.g. 10.0.0.0/8) as input,\n    select rows whose network address space completely contains the input network.\n    \"\"\"\n    if not ip:\n        return\n\n    sheet = col.sheet\n    network = ip_network(ip.strip())\n    isNull = sheet.isNullFunc()\n\n    vd.status(f'selecting rows where {col.name} is a supernet of \"{str(network)}\"')\n    sheet.select(\n        [\n            row\n            for row in sheet.rows\n            if isSupernet(col.getTypedValue(row), network, isNull)\n        ]\n    )\n\n\nTableSheet.addCommand(\n    None,\n    \"type-ipaddr\",\n    \"cursorCol.type=ip_address\",\n    \"set type of current column to IP address\",\n)\nTableSheet.addCommand(\n    None,\n    \"type-ipnet\",\n    \"cursorCol.type=ip_network\",\n    \"set type of current column to IP network\",\n)\nTableSheet.addCommand(\n    None,\n    \"select-supernets\",\n    'cursorCol.selectSupernets(input(\"ip or cidr block: \"))',\n    \"select rows where the CIDR block value includes the input address space\",\n)\n"
  },
  {
    "path": "visidata/features/type_url.py",
    "content": "from visidata import Sheet, Column, DisplayWrapper\n\n\n@Column.api\ndef displayer_url(self, dw:DisplayWrapper, width=None):\n    'Display cell text as clickable url'\n    yield ('onclick '+dw.text, dw.text)\n\n\nSheet.addCommand(\"\", \"type-url\", \"sheet.cursorCol.displayer = 'url'\", \"set column to open URLs in $BROWSER on mouse click\")\nSheet.addCommand(\"\", \"open-url\", \"vd.launchBrowser(sheet.cursorValue)\", \"open current cursor value in $BROWSER\")\n"
  },
  {
    "path": "visidata/features/unfurl.py",
    "content": "'''This adds the `unfurl-col` command, to unfurl a column containing iterable values, such as lists and dicts.\nUnfurling pushes a new sheet, with each key/value pair in the unfurled column values getting its own row, with the rest of the source sheet's columns copied for each of those rows.\n\nNote: When unfurling a column, non-iterable objects (numbers, and also strings) are treated as single-item lists, so that they too can be unfurled.\n\nCredit to Jeremy Singer-Vine for the idea and original implementation.\n'''\n\nfrom collections.abc import Iterable, Mapping\nfrom visidata import vd, Progress, Sheet, Column, ColumnItem, SettableColumn, SubColumnFunc, asyncthread\nfrom visidata import stacktrace, TypedExceptionWrapper\n\n\nvd.option('unfurl_empty', False, 'if unfurl includes rows for empty containers', replay=True)\n\n\nclass UnfurledSheet(Sheet):\n    # rowdef: [row, key, sub_value]\n    def resetCols(self):\n        # Copy over base sheet, using SubColumnFunc\n        self.columns = []\n        for col in self.source.columns:\n            if col is self.source_col:\n                # Replace iterable column with two columns: keys and values\n                self.cursorVisibleColIndex = len(self.columns)-1\n                self.addColumn(ColumnItem(col.name + \"_key\", 1))\n                self.addColumn(ColumnItem(col.name + \"_value\", 2))\n                self.cursorVisibleColIndex = len(self.columns)-1\n            else:\n                self.addColumn(SubColumnFunc(col.name, col, 0, keycol=col.keycol))\n\n    def iterload(self):\n        unfurl_empty = self.options.unfurl_empty\n        for row in Progress(self.source.rows):\n            try:\n                val = self.source_col.getValue(row)\n            except Exception as e:\n                e.stacktrace = stacktrace()\n                if unfurl_empty:\n                    # TypedExceptionWrapper allows the use of z^E to see the stacktrace\n                    # the exception on its own lacks clarity\n                    yield [row, TypedExceptionWrapper(None, exception=e), TypedExceptionWrapper(None, exception=e)]\n                else:\n                    vd.exceptionCaught(e, status=False)\n                continue\n\n            if not isinstance(val, Iterable) or isinstance(val, str):\n                val = [ val ]\n\n            if isinstance(val, Mapping):\n                gen = val.items()\n            else:\n                gen = enumerate(val)\n\n            nadded = 0\n            for key, sub_value in gen:\n                yield [ row, key, sub_value ]\n                nadded += 1\n\n            if unfurl_empty and not nadded:\n                yield [row, None, None]\n\n\n@Sheet.api\ndef unfurl_col(sheet, col):\n    return UnfurledSheet(sheet.name, vd.cleanName(col.name), 'unfurled', source=sheet, source_col=col)\n\n\nSheet.addCommand(\"zM\", \"unfurl-col\", \"vd.push(unfurl_col(cursorCol))\", \"row-wise expand current column of lists (e.g. [2]) or dicts (e.g. {3}) within that column\")\n\nvd.addMenuItems('Data > Unfurl column > unfurl-col')\n"
  },
  {
    "path": "visidata/features/window.py",
    "content": "import itertools\nimport functools\n\nfrom visidata import Sheet, Column, vd, asyncthread, Progress\n\n@Sheet.api\ndef window(sheet, before:int=0, after:int=0):\n    '''Generate (row, list[row]) for each row in *sheet*, where list[row] is the rows within *before* number of rows before and *after* number of rows after the *row*.  The *row* itself is always included in the list.'''\n    for i, r in enumerate(sheet.rows):\n        a = max(0, i-before) if before >= 0 else None\n        b = (i+after+1) if after >= 0 else None\n        yield r, sheet.rows[a:b]\n\n\n@Column.api\ndef window(col, before:int=0, after:int=0):\n    'Generate (row, list[values]) for each row in the sheet.  Values are the typed values for this column at that row.'\n    for r, rows in col.sheet.window(before, after):\n        yield r, [col.getTypedValue(x) for x in rows]\n\n\nclass WindowColumn(Column):\n    def getValue(self, row):\n        return self.windowrows.get(id(row), None)\n\n    @asyncthread\n    def _calcWindowRows(self, outvals):\n        for row, vals in Progress(self.sourcecol.window(self.before, self.after), total=self.sheet.nRows):\n            self.windowrows[id(row)] = vals\n\n    @property\n    def windowrows(self):\n        if not hasattr(self, '_windowrows'):\n            self._windowrows = {}\n            self._calcWindowRows(self._windowrows)\n\n        return self._windowrows\n\n    def __getstate__(self):\n        r = super().__getstate__()\n        r['before'] = self.before\n        r['after'] = self.after\n        r['sourcecol'] = self.sourcecol.name\n        return r\n\n    def __setstate__(self, r):\n        self.sourcecol = self.sheet.column(r.pop('sourcecol', None))\n        return super().__setstate__(r)\n\n@Sheet.api\ndef addcol_window(sheet, curcol):\n    winsizestr = vd.input('# rows before/after window: ', value='1 1')\n    before, after = map(int, winsizestr.split())\n    newcol = WindowColumn(curcol.name+\"_window\", sourcecol=curcol, before=before, after=after)\n    sheet.addColumnAtCursor(newcol)\n\n\n@Sheet.api\ndef select_around(sheet, n):\n    sheet.select(list(itertools.chain(*(winrows for row, winrows in sheet.window(int(n), int(n)) if sheet.isSelected(row)))))\n\n\nSheet.addCommand('w', 'addcol-window', 'addcol_window(cursorCol)', 'add column where each row contains a list of that row, nBefore rows, and nAfter rows')\nSheet.addCommand('', 'select-around-n', 'select_around(input(\"select rows around selected: \", value=1))', 'select additional N rows before/after each selected row')\n\nvd.addMenuItem('Row', 'Select', 'N rows around each selected row', 'select-around-n')\n\nvd.addGlobals(WindowColumn=WindowColumn)\n"
  },
  {
    "path": "visidata/form.py",
    "content": "import functools\nfrom visidata import clipdraw, colors, BaseSheet, VisiData, VisiDataMetaSheet, vd, EscapeException, AttrDict, ENTER, dispwidth, AcceptInput\n\n\n@VisiData.api\ndef open_mnu(vd, p):\n    return FormSheet(p.base_stem, source=p)\n\n\nvd.save_mnu=vd.save_tsv\n\nclass FormSheet(VisiDataMetaSheet):\n    rowtype='labels' # rowdef: { .x .y .text .color .command .input .key}\n\n@VisiData.api\ndef replayCommand(vd, longname, input=None, sheet=None, col='', row=''):\n    vd.replayOne(vd.cmdlog.newRow(sheet=sheet, col=col, row=row, longname=longname, input=input))\n\n\nclass FormCanvas(BaseSheet):\n    rowtype = 'labels'\n    pressedLabel = None\n\n    def onPressed(self, r):\n        if r.key:\n            self.pressedLabel = r\n\n    def onReleased(self, r):\n        if self.pressedLabel is r:\n            raise AcceptInput(r.key)\n\n    def reload(self):\n        self.rows = self.source.rows\n\n    def draw(self, scr):\n        vd.clearCaches()\n        h, w = scr.getmaxyx()\n        for r in self.source.rows:\n            if not r.text:\n                continue\n            x, y = r.x, r.y\n            if isinstance(y, float) and (0 < y < 1) or (-1 < y < 0): y = h*y\n            if isinstance(x, float) and (0 < x < 1) or (-1 < x < 0): x = w*x-(dispwidth(r.text, literal=True)/2)\n            x = int(x)\n            y = int(y)\n            if y < 0: y += h\n            if x < 0: x += w\n            color = r.color\n            if r is self.pressedLabel:\n                color += ' reverse'\n            clipdraw(scr, y, x, r.text, colors[color], literal=True)\n            # underline first occurrence of r.key in r.text\n            if hasattr(r, 'key') and r.key:\n                index = r.text.find(r.key)\n                clipdraw(scr, y, x+index, r.text[index:index+len(r.key)], colors[color + \" underline\"], literal=True)\n            vd.onMouse(scr, x, y, dispwidth(r.text, literal=True), 1,\n                    BUTTON1_PRESSED=lambda y,x,key,r=r,sheet=self: sheet.onPressed(r),\n                    BUTTON1_RELEASED=lambda y,x,key,r=r,sheet=self: sheet.onReleased(r))\n\n    def run(self, scr):\n        vd.setWindows(vd.scrFull)\n        drawnrows = [r for r in self.source.rows if r.text]\n        inputs = [r for r in self.source.rows if r.input]\n        maxw = max(int(r.x)+dispwidth(r.text, literal=True) for r in drawnrows)\n        maxh = max(int(r.y) for r in drawnrows)\n        h, w = vd.scrFull.getmaxyx()\n        y, x = max(0, (h-maxh)//2-1), max(0, (w-maxw)//2-1)\n        self.scrForm = vd.subwindow(vd.scrFull, x, y, min(w-1, maxw+1), min(h-1, maxh+2))\n        self.scrForm.keypad(1)\n        curinput = inputs[0] if inputs else None\n        vd.draw_all()\n\n        self.scrForm.erase()\n        self.scrForm.border()\n        self.draw(self.scrForm)\n\n        while True:\n            k = vd.getkeystroke(self.scrForm, self)\n            if k in ['^C', '^Q', '^[', 'q']:\n                return {}\n            if curinput and k in curinput.keystrokes:\n                return {curinput.input: k}\n            if k == 'KEY_MOUSE':\n                r = vd.parseMouse(form=self.scrForm)\n                if r.found:\n                    f = vd.getMouse(r.x, r.y, r.keystroke)\n                    if f:\n                        try:\n                            f(r.y, r.x, r.keystroke)\n                        except AcceptInput as e:\n                            return {curinput.input: e.args[0]}\n                        except Exception as e:\n                            vd.exceptionCaught(e)\n                            break\n\n                if r.keystroke == 'BUTTON1_RELEASED':\n                    self.pressedLabel = None\n\n                self.draw(self.scrForm)\n\n\n@functools.wraps(VisiData.confirm)\n@VisiData.api\ndef confirm(vd, prompt, exc=EscapeException):\n    'Display *prompt* on status line and demand input that starts with \"Y\" or \"y\" to proceed. Return True when proceeding, otherwise raise *exc*, or if *exc* is falsy, return False. *prompt* is literal text that cannot contain visidata markup code.'\n    if vd.options.batch:\n        return vd.fail('cannot confirm in batch mode: ' + prompt)\n\n    form = FormSheet('confirm', rows=[\n        AttrDict(x=2, y=0, text=' confirm ', color='yellow'),\n        AttrDict(x=2, y=1, text=prompt, color='yellow'),\n        AttrDict(x=.25, y=2, text=' yes ', color='black on yellow bold', key='y'),\n        AttrDict(x=.75, y=2, text=' no ', color='black on yellow bold', key='n'),\n        AttrDict(input='yn', keystrokes=['y', 'n', ENTER]),\n    ])\n\n    ret = FormCanvas(source=form).run(vd.scrFull)\n    confirmed = False  # default is to disconfirm, if user exited the confirmation via: Esc ^C ^Q q\n    if ret:\n        yn = ret['yn'][:1]\n        confirmed = yn and yn in 'Yy'\n    if not confirmed:\n        msg = 'disconfirmed: ' + prompt\n        if exc:\n            raise exc(msg)\n        vd.warning(msg)\n        return False\n    return True\n"
  },
  {
    "path": "visidata/freqtbl.py",
    "content": "from copy import copy\nimport itertools\n\nfrom visidata import vd, vlen, VisiData, Column, AttrColumn, Sheet, ColumnsSheet, Fanout\nfrom visidata.pivot import PivotSheet, PivotGroupRow\n\n\nvd.theme_option('disp_histogram', '■', 'histogram element character')\nvd.option('histogram_bins', 0, 'number of bins for histogram of numeric columns')\nvd.option('numeric_binning', False, 'bin numeric columns into ranges', replay=True)\n\n\n@VisiData.api\ndef valueNames(vd, discrete_vals, numeric_vals):\n    ret = [ '+'.join(str(x) for x in discrete_vals) ]\n    if isinstance(numeric_vals, tuple) and numeric_vals != (0, 0):\n        ret.append('%s-%s' % numeric_vals)\n\n    return '+'.join(ret)\n\nclass HistogramColumn(Column):\n    '.sourceCol is the column to be histogrammed'\n    def calcValue(col, row):\n        histogram = col.sheet.options.disp_histogram\n        histolen = col.width-2\n        return histogram*(histolen*col.sourceCol.getTypedValue(row)//col.largest)\n\n    def updateLargest(col, row):\n        col.largest = max(col.largest, col.sourceCol.getTypedValue(row))\n\n\ndef makeFreqTable(sheet, *groupByCols):\n    if not any(groupByCols):\n        vd.fail('FreqTableSheet requires at least 1 column for grouping')\n    return FreqTableSheet(sheet.name,\n                          '%s_freq' % '-'.join(col.name for col in groupByCols),\n                          groupByCols=groupByCols,\n                          source=sheet)\n\n\nclass FreqTableSheet(PivotSheet):\n    'Generate frequency-table sheet on currently selected column.'\n    guide = '''# Frequency Table\nThis is a *frequency analysis* of _{sheet.groupByColsName}_ from the *{sheet.groupByCols[0].sheet}* sheet.\n\nEach row on this sheet corresponds to a *bin* of rows on the source sheet that have a distinct value.  The _count_ and _percent_ columns show how many rows on the source sheet are in this bin.\n\n- `Enter` to open a copy of the source sheet, with only the rows in the current bin.\n- `g Enter` to open a copy of the source sheet, with a combination of the rows from all selected bins.\n- `zEnter` to open a copy of the source sheet, with all rows *except* those in the current bin.\n- `gzEnter` to open a copy of the source sheet, with all rows *except* those in selected bins.\n\n## Tips\n\n- Use `+` on the source sheet, to add aggregators on other columns, and those metrics will appear as separate columns here.\n- Selecting bins on this sheet will select those rows on the source sheet.\n'''\n    rowtype = 'bins'  # rowdef FreqRow(keys, sourcerows)\n\n    @property\n    def groupByColsName(self):\n        return '+'.join(c.name for c in self.groupByCols)\n\n    def selectRow(self, row):\n        # Does not create an undo-operation for the select on the source rows. The caller should create undo-information itself.\n        self.source.select(row.sourcerows, status=False, add_undo=False)     # select all entries in the bin on the source sheet\n        return super().selectRow(row)  # then select the bin itself on this sheet\n\n    def unselectRow(self, row):\n        self.source.unselect(row.sourcerows, status=False, add_undo=False)\n        return super().unselectRow(row)\n\n    def addUndoSelection(self):\n        self.source.addUndoSelection()\n        super().addUndoSelection()\n\n    # override Sheet operations that handle multiple rows:\n    #     select(), unselect(), and toggle()\n    # to make undo more efficient. Without this optimization, the memory\n    # use for the undo-tracking on the source sheet is O(n^2) in the number\n    # of bins selected, which can easily exceed all available memory.\n    def select(self, rows, status=True, progress=True, add_undo=True):\n        if add_undo:\n            self.addUndoSelection()\n        super().select(rows, status, progress, add_undo=False)\n\n    def unselect(self, rows, status=True, progress=True, add_undo=True):\n        if add_undo:\n            self.addUndoSelection()\n        super().unselect(rows, status, progress, add_undo=False)\n\n    def toggle(self, rows, add_undo=True):\n        'Toggle selection of given *rows* and corresponding rows in source sheet.'\n        if add_undo:\n            self.addUndoSelection()\n        super().toggle(rows, add_undo=False)\n\n    def select_row(self, row, add_undo=True):\n        'Add single *row* to set of selected rows, and corresponding rows in source sheet.'\n        if add_undo:\n            self.addUndoSelection()\n        super().select_row(row, add_undo=False)\n\n    def unselect_row(self, row, add_undo=True):\n        'Remove single *row* from set of selected rows, and remove corresponding rows in source sheet.'\n        if add_undo:\n            self.addUndoSelection()\n        super().unselect_row(row, add_undo=False)\n\n    def toggle_row(self, row, add_undo=True):\n        'Toggle selection of given *row* and of corresponding rows in source sheet.'\n        if add_undo:\n            self.addUndoSelection()\n        super().toggle_row(row, add_undo=False)\n\n    def resetCols(self):\n        super().resetCols()\n\n        # add default bonus columns\n        countCol = AttrColumn('count', 'sourcerows', type=vlen)\n        for c in [\n            countCol,\n            Column('percent', type=float, getter=lambda col,row: len(row.sourcerows)*100/col.sheet.source.nRows),\n        ]:\n            self.addColumn(c)\n\n        if self.options.disp_histogram:\n            c = HistogramColumn('histogram', type=str, width=self.options.default_width*2, sourceCol=countCol)\n            self.addColumn(c)\n\n        # if non-numeric grouping, reverse sort by count at end of load\n        if not any(vd.isNumeric(c) for c in self.groupByCols):\n            self._ordering = [(countCol, True)]\n\n    def loader(self):\n        'Generate frequency table.'\n        # two more threads\n        histcols = [col for col in self.visibleCols if isinstance(col, HistogramColumn)]\n        vd.sync(self.addAggregateCols(),\n                self.groupRows(lambda row, cols=Fanout(histcols): cols.updateLargest(row)))\n\n    def afterLoad(self):\n        super().afterLoad()\n        if self.nCols > len(self.groupByCols)+3:  # hide percent/histogram if aggregations added\n            self.column('percent').hide()\n            self.column('histogram').hide()\n\n    def openRow(self, row):\n        'open copy of source sheet with rows that are grouped in current row'\n        if row.sourcerows:\n            vs = copy(self.source)\n            vs.names = vs.names + [vd.valueNames(row.discrete_keys, row.numeric_key)]\n            vs.rows=copy(row.sourcerows)\n            return vs\n        vd.warning(\"no source rows\")\n\n    def openRows(self, rows):\n        vs = copy(self.source)\n        vs.names = vs.names + [\"several\"]\n        vs.rows = list(itertools.chain.from_iterable(row.sourcerows for row in rows))\n        return vs\n\n    def openCell(self, col, row):\n        return Sheet.openCell(self, col, row)\n\n\nclass FreqTableSheetSummary(FreqTableSheet):\n    'Append a PivotGroupRow to FreqTableSheet with only selectedRows.'\n    def afterLoad(self):\n        self.addRow(PivotGroupRow(['Selected'], (0,0), self.source.selectedRows, {}))\n        super().afterLoad()\n\n\ndef makeFreqTableSheetSummary(sheet, *groupByCols):\n    return FreqTableSheetSummary(sheet.name,\n                          '%s_freq' % '-'.join(col.name for col in groupByCols),\n                          groupByCols=groupByCols,\n                          source=sheet)\n\n\n@VisiData.api\nclass FreqTablePreviewSheet(Sheet):\n    @property\n    def rows(self):\n        return self.source.cursorRow.sourcerows\n\n\n@Sheet.api\ndef exceptRows(sheet, exceptrows):\n    'Return all rows except *exceptrows* (single row or list of rows).'\n    if not isinstance(exceptrows, list):\n        exceptrows = [exceptrows]\n    return [r for r in sheet.rows if r not in exceptrows]\n\nFreqTableSheet.addCommand('', 'open-preview', 'vd.push(FreqTablePreviewSheet(sheet.name, \"preview\", source=sheet, columns=source.columns), pane=2); vd.options.disp_splitwin_pct=50', 'open split preview of source rows at cursor')\n\nSheet.addCommand('F', 'freq-col', 'vd.push(makeFreqTable(sheet, cursorCol))', 'open Frequency Table grouped on current column, with aggregations of other columns')\nSheet.addCommand('gF', 'freq-keys', 'vd.push(makeFreqTable(sheet, *keyCols)) if keyCols else vd.fail(\"there are no key columns to group by\")', 'open Frequency Table grouped by all key columns on source sheet, with aggregations of other columns')\nSheet.addCommand('zF', 'freq-summary', 'vd.push(makeFreqTableSheetSummary(sheet, Column(\"Total\", sheet=sheet, getter=lambda col, row: \"Total\")))', 'open one-line summary for all rows and selected rows')\n\nColumnsSheet.addCommand('Enter', 'freq-row', 'vd.push(makeFreqTable(source[0], cursorRow))', 'open a Frequency Table sheet grouped on column referenced in current row')\nvd.addMenuItem('Data', 'Frequency table', 'current row', 'freq-row')\n\nFreqTableSheet.addCommand('gu', 'unselect-rows', 'unselect(selectedRows)', 'unselect all source rows grouped in current row')\nFreqTableSheet.addCommand('gEnter', 'dive-selected', 'vd.push(openRows(selectedRows))', 'open copy of source sheet with rows that are grouped in selected rows')\nFreqTableSheet.addCommand('', 'select-first', 'for r in rows: source.select([r.sourcerows[0]])', 'select first source row in each bin')\nFreqTableSheet.addCommand('zEnter', 'dive-except', 'vd.push(openRows(exceptRows(cursorRow)))', 'open copy of source sheet excluding rows in current bin')\nFreqTableSheet.addCommand('gzEnter', 'dive-except-selected', 'vd.push(openRows(exceptRows(selectedRows)))', 'open copy of source sheet excluding rows in selected bins')\nFreqTableSheet.bindkey('p', 'no-op')  #freqtbl rows aren't designed to allow pasting, so the default paste commands cause errors\nFreqTableSheet.bindkey('P', 'no-op')\n\nHistogramColumn.init('largest', lambda: 1)\n\nvd.addGlobals(\n    makeFreqTable=makeFreqTable,\n    makeFreqTableSheetSummary=makeFreqTableSheetSummary,\n    FreqTableSheet=FreqTableSheet,\n    FreqTableSheetSummary=FreqTableSheetSummary,\n    HistogramColumn=HistogramColumn,\n)\n\nvd.addMenuItems('''\n    Data > Frequency table > current column > freq-col\n    Data > Frequency table > key columns > freq-keys\n''')\n"
  },
  {
    "path": "visidata/fuzzymatch.py",
    "content": "''' Fuzzy String Matching.\n\nThis module is a pretty verbatim Python port of fzf's FuzzyMatchV2\ntrimmed down to a basic usecase of matching ASCII strings case sensitively.\n\nFor more information check out the source, I have not bothered to copy\nthe introductory comment/documentation:\n\n    https://github.com/junegunn/fzf/blob/b1a0ab8086/src/algo/algo.go\n\n'''\nimport collections\nfrom dataclasses import dataclass\nfrom enum import Enum\nfrom visidata import VisiData, vd, escape_vdcode\n\n# Overwrite to true to get some diagnostic visualization\nDEBUG = False\n\nscoreMatch        = 16\nscoreGapStart     = -3\nscoreGapExtension = -1\n\n# We prefer matches at the beginning of a word, but the bonus should not be\n# too great to prevent the longer acronym matches from always winning over\n# shorter fuzzy matches. The bonus point here was specifically chosen that\n# the bonus is cancelled when the gap between the acronyms grows over\n# 8 characters, which is approximately the average length of the words found\n# in web2 dictionary and my file system.\nbonusBoundary = scoreMatch / 2\n\n# Although bonus point for non-word characters is non-contextual, we need it\n# for computing bonus points for consecutive chunks starting with a non-word\n# character.\nbonusNonWord = scoreMatch / 2\n\n# Edge-triggered bonus for matches in camelCase words.\n# Compared to word-boundary case, they don't accompany single-character gaps\n# (e.g. FooBar vs. foo-bar), so we deduct bonus point accordingly.\nbonusCamel123 = bonusBoundary + scoreGapExtension\n\n# Minimum bonus point given to characters in consecutive chunks.\n# Note that bonus points for consecutive matches shouldn't have needed if we\n# used fixed match score as in the original algorithm.\nbonusConsecutive = -(scoreGapStart + scoreGapExtension)\n\n# The first character in the typed pattern usually has more significance\n# than the rest so it's important that it appears at special positions where\n# bonus points are given, e.g. 'to-go' vs. 'ongoing' on 'og' or on 'ogo'.\n# The amount of the extra bonus should be limited so that the gap penalty is\n# still respected.\nbonusFirstCharMultiplier = 2\n\n# Extra bonus for word boundary after whitespace character or beginning of the string\nbonusBoundaryWhite = bonusBoundary + 2\n\n# Extra bonus for word boundary after slash, colon, semi-colon, and comma\nbonusBoundaryDelimiter = bonusBoundary + 1\n\ndelimiterChars = '/,:;|'\n\nvd.theme_option('color_match', 'red', 'color for matching chars in palette chooser')\n\nwhiteChars = ' \\t\\n\\v\\f\\r\\x85\\xA0'\n\n(\n    charWhite,\n    charNonWord,\n    charDelimiter,\n    charLower,\n    charUpper,\n    charLetter,\n    charNumber,\n) = range(7)\ninitialCharClass = charWhite\n\n\ndef asciiFuzzyIndex(target, pattern):\n    '''Return a fuzzy* starting position of the pattern,\n    or -1, if pattern isn't a fuzzy match.\n\n    *the position is adapted one back, if possible,\n    for bonus determination reasons.\n    '''\n    first_idx, idx = 0, 0\n    for pidx in range(len(pattern)):\n        idx = target.find(pattern[pidx], idx)\n        if idx < 0:\n            return -1\n        if pidx == 0 and idx > 0:\n            # Step back to find the right bonus point\n            first_idx = idx - 1\n        idx += 1\n    return first_idx\n\n\ndef charClassOfAscii(char):\n    if char >= 'a' and char <= 'z':\n        return charLower\n    elif char >= 'A' and char <= 'Z':\n        return charUpper\n    elif char >= '0' and char <= '9':\n        return charNumber\n    elif char in whiteChars:\n        return charWhite\n    elif char in delimiterChars:\n        return charDelimiter\n    return charNonWord\n\n\ndef bonusFor(prevClass, class_):\n    if class_ > charNonWord:\n        if prevClass == charWhite:\n            # Word boundary after whitespace\n            return bonusBoundaryWhite\n        elif prevClass == charDelimiter:\n            # Word boundary after a delimiter character\n            return bonusBoundaryDelimiter\n        elif prevClass == charNonWord:\n            # Word boundary\n            return bonusBoundary\n    if (\n        prevClass == charLower\n        and class_ == charUpper\n        or prevClass != charNumber\n        and class_ == charNumber\n    ):\n        # camelCase letter123\n        return bonusCamel123\n    elif class_ == charNonWord:\n        return bonusNonWord\n    elif class_ == charWhite:\n        return bonusBoundaryWhite\n    return 0\n\n\ndef debugV2(T, pattern, F, lastIdx, H, C):\n    '''Visualize the score matrix and matching positions.'''\n    width = lastIdx - F[0] + 1\n\n    for i, f in enumerate(F):\n        I = i * width\n        if i == 0:\n            print('  ', end='')\n            for j in range(f, lastIdx + 1):\n                print(f' {T[j]} ', end='')\n            print()\n        print(pattern[i] + ' ', end='')\n        for idx in range(F[0], f):\n            print(' 0 ', end='')\n        for idx in range(f, lastIdx + 1):\n            print(f'{int(H[i*width+idx-int(F[0])]):2d} ', end='')\n        print()\n\n        print('  ', end='')\n        for idx, p in enumerate(C[I : I + width]):\n            if idx + int(F[0]) < int(F[i]):\n                p = 0\n            if p > 0:\n                print(f'{p:2d} ', end='')\n            else:\n                print('   ', end='')\n        print()\n\n\n@dataclass\nclass MatchResult:\n    '''Represents a scored match of a fuzzymatching search.\n\n    start: starting index of where the pattern is in the target sequence\n    end: Similarly, the end index (exclusive)\n    score: A value of how good the match is.\n    positions: A list of indices, indexing into the target sequence.\n               Corresponds to every position a letter of the pattern was found\n               for this particular alignment.\n    '''\n\n    start: int\n    end: int\n    score: int\n    positions: 'list[int]'\n\n\ndef _fuzzymatch(target: str, pattern: str) -> MatchResult:\n    '''Fuzzy string matching algorithm.\n\n    For a target sequence, check whether (and how good) a pattern is matching.\n\n    Returns a MatchResult, which contains start and end index of the match,\n    a score, and the positions where the pattern occurred.\n\n    The matching is case sensitive, so it's necessary to lower input and pattern\n    in the caller, if preferred otherwise.\n\n    The functionality is based on fzf's FuzzyMatchV2, minus some advanced features.\n    '''\n    patternLength = len(pattern)\n    if patternLength == 0:\n        return MatchResult(0, 0, 0, [])\n    targetLength = len(target)\n\n    # Phase 1: Optimized search for ASCII string\n    idx = asciiFuzzyIndex(target, pattern)\n    if idx < 0:\n        return MatchResult(-1, -1, 0, None)\n\n    H0 = [0] * targetLength\n    C0 = [0] * targetLength\n    # Bonus point for each position\n    B = [0] * targetLength\n    # The first occurrence of each character in the pattern\n    F = [0] * patternLength\n    T = list(target)\n\n    # Phase 2: Calculate bonus for each point\n    maxScore, maxScorePos = 0, 0\n    pidx, lastIdx = 0, 0\n    pchar0, pchar, prevH0, prevClass, inGap = (\n        pattern[0],\n        pattern[0],\n        0,\n        initialCharClass,\n        False,\n    )\n    Tsub = T[idx:]\n    H0sub, C0sub, Bsub = H0[idx:], C0[idx:], B[idx:]\n\n    for off, char in enumerate(Tsub):\n        class_ = charClassOfAscii(char)\n        bonus = bonusFor(prevClass, class_)\n        Bsub[off] = bonus\n        prevClass = class_\n\n        if char == pchar:\n            if pidx < patternLength:\n                F[pidx] = idx + off\n                pidx += 1\n                pchar = pattern[min(pidx, patternLength - 1)]\n            lastIdx = idx + off\n\n        if char == pchar0:\n            score = scoreMatch + bonus * bonusFirstCharMultiplier\n            H0sub[off] = score\n            C0sub[off] = 1\n            if patternLength == 1 and (score > maxScore):\n                maxScore, maxScorePos = score, idx + off\n                if bonus >= bonusBoundary:\n                    break\n            inGap = False\n        else:\n            if inGap:\n                H0sub[off] = max(prevH0 + scoreGapExtension, 0)\n            else:\n                H0sub[off] = max(prevH0 + scoreGapStart, 0)\n            C0sub[off] = 0\n            inGap = True\n        prevH0 = H0sub[off]\n\n    # write back, because slices in python are a full copy (as opposed to go)\n    H0[idx:], C0[idx:], B[idx:] = H0sub, C0sub, Bsub\n\n    if pidx != patternLength:\n        return MatchResult(-1, -1, 0, None)\n    if patternLength == 1:\n        return MatchResult(maxScorePos, maxScorePos + 1, maxScore, [maxScorePos])\n\n    # Phase 3: Fill in score matrix (H)\n    # do not allow omission.\n    f0 = F[0]\n    width = lastIdx - f0 + 1\n    H = [0] * width * patternLength\n    H[:width] = list(H0[f0 : lastIdx + 1])\n\n    # Possible length of consecutive chunk at each position.\n    C = [0] * width * patternLength\n    C[:width] = C0[f0 : lastIdx + 1]\n\n    Fsub = F[1:]\n    Psub = pattern[1:]\n    for off, f in enumerate(Fsub):\n        pchar = Psub[off]\n        pidx = off + 1\n        row = pidx * width\n        inGap = False\n        Tsub = T[f : lastIdx + 1]\n        Bsub = B[f:][: len(Tsub)]\n        H[row + f - f0 - 1] = 0\n        for off, char in enumerate(Tsub):\n            Cdiag = C[row + f - f0 - 1 - width :][: len(Tsub)]\n            Hleft = H[row + f - f0 - 1 :][: len(Tsub)]\n            Hdiag = H[row + f - f0 - 1 - width :][: len(Tsub)]\n            col = off + f\n            s1, s2, consecutive = 0, 0, 0\n\n            if inGap:\n                s2 = Hleft[off] + scoreGapExtension\n            else:\n                s2 = Hleft[off] + scoreGapStart\n\n            if pchar == char:\n                s1 = Hdiag[off] + scoreMatch\n                b = Bsub[off]\n                consecutive = Cdiag[off] + 1\n                if consecutive > 1:\n                    fb = B[col - consecutive + 1]\n                    # Break consecutive chunk\n                    if b >= bonusBoundary and b > fb:\n                        consecutive = 1\n                    else:\n                        b = max(b, max(bonusConsecutive, fb))\n                if s1 + b < s2:\n                    s1 += Bsub[off]\n                    consecutive = 0\n                else:\n                    s1 += b\n            C[row + f - f0 + off] = consecutive\n\n            inGap = s1 < s2\n            score = max(max(s1, s2), 0)\n            if pidx == patternLength - 1 and score > maxScore:\n                maxScore, maxScorePos = score, col\n            H[row + f - f0 + off] = score\n\n    if DEBUG:\n        debugV2(T, pattern, F, lastIdx, H, C)\n\n    # Phase 4. (Optional) Backtrace to find character positions\n    pos = []\n    i = patternLength - 1\n    j = maxScorePos\n    preferMatch = True\n    while True:\n        I = i * width\n        j0 = j - f0\n        s = H[I + j0]\n\n        s1, s2 = 0, 0\n        if i > 0 and j >= int(F[i]):\n            s1 = H[I - width + j0 - 1]\n        if j > int(F[i]):\n            s2 = H[I + j0 - 1]\n\n        if s > s1 and (s > s2 or s == s2 and preferMatch):\n            pos.append(j)\n            if i == 0:\n                break\n            i -= 1\n        preferMatch = (\n            C[I + j0] > 1 or I + width + j0 + 1 < len(C) and C[I + width + j0 + 1] > 0\n        )\n        j -= 1\n\n    # Start offset we return here is only relevant when begin tiebreak is used.\n    # However finding the accurate offset requires backtracking, and we don't\n    # want to pay extra cost for the option that has lost its importance.\n    return MatchResult(j, maxScorePos + 1, int(maxScore), pos)\n\n\ndef _format_match(s, positions):\n    '''*positions* is a list of indices into string *s*.\n    Returns a string containing visidata markup, where every character that matches is surrounded by [:match] [/].\n    Any bracket character that is to be displayed literally, is escaped.'''\n    out = list(s)\n    literals = dict.fromkeys([i for i, c in enumerate(s) if c == '['], True)\n    for p in positions:\n        out[p] = f'[:match]{out[p]}[/]'\n        literals[p] = False\n    for j in literals:\n        if literals[j]:\n            out[j] = escape_vdcode('[')\n    return \"\".join(out)\n\nCombinedMatch = collections.namedtuple('CombinedMatch', 'score formatted match')\n\n\n@VisiData.api\ndef fuzzymatch(vd, haystack:\"list[dict[str, str]]\", needles:\"list[str]) -> list[CombinedMatch]\", case_sensitive=False):\n    '''Perform matching that is case-insensitive by default. Return sorted list of matching dict values in haystack, augmenting the input dicts with _score:int and _positions:dict[k,set[int]] where k is each non-_ key in the haystack dict. Set *case_sensitive* to match case.'''\n    if not case_sensitive:\n        needles = [ p.lower() for p in needles]\n    matches = []\n    for h in haystack:\n        match = {}\n        formatted_hay = {}\n        for k, v in h.items():\n            if k[0] == '_': continue\n            positions = set()\n            v = str(v) if v is not None else ''\n            v_match = v if case_sensitive else v.lower()\n            for p in needles:\n                mr = _fuzzymatch(v_match, p)\n                if mr.score > 0:\n                    match.setdefault(k, []).append(mr)\n                    positions |= set(mr.positions)\n            formatted_hay[k] = _format_match(v, positions)\n\n        if match:\n            # square to prefer larger scores in a single haystack\n            score = int(sum([mr.score**2 for mrs in match.values() for mr in mrs]))\n            matches.append(CombinedMatch(score=score, formatted=formatted_hay, match=h))\n\n    return sorted(matches, key=lambda m: -m.score)\n\n\n@VisiData.api\ndef test_fuzzymatch(vd):\n    assert asciiFuzzyIndex('helo', 'h') == 0\n    assert asciiFuzzyIndex('helo', 'hlo') == 0\n    assert asciiFuzzyIndex('helo', 'e') == 0\n    assert asciiFuzzyIndex('helo', 'el') == 0\n    assert asciiFuzzyIndex('helo', 'eo') == 0\n    assert asciiFuzzyIndex('helo', 'l') == 1\n    assert asciiFuzzyIndex('helo', 'lo') == 1\n    assert asciiFuzzyIndex('helo', 'o') == 2\n    assert asciiFuzzyIndex('helo', 'ooh') == -1\n\n    assert charClassOfAscii('a') == charLower\n    assert charClassOfAscii('C') == charUpper\n    assert charClassOfAscii('2') == charNumber\n    assert charClassOfAscii(' ') == charWhite\n    assert charClassOfAscii(',') == charDelimiter\n\n    assert _fuzzymatch('hello', '') == MatchResult(0, 0, 0, [])\n    assert _fuzzymatch('hello', 'nono') == MatchResult(-1, -1, 0, None)\n    assert _fuzzymatch('hello', 'l') == MatchResult(2, 3, 16, [2])\n    assert _fuzzymatch('hello world', 'elo wo') == MatchResult(\n        1, 8, 127, [7, 6, 5, 4, 2, 1]\n    )\n\n    # #2XXX None values in haystack should not crash fuzzymatch\n    haystack = [\n        dict(longname='open-file', description='open the given file'),\n        dict(longname='save-sheet', description=None),\n        dict(longname='quit-all', description='quit all sheets'),\n    ]\n    results = vd.fuzzymatch(haystack, ['save'])\n    assert len(results) > 0\n    assert results[0].match['longname'] == 'save-sheet'\n"
  },
  {
    "path": "visidata/graph.py",
    "content": "import math\n\nfrom visidata import VisiData, Canvas, Sheet, Progress, BoundingBox, Point, ColumnsSheet\nfrom visidata import vd, asyncthread, dispwidth, colors, clipstr, ColorAttr, update_attr\nfrom visidata.type_date import date\nfrom statistics import median\n\nvd.theme_option('color_graph_axis', 'bold', 'color for graph axis labels')\nvd.theme_option('disp_graph_tick_x', '╵', 'character for graph x-axis ticks')\nvd.theme_option('color_graph_refline', '', 'color for graph reference value lines')\nvd.theme_option('disp_graph_reflines_x_charset', '▏││▕', 'charset to render vertical reference lines on graph')\nvd.theme_option('disp_graph_reflines_y_charset', '▔──▁', 'charset to render horizontal reference lines on graph')\nvd.theme_option('disp_graph_multiple_reflines_char', '▒', 'char to render multiple parallel reflines')\n\n\n@VisiData.api\ndef numericCols(vd, cols):\n    return [c for c in cols if vd.isNumeric(c)]\n\n\nclass InvertedCanvas(Canvas):\n    @asyncthread\n    def render_async(self):\n        self.plot_elements(invert_y=True)\n\n    def fixPoint(self, plotterPoint, canvasPoint):\n        'adjust visibleBox.xymin so that canvasPoint is plotted at plotterPoint'\n        self.visibleBox.xmin = canvasPoint.x - self.canvasW(plotterPoint.x-self.plotviewBox.xmin)\n        self.visibleBox.ymin = canvasPoint.y - self.canvasH(self.plotviewBox.ymax-plotterPoint.y)\n        self.resetBounds()\n\n    def rowsWithin(self, plotter_bbox):\n        return super().rowsWithin(plotter_bbox, invert_y=True)\n\n    def zoomTo(self, bbox):\n        super().zoomTo(bbox)\n        self.fixPoint(Point(self.plotviewBox.xmin, self.plotviewBox.ymin),\n                      Point(bbox.xmin, bbox.ymax))\n        self.resetBounds()\n\n    def scaleY(self, canvasY) -> int:\n        'returns a plotter y coordinate for a canvas y coordinate, with the y direction inverted'\n        return self.plotviewBox.ymax-round((canvasY-self.visibleBox.ymin)*self.yScaler)\n\n    def unscaleY(self, plotterY_inverted):\n        'performs the inverse of scaleY, returns a canvas y coordinate'\n        return (self.plotviewBox.ymax-plotterY_inverted)/self.yScaler + self.visibleBox.ymin\n\n    @property\n    def canvasMouse(self):\n        p = super().canvasMouse\n        if not p: return None\n        p.y = self.unscaleY(self.plotterMouse.y)\n        return p\n\n    def calcTopCursorY(self):\n        'ymin for the cursor that will align its top with the top edge of the graph'\n        return self.visibleBox.ymax - self.cursorBox.h\n\n    def calcBottomCursorY(self):\n        # Shift by 1 plotter pixel, like with goTopCursorY for Canvas. But shift in the\n        # opposite direction, because the y-coordinate system is inverted.\n        'ymin for the cursor that will align its bottom with the bottom edge of the graph'\n        return self.visibleBox.ymin - (1/4 * self.canvasCharHeight)\n\n    def startCursor(self):\n        res = super().startCursor()\n        if not res: return None\n        # Since the y coordinates for plotting increase in the opposite\n        # direction from Canvas, the cursor has to be shifted.\n        self.cursorBox.ymin -= self.canvasCharHeight\n\n# provides axis labels, legend\nclass GraphSheet(InvertedCanvas):\n    rowtype = 'points'\n\n    def __init__(self, *names, **kwargs):\n        self.ylabel_maxw = 0\n        super().__init__(*names, **kwargs)\n\n        self.reflines_x = []\n        self.reflines_y = []\n        self.reflines_char_x = {}    # { x value in character coordinates -> character to use to draw that vertical line }\n        self.reflines_char_y = {}    # { y value in character coordinates -> character to use to draw that horizontal line }\n\n        vd.numericCols(self.xcols) or vd.fail('at least one numeric key col necessary for x-axis')\n        self.ycols or vd.fail('%s is non-numeric' % '/'.join(yc.name for yc in kwargs.get('ycols')))\n\n    def resetCanvasDimensions(self, windowHeight, windowWidth):\n        if self.left_margin < self.ylabel_maxw:\n            self.left_margin = self.ylabel_maxw\n        super().resetCanvasDimensions(windowHeight, windowWidth)\n\n    @asyncthread\n    def reload(self):\n        nerrors = 0\n        nplotted = 0\n\n        self.reset()\n        self.row_order = {}\n\n        vd.status('loading data points')\n        catcols = [c for c in self.xcols if not vd.isNumeric(c)]\n        numcols = vd.numericCols(self.xcols)\n        for ycol in self.ycols:\n            for rownum, row in enumerate(Progress(self.sourceRows, 'plotting')):  # rows being plotted from source\n                try:\n                    k = tuple(c.getValue(row) for c in catcols) if catcols else (ycol.name,)\n\n                    # convert deliberately to float (to e.g. linearize date)\n                    graph_x = float(numcols[0].type(numcols[0].getValue(row))) if numcols else rownum\n                    graph_y = ycol.type(ycol.getValue(row))\n\n                    attr = self.plotColor(k)\n                    self.point(graph_x, graph_y, attr, row)\n                    self.row_order[self.source.rowid(row)] = rownum\n                    nplotted += 1\n                except Exception as e:\n                    nerrors += 1\n                    if vd.options.debug:\n                        vd.exceptionCaught(e)\n\n\n        vd.status('loaded %d points (%d errors)' % (nplotted, nerrors))\n\n        self.xzoomlevel=self.yzoomlevel=1.0\n        self.resetBounds()\n\n    def draw(self, scr):\n        windowHeight, windowWidth = scr.getmaxyx()\n        if self.needsRefresh:\n            self.render(windowHeight, windowWidth)\n\n        # required because we use clear_empty_squares=False for draw_pixels()\n        self.draw_empty(scr)\n        # draw reflines first so pixels draw over them\n        self.draw_reflines(scr)\n        # use clear_empty_squares to keep reflines\n        self.draw_pixels(scr, clear_empty_squares=False)\n        self.draw_labels(scr)\n\n    def draw_reflines(self, scr):\n        cursorBBox = self.plotterCursorBox\n        # draws only on character cells that have reflines, leaves other cells unaffected\n        for char_y in range(0, self.plotheight//4):\n            has_y_line = char_y in self.reflines_char_y.keys()\n            for char_x in range(0, self.plotwidth//2):\n                has_x_line = char_x in self.reflines_char_x.keys()\n                if has_x_line or has_y_line:\n                    cattr = colors.color_graph_refline\n                    if has_x_line:\n                        ch = self.reflines_char_x[char_x]\n                        # where two lines cross, draw the vertical line, not the horizontal one\n                    elif has_y_line:\n                        ch = self.reflines_char_y[char_y]\n                    # draw cursor\n                    if cursorBBox.contains(char_x*2, char_y*4) or \\\n                        cursorBBox.contains(char_x*2+1, char_y*4+3):\n                        cattr = update_attr(cattr, colors.color_current_row)\n                    scr.addstr(char_y, char_x, ch, cattr.attr)\n\n    def resetBounds(self, refresh=True):\n        super().resetBounds(refresh=False)\n        self.createLabels()\n        if refresh:\n            self.refresh()\n\n    def moveToRow(self, rowstr):\n        ymin, ymax = map(float, map(self.parseY, rowstr.split()))\n        self.cursorBox.ymin = ymin\n        self.cursorBox.h = ymax-ymin\n        return True\n\n    def plot_elements(self, invert_y=True):\n        self.plot_reflines()\n        super().plot_elements(invert_y=True)\n\n    def plot_reflines(self):\n        self.reflines_char_x = {}\n        self.reflines_char_y = {}\n\n        bb = self.visibleBox\n        xmin, ymin, xmax, ymax = bb.xmin, bb.ymin, bb.xmax, bb.ymax\n\n        for data_y in self.reflines_y:\n            data_y = float(data_y)\n            if data_y >= ymin and data_y <= ymax:\n                char_y, offset = divmod(self.scaleY(data_y), 4)\n                chars = self.options.disp_graph_reflines_y_charset\n                # if we're drawing two different reflines in the same square, fill it with a different char\n                if char_y in self.reflines_char_y and self.reflines_char_y[char_y] != chars[offset]:\n                    self.reflines_char_y[char_y] = vd.options.disp_graph_multiple_reflines_char\n                else:\n                    self.reflines_char_y[char_y] = chars[offset]\n\n        for data_x in self.reflines_x:\n            data_x = float(data_x)\n            if data_x >= xmin and data_x <= xmax:\n                plot_x = self.scaleX(data_x)\n                # plot_x is an integer count of plotter pixels, and each character box has 2 plotter pixels\n                char_x = plot_x // 2\n                # To subdivide the 2 plotter pixels per square into 4 zones, we have to first multiply by 2.\n                offset = 2*plot_x % 4\n                chars = self.options.disp_graph_reflines_x_charset\n                # if we're drawing two different reflines in the same square, fill it with a different char\n                if char_x in self.reflines_char_x and self.reflines_char_x[char_x] != chars[offset]:\n                    self.reflines_char_y[char_x] = vd.options.disp_graph_multiple_reflines_char\n                else:\n                    self.reflines_char_x[char_x] = chars[offset]\n\n    def moveToCol(self, colstr):\n        xmin, xmax = map(float, map(self.parseX, colstr.split()))\n        self.cursorBox.xmin = xmin\n        self.cursorBox.w = xmax-xmin\n        return True\n\n    def formatX(self, amt):\n        return ','.join(xcol.format(xcol.type(amt)) for xcol in self.xcols if vd.isNumeric(xcol))\n\n    def formatY(self, amt):\n        srccol = self.ycols[0]\n        return srccol.format(srccol.type(amt))\n\n    def formatXLabel(self, amt):\n        if self.xzoomlevel < 1:\n            labels = []\n            for xcol in self.xcols:\n                if vd.isNumeric(xcol):\n                    col_amt = float(amt) if xcol.type is int else xcol.type(amt)\n                else:\n                    continue\n                labels.append(xcol.format(col_amt))\n            return ','.join(labels)\n        else:\n            return self.formatX(amt)\n\n    def formatYLabel(self, amt):\n        srccol = self.ycols[0]\n        if srccol.type is int and self.yzoomlevel < 1:\n            return srccol.format(float(amt))\n        else:\n            return self.formatY(amt)\n\n    def parseX(self, txt):\n        return self.xcols[0].type(txt)\n\n    def parseY(self, txt):\n        return self.ycols[0].type(txt)\n\n    def add_y_axis_label(self, frac):\n        label_data_y = self.visibleBox.ymin + frac*self.visibleBox.h\n        txt = self.formatYLabel(label_data_y)\n        w = (dispwidth(txt)+1)*2\n        if self.ylabel_maxw < w:\n            self.ylabel_maxw = w\n        y = self.scaleY(label_data_y)\n\n        # plot y-axis labels on the far left of the canvas, but within the plotview height-wise\n        self.plotlabel(0, y, txt, 'graph_axis')\n\n    def add_x_axis_label(self, frac):\n        label_data_x = self.visibleBox.xmin + frac*self.visibleBox.w\n        txt = self.formatXLabel(label_data_x)\n        tick = vd.options.disp_graph_tick_x or ''\n\n        # plot x-axis labels below the plotviewBox.ymax, but within the plotview width-wise\n        x = self.scaleX(label_data_x)\n\n        if frac < 1.0:\n            txt = tick + txt\n        else:\n            right_margin = self.plotwidth - 1 - self.plotviewBox.xmax\n            if (dispwidth(txt)+dispwidth(tick))*2 <= right_margin:\n                txt = tick + txt\n            else:\n                # shift rightmost label to be left of its tick\n                x -= dispwidth(txt)*2\n                if len(tick) == 0:\n                    x += 1\n                txt = txt + tick\n\n        self.plotlabel(x, self.plotviewBox.ymax+4, txt, 'graph_axis')\n\n    def createLabels(self):\n        self.gridlabels = []\n        self.ylabel_maxw = self.leftMarginPixels\n\n        # y-axis\n        self.add_y_axis_label(1.00)\n        self.add_y_axis_label(0.75)\n        self.add_y_axis_label(0.50)\n        self.add_y_axis_label(0.25)\n        self.add_y_axis_label(0.00)\n\n        # x-axis\n        self.add_x_axis_label(1.00)\n        self.add_x_axis_label(0.75)\n        self.add_x_axis_label(0.50)\n        self.add_x_axis_label(0.25)\n        self.add_x_axis_label(0.00)\n\n        # TODO: if 0 line is within visible bounds, explicitly draw the axis\n        # TODO: grid lines corresponding to axis labels\n\n        xname = ','.join(xcol.name for xcol in self.xcols if vd.isNumeric(xcol)) or 'row#'\n        xname, _ = clipstr(xname, self.left_margin//2-2)\n        self.plotlabel(0, self.plotviewBox.ymax+4, xname+'»', 'graph_axis')\n\n    def rowsWithin(self, plotter_bbox):\n        'return list of deduped rows within plotter_bbox'\n        rows = super().rowsWithin(plotter_bbox)\n        return sorted(rows, key=lambda r: self.row_order[self.source.rowid(r)])\n\n    def draw_refline_x(self):\n        xcol = vd.numericCols(self.xcols)[0]\n        xtype = xcol.type\n        val = median(xcol.getValues(self.sourceRows))\n        suggested = format_input_value(val, xtype)\n        xstrs = vd.input(\"add line(s) at x = \", type=\"reflinex\", value=suggested, defaultLast=True).split()\n\n        for xstr in xstrs:\n            refval = xtype(xstr.strip())\n            if refval not in self.reflines_x:\n                self.reflines_x.append(refval)\n        self.refresh()\n\n    def draw_refline_y(self):\n        ytype = self.ycols[0].type\n        val = median(self.ycols[0].getValues(self.sourceRows))\n        suggested = format_input_value(val, ytype)\n        ystrs = vd.input(\"add line(s) at y = \", type=\"refliney\", value=suggested, defaultLast=True).split()\n\n        self.reflines_y += [ ytype(y) for y in ystrs if ytype(y) not in self.reflines_y ]\n        self.refresh()\n\n    def erase_refline_x(self):\n        if len(self.reflines_x) == 0:\n            vd.fail(f'no x refline to erase')\n        xtype = vd.numericCols(self.xcols)[0].type\n        suggested = format_input_value(self.reflines_x[0], xtype)\n\n        xstrs = vd.input('remove line(s) at x = ', value=suggested, type='reflinex', defaultLast=True).split()\n        for x in xstrs:\n            try:\n                self.reflines_x.remove(xtype(x))\n            except ValueError:\n                vd.warning(f'value {x} not in reflines_x')\n        self.refresh()\n\n    def erase_refline_y(self):\n        if len(self.reflines_y) == 0:\n            vd.fail(f'no y refline to erase')\n        ytype = self.ycols[0].type\n        suggested = format_input_value(self.reflines_y[0], ytype) if self.reflines_y else ''\n        ystrs = vd.input('remove line(s) at y = ', value=suggested, type='refliney', defaultLast=True).split()\n        for y in ystrs:\n            try:\n                self.reflines_y.remove(ytype(y))\n            except ValueError:\n                vd.warning(f'value {y} not in reflines_y')\n        self.refresh()\n\ndef format_input_value(val, type):\n    '''format a value for entry into vd.input(), so its representation has no spaces and no commas'''\n    if type is date:\n        return val.strftime('%Y-%m-%d')\n    else:\n        return str(val)\n\n\nSheet.addCommand('.', 'plot-column', 'vd.push(GraphSheet(sheet.name, \"graph\", source=sheet, sourceRows=rows, xcols=keyCols, ycols=numericCols([cursorCol])))', 'plot current numeric column vs key columns; numeric key column is used for x-axis, while categorical key columns determine color')\nSheet.addCommand('g.', 'plot-numerics', 'vd.push(GraphSheet(sheet.name, \"graph\", source=sheet, sourceRows=rows, xcols=keyCols, ycols=numericCols(nonKeyVisibleCols)))', 'plot a graph of all visible numeric columns vs key columns')\nColumnsSheet.addCommand('g.', 'plot-source-selected', 'vd.push(GraphSheet(sheet.source[0].name, \"graph\", source=source[0], sourceRows=source[0].rows, xcols=source[0].keyCols, ycols=numericCols(selectedRows)))', 'plot a graph of all selected columns vs key columns on source sheet')\n\n# swap directions of up/down\nInvertedCanvas.addCommand(None, 'go-up', 'if cursorBox: sheet.cursorBox.ymin += cursorBox.h', 'move cursor up by its height')\nInvertedCanvas.addCommand(None, 'go-down', 'if cursorBox: sheet.cursorBox.ymin -= cursorBox.h', 'move cursor down by its height')\nInvertedCanvas.addCommand(None, 'go-top',  'if cursorBox: sheet.cursorBox.ymin = sheet.calcTopCursorY()', 'move cursor to top edge of visible canvas')\nInvertedCanvas.addCommand(None, 'go-bottom', 'if cursorBox: sheet.cursorBox.ymin = sheet.calcBottomCursorY()', 'move cursor to bottom edge of visible canvas')\nInvertedCanvas.addCommand(None, 'go-pagedown', 't=(visibleBox.ymax-visibleBox.ymin); sheet.cursorBox.ymin -= t; sheet.visibleBox.ymin -= t; sheet.refresh()', 'move cursor down to next visible page')\nInvertedCanvas.addCommand(None, 'go-pageup', 't=(visibleBox.ymax-visibleBox.ymin); sheet.cursorBox.ymin += t; sheet.visibleBox.ymin += t; sheet.refresh()', 'move cursor up to previous visible page')\n\nInvertedCanvas.addCommand(None, 'go-down-small', 'sheet.cursorBox.ymin -= canvasCharHeight', 'move cursor down one character')\nInvertedCanvas.addCommand(None, 'go-up-small', 'sheet.cursorBox.ymin += canvasCharHeight', 'move cursor up one character')\n\nInvertedCanvas.addCommand(None, 'resize-cursor-shorter', 'sheet.cursorBox.h -= canvasCharHeight', 'decrease cursor height by one character')\nInvertedCanvas.addCommand(None, 'resize-cursor-taller', 'sheet.cursorBox.h += canvasCharHeight', 'increase cursor height by one character')\n\n\n@GraphSheet.api\ndef set_y(sheet, s):\n    ymin, ymax = map(float, map(sheet.parseY, s.split()))\n    sheet.zoomTo(BoundingBox(sheet.visibleBox.xmin, ymin, sheet.visibleBox.xmax, ymax))\n    sheet.refresh()\n\n@GraphSheet.api\ndef set_x(sheet, s):\n    xmin, xmax = map(float, map(sheet.parseX, s.split()))\n    sheet.zoomTo(BoundingBox(xmin, sheet.visibleBox.ymin, xmax, sheet.visibleBox.ymax))\n    sheet.refresh()\n\nCanvas.addCommand('y', 'resize-y-input', 'sheet.set_y(input(\"set ymin ymax=\"))', 'set ymin/ymax on graph axes')\nCanvas.addCommand('x', 'resize-x-input', 'sheet.set_x(input(\"set xmin xmax=\"))', 'set xmin/xmax on graph axes')\n\nGraphSheet.addCommand('gx', 'draw-refline-x', 'sheet.draw_refline_x()', 'draw a vertical line at x-values (space-separated)')\nGraphSheet.addCommand('gy', 'draw-refline-y', 'sheet.draw_refline_y()', 'draw a horizontal line at y-values (space-separated)')\nGraphSheet.addCommand('zx', 'erase-refline-x', 'sheet.erase_refline_x()', 'remove a horizontal line at x-values (space-separated)')\nGraphSheet.addCommand('zy', 'erase-refline-y', 'sheet.erase_refline_y()', 'remove a vertical line at y-values (space-separated)')\nGraphSheet.addCommand('gzx', 'erase-reflines-x', 'sheet.reflines_x = []; sheet.refresh()', 'erase all vertical x-value lines')\nGraphSheet.addCommand('gzy', 'erase-reflines-y', 'sheet.reflines_y = []; sheet.refresh()', 'erase any horizontal y-value lines')\n\n@GraphSheet.after\ndef reload(sheet):\n    if not vd.cursesEnabled:\n        sheet.resetCanvasDimensions(25, 80)\n        sheet.resetBounds(refresh=False)\n        sheet.plot_elements(invert_y=True)\n\nvd.addGlobals({\n    'GraphSheet': GraphSheet,\n    'InvertedCanvas': InvertedCanvas,\n})\n\nvd.addMenuItems('''\n    Plot > Graph > current column > plot-column\n    Plot > Graph > all numeric columns > plot-numerics\n    Plot > Refline > draw at x coord (vert) > draw-refline-x\n    Plot > Refline > draw at y coord (horiz) > draw-refline-y\n    Plot > Refline > erase at x coord (vert) > erase-refline-x\n    Plot > Refline > erase at y coord (horiz) > erase-refline-y\n    Plot > Refline > erase all x (vert) > erase-reflines-x\n    Plot > Refline > erase all y (horiz) > erase-reflines-y\n''')\n"
  },
  {
    "path": "visidata/guide.py",
    "content": "'''\n# A Guide to VisiData Guides\nEach guide shows you how to use a particular feature in VisiData. Gray guides have not been written yet. We love contributions: [:onclick https://visidata.org/docs/api/guides]https://visidata.org/docs/api/guides[/].\n\n- [:keystrokes]Up/Down[/] to move the row cursor\n- [:keystrokes]Enter[/] to view a topic\n'''\nimport re\n\nfrom visidata import vd, BaseSheet, Sheet, ItemColumn, Column, VisiData, RowColorizer, AttrDict, MissingAttrFormatter\nfrom visidata import wraptext, Path, CellColorizer\nimport visidata\n\nguides_list = '''\nGuideIndex (\"A Guide to VisiData Guides (you are here)\")\nHelpGuide (\"Where to Start and How to Quit\")  # manpage; ask for patreon\nMenuGuide (\"The VisiData Menu System\")\nCommandsSheet (\"How to find the command you want run\")\n\n#  real barebones basics\nMovementGuide (\"Movement and search\")\nInputGuide (\"Input keystrokes\")\nSortGuide (\"Sorting\")\nColumnsGuide (\"Resize, hide, and rename columns\")\nTypesSheet (\"Column types\")\nCommandLog  (\"Undo and Replay\")\n\n#  rev this thing up\n\nSelectionGuide (\"Selecting and filtering\") # stu|, and variants; filtering with dup-sheet; g prefix often refers to selected rowset\nSheetsSheet  (\"The Sheet Stack\")\nColumnsSheet (\"Columns: the only way to fly\")\nStatusesSheet (\"Revisit old status messages\")\nSidebarSheet (\"Dive into the sidebar\")\nSaversGuide (\"Saving Data\")  # talk about options.overwrite + ro here\n\nErrorsSheet (\"What was that error?\")\nModifyGuide (\"Adding, Editing, Deleting Rows\")\n\n# the varieties of data experience\n\nSlideGuide (\"Sliding rows and columns around\")\nExprGuide (\"Compute Python over every row\")\nJoinGuide (\"Joining multiple sheets together\")\nDescribeSheet (\"Basic Statistics (min/max/mode/median/mean)\")\nAggregatorsSheet (\"Aggregations like sum, mean, and distinct\")\nFrequencyTable (\"Frequency Tables are how you GROUP BY\")\nPivotGuide (\"Pivot Tables are just Frequency Tables with more columns\")\nMeltGuide (\"Melt is just Unpivot\")\nJsonSheet (\"Some special features for JSON\") # with expand/contract, unfurl\nRegexGuide (\"Matching and Transforming Strings with Regex\")\nGraphSheet (\"Basic scatterplots and other graphs\")\nWindowFunctionGuide (\"Perform operations on groups of rows\")\n\n# for the frequent user\nOptionsSheet (\"Options and Settings\")\nClipboardGuide (\"Copy and Paste Data via the Clipboard\")\nDirSheet (\"Browsing the local filesystem\")\nFormatsSheet (\"What can you open with VisiData?\")\nSplitpaneGuide (\"Split VisiData into two panes\")\nThemesSheet (\"Change Interface Theme\")\nColorSheet (\"See available colors\")\nMacrosSheet (\"Recording macros\")\nMemorySheet (\"Making note of certain values\")\n\n# Specific use cases\n\nXsvGuide (\"CSV/TSV and other text-delimited formats\")\nGrepSheet (\"Load output of grep-like tools\")\n\n# advanced usage and developers\n\nThreadsSheet (\"Threads past and present\")\nDeveloperGuide (\"Inspecting internal Python objects\")\n\n#  appendices\n\nInputEditorGuide (\"Using the builtin line editor\")\n'''\n\nvd.guides = {}  # name -> guidecls\n\n@VisiData.api\ndef addGuide(vd, name):\n    guideSource = Path(vd.pkg_resources_files(visidata)/f'guides/{name}.md')\n    if guideSource.exists():\n        vd.guides[name] = GuideSheet(name, source=guideSource)\n\n@VisiData.api\nclass GuideIndex(Sheet):\n    guide = __doc__\n\n    rowtype = 'guides' # rowdef: list(guide number, guide name, topic description, points, max_points)\n    columns = [\n        ItemColumn('n', 0, width=0, type=int),\n        ItemColumn('name', 1, width=0),\n        ItemColumn('topic', 2, width=60),\n    ]\n    colorizers = [\n            RowColorizer(7, 'color_guide_unwritten', lambda s,c,r,v: r and r[1] not in vd.guides)\n            ]\n    def iterload(self):\n        i = 0\n        for line in guides_list.splitlines():\n            m = re.search(r'(\\w+?) \\(\"(.*)\"\\)', line)\n            if m:\n                guidename, description = list(m.groups())\n                vd.addGuide(guidename)\n                yield [i, guidename, description]\n                i += 1\n\n    def openRow(self, row):\n        name = row[1]\n        return vd.getGuide(name)\n\nclass OptionHelpGetter:\n    'For easy and consistent formatting in sidebars and helpstrings, use {help.options.opt_name}.'\n    def __getattr__(self, optname):\n        opt = vd.options._get(optname, 'default')\n        return f'[:onclick options-sheet {optname}][:longname_guide]{optname}[/][/]: {opt.helpstr} (default: {opt.value})'\n\n\nclass CommandHelpGetter:\n    'For easy and consistent formatting in sidebars and helpstrings, use {help.commands.long_name}.'\n    def __init__(self, cls):\n        self.cls = cls\n        self.helpsheet = vd.HelpSheet()\n        vd.sync(self.helpsheet.ensureLoaded())\n\n    def __getattr__(self, k):\n        return self.__getitem__(k)\n\n    def __getitem__(self, k):\n        longname = k.replace('_', '-')\n        binding = self.helpsheet.revbinds.get(longname, [None])[0] or '<unbound>'\n        # cmddict has a SheetClass associated with each command\n        # go through all the parents of the Sheet type, to look for the command\n        for cls in self.cls.superclasses():\n            cmd = self.helpsheet.cmddict.get((cls.__name__, longname), None)\n            if cmd:\n                break\n        if not cmd:\n            return ''\n        if 'input' in cmd.execstr.lower():\n            inputtype = 'input'\n            m = re.search(r'type=\"(\\w*)\"', cmd.execstr, re.IGNORECASE)\n            if not m:\n                m = re.search(r'input(\\w*)\\(\"', cmd.execstr, re.IGNORECASE)\n            if m:\n                inputtype = m.groups()[0].lower() or 'input'\n                binding += f' <{inputtype}>'\n\n        helpstr = cmd.helpstr\n        return f'[:code]{binding}[/] ([:longname_guide]{longname}[/]) to {helpstr}'\n\n\nclass GuideSheet(Sheet):\n    rowtype = 'lines'\n    filetype = 'guide'\n    columns = [\n            ItemColumn('linenum', 0, type=int, width=0),\n            ItemColumn('guide', 1, width=80, displayer='full'),\n            ]\n    precious = False\n    colorizers = [CellColorizer(4, 'color_sidebar', lambda s,c,r,v: True)]\n\n    def iterload(self):\n        self.metadata = AttrDict(sheettype='Sheet')\n        text = self.source.open(mode='r').read()\n        winWidth = 78\n\n        # parsing front matter\n        sections = text.split('---\\n', maxsplit=2)\n        for section in sections[:-1]:\n            for config in section.splitlines():\n                config = config.strip()\n                if config:\n                    try:\n                        key, val = config.split(': ', maxsplit=1)\n                    except ValueError:\n                        vd.fail('incorrect front matter syntax')\n                    self.metadata[key] = val\n\n        # formatting text\n        helper = AttrDict(commands=CommandHelpGetter(vd.getGlobals()[self.metadata.sheettype]),\n                          options=OptionHelpGetter())\n        guidetext = MissingAttrFormatter().format(sections[-1], help=helper, vd=vd)\n\n        # parsing guide\n        for startingLine, text in enumerate(guidetext.splitlines()):\n            text = text.strip()\n            if text:\n                for i, (L, _) in enumerate(wraptext(str(text), width=winWidth)):\n                    yield [startingLine+i+1, L]\n            else:\n                yield [startingLine+1, text]\n\n\n@VisiData.api\ndef getGuide(vd, name): # -> GuideSheet()\n    if name in vd.guides:\n        return vd.guides[name]\n    vd.warning(f'no guide named {name}')\n\nBaseSheet.addCommand('', 'open-guide-index', 'vd.push(GuideIndex(\"VisiData_Guide\"))', 'open VisiData guides table of contents')\n\n@VisiData.api\ndef inputKeys(vd, prompt):\n    return vd.input(prompt, help=f'''\n                # Input Keystrokes\n                - Press `Ctrl+N` and then press another keystroke to spell out that keystroke.\n                - Press `Ctrl+C` to cancel the input.\n                - Press `Enter` to accept the input.\n            ''')\n\n@BaseSheet.api\ndef getCommandInfo(sheet, keys):\n    if not keys:\n        return ''\n    cmd = sheet.getCommand(keys)\n    if cmd:\n        return CommandHelpGetter(type(sheet))[cmd.longname]\n    else:\n        vd.warning(f'no command bound to {keys} on {sheet}')\n\nGuideSheet.options.color_current_row = \"underline\"\n\nvd.addCommand('', 'show-command-info', 'status(getCommandInfo(inputKeys(\"get command for keystrokes: \")))', 'show longname and helpstring for keybinding')\n\nvd.addMenuItems('''\n        Help > VisiData Feature Guides > open-guide-index\n''')\n\nvd.optalias('guides', 'preplay', 'open-guide-index')\n\nvd.addGlobals({\"CommandHelpGetter\": CommandHelpGetter, \"OptionHelpGetter\": OptionHelpGetter})\n"
  },
  {
    "path": "visidata/guides/AggregatorsSheet.md",
    "content": "---\nsheet: AggregatorSheet\n---\n# Aggregations like sum, mean, and distinct\n\nAggregators provide summary statistics for grouped rows.\n\nThe current aggregators include:\n\n   min           smallest value in the group\n   max           largest value in the group\n   avg/mean      average value of the group\n   mode          most frequently appearing value in group\n   median        median value in the group\n   q3/q4/q5/q10  add quantile aggregators to group (e.g. q4 adds p25, p50, p75)\n   sum           total summation of all numbers in the group\n   distinct      number of distinct values in the group\n   count         number of values in the group\n   keymax        key of the row with the largest value in the group\n   list          gathers values in column into a list\n   stdev         standard deviation of values\n\n## View a one-off aggregation of a column\n\n- {help.commands.memo-aggregate} \n\n## Create an aggregator column\n\nAggregated columns appear in the **Frequency Table** and **Pivot Table** (grouped sheets).  Aggregated values will also appear at the bottom of their columns in the source sheet.\n\n- {help.commands.aggregate-col}\n\nThen aggregate the sheet with one of the grouping commands:\n\n- {help.commands.freq-col}\n- {help.commands.pivot}\n\nAggregators can be viewed and modified on the **Columns Sheet** in the `aggregators` column.\n\n- {help.commands.columns-sheet}\n\n## The Describe Sheet\n\nTo get a predefined set of summary statistics for every column in the sheet, use the **Describe Sheet* :\n\n- {help.commands.describe-all}\n\n## Examples\n\nSample input sheet **sales**:\n\n   date        color  price\n   ----------  -----  -----\n   2024-09-01  R      30\n   2024-09-02  B      28\n   2024-09-03  R      100\n   2024-09-03  B      33\n   2024-09-03  B      99\n\n1. Move to the `price` column\n2. Set it to currency: [:keys]$[/key]\n3. Quickly show average price\n    - [:keys]z+[/] (`memo-aggregate`) then enter 'avg'\n4. Add an `sum` aggregator column:\n    - Press [:keys]+[/] (`aggregate-column`) then enter 'sum'\n5. Move to the date column [:keys]gh[/]\n6. Generate a **Frequency Table** by `date`\n    - [:keys]Shift-F[/] (`freq`)\n\n\n   date        count  price_sum\n   ----------  -----  ---------\n   2024-09-03  3      232.00\n   2024-09-01  1      30.00\n   2024-09-02  1      28.00\n\n## Creating new aggregator functions\n\nTo add a new aggregator to compute the range of the grouped values (max - min), add the following to `.visidatarc`:\n\n[:code]vd.aggregator('range', lambda values: max(values) - min(values), 'range of values')[/]\n\nThe `values` parameter is a list of typed values from the column, with the function returning the aggregated value.\nThe new aggregator will now be available the next time VisiData is started.\n"
  },
  {
    "path": "visidata/guides/ClipboardGuide.md",
    "content": "# Copy, Cut and Paste...\n\n## ...rows to/from the internal clipboard\n\n- {help.commands.copy_row}\n- {help.commands.copy_selected}\n\n- {help.commands.cut_row}\n- {help.commands.cut_selected}\n\n- {help.commands.paste_after}\n- {help.commands.paste_before}\n\n## ...cells to/from the internal clipboard\n\n- {help.commands.copy_cell}\n- {help.commands.cut_cell}\n- {help.commands.paste_cell}\n\n## ...columns from the intenral clipboard\n\n- {help.commands.copy_cells}\n- {help.commands.cut_cells}\n- {help.commands.setcol_clipboard}\n\nIf there are fewer values in the clipboard than in the selected target column, the clipboard values will be repeated in sequence.\n\n## ....to/from the system clipboard\n\n- {help.commands.syscopy_cell}\n- {help.commands.syscopy_cells}\n\n- {help.commands.syscopy_row}\n- {help.commands.syscopy_selected}\n\n- {help.commands.syspaste_cells}\n- {help.commands.syspaste_cells_selected}\n\n## Paste a new sheet from the system clipboard\n\n- {help.commands.open_syspaste}\n\nThe paste command will prompt for the filetype, so the input data (from the clipboard) can be in any supported format.\n\n## Relevant options\n\n- {help.options.clipboard_copy_cmd}\n- {help.options.clipboard_paste_cmd}\n"
  },
  {
    "path": "visidata/guides/ColumnsGuide.md",
    "content": "# Resize, hide, and rename columns\n\n## Resize the current column\n\n- {help.commands.resize_col_max}\n- {help.commands.resize_col_input}\n- {help.commands.resize_col_half}\n\n## Resize multiple columns\n\n- {help.commands.resize_cols_input}\n\n## Hide and Unhide columns\n\nClean up the sheet by hiding unwanted columns.  Hidden columns are still present, but not visible in the main set of columns.\n(They are minimized on the right side and can be unhidden with {help.commands.resize_col_max}.\n\n- {help.commands.hide_col}\n- {help.commands.unhide_cols}\n\nUse {help.commands.columns_sheet} to control visibility as well.\n\n## Rename columns\n\n- {help.commands.rename_col}\n\n## Rename one or more columns using data \n\nRename one or more columns using data from the sheet:\n\n- {help.commands.rename_col_selected}\n- {help.commands.rename_cols_row}\n- {help.commands.rename_cols_selected}\n\n## Clean column names\n\nRename columns to be valid Python identifiers that can be used in column\nexpressions.\n\n- {help.commands.normalize_col_names}\n- {help.commands.clean_names}\n\n## Change row height\n\nSometimes the data for a cell will not fit within the current width. If the\ndata is large, or spans multiple lines, change the row height to show more for\nthe current column width. Row height adjustments can also be combined with\ncolumn width changes.\n\n- {help.commands.toggle_multiline}\n- {help.commands.resize_height_input}\n- {help.commands.resize_height_max}\n"
  },
  {
    "path": "visidata/guides/CommandsSheet.md",
    "content": "# How to find commands\n\n## Command Palette\n\n- {help.commands.exec_longname}\n\nStart typing a command longname or keyword in its helpstring.\n\n- [:code]Enter[/] to execute top command.\n- [:code]Tab[/] to highlight top command and provide a numeric jumplist.\n- [:code]PgUp[/]/[:code]PgDn[/] to scroll through commands.\n\nWhen a command is highlighted:\n\n- [:code]Tab[/]/[:code]Shift+Tab[/] to cycle highlighted command.\n- [:code]Enter[/] to execute highlighted command.\n- [:code]0-9[/] to execute numbered command.\n\n## Command Sheet\n\nThe Command Sheet lists all of the available commands, their keyboard bindings, function names, and other information.\n\n- {help.commands.help_commands_all}\n- {help.commands.help_commands}\n\n'description' and 'longname' column: useful to find rows that share a longname suffix or prefix. E.g, `save` or `selected`.\n\n'keystrokes' and 'all_bindings' column: useful to search for keybindings. E.g, `Ctrl` or `F`.\n\n"
  },
  {
    "path": "visidata/guides/DirSheet.md",
    "content": "---\nsheettype: DirSheet\n---\n# Directory Sheet\n\nThe **DirSheet** is a display of files and folders in the *source* directory.\n\nTo load a **DirSheet**:\n\n- provide a directory as a source on the CLI (e.g. [:code]vd sample_data/[/])\n- {help.commands.open_dir_current} (equivalent to [:code]vd .[/])\n\nUse the **DirSheet** to find and open files:\n\n- {help.commands.open_row_file}\n- {help.commands.open_rows}\n- {help.commands.open_dir_parent}\n- {help.commands.sysopen_row}\n\nUse the **DirSheet** as a file manager:\n\n- {help.commands.copy_row}\n- {help.commands.copy_selected}\n- [:keys]d[/] ([:longname]delete-row[/]) to delete file from filesystem\n- [:keys]e[/] ([:longname]edit-cell[/]) to change file metadata (all of the file metadata, except for *filetype*, is modifiable)\n\nModifications on the **DirSheet** are deferred - they do not take effect on the filesystem itself until they are confirmed.\n- {help.commands.commit_sheet}\n\n## Options of Interest (must reload to take effect)\n\n- pass the flag [:code]-r[/] ([:code]--recursive[/]) on the CLI to display all of the files in all subfolders\n- {help.options.dir_depth}\n- {help.options.dir_hidden}\n"
  },
  {
    "path": "visidata/guides/ErrorsSheet.md",
    "content": "# What was that error?\n\nStatus messages include [:warning]warnings[/] and [:error]errors[/].\n\nA command may issue a [:warning]warning[/] status and continue running.\nA command that [:warning]fails[/] or [:error]errors[/] is aborted.\n\n## Investigating errors further\n\nIf a Python Exception like [:error]RuntimeError[/] appears in the sidebar:\n\n- {help.commands.error_recent}\n- {help.commands.errors_all}\n\nIf [:note_type]{vd.options.disp_note_fmtexc}[/] or [:error]{vd.options.disp_note_getexc}[/] appear inside a cell, it indicates an error happened during calculation, type-conversion, or formatting.  When the cursor is on an error cell:\n\n- {help.commands.error_cell}\n"
  },
  {
    "path": "visidata/guides/FrequencyTable.md",
    "content": "# Frequency Tables are how you GROUP BY\n\nFrequency Tables group rows into bins by column value, and includes summary columns for source columns with aggregators.\n\nSet `--numeric-binning` to bin numeric rows into ranges instead of discrete values.\n\n- {help.commands.freq_col}\n\n- {help.commands.freq_keys}\n\n- {help.commands.freq_summary} \n\n## Aggregators\n\nA **Frequency Table** contains a summary columns for each aggregator added to a source column.\nThese aggregators need to be added before creating the Frequency Table.\nExamples of aggregators include min, max, sum, distinct, count, and list.\n\n- {help.commands.aggregate-col}\n\nNote: set an appropriate type for the aggregator target column, for example {help.commands.type_float}.\n\n## Explore the data\n\nDive into a group to see the underlying row(s) using the **Frequency Table**:\n\n- {help.commands.open_row}\n- {help.commands.dive_selected}\n\nSelect a group to select all of its underlying rows in the source sheet.\n\n## Using Split Panes with Frequency Tables\n\nPress `Shift+Z` to open a split pane, and then `Shift+F` to create a **Frequency Table**. The **Frequency Table** will automatically open in the other pane.\n\nSee the `SplitpanesGuide` for more.\n\n#### Options\n\n- {help.options.disp_histogram}\n- {help.options.histogram_bins}\n- {help.options.numeric_binning}\n"
  },
  {
    "path": "visidata/guides/GrepSheet.md",
    "content": "---\nsheettype: GrepSheet\n---\n\n# Using grep sheet\n\nThe **GrepSheet** allows you to examine output of grep-like tools for line search.\nThe typical way to use it would be:\n    grep -H -n pat file1 file2 | vd -f grep\nYou can also load from a saved file ending in .grep:\n    grep -H -n pat file1 file2 > out.grep; vd -f grep out.grep\n\n**GrepSheet** works with other grep-like searchers, like the best-in-class ripgrep:\n    rg --sort path --json pat file1 file2 | vd -f grep\nor git-grep:\n    git grep -n class | vd -f grep\n\n## Editing files by pressing Enter\n\n- {help.commands.sysopen_row}\n\nIf the file path is relative to a different directory from the current\ndirectory, use [:code]options.grep_base_dir[/] to specify the base directory\nfor all relative paths. `$EDITOR` is a set environment variable.\n\n## Options to control GrepSheet behavior\n\n- {help.options.grep_base_dir}\n"
  },
  {
    "path": "visidata/guides/JsonSheet.md",
    "content": "# Some special features for JSON\n\n## Working with nested data\n\nVisiData uses these conventions to display nested data:\n\n- {{2}} indicates a nested object with 2 keys\n- [3] indicates a nested array with 3 elements\n\n[:note_type]Expanding[/] unpacks nested data column-wise, often useful for nested objects:\n\n- {help.commands.expand-col}\n- {help.commands.expand-col-depth}\n- {help.commands.expand-cols}\n- {help.commands.expand-cols-depth}\n\nTo revert earlier `expand-` operations:\n\n- {help.commands.contract-col}\n- {help.commands.contract-col-depth}\n- {help.commands.contract-cols}\n- {help.commands.contract-cols-depth}\n\n[:note_type]Unfurling[/] unpacks nested data row-wise, often useful for nested arrays:\n\n- {help.commands.unfurl-col}\n\nNote that `unfurl-col` creates a new sheet with `_unfurled` appended to the name. There is no command to revert an unfurl; instead, quit the unfurled sheet.\n\nFor particularly deep or complex nested data, it can be helpful to open an individual cell as a new sheet:\n\n- {help.commands.open-cell}\n\n## Options to control JSON save behavior\n\n- {help.options.json_indent}\n- {help.options.json_sort_keys}\n- {help.options.json_ensure_ascii}\n"
  },
  {
    "path": "visidata/guides/MacrosSheet.md",
    "content": "# Macros\nMacros allow you to bind a command sequence to a keystroke or longname, to replay when that keystroke is pressed or the command is executed by longname.\n\nThe basic usage is:\n    1. {help.commands.macro_record}.\n    2. Execute a series of commands.\n    3. `m` again to complete the recording, and prompt for the keystroke or longname to bind it to.\n\nThe macro will then be executed every time the provided keystroke or longname are used. Note: the Alt+keys and the function keys are left unbound; overriding other keys may conflict with existing bindings, now or in the future.\n\nExecuting a macro will the series of commands starting on the current row and column on the current sheet.\n\n# The Macros Sheet\n\n- {help.commands.macro_sheet}\n\n- `d` (`delete-row`) to mark macros for deletion\n- {help.commands.commit_sheet}\n- `Enter` (`open-row`) to open the macro in the current row, and view the series of commands composing it'''\n"
  },
  {
    "path": "visidata/guides/MeltGuide.md",
    "content": "---\nsheettype: Sheet\n---\n# Melt is just unpivot\n\nMelt collapses the pivoted columns back into \"Variable\" and \"Value\" columns, converting from \"wide\" format into \"long\" format. After a melt, there is one row for each value in the pivot table.\n\n1. [Optional] remove a column from the output by hiding it: [:keys]-[/]\n2. [Optional] set key columns to keep them unmelted: [:keys]![/]\n\n3a. {help.commands.melt}\n\nA regex melt partially melts the pivoted columns. Provide a regular expression to separate the key column from other columns.\n\n3b. {help.commands.melt_regex}\n\n## Examples\n\nStart with a pivot table, created by pivoting a table with columns `R`,`B`, and key column `date`. There are two aggregators `sum` and `mean`:\n\n   date        sum_R  mean_R  sum_B  mean_B\n   ----------  -----  ------  -----  ------\n   2024-09-01  30     30      0\n   2024-09-02  0              28     28\n   2024-09-03  100    100     132    66\n\nPress `Shift+M` for a standard melt:\n\n   date        Variable  Value\n   ----------  --------  -----\n   2024-09-01  sum_R     30\n   2024-09-01  mean_R    30\n   2024-09-01  sum_B     0\n   2024-09-02  sum_R     0\n   2024-09-02  sum_B     28\n   2024-09-02  mean_B    28\n   2024-09-03  sum_R     100\n   2024-09-03  mean_R    100\n   2024-09-03  sum_B     132\n   2024-09-03  mean_B    66\n\nOr press `gShift+M` and then type a `regex` of `(\\w+)_(\\w)` to separate the aggregator from the column. Only the aggregator will be fully melted. The columns `R` and `B` will remain:\n\n   date        Variable  B    R\n   ----------  --------  ---  ---\n   2024-09-01  sum       0    30\n   2024-09-01  mean           30\n   2024-09-02  sum       28   0\n   2024-09-02  mean      28\n   2024-09-03  sum       132  100\n   2024-09-03  mean      66   100\n\n"
  },
  {
    "path": "visidata/guides/MemorySheet.md",
    "content": "# The Memory Sheet \n\nThe **MemorySheet** provides a place to manually save cell values for later reference. It also automatically stores clipboard data when rows, cells or columns are copied.\n\n- {help.commands.memo_cell}\n- {help.commands.memo_aggregate}\n- {help.commands.open_memos}\n"
  },
  {
    "path": "visidata/guides/MenuGuide.md",
    "content": "# The Menu System\n\nThe menu (on the first row of the window) contains most commands, organized within a tree of submenus.\n\nClick on menu items to navigate the menu like a GUI.\n\nWith the keyboard:\n\n- {help.commands.menu_help}\n- [:keys]Arrow[/] keys to move between submenus\n\nAdditionally, each top-level menu name has a single letter underlined. [:keys]Alt+<underlined letter>[/] to open that menu. For example, [:keys]Alt+F[/] to open the **File** menu.\n\nEach non-submenu item is a command. It shows the description of the current command, along with the command name and its keyboard shortcut (if available). Click on the item or [:keys]Enter[/] to execute it.\n\nIndicators:\n\n- {help.options.disp_menu_more}\n- {help.options.disp_menu_push}\n- {help.options.disp_menu_input}\n\nSome commands are only available on a specific sheet type, and appear [:color_menu_spec]highlighted[/] in the menu when the current sheet is that type. If the command is not available, it will not appear at all.\n\n## Options\n\n- {help.options.disp_menu}\n"
  },
  {
    "path": "visidata/guides/ModifyGuide.md",
    "content": "# Adding, Editing, Deleting Rows\n\nIn addition to cutting and pasting (see **Clipboard Guide**), rows can be created from scratch, edited and deleted.\n\n- {help.commands.add-row}\n- {help.commands.add-rows}\n\n- {help.commands.delete-row}\n- {help.commands.delete-selected}\n\n- {help.commands.sysedit-selected}\n- {help.commands.edit_cell}\n\nWhile editing a cell, press `Ctrl+G` to cycle through the sidebar guides to see the **Input Keystroke Help**.\n\nA sample of available commands:\n    - [:code]Ctrl+O[/] to edit the cell in a text editor.\n    - [:code]Tab[/] to finish editing and go to the next cell\n    - [:code]Shift+Tab[/] to finish editing and go to the previous cell\n\nModifying a sheet displays a `[M]` in the lower right status.\n\n## Deferred Sheets\n\nSome sheet types support *deferred* saving. Examples include **SQLiteSheet** and **Dir Sheet**. Changes are colored for [:add_pending]added rows[/], [:delete_pending]deleted rows[/], [:change_pending]modified cells[/].\n\nCommit the sheet to reflect changes on the filesystem.\n\n- {help.commands.commit_sheet}\n\n### Relevant options\n\n- {help.options.quitguard}\n\n- {help.options.color_add_pending}\n- {help.options.color_delete_pending}\n- {help.options.color_change_pending}\n\n"
  },
  {
    "path": "visidata/guides/MovementGuide.md",
    "content": "# Movement and search\n\nFast movement is mostly about a small set of `go-*` and `search-*` commands.\nUse this page as a command map, then use docs/references below for full coverage.\n\n## Cursor and page movement\n\n- {help.commands.go_left}\n- {help.commands.go_down}\n- {help.commands.go_up}\n- {help.commands.go_right}\n\n- {help.commands.go_pagedown}\n- {help.commands.go_pageup}\n- {help.commands.go_pagedown_half}\n- {help.commands.go_pageup_half}\n- {help.commands.go_right_page}\n- {help.commands.go_left_page}\n\n## Sheet edges and direct jumps\n\n- {help.commands.go_top}\n- {help.commands.go_bottom}\n- {help.commands.go_leftmost}\n- {help.commands.go_rightmost}\n\n- {help.commands.go_row_number}\n- {help.commands.go_col_number}\n\n## Jump to next/previous value or selection\n\n- {help.commands.go_prev_value}\n- {help.commands.go_next_value}\n- {help.commands.go_prev_selected}\n- {help.commands.go_next_selected}\n\n- {help.commands.go_prev_null}\n- {help.commands.go_next_null}\n\n## Search motions\n\n- {help.commands.search_col}\n- {help.commands.searchr_col}\n- {help.commands.search_cols}\n- {help.commands.searchr_cols}\n- {help.commands.search_keys}\n- {help.commands.search_next}\n- {help.commands.searchr_next}\n- {help.commands.search_expr}\n- {help.commands.searchr_expr}\n- {help.commands.go_col_regex}\n\n## Full references\n\n- {help.commands.help_commands_all}\n- {help.commands.help_commands}\n- {help.commands.open_guide_index}\n- [:onclick sysopen-help]manpage[/]\n- [:onclick https://visidata.org/docs/]online docs[/]\n- [:onclick https://visidata.org/docs/api/guides]guide reference[/]\n"
  },
  {
    "path": "visidata/guides/PivotGuide.md",
    "content": "---\nsheet: PivotSheet\n---\n# Pivot Tables are just Frequency Tables with more columns\n\nPivot Tables group rows by key columns, summarizing aggregated columns for each distinct value in the current column.\n\nSee the **MeltGuide** to unpivot.\n\n## Create a Pivot Table\n\n1. Set the primary column(s) as *key columns*. The values in this column will appear along the left side as row headings, and will be the values the dataset is grouped by.\n\n- {help.commands.key_col}\n\n2. (OPTIONAL) The default aggregation method for pivot cells is `count`. Add other aggregations to columns before building the pivot table. Each aggregation adds a column for every pivot column. See **Examples** below.\n\nNote: Custom aggregations replace the default `count` aggregation.\n\n- {help.commands.aggregate_col}\n\n3. Move the cursor to the column containing the pivot values to be aggregated for each group.\n\n4. Create the pivot table:\n\n- {help.commands.pivot}\n\n## Pivot Sheet\n\nEach cell in the pivot table, as in a **Frequency Table**, links to the underlying rows. Dive into a row to open a new sheet containing the linked rows.\n\n- {help.commands.open-row}\n\n## Examples\n\nSample input sheet **sales**:\n\n   date        color  price\n   ----------  -----  -----\n   2024-09-01  R      30\n   2024-09-02  B      28\n   2024-09-03  R      100\n   2024-09-03  B      33\n   2024-09-03  B      99\n\n\n1. [:keys]![/] (`key-col`) on the **date** column to set it as a key column.\n2. [:keys]Shift+W[/] (`pivot`) on the **color** column to open a **Pivot Table** grouped by **date**, and summarizing **color**.\n\n   date        R  B\n   ----------  -  -\n   2024-09-01  1  0\n   2024-09-02  0  1\n   2024-09-03  1  2\n\nNote that each cell contains the row count because of the default `count` aggregation.\n\n3. [:keys]q[/] (`quit-sheet`) to return to the original **sales** sheet.\n4. [:keys]#[/] (`type-float`) on the **price** column to set its type to float.\n5. [:keys]+[/] (`aggregate-col`) to add a `sum` aggregate to the **price** column.\n6. [:keys]+[/] (`aggregate-col`) to add an `avg` aggregate to the **price** column.\n7. [:keys]Shift+W[/] (`pivot`) on the **color** column to create the **PivotSheet**.\n\nThis generates each aggregation for all of the pivot columns. As mentioned above, any custom aggregations replace the default `count` aggregation:\n\n\n   date        sum_R   avg_R   sum_B   avg_B\n   ----------  ------  ------  ------  -----\n   2024-09-01   30.00   30.00    0.00\n   2024-09-02    0.00           28.00  28.00\n   2024-09-03  100.00  100.00  132.00  66.00\n"
  },
  {
    "path": "visidata/guides/RegexGuide.md",
    "content": "---\nsheet: Sheet\n---\n# Matching and Transforming Strings with Regex\n\nSome commands for selecting, searching, and transforming data, accept a regular expression as input.\n\n## Select Rows\n\n- {help.commands.select-col-regex}\n- {help.commands.select-cols-regex}\n\n- {help.commands.unselect-col-regex}\n- {help.commands.unselect-cols-regex}\n\n## Search\n\n- {help.commands.go-col-regex}\n\n- {help.commands.search-col}\n- {help.commands.search-cols}\n\n- {help.commands.searchr-col}\n- {help.commands.searchr-cols}\n\n- {help.commands.search-next}\n- {help.commands.searchr-next}\n\n- {help.commands.search-keys}\n\n## Substitution\n\n- {help.commands.setcol-regex-subst}\n- {help.commands.setcol-regex-subst-all}\n\n`Tab` to move between `search` and `replace` inputs.\nAn empty `replace` removes the matching string.\n\n# Column Creation\n\n- {help.commands.addcol-regex-subst}\n- {help.commands.addcol-split}\n- {help.commands.addcol-capture}\n\n## Examples\n\n### Split\n\nSample input sheet **sales**:\n\n    date        price\n    ----------  -----\n    2024-09-01  30\n    2024-09-02  28\n    2024-09-03  100\n\n1. [:code]:[/] (`addcol-split`) on **date** column, followed by `-` to split on hyphens.\n\n    date        date_re             price\n    ----------  ----------------    -----\n    2024-09-01  [3] 2024; 09; 01    30\n    2024-09-02  [3] 2024; 09; 02    28\n    2024-09-03  [3] 2024; 09; 03    100\n\nNote that the results in the `date_re` column are lists of length 3.\n\n2. [:code]([/] (`expand-col`) to expand a column with lists into multiple columns with the list elements.\n\n    date        date_re[0]  date_re[1]  date_re[2]  price\n    ----------  ----------  ----------  ----------  -----\n    2024-09-01  2024        09          01          30\n    2024-09-02  2024        09          02          28\n    2024-09-03  2024        09          03          100\n\n### Substitution\n\n1. On the **date** column, [:code]*[/] (`addcol-regex-subst`) and type `-`, then `Tab` to \"replace\" and type `,`.  Then `Enter` to replace all `-` with `,`.\n\n    date        date_re     price\n    ----------  ----------  -----\n    2024-09-01  2024,09,01  30\n    2024-09-02  2024,09,02  28\n    2024-09-03  2024,09,03  100\n\n### Capture\n\n1. On the **date** column, [:code];[/] (`addcol-capture`) and type `(\\d\\d\\d\\d)` to capture and pull out the year.\n\n    date        date_re     price\n    ----------  --------    -----\n    2024-09-01  [1] 2024    30\n    2024-09-02  [1] 2024    28\n    2024-09-03  [1] 2024    100\n\nNote that the results in the `date_re` column are lists of length 1.\n\n2. [:code]([/] (`expand-col`) to expand a column with lists into multiple columns with the list elements.\n\n    date        date_re[0]  price\n    ----------  ----------  -----\n    2024-09-01  2024        30\n    2024-09-02  2024        28\n    2024-09-03  2024        100\n\n#### Options\n\n- {help.options.regex_maxsplit}\n"
  },
  {
    "path": "visidata/guides/SelectionGuide.md",
    "content": "# Selecting and filtering\n\nSome commands operate only on \"selected rows\".  For instance, a common command to filter is {help.commands.dup_selected}.\n\nMany g-prefixed commands are like this. For example, use {help.commands.edit_cell}, but use {help.commands.setcol_input}.  Search for \"selected rows\" in the [:onclick help-commands-all]commands list[/] or the [:onclick sysopen-help]manpage[/] for a full list.\n\nRows on the **Frequency Table** or **Pivot Table** reference a group of rows from the source sheet.  Selecting a row on those sheets also selects the referenced rows on the underlying source sheet.\n\nSelect and unselect rows with these commands:\n\n## One row at a time\n\n- {help.commands.select_row}\n- {help.commands.unselect_row}\n- {help.commands.stoggle_row}\n\n## All rows at the same time\n\n- {help.commands.select_rows}\n- {help.commands.unselect_rows}\n- {help.commands.stoggle_rows}\n\n## By matching patterns\n\n- {help.commands.select_col_regex}\n- {help.commands.unselect_col_regex}\n- {help.commands.select_cols_regex}\n- {help.commands.unselect_cols_regex}\n\n- {help.commands.select_equal_cell}\n- {help.commands.select_equal_row}\n\n## Select by Python expression\n\nPython expressions can use a column value by the column name, if the\ncolumn name is a valid Python identifier (with only letters, digits, and underscores).\n\n- {help.commands.select_expr}\n- {help.commands.unselect_expr}\n\n## Options\n\n- {help.options.bulk_select_clear}\n- {help.options.some_selected_rows}\n"
  },
  {
    "path": "visidata/guides/SlideGuide.md",
    "content": "# The Slide Guide\n\nThe key bindings are based on the vi movement keys (hjkl).\n\n## How to move columns\n\n- {help.commands.slide_left}\n- {help.commands.slide_right}\n\n- {help.commands.slide_leftmost}\n- {help.commands.slide_rightmost}\n\n- {help.commands.slide_left_n}\n- {help.commands.slide_right_n}\n\n## How to move rows\n\n- {help.commands.slide_down}\n- {help.commands.slide_up}\n\n- {help.commands.slide_bottom}\n- {help.commands.slide_top}\n\n- {help.commands.slide_down_n}\n- {help.commands.slide_up_n}\n\n"
  },
  {
    "path": "visidata/guides/SortGuide.md",
    "content": "# Sorting\n\n## Column types matter\n\nSorting uses typed values.\nSet column types (with `#` for int, `%` for float, `@` for date, etc.) to sort numerically or chronologically instead of lexicographically.\n\n## Viewing the sort order\n\nOpen {help.commands.columns_sheet} and check the **sortorder** column.\nPositive values indicate ascending order; negative values indicate descending.\nThe absolute value is the sort priority (1 = highest).\n\n## Sort by one column\n\nSort all rows by the current column, replacing any existing sort criteria.\n\n- {help.commands.sort_asc}\n- {help.commands.sort_desc}\n\n## Sort by key columns\n\nSort by all key columns at once, replacing any existing sort criteria.\n\n- {help.commands.sort_keys_asc}\n- {help.commands.sort_keys_desc}\n\n## Multi-column sort\n\nSort by multiple columns in priority order.\nFirst sort by the most important column, then add secondary sort columns.\n\n- {help.commands.sort_asc_add}\n- {help.commands.sort_desc_add}\n- {help.commands.sort_keys_asc_add}\n- {help.commands.sort_keys_desc_add}\n\n## Editing the sort order\n\nToggle a single column in the sort order: add it, remove it, or flip its direction.\nHigher-priority sort columns are unchanged; lower-priority columns are removed.\n\n- {help.commands.sort_asc_change}\n- {help.commands.sort_desc_change}\n"
  },
  {
    "path": "visidata/guides/SplitpaneGuide.md",
    "content": "# Split VisiData into two panes\n\nUse split panes to view two sheets at once.\n\n## Open and Close a new split\n\n- {help.commands.splitwin_half}\n- {help.commands.splitwin_close}\n- {help.commands.splitwin_input}\n\n## Modify the split plane view\n\n- {help.commands.splitwin_swap}\n- Additionally, click on the inactive pane with the mouse to jump to it.\n- {help.commands.splitwin_swap_pane}\n"
  },
  {
    "path": "visidata/guides/TypesSheet.md",
    "content": "# Types\n\nColumns usually begin as untyped (`anytype`), but can be set to specific types.\n\n- {help.commands.type-any}\n- {help.commands.type-currency}\n- {help.commands.type-date}\n- {help.commands.type-float}\n- {help.commands.type-int}\n- {help.commands.type-len}\n- {help.commands.type-string}\n\n## Type formatting\n\nVisiData pre-set defaults for formatting types:\n\n- `currency` removes non-numeric characters and parses the remainder as `float`.\n- `date` parses dates into date object (shown as ISO8601).\n- `vlen` formats the cell value to the length of the content\n- `float` uses the decimal separator, keeping two significant digits.\n\nChange float precision with:\n- {help.commands.setcol-precision-less}\n- {help.commands.setcol-precision-more}\n\nTo change the default fmtstr for a type:\n\n- {help.options.disp_currency_fmt}\n- {help.options.color_currency_neg}\n- {help.options.disp_date_fmt}\n- {help.options.disp_float_fmt}\n- {help.options.disp_int_fmt}\n\n\n## Importance of typing\n\nCertain commands behave differently depending on how the column is typed.\n\nGrouping by a numeric column in a Frequency table can result in numeric range binning. Grouping by a string results in categorical binning.\n\nUn-typed columns (`anytype`) often default to `string`-like behaviour. Errors when working with numerical or datetime data is often due to values being considered as strings.\n\nFor example. [:code]addcol-expr col1+col2[/] results in a concatenation of the two columns when they are `anytype`, and addition when they are numerical.\n"
  },
  {
    "path": "visidata/guides/WindowFunctionGuide.md",
    "content": "---\nsheet: Sheet\n---\n# Create a window over consecutive rows\n\nWindow functions enable computations that relate the current window to surrounding rows, like cumulative sum, rolling averages or lead/lag computations.\n\n{help.commands.addcol-window}\n\nWith large window sizes, [:code]g'[/] (`freeze-sheet`) to calculate all cells and copy the entire sheet into a new source sheet, which will conserve CPU.\n\n## Examples\n\n   date        color  price\n   ----------  -----  -----\n   2024-09-01  R      30\n   2024-09-02  B      28\n   2024-09-03  R      100\n   2024-09-03  B      33\n   2024-09-03  B      99\n\n\n1. [:keys]#[/] (`type-int`) on the **price** column to type as int.\n2. [:keys]w[/] (`addcol-window`) on the **price** column, followed by `1 2`, to create a window consisting of 4 rows: 1 row before the current row, and 2 rows after.\n3. To create a moving average of the values in the window, add a new column with a python expression: [:keys]=[/] (`addcol-expr`)\nfollowed by `sum(price_window)/len(price_window)`\n\ndate            color   price   price_window            sum(price_window)/len(price_window)\n----------      -----   -----   -------------------     -----------------------------------\n2024-09-01      R       38      [4] ; 38; 28; 100       41.5\n2024-09-02      B       28      [4] 38; 28; 100; 33     49.75\n2024-09-03      R       100     [4] 28; 100; 33; 99     65.0\n2024-09-03      B       33      [4] 100; 33; 99;        58.0\n2024-09-03      B       99      [4] 33; 99; ;           33.0\n\n\n## Workflows\n\n### Create a cumulative sum \n\n1. Set the before window size to the total number of rows in the table, and the after rows to 0. In the above example that would be `w 5 0` (`addcol-window`).\n2. Add an expression ([:keys]=[/] (`addcol-expr`) of `sum(window)` where `window` is the name of the window function column.\n\n### Compute the change between rows\n\n1. `w 1 0` on the `foo` column to create a window function of size 1 before and 0 after.\n2. Add a python expression. The window function column is 'foo_window':\n    `=foo_window[1] - foo_window[0] if len(foo_window) > 1 else None`\n\n"
  },
  {
    "path": "visidata/guides/XsvGuide.md",
    "content": "CSV/TSV options\n\n## `tsv` (Tab Separated Values), as simple as it gets\n\n- {help.options.delimiter}\n- {help.options.row_delimiter}\n- {help.options.tsv_safe_newline}\n- {help.options.tsv_safe_tab}\n\nUse `-f usv` for Unicode separators U+241F and U+241E.\nUse `-f lsv` for awk-like records.\nUse `--delimiter=` (an empty string) to make '\\0' the value separator.\nUse `--row-delimiter=` to make '\\0' the row separator.\n\n## `csv` (Comma Separated Values) for maximum computibility\n\n.csv files are a scourge upon the earth, and still regrettably common.\nAll csv_* options are passed unchanged into csv.reader() and csv.writer().\n\n- {help.options.csv_dialect}\n   - Accepted dialects are `excel-tab`, `unix`, and `excel`.\n- {help.options.csv_delimiter}\n- {help.options.csv_quotechar}\n- {help.options.csv_skipinitialspace}\n- {help.options.csv_escapechar}\n- {help.options.csv_lineterminator}\n\n## Saving TSV/CSV files\n\n- {help.options.save_filetype}\n- {help.options.safety_first}\n\n## Useful options for text formats in general\n\n- {help.options.regex_skip}\n- {help.options.save_encoding}\n"
  },
  {
    "path": "visidata/help.py",
    "content": "import functools\nimport collections\n\nfrom visidata import VisiData, MetaSheet, ColumnAttr, Column, BaseSheet, VisiDataMetaSheet, SuspendCurses, ColorAttr\nfrom visidata import vd, asyncthread, drawcache, AttrDict, TextSheet\n\n\nvd.option('disp_help_flags', 'cmdpalette guides help hints inputfield inputkeys nometacols sidebar',\n    '''list of helper features to enable (space-separated):\n    - \"cmdpalette\": exec-longname suggestions\n    - \"guides\": guides in sidebar\n    - \"help\": help sidebar collapsed by default\n    - \"hints\": context-sensitive hints on menu line\n    - \"inputfield\": context-sensitive help for each input field\n    - \"inputkeys\": input quick reference in sidebar\n    - \"nometacols\": hide expert columns on metasheets\n    - \"sidebar\": context-sensitive sheet help in sidebar\n    - \"all\": enable all helper features''')\n\n\n@VisiData.api\ndef wantsHelp(vd, feat):\n    return feat in vd.options.disp_help_flags or 'all' in vd.options.disp_help_flags\n\n\n@BaseSheet.api\ndef hint_basichelp(sheet):\n    return 0, 'Alt+H to open the [:underline]H[/]elp menu'\n\n\n@VisiData.api\ndef iterMenuPaths(vd, item=None, menupath=[]):\n    'Generate (longname, menupath).'\n    if item is None:\n        item = vd.menus\n\n    if isinstance(item, (list, tuple)):\n        for m in item:\n            yield from vd.iterMenuPaths(m, menupath)\n    elif item.longname:\n        yield item.longname, ' > '.join(menupath+[item.title])\n    else:\n        yield from vd.iterMenuPaths(item.menus, menupath+[item.title])\n\n\n@VisiData.property\n@drawcache\ndef menuPathsByLongname(vd):\n    return dict(vd.iterMenuPaths())\n\n\n@VisiData.api\nclass HelpSheet(MetaSheet):\n    'Show all commands available to the source sheet.'\n    rowtype = 'commands'\n    precious = False\n    _ordering = [('sheet', False), ('longname', False)]\n\n    columns = [\n        ColumnAttr('sheet'),\n        ColumnAttr('module'),\n        ColumnAttr('longname'),\n        Column('menupath', width=0, cache=True, getter=lambda col,row: vd.menuPathsByLongname.get(row.longname, None)),\n        Column('keystrokes', getter=lambda col,row: col.sheet.revbinds.get(row.longname, [None])[0]),\n        Column('all_bindings', width=0, cache=True, getter=lambda col,row: list(set(col.sheet.revbinds.get(row.longname, [])))),\n        Column('description', width=70, getter=lambda col,row: col.sheet.cmddict[(row.sheet, row.longname)].helpstr),\n        ColumnAttr('execstr', width=0),\n        Column('logged', width=0, getter=lambda col,row: vd.isLoggableCommand(row)),\n    ]\n    nKeys = 2\n\n    def iterload(self):\n        cmdlist = VisiDataMetaSheet('cmdlist', source=None)\n\n        self.cmddict = {}\n        if self.source:\n            itcmds = vd.commands.iter(obj=self.source)\n        else:\n            itcmds = vd.commands.iterall()\n\n        for (k, o), v in itcmds:\n            yield v\n            v.sheet = o\n            self.cmddict[(v.sheet, v.longname)] = v\n\n        for cmdrow in cmdlist.rows:\n            k = (cmdrow.sheet, cmdrow.longname)\n            if k in self.cmddict:\n                self.cmddict[k].helpstr = cmdrow.helpstr\n\n    @BaseSheet.lazy_property\n    def revbinds(self):\n        revbinds = collections.defaultdict(list)  # longname -> [keystrokes, ..]\n        itbindings = vd.bindkeys.iterall()\n        for (keystrokes, _), longname in itbindings:\n            revbinds[longname].append(keystrokes)\n\n        return revbinds\n\n\nclass HelpPane:\n    def __init__(self, name):\n        import visidata\n        self.name = name\n        self.scr = None\n        self.parentscr = None\n        self.amgr = visidata.AnimationMgr()\n\n    @property\n    def width(self):\n        return self.amgr.maxWidth\n\n    @property\n    def height(self):\n        return self.amgr.maxHeight\n\n    def draw(self, scr, x=None, y=None, **kwargs):\n        if not scr: return\n#        if not vd.wantsHelp('statushelp'):\n#            if self.scr:\n#                self.scr.erase()\n#                self.scr.refresh()\n#                self.scr = None\n#            return\n\n        if y is None: y=0  # show at top of screen by default\n        if x is None: x=0\n        hneeded = self.amgr.maxHeight+3\n        wneeded = self.amgr.maxWidth+4\n        scrh, scrw = scr.getmaxyx()\n        if not self.scr or scr is not self.parentscr:  # (re)allocate help pane scr\n            if y >= 0:\n                if y+hneeded < scrh:\n                    yhelp = y+1\n                else:\n                    hneeded = max(0, min(hneeded, y-1))\n                    yhelp = y-hneeded\n            else:  # y<0\n                yhelp = max(0, scrh-hneeded-1)\n\n            if x >= 0:\n                if x+wneeded < scrw:\n                    xhelp = x+1\n                else:\n                    wneeded = max(0, min(wneeded, x-1))\n                    xhelp = x-wneeded\n            else:  # x<0\n                xhelp = max(0, scrh-wneeded-1)\n\n            self.scr = vd.subwindow(scr, xhelp, yhelp, wneeded, hneeded)\n            self.parentscr = scr\n\n        self.scr.erase()\n        cattr = kwargs.get('attr', ColorAttr())\n        h_box, w_box = self.scr.getmaxyx()\n        vd.drawBox(self.scr, 0, 0, w_box, h_box, cattr)\n        self.amgr.draw(self.scr, y=1, x=2, **kwargs)\n        self.scr.noutrefresh()\n\n\n@VisiData.api\n@functools.lru_cache(maxsize=None)\ndef getHelpPane(vd, name, module='visidata') -> HelpPane:\n    ret = HelpPane(name)\n    try:\n        ret.amgr.load(name, (vd.pkg_resources_files(module)/f'ddw/{name}.ddw').open(encoding='utf-8'))\n        ret.amgr.trigger(name, loop=True)\n    except FileNotFoundError as e:\n        vd.debug(str(e))\n    except ModuleNotFoundError as e:\n        vd.debug(str(e))\n    except KeyError as e:\n        vd.debug(str(e))\n    return ret\n\n\n@VisiData.api\ndef openManPage(vd):\n    import os\n    with SuspendCurses():\n        module_path = vd.pkg_resources_files(__name__.split('.')[0])\n        if os.system(' '.join(['man', str(module_path/'man/vd.1')])) != 0:\n            vd.push(TextSheet('man_vd', source=module_path/'man/vd.txt'))\n\n\n# in VisiData, gCtrl+H refers to the man page\nBaseSheet.addCommand('gCtrl+H', 'sysopen-help', 'openManPage()', 'Show the UNIX man page for VisiData')\nBaseSheet.addCommand('zCtrl+H', 'help-commands', 'vd.push(HelpSheet(name + \"_commands\", source=sheet, revbinds={}))', 'list commands and keybindings available on current sheet')\nBaseSheet.addCommand('gzCtrl+H', 'help-commands-all', 'vd.push(HelpSheet(\"all_commands\", source=None, revbinds={}))', 'list commands and keybindings for all sheet types')\n\nBaseSheet.bindkey('F1', 'sysopen-help')\nBaseSheet.bindkey('zF1', 'help-commands')\nBaseSheet.bindkey('zBksp', 'help-commands')\nBaseSheet.bindkey('gBksp', 'sysopen-help')\n\nHelpSheet.addCommand(None, 'exec-command', 'quit(sheet); draw_all(); activeStack[0].execCommand(cursorRow.longname)', 'execute command on undersheet')\nBaseSheet.addCommand(None, 'open-tutorial-visidata', 'launchBrowser(\"https://jsvine.github.io/intro-to-visidata/\")', 'open https://jsvine.github.io/intro-to-visidata/')\n\n\nvd.addGlobals(HelpSheet=HelpSheet)\n\nvd.addMenuItems('''\n    Help > VisiData tutorial > open-tutorial-visidata\n    Help > All commands > help-commands-all\n    Help > Quick reference > sysopen-help\n    Help > Command list > help-commands\n''')\n"
  },
  {
    "path": "visidata/hint.py",
    "content": "import collections\n\nfrom visidata import vd, BaseSheet\n\n\n@BaseSheet.lazy_property\ndef prevHints(sheet):\n    return collections.defaultdict(int)\n\n\n@BaseSheet.api\ndef getHint(sheet, *args, **kwargs) -> str:\n    funcs = [getattr(sheet, x) for x in dir(sheet) if x.startswith('hint_')]\n    results = []\n    hints = sheet.prevHints\n    for f in funcs:\n        try:\n            r = f(*args, **kwargs)\n            if r:\n                if isinstance(r, dict):\n                    n = r.get('_relevance', 1)\n                    v = r\n                elif isinstance(r, tuple):\n                    n, v = r\n                else:\n                    n = 1\n                    v = r\n\n                results.append((n, v))\n                if v not in sheet.prevHints:\n                    sheet.prevHints[v] += 1\n        except Exception as e:\n            vd.debug(f'{f.__name__}: {e}')\n\n    if results:\n        return sorted(results, reverse=True)[0][1]\n\n    return ''\n\nvd.addCommand('', 'help-hint', 'status(getHint() or pressMenu(\"Help\"))', 'get context-dependent hint on what to do next')\n"
  },
  {
    "path": "visidata/indexsheet.py",
    "content": "from visidata import vd, VisiData, BaseSheet, Sheet, Column, AttrColumn, ItemColumn, setitem, asyncthread\n\n\nclass IndexSheet(Sheet):\n    'Base class for tabular sheets with rows that are Sheets.'\n    guide = '''\n    # Index Sheet\n    This is a list of sheets from `{sheet.source}`.\n\n    - `Enter` to open {sheet.cursorRow}\n    - `g Enter` to open all selected sheets\n    '''\n    rowtype = 'sheets'  # rowdef: Sheet\n\n    columns = [\n        Column('name', getter=lambda c,r: r.names[-1], setter=lambda c,r,v: setitem(r.names, -1, v)),\n        AttrColumn('rows', 'nRows', type=int, width=9),\n        AttrColumn('cols', 'nCols', type=int),\n        AttrColumn('keys', 'keyColNames'),\n        AttrColumn('source'),\n    ]\n    nKeys = 1\n\n    def newRow(self):\n        return Sheet('', columns=[ItemColumn('', 0)], rows=[])\n\n    def openRow(self, row):\n        return row  # rowdef is Sheet\n\n    def getSheet(self, k):\n        for vs in self.rows:\n            if vs.name == k:\n                return vs\n\n    def addRow(self, sheet, **kwargs):\n        super().addRow(sheet, **kwargs)\n        if not self.options.load_lazy and not sheet.options.load_lazy:\n            sheet.ensureLoaded()\n\n    @asyncthread\n    def reloadSheets(self, sheets):\n        for vs in vd.Progress(sheets):\n            vs.reload()\n\n\nclass SheetsSheet(IndexSheet):\n    columns = [\n        AttrColumn('name'),\n        AttrColumn('type', '__class__.__name__'),\n        AttrColumn('pane', type=int),\n        Column('shortcut', getter=lambda c,r: getattr(r, 'shortcut'), setter=lambda c,r,v: setattr(r, '_shortcut', v)),\n        AttrColumn('nRows', type=int),\n        AttrColumn('nCols', type=int),\n        AttrColumn('nVisibleCols', type=int),\n        AttrColumn('cursorDisplay'),\n        AttrColumn('keyColNames'),\n        AttrColumn('source'),\n        AttrColumn('progressPct'),\n#        AttrColumn('threads', 'currentThreads', type=vlen),\n    ]\n    precious = False\n    nKeys = 1\n    def reload(self):\n        self.rows = self.source\n\n    def sort(self):\n        self.rows[1:] = sorted(self.rows[1:], key=self.sortkey)\n\n\nclass GlobalSheetsSheet(SheetsSheet):  #1620\n    def sort(self):\n        IndexSheet.sort(self)\n\n\n@VisiData.lazy_property\ndef sheetsSheet(vd):\n    return SheetsSheet(\"sheets\", source=vd.sheets)\n\n\n@VisiData.lazy_property\ndef allSheetsSheet(vd):\n    return GlobalSheetsSheet(\"sheets_all\", source=vd.allSheets)\n\n\n\n@Sheet.api\ndef nextRow(sheet, n=1):\n    sheet.cursorRowIndex += n\n    sheet.checkCursor()\n    return sheet.rows[sheet.cursorRowIndex]  # cursorRow itself might be cached\n\n\nvd.addCommand('S', 'sheets-stack', 'vd.push(vd.sheetsSheet)', 'open Sheets Stack: join or jump between the active sheets on the current stack')\nvd.addCommand('gS', 'sheets-all', 'vd.allSheetsSheet.reload(); vd.push(vd.allSheetsSheet)', 'open Sheets Sheet: join or jump between all sheets from current session')\n\nBaseSheet.addCommand('g>', 'open-source-next', 'vd.replace(openSource(source.nextRow())) if isinstance(source, IndexSheet) else fail(\"parent sheet must be Index Sheet\")', 'open next sheet on parent index sheet')\nBaseSheet.addCommand('g<', 'open-source-prev', 'vd.replace(openSource(source.nextRow(-1))) if isinstance(source, IndexSheet) else fail(\"parent sheet must be Index Sheet\")', 'open prev sheet on parent index sheet')\n\nIndexSheet.addCommand('gCtrl+R', 'reload-selected', 'reloadSheets(selectedRows or rows)', 'reload all selected sheets')\n\n# when diving into a sheet, remove the index unless it is precious\nIndexSheet.addCommand('gC', 'columns-selected', 'vd.push(ColumnsSheet(\"all_columns\", source=selectedRows))', 'open Columns Sheet with all visible columns from selected sheets')\nIndexSheet.addCommand('zCtrl+C', 'cancel-row', 'cancelThread(*cursorRow.currentThreads)', 'abort async thread for current sheet')\nIndexSheet.addCommand('gzCtrl+C', 'cancel-rows', 'for vs in selectedRows: cancelThread(*vs.currentThreads)', 'abort async threads for selected sheets')\nSheetsSheet.addCommand('Enter', 'open-row', 'dest=cursorRow; vd.sheets.remove(sheet) if not sheet.precious else None; vd.push(openRow(dest))', 'open sheet referenced in current row')\n\nvd.addGlobals(IndexSheet=IndexSheet,\n              SheetsSheet=SheetsSheet,\n              GlobalSheetsSheet=GlobalSheetsSheet)\n"
  },
  {
    "path": "visidata/input_history.py",
    "content": "from visidata import vd, VisiData, Sheet, ItemColumn, asyncthread\n\n\nvd._inputHistoryList = vd.StoredList(name='input_history')\nvd.inputHistory = {}   # [input_type][input] -> anything\n\n\n@VisiData.api\ndef addInputHistory(vd, input:str, type:str=''):\n    r = vd.processInputHistory(input, type)\n    if r:\n        vd._inputHistoryList.append(r)\n\n\n@VisiData.api\ndef processInputHistory(vd, input:str, type:str=''):\n    hist = list(vd.inputHistory.setdefault(type, {}).keys())\n    if hist and hist[-1] == input:\n        return\n    if input in vd.inputHistory[type]:\n        n = vd.inputHistory[type][input].get('n', 0)\n        del vd.inputHistory[type][input]  # make it the most recent entry\n    else:\n        n = 0\n\n    r = dict(type=type, input=input, n=n+1)\n    vd.inputHistory[type][input] = r\n    return r\n\n\nclass InputHistorySheet(Sheet):\n    # rowdef: dict(type=, input=, n=)\n    # .source=vd.inputHistory\n    columns = [\n        ItemColumn('type'),\n        ItemColumn('input'),\n    ]\n    def iterload(self):\n        yield from vd._inputHistoryList\n\n\n@VisiData.before\n@asyncthread\ndef run(vd, *args, **kwargs):\n    vd._inputHistoryList.reload()\n    for x in vd._inputHistoryList:\n        vd.processInputHistory(x.input, x.type)\n\n\n@VisiData.property\ndef inputHistorySheet(vd):\n    return InputHistorySheet('input_history', source=vd._inputHistoryList.path)\n\n\nvd.addCommand(None, 'open-input-history', 'vd.push(inputHistorySheet)', 'open sheet with previous inputs')\n"
  },
  {
    "path": "visidata/interface.py",
    "content": "from visidata import VisiData, vd\n\nvd.theme_option('disp_splitwin_pct', 0, 'height of second sheet on screen')\nvd.theme_option('disp_note_none', '⌀',  'visible contents of a cell whose value is None')\nvd.theme_option('disp_truncator', '…', 'indicator that the contents are only partially visible')\nvd.theme_option('disp_oddspace', '\\u00b7', 'displayable character for odd whitespace')\nvd.theme_option('disp_more_left', '<', 'header note indicating more columns to the left')\nvd.theme_option('disp_more_right', '>', 'header note indicating more columns to the right')\nvd.theme_option('disp_error_val', '', 'displayed contents for computation exception')\nvd.theme_option('disp_ambig_width', 1, 'width to use for unicode chars marked ambiguous')\n\nvd.theme_option('disp_pending', '', 'string to display in pending cells')\nvd.theme_option('disp_note_pending', ':', 'note to display for pending cells')\nvd.theme_option('disp_note_fmtexc', '?', 'cell note for an exception during formatting')\nvd.theme_option('disp_note_getexc', '!', 'cell note for an exception during computation')\nvd.theme_option('disp_note_typeexc', '!', 'cell note for an exception during type conversion')\n\nvd.theme_option('color_note_pending', 'bold green', 'color of note in pending cells')\nvd.theme_option('color_note_type', '226 yellow', 'color of cell note for non-str types in anytype columns')\nvd.theme_option('color_note_row', '220 yellow', 'color of row note on left edge')\nvd.option('scroll_incr', -3, 'amount to scroll with scrollwheel')\nvd.theme_option('disp_column_sep', '│', 'separator between columns')\nvd.theme_option('disp_keycol_sep', '║', 'separator between key columns and rest of columns')\nvd.theme_option('disp_rowtop_sep', '│', '') # ╷│┬╽⌜⌐▇\nvd.theme_option('disp_rowmid_sep', '⁝', '') # ┃┊│█\nvd.theme_option('disp_rowbot_sep', '⁝', '') # ┊┴╿⌞█⍿╵⎢┴⌊  ⋮⁝\nvd.theme_option('disp_rowend_sep', '║', '') # ┊┴╿⌞█⍿╵⎢┴⌊\nvd.theme_option('disp_keytop_sep', '║', '') # ╽╿┃╖╟\nvd.theme_option('disp_keymid_sep', '║', '') # ╽╿┃\nvd.theme_option('disp_keybot_sep', '║', '') # ╽╿┃╜‖\nvd.theme_option('disp_endtop_sep', '║', '') # ╽╿┃╖╢\nvd.theme_option('disp_endmid_sep', '║', '') # ╽╿┃\nvd.theme_option('disp_endbot_sep', '║', '') # ╽╿┃╜‖\nvd.theme_option('disp_selected_note', '•', '') #\nvd.theme_option('disp_sort_asc', '↑↟⇞⇡⇧⇑', 'characters for ascending sort') # ↑▲↟↥↾↿⇞⇡⇧⇈⤉⤒⥔⥘⥜⥠⍏˄ˆ\nvd.theme_option('disp_sort_desc', '↓↡⇟⇣⇩⇓', 'characters for descending sort') # ↓▼↡↧⇂⇃⇟⇣⇩⇊⤈⤓⥕⥙⥝⥡⍖˅ˇ\nvd.theme_option('color_default', 'white on black', 'the default fg and bg colors')\nvd.theme_option('color_default_hdr', 'bold white on black', 'color of the column headers')\nvd.theme_option('color_bottom_hdr', 'underline white on black', 'color of the bottom header row')\nvd.theme_option('color_current_row', 'reverse', 'color of the cursor row')\nvd.theme_option('color_current_col', 'bold on 232', 'color of the cursor column')\nvd.theme_option('color_current_cell', '', 'color of current cell, if different from color_current_row+color_current_col')\nvd.theme_option('color_current_hdr', 'bold reverse', 'color of the header for the cursor column')\nvd.theme_option('color_column_sep', 'white on black', 'color of column separators')\nvd.theme_option('color_key_col', '81 cyan', 'color of key columns')\nvd.theme_option('color_hidden_col', '8', 'color of hidden columns on metasheets')\nvd.theme_option('color_selected_row', '215 yellow', 'color of selected rows')\nvd.theme_option('color_clickable', 'bold', 'color of internally clickable item')\nvd.theme_option('color_code', 'bold white on 237', 'color of code sample')\nvd.theme_option('color_heading', 'bold black on yellow', 'color of header')\nvd.theme_option('color_guide_unwritten', '243 on black', 'color of unwritten guides in GuideGuide')\n\nvd.theme_option('force_256_colors', False, 'use 256 colors even if curses reports fewer')\n\nvd.option('quitguard', False, 'confirm before quitting modified sheet')\nvd.option('default_width', 20, 'default column width', replay=True)   # TODO: make not replay and remove from markdown saver\nvd.option('default_height', 4, 'default column height')\n"
  },
  {
    "path": "visidata/keys.py",
    "content": "import string\nimport visidata\n\n\nvisidata.vd.prettykeys_trdict = {\n        ' ': 'Space',  # must be first\n        '^[': 'Alt+',\n        '^J': 'Enter',\n        '^M': 'Enter',\n        '^I': 'Tab',\n        'KEY_BTAB': 'Shift+Tab',\n        '^@': 'Ctrl+Space',\n        'KEY_UP':    'Up',\n        'KEY_DOWN':  'Down',\n        'KEY_LEFT':  'Left',\n        'KEY_RIGHT': 'Right',\n        'KEY_HOME':  'Home',\n        'KEY_END':   'End',\n        'KEY_EOL':   'End',\n        'KEY_PPAGE': 'PgUp',\n        'KEY_NPAGE': 'PgDn',\n\n        'kUP5':      'Ctrl+Up',\n        'kDN5':      'Ctrl+Down',\n        'kLFT5':     'Ctrl+Left',\n        'kRIT5':     'Ctrl+Right',\n        'kHOM5':     'Ctrl+Home',\n        'kEND5':     'Ctrl+End',\n        'kPRV5':     'Ctrl+PgUp',\n        'kNXT5':     'Ctrl+PgDn',\n        'KEY_IC5':   'Ctrl+Ins',\n        'KEY_DC5':   'Ctrl+Del',\n        'kDC5':      'Ctrl+Del',\n        'kDC3':      'Ctrl+Del',\n        'KEY_SDC':   'Shift+Del',\n\n        'kDC4':      'Alt+Shift+Del',\n        'kIC4':      'Alt+Shift+Ins',\n        'kUP4':      'Alt+Shift+Up',\n        'kDN4':      'Alt+Shift+Down',\n        'kHOM4':     'Alt+Shift+Home',\n        'kEND4':     'Alt+Shift+End',\n        'kRIT4':     'Alt+Shift+Right',\n        'kLFT4':     'Alt+Shift+Left',\n        'kPRV4':     'Alt+Shift+PgUp',\n        'kNXT4':     'Alt+Shift+PgDn',\n        'kBEG4':     'Alt+Shift+Begin',\n\n        'kBEG3':     'Alt+Begin',\n        'kIC3':      'Alt+Ins',\n        'kHOM3':     'Alt+Home',\n        'kEND3':     'Alt+End',\n        'kNXT3':     'Alt+PgDn',\n        'kPRV3':     'Alt+PgUp',\n        'kLFT3':     'Alt+Left',\n        'kRIT3':     'Alt+Right',\n        'kUP3':      'Alt+Up',\n        'kDN3':      'Alt+Down',\n\n        'KEY_IC':    'Ins',\n        'KEY_DC':    'Del',\n\n        'kBEG6':     'Ctrl+Shift+Begin',\n        'kRIT6':     'Ctrl+Shift+Right',\n        'kLFT6':     'Ctrl+Shift+Left',\n        'kHOM6':     'Ctrl+Shift+Home',\n        'kEND6':     'Ctrl+Shift+End',\n        'kPRV6':     'Ctrl+Shift+PgUp',\n        'kNXT6':     'Ctrl+Shift+PgDn',\n        'kIC6':      'Ctrl+Shift+Ins',\n        'kDC6':      'Ctrl+Shift+Del',\n        'kUP6':      'Ctrl+Shift+Up',\n        'kDN6':      'Ctrl+Shift+Down',\n        'kUP':       'Shift+Up',\n        'kDN':       'Shift+Down',\n        'KEY_SRIGHT':'Shift+Right',\n        'KEY_SR':    'Shift+Up',\n        'KEY_SF':    'Shift+Down',\n        'KEY_SLEFT': 'Shift+Left',\n        'KEY_SHOME': 'Shift+Home',\n        'KEY_SEND':  'Shift+End',\n        'KEY_SPREVIOUS': 'Shift+PgUp',\n        'KEY_SNEXT': 'Shift+PgDn',\n        'kBEG':      'Begin',\n\n        'kxIN': 'FocusIn',\n        'kxOUT': 'FocusOut',\n\n        'KEY_BACKSPACE': 'Bksp',\n        '263': 'Bksp',\n        'BUTTON1_RELEASED': 'LeftBtnUp',\n        'BUTTON2_RELEASED': 'MiddleBtnUp',\n        'BUTTON3_RELEASED': 'RightBtnUp',\n        'BUTTON1_PRESSED': 'LeftClick',\n        'BUTTON2_PRESSED': 'MiddleClick',\n        'BUTTON3_PRESSED': 'RightClick',\n        'BUTTON4_PRESSED': 'ScrollUp',\n        'BUTTON5_PRESSED': 'ScrollDown',\n        'REPORT_MOUSE_POSITION': 'ScrollDown',\n        '2097152': 'ScrollDown',\n    }\n\nfor i in range(1, 13):\n    d = visidata.vd.prettykeys_trdict\n    d[f'KEY_F({i})'] = f'F{i}'\n    d[f'KEY_F({i+12})'] = f'Shift+F{i}'\n    d[f'KEY_F({i+24})'] = f'Ctrl+F{i}'\n    d[f'KEY_F({i+36})'] = f'Ctrl+Shift+F{i}'\n    d[f'KEY_F({i+48})'] = f'Alt+F{i}'\n    d[f'KEY_F({i+60})'] = f'Alt+Shift+F{i}'\n\n\n@visidata.VisiData.api\ndef prettykeys(vd, key:str) -> str:\n    if not key or '+' in key[:-1]:\n        return key\n\n    for k, v in vd.prettykeys_trdict.items():\n        key = key.replace(k, v)\n\n    # replace ^ with Ctrl but not if ^ is last char\n    key = key[:-1].replace('^', 'Ctrl+')+key[-1]\n    # 1497: allow Shift+ for Alt keys\n    if key[-1] in string.ascii_uppercase and ('+' not in key or 'Alt+' in key) and '_' not in key:\n        key = key[:-1] + 'Shift+' + key[-1]\n\n    return key.strip()\n"
  },
  {
    "path": "visidata/loaders/__init__.py",
    "content": "from visidata import vd, IndexSheet\n\n\nvd.option('load_lazy', False, 'load subsheets always (False) or lazily (True)')\nvd.option('skip', 0, 'skip N rows before header', replay=True)\nvd.option('header', 1, 'parse first N rows as column names', replay=True)\n\nIndexSheet.options.header = 0\nIndexSheet.options.skip = 0\n"
  },
  {
    "path": "visidata/loaders/_pandas.py",
    "content": "from functools import partial\n\nfrom visidata import VisiData, vd, Sheet, date, anytype, Path, options, Column, asyncthread, Progress, undoAttrCopyFunc, run\n\n@VisiData.api\ndef open_pandas(vd, p):\n    return PandasSheet(p.base_stem, source=p)\n\n@VisiData.api\ndef open_dta(vd, p):\n    return PandasSheet(p.base_stem, source=p, filetype='stata')\n\nVisiData.open_stata = VisiData.open_pandas\n\nfor ft in 'feather gbq orc pickle sas stata'.split():\n    funcname ='open_'+ft\n    if not getattr(VisiData, funcname, None):\n        setattr(VisiData, funcname, lambda vd,p,ft=ft: PandasSheet(p.base_stem, source=p, filetype=ft))\n\n@VisiData.api\n@asyncthread\ndef save_dta(vd, p, *sheets):\n    import pandas as pd\n    import numpy as np\n\n    # STATA is a one-sheet software\n    # Save only the first sheet\n    vs = sheets[0]\n\n    columns = [col.name for col in vs.visibleCols]\n\n    # Get data types\n    types = list()\n    dispvals = next(vs.iterdispvals(format=True))\n    for col,_ in dispvals.items():\n        if col.type in [bool, int, float]:\n            types.append(col.type)\n        elif vd.isNumeric(col):\n            types.append(float)\n        else:\n            types.append(str)\n\n    # Populate numpy array\n    data = np.empty((vs.nRows, len(columns)), dtype=object)\n    for r_i, dispvals in enumerate(vs.iterdispvals(format=True)):\n        for c_i, v in enumerate(dispvals.values()):\n            data[r_i, c_i] = v\n\n    # Convert to pandas DataFrame and save\n    dtype = {col:t for col,t in zip(columns, types)}\n    df = pd.DataFrame(data, columns=columns)\n    df = df.astype(dtype)\n    df.to_stata(p, version=118, write_index=False)\n\nclass DataFrameAdapter:\n    def __init__(self, df):\n        pd = vd.importExternal('pandas')\n        if not isinstance(df, pd.DataFrame):\n            vd.fail('%s is not a dataframe' % type(df).__name__)\n\n        self.df = df\n\n    def __len__(self):\n        if 'df' not in self.__dict__:\n            return 0\n        return len(self.df)\n\n    def __getitem__(self, k):\n        if isinstance(k, slice):\n            return DataFrameAdapter(self.df.iloc[k])\n        return self.df.iloc[k]\n\n    def __getattr__(self, k):\n        if 'df' not in self.__dict__:\n            raise AttributeError(f\"'{self.__class__.__name__}' has no attribute '{k}'\")\n        return getattr(self.df, k)\n\n# source=DataFrame\nclass PandasSheet(Sheet):\n    '''Sheet sourced from a pandas.DataFrame\n\n    Warning:\n        The index of the pandas.DataFrame input must be unique.\n        Otherwise the selection functionality, which relies on\n        looking up selected rows via the index, will break.\n        This can be done by calling reset_index().\n\n    Note:\n        Columns starting with \"__vd_\" are reserved for internal usage\n        by the VisiData loader.\n    '''\n\n    def dtype_to_type(self, dtype):\n        np = vd.importExternal('numpy')\n        # Find the underlying numpy dtype for any pandas extension dtypes\n        dtype = getattr(dtype, 'numpy_dtype', dtype)\n        try:\n            if np.issubdtype(dtype, np.integer):\n                return int\n            if np.issubdtype(dtype, np.floating):\n                return float\n            if np.issubdtype(dtype, np.datetime64):\n                return date\n        except TypeError:\n            # For categoricals and other pandas-defined dtypes\n            pass\n        return anytype\n\n    def read_tsv(self, path, **kwargs):\n        'Partial function for reading TSV files using pd.read_csv'\n        pd = vd.importExternal('pandas')\n        return pd.read_csv(path, sep='\\t', **kwargs)\n\n    @property\n    def df(self):\n        if isinstance(getattr(self, 'rows', None), DataFrameAdapter):\n            return self.rows.df\n\n    @df.setter\n    def df(self, val):\n        if isinstance(getattr(self, 'rows', None), DataFrameAdapter):\n            self.rows.df = val\n        else:\n            self.rows = DataFrameAdapter(val)\n\n    def getValue(self, col, row):\n        '''Look up column values in the underlying DataFrame.'''\n        return col.sheet.df.loc[row.name, col.expr]\n\n    def setValue(self, col, row, val):\n        '''\n        Update a column's value in the underlying DataFrame, loosening the\n        column's type as needed. Take care to avoid assigning to a view or\n        a copy as noted here:\n\n        https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#why-does-assignment-fail-when-using-chained-indexing\n        '''\n        try:\n            col.sheet.df.loc[row.name, col.expr] = val\n        except ValueError as err:\n            vd.warning(f'Type of {val} does not match column {col.name}. Changing type.')\n            col.type = anytype\n            col.sheet.df.loc[row.name, col.expr] = val\n        self.setModified()\n\n    @asyncthread\n    def reload(self):\n        pd = vd.importExternal('pandas')\n        if isinstance(self.source, pd.DataFrame):\n            df = self.source\n        elif isinstance(self.source, Path):\n            filetype = getattr(self, 'filetype', self.source.ext)\n            if filetype == 'tsv':\n                readfunc = self.read_tsv\n            elif filetype == 'jsonl':\n                readfunc = partial(pd.read_json, lines=True)\n            elif filetype == 'hdf5':\n                readfunc = partial(pd.read_hdf, lines=True)\n            else:\n                readfunc = getattr(pd, 'read_'+filetype) or vd.error('no pandas.read_'+filetype)\n            # readfunc() handles binary and text open()\n            df = readfunc(self.source, **options.getall('pandas_'+filetype+'_'))\n            # some read methods (html, for example) return a list of dataframes\n            if isinstance(df, list):\n                for idx, inner_df in enumerate(df[1:], start=1):\n                    vd.push(PandasSheet(f'{self.name}[{idx}]', source=inner_df))\n                df = df[0]\n                self.name += '[0]'\n            if (filetype == 'pickle') and not isinstance(df, pd.DataFrame):\n                vd.fail('pandas loader can only unpickle dataframes')\n        else:\n            try:\n                df = pd.DataFrame(self.source)\n            except ValueError as err:\n                vd.fail('error building pandas DataFrame from source data: %s' % err)\n\n        # reset the index here\n        if type(df.index) is not pd.RangeIndex:\n            df = df.reset_index(drop=True)\n\n        # VisiData assumes string column names but pandas does not. Forcing string\n        # columns at load-time avoids various errors later.\n        df.columns = df.columns.astype(str)\n\n        self.columns = []\n        for col in (c for c in df.columns if not c.startswith(\"__vd_\")):\n            self.addColumn(Column(\n                col,\n                type=self.dtype_to_type(df[col].dtype),\n                getter=self.getValue,\n                setter=self.setValue,\n                expr=col\n            ))\n\n        if self.columns[0].name == 'index': # if the df contains an index column\n            self.column('index').hide()\n\n        self.rows = DataFrameAdapter(df)\n        self._selectedMask = pd.Series(False, index=df.index)\n        if df.index.nunique() != df.shape[0]:\n            vd.warning(\"Non-unique index, row selection API may not work or may be incorrect\")\n\n    @asyncthread\n    def sort(self):\n        '''Sort rows according to the current self._ordering.'''\n        by_cols = []\n        ascending = []\n        for col, reverse in self._ordering[::-1]:\n            by_cols.append(col.expr)\n            ascending.append(not reverse)\n        self.rows.sort_values(by=by_cols, ascending=ascending, inplace=True)\n\n    def _checkSelectedIndex(self):\n        pd = vd.importExternal('pandas')\n        if not self._selectedMask.index.equals(self.df.index):\n            # DataFrame was modified inplace, so the selection is no longer valid\n            vd.status('pd.DataFrame.index updated, clearing {} selected rows'\n                      .format(self._selectedMask.sum()))\n            self._selectedMask = pd.Series(False, index=self.df.index)\n\n    def rowid(self, row):\n        return getattr(row, 'name', None) or ''\n\n    # Base selection API. Refer to GH #266: using id() will not identify\n    # pandas rows since iterating on rows / selecting rows will return\n    # different copies. Instead, re-implement the selection API by\n    # keeping a boolean pd.Series indicating the selected rows.\n    def isSelected(self, row):\n        if row is None:\n            return False\n        self._checkSelectedIndex()\n        return self._selectedMask.loc[row.name]\n\n    def selectRow(self, row):\n        'Select given row'\n        self._checkSelectedIndex()\n        self._selectedMask.loc[row.name] = True\n\n    def unselectRow(self, row):\n        self._checkSelectedIndex()\n        is_selected = self._selectedMask.loc[row.name]\n        self._selectedMask.loc[row.name] = False\n        return is_selected\n\n    @property\n    def nSelectedRows(self):\n        self._checkSelectedIndex()\n        return self._selectedMask.sum()\n\n    @property\n    def selectedRows(self):\n        self._checkSelectedIndex()\n        return DataFrameAdapter(self.df.loc[self._selectedMask])\n\n    # Vectorized implementation of multi-row selections\n    @asyncthread\n    def select(self, rows, status=True, progress=True):\n        self.addUndoSelection()\n        for row in (Progress(rows, 'selecting') if progress else rows):\n            self.selectRow(row)\n\n    @asyncthread\n    def unselect(self, rows, status=True, progress=True):\n        self.addUndoSelection()\n        for row in (Progress(rows, 'unselecting') if progress else rows):\n            self.unselectRow(row)\n\n    def clearSelected(self):\n        pd = vd.importExternal('pandas')\n        self._selectedMask = pd.Series(False, index=self.df.index)\n\n    def selectByIndex(self, start=None, end=None):\n        self._checkSelectedIndex()\n        self._selectedMask.iloc[start:end] = True\n\n    def unselectByIndex(self, start=None, end=None):\n        self._checkSelectedIndex()\n        self._selectedMask.iloc[start:end] = False\n\n    def toggleByIndex(self, start=None, end=None):\n        self._checkSelectedIndex()\n        self.addUndoSelection()\n        self._selectedMask.iloc[start:end] = ~self._selectedMask.iloc[start:end]\n\n    def _selectByILoc(self, mask, selected=True):\n        self._checkSelectedIndex()\n        self._selectedMask.iloc[mask] = selected\n\n    @asyncthread\n    def selectByRegex(self, regex, columns, unselect=False):\n        '''\n        Find rows matching regex in the provided columns. By default, add\n        matching rows to the selection. If unselect is True, remove from the\n        active selection instead.\n        '''\n        pd = vd.importExternal('pandas')\n        case_sensitive = 'I' not in vd.options.regex_flags\n        masks = pd.DataFrame([\n            self.df[col.expr].astype(str).str.contains(pat=regex, case=case_sensitive, regex=True)\n            for col in columns\n        ])\n        if unselect:\n            self._selectedMask = self._selectedMask & ~masks.any()\n        else:\n            self._selectedMask = self._selectedMask | masks.any()\n\n    def addUndoSelection(self):\n        vd.addUndo(undoAttrCopyFunc([self], '_selectedMask'))\n\n    @property\n    def nRows(self):\n        if self.df is None:\n            return 0\n        return len(self.df)\n\n    def newRows(self, n):\n        '''\n        Return n rows of empty data. Let pandas decide on the most\n        appropriate missing value (NaN, NA, etc) based on the underlying\n        DataFrame's dtypes.\n        '''\n\n        pd = vd.importExternal('pandas')\n        return pd.DataFrame({\n            col: [None] * n for col in self.df.columns\n        }).astype(self.df.dtypes.to_dict(), errors='ignore')\n\n    def addRows(self, rows, index=None, undo=True):\n        pd = vd.importExternal('pandas')\n        if index is None:\n            self.df = self.df.append(pd.DataFrame(rows))\n        else:\n            self.df = pd.concat((self.df.iloc[0:index], pd.DataFrame(rows), self.df.iloc[index:]))\n        self.df.index = pd.RangeIndex(self.nRows)\n        self._checkSelectedIndex()\n        if undo:\n            self.setModified()\n            vd.addUndo(self._deleteRows, range(index, index + len(rows)))\n\n    def _deleteRows(self, which):\n        pd = vd.importExternal('pandas')\n        self.df.drop(which, inplace=True)\n        self.df.index = pd.RangeIndex(self.nRows)\n        self._checkSelectedIndex()\n\n    def addRow(self, row, index=None):\n        self.addRows([row], index)\n        vd.addUndo(self._deleteRows, index or self.nRows - 1)\n\n    def delete_row(self, rowidx):\n        pd = vd.importExternal('pandas')\n        oldrow = self.df.iloc[rowidx:rowidx+1]\n\n        # Use to_dict() here to work around an edge case when applying undos.\n        # As an action is undone, its entry gets removed from the cmdlog sheet.\n        # If we use `oldrow` directly, we get errors comparing DataFrame objects\n        # when there are multiple deletion commands for the same row index.\n        # There may be a better way to handle that case.\n        vd.addUndo(self.addRows, oldrow.to_dict(), rowidx, undo=False)\n        self._deleteRows(rowidx)\n        vd.setClipboardRows([oldrow])\n        self.setModified()\n\n    def deleteBy(self, by):\n        '''Delete rows for which func(row) is true.  Returns number of deleted rows.'''\n        pd = vd.importExternal('pandas')\n        nRows = self.nRows\n        vd.addUndo(setattr, self, 'df', self.df.copy())\n        self.df = self.df[~by]\n        self.df.index = pd.RangeIndex(self.nRows)\n        ndeleted = nRows - self.nRows\n\n        self.setModified()\n        vd.status('deleted %s %s' % (ndeleted, self.rowtype))\n        return ndeleted\n\n    def deleteSelected(self):\n        '''Delete all selected rows.'''\n        self.deleteBy(self._selectedMask)\n\n\n@VisiData.global_api\ndef view_pandas(vd, df):\n    run(PandasSheet('', source=df))\n\n\n# Override with vectorized implementations\nPandasSheet.addCommand(None, 'stoggle-rows', 'toggleByIndex()', 'toggle selection of all rows')\nPandasSheet.addCommand(None, 'select-rows', 'selectByIndex()', 'select all rows')\nPandasSheet.addCommand(None, 'unselect-rows', 'unselectByIndex()', 'unselect all rows')\n\nPandasSheet.addCommand(None, 'stoggle-before', 'toggleByIndex(end=cursorRowIndex)', 'toggle selection of rows from top to cursor')\nPandasSheet.addCommand(None, 'select-before', 'selectByIndex(end=cursorRowIndex)', 'select all rows from top to cursor')\nPandasSheet.addCommand(None, 'unselect-before', 'unselectByIndex(end=cursorRowIndex)', 'unselect all rows from top to cursor')\nPandasSheet.addCommand(None, 'stoggle-after', 'toggleByIndex(start=cursorRowIndex)', 'toggle selection of rows from cursor to bottom')\nPandasSheet.addCommand(None, 'select-after', 'selectByIndex(start=cursorRowIndex)', 'select all rows from cursor to bottom')\nPandasSheet.addCommand(None, 'unselect-after', 'unselectByIndex(start=cursorRowIndex)', 'unselect all rows from cursor to bottom')\nPandasSheet.addCommand(None, 'random-rows', 'nrows=int(input(\"random number to select: \", value=nRows)); vs=copy(sheet); vs.name=name+\"_sample\"; vs.rows=DataFrameAdapter(sheet.df.sample(nrows or nRows)); vd.push(vs)', 'open duplicate sheet with a random population subset of N rows')\n\n# Handle the regex selection family of commands through a single method,\n# since the core logic is shared\nPandasSheet.addCommand('|', 'select-col-regex', 'selectByRegex(regex=inputRegex(\"select regex: \", defaultLast=True), columns=[cursorCol])', 'select rows matching regex in current column')\nPandasSheet.addCommand('\\\\', 'unselect-col-regex', 'selectByRegex(regex=inputRegex(\"select regex: \", defaultLast=True), columns=[cursorCol], unselect=True)', 'unselect rows matching regex in current column')\nPandasSheet.addCommand('g|', 'select-cols-regex', 'selectByRegex(regex=inputRegex(\"select regex: \", defaultLast=True), columns=visibleCols)', 'select rows matching regex in any visible column')\nPandasSheet.addCommand('g\\\\', 'unselect-cols-regex', 'selectByRegex(regex=inputRegex(\"select regex: \", defaultLast=True), columns=visibleCols, unselect=True)', 'unselect rows matching regex in any visible column')\n\n# Override with a pandas/dataframe-aware implementation\nPandasSheet.addCommand('\"', 'dup-selected', 'vs=PandasSheet(sheet.name, \"selectedref\", source=selectedRows.df); vd.push(vs)', 'open duplicate sheet with only selected rows')\nPandasSheet.addCommand('g\"', 'dup-rows', 'vs=PandasSheet(sheet.name, \"copy\", source=sheet.df); vd.push(vs)', 'open duplicate sheet with all rows')\nPandasSheet.addCommand('z\"', 'dup-selected-deep', 'vs=PandasSheet(sheet.name, \"selecteddeepcopy\", source=selectedRows.df.copy(deep=True)); vd.push(vs)', 'open duplicate sheet with deepcopy of selected rows')\nPandasSheet.addCommand('gz\"', 'dup-rows-deep', 'vs=PandasSheet(sheet.name, \"deepcopy\", source=sheet.df.copy(deep=True)); vd.push(vs)', 'open duplicate sheet with deepcopy of all rows')\n\nvd.addGlobals({\n    'PandasSheet': PandasSheet,\n})\n"
  },
  {
    "path": "visidata/loaders/api_airtable.py",
    "content": "import re\nimport os\n\nfrom visidata import vd, date, asyncthread, VisiData, Progress, Sheet, Column, ItemColumn, deduceType, TypedWrapper, setitem, AttrDict\n\n\nvd.option('airtable_auth_token', '', 'Airtable API key from https://airtable.com/account')\n\nairtable_regex = r'^https://airtable.com/(app[A-Za-z0-9]+)/(tbl[A-Za-z0-9]+)/?(viw[A-z0-9]+)?'\n\n@VisiData.api\ndef guessurl_airtable(vd, p, response):\n    m = re.search(airtable_regex, p.given)\n    if m:\n        return dict(filetype='airtable', _likelihood=10)\n\n\n@VisiData.api\ndef open_airtable(vd, p):\n    pyairtable = vd.importExternal('pyairtable')\n\n    token = os.environ.get('AIRTABLE_AUTH_TOKEN') or vd.options.airtable_auth_token\n    if not token:\n        vd.requireOptions('airtable_auth_token', help='https://support.airtable.com/docs/creating-and-using-api-keys-and-access-tokens')\n\n    m = re.search(airtable_regex, p.given)\n    if not m:\n        vd.fail('invalid airtable url')\n\n    app, tbl, viw = m.groups()\n    return AirtableSheet('airtable', source=p,\n                         airtable_auth_token=token,\n                         airtable_base=app,\n                         airtable_table=tbl,\n                         airtable_view=viw)\n\n\nclass AirtableSheet(Sheet):\n    guide = '''\n        # Airtable\n        This sheet is a read-only download of all records in a table at _airtable.com_.\n    '''\n    rowtype = 'records'  # rowdef: dict\n\n    columns = [\n        ItemColumn('id', 'id', type=str, width=0),\n        ItemColumn('createdTime', 'createdTime', type=date, width=0)\n    ]\n\n    def iterload(self):\n        self.fields = set()\n\n        table = self.api.table(self.airtable_base, self.airtable_table)\n        \n        for page in table.iterate(view=self.airtable_view):\n            for row in page:\n                yield row\n\n                for field, value in row['fields'].items():\n                    if field not in self.fields:\n                        col = ItemColumn('fields.'+field, type=deduceType(value))\n                        self.addColumn(col)\n                        self.fields.add(field)\n\n    def newRow(self):\n        return AttrDict(fields=AttrDict())\n\n\n@AirtableSheet.lazy_property\ndef api(self):\n    import pyairtable\n    return pyairtable.Api(self.airtable_auth_token)\n"
  },
  {
    "path": "visidata/loaders/api_matrix.py",
    "content": "'''\n# Matrix Chat Sheet\nA list of messages from [:underline]{sheet.sourcename}[/].\n\n- `Enter` to push a sheet with all the messages from [:underline]{sheet.cursorRow.room.display_name}[/].\n- `a` to send a message to [:underline]{sheet.cursorRow.room.display_name}[/].\n'''\n\nfrom visidata import vd, VisiData, Sheet, Column, ItemColumn, date, asyncthread, AttrDict, vlen, Path\n\n\nvd.option('matrix_token', '', 'matrix API token')\nvd.option('matrix_user_id', '', 'matrix user ID associated with token')\nvd.option('matrix_device_id', 'VisiData', 'device ID associated with matrix login')\n\nvd.matrix_client = None\n\n\n@VisiData.api\ndef openhttp_matrix(vd, p):\n    vd.importExternal('matrix_client')\n\n    if not vd.options.matrix_token:\n        from matrix_client.client import MatrixClient\n\n        username = vd.input(f'{p.given} username: ', record=False)\n        password = vd.input('password: ', record=False, display=False)\n\n        vd.matrix_client = MatrixClient(p.given)\n        matrix_token = vd.matrix_client.login(username, password, device_id=vd.options.matrix_device_id)\n\n        vd.setPersistentOptions(matrix_user_id=username, matrix_token=matrix_token)\n\n    vd.timeouts_before_idle = -1\n    return MatrixSheet(p.base_stem, source=p)\n\nVisiData.open_matrix = VisiData.openhttp_matrix\n\n\nclass MatrixRoomsSheet(Sheet):\n    def iterload(self):\n        yield from vd.matrix_client.get_rooms().values()\n\n\nclass MatrixSheet(Sheet):\n    help = __doc__\n    columns = [\n        Column('room', width=12, getter=lambda c,r: r.room and r.room.display_name),\n        ItemColumn('sender', width=0),\n        Column('sender', width=10, getter=lambda c,r: r.sender.split(':')[0][1:]),\n        Column('timestamp', width=16, type=date, getter=lambda c,r: r and r.origin_server_ts/1000, fmtstr='%Y-%m-%d %H:%m'),\n        ItemColumn('type', width=15),\n        ItemColumn('content', width=0),\n        ItemColumn('content.body', width=50),\n        ItemColumn('received', type=vlen, width=0),\n        ItemColumn('content.msgtype'),\n    ]\n\n    @property\n    def sourcename(self):\n        from matrix_client.room import Room\n        if isinstance(self.source, Room):\n            return self.source.display_name or self.source.room_id\n        else:\n            return str(self.source)\n\n    @asyncthread\n    def reload(self):\n        from matrix_client.client import MatrixClient\n        from matrix_client.room import Room\n        if not vd.matrix_client:\n            vd.matrix_client = MatrixClient(self.source.given,\n                                        token=self.options.matrix_token,\n                                        user_id=self.options.matrix_user_id)\n\n        if isinstance(self.source, Room):\n            self.add_room(self.source)\n            self.get_room_messages(self.source)\n            return\n\n        for room in vd.matrix_client.get_rooms().values():\n            self.add_room(room)\n            room.backfill_previous_messages(limit=1)\n\n        vd.matrix_client.add_listener(self.global_event)\n        vd.matrix_client.add_ephemeral_listener(self.global_event)\n\n        vd.matrix_client.start_listener_thread(exception_handler=vd.exceptionCaught)\n\n        vd.matrix_client._sync()\n\n        vd.matrix_client.listen_for_events() # vd.matrix_client.sync(full_state=True)\n\n    def add_room(self, room):\n        room.add_listener(self.room_event)\n        room.add_ephemeral_listener(self.room_event)\n        room.add_state_listener(self.global_event)\n\n    @asyncthread\n    def get_room_messages(self, room):\n            while room.prev_batch:\n                ret = vd.matrix_client.api.get_room_messages(room.room_id, room.prev_batch, direction='b', limit=100)\n                for r in ret['chunk']:\n                    r['room'] = room\n                    self.addRow(r)\n\n                if 'end' not in ret or ret['end'] == room.prev_batch:\n                    break\n                room.prev_batch = ret['end']\n\n    def addRow(self, r, **kwargs):\n        r = AttrDict(r)\n        if r.event_id not in self.event_index:\n            super().addRow(r, **kwargs)\n            self.event_index[r.event_id] = r\n\n    def global_event(self, chunk):\n        self.addRow(chunk)\n\n    def room_event(self, room, chunk):\n        ev = AttrDict(chunk)\n        t = chunk['type']\n        if t == 'm.receipt':\n            for msgid, content in chunk['content'].items():\n                msg = self.event_index.setdefault(msgid, {})\n                if 'received' not in msg:\n                    msg['received'] = {}\n\n                for t, c in content.items():\n                    assert t == 'm.read'\n                    for userid, v in c.items():\n                        msg['received'][(t, userid)] = v['ts']/1000\n            return\n\n        chunk['room'] = room\n        self.addRow(chunk)\n\n    def add_message(self, text):\n        vd.matrix_client.send_text(text)\n\n    def openRow(self, row):\n        return MatrixSheet(row.room.display_name, source=row.room, last_id=row.event_id)\n\n\nMatrixSheet.init('event_index', dict)\n\nMatrixSheet.addCommand('a', 'add-row', 'cursorRow.room.send_text(input(cursorRow.room.display_name+\"> \"))', 'send chat message to current room')\nvd.addMenuItems('Row > Add > send matrix message > add-msg')\n"
  },
  {
    "path": "visidata/loaders/api_reddit.py",
    "content": "'''# RedditSheet\n\n- [:keystrokes]Ctrl+O[/] to open a browser tab to [:code]{sheet.cursorRow.display_name_prefixed}[/]\n- [:keystrokes]g Ctrl+O[/] to open browser windows for {sheet.nSelectedRows} selected subreddits\n\n- [:keystrokes]Enter[/] to open sheet with top ~1000 submissions for [:code]{sheet.cursorRow.display_name_prefixed}[/]\n- [:keystrokes]g Enter[/] to open sheet with top ~1000 submissions for {sheet.nSelectedRows} selected subreddits\n\n- [:keystrokes]ga[/] to append more subreddits matching input by name or description\n'''\n\nimport visidata\nfrom visidata import vd, VisiData, Sheet, AttrColumn, asyncthread, anytype, date\n\n\nvd.option('reddit_client_id', '', 'client_id for reddit api')\nvd.option('reddit_client_secret', '', 'client_secret for reddit api')\nvd.option('reddit_user_agent', visidata.__version_info__, 'user_agent for reddit api')\n\n\n@VisiData.api\ndef open_reddit(vd, p):\n    vd.importExternal('praw')\n    vd.enable_requests_cache()\n\n    if not vd.options.reddit_client_id:\n        return RedditGuide('reddit_guide')\n\n    if p.given.startswith('r/') or p.given.startswith('/r/'):\n        return SubredditSheet(p.base_stem, source=p.base_stem.split('+'), search=(p.given[0]=='/'))\n\n    if p.given.startswith('u/') or p.given.startswith('/u/'):\n        return RedditorsSheet(p.base_stem, source=p.base_stem.split('+'), search=(p.given[0]=='/'))\n\n    return SubredditSheet(p.base_stem, source=p)\n\nvd.new_reddit = vd.open_reddit\n\n@VisiData.cached_property\ndef reddit(vd):\n    import praw\n    return praw.Reddit(check_for_updates=False, **vd.options.getall('reddit_'))\n\n\nsubreddit_hidden_attrs='''\nname #accounts_active accounts_active_is_fuzzed advertiser_category\nall_original_content allow_chat_post_creation allow_discovery\nallow_galleries allow_images allow_polls allow_predictions\nallow_predictions_tournament allow_videogifs allow_videos\nbanner_background_color banner_background_image banner_img banner_size\ncan_assign_link_flair can_assign_user_flair collapse_deleted_comments\ncomment_score_hide_mins community_icon community_reviewed @created\n@created_utc description_html disable_contributor_requests\ndisplay_name display_name_prefixed emoji emojis_custom_size\nemojis_enabled filters free_form_reports fullname has_menu_widget\nheader_img header_size header_title hide_ads icon_img icon_size\nis_chat_post_feature_enabled is_crosspostable_subreddit\nis_enrolled_in_new_modmail key_color lang link_flair_enabled\nlink_flair_position mobile_banner_image mod notification_level\noriginal_content_tag_enabled over18 prediction_leaderboard_entry_type\nprimary_color public_description public_description_html public_traffic\nquaran quarantine restrict_commenting restrict_posting show_media\nshow_media_preview spoilers_enabled submission_type submit_link_label\nsubmit_text submit_text_html submit_text_label suggested_comment_sort\nuser_can_flair_in_sr user_flair_background_color user_flair_css_class\nuser_flair_enabled_in_sr user_flair_position user_flair_richtext\nuser_flair_template_id user_flair_text user_flair_text_color\nuser_flair_type user_has_favorited user_is_banned user_is_contributor\nuser_is_moderator user_is_muted user_is_subscriber user_sr_flair_enabled\nuser_sr_theme_enabled #videostream_links_count whitelist_status widgets\nwiki wiki_enabled wls\n'''\n\npost_hidden_attrs='''\nall_awardings allow_live_comments @approved_at_utc approved_by archived\nauthor_flair_background_color author_flair_css_class author_flair_richtext\nauthor_flair_template_id author_flair_text author_flair_text_color\nauthor_flair_type author_fullname author_patreon_flair author_premium\nawarders @banned_at_utc banned_by can_gild can_mod_post category clicked\ncomment_limit comment_sort content_categories contest_mode @created_utc\ndiscussion_type distinguished domain edited flair fullname gilded\ngildings hidden hide_score is_crosspostable is_meta is_original_content\nis_reddit_media_domain is_robot_indexable is_self is_video likes\nlink_flair_background_color link_flair_css_class link_flair_richtext\nlink_flair_text link_flair_text_color link_flair_type locked media\nmedia_embed media_only mod mod_note mod_reason_by mod_reason_title\nmod_reports name no_follow num_crossposts num_duplicates num_reports\nover_18 parent_whitelist_status permalink pinned pwls quarantine\nremoval_reason removed_by removed_by_category report_reasons saved\nscore secure_media secure_media_embed selftext_html send_replies\nshortlink spoiler stickied subreddit_id subreddit_name_prefixed\nsubreddit_subscribers subreddit_type suggested_sort thumbnail\nthumbnail_height thumbnail_width top_awarded_type total_awards_received\ntreatment_tags upvote_ratio user_reports #view_count visited\nwhitelist_status wls\n'''\n\ncomment_hidden_attrs='''\nall_awardings @approved_at_utc approved_by archived associated_award\nauthor_flair_background_color author_flair_css_class author_flair_richtext\nauthor_flair_template_id author_flair_text author_flair_text_color\nauthor_flair_type author_fullname author_patreon_flair author_premium\nawarders @banned_at_utc banned_by body_html can_gild can_mod_post\ncollapsed collapsed_because_crowd_control collapsed_reason comment_type\ncontroversiality @created_utc distinguished fullname gilded gildings\nis_root is_submitter likes link_id locked mod mod_note mod_reason_by\nmod_reason_title mod_reports name no_follow num_reports parent_id\npermalink removal_reason report_reasons saved #score #score_hidden\nsend_replies stickied submission subreddit_id subreddit_name_prefixed\nsubreddit_type top_awarded_type total_awards_received treatment_tags\nuser_reports\n'''\n\nredditor_hidden_attrs='''\n#awardee_karma #awarder_karma @created @created_utc\nfullname has_subscribed has_verified_email hide_from_robots icon_img id\nis_employee is_friend is_gold is_mod pref_show_snoovatar\nsnoovatar_img snoovatar_size stream #total_karma verified\nsubreddit.banner_img subreddit.name subreddit.over_18 subreddit.public_description #subreddit.subscribers subreddit.title\n'''\n\ndef hiddenCols(hidden_attrs):\n    coltypes = { t.icon:t.typetype for t in vd.typemap.values() if not t.icon.isalpha() }\n    for attr in hidden_attrs.split():\n        coltype = anytype\n        if attr[0] in coltypes:\n            coltype = coltypes.get(attr[0])\n            attr = attr[1:]\n        yield AttrColumn(attr, type=coltype, width=0)\n\n\nclass SubredditSheet(Sheet):\n    guide = __doc__\n    # source is a text list of subreddits\n    rowtype = 'subreddits'  # rowdef: praw.Subreddit\n    nKeys=1\n    search=False\n    columns = [\n        AttrColumn('display_name_prefixed', width=15),\n        AttrColumn('active_user_count', type=int),\n        AttrColumn('subscribers', type=int),\n        AttrColumn('subreddit_type'),\n        AttrColumn('title'),\n        AttrColumn('description', width=50),\n        AttrColumn('url', width=10),\n    ] + list(hiddenCols(subreddit_hidden_attrs))\n\n    def iterload(self):\n        for name in self.source:\n            name = name.strip()\n            if self.search:\n                yield from vd.reddit.subreddits.search(name)\n            else:\n                try:\n                    r = vd.reddit.subreddit(name)\n                    r.display_name_prefixed\n                    yield r\n                except Exception as e:\n                    vd.exceptionCaught(e)\n\n    def openRow(self, row):\n        return RedditSubmissions(row.display_name_prefixed, source=row)\n\n    def openRows(self, rows):\n        comboname = '+'.join(row.display_name for row in rows)\n        return RedditSubmissions(comboname, source=vd.reddit.subreddit(comboname))\n\n\nclass RedditorsSheet(Sheet):\n    # source is a text list of usernames\n    rowtype = 'redditors'  # rowdef: praw.Subreddit\n    nKeys=1\n    columns = [\n        AttrColumn('name', width=15),\n        AttrColumn('comment_karma', type=int),\n        AttrColumn('link_karma', type=int),\n        AttrColumn('comments'),\n        AttrColumn('submissions'),\n    ] + list(hiddenCols(redditor_hidden_attrs))\n\n    def iterload(self):\n        for name in self.source:\n            if self.search:\n                yield from vd.reddit.redditors.popular(name)\n            else:\n                yield vd.reddit.redditor(name)\n\n    def openRow(self, row):\n        return RedditSubmissions(row.fullname, source=row.submissions)\n\n    def openRows(self, rows):\n        comboname = '+'.join(row.name for row in rows)\n        return RedditSubmissions(comboname, source=vd.reddit.redditor(comboname).submissions)\n\n\nclass RedditSubmissions(Sheet):\n    guide = '''# Reddit Submissions\n\n  [:keys]Enter[/] to open sheet with comments for the current post\n  [:keys]ga[/] to add posts in this subreddit matching input'''\n\n    # source=ListingGenerator\n    rowtype='reddit posts' # rowdef: praw.Submission\n    nKeys=2\n    columns = [\n        AttrColumn('subreddit'),\n        AttrColumn('id', width=0),\n        AttrColumn('created', width=12, type=date),\n        AttrColumn('author'),\n        AttrColumn('ups', width=8, type=int),\n        AttrColumn('downs', width=8, type=int),\n        AttrColumn('num_comments', width=8, type=int),\n        AttrColumn('title', width=50),\n        AttrColumn('selftext', width=60),\n        AttrColumn('url'),\n        AttrColumn('comments', width=0),\n    ] + list(hiddenCols(post_hidden_attrs))\n\n    def iterload(self):\n        kind = 'new' # 'top'\n        f = getattr(self.source, kind, None)\n        if f:\n            yield from f(limit=10000)\n\n    def openRow(self, row):\n        return RedditComments(row.id, source=row.comments.list())\n\n\nclass RedditComments(Sheet):\n    # source=list of comments\n    rowtype='comments' # rowdef: praw.Comment\n    nKeys=2\n    columns=[\n        AttrColumn('subreddit', width=0),\n        AttrColumn('id', width=0),\n        AttrColumn('ups', width=4, type=int),\n        AttrColumn('downs', width=4, type=int),\n        AttrColumn('replies', type=list),\n        AttrColumn('created', type=date),\n        AttrColumn('author'),\n        AttrColumn('depth', type=int),\n        AttrColumn('body', width=60),\n        AttrColumn('edited', width=0),\n    ] + list(hiddenCols(comment_hidden_attrs))\n\n    def iterload(self):\n        yield from self.source\n\n    def openRow(self, row):\n        return RedditComments(row.id, source=row.replies)\n\n\nclass RedditGuide(RedditSubmissions):\n    guide = '''# Authenticate Reddit\nThe Reddit API must be configured before use.\n\n1. Login to Reddit and go to [:underline]https://www.reddit.com/prefs/apps[/].\n2. Create a \"script\" app. (Use \"[:underline]http://localhost:8000[/]\" for the redirect uri)\n3. Add credentials to visidatarc:\n\n    options.reddit_client_id = '...'      # below the description in the upper left\n    options.reddit_client_secret = '...'\n\n## Use [:code]reddit[/] filetype for subreddits or users\n\nMultiple may be specified, joined with \"+\".\n\n    vd r/commandline.reddit\n    vd u/gallowboob.reddit\n    vd r/rust+golang+python.reddit\n    vd u/spez+kn0thing.reddit\n'''\n\n@SubredditSheet.api\n@asyncthread\ndef addRowsFromQuery(sheet, q):\n    for r in vd.reddit.subreddits.search(q):\n        sheet.addRow(r, index=sheet.cursorRowIndex+1)\n\n\n@RedditSubmissions.api\n@asyncthread\ndef addRowsFromQuery(sheet, q):\n    for r in sheet.source.search(q, limit=None):\n        sheet.addRow(r, index=sheet.cursorRowIndex+1)\n\n\n@VisiData.api\ndef sysopen_subreddits(vd, *subreddits):\n    url = \"https://www.reddit.com/r/\"+\"+\".join(subreddits)\n    vd.launchBrowser(url)\n\n\nSubredditSheet.addCommand('Ctrl+O', 'sysopen-subreddit', 'sysopen_subreddits(cursorRow.display_name)', 'open browser window with subreddit')\nSubredditSheet.addCommand('gCtrl+O', 'sysopen-subreddits', 'sysopen_subreddits(*(row.display_name for row in selectedRows))', 'open browser window with messages from selected subreddits')\nSubredditSheet.addCommand('gEnter', 'open-subreddits', 'vd.push(openRows(selectedRows))', 'open sheet with top ~1000 submissions for each selected subreddit')\nSubredditSheet.addCommand('ga', 'add-subreddits-match', 'addRowsFromQuery(input(\"add subreddits matching: \"))', 'add subreddits matching input by name or description')\nRedditSubmissions.addCommand('ga', 'add-submissions-match', 'addRowsFromQuery(input(\"add posts matching: \"))', 'add posts in this subreddit matching input')\n\nvd.addMenuItems('''\n    File > Reddit > open selected subreddits > open-subreddits\n    File > Reddit > add > matching subreddits > add-subreddits-match\n    File > Reddit > add > matching submissions > add-submissions-match\n    File > Reddit > open in browser > subreddit in current row > sysopen-subreddit\n    File > Reddit > open in browser > selected subreddits > sysopen-subreddits\n''')\n"
  },
  {
    "path": "visidata/loaders/api_zulip.py",
    "content": "import time\n\nfrom visidata import vd, VisiData, BaseSheet, Sheet, TextSheet, PyobjSheet\nfrom visidata import ItemColumn, Column, vlen, date, asyncsingle, AttrDict\n\nvd.option('zulip_batch_size', -100, 'number of messages to fetch per call (<0 to fetch before anchor)')\nvd.option('zulip_anchor', 1000000000, 'message id to start fetching from')\nvd.option('zulip_delay_s', 0.00001, 'seconds to wait between calls (0 to stop after first)')\nvd.option('zulip_api_key', '', 'Zulip API key')\nvd.option('zulip_email', '', 'Email for use with Zulip API key')\n\n\n@VisiData.api\ndef open_zulip(vd, p):\n    vd.importExternal('zulip')\n    import zulip\n\n    if not vd.options.zulip_api_key:\n        vd.warning('zulip_api_key must be set first')\n        vd.status('Enter your login email and Zulip API key (see _https://zulip.com/api/api-keys_).')\n        email = vd.input(f'Login email for {p.given}: ', record=False)\n        api_key = vd.input(f'Zulip API key: ', record=False)\n\n        vd.setPersistentOptions(zulip_email=email, zulip_api_key=api_key)\n\n    vd.z_client = zulip.Client(site=p.given, api_key=vd.options.zulip_api_key, email=vd.options.zulip_email)\n\n    return vd.subscribedStreams\n\n\nVisiData.openhttp_zulip = VisiData.open_zulip\n\n\n@VisiData.api\ndef z_rpc(vd, r, result_field_name=None):\n    if r['result'] != 'success':\n        return PyobjSheet(result_field_name+'_error', source=r)\n    elif result_field_name:\n        return PyobjSheet(result_field_name, source=r[result_field_name])\n\n\n@VisiData.lazy_property\ndef allStreams(vd):\n    return ZulipStreamsSheet(\"all_streams\", zulip_func='get_streams', zulip_result_key=\"streams\", zulip_kwargs=dict(include_public=True, include_subscribed=True))\n\n\n@VisiData.lazy_property\ndef subscribedStreams(vd):\n    return ZulipStreamsSheet(\"subscriptions\", zulip_func='get_subscriptions', zulip_result_key=\"subscriptions\")\n\n\n@VisiData.lazy_property\ndef allMessages(vd):\n    return ZulipMessagesSheet(\"all_messages\")\n\n\n@VisiData.api\ndef parseColumns(vd, fieldlist):\n    for cname in fieldlist:\n        kwargs = {}\n        while not cname[0].isalpha():\n            if cname[0] == '#': kwargs['type'] = int\n            elif cname[0] == '@': kwargs['type'] = date\n            elif cname[0] == '-': kwargs['width'] = 0\n            else: break\n            cname = cname[1:]\n        yield ItemColumn(cname, **kwargs)\n\n\nclass ZulipAPISheet(Sheet):\n    zulip_func = None\n    zulip_result_key = ''\n    zulip_args = []\n    zulip_kwargs = {}\n    fields = ''\n\n    def iterload(self):\n        self.columns = []\n        for c in vd.parseColumns(self.fields.split()):\n            self.addColumn(c)\n\n        zulip_func = self.zulip_func\n        if isinstance(zulip_func, str): # allow later binding for startup perf\n            zulip_func = getattr(vd.z_client, zulip_func)\n        r = zulip_func(*self.zulip_args, **self.zulip_kwargs)\n        if r['result'] != 'success':\n            vd.push(PyobjSheet(self.zulip_result_key+'_error', source=r))\n            return\n        yield from r[self.zulip_result_key]\n\n    def addRow(self, r, **kwargs):\n        return super().addRow(AttrDict(r), **kwargs)\n\n\nclass ZulipStreamsSheet(ZulipAPISheet):\n    guide = '''# Zulip Streams\n\n- `Enter` to open recent messages from the stream\n- `z Enter` to open list of topics from the stream\n'''\n    rowtype = 'streams'  # rowdef: dict of stream from server\n    fields = '-#stream_id name @date_created description -rendered_description -invite_only -is_web_public -stream_post_policy -history_public_to_subscribers -#first_message_id -#message_retention_days -is_announcement_only'\n\n    def openRow(self, r):\n        return ZulipMessagesSheet(r.name, filters=dict(stream=r.name))\n\n    def openCell(self, c, r):\n        return ZulipTopicsSheet(r.name+'_topics',\n                             zulip_func=vd.z_client.get_stream_topics,\n                             zulip_args=[r.stream_id],\n                             zulip_result_key='topics')\n\n\nclass ZulipTopicsSheet(ZulipAPISheet):\n    rowtype = 'topics'  # rowdef: dict of topic from server\n    fields='name #max_id'\n    def openRow(self, r):\n        return ZulipMessagesSheet(f'{r.name}:{r.subject}', filters=dict(stream=r.name, topic=r.subject))\n\n\nclass ZulipMembersSheet(ZulipAPISheet):\n    guide = '''# Zulip Members\n- `Enter` to open list of messages from this member\n'''\n    rowtype = 'members'  # rowdef: dict of member from server\n    fields = '''-#user_id full_name email timezone @date_joined -#avatar_version -is_admin -is_owner -is_guest -is_bot -#role -is_active -avatar_url -bot_type -#bot_owner_id'''\n    def openRow(self, r):\n        return ZulipMessagesSheet(r.display_recipient, filters=dict(stream=r.display_recipient))\n\n\nclass ZulipMessagesSheet(Sheet):\n    guide = '''# Zulip Messages Sheet\nLoads continuously starting with most recent, until all messages have been read.\n\n- `Ctrl+C` to cancel loading.\n- `Enter` to open message in word-wrapped text sheet\n'''\n    rowtype = 'messages'  # rowdef: dict of message from server\n#    fields = ''\n    columns = [\n        ItemColumn('timestamp', type=date, fmtstr='%Y-%m-%d %H:%M'),\n        ItemColumn('sender', 'sender_full_name'),\n        ItemColumn('sender_email', width=0),\n        ItemColumn('recipient', 'display_recipient'),\n        ItemColumn('subject'),\n        ItemColumn('content'),\n        ItemColumn('client', width=0),\n        ItemColumn('reactions', type=vlen),\n        ItemColumn('submessages', type=vlen),\n        ItemColumn('flags', width=0),\n    ]\n    filters={}\n\n    @asyncsingle # kill previous thread\n    def reload(self):\n        self.rows = []\n        narrow = list(self.filters.items())\n        n = self.options.zulip_batch_size\n        req = AttrDict(\n            num_before = -n if n < 0 else 0,\n            num_after = n if n > 0 else 0,\n            anchor = self.options.zulip_anchor,\n            apply_markdown = False,\n            narrow = narrow)\n\n        while True:\n            r = vd.z_client.call_endpoint(url='messages', method='GET', request=req)\n            if r['result'] == 'success':\n                if not r['messages']: break\n                for i, msg in enumerate(r['messages']):\n                    self.addRow(msg, index=i)\n                req['anchor'] = min(msg['id'] for msg in r['messages'])-1\n                s = self.options.zulip_delay_s\n                if s <= 0:\n                    break\n                time.sleep(s)\n\n#        vd.status('finished loading, waiting for new messages')\n#        vd.z_client.call_on_each_event(self.received_event, ['message'], narrow=narrow)\n\n    def get_channel_name(self, r):\n        recp = r['display_recipient']\n        if isinstance(recp, list):  # private message\n            return '[%s]' % recp[0]['full_name']\n        else:\n            return '%s:%s' % (recp, r['subject'])\n\n    def update_message(self, msgid, content):\n        req = {\n            \"message_id\": msgid,\n            \"content\": content\n        }\n        vd.z_rpc(vd.z_client.update_message(req))\n\n    def openRow(self, r):\n        vs = TextSheet(self.get_channel_name(r), source=[r[\"content\"]])\n        vs.options.wrap = True\n        return vs\n\n    def received_event(self, event):\n        if event['type'] == 'message':\n            self.addRow(event['message'])\n\n    def reply_message(self, msg, row):\n        recp = row['display_recipient']\n        if isinstance(recp, list):\n            for dest in recp:\n                self.send_message(msg, row['subject'], dest['email'], 'private')\n        else:\n            self.send_message(msg, row['subject'], dest, 'stream')\n\n    def send_message(self, msg, subject, dest, msgtype='stream'):\n        req = {\n            'type': msgtype,\n            'content': msg,\n            'subject': subject,\n            'to': dest,\n        }\n        r = vd.z_client.send_message(req)\n\n        if r['result'] != 'success':\n            vd.push(PyobjSheet('send_message_result', source=r))\n\n\nvd.addGlobals({\n    'ZulipMembersSheet': ZulipMembersSheet,\n    'ZulipStreamsSheet': ZulipStreamsSheet,\n    'ZulipAPISheet': ZulipAPISheet,\n    'ZulipMessagesSheet': ZulipMessagesSheet,\n})\n\nZulipAPISheet.addCommand('', 'open-zulip-profile', 'vd.push(PyobjSheet(\"profile\", source=z_client.get_profile()))', 'open connected user\\'s profile')\nZulipAPISheet.addCommand('', 'open-zulip-members', 'vd.push(ZulipMembersSheet(\"members\", zulip_func=z_client.get_users, zulip_result_key=\"members\"))', 'open list of all members')\nZulipAPISheet.addCommand('', 'open-zulip-streams', 'vd.push(vd.allStreams)', 'open list of all streams')\nZulipAPISheet.addCommand('', 'open-zulip-subs', 'vd.push(vd.subscribedStreams)', 'open list of subscribed streams')\nZulipAPISheet.addCommand('', 'open-zulip-msgs', 'vd.push(vd.allMessages)', 'open list of all messages')\n\nZulipMessagesSheet.addCommand('', 'reply-zulip-msg', 'reply_message(input(cursorRow[\"display_recipient\"][1][\"short_name\"]+\"> \", \"message\"), cursorRow)', 'reply to current topic')\nZulipMessagesSheet.addCommand('', 'edit-zulip-msg', 'update_message(cursorRow[\"id\"], editCell(3, cursorRowIndex))', 'edit message content')\n\nvd.addMenuItems('''\nFile > Zulip > profile > open-zulip-profile\nFile > Zulip > member list > open-zulip-members\nFile > Zulip > streams > open-zulip-streams\nFile > Zulip > subscriptions > open-zulip-subs\nFile > Zulip > messages > open-zulip-subs\nFile > Zulip > reply > reply-zulip-msg\nFile > Zulip > edit message > edit-zulip-msg\n''')\n"
  },
  {
    "path": "visidata/loaders/archive.py",
    "content": "import pathlib\nimport tarfile\nimport zipfile\nimport datetime\nimport os.path\nfrom visidata.loaders import unzip_http\n\nfrom visidata import vd, VisiData, asyncthread, Sheet, Progress, Menu\nfrom visidata import ColumnAttr, Column, Path, filesize\nfrom visidata.type_date import date\n\n@VisiData.api\ndef guess_zip(vd, p):\n    if not p.is_url() and zipfile.is_zipfile(p.open_bytes()):\n        return dict(filetype='zip', _likelihood=10)\n\n@VisiData.api\ndef guess_tar(vd, p):\n    # an empty file will pass is_tarfile(), but can't be opened by tarfile.open()\n    if filesize(p) == 0:\n        return None\n    if tarfile.is_tarfile(p.open_bytes()):\n        return dict(filetype='tar', _likelihood=10)\n\n@VisiData.api\ndef open_zip(vd, p):\n    return vd.ZipSheet(p.base_stem, source=p)\n\n@VisiData.api\ndef open_tar(vd, p):\n    return TarSheet(p.base_stem, source=p)\n\nVisiData.open_tgz = VisiData.open_tar\nVisiData.open_txz = VisiData.open_tar\nVisiData.open_tbz2 = VisiData.open_tar\nVisiData.open_whl = VisiData.open_zip\n\n@VisiData.api\nclass ZipSheet(Sheet):\n    'Wrapper for `zipfile` library.'\n    rowtype = 'files' # rowdef [ZipInfo, zipfile.Path]\n    columns = [\n        Column('directory',\n            getter=lambda col,row: str(row[1].parent) if str(row[1].parent) == '.' else str(row[1].parent) + '/'),\n        Column('filename', getter=lambda col,row: row[1].name),\n        Column('abspath', type=str, width=0, getter=lambda col,row: row[1]),\n        Column('ext', getter=lambda col,row: row[0].filename.endswith('/') and '/' or row[1].ext),\n        Column('size', getter=lambda col,row: row[0].file_size, type=int),\n        Column('compressed_size', type=int, getter=lambda col,row: row[0].compress_size),\n        Column('date_time', type=date,\n               getter=lambda col, row: datetime.datetime(*row[0].date_time)),\n    ]\n    nKeys = 2\n    guide = '''# Zip Sheet\nThis is a list of files contained in the zipfile {sheet.displaySource}.\n\nOnce extracted, files can be loaded with `ENTER`.\n\nCommands:\n\n- `x` to extract current file to current directory\n- `gx` to extract selected files to current directory\n- `zx` to extract current file to a given pathname\n- `gzx`  to extract selected files to given directory\n\n'''\n\n    def openZipFile(self, fp, *args, **kwargs):\n        '''Use VisiData input to handle password-protected zip files.'''\n        try:\n            return fp.open(*args, **kwargs)\n        except RuntimeError as err:\n            if 'password required' in err.args[0]:\n                pwd = vd.input(f'{args[0].filename} is encrypted, enter password: ', display=False)\n                return fp.open(*args, **kwargs, pwd=pwd.encode('utf-8'))\n            vd.exceptionCaught(err)\n\n    def openRow(self, row):\n            fi, zpath = row\n            fp = self.openZipFile(self.zfp, fi)\n            return vd.openSource(Path(fi.filename, fp=fp, filesize=fi.file_size))\n\n    def extract(self, *rows, path=None):\n        path = path or Path('.')\n\n        files = []\n        for row in rows:\n            r, _ = row\n            vd.confirmOverwrite(path/r.filename)  #1452\n            self.extract_async(row, path=path)\n\n    def sysopen_row(self, row):\n        'Extract file in row to tempdir and launch $EDITOR.  Modifications will be discarded.'\n        import tempfile\n        with tempfile.TemporaryDirectory() as tempdir:\n            self.zfp.extract(member=row[0], path=tempdir)\n            vd.launchExternalEditorPath(Path(tempdir)/row[0].filename)\n\n    @asyncthread\n    def extract_async(self, *rows, path=None):\n        'Extract rows to *path*, without confirmation.'\n        for r, _ in Progress(rows):\n            self.zfp.extract(member=r.filename, path=path)\n            vd.status(f'extracted {r.filename}')\n\n    @property\n    def zfp(self):\n        if not self._zfp:\n            if '://' in str(self.source):\n                vd.importExternal('urllib3')\n                unzip_http.warning = vd.warning\n                self._zfp = unzip_http.RemoteZipFile(str(self.source))\n            elif isinstance(self.source, Path):\n                if self.source.has_fp():  #when opening a zip inside tar or zip\n                    fp = self.source.open('rb')\n                else:\n                    fp = self.source\n                self._zfp = zipfile.ZipFile(fp, 'r')\n            else:\n                self._zfp = zipfile.ZipFile(str(self.source), 'r')\n\n        return self._zfp\n\n    def iterload(self):\n        try:\n            for zi in Progress(self.zfp.infolist()):\n                yield [zi, Path(zi.filename)]\n        except Exception as e:\n            vd.fail(f'{e}')\n\n\n#from https://docs.python.org/3/library/tarfile.html#tarfile.REGTYPE\ntarfile_type_names = {\n    tarfile.REGTYPE:\"file\",\n    tarfile.AREGTYPE:\"file\",\n    tarfile.LNKTYPE:\"hard link\",\n    tarfile.SYMTYPE:\"symbolic link\",\n    tarfile.CHRTYPE:\"character device\",\n    tarfile.BLKTYPE:\"block device\",\n    tarfile.DIRTYPE:\"directory\",\n    tarfile.FIFOTYPE:\"FIFO\",\n    tarfile.CONTTYPE:\"contiguous file\",\n    tarfile.GNUTYPE_LONGNAME:\"GNU tar longname\",\n    tarfile.GNUTYPE_LONGLINK:\"GNU tar longlink\",\n    tarfile.GNUTYPE_SPARSE:\"GNU tar sparse file\",\n}\nclass TarSheet(Sheet):\n    'Wrapper for `tarfile` library.'\n    rowtype = 'files' # rowdef TarInfo\n    columns = [\n        ColumnAttr('name'),\n        Column('ext', getter=lambda col,row: row.isdir() and '/' or os.path.splitext(row.name)[1][1:]),\n        ColumnAttr('size', type=int),\n        ColumnAttr('mtime', type=date),\n        Column('type', getter=lambda col, row: tarfile_type_names.get(row.type, 'unknown')),\n        ColumnAttr('mode', type=int),\n        ColumnAttr('uname'),\n        ColumnAttr('gname')\n    ]\n    nKeys=1\n\n    def openRow(self, fi):\n            tfp = tarfile.open(name=str(self.source))\n            return vd.openSource(Path(fi.name, fp=tfp.extractfile(fi), filesize=fi.size))\n\n    def iterload(self):\n        with tarfile.open(name=str(self.source)) as tf:\n            for ti in Progress(tf.getmembers()):\n                yield ti\n\n\nZipSheet.init('_zfp', lambda: None, copy=True)\n\nZipSheet.addCommand('x', 'extract-file', 'extract(cursorRow)', 'extract current file to current directory')\nZipSheet.addCommand('gx', 'extract-selected', 'extract(*onlySelectedRows)', 'extract selected files to current directory')\nZipSheet.addCommand('zx', 'extract-file-to', 'extract(cursorRow, path=inputPath(\"extract to: \"))', 'extract current file to given pathname')\nZipSheet.addCommand('gzx', 'extract-selected-to', 'extract(*onlySelectedRows, path=inputPath(\"extract %d files to: \" % nSelectedRows))', 'extract selected files to given directory')\nZipSheet.addCommand('Ctrl+O', 'sysopen-row', 'sysopen_row(cursorRow)', 'open $EDITOR with current file (modifications will be discarded)')\n\nvd.addMenu(Menu('File', Menu('Extract',\n        Menu('current file', 'extract-file'),\n        Menu('current file to', 'extract-file-to'),\n        Menu('selected files', 'extract-selected'),\n        Menu('selected files to', 'extract-selected-to'),\n    )))\n\nvd.addGlobals({\n    'ZipSheet': ZipSheet,\n    'TarSheet': TarSheet\n})\n"
  },
  {
    "path": "visidata/loaders/arrow.py",
    "content": "from collections import defaultdict\n\nfrom visidata import Sheet, VisiData, TypedWrapper, anytype, date, vlen, Column, vd\n\n\n\n@VisiData.api\ndef open_arrow(vd, p):\n    'Apache Arrow IPC file format'\n    return ArrowSheet(p.base_stem, source=p)\n\n\n@VisiData.api\ndef open_arrows(vd, p):\n    'Apache Arrow IPC streaming format'\n    return ArrowSheet(p.base_stem, source=p)\n\n\ndef arrow_to_vdtype(t):\n    pa = vd.importExternal('pyarrow')\n\n    arrow_to_vd_typemap = {\n        pa.lib.Type_BOOL: bool,\n        pa.lib.Type_UINT8: int,\n        pa.lib.Type_UINT16: int,\n        pa.lib.Type_UINT32: int,\n        pa.lib.Type_UINT64: int,\n        pa.lib.Type_INT8: int,\n        pa.lib.Type_INT16: int,\n        pa.lib.Type_INT32: int,\n        pa.lib.Type_INT64: int,\n        pa.lib.Type_HALF_FLOAT: float,\n        pa.lib.Type_FLOAT: float,\n        pa.lib.Type_DOUBLE: float,\n#            pa.lib.Type_DECIMAL128: Decimal128Scalar,\n#            pa.lib.Type_DECIMAL256: Decimal256Scalar,\n        pa.lib.Type_DATE32: date,\n        pa.lib.Type_DATE64: date,\n        pa.lib.Type_TIME32: date,\n        pa.lib.Type_TIME64: date,\n        pa.lib.Type_TIMESTAMP: date,\n        pa.lib.Type_DURATION: int,\n        pa.lib.Type_BINARY: bytes,\n        pa.lib.Type_LARGE_BINARY: vlen,\n#            pa.lib.Type_FIXED_SIZE_BINARY: bytes,\n#            pa.lib.Type_STRING: str,\n#            pa.lib.Type_LARGE_STRING: vlen,  #2003\n#            pa.lib.Type_LIST: list,\n#            pa.lib.Type_LARGE_LIST: list,\n#            pa.lib.Type_FIXED_SIZE_LIST: list,\n#            pa.lib.Type_STRUCT: dict,\n#            pa.lib.Type_MAP: dict,\n#            pa.lib.Type_DICTIONARY: dict,\n#            pa.lib.Type_SPARSE_UNION: UnionScalar,\n#            pa.lib.Type_DENSE_UNION: UnionScalar,\n    }\n    return arrow_to_vd_typemap.get(t.id, anytype)\n\nclass ArrowSheet(Sheet):\n    def iterload(self):\n        pa = vd.importExternal('pyarrow')\n\n        try:\n            with pa.OSFile(str(self.source), 'rb') as fp:\n                self.coldata = pa.ipc.open_file(fp).read_all()\n        except pa.lib.ArrowInvalid as e:\n            with pa.OSFile(str(self.source), 'rb') as fp:\n                self.coldata = pa.ipc.open_stream(fp).read_all()\n\n        self.columns = []\n        for colnum, col in enumerate(self.coldata):\n            coltype = arrow_to_vdtype(self.coldata.schema.types[colnum])\n            colname = self.coldata.schema.names[colnum]\n\n            self.addColumn(Column(colname, type=coltype, expr=colnum,\n                                  getter=lambda c,r: c.sheet.coldata[c.expr][r[0]].as_py()))\n\n        for rownum in range(max(len(c) for c in self.coldata)):\n            yield [rownum]\n\n\n@VisiData.api\ndef save_arrow(vd, p, sheet, streaming=False):\n    pa = vd.importExternal('pyarrow')\n    np = vd.importExternal('numpy')\n\n    typemap = {\n        anytype: pa.string(),\n        int: pa.int64(),\n        vlen: pa.int64(),\n        float: pa.float64(),\n        str: pa.string(),\n        date: pa.date64(),\n    }\n\n    for t in vd.numericTypes:\n        if t not in typemap:\n            typemap[t] = pa.float64()\n\n    databycol = defaultdict(list)   # col -> [values]\n\n    for typedvals in sheet.iterdispvals(format=False):\n        for col, val in typedvals.items():\n            if isinstance(val, TypedWrapper):\n                val = None\n\n            databycol[col].append(val)\n\n    data = [pa.array(vals, type=typemap.get(col.type, pa.string())) for col, vals in databycol.items()]\n\n    schema = pa.schema([\n        (c.name, typemap.get(c.type, pa.string()))\n            for c in sheet.visibleCols\n    ])\n    with p.open_bytes(mode='w') as outf:\n        if streaming:\n            with pa.ipc.new_stream(outf, schema) as writer:\n                writer.write_batch(pa.record_batch(data, names=[c.name for c in sheet.visibleCols]))\n        else:\n            with pa.ipc.new_file(outf, schema) as writer:\n                writer.write_batch(pa.record_batch(data, names=[c.name for c in sheet.visibleCols]))\n\n\n@VisiData.api\ndef save_arrows(vd, p, sheet):\n    return vd.save_arrow(p, sheet, streaming=True)\n"
  },
  {
    "path": "visidata/loaders/claude.py",
    "content": "'''\nBrowse Claude Code's ~/.claude directory.\n\n    vd ~/.claude\n    vd ~/.claude -f claude\n\nTop-level shows projects, history, settings, etc.\nOpening a project shows sessions.\nOpening a session shows the conversation messages.\n'''\n\nimport json\nfrom datetime import datetime, timezone\n\nfrom visidata import vd, VisiData, Sheet, Column, Path, date, AttrDict\n\n\ndef _ts(s):\n    'Parse ISO timestamp or epoch-ms into datetime.'\n    if not s:\n        return None\n    if isinstance(s, (int, float)):\n        return datetime.fromtimestamp(s / 1000, tz=timezone.utc)\n    try:\n        return datetime.fromisoformat(s.replace('Z', '+00:00'))\n    except Exception:\n        return None\n\n\ndef _content_text(msg):\n    'Extract display text from a message content field.'\n    c = msg.get('content', '') if isinstance(msg, dict) else ''\n    if isinstance(c, str):\n        return c.strip()\n    if isinstance(c, list):\n        parts = []\n        for block in c:\n            if not isinstance(block, dict):\n                continue\n            if block.get('type') == 'text':\n                parts.append(block.get('text', ''))\n            elif block.get('type') == 'tool_use':\n                parts.append(f'[{block.get(\"name\", \"tool\")}]')\n            elif block.get('type') == 'tool_result':\n                parts.append(f'[result]')\n        return ' '.join(parts).strip()\n    return str(c)\n\n\n@VisiData.api\ndef open_claude(vd, p):\n    if p.is_dir():\n        return ClaudeProjectsSheet(p.base_stem, source=p/\"projects\")\n    # single jsonl session file\n    return ClaudeSessionSheet(p.base_stem, source=p)\n\n\n# rowdef: AttrDict with name, path, nsessions\nclass ClaudeProjectsSheet(Sheet):\n    'Browse Claude projects'\n    rowtype = 'projects'\n    columns = [\n        Column('name', getter=lambda c, r: r.name, width=50),\n        Column('sessions', type=int, getter=lambda c, r: r.nsessions),\n    ]\n\n    def iterload(self):\n        for entry in sorted(self.source.iterdir()):\n            if not entry.is_dir():\n                continue\n            nsessions = sum(1 for f in entry.iterdir() if f.name.endswith('.jsonl'))\n            yield AttrDict(name=entry.name, path=entry, nsessions=nsessions)\n\n    def openRow(self, row):\n        return ClaudeSessionsSheet(row.name, source=Path(str(row.path)))\n\n\ndef _session_meta(p):\n    'Read first few lines of a session jsonl to get metadata.'\n    meta = AttrDict(path=p, sessionId=p.stem, timestamp=None, first_msg='', nmsgs=0)\n    try:\n        with open(str(p)) as f:\n            for line in f:\n                obj = json.loads(line)\n                t = obj.get('type')\n                if t in ('user', 'assistant'):\n                    meta.nmsgs += 1\n                    if not meta.timestamp:\n                        meta.timestamp = obj.get('timestamp')\n                    if t == 'user' and not meta.first_msg:\n                        msg = obj.get('message', {})\n                        text = _content_text(msg)\n                        # skip system/command messages\n                        if text and '<command-name>' not in text and '<local-command' not in text:\n                            meta.first_msg = text[:200]\n    except Exception:\n        pass\n    return meta\n\n\n# rowdef: AttrDict from _session_meta\nclass ClaudeSessionsSheet(Sheet):\n    'Browse sessions in a Claude project'\n    rowtype = 'sessions'\n    columns = [\n        Column('session', width=0, getter=lambda c, r: r.sessionId),\n        Column('date', type=date, getter=lambda c, r: _ts(r.timestamp)),\n        Column('messages', type=int, getter=lambda c, r: r.nmsgs),\n        Column('first_message', width=80, getter=lambda c, r: r.first_msg),\n    ]\n\n    def iterload(self):\n        for entry in sorted(self.source.iterdir()):\n            if entry.name.endswith('.jsonl'):\n                yield _session_meta(entry)\n\n    def openRow(self, row):\n        return ClaudeSessionSheet(row.sessionId, source=Path(str(row.path)))\n\n\n# rowdef: AttrDict with type, role, timestamp, content, raw\nclass ClaudeSessionSheet(Sheet):\n    'Browse messages in a Claude session'\n    rowtype = 'messages'\n    columns = [\n        Column('type', getter=lambda c, r: r.type, width=10),\n        Column('role', getter=lambda c, r: r.role, width=0),\n        Column('timestamp', type=date, width=0, getter=lambda c, r: _ts(r.timestamp)),\n        Column('content', getter=lambda c, r: r.content)\n    ]\n\n    def iterload(self):\n        with open(str(self.source)) as f:\n            for line in f:\n                obj = json.loads(line)\n                t = obj.get('type', '')\n                msg = obj.get('message', {})\n                role = msg.get('role', '') if isinstance(msg, dict) else ''\n                content = _content_text(msg) if isinstance(msg, dict) else ''\n                yield AttrDict(\n                    type=t,\n                    role=role,\n                    timestamp=obj.get('timestamp'),\n                    content=content,\n                    raw=obj,\n                )\n\n\nvd.addGlobals(\n    ClaudeProjectsSheet=ClaudeProjectsSheet,\n    ClaudeSessionsSheet=ClaudeSessionsSheet,\n    ClaudeSessionSheet=ClaudeSessionSheet,\n)\n"
  },
  {
    "path": "visidata/loaders/conll.py",
    "content": "__author__ = \"Paul McCann <polm@dampfkraft.com>\"\n\nfrom visidata import vd, VisiData, TableSheet, ItemColumn\n\n@VisiData.api\ndef open_conll(vd, p):\n    return ConllSheet(p.base_stem, source=p)\n\n\n@VisiData.api\ndef open_conllu(vd, p):\n    return ConllSheet(p.base_stem, source=p)\n\n\nclass ConllSheet(TableSheet):\n    rowtype='tokens'\n    # see here for reference:\n    # https://universaldependencies.org/format.html\n    columns=[\n        # Usually an integer, but can be prefixed like \"dev-s1\"\n        ItemColumn('sent_id', 0, type=str),\n        # token ID is almost always an integer, but can be technically be a decimal between 0 and 1.\n        # starts from 1 for each sentence.\n        ItemColumn('token_id', 1, type=int),\n        # form from the raw input, aka surface\n        ItemColumn('form', 2, type=str),\n        ItemColumn('lemma', 3, type=str),\n        ItemColumn('upos', 4, type=str),\n        ItemColumn('xpos', 5, type=str),\n        ItemColumn('feats', 6, type=dict),\n        ItemColumn('head', 7, type=int),\n        ItemColumn('deprel', 8, type=str),\n        # possibly list of pairs, but often? unused\n        ItemColumn('deps', 9),\n        # empty or a dictionary\n        ItemColumn('misc', 10, type=dict),\n    ]\n    def iterload(self):\n        # relied on official pyconll guidance for migrating v3 to v4\n        # https://pyconll.readthedocs.io/en/stable/migration.html\n        pyconll = vd.importExternal('pyconll')\n        try: #succeeds for pyconll version >= 4\n            import pyconll.conllu\n            v4 = True\n        except ModuleNotFoundError:\n            v4 = False\n\n        # sent_id + token_id will be unique\n        self.setKeys([self.columns[0], self.columns[1]])\n        if v4:\n            conllu = pyconll.conllu.conllu\n            for sent in conllu.iter_from_file(self.source.given):\n                for token in sent.tokens:\n                    yield [sent.meta['sent_id'], token.id, token.form, token.lemma, token.upos,\n                            token.xpos, token.feats, token.head, token.deprel, token.deps, token.misc]\n        else:\n            with self.source.open(encoding='utf-8') as fp:\n                for sent in pyconll.load.iter_sentences(fp):\n                    sent_id = sent.id\n                    for token in sent:\n                        yield [sent_id, token.id, token._form, token.lemma, token.upos,\n                                token.xpos, token.feats, token.head, token.deprel, token.deps, token.misc]\n"
  },
  {
    "path": "visidata/loaders/csv.py",
    "content": "from visidata import vd, VisiData, SequenceSheet, options, stacktrace\nfrom visidata import TypedExceptionWrapper, Progress\n\nvd.option('csv_dialect', 'excel', 'dialect passed to csv.reader', replay=True)\nvd.option('csv_delimiter', ',', 'delimiter passed to csv.reader', replay=True)\nvd.option('csv_doublequote', True, 'quote-doubling setting passed to csv.reader', replay=True)\nvd.option('csv_quotechar', '\"', 'quotechar passed to csv.reader', replay=True)\nvd.option('csv_quoting', 0, 'quoting style passed to csv.reader and csv.writer', replay=True)\nvd.option('csv_skipinitialspace', True, 'skipinitialspace passed to csv.reader', replay=True)\nvd.option('csv_escapechar', None, 'escapechar passed to csv.reader', replay=True)\nvd.option('csv_lineterminator', '\\r\\n', 'lineterminator passed to csv.writer', replay=True)\nvd.option('safety_first', False, 'sanitize input/output to handle edge cases, with a performance cost', replay=True)\n\n\n@VisiData.api\ndef guess_csv_delimiter(vd, p):\n    'If csv_delimiter option has been modified from default, assume CSV format.'\n    \n    if vd.options.csv_delimiter != vd.options.getdefault('csv_delimiter'):\n        return dict(filetype='csv', _likelihood=2)\n\n@VisiData.api\ndef guess_csv(vd, p):\n    import csv\n    csv.field_size_limit(2**31-1)  #288 Windows has max 32-bit\n    try:\n        line = next(p.open())\n    except StopIteration:\n        return\n    if ',' in line:\n        dialect = csv.Sniffer().sniff(line)\n        r = dict(filetype='csv', _likelihood=0)\n\n        for csvopt in dir(dialect):\n            if not csvopt.startswith('_'):\n                v = getattr(dialect, csvopt)\n                optname = 'csv_'+csvopt\n                r[optname] = v\n                if vd.options.get(optname) != v:\n                    vd.warning(f'guessed option {optname}={v}')\n\n        return r\n\n@VisiData.api\ndef open_csv(vd, p):\n    return CsvSheet(p.base_stem, source=p)\n\ndef removeNulls(fp):\n    for line in fp:\n        yield line.replace('\\0', '')\n\nclass CsvSheet(SequenceSheet):\n    _rowtype = list  # rowdef: list of values\n\n    def iterload(self):\n        'Convert from CSV, first handling header row specially.'\n        import csv\n        csv.field_size_limit(2**31-1)  #288 Windows has max 32-bit\n\n        csv_opts = self.source.options.getall('csv_')\n        # -d (generic delimiter) overrides csv_delimiter if csv_delimiter wasn't explicitly set  #2727\n        if self.source.options.delimiter != self.source.options.getdefault('delimiter'):\n            if csv_opts['delimiter'] == self.source.options.getdefault('csv_delimiter'):\n                csv_opts['delimiter'] = self.source.options.delimiter\n\n        with self.open_text_source(newline='') as fp:\n            if self.options.safety_first:\n                rdr = csv.reader(removeNulls(fp), **csv_opts)\n            else:\n                rdr = csv.reader(fp, **csv_opts)\n\n            while True:\n                try:\n                    yield next(rdr)\n                except csv.Error as e:\n                    e.stacktrace=stacktrace()\n                    yield [TypedExceptionWrapper(None, exception=e)]\n                except StopIteration:\n                    return\n\n\n@VisiData.api\ndef save_csv(vd, p, sheet):\n    'Save as single CSV file, handling column names as first line.'\n    import csv\n    csv.field_size_limit(2**31-1)  #288 Windows has max 32-bit\n\n    csv_opts = p.options.getall('csv_')\n    # -d (generic delimiter) overrides csv_delimiter if csv_delimiter wasn't explicitly set  #2727\n    if p.options.delimiter != p.options.getdefault('delimiter'):\n        if csv_opts['delimiter'] == p.options.getdefault('csv_delimiter'):\n            csv_opts['delimiter'] = p.options.delimiter\n\n    with p.open(mode='w', encoding=sheet.options.save_encoding, newline='') as fp:\n        cw = csv.writer(fp, **csv_opts)\n        colnames = [col.name for col in sheet.visibleCols]\n        if ''.join(colnames):\n            cw.writerow(colnames)\n\n        with Progress(gerund='saving', total=sheet.nRows) as prog:\n            for dispvals in sheet.iterdispvals(format=True):\n                cw.writerow(dispvals.values())\n                prog.addProgress(1)\n\nvd.addGlobals({\n    'CsvSheet': CsvSheet\n})\n"
  },
  {
    "path": "visidata/loaders/eml.py",
    "content": "import os\n\nfrom visidata import VisiData, vd, Column, TableSheet, vlen\n\n@VisiData.api\ndef open_eml(vd, p):\n    return EmailSheet(p.base_stem, source=p)\n\nVisiData.open_mhtml = VisiData.open_eml\n\nclass EmailSheet(TableSheet):\n    rowtype = 'parts'  # rowdef: sub-Messages\n    columns = [\n        Column('filename', getter=lambda c,r: r.get_filename()),\n        Column('content_type', getter=lambda c,r: r.get_content_type()),\n        Column('payload', type=vlen, getter=lambda c,r: r.get_payload(decode=False)),\n    ]\n    def iterload(self):\n        import email.parser\n        parser = email.parser.Parser()\n        with self.source.open(encoding='utf-8') as fp:\n            yield from parser.parse(fp).walk()\n\n@EmailSheet.api\ndef extract_part(sheet, givenpath, part):\n    payload = part.get_payload(decode=True)\n    if payload is None:\n        vd.warning('empty payload')\n    else:\n        with givenpath.open_bytes(mode='w') as fp:\n            fp.write(payload)\n\n@EmailSheet.api\ndef extract_parts(sheet, givenpath, *parts):\n    'Save all *parts* to Path *givenpath*.'\n    vd.confirmOverwrite(givenpath, f'{givenpath} already exists, extract anyway?')\n\n    vd.status('saving %s parts to %s' % (len(parts), givenpath.given))\n\n    # forcibly specify save individual files into directory by ending path with /\n    if givenpath.is_dir() or givenpath.given.endswith('/') or len(parts) > 1:\n        # save as individual files in the givenpath directory\n        try:\n            os.makedirs(givenpath, exist_ok=True)\n        except FileExistsError:\n            vd.debug(f'{givenpath} already exists')\n\n        for i, part in enumerate(parts):\n            fn = part.get_filename() or f'part{i}'\n            vd.execAsync(sheet.extract_part, givenpath / fn, part)\n    elif len(parts) == 1:\n        vd.execAsync(sheet.extract_part, givenpath, parts[0])\n    else:\n        vd.fail('cannot save multiple parts to non-dir')\n\nEmailSheet.addCommand('x', 'extract-part', 'extract_part(inputPath(\"save part as: \", value=cursorRow.get_filename()), cursorRow)')\nEmailSheet.addCommand('gx', 'extract-part-selected', 'extract_parts(inputPath(\"save %d parts in: \" % nSelectedRows), *selectedRows)')\n"
  },
  {
    "path": "visidata/loaders/f5log.py",
    "content": "'''\nThis plugin supports the default log format for:\n\n        /var/log/ltm*\n        /var/log/gtm*\n        /var/log/apm*\n        /var/log/audit*\n\nIt extracts common log entries, particularly around monitoring, iRules and configuration change audits. It tries to extract data into common fields to assist rapid filtering.\n\nf5log_object_regex provides a simple way to perform a regex on an object name extracted by a splitter and get extra columns out of it. This is very useful when objectnames have a structure. Simply use named groups in your regex to get named columns out.\n\nRegex: (?:/Common/)(?P<site>[^-]+)-(?P<vstype>[^-]+)-(?P<application>[^-]+)\n\n/Common/newyork-www-banking1\n\n... | site    | vstype | application | ...\n... | newyork | www    | banking1   | ...\n\nAdding to .visidatarc\n\necho 'visidata.vd.options.set(\"f5log_object_regex\", r\"(?:/Common/)(?P<site>[^-]+)-(?P<vstype>[^-]+)-(?P<application>[^-]+)\", obj=\"global\")' > ~/.visidatarc\n'''\n\n__author__ = \"James Deucker <me@bitwisecook.org>\"\n__version__ = \"1.0.10\"\n\nfrom datetime import datetime, timedelta\nfrom ipaddress import ip_address\n\nimport re\nimport traceback\nfrom typing import Any, Dict, Optional\n\nfrom visidata import Path, VisiData, Sheet, date, AttrColumn, vd, Column, CellColorizer, RowColorizer\n\n\nclass hexint(int):\n    def __new__(cls, value, *args, **kwargs):\n        return super(cls, cls).__new__(cls, value, base=16)\n\n    def __str__(self):\n        return hex(self)\n\n\nclass delta_t(int):\n    def __new__(cls, value, *args, **kwargs):\n        return super(cls, cls).__new__(cls, value, base=10)\n\n\nvd.addType(hexint, icon=\"ⓧ\", formatter=lambda fmt, num: str(num))\nvd.addType(\n    delta_t,\n    icon=\"⇥\",\n    formatter=lambda fmt, delta: str(timedelta(seconds=delta)),\n)\nvd.theme_option(\"color_f5log_mon_up\", \"green\", \"color of f5log monitor status up\")\nvd.theme_option(\"color_f5log_mon_down\", \"red\", \"color of f5log monitor status down\")\nvd.theme_option(\"color_f5log_mon_unknown\", \"blue\", \"color of f5log monitor status unknown\")\nvd.theme_option(\"color_f5log_mon_checking\", \"magenta\", \"color of monitor status checking\")\nvd.theme_option(\"color_f5log_mon_disabled\", \"black\", \"color of monitor status disabled\")\nvd.theme_option(\"color_f5log_logid_alarm\", \"red\", \"color of alarms\")\nvd.theme_option(\"color_f5log_logid_warn\", \"yellow\", \"color of warnings\")\nvd.theme_option(\"color_f5log_logid_notice\", \"cyan\", \"color of notice\")\nvd.theme_option(\"color_f5log_logid_info\", \"green\", \"color of info\")\nvd.option(\n    \"f5log_object_regex\",\n    None,\n    \"A regex to perform on the object name, useful where object names have a structure to extract. Use the (?P<foo>...) named groups form to get column names.\",\n    help='regex'\n)\nvd.option(\n    \"f5log_log_year\",\n    None,\n    \"Override the default year used for log parsing. Use all four digits of the year (e.g., 2022). By default (None) use the year from the ctime of the file, or failing that the current year.\",\n)\nvd.option(\n    \"f5log_log_timezone\",\n    \"UTC\",\n    \"The timezone the source file is in, by default UTC.\",\n)\n\n\nclass F5LogSheet(Sheet):\n    class F5LogRow:\n        def __init__(\n            self,\n            msg: str = None,\n            timestamp: datetime = None,\n            host: str = None,\n            level: str = None,\n            process: str = None,\n            proc_pid: int = None,\n            logid1: hexint = None,\n            logid2: hexint = None,\n            message: str = None,\n            kv: Optional[Dict[str, Any]] = None,\n            **kwargs,\n        ):\n            self._data = {\n                \"msg\": msg,\n                \"timestamp\": timestamp,\n                \"host\": host,\n                \"level\": level,\n                \"process\": process,\n                \"proc_pid\": proc_pid,\n                \"logid1\": logid1,\n                \"logid2\": logid2,\n                \"message\": message,\n                \"kv\": kv,\n                **kwargs,\n            }\n\n        def __getattr__(self, item):\n            return self._data.get(\n                item, self._data[\"kv\"].get(item) if self._data[\"kv\"] else None\n            )\n\n    # strptime is slow so we need to parse manually\n    _months = {\n        \"Jan\": 1,\n        \"Feb\": 2,\n        \"Mar\": 3,\n        \"Apr\": 4,\n        \"May\": 5,\n        \"Jun\": 6,\n        \"Jul\": 7,\n        \"Aug\": 8,\n        \"Sep\": 9,\n        \"Oct\": 10,\n        \"Nov\": 11,\n        \"Dec\": 12,\n    }\n\n    _proto = {\n        6: \"tcp\",\n        17: \"udp\",\n        132: \"sctp\",\n    }\n\n    rowtype = \"logs\"\n\n    columns = [\n        AttrColumn(\"rawmsg\", type=str, width=0),\n        AttrColumn(\"timestamp\", type=date),\n        AttrColumn(\"host\", type=str),\n        AttrColumn(\"level\", type=str),\n        AttrColumn(\"process\", type=str, width=10),\n        AttrColumn(\"proc_pid\", type=int, width=7),\n        AttrColumn(\"logid1\", type=hexint),\n        AttrColumn(\"logid2\", type=hexint),\n        AttrColumn(\"message\", type=str, width=90),\n        AttrColumn(\"object\", type=str, width=50),\n    ]\n\n    re_f5log = re.compile(\n        r\"^(?:(?:audit|gtm|ltm|security|tmm|user|\\<\\d+\\>)\\s+)?(?:(?P<date1>[A-Z][a-z]{2}\\s+\\d{1,2}\\s+\\d{2}:\\d{2}:\\d{2})|(?P<date2>\\d+-\\d+-\\d+T\\d+:\\d+:\\d+[+-]\\d+:\\d+)|(?P<date3>\\d+-\\d+\\s\\d{2}:\\d{2}:\\d{2}))\\s+(?P<host>\\S+)\\s+(?:(?P<level>\\S+)\\s+(?:(?P<process>[a-z0-9_()-]+\\s?)\\[(?P<pid>\\d+)\\]:\\s+)?(?:(?P<logid1>[0-9a-f]{8}):(?P<logid2>[0-9a-f]):\\s+)?)?(?P<message>.*)$\"\n    )\n    re_ltm_irule = re.compile(\n        r\"(?:(?P<irule_msg>TCL\\serror|Rule|Pending\\srule):?\\s(?P<irule>\\S+)\\s\\<(?P<event>[A-Z_0-9]+)\\>(?:\\s-\\s|:\\s|\\s)?)(?P<message>aborted\\sfor\\s(?P<srchost>\\S+)\\s->\\s(?P<dsthost>\\S+)|.*)\"\n    )\n    re_ltm_pool_mon_status_msg = re.compile(\n        r\"^(Pool|Node)\\s(?P<poolobj>\\S+)\\s(member|address)\\s(?P<poolmemberobj>\\S+)\\smonitor\\sstatus\\s(?P<newstatus>.+)\\.\\s\\[\\s(?:(?:(?:(?P<monitorobj>\\S+):\\s(?P<monitorstatus>\\w+)(?:;\\slast\\serror:\\s\\S*\\s?(?P<lasterr>[^\\]]*))?)?(?:,\\s)?)+)?\\s]\\s*(?:\\[\\swas\\s(?P<prevstatus>.+)\\sfor\\s(?P<durationhr>-?\\d+)hrs?:(?P<durationmin>-?\\d+)mins?:(?P<durationsec>-?\\d+)sec\\s\\])?$\"\n    )\n    re_ltm_ip_msg = re.compile(\n        r\"(?:.*?)(?P<ip1>\\d+\\.\\d+\\.\\d+\\.\\d+)(?:[:.](?P<port1>\\d+))?(?:(?:\\s->\\s|:)(?P<ip2>\\d+\\.\\d+\\.\\d+\\.\\d+)(?:[:.](?P<port2>\\d+))?)?(?:\\smonitor\\sstatus\\s(?P<mon_status>\\w+)\\.\\s\\[[^]]+\\]\\s+\\[\\swas\\s(?P<prev_status>\\w+)\\sfor\\s((?P<durationhr>-?\\d+)hrs?:(?P<durationmin>-?\\d+)mins?:(?P<durationsec>-?\\d+)secs?)\\s\\]|\\.?(?:.*))\"\n    )\n    re_ltm_conn_error = re.compile(\n        r\"^(?:\\(null\\sconnflow\\):\\s)?Connection\\serror:\\s(?P<func>[^:]+):(?P<funcloc>[^:]+):\\s(?P<error>.*)\\s?\\((?P<errno>\\d+)\\)(?:\\s(?P<errormsg>.*))$\"\n    )\n    re_ltm_cert_expiry = re.compile(\n        r\"Certificate\\s'(?P<cert_cn>.*)'\\sin\\sfile\\s(?P<file>\\S+)\\s(?P<message>will\\sexpire|expired)\\son\\s(?P<date1>[A-Z][a-z]{2}\\s+\\d{1,2}\\s+\\d{2}:\\d{2}:\\d{2}\\s\\d+\\s\\S+)\"\n    )\n    re_gtm_monitor = re.compile(\n        r\"^(?:SNMP_TRAP:\\s)?(?P<objtype>VS|Pool|Monitor|Wide\\sIP|Server|Data\\scenter|Prober\\sPool|Box)\\s\\(?(?P<object>\\S+?)\\)?\\s(?:member\\s\\(?(?P<pool_member>\\S+?)\\)?\\s)?(?:\\(ip(?::port)?=(?P<ipport>[^\\)]+)\\)\\s)?(?:\\(Server\\s(?P<server>[^\\)]+)\\)\\s)?(?:state\\schange\\s)?(?:(?P<prev_status>\\w+)\\s-->\\s)?(?P<new_status>\\w+)(?:(?:\\s\\(\\s?)(?P<msg>(?:(?P<type>\\w+)\\s(?P<monitor_object>\\S+)\\s:\\s)?state:\\s(?P<state>\\S+)|.*)\\))?$\"\n    )\n    re_gtm_monitor_instance = re.compile(\n        r\"^Monitor\\sinstance\\s(?P<object>\\S+)\\s(?P<monip>\\S+)\\s(?P<prevstatus>\\S+)\\s-->\\s(?P<newstatus>\\S+)\\sfrom\\s(?P<srcgtm>\\S+)\\s\\((?:state:?\\s)?(?P<state>.*)\\)$\"\n    )\n    re_ltm_poolnode_abled = re.compile(\n        r\"^(?P<objtype>Pool|Node|Monitor)\\s(?P<object>\\S+)\\s(?:address|member|instance)\\s(?P<member>\\S+)\\s(session\\sstatus|has\\sbeen)\\s(?P<status>.+)\\.$\"\n    )\n    re_ltm_no_shared_ciphers = re.compile(\n        r\"^(?P<msg>No\\sshared\\sciphers\\sbetween\\sSSL\\speers)\\s(?P<srchost>\\d+\\.\\d+\\.\\d+\\.\\d+|[0-9a-f:]+)\\.(?P<srcport>\\d+)\\:(?P<dsthost>\\d+\\.\\d+\\.\\d+\\.\\d+|[0-9a-f:]+)\\.(?P<dstport>\\d+)\\.$\"\n    )\n    re_ltm_http_process_state = re.compile(\n        r\"^http_process_state_(?P<httpstate>\\S+)\\s-\\sInvalid\\saction:0x(?P<actionid>[a-f0-9]+)\\s(?P<msg>.*?)\\s*(?P<sidea>(?:server|client)side)\\s\\((?P<src>\\S+)\\s->\\s(?P<vsdst>\\S+)\\)\\s+(?:(?P<sideb>(?:server|client)side)\\s)?(?:\\((?P<poolsrc>\\S+)\\s->\\s(?P<dst>\\S+)\\)|\\(\\(null\\sconnflow\\)\\))\\s\\((?P<sideaa>\\S+)\\sside:\\svip=(?P<vs>\\S+)\\sprofile=(?P<profile>\\S+)\\s(?:pool=(?P<pool>\\S+)\\s)?(?P<sideaaa>\\S+)_ip=(?P<sideasrc>\\S+)\\)$\"\n    )\n    re_ltm_http_header_exceeded = re.compile(\n        r\"^(?P<msg>HTTP\\sheader\\s(?:count|\\((?P<size>\\d+)\\))\\sexceeded\\smaximum\\sallowed\\s(?P<type>count|size)\\sof\\s(?P<limit>\\d+))\\s\\((?P<side>\\S+)\\sside:\\svip=(?P<object>\\S+)\\sprofile=(?P<profile>\\S+)\\spool=(?P<pool>\\S+)\\s(?P<sideip>client|server)_ip=(?P<sidehost>.*)\\)$\"\n    )\n\n    f5log_mon_colors = {\n        (\"monitor_status\", \"down\"): \"color_f5log_mon_down\",\n        (\"monitor_status\", \"up\"): \"color_f5log_mon_up\",\n        (\"monitor_status\", \"enabled\"): \"color_f5log_mon_up\",\n        (\"monitor_status\", \"forced disabled\"): \"color_f5log_mon_disabled\",\n        (\"monitor_status\", \"node disabled\"): \"color_f5log_mon_disabled\",\n        (\"monitor_status\", \"checking\"): \"color_f5log_mon_checking\",\n        (\"new_status\", \"available\"): \"color_f5log_mon_up\",\n        (\"new_status\", \"unavailable\"): \"color_f5log_mon_down\",\n        (\"new_status\", \"up\"): \"color_f5log_mon_up\",\n        (\"new_status\", \"down\"): \"color_f5log_mon_down\",\n        (\"new_status\", \"green\"): \"color_f5log_mon_up\",\n        (\"new_status\", \"red\"): \"color_f5log_mon_down\",\n        (\"new_status\", \"now has available members\"): \"color_f5log_mon_up\",\n        (\"new_status\", \"no members available\"): \"color_f5log_mon_down\",\n        (\"new_status\", \"blue\"): \"color_f5log_mon_unknown\",\n        (\"new_status\", \"checking\"): \"color_f5log_mon_checking\",\n        (\"new_status\", \"unchecked\"): \"color_f5log_mon_unknown\",\n        (\"new_status\", \"node down\"): \"color_f5log_mon_disabled\",\n        (\"new_status\", \"forced down\"): \"color_f5log_mon_disabled\",\n        (\"new_status\", \"disabled\"): \"color_f5log_mon_disabled\",\n        (\"prev_status\", \"available\"): \"color_f5log_mon_up\",\n        (\"prev_status\", \"unavailable\"): \"color_f5log_mon_down\",\n        (\"prev_status\", \"up\"): \"color_f5log_mon_up\",\n        (\"prev_status\", \"down\"): \"color_f5log_mon_down\",\n        (\"prev_status\", \"green\"): \"color_f5log_mon_up\",\n        (\"prev_status\", \"red\"): \"color_f5log_mon_down\",\n        (\"prev_status\", \"now has available members\"): \"color_f5log_mon_up\",\n        (\"prev_status\", \"no members available\"): \"color_f5log_mon_down\",\n        (\"prev_status\", \"blue\"): \"color_f5log_mon_unknown\",\n        (\"prev_status\", \"checking\"): \"color_f5log_mon_checking\",\n        (\"prev_status\", \"unchecked\"): \"color_f5log_mon_unknown\",\n        (\"prev_status\", \"node down\"): \"color_f5log_mon_disabled\",\n        (\"prev_status\", \"forced down\"): \"color_f5log_mon_disabled\",\n        (\"prev_status\", \"disabled\"): \"color_f5log_mon_disabled\",\n    }\n\n    def colorizeMonitors(sheet, col: Column, row: F5LogRow, value):\n        if row is None or col is None:\n            return None\n        return sheet.f5log_mon_colors.get((col.name, value.value), None)\n\n    f5log_warn_logid = {\n        \"01010013\": \"color_f5log_logid_notice\",\n        \"01010029\": \"color_f5log_logid_warn\",\n        \"01010038\": \"color_f5log_logid_warn\",\n        \"01010201\": \"color_f5log_logid_warn\",\n        \"01010281\": \"color_f5log_logid_warn\",\n        \"01070333\": \"color_f5log_logid_warn\",\n        \"01070596\": \"color_f5log_logid_alarm\",\n        \"010c0018\": \"color_f5log_logid_warn\",\n        \"010c0019\": \"color_f5log_logid_info\",\n        \"010c003e\": \"color_f5log_logid_alarm\",\n        \"010c003f\": \"color_f5log_logid_alarm\",\n        \"010c0044\": \"color_f5log_logid_warn\",\n        \"010c0052\": \"color_f5log_logid_warn\",\n        \"010c0053\": \"color_f5log_logid_info\",\n        \"010c0054\": \"color_f5log_logid_alarm\",\n        \"010c0055\": \"color_f5log_logid_alarm\",\n        \"010c0057\": \"color_f5log_logid_info\",\n        \"010e0001\": \"color_f5log_logid_alarm\",\n        \"010e0004\": \"color_f5log_logid_alarm\",\n        \"01340011\": \"color_f5log_logid_warn\",\n        \"01390002\": \"color_f5log_logid_notice\",\n        \"01140029\": \"color_f5log_logid_alarm\",\n        \"01140030\": \"color_f5log_logid_warn\",\n        \"01140045\": \"color_f5log_logid_alarm\",\n        \"01190004\": \"color_f5log_logid_alarm\",\n        \"011ae0f3\": \"color_f5log_logid_alarm\",\n        \"011e0002\": \"color_f5log_logid_alarm\",\n        \"011e0003\": \"color_f5log_logid_alarm\",\n        \"011f0005\": \"color_f5log_logid_warn\",\n        \"014f0004\": \"color_f5log_logid_warn\",\n    }\n\n    def colorizeRows(sheet, col: Column, row: F5LogRow, value):\n        if row is None or col is None:\n            return None\n        if (\n            row.logid1 is None\n            and row.message is not None\n            and row.message.startswith(\"boot_marker\")\n        ):\n            return \"color_f5log_logid_notice\"\n        return sheet.f5log_warn_logid.get(row.logid1, None)\n\n    @staticmethod\n    def split_audit_bigip_tmsh_audit(msg):\n        # skip 'AUDIT - ' at the start of the line\n        e = msg[8:].split(\"=\", maxsplit=6)\n\n        for ee, ne in zip(e, e[1:]):\n            yield {ee[ee.rfind(\" \") + 1 :]: ne[: ne.rfind(\" \")]}\n\n    @staticmethod\n    def split_audit_scriptd_run_script(msg):\n        # skip 'AUDIT - ' at the start of the line\n        e = msg[8:].split(\"=\")\n\n        for ee, ne in zip(e, e[1:]):\n            yield {ee[ee.rfind(\" \") + 1 :]: ne[: ne.rfind(\" \")].strip('\"')}\n\n    @staticmethod\n    def split_audit_mcpd_mcp_error(msg):\n        # skip 'AUDIT - ' at the start of the line\n        # skip the status at the end of the line\n        msg = msg[8:]\n        status = None\n        status_loc = msg.rfind(\"[Status=\")\n        if status_loc >= 0:\n            status = msg[status_loc + 1 : -1]\n            msg = msg[: status_loc - 1]\n            yield {\n                \"status\": status.split(\"=\", maxsplit=1)[1],\n            }\n        # we need to get one word back from the first opening curly\n        # find the curly\n        cmd_data_loc = msg.find(\" { \")\n        if cmd_data_loc >= 0:\n            # get the cmd_data\n            cmd_data = msg[cmd_data_loc + 1 :]\n            # split the message and the command\n            msg, cmd = msg[:cmd_data_loc].rsplit(\" \", maxsplit=1)\n            # strip off the trailing \" -\" from the message\n            msg = msg[:-2]\n            object = cmd_data.split('\"', maxsplit=2)\n            if len(object) == 3:\n                yield {\"object\": object[1]}\n            yield {\n                \"command\": cmd,\n                \"cmd_data\": cmd_data,\n            }\n\n        e = msg.split(\" - \")\n\n        for ee in e[0].split(\",\"):\n            ee = ee.strip().split(\" \")\n            # yield the kvs in the first bit split on ,\n            if ee[0].startswith(\"tmsh-pid-\"):\n                # of course tmsh-pid- is different\n                yield {ee[0][: ee[0].rfind(\"-\")]: int(ee[0][ee[0].rfind(\"-\") + 1 :])}\n            elif len(ee) == 1:\n                yield {ee[0]: None}\n            else:\n                yield {ee[0]: ee[1]}\n\n        for ee in e[1:]:\n            ee = ee.strip().split(\" \", maxsplit=1)\n            if ee[0] == \"transaction\":\n                yield {\"transaction\": int(ee[1][1:].split(\"-\")[0])}\n                yield {\"transaction_step\": int(ee[1][1:].split(\"-\")[1])}\n            elif ee[0] == \"object\":\n                yield {\"object_id\": ee[1]}\n            else:\n                # yield the rest of the kvs\n                try:\n                    yield {ee[0]: ee[1]}\n                except IndexError:\n                    yield {ee[0]: None}\n\n    @staticmethod\n    def split_ltm_pool_mon_status(msg):\n        m = F5LogSheet.re_ltm_pool_mon_status_msg.match(msg)\n        if m is None:\n            return\n        m = m.groupdict()\n        if m.get(\"durationhr\") and m.get(\"durationmin\") and m.get(\"durationsec\"):\n            duration = timedelta(\n                hours=int(m.get(\"durationhr\")),\n                minutes=int(m.get(\"durationmin\")),\n                seconds=int(m.get(\"durationsec\")),\n            ).total_seconds()\n        else:\n            duration = None\n        dst = m.get(\"poolmemberobj\")\n        if dst:\n            dst = dst.split(\"/\")[-1]\n            if \".\" in dst and len(dst.split(\":\")) == 2:\n                # ipv4\n                dsthost, dstport = dst.split(\":\")\n            elif \".\" in dst and len(dst.split(\":\")) == 1:\n                # ipv4\n                dsthost, dstport = dst, None\n            else:\n                # ipv6\n                dsthost, dstport = dst.rsplit(\":\", maxsplit=1)\n            try:\n                # see if it's an IP and if so parse it\n                dsthost = ip_address(dsthost)\n            except ValueError:\n                dsthost = None\n            try:\n                # see if it's a port number and if so parse it\n                dstport = int(dstport)\n            except (ValueError, TypeError):\n                dstport = None\n        else:\n            dsthost, dstport = None, None\n        yield {\n            \"object\": m.get(\"poolobj\"),\n            \"objtype\": \"pool\",\n            \"pool_member\": m.get(\"poolmemberobj\"),\n            \"monitor\": m.get(\"monitorobj\"),\n            \"dsthost\": dsthost,\n            \"dstport\": dstport,\n            \"monitor_status\": m.get(\"monitorstatus\"),\n            \"new_status\": m.get(\"newstatus\"),\n            \"prev_status\": m.get(\"prevstatus\"),\n            \"last_error\": m.get(\"lasterr\"),\n            \"duration_s\": duration,\n        }\n\n    @staticmethod\n    def split_ltm_poolnode_mon_abled(msg):\n        m = F5LogSheet.re_ltm_poolnode_abled.match(msg)\n        if m is None:\n            return\n        m = m.groupdict()\n        yield {\n            \"object\": m.get(\"object\"),\n            \"objtype\": m.get(\"objtype\").lower(),\n            \"pool_member\": m.get(\"member\"),\n            \"monitor_status\": m.get(\"status\"),\n        }\n\n    @staticmethod\n    def split_ltm_pool_has_no_avail_mem(msg):\n        yield {\n            \"object\": msg.split(\" \")[-1],\n            \"objtype\": \"pool\",\n            \"new_status\": \"no members available\",\n            \"prev_status\": None,\n        }\n\n    @staticmethod\n    def split_ltm_pool_has_avail_mem(msg):\n        yield {\n            \"object\": msg.split(\" \")[1],\n            \"objtype\": \"pool\",\n            \"new_status\": \"now has available members\",\n            \"prev_status\": None,\n        }\n\n    @staticmethod\n    def split_ltm_rule(msg):\n        m = F5LogSheet.re_ltm_irule.match(msg)\n        if m is None:\n            return\n        m = m.groupdict()\n        yield {\n            \"object\": m.get(\"irule\"),\n            \"objtype\": \"rule\",\n            \"irule_event\": m.get(\"event\"),\n            \"irule_msg\": m.get(\"irule_msg\"),\n            \"msg\": m.get(\"message\"),\n        }\n        if m.get(\"message\", \"\").startswith(\"aborted for\"):\n            src = m.get(\"srchost\")\n            if src and len(src.split(\":\")) == 2:\n                # ipv4\n                srchost, srcport = src.split(\":\")\n            else:\n                # ipv6\n                srchost, srcport = src.split(\".\")\n            dst = m.get(\"dsthost\")\n            if dst and len(dst.split(\":\")) == 2:\n                # ipv4\n                dsthost, dstport = dst.split(\":\")\n            else:\n                # ipv6\n                dsthost, dstport = dst.split(\".\")\n            yield {\n                \"srchost\": ip_address(srchost),\n                \"srcport\": int(srcport),\n                \"dsthost\": ip_address(dsthost),\n                \"dstport\": int(dstport),\n            }\n\n    @staticmethod\n    def split_ltm_rule_missing_datagroup(msg):\n        if \"error: Unable to find value_list\" in msg:\n            m = msg.split(\" \", maxsplit=12)\n            yield {\n                \"object\": m[1].strip(\"[\").strip(\"]\"),\n                \"objtype\": \"rule\",\n                \"msg\": \"error: Unable to find value_list\",\n                \"missing_dg\": m[7].strip(\"(\"),\n                \"funcloc\": int(m[11].strip(\":\")),\n                \"error\": m[12],\n            }\n        else:\n            m = msg.split(\" \", maxsplit=5)\n            yield {\n                \"object\": m[1].strip(\"[\").strip(\"]\"),\n                \"objtype\": \"rule\",\n                \"msg\": m[5].split(\"]\", maxsplit=1)[0].strip(\"[]\"),\n                \"error\": m[5].split(\"]\", maxsplit=1)[1],\n                \"funcloc\": int(m[3].split(\":\")[1]),\n            }\n\n    @staticmethod\n    def split_ltm_cert_expiry(msg):\n        m = F5LogSheet.re_ltm_cert_expiry.match(msg)\n        if m is None:\n            return\n        m = m.groupdict()\n        yield {\n            \"cert_cn\": m.get(\"cert_cn\"),\n            \"object\": m.get(\"file\"),\n            \"objtype\": \"ssl-cert\",\n            \"date\": datetime.strptime(\n                m.get(\"date1\").replace(\"  \", \" \"),\n                \"%b %d %H:%M:%S %Y %Z\",\n            )\n            if m.get(\"date1\") is not None\n            else None,\n            \"msg\": m.get(\"message\"),\n        }\n\n    @staticmethod\n    def split_ltm_connection_error(msg):\n        m = F5LogSheet.re_ltm_conn_error.match(msg)\n        if m is None:\n            return\n        m = m.groupdict()\n        yield {\n            \"func\": m.get(\"func\"),\n            \"funcloc\": m.get(\"funcloc\"),\n            \"error\": m.get(\"error\"),\n            \"errno\": m.get(\"errno\"),\n            \"errmsg\": m.get(\"errormsg\"),\n        }\n\n    @staticmethod\n    def split_ltm_virtual_status(msg):\n        m = msg.split(\" \")\n        if m[0] == \"SNMP_TRAP:\":\n            yield {\n                \"object\": m[2],\n                \"objtype\": \"vs\",\n                \"new_status\": m[-1],\n                \"prev_status\": None,\n            }\n        else:\n            yield {\n                \"object\": m[1],\n                \"objtype\": \"vs\",\n                \"new_status\": m[-1],\n                \"prev_status\": None,\n            }\n\n    @staticmethod\n    def split_ltm_virtual_address_status_or_irule_profile_err(msg):\n        # big-ip has a conflict on this logid\n        m = msg.split(\" \")\n        if \"event in rule\" in msg:\n            yield {\n                \"object\": m[4].strip(\"()\"),\n                \"objtype\": \"rule\",\n                \"irule_event\": m[0],\n                \"msg\": f\"event in rule {' '.join(m[5:-2])}\",\n                \"target_obj\": m[-1].strip(\"().\"),\n                \"target_objtype\": m[-2].replace(\"virtual-server\", \"vs\"),\n            }\n        else:\n            yield {\n                \"object\": m[2],\n                \"objtype\": \"virtual address\",\n                \"new_status\": m[9].lower().strip(\".\"),\n                \"prev_status\": m[7].lower(),\n            }\n\n    @staticmethod\n    def split_ltm_ssl_handshake_fail(msg):\n        src = msg.split(\" \")[5]\n        if len(src.split(\":\")) == 2:\n            # ipv4\n            srchost, srcport = src.split(\":\")\n        else:\n            # ipv6\n            srchost, srcport = src.split(\".\")\n        dst = msg.split(\" \")[7]\n        if len(dst.split(\":\")) == 2:\n            # ipv4\n            dsthost, dstport = dst.split(\":\")\n        else:\n            dsthost, dstport = dst.split(\".\")\n        yield {\n            \"srchost\": ip_address(srchost),\n            \"srcport\": int(srcport),\n            \"dsthost\": ip_address(dsthost),\n            \"dstport\": int(dstport),\n        }\n\n    @staticmethod\n    def split_ltm_shared_ciphers(msg):\n        m = F5LogSheet.re_ltm_no_shared_ciphers.match(msg)\n        if m is None:\n            return\n        m = m.groupdict()\n        yield {\n            \"srchost\": ip_address(m.get(\"srchost\")),\n            \"srcport\": int(m.get(\"srcport\")),\n            \"dsthost\": ip_address(m.get(\"dsthost\")),\n            \"dstport\": int(m.get(\"dstport\")),\n        }\n\n    @staticmethod\n    def split_ltm_rst_reason(msg):\n        m = msg.split(\" \", maxsplit=7)\n        src, dst = m[3].strip(\",\"), m[5].strip(\",\")\n        reasonc1, reasonc2 = m[6].split(\":\")\n        if len(src.split(\":\")) == 2:\n            # ipv4\n            srchost, srcport = src.split(\":\")\n        else:\n            # ipv6\n            srchost, srcport = src.rsplit(\":\", maxsplit=1)\n        if len(dst.split(\":\")) == 2:\n            # ipv4\n            dsthost, dstport = dst.split(\":\")\n        else:\n            # ipv6\n            dsthost, dstport = dst.rsplit(\":\", maxsplit=1)\n        yield {\n            \"srchost\": ip_address(srchost),\n            \"srcport\": int(srcport) if srcport else None,\n            \"dsthost\": ip_address(dsthost),\n            \"dstport\": int(dstport) if dstport else None,\n            \"rst_reason_code1\": hexint(reasonc1[3:]),\n            \"rst_reason_code2\": hexint(reasonc2[:-1]),\n            \"rst_reason\": m[7],\n        }\n\n    @staticmethod\n    def split_ltm_inet_port_exhaust(msg):\n        m = msg.split(\" \")\n        srchost, dst = m[-5], m[-3]\n        if len(dst.split(\":\")) == 2:\n            dsthost, dstport = dst.split(\":\")\n        else:\n            # ipv6\n            dsthost, dstport = dst.rsplit(\":\", maxsplit=1)\n        yield {\n            \"msg\": \" \".join(m[:5] if len(m) == 11 else m[:3]),\n            \"srchost\": ip_address(srchost),\n            \"dsthost\": ip_address(dsthost),\n            \"dstport\": int(dstport),\n            \"proto\": F5LogSheet._proto[int(m[-1].strip(\")\"))],\n        }\n\n    @staticmethod\n    def split_ltm_conn_limit_reached(msg):\n        m = msg.split(\" \", maxsplit=11)\n        src, dst = m[4], m[6].strip(\",\")\n        if len(src.split(\":\")) == 2:\n            srchost, srcport = src.split(\":\")\n        else:\n            # ipv6\n            srchost, srcport = src.rsplit(\".\", maxsplit=1)\n        if len(dst.split(\":\")) == 2:\n            dsthost, dstport = dst.split(\":\")\n        else:\n            # ipv6\n            dsthost, dstport = dst.rsplit(\".\", maxsplit=1)\n        yield {\n            \"msg\": m[-1],\n            \"object\": m[10].strip(\":\"),\n            \"objtype\": m[9].lower(),\n            \"srchost\": ip_address(srchost),\n            \"srcport\": int(dstport),\n            \"dsthost\": ip_address(dsthost),\n            \"dstport\": int(dstport),\n            \"proto\": m[8].strip(\",\").lower(),\n        }\n\n    @staticmethod\n    def split_ltm_syncookie_threshold(msg):\n        # Syncookie threshold 1993 exceeded, virtual = 203.24.253.132:443\n        m = msg.split(\" \")\n        dst = m[-1]\n        if len(dst.split(\":\")) == 2:\n            dsthost, dstport = dst.split(\":\")\n        else:\n            # ipv6\n            dsthost, dstport = dst.rsplit(\".\", maxsplit=1)\n        yield {\n            \"msg\": \"Syncookie threshold exceeded\",\n            \"threshold\": int(m[2]),\n            \"objtype\": m[-3].lower(),\n            \"dsthost\": ip_address(dsthost),\n            \"dstport\": int(dstport),\n        }\n\n    @staticmethod\n    def split_ltm_sweeper_active2(msg):\n        m = msg.split(\" \")\n        yield {\n            \"policy\": m[3],\n            \"mode\": m[4],\n            \"object\": m[7].strip(\").\"),\n            \"objtype\": m[6].strip(\"(\"),\n            \"msg\": \" \".join(m[8:]).strip(\"()\"),\n        }\n\n    @staticmethod\n    def split_ltm_sweeper_active3(msg):\n        m = msg.split(\" \")\n        yield {\n            \"policy\": m[3],\n            \"object\": m[6].strip(\").\"),\n            \"objtype\": m[5].strip(\"(\"),\n            \"msg\": \" \".join(m[7:]).strip(\"()\"),\n        }\n\n    @staticmethod\n    def split_ltm_dns_failed_xfr_rcode(msg):\n        m = msg.split(\" \")\n        yield {\n            \"msg\": \" \".join([m[0], *m[4:]]),\n            \"zone\": m[3],\n        }\n\n    @staticmethod\n    def split_ltm_dns_failed_rr(msg):\n        m = msg.rsplit(\" \", maxsplit=3)\n        yield {\n            \"msg\": m[0],\n            \"zone\": m[-1].strip(\".\"),\n        }\n\n    @staticmethod\n    def split_ltm_dns_failed_xfr(msg):\n        m = msg.split(\" \")\n        src = m[6].strip(\",\")\n        yield {\n            \"msg\": \" \".join(m[:3]) + \", \" + \" \".join(m[-2:]),\n            \"srchost\": ip_address(src),\n            \"zone\": m[4],\n        }\n\n    @staticmethod\n    def split_ltm_dns_handling_notify(msg):\n        m = msg.split(\" \")\n        yield {\n            \"msg\": \" \".join(m[:2]),\n            \"zone\": m[4].rstrip(\".\"),\n        }\n\n    @staticmethod\n    def split_ltm_dns_axfr_succeeded_1f(msg):\n        m = msg.split(\" \")\n        yield {\n            \"msg\": \" \".join([*m[:3], m[-1]]),\n            \"srchost\": ip_address(m[6]),\n            \"zone\": m[4],\n        }\n\n    @staticmethod\n    def split_ltm_dns_axfr_succeeded_2c(msg):\n        m = msg.split(\" \")\n        yield {\n            \"msg\": \" \".join([*m[:1], m[-1]]),\n            \"srchost\": m[10],\n            \"zone\": m[4],\n            \"serial\": m[8],\n        }\n\n    @staticmethod\n    def split_ltm_dns_ignoring_tfer(msg):\n        # Ignoring transfer for zone qaautomation-dns.com from 10.17.205.164; transfer not enabled.\n        m = msg.split(\" \")\n        yield {\n            \"msg\": \" \".join([*m[:2], *m[-3:]]),\n            \"srchost\": m[6].strip(\";\"),\n            \"zone\": m[4],\n        }\n\n    @staticmethod\n    def split_ltm_http_process_state(msg):\n        m = F5LogSheet.re_ltm_http_process_state.match(msg)\n        if not m:\n            return\n        m = m.groupdict()\n        src, vsdst, backendsrc, dst = (\n            m.get(\"src\"),\n            m.get(\"vsdst\"),\n            m.get(\"poolsrc\"),\n            m.get(\"dst\"),\n        )\n        if src:\n            if len(src.split(\":\")) == 2:\n                srchost, srcport = src.split(\":\")\n            else:\n                # ipv6\n                srchost, srcport = src.rsplit(\".\", maxsplit=1)\n        else:\n            srchost, srcport = None, None\n        if dst:\n            if len(dst.split(\":\")) == 2:\n                dsthost, dstport = dst.split(\":\")\n            else:\n                # ipv6\n                dsthost, dstport = dst.rsplit(\".\", maxsplit=1)\n        else:\n            dsthost, dstport = None, None\n        if vsdst:\n            if len(vsdst.split(\":\")) == 2:\n                vsdsthost, vsdstport = vsdst.split(\":\")\n            else:\n                # ipv6\n                vsdsthost, vsdstport = vsdst.rsplit(\".\", maxsplit=1)\n        else:\n            vsdsthost, vsdstport = None, None\n        if backendsrc:\n            if len(backendsrc.split(\":\")) == 2:\n                backendsrchost, backendsrcport = backendsrc.split(\":\")\n            else:\n                # ipv6\n                backendsrchost, backendsrcport = backendsrc.rsplit(\".\", maxsplit=1)\n        else:\n            backendsrchost, backendsrcport = None, None\n        yield {\n            \"object\": m.get(\"vs\"),\n            \"msg\": m.get(\"msg\"),\n            \"srchost\": ip_address(srchost) if srchost else None,\n            \"srcport\": int(srcport) if srcport else None,\n            \"dsthost\": ip_address(dsthost) if dsthost else None,\n            \"dstport\": int(dstport) if dstport else None,\n            \"pool\": m.get(\"pool\"),\n            \"profile\": m.get(\"profile\"),\n            \"httpstate\": m.get(\"httpstate\"),\n            \"actionid\": hexint(m.get(\"actionid\")),\n            \"sidea\": m.get(\"sidea\"),\n            \"vsdsthost\": ip_address(vsdsthost) if vsdsthost else None,\n            \"vsdstport\": int(vsdstport) if vsdstport else None,\n            \"backendsrchost\": ip_address(backendsrchost) if backendsrchost else None,\n            \"backendsrcport\": int(backendsrcport) if backendsrcport else None,\n            \"sideb\": m.get(\"sideb\"),\n            \"sideasrc\": ip_address(m.get(\"sideasrc\")) if m.get(\"sideasrc\") else None,\n        }\n\n    @staticmethod\n    def split_ltm_http_header_exceeded(msg):\n        m = F5LogSheet.re_ltm_http_header_exceeded.match(msg)\n        if not m:\n            return\n        m = m.groupdict()\n        host = m.get(\"sidehost\")\n        yield {\n            \"object\": m.get(\"object\"),\n            \"msg\": m.get(\"msg\"),\n            \"srchost\": ip_address(host)\n            if host and m.get(\"sideip\") == \"client\"\n            else None,\n            \"dsthost\": ip_address(host)\n            if host and m.get(\"sideip\") == \"server\"\n            else None,\n            \"pool\": m.get(\"pool\"),\n            \"profile\": m.get(\"profile\"),\n            \"size\": int(m.get(\"size\")) if m.get(\"size\") else None,\n            \"limit\": int(m.get(\"limit\")) if m.get(\"limit\") else None,\n        }\n\n    @staticmethod\n    def split_gtm_monitor(msg):\n        m = F5LogSheet.re_gtm_monitor.match(msg)\n        if m is None:\n            return\n        m = m.groupdict()\n        dst = m.get(\"ipport\")\n        if dst:\n            if len(dst.split(\".\")) == 4:\n                # ipv4\n                if \":\" in dst:\n                    dsthost, dstport = dst.split(\":\")\n                else:\n                    dsthost, dstport = dst, None\n            else:\n                # ipv6\n                if \".\" in dst:\n                    dsthost, dstport = dst.rsplit(\".\", maxsplit=1)\n                else:\n                    dsthost, dstport = dst, None\n        else:\n            dsthost, dstport = None, None\n        yield {\n            \"objtype\": m.get(\"objtype\").lower() if m.get(\"objtype\") else None,\n            \"object\": m.get(\"object\"),\n            \"pool_member\": m.get(\"pool_member\"),\n            \"monitor_object\": m.get(\"monitor_object\"),\n            \"dsthost\": ip_address(dsthost) if dsthost else None,\n            \"dstport\": int(dstport) if dstport else None,\n            \"server\": m.get(\"server\"),\n            \"new_status\": m.get(\"new_status\").lower() if m.get(\"new_status\") else None,\n            \"prev_status\": m.get(\"prev_status\").lower()\n            if m.get(\"prev_status\")\n            else None,\n            \"msg\": m.get(\"msg\"),\n            \"type\": m.get(\"type\").lower() if m.get(\"type\") in m else None,\n            \"state\": m.get(\"state\"),\n        }\n\n    @staticmethod\n    def split_gtm_monitor_instance(msg):\n        m = F5LogSheet.re_gtm_monitor_instance.match(msg)\n        if m is None:\n            return\n        m = m.groupdict()\n        if m.get(\"monip\"):\n            if len(m.get(\"monip\").split(\":\")) == 2:\n                # ipv4\n                dsthost, dstport = m.get(\"monip\").split(\":\")\n            else:\n                dsthost, dstport = m.get(\"monip\").rsplit(\":\", maxsplit=1)\n        else:\n            dsthost, dstport = None, None\n        yield {\n            \"object\": m.get(\"object\"),\n            \"objtype\": \"monitor\",\n            \"dsthost\": ip_address(dsthost) if dsthost else None,\n            \"dstport\": int(dstport) if dstport else None,\n            \"new_status\": m.get(\"newstatus\", \"\").lower(),\n            \"prev_status\": m.get(\"prevstatus\", \"\").lower(),\n            \"src_gtm\": m.get(\"srcgtm\"),\n            \"state\": m.get(\"state\").lower(),\n        }\n\n    @staticmethod\n    def split_gtm_syncgroup_change(msg):\n        m = msg.split(\" \")\n        yield {\n            \"object\": m[3],\n            \"srchost\": ip_address(m[4].strip(\"()\")),\n            \"syncgroup\": m[-1],\n            \"msg\": f\"BIG-IP GTM {m[5]} sync group\",\n        }\n\n    @staticmethod\n    def split_gtm_changed_state(msg):\n        m = msg.split(\" \")\n        yield {\n            \"msg\": f\"{m[0]} changed state\",\n            \"new_status\": m[6].lower().strip(\".\"),\n            \"prev_status\": m[4].lower(),\n        }\n\n    @staticmethod\n    def split_tmm_address_conflict(msg):\n        m = msg.split(\" \")\n        dsthost = m[4]\n        yield {\n            \"object\": \" \".join(m[7:]),\n            \"objtype\": \"address\",\n            \"dsthost\": ip_address(dsthost),\n            \"dstmac\": m[5].strip(\"()\"),\n        }\n\n    splitters = {\n        0x01010028: split_ltm_pool_has_no_avail_mem.__func__,\n        0x01010038: split_ltm_syncookie_threshold.__func__,\n        0x01010201: split_ltm_inet_port_exhaust.__func__,\n        0x01010281: split_ltm_inet_port_exhaust.__func__,\n        0x01010221: split_ltm_pool_has_avail_mem.__func__,\n        0x01070151: split_ltm_rule_missing_datagroup.__func__,\n        0x01070417: split_audit_mcpd_mcp_error.__func__,\n        0x01070639: split_ltm_poolnode_mon_abled.__func__,\n        0x01070641: split_ltm_poolnode_mon_abled.__func__,\n        0x01070807: split_ltm_poolnode_mon_abled.__func__,\n        0x01070808: split_ltm_poolnode_mon_abled.__func__,\n        0x01070727: split_ltm_pool_mon_status.__func__,\n        0x01070728: split_ltm_pool_mon_status.__func__,\n        0x01070638: split_ltm_pool_mon_status.__func__,\n        0x01070640: split_ltm_pool_mon_status.__func__,\n        0x01071681: split_ltm_virtual_status.__func__,\n        0x01071682: split_ltm_virtual_status.__func__,\n        0x01071912: split_ltm_virtual_address_status_or_irule_profile_err.__func__,\n        0x01071913: split_ltm_virtual_address_status_or_irule_profile_err.__func__,\n        0x010719E7: split_ltm_virtual_address_status_or_irule_profile_err.__func__,\n        0x010719E8: split_ltm_virtual_address_status_or_irule_profile_err.__func__,\n        0x010719EA: split_gtm_changed_state.__func__,\n        0x01071BA9: split_ltm_virtual_status.__func__,\n        0x01190004: split_tmm_address_conflict.__func__,\n        0x011A1004: split_gtm_monitor.__func__,\n        0x011A1005: split_gtm_monitor.__func__,\n        0x011A1101: split_gtm_monitor.__func__,\n        0x011A1102: split_gtm_monitor.__func__,\n        0x011A3003: split_gtm_monitor.__func__,\n        0x011A3004: split_gtm_monitor.__func__,\n        0x011A4002: split_gtm_monitor.__func__,\n        0x011A4003: split_gtm_monitor.__func__,\n        0x011A4004: split_gtm_monitor.__func__,\n        0x011A4101: split_gtm_monitor.__func__,\n        0x011A4102: split_gtm_monitor.__func__,\n        0x011A5003: split_gtm_monitor.__func__,\n        0x011A5004: split_gtm_monitor.__func__,\n        0x011A5008: split_gtm_syncgroup_change.__func__,\n        0x011A5009: split_gtm_syncgroup_change.__func__,\n        0x011A500B: split_gtm_monitor.__func__,\n        0x011A500C: split_gtm_monitor.__func__,\n        0x011A6005: split_gtm_monitor.__func__,\n        0x011A6006: split_gtm_monitor.__func__,\n        0x011AB003: split_gtm_monitor.__func__,\n        0x011AB004: split_gtm_monitor.__func__,\n        0x011AE0F2: split_gtm_monitor_instance.__func__,\n        # 0x01220000: split_ltm_rule.__func__,\n        0x011E0002: split_ltm_sweeper_active2.__func__,\n        0x011E0003: split_ltm_sweeper_active3.__func__,\n        0x011F0005: split_ltm_http_header_exceeded.__func__,\n        0x011F0011: split_ltm_http_header_exceeded.__func__,\n        0x011F0007: split_ltm_http_process_state.__func__,\n        0x011F0016: split_ltm_http_process_state.__func__,\n        0x01220001: split_ltm_rule.__func__,\n        0x01220002: split_ltm_rule.__func__,\n        # 0x01220003: split_ltm_rule.__func__,\n        # 0x01220004: split_ltm_rule.__func__,\n        # 0x01220005: split_ltm_rule.__func__,\n        0x01220007: split_ltm_rule.__func__,\n        0x01220008: split_ltm_rule.__func__,\n        0x01220009: split_ltm_rule.__func__,\n        0x01220010: split_ltm_rule.__func__,\n        0x01220011: split_ltm_rule.__func__,\n        0x01200012: split_ltm_conn_limit_reached.__func__,\n        0x01200014: split_ltm_conn_limit_reached.__func__,\n        0x01230140: split_ltm_rst_reason.__func__,\n        0x01260013: split_ltm_ssl_handshake_fail.__func__,\n        0x01260026: split_ltm_shared_ciphers.__func__,\n        0x01260008: split_ltm_connection_error.__func__,\n        0x01260009: split_ltm_connection_error.__func__,\n        0x01420002: split_audit_bigip_tmsh_audit.__func__,\n        0x01420007: split_ltm_cert_expiry.__func__,\n        0x01420008: split_ltm_cert_expiry.__func__,\n        0x014F0005: split_audit_scriptd_run_script.__func__,\n        0x0153100E: split_ltm_dns_failed_xfr_rcode.__func__,\n        0x01531015: split_ltm_dns_failed_rr.__func__,\n        0x01531018: split_ltm_dns_failed_xfr.__func__,\n        0x0153101C: split_ltm_dns_handling_notify.__func__,\n        0x0153101F: split_ltm_dns_axfr_succeeded_1f.__func__,\n        0x01531022: split_ltm_dns_ignoring_tfer.__func__,\n        0x0153102C: split_ltm_dns_axfr_succeeded_2c.__func__,\n    }\n\n    # these logs can have IDs we care about splitting but would be errors\n    # the match is starts_with because of course some logs have extra dynamic junk\n    no_split_logs = (\n        \"Per-invocation log rate exceeded; throttling\",\n        \"Resuming log processing at this invocation\",\n        \"Re-enabling general logging;\",\n        \"Cumulative log rate exceeded!  Throttling all non-debug logs.\",\n    )\n\n    extra_cols = {\n        \"rawmsg\",\n        \"timestamp\",\n        \"host\",\n        \"level\",\n        \"process\",\n        \"proc_pid\",\n        \"logid1\",\n        \"logid2\",\n        \"message\",\n        \"object\",\n    }\n\n    # precedence, coloropt, func\n    colorizers = [\n        CellColorizer(100, None, colorizeMonitors),\n        RowColorizer(101, None, colorizeRows),\n    ]\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        # the default F5 logs don't have the year so we have to guess from the file ctime\n        # TODO: make this overridable\n        try:\n            import zoneinfo\n        except ImportError:\n            from backports import zoneinfo\n        self._log_tz = zoneinfo.ZoneInfo(\"UTC\")\n        try:\n            self._year = int(\n                vd.options.get(\n                    \"f5log_log_year\",\n                    datetime.utcfromtimestamp(self.source.stat().st_ctime).year,\n                )\n            )\n        except (AttributeError, ValueError, TypeError):\n            self._year = datetime.now().year\n\n    def iterload(self):\n        self.rows = []  # rowdef: [F5LogRow]\n\n        if vd.options.get(\"f5log_object_regex\"):\n            try:\n                object_regex = re.compile(vd.options.get(\"f5log_object_regex\"))\n            except re.error as exc:\n                # TODO: make this error into the errors sheet\n                object_regex = None\n        else:\n            object_regex = None\n\n        try:\n            import zoneinfo\n            self._log_tz = zoneinfo.ZoneInfo(\n                vd.options.get(\"f5log_log_timzeone\", \"UTC\")\n            )\n        except zoneinfo.ZoneInfoNotFoundError as exc:\n            # TODO: make this error go into the errors sheet\n            self._log_tz = zoneinfo.ZoneInfo(\"UTC\")\n\n        for line in self.source:\n            m = F5LogSheet.re_f5log.match(line)\n            if m:\n                m = m.groupdict()\n            else:\n                # TODO: somehow make this use an error sheet\n                yield F5LogSheet.F5LogRow(\n                    rawmsg=line, kv={\"PARSE_ERROR\": \"unable to parse line\"}\n                )\n                continue\n            kv = {\n                \"message\": m.get(\"message\"),\n            }\n            if m.get(\"date1\"):\n                #\n                _t = m.get(\"date1\")\n                # strptime is quite slow so we need to manually extract the time on the hot path\n                try:\n                    timestamp = datetime(\n                        year=self._year,\n                        month=self._months[_t[:3]],\n                        day=int(_t[4:6]),\n                        hour=int(_t[7:9]),\n                        minute=int(_t[10:12]),\n                        second=int(_t[13:15]),\n                        tzinfo=self._log_tz,\n                    )\n                except ValueError as exc:\n                    yield F5LogSheet.F5LogRow(\n                        rawmsg=line,\n                        PARSE_ERROR=\"\\n\".join(\n                            traceback.format_exception(\n                                etype=type(exc), value=exc, tb=exc.__traceback__\n                            ),\n                        ),\n                    )\n            elif m.get(\"date2\"):\n                timestamp = datetime.strptime(m.get(\"date2\"), \"%Y-%m-%dT%H:%M:%S%z\")\n            elif m.get(\"date3\"):\n                # whoever designed tmsh show sys log needs to have a good hard think about themselves\n                timestamp = datetime.strptime(\n                    f'{self._year}-{m.get(\"date3\")}', \"%Y-%m-%d %H:%M:%S\"\n                )\n                timestamp = datetime(\n                    year=timestamp.year,\n                    month=timestamp.month,\n                    day=timestamp.day,\n                    hour=timestamp.hour,\n                    minute=timestamp.minute,\n                    second=timestamp.second,\n                    tzinfo=self._log_tz,\n                )\n                # because this is madness\n                m[\"level\"], m[\"host\"] = m.get(\"host\"), m.get(\"level\")\n            else:\n                timestamp = None\n\n            logid1 = int(m.get(\"logid1\"), base=16) if m.get(\"logid1\") else None\n            if logid1 in self.splitters and not any(\n                m.get(\"message\", \"\").startswith(_) for _ in F5LogSheet.no_split_logs\n            ):\n                try:\n                    for entry in F5LogSheet.splitters[logid1](m.get(\"message\")):\n                        kv.update(entry)\n                except (IndexError, ValueError) as exc:\n                    # TODO: somehow make this use an error sheet\n                    yield F5LogSheet.F5LogRow(\n                        rawmsg=line,\n                        PARSE_ERROR=\"\\n\".join(\n                            traceback.format_exception(\n                                etype=type(exc), value=exc, tb=exc.__traceback__\n                            )\n                        ),\n                    )\n                if \"object\" in kv and object_regex:\n                    om = object_regex.match(kv.get(\"object\", \"\"))\n                    if om:\n                        kv.update(om.groupdict())\n                for k, v in kv.items():\n                    if k not in self.extra_cols:\n                        F5LogSheet.addColumn(self, AttrColumn(k))\n                        self.extra_cols.add(k)\n            elif logid1 is None and m.get(\"message\").startswith(\"Rule \"):\n                for entry in self.split_ltm_rule(m.get(\"message\")):\n                    kv.update(entry)\n            yield F5LogSheet.F5LogRow(\n                # rawmsg=line,\n                timestamp=timestamp,\n                host=m.get(\"host\"),\n                level=m.get(\"level\"),\n                process=m.get(\"process\"),\n                proc_pid=int(m.get(\"pid\")) if m.get(\"pid\") is not None else None,\n                logid1=m.get(\"logid1\") if m.get(\"logid1\") is not None else None,\n                logid2=m.get(\"logid2\") if m.get(\"logid2\") is not None else None,\n                **kv,\n            )\n\n\n@VisiData.api\ndef open_f5log(vd: VisiData, p: Path) -> Sheet:\n    sheet = F5LogSheet(p.base_stem, source=p)\n    sheet.options[\"disp_date_fmt\"] = \"%Y-%m-%d %H:%M:%S\"\n    return sheet\n"
  },
  {
    "path": "visidata/loaders/fec.py",
    "content": "\"\"\"\nFilename: vdfec.py\nLast updated: 2019-04-21\nHome: https://github.com/jsvine/visidata-plugins\nAuthor: Jeremy Singer-Vine\n\n# Installation\n\n- Install fecfile: `pip install fecfile`\n- Add vdfec.py to your ~/.visidata directory\n- Add \"import vdfec\" to your ~/.visidatarc file\n\n# Usage\n\nvdfec.py enables VisiData to load .fec files from the Federal Election Commission.\n\nOnce saved to your ~/.visidata directory, and imported via your ~/.visidatarc file,\nyou should be able to interactively explore .fec files as you would any other \nfiletype in VisiData.\n\nFrom the command line:\n\n    vd path/to/my/file.fec\n\n# Thanks\n\nvdfec.py depends heavily on Evan Sonderegger's `fecfile` Python library: https://esonderegger.github.io/fecfile/\n\n... which in turn is based on Derek Willis's `Fech` Ruby library: https://github.com/dwillis/Fech\n\n... and Chris Zubak-Skees' transformation of `Fech`'s form-and-field mappings: https://github.com/PublicI/fec-parse/blob/master/lib/renderedmaps.js\n\nThanks to all who have contributed to those projects.\n\n\"\"\"\n\nfrom copy import copy\nfrom visidata import (\n    vd,\n    VisiData,\n    Path,\n    Sheet,\n    TextSheet,\n    ColumnAttr,\n    ColumnItem,\n    asyncthread,\n    Progress,\n)\n\nclass DiveSheet(Sheet):\n    \"A deeply-diveable, quick-diving sheet.\"\n\n    def reload(self):\n        mapping = self.source\n\n        self.columns = []\n        self.rows = []\n\n        self.key_type = str\n        self.size = len(mapping)\n\n        if self.size == 0:\n            return\n\n        if isinstance(mapping, list):\n            first = mapping[0]\n            if isinstance(first, dict):\n                colgetter = lambda x: x.keys()\n            elif isinstance(first, list):\n                colgetter = lambda x: list(range(len(x)))\n            else:\n                mapping = dict(enumerate(mapping))\n                self.key_type = int\n                self.size = len(mapping)\n\n        if isinstance(mapping, dict):\n            self.is_keyvalue = True\n            if self.size:\n                max_key_len = max(map(len, map(str, mapping.keys())))\n                key_width = min(50, max(max_key_len + 2, 6))\n            else:\n                key_width = None\n\n            self.addColumn(ColumnItem(\n                \"key\",\n                width = key_width,\n                type = self.key_type\n            ))\n            self.addColumn(ColumnItem(\"value\"))\n            self.setKeys(self.columns[:1])\n\n            for k, v in mapping.items():\n                self.addRow({ \"key\": k, \"value\": v })\n\n        elif isinstance(mapping, list):\n            self.is_keyvalue = False\n            indices = [] \n            for item in mapping:\n                try:\n                    cols = colgetter(item)\n                    for col in cols:\n                        if col not in indices:\n                            self.addColumn(ColumnItem(col))\n                            indices.append(col)\n\n                    self.addRow(item)\n\n                except Exception as e:\n                    vd.warning(\"Can't dive on lists with heterogeneous item types.\")\n                    return False\n\n    def openRow(self, row):\n        if self.is_keyvalue:\n            cell = row[\"value\"]\n            if isinstance(cell, (list, dict)):\n                vs = self.__class__(self.name, row[\"key\"], source = cell)\n            else:\n                vd.warning(\"Nothing to dive into.\")\n                return\n        else:\n            vs = self.__class__(self.name, \"row\", source = self.row)\n\n        success = vs.reload()\n        if success == False:\n            vd.fail('could not reload new sheet')\n        return vs\n\n\nclass FECItemizationSheet(Sheet):\n    \"A sheet to display a list of FEC itemizations from a given form/schedule.\"\n\n    rowtype = \"itemizations\"\n\n    @asyncthread\n    def reload(self):\n        self.rows = []\n        self.columns = []\n\n        if len(self.source) == 0:\n            return\n\n        for i, row in enumerate(Progress(self.source, total = len(self.source))):\n            if i == 0:\n                self.set_columns_from_row(row)\n            self.addRow(row)\n    \n    def set_columns_from_row(self, row):\n        self.columns.clear()\n        for i, name in enumerate(row.keys()):\n            self.addColumn(ColumnItem(name))\n\n    def openRow(self, row):\n        return row\n\nclass FECScheduleSheet(Sheet):\n    \"A sheet to display the list of itemized schedules in a filing.\"\n\n    rowtype = \"schedules\"\n\n    columns = [\n        ColumnAttr(\"schedule\", \"schedule_name\", width = 14),\n        ColumnAttr(\"name\", width = 0),\n        ColumnAttr(\"size\", type = int),\n    ]\n\n    nKeys = 1\n\n    @asyncthread\n    def reload(self):\n        self.rows = []\n\n        for schedule_name in self.source.keys():\n            vs = FECItemizationSheet(\n                self.name, schedule_name,\n                schedule_name = schedule_name,\n                source = self.source[schedule_name],\n                size = len(self.source[schedule_name]),\n            )\n            self.addRow(vs)\n\n    def openRow(self, row):\n        return row\n\nCOMPONENT_SHEET_CLASSES = {\n    \"header\": DiveSheet,\n    \"summary\": DiveSheet,\n    \"itemization\": FECScheduleSheet,\n    \"text\": FECItemizationSheet,\n    \"F99_text\": TextSheet,\n}\n\nclass FECFiling(Sheet):\n    \"A sheet representing an entire .fec file.\"\n\n    rowtype = \"components\"\n    filing = None\n\n    columns = [\n        ColumnAttr(\"component\", \"component_name\", width = 14),\n        ColumnAttr(\"name\", width = 0),\n        ColumnAttr(\"size\", type = int),\n    ]\n\n    nKeys = 1\n\n    @asyncthread\n    def reload(self):\n        from fecfile import fecparser\n        self.rows = []  # rowdef:  Sheet, of a type from COMPONENT_SHEET_CLASSES.values()\n\n        row_dict = { }\n        itemization_subsheets = {}\n\n        def addSheetRow(component_name):\n            \"On first encountering a component, add a row to the filing sheet\"\n\n            cls = COMPONENT_SHEET_CLASSES[component_name]\n\n            source_cls = list if cls in [\n                    FECItemizationSheet,\n                    TextSheet\n                ] else dict\n\n            vs = cls(\n                self.name, component_name,\n                component_name = component_name,\n                source = source_cls(),\n                size = 0,\n            )\n\n            vs.reload()\n            row_dict[component_name] = vs\n            self.addRow(vs)\n\n        src = Path(self.source.resolve())\n\n        item_iter = fecparser.iter_lines(src, { \"as_strings\": True })\n\n        for item in item_iter:\n            dtype = item.data_type \n            if dtype not in row_dict.keys():\n                addSheetRow(dtype)\n\n            sheet_row = row_dict[dtype]\n\n            if dtype in [ \"header\", \"summary\" ]:\n                sheet_row.source = item.data\n                sheet_row.reload()\n\n            elif dtype == \"text\":\n                if len(sheet_row.source) == 0:\n                    sheet_row.set_columns_from_row(item.data)\n                sheet_row.source.append(item.data)\n                sheet_row.addRow(item.data)\n                sheet_row.size += 1\n\n            elif dtype == \"F99_text\":\n                sheet_row.source = item.data.split(\"\\n\")\n                sheet_row.size = len(sheet_row.source)\n\n            elif dtype == \"itemization\":\n                form_type = item.data[\"form_type\"]\n\n                if form_type[0] == \"S\":\n                    form_type = \"Schedule \" + item.data[\"form_type\"][1]\n\n                if form_type not in sheet_row.source:\n                    sheet_row.source[form_type] = [ ] \n                    subsheet = FECItemizationSheet(\n                        sheet_row.name, form_type,\n                        schedule_name = form_type,\n                        source = [ ],\n                        size = 0,\n                    )\n                    subsheet.reload()\n                    subsheet.set_columns_from_row(item.data)\n                    sheet_row.addRow(subsheet)\n                    itemization_subsheets[form_type] = subsheet\n                else:\n                    subsheet = itemization_subsheets[form_type]\n\n                subsheet.addRow(item.data)\n                subsheet.source.append(item.data)\n                subsheet.size += 1\n\n                sheet_row.source[form_type].append(item.data)\n                sheet_row.size += 1\n\n    def openRow(self, row):\n        return row\n\n@VisiData.api\ndef open_fec(vd, p):\n    return FECFiling(p.base_stem, source=p)\n\nvd.addGlobals({\n    \"DiveSheet\": DiveSheet\n})\n"
  },
  {
    "path": "visidata/loaders/fixed_width.py",
    "content": "\nfrom visidata import VisiData, vd, Sheet, Column, Progress, SequenceSheet, dispwidth\nfrom visidata import WritableColumn\n\n\nvd.option('fixed_rows', 1000, 'number of rows to check for fixed width columns')\nvd.option('fixed_maxcols', 0, 'max number of fixed-width columns to create (0 is no max)')\n\n@VisiData.api\ndef open_fixed(vd, p):\n    return FixedWidthColumnsSheet(p.base_stem, source=p, headerlines=[])\n\n@Column.api\ndef getMaxDataWidth(col, rows):  #2255 need real max width for fixed width saver\n    '''Return the maximum length of any cell in column or its header,\n    even if wider than window. (Slow for large cells!)'''\n\n    w = 0\n    nlen = dispwidth(col.name, literal=True)\n    if len(rows) > 0:\n        w_max = 0\n        for r in rows:\n            row_w = dispwidth(col.getFullDisplayValue(r), literal=True)\n            if w_max < row_w:\n                w_max = row_w\n        w = w_max\n    return max(w, nlen)\n\nclass FixedWidthColumn(WritableColumn):\n    def __init__(self, name, i, j, **kwargs):\n        super().__init__(name, **kwargs)\n        self.i, self.j = i, j\n\n    def calcValue(self, row):\n        return row[0][self.i:self.j]\n\n    def putValue(self, row, value):\n        j = self.j or len(row[0])\n        colwidth = j - self.i\n        value = str(value)\n        if len(value) > colwidth:\n            vd.warning(f'{self.name}: value truncated to {colwidth} chars')\n            value = value[:colwidth]\n        row[0] = row[0][:self.i] + '%-*s' % (colwidth, value) + row[0][j:]\n\ndef columnize(rows, has_header=True):\n    'Generate (i,j) indexes for fixed-width columns found in rows'\n\n    if not rows:\n        return\n\n    # Use first row (header) to determine column positions  #2265\n    # This prevents data with internal spaces from creating false column splits\n    # With no header (header=0), find columns where ALL rows have spaces  #2265\n    if has_header:\n        detect_rows = [rows[0]]\n    else:\n        detect_rows = rows\n\n    colstarts = []\n    maxlen = max(len(r) for r in detect_rows)\n    for i in range(maxlen):\n        all_space = all(i >= len(r) or r[i].isspace() for r in detect_rows)\n        if not all_space:\n            if i == 0 or all(i-1 >= len(r) or r[i-1].isspace() for r in detect_rows):\n                colstarts.append(i)\n\n    if not colstarts:\n        return\n\n    # find actual end of each column using all rows  #2255\n    allNonspaces = set()\n    for r in rows:\n        for i, ch in enumerate(r):\n            if not ch.isspace():\n                allNonspaces.add(i)\n    for idx, start in enumerate(colstarts):\n        if idx + 1 < len(colstarts):\n            # column ends at last non-space position before next column start\n            nextstart = colstarts[idx + 1]\n            end = start\n            for pos in range(start, nextstart):\n                if pos in allNonspaces:\n                    end = pos + 1\n            yield start, end  #2255\n        else:\n            # final column: find last non-space position\n            end = start\n            for pos in allNonspaces:\n                if pos >= start and pos + 1 > end:\n                    end = pos + 1\n            yield start, end\n\n\nclass FixedWidthColumnsSheet(SequenceSheet):\n    rowtype = 'lines'  # rowdef: [line] (wrapping in list makes it unique and modifiable)\n    def addRow(self, row, index=None):\n        Sheet.addRow(self, row, index=index)\n\n    def iterload(self):\n        itsource = iter(self.source)\n\n        # compute fixed width columns from first fixed_rows lines\n        maxcols = self.options.fixed_maxcols\n        self.columns = []\n        fixedRows = list([x] for x in self.optlines(itsource, 'fixed_rows'))\n        for i, j in columnize(list(r[0] for r in fixedRows), has_header=bool(self.options.header)):\n            if maxcols and self.nCols >= maxcols-1:\n                self.addColumn(FixedWidthColumn('', i, None))\n                break\n            else:\n                self.addColumn(FixedWidthColumn('', i, j))\n\n        yield from fixedRows\n\n        self.setColNames(self.headerlines)\n\n        yield from ([line] for line in itsource)\n\n    def setCols(self, headerlines):\n        self.headerlines = headerlines\n\n\n@VisiData.api\ndef save_fixed(vd, p, *vsheets):\n    with p.open(mode='w', encoding=vsheets[0].options.save_encoding) as fp:\n        for sheet in vsheets:\n            if len(vsheets) > 1:\n                fp.write('%s\\n\\n' % sheet.name)\n\n            widths = {}  # Column -> width:int\n            # headers\n            for col in Progress(sheet.visibleCols, gerund='sizing'):\n                widths[col] = col.getMaxDataWidth(sheet.rows)  #1849 #2255\n                fp.write(('{0:%s} ' % widths[col]).format(col.name))\n            fp.write('\\n')\n\n            # rows\n            with Progress(gerund='saving'):\n                for dispvals in sheet.iterdispvals(format=True):\n                    for col, val in dispvals.items():\n                        fp.write(('{0:%s%s.%s} ' % ('>' if vd.isNumeric(col) else '<', widths[col], widths[col])).format(val))\n                    fp.write('\\n')\n\nFixedWidthColumnsSheet.options.null_value = ''    # the file format cannot contain None, so use empty string instead\n"
  },
  {
    "path": "visidata/loaders/frictionless.py",
    "content": "from visidata import VisiData, vd, Progress, IndexSheet\n\n@VisiData.api\ndef open_frictionless(vd, p):\n    return FrictionlessIndexSheet(p.base_stem, source=p)\n\nclass FrictionlessIndexSheet(IndexSheet):\n    def iterload(self):\n        datapackage = vd.importExternal('datapackage')\n        self.dp = datapackage.Package(self.source.open(encoding='utf-8'))\n        for r in Progress(self.dp.resources):\n            yield vd.openSource(self.source.with_name(r.descriptor['path']), filetype=r.descriptor.get('format', 'json'))\n"
  },
  {
    "path": "visidata/loaders/geojson.py",
    "content": "from functools import reduce\nfrom copy import deepcopy\n\nimport json\n\nfrom visidata import VisiData, vd, Column, asyncthread, Progress, PythonSheet, InvertedCanvas, date, wrapply, TypedExceptionWrapper, TypedWrapper\nfrom visidata import WritableColumn\n\n\n@VisiData.api\ndef open_geojson(vd, p):\n    return GeoJSONSheet(p.base_stem, source=p)\n\nclass GeoJSONColumn(WritableColumn):\n    def calcValue(self, row):\n        return row.get('properties', {}).get(self.expr)\n\n    def putValue(self, row, val):\n        properties = row.setdefault('properties', {})\n        properties[self.expr] = val\n\n\nclass GeoJSONSheet(PythonSheet):\n    rowtype = 'shapes'\n    columns = [Column('json_row', width=0)]\n\n    def iterload(self):\n        self.colnames = {}\n\n        with self.source.open(encoding='utf-8') as fp:\n            ret = json.load(fp)\n\n            if ret['type'] == 'FeatureCollection':\n                features = ret['features']\n            elif ret['type'] == 'Feature':\n                features = [ret]\n            elif ret['type'] == 'GeometryCollection':\n                features = list(map(lambda g: { 'type': 'Feature', 'geometry': g }, ret['geometries']))\n            else: # Some form of geometry\n                features = [{ 'type': 'Feature', 'geometry': ret }]\n\n            for feature in Progress(features):\n                for prop in feature.get('properties', {}).keys():\n                    prop = self.maybeClean(prop)\n                    if prop not in self.colnames:\n                        c = GeoJSONColumn(name=prop, expr=prop)\n                        self.colnames[prop] = c\n                        self.addColumn(c)\n                yield feature\n\nclass GeoJSONMap(InvertedCanvas):\n    aspectRatio = 1.0\n    filetype = 'geojson'\n\n    @asyncthread\n    def reload(self):\n        self.reset()\n\n        nplotted = nerrors = 0\n\n        for row in Progress(self.sourceRows):\n            k = self.source.rowkey(row)\n            colour = self.plotColor(k)\n\n            try:\n                bbox = self.parse_geometry(row, colour)\n                nplotted += 1\n            except Exception as e:\n                vd.exceptionCaught(e)\n                nerrors += 1\n                continue\n\n            x1, y1, x2, y2 = bbox\n            textx, texty = (x1+x2)/2, (y1+y2)/2\n            disptext = self.textCol.getDisplayValue(row)\n            self.label(textx, texty, disptext, colour, row)\n\n        vd.status('loaded %d %s (%d errors)' % (nplotted, self.rowtype, nerrors))\n        self.refresh()\n\n    def parse_geometry(self, row, colour, bbox=None):\n        if bbox is None: bbox = [180, 90, -180, -90]\n\n        typ = row['geometry']['type']\n        if typ == 'GeometryCollection':\n            for g in row['geometries']:\n                bbox = self.parse_geometry(row, colour, bbox)\n            return bbox\n\n        coords = row['geometry']['coordinates']\n        if typ in ('Point', 'LineString', 'Polygon'):\n            coords = [coords]\n\n        if typ in ('Point', 'MultiPoint'):\n            for x, y in coords:\n                self.point(x, y, colour, row)\n            bbox = reduce_coords(coords, bbox)\n        elif typ in ('LineString', 'MultiLineString'):\n            for line in coords:\n                self.polyline(line, colour, row)\n                bbox = reduce_coords(line, bbox)\n        elif typ in ('Polygon', 'MultiPolygon'):\n            for polygon in coords:\n                if not isinstance(polygon[0][0], list):\n                    continue\n                self.polygon(polygon[0], colour, row)\n                bbox = reduce_coords(polygon[0], bbox)\n                for hole in polygon[1:]:\n                    self.polygon(hole, 0, row)\n        else:\n            vd.warning('notimpl shapeType %s' % typ)\n\n        return bbox\n\ndef reduce_coords(coords, initial):\n    return reduce(\n        lambda a,n: [min(a[0],n[0]), min(a[1],n[1]), max(a[2],n[0]), max(a[3],n[1])],\n        coords, initial)\n\ndef _rowdict(cols, row):\n    ret = {}\n    for col in cols:\n        o = wrapply(col.getTypedValue, row)\n        if isinstance(o, TypedExceptionWrapper):\n            o = col.sheet.options.safe_error or str(o.exception)\n        elif isinstance(o, TypedWrapper):\n            o = o.val\n        elif isinstance(o, date):\n            o = col.getDisplayValue(row)\n        if o is not None:\n            ret[col.name] = o\n    return ret\n\n@VisiData.api\ndef save_geojson(vd, p, vs):\n    features = []\n    for row in vs.iterrows('saving'):\n        copyrow = deepcopy(row)\n        copyrow['properties'] = _rowdict(vs.visibleCols, row)\n        features.append(copyrow)\n\n    featcoll = {\n        'type': 'FeatureCollection',\n        'features': features,\n    }\n\n    try:\n        indent = int(vs.options.json_indent)\n    except Exception:\n        indent = vs.options.json_indent\n\n    with p.open(mode='w', encoding='utf-8') as fp:\n        encoder = json.JSONEncoder(indent=indent, sort_keys=vs.options.json_sort_keys)\n        for chunk in encoder.iterencode(featcoll):\n            fp.write(chunk)\n\nGeoJSONSheet.addCommand('.', 'plot-row', 'vd.push(GeoJSONMap(name+\"_map\", sourceRows=[cursorRow], textCol=cursorCol, source=sheet))', 'plot geospatial vector in current row')\nGeoJSONSheet.addCommand('g.', 'plot-rows', 'vd.push(GeoJSONMap(name+\"_map\", sourceRows=rows, textCol=cursorCol, source=sheet))', 'plot all geospatial vectors in current sheet')\nGeoJSONMap.addCommand('Ctrl+S', 'save-sheet', 'vd.saveSheets(inputPath(\"save to: \", value=getDefaultSaveName(sheet)), sheet)', 'save current sheet to filename in format determined by extension (default .geojson)')\n\nvd.addGlobals({\n    'GeoJSONMap': GeoJSONMap,\n})\n"
  },
  {
    "path": "visidata/loaders/google.py",
    "content": "\n\nfrom visidata import vd, VisiData, Sheet, IndexSheet, SequenceSheet, ColumnItem, Path, AttrDict, ColumnAttr, asyncthread\n\n\ndef _google_creds_fn():\n\n    filename = 'google_creds.json'\n    google_creds_path = vd.pkg_resources_files('vdplus.api.google') / filename\n    import os\n    if not os.path.exists(google_creds_path):\n        vd.error(f'{filename} file does not exist in {google_creds_path.parent}\\n'\n                 'Create it by following this guide: https://github.com/saulpw/visidata/blob/develop/docs/gmail.md')\n    else:\n        return str(google_creds_path)\n\n\n@VisiData.api\ndef google_auth(vd, scopes=None):\n    import pickle\n    import os.path\n    import urllib.parse\n\n    SCOPES = []\n    for scope in scopes.split():\n        if not scope.startswith('https://'):\n            scope = 'https://www.googleapis.com/auth/' + scope\n        SCOPES.append(scope)\n\n    GOOGLE_TOKEN_FILE = Path(vd.options.visidata_dir)/f'google-{urllib.parse.quote_plus(str(scopes))}.pickle'\n    creds = None\n    if os.path.exists(GOOGLE_TOKEN_FILE):\n        with open(GOOGLE_TOKEN_FILE, 'rb') as fp:\n            creds = pickle.load(fp)\n\n    if not creds or not creds.valid:\n        if creds and creds.expired and creds.refresh_token:\n            from google.auth.transport.requests import Request\n            creds.refresh(Request())\n        else:\n            from google_auth_oauthlib.flow import InstalledAppFlow\n            flow = InstalledAppFlow.from_client_secrets_file(_google_creds_fn(), SCOPES)\n            creds = flow.run_local_server(port=0)\n\n        with open(GOOGLE_TOKEN_FILE, 'wb') as fp:\n            pickle.dump(creds, fp)\n\n    return creds\n"
  },
  {
    "path": "visidata/loaders/graphviz.py",
    "content": "from visidata import vd, options, TypedWrapper, asyncthread, Progress\nfrom visidata import wrapply, VisiData\n\nvd.option('graphviz_edge_labels', True, 'whether to include edge labels on graphviz diagrams')\n\n\ndef is_valid(v):\n    if v is None:\n        return False\n    if isinstance(v, TypedWrapper):\n        return False\n    return True\n\n\n@VisiData.api\ndef save_dot(vd, p, vs):\n    unusedColors = 'orange green purple cyan red blue black'.split()\n    assignedColors = {}\n\n    srccol = vs.keyCols[0]\n    dstcol = vs.keyCols[1]\n    with p.open(mode='w', encoding='utf-8') as fp:\n        pfp = lambda *args: print(*args, file=fp)\n        pfp('graph { concentrate=true;')\n        for row in Progress(vs.rows, 'saving'):\n            src = srccol.getTypedValue(row)\n            dst = dstcol.getTypedValue(row)\n            if not is_valid(src) or not is_valid(dst):\n                continue\n\n            downsrc = vd.cleanName(str(src)) or src\n            downdst = vd.cleanName(str(dst)) or dst\n            edgenotes = [c.getTypedValue(row) for c in vs.nonKeyVisibleCols if not vd.isNumeric(c)]\n            edgetype = '-'.join(str(x) for x in edgenotes if is_valid(x))\n            color = assignedColors.get(edgetype, None)\n            if not color:\n                color = unusedColors.pop() if unusedColors else 'black'\n                assignedColors[edgetype] = color\n\n            if options.graphviz_edge_labels:\n                nodelabels = [wrapply(vd.SIFormatter, '%0.1f', c.getTypedValue(row)) for c in vs.nonKeyVisibleCols if vd.isNumeric(c)]\n                label = '/'.join(str(x) for x in nodelabels if is_valid(x))\n            else:\n                label = ''\n            pfp('\\t%s[label=\"%s\"];' % (downsrc, src))\n            pfp('\\t%s[label=\"%s\"];' % (downdst, dst))\n            pfp('\\t%s -- %s[label=\"%s\", color=%s];' % (downsrc, downdst, label, color))\n\n        pfp('label=\"%s\"' % vs.name)\n        pfp('node[shape=plaintext];')\n        pfp('subgraph cluster_legend {')\n        pfp('label=\"Legend\";')\n        for i, (k, color) in enumerate(assignedColors.items()):\n            pfp('key%d[label=\"%s\", fontcolor=%s];' % (i, k, color))\n\n        pfp('}')  # legend subgraph\n        pfp('}')\n"
  },
  {
    "path": "visidata/loaders/grep.py",
    "content": "#!/usr/bin/python3\n\nfrom visidata import vd, VisiData, JsonSheet, ColumnAttr, Path, AttrDict, ExpectedException, stacktrace, TypedExceptionWrapper\nimport json\nimport os\nfrom os import linesep\n\n@VisiData.api\ndef open_grep(vd, p):\n    return GrepSheet(p.base_stem, source=p)\n\n@VisiData.api\ndef save_grep(vd, p, *vsheets):\n    vd.save_jsonl(p, *vsheets)\n\ndef format_row(rowdict):\n    # handle rows that are output of 'rg --json'\n    if 'type' in rowdict and rowdict['type'] == 'match':\n        match_data = rowdict['data']\n        d = {\n            'file':    match_data['path']['text'],\n            'line_no': match_data['line_number'],\n            'text':    match_data['lines']['text'].rstrip(linesep)\n        }\n        return AttrDict(d)\n    # handle a .grep file that was saved by visidata, or\n    # ripgrep rows that were preprocessed by jq:  'rg --json |jq [...]'\n    if 'line_no' in rowdict:\n        rowdict['text'] = rowdict['text'].rstrip(linesep)\n        return AttrDict(rowdict)\n    return None\n\nclass GrepSheet(JsonSheet):\n    # The input file is in JSON Lines format, where each line describes a JSON object.\n    # The JSON objects are either in the ripgrep grep_printer format:\n    # https://docs.rs/grep-printer/0.1.0/grep_printer/struct.JSON.html\n    # or contain the keys 'file', 'line_no', and 'text'.\n    _rowtype = 'lines'  # rowdef: AttrDict\n\n    columns = [\n        ColumnAttr('file', type=str),\n        ColumnAttr('line_no', type=int),\n        ColumnAttr('text', type=str)\n    ]\n    nKeys = 2\n    def iterload(self):\n        with self.open_text_source() as fp:\n            for L in fp:\n                try:\n                    if not L: # skip blank lines\n                        continue\n                    json_obj = json.loads(L)\n                    if not isinstance(json_obj, dict):\n                        vd.fail(f'line does not hold a JSON object:  {L}')\n                    row = format_row(json_obj)\n                    if not row: #skip lines that do not contain match data\n                        continue\n                    yield row\n                except ValueError as e:\n                    if self.rows:   # if any rows have been added already\n                        e.stacktrace = stacktrace()\n                        yield TypedExceptionWrapper(json.loads, L, exception=e)  # an error on one line\n                    else:\n                        # If input is not JSON, parse it as output of 'grep -n':  file:line_no:text\n                        # If that does not parse, parse it as output of typical 'grep':  file:text\n                        with self.open_text_source() as fp:\n                            try:\n                                extract_line_no = True\n                                for L in fp:\n                                    L = L.rstrip(linesep)\n                                    sep1 = L.index(':')\n                                    if extract_line_no:\n                                        sep2 = L.find(':', sep1+1)\n                                        try:\n                                            if sep2 == -1: raise ValueError\n                                            line_no = int(L[sep1+1:sep2]) # may raise ValueError\n                                            if line_no < 1: raise ValueError\n                                            text = L[sep2+1:]\n                                        except ValueError: # if we can't find a line_no that is > 0, with a separator after it\n                                            extract_line_no = False\n                                            line_no = None\n                                            text = L[sep1+1:]\n                                    else:\n                                        text = L[sep1+1:]\n                                    yield AttrDict({'file':    L[:sep1],\n                                                    'line_no': line_no,\n                                                    'text':    text})\n                            except ValueError:\n                                vd.fail('file is not grep output')\n                        break\n\n    def afterLoad(self):\n        if self.nRows == 0:\n            vd.status('no grep results found in input data')\n\n@GrepSheet.api\ndef sysopen_row(sheet, row):\n    '''Open the file in an editor at the specific line.'''\n    if sheet.nRows == 0: return\n    try:\n        given = row.file\n        if vd.options.grep_base_dir and not os.path.isabs(given):\n            given = vd.options.grep_base_dir + os.sep + row.file\n        p = Path(given)\n    except TypeError:\n        vd.fail(f'cannot open row: {given}')\n    if p.exists():\n        # works for vim and emacsclient\n        if row.line_no is not None:\n            vd.launchEditor(p.given, f'+{row.line_no:d}')\n        else:\n            vd.launchEditor(p.given)\n    else:\n        vd.fail(f'cannot find file: {p.given}')\n\nGrepSheet.addCommand('Enter', 'sysopen-row', 'sysopen_row(cursorRow)', 'open current file in external $EDITOR, at the line')\n\nvd.addGlobals({\n    'GrepSheet': GrepSheet,\n})\nvd.option('grep_base_dir', None, 'base directory for relative paths opened with sysopen-row')\n"
  },
  {
    "path": "visidata/loaders/hdf5.py",
    "content": "from visidata import VisiData, vd, Sheet, Path, Column, ItemColumn, BaseSheet, anytype\nfrom itertools import chain\n\n@VisiData.api\ndef open_h5(vd, p):\n    return Hdf5ObjSheet(p.base_stem, source=p)\n\nVisiData.open_hdf5 = VisiData.open_h5\n\nvd.option('hdf5_matrix_enumerate', False, 'enumerate matrix rows and columns')\n\nclass Hdf5ObjSheet(Sheet):\n    'Support sheets in HDF5 format.'\n\n    def iterload(self):\n        h5py = vd.importExternal('h5py')\n        source = self.source\n        if isinstance(self.source, Path):\n            source = h5py.File(str(self.source), 'r')\n\n        self.columns = []\n        if isinstance(source, h5py.Group):\n            self.rowtype = 'sheets'\n            self.columns = [\n                Column(source.name, type=str, getter=lambda col,row: row.source.name.split('/')[-1], keycol=1),\n                Column('type', type=str, getter=lambda col,row: type(row.source).__name__),\n                Column('nItems', type=int, getter=lambda col,row: len(row.source)),\n            ]\n            self.recalc()\n            for k, v in source.items():\n                yield Hdf5ObjSheet(self.name, k, source=v)\n        elif isinstance(source, h5py.Dataset):\n            if len(source.shape)==1:\n                if source.dtype.names:\n                    for i, (colname, fmt, *_) in enumerate(source.dtype.descr):\n                        if not colname:\n                            colname = f\"col{i}\"\n                        ctype = _guess_type(fmt)\n                        self.addColumn(ItemColumn(colname, i, type=ctype))\n                    yield from source  # copy\n                else:\n                    self.addColumn(ItemColumn(source.name, 0))\n                    for v in source:\n                        yield [v]\n            elif len(source.shape)==2:\n                matrix_enumerate = bool(self.options.hdf5_matrix_enumerate)\n\n                ncols = source.shape[1]\n                ctype = _guess_type(source.dtype.descr[0][1])\n\n                if matrix_enumerate:\n                    self.addColumn(ItemColumn(\"row\", 0, width=8, keycol=1, type=int), index=0)\n                    for i in range(ncols):\n                        self.addColumn(ItemColumn(f'col{i}', i+1, width=8, type=ctype), index=i+1)\n                    self.recalc()\n                    yield from list(list((chain((i,), row))) for i, row in enumerate(source))\n                else:\n                    for i in range(ncols):\n                        self.addColumn(ItemColumn('', i, width=8, type=ctype), index=i)\n                    self.recalc()\n                    yield from source  # copy\n            else:\n                vd.fail('too many dimensions in shape %s' % str(source.shape))\n        else:\n            vd.fail(f\"too many dimensions in shape {source.shape}\")\n\n\n    def openRow(self, row):\n        h5py = vd.importExternal('h5py')\n        if isinstance(row, BaseSheet):\n            return row\n        if isinstance(row, h5py.HLObject):\n            return Hdf5ObjSheet(row)\n\n        numpy = vd.importExternal('numpy')\n        from .npy import NpySheet\n        if isinstance(row, numpy.ndarray):\n            return NpySheet(None, npy=row)\n\ndef _guess_type(fmt):\n    if 'i' in fmt or 'u' in fmt:\n        return int\n    elif 'f' in fmt:\n        return float\n    return anytype\n\nHdf5ObjSheet.addCommand('A', 'dive-metadata', 'vd.push(SheetDict(cursorRow.name + \"_attrs\", source=cursorRow.attrs))', 'open metadata sheet for object referenced in current row')\n"
  },
  {
    "path": "visidata/loaders/html.py",
    "content": "import html\nimport urllib.parse\nimport copy\nimport itertools\nimport re\n\nfrom visidata import VisiData, vd, Sheet, options, Column, Progress, IndexSheet, ItemColumn\n\nvd.option('html_title', '<h2>{sheet.name}</h2>', 'table header when saving to html')\n\n\n@VisiData.api\ndef guess_html(vd, p):\n    with p.open() as fp:\n        r = fp.read(10240)\n        if r.strip().startswith('<'):\n            m = re.search(r, r'charset=(\\S+)')\n            if m:\n                encoding = m.group(0)\n            else:\n                encoding = None\n            return dict(filetype='html', _likelihood=1, encoding=encoding)\n\n@VisiData.api\ndef open_html(vd, p):\n    return HtmlTablesSheet(p.base_stem, source=p)\n\nVisiData.open_htm = VisiData.open_html\n\n\nclass HtmlTablesSheet(IndexSheet):\n    rowtype = 'sheets'  # rowdef: HtmlTableSheet (sheet.html = lxml.html.HtmlElement)\n    columns = IndexSheet.columns + [\n        Column('tag', width=0, getter=lambda col,row: row.html.tag),\n        Column('id', getter=lambda col,row: row.html.attrib.get('id')),\n        Column('classes', getter=lambda col,row: row.html.attrib.get('class')),\n        Column('title', getter=lambda col,row: row.html.attrib.get('title')),\n        Column('aria_label', getter=lambda col,row: row.html.attrib.get('aria-label')),\n        Column('caption', getter=lambda col,row: row.html.xpath('normalize-space(./caption)') if row.html.xpath('./caption') else None, cache=True),\n        Column('summary', getter=lambda col,row: row.html.attrib.get('summary')),\n        Column('heading', getter=lambda col,row: row.html.xpath('normalize-space(./preceding-sibling::*[self::h1 or self::h2 or self::h3 or self::h4 or self::h5 or self::h6][1])') or None, cache=True),\n    ]\n    def iterload(self):\n        lxml = vd.importExternal('lxml')\n        from lxml import html\n        with self.source.open(encoding='utf-8') as fp:\n            doc = html.parse(fp, parser=vd.utf8_parser, base_url=self.source.given)\n        self.setKeys([self.column('name')])\n        self.column('keys').hide()\n        self.column('source').hide()\n\n        for i, e in enumerate(doc.iter('table')):\n            if e.tag == 'table':\n                yield HtmlTableSheet(e.attrib.get(\"id\", \"table_\" + str(i)), source=e, html=e)\n\n        yield HtmlLinksSheet(*self.names, 'links', source=doc, html=doc.getroot())\n\n\ndef is_header(elem):\n    scope = elem.attrib.get('scope', '')\n\n    if elem.tag == 'th':\n        if not scope or scope == 'col':\n            return True\n\n    return False\n\nclass HtmlLinksSheet(Sheet):\n    rowtype = 'links'  #  rowdef: tuple(element, attribute, link, pos)\n    columns = [\n        ItemColumn('element', 0, width=0),\n        Column('tag', getter=lambda c,r:r[0].tag),\n        ItemColumn('attribute', 1),\n        Column('text', getter=lambda c,r:r[0].text),\n        ItemColumn('link', 2, width=40),\n    ]\n    def iterload(self):\n        lxml = vd.importExternal('lxml')\n        from lxml.html import iterlinks\n        root = self.source.getroot()\n        root.make_links_absolute(self.source.docinfo.URL, handle_failures='ignore')\n        yield from iterlinks(root)\n\n    def openRow(self, row):\n        return vd.openSource(row[2])\n\nclass HtmlElementsSheet(Sheet):\n    rowtype = 'links'  #  dict\n    columns = [\n        ItemColumn('__element__', width=0),\n    ]\n    def iterload(self):\n        yield from self.source.iterlinks()\n        return\n        for r in self.source.iter(self.source_tag):\n            row = copy.copy(r.attrib)\n            row['__element__'] = r\n            if row.get('href'):\n                row['href'] = urllib.parse.urljoin(self.source.URL, row.get('href'))\n\n            yield row\n\n    def openRow(self, row):\n        return vd.openSource(row.url)\n\n\nclass HtmlTableSheet(Sheet):\n    rowtype = 'rows'  #  list of strings\n    columns = []\n\n    def iterload(self):\n        import lxml\n        headers = []\n\n        maxlinks = {}  # [colnum] -> nlinks:int\n        ncols = 0\n        active_rowspans = {}  # {colnum: (remaining_rows, cellval, links)}\n\n        for rownum, r in enumerate(self.source.iter('tr')):\n            row = {}  # colnum -> (cellval, links)\n            is_data_row = False\n\n            # fill in cells from active rowspans first\n            for colnum in list(active_rowspans):\n                remaining, val, lnks = active_rowspans[colnum]\n                row[colnum] = (val, lnks)\n                maxlinks[colnum] = max(maxlinks.get(colnum, 0), len(lnks))\n                if remaining <= 1:\n                    del active_rowspans[colnum]\n                else:\n                    active_rowspans[colnum] = (remaining - 1, val, lnks)\n\n            colnum = 0\n            # get starting column, which might be different if there were rowspan>1 already\n            if rownum < len(headers):\n                while colnum < len(headers[rownum]):\n                    if headers[rownum][colnum] is None:\n                        break\n                    colnum += 1\n\n            children = [cell for cell in r.getchildren() if not isinstance(cell, lxml.etree.CommentBase)]\n            has_data_cells = any(not is_header(cell) for cell in children)\n\n            for cell in r.getchildren():\n                colspan = int(cell.attrib.get('colspan', 1))\n                rowspan = int(cell.attrib.get('rowspan', 1))\n                if isinstance(cell, lxml.etree.CommentBase):\n                    continue\n                cellval = ' '.join(x.strip() for x in cell.itertext())  # text only without markup\n                links = [\n                    vd.callIgnoreExceptions(urllib.parse.urljoin, self.source.base_url, x.get('href')) or x.get('href')\n                        for x in cell.iter('a')\n                ]\n\n                if is_header(cell) and not has_data_cells:\n                    maxlinks[colnum] = max(maxlinks.get(colnum, 0), len(links))\n\n                    for k in range(rownum, rownum+rowspan):\n                        while k >= len(headers):  # extend headers list with lists for all header rows\n                            headers.append([])\n\n                        for j in range(colnum, colnum+colspan):\n                            while j >= len(headers[k]):\n                                headers[k].append(None)\n                            headers[k][j] = cellval\n                        cellval = ''   # use empty non-None value for subsequent rows in the rowspan\n                else:\n                    is_data_row = True\n                    # skip over columns occupied by rowspans\n                    while colnum in row:\n                        colnum += 1\n\n                    maxlinks[colnum] = max(maxlinks.get(colnum, 0), len(links))\n                    row[colnum] = (cellval, links)\n\n                    if rowspan > 1:\n                        for j in range(colnum, colnum+colspan):\n                            active_rowspans[j] = (rowspan - 1, cellval, links)\n\n                colnum += colspan\n\n            if is_data_row and row:\n                ncols = max(ncols, max(row) + 1)\n                rowlist = [(None, [])] * ncols\n                for i, v in row.items():\n                    rowlist[i] = v\n                yield rowlist\n\n        self.columns = []\n        if headers:\n            it = itertools.zip_longest(*headers, fillvalue='')\n        else:\n            if len(self.rows) > 0:\n                if self.options.header == 0:\n                    it = ['']*ncols\n                else:\n                    it = []\n                    for _ in range(self.options.header):\n                        r = list(list(x) for x in self.rows.pop(0))\n                        r += ['']*(ncols-len(r))\n                        it = [a+b for a, b in zip(it, r)] if it else r\n            else:\n                it = []\n\n        for colnum, names in enumerate(it):\n            name = '_'.join(str(x) for x in names if x)\n            self.addColumn(Column(name, getter=lambda c,r,i=colnum: r[i][0]))\n            for linknum in range(maxlinks.get(colnum, 0)):\n                self.addColumn(Column(name+'_link'+str(linknum), width=20, getter=lambda c,r,i=colnum,j=linknum: r[i][1][j]))\n\n\n@VisiData.api\ndef save_html(vd, p, *vsheets):\n    'Save vsheets as HTML tables in a single file'\n\n    with open(p, 'w', encoding='ascii', errors='xmlcharrefreplace') as fp:\n        for sheet in vsheets:\n\n            if options.html_title:\n                fp.write(options.html_title.format(sheet=sheet, vd=vd))\n\n            fp.write('<table id=\"{sheetname}\">\\n'.format(sheetname=html.escape(sheet.name)))\n\n            # headers\n            fp.write('<tr>')\n            for col in sheet.visibleCols:\n                contents = html.escape(col.name)\n                fp.write('<th>{colname}</th>'.format(colname=contents))\n            fp.write('</tr>\\n')\n\n            # rows\n            with Progress(gerund='saving'):\n                for dispvals in sheet.iterdispvals(format=True):\n                    fp.write('<tr>')\n                    for val in dispvals.values():\n                        fp.write('<td>')\n                        fp.write(html.escape(val))\n                        fp.write('</td>')\n                    fp.write('</tr>\\n')\n\n            fp.write('</table>')\n\n\n@VisiData.lazy_property\ndef utf8_parser(vd):\n    lxml = vd.importExternal('lxml')\n    return lxml.html.HTMLParser(encoding='utf-8')\n#    return lxml.etree.HTMLParser(encoding='utf-8')\n\n\n@VisiData.api\ndef HTML(vd, s):\n    lxml = vd.importExternal('lxml')\n    from lxml import html\n    return html.fromstring(s, parser=vd.utf8_parser)\n\n\nVisiData.save_htm = VisiData.save_html\n"
  },
  {
    "path": "visidata/loaders/http.py",
    "content": "import re\n\nfrom visidata import Path, RepeatFile, vd, VisiData, __version_info__\nfrom visidata.loaders.tsv import splitter\n\nvd.option('http_max_next', 0, 'max next.url pages to follow in http response') #848\nvd.option('http_req_headers', {'User-Agent': __version_info__}, 'http headers to send to requests')\nvd.option('http_ssl_verify', True, 'verify host and certificates for https')\n\n\n@VisiData.api\ndef guessurl_mimetype(vd, path, response):\n    content_filetypes = {\n        'tab-separated-values': 'tsv'\n    }\n\n    for k in dir(vd):\n        if k.startswith('open_'):\n            ft = k[5:]\n            content_filetypes[ft] = ft\n\n    contenttype = response.getheader('content-type')\n    subtype = contenttype.split(';')[0].split('/')[-1]\n    if subtype in content_filetypes:\n        return dict(filetype=content_filetypes.get(subtype), _likelihood=10)\n\n\n\n@VisiData.api\ndef openurl_http(vd, path, filetype=None):\n    schemes = path.scheme.split('+')\n    if len(schemes) > 1:\n        sch = schemes[0]\n        openfunc = getattr(vd, f'openhttp_{sch}', vd.getGlobals().get(f'openhttp_{sch}'))\n        if not openfunc:\n            vd.fail(f'no vd.openhttp_{sch}')\n        return openfunc(Path(schemes[-1]+'://'+path.given.split('://')[1]))\n\n    import urllib.request\n    import urllib.error\n    import mimetypes\n\n    ctx = None\n    if not vd.options.http_ssl_verify:\n        import ssl\n\n        ctx = ssl.create_default_context()\n        ctx.check_hostname = False\n        ctx.verify_mode = ssl.CERT_NONE\n\n    req = urllib.request.Request(path.given, **vd.options.getall('http_req_'))\n    try:\n        response = urllib.request.urlopen(req, context=ctx)\n    except urllib.error.HTTPError as e:\n        vd.fail(f'cannot open URL: HTTP Error {e.code}: {e.reason}')\n    except urllib.error.URLError as e:\n        vd.fail(f'cannot open URL: {e.reason}')\n\n    filetype = filetype or vd.guessFiletype(path, response, funcprefix='guessurl_').get('filetype')  # try guessing by url\n    filetype = filetype or vd.guessFiletype(path, funcprefix='guess_').get('filetype')  # try guessing by contents\n\n    # Automatically paginate if a 'next' URL is given\n    def _iter_lines(path=path, response=response, max_next=vd.options.http_max_next):\n        path.responses = []\n        n = 0\n        while response:\n            path.responses.append(response)\n            with response as fp:\n                for line in splitter(response, delim=b'\\n'):\n                    yield line.decode(vd.options.encoding)\n\n            linkhdr = response.getheader('Link')\n            src = None\n            if linkhdr:\n                links = parse_header_links(linkhdr)\n                link_data = {}\n                for link in links:\n                    key = link.get('rel') or link.get('url')\n                    link_data[key] = link\n                src = link_data.get('next', {}).get('url', None)\n\n            if not src:\n                break\n\n            n += 1\n            if n > max_next:\n                vd.warning(f'stopping at max next pages: {max_next} pages')\n                break\n\n            vd.status(f'fetching next page from {src}')\n            req = urllib.request.Request(src, **vd.options.getall('http_req_'))\n            response = urllib.request.urlopen(req)\n\n    # add resettable iterator over contents as an already-open fp\n    path.fptext = RepeatFile(_iter_lines())\n\n    return vd.openSource(path, filetype=filetype)\n\ndef parse_header_links(link_header):\n    '''Return a list of dictionaries:\n    [{'url': 'https://example.com/content?page=1', 'rel': 'prev'},\n     {'url': 'https://example.com/content?page=3', 'rel': 'next'}]\n    Takes a link header string, of the form\n    '<https://example.com/content?page=1>; rel=\"prev\", <https://example.com/content?page=3>; rel=\"next\"'\n    See https://datatracker.ietf.org/doc/html/rfc8288#section-3\n    '''\n\n    links = []\n    quote_space = ' \\'\"'\n    link_header = link_header.strip(quote_space)\n    if not link_header: return []\n    for link_value in re.split(', *<', link_header):\n        if ';' in link_value:\n            url, params = link_value.split(';', maxsplit=1)\n        else:\n            url, params = link_value, ''\n        link = {'url': url.strip('<>' + quote_space)}\n\n        for param in params.split(';'):\n            if '=' in param:\n                key, value = param.split('=')\n                key = key.strip(quote_space)\n                value = value.strip(quote_space)\n                link[key] = value\n            else:\n                break\n        links.append(link)\n    return links\n\nVisiData.openurl_https = VisiData.openurl_http\n"
  },
  {
    "path": "visidata/loaders/imap.py",
    "content": "from visidata import VisiData, vd, TableSheet, asyncthread, ColumnItem, Column, ColumnAttr, Progress\nimport visidata.loaders.google\nfrom urllib.parse import urlparse\n\n\n@VisiData.api\ndef openurl_imap(vd, url, **kwargs):\n    url_parsed = urlparse(str(url))\n    return ImapSheet(url_parsed.hostname, source=url_parsed, password=url_parsed.password)\n\n\nclass ImapSheet(TableSheet):\n    columns = [\n        ColumnItem('message-id'),\n        ColumnItem('folder'),\n        ColumnItem('Date'),\n        ColumnItem('From'),\n        ColumnItem('To'),\n        ColumnItem('Subject'),\n        ColumnAttr('defects'),\n        Column('payload', getter=lambda c,r: r.get_payload()),\n        Column('content_type', getter=lambda c,r: r.get_content_type()),\n    ]\n    nKeys = 1\n\n    def iterload(self):\n        import imaplib\n        import email.parser\n\n        m = imaplib.IMAP4_SSL(host=self.source.hostname)\n        # m.debug=4\n        user = self.source.username\n\n        if self.source.hostname == 'imap.gmail.com':\n            credentials=vd.google_auth(scopes='https://mail.google.com/')\n            header_template = 'user=%s\\1auth=Bearer %s\\1\\1'\n            m.authenticate('XOAUTH2', lambda x: header_template % (user, credentials.token))\n        else:\n            if self.password is None:\n                vd.error('no password given in url') # vd.input(\"imap password for %s\" % user, display=False))\n            m.login(user, self.source.password)\n\n        typ, folders = m.list()\n        for r in Progress(folders, gerund=\"downloading\"):\n            fname = r.decode('utf-8').split()[-1]\n            try:\n                m.select(fname)\n                typ, data = m.search(None, 'ALL')\n                for num in data[0].split():\n                    typ, msgbytes = m.fetch(num, '(RFC822)')\n                    if typ != 'OK':\n                        vd.warning(typ, msgbytes)\n                        continue\n\n                    msg = email.message_from_bytes(msgbytes[0][1])\n                    msg['folder'] = fname\n                    yield msg\n\n                m.close()\n            except Exception:\n                vd.exceptionCaught()\n\n        m.logout()\n\n    def addRow(self, row, **kwargs):\n        if row.is_multipart():\n            for p in row.get_payload():\n                for hdr in 'message-id folder Date From To Subject'.split():\n                    if hdr in row:\n                        p[hdr] = row[hdr]\n                self.addRow(p, **kwargs)\n        else:\n            super().addRow(row, **kwargs)\n"
  },
  {
    "path": "visidata/loaders/jrnl.py",
    "content": "'''Loader for the jrnl.sh CLI journal file format'''\n\nimport re\n\n\nfrom visidata import VisiData, TableSheet, ItemColumn, AttrDict\n\n\n@VisiData.api\ndef open_jrnl(vd, p):\n    return JrnlSheet(p.base_stem, source=p)\n\n\nclass JrnlSheet(TableSheet):\n    # rowdef: AttrDict\n    columns = [\n        ItemColumn('date'),\n        ItemColumn('time'),\n        ItemColumn('title'),\n        ItemColumn('body'),\n        ItemColumn('tags'),\n    ]\n    def iterload(self):\n        re_title = re.compile(r'\\[(.*?)\\s(.*?)\\] (.*)')\n        prevline = ''\n        for line in self.source:\n            tags = re.findall(r'(?<!\\S)(@[-+*#/\\w]+)', line)\n            if not prevline:\n                m = re_title.match(line)\n                if m:\n                    row = AttrDict()\n                    row.date, row.time, row.title = m.groups()\n                    row.body = ''\n                    row.tags = ' '.join(tags)\n                    yield row\n                    continue\n\n            row.body += line + '\\n'\n            row.tags = ' '.join([row.tags]+tags)\n            prevline = line.strip()\n\n\n@VisiData.api\ndef save_jrnl(vd, p, *vsheets):\n    with p.open(mode='w', encoding=vsheets[0].options.save_encoding) as fp:\n        for vs in vsheets:\n            for r in vs.iterrows():\n                fp.write(f'[{r.date} {r.time}] {r.title}\\n')\n                body = r.body.strip()\n                if body:\n                    fp.write(body + '\\n')\n                fp.write('\\n')\n"
  },
  {
    "path": "visidata/loaders/json.py",
    "content": "import json\nfrom collections import Counter\n\nfrom visidata import vd, date, anytype, VisiData, PyobjSheet, AttrDict, stacktrace, TypedExceptionWrapper, AlwaysDict, ItemColumn, wrapply, TypedWrapper, Progress, Sheet\n\nvd.option('json_indent', None, 'indent to use when saving json')\nvd.option('json_sort_keys', False, 'sort object keys when saving to json')\nvd.option('json_ensure_ascii', True, 'ensure ascii encode when saving json')\nvd.option('default_colname', '', 'column name to use for non-dict rows')\n\n@VisiData.api\ndef guess_json(vd, p):\n    with p.open(encoding=vd.options.encoding) as fp:\n        try:\n            line = next(fp)\n        except StopIteration:\n            return\n\n    line = line.strip()\n\n    if line.startswith('{') and line.endswith('}'):\n        return dict(filetype='jsonl')\n\n    if line.startswith(tuple('[{')):\n        return dict(filetype='json')\n\n\n@VisiData.api\ndef open_jsonobj(vd, p):\n    return JsonSheet(p.base_stem, source=p)\n\n@VisiData.api\ndef open_jsonl(vd, p):\n    return JsonSheet(p.base_stem, source=p)\n\nVisiData.open_ndjson = VisiData.open_ldjson = VisiData.open_json = VisiData.open_jsonl\n\n\nclass JsonSheet(Sheet):\n    _rowtype = AttrDict\n    def resetCols(self):\n        self._knownKeys = set()\n        super().resetCols()\n\n    def iterload(self):\n        with self.open_text_source() as fp:\n            for L in fp:\n                L = L.strip()\n                try:\n                    if not L: # skip blank lines\n                        continue\n                    ret = json.loads(L, object_hook=AttrDict)\n                    if isinstance(ret, list):\n                        yield from ret\n                    else:\n                        yield ret\n\n                except ValueError as e:\n                    if self.rows:   # if any rows have been added already\n                        e.stacktrace = stacktrace()\n                        yield TypedExceptionWrapper(json.loads, L, exception=e)  # an error on one line\n                    else:\n                        with self.open_text_source() as fp:\n                            ret = json.load(fp, object_hook=AttrDict)\n                            if isinstance(ret, list):\n                                yield from ret\n                            else:\n                                yield ret\n                        break\n\n    def addColumn(self, *cols, index=None):\n        for c in cols:\n            self._knownKeys.add(c.expr or c.name)\n        return super().addColumn(*cols, index=index)\n\n    def addRow(self, row, index=None):\n        # Wrap non-dict rows in a dummy object with a predictable key name.\n        # This allows for more consistent handling of rows containing scalars\n        # or lists.\n        if not isinstance(row, dict):\n            v = {self.options.default_colname: row}\n            row = AlwaysDict(row, **v)\n\n        ret = super().addRow(row, index=index)\n\n        for k in row:\n            if k not in self._knownKeys:\n                c = ItemColumn(k)\n                self.addColumn(c)\n\n        return ret\n\n    def newRow(self, **fields):\n        return AttrDict(fields)\n\n    def openRow(self, row):\n        return PyobjSheet(\"%s[%s]\" % (self.name, self.rowname(row)), source=row)\n\nJsonSheet.init('_knownKeys', set, copy=True)  # set of row keys already seen\n\n## saving json and jsonl\n\nclass _vjsonEncoder(json.JSONEncoder):\n    def default(self, obj):\n        return str(obj)\n\n\n@VisiData.api\ndef get_json_value(vd, col, row):\n    o = wrapply(col.getTypedValue, row)\n    if isinstance(o, TypedExceptionWrapper):\n        o = col.sheet.options.safe_error or str(o.exception)\n    elif isinstance(o, TypedWrapper):\n        o = o.val\n    elif isinstance(o, date):\n        o = col.getDisplayValue(row)\n    return o\n\n\ndef _rowdict(cols, row, keep_nulls=False):\n    ret = {}\n    for col in cols:\n        o = vd.get_json_value(col, row)\n        if keep_nulls or o is not None:\n            ret[col.name] = o\n    return ret\n\n\n@VisiData.api\ndef encode_json(vd, row, cols, enc=_vjsonEncoder(sort_keys=False)):\n    'Return JSON string for given *row* and given *cols*.'\n    return enc.encode(_rowdict(cols, row))\n\n\n@VisiData.api\ndef save_json(vd, p, *vsheets):\n    vs = vsheets[0]\n    with p.open(mode='w', encoding=vs.options.save_encoding) as fp:\n        try:\n            indent = int(vs.options.json_indent)\n        except Exception:\n            indent = vs.options.json_indent\n\n        jsonenc = _vjsonEncoder(indent=indent, sort_keys=vs.options.json_sort_keys, ensure_ascii=vs.options.json_ensure_ascii)\n\n        dupnames = find_duplicates([vs.name for vs in vsheets])\n        for name in dupnames:\n            vd.warning('json cannot save sheet with duplicated name: ' + name)\n        for vs in vsheets:\n            dupnames = find_duplicates([c.name for c in vs.visibleCols])\n            for name in dupnames:\n                vd.warning('json cannot save column with duplicated name: ' + name)\n        if len(vsheets) == 1:\n            fp.write('[\\n')\n            vs = vsheets[0]\n            for i, row in enumerate(vs.iterrows('saving')):\n                if i > 0:\n                    fp.write(',\\n')\n                rd = _rowdict(vs.visibleCols, row, keep_nulls=(i==0))\n                fp.write(jsonenc.encode(rd))\n            fp.write('\\n]\\n')\n        else:\n            it = {vs.name: [_rowdict(vs.visibleCols, row, keep_nulls=(i==0)) for i, row in enumerate(vs.iterrows())] for vs in vsheets}\n\n            with Progress(gerund='saving'):\n                for chunk in jsonenc.iterencode(it):\n                    fp.write(chunk)\n\n\n@Sheet.api\ndef write_jsonl(vs, fp):\n        vcols = vs.visibleCols\n        jsonenc = _vjsonEncoder()\n        dupnames = find_duplicates([c.name for c in vcols])\n        for name in dupnames:\n            vd.warning('json cannot save column with duplicated name: ' + name)\n        with Progress(gerund='saving'):\n            for i, row in enumerate(vs.iterrows()):\n                rowdict = _rowdict(vcols, row, keep_nulls=(i==0))\n                fp.write(jsonenc.encode(rowdict) + '\\n')\n\n        if len(vs) == 0:\n            vd.warning(\n                \"Output file is empty - cannot save headers without data for jsonl.\\n\"\n                \"Use `.jsonla` filetype to save as JSONL arrays format \"\n                \"rather than JSONL dict format to preserve the headers.\"\n            )\n\n\n@VisiData.api\ndef save_jsonl(vd, p, *vsheets):\n    with p.open(mode='w', encoding=vsheets[0].options.save_encoding) as fp:\n        if len(vsheets) > 1:\n            vd.warning('jsonl cannot separate sheets yet. Concatenating all rows.')\n        for vs in vsheets:\n            vs.write_jsonl(fp)\n\n\n@VisiData.api\ndef JSON(vd, s:str):\n    'Parse `s` as JSON.'\n    return json.loads(s)\n\ndef find_duplicates(names):\n    return list(colname for colname,count in Counter(names).items() if count > 1)\n\nJsonSheet.options.encoding = 'utf-8'\nJsonSheet.options.regex_skip = r'^(//|#).*'\n\nVisiData.save_ndjson = VisiData.save_jsonl\nVisiData.save_ldjson = VisiData.save_jsonl\n\nvd.addGlobals({\n    'JsonSheet': JsonSheet,\n    'JsonLinesSheet': JsonSheet,\n})\n"
  },
  {
    "path": "visidata/loaders/jsonla.py",
    "content": "import json\n\nfrom visidata import VisiData, vd, SequenceSheet, deduceType, Progress\n\n\n@VisiData.api\ndef guess_jsonla(vd, p):\n    '''A JSONLA file is a JSONL file with rows of arrays, where the first row\n    is a header array:\n\n    [\"A\", \"B\", \"C\"]\n    [1, \"blue\", true]\n    [2, \"yellow\", false]\n\n    The header array must be a flat array of strings\n\n    If no suitable header is found, fall back to generic JSON load.\n    '''\n\n    with p.open(encoding=vd.options.encoding) as fp:\n        try:\n            first_line = next(fp)\n        except StopIteration:\n            return\n\n    if first_line.strip().startswith('['):\n        try:\n            ret = json.loads(first_line)\n        except json.decoder.JSONDecodeError:\n            return\n        if isinstance(ret, list) and all(isinstance(v, str) for v in ret):\n            return dict(filetype='jsonla')\n\n\n@VisiData.api\ndef open_jsonla(vd, p):\n    return JsonlArraySheet(p.base_stem, source=p)\n\n\nclass JsonlArraySheet(SequenceSheet):\n    rowtype = 'rows'    # rowdef: list of Python objects decoded from JSON\n    def iterload(self):\n        with self.open_text_source() as fp:\n            for L in fp:\n                yield json.loads(L)\n\n        # set column types from first row\n        for i, c in enumerate(self.columns):\n            c.type = deduceType(self.rows[0][i])\n\n\ndef get_jsonla_rows(sheet, cols):\n    for row in Progress(sheet.rows):\n        yield [vd.get_json_value(col, row) for col in cols]\n\n\nclass _vjsonEncoder(json.JSONEncoder):\n    def default(self, obj):\n        return str(obj)\n\n\ndef write_jsonla(vs, fp):\n        vcols = vs.visibleCols\n        jsonenc = _vjsonEncoder()\n        with Progress(gerund='saving'):\n            header = [col.name for col in vcols]\n            fp.write(jsonenc.encode(header) + '\\n')\n            rows = get_jsonla_rows(vs, vcols)\n            for row in rows:\n                fp.write(jsonenc.encode(row) + '\\n')\n\n\n@VisiData.api\ndef save_jsonla(vd, p, *vsheets):\n    with p.open(mode='w', encoding=vsheets[0].options.save_encoding) as fp:\n        for vs in vsheets:\n            write_jsonla(vs, fp)\n\n\nJsonlArraySheet.options.regex_skip = r'^(//|#).*'\n"
  },
  {
    "path": "visidata/loaders/lsv.py",
    "content": "import collections\n\n#1179  Line Separated Values for e.g. awk\n\nfrom visidata import VisiData, Sheet, ItemColumn\n\n\n@VisiData.api\ndef open_lsv(vd, p):\n    return LsvSheet(p.base_stem, source=p)\n\n\n@VisiData.api\ndef save_lsv(vd, p, *vsheets):\n    vs = vsheets[0]\n    with p.open(mode='w', encoding=vs.options.save_encoding) as fp:\n        for row in vs.iterrows('saving'):\n            for col in vs.visibleCols:\n                fp.write('%s: %s\\n' % (col.name, col.getFullDisplayValue(row)))\n            fp.write('\\n')\n\n\nclass LsvSheet(Sheet):\n    def addRow(self, row, **kwargs):\n        super().addRow(row, **kwargs)\n        for k in row:\n            if k not in self._knownCols:\n                self.addColumn(ItemColumn(k))\n                self._knownCols.add(k)\n\n\n    def iterload(self):\n        self.columns = []\n        self.rows = []\n        self._knownCols = set()\n        row = collections.defaultdict(str)\n        k = ''\n\n        with self.open_text_source() as fp:\n            for line in fp:\n                line = line.strip()\n                if not line:\n                    yield row\n                    row = collections.defaultdict(str)\n\n                if ':' in line:\n                    k, line = line.split(':', maxsplit=1)\n                # else append to previous k\n\n                row[k.strip()] += line.strip()\n\n        if row:\n            yield row\n"
  },
  {
    "path": "visidata/loaders/mailbox.py",
    "content": "from visidata import VisiData, Sheet, ItemColumn, date, Column\n\n\n@VisiData.api\ndef open_mbox(vd, p):\n    return MboxSheet(p.base_stem, source=p, format='mbox')\nVisiData.open_mailbox = VisiData.open_mbox\n\n@VisiData.api\ndef open_maildir(vd, p):\n    return MboxSheet(p.base_stem, source=p, format='Maildir')\n\n@VisiData.api\ndef open_mmdf(vd, p):\n    return MboxSheet(p.base_stem, source=p, format='MMDF')\n\n@VisiData.api\ndef open_babyl(vd, p):\n    return MboxSheet(p.base_stem, source=p, format='Babyl')\n\n@VisiData.api\ndef open_mh(vd, p):\n    return MboxSheet(p.base_stem, source=p, format='MH')\n\n\nclass MboxSheet(Sheet):\n    columns = [\n        ItemColumn('Date', type=date),\n        ItemColumn('From'),\n        ItemColumn('To'),\n        ItemColumn('Cc'),\n        ItemColumn('Subject'),\n        Column('Payload', getter=lambda c,r: r.get_payload(decode=True),\n                          setter=lambda c,r,v: r.set_payload(v)),\n    ]\n    def iterload(self):\n        import mailbox\n        cls = getattr(mailbox, self.format)\n        self.mailbox = cls(str(self.source), create=False)\n        for r in self.mailbox.itervalues():\n            yield r\n"
  },
  {
    "path": "visidata/loaders/markdown.py",
    "content": "from visidata import VisiData, vd, options, Progress\n\ndef markdown_link(s, href):\n    if not href:\n        return s\n\n    return f'[{s}]({href})'\n\ndef markdown_escape(s, style='orgmode'):\n    if style == 'jira':\n        return s\n\n    ret = ''\n    for ch in s:\n        if ch in '\\\\`*_{}[]()>#+-.!':\n            ret += '\\\\'+ch\n        else:\n            ret += ch\n    return ret\n\ndef markdown_colhdr(col):\n    if vd.isNumeric(col):\n        return ('-' * (col.width-1)) + ':'\n    else:\n        return '-' * (col.width or options.default_width)\n\ndef write_md(p, *vsheets, md_style='orgmode'):\n    'pipe tables compatible with org-mode'\n\n    if md_style == 'jira':\n        delim = '||'\n    else:\n        delim = '|'\n\n    with p.open(mode='w', encoding=vsheets[0].options.save_encoding) as fp:\n        for vs in vsheets:\n            if len(vsheets) > 1:\n                fp.write('# %s\\n\\n' % vs.name)\n\n            hdrs = []\n            for col in vs.visibleCols:\n                if col.name.endswith('_href'):\n                    continue\n                hdrs.append('%-*s' % (col.width or options.default_width, markdown_escape(col.name, md_style)))\n\n            fp.write(delim + delim.join(hdrs) + delim + '\\n')\n\n            if md_style == 'orgmode':\n                fp.write('|' + '|'.join(markdown_colhdr(col) for col in vs.visibleCols if not col.name.endswith('_href')) + '|\\n')\n\n            with Progress(gerund='saving'):\n                for dispvals in vs.iterdispvals(format=True):\n                    vals = []\n                    for col, val in dispvals.items():\n                        if col.name.endswith('_href'):\n                            continue\n                        val = markdown_escape(val, md_style)\n                        linkcol = vs.colsByName.get(col.name + '_href')\n                        if linkcol:\n                            val = markdown_link(val, dispvals.get(linkcol))\n                        vals.append('%-*s' % (col.width or options.default_width, val))\n                    fp.write('|' + '|'.join(vals) + '|\\n')\n\n            fp.write('\\n')\n\n\n@VisiData.api\ndef save_md(vd, p, *sheets):\n    write_md(p, *sheets, md_style='orgmode')\n\n\n@VisiData.api\ndef save_jira(vd, p, *sheets):\n    write_md(p, *sheets, md_style='jira')\n"
  },
  {
    "path": "visidata/loaders/mbtiles.py",
    "content": "from visidata import VisiData, vd, Sheet, Column, asyncthread, Progress, ColumnItem, InvertedCanvas\n\nimport gzip\nimport sqlite3\n\n@VisiData.api\ndef open_pbf(vd, p):\n    return PbfSheet(p.base_stem, source=p)\n\n@VisiData.api\ndef open_mbtiles(vd, p):\n    return MbtilesSheet(p.base_stem, source=p)\n\ndef getListDepth(L):\n    if not isinstance(L, list):\n        return 0\n    if len(L) == 0:\n        return 0\n    return getListDepth(L[0]) + 1\n\ndef getFeatures(tile_data):\n    for layername, layer in tile_data.items():\n        for feat in layer['features']:\n            yield layername, feat\n\n\ndef tilename(row):\n    return \",\".join(str(x) for x in row)\n\n\nclass MbtilesSheet(Sheet):\n    columns = [\n        ColumnItem('zoom_level', 0),\n        ColumnItem('tile_column', 1),\n        ColumnItem('tile_row', 2),\n    ]\n\n    def getTile(self, zoom_level, tile_col, tile_row):\n        mapbox_vector_tile = vd.importExternal('mapbox_vector_tile', 'mapbox-vector-tile')\n\n        con = sqlite3.connect(str(self.source))\n        tile_data = con.execute('''\n       SELECT tile_data FROM tiles\n           WHERE zoom_level = ?\n             AND tile_column = ?\n             AND tile_row = ?''', (zoom_level, tile_col, tile_row)).fetchone()[0]\n\n        return mapbox_vector_tile.decode(gzip.decompress(tile_data))\n\n    def iterload(self):\n        con = sqlite3.connect(str(self.source))\n\n        self.metadata = dict(con.execute('SELECT name, value FROM metadata').fetchall())\n\n        tiles = con.execute('SELECT zoom_level, tile_column, tile_row FROM tiles')\n        yield from Progress(tiles.fetchall())\n\n    def getPlot(self, *rows):\n        if len(rows) == 1:\n            name = self.name+'_'+tilename(rows[0])\n        else:\n            name = self.name+'_selected'\n\n        sourceRows = sum((list(getFeatures(self.getTile(*r))) for r in rows), [])\n        return PbfCanvas(name+\"_map\", source=PbfSheet(name, source=self), sourceRows=sourceRows)\n\n    def openRow(self, row):\n        'load table referenced in current row into memory'\n        return PbfSheet(tilename(row), source=self, sourceRow=row)\n\n\nclass PbfSheet(Sheet):\n    columns = [\n        ColumnItem('layer', 0),\n        Column('geometry_type', getter=lambda col,row: row[1]['geometry']['type']),\n        Column('geometry_coords', getter=lambda col,row: row[1]['geometry']['coordinates'], width=0),\n        Column('geometry_coords_depth', getter=lambda col,row: getListDepth(row[1]['geometry']['coordinates']), width=0),\n    ]\n    nKeys = 1  # layer\n\n    def iterload(self):\n        props = set()  # property names\n        for r in getFeatures(self.source.getTile(*self.sourceRow)):\n            yield r\n            props.update(r[1]['properties'].keys())\n\n        for key in props:\n            self.addColumn(Column(key, getter=lambda col,row,key=key: row[1]['properties'][key]))\n\n\nclass PbfCanvas(InvertedCanvas):\n    aspectRatio = 1.0\n    def iterpolylines(self, r):\n        layername, feat = r\n        geom = feat['geometry']\n        t = geom['type']\n        coords = geom['coordinates']\n        key = self.source.rowkey(r)\n\n        if t == 'LineString':\n            yield coords, self.plotColor(key), r\n        elif t == 'Point':\n            yield [coords], self.plotColor(key), r\n        elif t == 'Polygon':\n            for poly in coords:\n                yield poly+[poly[0]], self.plotColor(key), r\n        elif t == 'MultiLineString':\n            for line in coords:\n                yield line, self.plotColor(key), r\n        elif t == 'MultiPolygon':\n            for mpoly in coords:\n                for poly in mpoly:\n                    yield poly+[poly[0]], self.plotColor(key), r\n        else:\n            vd.warning('unknown geometry type %s' % t)\n\n    @asyncthread\n    def reload(self):\n        self.reset()\n\n        for r in Progress(self.sourceRows):\n            for vertexes, attr, row in self.iterpolylines(r):\n                self.polyline(vertexes, attr, row)\n\n                if len(vertexes) == 1:\n                    textx, texty = vertexes[0]\n                    disptext = self.textCol.getDisplayValue(row)\n                    if disptext:\n                        self.label(textx, texty, disptext, attr, row)\n\n        self.refresh()\n\n\nPbfSheet.addCommand('.', 'plot-row', 'vd.push(PbfCanvas(name+\"_map\", source=sheet, sourceRows=[cursorRow], textCol=cursorCol))', 'plot blocks in current row')\nPbfSheet.addCommand('g.', 'plot-rows', 'vd.push(PbfCanvas(name+\"_map\", source=sheet, sourceRows=rows, textCol=cursorCol))', 'plot selected blocks')\nMbtilesSheet.addCommand('.', 'plot-row', 'vd.push(getPlot(cursorRow))', 'plot tiles in current row')\nMbtilesSheet.addCommand('g.', 'plot-selected', 'vd.push(getPlot(*selectedRows))', 'plot selected tiles')\n"
  },
  {
    "path": "visidata/loaders/msgpack.py",
    "content": "from visidata import vd, VisiData, JsonSheet\n\n\n@VisiData.api\ndef open_msgpack(vd, p):\n    return MsgpackSheet(p.base_stem, source=p)\n\n\nVisiData.open_msgpackz = VisiData.open_msgpack\n\n\nclass MsgpackSheet(JsonSheet):\n    def iterload(self):\n        msgpack = vd.importModule('msgpack')\n        data = self.source.read_bytes()\n        if self.source.options.filetype == 'msgpackz':\n            brotli = vd.importModule('brotli')\n            data = brotli.decompress(data)\n        yield from msgpack.unpackb(data, raw=False)\n"
  },
  {
    "path": "visidata/loaders/mysql.py",
    "content": "from contextlib import contextmanager\nfrom urllib.parse import urlparse, unquote\n\nfrom visidata import VisiData, vd, Sheet, anytype, asyncthread, ColumnItem\n\ndef codeToType(type_code, colname):\n    import MySQLdb as mysql\n\n    types = mysql.constants.FIELD_TYPE\n\n    if type_code in (types.TINY, types.SHORT, types.LONG, types.LONGLONG, types.INT24,):\n        return int\n\n    if type_code in (types.FLOAT, types.DOUBLE, types.DECIMAL, types.NEWDECIMAL,):\n        return float\n\n    if type_code == mysql.STRING:\n        return str\n\n    return anytype\n\n\n@VisiData.api\ndef openurl_mysql(vd, url, filetype=None):\n    url = urlparse(url.given)\n    dbname = url.path[1:]\n    return MyTablesSheet(dbname+\"_tables\", sql=SQL(url), schema=dbname)\n\n\nclass SQL:\n    def __init__(self, url):\n        self.url = url\n\n    @contextmanager\n    def cur(self, qstr):\n        import MySQLdb as mysql\n        import MySQLdb.cursors as cursors\n\n        dbname = self.url.path[1:]\n        connection_parameters = dict(\n            user=self.url.username,\n            database=self.url.path[1:],\n            host=self.url.hostname,\n            port=self.url.port or 3306,\n            use_unicode=True,\n            charset='utf8',\n            cursorclass=cursors.SSCursor) ## if SSCursor is not used mysql will first fetch ALL data, and only then visualize it\n\n        if self.url.password is not None:\n            connection_parameters['password'] = unquote(self.url.password) \n\n        connection = mysql.connect(**connection_parameters)\n\n        try:\n            cursor = connection.cursor() # one connection per request as SSCursor only allows to fetch data asynchronously from one query at a time\n            cursor.execute(qstr)\n            with cursor as c:\n                yield c\n        finally:\n            cursor.close()\n            connection.close()\n\n    @asyncthread\n    def query_async(self, qstr, callback=None):\n        with self.cur(qstr) as cur:\n            callback(cur)\n\n\ndef cursorToColumns(cur, sheet):\n    sheet.columns = []\n    for i, coldesc in enumerate(cur.description):\n        name, type, *_ = coldesc\n        sheet.addColumn(ColumnItem(name, i, type=codeToType(type, name)))\n\n\n# rowdef: (table_name, ncols)\nclass MyTablesSheet(Sheet):\n    rowtype = 'tables'\n\n    def iterload(self):\n        qstr = f'''\n            select\n                t.table_name,\n                column_count.ncols,\n                t.table_rows as est_nrows\n            from\n                information_schema.tables t,\n                (\n                    select\n                        table_name,\n                        count(column_name) as ncols\n                    from\n                        information_schema.columns\n                    where\n                        table_schema = '{self.schema}'\n                    group by\n                        table_name\n                ) as column_count\n            where\n                t.table_name = column_count.table_name\n                AND t.table_schema = '{self.schema}';\n        '''\n\n        with self.sql.cur(qstr) as cur:\n            # try to get first row to make cur.description available\n            r = cur.fetchone()\n            if r:\n                yield r\n            cursorToColumns(cur, self)\n            self.setKeys(self.columns[0:1])  # table_name is the key\n\n            for r in cur:\n                yield r\n\n    def openRow(self, row):\n        return MyTable(self.name+\".\"+row[0], source=row[0], sql=self.sql)\n\n\n# rowdef: tuple of values as returned by fetchone()\nclass MyTable(Sheet):\n    def iterload(self):\n        with self.sql.cur(\"SELECT * FROM \" + self.source) as cur:\n            r = cur.fetchone()\n            if r is None:\n                return\n\n            yield r\n            cursorToColumns(cur, self)\n            while True:\n                try:\n                    r = cur.fetchone()\n                    if r is None:\n                        break\n\n                    yield r\n                except UnicodeDecodeError as e:\n                    vd.exceptionCaught(e)\n"
  },
  {
    "path": "visidata/loaders/npy.py",
    "content": "from visidata import VisiData, vd, Sheet, date, anytype, options, Column, ItemColumn, Progress, vlen, PyobjSheet, TypedWrapper\nfrom itertools import chain\n\n'Loaders for .npy and .npz.  Save to .npy.  Depends on the zip loader.'\n\n@VisiData.api\ndef open_npy(vd, p):\n    return NpySheet(p.base_stem, source=p)\n\n@VisiData.api\ndef open_npz(vd, p):\n    return NpzSheet(p.base_stem, source=p)\n\nvd.option('npy_allow_pickle', False, 'numpy allow unpickling objects (unsafe)')\nvd.option('npy_matrix_enumerate', False, 'enumerate matrix rows and columns')\n\nclass NpySheet(Sheet):\n    def iterload(self):\n        numpy = vd.importExternal('numpy')\n        if not hasattr(self, 'npy'):\n            self.npy = numpy.load(str(self.source), encoding='bytes', allow_pickle=bool(self.options.npy_allow_pickle))\n        self.reloadCols()\n        transpose = len(self.npy.shape)==1 and not bool(self.npy.dtype.names)\n        if transpose:\n            source = self.npy[:,None]\n        else:\n            source = self.npy\n\n        nrows = len(self.npy)\n\n        if self.options.npy_matrix_enumerate:\n            source = list(list((chain((i,), row))) for i, row in enumerate(source))\n\n        yield from Progress(source, nrows)\n\n\n    def reloadCols(self):\n        self.columns = []\n        if len(self.npy.shape)==1:\n            for i, (colname, fmt, *shape) in enumerate(self.npy.dtype.descr):\n                if not colname:\n                    colname = f\"col{i}\"\n                ctype = _guess_type(shape, fmt)\n                if ctype==\"time\":\n                    self.addColumn(Column(colname, type=date, getter=lambda c,r,i=i: str(r[i])))\n                    continue\n                self.addColumn(ItemColumn(colname, i, type=ctype))\n        elif len(self.npy.shape)==2:\n            ncols = self.npy.shape[1]\n            ctype = _guess_type(None, self.npy.dtype.descr[0][1])\n\n            if self.options.npy_matrix_enumerate:\n                self.addColumn(ItemColumn(\"row\", 0, width=8, keycol=1, type=int), index=0)\n                for i in range(ncols):\n                    self.addColumn(ItemColumn(f'col{i}', i+1, width=8, type=ctype), index=i+1)\n            else:\n                for i in range(ncols):\n                    self.addColumn(ItemColumn('', i, width=8, type=ctype), index=i)\n        else:\n            vd.fail(f\"too many dimensions in shape {self.npy.shape}\")\n\ndef _guess_type(shape, fmt):\n    if shape:\n        return anytype\n    elif 'M' in fmt:\n        return \"time\"\n    elif 'i' in fmt or 'u' in fmt:\n        return int\n    elif 'f' in fmt:\n        return float\n    return anytype\n\nclass NpzSheet(vd.ZipSheet):\n    # rowdef: tuple(tablename, table)\n    columns = [\n        ItemColumn('name', 0),\n        ItemColumn('length', 1, type=vlen),\n    ]\n\n    def iterload(self):\n        numpy = vd.importExternal('numpy')\n        self.npz = numpy.load(str(self.source), encoding='bytes', allow_pickle=bool(self.options.npy_allow_pickle))\n        yield from Progress(self.npz.items())\n\n    def openRow(self, row):\n        numpy = vd.importExternal('numpy')\n        tablename, tbl = row\n        if isinstance(tbl, numpy.ndarray):\n            return NpySheet(tablename, npy=tbl)\n\n        return PyobjSheet(tablename, source=tbl)\n\n\n@VisiData.api\ndef save_npy(vd, p, sheet):\n    np = vd.importExternal('numpy')\n\n    dtype = []\n\n    for col in Progress(sheet.visibleCols):\n        if col.type in (int, vlen):\n            dt = 'i8'\n        elif col.type is date:\n            dt = 'datetime64[s]'\n        elif col.type in vd.numericTypes:\n            dt = 'f8'\n        else: #  if col.type in (str, anytype):\n            width = col.getMaxDataWidth(sheet.rows)\n            dt = 'U'+str(width)\n        dtype.append((col.name, dt))\n\n    data = []\n    for typedvals in sheet.iterdispvals(format=False):\n        nprow = []\n        for col, val in typedvals.items():\n            if isinstance(val, TypedWrapper):\n                if col.type is anytype:\n                    val = ''\n                else:\n                    val = options.safe_error\n            elif col.type is date:\n                val = np.datetime64(val.isoformat())\n            nprow.append(val)\n        data.append(tuple(nprow))\n\n    arr = np.array(data, dtype=dtype)\n    with p.open_bytes(mode='w') as outf:\n        np.save(outf, arr, allow_pickle=bool(sheet.options.npy_allow_pickle))\n"
  },
  {
    "path": "visidata/loaders/odf.py",
    "content": "from visidata import vd, VisiData, Sheet, IndexSheet, SequenceSheet\n\n\n@VisiData.api\ndef open_ods(vd, p):\n    return OdsIndexSheet(p.base_stem, source=p)\n\n\nclass OdsIndexSheet(IndexSheet):\n    def iterload(self):\n        vd.importExternal('odf', 'odfpy')\n        import odf.opendocument\n        import odf.table\n        self.doc = odf.opendocument.load(self.source)\n        for sheet in self.doc.spreadsheet.getElementsByType(odf.table.Table):\n            yield OdsSheet(sheet.getAttribute('name'), source=sheet)\n\n\ndef _get_cell_string_value(cell, text_s):\n        vd.importExternal('odf', 'odfpy')\n        from odf.element import Element\n        from odf.namespaces import TEXTNS\n\n        value = ''\n\n        for fragment in cell.childNodes:\n            if isinstance(fragment, Element):\n                if fragment.qname == text_s:\n                    value += \" \" * int(fragment.attributes.get((TEXTNS, \"c\"), 1))\n                else:\n                    value += _get_cell_string_value(fragment, text_s)\n            else:\n                value += str(fragment)\n        return value\n\n\nclass OdsSheet(SequenceSheet):\n    def iterload(self):\n        vd.importExternal('odf', 'odfpy')\n        import odf.table\n        import odf.text\n        from odf.namespaces import TABLENS, OFFICENS\n        from odf.text import S\n\n        text_s = S().qname\n\n        cell_names = [odf.table.CoveredTableCell().qname, odf.table.TableCell().qname]\n        empty_rows = 0\n        for odsrow in self.source.getElementsByType(odf.table.TableRow):\n            row = []\n\n            empty_cells = 0\n            for cell in odsrow.childNodes:\n                if cell.qname not in cell_names: continue\n                value = ''\n                if cell.qname == odf.table.TableCell().qname:\n                    cell_type = cell.attributes.get((OFFICENS, \"value-type\"))\n                    if cell_type is None:\n                        value = None\n                    elif cell_type == \"boolean\":\n                        value = str(cell) == \"TRUE\"\n                    elif cell_type in [\"float\", \"percentage\", 'currency']:\n                        value = cell.attributes.get((OFFICENS, \"value\"))\n                    elif cell_type == \"date\":\n                        value = cell.attributes.get((OFFICENS, \"date-value\"))\n                    elif cell_type == \"string\":\n                        value = _get_cell_string_value(cell, text_s)\n                    else:\n                        value = str(cell)\n\n                column_repeat = int(cell.attributes.get((TABLENS, \"number-columns-repeated\"), 1))\n                if value is None:\n                    empty_cells += column_repeat\n                else:\n                    row.extend([\"\"] * empty_cells)\n                    empty_cells = 0\n                    row.extend([value]*column_repeat)\n\n            row_repeat = int(odsrow.attributes.get((TABLENS, \"number-rows-repeated\"), 1))\n            if len(row) == 0:\n                empty_rows += row_repeat\n            else:\n                for i in range(empty_rows):\n                    yield []\n                empty_rows = 0\n                for i in range(row_repeat):\n                    yield list(row)\n"
  },
  {
    "path": "visidata/loaders/orgmode.py",
    "content": "'''\nView sections in one or more .org files.  Easily edit sections within the system editor.\n\n## Supported syntax\n\n- `--- [comment]` at start of line starts a new section\n- any number of `#` or `*` (followed by a space) leads a headline\n- `#+key: value` adds metadata to next element (headline, table, section, )\n- orgmode style tags: `:tag1:tag2:`\n- `[[tagname]]` links to that set of tags\n- `[[url]]` links to external url\n- orgmode and markdown links\n   - `[[url][linktext]]`\n   - `[linktext](url)`\n- all other markup/orgmode/whatever is ignored and passed through\n\n## Usage\n\n- `vd file.org`\n- or `find orgfiles/ -name '*.org' | vd -f forg`\n- or `vd orgfiles/ -f orgdir`\n'''\n\nimport collections\nimport datetime\nimport os\nimport re\n\nfrom visidata import vd, VisiData, Column, Sheet, ItemColumn, vlen, asyncthread, Path, AttrDict, date\nfrom visidata import WritableColumn\n\n\n@VisiData.api\ndef open_org(vd, p):\n    return OrgSheet(p.base_stem, source=p, filetype='org')\n\n\n@VisiData.api\ndef open_forg(vd, p):\n    return OrgSheet(p.base_stem, source=p, filetype='forg')\n\n\n@VisiData.api\ndef open_orgdir(vd, p):\n    return OrgSheet(p.base_stem, source=p, filetype='orgdir')\n\n\ndef encode_date(dt=None):\n    if not dt:\n        dt = datetime.datetime.now()\n    elif isinstance(dt, str):\n        dt = datetime.datetime.fromisoformat(dt)\n\n    s = '123456789abcdefghijklmnopqrstuvwxyz'\n    return '%02d%s%s' % (dt.year % 100, s[dt.month-1], s[dt.day-1])\n\n\nclass OrgContentsColumn(WritableColumn):\n    def setValue(self, row, v, setModified=True):\n        super().setValue(row, v, setModified=setModified)\n        orgmode_parse_into(row, v)\n\n    def putValue(self, row, v):\n        self.sheet.save(row)\n\n\ndef sectionize(lines):\n    'Generate (startinglinenum, contentlines) for each section.  First section may not have leading * or # but all others will.'\n    startinglinenum = 0\n    prev_contents = contents = []\n    for linenum, line in enumerate(lines):\n        line = line.rstrip('\\n')\n\n        if line and line[0] in '#*':\n            if contents:\n                yield startinglinenum, contents\n                prev_contents = contents\n                contents = []\n                startinglinenum = linenum\n        else:\n            if not line and not contents:\n                prev_contents.append(line)\n\n        contents.append(line)\n\n    if contents:\n        yield startinglinenum, contents\n\n\ndef orgmode_parse(all_lines):\n    root = parent = OrgSheet().newRow()\n    root.orig_contents = ''\n    for linenum, lines in sectionize(all_lines):\n        section = OrgSheet().newRow()\n\n        section.contents = ''\n        for i, line in enumerate(lines):\n            if not line and not lines[i-1]:\n                continue\n            section.contents += line + '\\n'\n        section.orig_contents = section.contents\n\n        section.linenum = linenum+1\n        for line in lines:\n            section.tags.extend(re.findall(r':([\\S:]+?):', line))\n            links = re.findall(r'\\[.*?\\]\\(.*?\\)', line)\n            if links:\n                section.links.extend(links)\n\n        title = orgmode_parse_title(lines[0])\n        if not title:\n            root = parent = section\n            continue\n\n        section.update(title)\n\n        while parent and section.level <= parent.level:\n            parent = parent.parent\n\n        parent.children.append(section)\n        section.parent = parent\n        parent = section\n\n    return root\n\ndef _replace(node, newnode):\n    node.update(newnode)  # must replace insides of same row object\n    for c in node.children:\n        c.parent = node\n    return node\n\ndef orgmode_parse_into(toprow, text):\n    row = orgmode_parse(text.splitlines())\n    if not row.title and len(row.children) == 1:\n        row = row.children[0]\n        row.parent = toprow.parent\n    toprow = _replace(toprow, row)\n\n    return toprow\n\n\ndef orgmode_to_string(section, prestars=''):\n    ret = ''\n\n#    if section.title:\n#        ret += prestars[len(section.stars):] + (section.title or ' ') + '\\n'\n    ret += section.contents.rstrip() or ''\n    ret += '\\n\\n'\n    ret += ''.join(orgmode_to_string(c, prestars+(section.stars or '')) for c in section.children).rstrip() + '\\n'\n\n    return ret\n\n\ndef orgmode_parse_title(line):\n    m = re.match(r'^(?P<stars>[*#]+)\\s*(?P<keyword>(TODO|FEEDBACK|VERIFY|DONE|DELEGATED))?\\s*(?P<prio>\\[#[A-z]\\])?\\s*(?P<title>.*)', line)\n    if not m:\n        assert not line or line[0] not in '#*', line\n        return {}\n\n    return dict(stars=m.group('stars'),\n                level=len(m.group('stars')),\n                keyword=m.group('keyword') or '',\n                prio=m.group('prio') or '',\n                title=line)\n\n\nclass OrgSheet(Sheet):\n    guide = '''# Orgmode Sheet (experimental)\nA list of orgmode sections from _{sheet.source}_.\n\n- `Enter` to expand current section\n- `z Enter` to contract current section\n- `ga` to combine selected sections into a new entry\n- `Ctrl+O` to edit section in system editor (edits source directly)\n- `g Ctrl+S` to save all org files\n'''\n    defer = True\n    columns = [\n        Column('path', getter=lambda c,r: _root(r).path, width=0),\n        Column('id', getter=lambda c,r: _root(r).path.stem),\n        ItemColumn('title', width=40),\n#        ItemColumn('date', width=0, type=date),\n        ItemColumn('tags', width=10, type=lambda v: ' '.join(v)),\n        ItemColumn('links', type=vlen),\n#        ItemColumn('parent', width=0),\n        ItemColumn('children', type=vlen),\n        ItemColumn('linenum', width=0, type=int),\n        Column('to_string', width=0, getter=lambda c,r: orgmode_to_string(r)),\n        OrgContentsColumn('orig_contents', width=0, getter=lambda c,r: r.orig_contents),\n    ]\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.opened_rows = set()\n#        self.open_max=0  # all levels closed after this point\n#        self.close_max=0 # all levels open after this point\n\n    def isSelectedParents(self, row):\n        return super().isSelected(row) or row.parent and self.isSelectedParents(row.parent)\n\n    def isSelected(self, row):\n        return self.isSelectedParents(row)\n\n    def refreshRows(self):\n        self.rows = list(self._deepiter(self.sourceRows))\n\n    def _deepiter(self, objlist, depth=1):\n        for obj in objlist:\n            if not obj.parent and obj.children:\n                # ignore toplevel file, dive into subrows\n                yield from self._deepiter(obj.children, depth)\n            else:\n                yield obj\n                if id(obj) in self.opened_rows:\n                    yield from self._deepiter(obj.children, depth-1)\n\n    def openRows(self, rows):\n        for row in rows:\n            self.opened_rows.add(id(row))\n        self.refreshRows()\n\n    def closeRows(self, rows=None):\n        if rows is None:\n            for row in rows:\n                self.opened_rows.remove(id(row))\n        else:\n            self.opened_rows.clear()\n        self.refreshRows()\n\n    def newRow(self):\n        return AttrDict(title='', contents='', tags=[], children=[], links=[], level=0, linenum=0)\n\n    def iterload(self):\n        self.rows = []\n        def _walkfiles(p):\n            basepath = str(p)\n            for folder, subdirs, files in os.walk(basepath):\n                subfolder = folder[len(basepath)+1:]\n                if subfolder.startswith('.'): continue\n                if subfolder in ['.', '..']: continue\n\n                fpath = Path(folder)\n                yield fpath\n\n                for fn in files:\n                    yield fpath/fn\n\n        if self.filetype == 'orgdir':\n            basepath = str(self.source)\n            for p in _walkfiles(self.source):\n                if p.base_stem.startswith('.'): continue\n                if p.ext in ['org', 'md']:\n                    yield self.parse_orgmd(p)\n        elif self.filetype == 'forg':\n            for fn in self.source.open():\n                yield self.parse_orgmd(Path(fn.rstrip()))\n        elif self.filetype == 'org':\n            yield self.parse_orgmd(self.source)\n\n        self.sourceRows = self.rows\n        self.refreshRows()\n\n    def parse_orgmd(self, path):\n#        row.file_string = open(path).read()\n        row = orgmode_parse(open(path).readlines())\n        st = path.stat()\n        if st:\n            mtime = st.st_mtime\n\n        row.path = path\n        row.date = mtime\n        return row\n\n    def draw(self, scr):\n        super().draw(scr)\n\n    @asyncthread\n    def putChanges(self):\n        adds, mods, dels = self.getDeferredChanges()\n\n        saveset = {}  # path:_root(row)\n        for r in adds.values():\n            saveset[_root(r).path] = _root(r)\n        for r, _ in mods.values():\n            saveset[_root(r).path] = _root(r)\n\n        for row in saveset.values():\n            self.save(row)\n\n        self.commitAdds()\n\n        self.commitMods()\n\n        for row in dels.values():\n            row.path.rename('%s-%s' % (row.path, encode_date()))\n\n        self.commitDeletes()\n\n    def save_all(self):\n        for row in self.sourceRows:\n            self.save(row)\n        vd.status('saved %s org files' % len(self.sourceRows))\n\n    def save(self, row):\n        try:\n            row.path.rename('%s-%s' % (row.path, encode_date()))  # backup\n        except FileNotFoundError:\n            pass\n\n        with row.path.open(mode='w') as f:\n            print(orgmode_to_string(row).rstrip(), file=f)\n\n\n@OrgSheet.api\ndef paste_into(sheet, row, sourcerows, cols):\n    row.children.extend(sourcerows)\n    for r in sourcerows:\n        r.parent.children.remove(r)\n        r.parent = row\n    sheet.refreshRows()\n\n\n@OrgSheet.api\ndef paste_data_into(sheet, row, sourcerows, cols):\n    body = row.body or ''\n    for r in sourcerows:\n        data = vd.encode_json(r, cols)\n        row.contents += f':{cols[0].sheet.name}:{data}\\n'\n\n\n@OrgSheet.api\ndef combine_rows(sheet, rows):\n    newrow = sheet.newRow()\n    newrow.date = datetime.datetime.today()\n    orgid = vd.cleanName(rows[0].title)\n    newrow.path = Path((orgid or encode_date())+'.org')\n    for r in rows:\n        hdr = sheet.newRow()\n        if hdr.title:\n            hdr.update(orgmode_parse_title(hdr.title))\n        hdr.children = list(r.children)\n        newrow.children.append(hdr)\n#    newrow.title = ' '\n    newrow.file_string = orgmode_to_string(newrow, '*')\n    return newrow\n\n\ndef _root(row):\n    while row and row.parent:\n        row = row.parent\n    return row\n\n\n@OrgSheet.api\ndef sysopen_row(sheet, row):\n    root = _root(row)\n    if root.path.exists():\n        vd.launchEditor(root.path, '+%s'%row['linenum'])\n    else:\n        orgmode_parse_into(row, vd.launchExternalEditor(root.file_string))\n\n@VisiData.api\ndef save_org(vd, p, *vsheets):\n    with p.open(mode='w', encoding=vsheets[0].options.save_encoding) as fp:\n        for vs in vsheets:\n            if isinstance(vs, OrgSheet):\n                for row in vs.rows:\n                    print(orgmode_to_string(row).strip(), file=fp)\n            else:\n                vd.warning('not implemented')\n\n\n@OrgSheet.api\ndef sysopen_rows(sheet, rows):\n    ret = ''\n    for r in rows:\n        s = orgmode_to_string(r).strip()\n        ret += '{::%s::}\\n%s\\n\\n' % (id(r), s)\n\n    ret = vd.launchExternalEditor(ret + \"{::}\")\n\n    idrows = {id(r):r for r in rows}\n\n    idtexts = {}\n    for idtag, text in re.findall(r'\\{::(\\d+)::\\}(.*?)(?={::)', ret, re.DOTALL):\n        idtexts[int(idtag)] = text\n\n    # reparse all existing\n    for rowid, row in idrows.items():\n        text = idtexts.get(rowid, '').strip()\n        if text:\n            orgmode_parse_into(row, text)\n        else:\n            # sometimes, top levels are missing parents\n            # this needs to be debugged\n            if row.parent:\n                row.parent.children.remove(row)\n\n    lastrow = None\n    # find new rows to add\n    for rowid, text in idtexts.items():\n        if rowid not in idrows:\n            section = orgmode_parse(text.splitlines())\n            while section.level <= lastrow.level:\n                lastrow = lastrow.parent\n\n            if lastrow:\n                sourceRows.append(section)\n            else:\n                sheet.addRow(section)\n\n    sheet.refreshRows()\n\nOrgSheet.addCommand('Ctrl+O', 'sysopen-row', 'sysopen_row(cursorRow)', 'open current file in external $EDITOR')\nOrgSheet.addCommand('gCtrl+O', 'sysopen-rows', 'sysopen_rows(selectedRows)', 'open selected files in external $EDITOR')\nOrgSheet.addCommand('Enter', 'expand-row', 'openRows([cursorRow]); sheet.cursorRowIndex += 1')\nOrgSheet.addCommand('zEnter', 'close-row', 'closeRows([cursorRow]); sheet.cursorRowIndex += 1')\nOrgSheet.addCommand('gEnter', 'expand-selected', 'openRows(selectedRows)')\nOrgSheet.addCommand('gzEnter', 'close-selected', 'closeRows(selectedRows)')\nOrgSheet.addCommand('ga', 'combine-selected', 'addRows([combine_rows(selectedRows)], index=cursorRowIndex); cursorDown(1)', 'combine selected rows into new org entry')\n\nOrgSheet.addCommand('zp', 'paste-data', 'paste_data_into(cursorRow, vd.getClipboardRows(), vd.getClipboardCols())', 'move clipboard rows to children of current row')\nOrgSheet.addCommand('p', 'paste-sections', 'paste_data_into(cursorRow, vd.getClipboardRows(), vd.getClipboardCols())', 'move clipboard rows to children of current row')\nOrgSheet.addCommand('gCtrl+S', 'save-all', 'save_all()', 'save all org files')\n\n\nif __name__ == '__main__':\n    for fn in sys.argv[1:]:\n        sect = orgmode_parse(Path(fn))\n        print(orgmode_to_string(sect).strip())\n"
  },
  {
    "path": "visidata/loaders/pandas_freqtbl.py",
    "content": "from visidata import vd, Sheet, options, Column, asyncthread, Progress, PivotGroupRow, HistogramColumn\n\nfrom visidata.loaders._pandas import PandasSheet\nfrom visidata.pivot import PivotSheet\n\nclass DataFrameRowSliceAdapter:\n    \"\"\"Tracks original dataframe and a boolean row mask\n\n    This is a workaround to (1) save memory (2) keep id(row)\n    consistent when iterating, as id() is used significantly\n    by visidata's selectRow implementation.\n    \"\"\"\n    def __init__(self, df, mask):\n        pd = vd.importExternal('pandas')\n        np = vd.importExternal('numpy')\n        if not isinstance(df, pd.DataFrame):\n            vd.fail('%s is not a dataframe' % type(df).__name__)\n        if not isinstance(mask, pd.Series):\n            vd.fail('mask %s is not a Series' % type(mask).__name__)\n        if df.shape[0] != mask.shape[0]:\n            vd.fail('dataframe and mask have different shapes (%s vs %s)' % (df.shape[0], mask.shape[0]))\n\n        self.df = df\n        self.mask_bool = mask  # boolean mask\n        self.mask_iloc = np.where(mask.values)[0]  # integer indexes corresponding to mask\n        self.mask_count = mask.sum()\n\n    def __len__(self):\n        return self.mask_count\n\n    def __getitem__(self, k):\n        if isinstance(k, slice):\n            import pandas as pd\n            new_mask = pd.Series(False, index=self.df.index)\n            new_mask.iloc[self.mask_iloc[k]] = True\n            return DataFrameRowSliceAdapter(self.df, new_mask)\n        return self.df.iloc[self.mask_iloc[k]]\n\n    def __iter__(self):\n        # With the internal selection API used by PandasSheet,\n        # this should no longer be needed and can be replaced by\n        # DataFrameAdapter(self.df[self.mask_iloc])\n        return DataFrameRowSliceIter(self.df, self.mask_iloc)\n\n    def __getattr__(self, k):\n        # This is trouble ..\n        return getattr(self.df[self.mask_bool], k)\n\nclass DataFrameRowSliceIter:\n    def __init__(self, df, mask_iloc, index=0):\n        self.df = df\n        self.mask_iloc = mask_iloc\n        self.index = index\n\n    def __next__(self):\n        # Accessing row of original dataframe, to ensure\n        # that no copies are made and id() of selected rows\n        # will match original dataframe's rows\n        if self.index >= self.mask_iloc.shape[0]:\n            raise StopIteration()\n        row = self.df.iloc[self.mask_iloc[self.index]]\n        self.index += 1\n        return row\n\ndef makePandasFreqTable(sheet, *groupByCols):\n    fqcolname = '%s_freq' % '-'.join(col.name for col in groupByCols)\n    return PandasFreqTableSheet(sheet.name, fqcolname, groupByCols=groupByCols, source=sheet)\n\n\nclass PandasFreqTableSheet(PivotSheet):\n    'Generate frequency-table sheet on currently selected column.'\n    rowtype = 'bins'  # rowdef FreqRow(keys, sourcerows)\n\n    def selectRow(self, row):\n        # Select all entries in the bin on the source sheet.\n        # Use the internally defined _selectByLoc to avoid\n        # looping which causes a significant performance hit.\n        self.source._selectByILoc(row.sourcerows.mask_iloc, selected=True)\n        # then select the bin itself on this sheet\n        return super().selectRow(row)\n\n    def unselectRow(self, row):\n        self.source._selectByILoc(row.sourcerows.mask_iloc, selected=False)\n        return super().unselectRow(row)\n\n    def addUndoSelection(self):\n        self.source.addUndoSelection()\n        super().addUndoSelection()\n\n    def updateLargest(self, grouprow):\n        self.largest = max(self.largest, len(grouprow.sourcerows))\n\n    def loader(self):\n        'Generate frequency table then reverse-sort by length.'\n        import pandas as pd\n\n        # Note: visidata's base FrequencyTable bins numeric data in ranges\n        # (e.g. as a histogram). We currently don't provide support for this\n        # for PandasSheet, although we could implement it with a pd.Grouper\n        # that operates similarly to pd.cut.\n        df = self.source.df.copy()\n\n        # Implementation (special case): for one row, this degenerates\n        # to .value_counts(); however this does not order in a stable manner.\n        # if len(self.groupByCols) == 1:\n        #     this_column = df.loc[:, str(self.groupByCols[0].name)]\n        #     value_counts = this_column.value_counts()\n        if len(self.groupByCols) >= 1:\n            # Implementation (1): add a dummy column to aggregate over in a pd.pivot_table.\n            # Is there a way to avoid having to mutate the dataframe? We can delete the\n            # column afterwards but we do incur the overhead of block consolidation.\n            _pivot_count_column = \"__vd_pivot_count\"\n            if _pivot_count_column not in df.columns:\n                df[_pivot_count_column] = 1\n            # Aggregate count over columns to group, and then apply a stable sort\n            value_counts = df.pivot_table(\n                index=[c.name for c in self.groupByCols],\n                values=_pivot_count_column,\n                aggfunc=\"count\"\n            )[_pivot_count_column].sort_values(ascending=False, kind=\"mergesort\")\n            # TODO: it seems that the ascending=False causes this to do a \"reversed stable sort\"?\n            # TODO: possibly register something to delete this column as soon as\n            # we exit visidata?\n            # del df[\"__vd_pivot_count\"]\n\n            # Implementation (2) which does not require adding a dummy column:\n            # Compute cross-tabulation to get counts, and sort/remove zero-entries.\n            # Note that this is not space-efficient: the initial cross-tabulation will\n            # have space on the order of product of number of unique elements for each\n            # column, even though its possible the combinations present are sparse\n            # and most combinations have zero count.\n            # this_column = df.loc[:, str(self.groupByCols[0].name)]\n            # value_counts = pd.crosstab(this_column, [df.df[c.name] for c in self.groupByCols[1:]])\n            # value_counts = value_counts.stack(list(range(len(self.groupByCols) - 1)))\n            # value_counts = value_counts.loc[value_counts > 0].sort_values(ascending=False)\n        else:\n            vd.fail(\"Unable to do FrequencyTable, no columns to group on provided\")\n\n        # add default bonus columns\n        for c in [\n                    Column('count', type=int,\n                           getter=lambda col,row: len(row.sourcerows)),\n                    Column('percent', type=float,\n                           getter=lambda col,row: len(row.sourcerows)*100/df.shape[0]),\n                    HistogramColumn('histogram', type=str, width=self.options.default_width*2)\n                    ]:\n            self.addColumn(c)\n\n        for element in Progress(value_counts.index):\n            if len(self.groupByCols) == 1:\n                element = (element,)\n            elif len(element) != len(self.groupByCols):\n                vd.fail('different number of index cols and groupby cols (%s vs %s)' % (len(element), len(self.groupByCols)))\n\n            mask = df[self.groupByCols[0].name] == element[0]\n            for i in range(1, len(self.groupByCols)):\n                mask = mask & (df[self.groupByCols[i].name] == element[i])\n\n            self.addRow(PivotGroupRow(\n                element,\n                (0, 0),\n                DataFrameRowSliceAdapter(df, mask),\n                {}\n            ))\n\n    def openRow(self, row):\n        return self.source.expand_source_rows(row)\n\n@Sheet.api\ndef expand_source_rows(sheet, row):\n    \"\"\"Support for expanding a row of frequency table to underlying rows\"\"\"\n    if row.sourcerows is None:\n        vd.fail(\"no source rows\")\n    return PandasSheet(sheet.name, vd.valueNames(row.discrete_keys, row.numeric_key), source=row.sourcerows)\n\nPandasSheet.addCommand('F', 'freq-col', 'vd.push(makePandasFreqTable(sheet, cursorCol))', 'open Frequency Table grouped on current column, with aggregations of other columns')\nPandasSheet.addCommand('gF', 'freq-keys', 'vd.push(makePandasFreqTable(sheet, *keyCols))', 'open Frequency Table grouped by all key columns on source sheet, with aggregations of other columns')\n\nPandasFreqTableSheet.init('largest', lambda: 1)\nPandasFreqTableSheet.options.numeric_binning = False\n\nvd.addGlobals(makePandasFreqTable=makePandasFreqTable)\n"
  },
  {
    "path": "visidata/loaders/parquet.py",
    "content": "from visidata import Sheet, VisiData, TypedWrapper, anytype, date, vlen, Column, vd\nfrom collections import defaultdict\n\n\n@VisiData.api\ndef open_parquet(vd, p):\n    return ParquetSheet(p.base_stem, source=p)\n\n\nclass ParquetColumn(Column):\n    @property\n    def readonly(self):\n        return False\n\n    def calcValue(self, row):\n        if self.name in row:  #2890\n            return row[self.name]\n        rownum = row.get(\"__rownum__\")\n        if rownum is None:\n            return None\n        val = self.source[rownum]\n        if val.type == 'large_string':\n            return memoryview(val.as_buffer())[:2**20].tobytes().decode('utf-8')\n        else:\n            return val.as_py()\n\n    def putValue(self, row, val):\n        row[self.name] = val\n\n\nclass ParquetSheet(Sheet):\n    # rowdef: {'__rownum__':int, parquet_col:overridden_value, ...}\n    def iterload(self):\n        pa = vd.importExternal(\"pyarrow\", \"pyarrow\")\n        pq = vd.importExternal(\"pyarrow.parquet\", \"pyarrow\")\n        from visidata.loaders.arrow import arrow_to_vdtype\n\n        if self.source.is_dir():\n            self.tbl = pq.read_table(str(self.source))\n        else: \n            with self.source.open('rb') as f:\n                self.tbl = pq.read_table(f)\n\n        self.columns = []\n        for colname, col in zip(self.tbl.column_names, self.tbl.columns):\n            c = ParquetColumn(colname,\n                              type=arrow_to_vdtype(col.type),\n                              source=col,\n                              cache=(col.type.id == pa.lib.Type_LARGE_STRING))\n            self.addColumn(c)\n\n        for i in range(self.tbl.num_rows):\n            yield dict(__rownum__=i)\n\n\n@VisiData.api\ndef save_parquet(vd, p, sheet):\n    pa = vd.importExternal(\"pyarrow\")\n    pq = vd.importExternal(\"pyarrow.parquet\", \"pyarrow\")\n\n    typemap = {\n        anytype: pa.string(),\n        int: pa.int64(),\n        vlen: pa.int64(),\n        float: pa.float64(),\n        str: pa.string(),\n        date: pa.date64(),\n        # list: pa.array(),\n    }\n\n    for t in vd.numericTypes:\n        if t not in typemap:\n            typemap[t] = pa.float64()\n\n    databycol = defaultdict(list)  # col -> [values]\n\n    for typedvals in sheet.iterdispvals(format=False):\n        for col, val in typedvals.items():\n            if isinstance(val, TypedWrapper):\n                val = None\n\n            databycol[col].append(val)\n\n    data = [\n        pa.array(vals, type=typemap.get(col.type, pa.string()))\n        for col, vals in databycol.items()\n    ]\n\n    schema = pa.schema(\n        [(c.name, typemap.get(c.type, pa.string())) for c in sheet.visibleCols]\n    )\n    with p.open_bytes(mode=\"w\") as outf:\n        with pq.ParquetWriter(outf, schema) as writer:\n            writer.write_batch(\n                pa.record_batch(data, names=[c.name for c in sheet.visibleCols])\n            )\n"
  },
  {
    "path": "visidata/loaders/pcap.py",
    "content": "import collections\nimport ipaddress\n\nfrom visidata import VisiData, vd, Sheet, options, Column, asyncthread, Progress, TsvSheet, getattrdeep, ColumnAttr, date, vlen, filesize\n\nvd.option('pcap_internet', 'n', '(y/s/n) if save_dot includes all internet hosts separately (y), combined (s), or does not include the internet (n)')\n\nprotocols = collections.defaultdict(dict)  # ['ethernet'] = {[6] -> 'IP'}\n_flags = collections.defaultdict(dict)  # ['tcp'] = {[4] -> 'FIN'}\n\n\nurl_oui = 'https://visidata.org/plugins/pcap/wireshark-oui.tsv'\nurl_iana = 'https://visidata.org/plugins/pcap/iana-ports.tsv'\n\noui = {}  # [macprefix (like '01:02:dd:0')] -> 'manufacturer'\nservices = {}  # [('tcp', 25)] -> 'smtp'\n\n@VisiData.api\ndef open_pcap(vd, p):\n    return PcapSheet(p.base_stem, source=p)\n\nVisiData.open_cap = VisiData.open_pcap\nVisiData.open_pcapng = VisiData.open_pcap\nVisiData.open_ntar = VisiData.open_pcap\n\ndef manuf(mac):\n    return oui.get(mac[:13]) or oui.get(mac[:10]) or oui.get(mac[:8])\n\ndef macaddr(addrbytes):\n    mac = ':'.join('%02x' % b for b in addrbytes)\n    return mac\n\ndef macmanuf(mac):\n    manuf = oui.get(mac[:13])\n    if manuf:\n        return manuf + mac[13:]\n\n    manuf = oui.get(mac[:10])\n    if manuf:\n        return manuf + mac[10:]\n\n    manuf = oui.get(mac[:8])\n    if manuf:\n        return manuf + mac[8:]\n\n    return mac\n\n\ndef norm_host(host):\n    if not host:\n        return None\n    srcmac = str(host.macaddr)\n    if srcmac == 'ff:ff:ff:ff:ff:ff': return None\n\n    srcip = str(host.ipaddr)\n    if srcip == '0.0.0.0' or srcip == '::': return None\n    if srcip == '255.255.255.255': return None\n\n    if host.ipaddr:\n        if host.ipaddr.is_global:\n            opt = options.pcap_internet\n            if opt == 'n':\n                return None\n            elif opt == 's':\n                return \"internet\"\n\n        if host.ipaddr.is_multicast:\n            # include in multicast  (minus dns?)\n            return 'multicast'\n\n    names = [host.hostname, host.ipaddr, macmanuf(host.macaddr)]\n    return '\\\\n'.join(str(x) for x in names if x)\n\n\ndef FlagGetter(flagfield):\n    def flags_func(fl):\n        return ' '.join([flagname for f, flagname in _flags[flagfield].items() if fl & f])\n    return flags_func\n\n\ndef init_pcap():\n    if protocols:  # already init'ed\n        return\n\n    global dpkt, dnslib\n    dpkt = vd.importExternal('dpkt')\n    dnslib = vd.importExternal('dnslib')\n\n    load_consts(protocols['ethernet'], dpkt.ethernet, 'ETH_TYPE_')\n    load_consts(protocols['ip'], dpkt.ip, 'IP_PROTO_')\n    load_consts(_flags['ip_tos'], dpkt.ip, 'IP_TOS_')\n    load_consts(protocols['icmp'], dpkt.icmp, 'ICMP_')\n    load_consts(_flags['tcp'], dpkt.tcp, 'TH_')\n\n    load_oui(url_oui)\n    load_iana(url_iana)\n\n\ndef read_pcap(f):\n\n    try:\n        return dpkt.pcapng.Reader(f.open_bytes())\n    except ValueError:\n        return dpkt.pcap.Reader(f.open_bytes())\n\n\n@asyncthread\ndef load_oui(url):\n    vsoui = TsvSheet('vsoui', source=vd.urlcache(url, days=30))\n    vsoui.reload.__wrapped__(vsoui)\n    for r in vsoui.rows:\n        if r.prefix.endswith('/36'): prefix = r.prefix[:13]\n        elif r.prefix.endswith('/28'): prefix = r.prefix[:10]\n        else: prefix = r.prefix[:8]\n        try:\n            oui[prefix.lower()] = r.shortname\n        except Exception as e:\n            vd.exceptionCaught(e)\n\n\n@asyncthread\ndef load_iana(url):\n    ports_tsv = TsvSheet('ports_tsv', source=vd.urlcache(url, days=30))\n    ports_tsv.reload.__wrapped__(ports_tsv)\n    for r in ports_tsv.rows:\n        try:\n            services[(r.transport, int(r.port))] = r.service\n        except Exception as e:\n            vd.exceptionCaught(e)\n\n\nclass Host:\n    dns = {}  # [ipstr] -> dnsname\n    hosts = {}  # [macaddr] -> { [ipaddr] -> Host }\n\n    @classmethod\n    def get_host(cls, pkt, field='src'):\n        mac = macaddr(getattr(pkt, field))\n        machosts = cls.hosts.get(mac, None)\n        if not machosts:\n            machosts = cls.hosts[mac] = {}\n\n        ipraw = getattrdeep(pkt, 'ip.'+field, None)\n        if ipraw is not None:\n            ip = ipaddress.ip_address(ipraw)\n            if ip not in machosts:\n                machosts[ip] = Host(mac, ip)\n            return machosts[ip]\n        else:\n            if machosts:\n                return list(machosts.values())[0]\n\n        return Host(mac, None)\n\n    @classmethod\n    def get_by_ip(cls, ip):\n        'Returns Host instance for the given ip address.'\n        ret = cls.hosts_by_ip.get(ip)\n        if ret is None:\n            ret = cls.hosts_by_ip[ip] = [Host(ip)]\n        return ret\n\n    def __init__(self, mac, ip):\n        self.ipaddr = ip\n        self.macaddr = mac\n        self.mac_manuf = None\n\n    def __str__(self):\n        return str(self.hostname or self.ipaddr or macmanuf(self.macaddr))\n\n    def __lt__(self, x):\n        if isinstance(x, Host):\n            return str(self.ipaddr) < str(x.ipaddr)\n        return True\n\n    @property\n    def hostname(self):\n        return Host.dns.get(str(self.ipaddr))\n\ndef load_consts(outdict, module, attrprefix):\n    for k in dir(module):\n        if k.startswith(attrprefix):\n            v = getattr(module, k)\n            outdict[v] = k[len(attrprefix):]\n\ndef getTuple(pkt):\n    if getattrdeep(pkt, 'ip.tcp', None):\n        tup = ('tcp', Host.get_host(pkt, 'src'), pkt.ip.tcp.sport, Host.get_host(pkt, 'dst'), pkt.ip.tcp.dport)\n    elif getattrdeep(pkt, 'ip.udp', None):\n        tup = ('udp', Host.get_host(pkt, 'src'), pkt.ip.udp.sport, Host.get_host(pkt, 'dst'), pkt.ip.udp.dport)\n    else:\n        return None\n    a,b,c,d,e = tup\n    if b > d:\n        return a,d,e,b,c  # swap src/sport and dst/dport\n    else:\n        return tup\n\ndef getService(tup):\n    if not tup: return\n    transport, _, sport, _, dport = tup\n    if (transport, dport) in services:\n        return services.get((transport, dport))\n    if (transport, sport) in services:\n        return services.get((transport, sport))\n\n\ndef get_transport(pkt):\n    ret = 'ether'\n    if getattr(pkt, 'arp', None):\n        return 'arp'\n\n    if getattr(pkt, 'ip', None):\n        ret = 'ip'\n        if getattr(pkt.ip, 'tcp', None):\n            ret = 'tcp'\n        elif getattr(pkt.ip, 'udp', None):\n            ret = 'udp'\n        elif getattr(pkt.ip, 'icmp', None):\n            ret = 'icmp'\n\n    if getattr(pkt, 'ip6', None):\n        ret = 'ipv6'\n        if getattr(pkt.ip6, 'tcp', None):\n            ret = 'tcp'\n        elif getattr(pkt.ip6, 'udp', None):\n            ret = 'udp'\n        elif getattr(pkt.ip6, 'icmp6', None):\n            ret = 'icmpv6'\n\n    return ret\n\n\ndef get_port(pkt, field='sport'):\n    return getattrdeep(pkt, 'ip.tcp.'+field, None) or getattrdeep(pkt, 'ip.udp.'+field, None)\n\n\nclass EtherSheet(Sheet):\n    'Layer 2 (ethernet) packets'\n    rowtype = 'packets'\n    columns = [\n        ColumnAttr('timestamp', type=date, fmtstr=\"%H:%M:%S.%f\"),\n        Column('ether_manuf', type=str, getter=lambda col,row: mac_manuf(macaddr(row.src))),\n        Column('ether_src', type=str, getter=lambda col,row: macaddr(row.src), width=6),\n        Column('ether_dst', type=str, getter=lambda col,row: macaddr(row.dst), width=6),\n        ColumnAttr('ether_data', 'data', type=vlen, width=0),\n    ]\n\n\n@VisiData.api\nclass IPSheet(Sheet):\n    rowtype = 'packets'\n    columns = [\n        ColumnAttr('timestamp', type=date, fmtstr=\"%H:%M:%S.%f\"),\n        ColumnAttr('ip', type=str, width=0),\n        Column('ip_src', type=str, width=14, getter=lambda col,row: ipaddress.ip_address(row.ip.src)),\n        Column('ip_dst', type=str, width=14, getter=lambda col,row: ipaddress.ip_address(row.ip.dst)),\n        ColumnAttr('ip_hdrlen', 'ip.hl', type=int, width=0, helpstr=\"IPv4 Header Length\"),\n        ColumnAttr('ip_proto', 'ip.p', type=lambda v: protocols['ip'].get(v), width=8, helpstr=\"IPv4 Protocol\"),\n        ColumnAttr('ip_id', 'ip.id', type=int, width=10, helpstr=\"IPv4 Identification\"),\n        ColumnAttr('ip_rf', 'ip.rf', type=int, width=10, helpstr=\"IPv4 Reserved Flag (Evil Bit)\"),\n        ColumnAttr('ip_df', 'ip.df', type=int, width=10, helpstr=\"IPv4 Don't Fragment flag\"),\n        ColumnAttr('ip_mf', 'ip.mf', type=int, width=10, helpstr=\"IPv4 More Fragments flag\"),\n        ColumnAttr('ip_tos', 'ip.tos', width=10, type=FlagGetter('ip_tos'), helpstr=\"IPv4 Type of Service\"),\n        ColumnAttr('ip_ttl', 'ip.ttl', type=int, width=10, helpstr=\"IPv4 Time To Live\"),\n        ColumnAttr('ip_ver', 'ip.v', type=int, width=10, helpstr=\"IPv4 Version\"),\n    ]\n\n    def iterload(self):\n        for pkt in Progress(self.source.rows):\n            if getattr(pkt, 'ip', None):\n                yield pkt\n\n\n@VisiData.api\nclass TCPSheet(IPSheet):\n    columns = IPSheet.columns + [\n        ColumnAttr('tcp_srcport', 'ip.tcp.sport', type=int, width=8, helpstr=\"TCP Source Port\"),\n        ColumnAttr('tcp_dstport', 'ip.tcp.dport', type=int, width=8, helpstr=\"TCP Dest Port\"),\n        ColumnAttr('tcp_opts', 'ip.tcp.opts', width=0),\n        ColumnAttr('tcp_flags', 'ip.tcp.flags', type=FlagGetter('tcp'), helpstr=\"TCP Flags\"),\n    ]\n\n    def iterload(self):\n        for pkt in Progress(self.source.rows):\n            if getattrdeep(pkt, 'ip.tcp', None):\n                yield pkt\n\nclass UDPSheet(IPSheet):\n    columns = IPSheet.columns + [\n        ColumnAttr('udp_srcport', 'ip.udp.sport', type=int, width=8, helpstr=\"UDP Source Port\"),\n        ColumnAttr('udp_dstport', 'ip.udp.dport', type=int, width=8, helpstr=\"UDP Dest Port\"),\n        ColumnAttr('ip.udp.data', type=vlen, width=0),\n        ColumnAttr('ip.udp.ulen', type=int, width=0),\n    ]\n\n    def iterload(self):\n        for pkt in Progress(self.source.rows):\n            if getattrdeep(pkt, 'ip.udp', None):\n                yield pkt\n\n\nclass PcapSheet(Sheet):\n    rowtype = 'packets'\n    columns = [\n        ColumnAttr('timestamp', type=date, fmtstr=\"%H:%M:%S.%f\"),\n        Column('transport', type=get_transport, width=5),\n        Column('srcmanuf', type=str, getter=lambda col,row: manuf(macaddr(row.src))),\n        Column('srchost', type=str, getter=lambda col,row: row.srchost),\n        Column('srcport', type=int, getter=lambda col,row: get_port(row, 'sport')),\n        Column('dstmanuf', type=str, getter=lambda col,row: manuf(macaddr(row.dst))),\n        Column('dsthost', type=str, getter=lambda col,row: row.dsthost),\n        Column('dstport', type=int, getter=lambda col,row: get_port(row, 'dport')),\n        ColumnAttr('ether_proto', 'type', type=lambda v: protocols['ethernet'].get(v), width=0),\n        ColumnAttr('tcp_flags', 'ip.tcp.flags', type=FlagGetter('tcp'), helpstr=\"TCP Flags\"),\n        Column('service', type=str, getter=lambda col,row: getService(getTuple(row))),\n        ColumnAttr('data', type=vlen),\n        ColumnAttr('ip_len', 'ip.len', type=int),\n        ColumnAttr('tcp', 'ip.tcp', width=4, type=vlen),\n        ColumnAttr('udp', 'ip.udp', width=4, type=vlen),\n        ColumnAttr('icmp', 'ip.icmp', width=4, type=vlen),\n        ColumnAttr('dns', type=str, width=4),\n    ]\n\n    def iterload(self):\n        init_pcap()\n\n        self.pcap = read_pcap(self.source)\n        self.rows = []\n        with Progress(total=filesize(self.source)) as prog:\n            for ts, buf in self.pcap:\n                eth = dpkt.ethernet.Ethernet(buf)\n                yield eth\n                prog.addProgress(len(buf))\n\n                eth.timestamp = ts\n                if not getattr(eth, 'ip', None):\n                    eth.ip = getattr(eth, 'ip6', None)\n                eth.dns = try_apply(lambda eth: dnslib.DNSRecord.parse(eth.ip.udp.data), eth)\n                if eth.dns:\n                    for rr in eth.dns.rr:\n                        Host.dns[str(rr.rdata)] = str(rr.rname)\n\n                eth.srchost = Host.get_host(eth, 'src')\n                eth.dsthost = Host.get_host(eth, 'dst')\n\n\n\n\nflowtype = collections.namedtuple('flow', 'packets transport src sport dst dport'.split())\n\n@VisiData.api\nclass PcapFlowsSheet(Sheet):\n    rowtype = 'netflows'  # rowdef: flowtype\n    _rowtype = flowtype\n\n    columns = [\n        ColumnAttr('transport', type=str),\n        Column('src', type=str, getter=lambda col,row: row.src),\n        ColumnAttr('sport', type=int),\n        Column('dst', type=str, getter=lambda col,row: row.dst),\n        ColumnAttr('dport', type=int),\n        Column('service', type=str, width=8, getter=lambda col,row: getService(getTuple(row.packets[0]))),\n        ColumnAttr('packets', type=vlen),\n        Column('connect_latency_ms', type=float, getter=lambda col,row: col.sheet.latency[getTuple(row.packets[0])]),\n    ]\n\n    def iterload(self):\n        self.flows = {}\n        self.latency = {}  # [flowtuple] -> float ms of latency\n        self.syntimes = {}  # [flowtuple] -> timestamp of SYN\n        flags = FlagGetter('tcp')\n        for pkt in Progress(self.source.rows):\n            tup = getTuple(pkt)\n            if tup:\n                flowpkts = self.flows.get(tup)\n                if flowpkts is None:\n                    flowpkts = self.flows[tup] = []\n                    yield flowtype(flowpkts, *tup)\n                flowpkts.append(pkt)\n\n                if not getattr(pkt.ip, 'tcp', None):\n                    continue\n\n                tcpfl = flags(pkt.ip.tcp.flags)\n                if 'SYN' in tcpfl:\n                    if 'ACK' in tcpfl:\n                        if tup in self.syntimes:\n                            self.latency[tup] = (pkt.timestamp - self.syntimes[tup])*1000\n                    else:\n                        self.syntimes[tup] = pkt.timestamp\n\n    def openRow(self, row):\n        return PcapSheet(\"%s_packets\"%flowname(row), rows=row.packets)\n\n\ndef flowname(flow):\n    return '%s_%s:%s-%s:%s' % (flow.transport, flow.src, flow.sport, flow.dst, flow.dport)\n\ndef try_apply(func, *args, **kwargs):\n    try:\n        return func(*args, **kwargs)\n    except Exception as e:\n        pass\n\n\nPcapSheet.addCommand('W', 'flows', 'vd.push(PcapFlowsSheet(sheet.name+\"_flows\", source=sheet))')\nPcapSheet.addCommand('2', 'l2-packet', 'vd.push(IPSheet(\"L2packets\", source=sheet))')\nPcapSheet.addCommand('3', 'l3-packet', 'vd.push(TCPSheet(\"L3packets\", source=sheet))')\n\nvd.addMenuItem('View', 'Packet capture', 'flows', 'flows')\nvd.addMenuItem('View', 'Packet capture', 'IP (L2)', 'l2-packet')\nvd.addMenuItem('View', 'Packet capture', 'TCP (L3)', 'l3-packet')\n"
  },
  {
    "path": "visidata/loaders/pdf.py",
    "content": "import io\n\nfrom visidata import VisiData, vd, options, TableSheet, ColumnItem, IndexSheet\nfrom visidata.loaders._pandas import PandasSheet\n\nvd.option('pdf_tables', False, 'parse PDF for tables instead of pages of text', replay=True)\n\n@VisiData.api\ndef open_pdf(vd, p):\n    if vd.options.pdf_tables:\n        return TabulaSheet(p.base_stem, source=p)\n    return PdfMinerSheet(p.base_stem, source=p)\n\n\nclass PdfMinerSheet(TableSheet):\n    rowtype='pages' # rowdef: [pdfminer.LTPage, pageid, text]\n    columns=[\n        ColumnItem('pdfpage', 0, width=0),\n        ColumnItem('pagenum', 1, type=int),\n        ColumnItem('contents', 2),\n    ]\n    def iterload(self):\n        vd.importExternal('pdfminer.high_level', 'pdfminer.six')\n        import pdfminer.high_level\n        from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter\n        from pdfminer.converter import TextConverter, PDFPageAggregator\n        from pdfminer.layout import LAParams\n        from pdfminer.pdfpage import PDFPage\n\n        with self.source.open_bytes() as fp:\n            for page in PDFPage.get_pages(fp):\n                with io.StringIO() as output_string:\n                    newrsrcmgr = PDFResourceManager()\n                    txtconv = TextConverter(newrsrcmgr, output_string, codec=options.encoding, laparams=LAParams())\n                    interpreter = PDFPageInterpreter(newrsrcmgr, txtconv)\n                    interpreter.process_page(page)\n                    yield [page, page.pageid, output_string.getvalue()]\n\n\nclass TabulaSheet(IndexSheet):\n    def iterload(self):\n        tabula = vd.importExternal('tabula')\n        for i, t in enumerate(tabula.read_pdf(self.source, pages='all', multiple_tables=True)):\n            yield PandasSheet(self.source.base_stem, i, source=t)\n"
  },
  {
    "path": "visidata/loaders/png.py",
    "content": "import functools\n\nfrom visidata import VisiData, Sheet, Column, Progress, colors, ColumnItem, Canvas, asyncthread, vd, rgb_to_attr\n\n\n@VisiData.api\ndef open_png(vd, p):\n    return PNGSheet(p.base_stem, source=p)\n\n\nclass PNGSheet(Sheet):\n    rowtype = 'pixels'  # rowdef: list(x, y, r, g, b, a)\n    columns = [ColumnItem(name, i, type=int) for i, name in enumerate('x y R G B A'.split())] + [\n        Column('attr', getter=lambda col,row: rgb_to_attr(*row[2:]))\n    ]\n    nKeys = 2\n    def newRow(self):\n        return list((None, None, 0, 0, 0, 0))\n\n    def iterload(self):\n        png = vd.importExternal('png', 'pypng')\n        self.png = png.Reader(bytes=self.source.read_bytes())\n        self.width, self.height, pixels, md = self.png.asRGBA()\n        for y, row in enumerate(pixels):\n            for i in range(0, len(row)-1, 4):\n                r,g,b,a = row[i:i+4]\n                yield [i//4, y, r, g, b, a]\n\n\n@VisiData.api\nclass PNGDrawing(Canvas):\n    aspectRatio = 1.0\n    rowtype = 'pixels'\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n    def togglePixel(self, rows):\n        for row in rows:\n            x,y,r,g,b,a = row\n            self.pixels[y][x][rgb_to_attr(r,g,b,a)].remove(row)\n            row[5] = a = 0 if row[5] else 255\n            self.plotpixel(x, y, rgb_to_attr(r,g,b,a), row)\n\n    def setPixel(self, rows, attr):\n        for row in rows:\n            x,y,r,g,b,a = row\n            self.pixels[y][x][rgb_to_attr(r,g,b,a)].remove(row)\n            row[5] = a = attr\n            self.plotpixel(x, y, rgb_to_attr(r,g,b,a), row)\n\n    @asyncthread\n    def reload(self):\n        self.reset()\n        for row in self.sourceRows:\n            x, y, r, g, b, a = row\n            self.point(x, y, rgb_to_attr(r,g,b,a), row)\n        self.refresh()\n\n\n@VisiData.api\ndef save_png(vd, p, vs):\n    if isinstance(vs, Canvas):\n        return vd.save_png(p, vs.source)\n\n    pixels = list([] for y in range(vs.height))\n\n    for x,y,r,g,b,a in Progress(sorted(vs.rows), 'saving'):\n        pixels[y].extend((r,g,b,a))\n\n    vd.status('saving %sx%s' % (vs.width, vs.height))\n\n    vd.importExternal('png', 'pypng')\n    img = png.from_array(pixels, mode='RGBA')\n    with open(p, 'wb') as fp:\n        img.write(fp)\n\n    vd.status('saved')\n\n\ndef blockchar(i:int):\n    '''1   8    into   1  2\n       2  16\n       4  32           4  8\n      64 128\n    '''\n    UL = bool(i & 1 or i & 2)\n    UR = bool(i & 8 or i & 16)\n    LL = bool(i & 4 or i & 64)\n    LR = bool(i & 32 or i & 128)\n    return ' ▘▝▀▖▌▞▛▗▚▐▜▄▙▟█'[UL*1+UR*2+LL*4+LR*8]\n\n\nPNGDrawing.options.disp_canvas_charset = ''.join(blockchar(i) for i in range(256))\nPNGSheet.addCommand('.', 'plot-sheet', 'vd.push(PNGDrawing(name+\"_plot\", source=sheet, sourceRows=rows))', 'plot this png')\n"
  },
  {
    "path": "visidata/loaders/postgres.py",
    "content": "import random\nfrom urllib.parse import urlparse, unquote\n\nfrom visidata import VisiData, vd, Sheet, options, anytype, asyncthread, ColumnItem\n\n__all__ = ['openurl_postgres', 'openurl_postgresql', 'openurl_rds', 'PgTable', 'PgTablesSheet']\n\nvd.option('postgres_schema', 'public', 'The desired schema for the Postgres database')\n\ndef codeToType(type_code, colname):\n    psycopg2 = vd.importExternal('psycopg2', 'psycopg2-binary')\n    try:\n        tname = psycopg2._psycopg.string_types[type_code].name\n        if 'INTEGER' in tname:\n            return int\n        if 'STRING' in tname:\n            return str\n    except KeyError:\n        vd.status('unknown postgres type_code %s for %s' % (type_code, colname))\n    return anytype\n\n\n@VisiData.api\ndef openurl_rds(vd, url, filetype=None):\n    boto3 = vd.importExternal('boto3')\n    psycopg2 = vd.importExternal('psycopg2', 'psycopg2-binary')\n\n    rds = boto3.client('rds')\n    url = urlparse(url.given)\n\n    _, region, dbname = url.path.split('/')\n    token = rds.generate_db_auth_token(url.hostname, url.port, url.username, region)\n\n    conn = psycopg2.connect(\n                user=url.username,\n                dbname=dbname,\n                host=url.hostname,\n                port=url.port,\n                password=token)\n\n    return PgTablesSheet(dbname+\"_tables\", sql=SQL(conn))\n\n\n@VisiData.api\ndef openurl_postgres(vd, url, filetype=None):\n    psycopg2 = vd.importExternal('psycopg2', 'psycopg2-binary')\n\n    url = urlparse(url.given)\n    dbname = url.path[1:]\n    conn = psycopg2.connect(\n                user=url.username,\n                dbname=dbname,\n                host=url.hostname,\n                port=url.port,\n                password=unquote(url.password))\n\n    return PgTablesSheet(dbname+\"_tables\", sql=SQL(conn))\n\n\nVisiData.openurl_postgresql=VisiData.openurl_postgres\n\n\nclass SQL:\n    def __init__(self, conn):\n        self.conn = conn\n\n    def cur(self, qstr):\n        import string\n        randomname = ''.join(random.choice(string.ascii_uppercase) for _ in range(6))\n        cur = self.conn.cursor(randomname)\n        cur.execute(qstr)\n        return cur\n\n    @asyncthread\n    def query_async(self, qstr, callback=None):\n        with self.cur(qstr) as cur:\n            callback(cur)\n            cur.close()\n\n\n@VisiData.api\ndef postgresGetColumns(vd, cur):\n    for i, coldesc in enumerate(cur.description):\n        yield ColumnItem(coldesc.name, i, type=codeToType(coldesc.type_code, coldesc.name))\n\n\n# rowdef: (table_name, ncols)\nclass PgTablesSheet(Sheet):\n    rowtype = 'tables'\n\n    def loader(self):\n        schema = options.postgres_schema\n        qstr = f'''\n            SELECT relname table_name, column_count.ncols, reltuples::bigint est_nrows\n                FROM pg_class, pg_namespace, (\n                    SELECT table_name, COUNT(column_name) AS ncols FROM information_schema.COLUMNS WHERE table_schema = '{schema}' GROUP BY table_name\n                    ) AS column_count\n                WHERE  pg_class.relnamespace = pg_namespace.oid AND pg_namespace.nspname = '{schema}' AND column_count.table_name = relname;\n        '''\n\n        with self.sql.cur(qstr) as cur:\n            self.nrowsPerTable = {}\n\n            self.rows = []\n            # try to get first row to make cur.description available\n            r = cur.fetchone()\n            if r:\n                self.addRow(r)\n            self.columns = []\n            for c in vd.postgresGetColumns(cur):\n                self.addColumn(c)\n            self.setKeys(self.columns[0:1])  # table_name is the key\n\n            for r in cur:\n                self.addRow(r)\n\n    def openRow(self, row):\n        return PgTable(self.name+\".\"+row[0], source=row[0], sql=self.sql)\n\n\n# rowdef: tuple of values as returned by fetchone()\nclass PgTable(Sheet):\n    @asyncthread\n    def reload(self):\n        if self.options.postgres_schema:\n            source = f'\"{self.options.postgres_schema}\".\"{self.source}\"'\n        else:\n            source = f'\"{self.source}\"'\n        with self.sql.cur(f\"SELECT * FROM {source}\") as cur:\n            self.rows = []\n            r = cur.fetchone()\n            if r:\n                self.addRow(r)\n            self.columns = []\n            for c in vd.postgresGetColumns(cur):\n                self.addColumn(c)\n            for r in cur:\n                self.addRow(r)\n"
  },
  {
    "path": "visidata/loaders/psv.py",
    "content": "from visidata import vd, VisiData, TsvSheet\n\n\n@VisiData.api\ndef open_psv(vd, p):\n    p.options.set('delimiter', '|', p, cmdlog=False)\n    return PsvSheet(p.base_stem, source=p)\n\n\nclass PsvSheet(TsvSheet):\n    pass\n\n\n@VisiData.api\ndef save_psv(vd, p, vs):\n    p.options.set('delimiter', '|', p, cmdlog=False)\n    vd.save_tsv(p, vs)\n"
  },
  {
    "path": "visidata/loaders/rec.py",
    "content": "import re\n\nfrom visidata import VisiData, vd, Progress, TableSheet, IndexSheet, ItemColumn, ColumnItem\n\n\n@VisiData.api\ndef open_rec(vd, p):\n    return RecIndexSheet(p.base_stem, source=p)\n\ndef decode_multiline(line, fp):\n    'Parse *line* and lookahead into *fp* as iterator for continuing lines.  Return (multiline, next_line) where *multiline* can contain newlines and *next_line is the line after the combined *multiline*.  Handle \"\\\\\" at end and \"+\" at beginning of lines.  *next_line* will be None iff iterator is exhausted.'\n    while True:\n        try:\n            next_line = next(fp)\n        except StopIteration:\n            return line, None\n\n        if line.endswith('\\\\'):\n            line = line[:-1] + next_line\n        elif next_line.startswith('+'):\n            # strip leading r'+ ?'\n            next_line = next_line[2:] if next_line.startswith('+ ') else next_line[1:]\n            line += '\\n' + next_line\n        else:\n            return line, next_line\n\ndef encode_multiline(s):\n    return '\\n+ '.join(s.splitlines())\n\n\ndef get_kv(line):\n    return re.split(r':[ \\t]?', line, maxsplit=1)\n\nclass RecSheet(TableSheet):\n    def addColumn(self, *cols, index=None):\n        super().addColumn(*cols, index=index)\n        self.colnames.update({col.name: col for col in cols})\n        return cols[0]\n\nRecSheet.init('colnames', dict)\n\nclass RecIndexSheet(IndexSheet):\n    def iterload(self):\n        sheet = None\n        row = None\n        newRecord = True\n        next_line = ''\n        comments = []\n\n        fp = iter(self.source)\n        while next_line is not None:\n          try:\n            line, next_line = decode_multiline(next_line, fp)\n            line = line.lstrip()\n\n            if not line:  # end of record separator\n                newRecord = True\n                continue\n\n            elif line[0] == '#':\n                comments.append(line)\n                continue\n\n            if not sheet or (newRecord and line[0] == '%'):\n                sheet = RecSheet('', columns=[], rows=[], source=self, comments=comments)\n                sheet.columns = []\n                comments = []\n                yield sheet\n                newRecord = False\n\n            if line[0] == '%':\n                desc, rest = get_kv(line[1:])\n                if desc == 'rec':\n                    sheet.name = rest\n                elif desc in 'mandatory allowed':\n                    for colname in rest.split():\n                        colname = self.maybeClean(colname)\n                        if colname not in sheet.colnames:\n                            sheet.addColumn(ItemColumn(colname))\n                elif desc in ['key', 'unique']:\n                    for i, colname in enumerate(rest.split()):\n                        colname = self.maybeClean(colname)\n                        if colname not in sheet.colnames:\n                            sheet.addColumn(ItemColumn(colname, keycol=i+1))\n                elif desc in ['sort']:\n                    sheet._ordering = [(colname, False) for colname in rest.split()]\n                elif desc in ['type', 'typedef']:\n                    pass\n                elif desc in ['auto']:  # autoincrement columns should be present already\n                    pass\n                elif desc in ['size', 'constraint']:  # ignore constraints\n                    pass\n                elif desc in ['confidential']:  # encrypted\n                    pass\n                else:\n                    vd.warning('Unhandled descriptor: ' +line)\n            else:\n                if newRecord:\n                    row = None\n                    newRecord = False\n\n                if not row:\n                    row = {}\n                    sheet.addRow(row)\n\n                name, rest = get_kv(line)\n                name = self.maybeClean(name)\n                if name not in sheet.colnames:\n                    sheet.addColumn(ColumnItem(name))\n\n                if name in row:\n                    if not isinstance(row[name], list):\n                        row[name] = [row[name]]\n                    row[name].append(rest)\n                else:\n                    row[name] = rest\n          except Exception as e:\n              vd.exceptionCaught(e)\n\n        for sheet in Progress(self.rows):\n            sheet.sort()\n\n\n@VisiData.api\ndef save_rec(vd, p, *vsheets):\n    with p.open(mode='w') as fp:\n        for vs in vsheets:\n            comments = getattr(vs, 'comments', [])\n            if comments:\n                fp.write('# ' + '\\n# '.join(comments) + '\\n')\n            fp.write(f'%rec: {vs.name}\\n')\n            for col in vs.visibleCols:\n                if col.keycol:\n                    fp.write(f'%key: {col.name}\\n')\n            for row in vs.iterrows('saving'):\n                for col in vs.visibleCols:\n                    cell = col.getCell(row)\n                    if cell.value is not None:\n                        val = encode_multiline(cell.text)\n                        fp.write(f'{col.name}: {val}\\n')\n\n                fp.write('\\n')\n            fp.write('\\n')\n"
  },
  {
    "path": "visidata/loaders/s3.py",
    "content": "\"\"\"Allow VisiData to work directly with Amazon S3 paths.\n\nFunctionality is more limited than local paths, but supports:\n\n* Navigating among directories (S3 prefixes)\n* Opening supported filetypes, including compressed files\n* Versioned buckets\n\"\"\"\n\nimport textwrap\nfrom visidata import (\n    Column,\n    ItemColumn,\n    Path,\n    Sheet,\n    VisiData,\n    asyncthread,\n    date,\n    vd,\n)\n\nvd.option(\n    \"s3_endpoint\",\n    \"\",\n    \"alternate S3 endpoint, used for local testing or alternative S3-compatible services\",\n    replay=True,\n)\nvd.option(\"s3_glob\", True, \"enable glob-matching for S3 paths\", replay=True)\nvd.option(\n    \"s3_version_aware\",\n    False,\n    \"show all object versions in a versioned bucket\",\n    replay=True,\n)\n\n\nclass S3Path(Path):\n    \"\"\"A Path-like object representing an S3 file (object) or directory (prefix).\"\"\"\n\n    _fs = None\n\n    def __init__(self, path, version_aware=None, version_id=None):\n        super().__init__(path)\n        self.given = path\n        self.version_aware = version_aware or vd.options.s3_version_aware\n        self.version_id = self.version_aware and version_id or None\n\n    @property\n    def fs(self):\n        if self._fs is None:\n            s3fs_core = vd.importExternal(\"s3fs.core\", \"s3fs\")\n            self._fs = s3fs_core.S3FileSystem(\n                client_kwargs={\"endpoint_url\": vd.options.s3_endpoint or None},\n                version_aware=self.version_aware,\n                anon=vd.options.s3_anon,\n            )\n\n        return self._fs\n\n    @fs.setter\n    def fs(self, val):\n        self._fs = val\n\n    def open(self, mode='r', **kwargs):\n        \"\"\"Open the current S3 path, decompressing along the way if needed.\"\"\"\n\n        fp = self.fs.open(self.given, mode=\"rb\" if self.compression else mode, version_id=self.version_id)\n\n        # Workaround for https://github.com/ajkerrigan/visidata-plugins/issues/12\n        if hasattr(fp, \"cache\") and fp.cache.size != fp.size:\n            vd.debug(\n                f\"updating cache size from {fp.cache.size} to {fp.size} to match object size\"\n            )\n            fp.cache.size = fp.size\n\n        if self.compression == \"gz\":\n            import gzip\n\n            return gzip.open(fp, mode, **kwargs)\n\n        if self.compression == \"bz2\":\n            import bz2\n\n            return bz2.open(fp, mode, **kwargs)\n\n        if self.compression == \"xz\":\n            import lzma\n\n            return lzma.open(fp, mode, **kwargs)\n\n        return fp\n\n\nclass S3DirSheet(Sheet):\n    \"\"\"Display a listing of files and directories (objects and prefixes) in an S3 path.\n\n    Allow single or multiple entries to be opened in separate sheets.\n    \"\"\"\n\n    columns = [\n        Column(\"name\", getter=lambda col, row: col.sheet.object_display_name(row)),\n        ItemColumn(\"type\"),\n        ItemColumn(\"size\", type=int),\n        ItemColumn(\"modtime\", \"LastModified\", type=date),\n        ItemColumn(\"latest\", \"IsLatest\", type=bool),\n        ItemColumn(\"version_id\", \"VersionId\", type=str, width=0),\n    ]\n\n    def __init__(self, name, source, version_aware=None):\n        import re\n\n        super().__init__(name=name, source=source)\n        self.rowtype = \"files\"\n        self.nKeys = 1\n        self.use_glob_matching = vd.options.s3_glob and re.search(\n            r\"[*?\\[\\]]\", self.source.given\n        )\n        self.version_aware = (\n            vd.options.s3_version_aware if version_aware is None else version_aware\n        )\n        self.fs = source.fs\n\n    def object_display_name(self, row):\n        \"\"\"Provide a friendly display name for an S3 path.\n\n        When listing the contents of a single S3 prefix, the name can chop off\n        prefix bits to imitate a directory browser. When glob matching,\n        include the full key name for each entry.\n        \"\"\"\n        return (\n            row.get(\"name\")\n            if self.use_glob_matching\n            else row.get(\"name\").rpartition(\"/\")[2]\n        )\n\n    def iterload(self):\n        \"\"\"Delegate to the underlying filesystem to fetch S3 entries.\"\"\"\n        list_func = self.fs.glob if self.use_glob_matching else self.fs.ls\n\n        if not (\n            self.use_glob_matching\n            or self.fs.exists(self.source.given)\n            or self.fs.isdir(self.source.given)\n        ):\n            vd.fail(f\"unable to open S3 path: {self.source.given}\")\n\n        if self.version_aware:\n            self.column(\"latest\").hide(False)\n        else:\n            self.column(\"latest\").hide(True)\n\n        for key in list_func(str(self.source)):\n            if self.version_aware and self.fs.isfile(key):\n                yield from (\n                    {**obj_version, \"name\": key, \"type\": \"file\"}\n                    for obj_version in self.fs.object_version_info(key)\n                    if key.partition(\"/\")[2] == obj_version[\"Key\"]\n                )\n            else:\n                yield self.fs.stat(key)\n\n    @asyncthread\n    def download(self, rows, savepath):\n        \"\"\"Download files and directories to a local path.\n\n        Recurse through through subdirectories.\n        \"\"\"\n        remote_files = [row[\"name\"] for row in rows]\n        self.fs.download(remote_files, str(savepath), recursive=True)\n\n    def open_rows(self, rows):\n        \"\"\"Open new sheets for the target rows.\"\"\"\n        return (\n            vd.openSource(\n                S3Path(\n                    \"s3://{}\".format(row[\"name\"]),\n                    version_aware=self.version_aware,\n                    version_id=row.get(\"VersionId\"),\n                )\n            )\n            for row in rows\n        )\n\n    def join_rows(self, rows):\n        \"\"\"Open new sheets for the target rows and concatenate their contents.\"\"\"\n        sheets = list(self.open_rows(rows))\n        for sheet in vd.Progress(sheets):\n            sheet.reload()\n\n        # Wait for all sheets to fully load before joining them.\n        # 'append' is the only join type that makes sense here,\n        # since we're joining freshly opened sheets with no key\n        # columns.\n        vd.sync()\n        return sheets[0].openJoin(sheets[1:], jointype=\"append\")\n\n    def refresh_path(self, path=None):\n        \"\"\"Clear the s3fs cache for the given path and reload.\n\n        By default, clear the entire cache.\n        \"\"\"\n        self.fs.invalidate_cache(path)\n        self.reload()\n\n    def toggle_versioning(self):\n        \"\"\"Enable or disable support for S3 versioning.\"\"\"\n        self.version_aware = not self.version_aware\n        self.fs.version_aware = self.version_aware\n        vd.status(f's3 versioning {\"enabled\" if self.version_aware else \"disabled\"}')\n        if self.currentThreads:\n            vd.debug(\"cancelling threads before reloading\")\n            vd.cancelThread(*self.currentThreads)\n        self.reload()\n\n\n@VisiData.api\ndef openurl_s3(vd, p, filetype):\n    \"\"\"Open a sheet for an S3 path.\n\n    S3 directories (prefixes) require special handling, but files (objects)\n    can use standard VisiData \"open\" functions.\n    \"\"\"\n\n    # Non-obvious behavior here: For the default case, we don't want to send\n    # a custom endpoint to s3fs. However, using None as a default trips up\n    # VisiData's type detection for the endpoint option. So we use an empty\n    # string as the default instead, and convert back to None here.\n    endpoint = vd.options.s3_endpoint or None\n\n    p = S3Path(\n        str(p.given),\n        version_aware=getattr(p, \"version_aware\", vd.options.s3_version_aware),\n        version_id=getattr(p, \"version_id\", None),\n    )\n\n    p.fs.version_aware = p.version_aware\n    if p.fs.client_kwargs.get(\"endpoint_url\", \"\") != endpoint:\n        p.fs.client_kwargs = {\"endpoint_url\": endpoint}\n        p.fs.connect()\n\n    if not p.fs.isfile(str(p.given)):\n        return S3DirSheet(p.base_stem, source=p, version_aware=p.version_aware)\n\n    if not filetype:\n        filetype = p.ext or \"txt\"\n\n    openfunc = getattr(vd, f\"open_{filetype.lower()}\")\n    if not openfunc:\n        vd.warning(f\"no loader found for {filetype} files, falling back to txt\")\n        filetype = \"txt\"\n        openfunc = vd.open_txt\n\n    assert callable(openfunc), f\"no function/method available to open {p.given}\"\n    vs = openfunc(p)\n    vd.status(\n        f'opening {p.given} as {filetype} (version id: {p.version_id or \"latest\"})'\n    )\n    return vs\n\n\nS3DirSheet.addCommand(\n    'Enter',\n    \"s3-open-row\",\n    \"vd.push(next(sheet.open_rows([cursorRow])))\",\n    \"open the current S3 entry\",\n)\nS3DirSheet.addCommand(\n    \"gEnter\",\n    \"s3-open-rows\",\n    \"for vs in sheet.open_rows(selectedRows): vd.push(vs)\",\n    \"open all selected S3 entries\",\n)\nS3DirSheet.addCommand(\n    \"zCtrl+R\",\n    \"s3-refresh-sheet\",\n    \"sheet.refresh_path(str(sheet.source))\",\n    \"clear the s3fs cache for this path, then reload\",\n)\nS3DirSheet.addCommand(\n    \"gzCtrl+R\",\n    \"s3-refresh-sheet-all\",\n    \"sheet.refresh_path()\",\n    \"clear the entire s3fs cache, then reload\",\n)\nS3DirSheet.addCommand(\n    \"Ctrl+V\",\n    \"s3-toggle-versioning\",\n    \"sheet.toggle_versioning()\",\n    \"enable/disable support for S3 versioning\",\n)\nS3DirSheet.addCommand(\n    \"&\",\n    \"s3-join-rows\",\n    \"vd.push(sheet.join_rows(selectedRows))\",\n    \"open and join sheets for selected S3 entries\",\n)\nS3DirSheet.addCommand(\n    \"gx\",\n    \"s3-download-rows\",\n    textwrap.dedent(\n        \"\"\"\n        savepath = inputPath(\"download selected rows to: \", value=\".\")\n        sheet.download(selectedRows, savepath)\n    \"\"\"\n    ),\n    \"download selected files and directories\",\n)\n\nS3DirSheet.addCommand(\n    \"x\",\n    \"s3-download-row\",\n    textwrap.dedent(\n        \"\"\"\n        savepath = inputPath(\"download to: \", value=Path(cursorRow[\"name\"]).name)\n        sheet.download([cursorRow], savepath)\n    \"\"\"\n    ),\n    \"download the file or directory in the cursor row\",\n)\n\nvd.addMenuItems(\n    \"\"\"\n    File > Toggle versioning > s3-toggle-versioning\n    File > Refresh > Current path > s3-refresh-sheet\n    File > Refresh > All > s3-refresh-sheet-all\n    Row > Download > Current row > s3-download-row\n    Row > Download > Selected rows > s3-download-rows\n    Data > Join > Selected rows > s3-join-rows\n\"\"\"\n)\n\nvd.addGlobals(S3DirSheet=S3DirSheet)\n"
  },
  {
    "path": "visidata/loaders/sas.py",
    "content": "import logging\n\nfrom visidata import VisiData, Sheet, Progress, ColumnItem, anytype, vd\n\nSASTypes = {\n    'string': str,\n    'number': float,\n}\n\n@VisiData.api\ndef open_xpt(vd, p):\n    return XptSheet(p.base_stem, source=p)\n\n@VisiData.api\ndef open_sas7bdat(vd, p):\n    return SasSheet(p.base_stem, source=p)\n\nclass XptSheet(Sheet):\n    def iterload(self):\n        xport = vd.importExternal('xport')\n        xport.v56 = vd.importExternal('xport.v56', 'xport>=3')\n        with open(self.source, 'rb') as fp:\n            self.library = xport.v56.load(fp)\n\n            self.columns = []\n            dataset = self.library[list(self.library.keys())[0]]\n\n            varnames = dataset.contents.Variable.values\n            types = dataset.contents.Type.values\n\n            for i, (varname, typestr) in enumerate(zip(varnames, types)):\n                self.addColumn(ColumnItem(varname, i, type=float if typestr == 'Numeric' else str))\n\n            for row in dataset.values:\n                yield list(row)\n\n\nclass SasSheet(Sheet):\n    def iterload(self):\n        sas7bdat = vd.importExternal('sas7bdat')\n        self.dat = sas7bdat.SAS7BDAT(str(self.source), skip_header=True, log_level=logging.CRITICAL)\n        self.columns = []\n        for col in self.dat.columns:\n            self.addColumn(ColumnItem(col.name.decode('utf-8'), col.col_id, type=SASTypes.get(col.type, anytype)))\n\n        with self.dat as fp:\n            yield from Progress(fp, total=self.dat.properties.row_count)\n"
  },
  {
    "path": "visidata/loaders/scrape.py",
    "content": "#!/usr/bin/env python3\n\n__all__=[ 'SelectorColumn', 'soupstr' ]\n\nimport os.path\nfrom urllib.parse import urljoin\n\nimport concurrent.futures\nimport functools\n\nfrom visidata import vd, VisiData, TableSheet, vdtype, Column, AttrColumn, Progress, date\n\n\n@VisiData.api\ndef soup(vd, s):\n    bs4 = vd.importExternal('bs4', 'beautifulsoup4')\n    from bs4 import BeautifulSoup\n    return BeautifulSoup(s, 'html.parser')\n\n\n@VisiData.api\ndef open_scrape(vd, p):\n    bs4 = vd.importExternal('bs4', 'beautifulsoup4')\n\n    vd.enable_requests_cache()\n    if p.is_url():\n        return HtmlDocsSheet(p.base_stem, source=p, urls=[p.given])\n    else:\n        return HtmlElementsSheet(p.base_stem, source=p, elements=None)\n\nVisiData.openhttp_scrape = VisiData.open_scrape\n\ndef node_name(node):\n    me = node.name\n    class_ = node.attrs.get(\"class\")\n    if class_:\n        me += '.' + class_[0]\n    id_ = node.attrs.get(\"id\")\n    if id_:\n        me += '#' + id_\n    return me\n\n@functools.lru_cache(maxsize=None)\ndef calc_selector(node):\n    if not node.parent:\n        return ''\n\n    psel = calc_selector(node.parent)\n    oursel = node_name(node)\n    if not psel:\n        return oursel\n\n    root = list(node.parents)[-1]\n\n    combinedsel = psel+' '+oursel\n    if len(root.select(combinedsel)) == len(root.select(oursel)):\n        return oursel\n\n    return combinedsel\n\n\nclass HtmlAttrColumn(Column):\n    def calcValue(self, row):\n        return row.attrs.get(self.expr)\n\n\ndef prev_header(r):\n    hdrtags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']\n    try:\n        i = hdrtags.index(r.name)\n        return r.find_previous(hdrtags[:i-1])\n    except Exception:\n        return r.find_previous(hdrtags)\n\n\n# one row per element\nclass HtmlElementsSheet(TableSheet):\n    guide = '''# HTMLElements\n\nThis is a list of HTML elements from _{sheet.source}_ as parsed by `beautifulsoup4`.\n\nStandard VisiData exploration techniques can be used to find relevant data, which will help determine the proper selector to use.\n\n- `Enter` to dive into children of cursor element (or children of all selected rows with `g Enter`)\n- `go` to batch open links in selected rows on new RequestsSheet, which will fetch each page\n- `~` to use the `soupstr` type to join all the text elements\n'''\n    # source=[element, ...]\n    rowtype='dom nodes'  # rowdef soup.element\n    columns = [\n        Column('name', getter=lambda c,r: node_name(r)),\n        Column('selector', getter=lambda c,r: calc_selector(r), cache='async', width=0),\n        AttrColumn('string'),\n        Column('depth', cache=True, getter=lambda c,r: list(c.sheet.html_parents(r))),\n        Column('prev_header', getter=lambda c,r: prev_header(r), cache=True),\n        HtmlAttrColumn('href', expr='href'),\n    ]\n    def iterload(self):\n        for el in self.elements or [vd.soup(self.source.read_text())]:\n            for x in el.find_all():\n                if x.string:\n                    yield x\n\n    def html_parents(self, row):\n        while row.parent and row.parent is not row:\n            yield row.parent\n            row = row.parent\n\n    @property\n    def rootSource(self):\n        return self.rootSheet.source\n\n    def openRows(self, rows):\n        realurls = [urljoin(self.rootSource.given, r.attrs.get('href')) for r in rows]\n        yield HtmlDocsSheet(self.name, 'scrape', source=self, urls=realurls)\n\n    def openRow(self, row):\n        'opening a single row'\n        return HtmlElementsSheet('', source=self, elements=[row])\n\n\nclass DocsSelectorColumn(Column):\n    def calcValue(self, row):\n        return [x for x in row.soup.select(self.expr)]\n\nclass SelectorColumn(Column):\n    def calcValue(self, row):\n        return [x for x in row.select(self.expr)]\n\n\n# urls=list of urls to scrape\nclass HtmlDocsSheet(TableSheet):\n    help='''# HtmlDocsSheet\n\n- `Enter` to open the current request as list of HTMLElements\n- `;` to add column of elements matching given css selector\n  - this is how to cross-tabulate data from multiple pages\n'''\n    rowtype='requests'  # rowdef: requests.Response\n    columns = [\n        AttrColumn('url'),\n        AttrColumn('status_code', type=int),\n        AttrColumn('from_cache'),\n        AttrColumn('fetched_at', 'created_at', type=date, width=0),\n        AttrColumn('expires', type=date),\n        AttrColumn('reason'),\n        AttrColumn('soup.title.string'),\n    ]\n    def iterload(self):\n        requests = vd.importExternal('requests')\n        self.colnames = {}\n#        with concurrent.futures.ThreadPoolExecutor(max_workers=8) as executor:\n#            yield from executor.map(requests.get, Progress(self.urls))\n        for url in Progress(self.urls):\n            yield requests.get(url)\n\n    def addRow(self, row, index=None):\n        super().addRow(row, index=index)\n        row.soup = vd.callNoExceptions(vd.soup, row.text)\n\n    def openRow(self, row):\n        return HtmlElementsSheet(row.url, source=self, elements=[row.soup])\n\ndef soupstr(coll):\n    return ' '.join(v.string for v in coll)\n\nvdtype(soupstr, 's')\n\n@TableSheet.api\ndef scrape_urls(sheet, col, rows):\n    return HtmlDocsSheet(sheet.name, \"selected_urls\", urls=[col.getTypedValue(r) for r in rows])\n\nHtmlElementsSheet.addCommand('~', 'type-soupstr', 'cursorCol.type=soupstr', 'set type of current column to list of html elements')\nHtmlElementsSheet.addCommand('go', 'open-rows', 'for vs in openRows(selectedRows): vd.push(vs)', 'open sheet for each selected element')\nTableSheet.addCommand('gzo', 'scrape-cells', 'vd.push(scrape_urls(cursorCol, selectedRows))', 'open HTML Documents sheet from selected URLs')\nHtmlDocsSheet.addCommand(';', 'addcol-selector', 'sel=input(\"css selector: \", type=\"selector\"); addColumn(DocsSelectorColumn(sel, expr=sel, cache=\"async\"))', 'add column derived from css selector of current column')\nHtmlElementsSheet.addCommand(';', 'addcol-selector', 'sel=input(\"css selector: \", type=\"selector\"); addColumn(SelectorColumn(sel, expr=sel, cache=\"async\"))',  'add column derived from css selector of current column')\n\nvd.addGlobals({\n    'HtmlDocsSheet':SelectorColumn,\n    'SelectorColumn':SelectorColumn,\n    'DocsSelectorColumn':DocsSelectorColumn,\n})\n\nvd.addMenuItem('Data', '+Scrape', 'selected cells', 'scrape-cells')\n"
  },
  {
    "path": "visidata/loaders/shp.py",
    "content": "import json\nfrom copy import copy\n\nfrom visidata import VisiData, vd, Sheet, Column, Progress, date, InvertedCanvas, asyncthread\n\n# requires pyshp\n\n\n@VisiData.api\ndef open_shp(vd, p):\n    return ShapeSheet(p.base_stem, source=p)\n\nVisiData.open_dbf = VisiData.open_shp\n\nshptypes = {\n  'C': str,\n  'N': float,\n  'L': float,\n  'F': float,\n  'D': date,\n  'M': str,\n}\n\ndef shptype(ftype, declen):\n    t = shptypes[ftype[:1]]\n    if t is float and declen == 0:\n        return int\n    return t\n\n# rowdef: shaperec\nclass ShapeSheet(Sheet):\n    rowtype = 'shapes'\n    columns = [\n        Column('shapeType', width=0, getter=lambda col,row: row.shape.shapeType)\n    ]\n    def iterload(self):\n        shapefile = vd.importExternal('shapefile', 'pyshp')\n        self.sf = shapefile.Reader(str(self.source))\n        self.reloadCols()\n        for shaperec in Progress(self.sf.iterShapeRecords(), total=self.sf.numRecords):\n            yield shaperec\n\n    def reloadCols(self):\n        self.columns = []\n        for c in ShapeSheet.columns:\n            self.addColumn(copy(c))\n\n        for i, (fname, ftype, fieldlen, declen) in enumerate(self.sf.fields[1:]):  # skip DeletionFlag\n            self.addColumn(Column(fname, getter=lambda col,row,i=i: row.record[i], type=shptype(ftype, declen)))\n\n@VisiData.api\nclass ShapeMap(InvertedCanvas):\n    aspectRatio = 1.0\n    filetype = 'geojson'\n\n    @asyncthread\n    def reload(self):\n        self.reset()\n\n        for row in Progress(self.sourceRows):\n            # color according to key\n            k = self.source.rowkey(row)\n\n            if row.shape.shapeType in (5, 15, 25):\n                self.polygon(row.shape.points, self.plotColor(k), row)\n            elif row.shape.shapeType in (3, 13, 23):\n                self.polyline(row.shape.points, self.plotColor(k), row)\n            elif row.shape.shapeType in (1, 11, 21):\n                x, y = row.shape.points[0]\n                self.point(x, y, self.plotColor(k), row)\n            else:\n                vd.status('notimpl shapeType %s' % row.shape.shapeType)\n\n            x1, y1, x2, y2 = row.shape.bbox\n            textx, texty = (x1+x2)/2, (y1+y2)/2\n            disptext = self.textCol.getDisplayValue(row)\n            self.label(textx, texty, disptext, self.plotColor(k), row)\n\n        self.refresh()\n\n@ShapeMap.api\ndef save_geojson(vd, p, vs):\n    features = []\n    for coords, attr, row in Progress(vs.polylines, 'saving'):\n        feat = {\n            'type': 'Feature',\n            'geometry': {\n                'type': 'LineString',\n                'coordinates': [[x, y] for x, y in coords],\n            },\n            'properties': {\n                col.name: col.getTypedValue(row) for col in vs.source.visibleCols\n            }\n        }\n        features.append(feat)\n\n    featcoll = {\n        'type': 'FeatureCollection',\n        'features': features,\n    }\n    with p.open(mode='w', encoding=vs.options.save_encoding) as fp:\n        for chunk in json.JSONEncoder().iterencode(featcoll):\n            fp.write(chunk)\n\nShapeSheet.addCommand('.', 'plot-row', 'vd.push(ShapeMap(name+\"_map\", source=sheet, sourceRows=[cursorRow], textCol=cursorCol))', 'plot geospatial vector in current row')\nShapeSheet.addCommand('g.', 'plot-rows', 'vd.push(ShapeMap(name+\"_map\", source=sheet, sourceRows=rows, textCol=cursorCol))', 'plot all geospatial vectors in current sheet')\nShapeMap.addCommand('Ctrl+S', 'save-sheet', 'vd.saveSheets(inputPath(\"save to: \", value=getDefaultSaveName(sheet)), sheet)', 'save current sheet to filename in format determined by extension (default .geojson)')\n"
  },
  {
    "path": "visidata/loaders/spss.py",
    "content": "from visidata import VisiData, Sheet, Progress, asyncthread, ItemColumn, vd\n\n\n@VisiData.api\ndef open_spss(vd, p):\n    return SpssSheet(p.base_stem, source=p)\nVisiData.open_sav = VisiData.open_spss\n\n\nclass SpssSheet(Sheet):\n    def loader(self):\n        savReaderWriter = vd.importExternal('savReaderWriter')\n        self.rdr = savReaderWriter.SavReader(str(self.source))\n        with self.rdr as reader:\n            self.columns = []\n            for i, vname in enumerate(reader.varNames):\n                vtype = float if reader.varTypes[vname] == 0 else str\n                self.addColumn(ItemColumn(vname.decode('utf-8'), i, type=vtype))\n\n            self.rows = []\n            for r in Progress(reader, total=reader.shape.nrows):\n                self.addRow(r)\n"
  },
  {
    "path": "visidata/loaders/sqlite.py",
    "content": "from copy import copy\nimport re\n\nfrom visidata import VisiData, vd, Sheet, options, Column, Progress, anytype, ColumnItem, asyncthread, TypedExceptionWrapper, TypedWrapper, IndexSheet, vlen\nfrom visidata.type_date import date\n\nvd.option('sqlite_onconnect', '', 'sqlite statement to execute after opening a connection')\n\n\ndef requery(url, **kwargs):\n    'Return *url* with added or replaced query parameters from *kwargs*.'\n    from urllib.parse import urlencode, urlparse, parse_qsl, urlunparse\n    url_parts = list(urlparse(url))\n    query = dict(parse_qsl(url_parts[4]))\n    query.update(kwargs)\n    url_parts[4] = urlencode(query)\n    return urlunparse(url_parts)\n\n\n@VisiData.api\ndef guess_sqlite(vd, p):\n    if p.open_bytes().read(16).startswith(b'SQLite format'):\n        return dict(filetype='sqlite', _likelihood=10)\n\n\n@VisiData.api\ndef open_sqlite(vd, p):\n    if not p.is_local():\n        vd.fail('sqlite requires an uncompressed, local file')\n    return SqliteIndexSheet(p.base_stem, source=p)\n\n@VisiData.api\ndef openurl_sqlite(vd, p, filetype=None):\n    return SqliteIndexSheet(p.base_stem, source=p)\n\nVisiData.open_sqlite3 = VisiData.open_sqlite\nVisiData.open_db = VisiData.open_sqlite\n\n# rowdef: list of values\nclass SqliteSheet(Sheet):\n    'Provide functionality for importing SQLite databases.'\n    savesToSource = True\n    defer = True\n    query = ''\n    tableName = ''\n\n    def conn(self):\n        import sqlite3\n        localpath = self.rootSheet().source\n\n        url = localpath if localpath.is_url() else f'file:{localpath.resolve()}'\n        url = requery(url, **self.options.getall('sqlite_param_'))\n\n        con = sqlite3.connect(url, uri=True, **self.options.getall('sqlite_connect_'))\n        con.text_factory = lambda s, enc=self.options.encoding, encerrs=self.options.encoding_errors: s.decode(enc, encerrs)\n        if self.options.sqlite_onconnect:\n            con.execute(self.options.sqlite_onconnect)\n        return con\n\n    def rawSql(self, q:str) -> 'SqliteSheet':\n        return SqliteSheet('query', source=self.source, query=q)\n\n    @property\n    def sidebar(self):\n        if self.query:\n            return '# SQL\\n' + self.query\n        else:\n            return super().sidebar\n\n    def execute(self, conn, sql, parms=None):\n        parms = parms or []\n        vd.debug(sql)\n        return conn.execute(sql, parms)\n\n    def iterload_table(self, tblname:str):\n        '''Generate all rows from `tblname` in database at self.source,\n        including type information from table_xinfo(), and getting each rowid\n        if available (for simpler updates).'''\n\n        def parse_sqlite_type(t):\n            m = re.match(r'(\\w+)(\\((\\d+)(,(\\d+))?\\))?', t.upper())\n            if not m: return anytype\n            typename, _, i, _, f = m.groups()\n            if typename == 'DATE': return date\n            if 'INT' in typename: return int\n            if typename == 'REAL': return float\n            if typename == 'NUMBER':\n                return int if f == '0' else float\n            return anytype\n\n        self.rowidColumn = None\n        with self.conn() as conn:\n            if not isinstance(self, SqliteIndexSheet):\n                self.columns = []\n                for r in self.execute(conn, 'PRAGMA TABLE_XINFO(\"%s\")' % tblname):\n                    colnum, colname, coltype, nullable, defvalue, colkey, *_ = r\n                    c = ColumnItem(colname, colnum+1, type=parse_sqlite_type(coltype))\n                    self.addColumn(c)\n\n                    if colkey:\n                        self.setKeys([c])\n\n                sql = self.row[5]  # SQL used to create table\n                if 'WITHOUT ROWID' not in sql and 'CREATE VIEW' not in sql:\n                    self.rowidColumn = ColumnItem('rowid', 0, type=int, width=0)\n                    self.addColumn(self.rowidColumn, index=0)\n\n            if self.rowidColumn:\n                r = self.execute(conn, 'SELECT rowid, * FROM \"%s\"' % tblname)\n            else:\n                r = self.execute(conn, 'SELECT NULL, * FROM \"%s\"' % tblname)\n            yield from Progress(r, total=r.rowcount-1)\n\n    def iterload_query(self, query:str):\n        '''Generate rows from `query` to database at self.source,\n        including type information from table_xinfo(), and getting each rowid\n        if available (for simpler updates).'''\n\n        with self.conn() as conn:\n            self.columns = []\n            for c in type(self).columns:\n                self.addColumn(copy(c))\n\n            self.result = self.execute(conn, query, parms=getattr(self, 'parms', []))\n\n            for i, desc in enumerate(self.result.description):\n                self.addColumn(ColumnItem(desc[0], i))\n\n            for row in self.result:\n                yield row\n\n    def iterload(self):\n        if self.tableName:\n            yield from self.iterload_table(self.tableName)\n        elif self.query:\n            yield from self.iterload_query(self.query)\n        else:\n            vd.fail('no query or tablename to load')\n\n    @asyncthread\n    def putChanges(self):\n        adds, mods, dels = self.getDeferredChanges()\n        options_safe_error = options.safe_error\n        def value(row, col):\n            v = col.getTypedValue(row)\n            if isinstance(v, TypedWrapper):\n                if isinstance(v, TypedExceptionWrapper):\n                    return options_safe_error\n                else:\n                    return None\n            elif not isinstance(v, (int, float, str)):\n                v = col.getFullDisplayValue(row)\n            return v\n\n        def values(row, cols):\n            vals = []\n            for c in cols:\n                vals.append(value(row, c))\n            return vals\n\n        with self.conn() as conn:\n            for r in adds.values():\n                cols = self.visibleCols\n                sql = 'INSERT INTO \"%s\" ' % self.tableName\n                sql += '(%s)' % ','.join(c.name for c in cols)\n                sql += ' VALUES (%s)' % ','.join('?' for c in cols)\n                res = self.execute(conn, sql, parms=values(r, cols))\n                if res.rowcount != res.arraysize:\n                    vd.warning('not all rows inserted') # f'{res.rowcount}/{res.arraysize} rows inserted'\n\n            for row, rowmods in mods.values():\n                if not self.rowidColumn:\n                    vd.warning('cannot modify rows in tables without rowid')\n                    break\n                wherecols = [self.rowidColumn]\n                sql = 'UPDATE \"%s\" SET ' % self.tableName\n                sql += ', '.join('%s=?' % c.name for c, _ in rowmods.items())\n                sql += ' WHERE %s' % ' AND '.join('\"%s\"=?' % c.name for c in wherecols)\n                newvals=values(row, [c for c, _ in rowmods.items()])\n                # calcValue gets the 'previous' value (before update)\n                wherevals=list(Column.calcValue(c, row) or '' for c in wherecols)\n                res = self.execute(conn, sql, parms=newvals+wherevals)\n                if res.rowcount != res.arraysize:\n                    vd.warning('not all rows updated') # f'{res.rowcount}/{res.arraysize} rows updated'\n\n            for row in dels.values():\n                if not self.rowidColumn:\n                    vd.warning('cannot delete rows in tables without rowid')\n                    break\n\n                wherecols = [self.rowidColumn]\n                sql = 'DELETE FROM \"%s\" ' % self.tableName\n                sql += ' WHERE %s' % ' AND '.join('\"%s\"=?' % c.name for c in wherecols)\n                wherevals=list(Column.calcValue(c, row) for c in wherecols)\n                res = self.execute(conn, sql, parms=wherevals)\n                if res.rowcount != res.arraysize:\n                    vd.warning('not all rows deleted') # f'{res.rowcount}/{res.arraysize} rows deleted'\n\n            conn.commit()\n\n        self.preloadHook()\n        self.reload()\n\n\nclass SqliteIndexSheet(SqliteSheet, IndexSheet):\n    rowtype = 'tables'\n    tableName = 'sqlite_master'\n    savesToSource = True\n    defer = True\n    def iterload(self):\n        self.addColumn(Column('sql', width=0, getter=lambda c,r:r.row[5]))\n        for row in SqliteSheet.iterload(self):\n            if row[1] != 'index':\n                tblname = row[2]\n                yield SqliteSheet(tblname, source=self, tableName=tblname, row=row)\n\n    def putChanges(self):\n        adds, mods, dels = self.getDeferredChanges()\n        with self.conn() as conn:\n            for r in adds.values():\n                vd.warning('create a new table by saving a new sheet to this database file')\n\n            for row, rowmods in mods.values():\n                cname = self.column('name')\n                if len(rowmods) == 1 and cname in rowmods:\n                    sql='ALTER TABLE \"%s\" RENAME TO \"%s\"' % (cname.calcValue(row), rowmods[cname])\n                    self.execute(conn, sql)\n                else:\n                    vd.warning('can only modify table name')\n\n            for row in dels.values():\n                sql = 'DROP TABLE \"%s\"' % row.tableName\n                self.execute(conn, sql)\n\n            conn.commit()\n\n        self.preloadHook()\n        self.reload()\n\n\n\n@VisiData.api\ndef save_sqlite(vd, p, *vsheets):\n    import sqlite3\n    import json\n    jsonenc = json.JSONEncoder()  #1589: list/dict values as json\n\n    conn = sqlite3.connect(str(p))\n    conn.text_factory = lambda s, enc=vsheets[0].options.encoding: s.decode(enc)\n    conn.row_factory = sqlite3.Row\n    c = conn.cursor()\n\n    sqltypes = {\n        int: 'INTEGER',\n        vlen: 'INTEGER',\n        float: 'REAL',\n        date: 'DATE',\n    }\n\n    for t in vd.numericTypes:\n        if t not in sqltypes:\n            sqltypes[t] = 'REAL'\n\n    for vs in vsheets:\n        vs.ensureLoaded()\n    vd.sync()\n\n    for vs in vsheets:\n        tblname = vd.cleanName(vs.name)\n        sqlcols = []\n        for col in vs.visibleCols:\n            sqlcols.append('\"%s\" %s' % (col.name, sqltypes.get(col.type, 'TEXT')))\n        sql = 'CREATE TABLE IF NOT EXISTS \"%s\" (%s)' % (tblname, ', '.join(sqlcols))\n        c.execute(sql)\n\n        for r in Progress(vs.rows, 'saving'):\n            sqlvals = []\n            for col in vs.visibleCols:\n                v = col.getTypedValue(r)\n                if isinstance(v, TypedWrapper):\n                    if isinstance(v, TypedExceptionWrapper):\n                        v = options.safe_error\n                    else:\n                        v = None\n                elif isinstance(v, (list, tuple, dict)):\n                    v = jsonenc.encode(v)\n                elif not isinstance(v, (int, float, str)):\n                    v = col.getFullDisplayValue(r)\n                sqlvals.append(v)\n            sql = 'INSERT INTO \"%s\" (%s) VALUES (%s)' % (tblname, ','.join(f'\"{c.name}\"' for c in vs.visibleCols), ','.join('?' for v in sqlvals))\n            c.execute(sql, sqlvals)\n\n    conn.commit()\n\n\nSqliteSheet.addCommand('', 'exec-sql', 'vd.push(rawSql(input(\"execute SQL: \", type=\"sql\")))', 'execute raw SQL statement')\n\nSqliteIndexSheet.addCommand('a', 'add-table', 'fail(\"create a new table by saving a sheet to this database file\")', 'stub; add table by saving a sheet to the db file instead')\nSqliteIndexSheet.bindkey('ga', 'add-table')\nSqliteSheet.options.header = 0\nVisiData.save_db = VisiData.save_sqlite\n\nvd.addMenuItems('''\n    Data > execute SQL query > exec-sql\n''')\n\nvd.addGlobals({\n    'SqliteIndexSheet': SqliteIndexSheet,\n    'SqliteSheet': SqliteSheet,\n})\n"
  },
  {
    "path": "visidata/loaders/texttables.py",
    "content": "import functools\nfrom visidata import vd, Progress\n\ntry:\n    import tabulate\n    for fmt in tabulate.tabulate_formats:\n        def save_table(path, *sheets, fmt=fmt):\n            import tabulate\n\n            with path.open(mode='w', encoding=sheets[0].options.save_encoding) as fp:\n                for vs in sheets:\n                    fp.write(tabulate.tabulate(\n                        vs.itervals(*vs.visibleCols, format=True),\n                        headers=[ col.name for col in vs.visibleCols ],\n                        tablefmt=fmt))\n\n        if not getattr(vd, 'save_'+fmt, None):\n            setattr(vd, 'save_'+fmt, save_table)\nexcept ModuleNotFoundError:\n    pass\nexcept Exception as e:\n    vd.exceptionCaught(e)\n"
  },
  {
    "path": "visidata/loaders/toml.py",
    "content": "from visidata import (\n    ColumnItem,\n    PythonSheet,\n    VisiData,\n    asyncthread,\n    deduceType,\n    vd,\n)\n\n\n@VisiData.api\ndef open_toml(vd, p):\n    return TomlSheet(p.base_stem, source=p)\n\n\nclass TomlSheet(PythonSheet):\n    \"\"\"A Sheet representing the top level of a loaded TOML file.\n\n    This is an intentionally minimal loader with cues taken from\n    VisiData built-in JSON and Python object sheet types.\n    \"\"\"\n    guide = '''# Toml Sheet\nThis sheet represents the top level of {sheet.source.name}.\n\nEach cell within this sheet can contain dictionaries (representing TOML key:value pairs), lists (representing TOML arrays), or scalars.\n\nSome helpful commands when working with cells of lists and dictionaries:\n\n- `(` (`expand-col`) on a column with lists or dictionaries will \"expand\" the structures in the cells into new columns within the current sheet.\n- `zEnter` on a cell with lists or dictionaries will \"dive\" into the current cell, expanding its structures into rows and columns in a separate sheet.\n'''\n\n    rowtype = \"values\"  # rowdef: dict values, possibly nested\n\n    def loader(self):\n        \"\"\"Loading a TOML file produces a single dict. Use\n        its keys as column headings, and populate a single\n        row.\n        \"\"\"\n        self.columns = []\n        self.rows = []\n\n        try:\n            # Python 3.11+\n            import tomllib\n        except ModuleNotFoundError:\n            # Python 3.10 and below\n            tomllib = vd.importExternal(\"tomli\")\n\n        data = tomllib.loads(self.source.read_text())\n        for k, v in data.items():\n            self.addColumn(ColumnItem(k, type=deduceType(v)))\n        self.addRow(data)\n\n\nvd.addGlobals(\n    {\n        \"TomlSheet\": TomlSheet,\n    }\n)\n"
  },
  {
    "path": "visidata/loaders/tsv.py",
    "content": "import itertools\nimport collections\nimport math\nimport time\n\nfrom visidata import vd, asyncthread, options, Progress, ColumnItem, SequenceSheet, Sheet, VisiData\nfrom visidata import namedlist, filesize\n\nvd.option('delimiter', '\\t', 'field delimiter to use for tsv/csv filetype', replay=True)\nvd.option('row_delimiter', '\\n', 'row delimiter to use for tsv/csv filetype', replay=True)\nvd.option('tsv_safe_newline', '\\u001e', 'replacement for newline character when saving to tsv', replay=True)\nvd.option('tsv_safe_tab', '\\u001f', 'replacement for tab character when saving to tsv', replay=True)\n\n\n@VisiData.api\ndef open_tsv(vd, p):\n    return TsvSheet(p.base_stem, source=p)\n\n\ndef adaptive_bufferer(fp, max_buffer_size=65536):\n    \"\"\"Loading e.g. tsv files goes faster with a large buffer. But when the input stream\n    is slow (e.g. 1 byte/second) and the buffer size is large, it can take a long time until\n    the buffer is filled. Only when the buffer is filled (or the input stream is finished)\n    you can see the data visualized in visidata. That's why we use an adaptive buffer.\n    For fast input streams, the buffer becomes large, for slow input streams, the buffer stays\n    small\"\"\"\n    buffer_size = 8\n    processed_buffer_size = 0\n    previous_start_time = time.time()\n    while True:\n        next_chunk = fp.read(max(buffer_size, 1))\n        if not next_chunk:\n            break\n\n        yield next_chunk\n\n        processed_buffer_size += len(next_chunk)\n\n        current_time = time.time()\n        current_delta = current_time - previous_start_time\n\n        if current_delta < 1:\n            # if it takes less than one second to fill the buffer, double the size of the buffer\n            buffer_size = min(buffer_size * 2, max_buffer_size)\n        else:\n            # if it takes longer than one second, decrease the buffer size so it takes about\n            # 1 second to fill it\n            previous_start_time = current_time\n            buffer_size = math.ceil(min(processed_buffer_size / current_delta, max_buffer_size))\n            processed_buffer_size = 0\n\ndef splitter(stream, delim='\\n'):\n    'Generates one line/row/record at a time from stream, separated by delim'\n\n    buf = type(delim)()\n\n    for chunk in stream:\n        buf += chunk\n\n        *rows, buf = buf.split(delim)\n        yield from rows\n\n    buf = buf.rstrip(delim)  # trim empty trailing lines\n    if buf:\n        yield from buf.rstrip(delim).split(delim)\n\n\n# rowdef: list\nclass TsvSheet(SequenceSheet):\n    def iterload(self):\n        delim = self.source.options.delimiter\n        rowdelim = self.source.options.row_delimiter\n        if delim == '':\n            vd.warning(\"using '\\\\x00' as field delimiter\")\n            delim = '\\x00'  #2272\n            self.options.regex_skip = ''\n        if rowdelim == '':\n            vd.warning(\"using '\\\\x00' as row delimiter\")\n            rowdelim = '\\x00'\n            self.options.regex_skip = ''\n        if delim == rowdelim:\n            vd.fail('field delimiter and row delimiter cannot be the same')\n\n        with self.open_text_source() as fp:\n                regex_skip = getattr(fp, '_regex_skip', None)\n                for line in splitter(adaptive_bufferer(fp), rowdelim):\n                    if not line or (regex_skip and regex_skip.match(line)):\n                        continue\n\n                    row = line.split(delim)\n\n                    if len(row) < self.nVisibleCols:\n                        # extend rows that are missing entries\n                        row.extend([None]*(self.nVisibleCols-len(row)))\n\n                    yield row\n\n\n@VisiData.api\ndef save_tsv(vd, p, vs):\n    'Write sheet to file `fn` as TSV.'\n    unitsep = p.options.delimiter\n    rowsep = p.options.row_delimiter\n    if unitsep == '':\n        vd.warning(\"saving with '\\\\x00' as field delimiter\")\n        unitsep = '\\x00'\n    if rowsep == '':\n        vd.warning(\"saving with '\\\\x00' as row delimiter\")\n        rowsep = '\\x00'\n    if unitsep == rowsep:\n        vd.fail('field delimiter and row delimiter cannot be the same')\n    trdict = vs.safe_trdict(delimiter=unitsep)\n\n    with p.open(mode='w', encoding=vs.options.save_encoding) as fp:\n        colhdr = unitsep.join(col.name.translate(trdict) for col in vs.visibleCols) + rowsep\n        fp.write(colhdr)\n\n        for dispvals in vs.iterdispvals(format=True, delimiter=unitsep):\n            fp.write(unitsep.join(dispvals.values()))\n            fp.write(rowsep)\n\n\nvd.addGlobals({\n    'TsvSheet': TsvSheet,\n})\n"
  },
  {
    "path": "visidata/loaders/ttf.py",
    "content": "from visidata import VisiData, vd, Sheet, Column, Progress, ColumnAttr, ColumnItem, SubColumnItem, InvertedCanvas\n\n\n@VisiData.api\ndef open_ttf(vd, p):\n    return TTFTablesSheet(p.base_stem, source=p)\n\nVisiData.open_otf = VisiData.open_ttf\n\nclass TTFTablesSheet(Sheet):\n    rowtype = 'font tables'\n    columns = [\n        ColumnAttr('cmap'),\n        ColumnAttr('format', type=int),\n        ColumnAttr('language', type=int),\n        ColumnAttr('length', type=int),\n        ColumnAttr('platEncID', type=int),\n        ColumnAttr('platformID', type=int),\n        Column('isSymbol', getter=lambda col,row: row.isSymbol()),\n        Column('isUnicode', getter=lambda col,row: row.isUnicode()),\n    ]\n\n    def openRow(self, row):\n        return TTFGlyphsSheet(self.name+'_glyphs', source=self, sourceRows=[row], ttf=self.ttf)\n\n    def iterload(self):\n        fontTools = vd.importExternal('fontTools.ttLib', 'fonttools')\n\n        self.ttf = fontTools.TTFont(str(self.source), 0, allowVID=0, ignoreDecompileErrors=True, fontNumber=-1)\n        for cmap in self.ttf[\"cmap\"].tables:\n            yield cmap\n\n\nclass TTFGlyphsSheet(Sheet):\n    rowtype = 'glyphs'  # rowdef: (codepoint, glyphid, fontTools.ttLib.ttFont._TTGlyphGlyf)\n    columns = [\n        ColumnItem('codepoint', 0, type=int, fmtstr='%0X'),\n        ColumnItem('glyphid', 1),\n        SubColumnItem(2, ColumnAttr('height', type=int)),\n        SubColumnItem(2, ColumnAttr('width', type=int)),\n        SubColumnItem(2, ColumnAttr('lsb')),\n        SubColumnItem(2, ColumnAttr('tsb')),\n    ]\n\n    def openRow(self, row):\n        return makePen(self.name+\"_\"+row[1], source=row[2], glyphSet=self.ttf.getGlyphSet())\n\n    def iterload(self):\n        glyphs = self.ttf.getGlyphSet()\n        for cmap in self.sourceRows:\n            for codepoint, glyphid in Progress(cmap.cmap.items(), total=len(cmap.cmap)):\n                yield (codepoint, glyphid, glyphs[glyphid])\n\n\ndef makePen(*args, **kwargs):\n    fontTools = vd.importExternal('fontTools', 'fonttools')\n    from fontTools.pens.basePen import BasePen\n\n    class GlyphPen(InvertedCanvas, BasePen):\n        aspectRatio = 1.0\n        def __init__(self, name, **kwargs):\n            super().__init__(name, **kwargs)\n            self.path_firstxy = None\n            self.lastxy = None\n            self.attr = self.plotColor(('glyph',))\n\n        def _moveTo(self, xy):\n            self.lastxy = xy\n            if self.path_firstxy is None:\n                self.path_firstxy = xy\n\n        def _lineTo(self, xy):\n            x1, y1 = self.lastxy\n            x2, y2 = xy\n            self.line(x1, y1, x2, y2, self.attr)\n            self._moveTo(xy)\n\n        def _closePath(self):\n            if self.path_firstxy:\n                if (self.path_firstxy != self.lastxy):\n                    self._lineTo(self.path_firstxy)\n                self.path_firstxy = None\n            self.lastxy = None\n\n        def _endPath(self):\n            self.path_firstxy = None\n            self.lastxy = None\n\n        def _curveToOne(self, xy1, xy2, xy3):\n            vd.error('NotImplemented')\n\n        def _qCurveToOne(self, xy1, xy2):\n            self.qcurve([self.lastxy, xy1, xy2], self.attr)\n            self._moveTo(xy2)\n\n        def reload(self):\n            self.reset()\n            self.source.draw(self)\n            self.refresh()\n\n    return GlyphPen(*args, **kwargs)\n\n\n#TTFGlyphsSheet.bindkey('.', 'open-row')\n"
  },
  {
    "path": "visidata/loaders/unzip_http.py",
    "content": "#!/usr/bin/env python3\n\n# Copyright (c) 2022 Saul Pwanson\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to deal\n# in the Software without restriction, including without limitation the rights\n# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n# SOFTWARE.\n\n\"\"\"\nusage: unzip_http [-h] [-l] [-f] [-o] url [files ...]\n\nExtract individual files from .zip files over http without downloading the\nentire archive. HTTP server must send `Accept-Ranges: bytes` and\n`Content-Length` in headers.\n\npositional arguments:\n  url                   URL of the remote zip file\n  files                 Files to extract. If no filenames given, displays .zip\n                        contents (filenames and sizes). Each filename can be a\n                        wildcard glob.\n\noptions:\n  -h, --help            show this help message and exit\n  -l, --list            List files in the remote zip file\n  -f, --full-filepaths  Recreate folder structure from zip file when extracting\n                        (instead of extracting the files to the current\n                        directory)\n  -o, --stdout          Write files to stdout (if multiple files: concatenate\n                        them to stdout, in zipfile order)\n\"\"\"\n\nimport sys\nimport os\nimport io\nimport math\nimport time\nimport zlib\nimport struct\nimport fnmatch\nimport argparse\nimport pathlib\nimport urllib.parse\n\n\n__version__ = '0.6'\n\n\ndef error(s):\n    raise Exception(s)\n\ndef warning(s):\n    print(s, file=sys.stderr)\n\ndef get_bits(val:int, *args):\n    'Generate bitfields (one for each arg) from LSB to MSB.'\n    for n in args:\n        x = val & (2**n-1)\n        val >>= n\n        yield x\n\n\nclass RemoteZipInfo:\n    def __init__(self, filename:str='',\n                       date_time:int = 0,\n                       header_offset:int = 0,\n                       compress_type:int = 0,\n                       compress_size:int = 0,\n                       file_size:int = 0):\n        self.filename = filename\n        self.header_offset = header_offset\n        self.compress_type = compress_type\n        self.compress_size = compress_size\n        self.file_size = file_size\n\n        sec, mins, hour, day, mon, year = get_bits(date_time, 5, 6, 5, 5, 4, 7)\n        self.date_time = (year+1980, mon, day, hour, mins, sec)\n\n    def is_dir(self):\n        return self.filename.endswith('/')\n\n    def parse_extra(self, extra):\n        i = 0\n        while i < len(extra):\n            fieldid, fieldsz = struct.unpack_from('<HH', extra, i)\n            i += 4\n\n            if fieldid == 0x0001:  # ZIP64\n                if fieldsz == 8: fmt = '<Q'\n                elif fieldsz == 16: fmt = '<QQ'\n                elif fieldsz == 24: fmt = '<QQQ'\n                elif fieldsz == 28: fmt = '<QQQI'\n\n                vals = list(struct.unpack_from(fmt, extra, i))\n                if self.file_size == 0xffffffff:\n                    self.file_size = vals.pop(0)\n\n                if self.compress_size == 0xffffffff:\n                    self.compress_size = vals.pop(0)\n\n                if self.header_offset == 0xffffffff:\n                    self.header_offset = vals.pop(0)\n\n            i += fieldsz\n\n\nclass RemoteZipFile:\n    fmt_eocd = '<IHHHHIIH'  # end of central directory\n    fmt_eocd64 = '<IQHHIIQQQQ'  # end of central directory ZIP64\n    fmt_cdirentry = '<IHHHHIIIIHHHHHII'  # central directory entry\n    fmt_localhdr = '<IHHHIIIIHH'  # local directory header\n    magic_eocd64 = b'\\x50\\x4b\\x06\\x06'\n    magic_eocd = b'\\x50\\x4b\\x05\\x06'\n\n    def __init__(self, url):\n        import urllib3\n        self.url = url\n        self.http = urllib3.PoolManager()\n        self.zip_size = 0\n\n    def __enter__(self):\n        return self\n\n    def __exit__(self, a, b, c):\n        pass\n\n    @property\n    def files(self):\n        if not hasattr(self, '_files'):\n            self._files = {r.filename:r for r in self.infoiter()}\n        return self._files\n\n    def infolist(self):\n        return list(self.infoiter())\n\n    def namelist(self):\n        return list(r.filename for r in self.infoiter())\n\n    def infoiter(self):\n        resp = self.http.request('HEAD', self.url)\n        if not (200 <= resp.status <= 299):\n            error(f'cannot open URL: HTTP status {resp.status}')\n\n        r = resp.headers.get('Accept-Ranges', '')\n        if r != 'bytes':\n            hostname = urllib.parse.urlparse(self.url).netloc\n            warning(f\"{hostname} Accept-Ranges header ('{r}') is not 'bytes'--trying anyway\")\n\n        if 'Content-Length' not in resp.headers:\n            error('cannot open URL: missing Content-Length header')\n\n        self.zip_size = int(resp.headers['Content-Length'])\n        resp = self.get_range(\n            max(self.zip_size-65536, 0),\n            65536\n        )\n\n        cdir_start = -1\n        i = resp.data.rfind(self.magic_eocd64)\n        if i >= 0:\n            magic, eocd_sz, create_ver, min_ver, disk_num, disk_start, disk_num_records, total_num_records, \\\n                cdir_bytes, cdir_start = struct.unpack_from(self.fmt_eocd64, resp.data, offset=i)\n        else:\n            i = resp.data.rfind(self.magic_eocd)\n            if i >= 0:\n                magic, \\\n                    disk_num, disk_start, disk_num_records, total_num_records, \\\n                    cdir_bytes, cdir_start, comment_len = struct.unpack_from(self.fmt_eocd, resp.data, offset=i)\n\n        if cdir_start < 0 or cdir_start >= self.zip_size:\n            error('cannot find central directory')\n\n        if self.zip_size <= 65536:\n            filehdr_index = cdir_start\n        else:\n            filehdr_index = 65536 - (self.zip_size - cdir_start)\n\n        if filehdr_index < 0:\n            resp = self.get_range(cdir_start, self.zip_size - cdir_start)\n            filehdr_index = 0\n\n        cdir_end = filehdr_index + cdir_bytes\n        while filehdr_index < cdir_end:\n            sizeof_cdirentry = struct.calcsize(self.fmt_cdirentry)\n\n            magic, ver, ver_needed, flags, method, date_time, crc, \\\n                complen, uncomplen, fnlen, extralen, commentlen, \\\n                disknum_start, internal_attr, external_attr, local_header_ofs = \\\n                    struct.unpack_from(self.fmt_cdirentry, resp.data, offset=filehdr_index)\n\n            filehdr_index += sizeof_cdirentry\n\n            filename = resp.data[filehdr_index:filehdr_index+fnlen]\n            filehdr_index += fnlen\n\n            extra = resp.data[filehdr_index:filehdr_index+extralen]\n            filehdr_index += extralen\n\n            comment = resp.data[filehdr_index:filehdr_index+commentlen]\n            filehdr_index += commentlen\n\n            rzi = RemoteZipInfo(filename.decode(), date_time, local_header_ofs, method, complen, uncomplen)\n\n            rzi.parse_extra(extra)\n            yield rzi\n\n    def extract(self, member, path=None, pwd=None):\n            if pwd:\n                raise NotImplementedError('Passwords not supported yet')\n\n            path = path or pathlib.Path('.')\n\n            outpath = path/member\n            os.makedirs(outpath.parent, exist_ok=True)\n            with self.open(member) as fpin:\n                with open(path/member, mode='wb') as fpout:\n                    while True:\n                        r = fpin.read(65536)\n                        if not r:\n                            break\n                        fpout.write(r)\n\n    def extractall(self, path=None, members=None, pwd=None):\n        for fn in members or self.namelist():\n            self.extract(fn, path, pwd=pwd)\n\n    def get_range(self, start, n):\n        return self.http.request('GET', self.url, headers={'Range': f'bytes={start}-{start+n-1}'}, preload_content=False)\n\n    def matching_files(self, *globs):\n        for f in self.files.values():\n            if any(fnmatch.fnmatch(f.filename, g) for g in globs):\n                yield f\n\n    def open(self, fn):\n        if isinstance(fn, str):\n            f = list(self.matching_files(fn))\n            if not f:\n                error(f'no files matching {fn}')\n            f = f[0]\n        else:\n            f = fn\n\n        sizeof_localhdr = struct.calcsize(self.fmt_localhdr)\n        r = self.get_range(f.header_offset, sizeof_localhdr)\n        localhdr = struct.unpack_from(self.fmt_localhdr, r.data)\n        magic, ver, flags, method, dos_datetime, _, _, uncomplen, fnlen, extralen = localhdr\n        if method == 0: # none\n            return self.get_range(f.header_offset + sizeof_localhdr + fnlen + extralen, f.compress_size)\n        elif method == 8: # DEFLATE\n            resp = self.get_range(f.header_offset + sizeof_localhdr + fnlen + extralen, f.compress_size)\n            return io.BufferedReader(RemoteZipStream(resp, f))\n        else:\n            error(f'unknown compression method {method}')\n\n    def open_text(self, fn):\n        return io.TextIOWrapper(self.open(fn))\n\n\nclass RemoteZipStream(io.RawIOBase):\n    def __init__(self, fp, info):\n        super().__init__()\n        self.raw = fp\n        self._decompressor = zlib.decompressobj(-15)\n        self._buffer = bytes()\n\n    def readable(self):\n        return True\n\n    def readinto(self, b):\n        r = self.read(len(b))\n        b[:len(r)] = r\n        return len(r)\n\n    def read(self, n):\n        while n > len(self._buffer):\n            r = self.raw.read(2**18)\n            if not r:\n                self._buffer += self._decompressor.flush()\n                break\n            self._buffer += self._decompressor.decompress(r)\n\n        ret = self._buffer[:n]\n        self._buffer = self._buffer[n:]\n\n        return ret\n\n\n ### script start\n\nclass StreamProgress:\n    def __init__(self, fp, name='', total=0):\n        self.name = name\n        self.fp = fp\n        self.total = total\n        self.start_time = time.time()\n        self.last_update = 0\n        self.amtread = 0\n\n    def read(self, n):\n        r = self.fp.read(n)\n        self.amtread += len(r)\n        now = time.time()\n        if now - self.last_update > 0.1:\n            self.last_update = now\n\n            elapsed_s = now - self.start_time\n            sys.stderr.write(f'\\r{elapsed_s:.0f}s  {self.amtread/10**6:.02f}/{self.total/10**6:.02f}MB  ({self.amtread/10**6/elapsed_s:.02f} MB/s)  {self.name}')\n\n        if not r:\n            sys.stderr.write('\\n')\n\n        return r\n\n\ndef list_files(rzf):\n    def safelog(x):\n        return 1 if x == 0 else math.ceil(math.log10(x))\n\n    digits_compr = max(safelog(f.compress_size) for f in rzf.infolist())\n    digits_plain = max(safelog(f.file_size    ) for f in rzf.infolist())\n    fmtstr = f'%{digits_compr}d -> %{digits_plain}d\\t%s'\n    for f in rzf.infolist():\n        print(fmtstr % (f.compress_size, f.file_size, f.filename), file=sys.stderr)\n\n\ndef extract_one(outfile, rzf, f, ofname):\n    print(f'Extracting {f.filename} to {ofname}...', file=sys.stderr)\n\n    fp = StreamProgress(rzf.open(f), name=f.filename, total=f.compress_size)\n    while r := fp.read(2**18):\n        outfile.write(r)\n\n\ndef download_file(f, rzf, args):\n    if not any(fnmatch.fnmatch(f.filename, g) for g in args.files):\n        return\n\n    if args.stdout:\n        extract_one(sys.stdout.buffer, rzf, f, \"stdout\")\n    else:\n        path = pathlib.Path(f.filename)\n        if args.full_filepaths:\n            path.parent.mkdir(parents=True, exist_ok=True)\n        else:\n            path = path.name\n\n        with open(str(path), 'wb') as of:\n            extract_one(of, rzf, f, str(path))\n\n\ndef main():\n    parser = argparse.ArgumentParser(prog='unzip-http', \\\n        description=\"Extract individual files from .zip files over http without downloading the entire archive. HTTP server must send `Accept-Ranges: bytes` and `Content-Length` in headers.\")\n\n    parser.add_argument('-l', '--list', action='store_true', default=False,\n                        help=\"List files in the remote zip file\")\n    parser.add_argument('-f', '--full-filepaths', action='store_true', default=False,\n                        help=\"Recreate folder structure from zip file when extracting (instead of extracting the files to the current directory)\")\n    parser.add_argument('-o', '--stdout', action='store_true', default=False,\n                        help=\"Write files to stdout (if multiple files: concatenate them to stdout, in zipfile order)\")\n\n    parser.add_argument(\"url\", nargs=1, help=\"URL of the remote zip file\")\n    parser.add_argument(\"files\", nargs='*', help=\"Files to extract. If no filenames given, displays .zip contents (filenames and sizes). Each filename can be a wildcard glob.\")\n\n    args = parser.parse_args()\n\n    rzf = RemoteZipFile(args.url[0])\n    if args.list or len(args.files) == 0:\n        list_files(rzf)\n    else:\n        for f in rzf.infolist():\n            download_file(f, rzf, args)\n\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "visidata/loaders/usv.py",
    "content": "from visidata import vd, VisiData, TsvSheet\n\n\n@VisiData.api\ndef open_usv(vd, p):\n    p.options.set('delimiter', '\\u241f', p, cmdlog=False)\n    p.options.set('row_delimiter', '\\u241e', p, cmdlog=False)\n    return UsvSheet(p.base_stem, source=p)\n\n\nclass UsvSheet(TsvSheet):\n    pass\n\n\n@VisiData.api\ndef save_usv(vd, p, vs):\n    p.options.set('delimiter', '\\u241f', p, cmdlog=False)\n    p.options.set('row_delimiter', '\\u241e', p, cmdlog=False)\n    vd.save_tsv(p, vs)\n"
  },
  {
    "path": "visidata/loaders/vcf.py",
    "content": "from visidata import VisiData, Column, getitemdef, PythonSheet, asyncthread, vd\n\n\n# requires (deb): libbz2-dev libcurl4-openssl-dev liblzma-dev\n\n@VisiData.api\ndef open_vcf(vd, p):\n    return VcfSheet(p.base_stem, source=p)\n\ndef unbox(col, row):\n    v = getitemdef(row, col.expr)\n    if not v:\n        return None\n    if len(v) == 1:\n        return v[0].value\n    return v\n\n\nclass VcfSheet(PythonSheet):\n    rowtype = 'cards'\n    @asyncthread\n    def reload(self):\n        vobject = vd.importExternal('vobject')\n        self.rows = []\n        self.columns = []\n\n        addedCols = set()\n        lines = []\n        with self.open_text_source() as fp:\n            for line in fp:\n                lines.append(line)\n                if line.startswith('END:'):\n                    row = vobject.readOne('\\n'.join(lines))\n                    for k, v in row.contents.items():\n                        if v and str(v[0].value).startswith('(None)'):\n                            continue\n                        if not k in addedCols:\n                            addedCols.add(k)\n                            self.addColumn(Column(k, expr=k, getter=unbox))\n                    self.addRow(row.contents)\n                    lines = []\n"
  },
  {
    "path": "visidata/loaders/vds.py",
    "content": "'Custom VisiData save format'\n\nimport json\n\nfrom visidata import vd, VisiData, JsonSheet, Progress, IndexSheet, SettableColumn, ItemColumn, ExprColumn\n\n\nNL='\\n'\n\n@VisiData.api\ndef open_vds(vd, p):\n    return VdsIndexSheet(p.base_stem, source=p)\n\n\n@VisiData.api\ndef save_vds(vd, p, *sheets):\n    'Save in custom VisiData format, preserving columns and their attributes.'\n\n    with p.open(mode='w', encoding='utf-8') as fp:\n        for vs in sheets:\n            # class and attrs for vs\n            d = { 'name': vs.name, }\n            fp.write('#'+json.dumps(d)+NL)\n\n            # class and attrs for each column in vs\n            for col in vs.columns:\n                d = col.__getstate__()\n                if isinstance(col, SettableColumn):\n                    d['col'] = 'Column'\n                elif isinstance(col, ItemColumn):\n                    d['col'] = 'Column'\n                    d['expr'] = col.name  #2037  override expr\n                else:\n                    d['col'] = type(col).__name__\n                fp.write('#'+json.dumps(d)+NL)\n\n            if not vs.rows:\n                fp.write(NL)  #2342  blank line to separate sheets without rows\n                continue\n\n            with Progress(gerund='saving'):\n                for row in vs.iterdispvals(*vs.columns, format=False):\n                    d = {col.name:val for col, val in row.items()}\n                    fp.write(json.dumps(d, default=str)+NL)\n\n\nclass VdsIndexSheet(IndexSheet):\n    def iterload(self):\n        vs = None\n        with self.source.open(encoding='utf-8') as fp:\n            line = fp.readline()\n            while line:\n                if line.startswith('#{'):\n                    d = json.loads(line[1:])\n                    if 'col' not in d:\n                        vs = VdsSheet(d.pop('name'), columns=[], source=self.source, source_fpos=fp.tell())\n                        yield vs\n                line = fp.readline()\n\n\nclass VdsSheet(JsonSheet):\n    def newRow(self):\n        return {}   # rowdef: dict\n\n    def iterload(self):\n        self.colnames = {}\n        self.columns = []\n\n        with self.source.open(encoding='utf-8') as fp:\n            fp.seek(self.source_fpos)\n\n            # consume all metadata, create columns\n            line = fp.readline()\n            while line and line.startswith('#{'):\n                d = json.loads(line[1:])\n                if 'col' not in d:\n                    raise Exception(d)\n                classname = d.pop('col')\n                if classname == 'Column':\n                    classname = 'ItemColumn'\n                    d['expr'] = d['name']\n\n                c = vd.getGlobals()[classname](d.pop('name'), sheet=self)\n                self.addColumn(c)\n                self.colnames[c.name] = c\n                c.__setstate__(d)  # must happen after addColumn sets .sheet\n\n                line = fp.readline()\n\n            while line and not line.startswith('#{'):\n                d = json.loads(line)\n                yield d\n                line = fp.readline()\n"
  },
  {
    "path": "visidata/loaders/vdx.py",
    "content": "import json\nimport re\n\nimport visidata\nfrom visidata import VisiData, CommandLogBase, BaseSheet, Sheet, AttrDict, Progress\n\nVDX_VD_COLUMNS = ['sheet', 'col', 'row', 'longname', 'input', 'keystrokes', 'comment']\n\n\n@VisiData.api\ndef open_vdx(vd, p):\n    return CommandLogSimple(p.base_stem, source=p, precious=True)\n\n\nVDX_CONTEXT_COMMANDS = {'sheet', 'col', 'row'}\n\nclass CommandLogSimple(CommandLogBase, Sheet):\n    filetype = 'vdx'\n    def iterload(self):\n        context = {}  # pending sheet/col/row for next command\n        for line in self.source:\n            if not line or line[0] == '#':\n                continue\n            if line[0] == '{':\n                # .vdj json line\n                yield AttrDict(json.loads(line))\n                context = {}\n            elif '\\t' in line:\n                # .vd tsv line; skip header\n                fields = line.split('\\t')\n                if fields == VDX_VD_COLUMNS[:len(fields)]:\n                    continue\n                d = {k: v for k, v in zip(VDX_VD_COLUMNS, fields) if v}\n                yield AttrDict(d)\n                context = {}\n            else:\n                # .vdx minimal line\n                longname, *rest = line.split(' ', maxsplit=1)\n                if longname == 'replay-reset':\n                    context = {}\n                    yield AttrDict(longname=longname,\n                                   input=rest[0] if rest else '')\n                elif longname in VDX_CONTEXT_COMMANDS:\n                    context[longname] = rest[0] if rest else ''\n                elif longname == 'option':\n                    # option scope name value -> set-option\n                    parts = (rest[0] if rest else '').split(' ', maxsplit=2)\n                    scope = parts[0] if len(parts) > 0 else 'global'\n                    name = parts[1] if len(parts) > 1 else ''\n                    value = parts[2] if len(parts) > 2 else ''\n                    yield AttrDict(longname='set-option',\n                                   sheet=scope, col='', row=name, input=value)\n                else:\n                    yield AttrDict(longname=longname,\n                                   input=rest[0] if rest else '',\n                                   **context)\n                    context = {}\n\n\n@VisiData.api\ndef save_vdx(vd, p, *vsheets):\n    with p.open(mode='w', encoding=vsheets[0].options.save_encoding) as fp:\n        fp.write(f\"# {visidata.__version_info__}\\n\")\n        for vs in vsheets:\n            prevrow = None\n            for r in vs.rows:\n                if prevrow is not None and r.sheet and prevrow.sheet != r.sheet:\n                    fp.write(f'sheet {r.sheet}\\n')\n                if r.col and (prevrow is None or prevrow.col != r.col):\n                    fp.write(f'col {r.col}\\n')\n                if r.row and (prevrow is None or prevrow.row != r.row):\n                    fp.write(f'row {r.row}\\n')\n\n                line = r.longname\n                if r.input:\n                    line += ' ' + str(r.input)\n                fp.write(line + '\\n')\n\n                prevrow = r\n\n\n@VisiData.api\ndef runvdx(vd, vdx:str):\n    for line in Progress(vdx.splitlines()):\n        vs = vd.sheet or Sheet()\n        vd.sync(vs.ensureLoaded())\n        line = line.strip()\n        if not line or line[0] == '#':\n            continue\n\n        m = re.match(r'^(\\+(\\S+) )?(\\S+)(.*)$', line)\n        if not m:\n            print('bad:', line)\n            continue\n\n        _, pos, longname, rest = m.groups()\n        vd.currentReplayRow = AttrDict(longname=longname, input=rest)\n        if pos:\n            vd.moveToPos(vd.sheets, *vd.parsePos(pos))\n        print(vs.name, longname)\n        vs.execCommand(longname)\n        vd.sync()\n\n\n"
  },
  {
    "path": "visidata/loaders/xlsb.py",
    "content": "from visidata import vd, IndexSheet, VisiData\n\n'Requires visidata/deps/pyxlsb fork'\n\n@VisiData.api\ndef guess_xls(vd, p):\n    if p.open_bytes().read(16).startswith(b'\\xD0\\xCF\\x11\\xE0\\xA1\\xB1\\x1A\\xE1'):\n        return dict(filetype='xlsb', _likelihood=10)\n\n\n@VisiData.api\ndef open_xlsb(vd, p):\n    return XlsbIndex(p.base_stem, source=p)\n\n\nclass XlsbIndex(IndexSheet):\n    def iterload(self):\n        vd.importExternal('pyxlsb', '-e git+https://github.com/saulpw/pyxlsb.git@visidata#egg=pyxlsb')\n        from pyxlsb import open_workbook\n\n        wb = open_workbook(str(self.source))\n        for name in wb.sheets:\n            yield wb.get_sheet(name, True)\n"
  },
  {
    "path": "visidata/loaders/xlsx.py",
    "content": "import itertools\nimport copy\nimport datetime\nimport re\nfrom colorsys import rgb_to_hls, hls_to_rgb\n\nfrom visidata import VisiData, vd, Sheet, Column, Progress, IndexSheet, ColumnAttr, SequenceSheet, AttrDict, AttrColumn\nfrom visidata import CellColorizer, getattrdeep, rgb_to_attr\nfrom visidata.type_date import date\n\n\nvd.option('xlsx_meta_columns', False, 'include columns for cell objects, font colors, and fill colors', replay=True)\nvd.option('xlsx_color_cells', True, 'color cells based on xlsx source')\n\n@VisiData.api\ndef open_xls(vd, p):\n    p.is_local() or vd.fail('xls loader does not support remote files')\n    return XlsIndexSheet(p.base_stem, source=p)\n\n@VisiData.api\ndef open_xlsx(vd, p):\n    p.is_local() or vd.fail('xlsx loader does not support remote files')\n    return XlsxIndexSheet(p.base_stem, source=p)\n\nclass XlsxIndexSheet(IndexSheet):\n    'Load XLSX file (in Excel Open XML format).'\n    rowtype = 'sheets'  # rowdef: xlsxSheet\n    columns = [\n        Column('sheet', getter=lambda col,row: row.source.title),  # xlsx sheet title\n        ColumnAttr('name', width=0),  # visidata Sheet name\n        ColumnAttr('nRows', type=int),\n        ColumnAttr('nCols', type=int),\n        Column('active', getter=lambda col,row: row.source is col.sheet.workbook.active),\n    ]\n    nKeys = 1\n\n    def iterload(self):\n        openpyxl = vd.importExternal('openpyxl')\n        self.workbook = openpyxl.load_workbook(str(self.source), data_only=True, read_only=True)\n        for sheetname in self.workbook.sheetnames:\n            src = self.workbook[sheetname]\n            yield XlsxSheet(self.name, sheetname, source=src, workbook=self.workbook)\n\n\nclass XlsxSheet(SequenceSheet):\n    # rowdef: AttrDict of column_letter to cell\n    colorizers = [\n        CellColorizer(5, None, lambda s,c,r,v: c and r and s.colorize_xlsx_cell(c,r))\n    ]\n    def setCols(self, headerrows):\n        vd.importExternal('openpyxl')\n        from openpyxl.utils.cell import get_column_letter\n        self.columns = []\n        self._rowtype = AttrDict\n\n        if not headerrows:\n            return\n\n        headers = [[cell.value for cell in row.values()] for row in headerrows]\n        column_letters = [\n                x.column_letter if 'column_letter' in dir(x)\n                else get_column_letter(i+1)\n                for i, x in enumerate(headerrows[0].values())]\n\n        for i, colnamelines in enumerate(itertools.zip_longest(*headers, fillvalue='')):\n            colnamelines = ['' if c is None else c for c in colnamelines]\n            column_name = ''.join(map(str, colnamelines))\n            self.addColumn(AttrColumn(column_name, column_letters[i] + '.value', column_letter=column_letters[i]))\n            self.addXlsxMetaColumns(column_letters[i], column_name)\n\n    def addRow(self, row, index=None):\n        Sheet.addRow(self, row, index=index)  # skip SequenceSheet\n        for column_letter, v in list(row.items())[len(self.columns):len(row)]:  # no-op if already done\n            self.addColumn(AttrColumn('', column_letter + '.value'))\n            self.addXlsxMetaColumns(column_letter, column_letter)\n\n    def iterload(self):\n        vd.importExternal('openpyxl')\n        from openpyxl.utils.cell import get_column_letter\n        worksheet = self.source\n        for row in Progress(worksheet.iter_rows(), total=worksheet.max_row or 0):\n            yield AttrDict({get_column_letter(i+1): cell for i, cell in enumerate(row)})\n\n    def addXlsxMetaColumns(self, column_letter, column_name):\n        if self.options.xlsx_meta_columns:\n            self.addColumn(\n                    AttrColumn(column_name + '_cellPyObj', column_letter, column_letter=column_letter))\n            self.addColumn(\n                    AttrColumn(column_name + '_fontColor',\n                        column_letter + '.font.color.value', column_letter=column_letter))\n            self.addColumn(\n                    AttrColumn(column_name + '_fillColor', column_letter +\n                        '.fill.start_color.value', column_letter=column_letter))\n            self.addColumn(Column(column_name + '_colorizer', width=0,\n                           column_letter=column_letter,\n                           getter=lambda c,r: c.sheet.colorize_xlsx_cell(c,r)))\n\n    def paste_after(self, rowidx):\n        to_paste = list(copy.copy(r) for r in reversed(vd.getClipboardRows()))\n        self.addRows(to_paste, index=rowidx)\n\n\nclass XlsIndexSheet(IndexSheet):\n    'Load XLS file (in Excel format).'\n    rowtype = 'sheets'  # rowdef: xlsSheet\n    columns = [\n        Column('sheet', getter=lambda col,row: row.source.name),  # xls sheet name\n        ColumnAttr('name', width=0),  # visidata sheet name\n        ColumnAttr('nRows', type=int),\n        ColumnAttr('nCols', type=int),\n    ]\n    nKeys = 1\n    def iterload(self):\n        xlrd = vd.importExternal('xlrd')\n        self.workbook = xlrd.open_workbook(str(self.source))\n        for sheetname in self.workbook.sheet_names():\n            yield XlsSheet(self.name, sheetname, source=self.workbook.sheet_by_name(sheetname))\n\n\nclass XlsSheet(SequenceSheet):\n    def iterload(self):\n        worksheet = self.source\n        for rownum in Progress(range(worksheet.nrows)):\n            yield list(worksheet.cell(rownum, colnum).value for colnum in range(worksheet.ncols))\n\n\n@Sheet.property\ndef xls_name(vs):\n    name = vs.names[-1]\n    if vs.options.clean_names:\n        cleaned_name = ''.join('_' if ch in ':[]*?/\\\\' else ch for ch in vs.name) #1122\n        name = cleaned_name[:31] #1122  #594\n        name = name.strip('_')\n\n    return name\n\n\n@VisiData.api\ndef save_xlsx(vd, p, *sheets):\n    openpyxl = vd.importExternal('openpyxl')\n\n    wb = openpyxl.Workbook()\n    wb.remove_sheet(wb['Sheet'])\n\n    def _convert_save_row(dispvals:dict, replace_illegal=False) -> list:\n        row = []\n        for col, v in dispvals.items():\n            if v is None:\n                v = \"\"\n            elif col.type == date:\n                v = datetime.datetime.fromtimestamp(int(v.timestamp()))\n            elif not vd.isNumeric(col):\n                v = str(v)\n                if replace_illegal:\n                    v = re.sub(openpyxl.cell.cell.ILLEGAL_CHARACTERS_RE, ' ', v)\n\n            row.append(v)\n        return row\n\n    for vs in sheets:\n        if vs.xls_name != vs.names[-1]:\n            vd.warning(f'saving {vs.name} as {vs.xls_name}')\n        ws = wb.create_sheet(title=vs.xls_name)\n\n        headers = [col.name for col in vs.visibleCols]\n        ws.append(headers)\n\n        for dispvals in vs.iterdispvals(format=False):\n            row = _convert_save_row(dispvals)\n            try:\n                ws.append(row)\n            except openpyxl.utils.exceptions.IllegalCharacterError as e:\n                row = _convert_save_row(dispvals, replace_illegal=True)  #1402\n                ws.append(row)\n\n    wb.active = ws\n\n    wb.save(filename=p)\n\n\n@VisiData.api\ndef save_xls(vd, p, *sheets):\n    xlwt = vd.importExternal('xlwt')\n\n    wb = xlwt.Workbook()\n\n    for vs in sheets:\n        if vs.xls_name != vs.name:\n            vd.warning(f'saving {vs.name} as {vs.xls_name}')\n        ws1 = wb.add_sheet(vs.xls_name)\n        for col_i, col in enumerate(vs.visibleCols):\n            ws1.write(0, col_i, col.name)\n\n        for r_i, dispvals in enumerate(vs.iterdispvals(format=True)):\n            r_i += 1\n            for c_i, v in enumerate(dispvals.values()):\n                ws1.write(r_i, c_i, v)\n\n    wb.save(p)\n\n\n# from https://stackoverflow.com/a/65426130\n\nRGBMAX = 255\nHLSMAX = 240\n\n@XlsxSheet.api\ndef colorize_xlsx_cell(sheet, col, row):\n    if not hasattr(col, 'column_letter') or not sheet.options.xlsx_color_cells:\n        return ''\n    fg = getattrdeep(row, col.column_letter+'.font.color', None)\n    bg = getattrdeep(row, col.column_letter+'.fill.start_color', None)\n    fg = sheet.xlsx_color_to_xterm256(fg)\n    bg = sheet.xlsx_color_to_xterm256(bg)\n\n    if bg == '-1' or fg == '-1':\n        fg, bg = '-1', '-1'\n\n    return f'{fg} on {bg}'\n\n@XlsxSheet.api\ndef xlsx_color_to_xterm256(sheet, color) -> str:\n    if not color:\n        return ''\n\n    if color.type == 'rgb':\n        s = color.value\n        if isinstance(s, int):\n            return str(s)\n\n        a,r,g,b = s[0:2], s[2:4], s[4:6], s[6:8]\n        return rgb_to_attr(int(r, 16), int(g, 16), int(b, 16), int(a, 16))\n\n    if color.type == 'theme':\n        return sheet.theme_and_tint_to_rgb(color.value, color.tint)\n    else:\n        return str(color.value)\n\n@XlsxSheet.api\ndef theme_and_tint_to_rgb(sheet, theme, tint) -> str:\n    \"\"\"Given a workbook, a theme number and a tint return a xterm256 color number\"\"\"\n    rgb = sheet.theme_colors[theme]\n    h, l, s = rgb_to_ms_hls(rgb)\n    r, g, b = ms_hls_to_rgb(h, tint_luminance(tint, l), s)\n\n    return rgb_to_attr(r*256, g*256, b*256)\n\n@XlsxSheet.lazy_property\ndef theme_colors(sheet):\n    \"\"\"Gets theme colors from the workbook\"\"\"\n    # see: https://groups.google.com/forum/#!topic/openpyxl-users/I0k3TfqNLrc\n    from openpyxl.xml.functions import QName, fromstring\n    xlmns = 'http://schemas.openxmlformats.org/drawingml/2006/main'\n    root = fromstring(sheet.workbook.loaded_theme)\n    themeEl = root.find(QName(xlmns, 'themeElements').text)\n    colorSchemes = themeEl.findall(QName(xlmns, 'clrScheme').text)\n    firstColorScheme = colorSchemes[0]\n\n    theme_colors = []\n\n    for c in ['lt1', 'dk1', 'lt2', 'dk2', 'accent1', 'accent2', 'accent3', 'accent4', 'accent5', 'accent6', 'hlink', 'folHlink']:\n        accent = firstColorScheme.find(QName(xlmns, c).text)\n        for i in list(accent): # walk all child nodes, rather than assuming [0]\n            if 'window' in i.attrib['val']:\n                theme_colors.append(i.attrib['lastClr'])\n            else:\n                theme_colors.append(i.attrib['val'])\n\n    return theme_colors\n\ndef rgb_to_ms_hls(red, green=None, blue=None):\n    \"\"\"Converts rgb values in range (0,1) or a hex string of the form '[#aa]rrggbb' to HLSMAX based HLS, (alpha values are ignored)\"\"\"\n    if green is None:\n        if isinstance(red, str):\n            if len(red) > 6:\n                red = red[-6:]  # Ignore preceding '#' and alpha values\n            blue = int(red[4:], 16) / RGBMAX\n            green = int(red[2:4], 16) / RGBMAX\n            red = int(red[0:2], 16) / RGBMAX\n        else:\n            red, green, blue = red\n    h, l, s = rgb_to_hls(red, green, blue)\n    return (int(round(h * HLSMAX)), int(round(l * HLSMAX)), int(round(s * HLSMAX)))\n\ndef ms_hls_to_rgb(hue, lightness=None, saturation=None):\n    \"\"\"Converts HLSMAX based HLS values to rgb values in the range (0,1)\"\"\"\n    if lightness is None:\n        hue, lightness, saturation = hue\n    return hls_to_rgb(hue / HLSMAX, lightness / HLSMAX, saturation / HLSMAX)\n\ndef rgb_to_hex(red, green=None, blue=None):\n    \"\"\"Converts (0,1) based RGB values to a hex string 'rrggbb'\"\"\"\n    if green is None:\n        red, green, blue = red\n    return ('%02x%02x%02x' % (int(round(red * RGBMAX)), int(round(green * RGBMAX)), int(round(blue * RGBMAX)))).upper()\n\ndef tint_luminance(tint, lum):\n    \"\"\"Tints a HLSMAX based luminance\"\"\"\n    # See: http://ciintelligence.blogspot.co.uk/2012/02/converting-excel-theme-color-and-tint.html\n    if tint < 0:\n        return int(round(lum * (1.0 + tint)))\n    else:\n        return int(round(lum * (1.0 - tint) + (HLSMAX - HLSMAX * (1.0 - tint))))\n"
  },
  {
    "path": "visidata/loaders/xml.py",
    "content": "from copy import copy\nfrom visidata import VisiData, vd, Sheet, options, Column, Progress, setitem, ColumnAttr, vlen, RowColorizer, Path\n\nvd.option('xml_parser_huge_tree', True, 'allow very deep trees and very long text content')\n\n\n@VisiData.api\ndef open_xml(vd, p):\n    return XmlSheet(p.base_stem, source=p)\n\nVisiData.open_svg = VisiData.open_xml\n\ndef unns(k):\n    'de-namespace key k'\n    if '}' in k:\n        return k[k.find('}')+1:]\n    return k\n\n\ndef AttribColumn(name, k, **kwargs):\n    return Column(name, getter=lambda c,r,k=k: r.attrib.get(k),\n                        setter=lambda c,r,v,k=k: setitem(r.attrib, k, v), **kwargs)\n\n\n# source is Path or xml.Element; root is xml.Element\nclass XmlSheet(Sheet):\n    rowtype = 'elements'   # rowdef: lxml.xml.Element\n\n    columns = [\n        ColumnAttr('sourceline', type=int, width=0),\n        ColumnAttr('prefix', width=0),\n        ColumnAttr('nstag', 'tag', width=0),\n        Column('path', width=0, getter=lambda c,r: c.sheet.root.getpath(r)),\n        Column('tag', getter=lambda c,r: unns(r.tag)),\n        Column('children', type=vlen, getter=lambda c,r: r.getchildren()),\n        ColumnAttr('text'),\n        ColumnAttr('tail', width=0),\n    ]\n    colorizers = [\n            RowColorizer(8, None, lambda s,c,r,v: 'green' if r is s.source else None)\n    ]\n\n    def showColumnsBasedOnRow(self, row):\n        for c in self.columns:\n            nstag = getattr(c, 'nstag', '')\n            if nstag:\n                c.hide(nstag not in row.attrib)\n\n    def iterload(self):\n        if isinstance(self.source, Path):\n            vd.importExternal('lxml')\n            from lxml import etree, objectify\n            p = etree.XMLParser(**self.options.getall('xml_parser_'))\n            with self.open_text_source() as fp:\n                self.root = etree.parse(fp, parser=p)\n            objectify.deannotate(self.root, cleanup_namespaces=True)\n        else: #        elif isinstance(self.source, XmlElement):\n            self.root = self.source\n\n        self.attribcols = {}\n        self.columns = []\n        for c in XmlSheet.columns:\n            self.addColumn(copy(c))\n\n        if getattr(self.root, 'iterancestors', None):\n            for elem in Progress(list(self.root.iterancestors())[::-1]):\n                yield elem\n\n        for elem in self.root.iter():\n            yield elem\n\n    def openRow(self, row):\n        return XmlSheet(\"%s_%s\" % (unns(row.tag), row.attrib.get(\"id\")), source=row)\n\n    def addRow(self, elem):\n        super().addRow(elem)\n        for k in elem.attrib:\n            if k not in self.attribcols:\n                c = AttribColumn(unns(k), k)\n                self.addColumn(c)\n                self.attribcols[k] = c\n                c.nstag = k\n\n\n@VisiData.api\ndef save_xml(vd, p, vs):\n    isinstance(vs, XmlSheet) or vd.fail('must save xml from XmlSheet')\n    vs.root.write(str(p), encoding=vs.options.save_encoding, standalone=False, pretty_print=True)\n\nXmlSheet.options.save_encoding = 'utf-8'  #2520\n\nXmlSheet.addCommand('za', 'addcol-xmlattr', 'attr=input(\"add attribute: \"); addColumnAtCursor(AttribColumn(attr, attr))', 'add column for xml attribute')\nXmlSheet.addCommand('v', 'visibility', 'showColumnsBasedOnRow(cursorRow)', 'show only columns in current row attributes')\n"
  },
  {
    "path": "visidata/loaders/xword.py",
    "content": "from collections import defaultdict\n\nfrom visidata import VisiData, vd, Sheet, Column, asyncthread, CellColorizer, ColumnItem\n\n\nvd.option('color_xword_active', 'green', 'color of active clue')\n\n\n@VisiData.api\ndef open_puz(vd, p):\n    return PuzSheet(p.base_stem, source=p)\n\n@VisiData.api\ndef open_xd(vd, p):\n    if p.is_dir():\n        return CrosswordsSheet(p.base_stem, source=p)\n    return CrosswordSheet(p.base_stem, source=p)\n\n\n@VisiData.api\nclass CrosswordsSheet(Sheet):\n    rowtype = 'puzzles'\n    columns = [\n            Column('Author', getter=lambda col, row: row.author),\n            Column('Copyright', getter=lambda col, row: row.copyright),\n            Column('Notes', getter=lambda col, row: row.notes),\n            Column('Postscript', getter=lambda col, row: ''.join(x for x in row.postscript if ord(x) >= ord(' '))),\n            Column('Preamble', getter=lambda col, row: row.preamble),\n            Column('Title', getter=lambda col, row: row.title)\n            ]\n\n    @asyncthread\n    def reload(self):\n        self.rows = []\n        for p in self.source.iterdir():\n            self.addRow(Crossword(p.read(), str(p)))\n\n    def openRow(self):\n        return CrosswordSheet(\"clues_\"+self.cursorRow.title, source=self.cursorRow)\n\n@VisiData.api\nclass GridSheet(Sheet):\n    rowtype = 'gridrow'  # rowdef: puzzle_row:str\n    colorizers = [\n        CellColorizer(7, 'color_xword_active', lambda s,c,r,v: r and s.pos in s.cells[(s.rows.index(r),c)])\n    ]\n\n    @asyncthread\n    def reload(self):\n        grid = self.source.xd.grid\n\n        ncols = len(grid[0])\n        self.columns = [ColumnItem('', i, width=2) for i in range(ncols)]\n\n        for row in grid:\n            row = list(row)\n            self.addRow(row)\n\n        self.cells = defaultdict(list) # [rownum, col] -> [ Apos, Dpos ] or [] (if black)\n\n        # find starting r,c from self.pos\n        for cluedir, cluenum, answer, r, c in self.source.xd.iteranswers_full():\n            # across\n            if cluedir == 'A':\n                for i in range(0, len(answer)):\n                    self.cells[(r, self.columns[c+i])].append(('A', cluenum))\n            if cluedir == 'D':\n                for i in range(0, len(answer)):\n                    self.cells[(r+i, self.columns[c])].append(('D', cluenum))\n\n                if cluenum == self.pos[1]:\n                    self.cursorRowIndex, self.cursorVisibleColIndex = r, c\n\n\nclass CrosswordSheet(Sheet):\n    rowtype = 'clues' # rowdef: (cluenum, clue, answer)\n\n    columns = [\n            Column('clue_number', getter=lambda col, row: row[0][0]+str(row[0][1])),\n            Column('clue', getter=lambda col, row: row[1]),\n            Column('answer', getter=lambda col, row: row[2])\n            ]\n\n    @asyncthread\n    def reload(self):\n        import xdfile\n        self.xd = xdfile.xdfile(xd_contents=self.source.read_text(), filename=self.source)\n        self.rows = self.xd.clues\n\n    def openRow(self):\n        return GridSheet(\"grid\", source=self, pos=self.cursorRow[0])\n\n\nclass PuzSheet(CrosswordSheet):\n    @asyncthread\n    def reload(self):\n        import xdfile.puz2xd\n        self.xd = xdfile.puz2xd.parse_puz(self.source.read_bytes(), str(self.source))\n        self.rows = self.xd.clues\n\n\n@VisiData.api\ndef save_xd(vd, p, vs):\n    with p.open(mode='w', encoding='utf-8') as fp:\n        fp.write(vs.xd.to_unicode())\n\n\nGridSheet.options.disp_column_sep = ''\n"
  },
  {
    "path": "visidata/loaders/yaml.py",
    "content": "from itertools import chain\n\nfrom visidata import VisiData, Progress, JsonSheet, vd\n\n\n@VisiData.api\ndef open_yml(vd, p):\n    return YamlSheet(p.base_stem, source=p)\n\nVisiData.open_yaml = VisiData.open_yml\n\nclass YamlSheet(JsonSheet):\n    def iterload(self):\n        yaml = vd.importExternal('yaml', 'PyYAML')\n\n        class PrettySafeLoader(yaml.SafeLoader):\n            def construct_python_tuple(self, node):\n                return tuple(self.construct_sequence(node))\n\n        PrettySafeLoader.add_constructor(\n            u'tag:yaml.org,2002:python/tuple',\n            PrettySafeLoader.construct_python_tuple\n        )\n\n        with self.source.open() as fp:\n            documents = yaml.load_all(fp, PrettySafeLoader)\n\n            self.columns = []\n            self._knownKeys.clear()\n\n            # Peek at the document stream to determine how to best DWIM.\n            #\n            # This code is a bit verbose because it avoids slurping the generator\n            # all at once into memory.\n            try:\n                first = next(documents)\n            except StopIteration:\n                # Empty file‽\n                yield None\n                return\n\n            try:\n                second = next(documents)\n            except StopIteration:\n                if isinstance(first, list):\n                    # A file with a single YAML list: yield one row per list item.\n                    yield from Progress(first)\n                else:\n                    # A file with a single YAML non-list value, e.g a dict.\n                    yield first\n            else:\n                # A file containing multiple YAML documents: yield one row per document.\n                yield from Progress(chain([first, second], documents), total=0)\n"
  },
  {
    "path": "visidata/macos.py",
    "content": "from visidata import BaseSheet\n\n# for mac users to use Option+x as Alt+x without reconfiguring the terminal\n\n# Option+X\nBaseSheet.bindkey('å', 'Alt+a')\nBaseSheet.bindkey('∫', 'Alt+b')\nBaseSheet.bindkey('ç', 'Alt+c')\nBaseSheet.bindkey('∂', 'Alt+d')\nBaseSheet.bindkey('´', 'Alt+e')\nBaseSheet.bindkey('ƒ', 'Alt+f')\nBaseSheet.bindkey('©', 'Alt+g')\nBaseSheet.bindkey('˙', 'Alt+h')\nBaseSheet.bindkey('ˆ', 'Alt+i')\nBaseSheet.bindkey('∆', 'Alt+j')\nBaseSheet.bindkey('˚', 'Alt+k')\nBaseSheet.bindkey('¬', 'Alt+l')\nBaseSheet.bindkey('µ', 'Alt+m')\nBaseSheet.bindkey('˜', 'Alt+n')\nBaseSheet.bindkey('ø', 'Alt+o')\nBaseSheet.bindkey('π', 'Alt+p')\nBaseSheet.bindkey('œ', 'Alt+q')\nBaseSheet.bindkey('®', 'Alt+r')\nBaseSheet.bindkey('ß', 'Alt+s')\nBaseSheet.bindkey('†', 'Alt+t')\nBaseSheet.bindkey('¨', 'Alt+u')\nBaseSheet.bindkey('√', 'Alt+v')\nBaseSheet.bindkey('∑', 'Alt+w')\nBaseSheet.bindkey('≈', 'Alt+x')\nBaseSheet.bindkey('¥', 'Alt+y')\nBaseSheet.bindkey('Ω', 'Alt+z')\n\n# Option+Shift+X\nBaseSheet.bindkey('Å', 'Alt+A')\nBaseSheet.bindkey('ı', 'Alt+B')\nBaseSheet.bindkey('Ç', 'Alt+C')\nBaseSheet.bindkey('Î', 'Alt+D')\n#BaseSheet.bindkey('´', 'Alt+E')\nBaseSheet.bindkey('Ï', 'Alt+F')\nBaseSheet.bindkey('˝', 'Alt+G')\nBaseSheet.bindkey('Ó', 'Alt+H')\n#BaseSheet.bindkey('ˆ', 'Alt+I')\nBaseSheet.bindkey('Ô', 'Alt+J')\nBaseSheet.bindkey('', 'Alt+K')  # apple logo\nBaseSheet.bindkey('Ò', 'Alt+L')\nBaseSheet.bindkey('Â', 'Alt+M')\n#BaseSheet.bindkey('˜', 'Alt+N')\nBaseSheet.bindkey('Ø', 'Alt+O')\nBaseSheet.bindkey('∏', 'Alt+P')\nBaseSheet.bindkey('Œ', 'Alt+Q')\nBaseSheet.bindkey('‰', 'Alt+R')\nBaseSheet.bindkey('Í', 'Alt+S')\nBaseSheet.bindkey('ˇ', 'Alt+T')\n#BaseSheet.bindkey('¨', 'Alt+U')\nBaseSheet.bindkey('◊', 'Alt+V')\nBaseSheet.bindkey('„', 'Alt+W')\nBaseSheet.bindkey('˛', 'Alt+X')\nBaseSheet.bindkey('Á', 'Alt+Y')\nBaseSheet.bindkey('¸', 'Alt+Z')\n\n# Option+nonletter\nBaseSheet.bindkey('¡', 'Alt+1')\nBaseSheet.bindkey('™', 'Alt+2')\nBaseSheet.bindkey('£', 'Alt+3')\nBaseSheet.bindkey('¢', 'Alt+4')\nBaseSheet.bindkey('∞', 'Alt+5')\nBaseSheet.bindkey('§', 'Alt+6')\nBaseSheet.bindkey('¶', 'Alt+7')\nBaseSheet.bindkey('•', 'Alt+8')\nBaseSheet.bindkey('ª', 'Alt+9')\nBaseSheet.bindkey('º', 'Alt+0')\n#BaseSheet.bindkey('', 'Alt+`')\nBaseSheet.bindkey('–', 'Alt+-')\nBaseSheet.bindkey('≠', 'Alt+=')\nBaseSheet.bindkey('“', 'Alt+[')\nBaseSheet.bindkey('‘', 'Alt+]')\nBaseSheet.bindkey('«', 'Alt+\\\\')\nBaseSheet.bindkey('÷', 'Alt+/')\nBaseSheet.bindkey('…', 'Alt+;')\nBaseSheet.bindkey('æ', 'Alt+\\'')\nBaseSheet.bindkey('≤', 'Alt+,')\nBaseSheet.bindkey('≥', 'Alt+.')\n\n# Option+Shift+nonletter\nBaseSheet.bindkey('⁄', 'Alt+!')\nBaseSheet.bindkey('€', 'Alt+@')\nBaseSheet.bindkey('‹', 'Alt+#')\nBaseSheet.bindkey('›', 'Alt+$')\nBaseSheet.bindkey('ﬁ', 'Alt+%')\nBaseSheet.bindkey('ﬂ', 'Alt+^')\nBaseSheet.bindkey('‡', 'Alt+&')\nBaseSheet.bindkey('°', 'Alt+*')\nBaseSheet.bindkey('·', 'Alt+(')\nBaseSheet.bindkey('‚', 'Alt+)')\n#BaseSheet.bindkey('`', 'Alt+~')\nBaseSheet.bindkey('—', 'Alt+_')\nBaseSheet.bindkey('±', 'Alt++')\nBaseSheet.bindkey('”', 'Alt+{')\nBaseSheet.bindkey('’', 'Alt+}')\nBaseSheet.bindkey('»', 'Alt+|')\nBaseSheet.bindkey('¿', 'Alt+?')\nBaseSheet.bindkey('Ú', 'Alt+:')\nBaseSheet.bindkey('Æ', 'Alt+\"')\nBaseSheet.bindkey('¯', 'Alt+<')\nBaseSheet.bindkey('˘', 'Alt+>')\n"
  },
  {
    "path": "visidata/macros.py",
    "content": "from copy import copy\nfrom functools import wraps\n\nfrom visidata.cmdlog import CommandLog, CommandLogJsonl\nfrom visidata import vd, UNLOADED, asyncthread, vlen\nfrom visidata import IndexSheet, VisiData, Sheet, Path, VisiDataMetaSheet, Column, ItemColumn, AttrColumn, BaseSheet\n\nvd.macroMode = None  # CommandLog\nvd.macrobindings = {}\n\n\nvd.macros = vd.StoredList(name='macros')\n\n\nclass MacroSheet(IndexSheet):\n    guide= '''\n        # Macros Sheet\n        This is a list of user-defined macros.\n\n        - `Enter` to open the current macro.\n        - `d` to mark macro for delete; `z Ctrl+S` to commit.\n    '''\n    columns = [\n        AttrColumn('binding'),\n        AttrColumn('helpstr'),\n        Column('num_commands', type=vlen, width=0),\n        AttrColumn('source'),\n    ]\n    rowtype = 'macros'  # rowdef: CommandLogJsonl\n    defer = True\n    nKeys = 1\n\n    def iterload(self):\n        yield from vd.macrobindings.values()\n\n    def commitDeleteRow(self, row):\n        binding = row.binding\n\n        # Remove from macrobindings\n        del vd.macrobindings[binding]\n\n        # Remove command registration and key bindings\n        if vd.isLongname(binding):\n            BaseSheet.removeCommand('', binding)\n        else:\n            BaseSheet.removeCommand(binding,f'exec-{row.name}')\n\n        # Delete source file\n        vd.callNoExceptions(Path(row.source).unlink)\n\n    @asyncthread\n    def putChanges(self):\n        self.commitDeletes()  #1569  apply deletes early for saveSheets below\n\n        vd.sync(vd.saveSheets(self.source, self, confirm_overwrite=False))\n        self._deferredDels.clear()\n        vd.reloadMacros()\n        self.reload()\n\n    def newRow(self):\n        vd.fail('add macros with `m` instead')\n\n\n@VisiData.lazy_property\ndef macrosheet(vd):\n    return MacroSheet('user_macros', source=vd.macros.path)\n\n\n@VisiData.api\ndef loadMacro(vd, p:Path):\n    if p.exists():\n        if p.ext == 'vd':\n            vs = CommandLog(p.base_stem, source=p)\n            vs.ensureLoaded()\n            return vs\n        elif p.ext == 'vdj':\n            vs = CommandLogJsonl(p.base_stem, source=p)\n            vs.ensureLoaded()\n            return vs\n\n    vd.warning(f'failed to load macro {p}')\n\n\n@VisiData.api\ndef runMacro(vd, binding:str):\n    mm = vd.macroMode\n    vd.macroMode = None\n    vd.replay_sync(vd.macrobindings[binding])\n    vd.macroMode = mm\n\n\n@VisiData.api\ndef setMacro(vd, ks:str, vs, helpstr=''):\n    'Set *ks* which is either a keystroke or a longname to run the cmdlog in *vs*.'\n    vs.binding = ks\n    vs.helpstr = helpstr\n    vd.macrobindings[ks] = vs\n    if vd.isLongname(ks):\n        BaseSheet.addCommand('', ks, f'runMacro(\"{ks}\")', helpstr)\n    else:\n        BaseSheet.addCommand(ks, f'exec-{vs.name}', f'runMacro(\"{ks}\")', helpstr)\n\n\n@CommandLogJsonl.api\ndef saveMacro(self, rows, ks):\n        vs = copy(self)\n        vs.rows = rows\n        macropath = Path(vd.fnSuffix(str(Path(vd.options.visidata_dir)/ks)))\n        vd.save_vdj(macropath, vs)\n        vd.status(f'{ks} saved to {macropath}')\n        vd.setMacro(ks, vs)\n        vd.macros.append(dict(binding=ks, source=str(macropath), helpstr=''))\n        vd.reloadMacros()\n        vd.macrosheet.reload()\n\n\n# needs to happen before, because the original afterexecsheet resets vd.activecommand to None\n@CommandLogJsonl.before\ndef afterExecSheet(cmdlog, sheet, escaped, err):\n    if not vd.macroMode: return\n    if not vd.activeCommand: return\n    if vd.activeCommand.longname == 'macro-record': return\n\n    if vd.activeCommand.replayable:\n        cmd = copy(vd.activeCommand)\n        cmd.sheet = ''\n        vd.macroMode.addRow(cmd)\n\n\n@CommandLogJsonl.api\ndef startMacro(cmdlog):\n    if not Path(vd.options.visidata_dir).is_dir():\n        vd.fail(f'create {vd.options.visidata_dir} to save macros')\n    if vd.macroMode:\n        try:\n            ks = vd.input('bind macro to: ', help=f'''\n                # Finish recording macro\n                Type in either a longname like `happy-time` (with at least one hyphen),\n                   or spell out a keybinding (like `Alt+b`) manually.\n\n                - Prefixes allowed with a keybinding: `{'  '.join(vd.allPrefixes)}`\n                - Press `Ctrl+N` and then press another keystroke to spell that keystroke.\n                - Press `Ctrl+C` to cancel the macro recording.\n            ''')\n            while ks in vd.macrobindings:\n                ks = vd.input(f'{ks} already in use; set macro to keybinding: ')\n            vd.cmdlog.saveMacro(vd.macroMode.rows, ks)\n        finally:\n            vd.macroMode = None\n    else:\n        ks = vd.sheet.revbinds.get('macro-record', ['m'])[0]  #2776\n        vd.status(f\"recording macro; stop recording with `{ks}`\")\n        vd.macroMode = CommandLogJsonl('current_macro', rows=[])\n\n\n@VisiData.before\n@asyncthread\ndef run(vd, *args, **kwargs):\n    vd.reloadMacros()\n\n\n@VisiData.api\ndef reloadMacros(vd):\n    vd.macros.reload()\n    for r in vd.macros:\n        p = Path(r.source)\n        if not p.is_absolute():\n            p = vd.macros.path.parent / r.source\n        vs = vd.loadMacro(p)\n        if vs:\n            vd.setMacro(r.binding, vs, getattr(r, 'helpstr', ''))\n\n\nSheet.addCommand('m', 'macro-record', 'vd.cmdlog.startMacro()', 'start/stop macro recording', replay=False)\nSheet.addCommand('gm', 'macro-sheet', 'vd.push(vd.macrosheet)', 'open an index of existing macros')\n\nvd.addMenuItems('''\n    System > Record macro > macro-record\n    System > Macros sheet > macro-sheet\n''')\n"
  },
  {
    "path": "visidata/main.py",
    "content": "#\n# Usage: $0 [<options>] [<input> ...]\n#        $0 [<options>] --play <cmdlog> [--batch] [-w <waitsecs>] [-o <output>] [field=value ...]\n\n__version__ = '3.4dev'\n__version_info__ = 'saul.pw/VisiData v' + __version__\n\nfrom copy import copy\nimport os\nimport io\nimport sys\nimport locale\nimport datetime\nimport functools\nimport signal\nimport warnings\nimport builtins  # to override print\n\nfrom visidata import vd, options, run, BaseSheet, Sheet, AttrDict, stacktrace\nfrom visidata import Path, asyncthread\nimport visidata\n\nvd.version_info = __version_info__\n\nvd.option('config', vd.config_file, 'config file to exec in Python', sheettype=None)\nvd.option('play', '', 'file.vdj to replay')\nvd.option('batch', False, 'replay in batch mode (with no interface and all status sent to stdout)')\nvd.option('output', None, 'save the final visible sheet to output at the end of replay', cli_only=True)\nvd.option('output_cell', None, 'output the cursor cell display value at exit', cli_only=True)\nvd.option('preplay', '', 'longnames to preplay before replay')\nvd.option('imports', 'plugins', 'imports to preload before .visidatarc (command-line only)')\nvd.option('nothing', False, 'no config, no plugins, nothing extra')\nvd.option('interactive', False, 'run interactive mode after batch replay')\nvd.option('s3_anon', False, 'run S3 in anonymous mode')\n\n# for --play\ndef eval_vd(logpath, *args, **kwargs):\n    'Instantiate logpath with args/kwargs replaced and replay all commands.'\n    log = logpath.read_text()\n    if args or kwargs:\n        if logpath.ext in ['vdj', 'json', 'jsonl'] or logpath is vd.stdinSource:\n            from string import Template\n            log = Template(log).safe_substitute(**kwargs)\n        else:\n            log = log.format(*args, **kwargs)\n\n    src = Path(logpath.given, fptext=io.StringIO(log), filesize=len(log))\n    if logpath is vd.stdinSource:\n        # vdx format handles .vd (tsv), .vdj (json), and .vdx (minimal) lines\n        vs = vd.openSource(src, filetype='vdx')\n    else:\n        vs = vd.openSource(src, filetype=src.ext or 'vdx')\n    # add a row in place of the sheet creation command that undo() expects as the first command\n    vs.cmdlog_sheet.addRow(vs.cmdlog_sheet.newRow(sheet=None, row='', keystrokes='', input='', longname='no-op', undofuncs=[]))\n    vs.name += '_vd'\n    vd.sync(vs.reload())\n    vs.vd = vd\n    return vs\n\n\ndef duptty():\n    'Duplicate stdin/stdout for input/output and reopen tty as stdin/stdout.  Return (stdin, stdout).'\n    try:\n        fin = open('/dev/tty')\n        fout = open('/dev/tty', mode='w')\n        stdin = open(os.dup(0),\n                     encoding=vd.options.getonly('encoding', 'global', 'utf-8'),\n                     errors=vd.options.getonly('encoding_errors', 'global', 'surrogateescape'))  #2047\n        stdout = open(os.dup(1), mode='w')  # for dumping to stdout from interface\n        os.dup2(fin.fileno(), 0)\n        os.dup2(fout.fileno(), 1)\n\n        # close file descriptors for original stdin/stdout\n        fin.close()\n        fout.close()\n    except Exception as e:\n        stdin = sys.stdin\n        stdout = sys.stdout\n\n    return stdin, stdout\n\nvd.optalias('i', 'interactive')\nvd.optalias('N', 'nothing')\nvd.optalias('f', 'filetype')\nvd.optalias('p', 'play')\nvd.optalias('b', 'batch')\nvd.optalias('P', 'preplay')\nvd.optalias('o', 'output')\nvd.optalias('O', 'output_cell')\nvd.optalias('w', 'replay_wait')\nvd.optalias('d', 'delimiter')\nvd.optalias('c', 'config')\nvd.optalias('r', 'dir_depth', 100000)\n\n\n@visidata.VisiData.api\ndef parsePos(vd, arg:str, inputs:'list[tuple[str, dict]]'=None):\n    '''Return (startsheets:list, startcol:str, startrow:str) from *arg* like \"+sheet:subsheet:col:row\".\n    The elements of *startsheets* are identifiers that pick out a sheet, either\n    a) a string that is the name of a sheet or subsheet\n    b) integers (which are indices of a row or column, or a sheet number).\n    For example [1, 'sales', 3].\n    Returns an empty list for *startsheets* when the starting pos applies to all sheets.\n    Returns None for *startsheets* when the position expression did not specify a sheet.\n    *inputs* is a list of (path, options) tuples.\n    '''\n    if arg == '': return None\n    startsheets, startcol, startrow = None, None, None\n\n    pos = []\n    # convert any numeric index strings to ints\n    for idx in arg.split(':'):\n        if idx:\n            if idx.isdigit() or (idx[0] == '-' and idx[1:].isdigit()):\n                idx = int(idx)\n        pos.append(idx)\n\n    if len(pos) == 1:\n        # -1 means the last sheet in the list of open sheets\n        startsheets = [len(inputs) - 1] if inputs else None\n        startrow = arg\n    elif len(pos) == 2:\n        startsheets = [len(inputs) - 1] if inputs else None\n        startcol, startrow = pos\n    else:\n        # the first element of pos is the startsheet,\n        # the later elements (if present) describe the branch to a subsheet\n        startsheets = pos[:-2]\n        if startsheets == ['']: startsheets = []\n        startcol, startrow = pos[-2:]\n    if startcol == '':  startcol = None\n    if startrow == '':  startrow = None\n    start_pos = (startsheets, startcol, startrow)\n\n    return start_pos\n\n\n@visidata.VisiData.api\ndef outputProgressEvery(vd, sheet, seconds:float=0.5):\n    import time\n    t0 = time.time()\n\n    while not vd.currentReplay:\n        time.sleep(.1)\n\n    while vd.currentReplay:\n        t = time.time()\n        print(f'\\r[{t-t0:.1f}s] ', end='', file=sys.stderr)\n        if sheet:\n            print(f'{sheet.progressPct}  ', end='', file=sys.stderr)\n        sys.stderr.flush()\n        time.sleep(seconds)\n\n@visidata.VisiData.api\ndef moveToPos(vd, sources, sheet_desc, startcol, startrow):\n    '''*sources* is a list of sheets, if it is empty, the currently active sheet is used'''\n    if len(sources) == 0:\n        sources = [vd.activeSheet]\n    if sheet_desc is None:  #apply move to the last sheet\n        sheet_descs = [[len(sources) - 1]]\n    elif sheet_desc == [] or sheet_desc[0] == '': #apply move to all sheets\n        # the list of moves must have each of its elements refer only to 1\n        # sheet, so expand the \"all sheets\" sheet descriptor into individual sheets\n        sheet_descs = [[i] + sheet_desc[1:] for i, sheet in enumerate(sources)]\n    else:\n        sheet_descs = [sheet_desc]\n    if startcol is not None or startrow is not None:\n        moves = []\n        if startcol:\n            moves += [(d, startcol, None) for d in sheet_descs]\n        if startrow:\n            moves += [(d, None, startrow) for d in sheet_descs]\n    else:\n        moves = [(d, None, None) for d in sheet_descs]\n    vd.queue_move_to_pos(sources, moves)\n\ndef sheet_from_description(vd, sources, sheet_desc):\n    '''Return a Sheet to apply col/row to, given a list *sheet_desc* that refers to one specific sheet.\n        The *sheet_desc* is either a Sheet, or a list of strings/ints similar to the return value of parsePos(),\n        with the difference that *sheet_desc* will not ever be the empty list that denotes \"all sheets\".\n        Return None if no matching sheet was found; if no match was found because sheets are loading,\n        a subsequent call may return a matching sheet.\n        Raise ValueError to indicate that a move failed, and should not be retried.'''\n    if isinstance(sheet_desc, BaseSheet):\n        vd.push(sheet_desc)\n        return sheet_desc\n\n    # descend the tree of subsheets\n    for desc_lvl, subsheet in enumerate(sheet_desc):\n        if desc_lvl == 0:\n            vs = None\n            #try subsheets as numbers first, then as names\n            if isinstance(subsheet, int):\n                try:\n                    vs = sources[subsheet]\n                except IndexError:\n                    pass\n            else:\n                vs = vd.getSheet(subsheet)\n            if not vs:\n                raise ValueError(f'no sheet \"{subsheet}\"')\n        else:\n            if isinstance(subsheet, int):\n                rowidx = subsheet\n            else:\n                rowidx = vs.getRowIndexFromStr(vd.options.rowkey_prefix + subsheet)\n            try:\n                if rowidx is None: raise IndexError\n                vs_subsheet = vs.rows[rowidx]\n            except IndexError:\n                vd.warning(f'sheet {vs.name} has no subsheet \"{subsheet}\"')\n                return None\n            if not isinstance(vs_subsheet, BaseSheet):\n                raise ValueError(f'row \"{subsheet}\" is not a sheet in {vs.name}')\n            vs = vs_subsheet\n        # if we have any more levels of subsheets to look at, load the current sheet fully\n        if desc_lvl < len(sheet_desc) - 1:\n            # Prevent the sheet from doing automatic ensureLoaded() on its subsheets when it\n            # loads, so that we can call ensureLoaded() ourselves and sync() on it.\n            vd.options.set('load_lazy', True, obj=vs)\n            vd.sync(vs.ensureLoaded())\n            vd.clearCaches()\n    # Only push for subsheet navigation or sheets not already on the stack.\n    # For single-level moves (cursor positioning on an existing source),\n    # don't change the stack order — just return the sheet for cursor moves.\n    if len(sheet_desc) > 1 or vs not in vd.sheets:\n        # use load=False to avoid calling afterLoad() early, before queue_move_to_pos\n        # can replace the default afterLoad with a wrapped version\n        vd.push(vs, load=False)\n    return vs\n\n@visidata.VisiData.api\ndef queue_move_to_pos(vd, sources, moves):\n    for move in moves:\n        sheet_desc = move[0]\n        vs = sheet_from_description(vd, sources, sheet_desc)\n        if not vs:\n            continue\n        if vs.rows is not visidata.basesheet.UNLOADED:\n            attempt_move_to_pos(vd, sources, *move)\n        else:\n            if not hasattr(vs, '_startpos_moves'):\n                vs._startpos_moves = []\n            vs._startpos_moves.append((sources, move))\n            if vd.options.batch:\n                vd.sync(vs.ensureLoaded())\n\ndef attempt_move_to_pos(vd, sources, sheet_desc, startcol, startrow):\n    '''Return True if the move succeeded in moving to the row and column, on the described sheet.\n        Raise ValueError to indicate that a move failed, and should not be retried.'''\n    vs = sheet_from_description(vd, sources, sheet_desc)\n    if not vs:\n        return False\n    # switch the active sheet, for command line args like +s::\n    if vs and startrow is None and startcol is None:\n        vd.push(vs)\n        return True\n\n    # try cursor moves\n    success = True\n    if startrow is not None:\n        if not vs.moveToRow(startrow):\n            if vs.nRows > 0:    # avoid uninformative warnings early in startup\n                vd.warning(f'{vs} has no row {startrow}:  nRows={len(vs.rows)}\"')\n            success = False\n\n    if startcol is not None:\n        if not vs.moveToCol(startcol):\n            if vs.nRows > 0:\n                vd.warning(f'{vs} has no column {startcol}')\n            success = False\n    return success\n\n@Sheet.after\ndef afterLoad(sheet):\n    moves = getattr(sheet, '_startpos_moves', None)\n    if not moves:\n        return\n    del sheet._startpos_moves\n    for sources, move in moves:\n        attempt_move_to_pos(vd, sources, *move)\n\ndef main_vd():\n    'Open the given sources using the VisiData interface.'\n    if '-v' in sys.argv or '--version' in sys.argv:\n        print(vd.version_info)\n        return 0\n    if '-h' in sys.argv or '--help' in sys.argv:\n        manpath = Path(vd.pkg_resources_files(visidata)) / 'man' / 'vd.txt'\n        if manpath.exists():\n            print(manpath.open().read())\n        else:\n            print('usage: vd [options] [input ...]')\n            print('  see https://visidata.org/man for full reference')\n        return 0\n    vd.status(__version_info__)\n\n    try:\n        locale.setlocale(locale.LC_ALL, '')\n    except locale.Error as e:\n        vd.warning(e)\n\n    if options.debug:\n        warnings.showwarning = lambda msg, cat, fn, lineno, *args, **kwargs: vd.warning(f'{fn}:{lineno}: {msg}')\n    else:\n        warnings.showwarning = lambda msg, *args, **kwargs: vd.warning(msg)\n\n    vd.printerr = lambda *args: builtins.print(*args, file=sys.stderr)\n\n    flPipedInput = not sys.stdin.isatty()\n    flPipedOutput = not sys.stdout.isatty()\n\n    try:\n        # workaround for bug in curses.wrapper #899\n        # https://stackoverflow.com/questions/31440392/curses-wrapper-messing-up-terminal-after-background-foreground-sequence\n        vd.tstp_signal = signal.getsignal(signal.SIGTSTP)\n    except Exception:\n        vd.tstp_signal = None\n\n    vd.stdinSource = Path('-', fp=None)  # fp filled in below after options parsed for encoding\n\n    # parse args, including +sheetname:subsheet:4:3 starting at row:col on sheetname:subsheet[:...]\n    sheet_moves = []\n    fmtargs = []\n    fmtkwargs = {}\n    inputs = []\n\n    i=1\n    current_args = {}\n    global_args = {}\n    clionly_args = {}\n    flGlobal = True\n    optsdone = False\n\n    while i < len(sys.argv):\n        arg = sys.argv[i]\n        if optsdone:\n            # copied from final else: clause below\n            inputs.append((arg, copy(current_args)))\n            fmtargs.append(arg)\n        elif arg in ['--']:\n            optsdone = True\n        elif arg == '-':\n            if not flPipedInput:\n                vd.fail('to use stdin as a data source, data must be piped into it')\n            inputs.append((vd.stdinSource, copy(current_args)))\n        elif arg in ['-g', '--global']:\n            flGlobal = True\n        elif arg in ['-n', '--nonglobal']:\n            flGlobal = False\n        elif arg.startswith('-'):\n            optname = arg.lstrip('-')\n            optval = None\n            try:\n                optname, optval = optname.split('=', maxsplit=1)\n                # convert to type\n            except Exception:\n                pass\n\n            optname = optname.replace('-', '_')\n            optname, optval = vd._resolve_optalias(optname, optval)\n\n            opt = vd.options._get(optname)\n            if optval is None and opt:  # missing argument, determine type\n                if type(opt.value) is bool:\n                    optval = True\n                else:\n                    if i >= len(sys.argv)-1:\n                        vd.error(f'\"-{optname}\" missing argument')\n\n                    optval = sys.argv[i+1]\n                    i += 1\n\n            if opt and opt.cli_only:\n                clionly_args[optname] = optval\n            else:\n                # batch and interactive are only meaningful when applied globally,\n                # so exclude them from sheet-specific options. Those would\n                # override any later change to vd.options.batch in global settings.\n                if optname not in ('batch', 'interactive'):\n                    current_args[optname] = optval\n                if flGlobal:\n                    global_args[optname] = optval\n        elif arg.startswith('+'):  # position cursor at start\n            parsed_pos = vd.parsePos(arg[1:], inputs=inputs)\n            if parsed_pos:\n                sheet_moves.append(parsed_pos)\n        elif current_args.get('play', None) and '=' in arg:\n            # parse 'key=value' pairs for formatting cmdlog template in replay mode\n            k, v = arg.split('=', maxsplit=1)\n            fmtkwargs[k] = v\n        else:\n            inputs.append((arg, copy(current_args)))\n            fmtargs.append(arg)\n\n        i += 1\n\n    args = AttrDict(current_args)\n    args.update(clionly_args)\n\n    if args.profile:\n        import threading\n        import cProfile\n        t = threading.current_thread()\n        t.profile = cProfile.Profile()\n        t.profile.enable()\n\n    if not args.nothing:\n        vd.loadConfigAndPlugins(args)\n\n    for k, v in global_args.items():\n        options.set(k, v, obj='global')\n\n    vd._stdin, vd._stdout = duptty()  # always dup stdin/stdout\n    vd.stdinSource.fptext = vd._stdin\n    vd._stdin.close = vd.nop  #1759\n\n    # fetch motd *after* options parsing/setting\n    vd.domotd()\n\n    if options.batch:\n        if not vd.options.interactive:\n            options.undo = False\n            options.quitguard = False\n        vd.execAsync = vd.execSync  # disable async\n\n    for cmd in (args.preplay or '').split():\n        BaseSheet('').execCommand(cmd)\n\n    if not args.play:\n        if flPipedInput and not inputs:  # '|vd' without explicit '-'\n            inputs.append((vd.stdinSource, copy(current_args)))\n\n    # filetype is consumed by openPath (stored on source path), not applied as a sheet option\n    cli_filetype = current_args.pop('filetype', None)\n\n    sources = []\n    for p, opts in inputs:\n        if cli_filetype and ('filetype' not in opts):\n            opts['filetype'] = cli_filetype\n\n        vs = vd.openSource(p, create=True, **opts) or vd.fail(f'could not open {p}')\n        for k, v in current_args.items():  # apply final set of args to sheets specifically on cli, if not set otherwise #573\n            if not vs.options.is_set(k, vs):\n                vs.options[k] = v\n            # source path is authoritative for format options  #2727\n            if isinstance(vs.source, Path) and not vs.source.options.is_set(k, vs.source):\n                vs.source.options.set(k, v, vs.source, cmdlog=False)\n\n        # log source to cmdlog\n        vd.cmdlog.openHook(vs, vs.source)\n        sources.append(vs)\n\n    for vs in reversed(sources):\n        vd.push(vs, load=False) #1471, 1555\n\n    if not vd.sheets and not args.play and not options.batch:\n        if cli_filetype:\n            newfunc = getattr(vd, 'new_' + cli_filetype, vd.getGlobals().get('new_' + cli_filetype))\n            datestr = datetime.date.today().strftime('%Y-%m-%d')\n            if newfunc:\n                vd.status('creating blank %s' % cli_filetype)\n                vd.push(newfunc(Path(datestr + '.' + cli_filetype)))\n            else:\n                vd.status('new_%s does not exist, creating new blank sheet' % cli_filetype)\n                vd.push(vd.newSheet(datestr, 1))\n        else:\n            vd.push(vd.currentDirSheet)\n\n            # log source to cmdlog\n            vd.cmdlog.openHook(vd.currentDirSheet, vd.currentDirSheet.source)\n\n    if not args.play:\n        if options.batch:\n            if sources:\n                vd.push(sources[0])\n\n        # process the moves in order of increasing length of sheet desc,\n        # so that every sheet loads (and executes its moves in afterLoad)\n        # before its subsheets require it to be loaded\n        for move in sorted(sheet_moves, key=lambda m: ((len(m[0]) if m[0] is not None else 0),m[1],m[2])):\n            vd.moveToPos(sources, *move)\n        if sheet_moves:  #redo the last move in the argument list, to show the sheet\n            vd.moveToPos(sources, *sheet_moves[-1])\n\n        if not options.batch:\n            run(vd.sheets[0])\n    else:\n        if args.play == '-':\n            if vd.stdinSource.fptext.isatty():\n                vd.fail('replay commands must come by pipe, not by terminal')\n            vdfile = vd.stdinSource\n        else:\n            vdfile = Path(args.play)\n\n        vs = eval_vd(vdfile, *fmtargs, **fmtkwargs)\n        if options.batch:\n            if not args.debug and sys.stderr.isatty() and not os.environ.get('NO_COLOR'):\n                vd.outputProgressThread = visidata.VisiData.execAsync(vd, vd.outputProgressEvery, vs, seconds=0.5, sheet=BaseSheet())  #1182\n            vd.reloadMacros()\n            if vd.replay_sync(vs):  # error\n                return 1\n\n            if vd.options.interactive:\n                vd.options.batch = False  #2639\n                vd.execAsync = lambda *args, vd=vd, **kwargs: visidata.VisiData.execAsync(vd, *args, **kwargs)\n                run()\n        else:\n            vd.push(vs)\n            for src in reversed(sources):\n                vd.push(src, load=False)\n            vd.replay(vs)\n            run()\n\n    if vd.stackedSheets and (flPipedOutput or args.output) and not args.output_cell:\n        outpath = Path(args.output or '-')\n        vd.saveSheets(outpath, vd.activeSheet, confirm_overwrite=False)\n\n    if vd.stackedSheets and args.output_cell:\n        outfile = vd._stdout if args.output_cell == '-' else open(args.output_cell, 'w')\n        print(vd.activeSheet.cursorFullDisplay, file=outfile)\n\n    saver_threads = [t for t in vd.unfinishedThreads if t.name.startswith('save_')]\n    if saver_threads:\n        if not options.batch:\n            vd.printerr('finishing %d savers' % len(saver_threads))\n        vd.sync(*saver_threads)\n\n    vd._stdout.flush()\n\n    return 0\n\ndef vd_cli():\n    rc = -1\n    try:\n        rc = main_vd()\n    except BrokenPipeError:\n        os.dup2(os.open(os.devnull, os.O_WRONLY), sys.stdout.fileno()) # handle broken pipe gracefully\n    except visidata.ExpectedException as e:\n        if vd.options.debug:\n            raise\n    except FileNotFoundError as e:\n        print(e, file=sys.stderr)\n        if options.debug:\n            raise\n    except Exception as e:\n        for l in stacktrace(): #show the stack trace without carets\n            print(l, file=sys.stderr)\n\n    sys.stderr.flush()\n    sys.stdout.flush()\n\n    vd.killLeftoverProcesses()\n\n    if vd.options.profile:\n        import threading\n        threading.current_thread().profile.disable()\n        threading.current_thread().profile.dump_stats('vd.pyprof')\n    elif not vd.options.debug:\n        os._exit(rc)  # cleanup can be expensive with large datasets\n\n    sys.exit(rc)\n"
  },
  {
    "path": "visidata/mainloop.py",
    "content": "import builtins\nimport contextlib\nimport os\nimport curses\nimport signal\nimport threading\nimport time\n\nfrom visidata import vd, VisiData, colors, ESC, options, BaseSheet, AttrDict, stacktrace\n\n__all__ = ['ReturnValue', 'run']\n\nvd.curses_timeout = 100 # curses timeout in ms\nvd.timeouts_before_idle = 10\nvd.min_draw_ms = 100  # draw_all at least this often, even if keystrokes are pending\nvd.numTimeouts = 0\nvd._lastDrawTime = 0  # last time drawn (from time.time())\n\n\nclass ReturnValue(BaseException):\n    'raise ReturnValue(ret) to exit from an inner runresult() with its result.'\n    pass\n\n\n@VisiData.api\ndef callNoExceptions(vd, func, *args, **kwargs):\n    'Catch and log any raised exceptions.  Reraise when options.debug.'\n    try:\n        return func(*args, **kwargs)\n    except Exception as e:\n        vd.exceptionCaught(e)\n\n\n@VisiData.api\ndef callIgnoreExceptions(vd, func, *args, **kwargs):\n    'Catch and ignore any raised exceptions.  Log as errors when options.debug.'\n    try:\n        return func(*args, **kwargs)\n    except Exception as e:\n        if vd.options.debug:\n            vd.lastErrors.append(stacktrace(exclude_caller=True))\n            vd.status(f'{type(e).__name__}: {e}', priority=2)\n\n\n@VisiData.api\ndef drawSheet(vd, scr, sheet):\n    'Erase *scr* and draw *sheet* on it, including status bars and sidebar.'\n\n    if not sheet:\n        return\n\n    sheet.ensureLoaded()\n\n    if not scr:\n        return\n\n    scr.erase()  # clear screen before every re-draw\n    scr.bkgd(' ', colors.color_default.attr)\n\n    sheet._scr = scr\n\n    vd.callNoExceptions(sheet.draw, scr)\n    vd.callNoExceptions(vd.drawLeftStatus, scr, sheet)\n    vd.callNoExceptions(vd.drawRightStatus, scr, sheet)  # visible during this getkeystroke\n\n\nvd.windowConfig = dict(pct=0, n=0, h=0, w=0)  # n=top line of bottom window; h=height of bottom window; w=width of screen\n\nvd.winTop = None\nvd.scrMenu = None\nvd.scrFull = None\n\n\n@VisiData.api\ndef setWindows(vd, scr, pct=None):\n    'Assign winTop, winBottom, win1 and win2 according to options.disp_splitwin_pct.'\n    if pct is None:\n        pct = options.disp_splitwin_pct  # percent of window for secondary sheet (negative means bottom)\n    disp_menu = getattr(vd, 'menuRunning', None) or vd.options.disp_menu\n    topmenulines = 1 if disp_menu else 0\n    h, w = scr.getmaxyx()\n    if h == 1: topmenulines = 0\n\n    n = 0\n    if pct:\n        # on 100 line screen, pct = 25 means second window on lines 75-100.  pct -25 -> lines 0-25\n        n = abs(pct)*h//100\n        n = min(n, h-topmenulines-3)\n        n = max(3, n)\n        if n > h: n = 0\n\n    desiredConfig = dict(pct=pct, n=n, h=h-topmenulines, w=w)\n\n    if vd.scrFull is not scr or vd.windowConfig != desiredConfig:\n        if not topmenulines:\n            vd.scrMenu = None\n        elif not vd.scrMenu:\n            vd.scrMenu = vd.subwindow(scr, 0, 0, w, h)\n            vd.scrMenu.keypad(1)\n\n        vd.winTop = vd.subwindow(scr, 0, topmenulines, w, n)\n        vd.winTop.keypad(1)\n        vd.winBottom = vd.subwindow(scr, 0, n+topmenulines, w, h-n-topmenulines)\n        vd.winBottom.keypad(1)\n        if pct == 0 or pct >= 100:  # no second pane\n            vd.win1 = vd.winBottom\n            # drawing to 0-line window causes problems\n            vd.win2 = None\n        elif pct > 0: # pane 2 from line n to bottom\n            vd.win1 = vd.winTop\n            vd.win2 = vd.winBottom\n        elif pct < 0: # pane 2 from line 0 to n\n            vd.win1 = vd.winBottom\n            vd.win2 = vd.winTop\n\n        for vs in vd.sheetstack(1)[0:1]+vd.sheetstack(2)[0:1]:\n            vs.refresh()\n\n        vd.windowConfig = desiredConfig\n        vd.scrFull = scr\n        return True\n\n\n@VisiData.api\ndef draw_all(vd):\n    'Draw all sheets in all windows.'\n    vd.clearCaches()\n\n    ss1 = vd.sheetstack(1)\n    ss2 = vd.sheetstack(2)\n    if ss1 and not ss2:\n        vd.activePane = 1\n        vd.setWindows(vd.scrFull)\n        vd.drawSheet(vd.win1, ss1[0])\n        if vd.win2:\n            vd.win2.erase()\n    elif not ss1 and ss2:\n        vd.activePane = 2\n        vd.setWindows(vd.scrFull)\n        vd.drawSheet(vd.win2, ss2[0])\n        if vd.win1:\n            vd.win1.erase()\n    elif ss1 and ss2 and vd.win2:\n        vd.drawSheet(vd.win1, ss1[0])\n        vd.drawSheet(vd.win2, ss2[0])\n    elif ss1 and ss2 and not vd.win2:\n        vd.drawSheet(vd.win1, vd.sheetstack(vd.activePane)[0])\n        vd.setWindows(vd.scrFull)\n\n    if vd.scrMenu:\n        vd.callNoExceptions(vd.drawMenu, vd.scrMenu, vd.activeSheet)\n\n    vd.callNoExceptions(vd.drawSidebar, vd.scrFull, vd.activeSheet)\n\n    if vd.win1:\n        vd.win1.refresh()\n    if vd.win2:\n        vd.win2.refresh()\n    if vd.scrMenu:\n        vd.scrMenu.refresh()\n\n\n@VisiData.api\ndef runresult(vd):\n    try:\n        err = vd.mainloop(vd.scrFull)\n        if err:\n            raise Exception(err)\n    except ReturnValue as e:\n        return e.args[0]\n\n\n@VisiData.api\ndef mainloop(vd, scr):\n    'Manage execution of keystrokes and subsequent redrawing of screen.'\n\n    scr.timeout(vd.curses_timeout)\n    with contextlib.suppress(curses.error):\n        curses.curs_set(0)\n\n    vd.numTimeouts = 0\n    prefixWaiting = False\n    vd.scrFull = scr\n    if not vd.wantsHelp('help'):\n        vd.disp_help = -1\n\n    vd.keystrokes = ''\n    vd.drawThread = threading.current_thread()\n    while True:\n        if not vd.stackedSheets and vd.currentReplay is None:\n            return\n\n        sheet = vd.activeSheet\n\n        if not sheet:\n            continue  # waiting for replay to push sheet\n\n        threading.current_thread().sheet = sheet\n\n        vd.setWindows(vd.scrFull)\n\n        # a newly created sheet needs to be drawn once to set its _scr\n        if vd.activeSheet._scr is None or \\\n           not vd.drainPendingKeys(scr) or \\\n           time.time() - vd._lastDrawTime > vd.min_draw_ms/1000:  #1459\n            vd.draw_all()\n            vd._lastDrawTime = time.time()\n\n        keystroke = vd.getkeystroke(scr, sheet)\n\n        if not keystroke and prefixWaiting and \"Alt+\" in vd.keystrokes:  # timeout ESC\n            vd.keystrokes = ''\n\n        if keystroke:  # wait until next keystroke to clear statuses and previous keystrokes\n            vd.numTimeouts = 0\n            if not prefixWaiting:\n                vd.keystrokes = ''\n\n            vd.statuses.clear()\n\n            if keystroke == 'KEY_MOUSE':\n                try:\n                    keystroke = vd.handleMouse(sheet)  # if it was handled, don't handle again as a regular keystroke\n                except Exception as e:\n                    vd.exceptionCaught(e)\n\n            keystroke = vd.prettykeys(keystroke)\n            potential = vd.keystrokes + keystroke\n            if keystroke and keystroke in vd.allPrefixes and keystroke in vd.keystrokes and potential not in vd.allPrefixes and vd.bindkeys._get(potential) is None:  #3012\n                vd.warning('duplicate prefix: ' + keystroke)\n                vd.keystrokes = ''\n                keystroke = ''\n            else:\n                vd.keystrokes = potential\n\n        vd.callNoExceptions(vd.drawRightStatus, sheet._scr, sheet)  # visible for commands that wait for input\n\n        if not keystroke:  # timeout instead of keypress\n            pass\n        elif keystroke == 'Ctrl+Q':\n            return vd.lastErrors and '\\n'.join(vd.lastErrors[-1])\n        elif vd.bindkeys._get(vd.keystrokes) is not None:\n            try:\n                sheet.execCommand(vd.bindkeys._get(vd.keystrokes), keystrokes=vd.keystrokes)\n            except Exception as e:  #2859\n                vd.exceptionCaught(e)\n            prefixWaiting = False\n        elif vd.keystrokes in vd.allPrefixes:\n            prefixWaiting = True\n        else:\n            vd.status('no command for \"%s\"' % (vd.keystrokes))\n            sheet.longname = ''\n            prefixWaiting = False\n\n        vd._playNextQueuedCommand()\n\n        vd.callNoExceptions(sheet.checkCursor)\n\n        time.sleep(0)  # yield to other threads which may not have started yet\n        scr.timeout(vd.get_curses_timeout())\n\n\n@VisiData.api\ndef _playNextQueuedCommand(vd):\n        try:\n            if vd._nextCommands and not vd.unfinishedThreads:\n                cmd = vd._nextCommands.pop(0)\n                if isinstance(cmd, (dict, list)):  # .vd cmdlog rows are NamedListTemplate\n                    if vd.replayOne(cmd):\n                        vd.replay_cancel()\n                else:\n                    sheet.execCommand(cmd, keystrokes=vd.keystrokes)\n        except Exception as e:\n            vd.exceptionCaught(e)\n            vd.replay_cancel()\n\n        if not vd._nextCommands:\n            vd.replay_cancel()\n\n\n@VisiData.api\ndef get_curses_timeout(vd) -> int:\n        nonidle_timeout = vd.curses_timeout\n\n        if vd._nextCommands:\n            if vd.currentReplay:\n                curses_timeout = int(vd.options.replay_wait*1000)\n            elif vd.unfinishedThreads:  #2369 #2635\n                # while running a bg thread for a command, schedule infrequent redraws\n                curses_timeout = nonidle_timeout\n            else:\n                # otherwise, schedule the next redraw and command immediately\n                curses_timeout = 0\n            vd.numTimeouts = 0\n\n        elif vd.unfinishedThreads:\n            curses_timeout = nonidle_timeout\n            vd.numTimeouts = 0\n        else:\n            vd.numTimeouts += 1\n            if vd.timeouts_before_idle >= 0 and vd.numTimeouts >= vd.timeouts_before_idle:\n                curses_timeout = -1  # nothing has been happening for a bit, wait indefinitely\n            else:\n                curses_timeout = nonidle_timeout\n\n        return curses_timeout\n\n\n@VisiData.api\ndef initCurses(vd):\n    # reduce ESC timeout to 25ms. http://en.chys.info/2009/09/esdelay-ncurses/\n    os.putenv('ESCDELAY', '25')\n    curses.use_env(True)\n\n    scr = curses.initscr()\n\n    curses.start_color()\n\n    colors.setup()\n\n    curses.noecho()\n\n    curses.raw()    # get control keys instead of signals\n    curses.meta(1)  # allow \"8-bit chars\"\n\n    scr.keypad(1)\n\n    curses.def_prog_mode()\n\n    vd.drainPendingKeys(scr)\n    if '\\x1b' in vd.pendingKeys:  #1993\n        # if start of an ANSI escape sequence, might be mangled, discard remaining keystrokes\n        vd.pendingKeys.clear()\n        curses.flushinp()\n\n    return scr\n\n\ndef wrapper(f, *args, **kwargs):\n    try:\n        scr = vd.initCurses()\n        return f(scr, *args, **kwargs)\n    finally:\n        curses.endwin()\n\n\n@VisiData.global_api\ndef run(vd, *sheetlist):\n    'Main entry point; launches vdtui with the given sheets already pushed (last one is visible)'\n\n    scr = None\n    try:\n        # Populate VisiData object with sheets from a given list.\n        for vs in sheetlist:\n            vd.push(vs, load=False)\n\n        scr = vd.initCurses()\n        ret = vd.mainloop(scr)\n    except curses.error as e:\n        if vd.options.debug:\n            raise\n        vd.fail(str(e))\n    finally:\n        if scr:\n            curses.endwin()\n\n    vd.cancelThread(*[t for t in vd.unfinishedThreads if not t.name.startswith('save_')])\n\n    if ret:\n        builtins.print(ret)\n\n    return ret\n\n@VisiData.api\ndef addCommand(vd, *args, **kwargs):\n    return BaseSheet.addCommand(*args, **kwargs)\n\n\nimport sys\nvd.addGlobals({k:getattr(sys.modules[__name__], k) for k in __all__})\n"
  },
  {
    "path": "visidata/man/parse_options.py",
    "content": "#!/usr/bin/env python3\n\n# Usage: $0 visidata-cli.inc visidata-opts.inc\n\nimport sys\nimport visidata\ndispwidth = visidata.dispwidth\n\n\nfncli, fnopts = sys.argv[1:]\n\nprint(visidata.__version_info__)\npadding = 26\n\noptions_cli_skel = '''.It Sy --{cli_optname} Ns = Ns Ar \"{type}\" No \"{default}\"\n{description}\n'''\n\noptions_cli_skel_bool = '''.It Sy --{cli_optname} No \"{default}\"\n{description}\n'''\n\noptions_menu_skel = '''.It Sy \"{optname:<19}\" No \"{default}\"\n{description}\n'''\n\nvisidata.options.setdefault('plot_colors', '', visidata.options._opts._get('plot_colors', 'default').helpstr, visidata.options._opts._get('plot_colors', 'default').module)\nvisidata.options.setdefault('motd_url', '', visidata.options._opts._get('motd_url', 'default').helpstr, visidata.options._opts._get('motd_url', 'default').module)\n\nwith open(fncli, 'w') as cliOut:\n    with open(fnopts, 'w') as menuOut:\n        optkeys = visidata.options.keys()\n        optvalues = [visidata.options._opts._get(optname) for optname in optkeys]\n\n        widestoptwidth, widestopt = sorted((dispwidth(opt.name)+dispwidth(str(opt.value)), opt.name) for opt in optvalues)[-1]\n        print('widest option+default is \"%s\", width %d' % (widestopt, widestoptwidth))\n        widestoptwidth = 35\n        menuOut.write('.Bl -tag -width %s -compact\\n' % ('X'*(widestoptwidth+3)))\n\n#        cliwidth = max(padding+len(str(opt.value)) for opt in optvalues)\n        cliwidth = 43\n        print('using width for cli options of %d' % cliwidth)\n        cliOut.write('.Bl -tag -width %s -compact\\n' % ('X'*(cliwidth+3)))\n\n        for opt in optvalues:\n            if opt.name[:5] in ['color', 'disp_']:\n                options_menu = options_menu_skel.format(optname=opt.name,\n                                                        type=type(opt.value).__name__,\n                                                        default=visidata.options.getdefault(opt.name),\n                                                        description=opt.helpstr)\n                menuOut.write(options_menu)\n            else:\n                cli_optname=opt.name.replace('_', '-')\n                cli_type=type(opt.value).__name__\n                optlen = dispwidth(cli_optname)+dispwidth(cli_type)+1\n                if cli_type != 'bool' or visidata.options.getdefault(opt.name):\n                    cliOut.write(options_cli_skel.format(cli_optname=cli_optname,\n                                                    optname = opt.name,\n                                                    type=cli_type+\" \"*(padding-optlen),\n                                                    default=visidata.options.getdefault(opt.name),\n                                                     description=opt.helpstr))\n                else:\n\n                    cliOut.write(options_cli_skel_bool.format(cli_optname=cli_optname,\n                                                    optname = opt.name,\n                                                    type=cli_type+\" \"*(padding-optlen),\n                                                    default=\" \"*(padding-optlen+5)+str(visidata.options.getobj(opt.name, 'default')),\n                                                     description=opt.helpstr))\n\n        menuOut.write('.El')\n        cliOut.write('.El')\n"
  },
  {
    "path": "visidata/man/vd.inc",
    "content": ".Dd June 13, 2025\n.Dt vd \\&1 \"Quick Reference Guide\"\n.Os Linux/MacOS\n.\n.\\\" Long option with arg: .Lo f filetype format\n.\\\" Long flag: .Lo f filetype\n.de Lo\n.It Cm -\\\\$1 Ns , Cm --\\\\$2 Ns = Ns Ar \\\\$3\n..\n.de Lf\n.It Cm -\\\\$1 Ns , Cm --\\\\$2\n..\n.Sh NAME\n.\n.Nm VisiData\n.Nd a terminal utility for exploring and arranging tabular data\n.\n.Sh SYNOPSIS\n.\n.Nm vd\n.Op Ar options\n.Op Ar input No ...\n.\n.Nm visidata\n.Op Ar options\n.Op Ar input No ...\n.\n.Nm vd\n.Op Ar options\n.Cm --play Ar cmdlog\n.Op Cm -w Ar waitsecs\n.Op Cm --batch\n.Op Cm -i\n.Op Cm -o Ar output\n.Op Ar field Ns Cm = Ns Ar value\n.\n.Nm vd\n.Op Ar options\n.Op Ar input No ...\n.Cm + Ns Ar toplevel Ns : Ns Ar subsheet Ns : Ns Ar col Ns : Ns Ar row\n.\n.Sh DESCRIPTION\n.Nm VisiData No is an easy-to-use multipurpose tool to explore, clean, edit, and restructure data.\nRows can be selected, filtered, and grouped; columns can be rearranged, transformed, and derived via regex or Python expressions; and workflows can be saved, documented, and replayed.\n.\n.Ss REPLAY MODE\n.Bl -tag -width XXXXXXXXXXXXXXXXXXXXXX -compact\n.Lo p play cmdlog\n.No replay a saved Ar cmdlog No within the interface\n.\n.Lo w replay-wait seconds\n.No wait Ar seconds No between commands\n.\n.Lf b batch\nreplay in batch mode (with no interface)\n.Lf i interactive\nlaunch VisiData in interactive mode after batch\n.\n.Lo o output file\n.No save final visible sheet to Ar file No as .tsv\n.\n.It Ar field Ns Cm = Ns Ar value\n.No replace \\&\"{ Ns Ar field Ns }\\&\" in Ar cmdlog No contents with Ar value\n.El\n.\n.Ss Commands During Replay\n.Bl -tag -width XXXXXXXXXXXXXXXXXXX -compact -offset XXX\n.It Sy ^K\ncancel current replay\n.El\n.\n.Ss GLOBAL COMMANDS\n.No All keystrokes are case sensitive. The Sy ^ No prefix is shorthand for Sy Ctrl Ns .\n.Pp\n.Ss Keystrokes to start off with\n.Bl -tag -width XXXXXXXXXXXXXXX -compact\n.It Ic \" ^Q\"\nabort program immediately\n.It Ic \" ^C\"\ncancel user input or abort all async threads on current sheet\n.It Ic \"g^C\"\nabort all secondary threads\n.It Ic \"  q\"\nquit current sheet or menu\n.It Ic \"  Q\"\nquit current sheet and free associated memory\n.It Ic \" gq\"\nquit all sheets (clean exit)\n.Pp\n.It Ic \"Alt+H\"\n.No activate help menu ( Ns Sy Enter Ns / Ns Sy left-mouse No to expand submenu or execute command)\n.It Ic \"g^H\"\nview this man page\n.It Ic \"z^H\"\nview sheet of command longnames and keybindings for current sheet\n.Pp\n.It Ic \" gb\"\nopen sidebar in a new sheet\n.It Ic \"  b\"\ntoggle sidebar\n.Pp\n.It Ic \"  U\"\n.No undo the most recent modification ( requires enabled Sy options.undo Ns )\n.It Ic \"  R\"\n.No redo the most recent undo ( requires enabled Sy options.undo Ns )\n.Pp\n.It Ic \"Space\" Ar longname\n.No open command palette; execute top command by its Ar longname\n.El\n.Ss \"  Command Palette\"\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \"Tab\"\n.No Move to command palette, and cycle through commands\n.It Ic \"0-9\"\n.No Execute numbered command\n.It Ic \"Enter\"\n.No Execute highlighted command\n.El\n.Ss \"Cursor Movement\"\n.\n.Bl -tag -width XXXXXXXXXXXXXXX -compact\n.\n.It Ic \"Arrow PgUp\"\ngo as expected\n.It Ic \" h   j   k   l\"\ngo left/down/up/right\n.It Ic \"gh  gj  gk  gl\"\ngo all the way to the left/bottom/top/right of sheet\n.It Ic \"     G  gg\"\ngo all the way to the bottom/top of sheet\n.It Ic. \"End  Home\"\ngo all the way to the bottom/top of sheet\n.It Ic \"^B  ^F\"\nscroll one page back/forward\n.It Ic \"^Left ^Right\"\nscroll one page left/right\n.It Ic \"zz\"\nscroll current row to center of screen\n.Pp\n.It Ic \"^^\" No (Ctrl+^)\njump to previous sheet (swaps with current sheet)\n.Pp\n.It Ic  \" /   ?\" Ar regex\n.No search for Ar regex No forward/backward in current column's displayed values\n.It Ic  \"g/  g?\" Ar regex\n.No search for Ar regex No forward/backward over all visible columns' displayed values\n.It Ic  \"z/  z?\" Ar expr\n.No search by Python Ar expr No forward/backward in current column (with column names as variables)\n.It Ic  \" n   N\"\ngo to next/previous match from last search\n.Pp\n.No Search matches are highlighted when Sy options.highlight_search No is set (default: on).\n.It ( Ns Ar highlight-col Ns )\nhighlight a regex in current column (without moving)\n.It ( Ns Ar highlight-sheet Ns )\nhighlight a regex in all columns (without moving)\n.It ( Ns Ar highlight-clear Ns )\nclear all highlight patterns\n.Pp\n.No Undoing a search does not clear the highlighting; use Ar highlight-clear No instead.\n.Pp\n.It Ic  \" <   >\"\ngo up/down current column to next value\n.It Ic  \"z<  z>\"\ngo up/down current column to next null value\n.It Ic \" {   }\"\ngo up/down current column to next selected row\n.\n.El\n.Pp\n.Bl -tag -width XXXXXXXXXXXXXXX -compact\n.Pp\n.It Ic \" c\" Ar regex\n.No go to next column with name matching Ar regex\n.It Ic \" r\" Ar regex\n.No go to next row with key matching Ar regex\n.It Ic \"zc  zr\" Ar number\n.No go to column/row Ar number No (0-based)\n.Pp\n.It Ic \" H   J   K   L\"\nslide current row/column left/down/up/right\n.It Ic \"gH  gJ  gK  gL\"\nslide current row/column all the way to the left/bottom/top/right of sheet\n.It Ic \"zH  zJ  zK  zK\" Ar number\n.No slide current row/column Ar number No positions to the left/down/up/right\n.Pp\n.It Ic \"zh  zj  zk  zl\"\nscroll one left/down/up/right\n.El\n.\n.Ss Column Manipulation\n.\n.Bl -tag -width XXXXXXXXXXXXXXX -compact\n.\n.It Ic \"  _\" Ns \" (underbar)\"\ntoggle width of current column between full and default width\n.It Ic \" g_\"\ntoggle widths of all visible columns between full and default width\n.It Ic \" z_\" Ar number\n.No adjust width of current column to Ar number\n.It Ic \"gz_\" Ar number\nadjust widths of all visible columns to Ar number\n.Pp\n.It Ic \" -\" Ns \" (hyphen)\"\nhide current column\n.It Ic \"g-\" Ns \" (hyphen)\"\nhide any column that has multiple rows but only one distinct value\n.It Ic \"z-\" Ns\nreduce width of current column by half\n.It Ic \"gv\" Ns\nunhide all columns\n.Pp\n.It Ic \"! z!\" Ns\ntoggle/unset current column as a key column\n.It Ic \"~  #  %  $  @  z#\"\nset type of current column to str/int/float/currency/date/len\n.It Ic \"Alt++  Alt+-\"\nshow more/less precision in current numerical column\n.It Ic \"  ^\"\nrename current column\n.It Ic \" g^\"\nrename all unnamed visible columns to contents of selected rows (or current row)\n.It Ic \" z^\"\nrename current column to combined contents of current cell in selected rows (or current row)\n.It Ic \"gz^\"\nrename all visible columns to combined contents of current column for selected rows (or current row)\n.Pp\n.It Ic \"  =\" Ar [name=]expr\n.No create new column from Python Ar expr Ns , with column names, and attributes, as variables. Optionally specify column Ar name Ns .\n.It Ic \" g=\" Ar expr\n.No set current column for selected rows to result of Python Ar expr\n.It Ic \"gz=\" Ar expr\n.No set current column for selected rows to the items in result of Python sequence Ar expr\n.It Ic \" z=\" Ar expr\n.No evaluate Python expression on current row and set current cell with result of Python Ar expr\n.Pp\n.It \"  i\"\n.No add column with incremental values\n.It \" gi\"\n.No set current column for selected rows to incremental values\n.It \" zi\" Ar step\n.No add column with values at increment Ar step\n.It \"gzi\" Ar step\n.No set current column for selected rows at increment Ar step\n.El\n.Pp\n.Bl -tag -width XXXXXXXXXXXXXXX -compact\n.It Ic \" '\" Ns \" (tick)\"\nadd a frozen copy of current column with all cells evaluated\n.It Ic \"g'\"\nopen a frozen copy of current sheet with all visible columns evaluated\n.It Ic \"z'  gz'\"\nadd/reset cache for current/all visible column(s)\n.Pp\n.It Note that regex operations apply to the displayed value in a cell.\n.It Ic \" \\&:\" Ar regex\n.No add new columns from Ar regex No split; number of columns determined by example row at cursor\n.It Ic \" \\&;\" Ar regex\n.No add new columns from capture groups of Ar regex No (also requires example row)\n.It Ic \"z\" Ns Ic \"\\&;\" Ar expr\n.No create new column from bash Ar expr Ns , with Sy $ Ns columnNames as variables\n.It Ic \" *\" Ar search No Sy Tab No Ar replace\n.No add column derived from current column, replacing Ar search No regex with Ar replace No (may include Sy \\e1 No backrefs)\n.It Ic \"g*  gz*\" Ar search No Sy Tab No Ar replace\n.No modify selected rows in current/all visible column(s), replacing Ar search No with Ar replace No (may include Sy \\e1 No backrefs)\n.Pp\n.It Ic \" (   g(\"\n.No expand current/all visible column(s) of lists (e.g. Sy [3] Ns ) or dicts (e.g. Sy {3} Ns ) one level\n.It Ic \"z(  gz(\" Ar depth\n.No expand current/all visible column(s) of lists (e.g. Sy [3] Ns ) or dicts (e.g. Sy {3} Ns ) to given Ar depth ( Ar 0 Ns = fully)\n.It Ic \" )   g(\"\nunexpand current/all visible column(s); restore original column and remove other columns at this level\n.It Ic \"z)  gz)\" Ar depth\n.No contract current/all visible column(s) of former lists (e.g. Sy [3] Ns ) or dicts (e.g. Sy {3} Ns ) to given Ar depth ( Ar 0 Ns = fully)\n.It Ic \"zM\"\n.No row-wise expand current column of lists (e.g. Sy [3] Ns ) or dicts (e.g. Sy {3} Ns ) within that column\n.El\n.Ss Row Selection\n.\n.Bl -tag -width XXXXXXXXXXXXXXX -compact\n.\n.It Ic \"  s   t   u\"\nselect/toggle/unselect current row\n.It Ic \" gs  gt  gu\"\nselect/toggle/unselect all rows\n.It Ic \" zs  zt  zu\"\nselect/toggle/unselect all rows from top to cursor\n.It Ic \"gzs gzt gzu\"\nselect/toggle/unselect all rows from cursor to bottom\n.It Ic \" |   \\e\\ \" Ns Ar regex\n.No select/unselect rows matching Ar regex No in current column\n.It Ic \"g|  g\\e\\ \" Ns Ar regex\n.No select/unselect rows matching Ar regex No in any visible column\n.It Ic \"z|  z\\e\\ \" Ns Ar expr\n.No select/unselect rows matching Python Ar expr No in any visible column\n.It Ic \" \\&,\" Ns \" (comma)\"\nselect rows matching display value of current cell in current column\n.It Ic \"g\\&,\"\nselect rows matching display value of current row in all visible columns\n.It Ic \"z\\&, gz\\&,\"\nselect rows matching typed value of current cell/row in current column/all visible columns\n.\n.El\n.\n.\n.Ss Row Sorting/Filtering\n.\n.Bl -tag -width XXXXXXXXXXXXXXX -compact\n.\n.It Ic \"  [    ]\"\nsort ascending/descending by current column; replace any existing sort criteria\n.It Ic \" g[   g]\"\nsort ascending/descending by all key columns; replace any existing sort criteria\n.It Ic \" z[   z]\"\nsort ascending/descending by current column; keep higher priority sort criteria\n.It Ic \"gz[  gz]\"\nsort ascending/descending by all key columns; add to existing sort criteria\n.It Ic \" \\&\"\"\nopen duplicate sheet with only selected rows\n.It Ic \"g\\&\"\"\nopen duplicate sheet with all rows\n.It Ic \"gz\\&\"\"\nopen duplicate sheet with deepcopy of selected rows\n.El\n.\n.\n.Pp\nThe rows in these duplicated sheets (except deepcopy) are references to rows on the original source sheets, and so edits to the filtered rows will naturally be reflected in the original rows.  Use\n.Ic \"g'\"\nto freeze sheet contents in a deliberate copy.\n.Ic \"z'\"\nreplace current column with a frozen copy, with all cells evaluated\n.\n.Ss Editing Rows and Cells\n.\n.Bl -tag -width XXXXXXXXXXXXXXX -compact\n.It Ic \"  a   za\"\nappend blank row/column; appended columns cannot be copied to clipboard\n.It Ic \" ga  gza\" Ar number\n.No append Ar number No blank rows/columns\n.It Ic \"  d   gd\"\ndelete current/selected row(s)\n.It Ic \"  y   gy\"\n.No yank (copy) current/all selected row(s) to clipboard in Sy Memory Sheet\n.It Ic \"  x   gx\"\n.No cut (copy and delete) current/all selected row(s) to clipboard in Sy Memory Sheet\n.It Ic \" zy  gzy\"\n.No yank (copy) contents of current column for current/selected row(s) to clipboard in Sy Memory Sheet\n.It Ic \" zd  gzd\"\n.No set contents of current column for current/selected row(s) to Sy options.null_value\n.It Ic \" zx  gzx\"\n.No cut (copy and delete) contents of current column for current/selected row(s) to clipboard in Sy Memory Sheet\n.It Ic \"  p    P\"\npaste clipboard rows after/before current row\n.It Ic \" zp  gzp\"\nset cells of current column for current/selected row(s) to last clipboard value\n.It Ic \" zP  gzP\"\npaste to cells of current column for current/selected row(s) using the system clipboard\n.It Ic \"  Y   gY\"\n.No yank (copy) current/all selected row(s) to system clipboard (using Sy options.clipboard_copy_cmd Ns )\n.It Ic \" zY  gzY\"\n.No yank (copy) contents of current column for current/selected row(s) to system clipboard (using Sy options.clipboard_copy_cmd Ns )\n.It Ic \"  f\"\nfill null cells in current column with contents of non-null cells up the current column\n.\n.\n.It Ic \"  e\" Ar text\nedit contents of current cell\n.It Ic \" ^O\"\n.No edit contents of current cell in external Sy EDITOR\n.It Ic \" ge\" Ar text\n.No set contents of current column for selected rows to Ar text\n.\n.El\n.\n.Ss \"  Commands While Editing Input\"\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \"Enter  ^C\"\naccept/abort input\n.It Ic \"^O  g^O\"\nopen external $EDITOR to edit contents of current/selected rows in current column\n.It Ic ^R\nreload initial value\n.It Ic \"^A   ^E\"\ngo to beginning/end of line\n.It Ic \"^B   ^F\"\ngo back/forward one character\n.It Ic \"^←   ^→\" No (arrow)\ngo back/forward one word\n.It Ic \"^H   ^D\"\ndelete previous/current character\n.It Ic ^T\ntranspose previous and current characters\n.It Ic \"^U   ^K\"\nclear from cursor to beginning/end of line\n.It Ic \"^Y\"\npaste from cell clipboard\n.It Ic \"Backspace  Del\"\ndelete previous/current character\n.It Ic Insert\ntoggle insert mode\n.It Ic \"Up  Down\"\nset contents to previous/next in history\n.It Ic \"Tab  Shift+Tab\"\n.No move cursor left/right and re-enter edit mode\n.It Ic \"Shift+Arrow\"\n.No move cursor in direction of Sy Arrow No and re-enter edit mode\n.\n.El\n.\n.Ss Data Toolkit\n.Bl -tag -width XXXXXXXXXXXXXXX -compact\n.It Ic \" o\" Ar input\nopen\n.Ar input No in Sy VisiData\n.It Ic \"zo\"\nopen file or url from path in current cell\n.It Ic \"^S g^S\" Ar filename\n.No save current/all sheet(s) to Ar filename No in format determined by extension (default .tsv)\n.It \"\"\n.No Note: if the format does not support multisave, or the Ar filename No ends in a Sy / Ns , a directory will be created.\n.It Ic \"z^S\" Ar filename\n.No save current column only to Ar filename No in format determined by extension (default .tsv)\n.It Ic \"^D\" Ar filename.vdj\n.No save Sy CommandLog No to Ar filename.vdj No file\n.It Ic \"A\"\n.No open new blank sheet with one column\n.It Ic \"T\"\n.No open new sheet that has rows and columns of current sheet transposed\n.Pp\n.It Ic \" +\" Ar aggregator\n.No add Ar aggregator No to current column (see Sy \"Frequency Table\" Ns )\n.It Ic \"z+\" Ar aggregator\n.No display result of Ar aggregator No over values in selected rows for current column; store result in Sy Memory Sheet\n.It Ic \" &\"\n.No append top two sheets in Sy Sheets Stack\n.It Ic \"g&\"\n.No append all sheets in Sy Sheets Stack\n.Pp\n.It Ic \" w\" Ar nBefore nAfter\n.No add column where each row contains a list of that row, Ar nBefore No rows, and Ar nAfter No rows\n.Pp\n.El\n.Ss Data Visualization\n.Bl -tag -width XXXXXXXXXXXXX -compact\n.It Ic \" .\" No (dot)\n.No plot current numeric column vs key columns. The numeric key column is used for the x-axis; categorical key column values determine color.\n.It Ic \"g.\"\n.No plot a graph of all visible numeric columns vs key columns.\n.Pp\n.El\n.No If rows on the current sheet represent plottable coordinates (as in .shp or vector .mbtiles sources),\n.Ic \" .\" No plots the current row, and Ic \"g.\" No plots all selected rows (or all rows if none selected).\n.Ss \"  Canvas-specific Commands\"\n.Bl -tag -width XXXXXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \" +   -\"\nincrease/decrease zoom level, centered on cursor\n.It Ic \" _\" No (underbar)\nzoom to fit full extent\n.It Ic \"z_\" No (underbar)\nset aspect ratio\n.It Ic \"g_\" No (underbar)\nZoom y-axis to fit all visible data points\n.It Ic \" x\" Ar xmin xmax\n.No set Ar xmin Ns / Ns Ar xmax No on graph\n.It Ic \" y\" Ar ymin ymax\n.No set Ar ymin Ns / Ns Ar ymax No on graph\n.It Ic \" s   t   u\"\nselect/toggle/unselect rows on source sheet contained within canvas cursor\n.It Ic \"gs  gt  gu\"\nselect/toggle/unselect rows on source sheet visible on screen\n.It Ic \" d\"\ndelete rows on source sheet contained within canvas cursor\n.It Ic \"gd\"\ndelete rows on source sheet visible on screen\n.It Ic \" Enter\"\nopen sheet of source rows contained within canvas cursor\n.It Ic \"gEnter\"\nopen sheet of source rows visible on screen\n.It Ic \" 1\" No - Ic \"9\"\ntoggle display of layers\n.It Ic \"^L\"\nredraw all pixels on canvas\n.It Ic \" v\"\n.No toggle Ic show_graph_labels No option\n.It Ic \"mouse scrollwheel\"\nzoom in/out of canvas\n.It Ic \"left click-drag\"\nset canvas cursor\n.It Ic \"right click-drag\"\nscroll canvas\n.El\n.Ss Split Screen\n.Bl -tag -width XXXXXXXXXXXXX -compact\n.It Ic \" Z\"\n.No split screen in half, so that second sheet on the stack is visible in a second pane\n.It Ic \"zZ\"\n.No split screen, and queries for height of second pane\n.El\n.Ss \"  Split Window specific Commands\"\n.Bl -tag -width XXXXXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \"gZ\"\n.No close an already split screen, current pane full screens\n.It Ic \" Z\"\n.No push second sheet on current pane's stack to the top of the other pane's stack\n.It Ic \" Tab\"\n.No jump to other pane\n.It Ic \"gTab\"\n.No swap panes\n.It Ic \"g Ctrl+^\"\n.No cycle through sheets\n.Pp\n.El\n.Ss Other Commands\n.\n.Bl -tag -width XXXXXXXXXXXXXXX -compact\n.It Ic \"Q\"\n.No quit current sheet and remove it from the Sy CommandLog\n.It Ic \"v\"\ntoggle sheet-specific visibility (multi-line rows on Sheet, legends/axes on Graph)\n.Pp\n.Pp\n.It Ic \" ^E  g^E\"\nview traceback for most recent error(s)\n.It Ic \"z^E\"\nview traceback for error in current cell\n.Pp\n.It Ic \" ^L\"\nrefresh screen\n.It Ic \" ^R\"\nreload current sheet\n.It Ic \" ^Z\"\nsuspend VisiData process\n.It Ic \" ^G\"\nshow cursor position and bounds of current sheet on status line\n.It Ic \" ^V\"\nshow version and copyright information on status line\n.It Ic \" ^P\"\n.No open Sy Status History\n.It \"m\" Ar keystroke\n.No first, begin recording macro; second, prompt for Ar keystroke No , and complete recording. Macro can then be executed everytime provided keystroke is used. Will override existing keybinding. Macros will run on current row, column, sheet.\n.It \"gm\"\n.No open an index of all existing macros. Can be directly viewed with Sy Enter Ns , and then modified with Sy ^S Ns .\n.\n.El\n.Pp\n.Bl -tag -width XXXXXXXXXXXXXXX -compact\n.It Ic \" ^Y  z^Y  g^Y\"\nopen current row/cell/sheet as Python object\n.It Ic \" ^X\" Ar expr\n.No evaluate Python Ar expr No and opens result as Python object\n.It Ic \"z^X\" Ar expr\n.No evaluate Python Ar expr Ns , in context of current row, and open result as Python object\n.It Ic \"g^X\" Ar module\n.No import Python Ar module No in the global scope\n.El\n.\n.Ss Internal Sheets List\n.Bl -tag -width Xx -compact\n.It Sy \" \\&.\"\n.Sy Directory Sheet No \"            browse properties of files in a directory\"\n.It Sy \" \\&.\"\n.Sy Guide Index No \"                read documentation from within VisiData\"\n.It Sy \" \\&.\"\n.Sy Memory Sheet No (Alt+Shift+M) \" browse saved values, including clipboard\"\n.It \" \"\n.It Sy Metasheets\n.It Sy \" \\&.\"\n.Sy Columns Sheet No (Shift+C) \"    edit column properties\"\n.It Sy \" \\&.\"\n.Sy Sheets Sheet No (Shift+S) \"     jump between sheets or join them together\"\n.It Sy \" \\&.\"\n.Sy Options Sheet No (Shift+O) \"    edit configuration options\"\n.It Sy \" \\&.\"\n.Sy Commandlog No (Shift+D) \"       modify and save commands for replay\"\n.It Sy \" \\&.\"\n.Sy Error Sheet No (Ctrl+E) \"           view last error\"\n.It Sy \" \\&.\"\n.Sy Status History No (Ctrl+P) \"        view history of status messages\"\n.It Sy \" \\&.\"\n.Sy Threads Sheet No (Ctrl+T) \"         view, cancel, and profile asynchronous threads\"\n.Pp\n.It Sy Derived Sheets\n.It Sy \" \\&.\"\n.Sy Frequency Table No (Shift+F) \"  group rows by column value, with aggregations of other columns\"\n.It Sy \" \\&.\"\n.Sy Describe Sheet No (Shift+I) \"   view summary statistics for each column\"\n.It Sy \" \\&.\"\n.Sy Pivot Table No (Shift+W) \"      group rows by key and summarize current column\"\n.It Sy \" \\&.\"\n.Sy Melted Sheet No (Shift+M) \"     unpivot non-key columns into variable/value columns\"\n.It Sy \" \\&.\"\n.Sy Transposed Sheet No (Shift+T) \"  open new sheet with rows and columns transposed\"\n.El\n.\n.Ss INTERNAL SHEETS\n.Ss Directory Sheet\n.Bl -inset -compact\n.It (global commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic Space Ar open-dir-current\n.No open the Sy Directory Sheet No for the current directory\n.El\n.Bl -inset -compact\n.It (sheet-specific commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \"Enter  gEnter\"\nopen current/selected file(s) as new sheet(s)\n.It Ic \" ^O  g^O\"\nopen current/selected file(s) in external $EDITOR\n.It Ic \" ^R  z^R  gz^R\"\nreload information for all/current/selected file(s)\n.It Ic \"  d   gd\"\ndelete current/selected file(s) from filesystem, upon commit\n.It Ic \"  y   gy\" Ar directory\n.No copy current/selected file(s) to given Ar directory Ns , upon commit\n.It Ic \"  e   ge\" Ar name\n.No rename current/selected file(s) to Ar name\n.It Ic \"  ` (backtick)\"\nopen parent directory\n.It Ic \"z^S\"\ncommit changes to file system\n.El\n.\n.Ss Guide Index\n.Bl -inset -compact\n.It Browse through a list of available guides. Each guide shows you how to use a particular feature. Gray guides have not been written yet.\n.El\n.Bl -inset -compact\n.It (global commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic Space Ar open-guide-index\n.No open the Sy Guide Index\n.El\n.Bl -inset -compact\n.It (sheet-specific commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \"Enter\"\nopen a guide\n.El\n.\n.Ss Memory Sheet\n.Bl -inset -compact\n.It Browse through a list of stored values, referanceable in expressions through their Sy name Ns .\n.El\n.Bl -inset -compact\n.It (global commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic Alt+Shift+M\n.No open the Sy Memory Sheet\n.It Ic Alt+M Ar name\n.No store value in current cell in Sy Memory Sheet No under Ar name\n.El\n.Bl -inset -compact\n.It (sheet-specific commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \"e\"\nedit either value or name, to edit reference\n.El\n.Ss METASHEETS\n.Ss Columns Sheet (Shift+C)\n.Bl -inset -compact\n.It Properties of columns on the source sheet can be changed with standard editing commands ( Ns Sy e  ge g= Del Ns ) on the Sy Columns Sheet Ns . Multiple aggregators can be set by listing them (separated by spaces) in the aggregators column.  The 'g' commands affect the selected rows, which are the literal columns on the source sheet.\n.El\n.Bl -inset -compact\n.It (global commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic gC\n.No open Sy Columns Sheet No with all visible columns from all sheets\n.El\n.Bl -inset -compact\n.It (sheet-specific commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \" &\"\nadd column from appending selected source columns\n.It Ic \"g! gz!\"\ntoggle/unset selected columns as key columns on source sheet\n.It Ic \"g+\" Ar aggregator\nadd Ar aggregator No to selected source columns\n.It Ic \"g-\" No (hyphen)\nhide selected columns on source sheet\n.It Ic \"g~ g# g% g$ g@ gz# z%\"\nset type of selected columns on source sheet to str/int/float/currency/date/len/floatsi\n.It Ic \" Enter\"\n.No open a Sy Frequency Table No sheet grouped by column referenced in current row\n.El\n.\n.Ss Sheets Sheet (Shift+S)\n.Bl -inset -compact\n.It open Sy Sheets Stack Ns , which contains only the active sheets on the current stack\n.It (global commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic gS\n.No open Sy Sheets Sheet Ns , which contains all sheets from current session, active and inactive\n.It Ic \"Alt\" Ar number\n.No jump to sheet Ar number Ns\n.El\n.Bl -inset -compact\n.It (sheet-specific commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \" Enter\"\njump to sheet referenced in current row\n.It Ic \"gEnter\"\npush selected sheets to top of sheet stack\n.It Ic \" a\"\nadd row to reference a new blank sheet\n.It Ic \"gC  gI\"\n.No open Sy Columns Sheet Ns / Ns Sy Describe Sheet No with all visible columns from selected sheets\n.It Ic \"g^R\"\n.No reload all selected sheets\n.It Ic \"z^C  gz^C\"\nabort async threads for current/selected sheets(s)\n.It Ic \"g^S\"\nsave selected or all sheets\n.It Ic \" &\" Ar jointype\n.No merge selected sheets with visible columns from all, keeping rows according to Ar jointype Ns :\n.El\n.Bl -tag -width x -compact -offset XXXXXXXXXXXXXXXXXXXX\n.It Sy \"\\&.\"\n.Sy inner No \" keep only rows which match keys on all sheets\"\n.It Sy \"\\&.\"\n.Sy outer No \" keep all rows from first selected sheet\"\n.It Sy \"\\&.\"\n.Sy full No \"  keep all rows from all sheets (union)\"\n.It Sy \"\\&.\"\n.Sy diff No \"  keep only rows NOT in all sheets\"\n.It Sy \"\\&.\"\n.Sy append No \"combine all rows from all sheets\"\n.It Sy \"\\&.\"\n.Sy concat No \"similar to 'append' but keep first sheet type and columns\"\n.It Sy \"\\&.\"\n.Sy extend No \"copy first selected sheet, keeping all rows and sheet type, and extend with columns from other sheets\"\n.It Sy \"\\&.\"\n.Sy merge No \" keep all rows from first sheet, updating any False-y cells with non-False-y values from second sheet; add unique rows from second sheet\"\n.El\n.\n.Ss Options Sheet (Shift+O)\n.Bl -inset -compact\n.It (global commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic Shift+O\n.No edit global options (apply to Sy all sheets Ns )\n.It Ic zO\n.No edit sheet options (apply to Sy current sheet No only)\n.It Ic gO\n.No open Sy options.config No as Sy TextSheet\n.El\n.Bl -inset -compact\n.It (sheet-specific commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \"Enter  e\"\nedit option at current row\n.It Ic \"d\"\nremove option override for this context\n.It Ic \"^S\"\n.No save option configuration to Sy foo.visidatarc\n.It Ic \"z^S\"\n.No save option overrides to config file\n.El\n.\n.Ss CommandLog (Shift+D)\n.Bl -inset -compact\n.It (global commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic  D\n.No open current sheet's Sy CommandLog No with all other loose ends removed; includes commands from parent sheets\n.It Ic gD\n.No open global Sy CommandLog No for all commands executed in the current session\n.It Ic zD\n.No open current sheet's Sy CommandLog No with the parent sheets commands' removed\n.El\n.Bl -inset -compact\n.It (sheet-specific commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \"  x\"\nreplay command in current row\n.It Ic \" gx\"\nreplay contents of entire CommandLog\n.It Ic \" ^C\"\nabort replay\n.El\n.\n.Ss Threads Sheet (Ctrl+T)\n.Bl -inset -compact\n.It (global commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic  ^T\n.No open global Sy Threads Sheet No for all asynchronous threads running\n.It Ic z^T\n.No open current sheet's Sy Threads Sheet\n.El\n.Bl -inset -compact\n.It (sheet-specific commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \" ^C\"\nabort thread at current row\n.It Ic \"g^C\"\n.No abort all threads on current Sy Threads Sheet\n.El\n.\n.Ss DERIVED SHEETS\n.Ss Frequency Table (Shift+F)\n.Bl -inset -compact\n.It A Sy Frequency Table No groups rows by one or more columns, and includes summary columns for those with aggregators.\n.It (global commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic gF\nopen Frequency Table, grouped by all key columns on source sheet\n.It Ic zF\nopen one-line summary for all rows and selected rows\n.El\n.Bl -inset -compact\n.It (sheet-specific commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \" s   t   u\"\nselect/toggle/unselect these entries in source sheet\n.It Ic \" Enter  gEnter\"\nopen copy of source sheet with rows that are grouped in current cell / selected rows\n.El\n.\n.Ss Describe Sheet (Shift+I)\n.Bl -inset -compact\n.It A Sy Describe Sheet No contains descriptive statistics for all visible columns.\n.It (global commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic gI\n.No open Sy Describe Sheet No for all visible columns on all sheets\n.El\n.Bl -inset -compact\n.It (sheet-specific commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \"zs  zu\"\nselect/unselect rows on source sheet that are being described in current cell\n.It Ic \" !\"\ntoggle/unset current column as a key column on source sheet\n.It Ic \" Enter\"\n.No open a Sy Frequency Table No sheet grouped on column referenced in current row\n.It Ic \"zEnter\"\nopen copy of source sheet with rows described in current cell\n.El\n.\n.Ss Pivot Table (Shift+W)\n.Bl -inset -compact\n.It Set key column(s) and aggregators on column(s) before pressing Sy Shift+W No on the column to pivot.\n.It (sheet-specific commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \" Enter\"\nopen sheet of source rows aggregated in current pivot row\n.It Ic \"zEnter\"\nopen sheet of source rows aggregated in current pivot cell\n.El\n.Ss Melted Sheet (Shift+M)\n.Bl -inset -compact\n.It Open Melted Sheet (unpivot), with key columns retained and all non-key columns reduced to Variable-Value rows.\n.It (global commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \"gM\" Ar regex\n.No open Melted Sheet (unpivot), with key columns retained and Ar regex No capture groups determining how the non-key columns will be reduced to Variable-Value rows.\n.El\n.Ss Python Object Sheet (^X ^Y g^Y z^Y)\n.Bl -inset -compact\n.It (sheet-specific commands)\n.El\n.Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX\n.It Ic \" Enter\"\ndive further into Python object\n.It Ic \" v\"\ntoggle show/hide for methods and hidden properties\n.It Ic \"gv  zv\"\nshow/hide methods and hidden properties\n.El\n.\n.Sh COMMANDLINE OPTIONS\n.No Add Sy -n Ns / Ns Sy --nonglobal No to make subsequent CLI options \"sheet-specific\" (applying only to paths specified directly on the CLI). By default, CLI options apply to all sheets.\n.Pp\n.No Options can also be set via the Ar Options Sheet No or a Ar .visidatarc No (see Sx FILES Ns ).\n.Pp\n.Bl -tag -width XXXXXXXXXXXXXXXXXXXXXXXXXXX -compact\n.It Cm -P Ns = Ns Ar longname\n.No preplay Ar longname No before replay or regular launch; limited to Sy Base Sheet No bound commands\n.It Cm + Ns Ar toplevel Ns : Ns Ar subsheet Ns : Ns Ar col Ns : Ns Ar row\n.No launch vd with Ar subsheet No of Ar toplevel No at top-of-stack, and cursor at Ar col No and Ar row Ns ; all arguments are optional\n.It Cm --overwrite Ns = Ns Ar c\n.No Overwrite with confirmation\n.It Cm --guides\n.No open Guide Index\n.\n.Pp\n.Lo f filetype filetype\n.No \"tsv               \"\nset loader to use for\n.Ar filetype\ninstead of file extension\n.\n.Lo d delimiter delimiter\n.No \"\\(rst                \"\nfield delimiter to use for tsv/usv filetype\n.\n.Lo y overwrite y\n.No \"y                 \"\noverwrite existing files without confirmation\n.\n.Lo ro overwrite n\n.No \"n                 \"\ndo not overwrite existing files\n.\n.Lo N nothing T\n.No \"False             \"\ndisable loading .visidatarc and plugin addons\n.\n.El\n.so vd-cli.inc\n.\n.Ss DISPLAY OPTIONS\n.No Display options can only be set via the Sx Options Sheet No or a Pa .visidatarc No (see Sx FILES Ns ).\n.Pp\n.\n.so vd-opts.inc\n.\n.Sh EXAMPLES\n.Dl Nm vd\n.No launch Sy DirSheet No for current directory\n.Pp\n.Dl Nm vd Cm foo.tsv\n.No open the file foo.tsv in the current directory\n.Pp\n.Dl Nm vd Cm -f ddw\n.No open blank sheet of type ddw\n.Pp\n.Dl Nm vd Cm new.tsv\n.No open new blank tsv sheet named Ar new\n.Pp\n.Dl Nm vd Cm -f sqlite bar.db\n.No open the file bar.db as a sqlite database\n.Pp\n.Dl Nm vd Cm foo.tsv -n -f sqlite bar.db\n.No open foo.tsv as tsv and bar.db as a sqlite database\n.Pp\n.Dl Nm vd Cm -f sqlite foo.tsv bar.db\n.No open both foo.tsv and bar.db as a sqlite database\n.Pp\n.Dl Nm vd Cm -b countries.fixed -o countries.tsv\n.No convert countries.fixed (in fixed width format) to countries.tsv (in tsv format)\n.Pp\n.Dl Nm vd Cm postgres:// Ns Ar username Ns Sy \"\\&:\" Ns Ar password Ns Sy @ Ns Ar hostname Ns Sy  \"\\&:\" Ns Ar port Ns Sy / Ns Ar database\n.No open a connection to the given postgres database\n.Pp\n.Dl Nm vd Cm --play tests/pivot.vdj --replay-wait 1 --output tests/pivot.tsv\n.No replay tests/pivot.vdj, waiting 1 second between commands, and output the final sheet to test/pivot.tsv\n.Pp\n.Dl Ic ls -l | Nm vd Cm -f fixed --skip 1 --header 0\n.No parse the output of ls -l into usable data\n.Pp\n.Dl Ic ls | vd | lpr\n.No interactively select a list of filenames to send to the printer\n.Pp\n.Dl Ic vd newfile.tsv\n.No open a blank sheet named Ar newfile No if file does not exist\n.Pp\n.Dl Ic vd -P open-plugins\n.No preplay longname Sy open-plugins No before starting the session\n.Pp\n.Dl Ic vd a.xlsx b.tsv c.tsv +0:3:1:2\n.No launch with cursor for sheet Sy 0 No (a.xlsx) at subsheet Sy 3 No in sheet Sy 0 Ns , col Sy 1 Ns , row Sy 2\n.Dl Ic vd a.xlsx b.tsv c.tsv +0:1:2\n.No launch with cursor for sheet Sy 0 No (a.xlsx) at col Sy 1 Ns , row Sy 2\n.Dl Ic vd a.tsv b.tsv c.tsv +1:2\n.No launch with cursor for last sheet (c.tsv) at col Sy 1 Ns , row Sy 2\n.Dl Ic vd a.tsv b.tsv c.tsv +1:\n.No launch with cursor for last sheet (c.tsv) at col Sy 1\n.Dl Ic vd a.tsv b.tsv c.tsv +:2\n.No launch with cursor for last sheet (c.tsv) at row Sy 2\n.Pp\n.Dl Ic vd a.xlsx b.xlsx c.xlsx +0:annual:1:2 +1:sales:monthly:3:4\n.No launch with cursor for sheet Sy 0 No (a.xlsx) in subsheet Sy annual No at col Sy 1 Ns , row Sy 2 Ns , and cursor for sheet Sy 1 No (b.xlsx), subsheet Sy sales No in subsheet monthly; col Sy 3 Ns , row Sy 4\n.Pp\n.Dl Ic vd a.tsv b.tsv c.tsv +1::\n.No launch in sheet Sy 1 No (b.tsv), with cursor at col 0, row 0\n.Dl Ic vd a.tsv b.tsv c.tsv +-2::\n.No launch in Sy 2nd No from last sheet (b.tsv), with cursor at col 0, row 0\n.Pp\n.Dl Ic vd a.tsv b.tsv c.tsv +:1:\n.No launch with cursors for all sheets at col Sy 1\n.Dl Ic vd a.tsv b.tsv c.tsv +::2\n.No launch with cursors for all sheets at row Sy 2\n.Dl Ic vd a.tsv b.tsv c.tsv +:1:2\n.No launch with cursors for all sheets at col Sy 1 Ns , row Sy 2\n.Dl Ic vd a.xlsx b.xslx c.xlsx +:a:1:2\n.No launch with cursors for all sheets at subsheet Sy a Ns , col Sy 1 Ns , row Sy 2\n.Sh FILES\nAt the start of every session,\n.Sy VisiData No looks for Pa $HOME/.visidatarc Ns , and calls Python exec() on its contents if it exists.\nFor example:\n.Bd -literal\n   options.min_memory_mb=100  # stop processing without 100MB free\n\n   bindkey('0', 'go-leftmost')   # alias '0' to go to first column, like vim\n\n   def median(values):\n       L = sorted(values)\n       return L[len(L)//2]\n\n   vd.aggregator('median', median)\n.Ed\n.Pp\nFunctions defined in .visidatarc are available in python expressions (e.g. in derived columns).\n.\n.Sh SUPPORTED SOURCES\nCore VisiData includes these sources:\n.Pp\n.Bl -inset -compact -offset xxx\n.It Sy tsv No (tab-separated value)\n.Bl -inset -compact -offset xxx\n.It Plain and simple.  Nm VisiData No writes tsv format by default.  See the Sy --tsv-delimiter No option.\n.El\n.El\n.Pp\n.Bl -inset -compact -offset xxx\n.It Sy csv No (comma-separated value)\n.Bl -inset -compact -offset xxx\n.It .csv files are a scourge upon the earth, and still regrettably common.\n.It See the Sy --csv-dialect Ns , Sy --csv-delimiter Ns , Sy --csv-quotechar Ns , and Sy --csv-skipinitialspace No options.\n.It Accepted dialects are Ic excel-tab Ns , Ic unix Ns , and Ic excel Ns .\n.El\n.El\n.Pp\n.Bl -inset -compact -offset xxx\n.It Sy fixed No (fixed width text)\n.Bl -inset -compact -offset xxx\n.It Columns are autodetected from the first 1000 rows (adjustable with Sy --fixed-rows Ns ).\n.El\n.El\n.Pp\n.Bl -inset -compact -offset xxx\n.It Sy json No (single object) and Sy jsonl Ns / Ns Sy ndjson Ns / Ns Sy ldjson No (one object per line).\n.Bl -inset -compact -offset xxx\n.It Cells containing lists (e.g. Sy [3] Ns ) or dicts ( Ns Sy {3} Ns ) can be expanded into new columns with Sy \"\\&(\" No and unexpanded with Sy \"\\&)\" Ns .\n.El\n.El\n.Pp\n.Bl -inset -compact -offset xxx\n.It Sy sqlite\n.Bl -inset -compact -offset xxx\n.It May include multiple tables. The initial sheet is the table directory;\n.Sy Enter No loads the entire table into memory. Sy z^S No saves modifications to source.\n.El\n.El\n.Pp\nURL schemes are also supported:\n.Bl -inset -compact -offset xxx\n.It Sy http No (requires Sy requests Ns ); can be used as transport for with another filetype\n.El\n.\n.Pp\nFor a list of all remaining formats supported by VisiData, see https://visidata.org/formats.\n.Pp\nIn addition,\n.Sy .zip Ns , Sy .gz Ns , Sy .bz2 Ns , Sy .xz Ns , Sy ,zstd Ns , and Sy .zst No files are decompressed on the fly.\n.Pp\n.\n.Sh AUTHOR\n.Nm VisiData\nwas made by\n.An Saul Pwanson Aq Mt vd@saul.pw Ns .\n"
  },
  {
    "path": "visidata/memory.py",
    "content": "from visidata import BaseSheet, Sheet, VisiData, ItemColumn, vd, AttrDict, Column, setitem, ESC\n\nvd.memory = AttrDict()\nvd.contexts += [vd.memory]\n\n\n@VisiData.api\ndef memoValue(vd, name, value, dispvalue):\n    vd.memory[name] = value\n    vd.status(f'memo {name}={dispvalue}')\n\n\nclass MemorySheet(Sheet):\n    rowtype = 'memos' # rowdef: keys into vd.memory\n    columns = [\n        Column('name', getter=lambda c,r: r, setter=lambda c,r,v: setitem(vd.memory, v, vd.memory[r])),\n        Column('value', getter=lambda c,r: vd.memory[r], setter=lambda c,r,v: setitem(vd.memory, r, v)),\n    ]\n\n    @property\n    def rows(self):\n        return list(vd.memory.keys())\n\n    @rows.setter\n    def rows(self, v):\n        pass\n\n\n@VisiData.lazy_property\ndef memosSheet(vd):\n    return MemorySheet('memos')\n\n\n@VisiData.api\ndef inputMemoName(vd, value):\n    value_params = dict(prompt=\"assign value: \", value=value)\n    name_params = dict(prompt=\"to memo name: \")\n    r = vd.inputMultiple(memo_name=name_params, memo_value=value_params)\n    name = r['memo_name']\n    if not name:\n        vd.fail('memo name cannot be blank')\n    return name\n\n\nBaseSheet.addCommand('Alt+Shift+M', 'open-memos', 'vd.push(vd.memosSheet)', 'open the Memory Sheet')\nSheet.addCommand('Alt+m', 'memo-cell', 'vd.memoValue(inputMemoName(cursorDisplay), cursorTypedValue, cursorDisplay)', 'store value in current cell to Memory Sheet')\n"
  },
  {
    "path": "visidata/menu.py",
    "content": "import string\nimport textwrap\nimport time\nimport curses\n\nfrom typing import List, Union\nfrom visidata import vd, drawcache, colors, clipdraw, dispwidth\nfrom visidata import BaseSheet, VisiData, AttrDict, ENTER\n\nvd.option('disp_menu', True, 'show menu on top line when not active', sheettype=None)\nvd.theme_option('disp_menu_keys', True, 'show keystrokes inline in submenus', sheettype=None)\nvd.theme_option('color_menu', 'black on 68 blue', 'color of menu items in general')\nvd.theme_option('color_menu_active', '223 yellow on black', 'color of active menu items')\nvd.theme_option('color_menu_spec', 'black on 34 green', 'color of sheet-specific menu items')\nvd.theme_option('color_menu_help', 'black italic on 68 blue', 'color of helpbox')\n\nvd.theme_option('disp_menu_boxchars', '││──┌┐└┘├┤', 'box characters to use for menus')\nvd.theme_option('disp_menu_more', '»', 'command submenu indicator')\nvd.theme_option('disp_menu_push', '⎘', 'indicator if command pushes sheet onto sheet stack')\nvd.theme_option('disp_menu_input', '…', 'indicator if input required for command')\nvd.option('disp_menu_fmt', '| VisiData {vd.version} | {vd.motd}', 'right-side menu format string')\n\nBaseSheet.init('activeMenuItems', list)\nvd.menuRunning = False\n\n@VisiData.property\ndef hintStatus(vd):\n    if vd.wantsHelp('hints'):\n        if int(time.time()/60) % 2 == 0:\n            return 'Alt+H for help menu'\n        else:\n            return 'Ctrl+G to cycle help sidebar'\n\n    return vd.sheet.getHint()\n\ndef menudraw(*args):\n    return clipdraw(*args, truncator='')\n\n\ndef Menu(title, *args):\n    'Construct menu command or submenu.  *title* is displayed text for this item; *args* is either a single command longname, or recursive Menu elements.'\n    if len(args) == 1 and isinstance(args[0], str):\n        return AttrDict(title=title, menus=[], longname=args[0])\n\n    return AttrDict(title=title, menus=list(args), longname='')\n\n\ndef walkmenu(item, menupath=[]):\n    if item.menus:\n        for i in item.menus:\n            yield from walkmenu(i, menupath+[i.title])\n    else:\n        yield item, menupath\n\n\ndef _finditem(menus, item:Union[str,int]):\n    if isinstance(item, str):\n        for m in menus:\n            if item == m.title:\n                return m\n        return None\n\n    return menus[item]\n\n\n@BaseSheet.api\ndef getMenuItem(sheet, menupath:List[str]=None):\n    if not menupath:\n        menupath = sheet.activeMenuItems\n\n    try:\n        currentItem = sheet\n        for i in menupath:\n            currentItem = _finditem(currentItem.menus, i)\n    except IndexError as e:\n        vd.exceptionCaught(e)\n#        sheet.activeMenuItems = sheet.activeMenuItems[:i-1]\n\n    return currentItem\n\n\n@VisiData.api\ndef addMenuItem(vd, *args):\n    'Add one command to hierarchical menu at given menupath.  Last argument must be valid command longname. Append menupath elements that do not exist. Example: vd.addMenuItem(\"File\", \"Options\", \"more options\", \"options-more\")'\n    m = Menu(*args[-2:])\n    for x in reversed(args[:-2]):\n        m = Menu(x, m)\n    vd.addMenu(m)\n\n\n@VisiData.api\ndef addMenuItems(vd, *itemgroups):\n    '''Add any number of commands to menu, separated by lines, with individual menupaths separated by '>' character.  Example:\n        vd.addMenuItems(\"\"\"\n            Help > About > credits > show-credits\n            Help > About > environment > show-env\n        \"\"\")\n    '''\n    for itemgroup in itemgroups:\n        for itemline in itemgroup.splitlines():\n            if not itemline: continue\n            menupath = [x.strip() for x in itemline.split('>')]\n            vd.addMenuItem(*menupath)\n\n\n@VisiData.api\ndef addMenu(vd, *args):\n    '''Incorporate submenus and commands into hierarchical menu.  Wrap all in Menu() objects.  Example:\n\n        vd.addMenu(Menu(\"Help\",\n                    Menu(\"About\",\n                      Menu(\"credits\", \"show-credits\"),\n                      Menu(\"environment\", \"show-env\"),\n                  )))'''\n    m = Menu('top', *args)\n    for item, menupath in walkmenu(m):\n        obj = vd\n        for p in menupath:\n            c = _finditem(obj.menus, p)\n            if not c:\n                c = Menu(p)\n                obj.menus.append(c)\n            obj = c\n        assert not obj.menus, 'cannot override submenu with longname'\n        obj.longname = item.longname\n\n\ndef _intMenuPath(obj, menupath):\n    'Return list of numeric indexes of *menupath* (which may be numeric or string titles) through obj.menus.'\n    if not menupath:\n        return []\n\n    i = menupath[0]\n    if isinstance(i, str):\n        try:\n            i = [x.title for x in obj.menus].index(i)\n        except ValueError:\n            vd.warning('no menupath %s' % menupath)\n            return []\n\n    return [i] + _intMenuPath(obj.menus[i], menupath[1:])\n\nvd.menus = []\n\nvd.addMenu(\n    Menu('File'),\n    Menu('Edit'),\n    Menu('View'),\n    Menu('Column'),\n    Menu('Row'),\n    Menu('Data'),\n    Menu('Plot'),\n    Menu('System'),\n    Menu('Help')\n)\n\n\n@BaseSheet.api\ndef menuitemAvailable(sheet, item):\n    return any(sheet.menuitemAvailable(i) for i in item.menus)\n\n\n@VisiData.api\ndef drawSubmenu(vd, scr, sheet, y, x, menus, level, disp_menu_boxchars=''):\n    if not menus:\n        return\n    ls,rs,ts,bs,tl,tr,bl,br,lsr,rsl = disp_menu_boxchars\n\n    try:\n        sheet.activeMenuItems[level] %= len(menus)\n    except IndexError:\n        pass # sheet.activeMenuItems = sheet.activeMenuItems[:-1]\n\n    for item in menus:\n        if item.cmd:\n            mainbinding = sheet.revbinds.get(item.cmd.longname, [None])[0]\n            item.binding = vd.prettykeys(mainbinding)\n\n    maxbinding = 0\n    if vd.options.disp_menu_keys:\n        maxbinding = max(dispwidth(item.binding or '') for item in menus)+1\n\n    w = max(dispwidth(item.title) for item in menus)+maxbinding+2\n\n    # draw borders before/under submenus\n    if level > 1:\n        menudraw(scr, y-1, x, tl+ts*(w+2)+tr, colors.color_menu)  # top\n\n    menudraw(scr, y+len(menus), x, bl+bs*(w+2)+br, colors.color_menu) #  bottom\n\n    i = 0\n    for j, item in enumerate(menus):\n        attr = colors.color_menu\n\n        if any(foo.obj not in ['BaseSheet', 'TableSheet'] for foo, _ in walkmenu(item)):\n            attr = colors.color_menu_spec\n\n        if level < len(sheet.activeMenuItems):\n          if j == sheet.activeMenuItems[level]:\n            attr = colors.color_menu_active\n\n            if level < len(sheet.activeMenuItems):\n                vd.drawSubmenu(scr, sheet, y+i, x+w+4, item.menus, level+1, disp_menu_boxchars=disp_menu_boxchars)\n\n        menudraw(scr, y+i, x, ls, colors.color_menu)\n\n        title = item.title\n        pretitle= ' '\n        titlenote= ' '\n        if item.menus:\n            titlenote = vd.options.disp_menu_more\n\n        mainbinding = ''\n        # special notes\n        if item.cmd:\n            if item.cmd.execstr:\n                if 'push(' in item.cmd.execstr:\n                    titlenote = vd.options.disp_menu_push + ' '\n                if 'input' in item.cmd.execstr:\n                    title += vd.options.disp_menu_input\n\n                if maxbinding:\n                    revbinds = sheet.revbinds.get(item.cmd.longname, [])\n                    if revbinds:\n                        mainbinding = vd.prettykeys(revbinds[0])\n\n        # actually display the menu item\n        title += ' '*(w-dispwidth(pretitle)-dispwidth(item.title)+1) # padding\n\n        menudraw(scr, y+i, x+1, pretitle+title, attr)\n        if maxbinding and mainbinding:\n            menudraw(scr, y+i, x+1+w-dispwidth(mainbinding), mainbinding, attr.update(colors.keystrokes))\n        menudraw(scr, y+i, x+2+w, titlenote, attr)\n        menudraw(scr, y+i, x+3+w, ls, colors.color_menu)\n\n        vd.onMouse(scr, x, y+i, w+3, 1,\n                BUTTON1_PRESSED=lambda y,x,key,p=sheet.activeMenuItems[:level]+[j]: sheet.pressMenu(*p),\n                BUTTON2_PRESSED=vd.nop,\n                BUTTON3_PRESSED=vd.nop,\n                BUTTON1_CLICKED=lambda y,x,key,p=sheet.activeMenuItems[:level]+[j]: sheet.pressMenu(*p),\n                BUTTON1_RELEASED=vd.nop,\n                BUTTON2_RELEASED=vd.nop,\n                BUTTON3_RELEASED=vd.nop)\n\n        i += 1\n\n\n@VisiData.api\ndef nop(vd, *args, **kwargs):\n    return False\n\n\ndef _done(vd, *args, **kwargs):\n    'Accept and execute current menu item (like pressing Enter).'\n    return True\n\n\n@BaseSheet.property\n@drawcache\ndef menus(sheet):\n    'List of hierarchical menu items for commands available on this sheet.'\n    def _menus(sheet, item):\n        if item.longname:\n            cmd = sheet.getCommand(item.longname)\n            if cmd:\n                item.cmd = cmd\n                if vd.commands[item.longname].get('TableSheet', None):\n                    item.obj = 'TableSheet'\n                elif vd.commands[item.longname].get('BaseSheet', None):\n                    item.obj = 'BaseSheet'\n                else:\n                    item.obj = ''\n                return item\n\n        elif item.menus:\n            menus = _menu_list(sheet, item.menus)\n            if menus:\n                title = getattr(item, 'title', '')\n                return AttrDict(title=title, menus=menus, longname='')\n        else:\n            return item\n\n    def _menu_list(sheet, menus):\n        ret = []\n        for i in menus:\n            m = _menus(sheet, i)\n            if m:\n                ret.append(m)\n        return ret\n\n    return _menu_list(sheet, vd.menus)\n\n\n@VisiData.api\ndef drawMenu(vd, scr, sheet):\n    h, w = scr.getmaxyx()\n    scr.addstr(0, 0, ' '*(w-1), colors.color_menu.attr)\n    disp_menu_boxchars = sheet.options.disp_menu_boxchars\n    x = 1\n    ymax = 4\n    toplevel = sheet.menus\n    for i, item in enumerate(toplevel):\n        if sheet.activeMenuItems and i == sheet.activeMenuItems[0]:\n            cattr = colors.color_menu_active\n            vd.drawSubmenu(scr, sheet, 1, x, item.menus, 1, disp_menu_boxchars)\n        else:\n            cattr = colors.color_menu\n\n        menutitle = ' ' + ''.join(f'[:underline]{ch}[/]' if ch.isupper() else ch for ch in item.title) + ' '\n        menudraw(scr, 0, x, menutitle, cattr)\n\n        vd.onMouse(scr, x, 0, dispwidth(item.title)+2, 1,\n                BUTTON1_PRESSED=lambda y,x,key,i=i,sheet=sheet: sheet.pressMenu(i),\n                BUTTON2_PRESSED=vd.nop,\n                BUTTON3_PRESSED=vd.nop,\n                BUTTON1_CLICKED=lambda y,x,key,i=i,sheet=sheet: sheet.pressMenu(i),\n                BUTTON1_RELEASED=vd.nop,\n                BUTTON2_RELEASED=vd.nop,\n                BUTTON3_RELEASED=vd.nop)\n        x += dispwidth(item.title)+2\n\n    rightdisp = sheet.options.disp_menu_fmt.format(sheet=sheet, vd=vd)\n    menudraw(scr, 0, x+4, rightdisp, colors.color_menu)\n\n    if not sheet.activeMenuItems:\n        return\n\n    currentItem = sheet.getMenuItem()\n    cmd = currentItem.cmd\n\n    if not cmd:\n        return\n\n    # helpbox\n    sidelines = []\n    if 'push(' in cmd.execstr:\n        sidelines += [vd.options.disp_menu_push + ' pushes sheet']\n    if 'input' in cmd.execstr:\n        sidelines += [vd.options.disp_menu_input + ' needs input']\n\n    helpattr = colors.color_menu_help\n    helpx = 30\n    helpw = min(w-helpx-4, 76)\n    ls,rs,ts,bs,tl,tr,bl,br,lsr,rsl = disp_menu_boxchars\n    helplines = textwrap.wrap(cmd.helpstr or '(no help available)', width=helpw-4)\n\n    # place helpbox just below deepest menu\n    menuh = 2+sum(sheet.activeMenuItems[1:-1])\n    menuh += len(sheet.getMenuItem(sheet.activeMenuItems[:-1]).menus)\n    menuy = 16 # min(menuh, h-len(helplines)-3)\n\n    y = menuy\n    menudraw(scr, y, helpx, tl+ts*(helpw-2)+tr, helpattr) # top line\n    y += 1\n\n    # cmd.helpstr text\n    for i, line in enumerate(helplines):\n        menudraw(scr, y+i, helpx, ls+' '+line+' '*(helpw-dispwidth(line)-3)+rs, helpattr)\n    y += len(helplines)\n\n    if sidelines:\n        menudraw(scr, y, helpx, ls+' '*(helpw-2)+rs, helpattr)\n        for i, line in enumerate(sidelines):\n            menudraw(scr, y+i+1, helpx, ls+'    '+line+' '*(helpw-dispwidth(line)-6)+rs, helpattr)\n        y += len(sidelines)+1\n\n    menudraw(scr, y, helpx, bl+bs*(helpw-2)+br, helpattr)\n\n    mainbinding = sheet.revbinds.get(cmd.longname, [None])[0]\n    if mainbinding:\n        menudraw(scr, menuy, helpx+2, rsl, helpattr)\n        ks = vd.prettykeys(mainbinding or '(unbound)')\n        menudraw(scr, menuy, helpx+3, ' '+ks+' ', colors.color_menu_active)\n        menudraw(scr, menuy, helpx+2+dispwidth(ks)+3, lsr, helpattr)\n    menudraw(scr, menuy, helpx+19, ' '+cmd.longname+' ', helpattr)\n\n    vd.onMouse(scr, helpx, menuy, helpw, y-menuy+1,\n               BUTTON1_PRESSED=_done,\n               BUTTON1_CLICKED=_done,\n               BUTTON1_RELEASED=vd.nop,\n               BUTTON2_RELEASED=vd.nop,\n               BUTTON3_RELEASED=vd.nop)\n\n\n@BaseSheet.api\ndef pressMenu(sheet, *args):\n    '''Navigate to given menupath in *args* and activate menu if not already activated. Return True if pressing current item.\n    Example: sheet.pressMenu(\"Help\", \"Version\")\n    '''\n    ret = False\n    p = _intMenuPath(sheet, args)\n    if p == sheet.activeMenuItems:  # clicking on current menu item\n        if sheet.getMenuItem(p).longname:\n            ret = True\n        else:\n            p += [0]\n\n    sheet.activeMenuItems = p\n\n    if not vd.menuRunning:\n        vd.runMenu()\n\n    return ret\n\n\n@BaseSheet.api\ndef checkMenu(sheet):\n    sheet.activeMenuItems[0] %= len(sheet.menus)\n\n\n@VisiData.api\ndef runMenu(vd):\n    'Activate menu, with sheet.activeMenuItems containing the navigated menu path.  Does not return until menu is deactivated.'\n    old_disp_menu = vd.options.disp_menu\n\n    vd.options.disp_menu=True\n    vd.menuRunning = True\n    sheet = vd.activeSheet\n    vd.setWindows(vd.scrFull)\n    nEscapes = 0\n\n    def _clickedDuringMenu():\n        r = vd.parseMouse(menu=vd.scrMenu, top=vd.winTop, bot=vd.winBottom)\n        f = vd.getMouse(r.x, r.y, r.keystroke)\n        if f:\n            if f(r.y, r.x, r.keystroke):  # call each function until one returns a true-ish value\n                return 'doit'\n        else:\n            return 'offmenu'\n\n    try:\n      while True:\n        if len(sheet.activeMenuItems) < 2:\n            sheet.activeMenuItems.append(0)\n\n        vd.draw_all()\n\n        k = vd.getkeystroke(vd.scrMenu, sheet)\n\n        if not k:\n            continue\n\n        currentItem = sheet.getMenuItem()\n\n        if k == 'Esc':  # ESC\n            nEscapes += 1  #1470\n            if nEscapes > 1:\n                return\n            continue\n        else:\n            nEscapes = 0\n\n        if k in ['Ctrl+C', 'Ctrl+Q', 'q', 'Ctrl+H', 'Bksp']:\n            return\n\n        elif k in ['KEY_MOUSE']:\n            r = _clickedDuringMenu()\n            if r == 'offmenu':\n                return  # clicking off the menu is an escape\n            elif r == 'doit':\n                break\n\n        elif k in ['Right', 'l']:\n            if currentItem.menus and sheet.activeMenuItems[1] != 0:  # not first item\n                sheet.activeMenuItems.append(0)\n            else:\n                sheet.activeMenuItems = [sheet.activeMenuItems[0]+1, 0]\n\n        elif k in ['Left', 'h']:\n            if len(sheet.activeMenuItems) > 2:\n                sheet.activeMenuItems.pop(-1)\n            else:\n                sheet.activeMenuItems = [sheet.activeMenuItems[0]-1, 0]\n\n        elif k in ['Down', 'j']:\n            sheet.activeMenuItems[-1] += 1\n\n        elif k in ['Up', 'k']:\n            sheet.activeMenuItems[-1] -= 1\n\n        elif k in ['Space', 'Enter']:\n            if currentItem.menus:\n                sheet.activeMenuItems.append(0)\n            else:\n                break\n\n        elif k in main_menu.keys():\n            sheet.pressMenu(main_menu[k])\n\n        else:\n            vd.warning(f'unknown keystroke {k}')\n\n        sheet.checkMenu()\n\n    finally:\n        vd.menuRunning = False\n        sheet.activeMenuItems = []\n        vd.options.disp_menu=old_disp_menu\n\n    vd.draw_all()\n    sheet.execCommand(currentItem.longname)\n\nmain_menu = {'f': 'File', 'e': 'Edit', 'v': 'View', 'c': 'Column', 'r': 'Row', 'd': 'Data', 'p': 'Plot', 's': 'System', 'h': 'Help'}\n\nBaseSheet.addCommand('Alt+f', 'menu-file', 'pressMenu(\"File\")', '')\nBaseSheet.addCommand('Alt+e', 'menu-edit', 'pressMenu(\"Edit\")', '')\nBaseSheet.addCommand('Alt+v', 'menu-view', 'pressMenu(\"View\")', '')\nBaseSheet.addCommand('Alt+c', 'menu-column', 'pressMenu(\"Column\")', '')\nBaseSheet.addCommand('Alt+r', 'menu-row', 'pressMenu(\"Row\")', '')\nBaseSheet.addCommand('Alt+d', 'menu-data', 'pressMenu(\"Data\")', '')\nBaseSheet.addCommand('Alt+p', 'menu-plot', 'pressMenu(\"Plot\")', '')\nBaseSheet.addCommand('Alt+s', 'menu-system', 'pressMenu(\"System\")', '')\nBaseSheet.addCommand('Alt+h', 'menu-help', 'pressMenu(\"Help\")', 'open the Help menu')\nBaseSheet.bindkey('Ctrl+H', 'menu-help')\nBaseSheet.bindkey('Bksp', 'menu-help')\n\nvd.addGlobals({'Menu': Menu})\n"
  },
  {
    "path": "visidata/metasheets.py",
    "content": "import collections\n\nfrom visidata import globalCommand, BaseSheet, Column, options, vd, anytype, asyncthread, Sheet, IndexSheet\nfrom visidata import CellColorizer, RowColorizer, JsonLinesSheet, AttrDict\nfrom visidata import ColumnAttr, ItemColumn, WritableColumn\nfrom visidata import TsvSheet, Path, Option\nfrom visidata import undoAttrFunc, VisiData, vlen\n\nvd.option('visibility', 0, 'visibility level (0=low, 1=high)')\n\nvd_system_sep = '\\t'\n\n\nclass ColumnsSheet(Sheet):\n    rowtype = 'columns'\n    _rowtype = Column\n    _coltype = ColumnAttr\n    precious = False\n    guide = '''# Columns Sheet\nThis is a list of {sheet.nSourceCols} columns on {sheet.displaySource}.\nEdit values on this sheet to change the appearance of the source sheet.\nFor example, edit the _{sheet.cursorCol.name}_ column to **{sheet.cursorCol.formatted_help}**.\n\nSome new commands on this sheet operate on all selected columns on the source sheet:\n\n- {help.commands.hide_selected}\n- {help.commands.key_selected}\n- {help.commands.key_off_selected}\n- {help.commands.type_int_selected}\n- or `g` with any standard type to set type of selected source columns to that type\n\nOther commands (not specific to Columns Sheet):\n\n- {help.commands.setcol_input}\n'''\n\n    class ValueColumn(WritableColumn):\n        'passthrough to the value on the source cursorRow'\n        def calcValue(self, srcCol):\n            return srcCol.getDisplayValue(srcCol.sheet.cursorRow)\n        def setValue(self, srcCol, val, setModified=True):\n            srcCol.setValue(srcCol.sheet.cursorRow, val, setModified=setModified)\n\n    columns = [\n            ColumnAttr('sheet', type=str),\n            ColumnAttr('name', help='rename the column on the source sheet'),\n            ColumnAttr('keycol', type=int, width=0),\n            ColumnAttr('width', type=int, help='set the column width (`0` to hide completely)'),\n            ColumnAttr('height', type=int, disp_expert=1, help='set a maximum height for the row, if this column will fill it'),\n            ColumnAttr('hoffset', type=int, width=0),\n            ColumnAttr('voffset', type=int, width=0),\n            ColumnAttr('type', 'typestr', help='convert all values to a specific type'),\n            ColumnAttr('fmtstr', help='use a custom format string, either C-style (`%0.4f`) or Python-style (`{{:0.4f}}`)'),\n            ColumnAttr('formatter', disp_expert=1, help='use a custom format function (**{col.help_formatters}**)'),\n            ColumnAttr('displayer', disp_expert=1, help='use a custom display function (**{col.help_displayers}**)'),\n            ValueColumn('value', help='change the value of this cell on the source sheet'),\n            ColumnAttr('expr', disp_expert=1, help='change the main column parameter'),\n            ColumnAttr('ncalcs', type=int, width=0, cache=False),\n            ColumnAttr('maxtime', type=float, width=0, cache=False),\n            ColumnAttr('totaltime', type=float, width=0, cache=False),\n    ]\n    nKeys = 2\n    colorizers = [\n        RowColorizer(7, 'color_key_col', lambda s,c,r,v: r and r.keycol),\n        RowColorizer(8, 'color_hidden_col', lambda s,c,r,v: r and r.hidden),\n        RowColorizer(8, 'color_readonly', lambda s,c,r,v: r and r.readonly),\n    ]\n\n    @property\n    def nSourceCols(self):\n        return sum(vs.nCols for vs in self.source)\n\n    def loader(self):\n        if len(self.source) == 1:\n            self.rows = self.source[0].columns\n            self.cursorRowIndex = self.source[0].cursorColIndex\n            self.columns[0].hide()  # hide 'sheet' column if only one sheet\n        else:\n            self.rows = [col for vs in self.source for col in vs.visibleCols if isinstance(vs, Sheet) and vs is not self]\n\n    def newRow(self):\n        c = type(self.source[0])._coltype()\n        c.recalc(self.source[0])\n        return c\n\nclass MetaSheet(Sheet):\n    pass\n\nclass VisiDataMetaSheet(TsvSheet):\n    pass\n\n# commandline must not override these for internal sheets\nVisiDataMetaSheet.options.delimiter = vd_system_sep\nVisiDataMetaSheet.options.header = 1\nVisiDataMetaSheet.options.skip = 0\nVisiDataMetaSheet.options.row_delimiter = '\\n'\nVisiDataMetaSheet.options.encoding = 'utf-8'\n\n\n@VisiData.lazy_property\ndef allColumnsSheet(vd):\n    return ColumnsSheet(\"all_columns\", source=vd.stackedSheets)\n\n\n@VisiData.api\ndef save_visidatarc(vd, p, vs):\n    with p.open(mode='w') as fp:\n        for opt in vs.rows:\n            rval = repr(opt.value)\n            defopt = vd.options._get(opt.name, 'default')\n            leading = '# ' if opt.value == defopt.value else ''\n            fp.write(f'{leading}options.{opt.name:25s} = {rval:10s}  # {defopt.helpstr}\\n')\n\n\nColumnsSheet.addCommand('', 'join-cols', 'sheet.join_cols()', 'add column from concatenating selected source columns')\n\n@ColumnsSheet.api\ndef join_cols(sheet):\n    cols = sheet.onlySelectedRows\n    destSheet = cols[0].sheet\n\n    if len(set(c.sheet for c in cols)) > 1:\n        vd.fail('joined columns must come from the same source sheet')\n\n    c = Column(options.name_joiner.join(c.name for c in cols),\n                getter=lambda col,row,cols=cols,ch=options.value_joiner: ch.join(c.getDisplayValue(row) for c in cols))\n\n    vd.status(f\"added {c.name} to {destSheet}\")\n    destSheet.addColumn(c, index=sheet.cursorRowIndex)\n\n\n# copy vd.sheets so that ColumnsSheet itself isn't included (for recalc in addRow)\nglobalCommand('gC', 'columns-all', 'vs=vd.allColumnsSheet; vs.reload(); vd.push(vs)', 'open Columns Sheet: edit column properties for all visible columns from all sheets on the sheets stack')\n\nSheet.addCommand('C', 'columns-sheet', 'vd.push(ColumnsSheet(name+\"_columns\", source=[sheet]))', 'open Columns Sheet: edit column properties for current sheet')\n\n# used ColumnsSheet, affecting the 'row' (source column)\nColumnsSheet.addCommand('g!', 'key-selected', 'for c in onlySelectedRows: c.sheet.setKeys([c])', 'set selected source columns as key columns')\nColumnsSheet.addCommand('gz!', 'key-off-selected', 'for c in onlySelectedRows: c.sheet.unsetKeys([c])', 'unset selected source columns as key columns')\n\nColumnsSheet.addCommand('g-', 'hide-selected', 'onlySelectedRows.hide()', 'hide selected source columns')\nColumnsSheet.addCommand(None, 'resize-source-rows-max', 'for c in selectedRows or [cursorRow]: c.setWidth(c.getMaxWidth(c.sheet.visibleRows))', 'adjust widths of selected source columns')\n\nColumnsSheet.addCommand('g%', 'type-float-selected', 'onlySelectedRows.type=float', 'set type of selected source columns to float')\nColumnsSheet.addCommand('g#', 'type-int-selected', 'onlySelectedRows.type=int', 'set type of selected source columns to int')\nColumnsSheet.addCommand('gz#', 'type-len-selected', 'onlySelectedRows.type=vlen', 'set type of selected source columns to len')\nColumnsSheet.addCommand('g@', 'type-date-selected', 'onlySelectedRows.type=date', 'set type of selected source columns to date')\nColumnsSheet.addCommand('g$', 'type-currency-selected', 'onlySelectedRows.type=currency', 'set type of selected source columns to currency')\nColumnsSheet.addCommand('g~', 'type-string-selected', 'onlySelectedRows.type=str', 'set type of selected source columns to str')\nColumnsSheet.addCommand('gz~', 'type-any-selected', 'onlySelectedRows.type=anytype', 'set type of selected source columns to anytype')\nColumnsSheet.addCommand('gz%', 'type-floatsi-selected', 'onlySelectedRows.type=floatsi', 'set type of selected source columns to floatsi')\nColumnsSheet.addCommand('', 'type-floatlocale-selected', 'onlySelectedRows.type=floatlocale', 'set type of selected source columns to float using system locale')\n\nMetaSheet.options.header = 0\n\n\nvd.addGlobals({\n    'ColumnsSheet': ColumnsSheet,\n    'MetaSheet': MetaSheet,\n    'VisiDataMetaSheet': VisiDataMetaSheet,\n})\n\nvd.addMenuItems('''\n    View > Columns > this sheet > columns-sheet\n    View > Columns > all sheets > columns-all\n''')\n"
  },
  {
    "path": "visidata/modify.py",
    "content": "from copy import copy\n\nfrom visidata import vd, VisiData, asyncthread, ColumnColorizer\nfrom visidata import Sheet, RowColorizer, CellColorizer, Column, BaseSheet, Progress\n\nvd.theme_option('color_readonly', 'on 52', 'color for readonly columns')\nvd.theme_option('color_add_pending', 'green', 'color for rows pending add')\nvd.theme_option('color_change_pending', 'reverse yellow', 'color for cells pending modification')\nvd.theme_option('color_delete_pending', 'red', 'color for rows pending delete')\nvd.option('overwrite', 'c', 'overwrite existing files {y=yes|c=confirm|n=no}')\n\nvd.optalias('readonly', 'overwrite', 'n')\nvd.optalias('ro', 'overwrite', 'n')\nvd.optalias('y', 'overwrite', 'y')\n\n\n@VisiData.api\ndef couldOverwrite(vd) -> bool:\n    'Return True if overwrite might be allowed.'\n    return vd.options.overwrite.startswith(('y','c'))\n\n\n@VisiData.api\ndef confirmOverwrite(vd, path, msg:str=''):\n    'Fail if file exists and overwrite not allowed.'\n    if path is None or path.exists():\n        msg = msg or f'{path.given} exists. overwrite? '\n        ow = vd.options.overwrite\n        if ow.startswith('c'):  # confirm\n            vd.confirm(msg)\n        elif ow.startswith('y'):  # yes/always\n            pass\n        else: #1805  empty/no/never/readonly\n            vd.fail('overwrite disabled')\n    return True\n\n# deferred cached\n@Sheet.lazy_property\ndef _deferredAdds(sheet):\n    return dict() # [s.rowid(row)] -> row\n\n@Sheet.lazy_property\ndef _deferredMods(sheet):\n    return dict() # [s.rowid(row)] -> (row, { [col] -> val })\n\n@Sheet.lazy_property\ndef _deferredDels(sheet):\n    return dict() # [s.rowid(row)] -> row\n\nSheet.colorizers += [\n        RowColorizer(9, 'color_add_pending', lambda s,c,r,v: s.rowid(r) in s._deferredAdds),\n        CellColorizer(8, 'color_change_pending', lambda s,c,r,v: c and (r is not None) and s.isChanged(c, r)),\n        RowColorizer(9, 'color_delete_pending', lambda s,c,r,v: s.isDeleted(r)),\n        ColumnColorizer(9, 'color_readonly', lambda s,c,r,v: c and (r is None) and c.readonly),\n]\n\n@Sheet.api\ndef preloadHook(sheet):\n    BaseSheet.preloadHook(sheet)\n    sheet._deferredAdds.clear()\n    sheet._deferredMods.clear()\n    sheet._deferredDels.clear()\n\n@Sheet.after\ndef afterLoad(sheet):\n    sheet.hasBeenModified = False\n\n@Sheet.api\ndef rowAdded(self, row):\n    'Mark row as a deferred add-row'\n    self._deferredAdds[self.rowid(row)] = row\n    def _undoRowAdded(sheet, row):\n        if sheet.rowid(row) not in sheet._deferredAdds:\n            vd.warning('cannot undo row addition after a commit')\n            return\n        del sheet._deferredAdds[sheet.rowid(row)]\n    vd.addUndo(_undoRowAdded, self, row)\n\n@Column.api\ndef cellChanged(col, row, val):\n    'Mark cell at row for col as a deferred edit-cell'\n    oldval = col.getValue(row)\n    if oldval != val:\n        rowid = col.sheet.rowid(row)\n\n        if rowid in col.sheet._deferredAdds:\n            col.putValue(row, val)\n            def _undoNewCellChanged(col, row, oldval):\n                col.putValue(row, oldval)\n            vd.addUndo(_undoNewCellChanged, col, row, oldval)\n            return\n\n\n        if rowid not in col.sheet._deferredMods:\n            rowmods = {}\n            col.sheet._deferredMods[rowid] = (row, rowmods)\n        else:\n            _, rowmods = col.sheet._deferredMods[rowid]\n        rowmods[col] = val\n\n        def _undoCellChanged(col, row, oldval):\n            if oldval == col.getSourceValue(row):\n                # if we have reached the original value, remove from defermods entirely\n                if col.sheet.rowid(row) not in col.sheet._deferredMods:\n                    vd.warning('cannot undo cell change after a commit')\n                    return\n                del col.sheet._deferredMods[col.sheet.rowid(row)]\n            else:\n                # otherwise, update deferredMods with previous value\n                _, rowmods = col.sheet._deferredMods[col.sheet.rowid(row)]\n                rowmods[col] = oldval\n\n        vd.addUndo(_undoCellChanged, col, row, oldval)\n\n@Sheet.api\ndef rowDeleted(self, row):\n    'Mark row as a deferred delete-row'\n    self._deferredDels[self.rowid(row)] = row\n    self.addUndoSelection()\n    self.unselectRow(row)\n    def _undoRowDeleted(sheet, row):\n        if sheet.rowid(row) not in sheet._deferredDels:\n            vd.warning('cannot undo row deletion after a commit')\n            return\n        del sheet._deferredDels[sheet.rowid(row)]\n    vd.addUndo(_undoRowDeleted, self, row)\n\n\n@Sheet.api\n@asyncthread\ndef addRows(sheet, rows, index=None, undo=True):\n    'Add *rows* after row at *index*, possibly deferred, setting the modified status, and making it undoable if *undo* is True.'\n    addedRows = {}\n    if index is None: index=len(sheet.rows)\n    for i, row in enumerate(Progress(rows, gerund='adding')):\n        addedRows[sheet.rowid(row)] = row\n        sheet.addRow(row, index=index+i+1)\n\n        if sheet.defer:\n            sheet.rowAdded(row)\n    sheet.setModified()\n\n    @asyncthread\n    def _removeRows():\n        sheet.deleteBy(lambda r,sheet=sheet,addedRows=addedRows: sheet.rowid(r) in addedRows, commit=True, undo=False)\n\n    if undo:\n        vd.addUndo(_removeRows)\n\n\n@Sheet.api\ndef deleteBy(sheet, func, commit=False, undo=True):\n    '''Delete rows on sheet for which ``func(row)`` returns true.  Return number of rows deleted.\n    If sheet.defer is set and *commit* is True, remove rows immediately without deferring.\n    If undo is set to True, add an undo for deletion.'''\n    oldrows = copy(sheet.rows)\n    oldidx = sheet.cursorRowIndex\n    ndeleted = 0\n\n    newCursorRow = None   # row to re-place cursor after\n    # if commit is True, commit to delete, even if defer is True\n    if sheet.defer and not commit:\n        ndeleted = 0\n        for r in sheet.gatherBy(func, 'deleting'):\n            sheet.rowDeleted(r)\n            ndeleted += 1\n        return ndeleted\n\n    # find next non-deleted row to go to once delete has finished\n    while oldidx < len(oldrows):\n        if not func(oldrows[oldidx]):\n            newCursorRow = sheet.rows[oldidx]\n            break\n        oldidx += 1\n\n    sheet.rows.clear() # must delete from the existing rows object\n    for r in Progress(oldrows, 'deleting'):\n        if not func(r):\n            sheet.rows.append(r)\n            if r is newCursorRow:\n                sheet.cursorRowIndex = len(sheet.rows)-1\n        else:\n            try:\n                sheet.commitDeleteRow(r)\n                ndeleted += 1\n            except Exception as e:\n                vd.exceptionCaught(e)\n\n    if undo:\n        vd.addUndo(setattr, sheet, 'rows', oldrows)\n        sheet.setModified()\n\n    if ndeleted:\n        vd.status('deleted %s %s' % (ndeleted, sheet.rowtype))\n\n    return ndeleted\n\n\n@Sheet.api\ndef isDeleted(self, row):\n    'Return True if *row* has been deferred for deletion.'\n    return self.rowid(row) in self._deferredDels\n\n@Sheet.api\ndef isChanged(self, col, row):\n    'Return True if cell at *row* for *col* has been deferred for modification.'\n    try:\n        row, rowmods = self._deferredMods[self.rowid(row)]\n        newval = rowmods[col]\n        curval = col.getSourceValue(row)\n        return (newval is None and curval is not None) or (curval is None and newval is not None) or (col.type(newval) != col.type(curval))\n    except KeyError:\n        return False\n    except Exception:\n        return False\n\n@Column.api\ndef getSourceValue(col, row):\n    'For deferred sheets, return value for *row* in this *col* as it would be in the source, without any deferred modifications applied.'\n    return Column.calcValue(col, row)\n\n\n@Sheet.api\ndef commitAdds(self):\n    'Return the number of rows that have been marked for deferred add-row. Clear the marking.'\n    nadded = 0\n    nerrors = 0\n    for row in self._deferredAdds.values():\n        try:\n            self.commitAddRow(row)\n            nadded += 1\n        except Exception as e:\n            vd.exceptionCaught(e)\n            nerrors += 1\n\n    if nadded or nerrors:\n        vd.status(f'added {nadded} {self.rowtype} ({nerrors} errors)')\n\n    self._deferredAdds.clear()\n    return nadded\n\n\n@Sheet.api\ndef commitMods(sheet):\n    'Commit all deferred modifications (that are not from rows added or deleted in this commit.  Return number of cells changed.'\n    _, deferredmods, _ = sheet.getDeferredChanges()\n\n    nmods = 0\n    for row, rowmods in deferredmods.values():\n        for col, val in rowmods.items():\n            try:\n                col.putValue(row, val)\n                nmods += 1\n            except Exception as e:\n                vd.exceptionCaught(e)\n\n    sheet._deferredMods.clear()\n    return nmods\n\n@Sheet.api\ndef commitDeletes(self):\n    'Return the number of rows that have been marked for deletion. Delete the rows. Clear the marking.'\n    ndeleted = self.deleteBy(self.isDeleted, commit=True, undo=False)\n\n    if ndeleted:\n        vd.status('deleted %s %s' % (ndeleted, self.rowtype))\n    return ndeleted\n\n\n@Sheet.api\ndef commitAddRow(self, row):\n    'To commit an added row.  Override per sheet type.'\n\n\n@Sheet.api\ndef commitDeleteRow(self, row):\n    'To commit a deleted row.  Override per sheet type.'\n\n\n@asyncthread\n@Sheet.api\ndef putChanges(sheet):\n    'Commit changes to ``sheet.source``. May overwrite source completely without confirmation.  Overridable.'\n    sheet.commitAdds()\n    sheet.commitMods()\n    sheet.commitDeletes()\n\n    # clear after save, to ensure cstr (in commit()) is aware of deletes\n    sheet._deferredDels.clear()\n\n@Sheet.api\ndef getDeferredChanges(sheet):\n    '''Return changes made to deferred sheets that have not been committed, as a tuple (added_rows, modified_rows, deleted_rows).  *modified_rows* does not include any *added_rows* or *deleted_rows*.\n\n        - *added_rows*: { rowid:row, ... }\n        - *modified_rows*: { rowid: (row, { col:val, ... }), ... }\n        - *deleted_rows*: { rowid: row }\n\n    *rowid* is from ``Sheet.rowid(row)``. *col* is an actual Column object.\n    '''\n\n    # only report mods if they aren't adds or deletes\n    mods = {} # [rowid] -> (row, dict(col:val))\n    for row, rowmods in sheet._deferredMods.values():\n        rowid = sheet.rowid(row)\n        if rowid not in sheet._deferredAdds and rowid not in sheet._deferredDels:\n            mods[rowid] = (row, {col:val for col, val in rowmods.items() if sheet.isChanged(col, row)})\n\n    return sheet._deferredAdds, mods, sheet._deferredDels\n\n@Sheet.api\ndef changestr(self, adds, mods, deletes):\n    'Return a str for status that outlines how many deferred changes are going to be committed.'\n    cstr = ''\n    if adds:\n        cstr += 'add %d %s' % (len(adds), self.rowtype)\n\n    if mods:\n        if cstr: cstr += ' and '\n        cstr += 'change %d values' % sum(len(rowmods) for row, rowmods in mods.values())\n\n    if deletes:\n        if cstr: cstr += ' and '\n        cstr += 'delete %d %s' % (len(deletes), self.rowtype)\n\n    return cstr\n\n@Sheet.api\ndef commit(sheet, *rows):\n    'Commit all deferred changes on this sheet to original ``sheet.source``.'\n    if not sheet.defer:\n        vd.fail('commit-sheet is not enabled for this sheet type')\n\n    adds, mods, deletes = sheet.getDeferredChanges()\n    cstr = sheet.changestr(adds, mods, deletes)\n\n    vd.confirmOverwrite(sheet.rootSheet().source, 'really ' + cstr + '? ')\n\n    sheet.putChanges()\n    sheet.hasBeenModified = False\n\n\n@Sheet.api\ndef new_rows(sheet, n):\n    return [sheet.newRow() for i in range(n)]\n\nSheet.addCommand('a', 'add-row', 'addRows([newRow()], index=cursorRowIndex); cursorDown(1)', 'append a blank row')\nSheet.addCommand('ga', 'add-rows', 'n=int(input(\"add # rows: \", value=1)); addRows(new_rows(n), index=cursorRowIndex); cursorDown(1)', 'append N blank rows')\nSheet.addCommand('za', 'addcol-new', 'addColumnAtCursor(SettableColumn(input(\"column name: \")))', 'append an empty column')\nSheet.addCommand('gza', 'addcol-bulk', 'addColumnAtCursor(*(SettableColumn() for c in range(int(input(\"add columns: \")))))', 'append N empty columns')\n\nSheet.addCommand('zCtrl+S', 'commit-sheet', 'commit()', 'commit changes back to source.  not undoable!')\n\nvd.addMenuItems('''\n    File > Save > changes to source > commit-sheet\n    Row > Add > one row\n    Row > Add > multiple rows\n    Column > Add column > empty > one column > addcol-new\n    Column > Add column > empty > multiple columns > addcol-bulk\n''')\n"
  },
  {
    "path": "visidata/motd.py",
    "content": "'''motd: display a low-priority random Message Of The Day on startup.\n\nCall `domotd()` to spawn an asyncthread to read and/or fetch\na motd file from a url.  The file may be text or unheaded TSV, with one message per row in the first column.\n\nAny Exception ends the thread silently.\n\noptions.motd_url may be set to another URL, or empty string to disable entirely.\n'''\n\nimport random\n\nfrom visidata import options, asyncsingle, vd, VisiData\n\nvd.option('motd_url', 'https://visidata.org/motd-'+vd.version, 'source of randomized startup messages', sheettype=None)\n\n\nvd.motd = 'Support VisiData: https://github.com/sponsors/saulpw'\n\n@VisiData.api\n@asyncsingle\ndef domotd(vd):\n    try:\n        if options.motd_url:\n            p = vd.urlcache(options.motd_url, days=1)\n            line = random.choice(list(p))\n            vd.motd = line.split('\\t')[0]\n    except Exception:\n        pass\n    vd.status(vd.motd, priority=-1)\n"
  },
  {
    "path": "visidata/mouse.py",
    "content": "import curses\n\nfrom visidata import vd, VisiData, BaseSheet, Sheet, AttrDict\n\n\n# registry of mouse events.  cleared before every draw cycle.\nvd.mousereg = []  # list of AttrDict(y=, x=, h=, w=, buttonfuncs=dict)\n\n# sheet mouse position for current mouse event\nBaseSheet.init('mouseX', int)\nBaseSheet.init('mouseY', int)\n\n\n@VisiData.after\ndef initCurses(vd):\n    curses.MOUSE_ALL = 0xffffffff\n    curses.mouseEvents = {}\n\n    if not vd.enableMouse(bool(vd.options.mouse_interval)):\n        return\n\n    curses.def_prog_mode()\n    curses.mouseinterval(vd.options.mouse_interval)\n\n    for k in dir(curses):\n        if k.startswith('BUTTON') or k in ('REPORT_MOUSE_POSITION', '2097152'):\n            curses.mouseEvents[getattr(curses, k)] = k\n\n\n@VisiData.api\ndef enableMouse(vd, b:bool) -> bool:  #2913 #2851\n    'Call curses.mousemask(all if b else 0) only if available.  Return True if mouse enabled.'\n    if not hasattr(curses, 'mousemask'):\n        return False\n    mm, _ = curses.mousemask(getattr(curses, 'MOUSE_ALL', 0xffffffff) if b else 0)\n    return bool(mm)\n\n\n@VisiData.after\ndef clearCaches(vd):\n    vd.mousereg = []\n\n\n@VisiData.api\ndef onMouse(vd, scr, x, y, w, h, **kwargs):\n    px, py = vd.getrootxy(scr)\n    e = AttrDict(x=x+px, y=y+py, w=w, h=h, buttonfuncs=kwargs)\n    vd.mousereg.append(e)\n\n\n@VisiData.api\ndef getMouse(vd, _x, _y, button):\n    for reg in vd.mousereg[::-1]:\n        if reg.x <= _x < reg.x+reg.w and reg.y <= _y < reg.y+reg.h and button in reg.buttonfuncs:\n            return reg.buttonfuncs[button]\n\n\n@VisiData.api\ndef parseMouse(vd, **kwargs):\n    'Return list of mouse interactions (clicktype, y, x, name, scr) for curses screens given in kwargs as name:scr.'\n\n    devid, x, y, z, bstate = curses.getmouse()\n\n    clicktype = ''\n    if bstate & curses.BUTTON_CTRL:\n        clicktype += \"Ctrl+\"\n        bstate &= ~curses.BUTTON_CTRL\n    if bstate & curses.BUTTON_ALT:\n        clicktype += \"Alt+\"\n        bstate &= ~curses.BUTTON_ALT\n    if bstate & curses.BUTTON_SHIFT:\n        clicktype += \"Shift+\"\n        bstate &= ~curses.BUTTON_SHIFT\n\n    keystroke = clicktype + curses.mouseEvents.get(bstate, str(bstate))\n    ret = AttrDict(keystroke=keystroke, y=y, x=x, found=[])\n    for winname, winscr in kwargs.items():\n        if not winscr:\n            continue\n        px, py = vd.getrootxy(winscr)\n        mh, mw = winscr.getmaxyx()\n        if py <= y < py+mh and px <= x < px+mw:\n            ret.found.append(winname)\n#            vd.debug(f'{keystroke} at ({x-px}, {y-py}) in window {winname} {winscr}')\n\n    return ret\n\n\n@VisiData.api\ndef handleMouse(vd, sheet):\n    try:\n        vd.keystrokes = ''\n        pct = vd.windowConfig['pct']\n        topPaneActive = ((vd.activePane == 2 and pct < 0)  or (vd.activePane == 1 and pct > 0))\n        bottomPaneActive = ((vd.activePane == 1 and pct < 0)  or (vd.activePane == 2 and pct > 0))\n        r = None\n        r = vd.parseMouse(top=vd.winTop, bot=vd.winBottom, menu=vd.scrMenu)\n        if (bottomPaneActive and 'top' in r.found) or (topPaneActive and 'bot' in r.found):\n            vd.activePane = 1 if vd.activePane == 2 else 2\n            sheet = vd.activeSheet\n\n        f = vd.getMouse(r.x, r.y, r.keystroke)\n        winx, winy = vd.getrootxy(sheet._scr)\n        sheet.mouseX, sheet.mouseY = r.x-winx, r.y-winy\n        if f:\n            if isinstance(f, str):\n                if f.startswith('onclick'):\n                    if '://' in f:\n                        vd.launchBrowser(f[8:])\n                    else:\n                        sheet.execCommand(f[8:])\n                else:\n                    for cmd in f.split():\n                        sheet.execCommand(cmd)\n            else:\n                f(r.y, r.x, r.keystroke)\n\n            vd.keystrokes = vd.prettykeys(r.keystroke)\n            return ''  #  handled\n    except curses.error:\n        pass\n\n    return r.keystroke if r else ''\n\n\n@Sheet.api\ndef visibleColAtX(sheet, x):\n    for vcolidx, (colx, w) in sheet._visibleColLayout.items():\n        if colx <= x <= colx+w:\n            return vcolidx\n\n\n@Sheet.api\ndef visibleRowAtY(sheet, y):\n    for rowidx, (rowy, h) in sheet._rowLayout.items():\n        if rowy <= y <= rowy+h-1:\n            return rowidx\n\n\n@Sheet.command('BUTTON1_PRESSED', 'go-mouse', 'set cursor to row and column where mouse was clicked')\ndef go_mouse(sheet):\n    if sheet.mouseY == sheet.windowHeight-1:\n        return\n    ridx = sheet.visibleRowAtY(sheet.mouseY)\n    if ridx is not None:\n        sheet.cursorRowIndex = ridx\n    cidx = sheet.visibleColAtX(sheet.mouseX)\n    if cidx is not None:\n        sheet.cursorVisibleColIndex = cidx\n\nSheet.addCommand(None, 'scroll-mouse', 'sheet.topRowIndex=cursorRowIndex-mouseY+1', 'scroll to mouse cursor location')\n\nSheet.addCommand('ScrollUp', 'scroll-up', 'cursorDown(options.scroll_incr); sheet.topRowIndex += options.scroll_incr', 'scroll up by one row increment')\nSheet.addCommand('ScrollDown', 'scroll-down', 'cursorDown(-options.scroll_incr); sheet.topRowIndex -= options.scroll_incr', 'scroll down by one row increment')\n"
  },
  {
    "path": "visidata/movement.py",
    "content": "import itertools\n\nfrom visidata import vd, BaseSheet, Sheet, Column, Progress, ALT, asyncthread\n\n\ndef rotateRange(n, idx, reverse=False):\n    'Wraps an iter starting from idx. Yields indices from idx+1 to n and then 0 to idx, or from idx-1 to 0 and n-1 to idx.'\n    if n == 0: return []\n    if reverse:\n        rng = range(idx-1, -1, -1)\n        rng2 = range(n-1, idx-1, -1)\n    else:\n        rng = range(idx+1, n)\n        rng2 = range(0, idx+1)\n\n    wrapped = False\n    with Progress(total=n) as prog:\n        for r in itertools.chain(rng, rng2):\n            prog.addProgress(1)\n            if not wrapped and r in rng2:\n                vd.status('search wrapped')\n                wrapped = True\n            yield r\n\n@Sheet.api\ndef pageLeft(self):\n    '''Redraw page one screen to the left.\n\n    Note: keep the column cursor in the same general relative position:\n\n     - if it is on the furthest right column, then it should stay on the\n       furthest right column if possible\n\n     - likewise on the left or in the middle\n\n    So really both the `leftIndex` and the `cursorIndex` should move in\n    tandem until things are correct.'''\n\n    targetIdx = self.leftVisibleColIndex  # for rightmost column\n    firstNonKeyVisibleColIndex = self.visibleCols.index(self.nonKeyVisibleCols[0])\n    while self.rightVisibleColIndex != targetIdx and self.leftVisibleColIndex > firstNonKeyVisibleColIndex:\n        self.cursorVisibleColIndex -= 1\n        self.leftVisibleColIndex -= 1\n        self.calcColLayout()  # recompute rightVisibleColIndex\n\n    # in case that rightmost column is last column, try to squeeze maximum real estate from screen\n    if self.rightVisibleColIndex == self.nVisibleCols-1:\n        # try to move further left while right column is still full width\n        while self.leftVisibleColIndex > 0:\n            rightcol = self.visibleCols[self.rightVisibleColIndex]\n            if (rightcol.width or 0) > self._visibleColLayout[self.rightVisibleColIndex][1]:\n                # went too far\n                self.cursorVisibleColIndex += 1\n                self.leftVisibleColIndex += 1\n                break\n            else:\n                self.cursorVisibleColIndex -= 1\n                self.leftVisibleColIndex -= 1\n                self.calcColLayout()  # recompute rightVisibleColIndex\n\n\n@Sheet.api\n@asyncthread\ndef moveToNextRow(vs, func, reverse=False, msg='no different value up this column'):\n    'Move cursor to next (prev if reverse) row for which func returns True.'\n    rng = range(vs.cursorRowIndex-1, -1, -1) if reverse else range(vs.cursorRowIndex+1, vs.nRows)\n    found = False\n    with Progress(total=len(vs.rows)) as prog:\n        for i in rng:\n            prog.addProgress(1)\n            try:\n                if func(vs.rows[i]):\n                    vs.cursorRowIndex = i\n                    found = True\n                    break\n            except Exception:\n                pass\n\n    if not found:\n        vd.status(msg)\n\n\n@Column.property\ndef visibleWidth(self):\n    'Width of column as is displayed in terminal'\n    vcolidx = self.sheet.visibleCols.index(self)\n    if vcolidx in self.sheet._visibleColLayout:\n        w = self.sheet._visibleColLayout[vcolidx][1]\n    else:  #this case should never happen in normal use\n        #the width can be inaccurate if the column is not at x=0\n        w = self.sheet.calcSingleColLayout(vcolidx)\n    return w\n\n\nSheet.addCommand(None, 'go-left',  'cursorRight(-1)', 'go left', replay=False)\nSheet.addCommand(None, 'go-down',  'cursorDown(+1)', 'go down', replay=False)\nSheet.addCommand(None, 'go-up',    'cursorDown(-1)', 'go up', replay=False)\nSheet.addCommand(None, 'go-right', 'cursorRight(+1)', 'go right', replay=False)\nSheet.addCommand(None, 'go-pagedown', 'cursorDown(nScreenRows-1); sheet.topRowIndex = bottomRowIndex', 'scroll one page forward', replay=False)\nSheet.addCommand(None, 'go-pageup', 'cursorDown(-nScreenRows+1); sheet.bottomRowIndex = topRowIndex', 'scroll one page backward', replay=False)\nSheet.addCommand(None, 'go-pagedown-half', 'n=nScreenRows//2; cursorDown(n); sheet.topRowIndex += n', 'scroll half page forward', replay=False)\nSheet.addCommand(None, 'go-pageup-half', 'n=-nScreenRows//2; cursorDown(n); sheet.topRowIndex += n', 'scroll half page backward', replay=False)\n\nSheet.addCommand(None, 'go-leftmost', 'sheet.cursorVisibleColIndex = sheet.leftVisibleColIndex = 0', 'go all the way to the left of sheet')\nSheet.addCommand(None, 'go-top', 'sheet.cursorRowIndex = sheet.topRowIndex = 0', 'go all the way to the top of sheet')\nSheet.addCommand(None, 'go-bottom', 'sheet.cursorRowIndex = sheet.bottomRowIndex = len(rows)-1', 'go all the way to the bottom of sheet')\nSheet.addCommand(None, 'go-rightmost', 'sheet.leftVisibleColIndex = len(visibleCols)-1; pageLeft(); sheet.cursorVisibleColIndex = len(visibleCols)-1', 'go all the way to the right of sheet')\n\nSheet.addCommand(None, 'go-screen-top', 'sheet.cursorRowIndex = sheet.topRowIndex', 'go to the first row visible on screen')\nSheet.addCommand(None, 'go-screen-middle', 'sheet.cursorRowIndex = (sheet.topRowIndex+sheet.bottomRowIndex)//2', 'go to the middle row visible on screen')\nSheet.addCommand(None, 'go-screen-bottom', 'sheet.cursorRowIndex = sheet.bottomRowIndex', 'go to the last row visible on screen')\n\nSheet.addCommand('zr', 'go-row-number', 'sheet.cursorRowIndex = int(input(\"move to row number: \"))', 'go to the given row number (0-based)')\n\n\nSheet.addCommand('<', 'go-prev-value', 'moveToNextRow(lambda row,sheet=sheet,col=cursorCol,val=cursorTypedValue: col.getTypedValue(row) != val, reverse=True, msg=\"no different value up this column\")', 'go up current column to next value')\nSheet.addCommand('>', 'go-next-value', 'moveToNextRow(lambda row,sheet=sheet,col=cursorCol,val=cursorTypedValue: col.getTypedValue(row) != val, msg=\"no different value down this column\")', 'go down current column to next value')\nSheet.addCommand('{', 'go-prev-selected', 'moveToNextRow(lambda row,sheet=sheet: sheet.isSelected(row), reverse=True, msg=\"no previous selected row\")', 'go up current column to previous selected row')\nSheet.addCommand('}', 'go-next-selected', 'moveToNextRow(lambda row,sheet=sheet: sheet.isSelected(row), msg=\"no next selected row\") ', 'go down current column to next selected row')\n\nSheet.addCommand('z<', 'go-prev-null', 'moveToNextRow(lambda row,col=cursorCol,isnull=isNullFunc(): isnull(col.getValue(row)), reverse=True, msg=\"no null up this column\")', 'go up current column to next null value')\nSheet.addCommand('z>', 'go-next-null', 'moveToNextRow(lambda row,col=cursorCol,isnull=isNullFunc(): isnull(col.getValue(row)), msg=\"no null down this column\")', 'go down current column to next null value')\n\nfor i in range(1, 11):\n    BaseSheet.addCommand(f'Alt+{str(i)[-1]}', f'jump-sheet-{i}', f'vd.push(*(list(s for s in allSheets if s.shortcut==str({i})) or fail(\"no sheet\")))', f'jump to sheet {i}')\n\nfor i in range(11, 21):\n    BaseSheet.addCommand('', f'jump-sheet-{i}', f'vd.push(*(list(s for s in allSheets if s.shortcut==str({i})) or fail(\"no sheet\")))', f'jump to sheet {i}')\n\nBaseSheet.bindkey('Left', 'go-left')\nBaseSheet.bindkey('Down', 'go-down')\nBaseSheet.bindkey('Up', 'go-up')\nBaseSheet.bindkey('Right', 'go-right')\nBaseSheet.bindkey('PgDn', 'go-pagedown')\nBaseSheet.bindkey('PgUp', 'go-pageup')\n\nBaseSheet.bindkey('gLeft', 'go-leftmost'),\nBaseSheet.bindkey('gRight', 'go-rightmost'),\nBaseSheet.bindkey('gUp', 'go-top'),\nBaseSheet.bindkey('gDown', 'go-bottom'),\nBaseSheet.bindkey('Home', 'go-top')\nBaseSheet.bindkey('End', 'go-bottom')\n\nSheet.bindkey('BUTTON1_CLICKED', 'go-mouse')\nSheet.bindkey('BUTTON3_PRESSED', 'go-mouse')\n\n# vim-style scrolling with the 'z' prefix\nSheet.addCommand('zz', 'scroll-middle', 'sheet.topRowIndex = cursorRowIndex-int(nScreenRows/2)', 'scroll current row to center of screen')\n\nSheet.addCommand('Ctrl+Right', 'go-right-page', 'sheet.cursorVisibleColIndex = sheet.leftVisibleColIndex = rightVisibleColIndex', 'scroll cursor one page right', replay=False)\nSheet.addCommand('Ctrl+Left', 'go-left-page', 'pageLeft()', 'scroll cursor one page left', replay=False)\nSheet.addCommand(None, 'scroll-left', 'sheet.cursorVisibleColIndex -= options.scroll_incr', 'scroll left by one column increment')\nSheet.addCommand(None, 'scroll-right', 'sheet.cursorVisibleColIndex += options.scroll_incr', 'scroll right by one column increment')\nSheet.addCommand(None, 'scroll-leftmost', 'sheet.leftVisibleColIndex = cursorVisibleColIndex', 'scroll sheet to leftmost column')\nSheet.addCommand(None, 'scroll-rightmost', 'tmp = cursorVisibleColIndex; pageLeft(); sheet.cursorVisibleColIndex = tmp', 'scroll sheet to rightmost column')\n\nSheet.addCommand('zl', 'scroll-cells-right', 'cursorCol.hoffset += cursorCol.visibleWidth-2', 'scroll display of current column to the right')\nSheet.addCommand('zh', 'scroll-cells-left', 'cursorCol.hoffset -= cursorCol.visibleWidth-2', 'scroll display of current column to the left')\nSheet.addCommand('gzl', 'scroll-cells-rightmost', 'cursorCol.hoffset = -cursorCol.visibleWidth+2', 'scroll display of current column to the end')\nSheet.addCommand('gzh', 'scroll-cells-leftmost', 'cursorCol.hoffset = 0', 'scroll display of current column to the beginning')\n\nSheet.addCommand('zj', 'scroll-cells-down', 'cursorCol.voffset += 1 if cursorCol.height > 1 else fail(\"multiline column needed for scrolling\")', 'scroll display of current column down one line')\nSheet.addCommand('zk', 'scroll-cells-up', 'cursorCol.voffset -= 1 if cursorCol.height > 1 else fail(\"multiline column needed for scrolling\")', 'scroll display of current column up one line')\nSheet.addCommand('gzj', 'scroll-cells-bottom', 'cursorCol.voffset = -1', 'scroll display of current column to the bottom')\nSheet.addCommand('gzk', 'scroll-cells-top', 'cursorCol.voffset = 0', 'scroll display of current column to the top')\n\nSheet.addCommand(None, 'go-end',  'sheet.cursorRowIndex = len(rows)-1; sheet.cursorVisibleColIndex = len(visibleCols)-1', 'go to last row and last column')\nSheet.addCommand(None, 'go-home', 'sheet.topRowIndex = sheet.cursorRowIndex = 0; sheet.leftVisibleColIndex = sheet.cursorVisibleColIndex = 0', 'go to first row and first column')\n\nBaseSheet.bindkey('Ctrl+ScrollUp', 'scroll-left')\nBaseSheet.bindkey('Ctrl+ScrollDown', 'scroll-right')\n\nBaseSheet.bindkey('zUp', 'scroll-up')\nBaseSheet.bindkey('zDown', 'scroll-down')\nBaseSheet.bindkey('zLeft', 'scroll-left')\nBaseSheet.bindkey('zRight', 'scroll-right')\n\n# vim-like keybindings\n\nBaseSheet.bindkey('h', 'go-left'),\nBaseSheet.bindkey('j', 'go-down'),\nBaseSheet.bindkey('k', 'go-up'),\nBaseSheet.bindkey('l', 'go-right'),\nBaseSheet.bindkey('Ctrl+F', 'go-pagedown'),\nBaseSheet.bindkey('Ctrl+B', 'go-pageup'),\nBaseSheet.bindkey('gg', 'go-top'),\nBaseSheet.bindkey('G',  'go-bottom'),\nBaseSheet.bindkey('gj', 'go-bottom'),\nBaseSheet.bindkey('gk', 'go-top'),\nBaseSheet.bindkey('gh', 'go-leftmost'),\nBaseSheet.bindkey('gl', 'go-rightmost')\n\nBaseSheet.addCommand('Ctrl+^', 'jump-prev', 'vd.activeStack[1:] or fail(\"no previous sheet\"); vd.push(vd.activeStack[1])', 'jump to previous sheet in this pane')\nBaseSheet.addCommand('gCtrl+^', 'jump-first', 'vd.push(vd.activeStack[-1])', 'jump to first sheet')\n\nBaseSheet.addCommand('BUTTON1_RELEASED', 'no-op', 'pass', 'do nothing')\n\nBaseSheet.addCommand(None, 'mouse-enable', 'b = vd.enableMouse(True); status(\"mouse \"+(\"ON\" if b else \"OFF\"))', 'enable mouse events')\nBaseSheet.addCommand(None, 'mouse-disable', 'b = vd.enableMouse(False); status(\"mouse \"+(\"ON\" if b else \"OFF\"))', 'disable mouse events')\n\n\nvd.addGlobals({'rotateRange': rotateRange})\n\nvd.addMenuItems('''\n    View > Other sheet > previous sheet > jump-prev\n    View > Other sheet > first sheet > jump-first\n    Row > Goto > top > go-top\n    Row > Goto > bottom > go-bottom\n    Row > Goto > screen top > go-screen-top\n    Row > Goto > screen bottom > go-screen-bottom\n    Row > Goto > screen middle > go-screen-middle\n    Row > Goto > previous > page > go-pageup\n    Row > Goto > previous > half page > go-pageup-half\n    Row > Goto > previous > null > go-prev-null\n    Row > Goto > previous > value > go-prev-value\n    Row > Goto > previous > selected > go-prev-selected\n    Row > Goto > next > page > go-pagedown\n    Row > Goto > next > half page > go-pagedown-half\n    Row > Goto > next > null > go-next-null\n    Row > Goto > next > value > go-next-value\n    Row > Goto > next > selected > go-next-selected\n    Row > Goto > by number > go-row-number\n''')\n"
  },
  {
    "path": "visidata/optionssheet.py",
    "content": "import re\n\nimport visidata\nfrom visidata import vd, VisiData, BaseSheet, Sheet, Column, AttrColumn, CellColorizer, Option\n\n\n@BaseSheet.lazy_property\ndef optionsSheet(sheet):\n    return OptionsSheet(sheet.name+\"_options\", source=sheet)\n\n@VisiData.lazy_property\ndef globalOptionsSheet(vd):\n    return OptionsSheet('global_options', source='global')\n\n\n@VisiData.api\nclass OptionsSheet(Sheet):\n    _rowtype = Option  # rowdef: Option\n    rowtype = 'options'\n    precious = False\n    columns = (\n        Column('option', getter=lambda col,row: row.name),\n        Column('module', getter=lambda col,row: row.module, disp_expert=1),\n        Column('value',\n            getter=lambda col,row: col.sheet.diffOption(row.name),\n            setter=lambda col,row,val: vd.options.set(row.name, val, col.sheet.source)\n            ),\n        Column('default', getter=lambda col,row: vd.options.getdefault(row.name)),\n        Column('description', width=40, getter=lambda col,row: vd.options._get(row.name, 'default').helpstr),\n        AttrColumn('replayable', disp_expert=1),\n    )\n    colorizers = [\n        CellColorizer(3, None, lambda s,c,r,v: v.value if r and c in s.columns[2:4] and r.name.startswith('color_') else None),\n    ]\n    nKeys = 2\n\n    @property\n    def guide(self):\n        if self.source == 'global':\n            r = '# Global Options\\nThis is a list of global option settings.'\n        else:\n            r = '# Sheet Options\\nThis is a list of option settings specifically for the current sheet.'\n\n        r += f'\\n\\n- `e` to edit/toggle the current option value'\n        r += '\\n- `d` to restore option to builtin default'\n        r += '\\n- `z Ctrl+S` to save option overrides to config file'\n        return r\n\n    def diffOption(self, optname):\n        return vd.options.getonly(optname, self.source, '')\n\n    def editOption(self, row):\n        currentValue = vd.options.getobj(row.name, self.source)\n        vd.addUndo(vd.options.set, row.name, currentValue, self.source)\n        if isinstance(row.value, bool):\n            vd.options.set(row.name, not currentValue, self.source)\n        else:\n            helpstr = f'# options.{self.cursorRow.name}'\n            opt = vd.options._get(self.cursorRow.name, 'default')\n            if opt.helpstr:\n                x = getattr(vd, 'help_'+opt.helpstr, opt.helpstr or '')\n                helpstr += (x or '').strip()\n            if opt.extrahelp:\n                helpstr += '\\n'+opt.extrahelp.strip()\n            valcolidx = self.visibleCols.index(self.column(self.valueColName))\n            v = self.editCell(valcolidx, value=currentValue, help=helpstr)\n            vd.options.set(row.name, v, self.source)\n\n    @property\n    def valueColName(self):\n        return 'global_value' if self.source == 'global' else 'sheet_value'\n\n    def beforeLoad(self):\n        super().beforeLoad()\n        self.columns[2].name = self.valueColName\n\n    def iterload(self):\n        for k in vd.options.keys():\n            v = vd.options._get(k)\n            if v.cli_only:\n                continue\n            if v.sheettype in [None, BaseSheet]:\n                yield v\n            elif self.source != 'global' and v.sheettype in self.source.superclasses():\n                yield v\n\n    def newRow(self):\n        vd.fail('adding rows to the options sheet is not supported.')\n\n\nBaseSheet.addCommand('O', 'options-global', 'vd.push(vd.globalOptionsSheet)', 'open Options Sheet: edit global options (apply to all sheets)')\n\nBaseSheet.addCommand('zO', 'options-sheet', 'vd.push(sheet.optionsSheet)', 'open Options Sheet: edit sheet options (apply to current sheet only)')\n\n@OptionsSheet.api\ndef commit(sheet, *rows):\n    'Save option overrides to config file.'\n    p = visidata.Path(vd.options.config)\n    configlines = [re.sub(r'\\s*=\\s*', '=', L, count=1) for L in p] if p.exists() else []\n\n    newlines = []\n    for row in sheet.rows:\n        val = sheet.diffOption(row.name)\n        if val != '' and val != vd.options.getdefault(row.name):\n            line = f'options.{row.name}={repr(val)}'\n            if line not in configlines:\n                newlines.append(line)\n\n    if not newlines:\n        vd.fail('no new options to save')\n\n    vd.confirm(f'save {len(newlines)} options to {p}? ')\n\n    with open(str(p), mode='a') as fp:\n        for line in newlines:\n            print(line, file=fp)\n\n    vd.status(f'saved {len(newlines)} options to {p}')\n\n\nOptionsSheet.addCommand('zCtrl+S', 'commit-sheet', 'commit()', 'save option overrides to config file')\nOptionsSheet.addCommand('d', 'unset-option', 'options.unset(cursorRow.name, str(source))', 'remove option override for this context')\nOptionsSheet.addCommand(None, 'edit-option', 'editOption(cursorRow)', 'edit option at current row')\nOptionsSheet.bindkey('e', 'edit-option')\nOptionsSheet.bindkey('Enter', 'edit-option')\n\nvd.addMenuItems('''\n    File > Options > all sheets > options-global\n    File > Options > this sheet > options-sheet\n''')\n"
  },
  {
    "path": "visidata/path.py",
    "content": "import os\nimport os.path\nimport sys\nimport io\nimport codecs\nimport pathlib\nfrom urllib.parse import urlparse, urlunparse\nfrom functools import wraps, lru_cache\n\nfrom visidata import vd\nfrom visidata import VisiData, Progress\n\nvd.help_encoding = '''Common Encodings:\n\n- `utf-8`: Unicode (ASCII compatible, most common)\n- `utf-8-sig`: Unicode as above, but saves/skips leading BOM\n- `ascii`: 7-bit ASCII\n- `latin1`: also known as `iso-8859-1`\n- `cp437`: original IBM PC character set\n- `shift_jis`: Japanese\n\nSee [:onclick https://docs.python.org/3/library/codecs.html#standard-encodings]https://docs.python.org/3/library/codecs.html#standard-encodings[/]\n'''\n\nvd.help_encoding_errors = '''Encoding Error Handlers:\n\n- `strict`: raise error\n- `ignore`: discard\n- `replace`: replacement marker\n- `backslashreplace`: use \"\\\\uxxxxxx\"\n- `surrogateescape`: use surrogate characters\n\nSee [:onclick https://docs.python.org/3/library/codecs.html#error-handlers]https://docs.python.org/3/library/codecs.html#error-handlers[/]\n'''\n\nvd.option('encoding', 'utf-8-sig', 'encoding passed to codecs.open when reading a file', replay=True, help=vd.help_encoding)\nvd.option('encoding_errors', 'surrogateescape', 'encoding_errors passed to codecs.open', replay=True, help=vd.help_encoding_errors)\n\n@VisiData.api\ndef pkg_resources_files(vd, package):\n    '''\n    Returns a Traversable object (Path-like), based on the location of the package.\n    importlib.resources.files exists in Python >= 3.9; use importlib_resources for the rest.\n    '''\n    try:\n        from importlib.resources import files\n    except ImportError: #1968\n        from importlib_resources import files\n    return files(package)\n\n@lru_cache()\ndef vstat(path, force=False):\n    try:\n        return os.stat(path)\n    except Exception as e:\n        return None\n\ndef filesize(path):\n    if hasattr(path, 'filesize') and path.filesize is not None:\n        return path.filesize\n    if hasattr(path, 'is_url') and path.is_url():\n        return 0\n    if hasattr(path, 'has_fp') and path.has_fp():\n        return 0\n    st = path.stat() # vstat(path)\n    return st and st.st_size\n\ndef modtime(path):\n    st = path.stat()\n    return st and st.st_mtime\n\n\n# from https://stackoverflow.com/questions/55889474/convert-io-stringio-to-io-bytesio\nclass BytesIOWrapper(io.BufferedReader):\n    \"\"\"Wrap a buffered bytes stream over TextIOBase string stream.\"\"\"\n\n    def __init__(self, text_io_buffer, encoding=None, errors=None, **kwargs):\n        super(BytesIOWrapper, self).__init__(text_io_buffer, **kwargs)\n        self.encoding = encoding or text_io_buffer.encoding or vd.options.encoding\n        self.errors = errors or text_io_buffer.errors or vd.options.encoding_errors\n\n    def _encoding_call(self, method_name, *args, **kwargs):\n        raw_method = getattr(self.raw, method_name)\n        val = raw_method(*args, **kwargs)\n        return val.encode(self.encoding, errors=self.errors)\n\n    def read(self, size=-1):\n        return self._encoding_call('read', size)\n\n    def read1(self, size=-1):\n        return self._encoding_call('read1', size)\n\n    def peek(self, size=-1):\n        return self._encoding_call('peek', size)\n\n\nclass FileProgress:\n    'Open file in binary mode and track read() progress.'\n    def __init__(self, path, fp, mode='r', **kwargs):\n        self.path = path\n        self.fp = fp\n        self.prog = None\n        if 'r' in mode:\n            gerund = 'reading'\n            self.prog = Progress(gerund=gerund, total=filesize(path))\n        elif 'w' in mode:\n            gerund = 'writing'\n            self.prog = Progress(gerund=gerund)\n        else:\n            gerund = 'nothing'\n\n        # track Progress on original fp\n        self.fp_orig_read = self.fp.read\n        self.fp_orig_readline = self.fp.readline\n        self.fp_orig_close = self.fp.close\n\n        self.fp.read = self.read\n        self.fp.close = self.close\n\n        if self.prog:\n            self.prog.__enter__()\n\n    def close(self, *args, **kwargs):\n        if self.prog:\n            self.prog.__exit__(None, None, None)\n            self.prog = None\n        return self.fp_orig_close(*args, **kwargs)\n\n    def read(self, size=-1):\n        r = self.fp_orig_read(size)\n        if self.prog:\n            if r:\n                self.prog.addProgress(len(r))\n        return r\n\n    def readline(self, size=-1):\n        r = self.fp_orig_readline(size)\n        if self.prog:\n            self.prog.addProgress(len(r))\n        return r\n\n    def __getattr__(self, k):\n        return getattr(self.fp, k)\n\n    def __enter__(self):\n        self.fp.__enter__()\n        return self\n\n    def __next__(self):\n        r = next(self.fp)\n        self.prog.addProgress(len(r))\n        return r\n\n    def __iter__(self):\n        if not self.prog:\n            yield from self.fp\n        else:\n            for line in self.fp:\n                self.prog.addProgress(len(line))\n                yield line\n\n    def __exit__(self, type, value, tb):\n        return self.fp.__exit__(type, value, tb)\n\n\nclass Path(os.PathLike):\n    'File and path-handling class, modeled on `pathlib.Path`.'\n    def __init__(self, given, fp=None, fptext=None, lines=None, filesize=None):\n        # Resolve pathname shell variables and ~userdir\n        self.given = os.path.expandvars(os.path.expanduser(str(given)))\n        self.fptext = fptext\n        self.fp = fp\n        self.lines = lines or []  # shared among all RepeatFile instances\n        self.filesize = filesize\n        self.rfile = None\n\n    @property\n    def name(self):\n        'Full filename including extensions. Same as pathlib.Path.name.'\n        if self._given == '.':\n            return self._path.absolute().name\n        return self._path.name\n\n    @property\n    def given(self):\n        'The path as given to the constructor.'\n        return self._given\n\n    @given.setter\n    def given(self, given):\n        self._given = given\n        if isinstance(given, os.PathLike):\n            self._path = given\n        else:\n            self._path = pathlib.Path(given)\n\n        self.ext = self.suffix[1:]\n        if self.suffix and self.suffix != '.':  #1450  don't make this a oneliner; [:-0] doesn't work  #2887\n            self.base_stem = self._path.name[:-len(self.suffix)]\n        elif self._given == '.':  #1768\n            self.base_stem = self._path.absolute().name\n        else:\n            self.base_stem = self._path.name\n\n        # check if file is compressed\n        if self.suffix in ['.gz', '.bz2', '.xz', '.lzma', '.zst']:\n            self.compression = self.ext\n            uncompressedpath = Path(self.given[:-len(self.suffix)])  # strip suffix\n            self.base_stem = uncompressedpath.base_stem\n            self.ext = uncompressedpath.ext\n        else:\n            self.compression = None\n\n    @property\n    def options(self):\n        return vd.OptionsObject(vd._options, obj=self)\n\n    def __getattr__(self, k):\n        if hasattr(self.__dict__, k):\n            r = getattr(self.__dict__, k)\n        else:\n            if self.__dict__.get('_path', None) is not None:\n                r = getattr(self._path, k)\n            else:\n                raise AttributeError(k)\n        if isinstance(r, pathlib.Path):\n            return Path(r)\n        return r\n\n    def __fspath__(self):\n        return self._path.__fspath__()\n\n    def __lt__(self, a):\n        if isinstance(a, Path):\n            return self._path.__lt__(a._path)\n        return self._path.__lt__(a)\n\n    def __truediv__(self, a):\n        return Path(self._path.__truediv__(a))\n\n    def has_fp(self):\n        'Return True if this is a virtual Path to an already open file.'\n        return bool(self.fp or self.fptext)\n\n    def open(self, mode='rt', encoding=None, encoding_errors=None, newline=None):\n        if 'b' in mode:\n            return self.open_bytes(mode)\n\n        return self.open_text(mode=mode, encoding=encoding, encoding_errors=encoding_errors, newline=newline)\n\n    def open_bytes(self, mode='rb'):\n        'Open the file pointed by this path and return a file object in binary mode.'\n        if self.rfile:\n            raise ValueError('a RepeatFile holds text and cannot be reopened in binary mode')\n\n        if 'b' not in mode:\n            mode += 'b'\n\n        if self.given == '-':\n            if 'r' in mode:\n                return os.fdopen(vd._stdin.fileno(), 'rb')\n            elif 'w' in mode or 'a' in mode:\n                # convert 'a' to 'w' for stdout: https://bugs.python.org/issue27805\n                return os.dup(vd._stdout.fileno())\n            else:\n                vd.error('invalid mode \"%s\" for Path.open()' % mode)\n                return sys.stderr\n\n        return self._open(mode=mode)\n\n    def open_text(self, mode='rt', encoding=None, encoding_errors=None, newline=None):\n        'Open path in text mode, using options.encoding and options.encoding_errors.  Return open file-pointer or file-pointer-like.'\n        # rfile makes a single-access fp reusable\n\n        if 't' not in mode:\n            mode += 't'\n\n        if self.rfile:\n            return self.rfile.reopen()\n\n        if self.fp and not self.fptext:\n            self.fptext = codecs.iterdecode(self.fp,\n                                            encoding=encoding or vd.options.encoding,\n                                            errors=encoding_errors or vd.options.encoding_errors)\n\n        if self.fptext:\n            self.rfile = RepeatFile(self.fptext)\n            return self.rfile\n\n        if self.given == '-':\n            if 'r' in mode:\n                return vd._stdin\n            elif 'w' in mode or 'a' in mode:\n                # convert 'a' to 'w' for stdout: https://bugs.python.org/issue27805\n                return open(os.dup(vd._stdout.fileno()), 'wt')\n            else:\n                vd.error('invalid mode \"%s\" for Path.open()' % mode)\n                return sys.stderr\n\n        return self._open(mode=mode, encoding=encoding or vd.options.encoding, errors=vd.options.encoding_errors, newline=newline)\n\n    @wraps(pathlib.Path.read_text)\n    def read_text(self, *args, **kwargs):\n        'Open the file in text mode and return its entire decoded contents.'\n        if 'encoding' not in kwargs:\n            kwargs['encoding'] = vd.options.encoding\n        if 'errors' not in kwargs:\n            kwargs['errors'] = kwargs.get('encoding_errors', vd.options.encoding_errors)\n\n        if self.lines:\n            return RepeatFile(self.lines).read()\n        elif self.fp:\n            return self.fp.read()\n        elif self.fptext:\n            return self.fptext.read()\n        else:\n            return self._path.read_text(*args, **kwargs)\n\n    @wraps(pathlib.Path.open)\n    def _open(self, *args, **kwargs):\n        if self.fp:\n            return FileProgress(self, fp=self.fp, **kwargs)\n\n        if self.fptext:\n            return FileProgress(self, fp=BytesIOWrapper(self.fptext), **kwargs)\n\n        path = self\n\n        if self.compression == 'gz':\n            import gzip\n            zopen = gzip.open\n        elif self.compression == 'bz2':\n            import bz2\n            zopen = bz2.open\n        elif self.compression in ['xz', 'lzma']:\n            import lzma\n            zopen = lzma.open\n        elif self.compression == 'zst':\n            zstandard = vd.importExternal('zstandard')\n            zopen = zstandard.open\n        else:\n            return FileProgress(path, fp=self._path.open(*args, **kwargs), **kwargs)\n\n        if 'w' in kwargs.get('mode', ''):\n            #1159 FileProgress on the outside to close properly when writing\n            return FileProgress(path, fp=zopen(path, **kwargs), **kwargs)\n\n        #1255 FileProgress on the inside to track uncompressed bytes when reading\n        return zopen(FileProgress(path, fp=open(path, mode='rb'), **kwargs), **kwargs)\n\n    def __iter__(self):\n        with self.open(encoding=vd.options.encoding) as fd:\n            for line in fd:\n                yield line.rstrip('\\n')\n\n    def read_bytes(self):\n        'Return the entire binary contents of the pointed-to file as a bytes object.'\n        with self.open(mode='rb') as fp:\n            return fp.read()\n\n    @wraps(pathlib.Path.is_fifo)\n    def is_fifo(self):\n        'Return True if the path is a fifo.'\n        return self._path.is_fifo()\n\n    def is_local(self):\n        'Return True if self.filename refers to a file on the local disk.'\n        return not bool(self.is_url()) and not bool(self.fp) and not bool(self.fptext)\n\n    def is_url(self):\n        'Return True if the given path appears to be a URL.'\n        return '://' in self.given\n\n    def __str__(self):\n        if self.is_url():\n            return self.given\n        return str(self._path)\n\n    @wraps(pathlib.Path.stat)\n    @lru_cache()\n    def stat(self, force=False):\n        'Return Path.stat() if relevant.'\n        try:\n            if not self.is_url():\n                return self._path.stat()\n        except Exception as e:\n            return None\n\n    @wraps(pathlib.Path.exists)\n    def exists(self):\n        'Return True if the path can be opened.'\n        if self.has_fp() or self.is_url():\n            return True\n        return self._path.exists()\n\n    @property\n    def scheme(self):\n        'The URL scheme component, if path is a URL.'\n        if self.is_url():\n            return urlparse(self.given).scheme\n\n    def iterdir(self):  #2188\n        'Yield Path objects of the directory contents.'\n        return (Path(p) for p in self._path.iterdir())\n\n    def with_name(self, name):\n        'Return a sibling Path with *name* as a filename in the same directory.'\n        if self.is_url():\n            urlparts = list(urlparse(self.given))\n            urlparts[2] = '/'.join(list(Path(urlparts[2]).parts[1:-1]) + [name])\n            return Path(urlunparse(urlparts))\n        else:\n            return Path(self._from_parsed_parts(self._drv, self._root, list(self.parts[:-1]) + [name]))\n\n\nclass RepeatFile:\n    '''Lazy file-like object that can be read and line-seeked more than once from memory.'''\n\n    def __init__(self, iter_lines, lines=None):\n        self.iter_lines = iter_lines\n        self.lines = lines if lines is not None else []\n        self.iter = RepeatFileIter(self)\n        self.encoding = None  #2829\n        self.errors = None\n\n    def __enter__(self):\n        '''Returns a new independent file-like object, sharing the same line cache.'''\n        return self.reopen()\n\n    def __exit__(self, a,b,c):\n        pass\n\n    def reopen(self):\n        'Return copy of file-like with internal iterator reset.'\n        return RepeatFile(self.iter_lines, lines=self.lines)\n\n    def read(self, n=None):\n        '''Returns a string or bytes object. Unlike the standard read() function, when *n* is given, more than *n* characters/bytes can be returned, and often will.'''\n        if n is None:\n            n = 10**12  # some too huge number\n        r = []\n        size = 0\n        output_type = str; eol = '\\n'; joiner = ''\n        while not r or size < n:\n            try:\n                s = next(self.iter)\n                if not r and isinstance(s, bytes):\n                    output_type = bytes; eol = b'\\n'; joiner = b''\n                assert isinstance(s, output_type), (s, output_type)\n                r.append(s)\n                r.append(eol)\n                size += len(s) + len(eol)\n            except StopIteration:\n                break  # end of file\n        return joiner.join(r)\n\n    def write(self, s):\n        return self.iter_lines.write(s)\n\n    def tell(self):\n        '''Tells the current position as an opaque line marker.'''\n        return self.iter.nextIndex\n\n    def seek(self, offset, whence=io.SEEK_SET):\n        '''Seek to an already seen opaque line position marker only.'''\n        if whence != io.SEEK_SET and offset != 0:\n            if whence == io.SEEK_CUR:\n                raise io.UnsupportedOperation(\"can't do nonzero cur-relative seeks\")\n            elif whence == io.SEEK_END:\n                raise io.UnsupportedOperation(\"can't do nonzero end-relative seeks\")\n            else:\n                raise ValueError('invalid whence (%s, should be %s, %s or %s)' % (whence, io.SEEK_SET, io.SEEK_CUR, io.SEEK_END))\n        self.iter.nextIndex = offset\n\n    def readline(self, size=-1):\n        if size != -1:\n            vd.error('RepeatFile does not support limited line length')\n        try:\n            return next(self.iter)\n        except StopIteration:\n            return ''\n\n    def __iter__(self):\n        return RepeatFileIter(self)\n\n    def __next__(self):\n        return next(self.iter)\n\n    def readable(self):\n        return True\n\n    def writable(self):\n        return False\n\n    def seekable(self):\n        return True\n\n    def read1(self, n=-1):\n        return self.read(n)\n\n    def peek(self, n=-1):\n        pos = self.tell()\n        data = self.read(n)\n        self.seek(pos)\n        return data\n\n    def exists(self):\n        return True\n\n\nclass RepeatFileIter:\n    def __init__(self, rf):\n        self.rf = rf\n        self.nextIndex = 0\n\n    def __iter__(self):\n        return RepeatFileIter(self.rf)\n\n    def __next__(self):\n        if self.nextIndex < len(self.rf.lines):\n            r = self.rf.lines[self.nextIndex]\n        elif self.rf.iter_lines:\n            try:\n                r = next(self.rf.iter_lines)\n                self.rf.lines.append(r)\n            except StopIteration:\n                self.rf.iter_lines = None\n                raise\n        else:\n            raise StopIteration()\n\n\n        self.nextIndex += 1\n        return r\n\n\nvd.addGlobals(RepeatFile=RepeatFile,\n              Path=Path,\n              modtime=modtime,\n              filesize=filesize,\n              vstat=vstat)\n"
  },
  {
    "path": "visidata/pivot.py",
    "content": "import collections\nfrom copy import copy\nfrom visidata import ScopedSetattr, Column, Sheet, asyncthread, Progress, forward, wrapply, INPROGRESS\nfrom visidata import vlen, vd, date, setitem, anytype\nimport visidata\n\n\n# discrete_keys = tuple of formatted discrete keys that group the row\n# numeric_key is a range\n# sourcerows is list(all source.rows in group)\n# pivotrows is { pivot_values: list(source.rows in group with pivot_values) }\nPivotGroupRow = collections.namedtuple('PivotGroupRow', 'discrete_keys numeric_key sourcerows pivotrows'.split())\n\ndef makePivot(source, groupByCols, pivotCols):\n    return PivotSheet('',\n            groupByCols=groupByCols,\n            pivotCols=pivotCols,\n            source=source)\n\ndef makeErrorKey(col):\n    if col.type is date:\n        return date.min # date('2000-01-01')\n    else:\n        return col.type()\n\ndef formatRange(col, numeric_key):\n    a, b = numeric_key\n    nankey = makeErrorKey(col)\n    if b is None:\n        return a\n    if a is nankey and b is nankey:\n        return '#ERR'\n    elif a == b:\n        return col.format(a)\n    return ' - '.join(col.format(x) for x in numeric_key)\n\n\nclass RangeColumn(Column):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.formatter = 'range'\n\n    def formatter_range(self, fmtstr):\n        return self._format\n\n    def _format(self, typedval, *args, **kwargs):\n        if typedval is None:\n            return None\n        return formatRange(self.origcol, typedval)\n\n\nclass AggrColumn(Column):\n    def calcValue(col, row):\n        if col.sheet.loading:\n            return visidata.INPROGRESS\n        return col.aggregator.aggregate(col.origCol, row.sourcerows)\n\n\ndef makeAggrColumn(aggcol, aggregator):\n    aggname = '%s_%s' % (aggcol.name, aggregator.name)\n\n    return AggrColumn(aggname,\n                  type=aggregator.type or aggcol.type,\n                  fmtstr=aggcol.fmtstr,\n                  formatter=aggcol.formatter,\n                  displayer=aggcol.displayer,\n                  origCol=aggcol,\n                  aggregator=aggregator)\n\n\nclass PivotSheet(Sheet):\n    'Summarize key columns in pivot table and display as new sheet.'\n    rowtype = 'grouped rows'  # rowdef: PivotGroupRow\n\n    def __init__(self, *names, groupByCols=[], pivotCols=[], **kwargs):\n        super().__init__(*names,\n                pivotCols=pivotCols, # whose values become columns\n                groupByCols=groupByCols,  # whose values become rows\n                **kwargs)\n\n    def isNumericRange(self, col):\n        return vd.isNumeric(col) and self.source.options.numeric_binning\n\n    def resetCols(self):\n        super().resetCols()\n\n        # add key columns (grouped by)\n        for colnum, c in enumerate(self.groupByCols):\n            if c in self.pivotCols:\n                continue\n\n            if self.isNumericRange(c):\n                newcol = RangeColumn(c.name, origcol=c, width=c.width and c.width*2, getter=lambda c,r: r.numeric_key)\n            else:\n                newcol = Column(c.name, width=c.width, fmtstr=c.fmtstr,\n                                  type=c.type if c.type in vd.typemap else anytype,\n                                  origcol=c,\n                                  getter=lambda col,row,i=colnum: row.discrete_keys[i],\n                                  setter=lambda col,row,val,i=colnum: setitem(row.discrete_keys, i, val) and col.origcol.setValues(row.sourcerows, val))\n\n            self.addColumn(newcol)\n\n        self.setKeys(self.columns)\n\n    def openRow(self, row):\n        'open sheet of source rows aggregated in current pivot row'\n        vs = copy(self.source)\n        vs.name += \"_%s\"%\"+\".join(map(str, row.discrete_keys))\n        vs.rows = sum(row.pivotrows.values(), [])\n        return vs\n\n    def openCell(self, col, row):\n        'open sheet of source rows aggregated in current pivot cell'\n        vs = copy(self.source)\n        vs.name += \"_%s\"%col.aggvalue\n        vs.rows = row.pivotrows.get(col.aggvalue, [])\n        return vs\n\n    def loader(self):\n        # two different threads for better interactive display\n        vd.sync(self.addAggregateCols(),\n                self.groupRows())\n\n    @asyncthread\n    def addAggregateCols(self):\n        # add aggregated columns\n        aggcols = {  # [Column] -> list(aggregators)\n            sourcecol: sourcecol.aggregators\n                for sourcecol in self.source.visibleCols\n                    if sourcecol.aggregators\n        } or {  # if pivot given but no aggregators specified\n            sourcecol: [vd.aggregators[\"count\"]]\n                for sourcecol in self.pivotCols\n        }\n\n        if not aggcols:\n#            self.addColumn(ColumnAttr('count', 'sourcerows', type=vlen))\n            return\n\n        # aggregators without pivot\n        if not self.pivotCols:\n            for aggcol, aggregatorlist in aggcols.items():\n                for aggregator in aggregatorlist:\n                    c = makeAggrColumn(aggcol, aggregator)\n                    self.addColumn(c)\n\n        # add pivoted columns\n        for pivotcol in self.pivotCols:\n            allValues = set()\n            for value in Progress(pivotcol.getValues(self.source.rows), 'pivoting', total=len(self.source.rows)):\n                if value in allValues:\n                    continue\n                allValues.add(value)\n\n                if len(self.pivotCols) > 1:\n                    valname = '%s_%s' % (pivotcol.name, value)\n                else:\n                    valname = str(value)\n\n                for aggcol, aggregatorlist in aggcols.items():\n                    for aggregator in aggregatorlist:\n                        if len(aggcols) > 1: #  if more than one aggregated column, include that column name in the new column name\n                            aggname = '%s_%s' % (aggcol.name, aggregator.name)\n                        else:\n                            aggname = aggregator.name\n\n\n                        if len(aggregatorlist) > 1 or len(aggcols) > 1:\n                            colname = '%s_%s' % (aggname, valname)\n                            if not self.name:\n                                self.name = self.source.name+'_pivot_'+''.join(c.name for c in self.pivotCols)\n                        else:\n                            colname = valname\n                            if not self.name:\n                                self.name = self.source.name+'_pivot_'+''.join(c.name for c in self.pivotCols) + '_' + aggname\n\n                        c = Column(colname,\n                                    type=aggregator.type or aggcol.type,\n                                    aggvalue=value,\n                                    getter=lambda col,row,aggcol=aggcol,agg=aggregator: agg.aggregate(aggcol, row.pivotrows.get(col.aggvalue, [])))\n                        self.addColumn(c)\n\n#                    if aggregator.name != 'count':  # already have count above\n#                        c = Column('Total_' + aggcol.name,\n#                                    type=aggregator.type or aggcol.type,\n#                                    getter=lambda col,row,aggcol=aggcol,agg=aggregator: agg.aggregate(aggcol, row.sourcerows))\n#                        self.addColumn(c)\n\n    @asyncthread\n    def groupRows(self, rowfunc=None):\n      with ScopedSetattr(self, 'loading', True):\n        self.rows = []\n\n        discreteCols = [c for c in self.groupByCols if not self.isNumericRange(c)]\n\n        numericCols = [c for c in self.groupByCols if self.isNumericRange(c)]\n\n        if len(numericCols) > 1:\n            vd.fail('only one numeric column can be binned')\n\n        numericBins = []\n        degenerateBinning = False\n        if numericCols:\n            nbins = self.source.options.histogram_bins or int(len(self.source.rows) ** (1./2))\n            vals = tuple(numericCols[0].getValues(self.source.rows))\n            minval = min(vals) if vals else 0\n            maxval = max(vals) if vals else 0\n            width = (maxval - minval)/nbins\n\n            if width == 0:\n                if vals:\n                    # only one value\n                    numericBins = [(minval, maxval)]\n                else:\n                    numericBins = []\n            elif (numericCols[0].type in (int, vlen) and nbins > (maxval - minval)) or (width == 1):\n                # (more bins than int vals) or (if bins are of width 1), just use the vals as bins\n                degenerateBinning = True\n                numericBins = [(val, val) for val in sorted(set(vals))]\n                nbins = len(numericBins)\n            else:\n                numericBins = [(minval+width*i, minval+width*(i+1)) for i in range(nbins)]\n\n        # group rows by their keys (groupByCols), and separate by their pivot values (pivotCols)\n        groups = {}  # [formattedDiscreteKeys] -> (numericGroupRows:dict(formattedNumericKeyRange -> PivotGroupRow), groupRow:PivotGroupRow)  # groupRow is main/error row\n\n        for sourcerow in self.source.iterrows('grouping'):\n            discreteKeys = list(forward(origcol.getTypedValue(sourcerow)) for origcol in discreteCols)\n\n            # wrapply will pass-through a key-able TypedWrapper\n            formattedDiscreteKeys = tuple(wrapply(c.format, v) for v, c in zip(discreteKeys, discreteCols))\n\n            numericGroupRows, groupRow = groups.get(formattedDiscreteKeys, (None, None))\n            if numericGroupRows is None:\n                # add new group rows\n                numericGroupRows = {formatRange(numericCols[0], numRange): PivotGroupRow(discreteKeys, numRange, [], {}) for numRange in numericBins}\n                groups[formattedDiscreteKeys] = (numericGroupRows, None)\n                for r in numericGroupRows.values():\n                    self.addRow(r)\n\n            # find the grouprow this sourcerow belongs in, by numericbin\n            if numericCols:\n                try:\n                    val = numericCols[0].getValue(sourcerow)\n                    val = wrapply(numericCols[0].type, val)\n                    if not val:\n                        groupRow = numericGroupRows.get(str(val), None)\n                    else:\n                        if not width:\n                            binidx = 0\n                        elif degenerateBinning:\n                            # in degenerate binning, each val has its own bin\n                            binidx = numericBins.index((val, val))\n                        else:\n                            binidx = int((val-minval)//width)\n                        groupRow = numericGroupRows[formatRange(numericCols[0], numericBins[min(binidx, nbins-1)])]\n                except Exception as e:\n                    vd.exceptionCaught(e)\n\n            # add the main bin if no numeric bin (error, or no numeric cols)\n            if groupRow is None:\n                if numericCols:\n                    groupRow = PivotGroupRow(discreteKeys, val, [], {})\n                    numericGroupRows[str(val)] = groupRow\n                else:\n                    groupRow = PivotGroupRow(discreteKeys, (0, 0), [], {})\n                    groups[formattedDiscreteKeys] = (numericGroupRows, groupRow)\n                self.addRow(groupRow)\n\n            # add the sourcerow to its all bin\n            groupRow.sourcerows.append(sourcerow)\n\n            # separate by pivot value\n            for col in self.pivotCols:\n                varval = col.getTypedValue(sourcerow)\n                matchingRows = groupRow.pivotrows.get(varval)\n                if matchingRows is None:\n                    matchingRows = groupRow.pivotrows[varval] = []\n                matchingRows.append(sourcerow)\n\n            if rowfunc:\n                rowfunc(groupRow)\n\n    def afterLoad(self):\n        super().afterLoad()\n\n        # automatically add cache to all columns now that everything is binned\n        for c in self.nonKeyVisibleCols:\n            if isinstance(c, AggrColumn):\n                c.setCache(True)\n\n\n@PivotSheet.api\ndef addcol_aggr(sheet, col):\n    hasattr(col, 'origCol') or vd.fail('not an aggregation column')\n    for agg_choice in vd.chooseAggregators():\n        agg_or_list = vd.aggregators[agg_choice]\n        aggs = agg_or_list if isinstance(agg_or_list, list) else [agg_or_list]\n        for agg in aggs:\n            sheet.addColumnAtCursor(makeAggrColumn(col.origCol, vd.aggregators[agg]))\n\n\nSheet.addCommand('W', 'pivot', 'vd.push(makePivot(sheet, keyCols, [cursorCol]))', 'open Pivot Table: group rows by key column and summarize current column')\n\nPivotSheet.addCommand('', 'addcol-aggr', 'addcol_aggr(cursorCol)', 'add aggregation column from source of current column')\n\nvd.addGlobals(\n    makePivot=makePivot,\n    PivotSheet=PivotSheet,\n    PivotGroupRow=PivotGroupRow,\n)\n\nvd.addMenuItems('''\n    Column > Add column > aggregator > addcol-aggr\n    Data > Pivot > pivot\n''')\n"
  },
  {
    "path": "visidata/plugins.py",
    "content": "import os.path\nimport os\nimport sys\nimport re\nimport shutil\nimport importlib\nimport subprocess\nimport urllib.error\n\nfrom visidata import VisiData, vd, Path, CellColorizer, Sheet, AttrDict, ItemColumn, Column, Progress, ExpectedException, BaseSheet, asyncthread\n\n\nvd.option('plugins_autoload', True, 'do not autoload plugins if False')\n\n\n@VisiData.property\ndef pluginConfig(self):\n    return Path(os.path.join(vd.options.visidata_dir, \"plugins\", \"__init__.py\"))\n\n\n@VisiData.property\ndef pluginConfigLines(self):\n    return Path(self.pluginConfig).open(mode='r', encoding='utf-8').readlines()\n\ndef _plugin_import_name(self, plugin):\n    if not plugin.url:\n        return 'visidata.plugins.'+plugin.name\n    if 'git+' in plugin.url:\n        return plugin.name\n    return \"plugins.\"+plugin.name\n\n\n@VisiData.api\ndef enablePlugin(vd, plugin:str):\n    with vd.pluginConfig.open(mode='a', encoding='utf-8') as fprc:\n        print(f'import {plugin}', file=fprc)\n        importlib.import_module(plugin)\n        vd.status(f'{plugin} plugin enabled')\n\n@VisiData.api\ndef removePlugin(vd, plugin:str):\n    path = vd.pluginConfig\n    pathbackup = path.with_suffix(path.suffix + '.bak')\n    try:\n        shutil.copyfile(path, pathbackup)\n\n        # Copy lines from the backup init file into its replacement, skipping lines that import the removed plugin.\n        #\n        # By matching from the start of a line through a word boundary, we avoid removing commented lines or inadvertently removing\n        # plugins with similar names.\n\n        r = re.compile(f'^import {plugin}\\\\W')\n        nonimports = [line for line in vd.pluginConfigLines if not r.match(line)]\n        if len(nonimports) == len(vd.pluginConfigLines):\n            vd.fail(\"plugin not in import list\")\n\n        with path.open(mode='w', encoding='utf-8') as new:\n            new.writelines(nonimports)\n\n        sys.modules.pop(plugin)\n        importlib.invalidate_caches()\n        vd.warning(f'\"{plugin}\" plugin removed')\n    except FileNotFoundError:\n        vd.debug(\"no {vd.pluginConfig} found\")\n\n\n@VisiData.lazy_property\ndef pluginsSheet(p):\n    return PluginsSheet('plugins')\n\n\nclass PluginsSheet(Sheet):\n    rowtype = \"plugins\"  # rowdef: AttrDict of json dict\n    colorizers = [\n            CellColorizer(3, 'color_working', lambda s,c,r,v: r and r.installed)\n    ]\n    columns = [\n        ItemColumn('name'),\n        ItemColumn('installed', width=8),\n        ItemColumn('description', width=60),\n    ]\n    nKeys = 1\n    def iterload(self):\n        import pkgutil\n        import ast\n        # enumerate installed plugins\n        for name, mod in sys.modules.items():\n            if name.startswith(('visidata.plugins.', 'visidata.experimental.')):\n                yield AttrDict(name=name, # '.'.join(name.split('.')[2:]),\n                               description=getattr(mod, '__description__', mod.__doc__),\n                               installed=getattr(mod, '__version__', 'yes'),\n                               maintainer=getattr(mod, '__author__', None))\n\n\nBaseSheet.addCommand(None, 'open-plugins', 'vd.push(vd.pluginsSheet)', 'Open Plugins Sheet to manage supported plugins')\n\nPluginsSheet.addCommand('a', 'add-plugin', 'enablePlugin(cursorRow.name); reload_rows()', 'Enable current plugin by adding to imports')\nPluginsSheet.addCommand('d', 'delete-plugin', 'removePlugin(cursorRow.name); reload_rows()', 'Disable current plugin by removing from imports')\n\nvd.addMenuItems('''\n    System > Plugins Sheet > open-plugins\n''')\n"
  },
  {
    "path": "visidata/pyobj.py",
    "content": "from typing import Mapping\nimport inspect\nimport math\nimport numbers\n\nfrom visidata import vd, asyncthread, deduceType, anytype\nfrom visidata import Sheet, Column, VisiData, ColumnItem, TableSheet, BaseSheet, Progress, ColumnAttr, SuspendCurses, TextSheet, setitem, WritableColumn\nimport visidata\n\nvd.option('visibility', 0, 'visibility level')\nvd.option('default_sample_size', 100, 'number of rows to sample for regex.split (0=all)', replay=True)\nvd.option('fmt_expand_dict', '%s.%s', 'format str to use for names of columns expanded from dict (colname, key)') #1457\nvd.option('fmt_expand_list', '%s[%s]', 'format str to use for names of columns expanded from list (colname, index)')\n\n\nclass PythonSheet(Sheet):\n    def openRow(self, row):\n        return PyobjSheet(\"%s[%s]\" % (self.name, self.rowname(row)), source=row)\n\nclass PythonAtomSheet(PythonSheet):\n    '''a sheet to display one Python object that does not offer deeper inspection,\n        like None, a bool, or an int/float'''\n    rowtype = 'object'  #singular, because it should only ever hold one\n    columns = [\n        Column('value', getter=lambda col,row: row,\n                        setter=lambda c,r,v: None)\n    ]\n    def loader(self):\n        self.rows = [self.source]\n        self.column('value').type = deduceType(self.source)\n\n    def openRow(self, row):\n        vd.fail('cannot dive deeper on this object')\n    def openCell(self, col, row, rowidx=None):\n        vd.fail('cannot dive deeper on this object')\n    def openRowPyobj(self, rowidx):\n        vd.fail('cannot dive deeper on this object')\n    def openCellPyobj(self, col, rowidx):\n        vd.fail('cannot dive deeper on this object')\n    def newRow(self):\n        vd.fail('adding rows to this sheet is not supported')\n\n#### generic list/dict/object browsing\n@VisiData.global_api\ndef view(vd, obj):\n    vd.run(PyobjSheet(getattr(obj, '__name__', ''), source=obj))\n\n\ndef PyobjColumns(obj):\n    'Return columns for each public attribute on an object.'\n    cols = []\n    for k in dir(obj):\n        coltype = anytype\n        try:\n            if k.startswith('_') or callable(getattr(obj, k)):\n                continue\n            coltype = deduceType(getattr(obj, k))\n        except AttributeError: #2631 attributes like formatted_help can raise AttributeError\n            pass\n        cols.append(ColumnAttr(k, type=coltype))\n    return cols\n\ndef AttrColumns(attrnames):\n    'Return column names for all elements of list `attrnames`.'\n    return [ColumnAttr(name) for name in attrnames]\n\n\ndef SheetList(*names, **kwargs):\n    'Creates a Sheet from a list of homogeneous dicts or namedtuples.'\n\n    src = kwargs.get('source', None)\n    if not src:\n        vd.warning('no content in %s' % names)\n        return Sheet(*names, **kwargs)\n\n    if isinstance(src[0], Mapping):\n        return ListOfDictSheet(*names, **kwargs)\n    elif isinstance(src[0], tuple):\n        if getattr(src[0], '_fields', None):  # looks like a namedtuple\n            return ListOfNamedTupleSheet(*names, **kwargs)\n\n    # simple list\n    return ListOfPyobjSheet(*names, **kwargs)\n\nclass ListOfPyobjSheet(PythonSheet):\n    rowtype = 'python objects'\n    def loader(self):\n        self.rows = self.source\n        self.columns = []\n        self.addColumn(Column(self.name,\n                               getter=lambda col,row: row,\n                               setter=lambda col,row,val: setitem(col.sheet.source, col.sheet.source.index(row), val)))\n\n        for c in PyobjColumns(self.rows[0]):\n            self.addColumn(c)\n\n        if len(self.columns) > 1:\n            self.columns[0].width = 0\n\n# rowdef: dict\nclass ListOfDictSheet(PythonSheet):\n    rowtype = 'dicts'\n    def reload(self):\n        self.columns = []\n        self._knownKeys = set()\n        for row in self.source:\n            for k in row:\n                if k not in self._knownKeys:\n                    self.addColumn(ColumnItem(k, k, type=deduceType(row[k])))\n                    self._knownKeys.add(k)\n        self.rows = self.source\n\n# rowdef: namedtuple\nclass ListOfNamedTupleSheet(PythonSheet):\n    rowtype = 'namedtuples'\n    def reload(self):\n        self.columns = []\n        for i, k in enumerate(self.source[0]._fields):\n            self.addColumn(ColumnItem(k, i))\n        self.rows = self.source\n\n\n# rowdef: PyObj\nclass SheetNamedTuple(PythonSheet):\n    'a single namedtuple, with key and value columns'\n    rowtype = 'values'\n    columns = [ColumnItem('name', 0), ColumnItem('value', 1)]\n\n    def __init__(self, *names, **kwargs):\n        super().__init__(*names, **kwargs)\n\n    def reload(self):\n        self.rows = list(zip(self.source._fields, self.source))\n\n    def openRow(self, row):\n        return PyobjSheet(f'{self.name}.{row[0]}', source=row[1])\n\n\n# source is dict\nclass SheetDict(PythonSheet):\n    rowtype = 'items'  # rowdef: keys\n    columns = [\n        Column('key'),\n        Column('value', getter=lambda c,r: c.sheet.source[r],\n                        setter=lambda c,r,v: setitem(c.sheet.source, r, v)),\n    ]\n    nKeys = 1\n    def reload(self):\n        self.rows = list(self.source.keys())\n\n    def openRow(self, row):\n        return PyobjSheet(f'{self.name}.{row}', source=self.source[row])\n\n\nclass ColumnSourceAttr(WritableColumn):\n    'Use row as attribute name on sheet source'\n    def calcValue(self, attrname):\n        return getattr(self.sheet.source, attrname)\n    def setValue(self, attrname, value, setModified=True):\n        ret = setattr(self.sheet.source, attrname, value)\n        if setModified:\n            self.sheet.setModified()\n        return ret\n\ndef docstring(obj, attr):\n    v = getattr(obj, attr)\n    if callable(v):\n        return v.__doc__\n    return '<type %s>' % type(v).__name__\n\n# rowdef: attrname\nclass PyobjSheet(PythonSheet):\n    'Generic Sheet for any Python object.  Return specialized subclasses for lists of objects, namedtuples, and dicts.'\n    rowtype = 'attributes'\n    columns = [\n        Column('attribute'),\n        ColumnSourceAttr('value'),\n        Column('signature', width=0, getter=lambda c,r: dict(inspect.signature(getattr(c.sheet.source, r)).parameters)),\n        Column('docstring', getter=lambda c,r: docstring(c.sheet.source, r))\n    ]\n    nKeys = 1\n\n    def __new__(cls, *names, **kwargs):\n        'Return Sheet object of appropriate type for given sources in `args`.'\n        pyobj=kwargs.get('source', object())\n        if pyobj is None:\n            return None\n        elif isinstance(pyobj, numbers.Number):\n            return PythonAtomSheet(*names, source=pyobj)\n        elif isinstance(pyobj, (list, tuple)):\n            if getattr(pyobj, '_fields', None):  # list of namedtuple\n                return SheetNamedTuple(*names, **kwargs)\n            else:\n                return SheetList(*names, **kwargs)\n        elif isinstance(pyobj, set):\n            return ListOfPyobjSheet(*names, source=list(pyobj))\n        elif isinstance(pyobj, Mapping):\n            return SheetDict(*names, **kwargs)\n        elif isinstance(pyobj, str):\n            return TextSheet(*names, source=pyobj.splitlines())\n        elif isinstance(pyobj, bytes):\n            return TextSheet(*names, source=pyobj.decode(cls.options.encoding).splitlines())\n        elif isinstance(pyobj, object):\n            obj = super().__new__(cls)  #, *names, **kwargs)\n            return obj\n        else:\n            vd.error(\"cannot load '%s' as pyobj\" % type(pyobj).__name__)\n\n    def reload(self):\n        self.rows = []\n        vislevel = self.options.visibility\n        for r in dir(self.source):\n            # reading these attributes can cause distracting fail() messages\n            if r in ('onlySelectedRows', 'someSelectedRows'):\n                vd.warning(f'skipping attribute: {r}')\n                continue\n            try:\n                if vislevel <= 2 and r.startswith('__'): continue\n                if vislevel <= 1 and r.startswith('_'): continue\n                if vislevel <= 0 and callable(getattr(self.source, r)): continue\n            except Exception:\n                pass\n\n            self.addRow(r)\n\n    def openRow(self, row):\n        'dive further into Python object'\n        v = getattr(self.source, row)\n        return PyobjSheet(self.name + \".\" + str(row), source=v() if callable(v) else v)\n\n\n@TableSheet.api\ndef openRow(sheet, row, rowidx=None):\n    'Return Sheet diving into *row*.'\n    if row is None or sheet.nRows == 0: vd.fail('no row to dive into')\n    if rowidx is None:\n        k = sheet.rowname(row) or str(sheet.cursorRowIndex)\n    else:\n        k = rowidx\n\n    name = f'{sheet.name}[{k}]'\n    return TableSheet(name,\n                      rows=sheet.visibleCols,\n                      sourceRow=sheet.cursorRow,\n                      columns=[\n                        Column('column', getter=lambda c,r: r.name),\n                        Column('value', getter=lambda c,r: r.getTypedValue(c.sheet.sourceRow), setter=lambda c,r,v: r.setValue(c.sheet.sourceRow, v)),\n                      ],\n                      nKeys=1)\n\n@TableSheet.api\ndef openCell(sheet, col, row, rowidx=None):\n    'Return Sheet diving into cell at *row* in *col*.'\n    if col is None or row is None or sheet.nRows == 0: vd.fail('no cell to dive into')\n    if rowidx is None:\n        k = sheet.rowname(row) or str(sheet.cursorRowIndex)\n    else:\n        k = rowidx\n    name = f'{sheet.name}[{k}].{col.name}'\n    return PyobjSheet(name, source=col.getTypedValue(row))\n\n@Sheet.api\n@asyncthread\ndef openRows(sheet, rows):\n    for r in Progress(rows):\n        vd.push(sheet.openRow(r))\n\n    vd.sync()\n\n@Sheet.api\n@asyncthread\ndef openCells(sheet, col, rows):\n    for r in Progress(rows):\n        vd.push(openCell(col, r))\n\n    vd.sync()\n\n@TableSheet.api\ndef openRowPyobj(sheet, rowidx):\n    'Return Sheet of raw Python object of row.'\n    if sheet.nRows == 0: vd.fail('no row to dive into')\n    return PyobjSheet(\"%s[%s]\" % (sheet.name, rowidx), source=sheet.rows[rowidx])\n\n@TableSheet.api\ndef openCellPyobj(sheet, col, rowidx):\n    'Return Sheet of raw Python object of cell.'\n    if col is None or sheet.nRows == 0: vd.fail('no cell to dive into')\n    name = f'{sheet.name}[{rowidx}].{col.name}'\n    return PyobjSheet(name, source=col.getValue(sheet.rows[rowidx]))\n\n\n@BaseSheet.api\ndef inputPythonExpr(sheet):\n    def launch_repl(v, i):\n        import code\n        with SuspendCurses():\n            code.InteractiveConsole(locals=locals()).interact()\n        return v, i\n    return vd.input(\"eval: \", \"expr\", completer=visidata.CompleteExpr(), bindings={'^X': launch_repl})\n\nBaseSheet.addCommand('Ctrl+X', 'pyobj-expr', 'expr=inputPythonExpr(); vd.push(PyobjSheet(expr, source=sheet.evalExpr(expr)))', 'evaluate Python expression and open result as Python object')\nBaseSheet.addCommand('', 'exec-python', 'expr = input(\"exec: \", \"expr\", completer=CompleteExpr()); exec(expr, getGlobals(), LazyChainMap(sheet, *vd.contexts, locals=vd.getGlobals()))', 'execute Python statement with expression scope')\nBaseSheet.addCommand('gCtrl+X', 'import-python', 'modname=input(\"import: \", type=\"import_python\"); exec(\"import \"+modname, getGlobals())', 'import Python module in the global scope')\nBaseSheet.addCommand('', 'define-command', 'v=input(\"longname execstr: \"); sheet.addCommand(\"\", *v.split(\" \", maxsplit=1), \"custom defined command\") if \" \" in v else None', 'define a new command with the given longname and Python execstr')\nBaseSheet.addCommand('zCtrl+X', 'pyobj-expr-row', 'expr = input(\"eval over current row: \", \"expr\", completer=CompleteExpr()); vd.push(PyobjSheet(expr, source=evalExpr(expr, row=cursorRow)))', 'evaluate Python expression, in context of current row, and open result as Python object')\nBaseSheet.addCommand('', 'assert-expr', 'expr=inputPythonExpr(); assert eval(expr), f\"{expr} not true\"', 'eval Python expression and assert result is truthy')\nBaseSheet.addCommand('', 'assert-expr-row', 'expr=inputPythonExpr(); assert sheet.evalExpr(expr, row=cursorRow), f\"{expr} not true\"', 'eval Python expression in context of current row, and assert result is truthy')\nSheet.addCommand('', 'assert-cell', 'v=vd.input(\"expected value: \"); got=cursorCol.getDisplayValue(cursorRow); assert got == v, f\"expected {v!r} but got {got!r}\"', 'assert cursor cell display value matches expected string')\n\nSheet.addCommand('Ctrl+Y', 'pyobj-row', 'status(type(cursorRow).__name__); vd.push(openRowPyobj(cursorRowIndex))', 'open current row as Python object')\nSheet.addCommand('zCtrl+Y', 'pyobj-cell', 'status(type(cursorValue).__name__); vd.push(openCellPyobj(cursorCol, cursorRowIndex))', 'open current cell as Python object')\nBaseSheet.addCommand('gCtrl+Y', 'pyobj-sheet', 'status(type(sheet).__name__); vd.push(PyobjSheet(sheet.name+\"_sheet\", source=sheet))', 'open current sheet as Python object')\n\nSheet.addCommand('', 'open-row-basic', 'vd.push(TableSheet.openRow(sheet, cursorRow))', 'dive into current row as basic table (ignoring subsheet dive)')\nSheet.addCommand('Enter', 'open-row', 'vd.push(openRow(cursorRow)) if cursorRow is not None else vd.fail(\"no row to open\")', 'open current row with sheet-specific dive')\nSheet.addCommand('zEnter', 'open-cell', 'vd.push(openCell(cursorCol, cursorRow))', 'open sheet with copies of rows referenced in current cell')\nopenRows\nSheet.addCommand('gEnter', 'dive-selected', 'openRows(selectedRows)', 'open all selected rows')\nSheet.addCommand('gzEnter', 'dive-selected-cells', 'openCells(cursorCol, selectedRows)', 'open all selected cells')\n\nPyobjSheet.addCommand('v', 'visibility', 'sheet.options.visibility = 0 if sheet.options.visibility else 2; reload()', 'toggle show/hide for methods and hidden properties')\nPyobjSheet.addCommand('gv', 'show-hidden', 'sheet.options.visibility = 2; reload()', 'show methods and hidden properties')\nPyobjSheet.addCommand('zv', 'hide-hidden', 'sheet.options.visibility -= 1; reload()', 'hide methods and hidden properties')\n\nvd.addGlobals({\n    'PythonSheet': PythonSheet,\n    'ListOfDictSheet': ListOfDictSheet,\n    'SheetDict': SheetDict,\n    'PyobjSheet': PyobjSheet,\n    'view': view,\n})\n\nvd.addMenuItems('''\n    View > Show > public properties only > hide-hidden\n    View > Show > methods and dunder attributes > show-hidden\n    Row > Dive into > open-row\n    System > Python > import library > import-python\n    System > Python > current sheet > pyobj-sheet\n    System > Python > current row > pyobj-row\n    System > Python > current cell > pyobj-cell\n    System > Python > expression > pyobj-expr\n    System > Python > exec() > exec-python\n''')\n"
  },
  {
    "path": "visidata/rename_col.py",
    "content": "from visidata import vd, VisiData, Sheet\n\n@Sheet.api\ndef hint_rename_col(sheet):\n    if vd.cleanName(sheet.cursorCol.name) != sheet.cursorCol.name:\n        return 5, f\"[:hint]The current column can't be used in an expression because [:code]{sheet.cursorCol.name}[/] is not a valid Python identifier. [:onclick rename-col]Rename the column[/] with `^`.[/]\"\n\n\n@VisiData.api\ndef addUndoColNames(vd, cols):\n    oldnames = [(c, c.name) for c in cols]\n    def _undo():\n        for c, name in oldnames:\n            c.name = name\n    vd.addUndo(_undo)\n\n\n@Sheet.api\ndef updateColNames(sheet, rows, cols, overwrite=False):\n    vd.addUndoColNames(cols)\n    for c in cols:\n        if not c._name or overwrite:\n            c.name = \"\\n\".join(c.getFullDisplayValue(r) for r in rows)\n\n\nSheet.addCommand('^', 'rename-col', 'vd.addUndoColNames([cursorCol]); cursorCol.name = editCell(cursorVisibleColIndex, -1, value=cleanName(cursorCol.name))', 'rename current column')\nSheet.addCommand('z^', 'rename-col-selected', 'updateColNames(selectedRows or [cursorRow], [sheet.cursorCol], overwrite=True)', 'rename current column to combined contents of current cell in selected rows (or current row)')\nSheet.addCommand('g^', 'rename-cols-row', 'updateColNames(selectedRows or [cursorRow], sheet.visibleCols)', 'rename all unnamed visible columns to contents of selected rows (or current row)')\nSheet.addCommand('gz^', 'rename-cols-selected', 'updateColNames(selectedRows or [cursorRow], sheet.visibleCols, overwrite=True)', 'rename all visible columns to combined contents of selected rows (or current row)')\n\n\nvd.addMenuItems('''\n    Column > Rename > current column > rename-col\n    Column > Rename > from selected cells > current column > rename-col-selected\n    Column > Rename > from selected cells > unnamed columns > rename-cols-row\n    Column > Rename > from selected cells > all columns > rename-cols-selected\n''')\n"
  },
  {
    "path": "visidata/save.py",
    "content": "import collections\nimport os\nfrom copy import copy\n\nfrom visidata import vd\nfrom visidata import Sheet, BaseSheet, VisiData, IndexSheet, Path, Progress, TypedExceptionWrapper, TypedWrapper, UNLOADED\n\nvd.option('safe_error', '#ERR', 'error string to use while saving', replay=True)\nvd.option('save_encoding', 'utf-8', 'encoding passed to codecs.open when saving a file', replay=True, help=vd.help_encoding)\n\n@Sheet.api\ndef safe_trdict(vs, delimiter=None):\n    'returns string.translate dictionary for replacing tabs and newlines'\n    if vs.options.safety_first:\n        delim = delimiter or vs.options.delimiter\n        trdict = {\n             0: '', #  strip NUL completely\n            10: vs.options.tsv_safe_newline,  # \\n\n            13: vs.options.tsv_safe_newline,  # \\r\n        }\n        if not delim or ord(delim) in trdict:\n            vd.fail(f'cannot use delimiter {repr(delim)} with safety_first')\n        trdict[ord(delim)] = vs.options.tsv_safe_tab # \\t\n        return trdict\n    return {}\n\n\n@Sheet.api\ndef iterdispvals(sheet, *cols, format=False, delimiter=None):\n    'For each row in sheet, yield OrderedDict of values for given cols.  Values are typed if format=False, or a formatted display string if format=True.'\n    if not cols:\n        cols = sheet.visibleCols\n\n    transformers = collections.OrderedDict()  # list of transformers for each column in order\n    trdict = sheet.safe_trdict(delimiter=delimiter)\n    for col in cols:\n        transformers[col] = [ col.type ]\n        if format:\n            formatMaker = getattr(col, 'formatter_'+(col.formatter or sheet.options.disp_formatter))\n            transformers[col].append(formatMaker(col._formatdict))\n        if trdict:\n            transformers[col].append(lambda v,trdict=trdict: v.translate(trdict))\n\n    options_safe_error = sheet.options.safe_error\n    for r in sheet.iterrows('saving'):\n        dispvals = collections.OrderedDict()  # [col] -> value\n        for col, transforms in transformers.items():\n            try:\n                dispval = col.getValue(r)\n\n            except Exception as e:\n                dispval = options_safe_error or str(e)\n\n            try:\n                for t in transforms:\n                    if dispval is None or isinstance(dispval, float) and dispval != dispval:\n                        break\n                    elif isinstance(dispval, TypedExceptionWrapper):\n                        dispval = options_safe_error or str(dispval)\n                        break\n                    elif isinstance(dispval, TypedWrapper):\n                        dispval = ''\n                        break\n                    else:\n                        dispval = t(dispval)\n\n                if (dispval is None or isinstance(dispval, float) and dispval != dispval) and format:\n                    dispval = ''\n            except Exception as e:\n                dispval = str(dispval)\n\n            dispvals[col] = dispval\n\n        yield dispvals\n\n\n@Sheet.api\ndef itervals(sheet, *cols, format=False):\n    for row in sheet.iterdispvals(*cols, format=format):\n        yield [row[c] for c in cols]\n\n@BaseSheet.api\ndef getDefaultSaveName(sheet):\n    src = getattr(sheet, 'source', None)\n    if hasattr(src, 'scheme') and src.scheme:\n        return src.name\n    if isinstance(src, Path):\n        if src.given == '-':\n            return f'stdin.{sheet.options.save_filetype}'\n        if sheet.options.is_set('save_filetype', sheet):\n            # if save_filetype is over-ridden from default, use it as the extension\n            return str(src.with_suffix('')) + '.' + sheet.options.save_filetype\n        return str(src)\n    else:\n        return sheet.name+'.'+getattr(sheet, 'filetype', sheet.options.save_filetype)\n\n\n@VisiData.api\ndef saveCols(vd, cols):\n    sheet = cols[0].sheet\n    vs = copy(sheet)\n    vs.columns = list(cols)\n    vs.rows = list(sheet.rows)  # copy list to avoid conflict with rows modifications\n    if len(cols) == 1:\n        savedcoltxt = cols[0].name + ' column'\n    else:\n        savedcoltxt = '%s columns' % len(cols)\n    path = vd.inputPath('save %s to: ' % savedcoltxt, value=vs.getDefaultSaveName())\n    vd.saveSheets(path, vs)\n\n\n@VisiData.api\ndef saveSheets(vd, givenpath, *vsheets, confirm_overwrite=True):\n    '''Save all *vsheets* to *givenpath*. Async.\n    Callers should be careful not to call reload() while saveSheets is still running.\n    Use vd.sync(saveSheets) to wait for the save to finish.'''\n\n    if not vsheets: # blank tuple\n        vd.warning('no sheets to save')\n        return\n    if not givenpath.name:\n        vd.warning('no save path given')\n        return\n\n    unloaded = [ vs for vs in vsheets if vs.rows is UNLOADED ]\n    vd.sync(*vd.ensureLoaded(unloaded))\n\n    filetypes = [givenpath.ext.lower(), vd.options.save_filetype.lower()]\n\n    vd.clearCaches()\n\n    for ft in filetypes:\n        savefunc = getattr(vsheets[0], 'save_' + ft, None) or getattr(vd, 'save_' + ft, None)\n        if savefunc:\n            filetype = ft\n            break\n\n    if savefunc is None:\n        vd.fail(f'no function to save as {\", \".join(filetypes)}')\n\n    if confirm_overwrite:\n        vd.confirmOverwrite(givenpath)\n\n    vd.status('saving %s sheets to %s as %s' % (len(vsheets), givenpath.given, filetype))\n\n    if not givenpath.given.endswith('/'):  # forcibly specify save individual files into directory by ending path with /\n        for vs in vsheets:\n            vs.hasBeenModified = False\n        # savefuncs(vd, p, *vsheets) will have 2 argcount (*vsheets does not get counted as an arg)\n        # savefuncs(vd, p, vs) will have 3 argcount (vs counts as an arg, along with vd, path)\n        if savefunc.__code__.co_argcount == 3 and len(vsheets) > 1:\n            vd.fail(f'cannot save multiple {filetype} sheets to non-dir')\n        return vd.execAsync(savefunc, givenpath, *vsheets)\n\n    # path is a dir\n\n    # save as individual files in the givenpath directory\n    try:\n        os.makedirs(givenpath, exist_ok=True)\n    except FileExistsError:\n        pass\n\n    if not givenpath.is_dir():\n        vd.fail(f'cannot save multiple {filetype} sheets to non-dir')\n\n    def _savefiles(vsheets, givenpath, savefunc, filetype):\n        for vs in vsheets:\n            p = Path((givenpath / vs.name).with_suffix('.'+filetype))\n            savefunc(p, vs)\n            vs.hasBeenModified = False\n\n        vd.status(f'{givenpath} save finished')  #2157\n\n    return vd.execAsync(_savefiles, vsheets, givenpath, savefunc, filetype)\n\n\n@VisiData.api\ndef save_zip(vd, p, *vsheets):\n    vd.clearCaches()\n\n    import tempfile\n    import zipfile\n    with tempfile.TemporaryDirectory() as tmpdir:\n        with zipfile.ZipFile(str(p), 'w', zipfile.ZIP_DEFLATED, allowZip64=True, compresslevel=9) as zfp:\n            for vs in Progress(vsheets):\n                filetype = vs.options.save_filetype\n                tmpp = Path(f'{tmpdir}{vs.name}.{filetype}')\n                savefunc = getattr(vs, 'save_' + filetype, None) or getattr(vd, 'save_' + filetype, None)\n                savefunc(tmpp, vs)\n                zfp.write(tmpp, f'{vs.name}.{vs.options.save_filetype}')\n\n\n@VisiData.api\ndef save_txt(vd, p, *vsheets):\n    if len(vsheets) == 1 and vsheets[0].nVisibleCols > 1:  #2173\n        return vd.save_tsv(p, vsheets[0])\n\n    with p.open(mode='w', encoding=vsheets[0].options.save_encoding) as fp:\n        for vs in vsheets:\n            unitsep = p.options.delimiter\n            rowsep = p.options.row_delimiter\n            for dispvals in vs.iterdispvals(*vs.visibleCols, format=True):\n                fp.write(unitsep.join(dispvals.values()))\n                fp.write(rowsep)\n\n\n@BaseSheet.api\ndef rootSheet(sheet):\n    r = sheet\n    while isinstance(r.source, BaseSheet):\n        r = r.source\n\n    return r\n\n\nBaseSheet.addCommand('Ctrl+S', 'save-sheet', 'vd.saveSheets(inputPath(\"save to: \", value=getDefaultSaveName()), sheet)', 'save current sheet to filename in format determined by extension (default .tsv)')\nBaseSheet.addCommand('', 'save-sheet-really', 'vd.saveSheets(Path(getDefaultSaveName()), sheet, confirm_overwrite=False)', 'save current sheet without asking for filename or confirmation')\nBaseSheet.addCommand('', 'save-source', 'vd.saveSheets(rootSheet().source, rootSheet())', 'save root sheet to its source')\nBaseSheet.addCommand('gCtrl+S', 'save-all', 'vd.saveSheets(inputPath(\"save all sheets to: \"), *vd.stackedSheets)', 'save all sheets to given file or directory)')\nIndexSheet.addCommand('gCtrl+S', 'save-selected', 'vd.saveSheets(inputPath(\"save %d sheets to: \" % nSelectedRows, value=\"_\".join(getattr(vs, \"name\", None) or \"blank\" for vs in selectedRows)), *selectedRows)', 'save all selected sheets to given file or directory')\nSheet.addCommand('', 'save-col', 'saveCols([cursorCol])', 'save current column only to filename in format determined by extension (default .tsv)')\nSheet.addCommand('', 'save-col-keys', 'saveCols(keyCols + [cursorCol])', 'save key columns and current column to filename in format determined by extension (default .tsv)')\n\nvd.addMenuItems('''\n    File > Save > current sheet > save-sheet\n    File > Save > all sheets > save-all\n    File > Save > current column > save-col\n    File > Save > keys and current column > save-col-keys\n''')\n"
  },
  {
    "path": "visidata/search.py",
    "content": "import re\nfrom visidata import vd, VisiData, BaseSheet, Sheet, Column, Progress, asyncthread, rotateRange\n\nVisiData.init('searchContext', dict) # [(regex, columns, backward)] -> kwargs from previous search\n\nvd.help_regex_flags = '''# Regex Flags Help\n- `A` (ASCII) ASCII-only matching (not unicode)\n- `I` (IGNORECASE): case-insensitive matching\n- `M` (MULTILINE): `^` and `$` match after/before newlines\n- `S` (DOTALL): `.` match any character at all, including newline\n- `X` (VERBOSE): allow verbose regex\n'''\n\n\n@VisiData.api\n@asyncthread\ndef moveRegex(vd, sheet, *args, **kwargs):\n    vd.searchContext['type'] = 'regex'\n    list(vd.searchRegex(sheet, *args, moveCursor=True, **kwargs))\n\n\n# kwargs: regex=None, columns=None, backward=False\n@VisiData.api\ndef searchRegex(vd, sheet, moveCursor=False, reverse=False, regex_flags=None, **kwargs):\n        'Set row index if moveCursor, otherwise return list of row indexes.'\n        def findMatchingColumn(sheet, row, columns, func):\n            'Find column for which func matches the displayed value in this row'\n            for c in columns:\n                if func(c.getFullDisplayValue(row)):\n                    return c\n\n        vd.searchContext.update(kwargs)\n\n        regex = kwargs.get(\"regex\")\n        if regex:\n            if regex_flags is None:\n                regex_flags = sheet.options.regex_flags  # regex_flags defined in features.regex\n            flagbits = sum(getattr(re, f.upper()) for f in regex_flags)\n            try:\n                compiled_re = re.compile(regex, flagbits)\n                vd.searchContext[\"regex\"] = compiled_re\n            except re.error as e:\n                vd.searchContext[\"regex\"] = None  # make future calls to search-next fail\n                vd.error('invalid regex: %s' % e.msg)\n\n        regex = vd.searchContext.get(\"regex\") or vd.fail(\"no regex\")\n\n        columns = vd.searchContext.get(\"columns\")\n        if columns == \"cursorCol\":\n            columns = [sheet.cursorCol]\n        elif columns == \"visibleCols\":\n            columns = tuple(sheet.visibleCols)\n        elif isinstance(columns, Column):\n            columns = [columns]\n\n        if not columns:\n            vd.error('bad columns')\n\n        searchBackward = vd.searchContext.get(\"backward\")\n        if reverse:\n            searchBackward = not searchBackward\n\n        matchingRowIndexes = 0\n        for rowidx in rotateRange(len(sheet.rows), sheet.cursorRowIndex, reverse=searchBackward):\n            c = findMatchingColumn(sheet, sheet.rows[rowidx], columns, regex.search)\n            if c:\n                if moveCursor:\n                    sheet.cursorRowIndex = rowidx\n                    sheet.cursorVisibleColIndex = sheet.visibleCols.index(c)\n                    return\n                else:\n                    matchingRowIndexes += 1\n                    yield rowidx\n\n        if kwargs.get('printStatus', True):\n            vd.status('%s matches for /%s/' % (matchingRowIndexes, regex.pattern))\n\n\n@Sheet.api\ndef searchInputRegex(sheet, action:str, columns:str='cursorCol'):\n    r = vd.inputMultiple(regex=dict(prompt=f\"{action} regex: \", type=\"regex\", defaultLast=True, help=vd.help_regex),\n                         flags=dict(prompt=\"regex flags: \", type=\"regex_flags\", value=sheet.options.regex_flags, help=vd.help_regex_flags))\n\n    return vd.searchRegex(sheet, regex=r['regex'], regex_flags=r['flags'], columns=columns)\n\n@Sheet.api\ndef moveInputRegex(sheet, action:str, type=\"regex\", **kwargs):\n    r = vd.inputMultiple(regex=dict(prompt=f\"{action} regex: \", type=type, defaultLast=True, help=vd.help_regex),\n                         flags=dict(prompt=\"regex flags: \", type=\"regex_flags\", value=sheet.options.regex_flags, help=vd.help_regex_flags))\n    vd.moveRegex(sheet, regex=r['regex'], regex_flags=r['flags'], **kwargs)\n    return r\n\n@Sheet.api\n@asyncthread\ndef search_expr(sheet, expr, reverse=False, curcol=None):\n    vd.searchContext['type'] = 'expr'\n    vd.searchContext['expr'] = expr\n    vd.searchContext['backward'] = reverse\n    for i in rotateRange(len(sheet.rows), sheet.cursorRowIndex, reverse=reverse):\n        try:\n            if sheet.evalExpr(expr, sheet.rows[i], curcol=curcol):\n                sheet.cursorRowIndex=i\n                return\n        except Exception as e:\n            vd.exceptionCaught(e)\n\n    vd.fail(f'no {sheet.rowtype} where {expr}')\n\n@VisiData.api\n@asyncthread\ndef moveExpr(vd, sheet, reverse=False):\n    'Go to next match for last expr search.'\n    expr = vd.searchContext.get('expr') or vd.fail('no expr')\n    backward = vd.searchContext.get('backward', False)\n    if reverse:\n        backward = not backward\n    for i in rotateRange(len(sheet.rows), sheet.cursorRowIndex, reverse=backward):\n        try:\n            if sheet.evalExpr(expr, sheet.rows[i], curcol=sheet.cursorCol):\n                sheet.cursorRowIndex = i\n                return\n        except Exception as e:\n            vd.exceptionCaught(e)\n    vd.fail(f'no {sheet.rowtype} where {expr}')\n\n\n@VisiData.api\ndef searchNext(vd, sheet, reverse=False):\n    'Go to next/previous match from last search (regex or expr).'\n    if vd.searchContext.get('type') == 'expr':\n        vd.moveExpr(sheet, reverse=reverse)\n    elif vd.searchContext.get('type') == 'regex':\n        vd.moveRegex(sheet, reverse=reverse)\n    else:\n        vd.fail('no previous search')\n\n\n@BaseSheet.api\ndef clear_search(sheet):\n    '''A stub function to clear any aftereffects of search, such as when\n       highlight_search is active.'''\n    pass\n\nSheet.addCommand('r', 'search-keys', 'tmp=cursorVisibleColIndex; moveInputRegex(\"row key\", type=\"regex-row\", columns=keyCols or [visibleCols[0]]); sheet.cursorVisibleColIndex=tmp', 'go to next row with key matching regex')\nSheet.addCommand('/', 'search-col', 'moveInputRegex(\"search\", columns=\"cursorCol\", backward=False)', 'search for regex forwards in current column')\nSheet.addCommand('?', 'searchr-col', 'moveInputRegex(\"reverse search\", columns=\"cursorCol\", backward=True)', 'search for regex backwards in current column')\nSheet.addCommand('n', 'search-next', 'vd.searchNext(sheet, reverse=False)', 'go to next match from last search')\nSheet.addCommand('N', 'searchr-next', 'vd.searchNext(sheet, reverse=True)', 'go to previous match from last search')\n\nSheet.addCommand('g/', 'search-cols', 'moveInputRegex(\"g/\", backward=False, columns=\"visibleCols\")', 'search for regex forwards over all visible columns')\nSheet.addCommand('g?', 'searchr-cols', 'moveInputRegex(\"g?\", backward=True, columns=\"visibleCols\")', 'search for regex backwards over all visible columns')\nSheet.addCommand('z/', 'search-expr', 'search_expr(inputExpr(\"search by expr: \") or fail(\"no expr\"), curcol=cursorCol)', 'search by Python expression forwards in current column (with column names as variables)')\nSheet.addCommand('z?', 'searchr-expr', 'search_expr(inputExpr(\"searchr by expr: \") or fail(\"no expr\"), curcol=cursorCol, reverse=True)', 'search by Python expression backwards in current column (with column names as variables)')\n\nvd.addMenuItems('''\n    View > Search > current column > search-col\n    View > Search > visible columns > search-cols\n    View > Search > key columns > search-keys\n    View > Search > by Python expr > search-expr\n    View > Search > again > search-next\n    View > Search backward > current column > searchr-col\n    View > Search backward > visible columns > searchr-cols\n    View > Search backward > by Python expr > searchr-expr\n    View > Search backward > again > searchr-next\n''')\n"
  },
  {
    "path": "visidata/selection.py",
    "content": "from copy import copy\nfrom visidata import vd, Sheet, Progress, asyncthread, options, rotateRange, Fanout, undoAttrCopyFunc, RowColorizer\n\nvd.option('bulk_select_clear', False, 'clear selected rows before new bulk selections', replay=True)\nvd.option('some_selected_rows', False, 'if no rows selected, if True, someSelectedRows returns all rows; if False, fails')\n\nSheet.init('_selectedRows', dict)  # rowid(row) -> row\n\nvd.rowNoters.append(\n        lambda sheet, row: sheet.isSelected(row) and sheet.options.disp_selected_note\n)\nSheet.colorizers.append( RowColorizer(2, 'color_selected_row', lambda s,c,r,v:\n    r is not None and s.isSelected(r))\n)\n\n@Sheet.api\ndef isSelected(self, row):\n    'Return True if *row* is selected.'\n    return self.rowid(row) in self._selectedRows\n\n@Sheet.api\n@asyncthread\ndef toggle(self, rows, add_undo=True):\n    'Toggle selection of given *rows*.  Async.'\n    if add_undo:\n        self.addUndoSelection()\n    for r in Progress(rows, 'toggling', total=len(rows)):\n        if self.isSelected(r):  #1671\n            self.unselectRow(r)\n        else:\n            self.selectRow(r)\n\n\n@Sheet.before\ndef beforeLoad(self):\n    self._selectedRows.clear()\n\n\n@Sheet.api\ndef select_row(self, row, add_undo=True):\n    'Add single *row* to set of selected rows.'\n    if add_undo:\n        self.addUndoSelection()\n    self.selectRow(row)\n\n\n@Sheet.api\ndef toggle_row(self, row, add_undo=True):\n    'Toggle selection of given *row*.'\n    if add_undo:\n        self.addUndoSelection()\n    if self.isSelected(row):\n        self.unselectRow(row)\n    else:\n        self.selectRow(row)\n\n\n@Sheet.api\ndef unselect_row(self, row, add_undo=True):\n    'Remove single *row* from set of selected rows.'\n    if add_undo:\n        self.addUndoSelection()\n    self.unselectRow(row) or vd.warning('row not selected')\n\n\n@Sheet.api\ndef selectRow(self, row):\n    'Add *row* to set of selected rows.  May be called multiple times in one command.  Overridable.'\n    self._selectedRows[self.rowid(row)] = row\n\n\n@Sheet.api\ndef unselectRow(self, row):\n    'Remove *row* from set of selected rows.  Return True if row was previously selected.  Overridable.'\n    if self.rowid(row) in self._selectedRows:\n        del self._selectedRows[self.rowid(row)]\n        return True\n    else:\n        return False\n\n@Sheet.api\ndef clearSelected(self):\n    'Clear set of selected rows, without calling ``unselectRow`` for each one.'\n    self.addUndoSelection()\n    self._selectedRows.clear()\n\n@Sheet.api\n@asyncthread\ndef select(self, rows, status=True, progress=True, add_undo=True):\n    \"Add *rows* to set of selected rows. Async. Don't show progress if *progress* is False; don't show status if *status* is False. If *add_undo* is False, do not add an undo selection function to the undo history; useful for lowering memory consumption when caller is changing a large batch of selects in one command.\"\n    if add_undo:\n        self.addUndoSelection()\n    before = self.nSelectedRows\n    if self.options.bulk_select_clear:\n        self.clearSelected()\n    for r in (Progress(rows, 'selecting') if progress else rows):\n        self.selectRow(r)\n    if status:\n        if options.bulk_select_clear:\n            msg = 'selected %s %s%s' % (self.nSelectedRows, self.rowtype, ' instead' if before > 0 else '')\n        else:\n            msg = 'selected %s%s %s' % (self.nSelectedRows-before, ' more' if before > 0 else '', self.rowtype)\n        vd.status(msg)\n\n@Sheet.api\n@asyncthread\ndef unselect(self, rows, status=True, progress=True, add_undo=True):\n    \"Remove *rows* from set of selected rows. Async. Don't show progress if *progress* is False; don't show status if *status* is False. If *add_undo* is False, do not add an undo unselection function to the undo history; useful for lowering memory consumption when caller is changing a large batch of selects in one command.\"\n    if add_undo:\n        self.addUndoSelection()\n    before = self.nSelectedRows\n    for r in (Progress(rows, 'unselecting') if progress else rows):\n        self.unselectRow(r)\n    if status:\n        vd.status('unselected %s/%s %s' % (before-self.nSelectedRows, before, self.rowtype))\n\n@Sheet.api\ndef selectByIdx(self, rowIdxs):\n    'Add rows indicated by row indexes in *rowIdxs* to set of selected rows.  Async.'\n    self.select((self.rows[i] for i in rowIdxs), progress=False)\n\n@Sheet.api\ndef unselectByIdx(self, rowIdxs):\n    'Remove rows indicated by row indexes in *rowIdxs* from set of selected rows.  Async.'\n    self.unselect((self.rows[i] for i in rowIdxs), progress=False)\n\n@Sheet.api\ndef gatherBy(self, func, gerund='gathering'):\n    'Generate rows for which ``func(row)`` returns True, starting from the cursor.'\n    for i in Progress(rotateRange(self.nRows, self.cursorRowIndex-1), total=self.nRows, gerund=gerund):\n        try:\n            r = self.rows[i]\n            if func(r):\n                yield r\n        except Exception as e:\n            vd.exceptionCaught(e, status=False)\n\n@Sheet.property\ndef selectedRows(self):\n    'List of selected rows in sheet order.'\n    if self.nSelectedRows <= 1:\n        return Fanout(self._selectedRows.values())\n    return Fanout((r for r in self.rows if self.rowid(r) in self._selectedRows))\n\n@Sheet.property\ndef onlySelectedRows(self):\n    'List of selected rows in sheet order.  Fail if no rows are selected.'\n    if self.nSelectedRows == 0:\n        vd.fail('no rows selected')\n    return self.selectedRows\n\n@Sheet.property\ndef someSelectedRows(self):\n    '''Return a list of rows:\n        (a) in batch mode, always return selectedRows\n        (b) in interactive mode, if options.some_selected_rows is True, return selectedRows or all rows if none selected\n        (c) in interactive mode, if options.some_selected_rows is False, return selectedRows or fail if none selected'''\n    if options.batch:\n        return self.selectedRows\n    if options.some_selected_rows:\n        return self.selectedRows or self.rows\n    return self.onlySelectedRows\n\n@Sheet.property\ndef nSelectedRows(self):\n    'Number of selected rows.'\n    return len(self._selectedRows)\n\n@Sheet.api\n@asyncthread\ndef deleteSelected(self):\n    'Delete all selected rows.  Async.'\n    ndeleted = self.deleteBy(self.isSelected)\n    nselected = self.nSelectedRows\n    self.clearSelected()\n    if ndeleted != nselected:\n        vd.warning(f'deleted {ndeleted}, expected {nselected}')\n\n\n@Sheet.api\ndef addUndoSelection(sheet):\n    vd.addUndo(undoAttrCopyFunc([sheet], '_selectedRows'))\n\n\n@Sheet.api\n@asyncthread\ndef selectToNextRow(vs, func, reverse=False, msg='no selected row'):\n    'Find next (prev if reverse) row for which func returns True.'\n    rng = range(vs.cursorRowIndex-1, -1, -1) if reverse else range(vs.cursorRowIndex+1, vs.nRows)\n    foundRowIdx = None\n    with Progress(total=len(vs.rows)) as prog:\n        for i in rng:\n            prog.addProgress(1)\n            try:\n                if func(vs.rows[i]):\n                    foundRowIdx = i\n                    break\n            except Exception:\n                pass\n\n    if foundRowIdx is None:\n        vd.status(msg)\n        return\n\n    if reverse:\n        vs.select(vs.rows[foundRowIdx:vs.cursorRowIndex+1])\n    else:\n        vs.select(vs.rows[vs.cursorRowIndex:foundRowIdx+1])\n\n\nSheet.addCommand('t', 'stoggle-row', 'toggle_row(cursorRow); cursorDown(1)', 'toggle selection of current row')\nSheet.addCommand('s', 'select-row', 'select_row(cursorRow); cursorDown(1)', 'select current row')\nSheet.addCommand('u', 'unselect-row', 'unselect_row(cursorRow); cursorDown(1)', 'unselect current row')\n\nSheet.addCommand('gt', 'stoggle-rows', 'toggle(rows)', 'toggle selection of all rows')\nSheet.addCommand('gs', 'select-rows', 'select(rows)', 'select all rows')\nSheet.addCommand('gu', 'unselect-rows', 'clearSelected()', 'unselect all rows')\n\nSheet.addCommand('z{', 'select-to-prev-selected', 'selectToNextRow(lambda row,sheet=sheet: sheet.isSelected(row), reverse=True)', 'select rows backwards to last selected row')\nSheet.addCommand('z}', 'select-to-next-selected', 'selectToNextRow(lambda row,sheet=sheet: sheet.isSelected(row))', 'select rows forwards to next selected row')\n\nSheet.addCommand('zt', 'stoggle-before', 'toggle(rows[:cursorRowIndex])', 'toggle selection of rows from top to cursor')\nSheet.addCommand('zs', 'select-before', 'select(rows[:cursorRowIndex])', 'select all rows from top to cursor')\nSheet.addCommand('zu', 'unselect-before', 'unselect(rows[:cursorRowIndex])', 'unselect all rows from top to cursor')\nSheet.addCommand('gzt', 'stoggle-after', 'toggle(rows[cursorRowIndex:])', 'toggle selection of all rows from cursor to bottom')\nSheet.addCommand('gzs', 'select-after', 'select(rows[cursorRowIndex:])', 'select all rows from cursor to bottom')\nSheet.addCommand('gzu', 'unselect-after', 'unselect(rows[cursorRowIndex:])', 'unselect all rows from cursor to bottom')\n\nSheet.addCommand('|', 'select-col-regex', 'selectByIdx(searchInputRegex(\"select\", columns=\"cursorCol\"))', 'select rows matching regex in current column')\nSheet.addCommand('\\\\', 'unselect-col-regex', 'unselectByIdx(searchInputRegex(\"unselect\", columns=\"cursorCol\"))', 'unselect rows matching regex in current column')\nSheet.addCommand('g|', 'select-cols-regex', 'selectByIdx(searchInputRegex(\"select\", columns=\"visibleCols\"))', 'select rows matching regex in any visible column')\nSheet.addCommand('g\\\\', 'unselect-cols-regex', 'unselectByIdx(searchInputRegex(\"unselect\", columns=\"visibleCols\"))', 'unselect rows matching regex in any visible column')\n\nSheet.addCommand(',', 'select-equal-cell', 'select(gatherBy(lambda r,c=cursorCol,v=cursorFullDisplay: c.getFullDisplayValue(r) == v), progress=False)', 'select rows matching current cell displayed value in current column')\nSheet.addCommand('g,', 'select-equal-row', 'select(gatherBy(lambda r,currow=cursorRow,vcols=visibleCols: all([c.getFullDisplayValue(r) == c.getFullDisplayValue(currow) for c in vcols])), progress=False)', 'select rows matching displayed values in current row in all visible columns')\nSheet.addCommand('z,', 'select-exact-cell', 'select(gatherBy(lambda r,c=cursorCol,v=cursorTypedValue: c.getTypedValue(r) == v), progress=False)', 'select rows matching current cell typed value in current column')\nSheet.addCommand('gz,', 'select-exact-row', 'select(gatherBy(lambda r,currow=cursorRow,vcols=visibleCols: all([c.getTypedValue(r) == c.getTypedValue(currow) for c in vcols])), progress=False)', 'select rows matching typed values in current row in all visible columns')\n\nSheet.addCommand('z|', 'select-expr', 'expr=inputExpr(\"select by expr: \"); select(gatherBy(lambda r, sheet=sheet, expr=expr, curcol=cursorCol: sheet.evalExpr(expr, r, curcol=curcol)), progress=False)', 'select rows matching Python expression in any visible column')\nSheet.addCommand('z\\\\', 'unselect-expr', 'expr=inputExpr(\"unselect by expr: \"); unselect(gatherBy(lambda r, sheet=sheet, expr=expr, curcol=cursorCol: sheet.evalExpr(expr, r, curcol=curcol)), progress=False)', 'unselect rows matching Python expression in any visible column')\n\nSheet.addCommand(None, 'select-error-col', 'select(gatherBy(lambda r,c=cursorCol: c.isError(r)), progress=False)', 'select rows with errors in current column')\nSheet.addCommand(None, 'select-error', 'select(gatherBy(lambda r,vcols=visibleCols: isinstance(r, TypedExceptionWrapper) or any([c.isError(r) for c in vcols])), progress=False)', 'select rows with errors in any column')\n\nvd.addMenuItems('''\n    Row > Select > current row > select-row\n    Row > Select > all rows > select-rows\n    Row > Select > from top > select-before\n    Row > Select > to bottom > select-after\n    Row > Select > by Python expr > select-expr\n    Row > Select > equal to current cell > select-equal-cell\n    Row > Select > equal to current row > select-equal-row\n    Row > Select > errors > current column > select-error-col\n    Row > Select > errors > any column > select-error\n    Row > Select > from prev selected > select-to-prev-selected\n    Row > Select > to next selected > select-to-next-selected\n    Row > Unselect > current row > unselect-row\n    Row > Unselect > all rows > unselect-rows\n    Row > Unselect > from top > unselect-before\n    Row > Unselect > to bottom > unselect-after\n    Row > Unselect > by Python expr > unselect-expr\n    Row > Toggle select > current row > stoggle-row\n    Row > Toggle select > all rows > stoggle-rows\n    Row > Toggle select > from top > stoggle-before\n    Row > Toggle select > to bottom > stoggle-after\n''')\n"
  },
  {
    "path": "visidata/settings.py",
    "content": "import collections\nimport functools\nimport sys\nimport inspect\nimport argparse\nimport importlib\nimport os\n\nimport visidata\nfrom visidata import VisiData, BaseSheet, vd, AttrDict\nfrom visidata.vendor.appdirs import user_config_dir, user_cache_dir, user_data_dir\n\n\n# [settingname] -> { objname(Sheet-instance/Sheet-type/'global'/'default'): Option/Command/longname }\nclass SettingsMgr(collections.OrderedDict):\n    def __init__(self):\n        super().__init__()\n        self.allobjs = {}\n\n    def __hash__(self):\n        return hash(id(self))\n\n    def __eq__(self, other):\n        return self is other\n\n    def objname(self, obj):\n        if isinstance(obj, str):\n            v = obj\n        elif obj is None:\n            v = 'global'\n        elif isinstance(obj, BaseSheet):\n            v = obj.name\n        elif inspect.isclass(obj) and issubclass(obj, BaseSheet):\n            v = obj.__name__\n        elif isinstance(obj, os.PathLike):\n            v = str(obj)\n        elif inspect.isclass(obj) and issubclass(obj, os.PathLike):\n            v = obj.__name__\n        else:\n            return None\n\n        if not isinstance(obj, str) or v not in self.allobjs:\n            self.allobjs[v] = obj\n        return v\n\n    def getobj(self, objname):\n        'Inverse of objname(obj); returns obj if available'\n        return self.allobjs.get(objname)\n\n    def unset(self, k, obj='default'):\n        'Remove setting for given key in the given context.'\n        objstr = self.objname(obj)\n        if objstr in self[k]:\n            del self[k][objstr]\n\n    def set(self, k, v, obj):\n        'obj is a Sheet instance, or a Sheet [sub]class.  obj=\"global\" means override default unless there is a sheet-specific override; obj=\"default\" means last resort.'\n        if k not in self:\n            self[k] = dict()\n        self[k][self.objname(obj)] = v\n        return v\n\n    def setdefault(self, k, v):\n        return self.set(k, v, 'default')\n\n    @functools.lru_cache()\n    def _mappings(self, obj):\n        '''Return list of contexts in order to resolve settings. ordering is, from lowest to highest precedence:\n\n        1. \"default\": default specified in option() definition\n        2. \"global\": in order of program execution:\n            a. .visidatarc\n            b. command-line options, applied on top of the overrides in .visidatarc\n            c. at runtime via 'O'ptions meta-sheet\n        3. objname(type(obj)): current sheet class and parents, recursively\n        4. objname(obj): the specific sheet instance\n            a. can override at runtime, replace value for sheet instance\n        '''\n        mappings = []\n        if obj:\n            mappings += [obj]\n            mappings += [self.objname(cls) for cls in inspect.getmro(type(obj))]\n\n        mappings += ['global', 'default']\n        return mappings\n\n    def _get(self, key, obj=None):\n        d = self.get(key, None)\n        if d:\n            for m in self._mappings(obj or vd.activeSheet):\n                v = d.get(self.objname(m))\n                if v is not None:\n                    return v\n\n    def iter(self, obj=None):\n        'Iterate through all keys considering context of obj. If obj is None, uses the context of the top sheet.'\n        if obj is None and vd:\n            obj = vd.activeSheet\n\n        for o in self._mappings(obj):\n            o = self.objname(o)\n            for k in self.keys():\n                for o2 in self[k]:\n                    if o == o2:\n                        yield (k, o), self[k][o2]\n\n    def iterall(self):\n        for k in self.keys():\n            for o in self[k]:\n                yield (k, o), self[k][o]\n\n    def resetToDefaults(self):\n        'Remove global and instance-level settings, keeping defaults and class-level overrides.'\n        for k in self:\n            to_remove = [objname for objname in self[k]\n                         if objname != 'default'\n                         and not (inspect.isclass(self.allobjs.get(objname)))]\n            for objname in to_remove:\n                del self[k][objname]\n\n\n\nclass Command:\n    def __init__(self, longname, execstr, helpstr='', module='', replay=True, deprecated=False, testable=True):\n        self.longname = longname\n        self.execstr = execstr\n        self.helpstr = helpstr\n        self.module = module\n        self.deprecated = deprecated\n        self.replayable = replay\n        self.testable = testable\n\n\nclass Option:\n    def __init__(self, name, value, description='', module='', help=''):\n        # description gets shows on the manpage and the optionssheet; help is shown on the sidebar while editing\n        self.name = name\n        self.value = value\n        self.helpstr = description\n        self.extrahelp = help\n        self.replayable = False\n        self.sheettype = BaseSheet\n        self.cli_only = False\n        self.module = module\n\n    def __str__(self):\n        return str(self.value)\n\n    def __eq__(self, other):\n        return self.name == other.name\n\n\n@VisiData.api\nclass OptionsObject:\n    'minimalist options framework'\n    def __init__(self, mgr, obj=None):\n        object.__setattr__(self, '_opts', mgr)\n        object.__setattr__(self, '_cache', {})\n        object.__setattr__(self, '_obj', obj)\n\n    def keys(self, obj=None):\n        for k, d in self._opts.items():\n            if obj is None or self._opts.objname(obj) in d:\n                yield k\n\n    def _get(self, k, obj=None):\n        'Return Option object for k in context of obj. Cache result until any set().'\n        opt = self._cache.get((k, obj or vd.activeSheet), None)\n        if opt is None:\n            opt = self._opts._get(k, obj)\n            self._cache[(k, obj or vd.activeSheet)] = opt\n        return opt\n\n    def _set(self, k, v, obj=None, helpstr='', module=None):\n        k, v = vd._resolve_optalias(k, v)  # to set deprecated and abbreviated options\n\n        opt = self._get(k) or Option(k, v, '', module)\n        self._cache.clear()  # invalidate entire cache on any change\n        return self._opts.set(k, Option(k, v, opt.helpstr or helpstr, opt.module or module), obj)\n\n    def is_set(self, k, obj=None):\n        d = self._opts.get(k, None)\n        if d:\n            return d.get(self._opts.objname(obj), None)\n\n    def get(self, optname, default=None):\n        'Return the value of the given *optname* option in the options context. *default* is only returned if the option is not defined.  An Exception is never raised.'\n        d = self._get(optname, None)\n        if d:\n            return d.value\n        return default\n\n    def getobj(self, optname, obj=None):\n        'Return value of option optname as set on obj, or on option context if obj is None.'\n        return self._get(optname, obj).value\n\n    def getdefault(self, optname):\n        return self._get(optname, 'default').value\n\n    def getonly(self, optname, obj, default):\n        'Return value of option optname as set on obj, or default if not set specifically on obj'\n        d = self._opts.get(optname, None)\n        if d:\n            opt = d.get(self._opts.objname(obj), None)\n            if opt:\n                return opt.value\n        return default\n\n    def set(self, optname, value, obj='global', cmdlog=True):\n        \"Override *value* for *optname* in the options context, or in the *obj* context if given.\"\n        opt = self._get(optname)\n        module = None  # keep default\n        if opt:\n            curval = opt.value\n            t = type(curval)\n            if value is None and curval is not None:\n                return self.unset(optname, obj=obj)\n            elif isinstance(value, str) and t is bool: # special case for bool options\n                value = value and (value[0] not in \"0fFnN\")  # ''/0/false/no are false, everything else is true\n            elif type(value) is t:    # if right type, no conversion\n                pass\n            elif curval is None:  # if None, do not apply type conversion\n                pass\n            else:\n                value = t(value)\n\n            if cmdlog and curval != value and self._get(optname, 'default').replayable:\n                if obj != 'default' and type(obj) is not type:  # default and class options set on init aren't recorded\n                    if vd.cmdlog:\n                        self.add_option_to_cmdlogs(obj, optname, value, 'set-option')\n        else:\n            curval = None\n            vd.warning('setting unknown option %s' % optname)\n            module = 'unknown'\n\n        return self._set(optname, value, obj, module=module)\n\n    def unset(self, optname, obj=None):\n        'Remove setting value for given context.'\n        v = self._opts.unset(optname, obj)\n        opt = self._get(optname)\n        if vd.cmdlog and opt and opt.replayable:\n            self.add_option_to_cmdlogs(obj, optname, value='', longname='unset-option')\n        self._cache.clear()  # invalidate entire cache on any change\n        return v\n\n    def add_option_to_cmdlogs(self, obj, optname, value='', longname='set-option'):\n        'Records option-set on cmdlogs'\n        objname = self._opts.objname(obj)\n        # all options are recorded on global cmdlog\n        vd.cmdlog.addRow(vd.cmdlog.newRow(sheet=objname, row=optname,\n                    keystrokes='', input=str(value),\n                    longname=longname, undofuncs=[]))\n        # global options are recorded on all cmdlog_sheet's\n        if obj == 'global':\n            for vs in vd.sheets:\n                vs.cmdlog_sheet.addRow(vd.cmdlog.newRow(sheet=objname, row=optname,\n                            keystrokes='', input=str(value),\n                            longname=longname, undofuncs=[]))\n        # sheet-specific options are recorded on that sheet\n        elif isinstance(obj, BaseSheet):\n            obj.cmdlog_sheet.addRow(vd.cmdlog.newRow(sheet=objname, row=optname,\n                        keystrokes='', input=str(value),\n                        longname=longname, undofuncs=[]))\n\n    def resetToDefaults(self):\n        'Remove all non-default option settings.'\n        self._opts.resetToDefaults()\n        self._cache.clear()\n\n    def setdefault(self, optname, value, helpstr, module):\n        return self._set(optname, value, 'default', helpstr=helpstr, module=module)\n\n    def getall(self, prefix=''):\n        'Return dictionary of all options beginning with `prefix` (with `prefix` removed from the name).'\n        return { optname[len(prefix):] : self[optname]\n                    for optname in self.keys()\n                        if optname.startswith(prefix) }\n\n    def __getattr__(self, optname):      # options.foo\n        'Return value of option `optname` for stored options context.'\n        return self.__getitem__(optname)\n\n    def __setattr__(self, optname, value):   # options.foo = value\n        'Set *value* of option *optname* for stored options context.'\n        self.__setitem__(optname, value)\n\n    def __getitem__(self, optname):      # options[optname]\n        opt = self._get(optname, obj=self._obj)\n        if not opt:\n            raise ValueError('no option \"%s\"' % optname)\n        return opt.value\n\n    def __setitem__(self, optname, value):   # options[optname] = value\n        self.set(optname, value, obj=self._obj)\n\n\nvd.commands = SettingsMgr()\nvd.bindkeys = SettingsMgr()\nvd._options = SettingsMgr()\n\nvd.options = vd.OptionsObject(vd._options)  # global option settings\nvd.option_aliases = {}\n\n\n@VisiData.api\ndef optalias(vd, altname, optname, val=None):\n    'Create an alias `altname` for option `optname`, setting the value to a particular `val` (if not None).'\n    vd.option_aliases[altname] = (optname, val)\n\n\n@VisiData.api\ndef _resolve_optalias(vd, optname, optval):\n    while optname in vd.option_aliases:\n        optname, v = vd.option_aliases.get(optname)\n        if v is not None:  # value might be given\n            optval = v\n\n    return optname, optval\n\n\n@VisiData.api\ndef option(vd, name, default, description, replay=False, sheettype=BaseSheet, help:str='', cli_only=False):\n    '''Declare a new option.\n\n   - `name`: name of option\n   - `default`: default value when no other override exists\n   - `helpstr`: short description of option (as shown in the **Options Sheet**)\n   - `replay`: ``True`` if changes to the option should be stored in the **Command Log**\n   - `sheettype`: ``None`` if the option is not sheet-specific, to make it global on CLI\n   - `cli_only`: ``True`` if the option is only meaningful as a CLI argument (hidden from Options Sheet)\n    '''\n    opt = vd.options.setdefault(name, default, description, vd.importingModule)\n    opt.replayable = replay\n    opt.sheettype=sheettype\n    opt.extrahelp = help\n    opt.cli_only = cli_only\n    return opt\n\n\n@VisiData.api\ndef theme_option(vd, name, *args, **kwargs):\n    if name.startswith('color_'):\n        kwargs.setdefault('help', vd.help_color)\n    return vd.option(name, *args, **kwargs)\n\n\n@BaseSheet.class_api\n@classmethod\ndef addCommand(cls, keystrokes, longname, execstr, helpstr='', replay=True, **kwargs):\n    '''Add a new command to *cls* sheet type.\n\n    - *keystrokes*: default keybinding, including **prefixes**.\n    - *longname*: name of the command.\n    - *execstr*: Python statement to pass to `exec()`'ed when the command is executed.\n    - *helpstr*: help string shown in the **Commands Sheet**.\n    '''\n    cmd = Command(longname, execstr, helpstr=helpstr, module=vd.importingModule, replay=replay, **kwargs)\n    vd.commands.set(longname, cmd, cls)\n    if keystrokes:\n        vd.bindkey(keystrokes, longname, cls)\n    return longname\n\n@BaseSheet.class_api\n@classmethod\ndef removeCommand(cls, keystrokes, longname):\n    '''Remove a command from *cls* sheet type.\n\n    - *keystrokes*: if provided, unbind this specific keystroke.\n    - *longname*: name of the command to remove.\n    '''\n    vd.commands.unset(longname, cls)\n    if keystrokes:\n        vd.unbindkey(keystrokes, cls)\n\ndef _command(cls, binding, longname, helpstr, **kwargs):\n    def decorator(func):\n        funcname = longname.replace('-', '_')\n        setattr(vd, funcname, func)\n        cls.addCommand(binding, longname, f'vd.{funcname}(sheet)', helpstr, **kwargs)\n    return decorator\n\nBaseSheet.command = classmethod(_command)\nglobalCommand = BaseSheet.addCommand   # to be deprecated\n\n\n@VisiData.api\ndef bindkey(vd, keystrokes, longname, obj='BaseSheet'):\n    'Bind *keystrokes* to *longname* on BaseSheet and unbind more-specific bindings of keystrokes.'\n    vd.bindkeys.set(vd.prettykeys(keystrokes.replace(' ', '')), longname, obj)\n\n@VisiData.api\ndef unbindkey(vd, keystrokes, obj='BaseSheet'):\n    'Bind *keystrokes* to *longname* on BaseSheet and unbind more-specific bindings of keystrokes.'\n    vd.bindkeys.unset(vd.prettykeys(keystrokes.replace(' ', '')), obj)\n\n\n@BaseSheet.class_api\n@classmethod\ndef bindkey(cls, keystrokes, longname):\n    'Bind *keystrokes* to *longname* on the *cls* sheet type.'\n    oldlongname = vd.bindkeys._get(keystrokes, cls)\n    if oldlongname:\n        vd.warning('%s was already bound to %s' % (keystrokes, oldlongname))\n    vd.bindkey(keystrokes, longname, cls)\n\n@BaseSheet.class_api\n@classmethod\ndef unbindkey(cls, keystrokes):\n    '''Unbind `keystrokes` on a `<SheetType>`.\n    May be necessary to avoid a warning when overriding a binding on the same exact class.'''\n    vd.unbindkey(keystrokes, cls)\n\n@BaseSheet.api\ndef getCommand(sheet, cmd):\n    'Return the Command for the given *cmd*, which may be keystrokes, longname, or a Command itself, within the context of `sheet`.'\n    if isinstance(cmd, Command):\n        return cmd\n\n    longname = cmd\n    seen = []\n    while vd.bindkeys._get(longname, obj=sheet) is not None:\n        longname = vd.bindkeys._get(longname, obj=sheet)\n        if longname in seen:\n            vd.fail(f'keystroke/command definitions form a cycle: {longname}')\n        seen.append(longname)\n\n    return vd.commands._get(longname, obj=sheet)\n\n\n@VisiData.api\ndef loadConfigFile(vd, fn=''):\n    p = visidata.Path(fn or vd.options.config)\n    if p.exists():\n        newdefs = {}\n        try:\n            with open(p) as fd:\n                code = compile(fd.read(), str(p), 'exec')\n            vd.importingModule = 'visidatarc'\n            exec(code, vd.getGlobals(), newdefs)\n        except Exception as e:\n            vd.exceptionCaught(e)\n        finally:\n            vd.importingModule = None\n\n        keys = newdefs.get('__all__', None)\n        if keys:\n            vd.addGlobals({k:newdefs[k] for k in keys})\n        else:\n            vd.addGlobals(newdefs)\n\n\ndef addOptions(parser):\n    for optname in vd.options.keys('default'):\n        if optname.startswith('color_') or optname.startswith('disp_'):\n            continue\n        action = 'store_true' if options[optname] is False else 'store'\n        try:\n            parser.add_argument('--' + optname.replace('_', '-'), action=action, dest=optname, default=None, help=options._opts._get(optname).helpstr)\n        except argparse.ArgumentError:\n            pass\n\n\n@VisiData.cached_property\ndef config_file(vd):\n    xdg_config_file = visidata.Path(user_config_dir('visidata')) / 'config.py'\n    if xdg_config_file.exists():\n        return xdg_config_file\n    else:\n        return visidata.Path('~/.visidatarc')\n\n\n@VisiData.cached_property\ndef cache_dir(vd):\n    return visidata.Path(user_cache_dir('visidata'))\n\n\n@VisiData.cached_property\ndef data_dir(vd):\n    return visidata.Path(user_data_dir('visidata'))\n\n\n@VisiData.api\ndef loadConfigAndPlugins(vd, args=AttrDict()):\n    # set visidata_dir and config manually before loading config file, so visidata_dir can be set from cli or from $VD_DIR\n    vd.options.visidata_dir = args.visidata_dir if args.visidata_dir is not None else os.getenv('VD_DIR', '') or vd.options.visidata_dir\n    vd.options.config = args.config if args.config is not None else os.getenv('VD_CONFIG', '') or vd.options.config\n\n    sys.path.append(str(visidata.Path(vd.options.visidata_dir)))\n    sys.path.append(str(visidata.Path(vd.options.visidata_dir)/\"plugins-deps\"))\n\n    # autoload installed plugins first\n    args_plugins_autoload = args.plugins_autoload if 'plugins_autoload' in args else True\n    if not args.nothing and args_plugins_autoload and vd.options.plugins_autoload:\n        from importlib.metadata import entry_points\n        eps_visidata = []\n        try:\n            eps = entry_points()\n            vp = 'visidata.plugins'\n            if hasattr(eps, 'groups'): #Python >= 3.10\n                eps_visidata = eps.select(group=vp)\n            else:                      #Python <  3.10\n                eps_visidata = eps.get(vp, [])\n        except Exception as e:\n            vd.warning(f'plugin autoload failed; see issue #1529:  {e}')\n\n        for ep in eps_visidata:\n            try:\n                vd.importingModule = ep.name\n                plug = ep.load()\n                sys.modules[f'visidata.plugins.{ep.name}'] = plug\n                vd.debug(f'Plugin {ep.name} loaded')\n            except Exception as e:\n                vd.warning(f'Plugin {ep.name} failed to load')\n                vd.exceptionCaught(e)\n            finally:\n                vd.importingModule = None\n\n        # import plugins from .visidata/plugins before .visidatarc, so plugin options can be overridden\n        for modname in (args.imports or vd.options.imports or '').split():\n            try:\n                vd.addGlobals(importlib.import_module(modname).__dict__)\n            except ModuleNotFoundError as e:  #1131\n                if 'plugins' in e.args[0]:\n                    continue\n                vd.exceptionCaught(e)\n            except Exception as e:\n                vd.exceptionCaught(e)\n                continue\n\n    # user customisations in config file in standard location\n    if vd.options.config:\n        vd.loadConfigFile(vd.options.config)\n\n\n@VisiData.api\ndef importModule(vd, pkgname, symbols=[]):\n    'Import the given *pkgname*, setting vd.importingModule to *pkgname* before import and resetting to None after.'\n    modparts = pkgname.split('.')\n    vd.importingModule = modparts[-1]\n    r = importlib.import_module(pkgname)\n    vd.importingModule = None\n    vd.importedModules.append(r)\n    vd.addGlobals({pkgname:r})\n    if symbols:\n        vd.addGlobals({k:getattr(r, k) for k in symbols if hasattr(r, k)})\n\n    return r\n\n\n@VisiData.api\ndef importSubmodules(vd, pkgname):\n    'Import all files below the given *pkgname*'\n    import pkgutil\n\n    m = vd.importModule(pkgname)\n    for module in pkgutil.walk_packages(m.__path__):\n        vd.importModule(pkgname + '.' + module.name)\n\n\n@VisiData.api\ndef importExternal(vd, modname, pipmodname=''):\n    pipmodname = pipmodname or modname\n    try:\n        m = importlib.import_module(modname)\n        vd.addGlobals({modname:m})\n        return m\n    except ModuleNotFoundError as e:\n        vd.fail(f'External package \"{modname}\" not installed; run: pip install {pipmodname}')\n\n\n@VisiData.api\ndef requireOptions(vd, *args, help=''):\n    '''Prompt user to input values for option names in *args* if current values\n    are non-false.  Offer to persist the values to visidatarc.'''\n\n    optvals = {}\n    for optname in args:\n        if not getattr(vd.options, optname):\n            if help:\n                vd.status(help)\n            v = vd.input(f'{optname}: ', record=False, display='password' not in optname)\n            optvals[optname] = v\n\n    vd.setPersistentOptions(**optvals)\n\n\n@VisiData.api\ndef setPersistentOptions(vd, **kwargs):\n    '''Set options from *kwargs* and offer to save them to visidatarc.'''\n    for optname, optval in kwargs.items():\n        setattr(vd.options, optname, optval)\n\n    optnames = ' '.join(kwargs.keys())\n    yn = vd.input(f'Save {len(kwargs)} options ({optnames}) to {vd.options.config}? ', record=False)[0:1]\n\n    if yn and yn in 'Yy':\n        with open(str(visidata.Path(vd.options.config)), mode='a') as fp:\n            for optname, optval in kwargs.items():\n                fp.write(f'options.{optname}={repr(optval)}\\n')\n\n\nvd.option('visidata_dir', user_config_dir('visidata'), 'directory to load and store additional files', sheettype=None)\n\nBaseSheet.bindkey('^M', '^J')  # for windows ENTER\n\nvd.addGlobals({\n    'options': vd.options,  # legacy\n    'globalCommand': BaseSheet.addCommand,\n    'Option': Option,\n})\n"
  },
  {
    "path": "visidata/sheets.py",
    "content": "import collections\nimport itertools\nfrom copy import copy, deepcopy\nimport textwrap\nimport re\n\nfrom visidata import VisiData, Extensible, globalCommand, ColumnAttr, ColumnItem, vd, EscapeException, drawcache, drawcache_property, LazyChainMap, asyncthread, ExpectedException, Fanout\nfrom visidata import (options, Column, namedlist, SettableColumn, AttrDict, DisplayWrapper,\nTypedExceptionWrapper, BaseSheet, UNLOADED, wrapply,\nclipdraw, clipdraw_chunks, ColorAttr, update_attr, colors, undoAttrFunc, vlen, dispwidth)\nimport visidata\nfrom visidata.utils import colname_letters\n\n\nvd.activePane = 1   # pane numbering starts at 1; pane 0 means active pane\n\n\nvd.option('name_joiner', '_', 'string to join sheet or column names')\nvd.option('value_joiner', ' ', 'string to join display values')\nvd.option('max_rows', 1_000_000_000, 'number of rows to load from source')\n\nvd.option('disp_wrap_max_lines', 3, 'max lines for multiline view')\nvd.option('disp_wrap_break_long_words', False, 'break words longer than column width in multiline')\nvd.option('disp_wrap_replace_whitespace', False, 'replace whitespace with spaces in multiline')\nvd.option('disp_wrap_placeholder', '…', 'multiline string to indicate truncation')\nvd.option('disp_multiline_focus', True, 'only multiline cursor row')\nvd.option('color_multiline_bottom', '', 'color of bottom line of multiline rows')  #2715\nvd.option('color_aggregator', 'bold 255 white on 240 black', 'color of aggregator summary on bottom row')\n\n\n@drawcache\ndef _splitcell(sheet, s, width=0, maxheight=1):\n    height = max(maxheight, sheet.options.disp_wrap_max_lines or 0)\n    if width <= 0 or height <= 0:\n        return [s]\n\n    wrap_kwargs = sheet.options.getall('disp_wrap_')\n    wrap_kwargs['max_lines'] = height\n\n    ret = []\n    for attr, text in s:\n        for line in textwrap.wrap(text, width=width, **wrap_kwargs):\n            if len(ret) >= maxheight:\n                ret[-1][0][1] += ' ' + line\n                break\n            else:\n                ret.append([[attr, line]])\n    return ret\n\ndisp_column_fill = ' ' # pad chars before column value\n\nclass Colorizer:\n    '''higher precedence color overrides lower; all non-color attributes combine.\n       coloropt is the color option name (like 'color_error').\n       func(sheet,col,row,value) should return a true value if coloropt should be applied\n       If coloropt is None, func() should return a coloropt (or None) instead'''\n\n    def __init__(self, precedence:int, coloropt:str, func=lambda s,c,r,v: None):\n        self.precedence = precedence\n        self.coloropt = coloropt\n        self._func = func\n\nclass RowColorizer(Colorizer):\n    def func(self, s, c, r, v):\n        return r is not None and self._func(s,c,r,v)\n\nclass ColumnColorizer(Colorizer):\n    def func(self, s, c, r, v):\n        return c is not None and self._func(s,c,r,v)\n\nclass CellColorizer(Colorizer):\n    def func(self, s, c, r, v):\n        return r is not None and c is not None and self._func(s,c,r,v)\n\n\nclass RecursiveExprException(Exception):\n    pass\n\nclass LazyComputeRow:\n    'Calculate column values as needed.'\n    def __init__(self, sheet, row, col=None, **kwargs):\n        self.row = row\n        self.col = col\n        self.sheet = sheet\n        self.extra = AttrDict(kwargs) # extra bindings\n        self._usedcols = set()\n\n        self._lcm.clear()  # reset locals on lcm\n\n    @property\n    def _lcm(self):\n        lcmobj = self.col or self.sheet\n        if not hasattr(lcmobj, '_lcm'):\n            lcmobj._lcm = LazyChainMap(self.sheet, self.col, self.extra, *vd.contexts)\n        return lcmobj._lcm\n\n    def __iter__(self):\n        yield from self.sheet.availColnames\n        yield from self._lcm.keys()\n        yield 'row'\n        yield 'sheet'\n        yield 'col'\n\n    def keys(self):\n        return list(self.__iter__())\n\n    def __str__(self):\n        return str(self.as_dict())\n\n    def as_dict(self):\n        return {c.name:self[c.name] for c in self.sheet.visibleCols}\n\n    def __getattr__(self, k):\n        return self.__getitem__(k)\n\n    def __getitem__(self, colid):\n        try:\n            i = self.sheet.availColnames.index(colid)\n            c = self.sheet.availCols[i]\n            if c is self.col:  # ignore current column\n                j = self.sheet.availColnames[i+1:].index(colid)\n                c = self.sheet.availCols[i+j+1]\n\n        except ValueError:\n            try:\n                c = self._lcm[colid]\n            except (KeyError, AttributeError) as e:\n                if colid == 'sheet': return self.sheet\n                elif colid == 'row': return self\n                elif colid == '_row': return self.row\n                elif colid == 'col': c = self.col\n                else:\n                    raise KeyError(colid) from e\n\n        if not isinstance(c, Column):  # columns calc in the context of the row of the cell being calc'ed\n            return c\n\n        if c in self._usedcols:\n            raise RecursiveExprException()\n\n        self._usedcols.add(c)\n        ret = c.getTypedValue(self.row)\n        self._usedcols.remove(c)\n        return ret\n\nclass BasicRow(collections.defaultdict):\n    def __init__(self, *args):\n        collections.defaultdict.__init__(self, lambda: None)\n    def __bool__(self):\n        return True\n\nclass TableSheet(BaseSheet):\n    'Base class for sheets with row objects and column views.'\n    _rowtype = lambda: BasicRow()\n    _coltype = SettableColumn\n\n    rowtype = 'rows'\n    guide = '# {sheet.help_title}\\n'\n\n    @property\n    def help_title(self):\n        if isinstance(self.source, visidata.Path):\n            return 'Source Table'\n        else:\n            return 'Table Sheet'\n\n    columns = []  # list of Column\n    colorizers = [ # list of Colorizer\n        CellColorizer(2, 'color_default_hdr', lambda s,c,r,v: r is None),\n        ColumnColorizer(2, 'color_current_col', lambda s,c,r,v: c is s.cursorCol),\n        ColumnColorizer(1, 'color_key_col', lambda s,c,r,v: c and c.keycol),\n        CellColorizer(0, 'color_default', lambda s,c,r,v: True),\n        RowColorizer(1, 'color_error', lambda s,c,r,v: isinstance(r, (Exception, TypedExceptionWrapper))),\n        CellColorizer(3, 'color_current_cell', lambda s,c,r,v: c is s.cursorCol and r is s.cursorRow),\n        ColumnColorizer(1, 'color_hidden_col', lambda s,c,r,v: c and c.hidden),\n    ]\n    nKeys = 0  # columns[:nKeys] are key columns\n    _ordering = []  # list of (col:Column|str, reverse:bool)\n\n    def __init__(self, *names, rows=UNLOADED, **kwargs):\n        super().__init__(*names, rows=rows, **kwargs)\n        self.cursorRowIndex = 0  # absolute index of cursor into self.rows\n        self.cursorVisibleColIndex = 0  # index of cursor into self.visibleCols\n\n        self._topRowIndex = 0     # cursorRowIndex of topmost row\n        self.leftVisibleColIndex = 0    # cursorVisibleColIndex of leftmost column\n        self.rightVisibleColIndex = 0\n\n        # as computed during draw()\n        self._rowLayout = {}      # [rowidx] -> (y, w)\n        self._visibleColLayout = {}      # [vcolidx] -> (x, w)\n\n        # list of all columns in display order\n        self.initialCols = kwargs.pop('columns', None) or type(self).columns\n        self.colname_ctr = 0\n        self.resetCols()\n\n        self._ordering = list(type(self)._ordering)  #2254\n        self._colorizers = self.classColorizers\n        self.recalc()  # set .sheet on columns and start caches\n\n        self.__dict__.update(kwargs)  # also done earlier in BaseSheet.__init__\n\n    @property\n    def topRowIndex(self):\n        return self._topRowIndex\n\n    @topRowIndex.setter\n    def topRowIndex(self, v):\n        self._topRowIndex = v\n        self._rowLayout.clear()\n\n    def addColorizer(self, c):\n        'Add Colorizer *c* to the list of colorizers for this sheet.'\n        self._colorizers.append(c)\n        self._colorizers = sorted(self._colorizers, key=lambda x: x.precedence, reverse=True)\n\n    def removeColorizer(self, c):\n        'Remove Colorizer *c* from the list of colorizers for this sheet.'\n        self._colorizers.remove(c)\n\n    @property\n    def classColorizers(self) -> list:\n        'List of all colorizers from sheet class hierarchy in precedence order (highest precedence first)'\n        # all colorizers must be in the same bucket\n        # otherwise, precedence does not get applied properly\n        _colorizers = set()\n\n        for b in [self] + list(type(self).superclasses()):\n            for c in getattr(b, 'colorizers', []):\n                _colorizers.add(c)\n\n        return sorted(_colorizers, key=lambda x: x.precedence, reverse=True)\n\n    def _colorize(self, col, row, value=None) -> ColorAttr:\n        'Return ColorAttr for the given colorizers/col/row/value'\n\n        colorstack = []\n        for colorizer in self._colorizers:\n            try:\n                r = colorizer.func(self, col, row, value)\n                if r:\n                    colorstack.append((colorizer.precedence, colorizer.coloropt if colorizer.coloropt else r))\n            except Exception as e:\n                vd.exceptionCaught(e)\n\n        return colors.resolve_colors(tuple(colorstack))\n\n    def addRow(self, row, index=None):\n        'Insert *row* at *index*, or append at end of rows if *index* is None.'\n        if index is None:\n            self.rows.append(row)\n        else:\n            self.rows.insert(index, row)\n            if self.cursorRowIndex and self.cursorRowIndex >= index:\n                self.cursorRowIndex += 1\n        return row\n\n    def newRow(self):\n        'Return new blank row compatible with this sheet.  Overridable.'\n        return type(self)._rowtype()\n\n    @drawcache_property\n    def colsByName(self):\n        'Return dict of colname:col'\n        # dict comprehension in reverse order so first column with the name is used\n        return {col.name:col for col in self.columns[::-1]}\n\n    def column(self, colname):\n        'Return first column whose name matches *colname*.'\n        return self.colsByName.get(colname) or vd.fail('no column matching \"%s\"' % colname)\n\n    def recalc(self):\n        'Clear caches and set the ``sheet`` attribute on all columns.'\n        for c in self.columns:\n            c.recalc(self)\n\n    @asyncthread\n    def reload(self):\n        'Load or reload rows and columns from ``self.source``.  Async.  Override resetCols() or loader() in subclass.'\n        with visidata.ScopedSetattr(self, 'loading', True):\n            self.resetCols()\n            self.beforeLoad()\n            try:\n                self.loader()\n                vd.debug(f'finished loading {self}')\n            finally:\n                self.afterLoad()\n\n        self.recalc()\n\n    def beforeLoad(self):\n        pass\n\n    def resetCols(self):\n        'Reset columns to class settings or constructor settings'\n        self.columns = []\n        for c in self.initialCols:\n            self.addColumn(deepcopy(c))\n            if c.disp_expert and vd.wantsHelp('nometacols'):\n                c.hide()\n\n        self.setKeys(self.columns[:self.nKeys])\n\n    def loader(self):\n        'Reset rows and sync load ``source`` via iterload.  Overridable.'\n        try:\n            for r in self._iterloader():\n                pass\n        except FileNotFoundError:\n            return  # let it be a blank sheet without error\n\n    def _iterloader(self):\n        self.rows = []\n        with vd.Progress(gerund='loading', total=0):\n            max_rows = self.options.max_rows\n            for i, r in enumerate(self.iterload()):\n                if self.precious and i >= max_rows:\n                    break\n                self.addRow(r)\n                yield r\n\n    def iterload(self):\n        'Generate rows from ``self.source``.  Override in subclass.'\n        if False:\n            yield vd.fail('no iterload for this loader yet')\n\n    def loadStart(self):\n        self.loaditer = self._iterloader()\n\n    def loadSome(self):\n        if not self.loaditer:\n            return False\n        try:\n            next(self.loaditer)\n            return True\n        except StopIteration:\n            self.loaditer = None\n            return False\n\n    def afterLoad(self):\n        'hook for after loading has finished.  Overridable (be sure to call super).'\n        # if an ordering has been specified, sort the sheet\n        if self._ordering:\n            vd.sync(self.sort())\n\n    def iterrows(self, gerund='iterating'):\n        if self.rows is UNLOADED:\n            try:\n                self.rows = []\n                for row in self.iterload():\n                    self.addRow(row)\n                    yield row\n                return\n            except ExpectedException:\n                vd.sync(self.reload())\n\n        for row in vd.Progress(list(self.rows), gerund=gerund, total=self.nRows):\n            yield row\n\n    def __iter__(self):\n        for row in self.iterrows():\n            yield LazyComputeRow(self, row)\n\n\n    def __copy__(self):\n        'Copy sheet design but remain unloaded. Deepcopy columns so their attributes (width, type, name) may be adjusted independently of the original.'\n        ret = super().__copy__()\n        ret.rows = UNLOADED\n\n        ret.columns = []\n\n        col_mapping = {}\n        for c in self.columns:\n            new_col = copy(c)\n            col_mapping[c] = new_col\n            ret.addColumn(new_col)\n\n        ret.setKeys([col_mapping[c] for c in self.columns if c.keycol])\n\n        ret._ordering = []\n        for sortcol,reverse in self._ordering:\n            if isinstance(sortcol, str):\n                ret._ordering.append((sortcol,reverse))\n            else:\n                ret._ordering.append((col_mapping[sortcol],reverse))\n\n        ret.topRowIndex = ret.cursorRowIndex = 0\n        return ret\n\n    @property\n    def bottomRowIndex(self):\n        return self.topRowIndex+self.nScreenRows-1\n\n    @bottomRowIndex.setter\n    def bottomRowIndex(self, newidx):\n        self._topRowIndex = newidx-self.nScreenRows+1\n\n    @drawcache_property\n    def rowHeight(self):\n        cols = self.visibleCols\n        return max(c.height for c in cols) if cols else 1\n\n    def __deepcopy__(self, memo):\n        'same as __copy__'\n        ret = self.__copy__()\n        memo[id(self)] = ret\n        return ret\n\n    def __str__(self):\n        return self.name\n\n    def __repr__(self):\n        return f'<{type(self).__name__}: {self.name}>'\n\n    @drawcache_property\n    def currow(self):\n        return LazyComputeRow(self, self.cursorRow, self.cursorCol)\n\n    def evalExpr(self, expr:str, row=None, col=None, **kwargs):\n        'eval() expr in the context of (row, col), with extra bindings in kwargs'\n        if row is not None:\n            # contexts are cached by sheet/rowid for duration of drawcycle\n            contexts = vd._evalcontexts.setdefault((self, self.rowid(row), col), LazyComputeRow(self, row, col, **kwargs))\n        else:\n            contexts = dict(sheet=self)\n\n        return eval(expr, vd.getGlobals(), contexts)\n\n    def rowid(self, row):\n        'Return a unique and stable hash of the *row* object.  Must be fast.  Overridable.'\n        return id(row)\n\n    @property\n    def nScreenRows(self):\n        'Number of visible rows at the current window height.'\n        n = (self.windowHeight-self.nHeaderRows-self.nFooterRows)\n        if self.options.disp_multiline_focus:  # focus multiline mode\n            return n-self.rowHeight+1\n        return n//self.rowHeight\n\n    @drawcache_property\n    def nHeaderRows(self):\n        vcols = self.visibleCols\n        return max(0, 1, *(len(col.name.split('\\n')) for col in vcols))\n\n    @property\n    def nFooterRows(self):\n        'Number of lines reserved at the bottom, including status line.'\n        return len(self.allAggregators) + 1\n\n    @property\n    def cursorCol(self):\n        'Current Column object.'\n        vcols = self.availCols\n        return vcols[min(self.cursorVisibleColIndex, len(vcols)-1)] if vcols else None\n\n    @property\n    def cursorRow(self):\n        'The row object at the row cursor.'\n        idx = self.cursorRowIndex\n        return self.rows[idx] if self.nRows > idx else None\n\n    @property\n    def visibleRows(self):  # onscreen rows\n        'List of rows onscreen.'\n        return self.rows[self.topRowIndex:self.topRowIndex+self.nScreenRows]\n\n    @drawcache_property\n    def visibleCols(self):  # non-hidden cols\n        'List of non-hidden columns in display order.'\n        return (self.keyCols + [c for c in self.columns if not c.hidden and not c.keycol]) or [Column('', sheet=self)]\n\n    @drawcache_property\n    def keyCols(self):\n        'List of visible key columns.'\n        return sorted([c for c in self.columns if c.keycol and not c.hidden], key=lambda c:c.keycol)\n\n    @drawcache_property\n    def availCols(self):\n        'List of all available columns, visible columns first.'\n        return self.visibleCols + [c for c in self.columns if c.hidden]\n\n    @drawcache_property\n    def availColnames(self):\n        'List of all available column names, visible columns first.'\n        return [c.name for c in self.availCols]\n\n    @property\n    def cursorColIndex(self):\n        'Index of current column into `Sheet.columns`. Linear search; prefer `cursorCol` or `cursorVisibleColIndex`.'\n        try:\n            return self.columns.index(self.cursorCol)\n        except ValueError:\n            return 0\n\n    @property\n    def nonKeyVisibleCols(self):\n        'List of visible non-key columns.'\n        return [c for c in self.columns if not c.hidden and c not in self.keyCols]\n\n    @property\n    def numericCols(self):\n        'Fanout of visible numeric columns.'\n        return Fanout(vd.numericCols(self.visibleCols))\n\n    @property\n    def keyColNames(self):\n        'String of key column names, for SheetsSheet convenience.'\n        return ' '.join(c.name for c in self.keyCols)\n\n    @keyColNames.setter\n    def keyColNames(self, v):  #2122\n        'Set key columns on this sheet to the space-separated list of column names.'\n        newkeys = [self.column(colname) for colname in v.split()]\n        self.unsetKeys(self.keyCols)\n        self.setKeys(newkeys)\n\n    @property\n    def cursorCell(self):\n        'Displayed value (DisplayWrapper) at current row and column.'\n        return self.cursorCol.getCell(self.cursorRow)\n\n    @property\n    def cursorDisplay(self):\n        'Displayed value (DisplayWrapper.text) at current row and column.'\n        return self.cursorCol.getDisplayValue(self.cursorRow)\n\n    @property\n    def cursorFullDisplay(self):\n        'Full displayed value (without truncating on width) at current row and column.'\n        return self.cursorCol.getFullDisplayValue(self.cursorRow)\n\n    @property\n    def cursorTypedValue(self):\n        'Typed value at current row and column.'\n        return self.cursorCol.getTypedValue(self.cursorRow)\n\n    @property\n    def cursorValue(self):\n        'Raw value at current row and column.'\n        return self.cursorCol.getValue(self.cursorRow)\n\n    def getTypedRow(self, rownum):\n        return [c.getTypedValue(self.rows[rownum]) for c in self.availCols]\n\n    @property\n    def statusLine(self):\n        'Position of cursor and bounds of current sheet.'\n        rowinfo = 'row %d (%d selected)' % (self.cursorRowIndex, self.nSelectedRows)\n        colinfo = 'col %d (%d visible)' % (self.cursorVisibleColIndex, len(self.visibleCols))\n        return '%s  %s' % (rowinfo, colinfo)\n\n    @property\n    def nRows(self):\n        'Number of rows on this sheet.'\n        return len(self.rows)\n\n    @property\n    def nCols(self):\n        'Number of columns on this sheet.'\n        return len(self.columns)\n\n    @property\n    def nVisibleCols(self):\n        'Number of visible columns on this sheet.'\n        return len(self.visibleCols)\n\n    def cursorDown(self, n=1):\n        'Move cursor down `n` rows (or up if `n` is negative).'\n        self.cursorRowIndex += n\n\n    def cursorRight(self, n=1):\n        'Move cursor right `n` visible columns (or left if `n` is negative).'\n        self.cursorVisibleColIndex += n\n\n    def addColumn(self, *cols, index=None):\n        '''Insert all *cols* into columns at *index*, or append to end of columns if *index* is None.\n           If *index* is None, columns are being added by loader, instead of by user.\n           If added by user, mark sheet as modified.\n           Columns added by loader share sheet's defer status.\n           Columns added by user are not marked as deferred.\n           Return first column.'''\n        if not cols:\n            vd.warning('no columns to add')\n            return\n\n        if index is not None:\n            self.setModified()\n\n        for i, col in enumerate(cols):\n            col.name = self.maybeClean(col.name)\n            col.defer = self.defer\n\n            vd.addUndo(self.columns.remove, col)\n            idx = len(self.columns) if index is None else index\n            col.recalc(self)\n            self.columns.insert(idx+i, col)\n\n        # statements after addColumn in the same command may want to use these cached properties\n        Sheet.keyCols.fget.cache_clear()\n        Sheet.visibleCols.fget.cache_clear()\n        Sheet.availCols.fget.cache_clear()\n        Sheet.availColnames.fget.cache_clear()\n        Sheet.colsByName.fget.cache_clear()\n\n        return cols[0]\n\n    def addColumnAtCursor(self, *cols):\n        'Insert all *cols* into columns after cursor.  Return first column.'\n        index = 0\n        ccol = self.cursorCol\n        if ccol and not ccol.keycol:\n            try:\n                index = self.columns.index(ccol)+1\n            except ValueError: # when all columns are hidden, the one column shown is not in self.columns\n                index = 0\n\n        self.addColumn(*cols, index=index)\n        firstnewcol = [c for c in cols if not c.hidden][0]\n        self.cursorVisibleColIndex = self.visibleCols.index(firstnewcol)\n        return firstnewcol\n\n    def setColNames(self, rows):\n        for c in self.visibleCols:\n            c.name = '\\n'.join(str(c.getFullDisplayValue(r)) for r in rows)\n\n    def setKeys(self, cols):\n        'Make all *cols* into key columns.'\n        vd.addUndo(undoAttrFunc(cols, 'keycol'))\n        lastkeycol = 0\n        if self.keyCols:\n            lastkeycol = max(c.keycol for c in self.keyCols)\n        for col in cols:\n            if not col.keycol:\n                col.keycol = lastkeycol+1\n                lastkeycol += 1\n\n    def unsetKeys(self, cols):\n        'Make all *cols* non-key columns.'\n        vd.addUndo(undoAttrFunc(cols, 'keycol'))\n        for col in cols:\n            col.keycol = 0\n\n    def rowkey(self, row):\n        'Return tuple of the key for *row*.'\n        return tuple(c.getTypedValue(row) for c in self.keyCols)\n\n    def rowname(self, row):\n        'Return string of the key for *row*.'\n        return ','.join(map(str, self.rowkey(row)))\n\n    def checkCursor(self):\n        'Keep cursor in bounds of data and screen.'\n        # keep cursor within actual available rowset\n        if self.nRows == 0 or self.cursorRowIndex <= 0:\n            self.cursorRowIndex = 0\n        elif self.cursorRowIndex >= self.nRows:\n            self.cursorRowIndex = self.nRows-1\n\n        if self.cursorVisibleColIndex <= 0:\n            self.cursorVisibleColIndex = 0\n        elif self.cursorVisibleColIndex >= len(self.availCols):\n            self.cursorVisibleColIndex = len(self.availCols)-1\n\n        if self.topRowIndex < 0:\n            self.topRowIndex = 0\n        elif self.topRowIndex > self.nRows-1:\n            self.topRowIndex = self.nRows-1\n\n        self.adjustColLayout()\n\n        # calculations that rely on nScreenRows, like bottomRowIndex, need to be done after\n        # col layout has been adjusted. nScreenRows requires an accurate count of\n        # allAggregators, which requires knowing col visibility.\n        # check bounds, scroll if necessary\n        if self.topRowIndex > self.cursorRowIndex:\n            self.topRowIndex = self.cursorRowIndex\n        elif self.bottomRowIndex < self.cursorRowIndex:\n            self.bottomRowIndex = self.cursorRowIndex\n\n    def adjustColLayout(self):\n        '''Move the left visible column to try to keep the cursorCol visible.\n        though the cursorCol cannot be visible when screen is totally filled by keycols.\n        Run calcColLayout() at least once.'''\n        # jumping to a column left of the previously on-screen columns:   put cursorCol as leftmost col\n        # jumping to a column right of the previously on-screen columns:  put cursorCol as far right as possible\n        if self.leftVisibleColIndex > self.cursorVisibleColIndex:        # e.g. when jumping/moving left\n            self.leftVisibleColIndex = self.cursorVisibleColIndex\n        elif self.leftVisibleColIndex < self.cursorVisibleColIndex:      # e.g. when jumping/moving right\n            #move leftVisibleCol until the cursor column fits fully on screen\n            while self.leftVisibleColIndex < self.cursorVisibleColIndex:  #ensures termination even if screen is completely filled by keycols\n                self.calcColLayout()\n                if not self._visibleColLayout:\n                    break\n\n                # If the cursor is outside the visible columns currently laid out (1 window wide).\n                # One way to trigger this is with zc, jump to a column never seen yet.\n                mincolidx, maxcolidx = min(self._visibleColLayout.keys()), max(self._visibleColLayout.keys())\n                if self.cursorVisibleColIndex < mincolidx:\n                    # This case is expected never to occur. _visibleColLayout keys are enumerated from 0,\n                    # so mincolidx is always 0. and cursorVisibleColIndex is kept >= 0 (by checkCursor).\n                    self.leftVisibleColIndex = self.cursorVisibleColIndex\n                    break\n                elif self.cursorVisibleColIndex > maxcolidx:\n                    # some cases:  1) jumping rightward, so cursor has just moved to a column that is offscreen to the right\n                    #              2) when keycols fill entire screen\n                    self.leftVisibleColIndex += 1\n                    continue\n\n                cur_x, cur_w = self._visibleColLayout[self.cursorVisibleColIndex]\n                if cur_x+cur_w < self.windowWidth-1:  # current columns fit entirely on screen\n                    break\n                self.leftVisibleColIndex += 1  # once within the bounds, walk over one column at a time\n\n        if self.leftVisibleColIndex == self.cursorVisibleColIndex:  #will happen after cursor: jumped left, jumped right, or stayed in place\n            self.calcColLayout()\n\n    def calcColLayout(self):\n        '''Set right-most visible column, based on calculation.\n        Assign x coordinates and width to every column that fits on screen, visible or hidden.'''\n        minColWidth = dispwidth(self.options.disp_more_left)+dispwidth(self.options.disp_more_right)+2\n        sepColWidth = dispwidth(self.options.disp_column_sep)\n        winWidth = self.windowWidth\n        self._visibleColLayout = {}\n        x = 0\n        vcolidx = 0\n        for vcolidx, col in enumerate(self.availCols):\n            width = self.calcSingleColLayout(col, vcolidx, x, minColWidth)\n            if width is not None:\n                if x < winWidth-1:\n                    self._visibleColLayout[vcolidx] = [x, width]\n                    x += width+sepColWidth\n            if x >= winWidth-1:\n                break\n\n        self.rightVisibleColIndex = vcolidx\n\n    def calcSingleColLayout(self, col:Column, vcolidx:int, x:int=0, minColWidth:int=4):\n            '''Return the width, for key columns, or for columns that are rightward of\n            the leftmost visibleCol, even if they are offscreen or hidden. Return\n            None for columns left of cursorVisibleColIndex, if they are not key columns.'''\n            # We use a slice of rows that is similar to self.visibleRows but simpler,\n            # and larger. The goal is to avoid using nFooterRows. Because nFooterRows\n            # cannot in general be calculated properly until after calcColLayout() has\n            # determined which columns are visible.\n            vrows = self.rows[self.topRowIndex:self.topRowIndex+self.windowHeight]\n            if col.width is None and len(vrows) > 0:\n                measure_rows = vrows if self.nRows > 1000 else self.rows[:1000]  #1964\n                # handle delayed column width-finding\n                col.width = max(col.getMaxWidth(measure_rows), minColWidth)\n                if vcolidx < self.nVisibleCols-1:  # let last column fill up the max width\n                    col.width = min(col.width, self.options.default_width)\n\n            width = col.width if col.width is not None else self.options.default_width\n\n            # when cursor showing a hidden column\n            if vcolidx >= self.nVisibleCols and vcolidx == self.cursorVisibleColIndex:\n                width = self.options.default_width\n\n            #subtract 1 character of empty space from windowWidth, for the margin to the right of the sheet\n            width = min(width, self.windowWidth-x-1)\n            width = max(width, 1)\n            if col in self.keyCols or vcolidx >= self.leftVisibleColIndex:  # visible columns\n                return width\n\n\n    def drawColHeader(self, scr, y, h, vcolidx):\n        'Compose and draw column header for given vcolidx.'\n        col = self.availCols[vcolidx]\n\n        # hdrattr highlights whole column header\n        # sepattr is for header separators and indicators\n        sepcattr = update_attr(colors.color_default, colors.get_color('color_column_sep'), 2)\n\n        hdrcattr = self._colorize(col, None)\n        if vcolidx == self.cursorVisibleColIndex:\n            hdrcattr = update_attr(hdrcattr, colors.color_current_hdr, 2)\n\n        C = self.options.disp_column_sep\n        if (self.keyCols and col is self.keyCols[-1]) or vcolidx == self.nVisibleCols-1:\n            C = self.options.disp_keycol_sep\n\n        x, colwidth = self._visibleColLayout[vcolidx]\n\n        # AnameTC\n        T = vd.getType(col.type).icon\n        if T is None:  # still allow icon to be explicitly non-displayed ''\n            T = '?'\n\n        hdrs = col.name.split('\\n')\n        for i in range(h):\n            name = ''\n            if colwidth > 2:\n                name = ' '  # save room at front for LeftMore or sorted arrow\n\n            if h-i-1 < len(hdrs):\n                name += hdrs[::-1][h-i-1]\n\n            if i == h-1:\n                hdrcattr = update_attr(hdrcattr, colors.color_bottom_hdr, 5)\n\n            if y+i < self.windowHeight:\n                clipdraw(scr, y+i, x, name, hdrcattr, w=colwidth, literal=True)\n            vd.onMouse(scr, x, y+i, colwidth, 1, BUTTON3_RELEASED='rename-col')\n\n            if C and x+colwidth+dispwidth(C) < self.windowWidth and y+i < self.windowHeight:\n                scr.addstr(y+i, x+colwidth, C, sepcattr.attr)\n\n        clipdraw(scr, y+h-1, min(x+colwidth, self.windowWidth-1)-dispwidth(T), T, hdrcattr, literal=True)\n\n        try:\n            if vcolidx == self.leftVisibleColIndex and col not in self.keyCols and self.nonKeyVisibleCols.index(col) > 0:\n                A = self.options.disp_more_left\n                scr.addstr(y, x, A, sepcattr.attr)\n        except ValueError:  # from .index\n            pass\n\n        try:\n            A = ''\n            for j, (sortcol, sortdir) in enumerate(self._ordering):\n                if isinstance(sortcol, str):\n                    sortcol = self.colsByName.get(sortcol)  # self.column will fail if sortcol was renamed\n                if col is sortcol:\n                    A = self.options.disp_sort_desc[j] if sortdir else self.options.disp_sort_asc[j]\n                    scr.addstr(y+h-1, x, A, hdrcattr.attr)\n                    break\n        except IndexError:\n            pass\n\n    def isVisibleIdxKey(self, vcolidx):\n        'Return boolean: is given column index a key column?'\n        return self.visibleCols[vcolidx] in self.keyCols\n\n    @drawcache_property\n    def allAggregators(self):\n        'Return dict of aggname -> list of cols with that aggregator.'\n        allaggs = collections.defaultdict(list) # aggname -> list of cols with that aggregator\n        for vcolidx, (x, colwidth) in sorted(self._visibleColLayout.items()):\n            col = self.availCols[vcolidx]\n            if not col.hidden:\n                for aggr in col.aggregators:\n                    allaggs[aggr.name].append(vcolidx)\n        return allaggs\n\n    def draw(self, scr):\n        'Draw entire screen onto the `scr` curses object.'\n        if not self.columns:\n            return\n\n        drawparams = {\n            'isNull': self.isNullFunc(),\n\n            'topsep': self.options.disp_rowtop_sep,\n            'midsep': self.options.disp_rowmid_sep,\n            'botsep': self.options.disp_rowbot_sep,\n            'endsep': self.options.disp_rowend_sep,\n            'keytopsep': self.options.disp_keytop_sep,\n            'keymidsep': self.options.disp_keymid_sep,\n            'keybotsep': self.options.disp_keybot_sep,\n            'endtopsep': self.options.disp_endtop_sep,\n            'endmidsep': self.options.disp_endmid_sep,\n            'endbotsep': self.options.disp_endbot_sep,\n\n            'colsep': self.options.disp_column_sep,\n            'keysep': self.options.disp_keycol_sep,\n            'selectednote': self.options.disp_selected_note,\n            'disp_truncator': self.options.disp_truncator,\n        }\n\n        self._rowLayout = {}  # [rowidx] -> (y, height)\n        self.calcColLayout()\n\n        numHeaderRows = self.nHeaderRows\n        vcolidx = 0\n\n        headerRow = 0\n        for vcolidx, colinfo in sorted(self._visibleColLayout.items()):\n            self.drawColHeader(scr, headerRow, numHeaderRows, vcolidx)\n\n        y = headerRow + numHeaderRows\n\n        rows = self.rows[self.topRowIndex:min(self.topRowIndex+self.nScreenRows, self.nRows)]\n        vd.callNoExceptions(self.checkCursor)\n\n        for rowidx, row in enumerate(rows):\n            if y >= self.windowHeight-1:\n                break\n\n            rowcattr = self._colorize(None, row)\n\n            y += self.drawRow(scr, row, self.topRowIndex+rowidx, y, rowcattr, maxheight=self.windowHeight-y-1, **drawparams)\n\n        if vcolidx+1 < self.nVisibleCols:\n            scr.addstr(headerRow, self.windowWidth-2, self.options.disp_more_right, colors.color_column_sep.attr)\n\n        # draw bottom-row aggregators  #2209\n        rightx, rightw = self._visibleColLayout[self.rightVisibleColIndex]\n        agglabelx = rightx+rightw+1\n        if agglabelx > self.windowWidth-9: # if offscreen, put labels in first non-aggregated column\n            for vcolidx, (x, _) in sorted(self._visibleColLayout.items()):\n                col = self.availCols[vcolidx]\n                if not col.aggregators:\n                    agglabelx = x\n                    break\n\n        for aggrname, colidxs in self.allAggregators.items():\n            clipdraw(scr, y, 0, f' ', colors.color_aggregator, w=min(rightx+rightw+10, self.windowWidth-1), literal=True)\n            clipdraw(scr, y, agglabelx, f' {aggrname:9}', colors.color_aggregator, truncator='', literal=True)\n\n            for vcolidx in colidxs:\n                x, colwidth = self._visibleColLayout[vcolidx]\n                col = self.availCols[vcolidx]\n\n                if not col.hidden:\n                    dw = DisplayWrapper('')\n                    try:\n                        agg = vd.aggregators[aggrname]\n                        dw.value = col.aggregateTotal(agg)\n                        dw.typedval = wrapply(agg.type or col.type, dw.value)\n                        dw.text = col.format(dw.typedval)\n                    except Exception as e:\n                        dw.note = self.options.disp_note_typeexc\n                        dw.notecolor = 'color_warning'\n                        vd.exceptionCaught(e, status=False)\n                    disps = [('', ' ')] + list(col.display(dw, width=colwidth))\n                    clipdraw_chunks(scr, y, x, disps, colors.color_aggregator, w=colwidth)\n            y += 1\n\n\n    def calc_height(self, row, displines=None, isNull=None, maxheight=1):\n            'render cell contents for row into displines'\n            if displines is None:\n                displines = {}  # [vcolidx] -> list of lines in that cell\n\n            for vcolidx, (x, colwidth) in sorted(self._visibleColLayout.items()):\n                if x < self.windowWidth:  # only draw inside window\n                    vcols = self.availCols\n                    if vcolidx >= self.nVisibleCols and vcolidx != self.cursorVisibleColIndex:\n                        continue\n                    col = vcols[vcolidx]\n                    cellval = col.getCell(row)\n\n                    cellval.display = col.display(cellval, colwidth)\n\n                    try:\n                        if isNull and isNull(cellval.value):\n                            cellval.note = self.options.disp_note_none\n                            cellval.notecolor = 'color_note_type'\n                    except (TypeError, ValueError):\n                        pass\n\n                    if maxheight > 1:\n                        lines = _splitcell(self, cellval.display, width=colwidth-2, maxheight=maxheight)\n                    else:\n                        lines = [cellval.display]\n                    displines[vcolidx] = (col, cellval, lines)\n\n            if len(displines) == 0:\n                return 0\n            return max(len(lines) for _, _, lines in displines.values())\n\n    def drawRow(self, scr, row, rowidx, ybase, rowcattr: ColorAttr, maxheight,\n            isNull='',\n            topsep='',\n            midsep='',\n            botsep='',\n            endsep='',\n            keytopsep='',\n            keymidsep='',\n            keybotsep='',\n            endtopsep='',\n            endmidsep='',\n            endbotsep='',\n            colsep='',\n            keysep='',\n            selectednote='',\n            disp_truncator=''\n       ):\n            # sepattr is the attr between cell/columns\n            sepcattr = update_attr(rowcattr, colors.color_column_sep, 1)\n\n            # apply current row here instead of in a colorizer, because it needs to know dispRowIndex\n            if rowidx == self.cursorRowIndex:\n                color_current_row = colors.get_color('color_current_row', 2)\n                basecellcattr = sepcattr = update_attr(rowcattr, color_current_row)\n            else:\n                basecellcattr = rowcattr\n\n            # calc_height renders cell contents into displines\n            displines = {}  # [vcolidx] -> list of lines in that cell\n            if options.disp_multiline_focus:\n                height = self.rowHeight if rowidx == self.cursorRowIndex else 1\n            else:\n                height = min(self.rowHeight, maxheight) or 1  # display even empty rows\n\n            self.calc_height(row, displines, maxheight=height)\n\n            self._rowLayout[rowidx] = (ybase, height)\n\n            if height > 1:\n                colseps = [topsep] + [midsep]*(height-2) + [botsep]\n                endseps = [endtopsep] + [endmidsep]*(height-2) + [endbotsep]\n                keyseps = [keytopsep] + [keymidsep]*(height-2) + [keybotsep]\n                color_multiline_bottom = colors.get_color('color_multiline_bottom', 2)\n            else:\n                colseps = [colsep]\n                endseps = [endsep]\n                keyseps = [keysep]\n                color_multiline_bottom = 0\n\n            for vcolidx, (col, cellval, lines) in displines.items():\n                    if vcolidx not in self._visibleColLayout:\n                        continue\n\n                    if vcolidx == self.nVisibleCols-1:  # right edge of sheet\n                        seps = endseps\n                    elif (self.keyCols and col is self.keyCols[-1]): # last keycol\n                        seps = keyseps\n                    else:\n                        seps = colseps\n\n                    x, colwidth = self._visibleColLayout[vcolidx]\n                    hoffset = col.hoffset\n                    voffset = col.voffset\n\n                    cattr = self._colorize(col, row, cellval)\n                    cattr = update_attr(cattr, basecellcattr)\n                    bottomcattr = update_attr(cattr, color_multiline_bottom) if height > 1 else cattr\n\n                    note = getattr(cellval, 'note', None)\n                    notewidth = 1 if note else 0\n                    if note:\n                        notecattr = update_attr(cattr, colors.get_color(cellval.notecolor), 10)\n                        clipdraw(scr, ybase, x+colwidth-notewidth, note, notecattr)\n\n                    lines = lines[voffset:]\n\n                    if len(lines) > height:\n                        lines = lines[:height]\n                    elif len(lines) < height:\n                        lines.extend([[('', '')]]*(height-len(lines)))\n\n                    if self.options.get('highlight_search', False):\n                        hp = col.highlight_regex or self.highlight_regex\n                        hl_attr = colors.color_highlight_search\n                    else:\n                        hp = None\n\n                    for i, chunks in enumerate(lines): #chunks is a generator\n                        y = ybase+i\n\n                        sepchars = seps[i]\n\n                        left_hl = right_hl = False\n                        if hp: # chunks becomes a list\n                            chunks, left_hl, right_hl = self.highlight_chunks(chunks, hp, hoffset, colwidth, notewidth, cattr, hl_attr)\n                        else:\n                            chunks = [(attr, text[hoffset:]) for attr, text in chunks]\n                        if colwidth > 2:\n                            pre = disp_truncator if hoffset != 0 else disp_column_fill\n                            chunks.insert(0, (hl_attr if left_hl else cattr, pre))\n                        clipdraw_chunks(scr, y, x, chunks, cattr if i < height-1 else bottomcattr, w=colwidth-notewidth)\n                        if right_hl:\n                            hl_attr = update_attr(cattr, hl_attr, 100)\n                            clipdraw(scr, y, x+(colwidth-notewidth-1), disp_truncator, hl_attr, w=dispwidth(disp_truncator))\n                        vd.onMouse(scr, x, y, colwidth, 1, BUTTON3_RELEASED='edit-cell')\n\n                        if sepchars and x+colwidth+dispwidth(sepchars) <= self.windowWidth-1:\n                            scr.addstr(y, x+colwidth, sepchars, sepcattr.attr)\n\n            for notefunc in vd.rowNoters:\n                ch = notefunc(self, row)\n                if ch:\n                    clipdraw(scr, ybase, 0, ch, colors.color_note_row, literal=True)\n                    break\n\n            return height\n\n    def incremented_colname(self):\n        vd.addUndo(setattr, self, 'colname_ctr', self.colname_ctr)\n        self.colname_ctr += 1\n        return colname_letters(self.colname_ctr)\n\nvd.rowNoters = [\n    # f(sheet, row) -> character to be displayed on the left side of row\n]\n\nSheet = TableSheet  # deprecated in 2.0 but still widely used internally\n\n\nclass SequenceSheet(Sheet):\n    'Sheets with ``ColumnItem`` columns, and rows that are Python sequences (list, namedtuple, etc).'\n    def setCols(self, headerrows):\n        self.columns = []\n        vd.clearCaches()  #1997\n        for i, colnamelines in enumerate(itertools.zip_longest(*headerrows, fillvalue='')):\n            colnamelines = ['' if c is None else c for c in colnamelines]\n            self.addColumn(ColumnItem(''.join(map(str, colnamelines)), i))\n\n        self._rowtype = namedlist('tsvobj', [(c.name or '_') for c in self.columns])\n\n    def newRow(self):\n        return self._rowtype()\n\n    def addRow(self, row, index=None):\n        for i in range(len(self.columns), len(row)):  # no-op if already done\n            self.addColumn(ColumnItem('', i))\n            self._rowtype = namedlist('tsvobj', [(c.name or '_') for c in self.columns])\n        if type(row) is not self._rowtype:\n            row = self._rowtype(row)\n        super().addRow(row, index=index)\n\n    def optlines(self, it, optname):\n        'Generate next options.<optname> elements from iterator with exceptions wrapped.'\n        for i in range(self.options.getobj(optname, self)):\n            try:\n                yield next(it)\n            except StopIteration:\n                break\n\n    def loader(self):\n        'Skip first options.skip rows; set columns from next options.header rows.'\n\n        itsource = self.iterload()\n\n        # skip the first options.skip rows\n        list(self.optlines(itsource, 'skip'))\n\n        # use the next options.header rows as columns\n        self.setCols(list(self.optlines(itsource, 'header')))\n\n        self.rows = []\n        # add the rest of the rows\n        max_rows = self.options.max_rows\n        for i, r in enumerate(vd.Progress(itsource, gerund='loading', total=0)):\n            if self.precious and i >= max_rows:\n                break\n            self.addRow(r)\n\n\n@VisiData.property\n@drawcache\ndef _evalcontexts(vd):\n    return {}\n\n## VisiData sheet manipulation\n\n@VisiData.api\ndef replace(vd, vs):\n    'Replace top sheet with the given sheet `vs`.'\n    vd.sheets.pop(0)\n    return vd.push(vs)\n\n\n@VisiData.api\ndef remove(vd, vs):\n    'Remove *vs* from sheets stack, without asking for confirmation.'\n    if vs in vd.sheets:\n        vd.sheets.remove(vs)\n        if vs in vd.allSheets:\n            vd.allSheets.remove(vs)\n            vd.allSheets.append(vs)\n    else:\n        vd.fail('sheet not on stack')\n\n\n@VisiData.api\ndef push(vd, vs, pane=0, load=True):\n    'Push Sheet *vs* onto ``vd.sheets`` stack for *pane* (0 for active pane, -1 for inactive pane).  Remove from other position if already on sheets stack.'\n    if not isinstance(vs, BaseSheet):\n        return  # return instead of raise, some commands need this\n\n    if vs in vd.sheets:\n        vd.sheets.remove(vs)\n\n    vs.vd = vd\n    if pane == -1:\n        vs.pane = 2 if vd.activePane == 1 else 1\n    elif pane == 0:\n        if not vd.sheetstack(1): vd.activePane=vs.pane=1\n        elif not vd.sheetstack(2) and vd.options.disp_splitwin_pct != 0: vd.activePane=vs.pane=2\n        else: vs.pane = vd.activePane\n    else:\n        vs.pane = pane\n\n    vd.sheets.insert(0, vs)\n\n    if vs.precious and vs not in vd.allSheets:\n        vd.allSheets.append(vs)\n\n    if load:\n        vs.ensureLoaded()\n    if vd.activeCommand:\n        vs.longname = vd.activeCommand.longname\n\n\n@VisiData.api\ndef quit(vd, *sheets):\n    'Remove *sheets* from sheets stack, asking for confirmation if needed.'\n\n    remaining = set(vd.stackedSheets) - set(sheets)\n    exiting = not remaining\n    if exiting and vd.options.quitguard and not vd._nextCommands:\n        nmodified = sum(1 for vs in sheets if vs.precious and vs.hasBeenModified)\n        modmsg = f' ({nmodified} sheet(s) modified)' if nmodified else ' (nothing modified)'\n        vd.draw_all()\n        vd.confirm(f'exit VisiData{modmsg}? ')\n\n    for vs in sheets:\n        if not exiting:\n            vs.confirmQuit('quit')\n        vs.pane = 0\n        vd.remove(vs)\n    if vd.activeCommand:\n        vd.activeSheet.longname = vd.activeCommand.longname\n\n\n@BaseSheet.api\ndef confirmQuit(vs, verb='quit'):\n    if vs.options.quitguard and vs.precious and vs.hasBeenModified and not vd._nextCommands:\n        vd.draw_all()\n        vd.confirm(f'{verb} modified sheet \"{vs.name}\"? ')\n    elif vs.options.getonly('quitguard', vs, False) and not vd._nextCommands:  # if this sheet is specifically guarded\n        vd.draw_all()\n        vd.confirm(f'{verb} guarded sheet \"{vs.name}\"? ')\n\n\n@BaseSheet.api\ndef preloadHook(sheet):\n    'Override to setup for reload().'\n    sheet.confirmQuit('reload')\n\n    sheet.hasBeenModified = False\n\n\n@VisiData.api\ndef newSheet(vd, name, ncols, **kwargs):\n    cols = [SettableColumn(width=vd.options.default_width, name=f'{colname_letters(i+1)}') for i in range(ncols)]\n    vs = Sheet(name, columns=cols, **kwargs)\n    vs.colname_ctr = ncols\n    return vs\n\n@BaseSheet.api\ndef quitAndReleaseMemory(vs):\n    'Release largest memory consumer refs on *vs* to free up memory.'\n    if isinstance(vs.source, visidata.Path):\n        vs.source.lines.clear() # clear cache of read lines\n\n    if vs.precious: # only precious sheets have meaningful data\n        vs.confirmQuit('quit')\n        vs.rows.clear()\n        vs.rows = UNLOADED\n        vd.remove(vs)\n        vd.allSheets.remove(vs)\n\n\n@BaseSheet.api\ndef splitPane(sheet, pct=None):\n    if vd.activeStack[1:]:\n        undersheet = vd.activeStack[1]\n        pane = 1 if undersheet.pane == 2 else 2\n        vd.push(undersheet, pane=pane)\n        vd.activePane = pane\n\n    vd.options.disp_splitwin_pct = pct\n\n\n@Sheet.api\ndef async_deepcopy(sheet, rowlist):\n    @asyncthread\n    def _async_deepcopy(newlist, oldlist):\n        for r in vd.Progress(oldlist, 'copying'):\n            newlist.append(deepcopy(r))\n\n    ret = []\n    _async_deepcopy(ret, rowlist)\n    return ret\n\n@BaseSheet.api\ndef reload_or_replace(sheet):\n    sheet.preloadHook()\n    if isinstance(sheet.source, visidata.Path) and \\\n       sheet.source.is_url() and sheet.source.scheme != 'file':  #2825\n        #retrieve data again, because the earlier data saved in sheet.source may be outdated\n        vs = vd.openSource(visidata.Path(sheet.source.given))\n        if type(vs) != type(sheet):  #new data may have a different filetype\n            vd.push(vs)\n            vd.remove(sheet)\n            #user needs feedback that sheet changed, since the new sheet has a different shortcut\n            vd.status('replaced sheet due to changed filetype')\n            return\n        sheet.source = vs.source\n    sheet.reload()\n\n\nBaseSheet.init('pane', lambda: 1)\n\n\nBaseSheet.addCommand('Ctrl+R', 'reload-sheet', 'reload_or_replace()', 'Reload current sheet')\nSheet.addCommand('', 'show-cursor', 'status(statusLine)', 'show cursor position and bounds of current sheet')\n\nSheet.addCommand('!', 'key-col', 'exec_longname(\"key-col-off\") if cursorCol.keycol else exec_longname(\"key-col-on\")', 'toggle current column as a key column', replay=False)\nSheet.addCommand('', 'key-col-on', 'setKeys([cursorCol])', 'set current column as a key column')\nSheet.addCommand('z!', 'key-col-off', 'unsetKeys([cursorCol])', 'unset current column as a key column')\n\nSheet.addCommand('e', 'edit-cell', 'cursorCol.setValues([cursorRow], editCell(cursorVisibleColIndex)) if not (cursorRow is None) else fail(\"no rows to edit\")', 'edit contents of current cell')\nSheet.addCommand('ge', 'setcol-input', 'cursorCol.setValuesTyped(selectedRows, input(\"set selected to: \", value=cursorFullDisplay))', 'set contents of current column for selected rows to same input')\n\nSheet.addCommand('\"', 'dup-selected', 'vs=copy(sheet); vs.name += \"_selectedref\"; vs.reload=lambda vs=vs,rows=selectedRows: setattr(vs, \"rows\", list(rows)); vd.push(vs)', 'open a duplicate sheet with only the selected rows')\nSheet.addCommand('g\"', 'dup-rows', 'vs=copy(sheet); vs.name+=\"_copy\"; vs.rows=list(rows); status(\"copied \"+vs.name); vs.select(selectedRows); vd.push(vs)', 'open a duplicate sheet with all rows')\nSheet.addCommand('z\"', 'dup-selected-deep', 'vs = deepcopy(sheet); vs.name += \"_selecteddeepcopy\"; vs.rows = vs.async_deepcopy(selectedRows); vd.push(vs); status(\"pushed sheet with async deepcopy of selected rows\")', 'open duplicate sheet with deepcopy of selected rows')\nSheet.addCommand('gz\"', 'dup-rows-deep', 'vs = deepcopy(sheet); vs.name += \"_deepcopy\"; vs.rows = vs.async_deepcopy(rows); vd.push(vs); status(\"pushed sheet with async deepcopy of all rows\")', 'open duplicate sheet with deepcopy of all rows')\n\nSheet.addCommand('z~', 'type-any', 'cursorCol.type = anytype', 'set type of current column to anytype')\nSheet.addCommand('~', 'type-string', 'cursorCol.type = str', 'set type of current column to str')\nSheet.addCommand('#', 'type-int', 'cursorCol.type = int', 'set type of current column to int')\nSheet.addCommand('z#', 'type-len', 'cursorCol.type = vlen', 'set type of current column to len')\nSheet.addCommand('%', 'type-float', 'cursorCol.type = float', 'set type of current column to float')\nSheet.addCommand('', 'type-floatlocale', 'cursorCol.type = floatlocale', 'set type of current column to float using system locale set in LC_NUMERIC')\n\nBaseSheet.addCommand('q', 'quit-sheet',  'vd.quit(sheet)', 'quit current sheet')\nBaseSheet.addCommand('Q', 'quit-sheet-free',  'quitAndReleaseMemory()', 'discard current sheet and free memory')\nglobalCommand('gq', 'quit-all', 'vd.quit(*vd.sheets)', 'quit all sheets (clean exit)')\n\nBaseSheet.addCommand('Z', 'splitwin-half', 'splitPane(vd.options.disp_splitwin_pct or 50)', 'ensure split pane is set and push under sheet onto other pane')\nBaseSheet.addCommand('gZ', 'splitwin-close', 'vd.options.disp_splitwin_pct = 0\\nfor vs in vd.activeStack: vs.pane = 1', 'close split screen')\nBaseSheet.addCommand('Tab', 'splitwin-swap', 'vd.activePane = 1 if sheet.pane == 2 else 2', 'jump to inactive pane')\nBaseSheet.addCommand('gTab', 'splitwin-swap-pane', 'vd.options.disp_splitwin_pct=-vd.options.disp_splitwin_pct', 'swap panes onscreen')\nBaseSheet.addCommand('zZ', 'splitwin-input', 'vd.options.disp_splitwin_pct = input(\"% height for split window: \", value=vd.options.disp_splitwin_pct)', 'set split pane to specific size')\n\nBaseSheet.addCommand('Ctrl+L', 'redraw', 'clear_search(); sheet.refresh(); vd.redraw(); vd.draw_all()', 'Refresh screen')\nBaseSheet.addCommand(None, 'guard-sheet', 'options.set(\"quitguard\", True, sheet); status(\"guarded\")', 'Set quitguard on current sheet to confirm before quit')\nBaseSheet.addCommand(None, 'guard-sheet-off', 'options.set(\"quitguard\", False, sheet); status(\"unguarded\")', 'Unset quitguard on current sheet to not confirm before quit')\nBaseSheet.addCommand(None, 'open-source', 'vd.replace(source)', 'jump to the source of this sheet')\n\nBaseSheet.bindkey('KEY_RESIZE', 'redraw')\n\nBaseSheet.addCommand('A', 'open-new', 'vd.push(vd.newSheet(\"unnamed\", 1))', 'Open new empty sheet')\n\nBaseSheet.addCommand('`', 'open-source', 'vd.push(source)', 'open source sheet')\nBaseSheet.addCommand(None, 'rename-sheet', 'sheet.name = input(\"rename sheet to: \", value=cleanName(sheet.name))', 'Rename current sheet')\n\nSheet.addCommand('', 'addcol-source', 'source.addColumn(copy(cursorCol)) if isinstance (source, BaseSheet) else error(\"source must be sheet\")', 'add copy of current column to source sheet')  #988  frosencrantz\n\n\n@Column.api\ndef formatter_enum(col, fmtdict):\n    return lambda val, fmtdict=fmtdict,*args,**kwargs: fmtdict.__getitem__(val)\n\nSheet.addCommand('', 'setcol-formatter', 'cursorCol.formatter=input(\"set formatter to: \", value=cursorCol.formatter or \"generic\")', 'set formatter for current column (generic, json, python)')\nSheet.addCommand('', 'setcol-format-enum', 'cursorCol.fmtstr=input(\"format replacements (k=v): \", value=f\"{cursorDisplay}=\", i=len(cursorDisplay)+1); cursorCol.formatter=\"enum\"', 'add secondary type translator to current column from input enum (space-separated)')\n\n\nvd.addGlobals(\n    RowColorizer=RowColorizer,\n    CellColorizer=CellColorizer,\n    ColumnColorizer=ColumnColorizer,\n    RecursiveExprException=RecursiveExprException,\n    LazyComputeRow=LazyComputeRow,\n    Sheet=Sheet,\n    TableSheet=TableSheet,\n    SequenceSheet=SequenceSheet)\n\nvd.addMenuItems('''\n    File > New > open-new\n    File > Rename > rename-sheet\n    File > Guard > on > guard-sheet\n    File > Guard > off > guard-sheet-off\n    File > Duplicate > selected rows by ref > dup-selected\n    File > Duplicate > all rows by ref > dup-rows\n    File > Duplicate > selected rows deep > dup-selected-deep\n    File > Duplicate > all rows deep > dup-rows-deep\n    File > Reload > rows and columns > reload-sheet\n    File > Quit > top sheet > quit-sheet\n    File > Quit > all sheets > quit-all\n    Edit > Modify > current cell > input > edit-cell\n    Edit > Modify > selected cells > from input > setcol-input\n    View > Sheets > stack > sheets-stack\n    View > Sheets > all > sheets-all\n    View > Other sheet > source sheet > open-source\n    View > Split pane > in half > splitwin-half\n    View > Split pane > in percent > splitwin-input\n    View > Split pane > unsplit > splitwin-close\n    View > Split pane > swap panes > splitwin-swap-pane\n    View > Split pane > goto other pane > splitwin-swap\n    View > Refresh screen > redraw\n    View > Show > cursor position > show-cursor\n    View > Show > evaluated expression > show-expr\n    Column > Type as > anytype > type-any\n    Column > Type as > string > type-string\n    Column > Type as > integer > type-int\n    Column > Type as > float > type-float\n    Column > Type as > locale float > type-floatlocale\n    Column > Type as > length > type-len\n    Column > Key > toggle current column > key-col\n    Column > Key > unkey current column > key-col-off\n''')\n"
  },
  {
    "path": "visidata/shell.py",
    "content": "import os\nimport shutil\nimport stat\nimport subprocess\nimport contextlib\ntry:\n    import pwd\n    import grp\nexcept ImportError:\n    pass # pwd,grp modules not available on Windows\n\nfrom visidata import Column, Sheet, LazyComputeRow, asynccache, BaseSheet, vd\nfrom visidata import Path, asyncthread, VisiData\nfrom visidata import modtime, filesize, vstat, Progress, TextSheet\nfrom visidata.type_date import date\n\n\nvd.option('dir_depth', 0, 'folder recursion depth on DirSheet')\nvd.option('dir_hidden', False, 'load hidden files on DirSheet')\nvd.option('active_procs', 10, 'number of concurrent processes on DirSheet')\n\nvd.spawnedProcesses = []\n\n@VisiData.api\ndef popen(vd, *args, **kwargs):\n    p = subprocess.Popen(*args, **kwargs)\n    vd.spawnedProcesses.append(p)\n    return p\n\n\n@VisiData.api\ndef killLeftoverProcesses(vd):\n    for p in vd.spawnedProcesses:\n        if p.returncode is None:\n            p.kill()\n\n\n@VisiData.api\ndef guess_dir(vd, p):\n    if p.is_dir():\n        return dict(filetype='dir', _likelihood=10)\n\n\n@VisiData.lazy_property\ndef currentDirSheet(p):\n    'Support opening the current DirSheet from the vdmenu'\n    return DirSheet(Path('.').absolute().name, source=Path('.'))\n\n@asyncthread\ndef exec_shell(*args):\n    p = vd.popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n    out, err = p.communicate()\n    if err or out:\n        lines = err.decode('utf8').splitlines() + out.decode('utf8').splitlines()\n        vd.push(TextSheet(' '.join(args), source=lines))\n\n\n@VisiData.api\ndef open_dir(vd, p):\n    if p.is_dir():\n        return DirSheet(p.base_stem, source=p)\n    if p.is_file():\n        vd.status(f'opening {p.given} as txt')\n        return vd.open_txt(p)\n    vd.warning(f'could not determine file type for {p.given}')\n    return DirSheet(p.base_stem, source=p)\n\n@VisiData.api\ndef open_fdir(vd, p):\n    return FileListSheet(p.base_stem, source=p)\n\n@VisiData.api\ndef addShellColumns(vd, cmd, sheet, curcol=None):\n    shellcol = ColumnShell(cmd, source=sheet, width=0, curcol=curcol)\n    sheet.addColumnAtCursor(\n            Column(cmd+'_stdout', type=bytes.rstrip, srccol=shellcol, getter=lambda col,row: col.srccol.getValue(row)[0]),\n            Column(cmd+'_stderr', type=bytes.rstrip, srccol=shellcol, getter=lambda col,row: col.srccol.getValue(row)[1]),\n            shellcol)\n\n\nclass ColumnShell(Column):\n    def __init__(self, name, cmd=None, curcol=None, **kwargs):\n        super().__init__(name, **kwargs)\n        self.expr = cmd or name\n        self.curcol = curcol\n\n    @asynccache(lambda col,row: (col, col.sheet.rowid(row)))\n    def calcValue(self, row):\n        try:\n            import shlex\n            args = []\n            context = LazyComputeRow(self.source, row, curcol=self.curcol)\n            for arg in shlex.split(self.expr):\n                if arg.startswith('$'):\n                    arg = shlex.quote(str(context[arg[1:]]))\n                args.append(arg)\n\n            p = vd.popen([os.getenv('SHELL', 'bash'), '-c', shlex.join(args)],\n                    stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n            return p.communicate()\n        except Exception as e:\n            vd.exceptionCaught(e)\n\n\nclass DirSheet(Sheet):\n    'Sheet displaying directory, using Enter to open a particular file.  Edited fields are applied to the filesystem.'\n    guide = '''\n        # Directory Sheet\n        This is a list of files in the {sheet.displaySource} folder.\n\n        - {help.commands.open_row_file}\n        - {help.commands.open_rows}\n        - {help.commands.open_dir_parent}\n        - {help.commands.sysopen_row}\n        - {help.commands.open_preview}\n\n        ## Options (must reload to take effect)\n\n        - {help.options.dir_depth}\n        - {help.options.dir_hidden}\n    '''\n    rowtype = 'files' # rowdef: Path\n    defer = True\n    columns = [\n        Column('directory',\n            getter=lambda col,row: str(row.parent) if str(row.parent) in ('.', '/') else str(row.parent) + '/',\n            setter=lambda col,row,val: col.sheet.moveFile(row, val)),\n        Column('filename',\n            getter=lambda col,row: row.name,\n            setter=lambda col,row,val: col.sheet.renameFile(row, val)),\n        Column('abspath', width=0, type=str,\n            getter=lambda col,row: row,\n            setter=lambda col,row,val: os.rename(row, val)),\n        Column('ext', getter=lambda col,row: row.is_dir() and '/' or row.ext),\n        Column('size', type=int,\n            getter=lambda col,row: filesize(row),\n            setter=lambda col,row,val: os.truncate(row, int(val))),\n        Column('modtime', type=date,\n            getter=lambda col,row: modtime(row),\n            setter=lambda col,row,val: os.utime(row, times=((row.stat().st_atime, float(val))))),\n        Column('owner', width=0,\n            getter=lambda col,row: pwd.getpwuid(row.stat().st_uid).pw_name,\n            setter=lambda col,row,val: os.chown(row, pwd.getpwnam(val).pw_uid, -1)),\n        Column('group', width=0,\n            getter=lambda col,row: grp.getgrgid(row.stat().st_gid).gr_name,\n            setter=lambda col,row,val: os.chown(row, -1, grp.getgrnam(val).pw_gid)),\n        Column('mode', width=0,\n            getter=lambda col,row: '{:o}'.format(row.stat().st_mode),\n            setter=lambda col,row,val: os.chmod(row, int(val, 8))),\n        Column('filetype', width=0, cache='async', getter=lambda col,row: vd.popen(['file', '--brief', row], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].strip()),\n        Column('preview', width=0, cache=True, getter=lambda col,row: col.sheet._openPreview(row)),\n    ]\n    nKeys = 2\n    _ordering = [('modtime', True), ('filename', False)]  # sort by reverse modtime initially\n\n    @staticmethod\n    def colorOwner(sheet, col, row, val):\n        ret = ''\n        if col.name == 'group':\n            mode = row.stat().st_mode\n            if mode & stat.S_IXGRP: ret = 'bold '\n            if mode & stat.S_IWGRP: return ret + 'green'\n            if mode & stat.S_IRGRP: return ret + 'yellow'\n        elif col.name == 'owner':\n            mode = row.stat().st_mode\n            if mode & stat.S_IXUSR: ret = 'bold '\n            if mode & stat.S_IWUSR: return ret + 'green'\n            if mode & stat.S_IRUSR: return ret + 'yellow'\n\n    def moveFile(self, row, newparent):\n        parent = Path(newparent)\n        newpath = Path(parent/row.name)\n        if parent.exists():\n            if not parent.is_dir():\n                vd.error('destination %s not a directory' % parent)\n        else:\n            with contextlib.suppress(FileExistsError):\n                os.makedirs(parent)\n\n        row.rename(newpath)\n        row.given = newpath # modify visidata.Path\n        self.restat()\n\n    def renameFile(self, row, val):\n        newpath = row.with_name(val)\n        row.rename(newpath)\n        row.given = newpath\n        self.restat()\n\n    def removeFile(self, path):\n        if path.is_dir():\n            if self.options.safety_first:\n                os.rmdir(path)\n            else:\n                shutil.rmtree(path)  #1965\n        else:\n            path.unlink()\n\n    def commitDeleteRow(self, r):\n        self.removeFile(r)\n\n    def newRow(self):\n        vd.fail('new file not supported')\n\n    def iterload(self):\n        hidden_files = self.options.dir_hidden\n\n        def _walkfiles(p, dir_depth:int=0):\n            basepath = str(p)\n            for folder, subdirs, files in os.walk(basepath):\n                subfolder = folder[len(basepath)+1:]\n                if not hidden_files and subfolder.startswith('.'): continue\n                if subfolder in ['.', '..']: continue\n\n                fpath = Path(folder)\n                if str(fpath) != str(p):\n                    yield fpath\n\n                for fn in files:\n                    yield fpath/fn\n\n                if dir_depth < len(fpath.parents)-len(p.parents)+1:\n                    for d in subdirs:\n                        yield fpath/d\n                    subdirs.clear()\n\n        basepath = str(self.source)\n\n        folders = set()\n\n        for p in _walkfiles(self.source, self.options.dir_depth):\n            if not hidden_files and str(p).startswith('.') and not str(p).startswith('..'):\n                continue\n\n            yield p\n\n    def preloadHook(self):\n        super().preloadHook()\n        Path.stat.cache_clear()\n\n    def restat(self):\n        vstat.cache_clear()\n\n    @asyncthread\n    def putChanges(self):\n        self.commitAdds()\n        self.commitMods()\n        self.commitDeletes()\n\n        self._deferredDels.clear()\n        self.reload()\n\n    def getDefaultSaveName(sheet):\n        return sheet.name + '.' + sheet.options.save_filetype\n\n\nclass FileListSheet(DirSheet):\n    _ordering = []\n    def iterload(self):\n        for fn in self.source.open():\n            yield Path(fn.rstrip())\n\n\n@VisiData.api\ndef inputShell(vd):\n    cmd = vd.input(\"sh$ \", type=\"sh\")\n    if '$' not in cmd:\n        vd.warning('no $column in command')\n    else:\n        import shlex\n        colnames = [col.name for col in vd.sheet.columns]\n        badnames = [arg[1:] for arg in shlex.split(cmd) if arg.startswith('$') and arg[1:] not in colnames]\n        for name in badnames:\n            vd.fail(f'no such columns: {\", \".join([name for name in badnames])}')\n    return cmd\n\nDirSheet.addCommand('`', 'open-dir-parent', 'vd.push(openSource(source.parent if source.resolve()!=Path(\".\").resolve() else os.path.dirname(source.resolve())))', 'open parent directory')  #1801\nBaseSheet.addCommand('', 'open-dir-current', 'vd.push(vd.currentDirSheet)', 'open Directory Sheet: browse properties of files in current directory')\n\nSheet.addCommand('z;', 'addcol-shell', 'cmd=inputShell(); addShellColumns(cmd, sheet, curcol=cursorCol)', 'create new column from bash expression, with $columnNames as variables')\n\nDirSheet.addCommand('Enter', 'open-row-file', 'vd.push(openSource(cursorRow or fail(\"no row\"), filetype=\"dir\" if cursorRow.is_dir() else LazyComputeRow(sheet, cursorRow).ext))', 'open current file as a new sheet')\nDirSheet.addCommand('gEnter', 'open-rows', 'for r in selectedRows: vd.push(openSource(r))', 'open selected files as new sheets')\nDirSheet.addCommand('Ctrl+O', 'sysopen-row', 'launchEditor(cursorRow)', 'open current file in external $EDITOR')\nDirSheet.addCommand('gCtrl+O', 'sysopen-rows', 'launchEditor(*selectedRows)', 'open selected files in external $EDITOR')\n\nDirSheet.addCommand('y', 'copy-row', 'copy_files([cursorRow], inputPath(\"copy to dest: \"))', 'copy file to given directory *path*')\nDirSheet.addCommand('gy', 'copy-selected', 'copy_files(selectedRows, inputPath(\"copy to dest: \", value=cursorRow.given))', 'copy selected files to given directory *path*')\n\nDirSheet.addCommand('zEnter', 'open-row-filetype', 'ft = input(\"filetype: \", type=\"filetype\", value=options.filetype or LazyComputeRow(sheet, cursorRow).ext); vd.push(openSource(cursorRow, filetype=ft) or fail(f\"file {cursorDisplay} does not exist\"))', 'open file in current row as input filetype')\nDirSheet.addCommand('', 'open-preview', 'sheet.previewFile(cursorRow)', 'open split preview of file at cursor')\n\n\n@DirSheet.api\ndef _openPreview(sheet, p):\n    vs = vd.openSource(p, filetype=\"dir\" if p.is_dir() else LazyComputeRow(sheet, p).ext)\n    vs._dirpreview = True\n    vs.ensureLoaded()\n    return vs\n\n\n@DirSheet.api\ndef previewFile(sheet, p):\n    if not p: return\n    vs = sheet.column('preview').getValue(p)\n    if not isinstance(vs, BaseSheet):\n        return  # still loading or error\n    # remove old preview from pane 2\n    for old in vd.sheetstack(2):\n        if getattr(old, '_dirpreview', False):\n            vd.sheets.remove(old)\n    vd.push(vs, pane=2)\n    vd.options.disp_splitwin_pct = vd.options.disp_splitwin_pct or 50\n    sheet._previewing = True\n\n\n@DirSheet.after\ndef checkCursor(sheet):\n    if not getattr(sheet, '_previewing', False):\n        return\n    if not vd.options.disp_splitwin_pct:\n        sheet._previewing = False\n        return\n    p = sheet.cursorRow\n    if p and p != getattr(sheet, '_preview_path', None):\n        sheet._preview_path = p\n        sheet.previewFile(p)\n    # preload previews for visible rows\n    previewCol = sheet.column('preview')\n    for row in sheet.rows[sheet.topRowIndex:sheet.topRowIndex + sheet.nScreenRows]:\n        previewCol.getValue(row)\n\n\n@DirSheet.api\n@asyncthread\ndef copy_files(sheet, paths, dest):\n    destdir = Path(dest)\n    destdir.is_dir() or vd.fail('target must be directory')\n    vd.status('copying %s %s to %s' % (len(paths), sheet.rowtype, destdir))\n    os.makedirs(destdir, exist_ok=True)\n    for srcpath in Progress(paths, gerund='copying'):\n        try:\n            destpath = destdir/str(srcpath._path.name)\n            if srcpath.is_dir():\n                shutil.copytree(srcpath, destpath)\n            else:\n                shutil.copyfile(srcpath, destpath)\n        except Exception as e:\n            vd.exceptionCaught(e)\n\n\nvd.addGlobals({\n    'DirSheet': DirSheet\n})\n\nvd.addMenuItems('''\n    Column > Add column > shell > addcol-shell\n    Row > Open file > open-row-filetype\n    View > Preview file > open-preview\n''')\n"
  },
  {
    "path": "visidata/sidebar.py",
    "content": "from typing import Optional, Union\nimport textwrap\n\nfrom visidata import vd, VisiData, BaseSheet, colors, TextSheet, clipdraw, wraptext, dispwidth, AttrDict, wrmap, ColorAttr\nfrom visidata import CommandHelpGetter, OptionHelpGetter\n\n\nvd.option('disp_sidebar', True, 'whether to display sidebar')\nvd.option('disp_sidebar_fmt', '', 'format string for default sidebar')\nvd.theme_option('disp_sidebar_width', 0, 'max width for sidebar')\nvd.theme_option('disp_sidebar_height', 0, 'max height for sidebar')\nvd.theme_option('color_sidebar', 'black on 114 blue', 'base color of sidebar')\nvd.theme_option('color_sidebar_title', 'black on yellow', 'color of sidebar title')\nvd.theme_option('disp_boxchars', '▐▌▄█▗▖▐▌', 'box characters (ls rs ts bs tl tr bl br)')\n\nvd.disp_help = 0  # current page of help shown\nvd._help_sidebars = []  # list of (help:str|HelpPane, title:str)\n\n\n@VisiData.api\nclass AddedHelp:\n    '''Context manager to add help text/screen to list of available sidebars.'''\n    def __init__(self, text:Union[str,'HelpPane'], title='', help_flag=''):\n        self.helpfunc = None\n        if text:\n            if not vd.wantsHelp(help_flag):\n                return\n            self.helpfunc = lambda: (text, title)\n\n    def __enter__(self):\n        if self.helpfunc:\n            vd._help_sidebars.insert(0, self.helpfunc)\n            vd.clearCaches()\n        return self\n\n    def __exit__(self, *args):\n        if self.helpfunc:\n            vd._help_sidebars.remove(self.helpfunc)\n            vd.clearCaches()\n\n\n@BaseSheet.lazy_property\ndef formatter_helpstr(sheet):\n    return AttrDict(commands=CommandHelpGetter(type(sheet)),\n                    options=OptionHelpGetter())\n\n\n@BaseSheet.cached_property\ndef default_sidebar(sheet):\n    'Default to format options.disp_sidebar_fmt.  Overridable.'\n    fmt = sheet.options.disp_sidebar_fmt\n    if not fmt: return ''\n    return sheet.formatString(fmt, help=sheet.formatter_helpstr)\n\n\n@VisiData.api\ndef cycleSidebar(vd, n:int=1):\n    if vd.sheet.help_sidebars:\n        vd.disp_help += n\n        if vd.disp_help >= len(vd.sheet.help_sidebars):\n            vd.disp_help = -1\n\n        vd.options.disp_sidebar = (vd.disp_help >= 0)\n    else:\n        vd.disp_help = -1\n    vd.clearCaches()\n\n\n@BaseSheet.cached_property\ndef help_sidebars(sheet) -> 'list[Callable[[], tuple[str,str]]]':\n    r = []\n    if sheet.default_sidebar:\n        r.append(lambda: (sheet.default_sidebar, ''))\n    if sheet.guide:\n        r.append(lambda: (sheet.formatString(sheet.guide, help=sheet.formatter_helpstr), ''))\n    return r + vd._help_sidebars\n\n\n@VisiData.cached_property\ndef sidebarStatus(vd) -> str:\n    if vd.sheet.help_sidebars:\n        if vd.wantsHelp('sidebar') and vd.disp_help >= 0:\n            n = vd.disp_help+1\n            return f'[:onclick sidebar-toggle][:sidebar][{n}/{len(vd.sheet.help_sidebars)}][/]'\n        else:\n            return f'[:onclick sidebar-toggle][:sidebar][{len(vd.sheet.help_sidebars)}][/]'\n\n    return ''\n\n@VisiData.property\ndef recentStatusMessages(vd) -> str:\n    r = ''\n    for (pri, msgparts), n in vd.statuses.items():\n        msg = '; '.join(wrmap(str, msgparts))\n        msg = f'[{n}x] {msg}' if n > 1 else msg\n\n        if pri == 3: msgattr = '[:error]'\n        elif pri == 2: msgattr = '[:warning]'\n        elif pri == 1: msgattr = '[:warning]'\n        else: msgattr = ''\n\n        if msgattr:\n            r += '\\n' + f'{msgattr}{msg}[/]'\n        else:\n            r += '\\n' + msg\n\n    if r:\n        return '# statuses' + r\n\n    return ''\n\n\n@VisiData.api\ndef drawSidebar(vd, scr, sheet):\n    sidebar = vd.recentStatusMessages\n    title = ''\n    bottommsg = ''\n    overflowmsg = '[:reverse] Ctrl+P to view all status messages [/]'\n    try:\n        if not sidebar and vd.options.disp_sidebar and vd.wantsHelp('guides') and sheet.help_sidebars:\n            sidebar, title = sheet.help_sidebars[vd.disp_help%len(sheet.help_sidebars)]()\n\n#            bottommsg = sheet.formatString('[:onclick sidebar-toggle][:reverse] {help.commands.sidebar_toggle} [:]', help=sheet.formatter_helpstr)\n#            overflowmsg = '[:reverse] see full sidebar with [:code]gb[/] [:]'\n\n            overflowmsg = '[:onclick open-sidebar]…↓…[/]'\n    except Exception as e:\n        vd.exceptionCaught(e)\n        sidebar = f'# error\\n{e}'\n\n    sheet.current_sidebar = sidebar\n\n    return sheet.drawSidebarText(scr, text=sheet.current_sidebar, title=title, overflowmsg=overflowmsg, bottommsg=bottommsg)\n\n@VisiData.api\ndef drawBox(vd, scr, x, y, w, h, cattr, bottom=True):\n    'Draw a box border using disp_boxchars with fg=cattr.bg. Return border ColorAttr.'\n    ls, rs, ts, bs, tl, tr, bl, br = vd.options.disp_boxchars\n    border_cattr = ColorAttr(fg=cattr.bg, bg=-1)\n    clipdraw(scr, y, x, tl + ts*(w-2) + tr, border_cattr, w=w, literal=True)\n    if bottom:\n        clipdraw(scr, y+h-1, x, bl + bs*(w-2) + br, border_cattr, w=w, literal=True)\n    for row in range(1, h-1 if bottom else h):\n        clipdraw(scr, y+row, x, ls, border_cattr, w=1, literal=True)\n        clipdraw(scr, y+row, x+w-1, rs, border_cattr, w=1, literal=True)\n    return border_cattr\n\n\n@BaseSheet.api\ndef drawSidebarText(sheet, scr, text:Union[None,str,'HelpPane'], title:str='', overflowmsg:str='', bottommsg:str=''):\n    scrh, scrw = scr.getmaxyx()\n    maxw = sheet.options.disp_sidebar_width or scrw//2\n    maxh = sheet.options.disp_sidebar_height or max(scrh-2, 1)\n\n    cattr = colors.get_color('color_sidebar')\n\n    text = text or ''\n\n    if hasattr(text, 'draw'):  # like a HelpPane\n        maxlinew = text.width\n        winh = min(maxh, text.height+2)+1\n    else:\n        text = textwrap.dedent(text.strip('\\n'))\n\n        if not text:\n            return\n\n        lines = text.splitlines()\n        if not title and lines and lines[0].strip().startswith('# '):\n            title = lines[0].strip()[2:]\n            text = '\\n'.join(lines[1:])\n\n        if not text:\n            return\n\n        lines = list(wraptext(text, width=maxw-4))\n        maxlinew = 0\n        if lines:\n            maxlinew = max(maxlinew, max(dispwidth(textonly, maxwidth=maxw) for line, textonly in lines))\n        winh = min(maxh, len(lines)+2)\n    winh = max(winh, 1)\n\n    titlew = dispwidth(title)\n\n    maxlinew = max(maxlinew, dispwidth(overflowmsg)+4)\n    maxlinew = max(maxlinew, dispwidth(bottommsg)+4)\n    maxlinew = max(maxlinew, titlew)\n    winw = min(maxw, maxlinew+4)\n    x, y, w, h = scrw-winw-1, scrh-winh-1, winw, winh\n    y = max(y, 0)\n\n    sidebarscr = vd.subwindow(scr, x, y, w, h)\n\n    sidebarscr.erase()\n    sidebarscr.bkgd(' ', cattr.attr)\n\n    border_cattr = vd.drawBox(sidebarscr, 0, 0, w, h, cattr)\n\n    vd.onMouse(sidebarscr, 0, 0, w, h, BUTTON1_RELEASED='no-op', BUTTON1_PRESSED='no-op')\n\n    if hasattr(text, 'draw'):  # like a HelpPane\n        text.draw(sidebarscr, attr=cattr)\n    else:\n        i = 0\n        for line, _ in lines:\n            if i >= h-2:\n                bottommsg = overflowmsg\n                break\n\n            x += clipdraw(sidebarscr, i+1, 2, line, cattr, w=w-3)\n            i += 1\n\n    x = max(0, w-titlew-4)\n    clipdraw(sidebarscr, 0, x, f\"[:sidebar_title] {title} [:]\", border_cattr, w=titlew+2)\n    if bottommsg:\n        clipdraw(sidebarscr, h-1, winw-dispwidth(bottommsg)-2, bottommsg, border_cattr)\n\n    sidebarscr.noutrefresh()\n\n\n@VisiData.api\nclass SidebarSheet(TextSheet):\n    guide = '''\n        # Sidebar Guide\n        The sidebar provides additional information about the current sheet, defaulting to a basic guide to the current sheet type.\n        It can be configured to show many useful attributes via `options.disp_sidebar_fmt`.\n\n        - `gb` to open the sidebar in a new sheet\n        - `b` to toggle the sidebar on/off for the current sheet\n    '''\n\nBaseSheet.addCommand('b', 'sidebar-toggle', 'vd.options.disp_sidebar = not vd.options.disp_sidebar', 'toggle sidebar')\nBaseSheet.addCommand('gb', 'open-sidebar', 'sheet.current_sidebar = \"\" if not hasattr(sheet, \"current_sidebar\") else sheet.current_sidebar; vd.push(SidebarSheet(name, options.disp_sidebar_fmt, source=sheet.current_sidebar.splitlines()))', 'open sidebar in new sheet')\nBaseSheet.addCommand('Ctrl+G', 'sidebar-cycle', 'vd.cycleSidebar()', 'cycle through available sidebar panels')\n\n\nvd.addMenuItems('''\n    View > Sidebar > toggle > sidebar-toggle\n    View > Sidebar > cycle > sidebar-cycle\n    View > Sidebar > open in new sheet > open-sidebar\n''')\n"
  },
  {
    "path": "visidata/sort.py",
    "content": "from copy import copy\nfrom visidata import vd, asyncthread, Progress, Sheet, Column, options, UNLOADED, ColumnsSheet\nimport re\n\ncmdlog_col_prefix='\\u241f'  #string ␟ to mark the start of column info in an ordering string\n\n@Sheet.api\ndef orderBy(sheet, *cols, reverse=False, change_column=False, save_cmd_input=True):\n    '''Add *cols* to internal ordering and re-sort the rows accordingly.\n    Pass *reverse* as True to order these *cols* descending.\n    Pass empty *cols* (or cols[0] of None) to clear internal ordering.\n    Set *change_column* to True to change the sort status of a single column: add/remove/invert it.\n    When changing a column, *cols* must have length 1. Sort columns that had higher priority are unchanged. Lower-priority columns are removed.\n    If *change_column* is False, *cols* will be added to the existing ordering.\n    If *save_cmd_input* is True, the full ordering that results will be saved in the cmdlog for future replay in the 'input' parameter.\n    '''\n\n    if options.undo:\n        vd.addUndo(setattr, sheet, '_ordering', copy(sheet._ordering))\n        vd.addUndo(setattr, sheet, 'rows', copy(sheet.rows))\n\n    # for replay, read the full column ordering from the cmdlog input parameter  #2688\n    input = vd.getLastArgs()\n    if input:\n        sheet._ordering = order_from_string(sheet, input)\n        sheet.sort()\n        if save_cmd_input:\n            vd.activeCommand.input = order_string(sheet)\n        return\n\n    do_sort = False\n    if not cols or cols[0] is None:\n        sheet._ordering.clear()\n        cols = cols[1:]\n        do_sort = True\n\n    if change_column:\n        if len(cols) > 1:\n            vd.fail('sort order edit must only be applied to a single column')\n        new_ordering = edit_ordering(sheet._ordering, cols[0], reverse)\n        sheet._ordering = new_ordering\n        do_sort = True\n    else:\n        for c in cols:\n            sheet._ordering.append((c, reverse))\n            do_sort = True\n\n    if do_sort:\n        sheet.sort()\n    if save_cmd_input:\n        vd.activeCommand.input = order_string(sheet)\n\nclass Reversor:\n    def __init__(self, obj):\n        self.obj = obj\n\n    def __eq__(self, other):\n        return other.obj == self.obj\n\n    def __lt__(self, other):\n        return other.obj < self.obj\n\ndef order_string(sheet):\n    sheet._ordering = sheet.ordering  #converts any ambiguous colname strings to unambiguous Column objects\n    ret = ''.join([cmdlog_col_prefix+('>' if reverse else '<') + str(col.name) for col, reverse in sheet._ordering])\n    return ret\n\ndef order_from_string(sheet, s):\n    instructions = re.split(cmdlog_col_prefix + '(?=[<>])', s)[1:]\n    ordering = []\n    for instr in instructions:\n        c = sheet.column(instr[1:])\n        if instr[0] == '<':\n            reverse = False\n        elif instr[0] == '>':\n            reverse = True\n        ordering.append((c, reverse))\n    return ordering\n\ndef edit_ordering(ordering, col, reverse):\n    '''Return a modified ordering based on editing a single column *col*:   add it, remove it, or flip its direction.\n    Columns after *col* in the ordering (with lower sort priority) are also removed from the ordering.\n    *ordering* is a list of tuples:  (Column, boolean), where the boolean defines the sort direction.\n    '''\n    new_ordering = []\n    # handle changes to status of columns that are already in the ordering:  add/remove/flip\n    changed = False\n    for c, old_reverse in ordering:\n        if c is col:\n            if reverse != old_reverse: # reverse the column's sort direction\n                new_ordering.append((c, reverse))\n            # if the sort direction is unchanged, remove the column from the ordering\n            changed = True\n            # columns after the edited column will be dropped from the ordering\n            break\n        new_ordering.append((c, old_reverse))\n    if not changed:\n        new_ordering.append((col, reverse))\n    return new_ordering\n\n@Sheet.cached_property\ndef ordering(sheet) -> 'list[tuple[Column, bool]]':\n    ret = []\n    for col, reverse in sheet._ordering:\n        if isinstance(col, str):\n            col = sheet.column(col)\n        ret.append((col, reverse))\n    return ret\n\n\n@Sheet.api\ndef sortkey(sheet, r, ordering:'list[tuple[Column, bool]]'=[]):\n    ret = []\n    for col, reverse in (ordering or sheet.ordering):\n        val = col.getTypedValue(r)\n        ret.append(Reversor(val) if reverse else val)\n\n    return ret\n\n\n@Sheet.api\n@asyncthread\ndef sort(self):\n    'Sort rows according to the current internal ordering.'\n    if self.rows is UNLOADED:\n        return\n    try:\n        with Progress(gerund='sorting', total=self.nRows) as prog:\n            # replace ambiguous colname strings with unambiguous Column objects  #2494\n            self._ordering = self.ordering\n            def _sortkey(r):\n                prog.addProgress(1)\n                return self.sortkey(r, ordering=self._ordering)\n\n            # must not reassign self.rows: use .sort() instead of sorted()\n            self.rows.sort(key=_sortkey)\n    except TypeError as e:\n        vd.warning('sort incomplete due to TypeError; change column type')\n        vd.exceptionCaught(e, status=False)\n\nColumnsSheet.columns += [\n        Column('sortorder',\n            type=int,\n            getter=lambda c,r: _sort_order(c, r),\n            help='sort priority and direction in source sheet')\n]\n\ndef _sort_order(col, srccol):\n    sort_cols = [(n+1, reverse) for n, (c, reverse) in enumerate(srccol.sheet.ordering) if c is srccol]\n    if not sort_cols:\n        return None\n    n, reverse = sort_cols[0]\n    return -n if reverse else n\n\n\n# replace existing sort criteria\nSheet.addCommand('[', 'sort-asc', 'orderBy(None, cursorCol)', 'sort ascending by current column; replace any existing sort criteria')\nSheet.addCommand(']', 'sort-desc', 'orderBy(None, cursorCol, reverse=True)', 'sort descending by current column; replace any existing sort criteria ')\nSheet.addCommand('g[', 'sort-keys-asc', 'orderBy(None, *keyCols)', 'sort ascending by all key columns; replace any existing sort criteria')\nSheet.addCommand('g]', 'sort-keys-desc', 'orderBy(None, *keyCols, reverse=True)', 'sort descending by all key columns; replace any existing sort criteria')\n\n# add to existing sort criteria\nSheet.addCommand('', 'sort-asc-add', 'orderBy(cursorCol)', 'sort ascending by current column; add to existing sort criteria')\nSheet.addCommand('', 'sort-desc-add', 'orderBy(cursorCol, reverse=True)', 'sort descending by current column; add to existing sort criteria')\nSheet.addCommand('z[', 'sort-asc-change', 'orderBy(cursorCol, change_column=True)', 'sort ascending by current column; keep higher priority sort criteria')\nSheet.addCommand('z]', 'sort-desc-change', 'orderBy(cursorCol, reverse=True, change_column=True)', 'sort descending by current column; keep higher priority sort criteria')\nSheet.addCommand('gz[', 'sort-keys-asc-add', 'orderBy(*keyCols)', 'sort ascending by all key columns; add to existing sort criteria')\nSheet.addCommand('gz]', 'sort-keys-desc-add', 'orderBy(*keyCols, reverse=True)', 'sort descending by all key columns; add to existing sort criteria')\n\nvd.addMenuItems('''\n    Column > Sort by > current column only > ascending > sort-asc\n    Column > Sort by > current column only > descending > sort-desc\n    Column > Sort by > current column also > ascending > sort-asc-add\n    Column > Sort by > current column also > descending > sort-desc-add\n    Column > Sort by > key columns > ascending > sort-keys-asc\n    Column > Sort by > key columns > descending > sort-keys-desc\n''')\n"
  },
  {
    "path": "visidata/statusbar.py",
    "content": "'''\nStatus messages get added with vd.{debug/aside/status/warning/fail/error}(), and cleared in mainloop\n'''\n\nimport builtins\nimport collections\nimport curses\nimport sys\n\nimport visidata\nfrom visidata import vd, VisiData, BaseSheet, Sheet, ColumnItem, Column, RowColorizer, options, colors, wrmap, clipdraw, ExpectedException, update_attr, dispwidth, ColorAttr, clipstr_middle, clip_markup_middle\n\n\n\nvd.option('disp_rstatus_fmt', '{sheet.threadStatus} {sheet.keystrokeStatus}   [:longname_status]{sheet.longname}[/]  {sheet.nRows:9d} {sheet.rowtype} {sheet.modifiedStatus}{sheet.selectedStatus}{vd.replayStatus}{vd.sidebarStatus}', 'right-side status format string')\nvd.option('disp_status_fmt', '{sheet.sheetlist}| ', 'left-side status format string')\nvd.theme_option('disp_lstatus_max', 0, 'maximum length of left status line')\nvd.theme_option('disp_status_sep', '│', 'separator between statuses')\n\nvd.theme_option('color_keystrokes', 'bold white on 237', 'color of input keystrokes')\nvd.theme_option('color_longname_guide', '237', 'color of command longnames')\nvd.theme_option('color_longname_status', 'white', 'color of command longnames')\nvd.theme_option('color_keys', 'bold reverse', 'color of keystrokes in help')\nvd.theme_option('color_status', 'bold on 238', 'status line color')\nvd.theme_option('color_error', '202 1', 'error message color')\nvd.theme_option('color_warning', '166 15', 'warning message color')\nvd.theme_option('color_top_status', 'underline', 'top window status bar color')\nvd.theme_option('color_active_status', 'black on 68 blue', ' active window status bar color')\nvd.theme_option('color_inactive_status', '8 on black', 'inactive window status bar color')\nvd.theme_option('color_highlight_status', 'black on green', 'color of highlighted elements in statusbar')\n\nBaseSheet.init('longname', lambda: '')\n\n@BaseSheet.property\ndef ancestors(sheet):\n    if isinstance(sheet.source, BaseSheet):\n        return sheet.source.ancestors + [sheet.source]\n    else:\n        return []\n\n@BaseSheet.property\ndef sheetlist(sheet):\n    leafsheets = []\n    parents = set()\n\n    sheetstack = vd.sheetstack(sheet.pane)\n    sheets = [x for x in vd.allSheets if x in sheetstack]+ [x for x in sheetstack if x not in vd.allSheets]\n\n    sheetnames = []\n    for vs in sheets:\n        if not vs.precious:  #2573\n            continue\n        if isinstance(vs, BaseSheet):\n            shortcut = ' '\n            if vs.shortcut in '1 2 3 4 5 6 7 8 9 10'.split():\n                shortcut = vs.shortcut[-1] + vs.icon\n            if vs is vd.sheet:\n                sheetnames.append(f'[:menu_active]{shortcut}{vs.name}[:]')\n            else:\n                sheetnames.append(f'[:onclick jump-sheet-{vs.shortcut}]' + clipstr_middle(f'{shortcut}{vs.name}', 20)[0] + '[:]')\n        else:\n            sheetnames.append(vs)\n\n    return ' | '.join(sheetnames)\n\n@BaseSheet.api\ndef _updateStatusBeforeExec(sheet, cmd, args, ks):\n    sheet.longname = cmd.longname\n    if sheet._scr:\n        vd.drawRightStatus(sheet._scr, sheet)  #996 show longname during commands\n        sheet._scr.refresh()\n\n\nvd.beforeExecHooks.append(BaseSheet._updateStatusBeforeExec)\n\n\n@VisiData.lazy_property\ndef statuses(vd):\n    return collections.OrderedDict()  # (priority, statusmsg) -> num_repeats; shown until next action\n\n\n@VisiData.lazy_property\ndef statusHistory(vd):\n    return list()  # list of [priority, statusmsg, repeats] for all status messages ever\n\n@VisiData.api\ndef getStatusSource(vd) -> str:\n    return ''\n\n\n@VisiData.api\ndef printStatus(vd, *args, priority=0, source=None):\n    'Print status to stderr in batch mode. Overridable by plugins.'\n    if priority > 0:\n        msg = '\\r' + composeStatus(args)\n        if vd.options.debug:\n            msg += f' [{source}]'\n        builtins.print(msg, file=sys.stderr)\n\n\n@VisiData.api\ndef status(vd, *args, priority=0):\n    'Display *args* on status until next action.'\n    if not args:\n        return True\n\n    k = (priority, tuple(map(str, args)))\n    vd.statuses[k] = vd.statuses.get(k, 0) + 1\n\n    source = vd.getStatusSource()\n\n    if not vd.cursesEnabled:\n        vd.printStatus(*args, priority=priority, source=source)\n\n    return vd.addToStatusHistory(*args, priority=priority, source=source)\n\n@VisiData.api\ndef addToStatusHistory(vd, *args, priority=0, source=None):\n    if vd.statusHistory:\n        prevpri, prevargs, _, _ = vd.statusHistory[-1]\n        if prevpri == priority and prevargs == args:\n            vd.statusHistory[-1][2] += 1\n            return True\n\n    vd.statusHistory.append([priority, args, 1, source])\n    return True\n\n@VisiData.api\ndef error(vd, *args):\n    'Abort with ExpectedException, and display *args* on status as an error.'\n    vd.status(*args, priority=3)\n    raise ExpectedException(args[0] if args else '')\n\n@VisiData.api\ndef fail(vd, *args):\n    'Abort with ExpectedException, and display *args* on status as a warning.'\n    vd.status(*args, priority=2)\n    raise ExpectedException(args[0] if args else '')\n\n@VisiData.api\ndef warning(vd, *args):\n    'Display *args* on status as a warning.'\n    vd.status(*args, priority=1)\n\n@VisiData.api\ndef aside(vd, *args, priority=0):\n    'Add a message to statuses without showing the message proactively.'\n    return vd.addToStatusHistory(*args, priority=priority, source=vd.getStatusSource())\n\n@VisiData.api\ndef debug(vd, *args, **kwargs):\n    'Display *args* on status if options.debug is set.'\n    if options.debug:\n        return vd.status(*args, **kwargs)\n\n\ndef composeStatus(msgparts, n=1):\n    msg = '; '.join(wrmap(str, msgparts))\n    if n > 1:\n        msg = '[%sx] %s' % (n, msg)\n    return msg\n\n\n@BaseSheet.api\ndef leftStatus(sheet):\n    'Return left side of status bar for this sheet. Overridable.'\n    return sheet.formatString(sheet.options.disp_status_fmt)\n\n\n@VisiData.api\ndef drawLeftStatus(vd, scr, vs):\n    'Draw left side of status bar.'\n    cattr = colors.get_color('color_active_status')\n    active = (vs is vd.activeSheet)\n    if active:\n        cattr = update_attr(cattr, colors.color_active_status, 1)\n    else:\n        cattr = update_attr(cattr, colors.color_inactive_status, 1)\n\n    if scr is vd.winTop:\n        cattr = update_attr(cattr, colors.color_top_status, 1)\n\n    x = 0\n    y = vs.windowHeight-1  # status for each window\n    lstatus = vs.leftStatus()\n    maxwidth = options.disp_lstatus_max\n    if maxwidth > 0:\n        lstatus = clip_markup_middle(lstatus, maxwidth)\n\n    x = clipdraw(scr, y, 0, lstatus, cattr, w=vs.windowWidth-1)\n\n    vd.onMouse(scr, 0, y, x, 1,\n                    BUTTON3_PRESSED='rename-sheet',\n                    BUTTON3_CLICKED='rename-sheet')\n\n\n@VisiData.api\ndef rightStatus(vd, sheet):\n    'Return right side of status bar.  Overridable.'\n    return sheet.formatString(sheet.options.disp_rstatus_fmt)\n\n\n@BaseSheet.property\ndef keystrokeStatus(vs):\n    if vs is vd.activeSheet:\n        return f'[:keystrokes]{vd.keystrokes}[/]'\n\n    return ''\n\n\n@BaseSheet.property\ndef threadStatus(vs) -> str:\n    if vs.currentThreads:\n        ret = str(vd.checkMemoryUsage())\n        gerunds = [p.gerund for p in vs.progresses if p.gerund] or [f'processing']\n        if vd._queuedFuncs:\n            ret += f' [:working]{len(vd._queuedFuncs)} queued functions[/] '\n\n        if vd._nextCommands:\n            ret += f' [:working]{len(vd._nextCommands)} queued commands[/] '\n\n        ret += f' [:working]{vs.progressPct} {gerunds[0]}…[/]'\n        return ret\n    return ''\n\n@BaseSheet.property\ndef modifiedStatus(sheet):\n    ret = ' [M]' if sheet.hasBeenModified else ''\n    if not vd.couldOverwrite():\n        ret += ' [:highlight_status][RO][/] '\n    return ret\n\n\n@BaseSheet.property\ndef selectedStatus(sheet):\n    return ''\n\n\n@Sheet.property\ndef selectedStatus(sheet):\n    if sheet.nSelectedRows:\n        return f' [:selected_row][:onclick dup-selected]{sheet.options.disp_selected_note}{sheet.nSelectedRows}[/][/] '\n\n@VisiData.api\ndef drawRightStatus(vd, scr, vs):\n    'Draw right side of status bar.  Return length displayed.'\n    rightx = vs.windowWidth\n\n    statuslen = 0\n    try:\n        cattr = ColorAttr()\n        if scr is vd.winTop:\n            cattr = update_attr(cattr, colors.color_top_status, 0)\n        cattr = update_attr(cattr, colors.color_active_status if vs is vd.activeSheet else colors.color_inactive_status, 0)\n        rstat = vd.rightStatus(vs)\n        x = max(2, rightx-dispwidth(rstat)-1)\n        statuslen = clipdraw(scr, vs.windowHeight-1, x, rstat, cattr, w=vs.windowWidth-1)\n    finally:\n        if scr:\n            curses.doupdate()\n    return statuslen\n\n\nclass StatusSheet(Sheet):\n    precious = False\n    rowtype = 'statuses'  # rowdef: (priority, args, nrepeats)\n    columns = [\n        ColumnItem('priority', 0, type=int, width=0),\n        ColumnItem('nrepeats', 2, type=int, width=0),\n        ColumnItem('args', 1, width=0),\n        Column('message', width=50, getter=lambda col,row: composeStatus(row[1], row[2])),\n        ColumnItem('source', 3, width=0),\n    ]\n    colorizers = [\n        RowColorizer(1, 'color_error', lambda s,c,r,v: r and r[0] == 3),\n        RowColorizer(1, 'color_warning', lambda s,c,r,v: r and r[0] in [1,2]),\n    ]\n\n    def reload(self):\n        self.rows = self.source\n\n\n@VisiData.property\ndef statusHistorySheet(vd):\n    return StatusSheet(\"status_history\", source=vd.statusHistory[::-1])  # in reverse order\n\n\nBaseSheet.addCommand('Ctrl+P', 'open-statuses', 'vd.push(vd.statusHistorySheet)', 'open Status History')\n\nvd.addMenuItems('''\n    View > Statuses > open-statuses\n''')\n"
  },
  {
    "path": "visidata/stored_list.py",
    "content": "import json\n\nfrom visidata import vd, VisiData, Path, AttrDict\n\n\n@VisiData.api\nclass StoredList(list):\n    'Read existing persisted list from filesystem, and append new elements to .jsonl in .visidata'\n    def __init__(self, *args, name:str='', **kwargs):\n        super().__init__(*args, **kwargs)\n        self.name = name\n\n    @property\n    def path(self):\n        vdpath = vd.data_dir\n        if not vdpath.exists():\n            if vd.options.nothing:\n                return\n            vdpath.mkdir(parents=True)\n        return vdpath/(self.name + '.jsonl')\n\n    def reload(self):\n        p = self.path\n        if not p or not p.exists():\n            return\n\n        ret = []\n        with p.open(encoding='utf-8-sig') as fp:\n            for line in fp:\n                value = vd.callNoExceptions(json.loads, line)\n                if value is not None:\n                    if isinstance(value, dict):\n                        value = AttrDict(value)\n                    ret.append(value)\n\n        self[:] = ret   # replace without using .append\n\n    def append(self, v):\n        super().append(v)\n\n        p = self.path\n        if p is None:\n            return\n\n        with p.open(encoding='utf-8', mode='a') as fp:\n            fp.write(json.dumps(v) + '\\n')\n"
  },
  {
    "path": "visidata/tests/__init__.py",
    "content": ""
  },
  {
    "path": "visidata/tests/benchmark.csv",
    "content": "Date,Customer,SKU,Item,Quantity,Unit,Paid\r\n7/3/2018 1:47p,Robert Armstrong,FOOD213,BFF Oh My Gravy! Beef & Salmon 2.8oz,4,$12.95,$51.8\r\n7/3/2018 3:32p,Kyle Kennedy,FOOD121,\"Food, Adult Cat - 3.5 oz\",1,$4.22,$4.22\r\n7/5/2018 4:15p,\"Douglas \"\"Dougie\"\" Powers\",FOOD121,\"Food, Adult Cat 3.5 oz\",1,$4.22,$4.22\r\n7/6/2018 12:15p,桜 高橋 (Sakura Takahashi),FOOD122,\"Food, Senior Wet Cat - 3 oz\",12,$1.29,157¥\r\n7/10/2018 10:28a,David Attenborough,NSCT201,\"Food, Salamander\",30,$.05,$1.5\r\n7/10/2018 5:23p,Susan Ashworth,CAT060,\"Cat, Korat (Felis catus)\",1,$720.42,$720.42\r\n7/10/2018 5:23p,Susan Ashworth,FOOD130,\"Food, Kitten 3kg\",1,$14.94,$14.94\r\n7/13/2018 10:26a,Wil Wheaton,NSCT523,\"Monster, Rust (Monstrus gygaxus)\",1,$39.95,$39.95\r\n7/13/2018 3:49p,Robert Armstrong,FOOD216,BFF Oh My Gravy! Chicken & Shrimp 2.8oz,4,$12.95,$51.8\r\n7/17/2018 9:01a,Robert Armstrong,FOOD217,BFF Oh My Gravy! Duck & Tuna 2.8oz,4,$12.95,$51.8\r\n7/17/2018 11:30a,Helen Halestorm,LAGO342,Rabbit (Oryctolagus cuniculus),2,$32.94,$65.88\r\n7/18/2018 12:16p,桜 高橋 (Sakura Takahashi),FOOD122,\"Food, Senior Wet Cat - 3 oz\",6,$1.29,157¥\r\n7/19/2018 10:28a,Rubeus Hagrid,FOOD170,\"Food, Dog - 5kg\",5,$44.95,$224.75\r\n7/20/2018 2:13p,Jon Arbuckle,FOOD167,\"Food, Premium Wet Cat - 3.5 oz\",50,$3.95,$197.5\r\n7/23/2018 1:41p,Robert Armstrong,FOOD215,BFF Oh My Gravy! Lamb & Tuna 2.8oz,4,$12.95,$51.8\r\n7/23/2018 4:23p,\"Douglas \"\"Dougie\"\" Powers\",TOY235,Laser Pointer,1,$16.12,$16.12\r\n7/24/2018 12:16p,桜 高橋 (Sakura Takahashi),FOOD122,\"Food, Senior Wet Cat - 3 oz\",3,$1.29,157¥\r\n7/26/2018 4:39p,\"Douglas \"\"Dougie\"\" Powers\",FOOD420,\"Food, Shark - 10 kg\",1,$15.70,$15.7\r\n7/27/2018 12:16p,桜 高橋 (Sakura Takahashi),FOOD122,\"Food, Senior Wet Cat - 3 oz\",3,$1.29,157¥\r\n7/30/2018 12:17p,桜 高橋 (Sakura Takahashi),RETURN,\"Food, Senior Wet Cat - 3 oz\",1,$1.29,157¥\r\n7/31/2018 5:42p,Rubeus Hagrid,CAT060,\"Food, Dragon - 50kg\",5,$720.42,$3602.1\r\n8/1/2018 2:44p,David Attenborough,FOOD360,\"Food, Rhinocerous - 50kg\",4,$5.72,$22.88\r\n8/2/2018 5:12p,Susan Ashworth,CAT110,\"Cat, Maine Coon (Felix catus)\",1,\"$1,309.68\",$1309.68\r\n8/2/2018 5:12p,Susan Ashworth,FOOD130,\"Food, Kitten 3kg\",3,$14.94,$44.82\r\n8/6/2018 10:21a,Robert Armstrong,FOOD212,BFF Oh My Gravy! Beef & Chicken 2.8oz,4,$12.95,$51.8\r\n8/7/2018 4:12p,Juan Johnson,REPT082,\"Kingsnake, California (Lampropeltis getula)\",1,$89.95,$89.95\r\n8/7/2018 4:12p,Juan Johnson,RDNT443,\"Mouse, Pinky (Mus musculus)\",1,$1.49,$1.49\r\n8/10/2018 4:31p,Robert Armstrong,FOOD211,BFF Oh My Gravy! Chicken & Turkey 2.8oz,4,$12.95,$51.8\r\n8/13/2018 2:07p,Monica Johnson,RDNT443,\"Mouse, Pinky (Mus musculus)\",1,$1.49,$1.49\r\n8/13/2018 2:08p,María Fernández,FOOD146,Forti Diet Prohealth Mouse/Rat 3lbs,2,$2.00,$4.0\r\n8/15/2018 11:57a,Mr. Praline,RETURN,\"Parrot, Norwegian Blue (Mopsitta tanta)\",1,$2300.00,-$2300.0\r\n8/15/2018 3:48p,Kyle Kennedy,FOOD121,\"Food, Adult Cat - 3.5 oz\",2,$4.22,$8.44\r\n8/16/2018 11:50a,Helen Halestorm,RETURN,Rabbit (Oryctolagus cuniculus),6,$0,$0.0\r\n8/16/2018 4:00p,Kyle Kennedy,DOG010,\"Dog, Golden Retriever (Canis lupus familiaris)\",1,\"$2,495.99\",$2495.99\r\n8/16/2018 5:15p,Michael Smith,BIRD160,\"Parakeet, Blue (Melopsittacus undulatus)\",1,29.95,$31.85\r\n8/17/2018 9:26a,Rubeus Hagrid,NSCT201,\"Food, Spider\",5,$.05,$0.25\r\n8/20/2018 9:36a,Kyle Kennedy,RETURN,\"Dog, Golden Retriever (Canis lupus familiaris)\",1,\"$1,247.99\",-$1247.99\r\n8/20/2018 1:47p,מרוסיה ניסנהולץ אבולעפיה,GOAT224,\"Goat, American Pygmy (Capra hircus)\",1,₪499,$160.51\r\n8/20/2018 3:31p,Monica Johnson,NSCT201,\"Crickets, Adult Live (Gryllus assimilis)\",30,$.05,$1.5\r\n8/20/2018 5:12p,David Attenborough,NSCT084,\"Food, Pangolin\",30,$.17,$5.10\r\n8/21/2018 12:13p,Robert Armstrong,FOOD214,BFF Oh My Gravy! Duck & Salmon 2.8oz,4,$12.95,$51.8\r\n8/22/2018 9:38a,David Attenborough,BIRD160,\"Food, Quoll\",1,29.95,$29.95\r\n8/22/2018 2:13p,Jon Arbuckle,FOOD170,\"Food, Adult Dog - 5kg\",1,$44.95,$44.95\r\n8/22/2018 5:49p,מרוסיה ניסנהולץ,SFTY052,\"Fire Extinguisher, kitchen-rated\",1,$61.70,$61.70\r\n8/24/2018 11:42a,Robert Armstrong,FOOD218,BFF Oh My Gravy! Chicken & Salmon 2.8oz,4,$12.95,$51.8\r\n8/27/2018 3:05p,Monica Johnson,NSCT443,\"Mealworms, Large (Tenebrio molitor) 100ct\",1,$1.99,$1.99\r\n8/28/2018 5:32p,Susan Ashworth,CAT020,\"Cat, Scottish Fold (Felis catus)\",1,\"$1,964.53\",$1964.53\r\n8/28/2018 5:32p,Susan Ashworth,FOOD130,\"Food, Kitten 3kg\",2,$14.94,$29.88\r\n8/29/2018 10:07a,Robert Armstrong,FOOD219,BFF Oh My Gravy! Chicken & Pumpkin 2.8oz,4,$12.95,$51.8\r\n8/31/2018 12:00a,Robert Armstrong,FOOD219,BFF Oh My Gravy! Chicken & Pumpkin 2.8oz,144,$12.95,$1864.8\r\n8/31/2018 5:57p,Juan Johnson,REPT217,\"Lizard, Spinytail (Uromastyx ornatus)\",1,$99.95,$99.95\r\n"
  },
  {
    "path": "visidata/tests/conftest.py",
    "content": "import pytest\nfrom unittest.mock import Mock\n\n\n@pytest.fixture(scope=\"class\")\ndef curses_setup():\n    \"\"\"Perform some curses prepwork\"\"\"\n\n    import curses\n    import visidata\n\n    curses.curs_set = lambda v: None\n    curses.doupdate = lambda: None\n    visidata.options.overwrite = 'y'\n\n\n@pytest.fixture(scope=\"function\")\ndef mock_screen():\n    \"\"\"Set up and return a mock curses screen object.\"\"\"\n\n    scr = Mock()\n    scr.addstr = lambda *args, **kwargs: None\n    scr.move = lambda *args, **kwargs: None\n    scr.getmaxyx = lambda: (25, 80)\n\n    return scr\n"
  },
  {
    "path": "visidata/tests/sample.tsv",
    "content": "OrderDate\tRegion\tRep\tItem\tUnits\tUnit_Cost\tTotal\n2016-01-06\tEast\tJones\tPencil\t95\t1.99\t189.05\n2016-01-23\tCentral\tKivell\tBinder\t50\t19.99\t999.50\n2016-02-09\tCentral\tJardine\tPencil\t36\t4.99\t179.64\n2016-02-26\tCentral\tGill\tPen\t27\t19.99\t539.73\n2016-03-15\tWest\tSorvino\tPencil\t56\t2.99\t167.44\n2016-04-01\tEast\tJones\tBinder\t60\t4.99\t299.40\n2016-04-18\tCentral\tAndrews\tPencil\t75\t1.99\t149.25\n2016-05-05\tCentral\tJardine\tPencil\t90\t4.99\t449.10\n2016-05-22\tWest\tThompson\tPencil\t32\t1.99\t63.68\n2016-06-08\tEast\tJones\tBinder\t60\t8.99\t539.40\n2016-06-25\tCentral\tMorgan\tPencil\t90\t4.99\t449.10\n2016-07-12\tEast\tHoward\tBinder\t29\t1.99\t57.71\n2016-07-29\tEast\tParent\tBinder\t81\t19.99\t1619.19\n2016-08-15\tEast\tJones\tPencil\t35\t4.99\t174.65\n2016-09-01\tCentral\tSmith\tDesk\t2\t125.00\t250.00\n2016-09-18\tEast\tJones\tPen Set\t16\t15.99\t255.84\n2016-10-05\tCentral\tMorgan\tBinder\t28\t8.99\t251.72\n2016-10-22\tEast\tJones\tPen\t64\t8.99\t575.36\n2016-11-08\tEast\tParent\tPen\t15\t19.99\t299.85\n2016-11-25\tCentral\tKivell\tPen Set\t96\t4.99\t479.04\n2016-12-12\tCentral\tSmith\tPencil\t67\t1.29\t86.43\n2016-12-29\tEast\tParent\tPen Set\t74\t15.99\t1183.26\n2017-01-15\tCentral\tGill\tBinder\t46\t8.99\t413.54\n2017-02-01\tCentral\tSmith\tBinder\t87\t15.00\t1305.00\n2017-02-18\tEast\tJones\tBinder\t4\t4.99\t19.96\n2017-03-07\tWest\tSorvino\tBinder\t7\t19.99\t139.93\n2017-03-24\tCentral\tJardine\tPen Set\t50\t4.99\t249.50\n2017-04-10\tCentral\tAndrews\tPencil\t66\t1.99\t131.34\n2017-04-27\tEast\tHoward\tPen\t96\t4.99\t479.04\n2017-05-14\tCentral\tGill\tPencil\t53\t1.29\t68.37\n2017-05-31\tCentral\tGill\tBinder\t80\t8.99\t719.20\n2017-06-17\tCentral\tKivell\tDesk\t5\t125.00\t625.00\n2017-07-04\tEast\tJones\tPen Set\t62\t4.99\t309.38\n2017-07-21\tCentral\tMorgan\tPen Set\t55\t12.49\t686.95\n2017-08-07\tCentral\tKivell\tPen Set\t42\t23.95\t1005.90\n2017-08-24\tWest\tSorvino\tDesk\t3\t275.00\t825.00\n2017-09-10\tCentral\tGill\tPencil\t7\t1.29\t9.03\n2017-09-27\tWest\tSorvino\tPen\t76\t1.99\t151.24\n2017-10-14\tWest\tThompson\tBinder\t57\t19.99\t1139.43\n2017-10-31\tCentral\tAndrews\tPencil\t14\t1.29\t18.06\n2017-11-17\tCentral\tJardine\tBinder\t11\t4.99\t54.89\n2017-12-04\tCentral\tJardine\tBinder\t94\t19.99\t1879.06\n2017-12-21\tCentral\tAndrews\tBinder\t28\t4.99\t139.72\n"
  },
  {
    "path": "visidata/tests/test_cliptext.py",
    "content": "import pytest\nfrom unittest.mock import Mock, call\n\nimport visidata\nfrom visidata import iterchars\n\n\nclass TestClipText:\n    @pytest.mark.parametrize('s, dispw', [\n        ('abcdef', 6),\n        ('桜 高橋', 7),\n        ('[:onclick sidebar-toggle][:reverse] b to toggle sidebar [:]', 21),\n    ])\n    def test_dispwidth(self, s, dispw):\n        assert visidata.dispwidth(s) == dispw\n\n    @pytest.mark.parametrize('s, w, clippeds, clippedw', [\n        ('b to', 4, 'b to', 4),\n        ('abcde', 8, 'abcde', 5),\n        (' jsonl', 5, ' jso…', 5),\n        ('abcdで', 6, 'abcdで', 6),\n        ('abcdで', 5, 'abcd…', 5),\n        ('a', 1, 'a', 1),\n        ('ab', 1, '…', 1),\n        ('abc', 2, 'a…', 2),\n        ('で', 1, '…', 1),\n        ('でで', 1, '…', 1),\n        ('でで', 2, '…', 1),\n        ('でで', 3, 'で…', 3),\n        ('ででで', 4, 'で…', 3),\n        ('ででで', 5, 'でで…', 5),\n        ('', 1, '', 0),\n        ('', None, '', 0),\n        ('abcdef', None, 'abcdef', 6),\n        ('ででで', None, 'ででで', 6),\n        ('で'*100, None, 'で'*100, 2*100),\n        (iterchars([1,2,3]), 4, '[3]…', 4),\n        (iterchars([1,2,3]), 7, '[3] 1;…', 7),\n        (iterchars([1,2,3]), 9, '[3] 1; 2…', 9),\n        (iterchars([1,2,3]), 11, '[3] 1; 2; 3', 11),\n        (iterchars([1,2,3]), 12, '[3] 1; 2; 3', 11),\n        (iterchars({'a':1, 'b':2, 'c':3}), 7, '{3} a=…', 7),\n        (iterchars({'a':1, 'b':2, 'c':3}), 15, '{3} a=1 b=2 c=3', 15),\n        (iterchars({'a':1, 'b':2, 'で':3}), 13, '{3} a=1 b=2 …', 13),\n        (iterchars({'a':1, 'b':2, 'で':3}), 16, '{3} a=1 b=2 で=3', 16),\n    ])\n    def test_clipstr(self, s, w, clippeds, clippedw):\n        clips, clipw = visidata.clipstr(s, w)\n        assert clips == clippeds\n        assert clipw == clippedw\n\n    @pytest.mark.parametrize('s, w, clippeds, clippedw', [\n        ('b to', 4, 'b to', 4),\n        ('abcde', 8, 'abcde', 5),\n        (' jsonl', 5, ' jsあ', 5),\n        ('abcdで', 6, 'abcdで', 6),\n        ('abcdで', 5, 'abcあ', 5),\n        ('a', 1, 'a', 1),\n        ('ab', 1, 'a', 1),\n        ('abc', 2, 'あ', 2),\n        ('で', 1, '', 0),\n        ('でで', 1, '', 0),\n        ('でで', 2, 'あ', 2),\n        ('でで', 3, 'あ', 2),\n        ('ででで', 4, 'であ', 4),\n        ('ででで', 5, 'であ', 4),\n        ('', 1, '', 0),\n        ('', None, '', 0),\n        ('abcdef', None, 'abcdef', 6),\n        ('ででで', None, 'ででで', 6),\n        ('で'*100, None, 'で'*100, 2*100),\n        (iterchars([1,2,3]), 1, '[', 1),\n        (iterchars({'a':1, 'b':2, 'c':3}), 1, '{', 1),\n    ])\n    def test_clipstr_wide_truncator(self, s, w, clippeds, clippedw):\n        clips, clipw = visidata.clipstr(s, w, truncator='あ')\n        assert clips == clippeds\n        assert clipw == clippedw\n\n    @pytest.mark.parametrize('s, w, clippeds, clippedw', [\n        ('b to', 4, 'b to', 4),\n        ('abcde', 8, 'abcde', 5),\n        (' jsonl', 5, ' json', 5),\n        ('abcdで', 6, 'abcdで', 6),\n        ('abcdで', 5, 'abcd', 4),\n        ('a', 1, 'a', 1),\n        ('ab', 1, 'a', 1),\n        ('abc', 2, 'ab', 2),\n        ('で', 1, '', 0),\n        ('でで', 1, '', 0),\n        ('でで', 2, 'で', 2),\n        ('でで', 3, 'で', 2),\n        ('ででで', 4, 'でで', 4),\n        ('ででで', 5, 'でで', 4),\n        ('', 1, '', 0),\n        ('', None, '', 0),\n        ('abcdef', None, 'abcdef', 6),\n        ('ででで', None, 'ででで', 6),\n        ('で'*100, None, 'で'*100, 2*100),\n    ])\n    def test_clipstr_empty_truncator(self, s, w, clippeds, clippedw):\n        clips, clipw = visidata.clipstr(s, w, truncator='')\n        assert clips == clippeds\n        assert clipw == clippedw\n\n    @pytest.mark.parametrize('s, w, truncator, clippeds, clippedw', [\n        ('first\\nsecond\\n\\nthird\\n\\n\\n', 22, '',  'first·second··third···', 22),\n        ('first\\nsecond\\n\\nthird\\n\\n\\n', 22, '…', 'first·second··third···', 22),\n        ('first\\nsecond\\n\\nthird\\n\\n\\n', 21, '',  'first·second··third··', 21),\n        ('first\\nsecond\\n\\nthird\\n\\n\\n', 21, '…', 'first·second··third·…', 21),\n        (''.join([chr(i) for i in range(256)]), 256, '',\n            '································ !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~··································¡¢£¤¥¦§¨©ª«¬\\xad®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ', 256),\n    ])\n    def test_clipstr_unprintable(self, s, w, truncator, clippeds, clippedw):\n        clips, clipw = visidata.clipstr(s, w, truncator=truncator, oddspace='·')\n        assert clips == clippeds\n        assert clipw == clippedw\n\n    @pytest.mark.parametrize('s, w, clippeds, clippedw', [\n        ('b to', 4, 'b to', 4),\n        ('abcde', 8, 'abcde', 5),\n        (' jsonl', 5, 'jsonl', 5),\n        ('abcdで', 6, 'abcdで', 6),\n        ('abcdで', 5, 'bcdで', 5),\n        ('でbcdで', 6, 'bcdで', 5),\n        ('でbcdefghiで', 10, 'bcdefghiで', 10),\n        ('でbcdefghiで', 3, 'iで', 3),\n        ('でbcdで', 2, 'で', 2),\n        ('でbcdで', 1, '', 0),\n        ('でbcdで', 0, '', 0),\n        ('でbcdで', -1, '', 0),\n    ])\n    def test_clipstr_start(self, s, w, clippeds, clippedw):\n        clips, clipw = visidata.clipstr_start(s, w)\n        assert clips == clippeds\n        assert clipw == clippedw\n\n    @pytest.mark.parametrize('s, w, clippeds, clippedw', [\n        ('aAbcで', 6, 'aAbcで', 6),\n        ('aAbcで', 7, 'aAbcで', 6),\n        ('aAbcで', 1000, 'aAbcで', 6),\n        ('aAbcで', 5, '…bcで', 5),\n        ('でbcで', 5, '…bcで', 5),\n        ('でででででbcで', 5, '…bcで', 5),\n        ('でbcで', 3, '…で', 3),\n        ('でbcで', 2, '…', 1),\n        ('でbcで', 1, '…', 1),\n        ('でbcで', 0, '', 0),\n        ('でbcで', -1, '', 0),\n    ])\n    def test_clipstr_start_truncator(self, s, w, clippeds, clippedw):\n        clips, clipw = visidata.clipstr_start(s, w, truncator='…')\n        assert clips == clippeds\n        assert clipw == clippedw\n\n    @pytest.mark.parametrize('s, w, clippeds, clippedw', [\n        ('1234567890', 6, '12…890', 6),\n        ('1234567890', 7, '123…890', 7),\n        ('1234567890', 8, '123…7890', 8),\n        ('1234567890', 9, '1234…7890', 9),\n        ('1234567890', 10, '1234567890', 10),\n        ('1234567890', 11, '1234567890', 10),\n        ('1234567890', 99, '1234567890', 10),\n        # all full-width characters\n        ('ででででで', 0,  '', 0),\n        ('ででででで', 1,  '…', 1),\n        ('ででででで', 2,  '…', 1),\n        ('ででででで', 3,  '…で', 3),\n        ('ででででで', 4,  '…で', 3),\n        ('ででででで', 5,  'で…で', 5),\n        ('ででででで', 6,  'で…で', 5),\n        ('ででででで', 7,  'で…でで', 7),\n        ('ででででで', 8,  'で…でで', 7),\n        ('ででででで', 9,  'でで…でで', 9),\n        ('ででででで', 10, 'ででででで', 10),\n        ('ででででで', 11, 'ででででで', 10),\n        ('ででででで', 99, 'ででででで', 10),\n        # odd string length, with mix of full-width characters\n        ('ででaaでa', 0,  '', 0),\n        ('ででaaでa', 1,  '…', 1),\n        ('ででaaでa', 2,  '…a', 2),\n        ('ででaaででa', 3,  '…a', 2),\n        ('ででaaででa', 4,  '…でa', 4),\n        ('ででaaででa', 5,  'で…a', 4),\n        ('ででaaででa', 6,  'で…でa', 6),\n    ])\n    def test_clipstr_middle(self, s, w, clippeds, clippedw):\n        clips, clipw = visidata.clipstr_middle(s, w)\n        assert clips == clippeds\n        assert clipw == clippedw\n\n    @pytest.mark.parametrize('s, dispw, clipped', [\n        #clip front half\n        ('[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:][:menu-active]ten_chars3[:][:menu-active]ten_chars4[:][:menu-active]ten_chars5[:][:menu-active]ten_chars6[:][:menu-active]ten_chars7[:]',\n        50,\n        '[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:]…[:menu-active]ten_chars6[:][:menu-active]ten_chars7[:]'),\n        #clip front half, dropping escaped markup\n        ('[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:]\\uFFF9[:menu-active]ten_chars3[:][:menu-active]ten_chars4[:][:menu-active]ten_chars5[:]\\uFFFB[:menu-active]ten_chars6[:][:menu-active]ten_chars7[:]',\n        50,\n        '[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:]…[:menu-active]ten_chars6[:][:menu-active]ten_chars7[:]'),\n\n        #clip back half, when front half is an exact fit at 24 wide\n        ('[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:]1234[:menu-active]ten_chars3[:][:menu-active]ten_chars4[:][:menu-active]ten_chars5[:][:menu-active]ten_chars6[:][:menu-active]ten_chars7[:]',\n        50,\n        '[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:]1234…[:menu-active]ten_chars6[:][:menu-active]ten_chars7[:]'),\n\n        #clip front half, when front half reaches 25 wide\n        ('[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:]12345[:menu-active]ten_chars3[:][:menu-active]ten_chars4[:][:menu-active]ten_chars5[:][:menu-active]ten_chars6[:][:menu-active]ten_chars7[:]',\n        50,\n        '[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:]…[:menu-active]ten_chars6[:][:menu-active]ten_chars7[:]'),\n\n        #clip back half, when front half is 24 wide and back half is 27 wide\n        ('[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:]1234[:menu-active]1234567[:][:menu-active]ten_chars3[:][:menu-active]ten_chars4[:]',\n        50,\n        '[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:]1234…[:menu-active]ten_chars3[:][:menu-active]ten_chars4[:]'),\n\n        #no clipping for a string exactly 50 wide, when front is 24 wide and back is 26\n        ('[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:]1234[:menu-active]123456[:][:menu-active]ten_chars3[:][:menu-active]ten_chars4[:]',\n        50,\n        '[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:]1234[:menu-active]123456[:][:menu-active]ten_chars3[:][:menu-active]ten_chars4[:]'),\n\n        #trimming to very short widths\n        ('[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:]1234[:menu-active]123456[:][:menu-active]ten_chars3[:][:menu-active]ten_chars4[:]',\n        5,\n        '…'),\n        ('[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:]1234[:menu-active]123456[:][:menu-active]ten_chars3[:][:menu-active]ten_chars4[:]',\n        1,\n        '…'),\n        ('[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:]1234[:menu-active]123456[:][:menu-active]ten_chars3[:][:menu-active]ten_chars4[:]',\n        0,\n        ''),\n        ('[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:]1234[:menu-active]123456[:][:menu-active]ten_chars3[:][:menu-active]ten_chars4[:]',\n        -1,\n        ''),\n        ('[:onclick jump-sheet-1]a[:][:onclick jump-sheet-2]ten_chars1[:][:menu-active]ten_chars3[:][:onclick jump-sheet-4]b[:]',\n        4,\n        '[:onclick jump-sheet-1]a[:]…[:onclick jump-sheet-4]b[:]'),\n        ('[:onclick jump-sheet-1]a[:][:onclick jump-sheet-2]ten_chars1[:][:menu-active]ten_chars3[:][:onclick jump-sheet-4]b[:]',\n        2,\n        '…[:onclick jump-sheet-4]b[:]'),\n\n        #no clipping, contents have plenty of room\n        ('[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:][:menu-active]ten_chars3[:][:menu-active]ten_chars4[:][:menu-active]ten_chars5[:][:menu-active]ten_chars6[:][:menu-active]ten_chars7[:]',\n        100,\n        '[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:][:menu-active]ten_chars3[:][:menu-active]ten_chars4[:][:menu-active]ten_chars5[:][:menu-active]ten_chars6[:][:menu-active]ten_chars7[:]'),\n\n        #no clipping, contents fit exactly\n        ('[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:][:menu-active]ten_chars3[:][:menu-active]ten_chars4[:][:menu-active]ten_chars5[:][:menu-active]ten_chars6[:][:menu-active]ten_chars7[:]',\n        70,\n        '[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:][:menu-active]ten_chars3[:][:menu-active]ten_chars4[:][:menu-active]ten_chars5[:][:menu-active]ten_chars6[:][:menu-active]ten_chars7[:]'),\n\n        #contents are too wide by 1\n        ('[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:][:menu-active]ten_chars3[:][:menu-active]ten_chars4[:][:menu-active]ten_chars5[:][:menu-active]ten_chars6[:][:menu-active]ten_chars7[:]',\n        69,\n         '[:onclick jump-sheet-1]ten_chars0[:][:onclick jump-sheet-2]ten_chars1[:][:menu-active]ten_chars3[:]…[:menu-active]ten_chars5[:][:menu-active]ten_chars6[:][:menu-active]ten_chars7[:]'),\n    ])\n    def test_truncate_markup_middle(self, s, dispw, clipped):\n        output = visidata.clip_markup_middle(s, dispw)\n        assert output == clipped\n\n    @pytest.mark.parametrize('text, width, expected', [\n        # color tag spanning two lines should carry over\n        ('[:error]line one\\nline two[/]', 80,\n         [('[:error]line one[/]', 'line one'),\n          ('[:error]line two[/]', 'line two')]),\n        # nested tags spanning lines\n        ('[:bold]a\\n[:error]b[/]\\nc[/]', 80,\n         [('[:bold]a[/]', 'a'),\n          ('[:bold][:error]b[/][/]', 'b'),\n          ('[:bold]c[/]', 'c')]),\n        # no markup, multiline (should work as before)\n        ('hello\\nworld', 80,\n         [('hello', 'hello'),\n          ('world', 'world')]),\n        # single line with markup (should work as before)\n        ('[:error]oops[/]', 80,\n         [('[:error]oops[/]', 'oops')]),\n        # nested tags spanning lines, closed with [:]\n        ('[:bold]a\\n[:error]b\\nc[:]\\nd [:bold]e[/]', 80,\n         [('[:bold]a[/]', 'a'),\n          ('[:bold][:error]b[/][/]', 'b'),\n          ('[:bold][:error]c[:]', 'c'),\n          ('d [:bold]e[/]', 'd e'),\n         ]),\n    ])\n    def test_wraptext_color_spans_lines(self, text, width, expected):\n        result = list(visidata.wraptext(text, width=width))\n        assert result == expected\n\n    @pytest.mark.parametrize('text, width, expected', [\n        # escaped plain text lacking markup, to demonstrate\n        ('\\uFFF9.:bold.a.:.123\\uFFFb', 10,\n         [('\\uFFF9.:bold.a.:.123\\uFFFb', '.:bold.a.:'),\n          ('', '.123')]),\n        # escaped markup wraps just like the example above\n        ('\\uFFF9[:bold]a[:]123\\uFFFb', 10,\n         [('\\uFFF9[:bold]a[:]123\\uFFFb', '[:bold]a[:'),\n          ('', ']123')]),\n    ])\n    def test_wraptext_escaped_literals(self, text, width, expected):\n        result = list(visidata.wraptext(text, width=width))\n        assert result == expected\n"
  },
  {
    "path": "visidata/tests/test_commands.py",
    "content": "import pytest\nfrom unittest.mock import Mock\n\nimport itertools\nimport visidata\nfrom pathlib import Path\n\n# test separately as needed\n\n# prefixes which should not be tested\n# commands that require curses, and are not\n# replayable\nnonTested = (\n        'toggle-profile',\n        'syscopy',\n        'syspaste',\n        'open-syspaste',\n        'macro',\n        'mouse',\n        'add-subreddits',\n        'add-submissions',\n        'open-zulip',\n        'suspend',\n        'open-memstats',  # TODO add testing support\n        'plot-column-ext',\n        'plot-numerics-ext',\n        'reload-every',\n        'reload-modified',\n        'reload-rows',\n        'breakpoint',\n        'redraw',\n        'menu',\n        'sysedit',\n        'sysopen',\n        'open-memusage',\n        'open-url',\n        'open-repl',\n        'open-tutorial',\n        'git-',\n        )\n\ndef isTestableCommand(longname, cmdlist):\n    if any([longname.startswith(n) for n in nonTested]):\n        return False\n    return True\n\n\ninputLines = { 'save-sheet': 'jetsam.csv',  # save to some tmp file\n                'save-all': 'lagan.csv',\n                 'open-file': 'jetsam.csv',  # reopen what was just saved ('o' must come after Ctrl+S in the commands list)\n                 'save-col': 'flotsam.csv',\n                 'save-col-keys': 'debris.csv',\n                'pyobj-expr': '2+2',            # open the python object for '4'\n                'edit-cell': '3',\n                 'search-keys': 'foo',\n                 'search-col': 'foo',\n                 'searchr-col': 'bar',\n                 'select-col-regex': '.',\n                 'select-cols-regex': '.',\n                 'unselect-col-regex': '.',\n                 'exec-python': 'import time',\n                 'unselect-cols-regex': '.',\n                 'go-col-regex': 'Units',          # column name in sample\n                 'go-col-name': 'Units',           # column name in sample\n                 'go-col-number': '2',\n                 'go-row-number': '5',              # go to row 5\n                 'addcol-bulk': '1',\n                 'addcol-expr': 'Units',          # just copy the column\n                 'assert-expr': 'sheet.column(\\\"Units\\\")',\n                 'assert-cell': '2016-01-06',\n                 'show-command-info': 'select-row',\n                 'assert-expr-row': 'Units',\n                 'addcol-incr-step': '2',\n                 'setcol-incr-step': '2',\n                 'setcol-iter': 'range(1, 100)',\n                 'addcol-iter': 'range(1, 100)',\n                 'setcol-format-enum': '1=cat',\n                 'setcol-input': '5',\n                 'show-expr': 'OrderDate',\n                 'setcol-expr': 'OrderDate',\n                 'open-ping': 'localhost',\n                 'setcell-expr': 'OrderDate',\n                 'setcol-range': 'range(100)',\n                 'repeat-input-n': '1',\n                 'addcol-regex-subst': dict(before=r'Units/(\\w)', after=r'\\1'), # the first character\n                 'search-cols': 'foo',\n                 'searchr-cols': 'bar',\n                 'select-expr': 'OrderDate',\n                 'setcol-fake': 'name',\n                 'unselect-expr': 'OrderDate',\n                 'random-rows': '3',\n                 'select-random': '3',\n                 'import-python': 'math',\n                 'pyobj-expr-row': 'Units + \"s\"',            # open the python object for '4'\n                 'expand-col-depth': '0',\n                 'contract-col-depth': '0',\n                 'contract-cols-depth': '0',\n                 'expand-cols-depth': '0',\n                 'save-cmdlog': 'test_commands.vdj',\n                 'aggregate-col': 'mean',\n                 'memo-aggregate': 'count',\n                 'memo-cell': 'memoname',\n                 'addcol-shell': '',\n                 'theme-input': 'light',\n                 'add-rows': '1',\n                 'join-sheets-top2': 'append',\n                 'join-sheets-all': 'append',\n                 'resize-col-input': '10',\n                 'resize-cols-input': '10',\n                 'resize-height-input': '10',\n                 'melt-regex': '(.*)_(.*)',\n                 'addcol-split': '-',\n                 'addcol-capture': '(.*)_(.*)',\n                 'slide-left-n': '2',\n                 'slide-right-n': '1',\n                 'slide-down-n': '1',\n                 'slide-up-n': '1',\n                 'addcol-window': '0 2',\n                 'select-around-n': '1',\n                 'sheet': '',\n                 'col': 'Units',\n                 'row': '5',\n                 'addcol-aggregate': 'max',\n                 'define-command': 'type-test cursorCol.type = str',\n                 'highlight-sheet': 'e..',\n                 'highlight-col': '[0-9]',\n              }\n\n@pytest.mark.usefixtures('curses_setup')\nclass TestCommands:\n\n    def test_baseCommands(self, mock_screen):\n        'exec each global command at least once'\n\n        cmdlist = visidata.vd.commands\n\n\n        vs = visidata.Sheet('test_commands')\n        vs.reload()\n        vd = visidata.vd\n\n        nerrs = 0\n        ntotal = 0\n        # cmdlist is changed when define-command is tested, so save its keys to avoid RuntimeError: OrderedDict mutated during iteration\n        longnames = list(cmdlist.keys())\n        for longname in longnames:\n            cmd = vs.getCommand(longname)\n            if cmd and cmd.deprecated:\n                continue\n            if cmd and not getattr(cmd, 'testable', True):\n                continue\n            if not isTestableCommand(longname, cmdlist):\n                continue\n            ntotal += 1\n            print(longname)\n            self.runOneTest(mock_screen, longname)\n            vd.sync()\n            if vd.lastErrors:\n                # longname, execstr, and vd.lastErrors\n                print(\"FAILED: {0}\".format(longname), '\\n'.join('\\n'.join(x) for x in vd.lastErrors))\n                nerrs += 1\n                break\n            vs.checkCursor()\n        print('%s/%s commands had errors' % (nerrs, ntotal))\n        if nerrs > 0:\n            assert False\n\n        # cleanup\n        for f in ['flotsam.csv', 'debris.csv', 'jetsam.csv', 'lagan.csv', 'test_commands.vdj']:\n            pf = Path(f)\n            if pf.exists:\n                pf.unlink(missing_ok=True)\n\n\n    def runOneTest(self, mock_screen, longname):\n        visidata.vd.clearCaches()  # we want vd to return a new VisiData object for each command\n        vd = visidata.vd\n        vd.cmdlog.rows = []\n        vd.scr = mock_screen\n\n        if longname in inputLines:\n            line = [ch for ch in inputLines[longname]] + ['Enter']\n            vd.getkeystroke = Mock(side_effect=line)\n        else:\n            vd.getkeystroke = Mock(side_effect=['Enter'])\n\n        sample_file = vd.pkg_resources_files(visidata) / 'tests/sample.tsv'\n        vs = visidata.TsvSheet('sample', source=visidata.Path(sample_file))\n        cmd = vs.getCommand(longname)\n        if not cmd:\n            vd.warning(f'command cannot be tested on TsvSheet, skipping:  {longname}')\n            return\n        vs.reload.__wrapped__(vs)\n        vs.vd = vd\n        vd.sheets = [vs]\n        vd.allSheets = [vs]\n        vs.mouseX, vs.mouseY = (4, 4)\n        vs.draw(mock_screen)\n        vs._scr = mock_screen\n        if longname in inputLines:\n            vd.currentReplayRow = vd.cmdlog.newRow(longname=longname, input=inputLines[longname])\n        else:\n            vd.currentReplayRow = vd.cmdlog.newRow(longname=longname)\n        vs.execCommand(longname, vdglobals=vd.getGlobals())\n"
  },
  {
    "path": "visidata/tests/test_completer.py",
    "content": "import pytest\nimport visidata\n\nclass TestCompleteExpr:\n    def test_completer(self):\n        vs = visidata.DirSheet('test', source=visidata.Path('.'))\n        vs.reload()\n        cexpr = visidata.CompleteExpr(vs)\n        assert cexpr('fi', 0) == 'filename'  # visible column first\n        assert cexpr('fi', 1) == 'filetype'  # hidden column second\n        assert cexpr('logn', 0) == 'lognormvariate'  # global from math\n        assert cexpr('a+logn', 0) == 'a+lognormvariate'\n\n        assert cexpr('testv', 0) == 'testv'  # no match returns same\n\n        visidata.vd.memoValue('testvalue', 42, '42')\n        cexpr = visidata.CompleteExpr(vs)\n        assert cexpr('testv', 0) == 'testvalue'\n"
  },
  {
    "path": "visidata/tests/test_date.py",
    "content": "\nimport pytest\n\nfrom visidata import Sheet, date\n\n\nclass TestVisidataDate:\n    def test_date(self):  #1507\n        dt = Sheet().customdate('%d%m%Y')\n        assert not date(2021, 7, 1) <= dt('22092017')\n        assert date(2021, 7, 1) <= dt('28092021')\n"
  },
  {
    "path": "visidata/tests/test_edittext.py",
    "content": "import pytest\nimport warnings\nfrom unittest.mock import Mock, patch\n\nimport visidata\n\n\nclass TestEditText:\n    @pytest.fixture(autouse=True, scope='function')\n    def setUp(self):\n        self.chars = []\n        visidata.vd.getkeystroke = Mock(side_effect=self.chars)\n        visidata.vd.warning = warnings.warn\n\n    @pytest.mark.parametrize('keys, result, kwargs', [\n        ('Enter', '', {}),\n        ('a b Home c d Ctrl+A e f Enter', 'efcdab', {}),\n        ('a b Left 1 Left Left Left 2 Enter', '2a1b', {}), # Left, past home\n        ('a b Ctrl+C', None, dict(exception=visidata.EscapeException)),\n        ('a b Esc', None, dict(exception=visidata.EscapeException)),\n        ('a Del Enter', 'a', {}),\n        ('a b Left Del Enter', 'a', {}),\n        ('a b Left c End d Enter', 'acbd', {}),\n        ('a b Home Right c Enter', 'acb', {}),\n        ('a b Bksp c Enter', 'ac', {}),\n\n        # Backspace no longer deletes the first character at the start\n        ('a b Home Bksp c Enter', 'cab', {}),\n\n        # Backspace works in different combos, including on the mac.\n        ('a b c Bksp Ctrl+H Left Del Enter', '', {}),\n\n        ('a b c Ctrl+B Ctrl+B Ctrl+K Enter', 'a', {}),\n\n        ('a Ctrl+R Enter', '', {}),\n        ('a Ctrl+R Enter', 'foo', dict(value='foo')),\n\n        # Two characters swaps characters\n        ('a b Ctrl+T Enter', 'ba', {}),\n\n        # Home with multiple characters acts like delete\n        ('a b Home Ctrl+T Enter', 'b', {}),\n\n        ('a b Left Ctrl+U Enter', 'b', {}),\n        ('a b Ctrl+U c Enter', 'c', {}),\n\n        ('w e Space a r e Space t h e Space w o r l d Ctrl+Left Ctrl+Left Ctrl+W Enter', 'we the world', {}),\n        ('w e Space a r e Space t h e Space w o r l d Ctrl+Left Ctrl+Left Ctrl+Del Enter', 'we are world', {}),\n    ])\n    def test_keys(self, mock_screen, keys, result, kwargs):\n        self.chars.extend([(' ' if k == 'Space' else k) for k in keys.split()])\n\n        exception = kwargs.pop('exception', None)\n        widget = visidata.InputWidget(**kwargs)\n        if exception:\n            with pytest.raises(exception):\n                widget.editline(mock_screen, 0, 0, 0, attr=visidata.ColorAttr())\n        else:\n            try:\n                r = widget.editline(mock_screen, 0, 0, 0, attr=visidata.ColorAttr())\n            except StopIteration:\n                assert False, \"need Enter (or cancel) at end of keypresses\"\n            assert r == result\n"
  },
  {
    "path": "visidata/tests/test_features.py",
    "content": "import pytest\nimport visidata\n\ndef pytest_generate_tests(metafunc):\n    \"\"\"Split feature tests into separate test cases\n\n    Look up test methods in imported modules. Turn each one into a single test_feature()\n    case, with \"module::method\" as the test id.\n    \"\"\"\n    tests = [\n        (mod, getattr(mod, k))\n        for mod in visidata.vd.importedModules\n        for k in dir(mod)\n        if k.startswith(\"test_\")\n    ]\n    argvalues = [[testfunc] for _, testfunc in tests]\n    testids = [\n        f\"{mod.__name__}::{testfunc.__name__}\"\n        for mod, testfunc in tests\n    ]\n    metafunc.parametrize(argnames=[\"testfunc\"], argvalues=argvalues, ids=testids)\n\n\n@pytest.mark.usefixtures(\"curses_setup\")\ndef test_feature(mock_screen, testfunc):\n    visidata.vd.resetVisiData()\n    visidata.vd.scr = mock_screen\n    testfunc(visidata.vd)\n"
  },
  {
    "path": "visidata/tests/test_fixed_width.py",
    "content": "from visidata.loaders.fixed_width import columnize\n\n\nclass TestColumnize:\n    def test_basic(self):\n        rows = ['name age city', 'Alice 30  NYC ']\n        cols = list(columnize(rows))\n        assert len(cols) == 3\n\n    def test_data_with_internal_spaces(self):  #2265\n        'data values with spaces should not create extra columns'\n        rows = [\n            'colours shades               counts',\n            'red     light                3     ',\n            'green   very very very light 5     ',\n            'blue    dark                 8     ',\n        ]\n        cols = list(columnize(rows))\n        assert len(cols) == 3, f'Expected 3, got {len(cols)}: {cols}'\n\n        # verify last row extracts correctly\n        vals = [rows[2][i:j].strip() if j else rows[2][i:].strip() for i, j in cols]\n        assert vals == ['green', 'very very very light', '5']\n\n    def test_empty(self):\n        assert list(columnize([])) == []\n\n    def test_single_column(self):\n        rows = ['name', 'Alice']\n        cols = list(columnize(rows))\n        assert len(cols) == 1\n        assert cols[0] == (0, 5)\n"
  },
  {
    "path": "visidata/tests/test_keystrokes.py",
    "content": "import pytest\nfrom visidata import vd, Sheet, BaseSheet\n\n\ndef accumulate_keystrokes(keys):\n    '''Simulate mainloop keystroke accumulation (mainloop.py:214-252).\n    Returns (outcome, keystrokes) where outcome is one of:\n      \"execute\", \"prefix\", \"duplicate\", \"no-command\".\n    '''\n    vd.keystrokes = ''\n    prefixWaiting = False\n\n    for key in keys:\n        if not prefixWaiting:\n            vd.keystrokes = ''\n\n        keystroke = vd.prettykeys(key)\n        potential = vd.keystrokes + keystroke\n        if keystroke and keystroke in vd.allPrefixes and keystroke in vd.keystrokes and potential not in vd.allPrefixes and vd.bindkeys._get(potential) is None:\n            vd.keystrokes = ''\n            return ('duplicate', keystroke)\n        else:\n            vd.keystrokes = potential\n\n        if vd.bindkeys._get(vd.keystrokes) is not None:\n            return ('execute', vd.keystrokes)\n        elif vd.keystrokes in vd.allPrefixes:\n            prefixWaiting = True\n        else:\n            return ('no-command', vd.keystrokes)\n\n    return ('prefix', vd.keystrokes)\n\n\n@pytest.fixture(autouse=True)\ndef setup_custom_prefixes():\n    orig_prefixes = vd.allPrefixes[:]\n    vd.allPrefixes += ['s', 'sb']\n    Sheet.unbindkey('s')\n    BaseSheet.addCommand('sbk', 'test-sbk', 'pass')\n    BaseSheet.addCommand('sbs', 'test-sbs', 'pass')\n    vs = Sheet('test_keystrokes')\n    vd.sheets = [vs]\n    yield\n    vd.allPrefixes[:] = orig_prefixes\n    vd.sheets.clear()\n\n\n@pytest.mark.parametrize('keys, expected_outcome, expected_keystrokes', [\n    # built-in prefixed commands\n    (['z', 'z'], 'execute', 'zz'),\n    (['g', 'g'], 'execute', 'gg'),\n\n    # custom multi-prefix commands  #3012\n    (['s', 'b', 'k'], 'execute', 'sbk'),\n    (['s', 'b', 's'], 'execute', 'sbs'),\n\n    # duplicate prefix detection\n    (['g', 'z', 'g'], 'duplicate', 'g'),\n\n    # unbound sequences with repeated prefix\n    (['g', 'z', 'z'], 'duplicate', 'z'),\n])\ndef test_prefix_keystrokes(keys, expected_outcome, expected_keystrokes):\n    outcome, keystrokes = accumulate_keystrokes(keys)\n    assert outcome == expected_outcome\n    assert keystrokes == expected_keystrokes\n"
  },
  {
    "path": "visidata/tests/test_menu.py",
    "content": "\nfrom visidata import vd, TableSheet\nimport pytest\n\n\nclass TestMenu:\n    def test_menuitems(self):\n        vd.addMenuItems('''Column > Add column > foobar > addcol-sparkline''')\n\n        m = TableSheet().getMenuItem(['Column', 'Add column', 'foobar'])\n        assert m\n\n        with pytest.raises(AssertionError):\n            vd.addMenuItems('''Column > Add column > non-command''')\n"
  },
  {
    "path": "visidata/tests/test_parsepos.py",
    "content": "from visidata import vd\n\n\ndef test_parsePos():\n    'Test cases from PR #2425'\n    inputs = [('foo.csv', {})]\n\n    assert vd.parsePos('') is None\n    assert vd.parsePos('2', inputs=inputs) == ([0], None, '2')  # +row with inputs: last sheet (index 0)\n    assert vd.parsePos('2', inputs=None) == (None, None, '2')  # +row without inputs: current sheet\n    assert vd.parsePos('-1', inputs=inputs) == ([0], None, '-1')  # negative row index stays as string\n    assert vd.parsePos('1:', inputs=inputs) == ([0], 1, None)  # +col:\n    assert vd.parsePos(':2', inputs=inputs) == ([0], None, 2)  # +:row\n    assert vd.parsePos('1:2', inputs=inputs) == ([0], 1, 2)  # +col:row\n    assert vd.parsePos('name:value', inputs=inputs) == ([0], 'name', 'value')  # string col:row\n    assert vd.parsePos(':1:', inputs=inputs) == ([], 1, None)  # +:col: all sheets\n    assert vd.parsePos(':1:2') == ([], 1, 2)  # +:col:row all sheets\n    assert vd.parsePos('::2') == ([], None, 2)  # +::row all sheets\n    assert vd.parsePos('0:1:2') == ([0], 1, 2)  # +sheet:col:row\n    assert vd.parsePos('1::') == ([1], None, None)  # +sheet:: switch sheet only\n    assert vd.parsePos('-2::') == ([-2], None, None)  # negative sheet index\n    assert vd.parsePos('0:a:1:2') == ([0, 'a'], 1, 2)  # named subsheet\n    assert vd.parsePos('0:0:1:2') == ([0, 0], 1, 2)  # numeric subsheet index\n    assert vd.parsePos('0:a:b:1:2') == ([0, 'a', 'b'], 1, 2)  # nested subsheets\n    assert vd.parsePos(':a:1:2') == (['', 'a'], 1, 2)  # all sheets + subsheet\n"
  },
  {
    "path": "visidata/tests/test_path.py",
    "content": "import io\nimport pytest\n\nfrom visidata import Path\nfrom visidata.path import RepeatFile, BytesIOWrapper\n\nclass TestVisidataPath:\n\n    def test_withName(self):\n        'tests for visidata.Path().with_name'\n\n        file_path = Path('sample_data/sample.tsv')\n        url_path = Path('https://visidata.org/hello/sample.tsv')\n\n        assert 'sample_data/b.tsv' == str(file_path.with_name('b.tsv')), '{} should be sample_data/b.tsv'.format(file_path.with_name('b.tsv'))\n        assert 'sample_data/a/b.tsv' == str(file_path.with_name('a/b.tsv')), '{} should be sample_data/a/b.tsv'.format(file_path.with_name('a/b.tsv'))\n\n        assert \"https://visidata.org/hello/b.tsv\" == str(url_path.with_name('b.tsv')), '{} should be https://visidata.org/hello/b.tsv'.format(url_path.with_name('b.tsv'))\n        assert \"https://visidata.org/hello/a/b.tsv\" == str(url_path.with_name('a/b.tsv')), '{} should be https://visidata.org/hello/a/b.tsv'.format(url_path.with_name('a/b.tsv'))\n\n        assert Path('foo.a.b').base_stem == 'foo.a'\n        assert Path('foo.a.b').ext == 'b'\n        assert Path('foo').ext == ''\n        assert Path('foo').base_stem == 'foo'\n        assert Path('foo.').ext == ''\n        # assert Path('foo.').base_stem == 'foo.' # only 'foo' since python 3.14\n        assert Path('foo..').ext == ''\n        assert Path('foo..').base_stem == 'foo..'\n        assert Path('.foo').ext == ''\n        assert Path('.foo').base_stem == '.foo'\n\n\n    def test_opentwice(self):\n        'fresh iterator for each open'\n        p = Path('test', fptext=io.StringIO('<html>'))\n        a = next(p.open())\n        b = next(p.open())\n        assert a == b\n\n    def test_iterdir_yields_visidata_paths(self):  # #2188\n        for p in Path('/tmp').iterdir():\n            assert isinstance(p, Path), f'{p} is {type(p)}, expected visidata.Path'\n            break  # just check the first one\n\n    def test_name_returns_full_filename(self):  # #2188\n        assert Path('foo.csv').name == 'foo.csv'\n        assert Path('/tmp/bar.tsv').name == 'bar.tsv'\n        assert Path('foo').name == 'foo'\n        assert Path('foo.csv.gz').name == 'foo.csv.gz'\n\n    def test_repeatfile_bytesiowrapper(self):  # #2829\n        rf = RepeatFile(iter(['hello\\n', 'world\\n']))\n        bio = BytesIOWrapper(rf)\n        data = bio.read()\n        assert isinstance(data, bytes)\n        assert b'hello' in data\n"
  },
  {
    "path": "visidata/text_source.py",
    "content": "import re\n\nfrom visidata import vd, BaseSheet\n\nvd.option('regex_skip', '', 'regex of lines to skip in text sources', help='regex', replay=True)\nvd.option('regex_flags', 'I', 'flags to pass to re.compile() [AILMSUX]', replay=True)\n\n@BaseSheet.api\ndef regex_flags(sheet):\n    'Return flags to pass to regex functions from options'\n    return sum(getattr(re, f.upper()) for f in sheet.options.regex_flags)\n\n\nclass FilterFile:\n    def __init__(self, fp, regex:str, regex_flags:int=0):\n        import re\n        self._fp = fp\n        self._regex_skip = re.compile(regex, regex_flags)\n\n    def readline(self) -> str:\n        while True:\n            line = self._fp.readline()\n            if self._regex_skip.match(line):\n                continue\n            return line\n\n    def __getattr__(self, k):\n        return getattr(self._fp, k)\n\n    def __iter__(self):\n        return self\n\n    def __next__(self):\n        line = self.readline()\n        if not line:\n            raise StopIteration\n        return line\n\n    def __enter__(self):\n        return self\n\n    def __exit__(self, *args, **kwargs):\n        return self._fp.__exit__(*args, **kwargs)\n\n\n@BaseSheet.api\ndef open_text_source(sheet, **kwargs):\n    'Open sheet source as text, passing **kwargs to .open() (default to sheet options for encoding and regex_skip).'\n    openkwargs = dict(encoding=sheet.options.encoding,\n                      encoding_errors=sheet.options.encoding_errors)\n    openkwargs.update(kwargs)\n    fp = sheet.source.open(**openkwargs)\n    regex_skip = sheet.options.regex_skip\n    if regex_skip:\n        return FilterFile(fp, regex_skip, sheet.regex_flags())\n    return fp\n"
  },
  {
    "path": "visidata/textsheet.py",
    "content": "import textwrap\nimport re\n\nfrom visidata import vd, BaseSheet, options, Sheet, ColumnItem, asyncthread\nfrom visidata import Column, vlen\nfrom visidata import globalCommand, VisiData\nimport visidata\n\n\nvd.option('wrap', False, 'wrap text to fit window width on TextSheet')\nvd.option('save_filetype', 'tsv', 'specify default file type to save as', replay=True)\n\n\n## text viewer\n# rowdef: (linenum, str)\nclass TextSheet(Sheet):\n    'Displays any iterable source, with linewrap if ``options.wrap`` is set.'\n    rowtype = 'lines'  # rowdef: [linenum, text]\n    filetype = 'txt'\n    columns = [\n        ColumnItem('linenum', 0, type=int, width=0),\n        ColumnItem('text', 1),\n    ]\n\n    def iterload(self):\n        yield from self.readlines(self.source)\n\n    def readlines(self, source):\n        winWidth = min(self.columns[1].width or 78, self.windowWidth-2)\n        wrap = self.options.wrap\n        for startingLine, text in enumerate(source):\n            if wrap and text:\n                for i, L in enumerate(textwrap.wrap(str(text), width=winWidth)):\n                    yield [startingLine+i+1, L]\n            else:\n                yield [startingLine+1, text]\n\n    def sysopen(sheet, linenum=0):\n        @asyncthread\n        def writelines(sheet, fn):\n            with open(fn, 'w') as fp:\n                for row in sheet.rows:\n                    fp.write(row[1])\n                    fp.write('\\n')\n\n        import tempfile\n        with tempfile.NamedTemporaryFile() as temp:\n            temp.close()  #2118\n            writelines(sheet, temp.name)\n            vd.launchEditor(temp.name, '+%s' % linenum)\n            sheet.rows = []\n            for r in sheet.readlines(visidata.Path(temp.name)):\n                sheet.addRow(r)\n\n\n# .source is list of source text lines to 'load'\n# .sourceSheet is Sheet error came from\nclass ErrorSheet(TextSheet):\n    columns = [\n        ColumnItem('linenum', 0, type=int, width=0),\n        ColumnItem('error', 1),\n    ]\n    guide = '''\n        # Error Sheet\nThis is the traceback for an error.\n- move cursor then {help.commands.sysopen_error}\n- `q` to quit this error sheet.\n    '''\n    precious = False\n\n    def sysopen_error(self, col, row):\n        '''Open an external editor for the file relevant to the cursor line\n        in the Error Sheet. If the cursor is on the first line, use the file\n        mentioned at the end of the stack trace'''\n        if self.rows and self.cursorRowIndex == 0:\n            searchidx = len(self.rows) - 1\n        else:\n            searchidx = self.cursorRowIndex\n        pat = re.compile(r'^ +File \"(.*)\", line (\\d+), in ')\n        for _, text in self.rows[searchidx::-1]: # rowdef: [linenum, text]\n            match = pat.search(text)\n            if match:\n                vd.launchEditor(match.group(1), f'+{match.group(2)}')\n                return\n\n    def reload(self):\n        src = self.source or (vd.lastErrors[-1] if vd.lastErrors else [])\n        self.rows = list(enumerate(src))\n\nclass ErrorCellSheet(ErrorSheet):\n    columns = [\n        ColumnItem('linenum', 0, type=int, width=0),\n        ColumnItem('cell_error', 1),\n    ]\n    guide = '''# Error Cell Sheet\nThis sheet shows the error that occurred when calculating a cell.\n- move cursor then {help.commands.sysopen_error}\n- `q` to quit this error sheet.\n'''\n\n\nclass ErrorsSheet(Sheet):\n    columns = [\n        Column('nlines', type=vlen),\n        ColumnItem('lastline', -1)\n    ]\n    def reload(self):\n        self.rows = self.source or vd.lastErrors\n\n    def openRow(self, row):\n        return ErrorSheet(source=self.cursorRow)\n\n@VisiData.lazy_property\ndef allErrorsSheet(self):\n    return ErrorsSheet(\"errors_all\")\n\n@VisiData.lazy_property\ndef recentErrorsSheet(self):\n    return ErrorSheet(\"errors_recent\")\n\n\n\nBaseSheet.addCommand('Ctrl+E', 'error-recent', 'recentErrorsSheet.reload(); vd.push(recentErrorsSheet) if vd.lastErrors else status(\"no error\")', 'view traceback for most recent error')\nBaseSheet.addCommand('gCtrl+E', 'errors-all', 'vd.push(vd.allErrorsSheet)', 'view traceback for most recent errors')\n\nSheet.addCommand('zCtrl+E', 'error-cell', 'vd.push(ErrorCellSheet(sheet.name+\"_cell_error\", sourceSheet=sheet, source=getattr(cursorCell, \"error\", None) or fail(\"no error this cell\")))', 'view traceback for error in current cell')\n\nTextSheet.addCommand('Ctrl+O', 'sysopen-sheet', 'sheet.sysopen(sheet.cursorRowIndex)', 'open copy of text sheet in $EDITOR and reload on exit')\n\nErrorSheet.addCommand('Enter', 'sysopen-error', 'sysopen_error(cursorCol, cursorRow)', 'open traceback line in $EDITOR')\n\nTextSheet.options.save_filetype = 'txt'\n\nvd.addGlobals({'TextSheet': TextSheet, 'ErrorSheet': ErrorSheet, 'ErrorCellSheet': ErrorCellSheet})\n\nvd.addMenuItems('''\n    View > Errors > recent > error-recent\n    View > Errors > all > errors-all\n    View > Errors > in cell > error-cell\n''')\n"
  },
  {
    "path": "visidata/theme.py",
    "content": "'Switch between packaged themes (colors and display characters)'\n\nfrom visidata import vd, VisiData, Sheet, BaseSheet\n\n\nvd.option('theme', '', 'display/color theme to use')\n\nvd.themes = {}\n\n\n@VisiData.before\ndef run(vd, *args, **kwargs):\n    t = vd.options.theme\n    if t:\n        vd.set_theme(t)\n\n\n@Sheet.api\n@VisiData.api\ndef set_theme(obj, theme=''):\n    if theme and theme not in vd.themes:\n        vd.warning(f'no \"{theme}\" theme available')\n        return\n\n    # unset everything first\n    for k in vd.options.keys():\n        if k.startswith(tuple('color_ disp_ note_'.split())):\n            obj.options.unset(k)\n\n    if not theme:\n        return\n\n    if isinstance(theme, str):\n        theme = vd.themes[theme]\n\n    for k, v in theme.items():\n        obj.options[k] = v\n\n\nBaseSheet.addCommand('', 'theme-input', 'vd.set_theme(chooseOne([dict(key=k) for k in themes.keys()], type=\"theme\"))', 'choose from available themes')\nBaseSheet.addCommand('', 'theme-default', 'vd.set_theme()', 'reset theme to VisiData defaults')\n\nvd.addMenuItem('View', 'Set theme', 'choose', 'theme-input')\nvd.addMenuItem('View', 'Set theme', 'default', 'theme-default')\n"
  },
  {
    "path": "visidata/themes/__init__.py",
    "content": ""
  },
  {
    "path": "visidata/themes/adwaita.py",
    "content": "'Adwaita theme with light and dark variants using 256-colors.'\n\nfrom visidata import vd\n\nvd.themes[\"adwaita_light\"] = dict(\n    color_default=\"0 on 15\",\n    color_default_hdr=\"bold 0 on 15\",\n    color_bottom_hdr=\"underline 0 on 15\",\n    color_current_row=\"reverse\",\n    color_current_col=\"bold\",\n    color_current_hdr=\"bold reverse\",\n    color_column_sep=\"7 on 15\",\n    color_key_col=\"26 blue\",\n    color_edit_cell=\"26 blue\",\n    color_selected_row=\"0 on 111\",\n    color_note_row=\"178 yellow\",\n    color_note_type=\"26 blue\",\n    color_warning=\"178 yellow\",\n    color_error=\"160 red\",\n    color_status=\"bold 0 on 15\",\n    color_menu=\"0 on 15\",\n    color_menu_active=\"15 on 26 blue\",\n    color_menu_help=\"244 on 15\",\n    color_active_status=\"15 on 26 blue\",\n    color_inactive_status=\"246 on 15\",\n    color_working=\"bold 36 green\",\n    color_add_pending=\"36 green\",\n    color_change_pending=\"reverse 178 yellow\",\n    color_delete_pending=\"160 red\",\n    plot_colors=\"26 36 178 160 134 38\"\n)\n\nvd.themes[\"adwaita_dark\"] = dict(\n    color_default=\"15 on 234\",\n    color_default_hdr=\"bold 15 on 234\",\n    color_bottom_hdr=\"underline 15 on 234\",\n    color_current_row=\"reverse\",\n    color_current_col=\"bold\",\n    color_current_hdr=\"bold reverse\",\n    color_column_sep=\"59 on 234\",\n    color_key_col=\"68 blue\",\n    color_edit_cell=\"68 blue\",\n    color_selected_row=\"234 on 15\",\n    color_note_row=\"214 yellow\",\n    color_note_type=\"68 blue\",\n    color_warning=\"214 yellow\",\n    color_error=\"203 red\",\n    color_status=\"bold 15 on 235\",\n    color_menu=\"15 on 235\",\n    color_menu_active=\"234 on 68 blue\",\n    color_menu_help=\"246 on 235\",\n    color_active_status=\"234 on 68 blue\",\n    color_inactive_status=\"246 on 234\",\n    color_working=\"bold 78 green\",\n    color_add_pending=\"78 green\",\n    color_change_pending=\"reverse 214 yellow\",\n    color_delete_pending=\"203 red\",\n    plot_colors=\"68 78 214 203 134 38\"\n)\n"
  },
  {
    "path": "visidata/themes/ascii8.py",
    "content": "'ASCII theme using the first 8 colors'\n\nfrom visidata import vd\n\n\nvd.themes['ascii8'] = dict(\n    disp_note_none='',\n    disp_truncator='>',\n    disp_oddspace='.',\n    disp_more_left='<',\n    disp_more_right='>',\n    disp_error_val='',\n    disp_ambig_width=1,\n\n    disp_pending='',\n    disp_note_pending=':',\n    disp_note_fmtexc='?',\n    disp_note_getexc='!',\n    disp_note_typeexc='!',\n\n    color_note_pending='bold magenta',\n    color_note_type='yellow',\n    color_note_row='yellow',\n\n    disp_column_sep='|',\n    disp_keycol_sep='|',\n    disp_rowtop_sep='|',\n    disp_rowmid_sep='|',\n    disp_rowbot_sep='|',\n    disp_rowend_sep='|',\n    disp_keytop_sep='|',\n    disp_keymid_sep='|',\n    disp_keybot_sep='|',\n    disp_endtop_sep='|',\n    disp_endmid_sep='|',\n    disp_endbot_sep='|',\n    disp_selected_note='+',\n    disp_sort_asc='^^^^^^',\n    disp_sort_desc='vvvvvv',\n    color_default='white on black',\n    color_default_hdr='bold',\n    color_bottom_hdr='underline',\n    color_current_row='reverse',\n    color_current_col='bold',\n    color_current_hdr='bold reverse',\n    color_column_sep='blue',\n    color_key_col='cyan',\n    color_hidden_col='8',\n    color_selected_row='yellow',\n    color_edit_cell='white',\n    color_graph_hidden='blue',\n    color_graph_selected='bold',\n    color_status_replay='green',\n\n    color_graph_axis='bold',\n    color_sidebar='black on blue',\n    disp_boxchars='||--++++',\n    color_add_pending='green',\n    color_change_pending='reverse yellow',\n    color_delete_pending='red',\n    disp_rstatus_fmt=' {sheet.longname} {sheet.nRows:9d} {sheet.rowtype} {sheet.modifiedStatus} {sheet.options.disp_selected_note}{sheet.nSelectedRows}',\n    disp_status_fmt='{sheet.shortcut}> {sheet.name}| ',\n    disp_lstatus_max=0,\n    disp_status_sep=' | ',\n    color_keystrokes='bold black on cyan',\n    color_status='bold black on cyan',\n    color_error='red',\n    color_warning='yellow',\n    color_top_status='underline',\n    color_active_status='black on cyan',\n    color_inactive_status='8 on black',\n    color_working='bold white',\n    color_longname_status='black on cyan',\n\n    color_menu='black on cyan',\n    color_menu_active='yellow on black',\n    color_menu_spec='black on green',\n    color_menu_help='black on cyan',\n    disp_menu_boxchars='||--    ||',\n    disp_menu_more='>',\n    disp_menu_push='+',\n    disp_menu_input='_',\n    disp_menu_fmt='7-bit ASCII 3-bit color',\n    plot_colors = 'white',\n    disp_histogram='*',\n    disp_graph_reflines_x_charset='||||',\n    disp_graph_reflines_y_charset='----'\n)\n"
  },
  {
    "path": "visidata/themes/asciimono.py",
    "content": "'ASCII monochrome theme; default colors only'\n\nfrom visidata import vd\n\n\nvd.themes['asciimono'] = dict(\n    disp_note_none='',\n    disp_truncator='>',\n    disp_oddspace='.',\n    disp_more_left='<',\n    disp_more_right='>',\n    disp_error_val='',\n    disp_ambig_width=1,\n\n    disp_pending='',\n    disp_note_pending=':',\n    disp_note_fmtexc='?',\n    disp_note_getexc='!',\n    disp_note_typeexc='!',\n\n    color_note_pending='bold',\n    color_note_type='',\n    color_note_row='',\n\n    disp_column_sep='|',\n    disp_keycol_sep='|',\n    disp_rowtop_sep='|',\n    disp_rowmid_sep='|',\n    disp_rowbot_sep='|',\n    disp_rowend_sep='|',\n    disp_keytop_sep='|',\n    disp_keymid_sep='|',\n    disp_keybot_sep='|',\n    disp_endtop_sep='|',\n    disp_endmid_sep='|',\n    disp_endbot_sep='|',\n    disp_selected_note='+',\n    disp_sort_asc='^^^^^^',\n    disp_sort_desc='vvvvvv',\n    color_default='',\n    color_default_hdr='bold',\n    color_bottom_hdr='underline',\n    color_current_row='reverse',\n    color_current_col='bold',\n    color_current_hdr='bold reverse',\n    color_column_sep='',\n    color_key_col='bold',\n    color_hidden_col='8',\n    color_selected_row='',\n    color_edit_cell='',\n    color_edit_unfocused='',\n    color_graph_hidden='',\n    color_graph_selected='bold',\n    color_status_replay='',\n    color_currency_neg='',\n    color_match='',\n    color_cmdpalette='',\n\n    color_graph_axis='bold',\n    color_sidebar='reverse',\n    disp_boxchars='||--++++',\n    color_change_pending='reverse',\n    color_delete_pending='underline',\n\n    disp_rstatus_fmt=' {sheet.longname} {sheet.nRows:9d} {sheet.rowtype} {sheet.modifiedStatus} {sheet.options.disp_selected_note}{sheet.nSelectedRows}',\n    disp_status_fmt='{sheet.shortcut}> {sheet.name}| ',\n    disp_lstatus_max=0,\n    disp_status_sep=' | ',\n    color_keystrokes='bold reverse',\n    color_status='bold reverse',\n    color_error='bold',\n    color_warning='bold',\n    color_top_status='underline',\n    color_active_status='reverse',\n    color_inactive_status='8',\n    color_working='',\n    color_longname='',\n    color_highlight_status='',\n    color_sidebar_title='',\n    color_heading='',\n    color_guide_unwritten='',\n    color_code='',\n\n    color_menu='reverse',\n    color_menu_active='',\n    color_menu_spec='reverse',\n    color_menu_help='reverse',\n    color_add_pending='',\n    disp_menu_boxchars='||--    ||',\n    disp_menu_more='>',\n    disp_menu_push='+',\n    disp_menu_input='_',\n    disp_menu_fmt='_.;\"`\\\\ ASCII mono /\\':._',\n    plot_colors = 'white',\n)\n"
  },
  {
    "path": "visidata/themes/light.py",
    "content": "'Light-mode theme using 256-colors.'\n\nfrom visidata import vd\n\nvd.themes['light'] = dict(\n        color_default      = 'black on white',  # the default fg and bg colors\n        color_default_hdr  = 'bold black on white',\n        color_bottom_hdr   = 'underline black on white',\n        color_current_col  = 'bold on white',\n        color_column_sep   = 'black on white',\n        color_key_col      = '20 blue',   # color of key columns\n        color_edit_cell    = '234 black',     # cell color to use when editing cell\n        color_selected_row = '164 magenta',  # color of selected rows\n        color_note_row     = '164 magenta',  # color of row note on left edge\n        color_note_type    = '88 red',  # color of cell note for non-str types in anytype columns\n        color_warning      = '202 11 yellow',\n        color_add_pending  = '34 green',\n        color_change_pending  = '166 yellow',\n        plot_colors = '20 red magenta black 28 88 94 99 106'\n)\n\n"
  },
  {
    "path": "visidata/threads.py",
    "content": "import ctypes\nimport time\nimport os.path\nimport functools\nimport cProfile\nimport threading\nimport collections\nimport subprocess\nimport curses\n\nfrom visidata import VisiData, vd, options, globalCommand, Sheet, EscapeException, asyncthread\nfrom visidata import ColumnAttr, Column, BaseSheet, ItemColumn\n\n\nvd.option('profile', False, 'enable profiling on threads')\nvd.option('min_memory_mb', 0, 'minimum memory to continue loading and async processing')\nvd.option('max_threads', 10, 'maximum number of concurrent processes on DirSheet')\n\nvd.theme_option('color_working', '118 5', 'color of system running smoothly')\n\nBaseSheet.init('currentThreads', list)\n\n\nvd._queuedFuncs = []\n\n\nclass QueuedFunc:\n    def __init__(self, func, args, kwargs, readonly=False):\n        self._func = func\n        self._args = args\n        self._kwargs = kwargs\n        self._result = None\n        self._proc = None\n        self._readonly = readonly\n\n    def _run_sync(self):\n        self._result = self._func(*self._args, **self._kwargs)\n\n    def _run(self):\n        self._proc = vd.execAsync(self._run_sync, _readonly=self._readonly)\n\n\n@VisiData.api\ndef _queueFunc(vd, func, *args, _readonly=False, **kwargs):\n    qf = QueuedFunc(func, args, kwargs, readonly=_readonly)\n    vd._queuedFuncs.append(qf)\n    vd._runToCapacity()\n    return qf\n\n\n@VisiData.api\ndef _runToCapacity(vd):\n    for i in range(len(vd.unfinishedThreads), vd.options.max_threads+1):\n        if not vd._queuedFuncs:\n            break\n\n        qf = vd._queuedFuncs.pop(0)\n        qf._run()\n\n\ndef asynccache(keyfunc=lambda *args, **kwargs: str(args)+str(kwargs)):\n    def _decorator(func):\n        'Function decorator, so first call to `func()` spawns a separate thread. Calls return the Thread until the wrapped function returns; subsequent calls return the cached return value.'\n        d = {}  # per decoration cache\n        @functools.wraps(func)\n        def _execAsync(*args, **kwargs):\n            k = keyfunc(*args, **kwargs)\n            if k not in d:\n                t = vd._queueFunc(func, *args, **kwargs, _readonly=True)\n                #atomic read/write to d[k]\n                d.setdefault(k, t)  #2826\n            return d.get(k)._result\n        return _execAsync\n    return _decorator\n\n\nclass _Progress:\n    def __init__(self, iterable=None, gerund=\"\", total=None, sheet=None):\n        self.iterable = iterable\n        if total is None:\n            if iterable is not None:\n                self.total = len(iterable)\n            else:\n                self.total = 0\n        else:\n            self.total = total\n        self.sheet = sheet if sheet else getattr(threading.current_thread(), 'sheet', None)\n        self.gerund = gerund\n        self.made = 0\n\n    def __enter__(self):\n        if self.sheet:\n            self.sheet.progresses.insert(0, self)\n        return self\n\n    def addProgress(self, n):\n        'Increase the progress count by *n*.'\n        self.made += n\n        return True\n\n    def __exit__(self, exc_type, exc_val, tb):\n        if self.sheet:\n            self.sheet.progresses.remove(self)\n\n    def __iter__(self):\n        with self as prog:\n            for item in self.iterable:\n                yield item\n                self.made += 1\n\n@VisiData.global_api\ndef Progress(vd, iterable=None, gerund=\"\", total=None, sheet=None):\n    '''Maintain progress count as either an iterable wrapper, or a context manager.\n\n        - *iterable*: wrapped iterable if used as an iterator.\n        - *gerund*: status text shown while this Progress is active.\n        - *total*: total count expected.\n        - *sheet*: specific sheet to associate this progress with.  Default is sheet from current thread.\n        '''\n    return _Progress(iterable=iterable, gerund=gerund, total=total, sheet=sheet)\n\n\n@VisiData.api\ndef cancelThread(vd, *threads, exception=EscapeException):\n    'Raise *exception* in one or more *threads*.'\n    for t in threads:\n        if t.ident is not None:\n            ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(t.ident), ctypes.py_object(exception))\n\n\n# each row is an augmented threading.Thread object\nclass ThreadsSheet(Sheet):\n    rowtype = 'threads'\n    precious = False\n    columns = [\n        ColumnAttr('name'),\n        Column('process_time', type=float, getter=lambda col,row: elapsed_s(row)),\n        ColumnAttr('profile'),\n        ColumnAttr('status'),\n        ColumnAttr('exception'),\n    ]\n    def reload(self):\n        self.rows = self.source\n\n    def openRow(self, row):\n        'push profile sheet for this action'\n        if row.profile:\n            return ProfileSheet(row.name, \"profile\", source=row.profile)\n        vd.warning(\"no profile\")\n\n\ndef elapsed_s(t):\n    return (t.endTime or time.process_time())-t.startTime\n\n\n@VisiData.api\ndef checkMemoryUsage(vd):\n    threads = vd.unfinishedThreads\n    if not threads:\n        return ''\n\n    min_mem = vd.options.min_memory_mb\n    if not min_mem:\n        return ''\n\n    try:\n        freestats = subprocess.run('free --total --mega'.split(), check=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.strip().splitlines()\n    except FileNotFoundError as e:\n        if vd.options.debug:\n            vd.exceptionCaught(e)\n        vd.options.min_memory_mb = 0\n        vd.warning('disabling min_memory_mb: \"free\" not installed')\n        return ''\n    tot_m, used_m, free_m = map(int, freestats[-1].split()[1:])\n    ret = f'  [{free_m}MB] '\n    if free_m < min_mem:\n        attr = '[:warning]'\n        vd.warning(f'{free_m}MB free < {min_mem}MB minimum, stopping threads')\n        vd.cancelThread(*vd.unfinishedThreads)\n        curses.flash()\n    else:\n        attr = '[:working]'\n    return attr + ret + '[/]'\n\n\n# for progress bar\nBaseSheet.init('progresses', list)  # list of Progress objects\n\n@BaseSheet.property\ndef progressMade(self):\n    return sum(prog.made for prog in self.progresses if prog.total)\n\n@BaseSheet.property\ndef progressTotal(self):\n    return sum(prog.total for prog in self.progresses)\n\n\n@BaseSheet.property\ndef progressPct(sheet):\n    'Percent complete string as indicated by async actions.'\n    if sheet.progresses and sheet.progressTotal > 0:\n        return '%2d%%' % int(sheet.progressMade*100//sheet.progressTotal)\n    return ''\n\n## threads\n\ndef _annotate_thread(t, endTime=None):\n    t.startTime = time.process_time()\n    t.endTime = endTime  # endTime is None means unfinished.  endTime=0 for main thread\n    t.status = ''\n    t.profile = None\n    t.exception = None\n    return t\n\n# all long-running threads, including main and finished\nvd.threads = [_annotate_thread(threading.current_thread(), 0)]\n\n@VisiData.api\ndef execSync(vd, func, *args, sheet=None, **kwargs):\n    'Execute ``func(*args, **kwargs)`` in this thread (synchronously). A drop-in substitute for vd.execAsync.'\n    vd.callNoExceptions(func, *args, **kwargs)\n    t = threading.current_thread()\n    t.sheet = sheet or vd.activeSheet\n    return t\n\n@VisiData.api\ndef execAsync(vd, func, *args, **kwargs):\n    '''Execute ``func(*args, **kwargs)`` in a separate thread.  `sheet` is a\n    special kwarg to indicate which sheet the thread should be associated with;\n    by default, uses vd.activeSheet.  If `sheet` explicitly given as None, the thread\n    will be ignored by vd.sync and thread status indicators.\n    '''\n\n    if 'sheet' not in kwargs:\n        sheet = vd.activeSheet\n    else:\n        sheet = kwargs.pop('sheet')\n\n    # threads from the last command can launch new non-readonly threads, but no\n    # one else can, if any threads from previous commands on this sheet are\n    # still running\n    if not kwargs.pop('_readonly', False):\n        if sheet is not None and (sheet.lastCommandThreads and threading.current_thread() not in sheet.lastCommandThreads):  #1148\n            vd.fail(f'still running **{sheet.lastCommandThreads[-1].name}** from previous command')\n\n    # the current thread's activeCommand\n    cmd = vd.activeCommand\n    # the newly started thread is assigned the same activeCommand\n    def _with_active_cmd(func, *args, **kwargs):\n        if cmd: vd.activeCommand = cmd\n        _toplevelTryFunc(func, *args, **kwargs)\n        if cmd: vd.activeCommand = None\n    thread = threading.Thread(target=_with_active_cmd, daemon=True, args=(func,)+args, kwargs=kwargs)\n    vd.threads.append(_annotate_thread(thread))\n\n    if sheet is not None:\n        sheet.currentThreads.append(thread)\n\n    thread.sheet = sheet\n    thread.start()\n\n    return thread\n\ndef _toplevelTryFunc(func, *args, **kwargs):\n  with ThreadProfiler(threading.current_thread()) as prof:\n    t = threading.current_thread()\n    t.name = func.__name__\n    try:\n        t.status = func(*args, **kwargs)\n        if t.status is None:\n            t.status = 'ended'\n    except EscapeException as e:  # user aborted\n        t.status = 'aborted by user'\n        vd.warning(f'{t.name} aborted')\n    except Exception as e:\n        t.exception = e\n        t.status = 'exception'\n        vd.exceptionCaught(e)\n    finally:\n        t.endTime = time.process_time()\n\n    if t.sheet:\n        t.sheet.currentThreads.remove(t)\n\n    try:\n        vd._runToCapacity()\n    except Exception as e:\n        vd.exceptionCaught(e)\n\ndef asyncignore(func):\n    'Decorator like `@asyncthread` but without attaching to a sheet, so no sheet.threadStatus will show it.'\n    @functools.wraps(func)\n    def _execAsync(*args, **kwargs):\n        @functools.wraps(func)\n        def _func(*args, **kwargs):\n            func(*args, **kwargs)\n\n        return vd.execAsync(_func, *args, **kwargs, sheet=None)\n\n    return _execAsync\n\ndef asyncsingle(func):\n    '''Function decorator like `@asyncthread` but as a singleton.  When called, `func(...)` spawns a new thread, and cancels any previous thread still running *func*.\n    ``vd.sync()`` does not wait for unfinished asyncsingle threads.\n    '''\n    @functools.wraps(func)\n    def _execAsync(*args, **kwargs):\n        def _func(*args, **kwargs):\n            func(*args, **kwargs)\n            _execAsync.searchThread = None\n            # end of thread\n\n        # cancel previous thread if running\n        if _execAsync.searchThread:\n            vd.cancelThread(_execAsync.searchThread)\n\n        _func.__name__ = func.__name__ # otherwise, the the thread's name is '_func'\n\n        _execAsync.searchThread = vd.execAsync(_func, *args, **kwargs)\n        _execAsync.searchThread.noblock = True\n    _execAsync.searchThread = None\n    return _execAsync\n\ndef asyncsingle_queue(func):\n    '''Function decorator like `@asyncthread` but as a singleton.  When called, `func(...)` spawns a new thread, and waits for the end of any previous thread still running *func*.\n    ``vd.sync()`` does wait for unfinished asyncsingle_queue threads, which is an important difference from asyncsingle.\n    '''\n    @functools.wraps(func)\n    def _execAsync(*args, **kwargs):\n        def _func(*args, **kwargs):\n            func(*args, **kwargs)\n            _execAsync.searchThread = None\n            # end of thread\n\n        # cancel previous thread if running\n        if _execAsync.searchThread:\n            vd.sync(_execAsync.searchThread)\n\n        _func.__name__ = func.__name__ # otherwise, the the thread's name is '_func'\n\n        _execAsync.searchThread = vd.execAsync(_func, *args, **kwargs)\n    _execAsync.searchThread = None\n    return _execAsync\n\n@VisiData.property\ndef unfinishedThreads(self):\n    'A list of unfinished threads (those without a recorded `endTime`).'\n    return [t for t in self.threads if getattr(t, 'endTime', None) is None and getattr(t, 'sheet', None) is not None]\n\n\n@VisiData.api\ndef sync(self, *joiningThreads):\n    'Wait for one or more *joiningThreads* to finish. If no *joiningThreads* specified, wait for all but current thread and interface thread to finish.'\n    joiningThreads = set(joiningThreads)\n    while True:\n        deads = set()  # dead threads\n        threads = joiningThreads or set(self.unfinishedThreads)\n        threads -= set([threading.current_thread(), getattr(vd, 'drawThread', None), getattr(vd, 'outputProgressThread', None)])\n        threads -= deads\n        threads -= set([None])\n        for t in threads:\n            try:\n                if not t.is_alive() or t not in threading.enumerate() or getattr(t, 'noblock', False) is True:\n                    deads.add(t)\n                else:\n                    t.join(timeout=1)\n            except RuntimeError as e:  # maybe thread hasn't started yet or has already joined\n                vd.exceptionCaught(e)\n                pass\n\n        if len(threads - deads) == 0:\n            break\n\n\nmin_thread_time_s = 0.10 # only keep threads that take longer than this number of seconds\n\n@VisiData.api\ndef open_pyprof(vd, p):\n    import pstats\n    return ProfileStatsSheet(p.base_stem, source=pstats.Stats(p.given).stats)\n\n\n@VisiData.api\ndef toggleProfiling(vd):\n    t = threading.current_thread()\n    if not vd.options.profile:\n        if not t.profile:\n            t.profile = cProfile.Profile()\n        t.profile.enable()\n        vd.options.set('profile', True)\n    else:\n        if t.profile:\n            t.profile.disable()\n        vd.options.set('profile', False)\n    vd.status('profiling ' + ('ON' if vd.options.profile else 'OFF'))\n\n\nclass ThreadProfiler:\n    def __init__(self, thread):\n        self.thread = thread\n        self.thread.profile = cProfile.Profile()\n\n    def __enter__(self):\n        if vd.options.profile:\n            try:\n                self.thread.profile.enable()\n            except ValueError: #\"ValueError: Another profiling tool is already active\"\n                pass\n        return self\n\n    def __exit__(self, exc_type, exc_val, tb):\n        self.thread.profile.disable()\n\n        if exc_val:\n            self.thread.exception = exc_val\n        else:\n            # remove very-short-lived async actions\n            if elapsed_s(self.thread) < min_thread_time_s:\n                vd.threads.remove(self.thread)\n            else:\n                if self.thread.sheet:\n                    if vd.options.profile:\n                        vd.status(f'[:bold]{self.thread.sheet.name[:32]}.{self.thread.name}[/] finished in {elapsed_s(self.thread):.1f}s')\n                if vd.options.profile:\n                    self.thread.profile.dump_stats(f'{self.thread.name}.pyprof')\n\n\nclass ProfileSheet(Sheet):\n    rowtype = 'callsites' # rowdef: profiler_entry\n    guide = '''\n        # Profile Sheet\n        - `z Ctrl+S` to save as pyprof file\n        - `Ctrl+O` to open current function in $EDITOR\n        - `Enter` to open list of calls from current function\n    '''\n    columns = [\n        Column('funcname', getter=lambda col,row: codestr(row.code)),\n        Column('filename', getter=lambda col,row: os.path.split(row.code.co_filename)[-1] if not isinstance(row.code, str) else ''),\n        Column('linenum', type=int, getter=lambda col,row: row.code.co_firstlineno if not isinstance(row.code, str) else None),\n\n        Column('inlinetime_us', type=int, getter=lambda col,row: row.inlinetime*1000000),\n        Column('totaltime_us', type=int, getter=lambda col,row: row.totaltime*1000000),\n        ColumnAttr('callcount', type=int),\n        Column('avg_inline_us', type=int, getter=lambda col,row: row.inlinetime*1000000/row.callcount),\n        Column('avg_total_us', type=int, getter=lambda col,row: row.totaltime*1000000/row.callcount),\n        ColumnAttr('reccallcount', type=int),\n        ColumnAttr('calls'),\n        Column('callers', getter=lambda col,row: col.sheet.callers[row.code]),\n    ]\n\n    nKeys=3\n    _ordering = [('inlinetime_us', True)]  # initially sort by inlinetime descending\n\n    def reload(self):\n        if isinstance(self.source, cProfile.Profile):\n            self.rows = self.source.getstats()\n        else:\n            self.rows = self.source\n\n        self.callers = collections.defaultdict(list)  # [row.code] -> list(code)\n\n        for r in self.rows:\n            calls = getattr(r, 'calls', None)\n            if calls:\n                for callee in calls:\n                    self.callers[callee.code].append(r)\n\n    def openRow(self, row):\n        'open ProfileSheet for calls referenced in current row'\n        if row.calls:\n            return ProfileSheet(codestr(row.code)+\"_calls\", source=row.calls)\n        vd.warning(\"no calls\")\n\n    def openCell(self, col, row):\n        'open ProfileSheet for caller referenced in current cell'\n        val = col.getValue(row)\n        if val:\n            return ProfileSheet(codestr(row.code)+\"_\"+col.name, source=val)\n        vd.warning(\"no callers\")\n\n\nclass ProfileStatsSheet(Sheet):\n    rowtype = 'functions' # rowdef: list from pstats.Stats.stats\n    columns = [\n        ItemColumn('pathname', 0),\n        ItemColumn('line', 1, type=int),\n        ItemColumn('func', 2),\n        ItemColumn('ncalls', 3, type=int),\n        ItemColumn('primitive_calls', 4, type=int, width=0),\n        ItemColumn('tottime', 5, type=float),\n        ItemColumn('cumtime', 6, type=float),\n        ItemColumn('callers', 7),\n    ]\n    def reload(self):\n        self.rows = list((k+v) for k,v in self.source.items())\n\n    def openRow(self, row):\n        return ProfileStatsSheet('', source=row[7])\n\ndef codestr(code):\n    if isinstance(code, str):\n        return code\n    return code.co_name\n\n\n@VisiData.lazy_property\ndef allThreadsSheet(self):\n    return ThreadsSheet(\"threads\", source=vd.threads)\n\n@BaseSheet.api\ndef cancel_sheet(sheet):\n    vd.replay_cancel()\n    vd._queuedFuncs.clear()\n    vd.cancelThread(*sheet.currentThreads or vd.fail(\"no active threads on this sheet\"))\n\n\nThreadsSheet.addCommand('Ctrl+C', 'cancel-thread', 'cancelThread(cursorRow)', 'abort thread at current row')\nThreadsSheet.addCommand('gCtrl+C', 'cancel-all', 'cancelThread(*sheet.rows)', 'abort all threads on this threads sheet')\nThreadsSheet.addCommand(None, 'add-row', 'fail(\"cannot add new rows on Threads Sheet\")', 'invalid command')\n\nProfileSheet.addCommand('zCtrl+S', 'save-profile', 'source.dump_stats(input(\"save profile to: \", value=name+\".prof\"))', 'save profile')\nProfileSheet.addCommand('Ctrl+O', 'sysopen-row', 'launchEditor(cursorRow.code.co_filename, \"+%s\" % cursorRow.code.co_firstlineno)', 'open current file at referenced row in external $EDITOR')\nProfileStatsSheet.addCommand('Ctrl+O', 'sysopen-row', 'launchEditor(cursorRow[0], \"+%s\" % cursorRow[1])', 'open current file at referenced row in external $EDITOR')\n\nBaseSheet.addCommand('Ctrl+_', 'toggle-profile', 'toggleProfiling()', 'Enable or disable profiling on main VisiData process')\n\nBaseSheet.addCommand('Ctrl+C', 'cancel-sheet', 'cancel_sheet()', 'abort all threads on current sheet')\nBaseSheet.addCommand('gCtrl+C', 'cancel-all', 'liveThreads=list(t for vs in vd.sheets for t in vs.currentThreads); cancelThread(*liveThreads); status(\"canceled %s threads\" % len(liveThreads))', 'abort all spawned threads')\n\n\nBaseSheet.addCommand('Ctrl+T', 'threads-all', 'vd.push(vd.allThreadsSheet)', 'open Threads for all sheets')\nBaseSheet.addCommand('zCtrl+T', 'threads-sheet', 'vd.push(ThreadsSheet(\"threads\", source=sheet.currentThreads))', 'open Threads for this sheet')\n\nvd.addGlobals({\n    'ThreadsSheet': ThreadsSheet,\n    'Progress': Progress,\n    'asynccache': asynccache,\n    'asyncsingle': asyncsingle,\n    'asyncsingle_queue': asyncsingle_queue,\n    'asyncignore': asyncignore,\n})\n\nvd.addMenuItems('''\n    System > Threads sheet > threads-all\n    System > Toggle profiling > toggle-profile\n''')\n"
  },
  {
    "path": "visidata/tuiwin.py",
    "content": "from visidata import VisiData, vd, BaseSheet\n\nvd._parentscrs = {}  # scr -> parentscr\n\n\n@VisiData.api\ndef subwindow(vd, scr, x, y, w, h):\n    'Return subwindow with its (0,0) at (x,y) relative to parent scr.  Replacement for scr.derwin() to track parent scr.'\n    newscr = scr.derwin(h, w, y, x)\n    vd._parentscrs[newscr] = scr\n    return newscr\n\n\n@VisiData.api\ndef getrootxy(vd, scr):  # like scr.getparyx() but for all ancestor scrs\n    px, py = 0, 0\n    while scr in vd._parentscrs:\n        dy, dx = scr.getparyx()\n        if dy > 0: py += dy\n        if dx > 0: px += dx\n        scr = vd._parentscrs[scr]\n    return px, py\n\n\nvd.bindkey('Alt+[Shift+I', 'no-op')  #2247 focus-in\nvd.bindkey('Alt+[Shift+O', 'no-op')  # focus-out\n"
  },
  {
    "path": "visidata/type_currency.py",
    "content": "from visidata import vd, Sheet, Column\n\nvd.option('disp_currency_fmt', '%.02f', 'default fmtstr to format for currency values', replay=True, help=vd.help_float_fmt)\nvd.theme_option('color_currency_neg', 'red', 'color for negative values in currency displayer', replay=True)\n\n\nfloatchars='+-0123456789.'\n\n@vd.numericType('$')\ndef currency(*args):\n    'dirty float (strip non-numeric characters)'\n    if args and isinstance(args[0], str):\n        args = [''.join(ch for ch in args[0] if ch in floatchars)]\n    return float(*args)\n\n\n@Column.api\ndef displayer_currency(col, dw, width=None):\n    text = dw.text\n\n    if isinstance(dw.typedval, (int, float)):\n        if dw.typedval < 0:\n            text = f'({dw.text[1:]})'.rjust(width-1)\n            yield ('currency_neg', '')\n        else:\n            text = text.rjust(width-2)\n\n    yield ('', text)\n\nSheet.addCommand('$', 'type-currency', 'cursorCol.type=currency; cursorCol.displayer=\"currency\"', 'set type of current column to currency')\n\nvd.addMenuItems('''\n    Column > Type as > dirty float > type-currency\n''')\n"
  },
  {
    "path": "visidata/type_date.py",
    "content": "import datetime\n\nfrom visidata import VisiData, vd, Sheet\n\n@VisiData.lazy_property\ndef date_parse(vd):\n    try:\n        from dateutil.parser import parse\n        return parse\n    except ImportError:\n        vd.warning('install python-dateutil for date type')\n        return str\n\nvd.help_date = '''\n- RFC3339: `%Y-%m-%d %H:%M:%S.%f %z`\n- `%A`  Weekday as locale’s full name.\n- `%w`  Weekday as a decimal number, where 0 is Sunday and 6 is Saturday.\n- `%d`  Day of the month as a zero-padded decimal number.\n- `%b`  Month as locale’s abbreviated name.\n- `%B`  Month as locale’s full name.\n- `%p`  Locale’s equivalent of either AM or PM.\n- `%c`  Locale’s appropriate date and time representation.\n- `%x`  Locale’s appropriate date representation.\n- `%X`  Locale’s appropriate time representation.\n- `%Z`  Time zone name (empty string if the object is naive).\n\nSee [:onclick https://strftime.org]Python strftime()[/] for a full list of format codes.\n'''\n\nvd.option('disp_date_fmt','%Y-%m-%d', 'default fmtstr passed to strftime for date values', replay=True, help=vd.help_date)\n\n\n@vd.numericType('@', '', formatter=lambda fmtstr,val: val.strftime(fmtstr or vd.options.disp_date_fmt))\nclass date(datetime.datetime):\n    'datetime wrapper, constructed from time_t or from str with dateutil.parse'\n\n    def __new__(cls, *args, **kwargs):\n        'datetime is immutable so needs __new__ instead of __init__'\n        if not args:\n            return datetime.datetime.now()\n        elif len(args) > 1:\n            return super().__new__(cls, *args, **kwargs)\n\n        s = args[0]\n        if isinstance(s, int) or isinstance(s, float):\n            r = datetime.datetime.fromtimestamp(s)\n        elif isinstance(s, str):\n            r = vd.date_parse(s)\n        elif isinstance(s, (datetime.datetime, datetime.date)):\n            r = s\n        else:\n            raise Exception('invalid type for date %s' % type(s).__name__)\n\n        t = r.timetuple()\n        ms = getattr(r, 'microsecond', 0)\n        tzinfo = getattr(r, 'tzinfo', None)\n        return super().__new__(cls, *t[:6], microsecond=ms, tzinfo=tzinfo, **kwargs)\n\n    def __lt__(self, b):\n        if isinstance(b, datetime.datetime): return datetime.datetime.__lt__(self, b)\n        elif isinstance(b, datetime.date):   return not self.date().__eq__(b) and self.date().__lt__(b)\n        return NotImplemented\n\n    def __gt__(self, b):\n        if isinstance(b, datetime.datetime): return datetime.datetime.__gt__(self, b)\n        elif isinstance(b, datetime.date):   return not self.date().__eq__(b) and self.date().__gt__(b)\n        return NotImplemented\n\n    def __le__(self, b):\n        if isinstance(b, datetime.datetime): return datetime.datetime.__le__(self, b)\n        elif isinstance(b, datetime.date):   return self.date().__le__(b)\n        return NotImplemented\n\n    def __ge__(self, b):\n        if isinstance(b, datetime.datetime): return datetime.datetime.__ge__(self, b)\n        elif isinstance(b, datetime.date):   return self.date().__ge__(b)\n        return NotImplemented\n\n    def __eq__(self, b):\n        if isinstance(b, datetime.datetime): return datetime.datetime.__eq__(self, b)\n        elif isinstance(b, datetime.date): return self.date().__eq__(b)\n        return NotImplemented\n\n    def __str__(self):\n        return self.strftime(vd.options.disp_date_fmt)\n\n    def __hash__(self):\n        return super().__hash__()\n\n    def __float__(self):\n        return self.timestamp()\n\n    def __radd__(self, n):\n        return self.__add__(n)\n\n    def __add__(self, n):\n        'add n days (int or float) to the date'\n        if isinstance(n, (int, float)):\n            n = datetime.timedelta(days=n)\n        return date(super().__add__(n))\n\n    def __sub__(self, n):\n        'subtract n days (int or float) from the date.  or subtract another date for a timedelta'\n        if isinstance(n, (int, float)):\n            n = datetime.timedelta(days=n)\n        elif isinstance(n, (date, datetime.datetime)):\n            return datedelta(super().__sub__(n).total_seconds()/(24*60*60))\n        return super().__sub__(n)\n\n\nclass datedelta(datetime.timedelta):\n    def __float__(self):\n        return self.total_seconds()\n\n\n# simple constants, for expressions like 'timestamp+15*minutes'\nvd.addGlobals(\n    years=365.25,\n    months=30.0,\n    weeks=7.0,\n    days=1.0,\n    hours=1.0/24,\n    minutes=1.0/(24*60),\n    seconds=1.0/(24*60*60),\n    datedelta=datedelta,\n    datetime=date,\n    date=date)\n\n\nSheet.addCommand('@', 'type-date', 'cursorCol.type = date', 'set type of current column to date')\nSheet.addCommand('', 'type-datedelta', 'cursorCol.type = datedelta', 'set type of current column to datedelta')\nSheet.addCommand('', 'type-datetime', 'cursorCol.type=date; cursorCol.fmtstr=\"%Y-%m-%d %H:%M:%S\"', 'set type of current column to datetime')\n\nvd.addMenuItems('''\n    Column > Type as > date > type-date\n    Column > Type as > datetime > type-datetime\n    Column > Type as > datedelta > type-datedelta\n''')\n"
  },
  {
    "path": "visidata/type_floatsi.py",
    "content": "from visidata import VisiData, vd, Sheet\n\nvd.si_prefixes='p n u m . kK M G T P Q'.split()\n\n\n@VisiData.api\ndef SIFormatter(vd, fmtstr, val):\n    level = 4\n    if val != 0:\n        while abs(val) > 1000:\n            val /= 1000\n            level += 1\n        while abs(val) < 0.001:\n            val *= 1000\n            level -= 1\n\n    return vd.numericFormatter(fmtstr, val) + (vd.si_prefixes[level][0] if level != 4 else '')\n\n\n@vd.numericType('‱', formatter=vd.SIFormatter)\ndef floatsi(*args):\n    if not args:\n        return 0.0\n    if not isinstance(args[0], str):\n        return float(args[0])\n\n    s=args[0].strip()\n    for i, p in enumerate(vd.si_prefixes):\n        if s[-1] in p:\n            return float(s[:-1]) * (1000 ** (i-4))\n\n    return float(s)\n\n\nSheet.addCommand('z%', 'type-floatsi', 'cursorCol.type = floatsi', 'set type of current column to SI float')\n\nvd.addMenuItems('''\n    Column > Type as > SI float > type-floatsi\n''')\n"
  },
  {
    "path": "visidata/undo.py",
    "content": "import itertools\nfrom copy import copy\n\nfrom visidata import vd, options, VisiData, BaseSheet, UNLOADED\n\nBaseSheet.init('undone', list)  # list of CommandLogRow for redo after undo\n\nvd.option('undo', True, 'enable undo/redo')\n\nnonUndo = '''commit open-file reload-sheet'''.split()\n\ndef isUndoableCommand(longname):\n    for n in nonUndo:\n        if longname.startswith(n):\n            return False\n    return True\n\n@VisiData.api\ndef addUndo(vd, undofunc, *args, **kwargs):\n    'On undo of latest command, call ``undofunc(*args, **kwargs)``.'\n    if vd.options.undo:\n        # occurs when VisiData is just starting up.\n        # very early in startup, modifyCommand does not yet exist\n        if not vd.activeCommand:\n            return\n        r = vd.modifyCommand\n        if not r or not isUndoableCommand(r.longname):\n            return\n        # some special commands, like open-file, do not have an undofuncs set\n        # do not set undofuncs for non-logged commands\n        if not vd.isLoggableCommand(vd.activeCommand):\n            return\n        if not r.undofuncs:\n            r.undofuncs = []\n        r.undofuncs.append((undofunc, args, kwargs))\n\n\n@VisiData.api\ndef undo(vd, sheet):\n    if not vd.options.undo:\n        vd.fail(\"options.undo not enabled\")\n\n    cmdlogrows = itertools.dropwhile(lambda r: r.longname == 'set-option', sheet.cmdlog_sheet.rows)\n    # skip the first remaining command, to exclude it from undo,\n    # because it is always the command that created the sheet, or for\n    # replayed cmdlogs, a no-op placeholder row\n    for i, cmdlogrow in enumerate(reversed(list(cmdlogrows)[1:])):\n        if cmdlogrow.undofuncs:\n            for undofunc, args, kwargs, in cmdlogrow.undofuncs[::-1]:\n                undofunc(*args, **kwargs)\n            sheet.undone.append(cmdlogrow)\n            row_idx = len(sheet.cmdlog_sheet.rows)-1 - i\n            del sheet.cmdlog_sheet.rows[row_idx]\n\n            vd.clearCaches()  # undofunc can invalidate the drawcache\n\n            vd.moveToReplayContext(cmdlogrow, sheet)\n            vd.status(\"%s undone\" % cmdlogrow.longname)\n            return\n\n    vd.fail(\"nothing to undo on current sheet\")\n\n\n@VisiData.api\ndef redo(vd, sheet):\n    sheet.undone or vd.fail(\"nothing to redo\")\n    cmdlogrow = sheet.undone.pop()\n    vd.replayOne(cmdlogrow)\n    vd.status(\"%s redone\" % cmdlogrow.longname)\n\n# undoers\ndef undoAttrFunc(objs, attrname):\n    'Return closure that sets attrname on each obj to its former value.'\n    oldvals = [(o, getattr(o, attrname)) for o in objs]\n    def _undofunc():\n        for o, v in oldvals:\n            setattr(o, attrname, v)\n    return _undofunc\n\n\nclass Fanout(list):\n    'Fan out attribute changes to every element in a list.'\n    def __getattr__(self, k):\n        return Fanout([getattr(o, k) for o in self])\n\n    def __setattr__(self, k, v):\n        vd.addUndo(undoAttrFunc(self, k))\n        for o in self:\n            setattr(o, k, v)\n\n    def __call__(self, *args, **kwargs):\n        return Fanout([o(*args, **kwargs) for o in self])\n\n\ndef undoAttrCopyFunc(objs, attrname):\n    'Return closure that sets attrname on each obj to its former value.'\n    oldvals = [(o, copy(getattr(o, attrname))) for o in objs]\n    def _undofunc():\n        for o, v in oldvals:\n            setattr(o, attrname, v)\n    return _undofunc\n\n\n@VisiData.api\ndef addUndoSetValues(vd, cols, rows):\n    'Add undo function to reset values for *rows* in *cols*.'\n    oldvals = [(c, r, c.getValue(r)) for c,r in itertools.product(cols, vd.Progress(rows, gerund='doing'))]\n    def _undo():\n        for c, r, v in oldvals:\n            c.setValue(r, v, setModified=False)\n    vd.addUndo(_undo)\n\n\nBaseSheet.addCommand('U', 'undo-last', 'vd.undo(sheet)', 'Undo the most recent change (options.undo must be enabled)')\nBaseSheet.addCommand('R', 'redo-last', 'vd.redo(sheet)', 'Redo the most recent undo (options.undo must be enabled)')\n\nvd.addGlobals(\n    undoAttrFunc=undoAttrFunc,\n    Fanout=Fanout,\n    undoAttrCopyFunc=undoAttrCopyFunc)\n\nvd.addMenuItems('''\n    Edit > Undo > undo-last\n    Edit > Redo > redo-last\n''')\n"
  },
  {
    "path": "visidata/utils.py",
    "content": "from contextlib import contextmanager\nimport operator\nimport string\nimport re\n\n'Various helper classes and functions.'\n\n__all__ = ['AlwaysDict', 'AttrDict', 'DefaultAttrDict', 'moveListItem', 'namedlist', 'classproperty', 'MissingAttrFormatter', 'getitem', 'setitem', 'getitemdef', 'getitemdeep', 'setitemdeep', 'getattrdeep', 'setattrdeep', 'ExplodingMock', 'ScopedSetattr', 'colname_letters']\n\n\nclass AlwaysDict(dict):\n    'return same val for all keys'\n    def __init__(self, val, **kwargs):\n        super().__init__(**kwargs)\n        self._val = val\n\n    def __getitem__(self, k):\n        return self._val\n\nclass AttrDict(dict):\n    'Augment a dict with more convenient .attr syntax.  not-present keys return None.'\n    def __getattr__(self, k):\n        try:\n            v = self[k]\n            if isinstance(v, dict) and not isinstance(v, AttrDict):\n                v = AttrDict(v)\n            return v\n        except KeyError as e:\n            if k.startswith(\"__\"):\n                raise AttributeError from e\n            return None\n\n    def __setattr__(self, k, v):\n        self[k] = v\n\n    def __dir__(self):\n        return self.keys()\n\n\nclass DefaultAttrDict(dict):\n    'Augment a dict with more convenient .attr syntax.  not-present keys store new DefaultAttrDict.  like a recursive defaultdict.'\n    def __getattr__(self, k):\n        if k not in self:\n            if k.startswith(\"__\"):\n                raise AttributeError from e\n            self[k] = DefaultAttrDict()\n        return self[k]\n\n    def __setattr__(self, k, v):\n        self[k] = v\n\n    def __dir__(self):\n        return self.keys()\n\n\n\n\nclass classproperty(property):\n    def __get__(self, cls, obj):\n        return classmethod(self.fget).__get__(None, obj or cls)()\n\n\ndef moveListItem(L, fromidx, toidx):\n    \"Move element within list `L` and return element's new index.\"\n    toidx = min(max(toidx, 0), len(L)-1)\n    fromidx = min(max(fromidx, 0), len(L)-1)\n    r = L.pop(fromidx)\n    L.insert(toidx, r)\n    return toidx\n\n\ndef setitem(r, i, v):  # function needed for use in lambda\n    r[i] = v\n    return True\n\ndef getitem(o, k, default=None):\n    return default if o is None else o[k]\n\ndef getitemdef(o, k, default=None):\n    try:\n        return default if o is None else o[k]\n    except Exception:\n        return default\n\n\ndef getattrdeep(obj, attr, *default, getter=getattr):\n    try:\n        'Return dotted attr (like \"a.b.c\") from obj, or default if any of the components are missing.'\n        if not isinstance(attr, str):\n            return getter(obj, attr, *default)\n\n        try:  # if attribute exists, return toplevel value, even if dotted\n            if attr in obj:\n                return getter(obj, attr)\n        except RecursionError:  #1696\n            raise\n        except Exception as e:\n            pass\n\n        attrs = attr.split('.')\n        for a in attrs[:-1]:\n            obj = getter(obj, a)\n\n        return getter(obj, attrs[-1])\n    except Exception as e:\n        if not default: raise\n        return default[0]\n\n\ndef setattrdeep(obj, attr, val, getter=getattr, setter=setattr):\n    'Set dotted attr (like \"a.b.c\") on obj to val.'\n    if not isinstance(attr, str):\n        return setter(obj, attr, val)\n\n    try:  # if attribute exists, overwrite toplevel value, even if dotted\n        getter(obj, attr)\n        return setter(obj, attr, val)\n    except Exception as e:\n        pass\n\n    attrs = attr.split('.')\n    for a in attrs[:-1]:\n        try:\n            obj = getter(obj, a)\n        except Exception as e:\n            obj = obj[a] = type(obj)()  # assume homogeneous nesting\n\n    setter(obj, attrs[-1], val)\n\n\ndef getitemdeep(obj, k, *default):\n    if not isinstance(k, str):\n        try:\n            return obj[k]\n        except IndexError:\n            pass\n    return getattrdeep(obj, k, *default, getter=getitem)\n\ndef setitemdeep(obj, k, val):\n    return setattrdeep(obj, k, val, getter=getitemdef, setter=setitem)\n\n\ndef namedlist(objname, fieldnames):\n    'like namedtuple but editable'\n    class NamedListTemplate(list):\n        __name__ = objname\n        _fields = fieldnames\n\n        def __init__(self, L=None, **kwargs):\n            if L is None:\n                L = [None]*len(self._fields)\n            elif len(L) < len(self._fields):\n                L.extend([None]*(len(self._fields) - len(L)))\n            super().__init__(L)\n            for k, v in kwargs.items():\n                setattr(self, k, v)\n\n        def __getattr__(self, k):\n            'to enable .fieldname'\n            try:\n                return self[self._fields.index(k)]\n            except ValueError as e:\n                raise AttributeError from e\n\n        def __setattr__(self, k, v):\n            'to enable .fieldname ='\n            try:\n                self[self._fields.index(k)] = v\n            except ValueError:\n                super().__setattr__(k, v)\n\n    return NamedListTemplate\n\n\nclass ExplodingMock:\n    'A mock object that raises an exception for everything except conversion to True/False.'\n    def __init__(self, msg):\n        self.__msg = msg\n\n    def __getattr__(self, k):\n        raise Exception(self.__msg)\n\n    def __bool__(self):\n        return False\n\n\nclass MissingAttrFormatter(string.Formatter):\n    \"formats {} fields with `''`, that would normally result in a raised KeyError or AttributeError or IndexError; intended for user customisable format strings.\"\n    def get_value(self, key, args, kwargs):\n        try:\n            return super().get_value(key, args, kwargs)\n        except Exception:\n            raise\n\n    def get_field(self, field_name, args, kwargs):\n        try:\n            return super().get_field(field_name, args, kwargs)\n        except (KeyError, AttributeError, IndexError, ValueError) as e:\n            return ('{' + field_name + '}', field_name)\n\n    def format_field(self, value, format_spec):\n        # value is missing\n        if value is None:\n            return ''\n        elif not value:\n            return str(value)\n        return super().format_field(value, format_spec)\n\n\n@contextmanager\ndef ScopedSetattr(obj, attrname, val):\n    oldval = getattr(obj, attrname)\n    try:\n        setattr(obj, attrname, val)\n        yield\n    finally:\n        setattr(obj, attrname, oldval)\n\ndef colname_letters(num):\n    '''*num* is a 1-based integer: 1, 2, 3... gives A B C .. Z AA AB .. ZZ AAA .. to infinity; *num* of 0 returns the empty string'''\n    # credit to https://stackoverflow.com/questions/48983939/convert-a-number-to-excel-s-base-26/48984697#48984697\n    def divmod_excel(n):\n        a, b = divmod(n, 26)\n        if b == 0:\n            return a - 1, b + 26\n        return a, b\n    chars = []\n    while num > 0:\n        num, d = divmod_excel(num)\n        chars.append('-ABCDEFGHIJKLMNOPQRSTUVWXYZ'[d])\n    return ''.join(reversed(chars))\n"
  },
  {
    "path": "visidata/vdobj.py",
    "content": "from functools import wraps\nimport curses\n\nimport visidata\n\n__all__ = ['ENTER', 'ALT', 'ESC', 'asyncthread', 'VisiData']\n\n\nENTER='Enter'\nALT=ESC='^['\n\nimport threading\n\n# define @asyncthread for potentially long-running functions\n#   when function is called, instead launches a thread\ndef asyncthread(func):\n    'Function decorator, to make calls to `func()` spawn a separate thread if available.'\n    @wraps(func)\n    def _execAsync(*args, **kwargs):\n        if args and isinstance(args[0], visidata.BaseSheet):  #1136: allow cancel of async methods on Sheet\n            if 'sheet' not in kwargs:\n                kwargs['sheet'] = args[0]\n        return visidata.vd.execAsync(func, *args, **kwargs)\n    return _execAsync\n\n\nclass VisiData(visidata.Extensible):\n    allPrefixes = ['g', 'z', 'gz', 'Alt+', 'Alt+[']  # embig'g'en, 'z'mallify, Alt/Esc=User\n\n    @classmethod\n    def global_api(cls, func):\n        'Make global func() and identical vd.func()'\n        def _vdfunc(*args, **kwargs):\n            return getattr(visidata.vd, func.__name__)(*args, **kwargs)\n        visidata.vd.addGlobals({func.__name__: func})\n        setattr(cls, func.__name__, func)\n        return wraps(func)(_vdfunc)\n\n    def __init__(self):\n        self.sheets = []  # list of BaseSheet; all sheets on the sheet stack\n        self.allSheets = []  # list of all non-precious sheets ever pushed\n        self.lastErrors = []\n        self.pendingKeys = []\n        self.keystrokes = ''\n        self.scrFull = None\n        self._cmdlog = None\n        self.currentReplay = None\n        self.contexts = [self]  # objects whose attributes are in the fallback context for eval/exec.\n        self.importingModule = None\n        self.importedModules = []\n        self.activeCommands = {}  # dict of thread ident -> CommandLogRow\n\n    @property\n    def cursesEnabled(self):\n        return bool(self.scrFull)\n\n    def sheetstack(self, pane=0):\n        'Return list of sheets in given *pane*. pane=0 is the active pane.  pane=-1 is the inactive pane.'\n        if pane == -1:\n            return list(vs for vs in self.sheets if vs.pane and (vs.pane != self.activePane))\n        else:\n            return list(vs for vs in self.sheets if vs.pane == (pane or self.activePane))\n\n    @property\n    def stackedSheets(self):\n        return list(vs for vs in self.sheets if vs.pane)\n\n    @property\n    def activeSheet(self):\n        'Return top sheet on sheets stack, or cmdlog if no sheets.'\n        for vs in self.sheets:\n            if vs.pane and vs.pane == self.activePane:\n                return vs\n\n        for vs in self.sheets:\n            if vs.pane and vs.pane != self.activePane:\n                return vs\n\n        return self._cmdlog\n\n    @property\n    def activeStack(self):\n        return self.sheetstack() or self.sheetstack(-1)\n\n    def __copy__(self):\n        'Dummy method for Extensible.init()'\n        pass\n\n    def finalInit(self):\n        'Initialize members specified in other modules with init()'\n        pass\n\n    @classmethod\n    def init(cls, membername, initfunc, **kwargs):\n        'Overload Extensible.init() to call finalInit instead of __init__'\n        oldinit = cls.finalInit\n        def newinit(self, *args, **kwargs):\n            oldinit(self, *args, **kwargs)\n            setattr(self, membername, initfunc())\n        cls.finalInit = newinit\n        super().init(membername, lambda: None, **kwargs)\n\n    def clearCaches(self):\n        'Invalidate internal caches between command inputs.'\n        visidata.Extensible.clear_all_caches()\n\n    def resetVisiData(self):\n        vd = visidata.vd  # get the actual vd\n        vd.cmdlog.rows = []\n        vd.sheets.clear()\n        vd.allSheets.clear()\n        vd.lastErrors.clear()\n        vd.options.resetToDefaults()\n\n        vd.clearCaches()\n        return vd\n\n    def get_wch(self, scr):\n        try:\n            return scr.get_wch()\n        except AttributeError:  #192 some packages don't have wide chars\n            k = scr.getch()\n            if k == -1:  # mimic get_wch behavior\n                raise curses.error('no char ready')\n            return k\n\n    def drainPendingKeys(self, scr):\n        '''Call scr.get_wch() until no more keypresses are available.  Return True if any keypresses are pending.'''\n        scr.timeout(0)\n        try:\n            while True:\n                k = self.get_wch(scr)\n                if k:\n                    self.pendingKeys.append(k)\n                else:\n                    break\n        except curses.error:\n            pass\n        finally:\n            scr.timeout(self.get_curses_timeout())\n\n        return bool(self.pendingKeys)\n\n    def getkeystroke(self, scr, vs=None):\n        'Get keystroke and display it on status bar.'\n        self.drainPendingKeys(scr)\n        k = None\n        if self.pendingKeys:\n            k = self.pendingKeys.pop(0)\n        else:\n            curses.reset_prog_mode()  #1347\n            try:\n                scr.refresh()\n                k = self.get_wch(scr)\n                self.drainPendingKeys(scr)\n                vs = vs or self.activeSheet\n                if vs:\n                    self.drawRightStatus(vs._scr, vs) # continue to display progress %\n            except curses.error:\n                return ''  # curses timeout\n\n        if isinstance(k, str):\n            if ord(k) >= 32 and ord(k) != 127:  # 127 == DEL or ^?\n                return k\n            k = ord(k)\n        keyname = curses.keyname(k).decode('utf-8')\n        if keyname == '^[':  # Esc/Alt+\n            if self.pendingKeys:  # more to come\n                k = self.pendingKeys.pop(0)\n                return 'Alt+'+self.prettykeys(str(k))\n            else:\n                return 'Esc'\n        return self.prettykeys(keyname)\n\n    @property\n    def screenHeight(self):\n        return self.scrFull.getmaxyx()[0] if self.scrFull else 25\n\n    @property\n    def screenWidth(self):\n        return self.scrFull.getmaxyx()[1] if self.scrFull else 80\n\n    @property\n    def activeCommand(self):\n        '''Returns the active command for the current thread.\n            Returns a CommandLogRow, or None.\n            Returns None when no command has ever been stored for the current thread.'''\n        tid = threading.get_ident()\n        if tid not in self.activeCommands:\n            return None\n        return self.activeCommands[tid]\n\n    @activeCommand.setter\n    def activeCommand(self, value):\n        tid = threading.current_thread().ident\n        if value is None and (tid in self.activeCommands):\n            del self.activeCommands[tid]\n        else:\n            self.activeCommands[tid] = value\n"
  },
  {
    "path": "visidata/vendor/__init__.py",
    "content": ""
  },
  {
    "path": "visidata/vendor/appdirs.py",
    "content": "# -*- coding: utf-8 -*-\n# Copyright (c) 2005-2010 ActiveState Software Inc.\n# Copyright (c) 2013 Eddy Petrișor\n\n\"\"\"Utilities for determining application-specific dirs.\n\nSee <https://github.com/ActiveState/appdirs> for details and usage.\n\"\"\"\n# Dev Notes:\n# - MSDN on where to store app data files:\n#   http://support.microsoft.com/default.aspx?scid=kb;en-us;310294#XSLTH3194121123120121120120\n# - Mac OS X: http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/index.html\n# - XDG spec for Un*x: https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html\n\n__version__ = \"1.4.4\"\n__version_info__ = tuple(int(segment) for segment in __version__.split(\".\"))\n\n\nimport sys\nimport os\n\nPY3 = sys.version_info[0] == 3\n\nif PY3:\n    unicode = str\n\nif sys.platform.startswith('java'):\n    import platform\n    os_name = platform.java_ver()[3][0]\n    if os_name.startswith('Windows'): # \"Windows XP\", \"Windows 7\", etc.\n        system = 'win32'\n    elif os_name.startswith('Mac'): # \"Mac OS X\", etc.\n        system = 'darwin'\n    else: # \"Linux\", \"SunOS\", \"FreeBSD\", etc.\n        # Setting this to \"linux2\" is not ideal, but only Windows or Mac\n        # are actually checked for and the rest of the module expects\n        # *sys.platform* style strings.\n        system = 'linux2'\nelse:\n    system = sys.platform\n\n\n\ndef user_data_dir(appname=None, appauthor=None, version=None, roaming=False):\n    r\"\"\"Return full path to the user-specific data dir for this application.\n\n        \"appname\" is the name of application.\n            If None, just the system directory is returned.\n        \"appauthor\" (only used on Windows) is the name of the\n            appauthor or distributing body for this application. Typically\n            it is the owning company name. This falls back to appname. You may\n            pass False to disable it.\n        \"version\" is an optional version path element to append to the\n            path. You might want to use this if you want multiple versions\n            of your app to be able to run independently. If used, this\n            would typically be \"<major>.<minor>\".\n            Only applied when appname is present.\n        \"roaming\" (boolean, default False) can be set True to use the Windows\n            roaming appdata directory. That means that for users on a Windows\n            network setup for roaming profiles, this user data will be\n            sync'd on login. See\n            <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx>\n            for a discussion of issues.\n\n    Typical user data directories are:\n        Mac OS X:               ~/Library/Application Support/<AppName>\n        Unix:                   ~/.local/share/<AppName>    # or in $XDG_DATA_HOME, if defined\n        Win XP (not roaming):   C:\\Documents and Settings\\<username>\\Application Data\\<AppAuthor>\\<AppName>\n        Win XP (roaming):       C:\\Documents and Settings\\<username>\\Local Settings\\Application Data\\<AppAuthor>\\<AppName>\n        Win 7  (not roaming):   C:\\Users\\<username>\\AppData\\Local\\<AppAuthor>\\<AppName>\n        Win 7  (roaming):       C:\\Users\\<username>\\AppData\\Roaming\\<AppAuthor>\\<AppName>\n\n    For Unix, we follow the XDG spec and support $XDG_DATA_HOME.\n    That means, by default \"~/.local/share/<AppName>\".\n    \"\"\"\n    if system == \"win32\":\n        if appauthor is None:\n            appauthor = appname\n        const = \"CSIDL_APPDATA\" if roaming else \"CSIDL_LOCAL_APPDATA\"\n        path = os.path.normpath(_get_win_folder(const))\n        if appname:\n            if appauthor is not False:\n                path = os.path.join(path, appauthor, appname)\n            else:\n                path = os.path.join(path, appname)\n    elif system == 'darwin':\n        path = os.path.expanduser('~/Library/Application Support/')\n        if appname:\n            path = os.path.join(path, appname)\n    else:\n        path = os.getenv('XDG_DATA_HOME', os.path.expanduser(\"~/.local/share\"))\n        if appname:\n            path = os.path.join(path, appname)\n    if appname and version:\n        path = os.path.join(path, version)\n    return path\n\n\ndef site_data_dir(appname=None, appauthor=None, version=None, multipath=False):\n    r\"\"\"Return full path to the user-shared data dir for this application.\n\n        \"appname\" is the name of application.\n            If None, just the system directory is returned.\n        \"appauthor\" (only used on Windows) is the name of the\n            appauthor or distributing body for this application. Typically\n            it is the owning company name. This falls back to appname. You may\n            pass False to disable it.\n        \"version\" is an optional version path element to append to the\n            path. You might want to use this if you want multiple versions\n            of your app to be able to run independently. If used, this\n            would typically be \"<major>.<minor>\".\n            Only applied when appname is present.\n        \"multipath\" is an optional parameter only applicable to *nix\n            which indicates that the entire list of data dirs should be\n            returned. By default, the first item from XDG_DATA_DIRS is\n            returned, or '/usr/local/share/<AppName>',\n            if XDG_DATA_DIRS is not set\n\n    Typical site data directories are:\n        Mac OS X:   /Library/Application Support/<AppName>\n        Unix:       /usr/local/share/<AppName> or /usr/share/<AppName>\n        Win XP:     C:\\Documents and Settings\\All Users\\Application Data\\<AppAuthor>\\<AppName>\n        Vista:      (Fail! \"C:\\ProgramData\" is a hidden *system* directory on Vista.)\n        Win 7:      C:\\ProgramData\\<AppAuthor>\\<AppName>   # Hidden, but writeable on Win 7.\n\n    For Unix, this is using the $XDG_DATA_DIRS[0] default.\n\n    WARNING: Do not use this on Windows. See the Vista-Fail note above for why.\n    \"\"\"\n    if system == \"win32\":\n        if appauthor is None:\n            appauthor = appname\n        path = os.path.normpath(_get_win_folder(\"CSIDL_COMMON_APPDATA\"))\n        if appname:\n            if appauthor is not False:\n                path = os.path.join(path, appauthor, appname)\n            else:\n                path = os.path.join(path, appname)\n    elif system == 'darwin':\n        path = os.path.expanduser('/Library/Application Support')\n        if appname:\n            path = os.path.join(path, appname)\n    else:\n        # XDG default for $XDG_DATA_DIRS\n        # only first, if multipath is False\n        path = os.getenv('XDG_DATA_DIRS',\n                         os.pathsep.join(['/usr/local/share', '/usr/share']))\n        pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)]\n        if appname:\n            if version:\n                appname = os.path.join(appname, version)\n            pathlist = [os.sep.join([x, appname]) for x in pathlist]\n\n        if multipath:\n            path = os.pathsep.join(pathlist)\n        else:\n            path = pathlist[0]\n        return path\n\n    if appname and version:\n        path = os.path.join(path, version)\n    return path\n\n\ndef user_config_dir(appname=None, appauthor=None, version=None, roaming=False):\n    r\"\"\"Return full path to the user-specific config dir for this application.\n\n        \"appname\" is the name of application.\n            If None, just the system directory is returned.\n        \"appauthor\" (only used on Windows) is the name of the\n            appauthor or distributing body for this application. Typically\n            it is the owning company name. This falls back to appname. You may\n            pass False to disable it.\n        \"version\" is an optional version path element to append to the\n            path. You might want to use this if you want multiple versions\n            of your app to be able to run independently. If used, this\n            would typically be \"<major>.<minor>\".\n            Only applied when appname is present.\n        \"roaming\" (boolean, default False) can be set True to use the Windows\n            roaming appdata directory. That means that for users on a Windows\n            network setup for roaming profiles, this user data will be\n            sync'd on login. See\n            <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx>\n            for a discussion of issues.\n\n    Typical user config directories are:\n        Mac OS X:               ~/Library/Preferences/<AppName>\n        Unix:                   ~/.config/<AppName>     # or in $XDG_CONFIG_HOME, if defined\n        Win *:                  same as user_data_dir\n\n    For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME.\n    That means, by default \"~/.config/<AppName>\".\n    \"\"\"\n    if system == \"win32\":\n        path = user_data_dir(appname, appauthor, None, roaming)\n    elif system == 'darwin':\n        path = os.getenv('XDG_CONFIG_HOME', os.path.expanduser('~/Library/Preferences'))\n        if appname:\n            path = os.path.join(path, appname)\n    else:\n        path = os.getenv('XDG_CONFIG_HOME', os.path.expanduser(\"~/.config\"))\n        if appname:\n            path = os.path.join(path, appname)\n    if appname and version:\n        path = os.path.join(path, version)\n    return path\n\n\ndef site_config_dir(appname=None, appauthor=None, version=None, multipath=False):\n    r\"\"\"Return full path to the user-shared data dir for this application.\n\n        \"appname\" is the name of application.\n            If None, just the system directory is returned.\n        \"appauthor\" (only used on Windows) is the name of the\n            appauthor or distributing body for this application. Typically\n            it is the owning company name. This falls back to appname. You may\n            pass False to disable it.\n        \"version\" is an optional version path element to append to the\n            path. You might want to use this if you want multiple versions\n            of your app to be able to run independently. If used, this\n            would typically be \"<major>.<minor>\".\n            Only applied when appname is present.\n        \"multipath\" is an optional parameter only applicable to *nix\n            which indicates that the entire list of config dirs should be\n            returned. By default, the first item from XDG_CONFIG_DIRS is\n            returned, or '/etc/xdg/<AppName>', if XDG_CONFIG_DIRS is not set\n\n    Typical site config directories are:\n        Mac OS X:   same as site_data_dir\n        Unix:       /etc/xdg/<AppName> or $XDG_CONFIG_DIRS[i]/<AppName> for each value in\n                    $XDG_CONFIG_DIRS\n        Win *:      same as site_data_dir\n        Vista:      (Fail! \"C:\\ProgramData\" is a hidden *system* directory on Vista.)\n\n    For Unix, this is using the $XDG_CONFIG_DIRS[0] default, if multipath=False\n\n    WARNING: Do not use this on Windows. See the Vista-Fail note above for why.\n    \"\"\"\n    if system == 'win32':\n        path = site_data_dir(appname, appauthor)\n        if appname and version:\n            path = os.path.join(path, version)\n    elif system == 'darwin':\n        path = os.path.expanduser('/Library/Preferences')\n        if appname:\n            path = os.path.join(path, appname)\n    else:\n        # XDG default for $XDG_CONFIG_DIRS\n        # only first, if multipath is False\n        path = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg')\n        pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)]\n        if appname:\n            if version:\n                appname = os.path.join(appname, version)\n            pathlist = [os.sep.join([x, appname]) for x in pathlist]\n\n        if multipath:\n            path = os.pathsep.join(pathlist)\n        else:\n            path = pathlist[0]\n    return path\n\n\ndef user_cache_dir(appname=None, appauthor=None, version=None, opinion=True):\n    r\"\"\"Return full path to the user-specific cache dir for this application.\n\n        \"appname\" is the name of application.\n            If None, just the system directory is returned.\n        \"appauthor\" (only used on Windows) is the name of the\n            appauthor or distributing body for this application. Typically\n            it is the owning company name. This falls back to appname. You may\n            pass False to disable it.\n        \"version\" is an optional version path element to append to the\n            path. You might want to use this if you want multiple versions\n            of your app to be able to run independently. If used, this\n            would typically be \"<major>.<minor>\".\n            Only applied when appname is present.\n        \"opinion\" (boolean) can be False to disable the appending of\n            \"Cache\" to the base app data dir for Windows. See\n            discussion below.\n\n    Typical user cache directories are:\n        Mac OS X:   ~/Library/Caches/<AppName>\n        Unix:       ~/.cache/<AppName> (XDG default)\n        Win XP:     C:\\Documents and Settings\\<username>\\Local Settings\\Application Data\\<AppAuthor>\\<AppName>\\Cache\n        Vista:      C:\\Users\\<username>\\AppData\\Local\\<AppAuthor>\\<AppName>\\Cache\n\n    On Windows the only suggestion in the MSDN docs is that local settings go in\n    the `CSIDL_LOCAL_APPDATA` directory. This is identical to the non-roaming\n    app data dir (the default returned by `user_data_dir` above). Apps typically\n    put cache data somewhere *under* the given dir here. Some examples:\n        ...\\Mozilla\\Firefox\\Profiles\\<ProfileName>\\Cache\n        ...\\Acme\\SuperApp\\Cache\\1.0\n    OPINION: This function appends \"Cache\" to the `CSIDL_LOCAL_APPDATA` value.\n    This can be disabled with the `opinion=False` option.\n    \"\"\"\n    if system == \"win32\":\n        if appauthor is None:\n            appauthor = appname\n        path = os.path.normpath(_get_win_folder(\"CSIDL_LOCAL_APPDATA\"))\n        if appname:\n            if appauthor is not False:\n                path = os.path.join(path, appauthor, appname)\n            else:\n                path = os.path.join(path, appname)\n            if opinion:\n                path = os.path.join(path, \"Cache\")\n    elif system == 'darwin':\n        path = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/Library/Caches'))\n        if appname:\n            path = os.path.join(path, appname)\n    else:\n        path = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/.cache'))\n        if appname:\n            path = os.path.join(path, appname)\n    if appname and version:\n        path = os.path.join(path, version)\n    return path\n\n\ndef user_state_dir(appname=None, appauthor=None, version=None, roaming=False):\n    r\"\"\"Return full path to the user-specific state dir for this application.\n\n        \"appname\" is the name of application.\n            If None, just the system directory is returned.\n        \"appauthor\" (only used on Windows) is the name of the\n            appauthor or distributing body for this application. Typically\n            it is the owning company name. This falls back to appname. You may\n            pass False to disable it.\n        \"version\" is an optional version path element to append to the\n            path. You might want to use this if you want multiple versions\n            of your app to be able to run independently. If used, this\n            would typically be \"<major>.<minor>\".\n            Only applied when appname is present.\n        \"roaming\" (boolean, default False) can be set True to use the Windows\n            roaming appdata directory. That means that for users on a Windows\n            network setup for roaming profiles, this user data will be\n            sync'd on login. See\n            <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx>\n            for a discussion of issues.\n\n    Typical user state directories are:\n        Mac OS X:  same as user_data_dir\n        Unix:      ~/.local/state/<AppName>   # or in $XDG_STATE_HOME, if defined\n        Win *:     same as user_data_dir\n\n    For Unix, we follow this Debian proposal <https://wiki.debian.org/XDGBaseDirectorySpecification#state>\n    to extend the XDG spec and support $XDG_STATE_HOME.\n\n    That means, by default \"~/.local/state/<AppName>\".\n    \"\"\"\n    if system in [\"win32\", \"darwin\"]:\n        path = user_data_dir(appname, appauthor, None, roaming)\n    else:\n        path = os.getenv('XDG_STATE_HOME', os.path.expanduser(\"~/.local/state\"))\n        if appname:\n            path = os.path.join(path, appname)\n    if appname and version:\n        path = os.path.join(path, version)\n    return path\n\n\ndef user_log_dir(appname=None, appauthor=None, version=None, opinion=True):\n    r\"\"\"Return full path to the user-specific log dir for this application.\n\n        \"appname\" is the name of application.\n            If None, just the system directory is returned.\n        \"appauthor\" (only used on Windows) is the name of the\n            appauthor or distributing body for this application. Typically\n            it is the owning company name. This falls back to appname. You may\n            pass False to disable it.\n        \"version\" is an optional version path element to append to the\n            path. You might want to use this if you want multiple versions\n            of your app to be able to run independently. If used, this\n            would typically be \"<major>.<minor>\".\n            Only applied when appname is present.\n        \"opinion\" (boolean) can be False to disable the appending of\n            \"Logs\" to the base app data dir for Windows, and \"log\" to the\n            base cache dir for Unix. See discussion below.\n\n    Typical user log directories are:\n        Mac OS X:   ~/Library/Logs/<AppName>\n        Unix:       ~/.cache/<AppName>/log  # or under $XDG_CACHE_HOME if defined\n        Win XP:     C:\\Documents and Settings\\<username>\\Local Settings\\Application Data\\<AppAuthor>\\<AppName>\\Logs\n        Vista:      C:\\Users\\<username>\\AppData\\Local\\<AppAuthor>\\<AppName>\\Logs\n\n    On Windows the only suggestion in the MSDN docs is that local settings\n    go in the `CSIDL_LOCAL_APPDATA` directory. (Note: I'm interested in\n    examples of what some windows apps use for a logs dir.)\n\n    OPINION: This function appends \"Logs\" to the `CSIDL_LOCAL_APPDATA`\n    value for Windows and appends \"log\" to the user cache dir for Unix.\n    This can be disabled with the `opinion=False` option.\n    \"\"\"\n    if system == \"darwin\":\n        path = os.path.join(\n            os.path.expanduser('~/Library/Logs'),\n            appname)\n    elif system == \"win32\":\n        path = user_data_dir(appname, appauthor, version)\n        version = False\n        if opinion:\n            path = os.path.join(path, \"Logs\")\n    else:\n        path = user_cache_dir(appname, appauthor, version)\n        version = False\n        if opinion:\n            path = os.path.join(path, \"log\")\n    if appname and version:\n        path = os.path.join(path, version)\n    return path\n\n\nclass AppDirs(object):\n    \"\"\"Convenience wrapper for getting application dirs.\"\"\"\n    def __init__(self, appname=None, appauthor=None, version=None,\n            roaming=False, multipath=False):\n        self.appname = appname\n        self.appauthor = appauthor\n        self.version = version\n        self.roaming = roaming\n        self.multipath = multipath\n\n    @property\n    def user_data_dir(self):\n        return user_data_dir(self.appname, self.appauthor,\n                             version=self.version, roaming=self.roaming)\n\n    @property\n    def site_data_dir(self):\n        return site_data_dir(self.appname, self.appauthor,\n                             version=self.version, multipath=self.multipath)\n\n    @property\n    def user_config_dir(self):\n        return user_config_dir(self.appname, self.appauthor,\n                               version=self.version, roaming=self.roaming)\n\n    @property\n    def site_config_dir(self):\n        return site_config_dir(self.appname, self.appauthor,\n                             version=self.version, multipath=self.multipath)\n\n    @property\n    def user_cache_dir(self):\n        return user_cache_dir(self.appname, self.appauthor,\n                              version=self.version)\n\n    @property\n    def user_state_dir(self):\n        return user_state_dir(self.appname, self.appauthor,\n                              version=self.version)\n\n    @property\n    def user_log_dir(self):\n        return user_log_dir(self.appname, self.appauthor,\n                            version=self.version)\n\n\n#---- internal support stuff\n\ndef _get_win_folder_from_registry(csidl_name):\n    \"\"\"This is a fallback technique at best. I'm not sure if using the\n    registry for this guarantees us the correct answer for all CSIDL_*\n    names.\n    \"\"\"\n    if PY3:\n      import winreg as _winreg\n    else:\n      import _winreg\n\n    shell_folder_name = {\n        \"CSIDL_APPDATA\": \"AppData\",\n        \"CSIDL_COMMON_APPDATA\": \"Common AppData\",\n        \"CSIDL_LOCAL_APPDATA\": \"Local AppData\",\n    }[csidl_name]\n\n    key = _winreg.OpenKey(\n        _winreg.HKEY_CURRENT_USER,\n        r\"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\"\n    )\n    dir, type = _winreg.QueryValueEx(key, shell_folder_name)\n    return dir\n\n\ndef _get_win_folder_with_ctypes(csidl_name):\n    import ctypes\n\n    csidl_const = {\n        \"CSIDL_APPDATA\": 26,\n        \"CSIDL_COMMON_APPDATA\": 35,\n        \"CSIDL_LOCAL_APPDATA\": 28,\n    }[csidl_name]\n\n    buf = ctypes.create_unicode_buffer(1024)\n    ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf)\n\n    # Downgrade to short path name if have highbit chars. See\n    # <http://bugs.activestate.com/show_bug.cgi?id=85099>.\n    has_high_char = False\n    for c in buf:\n        if ord(c) > 255:\n            has_high_char = True\n            break\n    if has_high_char:\n        buf2 = ctypes.create_unicode_buffer(1024)\n        if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024):\n            buf = buf2\n\n    return buf.value\n\ndef _get_win_folder_with_jna(csidl_name):\n    import array\n    from com.sun import jna\n    from com.sun.jna.platform import win32\n\n    buf_size = win32.WinDef.MAX_PATH * 2\n    buf = array.zeros('c', buf_size)\n    shell = win32.Shell32.INSTANCE\n    shell.SHGetFolderPath(None, getattr(win32.ShlObj, csidl_name), None, win32.ShlObj.SHGFP_TYPE_CURRENT, buf)\n    dir = jna.Native.toString(buf.tostring()).rstrip(\"\\0\")\n\n    # Downgrade to short path name if have highbit chars. See\n    # <http://bugs.activestate.com/show_bug.cgi?id=85099>.\n    has_high_char = False\n    for c in dir:\n        if ord(c) > 255:\n            has_high_char = True\n            break\n    if has_high_char:\n        buf = array.zeros('c', buf_size)\n        kernel = win32.Kernel32.INSTANCE\n        if kernel.GetShortPathName(dir, buf, buf_size):\n            dir = jna.Native.toString(buf.tostring()).rstrip(\"\\0\")\n\n    return dir\n\ndef _get_win_folder_from_environ(csidl_name):\n    env_var_name = {\n        \"CSIDL_APPDATA\": \"APPDATA\",\n        \"CSIDL_COMMON_APPDATA\": \"ALLUSERSPROFILE\",\n        \"CSIDL_LOCAL_APPDATA\": \"LOCALAPPDATA\",\n    }[csidl_name]\n\n    return os.environ[env_var_name]\n\nif system == \"win32\":\n    try:\n        from ctypes import windll\n    except ImportError:\n        try:\n            import com.sun.jna\n        except ImportError:\n            try:\n                if PY3:\n                  import winreg as _winreg\n                else:\n                  import _winreg\n            except ImportError:\n                _get_win_folder = _get_win_folder_from_environ\n            else:\n                _get_win_folder = _get_win_folder_from_registry\n        else:\n            _get_win_folder = _get_win_folder_with_jna\n    else:\n        _get_win_folder = _get_win_folder_with_ctypes\n\n\n#---- self test code\n\nif __name__ == \"__main__\":\n    appname = \"MyApp\"\n    appauthor = \"MyCompany\"\n\n    props = (\"user_data_dir\",\n             \"user_config_dir\",\n             \"user_cache_dir\",\n             \"user_state_dir\",\n             \"user_log_dir\",\n             \"site_data_dir\",\n             \"site_config_dir\")\n\n    print(\"-- app dirs %s --\" % __version__)\n\n    print(\"-- app dirs (with optional 'version')\")\n    dirs = AppDirs(appname, appauthor, version=\"1.0\")\n    for prop in props:\n        print(\"%s: %s\" % (prop, getattr(dirs, prop)))\n\n    print(\"\\n-- app dirs (without optional 'version')\")\n    dirs = AppDirs(appname, appauthor)\n    for prop in props:\n        print(\"%s: %s\" % (prop, getattr(dirs, prop)))\n\n    print(\"\\n-- app dirs (without optional 'appauthor')\")\n    dirs = AppDirs(appname)\n    for prop in props:\n        print(\"%s: %s\" % (prop, getattr(dirs, prop)))\n\n    print(\"\\n-- app dirs (with disabled 'appauthor')\")\n    dirs = AppDirs(appname, appauthor=False)\n    for prop in props:\n        print(\"%s: %s\" % (prop, getattr(dirs, prop)))\n"
  },
  {
    "path": "visidata/windows.py",
    "content": "'''\nWindows-specific code\n'''\n\nimport string\nfrom visidata import vd\n\n\nfor c in string.ascii_uppercase:\n    vd.bindkey('ALT_'+c , 'Alt+'+c.lower())  #1630\n"
  },
  {
    "path": "visidata/wrappers.py",
    "content": "'value wrappers for nulls and errors'\n\nfrom copy import copy\nimport functools\n\nfrom visidata import options, stacktrace, BaseSheet, vd\n\n\n@BaseSheet.api\ndef isNullFunc(sheet):\n    'Return func(value) which returns whether or not *value* is null.'\n    nullv = sheet.options.null_value\n    if nullv is None:\n        return lambda v: v is None or isinstance(v, TypedWrapper)\n    return lambda v, nullv=nullv: v is None or v == nullv or isinstance(v, TypedWrapper)\n\n\n@functools.total_ordering\nclass TypedWrapper:\n    def __init__(self, func, *args):\n        self.type = func\n        self.args = args\n        self.val = args[0] if args else ''\n\n    def __bool__(self):\n        return False\n\n    def __len__(self):\n        return 0\n\n    def __repr__(self):\n        return '%s(%s)' % (self.type.__name__, ','.join(str(x) for x in self.args))\n\n    def __str__(self):\n        if self.val is None:\n            return ''\n\n        return repr(self)\n\n    def __lt__(self, x):\n        'maintain sortability; wrapped objects are always least'\n        return True\n\n    def __add__(self, x):\n        return x\n\n    def __radd__(self, x):\n        return x\n\n    def __hash__(self):\n        return hash((self.type, str(self.val)))\n\n    def __eq__(self, x):\n        if isinstance(x, TypedWrapper):\n            return self.type == x.type and self.val == x.val\n\n    def __iter__(self):\n        return self\n\n    def __next__(self):\n        raise StopIteration\n\n\nclass TypedExceptionWrapper(TypedWrapper):\n    def __init__(self, func, *args, exception=None):\n        TypedWrapper.__init__(self, func, *args)\n        self.exception = exception\n        self.stacktrace = stacktrace()\n        self.forwarded = False\n\n    def __str__(self):\n        return str(self.exception)\n\n    def __hash__(self):\n        return hash((type(self.exception), ''.join(self.stacktrace[:-1])))\n\n    def __eq__(self, x):\n        if isinstance(x, TypedExceptionWrapper):\n            return type(self.exception) is type(x.exception) and self.stacktrace[:-1] == x.stacktrace[:-1]\n\n\ndef forward(wr):\n    if isinstance(wr, TypedExceptionWrapper):\n        wr.forwarded = True\n    return wr\n\n\ndef wrmap(func, iterable, *args):\n    'Same as map(func, iterable, *args), but ignoring exceptions.'\n    for it in iterable:\n        try:\n            yield func(it, *args)\n        except Exception as e:\n            pass\n\n\ndef wrapply(func, *args, **kwargs):\n    'Like apply(), but which wraps Exceptions and passes through Wrappers (if first arg)'\n    if args:\n        val = args[0]\n        if val is None:  # None values propagate to TypedWrappers\n            return TypedWrapper(func, None)\n        elif isinstance(val, TypedExceptionWrapper):  # previous Exceptions propagate, marked 'forwarded'\n            tew = copy(val)\n            tew.forwarded = True\n            return tew\n        elif isinstance(val, TypedWrapper):  # TypedWrappers (likely None, from above) propagate\n            return val\n        elif isinstance(val, Exception):  # Exception values become TypedWrappers\n            return TypedWrapper(func, *args)\n\n    try:\n        return func(*args, **kwargs)\n    except Exception as e:\n        e.stacktrace = stacktrace()\n        return TypedExceptionWrapper(func, *args, exception=e)\n\n\nvd.addGlobals(\n    forward=forward,\n    wrmap=wrmap,\n    wrapply=wrapply,\n    TypedWrapper=TypedWrapper,\n    TypedExceptionWrapper=TypedExceptionWrapper\n)\n"
  }
]