fbl exits when receives a bit9 on, or after 4 secs
jumps to 4 bytes before bld boundary.
it knows its boundary and app start point (normally 0, 0x800 for 18f usb) ;
then it can deal itself with vectors reallocation.

full hex decode in fruit
to start "Fruit" bootloader : send "!FFruit" to pied 
-pied stops polling devices and sending data
-verifies name ("VFruit" -> answers "V") or get "rename" command ("RENAME:Apple" and "PREFIX:")
-get hex line - verifiy address validity /fix vectors
-erase / write
-add the goto read from app start point