#include<iostream>
#include<cmath>

using namespace std;

#define EPS 1e-5

struct point{
	double x;
	double y;
};

struct line{
	double a; // 傾き
	double b; // y切片
};

istream& operator >> ( istream& s , point& p );
bool get_line( const point& p1 , const point& p2 , line *p1_p2 );
bool is_Orthogonal( const point& a , const point& b , const point& c , const point& d );

int main(void)
{
	point a , b , c , d;
	while(1)
	{
		cin >> a >> b >> c >> d;
		if( cin.eof() ) break;
		cout << ( is_Orthogonal( a , b , c , d ) ? "YES" : "NO" ) << endl;
	}

	return 0;
}

istream& operator >> ( istream& s , point& p )
{
	return s >> p.x >> p.y;
}

bool get_line( const point& p1 , const point& p2 , line *p1_p2 )
{
	if( fabs( p1.x - p2.x ) < EPS )
	{
		return false;
	}
	else
	{
		p1_p2->a = ( p1.y - p2.y )/( p1.x - p2.x );
		p1_p2->b = p1.y - p1_p2->a * p1.x;
		return true;
	}
}

bool is_Orthogonal( const point& a , const point& b , const point& c , const point& d )
{
	line a_b, c_d;

	bool result_a_b = get_line( a , b , &a_b );
	bool result_c_d = get_line( c , d , &c_d );

	if( result_a_b == false )
	{
		if( fabs(c_d.a) < EPS )
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	if( result_c_d == false )
	{
		if( fabs(a_b.a) < EPS )
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	else
	{
		if( a_b.a * c_d.a + 1 < EPS )
		{
			return true;
		}
		else
		{
			return false;
		}
	}
}