import Control.Applicative
import Control.Monad
type Vector = [Double]

main = do
    line <- lines<$>getContents
    mapM_ func line

func :: String -> IO ()
func line = do
    let [a,b,c,d,e,f,g,h] = map read.words $ line
        [pA,pB,pC,pD] = [[a,b],[c,d],[e,f],[g,h]]
        lineAB = addV pB (negV pA)
        lineCD = addV pD (negV pC)
        isOrth = dot lineAB lineCD == 0
    if isOrth then putStrLn "YES" else putStrLn "NO"


addV :: Vector -> Vector -> Vector
addV v1 v2 = zipWith (+) v1 v2

negV :: Vector -> Vector
negV = map (negate)

dot :: Vector -> Vector -> Double
dot v1 v2 = sum $ zipWith (*) v1 v2