"""Place beside manifest.json and all downloaded parts; run python assemble.py."""
from pathlib import Path
import hashlib,json
root=Path(__file__).resolve().parent
manifest=json.loads((root/'manifest.json').read_text(encoding='utf-8'))
for item in manifest['downloads']:
 if not item.get('parts'):continue
 out=root/item['name']
 with out.open('wb') as dest:
  for part in item['parts']:
   p=root/part['name'];data=p.read_bytes()
   if hashlib.sha256(data).hexdigest()!=part['sha256']:raise ValueError('Hash mismatch: '+p.name)
   dest.write(data)
 if hashlib.sha256(out.read_bytes()).hexdigest()!=item['sha256']:raise ValueError('Reassembled hash mismatch: '+out.name)
 print('Verified',out.name,out.stat().st_size)
