Compare commits

..

No commits in common. "main" and "feature/skyscan-rssi" have entirely different histories.

3081 changed files with 9 additions and 109721 deletions

7
.gitattributes vendored
View File

@ -1,7 +0,0 @@
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.svg filter=lfs diff=lfs merge=lfs -text
*.step filter=lfs diff=lfs merge=lfs -text
*.wrl filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text

3
.gitignore vendored
View File

@ -11,9 +11,6 @@ build/
*.so
.ruff_cache/
# Documentation site (separate repo: warehack.ing/birdcage-docs)
site/
# PlatformIO
.pio/
.pioenvs/

167
CLAUDE.md
View File

@ -688,170 +688,3 @@ Last resort only. 5/16" socket + 6" extension into auxiliary drive hole. Turn cl
## Testing
No hardware-in-the-loop tests yet. Protocol implementations can be mocked for unit testing — `FirmwareProtocol` is an ABC with clear method contracts.
## Documentation Site
| Property | Value |
|----------|-------|
| Repo | `git@git.supported.systems:warehack.ing/birdcage-docs.git` |
| Local path | `site/` (separate git repo, not a subtree) |
| Framework | Astro + Starlight |
| Domain | `birdcage.warehack.ing` |
| Server | `warehack-ing@warehack.ing:~/birdcage-docs/` |
| Container | `birdcage-docs` (caddy:2-alpine serving static files) |
### Workflow
```bash
cd site/
# Local development with HMR
make dev # Sets APP_ENV=dev, starts Astro dev server on :4321
# Production build + deploy
make prod # Sets APP_ENV=prod, builds static site, serves via Caddy on :80
# Other commands
make logs # Tail container logs
make rebuild # Down + up with fresh build
make clean # Remove containers + images
```
### Make Targets
| Target | Description |
|--------|-------------|
| `up` | Build and start container |
| `down` | Stop container |
| `logs` | Tail container logs |
| `rebuild` | Down + up with fresh build |
| `dev` | Switch to dev mode (Astro dev server + HMR) |
| `prod` | Switch to prod mode (static build + Caddy) |
| `clean` | Remove containers, images, and volumes |
### Deploying Updates
```bash
cd site/
git add . && git commit -m "description"
git push origin main
ssh -A warehack-ing@warehack.ing "cd birdcage-docs && git pull && make prod"
```
TLS is automatic via caddy-docker-proxy (ACME + Vultr DNS challenge). New subdomains take ~2 minutes for certificate issuance.
### Screenshots
TUI screenshots live in `site/public/screenshots/` (the site repo, not the main repo).
An automated capture script uses Textual's Pilot API to render each screen in demo mode.
**Regenerating all screenshots:**
```bash
cd tui && uv run python scripts/capture_screenshots.py
```
This captures 8 SVG + 8 PNG screenshots plus a 2×3 collage:
- `tui-dashboard` — F1 action cards
- `tui-control` — F2 Manual mode with compass rose
- `tui-craft-search` — F2 Craft mode with satellite search results
- `tui-craft-tracking` — F2 Craft mode tracking the Moon
- `tui-signal` — F3 Monitor mode with RSSI gauge and receiver info
- `tui-system` — F4 Hardware mode with firmware ID and A3981 diagnostics
- `tui-console` — F5 overlay with serial console
- `tui-camera` — F6 overlay with capture triggers
- `tui-collage` — 2×3 montage of 6 main screens (via ImageMagick `montage`)
**Dependencies:** `rsvg-convert` (SVG→PNG), `montage` (collage).
**When to regenerate:** After any UI change that affects widget layout, button labels,
or screen content. The script populates Craft search results and tracking state
directly via widget API for deterministic screenshots.
## TUI
| Property | Value |
|----------|-------|
| PyPI | [`birdcage-tui`](https://pypi.org/project/birdcage-tui/) |
| Source | `tui/src/birdcage_tui/` |
| Entry point | `birdcage_tui.app:main` |
| Framework | [Textual](https://textual.textualize.io/) |
| Screens | Dashboard (F1), Control (F2), Signal (F3), System (F4), Console (F5), Camera (F6) |
### Running
```bash
# Published package (from PyPI) — no clone needed
uvx birdcage-tui --demo # demo mode, base install
uvx birdcage-tui # hardware mode (needs serial port)
# With camera capture support (Pillow + astropy)
uvx --with 'birdcage-tui[camera]' birdcage-tui --demo
# Local development
uv run --directory tui birdcage-tui --demo
```
### Extras
| Extra | Install | Packages | Purpose |
|-------|---------|----------|---------|
| *(base)* | `uvx birdcage-tui` | `winegard-birdcage`, `textual` | Full TUI, all screens, demo mode |
| `camera` | `uvx --with 'birdcage-tui[camera]' birdcage-tui` | `Pillow>=10.0`, `astropy>=6.0` | F6 camera overlay: JPEG capture frames with annotated demo images (Pillow), FITS export for radio astronomy pipelines (astropy) |
**Graceful degradation:** The camera screen (F6) works without the `camera` extra — it
falls back to writing minimal JPEG headers directly. Pillow adds annotated demo frames
and proper image processing; astropy adds FITS file export for integration with DS9,
CASA, and other radio astronomy tools.
## MCP Server
| Property | Value |
|----------|-------|
| PyPI | [`mcbirdcage`](https://pypi.org/project/mcbirdcage/) |
| Source | `mcp/src/mcbirdcage/` |
| Entry point | `mcbirdcage.server:main` |
| Tools | 36 (connection, movement, signal, system, satellite, console) |
| Resources | 5 (`birdcage://config`, `position`, `firmware`, `motor-dynamics`, `el-limits`) |
| Prompts | 3 (`setup_wizard`, `satellite_tracking_guide`, `rf_sweep_guide`) |
| Tests | `mcp/tests/` — 49 tests against DemoDevice via `run_server_async` |
### Running
```bash
# Published package (from PyPI) — no clone needed
uvx mcbirdcage # demo mode auto-detected
BIRDCAGE_DEMO=1 uvx mcbirdcage # explicit demo mode
# Local development (from repo)
BIRDCAGE_DEMO=1 uv run --directory mcp mcbirdcage
# Hardware mode
BIRDCAGE_PORT=/dev/ttyUSB2 uv run --directory mcp mcbirdcage
```
### Adding to Claude Code
```bash
# Published package (recommended)
claude mcp add mcbirdcage -- uvx mcbirdcage
# Local development
claude mcp add mcbirdcage -- env BIRDCAGE_DEMO=1 uv run --directory mcp mcbirdcage
```
### Environment Variables
| Variable | Default | Purpose |
|----------|---------|---------|
| `BIRDCAGE_DEMO` | `false` | Enable demo mode (DemoDevice + DemoCraftClient) |
| `BIRDCAGE_PORT` | `/dev/ttyUSB0` | Serial port for hardware mode |
| `BIRDCAGE_FIRMWARE` | `g2` | Firmware variant (`g2`, `hal205`, etc.) |
| `BIRDCAGE_CRAFT_URL` | `https://space.warehack.ing` | Orbital prediction API |
### Testing
```bash
cd mcp && uv run pytest tests/ # 49 tests via FastMCP run_server_async
uv run ruff check mcp/src/ # Lint
```

View File

@ -1,72 +0,0 @@
# winegard-birdcage
Serial control library for Winegard motorized satellite dishes, repurposed for amateur radio satellite tracking.
Turns surplus RV/marine satellite TV antennas into steerable ground station dishes via RS-485 or RS-422.
## Install
```bash
pip install winegard-birdcage
```
## CLI Tools
Two entry points are included:
**birdcage** -- antenna control and rotctld server:
```bash
birdcage init --port /dev/ttyUSB0 --firmware hal205
birdcage pos
birdcage move --az 180.0 --el 45.0
birdcage serve --host 127.0.0.1 --port 4533 # rotctld for Gpredict
```
**console-probe** -- automated firmware exploration:
```bash
console-probe --port /dev/ttyUSB0 --baud 115200 --discover-only --json report.json
console-probe --port /dev/ttyUSB0 --baud 115200 --deep --wordlist wordlist.txt
```
## Supported Hardware
| Variant | Connection | Baud | Motor Command |
|---------|-----------|------|---------------|
| Trav'ler (HAL 0.0.00) | RS-485 / RJ-25 | 57600 | `a <id> <deg>` |
| Trav'ler (HAL 2.05) | RS-485 / RJ-25 | 57600 | `a <id> <deg>` |
| Trav'ler Pro | USB A-to-A | 57600 | `a <id> <deg>` |
| Carryout | RS-485 / RJ-25 | 57600 | `g <az> <el>` |
| Carryout G2 | RS-422 / RJ-12 | 115200 | `a <id> <deg>` |
## Architecture
```
protocol.py -- FirmwareProtocol ABC + per-variant subclasses (HAL205, HAL000, G2)
leapfrog.py -- Predictive overshoot compensation for mechanical motor lag
antenna.py -- BirdcageAntenna: high-level control wrapping protocol + leapfrog
rotctld.py -- Hamlib rotctld TCP server (p/P/S/_/q) for Gpredict integration
cli.py -- Click CLI: init / serve / pos / move
```
## Related Packages
| Package | Description |
|---------|-------------|
| [birdcage-tui](https://pypi.org/project/birdcage-tui/) | Six-screen terminal UI for dish control |
| [mcbirdcage](https://pypi.org/project/mcbirdcage/) | MCP server for AI-assisted dish operations |
## Documentation
Full hardware details, wiring guides, firmware command reference, and NVS tables:
**[birdcage.warehack.ing](https://birdcage.warehack.ing)**
## Credits
- **Gabe Emerson (KL1FI / [saveitforparts](https://github.com/saveitforparts))** -- original Trav'ler, Trav'ler Pro, and Carryout rotor scripts
- **Chris Davidson ([cdavidson0522](https://github.com/cdavidson0522))** -- Carryout G2 sky scan and rotator control
## License
MIT

File diff suppressed because it is too large Load Diff

BIN
docs/A3981-datasheet.pdf (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,231 +0,0 @@
(kicad_symbol_lib
(version 20211014)
(generator https://github.com/uPesy/easyeda2kicad.py)
(symbol "A3981KLPTR-T"
(in_bom yes)
(on_board yes)
(property
"Reference"
"U"
(id 0)
(at 0 24.13 0)
(effects (font (size 1.27 1.27) ) )
)
(property
"Value"
"A3981KLPTR-T"
(id 1)
(at 0 -21.59 0)
(effects (font (size 1.27 1.27) ) )
)
(property
"Footprint"
"A3981-ecad:TSSOP-28_L9.7-W4.4-P0.65-LS6.4-BL-EP-1"
(id 2)
(at 0 -24.13 0)
(effects (font (size 1.27 1.27) ) hide)
)
(property
"Datasheet"
"https://lcsc.com/product-detail/Motor-Drivers_ALLEGRO_A3981KLPTR-T_A3981KLPTR-T_C163315.html"
(id 3)
(at 0 -26.67 0)
(effects (font (size 1.27 1.27) ) hide)
)
(property
"LCSC Part"
"C163315"
(id 5)
(at 0 -29.21 0)
(effects (font (size 1.27 1.27) ) hide)
)
(symbol "A3981KLPTR-T_0_1"
(rectangle
(start -12.70 21.59)
(end 12.70 -19.05)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type background))
)
(circle
(center -11.43 20.32)
(radius 0.38)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(pin unspecified line
(at -15.24 16.51 0)
(length 2.54)
(name "SENSA" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 13.97 0)
(length 2.54)
(name "STRn" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 11.43 0)
(length 2.54)
(name "DIR" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 8.89 0)
(length 2.54)
(name "OAP" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 6.35 0)
(length 2.54)
(name "OSC" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 3.81 0)
(length 2.54)
(name "SDI" (effects (font (size 1.27 1.27))))
(number "6" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 1.27 0)
(length 2.54)
(name "AGND" (effects (font (size 1.27 1.27))))
(number "7" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 -1.27 0)
(length 2.54)
(name "REF" (effects (font (size 1.27 1.27))))
(number "8" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 -3.81 0)
(length 2.54)
(name "SCK" (effects (font (size 1.27 1.27))))
(number "9" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 -6.35 0)
(length 2.54)
(name "VDD" (effects (font (size 1.27 1.27))))
(number "10" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 -8.89 0)
(length 2.54)
(name "OBP" (effects (font (size 1.27 1.27))))
(number "11" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 -11.43 0)
(length 2.54)
(name "MS1" (effects (font (size 1.27 1.27))))
(number "12" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 -13.97 0)
(length 2.54)
(name "MS0" (effects (font (size 1.27 1.27))))
(number "13" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at -15.24 -16.51 0)
(length 2.54)
(name "SENSB" (effects (font (size 1.27 1.27))))
(number "14" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 -16.51 180)
(length 2.54)
(name "VBBB" (effects (font (size 1.27 1.27))))
(number "15" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 -13.97 180)
(length 2.54)
(name "DIAG" (effects (font (size 1.27 1.27))))
(number "16" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 -11.43 180)
(length 2.54)
(name "SDO" (effects (font (size 1.27 1.27))))
(number "17" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 -8.89 180)
(length 2.54)
(name "OBM" (effects (font (size 1.27 1.27))))
(number "18" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 -6.35 180)
(length 2.54)
(name "STEP" (effects (font (size 1.27 1.27))))
(number "19" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 -3.81 180)
(length 2.54)
(name "VREG" (effects (font (size 1.27 1.27))))
(number "20" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 -1.27 180)
(length 2.54)
(name "PGND" (effects (font (size 1.27 1.27))))
(number "21" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 1.27 180)
(length 2.54)
(name "VCP" (effects (font (size 1.27 1.27))))
(number "22" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 3.81 180)
(length 2.54)
(name "CP1" (effects (font (size 1.27 1.27))))
(number "23" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 6.35 180)
(length 2.54)
(name "CP2" (effects (font (size 1.27 1.27))))
(number "24" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 8.89 180)
(length 2.54)
(name "OAM" (effects (font (size 1.27 1.27))))
(number "25" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 11.43 180)
(length 2.54)
(name "ENABLE" (effects (font (size 1.27 1.27))))
(number "26" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 13.97 180)
(length 2.54)
(name "RESETn" (effects (font (size 1.27 1.27))))
(number "27" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 16.51 180)
(length 2.54)
(name "VBBA" (effects (font (size 1.27 1.27))))
(number "28" (effects (font (size 1.27 1.27))))
)
(pin unspecified line
(at 15.24 19.05 180)
(length 2.54)
(name "EP" (effects (font (size 1.27 1.27))))
(number "29" (effects (font (size 1.27 1.27))))
)
)
)
)

View File

@ -1,54 +0,0 @@
(module easyeda2kicad:TSSOP-28_L9.7-W4.4-P0.65-LS6.4-BL-EP-1 (layer F.Cu) (tedit 5DC5F6A4)
(attr smd)
(fp_text reference REF** (at 0 -6.87) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value TSSOP-28_L9.7-W4.4-P0.65-LS6.4-BL-EP-1 (at 0 6.87) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -4.92 1.77) (end -4.92 -1.77) (layer F.SilkS) (width 0.15))
(fp_line (start -4.92 -1.77) (end 4.93 -1.77) (layer F.SilkS) (width 0.15))
(fp_line (start 4.93 -1.77) (end 4.93 1.77) (layer F.SilkS) (width 0.15))
(fp_line (start 4.93 1.77) (end -4.92 1.77) (layer F.SilkS) (width 0.15))
(pad 15 smd oval (at 4.23 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 16 smd oval (at 3.58 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 17 smd oval (at 2.93 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 18 smd oval (at 2.28 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 19 smd oval (at 1.63 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 20 smd oval (at 0.98 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 21 smd oval (at 0.33 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 22 smd oval (at -0.32 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 23 smd oval (at -0.98 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 24 smd oval (at -1.63 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 25 smd oval (at -2.28 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 26 smd oval (at -2.93 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 27 smd oval (at -3.58 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 28 smd oval (at -4.23 -2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 14 smd oval (at 4.23 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 13 smd oval (at 3.58 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 12 smd oval (at 2.93 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 11 smd oval (at 2.28 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 10 smd oval (at 1.63 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 9 smd oval (at 0.98 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 8 smd oval (at 0.33 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 7 smd oval (at -0.32 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 6 smd oval (at -0.98 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 5 smd oval (at -1.63 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 4 smd oval (at -2.28 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 3 smd oval (at -2.93 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 2 smd oval (at -3.58 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 1 smd oval (at -4.23 2.87 0.00) (size 0.34 1.75) (layers F.Cu F.Paste F.Mask))
(pad 29 smd rect (at 0.00 0.00 0.00) (size 5.50 3.00) (layers F.Cu F.Paste F.Mask))
(fp_circle (center -4.85 3.20) (end -4.82 3.20) (layer F.Fab) (width 0.06))
(fp_circle (center -4.23 3.60) (end -4.08 3.60) (layer Cmts.User) (width 0.30))
(fp_circle (center -4.85 2.87) (end -4.70 2.87) (layer F.SilkS) (width 0.30))
(fp_circle (center -4.23 1.02) (end -4.08 1.02) (layer F.SilkS) (width 0.30))
(model "/A3981-ecad.3dshapes/TSSOP-28_L9.7-W4.4-P0.65-LS6.4-BL-EP-1.wrl"
(offset (xyz 0.000 -0.000 -0.000))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More