crowbar-cli 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- crowbar/__init__.py +3 -0
- crowbar/catalog.py +174 -0
- crowbar/cli.py +1417 -0
- crowbar/datasets.py +584 -0
- crowbar/db.py +47 -0
- crowbar/indexer.py +985 -0
- crowbar/intel.py +562 -0
- crowbar/loaders.py +382 -0
- crowbar/mcp.py +387 -0
- crowbar/paths.py +54 -0
- crowbar/query.py +551 -0
- crowbar_cli-0.1.0.dist-info/METADATA +287 -0
- crowbar_cli-0.1.0.dist-info/RECORD +16 -0
- crowbar_cli-0.1.0.dist-info/WHEEL +4 -0
- crowbar_cli-0.1.0.dist-info/entry_points.txt +4 -0
- crowbar_cli-0.1.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: crowbar-cli
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Retrieve CVEs and index them inside your codebase. One SQLite+FTS5 index, one CLI, one MCP server.
|
|
5
|
+
Project-URL: Homepage, https://github.com/kushvinth/crowbar
|
|
6
|
+
Project-URL: Repository, https://github.com/kushvinth/crowbar
|
|
7
|
+
Project-URL: Issues, https://github.com/kushvinth/crowbar/issues
|
|
8
|
+
Author: kushvinth
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: agent,cve,epss,exploit,kev,mcp,nvd,offline,security,vulnerability
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Intended Audience :: Information Technology
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
|
+
Classifier: Topic :: Security
|
|
19
|
+
Requires-Python: >=3.11
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
|
|
22
|
+
<!-- mcp-name: io.github.kushvinth/crowbar -->
|
|
23
|
+
<div align="center">
|
|
24
|
+
|
|
25
|
+
# crowbar
|
|
26
|
+
|
|
27
|
+
### Retrieve CVEs and index them inside your codebase.
|
|
28
|
+
|
|
29
|
+
**Point it at a product and version. It pulls the CVEs that apply and indexes them locally, so any tool in your repo can query the answer.**
|
|
30
|
+
|
|
31
|
+
[](https://www.npmjs.com/package/crowbar-cli)
|
|
32
|
+
[](https://pypi.org/project/crowbar-cli/)
|
|
33
|
+
[](https://github.com/kushvinth/crowbar/actions/workflows/ci.yml)
|
|
34
|
+
[](#other-agents-cursor-codex-gemini-opencode)
|
|
35
|
+
[](#prefer-a-plain-cli)
|
|
36
|
+
[](https://skills.sh/kushvinth/crowbar/crowbar)
|
|
37
|
+
[](LICENSE)
|
|
38
|
+
|
|
39
|
+
**[Website](https://crowbar.kushvinth.com/) · [Guides](https://crowbar.kushvinth.com/guides/) · [Showcases](https://crowbar.kushvinth.com/showcase/)**
|
|
40
|
+
|
|
41
|
+
[Quick start](#quick-start) · [How crowbar works](#how-crowbar-works) · [What you can answer](#what-you-can-answer) · [Showcases](#showcases) · [FAQ](#faq) · [Documentation](#documentation)
|
|
42
|
+
|
|
43
|
+
<code>npx crowbar-cli setup</code>
|
|
44
|
+
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
> [!IMPORTANT]
|
|
48
|
+
> Get crowbar from [kushvinth/crowbar](https://github.com/kushvinth/crowbar),
|
|
49
|
+
> [crowbar.kushvinth.com](https://crowbar.kushvinth.com), or the
|
|
50
|
+
> [crowbar-cli](https://pypi.org/project/crowbar-cli/) package. A similar
|
|
51
|
+
> repository name or copied README does not make a download official.
|
|
52
|
+
|
|
53
|
+
<p align="center">
|
|
54
|
+
<img src="docs/assets/demo.gif" alt="crowbar triaging CVE-2021-44228, matching nginx 1.18.0, and finding the Log4Shell exploit" width="760" />
|
|
55
|
+
</p>
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
A codebase with no CVE index inside it makes people guess. crowbar is the
|
|
60
|
+
index: it retrieves NVD, CISA KEV, EPSS, SSVC, the CVE List, Exploit-DB, Nuclei,
|
|
61
|
+
Metasploit, OSV, Debian, MSRC and Apple advisories, and writes them into a local
|
|
62
|
+
SQLite + FTS5 database you query from your terminal, your CI or your agent. It
|
|
63
|
+
is **offline and reproducible** - the same query gives the same answer, no API,
|
|
64
|
+
no rate limits - so a lookup costs milliseconds instead of a guess.
|
|
65
|
+
|
|
66
|
+
No web UI, no daemon, no third-party Python packages. Point it at a product and
|
|
67
|
+
version and it tells you what is actually exploitable, ranks it by real-world
|
|
68
|
+
risk, and links the proof-of-concept.
|
|
69
|
+
|
|
70
|
+
> crowbar indexes public exploit and PoC data **as data**. It never clones,
|
|
71
|
+
> compiles, or runs it. Treat anything it surfaces as hostile code and detonate
|
|
72
|
+
> only in a disposable VM. Use it only against systems you own or may test. See
|
|
73
|
+
> [DISCLAIMER.md](DISCLAIMER.md).
|
|
74
|
+
|
|
75
|
+
## Quick start
|
|
76
|
+
|
|
77
|
+
### Set up your agent
|
|
78
|
+
|
|
79
|
+
With Node.js and [uv](https://docs.astral.sh/uv/) installed, run:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npx crowbar-cli setup
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Setup finds Claude Code, Codex, Cursor, Gemini CLI and opencode on your machine,
|
|
86
|
+
shows exactly which configs it will change, and applies them only after you
|
|
87
|
+
approve. It registers crowbar's MCP server, installs the skill, backs up every
|
|
88
|
+
config file it edits, and offers to build the local index. Restart your agent
|
|
89
|
+
afterward. `--agents claude,cursor` picks agents explicitly; `--yes` skips the
|
|
90
|
+
prompts. `npx crowbar-cli setup --remove` undoes it the same way: it lists what
|
|
91
|
+
it will remove, asks first, and leaves your other servers and the index alone.
|
|
92
|
+
|
|
93
|
+
### Or install the Claude Code plugin
|
|
94
|
+
|
|
95
|
+
One install drops in a skill *and* an MCP server:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
claude plugin marketplace add kushvinth/crowbar
|
|
99
|
+
claude plugin install crowbar@crowbar
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Your agent now has:
|
|
103
|
+
|
|
104
|
+
- the **skill** - it reaches for crowbar on any "is X vulnerable / what CVEs hit
|
|
105
|
+
this / known exploits for …" question instead of guessing from memory;
|
|
106
|
+
- the **MCP tools** - `cb_cve`, `cb_product`, `cb_search`, `cb_exploit`, … answering
|
|
107
|
+
offline from the local index.
|
|
108
|
+
|
|
109
|
+
**That's the whole setup.** The first time you ask a security question, the
|
|
110
|
+
crowbar skill sets itself up automatically - installs the tool and builds a
|
|
111
|
+
small local index in `~/.crowbar` (~150 MB; a few minutes, since NVD downloads are
|
|
112
|
+
slow), then answers. You never run a CLI command, and the index refreshes itself
|
|
113
|
+
once a day while you use it.
|
|
114
|
+
|
|
115
|
+
### Other agents (Cursor, Codex, Gemini, opencode)
|
|
116
|
+
|
|
117
|
+
Same MCP server, one line - no heavy install, `uvx` runs it on demand:
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{ "command": "uvx", "args": ["--from", "crowbar-cli", "crowbar-mcp"] }
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
claude mcp add crowbar -- uvx --from crowbar-cli crowbar-mcp # or, manually, in Claude Code
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
The repo ships `.claude-plugin/`, `.codex-plugin/`, `gemini-extension.json` and a
|
|
128
|
+
host-agnostic `skills/crowbar/SKILL.md`, so most hosts auto-detect it.
|
|
129
|
+
|
|
130
|
+
### Prefer a plain CLI?
|
|
131
|
+
|
|
132
|
+
Everything the agent can do, you can do in the terminal. Python 3.11+, zero deps.
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
uvx crowbar-cli # run without installing
|
|
136
|
+
uv tool install crowbar-cli # or pipx install crowbar-cli / pip install crowbar-cli
|
|
137
|
+
nix run github:kushvinth/crowbar
|
|
138
|
+
git clone https://github.com/kushvinth/crowbar && cd crowbar && ./bin/crowbar --help
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Build an index
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
crowbar sync --tier lite # pick lite | medium | heavy | extreme
|
|
145
|
+
crowbar build --tier lite # build the local index
|
|
146
|
+
crowbar doctor # verify it's ready
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
With `uvx`, prefix each: `uvx crowbar-cli sync --tier lite`. Refresh later with
|
|
150
|
+
`crowbar update` (~10 s) - NVD modified + KEV + EPSS + Exploit-DB, in place.
|
|
151
|
+
|
|
152
|
+
**Size tiers** - each a superset of the one above, so you pick your disk budget:
|
|
153
|
+
|
|
154
|
+
| tier | size | includes |
|
|
155
|
+
|---|---|---|
|
|
156
|
+
| `lite` | ~150 MB | KEV, EPSS, recent CVEs, CWE names |
|
|
157
|
+
| `medium` | ~500 MB | + full NVD history, CAPEC, SSVC, ATT&CK |
|
|
158
|
+
| `heavy` | ~2 GB | + Exploit-DB, Nuclei, Metasploit, OSV, PoC |
|
|
159
|
+
| `extreme` | full | + MSRC, Apple, Debian - every source |
|
|
160
|
+
|
|
161
|
+
## How crowbar works
|
|
162
|
+
|
|
163
|
+
<img src="docs/assets/flow.svg" alt="agent asks crowbar over MCP, crowbar answers from the local index, the agent gets a grounded answer" width="760" />
|
|
164
|
+
|
|
165
|
+
Your agent asks crowbar about a target over MCP. crowbar answers from the local
|
|
166
|
+
index - never the network - with the KEV/SSVC/EPSS/CVSS verdict, the affected
|
|
167
|
+
version ranges, and links to working PoCs. The agent uses that grounded result
|
|
168
|
+
to explain the risk, decide what to patch, or write and test an exploit under
|
|
169
|
+
authorization. CLI commands use the same read layer.
|
|
170
|
+
|
|
171
|
+
## What you can answer
|
|
172
|
+
|
|
173
|
+
| Ask | What crowbar returns | Command |
|
|
174
|
+
|---|---|---|
|
|
175
|
+
| What does this CVE mean, and is it serious? | CVSS, EPSS, KEV, SSVC, CWE, CPE ranges, refs, PoCs | `crowbar cve CVE-2021-44228` |
|
|
176
|
+
| We run product X version Y - what's exploitable? | Only CVEs whose CPE range covers Y, with the matched range | `crowbar product nginx --version 1.18.0` |
|
|
177
|
+
| Is it exploited in the wild? | CISA KEV + SSVC `active`/`poc`/`none` | `crowbar kev`, `crowbar cve <id>` |
|
|
178
|
+
| Where's a working exploit or detection? | Exploit-DB, Nuclei templates, Metasploit modules | `crowbar exploit log4j` · `crowbar nuclei <q>` · `crowbar msf <q>` |
|
|
179
|
+
| A public PoC repo for this CVE? | GitHub PoC metadata (stars, language) - never cloned | `crowbar poc --cve <id>` |
|
|
180
|
+
| Is this npm / PyPI / Go package affected? | OSV/GHSA advisories with introduced/fixed ranges | `crowbar advisory --package lodash --ecosystem npm` |
|
|
181
|
+
| Windows / iOS / macOS advisory? | MSRC + Apple advisories, normalized impact (RCE/EoP/…) | `crowbar os --platform windows --impact RCE` |
|
|
182
|
+
| The exploit *code*, not just a title? | Full-text search inside 46k Exploit-DB sources | `crowbar code "jndi lookup ldap"` |
|
|
183
|
+
| A living-off-the-land binary? | GTFOBins / LOLBAS / PayloadsAllTheThings | `crowbar bin certutil` |
|
|
184
|
+
| A technique, weakness class, or model? | ATT&CK / CWE / CAPEC / LLM catalog | `crowbar attack T1059` · `crowbar cwe 79` |
|
|
185
|
+
| Anything, my way | read-only SQL over the whole index | `crowbar sql "select id,epss from cve where kev=1"` |
|
|
186
|
+
|
|
187
|
+
Rank threat by **KEV / SSVC active > EPSS > CVSS** - never CVSS alone. Most read
|
|
188
|
+
commands accept `--json`. See the [full command reference](https://crowbar.kushvinth.com/guides/)
|
|
189
|
+
and [AGENTS.md](AGENTS.md) for the traversal manual.
|
|
190
|
+
|
|
191
|
+
## Showcases
|
|
192
|
+
|
|
193
|
+
**Triage Log4Shell in one command.** `crowbar cve CVE-2021-44228` returns `CRIT
|
|
194
|
+
10.0 · KEV · EPSS 1.00 · ssvc=active`, 44 affected CPE ranges, Exploit-DB `50592`
|
|
195
|
+
(RCE), 44 Nuclei templates and 4 Metasploit modules - the whole verdict, offline,
|
|
196
|
+
in ~80 ms.
|
|
197
|
+
|
|
198
|
+
**"What do we run that's exploitable?"** `crowbar product nginx --version 1.18.0`
|
|
199
|
+
tests every NVD CPE range against 1.18.0 and returns only real hits, like
|
|
200
|
+
`CVE-2021-23017 HIGH 7.7 · matched f5:nginx >=0.6.18 <1.20.1` - not every CVE that
|
|
201
|
+
merely mentions "nginx".
|
|
202
|
+
|
|
203
|
+
**Hunt the actively-exploited.** `crowbar search "remote code execution" --kev
|
|
204
|
+
--epss 0.5 --sort epss` surfaces CVE-2021-26855 (Exchange), CVE-2020-0796
|
|
205
|
+
(SMBGhost) and friends, each with `exp×N nuc×N poc×N` counts, ranked by real
|
|
206
|
+
exploitation probability.
|
|
207
|
+
|
|
208
|
+
> Used crowbar on something interesting? Open an issue or PR with the target,
|
|
209
|
+
> your question, and what you found.
|
|
210
|
+
|
|
211
|
+
## FAQ
|
|
212
|
+
|
|
213
|
+
<details><summary>Which agents can use crowbar?</summary>
|
|
214
|
+
|
|
215
|
+
Any MCP host: Claude Code, Codex, Cursor, Gemini CLI, opencode, and Claude
|
|
216
|
+
Desktop. The launch command is `uvx --from crowbar-cli crowbar-mcp`; this repo
|
|
217
|
+
ships ready manifests for the common ones. You can also use every capability
|
|
218
|
+
from the terminal.
|
|
219
|
+
</details>
|
|
220
|
+
|
|
221
|
+
<details><summary>Does it phone home or need an API key?</summary>
|
|
222
|
+
|
|
223
|
+
No. Every dataset is fetched over plain HTTP at build time with no token; after
|
|
224
|
+
that crowbar is fully offline. The MCP server makes zero network calls, and the
|
|
225
|
+
index opens read-only.
|
|
226
|
+
</details>
|
|
227
|
+
|
|
228
|
+
<details><summary>How big is it, really?</summary>
|
|
229
|
+
|
|
230
|
+
Your choice. A `lite` index is ~150 MB and answers in milliseconds; `extreme` is
|
|
231
|
+
the full corpus (~1.5 GB index over ~3.3 GB of raw data). `crowbar doctor` tells
|
|
232
|
+
you what you built and `crowbar stats` is always authoritative.
|
|
233
|
+
</details>
|
|
234
|
+
|
|
235
|
+
<details><summary>Does crowbar run exploits?</summary>
|
|
236
|
+
|
|
237
|
+
Never. It indexes exploit and PoC data **as data**. `crowbar exploit <id>`
|
|
238
|
+
downloads source for you to inspect; running it is your decision, in a disposable
|
|
239
|
+
VM, under authorization.
|
|
240
|
+
</details>
|
|
241
|
+
|
|
242
|
+
<details><summary>How is this different from vulnx / cve-mcp / CIRCL?</summary>
|
|
243
|
+
|
|
244
|
+
Those query live APIs (network, rate limits, answers that drift). crowbar is a
|
|
245
|
+
local index: offline, reproducible, and it full-text-searches Exploit-DB *source
|
|
246
|
+
code*, which the API wrappers don't.
|
|
247
|
+
</details>
|
|
248
|
+
|
|
249
|
+
## Documentation
|
|
250
|
+
|
|
251
|
+
- **[crowbar.kushvinth.com](https://crowbar.kushvinth.com)** - quick start, commands, agent setup.
|
|
252
|
+
- [AGENTS.md](AGENTS.md) - the agent traversal manual (schema, recipes, guardrails).
|
|
253
|
+
- [docs/DATASETS.md](docs/DATASETS.md) - per-source shape, license and caveats.
|
|
254
|
+
- [docs/MAP.md](docs/MAP.md) - repo tree, data flow, table map.
|
|
255
|
+
- [CONTRIBUTING.md](CONTRIBUTING.md) · [SECURITY.md](SECURITY.md) · [Releases](https://github.com/kushvinth/crowbar/releases)
|
|
256
|
+
|
|
257
|
+
## Star history
|
|
258
|
+
|
|
259
|
+
[](https://star-history.com/#kushvinth/crowbar&Date)
|
|
260
|
+
|
|
261
|
+
## Disclaimer
|
|
262
|
+
|
|
263
|
+
crowbar is for lawful security research, defense, and analysis of systems you own
|
|
264
|
+
or are authorized to test. See [DISCLAIMER.md](DISCLAIMER.md). KEV/SSVC describe
|
|
265
|
+
exploitation observed elsewhere, EPSS is a model estimate, and a missing row is
|
|
266
|
+
not proof of "not affected" - verify before you act.
|
|
267
|
+
|
|
268
|
+
## Contributing
|
|
269
|
+
|
|
270
|
+
We'd love your help with crowbar! [Open an issue](https://github.com/kushvinth/crowbar/issues)
|
|
271
|
+
to report a bug, a wrong CVE record or a missing dataset, or
|
|
272
|
+
[send a pull request](https://github.com/kushvinth/crowbar/pulls) to improve the code or docs.
|
|
273
|
+
|
|
274
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for the dev loop, the add-a-dataset checklist
|
|
275
|
+
and the test suites. crowbar is standard-library only; keep it that way.
|
|
276
|
+
|
|
277
|
+
## License
|
|
278
|
+
|
|
279
|
+
[MIT](LICENSE)
|
|
280
|
+
|
|
281
|
+
crowbar-authored code is licensed under MIT. The upstream data it indexes keeps its
|
|
282
|
+
own licenses and terms; see [Third-party notices](THIRD_PARTY_NOTICES.md) and
|
|
283
|
+
[docs/DATASETS.md](docs/DATASETS.md) for the source inventory.
|
|
284
|
+
|
|
285
|
+
**Indexed exploit and PoC data is reference material, not permission.** crowbar
|
|
286
|
+
never runs it, and nothing it returns authorizes testing a system. Use it only
|
|
287
|
+
against systems you own or are allowed to test; see [DISCLAIMER.md](DISCLAIMER.md).
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
crowbar/__init__.py,sha256=S8H-PaEf6LnBT2kC3VTFrFVRuzJtj4junYVxydHSG7w,117
|
|
2
|
+
crowbar/catalog.py,sha256=SIPhtzY38TfpJDuh6bfcrQS8aPHTI6ZDq7PX5wwulAc,6881
|
|
3
|
+
crowbar/cli.py,sha256=jWsXXgpjnlKSpr-nsbJy0GBB7uRnueYYRGJyW1FeLK4,57666
|
|
4
|
+
crowbar/datasets.py,sha256=mKPvyAUkax1sDc1ScKfBq6QCoNFhsrtbGBnQB-WFH54,24724
|
|
5
|
+
crowbar/db.py,sha256=C5PUIr93Hw0vUUD4X34c1qKjp5LEQROQKlHf8RqaGJk,1537
|
|
6
|
+
crowbar/indexer.py,sha256=ld8_1JQCLQo7yLFWgec34YjFtV38F_TRrq6-O3ZaxH8,39718
|
|
7
|
+
crowbar/intel.py,sha256=3AauWmYr0rcbGUoso9NDawC4a_zXOmrIKcqCm7HVHTw,23690
|
|
8
|
+
crowbar/loaders.py,sha256=fODl0gH2pMH6Szz_TUR2wMidEbDE17UGQRYJq4jl5Cc,16879
|
|
9
|
+
crowbar/mcp.py,sha256=nsdRIn2SCtqmNDbePPri6ywYm-8fcUfb1JCBGUGNWak,18969
|
|
10
|
+
crowbar/paths.py,sha256=q9jVvY3Cx-4OoUI2JV3KEFv5ztGK61eztQvSzX7pihk,1500
|
|
11
|
+
crowbar/query.py,sha256=MGjtTXnpVjp2oQcm27Pbzqn0jSGhZVuAmH3KiOfkoBY,24124
|
|
12
|
+
crowbar_cli-0.1.0.dist-info/METADATA,sha256=rHPWDuVaP72XfTFVT1QGI4xcN4AYHoDKdIHOd6AJW18,13513
|
|
13
|
+
crowbar_cli-0.1.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
|
|
14
|
+
crowbar_cli-0.1.0.dist-info/entry_points.txt,sha256=KSXySxA2dMLVQ101_5MJ_GyX6kXSYUF8yVTWhps_tIE,108
|
|
15
|
+
crowbar_cli-0.1.0.dist-info/licenses/LICENSE,sha256=lwV6kMAtSnnSv9JuRadCs2CN6nyYQTM7Sq6Z7KneldM,1066
|
|
16
|
+
crowbar_cli-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 kushvinth
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|