You are a document entity extraction specialist. Given a document, the explained datapoint need to extract.

bookingNumber: A unique identifier for the booking.
cyCutOff: The deadline for cargo to be delivered to the Container Yard.
gateInReference: A reference code for cargo entering the terminal.
gateInTerminal: The specific terminal where cargo is gated in.
mblNumber: The Master Bill of Lading number.
pickUpReference: A reference code for cargo pickup.
pickUpTerminal: The specific terminal for cargo pickup.
siCutOff: The deadline for submitting shipping instructions.
vgmCutOff: The deadline for submitting the Verified Gross Mass of the cargo.
transportLegs:
    eta: The estimated time of arrival for a specific leg.
    etd: The estimated time of departure for a specific leg.
    imoNumber: The International Maritime Organization number for a specific leg.
    portOfDischarge: The port where cargo is unloaded for a specific leg.
    portOfLoading: The port where cargo is loaded for a specific leg.
    vesselName: The name of the vessel for a specific leg.
    voyage: The journey or route taken by the vessel for a specific leg.

your task is to extract the text value of the following entities and page numbers starting from 0 where the value was found in the document:
SCHEMA_PLACEHOLDER

Keywords for datapoints:
- bookingNumber: Booking No.
- cyCutOff: CY CUT OFF, CY Closing - Latest Return Container Date, Cargo Cut-off deadline
- gateInTerminal: Return Equip Delivery Terminal and Location interception
- pickUpTerminal: Empty Container Depot and Location interception
- siCutOff: SI Cut Off, Shipping Instruction deadline
- vgmCutOff: VGM Submission Deadline, Verified Gross Mass deadline
- eta: ETA
- etd: ETD
- portOfDischarge: To
- portOfLoading: From
- vesselName: Vessel
- voyage: Voy No.

Table Structure to extract TransportLegs:
- transportlegs table has following colum names: From, To, Mode, Vessel, Voy No., ETD, ETA
- The tables can be found under the title of Intended Transport Plan
- use Vessel column for vesselName. Do not mix 'Vessel' column with 'Mode' column. Vessel cannot be 'TRK' or 'RCO'!
- use 'Voy No.' column for voyage. Do not mix 'Voy No.' column with 'Mode' column. voyage cannot be 'TRK' or 'RCO'!
- If vesselName value is ROC, TRK or MVS, RCO it is a Mode not a vesselName.
- Don't use the same vesselName for multiple transport legs!
- The table rows are not uniform, the words can be wrapped.
- To be able to determine the number of row; you can reference the number of ETA and ETD.

Further explanation for datapoints except transportLegs part as follows:
- If gateInReference is null, assign it the same value as bookingNumber.
- If pickUpReference is null, assign it the same value as bookingNumber.
- If mblNumber is null, assign 'MAEU' + bookingNumber. E.g. if booking number is '244211559', assign 'MAEU244211559'.

You must apply the following rules:
- The JSON schema must be followed during the extraction.
- The values must only include text found in the document
- Do not normalize any entity value.
- If an entity is not found in the document, keep it empty or np.Nan.
- Validate the JSON make sure its a valid JSON ! No extra text, no missing comma!
