시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 248 27 19 12.838%

문제

연종이는 리포지토리에서 코드를 리뷰하던 중, 신입사원 규현이가 인터넷에서 찾아서 복사 붙여넣기한 소스를 발견했다. 만약, 소스 코드의 작성자가 이 사실을 알게될 경우, 연종이의 회사는 거액의 소송을 당할 수 있고, 지금까지 쌓아올린 공든 탑을 한 순간에 무너뜨릴 수 있다. 연종이는 긴급 회의를 열었고, 절대로 인터넷에서 찾은 소스를 사용하지 말 것을 당부했다.

직원들은 연종이의 말을 들을리가 없으므로, 계속해서 인터넷에서 소스를 복사할 것이다. 따라서, 연종이는 다음과 같은 모니터링 시스템을 만들기로 했다.

연종이가 만들 시스템은 다음과 같이 작동한다.

매번 새로운 소스를 제출할 때 마다, 바뀐 소스의 전체 내용을 알려져있는 모든 오픈 소스 리포지토리와 비교한다. 각 파일에서 가장 많이 겹치는 연속된 줄이 기록될 것이다.

이러한 소스 비교는 줄 단위로 이루어진다. 빈 줄, 공백만 포함한 줄은 비교를 하지 않고, 줄의 개수로 세지 않는다. 각 줄의 앞에 있는 공백과 뒤에 있는 공백도 또한 무시되고, 연속된 공백도 공백 1개로 생각한다. 모든 비교는 대소문자를 가린다.

연종이가 만들려고 하는 프로그램을 만드는 프로그램을 작성하시오.

입력

첫째 줄에는 알려져 있는 오픈 소스의 개수 N이 주어진다. (0 ≤ N ≤ 100) 그 다음 줄부터 오픈 소스의 정보가 주어진다. 각 오픈 소스의 첫째 줄에는 파일 이름이 주어진다. 파일 이름은 공백을 포함하지 않으며, 중복되지 않는다. 또한, 길이는 최대 254글자이다. 다음 줄부터 소스의 내용이 주어지며, 소스의 마지막 줄에는 "***END***"가 주어진다. 이것은 소스 코드의 일부가 아니며, 마지막을 표시하기 위한 줄이다.

오픈 소스의 정보가 모두 주어진 이후에는 비교할 소스가 주어진다. 이 소스의 마지막 줄에도 "***END***"가 주어진다.

모든 줄은 254글자 이내이다. 모든 소스 코드는 10000줄 이내이다. 코드와 파일 이름은 ASCII문자 32~126을 포함하며, 입력은 106글자를 넘지 않는다. 

출력

첫째 줄에 가장 많이 겹치는 연속된 줄의 수를 출력한다. (빈 줄은 세지 않는다) 그 다음, 공백을 출력한 뒤 해당하는 소스의 파일 이름을 출력한다. 소스 코드가 여러 개일 경우에는 공백으로 구분하여 출력하며, 입력으로 주어진 순서를 지켜야 한다. 만약, 겹치는 줄이 없을 때는 0을 출력한다.

예제 입력 1

2
HelloWorld.c
int Main() {
    printf("Hello %d\n",i);
}
***END***
Add.c
int Main() {
  for (int i=0; i<10; i++)
    sum += i;
  printf("SUM %d", sum);
}
***END***
int Main() {
  printf("Hello %d\n",i);
  printf("THE END\n");
}
***END***

예제 출력 1

2 HelloWorld.c
W3sicHJvYmxlbV9pZCI6IjUwNDQiLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJcdWNmNTRcdWI0ZGMgXHVjODA4XHViM2M0IiwiZGVzY3JpcHRpb24iOiI8cD5cdWM1ZjBcdWM4ODVcdWM3NzRcdWIyOTQgXHViOWFjXHVkM2VjXHVjOWMwXHVkMWEwXHViOWFjXHVjNWQwXHVjMTFjIFx1Y2Y1NFx1YjRkY1x1Yjk3YyBcdWI5YWNcdWJkZjBcdWQ1NThcdWIzNTggXHVjOTExLCBcdWMyZTBcdWM3ODVcdWMwYWNcdWM2ZDAgXHVhZGRjXHVkNjA0XHVjNzc0XHVhYzAwIFx1Yzc3OFx1ZDEzMFx1YjEzN1x1YzVkMFx1YzExYyBcdWNjM2VcdWM1NDRcdWMxMWMgXHViY2Y1XHVjMGFjIFx1YmQ5OVx1YzVlY1x1YjEyM1x1YWUzMFx1ZDU1YyBcdWMxOGNcdWMyYTRcdWI5N2MgXHViYzFjXHVhY2FjXHVkNTg4XHViMmU0LiBcdWI5Y2NcdWM1N2QsIFx1YzE4Y1x1YzJhNCBcdWNmNTRcdWI0ZGNcdWM3NTggXHVjNzkxXHVjMTMxXHVjNzkwXHVhYzAwIFx1Yzc3NCBcdWMwYWNcdWMyZTRcdWM3NDQgXHVjNTRjXHVhYzhjXHViNDIwIFx1YWNiZFx1YzZiMCwgXHVjNWYwXHVjODg1XHVjNzc0XHVjNzU4IFx1ZDY4Y1x1YzBhY1x1YjI5NCBcdWFjNzBcdWM1NjFcdWM3NTggXHVjMThjXHVjMWExXHVjNzQ0IFx1YjJmOVx1ZDU2MCBcdWMyMTggXHVjNzg4XHVhY2UwLCBcdWM5YzBcdWFlMDhcdWFlNGNcdWM5YzAgXHVjMzEzXHVjNTQ0XHVjNjJjXHViOWIwIFx1YWNmNVx1YjRlMCBcdWQwZDFcdWM3NDQgXHVkNTVjIFx1YzIxY1x1YWMwNFx1YzVkMCBcdWJiMzRcdWIxMDhcdWI3MjhcdWI5YjQgXHVjMjE4IFx1Yzc4OFx1YjJlNC4gXHVjNWYwXHVjODg1XHVjNzc0XHViMjk0IFx1YWUzNFx1YWUwOSBcdWQ2OGNcdWM3NThcdWI5N2MgXHVjNWY0XHVjNWM4XHVhY2UwLCBcdWM4MDhcdWIzMDBcdWI4NWMgXHVjNzc4XHVkMTMwXHViMTM3XHVjNWQwXHVjMTFjIFx1Y2MzZVx1Yzc0MCBcdWMxOGNcdWMyYTRcdWI5N2MgXHVjMGFjXHVjNmE5XHVkNTU4XHVjOWMwIFx1YjlkMCBcdWFjODNcdWM3NDQgXHViMmY5XHViZDgwXHVkNTg4XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWM5YzFcdWM2ZDBcdWI0ZTRcdWM3NDAgXHVjNWYwXHVjODg1XHVjNzc0XHVjNzU4IFx1YjlkMFx1Yzc0NCBcdWI0ZTRcdWM3NDRcdWI5YWNcdWFjMDAgXHVjNWM2XHVjNzNjXHViYmMwXHViODVjLCBcdWFjYzRcdWMxOGRcdWQ1NzRcdWMxMWMgXHVjNzc4XHVkMTMwXHViMTM3XHVjNWQwXHVjMTFjIFx1YzE4Y1x1YzJhNFx1Yjk3YyBcdWJjZjVcdWMwYWNcdWQ1NjAgXHVhYzgzXHVjNzc0XHViMmU0LiBcdWI1MzBcdWI3N2NcdWMxMWMsIFx1YzVmMFx1Yzg4NVx1Yzc3NFx1YjI5NCBcdWIyZTRcdWM3NGNcdWFjZmMgXHVhYzE5XHVjNzQwIFx1YmFhOFx1YjJjOFx1ZDEzMFx1YjljMSBcdWMyZGNcdWMyYTRcdWQxNWNcdWM3NDQgXHViOWNjXHViNGU0XHVhZTMwXHViODVjIFx1ZDU4OFx1YjJlNC48XC9wPlxyXG5cclxuPHA+XHVjNWYwXHVjODg1XHVjNzc0XHVhYzAwIFx1YjljY1x1YjRlNCBcdWMyZGNcdWMyYTRcdWQxNWNcdWM3NDAgXHViMmU0XHVjNzRjXHVhY2ZjIFx1YWMxOVx1Yzc3NCBcdWM3OTFcdWIzZDlcdWQ1NWNcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1YjllNFx1YmM4OCBcdWMwYzhcdWI4NWNcdWM2YjQgXHVjMThjXHVjMmE0XHViOTdjIFx1YzgxY1x1Y2Q5Y1x1ZDU2MCBcdWI1NGMgXHViOWM4XHViMmU0LCBcdWJjMTRcdWIwMTAgXHVjMThjXHVjMmE0XHVjNzU4IFx1YzgwNFx1Y2NiNCBcdWIwYjRcdWM2YTlcdWM3NDQgXHVjNTRjXHViODI0XHVjODM4XHVjNzg4XHViMjk0IFx1YmFhOFx1YjRlMCBcdWM2MjRcdWQ1MDggXHVjMThjXHVjMmE0IFx1YjlhY1x1ZDNlY1x1YzljMFx1ZDFhMFx1YjlhY1x1YzY0MCBcdWJlNDRcdWFkNTBcdWQ1NWNcdWIyZTQuIFx1YWMwMSBcdWQzMGNcdWM3N2NcdWM1ZDBcdWMxMWMgXHVhYzAwXHVjN2E1IFx1YjljZVx1Yzc3NCBcdWFjYjlcdWNlNThcdWIyOTQgXHVjNWYwXHVjMThkXHViNDFjIFx1YzkwNFx1Yzc3NCBcdWFlMzBcdWI4NWRcdWI0MjAgXHVhYzgzXHVjNzc0XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWM3NzRcdWI3ZWNcdWQ1NWMgXHVjMThjXHVjMmE0IFx1YmU0NFx1YWQ1MFx1YjI5NCBcdWM5MDQgXHViMmU4XHVjNzA0XHViODVjIFx1Yzc3NFx1YjhlOFx1YzViNFx1YzljNFx1YjJlNC4gXHViZTQ4IFx1YzkwNCwgXHVhY2Y1XHViYzMxXHViOWNjIFx1ZDNlY1x1ZDU2OFx1ZDU1YyBcdWM5MDRcdWM3NDAgXHViZTQ0XHVhZDUwXHViOTdjIFx1ZDU1OFx1YzljMCBcdWM1NGFcdWFjZTAsIFx1YzkwNFx1Yzc1OCBcdWFjMWNcdWMyMThcdWI4NWMgXHVjMTM4XHVjOWMwIFx1YzU0YVx1YjI5NFx1YjJlNC4gXHVhYzAxIFx1YzkwNFx1Yzc1OCBcdWM1NWVcdWM1ZDAgXHVjNzg4XHViMjk0IFx1YWNmNVx1YmMzMVx1YWNmYyBcdWI0YTRcdWM1ZDAgXHVjNzg4XHViMjk0IFx1YWNmNVx1YmMzMVx1YjNjNCBcdWI2MTBcdWQ1NWMgXHViYjM0XHVjMmRjXHViNDE4XHVhY2UwLCBcdWM1ZjBcdWMxOGRcdWI0MWMgXHVhY2Y1XHViYzMxXHViM2M0IFx1YWNmNVx1YmMzMSAxXHVhYzFjXHViODVjIFx1YzBkZFx1YWMwMVx1ZDU1Y1x1YjJlNC4gXHViYWE4XHViNGUwIFx1YmU0NFx1YWQ1MFx1YjI5NCBcdWIzMDBcdWMxOGNcdWJiMzhcdWM3OTBcdWI5N2MgXHVhYzAwXHViOWIwXHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWM1ZjBcdWM4ODVcdWM3NzRcdWFjMDAgXHViOWNjXHViNGU0XHViODI0XHVhY2UwIFx1ZDU1OFx1YjI5NCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NDQgXHViOWNjXHViNGRjXHViMjk0IFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOFx1Yzc0NCBcdWM3OTFcdWMxMzFcdWQ1NThcdWMyZGNcdWM2MjQuPFwvcD5cclxuIiwiaW5wdXQiOiI8cD5cdWNjYWJcdWM5ZjggXHVjOTA0XHVjNWQwXHViMjk0IFx1YzU0Y1x1YjgyNFx1YzgzOCBcdWM3ODhcdWIyOTQgXHVjNjI0XHVkNTA4IFx1YzE4Y1x1YzJhNFx1Yzc1OCBcdWFjMWNcdWMyMTggTlx1Yzc3NCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuICgwICZsZTsgTiAmbGU7IDEwMCkgXHVhZGY4IFx1YjJlNFx1Yzc0YyBcdWM5MDRcdWJkODBcdWQxMzAgXHVjNjI0XHVkNTA4IFx1YzE4Y1x1YzJhNFx1Yzc1OCBcdWM4MTVcdWJjZjRcdWFjMDAgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiBcdWFjMDEgXHVjNjI0XHVkNTA4IFx1YzE4Y1x1YzJhNFx1Yzc1OCBcdWNjYWJcdWM5ZjggXHVjOTA0XHVjNWQwXHViMjk0IFx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NzQgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiBcdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwIFx1YWNmNVx1YmMzMVx1Yzc0NCBcdWQzZWNcdWQ1NjhcdWQ1NThcdWM5YzAgXHVjNTRhXHVjNzNjXHViYTcwLCBcdWM5MTFcdWJjZjVcdWI0MThcdWM5YzAgXHVjNTRhXHViMjk0XHViMmU0LiBcdWI2MTBcdWQ1NWMsIFx1YWUzOFx1Yzc3NFx1YjI5NCBcdWNkNWNcdWIzMDAgMjU0XHVhZTAwXHVjNzkwXHVjNzc0XHViMmU0LiBcdWIyZTRcdWM3NGMgXHVjOTA0XHViZDgwXHVkMTMwIFx1YzE4Y1x1YzJhNFx1Yzc1OCBcdWIwYjRcdWM2YTlcdWM3NzQgXHVjOGZjXHVjNWI0XHVjOWMwXHViYTcwLCBcdWMxOGNcdWMyYTRcdWM3NTggXHViOWM4XHVjOWMwXHViOWM5IFx1YzkwNFx1YzVkMFx1YjI5NCAmcXVvdDsqKipFTkQqKiomcXVvdDtcdWFjMDAgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiBcdWM3NzRcdWFjODNcdWM3NDAgXHVjMThjXHVjMmE0IFx1Y2Y1NFx1YjRkY1x1Yzc1OCBcdWM3N2NcdWJkODBcdWFjMDAgXHVjNTQ0XHViMmM4XHViYTcwLCBcdWI5YzhcdWM5YzBcdWI5YzlcdWM3NDQgXHVkNDVjXHVjMmRjXHVkNTU4XHVhZTMwIFx1YzcwNFx1ZDU1YyBcdWM5MDRcdWM3NzRcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1YzYyNFx1ZDUwOCBcdWMxOGNcdWMyYTRcdWM3NTggXHVjODE1XHViY2Y0XHVhYzAwIFx1YmFhOFx1YjQ1MCBcdWM4ZmNcdWM1YjRcdWM5YzQgXHVjNzc0XHVkNmM0XHVjNWQwXHViMjk0IFx1YmU0NFx1YWQ1MFx1ZDU2MCBcdWMxOGNcdWMyYTRcdWFjMDAgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiBcdWM3NzQgXHVjMThjXHVjMmE0XHVjNzU4IFx1YjljOFx1YzljMFx1YjljOSBcdWM5MDRcdWM1ZDBcdWIzYzQgJnF1b3Q7KioqRU5EKioqJnF1b3Q7XHVhYzAwIFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC48XC9wPlxyXG5cclxuPHA+XHViYWE4XHViNGUwIFx1YzkwNFx1Yzc0MCAyNTRcdWFlMDBcdWM3OTAgXHVjNzc0XHViMGI0XHVjNzc0XHViMmU0LiBcdWJhYThcdWI0ZTAgXHVjMThjXHVjMmE0IFx1Y2Y1NFx1YjRkY1x1YjI5NCAxMDAwMFx1YzkwNCBcdWM3NzRcdWIwYjRcdWM3NzRcdWIyZTQuIFx1Y2Y1NFx1YjRkY1x1YzY0MCBcdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwIEFTQ0lJXHViYjM4XHVjNzkwIDMyfjEyNlx1Yzc0NCBcdWQzZWNcdWQ1NjhcdWQ1NThcdWJhNzAsIFx1Yzc4NVx1YjgyNVx1Yzc0MCAxMDxzdXA+NjxcL3N1cD5cdWFlMDBcdWM3OTBcdWI5N2MgXHViMTE4XHVjOWMwIFx1YzU0YVx1YjI5NFx1YjJlNC4mbmJzcDs8XC9wPlxyXG4iLCJvdXRwdXQiOiI8cD5cdWNjYWJcdWM5ZjggXHVjOTA0XHVjNWQwIFx1YWMwMFx1YzdhNSBcdWI5Y2VcdWM3NzQgXHVhY2I5XHVjZTU4XHViMjk0IFx1YzVmMFx1YzE4ZFx1YjQxYyBcdWM5MDRcdWM3NTggXHVjMjE4XHViOTdjIFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC4gKFx1YmU0OCBcdWM5MDRcdWM3NDAgXHVjMTM4XHVjOWMwIFx1YzU0YVx1YjI5NFx1YjJlNCkgXHVhZGY4IFx1YjJlNFx1Yzc0YywgXHVhY2Y1XHViYzMxXHVjNzQ0IFx1Y2Q5Y1x1YjgyNVx1ZDU1YyBcdWI0YTQgXHVkNTc0XHViMmY5XHVkNTU4XHViMjk0IFx1YzE4Y1x1YzJhNFx1Yzc1OCBcdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQ0IFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC4gXHVjMThjXHVjMmE0IFx1Y2Y1NFx1YjRkY1x1YWMwMCBcdWM1ZWNcdWI3ZWMgXHVhYzFjXHVjNzdjIFx1YWNiZFx1YzZiMFx1YzVkMFx1YjI5NCBcdWFjZjVcdWJjMzFcdWM3M2NcdWI4NWMgXHVhZDZjXHViZDg0XHVkNTU4XHVjNWVjIFx1Y2Q5Y1x1YjgyNVx1ZDU1OFx1YmE3MCwgXHVjNzg1XHViODI1XHVjNzNjXHViODVjIFx1YzhmY1x1YzViNFx1YzljNCBcdWMyMWNcdWMxMWNcdWI5N2MgXHVjOWMwXHVjZjFjXHVjNTdjIFx1ZDU1Y1x1YjJlNC4gXHViOWNjXHVjNTdkLCBcdWFjYjlcdWNlNThcdWIyOTQgXHVjOTA0XHVjNzc0IFx1YzVjNlx1Yzc0NCBcdWI1NGNcdWIyOTQgMFx1Yzc0NCBcdWNkOWNcdWI4MjVcdWQ1NWNcdWIyZTQuPFwvcD5cclxuIiwiaGludCI6IiIsIm9yaWdpbmFsIjoiMCIsInByb2JsZW1fbGFuZ19jb2RlIjoiXHVkNTVjXHVhZDZkXHVjNWI0In0seyJwcm9ibGVtX2lkIjoiNTA0NCIsInByb2JsZW1fbGFuZyI6IjEiLCJ0aXRsZSI6IkNvZGUgVGhlZnQiLCJkZXNjcmlwdGlvbiI6IjxwPldoaWxlIHJldmlld2luZyBjb2RlIHJlY2VudGx5IGJlaW5nIGNoZWNrZWQgaW50byB0aGUgcmVwb3NpdG9yeSwgSmltIGRpc2NvdmVyZWQgdGhhdCBzb21lIGVtcGxveWVlcyBub3cgYW5kIHRoZW4gc2VlbWVkIHRvIGNvcHkgY29kZSByaWdodCBmcm9tIHRoZSBJbnRlcm5ldCBpbnRvIHRoZSBjb21wYW55IGNvZGUgYmFzZS4gVGhpcyB3b3VsZCBiZSBhIHBvdGVudGlhbCBkaXNhc3RlciBhcyB0aGUgY29tcGFueSB0aGVuIHJpc2tzIGdldHRpbmcgc3VlZCBieSBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGUgb3JpZ2luYWwgY29kZS4gVGhlIG9idmlvdXMgc29sdXRpb24sIHRhbGtpbmcgdG8gdGhlIGVtcGxveWVlcyBhbmQga2luZGx5IGFzayB0aGVtIG5vdCB0byBzdWJtaXQgYW55IHN0b2xlbiBjb2RlLCBzZWVtZWQgdG8gc29sdmUgdGhlIHByb2JsZW0uIFN0aWxsLCBpdCB3YXMgZGVjaWRlZCB0aGF0IGEgc2NyZWVuaW5nIHByb2Nlc3Mgc2hvdWxkIGJlIGludHJvZHVjZWQgdG8gZGV0ZWN0IG5ld2x5IHN0b2xlbiBjb2RlLjxcL3A+XHJcblxyXG48cD5UaGUgc2NyZWVuaW5nIHdvdWxkIHdvcmsgYXMgZm9sbG93czogRXZlcnkgdGltZSBuZXcgY29kZSB3YXMgY2hlY2tlZCBpbiwgdGhlIGZ1bGwgY29udGVudHMgb2YgdGhlIGNoYW5nZWQgbGVzIHdoZXJlIG1hdGNoZWQgYWdhaW5zdCBhIHJlcG9zaXRvcnkgb2Yga25vd24gb3BlbiBzb3VyY2UgY29kZS4gRm9yIGVhY2ggbGUgdGhlIGxvbmdlc3QgbWF0Y2gsIGluIG51bWJlciBvZiBjb25zZWN1dGl2ZSBsaW5lcywgc2hvdWxkIGJlIHJlcG9ydGVkLjxcL3A+XHJcblxyXG48cD5Db21wYXJpc29uIGlzIGRvbmUgbGluZSBieSBsaW5lLiBFbXB0eSBsaW5lcywgYW5kIGxpbmVzIG9ubHkgY29udGFpbmluZyBzcGFjZSwgYXJlIGlnbm9yZWQgZHVyaW5nIGNvbXBhcmlzb24gYW5kIG5vdCBjb3VudGVkLiBMZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgc2hvdWxkIGJlIGlnbm9yZWQgY29tcGxldGVseSBhbmQgY29uc2VjdXRpdmUgc3BhY2UgY2hhcmFjdGVycyBpbnNpZGUgdGhlIGxpbmVzIGFyZSB0cmVhdGVkIGFzIG9uZSBzaW5nbGUgc3BhY2UuIFRoZSBjb21wYXJpc29uIGlzIGNhc2Utc2Vuc2l0aXZlLjxcL3A+XHJcbiIsImlucHV0IjoiPHA+VGVzdCBkYXRhIHN0YXJ0cyB3aXRoIHRoZSBudW1iZXIgMCAmbGU7IE4gJmxlOyAxMDAgb2YgY29kZSBmcmFnbWVudHMgaW4gdGhlIHJlcG9zaXRvcnkuIFRoZW4gZm9sbG93cywgZm9yIGVhY2ggY29kZSBmcmFnbWVudCwgb25lIGxpbmUgY29udGFpbmluZyB0aGUgZmlsZSBuYW1lIHRoYXQgdGhlIGZyYWdtZW50IHdhcyBmZXRjaGVkIGZyb20gYW5kIHRoZSBjb250ZW50cyBvZiB0aGUgZnJhZ21lbnQgb24gc3Vic2VxdWVudCBsaW5lcy4gRmlsZSBuYW1lcyB3aWxsIG5laXRoZXIgY29udGFpbiB3aGl0ZXNwYWNlIG5vciBiZSBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZS4gVGhlIG5hbWUgaXMgYXQgbW9zdCAyNTQgY2hhcmFjdGVycyBsb25nLiBFYWNoIGZyYWdtZW50IGlzIHRlcm1pbmF0ZWQgYnkgKioqRU5EKioqIG9uIGEgbGluZSBieSBpdHMgb3duLiBUaGlzIGxpbmUgaXMgbm90IGNvbnNpZGVyZWQgYmVpbmcgcGFydCBvZiB0aGUgZnJhZ21lbnQuPFwvcD5cclxuXHJcbjxwPkFmdGVyIHRoZSBmcmFnbWVudHMgaW4gdGhlIHJlcG9zaXRvcnkgaGF2ZSBhbGwgYmVlbiBsaXN0ZWQsIGNvbWVzIHRoZSBhY3R1YWwgY29kZSBzbmlwcGV0IHRvIGZpbmQgbWF0Y2hlcyBmb3IuIFRoaXMgc25pcHBldCBpcyBhbHNvIHRlcm1pbmF0ZWQgYnkgKioqRU5EKioqIG9uIGEgbGluZSBieSBpdHMgb3duLjxcL3A+XHJcblxyXG48cD5MaW5lcyBhcmUgZ3VhcmFudGVlZCB0byBiZSBubyBsb25nZXIgdGhhbiAyNTQgY2hhcmFjdGVycy4gTm8gY29kZSBmcmFnbWVudCB3aWxsIGJlIGxvbmdlciB0aGFuIDEwMDAwIGxpbmVzLiBBbnkgY29kZSBhbmQgZmlsZSBuYW1lIGxpbmVzIHdpbGwgb25seSBjb250YWluIHRoZSBBU0NJSSBjaGFyYWN0ZXJzIDMyLTEyNi4gVGhlIHRvdGFsIHNpemUgb2YgdGhlIGlucHV0IGZpbGUgd2lsbCBub3QgZXhjZWVkIDEwNiBjaGFyYWN0ZXJzLjxcL3A+XHJcbiIsIm91dHB1dCI6IjxwPkZvciBlYWNoIHRlc3QgY2FzZSwgd3JpdGUgdGhlIG51bWJlciBvZiBtYXRjaGluZyBjb25zZWN1dGl2ZSBsaW5lcyAoZW1wdHkgbGluZXMgbm90IGNvdW50ZWQpIGluIGEgbG9uZ2VzdCBtYXRjaCBmcm9tIHRoZSByZXBvc2l0b3J5LCBmb2xsb3dlZCBieSBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBmaWxlIG5hbWVzIG9mIGVhY2ggZnJhZ21lbnRzIGNvbnRhaW5pbmcgYSBtYXRjaCBvZiB0aGlzIGxlbmd0aCwgZ2l2ZW4gaW4gdGhlIG9yZGVyIHRoYXQgdGhlIG1hdGNoaW5nIGZyYWdtZW50cyB3ZXJlIHByZXNlbnRlZCBpbiB0aGUgcmVwb3NpdG9yeSBkZXNjcmlwdGlvbi4gSWYgbm8gZnJhZ21lbnRzIG1hdGNoLCB3cml0ZSB0aGUgbnVtYmVyIDAgb24gYSBsaW5lIG9mIGl0cyBvd24uPFwvcD5cclxuIiwiaGludCI6IiIsIm9yaWdpbmFsIjoiMSIsInByb2JsZW1fbGFuZ19jb2RlIjoiXHVjNjAxXHVjNWI0In1d