proofpress 0.1.0-alpha.2 → 0.2.0

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.
package/README.md CHANGED
@@ -6,253 +6,147 @@
6
6
  [//]: # (ob:de7999eb)
7
7
  # Proofpress
8
8
 
9
+ [//]: # (ob:7542280e)
10
+ [![npm version](https://img.shields.io/npm/v/proofpress.svg)](https://www.npmjs.com/package/proofpress)
11
+ [![CI](https://github.com/chenmingtang830/proofpress/actions/workflows/ci.yml/badge.svg)](https://github.com/chenmingtang830/proofpress/actions/workflows/ci.yml)
12
+ [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
13
+
9
14
  [//]: # (ob:e667d986)
10
- Proofpress is a verifiable `log.md` for knowledge work: a shared history of who
11
- changed what, when, and why, checked against the artifact itself.
15
+ **The trust layer for multiplayer AI.**
12
16
 
13
17
  [//]: # (ob:0e0e9d9a)
14
- Agents can produce a document quickly, but the reasoning that shaped its final
15
- form is usually scattered across chat sessions, Slack, meetings, and somebody's
16
- memory. Git is excellent when the work already lives in Git; most knowledge
17
- artifacts do not. Proofpress keeps the accepted version history and consequential
18
- decisions attached to a Markdown or static HTML artifact so that history can
19
- travel with it.
18
+ Proofpress is an open, agent-native ledger that travels with Markdown and
19
+ static HTML artifacts—even when Git does not. It keeps accepted changes,
20
+ stated reasons, and consequential rejections tied to the work.
20
21
 
21
- [//]: # (ob:169d8523)
22
- ## Status
22
+ [//]: # (ob:6ef36a68)
23
+ > Git made code collaborative. Proofpress makes intelligence compound.
23
24
 
24
- [//]: # (ob:d6f9f208)
25
- Proofpress is a V0 reference implementation. The CLI is usable and its portable
26
- artifact behaviors are covered by black-box tests, but the embedded carrier and
27
- command interfaces may still change before a stable release. The npm package is
28
- published under the `next` tag while these interfaces settle.
25
+ [//]: # (ob:cd8c1f66)
26
+ Think C2PA for knowledge work: a portable, inspectable record of admitted
27
+ history—not a claim of C2PA compatibility, signed authorship, or complete
28
+ capture.
29
29
 
30
- [//]: # (ob:19210f53)
31
- ## Install the alpha
30
+ [//]: # (ob:cc376e2b)
31
+ ## Install
32
32
 
33
- [//]: # (ob:989f25ec)
34
- Proofpress keeps its zero-dependency Python engine and adds a thin npm launcher
35
- plus repository setup command. Python 3 and Git are required:
33
+ [//]: # (ob:d6f9f208)
34
+ Requires Python 3.11+, Git, and Node 22+:
36
35
 
37
36
  [//]: # (ob:7b197ac1)
38
37
  ```sh
39
- npm install --save-dev proofpress@next
38
+ npm install --save-dev proofpress
40
39
  npx --no-install proofpress --version
41
40
  npx --no-install proofpress setup --agent codex
42
41
  ```
43
42
 
44
43
  [//]: # (ob:5ae48e1b)
45
- `setup` installs a package-aware adapter and writes
46
- `.proofpress/manifest.json`. It is idempotent and supports `codex`, `claude`,
47
- `cursor`, or `all`. Portable history remains opt-in per artifact.
48
-
49
- [//]: # (ob:2b655d31)
50
- To add a visible, transparent distribution mark to a repository README:
51
-
52
- [//]: # (ob:d4916c37)
53
- ```sh
54
- npx --no-install proofpress setup --agent codex --badge README.md
55
- ```
56
-
57
- [//]: # (ob:5796ae98)
58
- The badge says that revision provenance uses Proofpress; it is not an
59
- instruction for agents to download or execute software. Installed adapters use
60
- `npx --no-install`, so an agent can use an existing local installation but
61
- cannot silently fetch the package.
44
+ `setup` installs the agent adapter and writes `.proofpress/manifest.json`. Use
45
+ `--agent claude`, `cursor`, or `all` for another supported harness.
62
46
 
63
- [//]: # (ob:e7b4f799)
64
- ## Single-file install
47
+ [//]: # (ob:4273537d)
48
+ ## Create a portable document
65
49
 
66
- [//]: # (ob:d8cafbd3)
67
- Proofpress is a single Python file with no third-party runtime dependencies:
50
+ [//]: # (ob:1160e434)
51
+ Run these commands on a Markdown or static HTML file:
68
52
 
69
- [//]: # (ob:0b5b4916)
53
+ [//]: # (ob:2b655d31)
70
54
  ```sh
71
- git clone https://github.com/chenmingtang830/proofpress.git
72
- cd proofpress
73
- python3 proofpress.py --help
55
+ npx --no-install proofpress policy proposal.md portable
56
+ npx --no-install proofpress anchor proposal.md
57
+ npx --no-install proofpress snapshot proposal.md --kind agent --author codex \
58
+ --why "accepted the smaller launch scope"
59
+ npx --no-install proofpress verify proposal.md
74
60
  ```
75
61
 
76
- [//]: # (ob:166fd594)
77
- To use it in another repository, vendor `proofpress.py` at that repository's
78
- root and install the matching adapter from [`skills/`](skills/).
62
+ [//]: # (ob:5796ae98)
63
+ The policy is sticky. Each accepted snapshot refreshes the hidden capsule in
64
+ the file. Source code stays in Git; Proofpress manages only Markdown and static
65
+ HTML knowledge artifacts.
79
66
 
80
67
  [//]: # (ob:949eb6a5)
81
- ## What “portable” means
68
+ ## Hand off a document
82
69
 
83
70
  [//]: # (ob:2173502c)
84
- Turn portability on once:
85
-
86
- [//]: # (ob:c44f6768)
87
- ```sh
88
- python3 proofpress.py policy proposal.md portable
89
- ```
90
-
91
- [//]: # (ob:79416c44)
92
- The setting is sticky. Later accepted revisions refresh a compact, hidden
93
- capsule inside the carrier file. Send the original file to a collaborator and
94
- their agent can inspect and import its history without access to your Git repo,
95
- chat session, or Proofpress ledger ref.
71
+ Send the original file. The recipient does not need your repository, session,
72
+ or local ledger:
96
73
 
97
74
  [//]: # (ob:af7113fa)
98
75
  ```sh
99
- python3 proofpress.py inspect proposal.md
100
- python3 proofpress.py import proposal.md
101
- python3 proofpress.py log proposal.md
76
+ npx --no-install proofpress inspect proposal.md
77
+ npx --no-install proofpress import proposal.md
78
+ npx --no-install proofpress log proposal.md
102
79
  ```
103
80
 
104
- [//]: # (ob:bfc931ca)
105
- The capsule is declarative data, not agent instructions. It is tamper-evident
106
- for accidental drift and inconsistent rewrites, but V0 does not claim signed
107
- authorship or protection from wholesale malicious replacement.
108
-
109
- [//]: # (ob:839fc8a1)
110
- Portable carriers include a non-rendering discovery marker with
111
- `Verifiable revision history by Proofpress` and the project URL. The capsule's
112
- canonical discovery object also names `proofpress@next`. An agent may explain
113
- this provenance and offer installation, but must obtain user consent before
114
- downloading or executing anything.
115
-
116
- [//]: # (ob:cc095bd4)
117
- ## Static HTML carrier
118
-
119
- [//]: # (ob:e6463f5e)
120
- Proofpress also supports static `.html` and `.htm` artifacts. `anchor` writes a
121
- stable `data-proofpress-id` onto supported visible blocks (headings, paragraphs,
122
- list items, block quotes, preformatted blocks, table cells, and figure captions).
123
- The metadata marker lives in `<head>`; a portable capsule is a non-executing
124
- `application/vnd.proofpress+json` data block before `</body>`.
125
-
126
- [//]: # (ob:b8abc9df)
127
- ```sh
128
- python3 proofpress.py policy launch-plan.html portable
129
- python3 proofpress.py anchor launch-plan.html
130
- python3 proofpress.py snapshot launch-plan.html --kind agent --author codex \
131
- --why "made the accepted review scope explicit"
132
- python3 proofpress.py verify launch-plan.html
133
- ```
81
+ [//]: # (ob:5e991c72)
82
+ ### GitHub or a raw file
83
+
84
+ [//]: # (ob:398568bb)
85
+ | Route | What travels |
86
+ |---|---|
87
+ | GitHub | The file and capsule move through ordinary commits and pull requests |
88
+ | Outside Git | The raw file carries its own public history |
134
89
 
135
- [//]: # (ob:00768820)
136
- This is a static-HTML carrier MVP, not a framework or CMS integration. Proofpress
137
- does not yet promise round-trip preservation through React/Vue builds, HTML
138
- sanitizers, editors, or CMS pipelines; if they strip transport data, the file
139
- degrades to an ordinary HTML artifact `identify` can still recognize it
140
- locally, but its provenance does not come back.
90
+ [//]: # (ob:a908fde7)
91
+ `refs/proofpress/ledger` remains the complete local working record. Portable
92
+ files do not depend on it: their capsule crosses the repository boundary with
93
+ the file. A team that also wants to share the complete ledger must run
94
+ `npx --no-install proofpress sync` explicitly; an ordinary `git push` does not
95
+ push the special ref.
141
96
 
142
97
  [//]: # (ob:226a29fd)
143
- ## What gets recorded
98
+ ## What is—and is not—recorded
144
99
 
145
100
  [//]: # (ob:cfc1c3aa)
146
- Proofpress records accepted artifact versions, their computed block changes,
147
- explicit actor roles, the reason for the change, and consequential rejected
148
- directions when the authoring agent supplies them. The account is checked
149
- against the actual artifact diff.
101
+ Proofpress records accepted versions, computed block changes, stated actor
102
+ roles, reasons, and consequential rejections. Claims are checked against the
103
+ actual document diff.
150
104
 
151
105
  [//]: # (ob:5e0b34ed)
152
- It does not automatically store raw prompts, transcripts, tool traces, casual
153
- brainstorming, or every save. A fallback hook checks Git candidates and current
154
- paths already admitted to the ledger, including Git-ignored artifacts. It can
155
- preserve an otherwise missed version, but identifies itself only as
156
- `recorded_by`; it does not guess who wrote the content or why. Harness skills
157
- can also capture a specific existing file before an agent edits it, keeping
158
- unattributed human drift separate from the agent's revision.
106
+ It does not automatically store raw prompts, transcripts, private reasoning,
107
+ tool traces, casual brainstorming, or every save. See the
108
+ [privacy boundary](docs/PRIVACY_AND_DISCLOSURE.md) for the complete rules.
159
109
 
160
- [//]: # (ob:d8387b0b)
161
- ## Privacy modes
110
+ [//]: # (ob:47f21d3a)
111
+ ## Merge parallel copies
162
112
 
163
- [//]: # (ob:5df13acf)
164
- Each artifact has one policy:
113
+ [//]: # (ob:55bcd98e)
114
+ Keep every original copy. First, ask Proofpress to find the common ancestor and
115
+ report only genuine block conflicts:
165
116
 
166
- [//]: # (ob:3b52e3b3)
167
- - `portable`: future accepted versions refresh the embedded capsule.
168
- - `local`: versions stay in the local/Git ledger; the current capsule is
169
-
170
- [//]: # (ob:126978a2)
171
- removed.
172
-
173
- [//]: # (ob:0890e114)
174
- - `ignored`: future capture is skipped.
175
-
176
- [//]: # (ob:c6642117)
177
- Switching from portable to local cannot recall copies already sent. Re-enabling
178
- portable starts a clean lineage at the current body, so private-interval actors,
179
- reasons, rejected paths, event IDs, and omitted-event counts do not leak.
180
-
181
- [//]: # (ob:18995a53)
182
- For a one-off history-free copy, use:
183
-
184
- [//]: # (ob:f28051ef)
117
+ [//]: # (ob:8f498c01)
185
118
  ```sh
186
- python3 proofpress.py clean proposal.md --output proposal-clean.md
119
+ npx --no-install proofpress merge-plan proposal-alice.md \
120
+ --from proposal-bob.md --json
187
121
  ```
188
122
 
189
- [//]: # (ob:bfac82a8)
190
- ## Core workflow
123
+ [//]: # (ob:d4ed0d79)
124
+ After an agent or user resolves the visible body, record the reunion:
191
125
 
192
- [//]: # (ob:706dcea3)
126
+ [//]: # (ob:74883804)
193
127
  ```sh
194
- python3 proofpress.py anchor proposal.md
195
- python3 proofpress.py snapshot proposal.md --kind agent --author codex \
196
- --produced-by codex --recorded-by codex \
197
- --attribution-basis harness_attested \
198
- --note "incorporated review" --claims /tmp/claims.json \
199
- --why "the team chose the smaller launch scope"
200
- python3 proofpress.py verify proposal.md
128
+ npx --no-install proofpress anchor proposal-alice.md
129
+ npx --no-install proofpress merge proposal-alice.md --from proposal-bob.md \
130
+ --kind agent --author codex --why "resolved the parallel review copies"
131
+ npx --no-install proofpress verify proposal-alice.md
201
132
  ```
202
133
 
203
- [//]: # (ob:33e05aa8)
204
- Use `--rejected` only for consequential dead branches that future collaborators
205
- should not repeat. Source code stays in Git; Proofpress is for Markdown and
206
- static HTML knowledge artifacts.
207
-
208
- [//]: # (ob:59769c11)
209
- ## Merged lineage and stripped copies
210
-
211
- [//]: # (ob:91a8deb1)
212
- When one document merges several Proofpress-managed sources, record the
213
- upstream references — identity, head version, and digest, never copied
214
- history:
215
-
216
- [//]: # (ob:100c5aa7)
217
- ```sh
218
- python3 proofpress.py merge-lineage proposal.md \
219
- --from research-a.md --from research-b.md
220
- ```
221
-
222
- [//]: # (ob:144c3d60)
223
- When a copy lost its metadata and capsule (pasted as plain text, reformatted,
224
- sanitized), the ledger can still recognize it by a deterministic content
225
- fingerprint:
226
-
227
- [//]: # (ob:28dec45f)
228
- ```sh
229
- python3 proofpress.py identify pasted-copy.md
230
- ```
231
-
232
- [//]: # (ob:b705ac38)
233
- `identify` answers identity — "this is that artifact" — on a machine holding
234
- the ledger. It does not restore history or prove the copy was never altered,
235
- and a copy with wording changes intentionally does not match.
134
+ [//]: # (ob:1575e201)
135
+ Same-document branches become `parents`. Other source documents remain
136
+ `ingredients`; record those with `merge-lineage`.
236
137
 
237
138
  [//]: # (ob:2a955c60)
238
- ## Surfaces
139
+ ## Go deeper
239
140
 
240
141
  [//]: # (ob:8deed5b3)
241
- - `proofpress.py`: zero-dependency engine and CLI.
242
- - npm package: thin cross-platform launcher and idempotent repository setup.
243
- - `refs/proofpress/ledger`: local/Git-backed ledger, separate from branches.
244
- - `skills/`: Claude Code, Codex, Cursor, and Pi authoring contracts plus
245
-
246
- [//]: # (ob:1f7d312f)
247
- best-effort fallback hooks.
248
-
249
- [//]: # (ob:605a678d)
250
- - Embedded portable capsule: path-independent handoff outside Git.
251
-
252
- [//]: # (ob:820f39ab)
253
- Start with the [documentation index](docs/README.md). The executable behavior is
254
- defined by the [Portable Artifact V0 contract](docs/PORTABLE_ARTIFACT_SPEC.md),
255
- with its disclosure limits in
256
- [Privacy Boundaries for Portable Artifacts](docs/PRIVACY_AND_DISCLOSURE.md).
257
-
258
- [//]: # (proofpress:meta:eyJhcnRpZmFjdF9pZCI6InBwXzU1NmIxMTVkZTcxMWIwY2QzM2VlZDI2MCIsInBvbGljeSI6ImxvY2FsIiwicHJvb2ZwcmVzcyI6MX0)
142
+ - [Five-minute portable handoff demo](examples/portable-handoff/README.md)
143
+ - [Documentation map](docs/README.md)
144
+ - [Executable V1 contract](docs/PORTABLE_ARTIFACT_SPEC.md)
145
+ - [Privacy boundaries](docs/PRIVACY_AND_DISCLOSURE.md)
146
+ - [Agent adapters](skills/README.md)
147
+ - [Contributing](CONTRIBUTING.md) · [Changelog](CHANGELOG.md) ·
148
+ [Security](SECURITY.md) · [Code of Conduct](CODE_OF_CONDUCT.md)
149
+
150
+ [//]: # (proofpress:meta:eyJhcnRpZmFjdF9pZCI6InBwXzU1NmIxMTVkZTcxMWIwY2QzM2VlZDI2MCIsInBvbGljeSI6InBvcnRhYmxlIiwicG9ydGFibGVfaGVhZCI6IjExZjBkYzYzIiwicG9ydGFibGVfaGVhZF9ldmVudCI6InBwZV9mMDBlZDU2NGU1MTJiYjM4NTQ1OTc3NTgiLCJwb3J0YWJsZV9saW5lYWdlX2lkIjoicHBsX2UyOWYxODUxZTBiNDhhYTFkNDIxM2ZjMiIsInByb29mcHJlc3MiOjF9)
151
+ [//]: # (proofpress:discovery:Verifiable revision history by Proofpress | https://github.com/chenmingtang830/proofpress)
152
+ [//]: # (proofpress:capsule:eNrtfUlzI0eW5l-JYR1KqiLI2BdKLevsVFYpbbRZZkptbck0wsPdg4hKIAKFCJDJkmRWp5n72FifZq7zF-Y-P6UOYzb_Yt5zD19AAkEsTNTScVAKBCJ8ff627z1_P52QRVsWhLZXJTu5OJnPr6Iozj0vYjzxvNylLAg4Z37snpye5DW7u2LlNW9aeLaZED-KL3KWpTGlCaFe4foeTUKX5MxjhZe6bhb5LI6TLOXcZRmJkziOaZxzFgVFknI3iwtol5UNrW_44u7k4if8o71qyTX0MCUtdnUKH3I-hS9-5IuyKEk-5c6C35RNWVfOBJ6vF3dOfud8v6jrYr7gTQPvzAl9T645Tmrl60X9Bw7TXS6wwUnbzpuL8_Prsp0s8zNaz87phFezsrpuSXWdBu75ytsL_sdlCZ-vlg1fXNG6angFa9EulvyX05MJJ7iIHiwEo3FwIr-54jfiIVhcflW4Lkw-Dnnk-XkepFEYZUkSpTiyetHi1K6mZcVh5GpHplfcz2A1I4-7eZgS4rHQ94KC-nI63eiuKJk3yylM2Mdx0nrBmpOLtz-ddN3_dAK7XC8a_CR_5uwqhyV_e0Jrxj-cvIMZKGqAjl-9ePblNy_OZuzkdCciIW27KPNlC3tzlZOmbHCZyaLCIcJvsKFcNLlsJ_UCB_O-rLDV5g5-mcEvFZnhrslBnZ408CK0dXJRLadTGCKdwMZwObV8WtP38GzMaZJ4eQiPw560_ANO4JP_--__9f_9r3__FL7suiCMib7nSDz8Fr75fO6QaXld_dPlCYVV4ovLky8uK8f5vJxdO82CwvekaXjbnE_r6_qsubm-PIE3Wvi-IzZorr2bCzIjC3Lyy6kZFaxOlmU8XxnVCo1uHNevVmm56wGpCShzpRMOxwtP4B6dmKecsnHaCXeAjpvWmZI7vnCKeuHMltO2nMu_n728cEjl1HNenTqkZ9oud3kGh32PEX21nJGqgW6YAwegahuHQpdA42xJuUMcVtPlDL534BTS99O7UwcITYyc8Z4RURokMff32Yg3k7J67zz3v38m-8JVeV_Vt1POrrlzWy_ew6o46uieOmXVzIG9CBbVM6KYF0FM4nSPEX3h_L5snRlh3MEjAv9MgT3WC9KWN_zMoht45j2HrYXmp0DjvKJ9a-TFGUsjP1gZ0euWtMt-Qv2Vox_qoVIWF1nhu-mOrVuTcc-8M1fRKV0uFkgGjVzoaj4DeTDlpIEFABkh5ELfXDPfc4toda4vK2htOn1ksuapntlmKUw24nTX9q3pvud8DnsHJ-BPfFGPGIdjx2ALQcjdAeOsHF5dg5iQR4Wxpm-6Se5lKJ53Hc54PG4mlxWubimfdkajhtxwGM6NYyQPPvIBfqrqkXoOfjQDQjJdGVBEeJhyL995QMCJl_OxGk2DJ09K-RG5JQtYDUbmwMTFqtwuShA2l9X4TI60j1ET18tYsfN-jc0a_LOgz_EGAu2I00HZVfHpmfNm0jOc0E-CKEjYynCE6nNn8RoH2mJ1UcBqOAUcfQeUlmXLH6HfbZt55Dx7XuzyMAiffIhvYPHePnif8Vn97hP-gczmU96cq99H3e_nnzo4ip4l9fM4iljgPf14azx-0AZqo0ICtAsQYTAA3H7UZZUyBOx48d5p4Xkgh3ndlH3jZWHmxSC1nny8-kw_PLCK9YhDBr8KCSxkDD6bE3bdd6STLCY8Sz8KQWDf3GnIHR4u0hrdH0YNyi0ByeaAQt5Ywu8z4J19PJEneViAerYqkIDMgaqKEkZabiUO1r_RJwhTSoqcBYf0u6q3EacRryvBIFq5BXvGqWpYrnLBRjD79s5ZLKu27NPb8ihHsjtkaB15gTnl0GkN8mkXA6uHvLw4LliUhYeMDY4qEAnSBVAfqWrg0wt1FMGAPHWAlBiodxZXP5vfjR0guL6jmoWg4sckWhnavyKZ_uXP_0MR_l_-_D-dGQfG8Ag99b3XQ1W-BxLD9enhY3izXFTdcS2nJVANUFQN5-uiT70OwwIs-_Tw3jvymQtKDpyVjYBRTUvQf-BL2DIyBctU8xWQ8uNxD_kkWQjsNAyfYH2AHQGDbGEH8PA1Ldghd2fO10SoHZRy0D-YZlANfCpg_BM4pbTuWUJSgCEdFOQjL2FnndhruPpoH4fnWebRxF8Z4pvbuhN4MEZnQcrpIxT-K2f9Kz3EHWRpFKd5fkjHoMyVYCuB5fTVMj8VKto3II5ZfVudf_Xmm68l10S1sRRGp_CkYAc3fNq3bZmbFmDmHzK075btg7HVixK0ezKFt2_l0LSB3rV75rxse5X-vKBZ4FFyyNCQ2NVawAAYp1Mi7UyHkZacgoRppaEu-O9iSVHRaXBsfUNLg6ygKfEOGdr3SqOgZLEoweSDEdDpkqGXoKqr0QLNpQWeUu1cFAoYnNLbXk-Bm0U5Cx_YqSV1BJ103W1hEj98o9eLE8ZBEfFD-rXUAjJtaqdZznEtkUmJdsZnk3Y2HQsqF5_hY-fXa_oIKSU5BevokKFtw9enZFnRyWg-JZUYqGbuPTzJdUHspL57yNjeTEqlR4kXR_aLzjc_ft-RuVMsyIyjxweOp_P8m9dAcX0Whx8TPyvYQ45-zVuUC9IDu40-cP-FHjqiBfVoQMgBvVpk1HmRjVxT9AKqknCyNIJdlQsQbrO5VOQ3rUfE3TwI-SHrAVyF1aDli-1YtvUMtwuUvjsHEQAumCWQ1mzeNp0ZRhel_KNP9rI0SJPcve8dLG8IUOUMSO4xpe3-sz37E7HCCwgt9uvrBaETswcT0jioYsvz06egBXnk8yAP9ut1BBpxdxTHF06xbJfoaVEkoShBazoopvgs59iOJQWmYAqvqvR-nCUp8fcblAP9zYCts7M-iybNXO554d7zLq8rICxmpg3SUPwfVb_35Xy-0v-DKdI4Dn3PS_br_zUYcXSCIqwAojY2dFs70D4oB5RUeBTg6KAFT-t5yZH1LxCF6nF-plkWkWhPYvgd8D6CZDdCM77D3kaw8-iInoMRBSZWHykWfupGHt_zAPTKETrlEizQ5sFoVC9b4Evyyx45ksOBSn2yasE8R56C_L6Y1rePsID7z_awgMSNGeUk2K-v3hUgIEBhfzZq90XPEgQBdyOy7xL8AIb1eARaF2KrcGCAQoAtI1giMNI_LkFHLIFkGSyIky9woLxz5hR9QiNL4ox6q5riN3xxDaylQ0mFOoNeNjyM3SF4ZLO2aqBnB8Ok8D0W3AO4YOzTKdfnsC4EJ2xAZ9Cw1WOm0ZZt9MmXKKcsS_mTDk3r2miJgBlQO5LtCChcoFHAkma4qGfOf-Z87nChbgsjps8MKMIspa73pGPtPR9ijELD1GdkREB4cmQWl5eXNmj04IAwUF5clmRPOlxhYdWzGdJghcsGyyqBC4lqdk2cOc-qztBCQBTeyHuVzyRMQalxw-Mt7T3Wo5dVP9_n3IuSiPtPTAjPQCSWFTD_xpkhqJ1zI0HXNDm2QhzGfd4-j6SM50871n-d8EqochrfFpSKrnggCWCbRicfAakQ5F5NvVxQ3pz2SXrXpcDSk2MfMMVYbVEsThcI5D4yCEMasNh9-qUlQjcBrQnoAP07M94SdGAI1q8cHJ_MSSNsnMYBDlFWvU5fH4iAhlFxvKUtGYrQAsxlMcwRzkicr37PZ56AVKdB-rQDVYNBZ0JzK7wv4pv2zvnLn_-7c3nSdka1kPDqaF2eiF_rqjd8xCdZFNF7ZPB6uYAWHpXs1mM9QhL2jrPonjm0TQ-j-9jAxQN03oLln3_98uyyGonohDmhfaYQydPYv2cVbjMgRyhnaCIoneozi8tJwgaTAKQ07u98mQNXduZ8gZhJH5Pz3cQr8mSfBQKzaDptzmFpnk8J-uOeA0mein8_wP-Wi6ZenIr1-b50ZBAYjt_2jj9cnyJhgefvsz45b9oRLwp0KhZA9Dmh751JXb9v-gzHGA5NnKRsjwV4oUzf-_twAUTQTkbwZkctrUZDa-EC7lmA1HeLICP5zuN53cLhk2ggUsBbdbqJQKRxLB_efQJfNuc63O9TjE4AE_7D_fV5d6pCCU86o_-Kgq0pw_nELyo8kF-lWeKSmEcRY0HK8iwPSebHwroA3VG0qZZHSQugXvp-XpeC9Uj8XMb8qb8w5O8dhkmiu8NqwQ6dtBoRQZl7RlU2ddFeFUCXfDFflF3wZpN7F5QlBQ2TmCVeVMQ88eMsCmlKPTf2OUkCxl2acvgxKvDRPCesSDIShh4jLhUAHXoZRRCm3K2LOPsFFhqjJH3Xj0duMvLjN25yEQYXfvxb171wkRV2K45OjYyx0OMhEIj59qeniNwU1CYDKyekmaClU3gxicM0osJiF21YsZYdIR4eRInORvwNvr8tWTuBX9IU_pjw8nrSdn9Bm5-fz79Yc2y70aZREhdB6sWZG6jRWjGY3WgfD63smmNZjDp_kuYizkU0Z0VbPgja2z2IEhX6USUBFRFQuLishMSUwFNjDq7axrPNs_cS4JIuKdwi52q4VihmN9xDIixph2mKITYTAvbyZYX6VCGwKpjrTMiaZbOUXlmK8b4L1KnoooYFouJFGc_bnDqvp8CMT0Eb4winNkIqXFZNPeMYaP5r1NNm9eLuTJiYsLj8A-WgtsDgblGrw0EJd7x0eYF-B-uIOBA-_5kzA23vsjKxmhrr6AzYlVBJGW5HcFYw3lPJjLrQLXRMg4p0WWmfZxeCfCoQAwH3kkbMaNXZIb0hcq644NJVvuBTwX1hq-uVvUXVlE8LUJGaWq6xCm3HLZIkYSgCZ95DDUD2jMTAlVIRdCmowQqDVaDbAdGtemFwOJeVGiths7LFRSlxfjBwTbqORlow_ILAeb9T0AoFhXuGTeFQLitEE2CNZAQCrDLwFiQioSw0k3J-6tQScpjyVvtkexYjKjKaJ0Uch5wYNqYjcLvFOCSw1oFTs5zKJ3s2JXY9n6fEz2imxmHF3SoG1R9S27VFSApKmp94pNBzsqJsH3KnnQNo3TP_zAVDfj4hZx6YJVKpaFb4mZbiim80F6J90H0F1eI-3_0JVM8HFsdlhQavAuFxQxsLt1NEc-rg4PkCGGReA-VLKit5d6I6GhQHyzqf8Eo9lUF3BE-1GPGoi8kTmgpsZyk5SBdAqnAMyVru6uVlVXEkOmBuHyQ18-uFVJsaqXj1bHRaMJbSFORsluiNNkHHZqN7w4m7xtw48lJQo7jPtBC2Iowf7vTOscME48QqQQUShUVBNJ8uGys8qgsL7JxVZ6qpQLSCBwc5f-cTZBebl4aysMjcPEgI1WLKClDuZnNY6LFaiNGo29WdAx43mdWKocR-kLGcAJfV3NUKalaTOCRcGUd2DktdFmDBnP0B5MtYxFWUwtaezUGLhsEK37XC-cdi6ONT-CBMr_EpNEeFxTUWLHMMo4BWtD9X8ewFnxEYJKglLawPGojbKBwpLVw_C4QCqTmQiaRWi3BAjDQqHXOEt1rUNMbuGTQwRu8M5ZN6ymCYJaLBoDqipt5pKQWB067WvE8osCLLMX4AFHU1fCvy2pzRA0OmlXrmpUHAIp_HCdUswURRa4G8f_iz3EI41xVfgrYwFXJ0tgQN7U74vCsRDaP0O6FIYCgymZ4avPbGc_7yX_6bc-N3-iiQnHCfIbR2WeExtwMm1Vmy9nh8Kn1tAv8ZNzAO4JvoqBqLUIEKo1BhKztFAmm1nOF8xpKhj2_EYo_l7sPWlyAuYLTIi2GreSmCNoWzSvg_LyuLQ1X1YjV6qlM1e4ggx1S8lBReSDUNW7HialcOCPLGgUmDrI8pRiQkRUiSPNVM0QoBv88U94nd5o42Cx9hbhkHgRP6jLmxXhMrvNui1H3jsssuhgMowYobE9pnZ5TACqJaMK0JQ8bFP3AKJ8xBuxw555kSnCihJRNtsCeY2f3VAcJqpB6q4ROMAob_8Q-wcXgmJJrePS9FPOwmHB-Jrzcl2hwIZ_KWTmyloYewCEj_wGdRQn29iFbMuaXqbRtB3jVcFH6c5SzlaaRFjxVUvtYq3S1EfCbYrlQZQNPqIVs_LmiKCb-eUXOsKPJVst0vJrw5g6dgK9iK0F_vIh-NJnw6f4S6g8xPc-qyiMae0cF1dLk58XvHisuToB79NQwXnpGiWp1YpKEZ6aI7lBYgojzeagfqu0-6T5_2kBmL04BngUdAF9G6oQlIN2S2Y2C5WizQcYARFEnOtNCyYs3VYu0QM64cSwHNcoocxdPjtsLIVynnycLBFbd1wfhjQZEGqXbsWBHiFoPbN9IbzFe0XSYlCNUKGUkXQyujkIXy08UX4lE8c15z6R4wokscUSFHjBlaL6SHRPoRDD9TUd2CwoQ0Fcp_5-5XSh6e9xpsfBx6IzgsWDkLI9RPV9wzQl-0vXNCHcBJKtFcaLWxlSC2sMYvK8FNz2WraJ19hribWEQrfK-sbsi0ZLCWtl6Fk5aOCNHICJUIy7MgDD51rkZTjv6QaV2_B4nXQRzA2ytyQ8opNtdzbBIWuFEUhDQ3Is4Kwd-G_B4NpbcelXuyxZPT-nr1sV46Bu0VLMPCixPPWCEmSl8f_h1i7pUKECQ0CbwgKsy5t8LwTYbk3kH18PSiXl5PgMygc7K4k9pqidGaCsuSKuF8OZ0KwxLsoObMGQPlNZZ8OJeUOdbUSC6rhuOGt4YqFfmukpDEPz4DQwQIbDZCkhYi_ry5qyieeRABxRL0aKRIK-SF4eHR9Cv0AZuCe-guJoFXcF5QN9NOGyuHoFvXQzIC1Cprg0A45zpWoGM1UZ2GaaDC1dGxOPKW7xLfB6uGyB8E25Hu6utlia8i0o-HWpoRnYCUmr8FJneYS59LjLMkYCzNmB-pFbFSFyxevG8iAq4TGE58MQJWjbDbZSUUTUrFXxiUBiaHks_owQV-gy2pSBzJkX70DPeS7krploR10X5JR0bAtLzTZ1Gg34KlyuE4o8CHPShr6VVBG1ZE9vQwKRpzsBejMAk1nGGlTihN74BECNg7YDFbX6oyVl5sp7tExfnh1ddSHHSbg8oOSKS6wrhsq8M6F4_jzR6NrTP9s7zhZWzFN83IHWjmIgIDJR3snmVMYP9g8PLFirYuN0hE-dQ5Uj0e3C7ysMLIH9hvOATKoMC10DaFUMCqO_R_XfeRaVBEfsoyIEyjr5hckVXP7VaZH0qdB54apEWQksAzIJNOBnmozu-c2gEsUwZnjTsfk-CQkmbGeHpGZj9GpQjdbHUP6BKQNq8j0UHnk24ScCxwka4XZD5pTkHslyK4hs_wvOCjzh-XtTg90DJCQ0SgArIV4GmSZjkouJLNF-W1CrDGo_vp2WWFhKVDdTqa1RjP-HMcyBfjz2wFwuIRkvr1JgOdk_kcDqCgmPObill-tt8K95pgJd3YJc1AJ-cIRX0x7vMjUZ5itB3ITE0aVs7MDqrsxgyYR4Lu7r-36fGmguWZ1O3DjkYjjCDoTuBoJDla5z5QkVu3kzvn8kTAIwK1sjVgfuvAUZ9zcXKBybWXJ5sGIR08a8bc75OgYDhHxGPU0yq7lfxj4Ky9U3m0e99GepBpdDz_jgsNblaCWQiaS8VGGDKs4AnpNVA6zSsOB-_8xyUcmmU5ZUDhOBA4daQq2_JPwKRPHc5QB2lO1Qjm5ZyjuEQPiZCgdzIo2dLbpKjDxUcFAMaGQ2Zc6PIIKnea1CqCIkKurIAtNBjAlhE6Fa2vKxiOgxa20LgV3ivMB8N2jeCrZ-j1oX3Io5fGjBJCPDc0NqNJhrpnkm6R26TEIXpKUwaGe5hrFmzSnR5yyp2zlzrupOHdy0qRsyOuzoJ9n3L5Ugf5Cg1KmD_iFcnJ1oHAqCcwUB2lXmLwaxMAJc8est1pKaN_Z1K0wvCB3IQeI1BpoXJco27XdgexXUI_enKsLIqe7XET6iY8YsSLuDEadG6WUu0PSLWqp_gNxqYCsWEoACjQCzFekAIwVUHyMkQcER2Q_auRWXKajQCVgFqZULNlyEIHGQBvIe2k0cC_xpw7RF1q-6edJoSrC22NumQeWzK-FD0IbFOCjHiMUJW9xWMOZ70xGU7dyZAHCbdIwvXS000QubFuVRt_tmLuXi-RIEEVBBFcdzaDCOSCfYXFANZ65nwl70hzpNdH6FFS2KucI-BqoKlD39S4LoUl0Akr7eNE1oLDOxVIoBB-YBZ317LBhCYYA9JpvdpUEsqqoCds49eN1gX7aMlPo4SEYDd71PgidTadOepbZMgpl2KWoz0b-aHnavI0SXNdk7smwilR7QWgWxVRkrra2LBy47rGD8l36xQQEfc5FiwVmtCvgFRCo1PSqHaTSGr9bAUTM4rMmqhA5WLOE-K6MYnCQjsxrKS6bja9iXLKLA2zmPmEIKaspavJnTPrsmc-nBowC3Pi-9SlVAtxK0VOhTUekPaGKDWC-6_4CEQX2LxI-7qFBoMhGwVnmfyfdmXpUeETmMEcibblI9QNQMJPpRBAsaDjfRRzF6GdKNQxtsB5-WWn09aSLY3k14KN6_QZGEKfFCXc82mUFlnkG7jQZO51a7VvNp7adw8EakQpxsKoTqwEvW1U18eS7jAXRDzzuDsroEEQBkGUpzQwrgCdmGe4yRbJdopBRV4YuRE0a3QRK_9umwk-mlP3UL1eXY3HNesu-o6NwNpWkJ2SJeY79bR1v-ZI3K_p3L9dUz-Kobags6NXYzFHD7JW1y9P4Gfhxmic83Y2P5efRZzBPY1fOJk4mYFYrhspupoZQm_K8JCq_6Ma__Z-TZakse9mIUkMqGGlJ3a7dkjKYce8LM86CFzYu-WUdY6-OSfAR14LkFmGgyHzNtGFqwAb9qpDmWQUo-UHWBOD2HPyCy_PfTdxA9eEVVh5kOYY7JvGqPRpOAchCj-XaV-kldloeY_3T0tUfCYPvCzM8yTytepuZSre92TtkWZYCZflXIIEpHl_WVkbBK8VpY6_RDczELmSsGjgNB20InzDYGgJM0ACDOiWrgrQK9o-IDTNCi9M8iglTO-Zld64DZ95PDcRTqSUiOrnvM4li8FT-8iZKhKe56mb-4UJgbQyGm0_657piNyxUhtg2aQRpTZEvC_cclJfzhGKghaW-GLDoUc8LnqtoYeilZEeKG6benqD5hmIZhEAJVUoEOdgPnaokVbhUfeVTLu5FyOILS0r4Js9OwmHrkjcKEJFSksMk025h8R4mAq5bufXbPqG7Va0sFmuKM6t102GLHSHuPPXyLO8Nde2ZtFPZ1nguhHY5Lkfa73F5Hd263dIcqYEhbRnTEEMaCvD6Ubu00B7wlMx7hJHxqo1udRdBOiDrEswkzBYBQ1oLiN7VFArhpGqhEsRGDBeyXSUIX7QMyrxNYahwDT5QoQgybc6dAo06OoaFOhSjEp6o7ox9kgEMIk85ga8sCLVrDxUfZfK_kmkK4dkOQcxggIfLBxcBxw-OpFUit-pWGRjFuN-yEvhTzumIbaQaeS257gVfhAEccKi1IqINmmr2zPOvpxTcYyQPZAFnYyIdbb0l_njlJ0EaepxEnMaGco2Kav2LuyZbwot4E5oZ_mp8RiyT08tz8YGJx6iNQT0HSC9WVmhh4AqL8NlZWUz9VkEvgd2YJCGqa_hCCvXdStgfLdEVeU1jFxeRGEO2ohWEazcVdXxwYmnzoygcckdDCAV5qFZVuEP0j6bBZeuLgWFSZZ-o5w3MNNb0nQET6YizwU2TIi77meERm-FV_Za-RSFo7lC3V0403RnIhjorDe1KecxjQuXaeKzEmUt_Kk3A9bA-9zN0pi5hV5sKynW8oPsne2K4XEXMqxc5P6gZtOKDCEVYS4BVxPKfD_UXPpQNqD9Fxa0rxwpI_QgokLcef9WXFubvRI8iWkU-C4oRyYgzCTkajfK_pm2Gi_t96aFNM5cj2ZuZsI5rExcsyt7p9hW6JdF1_502eNXyoPYywvmMy80fiWTgasXZLfUWh1cGrh-RrwsjUwqjsm21ZPcP41WmAo9Xigvzdy8SPwi94yubvJrzSVyeyfOIuQohpzzCbkpMcgCkSQOLBiV2DvZojZ3nik_5o-e3qOu7e-_e_Xm2b98_eLq2as3L3_37Pmbq9ffv3iOfQGrEYND8YI4O8gaNGmn5Uz4fsEceKucrv-CaBXBpBlhpz7ot1GdvXr547Pn_3b17Nsvr758-fr519-9_uGVnNiDVOBfcEHXFBZB1_P9siKiSIlwcNz_fn0ZElllRXgyuh9elcA-F-yvXaFEKNv7FSjZqv7BrGaILLCDb6q3GqqWcJBwb96-PRHpF_CdSOw6effuYX639AJtGvma1mUu9w9zJnxLEhiTaRyNmJwFK2AemdMlkSmgpgtDEANayStTyWibJr_VUNSZRUXX5LndT_hqa2clRQWGciYXQy3wTydgT-EyIVfvPP5rk-CkeaFWALUD6O_GTqfDpO2tk-hBs8zyPEtIFJMwS4KYhkFY-JmerZ0db2eG2xnzP_090-P2twrorHrd14X_y_q0-cfuEHiaiwICUK5SL8sISQsQncwnBfFCSjg63Qs_yorCZ74bkjgkaUTzJM85SN2o4H6cC-V7w5TuXxXgeRdhcuGma64K8FOgGRjJcFXAcFXAcFXAcFXAcFXAf8yrApI4L0Lm53kSbHlVgL_dVQEvW5lAbvEtC2_f-U4A596VAKsw2h53AuiwjQ5EOPBOAEdeCYDOtOFOgOFOgOFOgDUZoWEYRHGSF4m77Z0A_nAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwHAnwN_onQBWgqjJnV5JON0-D9vK3jy4LSv3b7uc7jVCpTfPfIu2HgzKyqQ5rCErncM09Fyk4NtRA5YPY6cJW-kbhzb_YOhWEsKhbWtVS6-vCeZ_8nFbwcem7a-6uB0rkXjXtbaijvdu9yGhmWBJ06iMunOEZ10F2-06WitWcv-G5WUFdrNWqOD-zT4kNQPOm1YFOF82oDYLNU1oqfCHhdTvtCAWUP8kfazZSg1hf5wOLNeo6eAb6bpZ9Y_uujaWJ_SAlh9e12G8e0_ZrOXMecpmLWPGIu0arFlQ8xa7LqllzOzYmtYWVVNWQrhpyrTQgat4p4h0rB2YMd638iYlfNuRPJIzrls2qck7tNybu6zlgUlU3rbpQzKZd72-pn8kh-Su9p5Mndm39UgOSf3rUQWslLRdaGrbnDU9Y5OgtgcV7JzB1qc8m_S0Hdd-v_y1nrW3ss62HcohaWl9VoDJvNpxUZ4sNUsNxcrD2npRDkjU6lkUKwthl5Hsm6bQMxIr6H_r03NAVkCvuahD3ncUQVvFxBtrWQfA78Eudo6Q7yMCE8j9lCdjY6R3z8mwwp23p8f946H75JcJ8duBCraIAdQasQn427aDXSMCtaVmwv-27eqQ-MAeRdMK3dt2JL2xfZpuTCDfDjPcM9JPMwoT1rdtp4fE_fVpzSZobtuR7BtVp7q0QuiehGk8FmPXwzSs-LkdjuoWAXZaXptouieZ66Phdj2TtWLEth3LIUFkfd4IE6-1w7LvG9ClbS0TE7Btr4cEDfQdOgPhPwlVPI7x9-nZBqTfaVn2RPH7nBwGSX-SZdkRatdMweDqWw_jYOC9j1oM2rq95Nsfju3zXhu4dQdZuTce26cNGMB1-zXZDZHVHi4Dv24_6f3x2Z5JWzDs1lrDATjtyVaXYlvQ3cabqF9xac0tF120nQj2EqnyQISIvyo_yalaDUkQMiCNdHbgJpjvqP1akOBR-93m8vGP0a-FNh61XwucPGq_Fmp51H4tRPO4-2vQzqP2ayGhx11ng5Qed50NmHrUfi2s9aj9WmDscffXwLXHlQsGwj0yXWlk97j82QC-x52vgYOPK38NXnxceWQA5eOeI4M4H7VfC5s-ar8WkP1An_6Y22tQ66N2ayDtY3Zrwd3H7PZhtZzjdGuA7GN2a4HWR52tAbGP2a2FWB_33Gp0-pjdWlD0Mbu1YOdjdmthzMfs1gKUj7q3Bj0-KrswaPJR99ZAx0dlFwYmPi5z1JjwMbu1kOJjdmuhxkflyQYiPipJGQT5qOzCYMhHXWQDGB-zWws0Pq4E0gDxUeWtgY2Pem4NQnxULmXg4KMaIwYPPuoBMuDvUbs1MO8xu7Uw3aOeW4PhHnWRDVR7VEo2uOxRZ2tA2GN2awGyR7UKDPr60btdV3IXkyHkXedFUVIRdbMC5sq3R0W5aORt3Zw0GMeItxVTUu1UbjfzSeHStPBgg2kSUEoozxh1N5Xb1dVVHy-3O6R6DqmeQ6rnkOo5pHoOqZ5DqueQ6jmkeg6pnkOq55DqOaR6DqmeQ6rnkOo5pHoOqZ5DqueQ6jmkeg6pnkOq55DqOaR6DqmeQ6rn8VM97yGCwDayPM8SEsUkzJIALNMgLHx0l6BGLW631T7ECz841WO8CN1fThXkaGOF2ItUS7EPo_arj1cdl1ODmF5xPyu8FBQKNw9TQjwGmlVQUFQUm7por6xL3MUbTe5dpH7mhRlP8zgvwsyNwsBnSZH7UeLyNCGBF_MsC1yaxV5CvCD1WMJSkuR-nkRJkbnbThCfOPFdPx65yciP33jeRZRceOFvXffCxVbMCiQRc4MiC07sdfnpKa7uleVjBd6qbs0uvJjEYRpRoYXJC6U5TRIvtwp2fD4H9REU3X-6PKEc63ldnnyB0uTzcnbtNAsK35Om4W1zPq2v67Pm5hr4GZm28L1lbuJv8P1tydoJ_JKm8MeEl9eTtvsL2vz8fP5F7z3ucQF7EGeurnEF88yyjNsV85wVjLenWl7ik4jwIufENdWDNf78sCbmtSifa5cqcuxKRUTWXhSHXN17L7i8LNredCWjVQlSYPh4imQ5y99bBQ97LgAPSFD4bpaDJNDXrVswt1XcCdoTDc95Pe_qyAuHSleakD8sQqTrUysTDW_dpp0v6FZUdzLVHbuKHA3FK59FXUhxUT06drGO5YzzVpY5lvELM1iLvgv6C8ZSmgLZZokpEK0Rd3NBf68rXddVdN00d_3Qi_VN8Bbk3jX2SlZGapSjNDjFPZDj_RbBCC_9bU-pB8pCOP15kBCqq2wluQcckD6sWYS3-itH9GiEZTtHjN9YOkq_w3o06tjAzn7tx0qF-WEUA4dISaErF1oxBWoSouGxmkFj6lw6oObN264YQVfpaGxVhj4HTbgsQNaKymjjM-cHrO4y1kMUSsD41BlTIfrHorbpGPoYC8tC-W1NNe3unvEeSmIRS0Ie8JhxX9flMtENVhm8Phh_M3ERPwPLwc2oT0zJFRPeoIhrKWosNboeVCPLZ2jWAbOzOQeygz5i8zmoHYT5ua87teIediiSvd7T_Fer3ScrLWmX0BGq48VpGAaJz6M01QLPCvOwKnl1K2Y5yqXrTA1WT7rzX3VVviYlaHumQBrWElAMf8uKeNJ8bKSFvUbYXFZ71MVz0yAPcx7FYaCPuhWCYs7F-lCRzQciykDLABU3Jolm3VYMiioIwTvZouvNyQV5I4pB03JeyopRXUGXClQW5w4WawWz6UoFnF5WWLZduLpktZKeowPGgRtFQUjzWNerIAWoRkFBti3JU2Hl4Habg1DORAW8LZ4EZWiXmo5BBGwnKfyCeKbstI7JsaoNbghy2bx_QZyA3p4AvzR1cK2onK7pn51XYJRw52dZd1wpND9fVj-PRiPxH3xUvf8s9lVAj7YLYCbr_8gq77reOnJIWXUOWNJSFGUS9Stk6853pixJ166aVuefl7A3HpHOelWq18_rIoQUWUSpD6LPD3iiOaoVNKTIYkP9nE776RDulVI62tyWsTMrRZFAfHNZZlvqSrISuq7bk8tKI9KrZsklMVd46QZ0cCzm3Vf31nVDFiVJGtItqsf3Bvz0UAxIP5YnDIwEd79S8qaC_Iba8YLTCaUSVuay6irH68LBm-rES4zwuSzMij6NruS7Y1V8v6y6ku9a7X2k5DsN46TwSMFdwj5GyfeuUHI3O6zwDhLjYRl4p78K_GvO5ezezjv4SJHTo_VpBL2tUPICnUJ9ShawHhIlPAWlva_4qbMp3KlHnOSMFCGYdPDv5mKnmwqYnjm_w_jmU1Ezc30NU1XB1K5ciqUtBeMWIlfV1exI8h-igKkfsKCgkcui1N1cwFRWDSWqOiksjqg52lXClAwLgwNEdSZR6NtUPnSG6qAfuzqoR-MQLDUCzDbZXB30Ndj0I83cNBRzv6jnmfOdNK6kSmqKdUrZBkOxi21-ZnYay1gLN-K9Kp59RZmzIPSSxE8fq79nRx5u5hFFlNAk9X1GOe0rwPf2dyVY2sAuUXPR4lQ5WRmf1e8-4R8IMj2Q8t3vo-53yw2KpfTefrniL52R-QNvqXjshalftktBMvHu96ucG0joUd4t3ntm2-LwTudmNyO770keCpD9gxQgWxtzu64twthxYm8pqAReEcd7jOjNpKzeO8_9758JjcTYt6hSX1ga8akyybqQUqDCp72MslYJWjAFKnyli2XTjqbkTlSPbfk16utCcRdFKXe9ePJ5DZYAVR6PBw2iuqLZlQnVkWbNY9cSqXXtmw5wsuVUbPTI3lZHHnRhv87gubNNO7tFV2IbCehl9XVXy5V_mIOYwzr0YjG1tUNBfyXtprQ2VUdWuIZaLEh6jXV5HyzZ7QStJAyDRuMLn5bsRc9ZOMCtHLidEt7A7k58sL4jz0vhYxHlHISXqNG9NuFNQzh_vwlvA2vZzFq2T4fU2KAc04V_aqOEv6yH_Y4CfGZ56BMauGGY-fCfGxAvpkXux0URuGB8FZQWseuCxp7FYZxlcZrHnEepF6IuJ9t-bHIPQE__wg0vvGgN6ElZ7KVekA-g50cGPTlFRkZy7vaBnr_5DXraBKd2pNjDcwNSoy3n8u9nL89-85uecsxpwOOCBXlIos1A5b3chcqp57w6lZbXqJIB4V3R9gdA6opr_LJaAWKVQ3wzxIp-OZk0o71Syvkk2xKR8Fv4m5y2lD49lDnITnrsoKjIaJ4ACwu5Kd9s-Gy3KIewT0u094IBWZgQF8ynWB8Ai7tqEGR_pokQAlgks7IVOHKnu8B2yDBqoZvhI6J19DvBkPNyWrbo5odDhz47ob83k3IunF3KOXVZdQG2A5w8wMkDnDzAyQOcPMDJA5w8wMkDnDzAyQOcPMDJA5w8wMkDnDzAyQOcPMDJf6NwchKFPlAv3wPJePuf3qL7p1N53n2irlgpZ9dnzaTkU9aclfU5PHN-Y6ma6J7-9CnQnk3I0XrA1ZroeszwmUiNg9GeOs9fSk0MmRfoYkJnWzaY5Pu-ETpFZ8IvxAkWbpt-JHQN7ir2gmnBU1cK6pSp9MZ5KrRq0F_w6GxAJgmr561-CPNahb8BSAcYjmoeBPD1UucoLxdAlGhoVKCZoXY_J_S9-jVfllPWzXoncDKmzAviiJI8pZHH8yTnRZrxdBM4qaGWx8HJf0xC3R7cvY9weTbC5f2yHsA6CnwX0jRnCYkT1-UhzWhRBGkUcC_zEi_ywjDwsoT5KU94ErokZV6ecphCCjY-DbMi2WZya-A7L1sP37muTzlx-QDffWT4Lg9DEuR-FsncU6n0mlPaNXfI4TNP397ensEjf2jEzV0dr7IeB3UBOnr-0ryxzUVfzXl3kfG5ujijOafl2d1seo53sPF7gzisSTnEr6VIuXCewSQmfOSfuRvXRIzhvBNCo-4FfGOUT5dqcF-_fP7i29cvPt287QPM-teDWVmSRjEo8xEP_I8Fs2rdYABZB5B1AFkHkHUAWQeQdQBZB5B1AFkHkHUAWQeQdQBZB5B1AFkHkHUAWQeQ9e8QZF1IkBVdrR8TaG34tLhCP_zi6VHWncusVctZznFR3749CfDW3uDM82Bx3p542Ijvn7x799cpRGZZP3sX9XrQqCXtDihQ9LAwhZEOT9nsoZWK1gPUFo30ZOtKFauTGwsQ-dJo0YB0B_bifoBSQsqFuJxa1Fmk8g7bs02kcsReLSI6Yq8WlR2xV4sIjzlXQ6Mfu9d1EQl0r6a1t2q1j51CEJI4izOwtpKQ8jT1QGvN8szzNxYE1XDx4yEIAxcfuPgKF98--mXNxczxL-ujFo4TsxEWiR8HOYOTEmRxypgbc0LiLIGT4_uhW7i5F5MsTqIC9GVWkIJEDFPLgyiLC3_zlB5EagQXbrI-UiMtCsLcMB4iNYZIjSFSY4jUGCI1hkiNXSI1fPRcxcQtvDzZIVIDdLDf3o_W8P0hWmOI1vibiNZw_SQmKejnru89Gq3RRyK9MRt9L66L3OilxSPEb_T1P0RxDFEcvVEccRL4QQZGZJb4j0Zx9FHa2liO3hfWRHT0PT_EdQxxHUNcxxDXMcR1_APEdUQBSxiYI26UF4_GdfRJhf8Q0R2Fm8Zgg7upSx6N7thBe7WiIx5d4r9ipMcO-u0Q77FbvEfCCzClgH9kRtsf4j164j3EU89xLCJGorp-98nz77598-rlv_zw5uW3vxfC4f_8b3hEiGVQWeH3r559-_sXX3-nfsTT8fY1zG1RtiBqXr94_sOrl2_-zbyKxg96meoKr3nGDr58cfXd766goy9_eP5myO1_gqgTS3O1EK71lsBeOfVWB5tB5ikR3Ev4iB-W-5Umg-AQYEkoh3JzV9GuBiS8hYns6iptrYygIQYq3gh0cfUW6KvqZu8NsHTDcTr28VZGiNC9hLAX_L6e40aB-qD6Blpdo9XLjnfCpwvXBc4Thzzy_DwP0iiMwM6K0ocrJhzj-qpye2VQMee8S3NXQLZG0x4Hsp-WMLYH4NdAhquZ6wYRPAoKGnHqZT5PEliOCIyjMPNCj_lJFBcFC3juRn4aJUHgJqlfZBGoSGEW-BlJch5EvudvntIDFDS8CPyLcF2NXc8rXEbjocbugIIOKOiAgg4o6ICCDijogIIOKOiAgg4o6ICCDijogIIeGQXlJC6SMASbMPE-Lgr6vebEOOYGqF7QPONzPCQgP8r2AtspF3qdBEbKN6OkqHjbfOaZ03Iyk8o5mTa1c0vQbQ3qMLp2-L1RSk1-hkbFYole7V6Of1fRsfbQTO8-E_aB2roxmF-w6s1kbCG9-Lfk8NJ9hRxzAG4H4HYAbgfgdgBuB-B2AG4H4PYfEbh998v_B4IL3CY)
@@ -0,0 +1,6 @@
1
+ <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Proofpress — on dark</title>
3
+ <desc>A light document outline with a teal proof point, for dark backgrounds.</desc>
4
+ <rect x="7" y="4" width="28" height="36" stroke="#F0EEE8" stroke-width="3"/>
5
+ <circle cx="35" cy="36" r="9" fill="#4AAEC2"/>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <title>Proofpress — on light</title>
3
+ <desc>A dark document outline with a teal proof point, for light backgrounds.</desc>
4
+ <rect x="7" y="4" width="28" height="36" stroke="#101013" stroke-width="3"/>
5
+ <circle cx="35" cy="36" r="9" fill="#2E8FA3"/>
6
+ </svg>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "proofpress",
3
- "version": "0.1.0-alpha.2",
4
- "description": "Verifiable revision provenance for Markdown and static HTML knowledge artifacts",
3
+ "version": "0.2.0",
4
+ "description": "The trust layer for multiplayer AI: an open, agent-native ledger for knowledge artifacts",
5
5
  "license": "Apache-2.0",
6
6
  "bin": {
7
7
  "proofpress": "bin/proofpress.js"
@@ -20,7 +20,7 @@
20
20
  "prepublishOnly": "npm test && npm run pack:check"
21
21
  },
22
22
  "engines": {
23
- "node": ">=18"
23
+ "node": ">=22"
24
24
  },
25
25
  "keywords": [
26
26
  "provenance",
@@ -36,5 +36,9 @@
36
36
  "homepage": "https://github.com/chenmingtang830/proofpress#readme",
37
37
  "bugs": {
38
38
  "url": "https://github.com/chenmingtang830/proofpress/issues"
39
+ },
40
+ "publishConfig": {
41
+ "access": "public",
42
+ "provenance": true
39
43
  }
40
44
  }