시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 479 126 94 29.193%

문제

소코반은 1982년에 일본에서 만들어진 게임으로, 일본어로 창고지기라는 뜻이다. 이 게임은 캐릭터를 이용해 창고 안에 있는 박스를 모두 목표점으로 옮기는 게임이다. 목표점의 수와 박스의 수는 같다. 플레이어는 화살표(위, 아래, 왼쪽, 오른쪽)를 이용해 캐릭터를 아래와 같은 규칙으로 조정할 수 있다.

  • 캐릭터에게 지시한 방향이 빈 칸(박스나 벽이 아닌 곳)인 경우에는 그 칸으로 이동한다.
  • 지시한 방향에 박스가 있는 경우에는, 박스를 민다. 이 경우에는 박스가 이동할 칸도 비어있어야 한다.
  • 지시한 방향이 벽인 경우, 또는 박스가 있는데, 박스가 이동할 칸에 다른 박스나 벽이 있는 경우에는 키를 눌러도 캐릭터는 이동하지 않는다.

모든 박스를 목표점으로 이동시킨 경우에 게임은 끝난다. 게임이 끝난 후에 입력하는 키는 모두 무시된다.

준규는 소코반으로 고통받는 친구들을 위해서 소코반의 해를 찾는 프로그램을 작성하려고 한다. 하지만, 소코반의 해를 찾는 문제는 NP-hard와 PSPACE-complete에 속하고, 매우 어려운 문제이다. 따라서, 간단한 소코반 프로그램을 작성해보려고 한다.

사용자가 입력한 키가 순서대로 주어졌을 때, 게임이 어떻게 진행되는지를 구하는 프로그램을 작성하시오.

게임의 상태는 아래와 같은 문자로 나타낼 수 있다.

문자
. 빈 공간
#
+ 비어있는 목표점
b 박스
B 목표점 위에 있는 박스
w 캐릭터
W 목표점 위에 있는 캐릭터

첫 번째 입력은 문제의 그림과 같다.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스의 첫째 줄에는 행과 열의 수 R, C가 주어진다. (4 ≤ R ≤ 15, 4 ≤ C ≤ 15) 다음 R개 줄에는 현재 게임의 상태가 주어진다. 모든 줄은 C개의 문자로 이루어져 있다. 마지막 줄에는 플레이어가 입력한 키가 순서대로 주어지며 길이는 최대 50이다. 위, 아래, 왼쪽, 오른쪽은 U, D, L, R로 나타낸다.

입력의 마지막 줄에는 0 0이 주어진다.

입력으로 주어지는 모든 데이터는 항상 캐릭터가 한 명이고, 박스의 수와 목표점의 수는 같다. 또, 목표점 위에 올라가 있지 않은 박스는 적어도 한 개 이며, 가장 바깥쪽 칸은 항상 벽이다.

출력

각각의 게임에 대해서, 게임 번호를 출력한 다음에 게임이 끝났으면 complete를, 아니면 incomplete를 출력한다. 그 다음 줄부터 R개 줄에는 게임의 상태를 출력한다.

예제 입력 1

8 9
#########
#...#...#
#..bb.b.#
#...#w#.#
#...#b#.#
#...++++#
#...#..##
#########
ULRURDDDUULLDDD
6 7
#######
#..####
#.+.+.#
#.bb#w#
##....#
#######
DLLUDLULUURDRDDLUDRR
0 0

예제 출력 1

Game 1: incomplete
#########
#...#...#
#..bb...#
#...#.#.#
#...#.#.#
#...+W+B#
#...#b.##
#########
Game 2: complete
#######
#..####
#.B.B.#
#.w.#.#
##....#
#######
W3sicHJvYmxlbV9pZCI6IjQ1NzciLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJcdWMxOGNcdWNmNTRcdWJjMTgiLCJkZXNjcmlwdGlvbiI6IjxwPjxpbWcgYWx0PVwiXCIgc3JjPVwiXC91cGxvYWRcL2ltYWdlc1wvZXhhbXBsZS5wbmdcIiBzdHlsZT1cImZsb2F0OnJpZ2h0OyBoZWlnaHQ6MTc4cHg7IHdpZHRoOjIwMHB4XCIgXC8+XHVjMThjXHVjZjU0XHViYzE4XHVjNzQwIDE5ODJcdWIxNDRcdWM1ZDAgXHVjNzdjXHViY2Y4XHVjNWQwXHVjMTFjIFx1YjljY1x1YjRlNFx1YzViNFx1YzljNCBcdWFjOGNcdWM3ODRcdWM3M2NcdWI4NWMsIFx1Yzc3Y1x1YmNmOFx1YzViNFx1Yjg1YyBcdWNjM2RcdWFjZTBcdWM5YzBcdWFlMzBcdWI3N2NcdWIyOTQgXHViNzNiXHVjNzc0XHViMmU0LiBcdWM3NzQgXHVhYzhjXHVjNzg0XHVjNzQwIFx1Y2U5MFx1YjlhZFx1ZDEzMFx1Yjk3YyBcdWM3NzRcdWM2YTlcdWQ1NzQgXHVjYzNkXHVhY2UwIFx1YzU0OFx1YzVkMCBcdWM3ODhcdWIyOTQgXHViYzE1XHVjMmE0XHViOTdjIFx1YmFhOFx1YjQ1MCBcdWJhYTlcdWQ0NWNcdWM4MTBcdWM3M2NcdWI4NWMgXHVjNjJlXHVhZTMwXHViMjk0IFx1YWM4Y1x1Yzc4NFx1Yzc3NFx1YjJlNC4gXHViYWE5XHVkNDVjXHVjODEwXHVjNzU4IFx1YzIxOFx1YzY0MCBcdWJjMTVcdWMyYTRcdWM3NTggXHVjMjE4XHViMjk0IFx1YWMxOVx1YjJlNC4gXHVkNTBjXHViODA4XHVjNzc0XHVjNWI0XHViMjk0IFx1ZDY1NFx1YzBiNFx1ZDQ1YyhcdWM3MDQsIFx1YzU0NFx1Yjc5OCwgXHVjNjdjXHVjYWJkLCBcdWM2MjRcdWI5NzhcdWNhYmQpXHViOTdjIFx1Yzc3NFx1YzZhOVx1ZDU3NCBcdWNlOTBcdWI5YWRcdWQxMzBcdWI5N2MgXHVjNTQ0XHViNzk4XHVjNjQwIFx1YWMxOVx1Yzc0MCBcdWFkZGNcdWNlNTlcdWM3M2NcdWI4NWMgXHVjODcwXHVjODE1XHVkNTYwIFx1YzIxOCBcdWM3ODhcdWIyZTQuPFwvcD5cclxuXHJcbjx1bD5cclxuXHQ8bGk+XHVjZTkwXHViOWFkXHVkMTMwXHVjNWQwXHVhYzhjIFx1YzljMFx1YzJkY1x1ZDU1YyBcdWJjMjlcdWQ1YTVcdWM3NzQgXHViZTQ4IFx1Y2U3OChcdWJjMTVcdWMyYTRcdWIwOTggXHViY2JkXHVjNzc0IFx1YzU0NFx1YjJjYyBcdWFjZjMpXHVjNzc4IFx1YWNiZFx1YzZiMFx1YzVkMFx1YjI5NCBcdWFkZjggXHVjZTc4XHVjNzNjXHViODVjIFx1Yzc3NFx1YjNkOVx1ZDU1Y1x1YjJlNC48XC9saT5cclxuXHQ8bGk+XHVjOWMwXHVjMmRjXHVkNTVjIFx1YmMyOVx1ZDVhNVx1YzVkMCBcdWJjMTVcdWMyYTRcdWFjMDAgXHVjNzg4XHViMjk0IFx1YWNiZFx1YzZiMFx1YzVkMFx1YjI5NCwgXHViYzE1XHVjMmE0XHViOTdjIFx1YmJmY1x1YjJlNC4gXHVjNzc0IFx1YWNiZFx1YzZiMFx1YzVkMFx1YjI5NCBcdWJjMTVcdWMyYTRcdWFjMDAgXHVjNzc0XHViM2Q5XHVkNTYwIFx1Y2U3OFx1YjNjNCBcdWJlNDRcdWM1YjRcdWM3ODhcdWM1YjRcdWM1N2MgXHVkNTVjXHViMmU0LjxcL2xpPlxyXG5cdDxsaT5cdWM5YzBcdWMyZGNcdWQ1NWMgXHViYzI5XHVkNWE1XHVjNzc0IFx1YmNiZFx1Yzc3OCBcdWFjYmRcdWM2YjAsIFx1YjYxMFx1YjI5NCBcdWJjMTVcdWMyYTRcdWFjMDAgXHVjNzg4XHViMjk0XHViMzcwLCBcdWJjMTVcdWMyYTRcdWFjMDAgXHVjNzc0XHViM2Q5XHVkNTYwIFx1Y2U3OFx1YzVkMCBcdWIyZTRcdWI5NzggXHViYzE1XHVjMmE0XHViMDk4IFx1YmNiZFx1Yzc3NCBcdWM3ODhcdWIyOTQgXHVhY2JkXHVjNmIwXHVjNWQwXHViMjk0IFx1ZDBhNFx1Yjk3YyBcdWIyMGNcdWI3ZWNcdWIzYzQgXHVjZTkwXHViOWFkXHVkMTMwXHViMjk0IFx1Yzc3NFx1YjNkOVx1ZDU1OFx1YzljMCBcdWM1NGFcdWIyOTRcdWIyZTQuPFwvbGk+XHJcbjxcL3VsPlxyXG5cclxuPHA+XHViYWE4XHViNGUwIFx1YmMxNVx1YzJhNFx1Yjk3YyBcdWJhYTlcdWQ0NWNcdWM4MTBcdWM3M2NcdWI4NWMmbmJzcDtcdWM3NzRcdWIzZDlcdWMyZGNcdWQwYTggXHVhY2JkXHVjNmIwXHVjNWQwIFx1YWM4Y1x1Yzc4NFx1Yzc0MCBcdWIwNWRcdWIwOWNcdWIyZTQuIFx1YWM4Y1x1Yzc4NFx1Yzc3NCBcdWIwNWRcdWIwOWMgXHVkNmM0XHVjNWQwIFx1Yzc4NVx1YjgyNVx1ZDU1OFx1YjI5NCBcdWQwYTRcdWIyOTQgXHViYWE4XHViNDUwIFx1YmIzNFx1YzJkY1x1YjQxY1x1YjJlNC48XC9wPlxyXG5cclxuPHA+XHVjOTAwXHVhZGRjXHViMjk0IFx1YzE4Y1x1Y2Y1NFx1YmMxOFx1YzczY1x1Yjg1YyBcdWFjZTBcdWQxYjVcdWJjMWJcdWIyOTQgXHVjZTVjXHVhZDZjXHViNGU0XHVjNzQ0IFx1YzcwNFx1ZDU3NFx1YzExYyBcdWMxOGNcdWNmNTRcdWJjMThcdWM3NTggXHVkNTc0XHViOTdjIFx1Y2MzZVx1YjI5NCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NDQgXHVjNzkxXHVjMTMxXHVkNTU4XHViODI0XHVhY2UwIFx1ZDU1Y1x1YjJlNC4gXHVkNTU4XHVjOWMwXHViOWNjLCBcdWMxOGNcdWNmNTRcdWJjMThcdWM3NTggXHVkNTc0XHViOTdjIFx1Y2MzZVx1YjI5NCBcdWJiMzhcdWM4MWNcdWIyOTQmbmJzcDtOUC1oYXJkXHVjNjQwIFBTUEFDRS1jb21wbGV0ZVx1YzVkMCBcdWMxOGRcdWQ1NThcdWFjZTAsIFx1YjllNFx1YzZiMCBcdWM1YjRcdWI4MjRcdWM2YjQgXHViYjM4XHVjODFjXHVjNzc0XHViMmU0LiBcdWI1MzBcdWI3N2NcdWMxMWMsIFx1YWMwNFx1YjJlOFx1ZDU1YyBcdWMxOGNcdWNmNTRcdWJjMTggXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzQ0IFx1Yzc5MVx1YzEzMVx1ZDU3NFx1YmNmNFx1YjgyNFx1YWNlMCBcdWQ1NWNcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1YzBhY1x1YzZhOVx1Yzc5MFx1YWMwMCBcdWM3ODVcdWI4MjVcdWQ1NWMgXHVkMGE0XHVhYzAwIFx1YzIxY1x1YzExY1x1YjMwMFx1Yjg1YyBcdWM4ZmNcdWM1YjRcdWM4NGNcdWM3NDQgXHViNTRjLCBcdWFjOGNcdWM3ODRcdWM3NzQgXHVjNWI0XHViNWJiXHVhYzhjIFx1YzljNFx1ZDU4OVx1YjQxOFx1YjI5NFx1YzljMFx1Yjk3YyBcdWFkNmNcdWQ1NThcdWIyOTQgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzQ0IFx1Yzc5MVx1YzEzMVx1ZDU1OFx1YzJkY1x1YzYyNC48XC9wPlxyXG5cclxuPHA+XHVhYzhjXHVjNzg0XHVjNzU4IFx1YzBjMVx1ZDBkY1x1YjI5NCBcdWM1NDRcdWI3OThcdWM2NDAgXHVhYzE5XHVjNzQwIFx1YmIzOFx1Yzc5MFx1Yjg1YyBcdWIwOThcdWQwYzBcdWIwYmMgXHVjMjE4IFx1Yzc4OFx1YjJlNC48XC9wPlxyXG5cclxuPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWRcIiBzdHlsZT1cIndpZHRoOjUwJVwiPlxyXG5cdDx0aGVhZD5cclxuXHRcdDx0cj5cclxuXHRcdFx0PHRoIHN0eWxlPVwid2lkdGg6MjAlXCI+XHViYjM4XHVjNzkwPFwvdGg+XHJcblx0XHRcdDx0aCBzdHlsZT1cIndpZHRoOjQwJVwiPlx1YjczYjxcL3RoPlxyXG5cdFx0PFwvdHI+XHJcblx0PFwvdGhlYWQ+XHJcblx0PHRib2R5PlxyXG5cdFx0PHRyPlxyXG5cdFx0XHQ8dGQ+LjxcL3RkPlxyXG5cdFx0XHQ8dGQ+XHViZTQ4IFx1YWNmNVx1YWMwNDxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0ZD4jPFwvdGQ+XHJcblx0XHRcdDx0ZD5cdWJjYmQ8XC90ZD5cclxuXHRcdDxcL3RyPlxyXG5cdFx0PHRyPlxyXG5cdFx0XHQ8dGQ+KzxcL3RkPlxyXG5cdFx0XHQ8dGQ+XHViZTQ0XHVjNWI0XHVjNzg4XHViMjk0IFx1YmFhOVx1ZDQ1Y1x1YzgxMDxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0ZD5iPFwvdGQ+XHJcblx0XHRcdDx0ZD5cdWJjMTVcdWMyYTQ8XC90ZD5cclxuXHRcdDxcL3RyPlxyXG5cdFx0PHRyPlxyXG5cdFx0XHQ8dGQ+QjxcL3RkPlxyXG5cdFx0XHQ8dGQ+XHViYWE5XHVkNDVjXHVjODEwIFx1YzcwNFx1YzVkMCBcdWM3ODhcdWIyOTQgXHViYzE1XHVjMmE0PFwvdGQ+XHJcblx0XHQ8XC90cj5cclxuXHRcdDx0cj5cclxuXHRcdFx0PHRkPnc8XC90ZD5cclxuXHRcdFx0PHRkPlx1Y2U5MFx1YjlhZFx1ZDEzMDxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0ZD5XPFwvdGQ+XHJcblx0XHRcdDx0ZD5cdWJhYTlcdWQ0NWNcdWM4MTAgXHVjNzA0XHVjNWQwIFx1Yzc4OFx1YjI5NCBcdWNlOTBcdWI5YWRcdWQxMzA8XC90ZD5cclxuXHRcdDxcL3RyPlxyXG5cdDxcL3Rib2R5PlxyXG48XC90YWJsZT5cclxuXHJcbjxwPlx1Y2NhYiBcdWJjODhcdWM5ZjggXHVjNzg1XHViODI1XHVjNzQwIFx1YmIzOFx1YzgxY1x1Yzc1OCBcdWFkZjhcdWI5YmNcdWFjZmMgXHVhYzE5XHViMmU0LjxcL3A+XHJcbiIsImlucHV0IjoiPHA+XHVjNzg1XHViODI1XHVjNzQwIFx1YzVlY1x1YjdlYyBcdWFjMWNcdWM3NTggXHVkMTRjXHVjMmE0XHVkMmI4IFx1Y2YwMFx1Yzc3NFx1YzJhNFx1Yjg1YyBcdWM3NzRcdWI4ZThcdWM1YjRcdWM4MzggXHVjNzg4XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWFjMDEgXHVkMTRjXHVjMmE0XHVkMmI4IFx1Y2YwMFx1Yzc3NFx1YzJhNFx1Yzc1OCBcdWNjYWJcdWM5ZjggXHVjOTA0XHVjNWQwXHViMjk0IFx1ZDU4OVx1YWNmYyBcdWM1ZjRcdWM3NTggXHVjMjE4IFIsIENcdWFjMDAgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiAoNCAmbGU7IFIgJmxlOyAxNSwgNCAmbGU7IEMgJmxlOyAxNSkgXHViMmU0XHVjNzRjIFJcdWFjMWMgXHVjOTA0XHVjNWQwXHViMjk0IFx1ZDYwNFx1YzdhYyBcdWFjOGNcdWM3ODRcdWM3NTggXHVjMGMxXHVkMGRjXHVhYzAwIFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC4gXHViYWE4XHViNGUwIFx1YzkwNFx1Yzc0MCBDXHVhYzFjXHVjNzU4IFx1YmIzOFx1Yzc5MFx1Yjg1YyBcdWM3NzRcdWI4ZThcdWM1YjRcdWM4MzggXHVjNzg4XHViMmU0LiBcdWI5YzhcdWM5YzBcdWI5YzkgXHVjOTA0XHVjNWQwXHViMjk0IFx1ZDUwY1x1YjgwOFx1Yzc3NFx1YzViNFx1YWMwMCBcdWM3ODVcdWI4MjVcdWQ1NWMgXHVkMGE0XHVhYzAwIFx1YzIxY1x1YzExY1x1YjMwMFx1Yjg1YyBcdWM4ZmNcdWM1YjRcdWM5YzBcdWJhNzAgXHVhZTM4XHVjNzc0XHViMjk0IFx1Y2Q1Y1x1YjMwMCA1MFx1Yzc3NFx1YjJlNC4mbmJzcDtcdWM3MDQsIFx1YzU0NFx1Yjc5OCwgXHVjNjdjXHVjYWJkLCBcdWM2MjRcdWI5NzhcdWNhYmRcdWM3NDAgVSwgRCwgTCwgUlx1Yjg1YyBcdWIwOThcdWQwYzBcdWIwYjhcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1Yzc4NVx1YjgyNVx1Yzc1OCBcdWI5YzhcdWM5YzBcdWI5YzkgXHVjOTA0XHVjNWQwXHViMjk0IDAgMFx1Yzc3NCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1Yzc4NVx1YjgyNVx1YzczY1x1Yjg1YyBcdWM4ZmNcdWM1YjRcdWM5YzBcdWIyOTQgXHViYWE4XHViNGUwIFx1YjM3MFx1Yzc3NFx1ZDEzMFx1YjI5NCBcdWQ1NmRcdWMwYzEgXHVjZTkwXHViOWFkXHVkMTMwXHVhYzAwIFx1ZDU1YyBcdWJhODVcdWM3NzRcdWFjZTAsIFx1YmMxNVx1YzJhNFx1Yzc1OCBcdWMyMThcdWM2NDAgXHViYWE5XHVkNDVjXHVjODEwXHVjNzU4IFx1YzIxOFx1YjI5NCBcdWFjMTlcdWIyZTQuIFx1YjYxMCwgXHViYWE5XHVkNDVjXHVjODEwIFx1YzcwNFx1YzVkMCBcdWM2MmNcdWI3N2NcdWFjMDAgXHVjNzg4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWJjMTVcdWMyYTRcdWIyOTQgXHVjODAxXHVjNWI0XHViM2M0IFx1ZDU1YyBcdWFjMWMgXHVjNzc0XHViYTcwLCBcdWFjMDBcdWM3YTUgXHViYzE0XHVhZTY1XHVjYWJkIFx1Y2U3OFx1Yzc0MCBcdWQ1NmRcdWMwYzEgXHViY2JkXHVjNzc0XHViMmU0LjxcL3A+XHJcbiIsIm91dHB1dCI6IjxwPlx1YWMwMVx1YWMwMVx1Yzc1OCBcdWFjOGNcdWM3ODRcdWM1ZDAgXHViMzAwXHVkNTc0XHVjMTFjLCBcdWFjOGNcdWM3ODQgXHViYzg4XHVkNjM4XHViOTdjIFx1Y2Q5Y1x1YjgyNVx1ZDU1YyBcdWIyZTRcdWM3NGNcdWM1ZDAgXHVhYzhjXHVjNzg0XHVjNzc0IFx1YjA1ZFx1YjBhY1x1YzczY1x1YmE3NCBjb21wbGV0ZVx1Yjk3YywgXHVjNTQ0XHViMmM4XHViYTc0IGluY29tcGxldGVcdWI5N2MgXHVjZDljXHViODI1XHVkNTVjXHViMmU0LiBcdWFkZjggXHViMmU0XHVjNzRjIFx1YzkwNFx1YmQ4MFx1ZDEzMCBSXHVhYzFjIFx1YzkwNFx1YzVkMFx1YjI5NCBcdWFjOGNcdWM3ODRcdWM3NTggXHVjMGMxXHVkMGRjXHViOTdjIFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC48XC9wPlxyXG4iLCJoaW50IjoiIiwib3JpZ2luYWwiOiIwIiwicHJvYmxlbV9sYW5nX2NvZGUiOiJcdWQ1NWNcdWFkNmRcdWM1YjQifSx7InByb2JsZW1faWQiOiI0NTc3IiwicHJvYmxlbV9sYW5nIjoiMSIsInRpdGxlIjoiU29rb2JhbiIsImRlc2NyaXB0aW9uIjoiPHA+PGltZyBhbHQ9XCJcIiBzcmM9XCJcL3VwbG9hZFwvaW1hZ2VzXC9leGFtcGxlLnBuZ1wiIHN0eWxlPVwiZmxvYXQ6cmlnaHQ7IGhlaWdodDoxNzhweDsgd2lkdGg6MjAwcHhcIiBcLz5Tb2tvLWJhbiBpcyBhIEphcGFuZXNlIHdvcmQgZm9yIGEgd2FyZWhvdXNlIHdvcmtlciwgYW5kIHRoZSBuYW1lIG9mIGEgY2xhc3NpYyBjb21wdXRlciBnYW1lIGNyZWF0ZWQgaW4gdGhlIDE5ODBzLiBJdCBpcyBhIG9uZS1wbGF5ZXIgZ2FtZSB3aXRoIHRoZSBmb2xsb3dpbmcgcHJlbWlzZS4gQSBzaW5nbGUgd29ya2VyIGlzIGluIGFuIGVuY2xvc2VkIHdhcmVob3VzZSB3aXRoIG9uZSBvciBtb3JlIGJveGVzLiBUaGUgZ29hbCBpcyB0byBtb3ZlIHRob3NlIGJveGVzIHRvIGEgc2V0IG9mIHRhcmdldCBsb2NhdGlvbnMsIHdpdGggdGhlIG51bWJlciBvZiB0YXJnZXQgbG9jYXRpb25zIGVxdWFsbGluZyB0aGUgbnVtYmVyIG9mIGJveGVzLiBUaGUgcGxheWVyIGluZGljYXRlcyBhIGRpcmVjdGlvbiBvZiBtb3Rpb24gZm9yIHRoZSB3b3JrZXIgdXNpbmcgdGhlIGFycm93IGtleXMgKHVwLCBkb3duLCBsZWZ0LCByaWdodCksIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHJ1bGVzLjxcL3A+XHJcblxyXG48dWw+XHJcblx0PGxpPklmIHRoZSBpbmRpY2F0ZWQgZGlyZWN0aW9uIG9mIG1vdGlvbiBmb3IgdGhlIHdvcmtlciBsZWFkcyB0byBhbiBlbXB0eSBsb2NhdGlvbiAoaS5lLiwgb25lIHRoYXQgZG9lcyBub3QgaGF2ZSBhIGJveCBvciB3YWxsKSwgdGhlIHdvcmtlciBhZHZhbmNlcyBieSBvbmUgc3RlcCBpbiB0aGF0IGRpcmVjdGlvbi48XC9saT5cclxuXHQ8bGk+SWYgdGhlIGluZGljYXRlZCBkaXJlY3Rpb24gb2YgbW90aW9uIHdvdWxkIGNhdXNlIHRoZSB3b3JrZXIgdG8gbW92ZSBpbnRvIGEgYm94LCBhbmQgdGhlIGxvY2F0aW9uIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRoZSBib3ggaXMgZW1wdHksIHRoZW4gYm90aCB0aGUgd29ya2VyIGFuZCB0aGUgYm94IG1vdmUgb25lIHNwb3QgaW4gdGhhdCBkaXJlY3Rpb24gKGkuZS4sIHRoZSB3b3JrZXIgcHVzaGVzIHRoZSBib3gpLjxcL2xpPlxyXG5cdDxsaT5JZiB0aGUgaW5kaWNhdGVkIGRpcmVjdGlvbiBvZiBtb3Rpb24gZm9yIGEgbW92ZSB3b3VsZCBjYXVzZSB0aGUgd29ya2VyIHRvIG1vdmUgaW50byBhIHdhbGwsIG9yIHRvIG1vdmUgaW50byBhIGJveCB0aGF0IGhhcyBhbm90aGVyIGJveCBvciBhIHdhbGwgb24gaXRzIG9wcG9zaXRlIHNpZGUsIHRoZW4gbm8gbW90aW9uIHRha2VzIHBsYWNlIGZvciB0aGF0IGtleXN0cm9rZS48XC9saT5cclxuPFwvdWw+XHJcblxyXG48cD5UaGUgZ29hbCBpcyB0byBzaW11bHRhbmVvdXNseSBoYXZlIGFsbCBib3hlcyBvbiB0aGUgdGFyZ2V0IGxvY2F0aW9ucy4gSW4gdGhhdCBjYXNlLCB0aGUgcGxheWVyIGlzIHN1Y2Nlc3NmdWwgKGFuZCBhcyBhIGZvcm1hbGl0eSwgYWxsIGZ1cnRoZXIga2V5c3Ryb2tlcyB3aWxsIGJlIGlnbm9yZWQpLjxcL3A+XHJcblxyXG48cD5UaGUgZ2FtZSBoYXMgYmVlbiBzdHVkaWVkIGJ5IGNvbXB1dGVyIHNjaWVudGlzdHMgKGluIGZhY3QsIG9uZSBncmFkdWF0ZSBzdHVkZW50IHdyb3RlIGhpcyBlbnRpcmUgUGguRC4gZGlzc2VydGF0aW9uIGFib3V0IHRoZSBhbmFseXNpcyBvZiBzb2tvYmFuKS4gVW5mb3J0dW5hdGVseSwgaXQgdHVybnMgb3V0IHRoYXQgZmluZGluZyBhIHNvbHV0aW9uIGlzIHZlcnkgZGlmZmljdWx0IGluIGdlbmVyYWwsIGFzIGl0IGlzIGJvdGggTlAtaGFyZCBhbmQgUFNQQUNFLWNvbXBsZXRlLiBUaGVyZWZvcmUsIHlvdXIgZ29hbCB3aWxsIGJlIGEgc2ltcGxlciB0YXNrOiBzaW11bGF0aW5nIHRoZSBwcm9ncmVzcyBvZiBhIGdhbWUgYmFzZWQgdXBvbiBhIHBsYXllciYjMzk7cyBzZXF1ZW5jZSBvZiBrZXlzdHJva2VzLiBGb3IgdGhlIHNha2Ugb2YgaW5wdXQgYW5kIG91dHB1dCwgd2UgZGVzY3JpYmUgdGhlIHN0YXRlIG9mIGEgZ2FtZSB1c2luZyB0aGUgZm9sbG93aW5nIHN5bWJvbHM6PFwvcD5cclxuXHJcbjx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkXCIgc3R5bGU9XCJ3aWR0aDo1MCVcIj5cclxuXHQ8dGhlYWQ+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0aCBzdHlsZT1cIndpZHRoOjIwJVwiPlN5bWJvbDxcL3RoPlxyXG5cdFx0XHQ8dGggc3R5bGU9XCJ3aWR0aDo0MCVcIj5NZWFuaW5nPFwvdGg+XHJcblx0XHQ8XC90cj5cclxuXHQ8XC90aGVhZD5cclxuXHQ8dGJvZHk+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0ZD4uPFwvdGQ+XHJcblx0XHRcdDx0ZD5lbXB0eSBzcGFjZTxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0ZD4jPFwvdGQ+XHJcblx0XHRcdDx0ZD53YWxsPFwvdGQ+XHJcblx0XHQ8XC90cj5cclxuXHRcdDx0cj5cclxuXHRcdFx0PHRkPis8XC90ZD5cclxuXHRcdFx0PHRkPmVtcHR5IHRhcmdldCBsb2NhdGlvbjxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0ZD5iPFwvdGQ+XHJcblx0XHRcdDx0ZD5ib3g8XC90ZD5cclxuXHRcdDxcL3RyPlxyXG5cdFx0PHRyPlxyXG5cdFx0XHQ8dGQ+QjxcL3RkPlxyXG5cdFx0XHQ8dGQ+Ym94IG9uIGEgdGFyZ2V0IGxvY2F0aW9uPFwvdGQ+XHJcblx0XHQ8XC90cj5cclxuXHRcdDx0cj5cclxuXHRcdFx0PHRkPnc8XC90ZD5cclxuXHRcdFx0PHRkPndvcmtlcjxcL3RkPlxyXG5cdFx0PFwvdHI+XHJcblx0XHQ8dHI+XHJcblx0XHRcdDx0ZD5XPFwvdGQ+XHJcblx0XHRcdDx0ZD53b3JrZXIgb24gYSB0YXJnZXQ8XC90ZD5cclxuXHRcdDxcL3RyPlxyXG5cdDxcL3Rib2R5PlxyXG48XC90YWJsZT5cclxuXHJcbjxwPkZvciBleGFtcGxlLCB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIGRpYWdyYW1tZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHByb2JsZW0gYXBwZWFycyBhcyB0aGUgZmlyc3QgaW5wdXQgY2FzZSBiZWxvdy48XC9wPlxyXG4iLCJpbnB1dCI6IjxwPkVhY2ggZ2FtZSBiZWdpbnMgd2l0aCBhIGxpbmUgY29udGFpbmluZyBpbnRlZ2VycyBSIGFuZCBDLCB3aGVyZSA0ICZsZTsgUiAmbGU7IDE1IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiByb3dzLCBhbmQgNCAmbGU7IEMgJmxlOyAxNSByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgY29sdW1ucy4gTmV4dCB3aWxsIGJlIFIgbGluZXMgcmVwcmVzZW50aW5nIHRoZSBSIHJvd3MgZnJvbSB0b3AgdG8gYm90dG9tLCB3aXRoIGVhY2ggbGluZSBoYXZpbmcgcHJlY2lzZWx5IEMgY2hhcmFjdGVycywgZnJvbSBsZWZ0LXRvLXJpZ2h0LiBGaW5hbGx5LCB0aGVyZSBpcyBhIGxpbmUgY29udGFpbmluZyBhdCBtb3N0IDUwIGNoYXJhY3RlcnMgZGVzY3JpYmluZyB0aGUgcGxheWVyJiMzOTtzIHNlcXVlbmNlIG9mIGtleXN0cm9rZXMsIHVzaW5nIHRoZSBzeW1ib2xzIFUsIEQsIEwsIGFuZCBSIHJlc3BlY3RpdmVseSBmb3IgdXAsIGRvd24sIGxlZnQsIGFuZCByaWdodC4gWW91IG11c3QgcmVhZCB0aGF0IGVudGlyZSBzZXF1ZW5jZSBmcm9tIHRoZSBpbnB1dCwgZXZlbiB0aG91Z2ggYSBwYXJ0aWN1bGFyIGdhbWUgbWlnaHQgZW5kIHN1Y2Nlc3NmdWxseSBwcmlvciB0byB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZS4gVGhlIGRhdGEgc2V0IGVuZHMgd2l0aCB0aGUgbGluZSAwIDAuPFwvcD5cclxuXHJcbjxwPldlIHdpbGwgZ3VhcmFudGVlIHRoYXQgZWFjaCBnYW1lIGhhcyBwcmVjaXNlbHkgb25lIHdvcmtlciwgYW4gZXF1YWwgbnVtYmVyIG9mIGJveGVzIGFuZCBsb2NhdGlvbnMsIGF0IGxlYXN0IG9uZSBpbml0aWFsbHkgbWlzcGxhY2VkIGJveCwgYW5kIGFuIG91dGVybW9zdCBib3VuZGFyeSBjb25zaXN0aW5nIGVudGlyZWx5IG9mIHdhbGxzLjxcL3A+XHJcbiIsIm91dHB1dCI6IjxwPkZvciBlYWNoIGdhbWUsIHlvdSBzaG91bGQgZmlyc3Qgb3V0cHV0IGEgbGluZSBpZGVudGlmeWluZyB0aGUgZ2FtZSBudW1iZXIsIGJlZ2lubmluZyBhdCAxLCBhbmQgZWl0aGVyIHRoZSB3b3JkIGNvbXBsZXRlIG9yIGluY29tcGxldGUsIGRlc2lnbmF0aW5nIHdoZXRoZXIgb3Igbm90IHRoZSBwbGF5ZXIgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCB0aGF0IGdhbWUuIEZvbGxvd2luZyB0aGF0IHNob3VsZCBiZSBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmaW5hbCBib2FyZCBjb25maWd1cmF0aW9uLjxcL3A+XHJcbiIsImhpbnQiOiIiLCJvcmlnaW5hbCI6IjEiLCJwcm9ibGVtX2xhbmdfY29kZSI6Ilx1YzYwMVx1YzViNCJ9XQ==